From 606406f8899bca94f3e06834aa8f53cba87f7c38 Mon Sep 17 00:00:00 2001 From: PedroCailleret Date: Sun, 4 Dec 2022 22:13:54 -0300 Subject: [PATCH] test: added Deposit unit tests --- .../DataTypes.sol/DataTypes.dbg.json | 2 +- .../EventAndErrors.dbg.json | 2 +- .../Reputation.sol/Reputation.dbg.json | 2 +- .../lib/auth/Owned.sol/Owned.dbg.json | 2 +- .../IReputation.sol/IReputation.dbg.json | 2 +- .../lib/mock/mockToken.sol/MockToken.dbg.json | 2 +- .../lib/mock/mockToken.sol/MockToken.json | 22 +- .../lib/tokens/ERC20.sol/ERC20.dbg.json | 2 +- .../lib/utils/Counters.sol/Counters.dbg.json | 2 +- .../MerkleProofLib.dbg.json | 2 +- .../ReentrancyGuard.dbg.json | 2 +- .../SafeTransferLib.dbg.json | 2 +- artifacts/contracts/p2pix.sol/P2PIX.dbg.json | 2 +- artifacts/contracts/p2pix.sol/P2PIX.json | 4 +- contracts/Reputation.sol | 1 + contracts/lib/mock/mockToken.sol | 12 + contracts/p2pix.sol | 5 +- .../mock/mockToken.sol/MockToken__factory.ts | 20 +- .../factories/p2pix.sol/P2PIX__factory.ts | 2 +- src/types/lib/mock/mockToken.sol/MockToken.ts | 37 +++ test/p2pix.test.ts | 245 +++++++++++++++++- test/utils/errors.ts | 3 + test/utils/fixtures.ts | 23 +- 23 files changed, 367 insertions(+), 31 deletions(-) diff --git a/artifacts/contracts/DataTypes.sol/DataTypes.dbg.json b/artifacts/contracts/DataTypes.sol/DataTypes.dbg.json index 3dcab43..910c92b 100644 --- a/artifacts/contracts/DataTypes.sol/DataTypes.dbg.json +++ b/artifacts/contracts/DataTypes.sol/DataTypes.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/EventAndErrors.sol/EventAndErrors.dbg.json b/artifacts/contracts/EventAndErrors.sol/EventAndErrors.dbg.json index 3dcab43..910c92b 100644 --- a/artifacts/contracts/EventAndErrors.sol/EventAndErrors.dbg.json +++ b/artifacts/contracts/EventAndErrors.sol/EventAndErrors.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/Reputation.sol/Reputation.dbg.json b/artifacts/contracts/Reputation.sol/Reputation.dbg.json index 3dcab43..910c92b 100644 --- a/artifacts/contracts/Reputation.sol/Reputation.dbg.json +++ b/artifacts/contracts/Reputation.sol/Reputation.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/lib/auth/Owned.sol/Owned.dbg.json b/artifacts/contracts/lib/auth/Owned.sol/Owned.dbg.json index b46c4cd..3bdc17c 100644 --- a/artifacts/contracts/lib/auth/Owned.sol/Owned.dbg.json +++ b/artifacts/contracts/lib/auth/Owned.sol/Owned.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/lib/interfaces/IReputation.sol/IReputation.dbg.json b/artifacts/contracts/lib/interfaces/IReputation.sol/IReputation.dbg.json index b46c4cd..3bdc17c 100644 --- a/artifacts/contracts/lib/interfaces/IReputation.sol/IReputation.dbg.json +++ b/artifacts/contracts/lib/interfaces/IReputation.sol/IReputation.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/lib/mock/mockToken.sol/MockToken.dbg.json b/artifacts/contracts/lib/mock/mockToken.sol/MockToken.dbg.json index b46c4cd..9130955 100644 --- a/artifacts/contracts/lib/mock/mockToken.sol/MockToken.dbg.json +++ b/artifacts/contracts/lib/mock/mockToken.sol/MockToken.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/e5d5971d8e129f0e49fa041ef3572fed.json" } diff --git a/artifacts/contracts/lib/mock/mockToken.sol/MockToken.json b/artifacts/contracts/lib/mock/mockToken.sol/MockToken.json index 52181f5..c3da5c1 100644 --- a/artifacts/contracts/lib/mock/mockToken.sol/MockToken.json +++ b/artifacts/contracts/lib/mock/mockToken.sol/MockToken.json @@ -157,6 +157,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "to", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "name", @@ -312,8 +330,8 @@ "type": "function" } ], - "bytecode": "0x60e06040523480156200001157600080fd5b5060405162000e5138038062000e51833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610a86620003cb600039600061044501526000610410015260006101490152610a866000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806370a0823111610081578063a9059cbb1161005b578063a9059cbb146101cd578063d505accf146101e0578063dd62ed3e146101f557600080fd5b806370a08231146101855780637ecebe00146101a557806395d89b41146101c557600080fd5b806323b872dd116100b257806323b872dd14610131578063313ce567146101445780633644e5151461017d57600080fd5b806306fdde03146100d9578063095ea7b3146100f757806318160ddd1461011a575b600080fd5b6100e1610220565b6040516100ee91906107de565b60405180910390f35b61010a61010536600461084f565b6102ae565b60405190151581526020016100ee565b61012360025481565b6040519081526020016100ee565b61010a61013f366004610879565b61031a565b61016b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100ee565b61012361040c565b6101236101933660046108b5565b60036020526000908152604090205481565b6101236101b33660046108b5565b60056020526000908152604090205481565b6100e1610467565b61010a6101db36600461084f565b610474565b6101f36101ee3660046108d7565b6104ec565b005b61012361020336600461094a565b600460209081526000928352604080842090915290825290205481565b6000805461022d9061097d565b80601f01602080910402602001604051908101604052809291908181526020018280546102599061097d565b80156102a65780601f1061027b576101008083540402835291602001916102a6565b820191906000526020600020905b81548152906001019060200180831161028957829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103099086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103765761035183826109b8565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b0385166000908152600360205260408120805485929061039e9084906109b8565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103f99087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104425761043d610744565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461022d9061097d565b336000908152600360205260408120805483919083906104959084906109b8565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103099086815260200190565b428410156105415760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161054d61040c565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610659573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061068f5750876001600160a01b0316816001600160a01b0316145b6106db5760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610538565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161077691906109dd565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600060208083528351808285015260005b8181101561080b578581018301518582016040015282016107ef565b8181111561081d576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461084a57600080fd5b919050565b6000806040838503121561086257600080fd5b61086b83610833565b946020939093013593505050565b60008060006060848603121561088e57600080fd5b61089784610833565b92506108a560208501610833565b9150604084013590509250925092565b6000602082840312156108c757600080fd5b6108d082610833565b9392505050565b600080600080600080600060e0888a0312156108f257600080fd5b6108fb88610833565b965061090960208901610833565b95506040880135945060608801359350608088013560ff8116811461092d57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561095d57600080fd5b61096683610833565b915061097460208401610833565b90509250929050565b600181811c9082168061099157607f821691505b602082108114156109b257634e487b7160e01b600052602260045260246000fd5b50919050565b6000828210156109d857634e487b7160e01b600052601160045260246000fd5b500390565b600080835481600182811c9150808316806109f957607f831692505b6020808410821415610a1957634e487b7160e01b86526022600452602486fd5b818015610a2d5760018114610a3e57610a6b565b60ff19861689528489019650610a6b565b60008a81526020902060005b86811015610a635781548b820152908501908301610a4a565b505084890196505b50949897505050505050505056fea164736f6c6343000809000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c806370a0823111610081578063a9059cbb1161005b578063a9059cbb146101cd578063d505accf146101e0578063dd62ed3e146101f557600080fd5b806370a08231146101855780637ecebe00146101a557806395d89b41146101c557600080fd5b806323b872dd116100b257806323b872dd14610131578063313ce567146101445780633644e5151461017d57600080fd5b806306fdde03146100d9578063095ea7b3146100f757806318160ddd1461011a575b600080fd5b6100e1610220565b6040516100ee91906107de565b60405180910390f35b61010a61010536600461084f565b6102ae565b60405190151581526020016100ee565b61012360025481565b6040519081526020016100ee565b61010a61013f366004610879565b61031a565b61016b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100ee565b61012361040c565b6101236101933660046108b5565b60036020526000908152604090205481565b6101236101b33660046108b5565b60056020526000908152604090205481565b6100e1610467565b61010a6101db36600461084f565b610474565b6101f36101ee3660046108d7565b6104ec565b005b61012361020336600461094a565b600460209081526000928352604080842090915290825290205481565b6000805461022d9061097d565b80601f01602080910402602001604051908101604052809291908181526020018280546102599061097d565b80156102a65780601f1061027b576101008083540402835291602001916102a6565b820191906000526020600020905b81548152906001019060200180831161028957829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103099086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103765761035183826109b8565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b0385166000908152600360205260408120805485929061039e9084906109b8565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103f99087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104425761043d610744565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461022d9061097d565b336000908152600360205260408120805483919083906104959084906109b8565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103099086815260200190565b428410156105415760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161054d61040c565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610659573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061068f5750876001600160a01b0316816001600160a01b0316145b6106db5760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610538565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161077691906109dd565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600060208083528351808285015260005b8181101561080b578581018301518582016040015282016107ef565b8181111561081d576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461084a57600080fd5b919050565b6000806040838503121561086257600080fd5b61086b83610833565b946020939093013593505050565b60008060006060848603121561088e57600080fd5b61089784610833565b92506108a560208501610833565b9150604084013590509250925092565b6000602082840312156108c757600080fd5b6108d082610833565b9392505050565b600080600080600080600060e0888a0312156108f257600080fd5b6108fb88610833565b965061090960208901610833565b95506040880135945060608801359350608088013560ff8116811461092d57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561095d57600080fd5b61096683610833565b915061097460208401610833565b90509250929050565b600181811c9082168061099157607f821691505b602082108114156109b257634e487b7160e01b600052602260045260246000fd5b50919050565b6000828210156109d857634e487b7160e01b600052601160045260246000fd5b500390565b600080835481600182811c9150808316806109f957607f831692505b6020808410821415610a1957634e487b7160e01b86526022600452602486fd5b818015610a2d5760018114610a3e57610a6b565b60ff19861689528489019650610a6b565b60008a81526020902060005b86811015610a635781548b820152908501908301610a4a565b505084890196505b50949897505050505050505056fea164736f6c6343000809000a", + "bytecode": "0x60e06040523480156200001157600080fd5b506040516200105238038062001052833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610c87620003cb60003960006104630152600061042e015260006101540152610c876000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108ad565b60405180910390f35b61011561011036600461091e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610948565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e366004610984565b60036020526000908152604090205481565b61012e6101be366004610984565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461091e565b610492565b6101fe6101f93660046109a6565b61050a565b005b61012e61020e366004610a19565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610a62565b610762565b6000805461024b90610b2d565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b2d565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610b7e565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610b7e565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107a8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b2d565b336000908152600360205260408120805483919083906104b3908490610b7e565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b4284101561055f5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161056b61042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610677573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106ad5750876001600160a01b0316816001600160a01b0316145b6106f95760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610556565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156107a25761079284828151811061078457610784610b95565b602002602001015184610842565b61079b81610bab565b9050610767565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516107da9190610bc6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108549190610c62565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b818110156108da578581018301518582016040015282016108be565b818111156108ec576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461091957600080fd5b919050565b6000806040838503121561093157600080fd5b61093a83610902565b946020939093013593505050565b60008060006060848603121561095d57600080fd5b61096684610902565b925061097460208501610902565b9150604084013590509250925092565b60006020828403121561099657600080fd5b61099f82610902565b9392505050565b600080600080600080600060e0888a0312156109c157600080fd5b6109ca88610902565b96506109d860208901610902565b95506040880135945060608801359350608088013560ff811681146109fc57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610a2c57600080fd5b610a3583610902565b9150610a4360208401610902565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a7557600080fd5b823567ffffffffffffffff80821115610a8d57600080fd5b818501915085601f830112610aa157600080fd5b8135602082821115610ab557610ab5610a4c565b8160051b604051601f19603f83011681018181108682111715610ada57610ada610a4c565b604052928352818301935084810182019289841115610af857600080fd5b948201945b83861015610b1d57610b0e86610902565b85529482019493820193610afd565b9997909101359750505050505050565b600181811c90821680610b4157607f821691505b60208210811415610b6257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610b9057610b90610b68565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610bbf57610bbf610b68565b5060010190565b600080835481600182811c915080831680610be257607f831692505b6020808410821415610c0257634e487b7160e01b86526022600452602486fd5b818015610c165760018114610c2757610c54565b60ff19861689528489019650610c54565b60008a81526020902060005b86811015610c4c5781548b820152908501908301610c33565b505084890196505b509498975050505050505050565b60008219821115610c7557610c75610b68565b50019056fea164736f6c6343000809000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108ad565b60405180910390f35b61011561011036600461091e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610948565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e366004610984565b60036020526000908152604090205481565b61012e6101be366004610984565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461091e565b610492565b6101fe6101f93660046109a6565b61050a565b005b61012e61020e366004610a19565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610a62565b610762565b6000805461024b90610b2d565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b2d565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610b7e565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610b7e565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107a8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b2d565b336000908152600360205260408120805483919083906104b3908490610b7e565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b4284101561055f5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161056b61042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610677573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106ad5750876001600160a01b0316816001600160a01b0316145b6106f95760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610556565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156107a25761079284828151811061078457610784610b95565b602002602001015184610842565b61079b81610bab565b9050610767565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516107da9190610bc6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108549190610c62565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b818110156108da578581018301518582016040015282016108be565b818111156108ec576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461091957600080fd5b919050565b6000806040838503121561093157600080fd5b61093a83610902565b946020939093013593505050565b60008060006060848603121561095d57600080fd5b61096684610902565b925061097460208501610902565b9150604084013590509250925092565b60006020828403121561099657600080fd5b61099f82610902565b9392505050565b600080600080600080600060e0888a0312156109c157600080fd5b6109ca88610902565b96506109d860208901610902565b95506040880135945060608801359350608088013560ff811681146109fc57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610a2c57600080fd5b610a3583610902565b9150610a4360208401610902565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a7557600080fd5b823567ffffffffffffffff80821115610a8d57600080fd5b818501915085601f830112610aa157600080fd5b8135602082821115610ab557610ab5610a4c565b8160051b604051601f19603f83011681018181108682111715610ada57610ada610a4c565b604052928352818301935084810182019289841115610af857600080fd5b948201945b83861015610b1d57610b0e86610902565b85529482019493820193610afd565b9997909101359750505050505050565b600181811c90821680610b4157607f821691505b60208210811415610b6257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610b9057610b90610b68565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610bbf57610bbf610b68565b5060010190565b600080835481600182811c915080831680610be257607f831692505b6020808410821415610c0257634e487b7160e01b86526022600452602486fd5b818015610c165760018114610c2757610c54565b60ff19861689528489019650610c54565b60008a81526020902060005b86811015610c4c5781548b820152908501908301610c33565b505084890196505b509498975050505050505050565b60008219821115610c7557610c75610b68565b50019056fea164736f6c6343000809000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/lib/tokens/ERC20.sol/ERC20.dbg.json b/artifacts/contracts/lib/tokens/ERC20.sol/ERC20.dbg.json index b46c4cd..3bdc17c 100644 --- a/artifacts/contracts/lib/tokens/ERC20.sol/ERC20.dbg.json +++ b/artifacts/contracts/lib/tokens/ERC20.sol/ERC20.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/lib/utils/Counters.sol/Counters.dbg.json b/artifacts/contracts/lib/utils/Counters.sol/Counters.dbg.json index b46c4cd..3bdc17c 100644 --- a/artifacts/contracts/lib/utils/Counters.sol/Counters.dbg.json +++ b/artifacts/contracts/lib/utils/Counters.sol/Counters.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/lib/utils/MerkleProofLib.sol/MerkleProofLib.dbg.json b/artifacts/contracts/lib/utils/MerkleProofLib.sol/MerkleProofLib.dbg.json index b46c4cd..3bdc17c 100644 --- a/artifacts/contracts/lib/utils/MerkleProofLib.sol/MerkleProofLib.dbg.json +++ b/artifacts/contracts/lib/utils/MerkleProofLib.sol/MerkleProofLib.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/lib/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json b/artifacts/contracts/lib/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json index b46c4cd..3bdc17c 100644 --- a/artifacts/contracts/lib/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +++ b/artifacts/contracts/lib/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/lib/utils/SafeTransferLib.sol/SafeTransferLib.dbg.json b/artifacts/contracts/lib/utils/SafeTransferLib.sol/SafeTransferLib.dbg.json index b46c4cd..3bdc17c 100644 --- a/artifacts/contracts/lib/utils/SafeTransferLib.sol/SafeTransferLib.dbg.json +++ b/artifacts/contracts/lib/utils/SafeTransferLib.sol/SafeTransferLib.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json index 3dcab43..910c92b 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/59c1a703d41bd7d2c615a37cdb738573.json" + "buildInfo": "../../build-info/ce60783a904758b510bc61bc47947601.json" } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.json b/artifacts/contracts/p2pix.sol/P2PIX.json index 8ceeacf..3d3755d 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.json @@ -854,8 +854,8 @@ "type": "receive" } ], - "bytecode": "0x60806040526001805560405162002814380380620028148339810160408190526200002a916200049d565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000620565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005bb565b60200260200101516200038760201b60201c565b6000908152600660205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005d1565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083016020830282015b8083146200037f578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003d857620003d862000397565b604052919050565b60006001600160401b03821115620003fc57620003fc62000397565b5060051b60200190565b6001600160a01b03811681146200041c57600080fd5b50565b600082601f8301126200043157600080fd5b815160206200044a6200044483620003e0565b620003ad565b82815260059290921b840181019181810190868411156200046a57600080fd5b8286015b8481101562000492578051620004848162000406565b83529183019183016200046e565b509695505050505050565b600080600080600060a08688031215620004b657600080fd5b8551602080880151919650906001600160401b0380821115620004d857600080fd5b620004e68a838b016200041f565b965060408901519150620004fa8262000406565b6060890151919550808211156200051057600080fd5b6200051e8a838b016200041f565b945060808901519150808211156200053557600080fd5b508701601f810189136200054857600080fd5b8051620005596200044482620003e0565b81815260059190911b8201830190838101908b8311156200057957600080fd5b928401925b82841015620005a95783518015158114620005995760008081fd5b825292840192908401906200057e565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620006145783516001600160a01b031683529284019291840191600101620005ed565b50909695505050505050565b6121e480620006306000396000f3fe60806040526004361061018f5760003560e01c806377cd38a4116100d65780638e2a3d361161007f578063c52164c611610059578063c52164c614610539578063d6e8b97314610559578063f7d0e04b1461057957600080fd5b80638e2a3d36146104c25780639872dbfe146104f357806398a268711461050957600080fd5b80638652b37e116100b05780638652b37e1461044a5780638da5cb5b1461046a5780638e2749d6146104a257600080fd5b806377cd38a4146103dd5780637f94f65d1461040a5780638642b5c31461042a57600080fd5b806336317972116101385780635fd8c710116101125780635fd8c7101461036857806369cc6af41461037d57806372fada5c146103bd57600080fd5b806336317972146102fd5780634b2ae9801461031d578063574983c81461034857600080fd5b806316d722401161016957806316d722401461021d57806329cc7d10146102c65780632dfdf0b5146102e657600080fd5b8063049373201461019b5780630d2a2d44146101db57806313af4035146101fd57600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101c86101b6366004611ae0565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004611bed565b610599565b005b34801561020957600080fd5b506101fb610218366004611c2a565b61068a565b34801561022957600080fd5b50610282610238366004611ae0565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101d2565b3480156102d257600080fd5b506101c86102e1366004611c47565b61071e565b3480156102f257600080fd5b506003546101c89081565b34801561030957600080fd5b506101fb610318366004611d24565b6108fc565b34801561032957600080fd5b506101c8610338366004611c2a565b600c1b611000600160ac1b031690565b34801561035457600080fd5b506101fb610363366004611ae0565b6109bc565b34801561037457600080fd5b506101fb610a3a565b34801561038957600080fd5b506103ad610398366004611c2a565b600b6020526000908152604090205460ff1681565b60405190151581526020016101d2565b3480156103c957600080fd5b506101fb6103d8366004611ae0565b610ac4565b3480156103e957600080fd5b506101c86103f8366004611ae0565b600a6020526000908152604090205481565b34801561041657600080fd5b506101fb610425366004611d70565b610b4c565b34801561043657600080fd5b506101fb610445366004611d9c565b610b97565b34801561045657600080fd5b506101c8610465366004611e00565b610f65565b34801561047657600080fd5b5060005461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101d2565b3480156104ae57600080fd5b506101fb6104bd366004611eb4565b6112a7565b3480156104ce57600080fd5b506104e26104dd366004611ae0565b6113ff565b6040516101d2959493929190611ef6565b3480156104ff57600080fd5b506101c860045481565b34801561051557600080fd5b506103ad610524366004611ae0565b60066020526000908152604090205460ff1681565b34801561054557600080fd5b5060025461048a906001600160a01b031681565b34801561056557600080fd5b506101fb610574366004611f83565b6114c9565b34801561058557600080fd5b506101fb610594366004611c2a565b6115a1565b6000546001600160a01b031633146105e75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b8082101561064e57600061062784848151811061060c5761060c61204d565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff191660019081179091559290920191506105ed565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d78160405161067f9190612063565b60405180910390a150565b6000546001600160a01b031633146106d35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff1661075957604051630abc194760e11b815260040160405180910390fd5b610761611628565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a166040820152600160609091015290506107d6611678565b83156107e6576107e63385610b4c565b6000838152600760209081526040909120825181558183015180518493610814926001850192910190611a47565b5060408201516002820180546001600160a01b039283166001600160a01b03199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556108919080546001019055565b61089d8233308a6116a3565b6108a660018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b610904611678565b61090d8361173a565b61091782826112a7565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109475761094784610ac4565b600381015481546000835560028301546001600160a01b03928316926109709184911683611777565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506109b760018055565b505050565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b85118160405161067f91815260200190565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b47610a8e3382611803565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910161067f565b610acd8161173a565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6001600160a01b038216331415610b7e57600c9190911b611000600160ac1b03166000908152600a6020526040902055565b6040516342e8fb9360e11b815260040160405180910390fd5b610b9f611678565b6000868152600860205260409020600381015443101580610bc257506002810154155b15610be0576040516331da482760e11b815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610c1092600186019290918b91016120eb565b604051602081830303815290604052805190602001209050600081604051602001610c6791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610cb557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610d299060019060a0016020604051602081039080840390855afa158015610d0d573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610d5b57604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b0390921691600091610d82916121a8565b60006002890181905560038901819055868152600960205260409020805460ff191660011790556006880154909150336001600160a01b0390911614610e3d576001870154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610df39084906121bf565b909155505060028701546006880154600590600090600c1b611000600160ac1b031681526020019081526020016000206000828254610e3291906121bf565b90915550610e839050565b86600201548760010154610e5191906121bf565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610e7d9084906121bf565b90915550505b6004870154610e9d9083906001600160a01b031683611777565b600187015415610f095760058701546001600160a01b038d8116911614610efa576005870154600180890154610ee29285926001600160a01b0390911691901c611777565b610ef5828d60018a60010154901c611777565b610f09565b610f09828d8960010154611777565b60048701546040518e81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a250505050505050610f5d60018055565b505050505050565b6000610f6f611678565b610f7983836112a7565b60008a81526007602052604090206003810154600160a01b900460ff16610fb357604051635972996f60e11b815260040160405180910390fd5b8054871115610fd5576040516308aeed0f60e21b815260040160405180910390fd5b610fe08b888c61185e565b915060006040518060e001604052808d81526020018a81526020018981526020016004544361100f91906121bf565b81526001600160a01b03808e1660208301528c1660408201523360609091015290508515611150576002820154600c1b611000600160ac1b03166000908152600a60205260409020546110669088908890336118e2565b60008381526008602090815260408083208451815591840151600183015583015160028201556060830151600382015560808301516004820180546001600160a01b039283166001600160a01b03199182161790915560a085015160058401805491841691831691909117905560c0850151600690930180549390921692169190911790558254899184916110fc9084906121a8565b9091555050805160408051918252602082018a905284916001600160a01b038e16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a35050611291565b611000600160ac1b0333600c1b166000908152600560205260408120549061117782611914565b9050808360400151111561119e57604051630e0c7c2360e11b815260040160405180910390fd5b60008581526008602090815260408083208651815591860151600183015585015160028201556060850151600382015560808501516004820180546001600160a01b039283166001600160a01b03199182161790915560a087015160058401805491841691831691909117905560c08701516006909301805493909216921691909117905584548b9186916112349084906121a8565b92505081905550848d6001600160a01b03167f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea85600001518d604051611284929190918252602082015260400190565b60405180910390a3505050505b61129a60018055565b9998505050505050505050565b6000815b808210156113e3576000600860008686868181106112cb576112cb61204d565b90506020020135815260200190815260200160002090506112eb816119d0565b60028101548154600090815260076020526040812080549091906113109084906121bf565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c6064811161136457600082815260056020526040902060649055611376565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff8888888181106113b7576113b761204d565b905060200201356040516113cd91815260200190565b60405180910390a28460010194505050506112ab565b808210156113f95763dfb035c96000526004601cfd5b50505050565b60076020526000908152604090208054600182018054919291611421906120b0565b80601f016020809104026020016040519081016040528092919081815260200182805461144d906120b0565b801561149a5780601f1061146f5761010080835404028352916020019161149a565b820191906000526020600020905b81548152906001019060200180831161147d57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b031633146115125760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b8151806115275763df9578836000526004601cfd5b8151811461153d5763ff633a386000526004601cfd5b60208301602083016020830282015b808314610f5d578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915061154c565b6000546001600160a01b031633146115ea5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200161067f565b600061163360035490565b600081815260076020526040902060030154909150600160a01b900460ff161515600114156116755760405163c44bd76560e01b815260040160405180910390fd5b90565b6001546002141561169c5760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806117335760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016105de565b5050505050565b6000818152600760205260409020600201546001600160a01b03163314611774576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806113f95760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016105de565b600080600080600085875af19050806109b75760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016105de565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff191690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106118db5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6118f78484846001600160a01b038516611a03565b6113f957604051631dc23a5f60e11b815260040160405180910390fd5b600080634d2b179160e01b8360405160240161193291815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826119c75763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541015806119e557506002810154155b156117745760405163d0404f8560e01b815260040160405180910390fd5b60008315611a3f578360051b8501855b803580851160051b94855260209485185260406000209301818110611a3757611a3c565b611a13565b50505b501492915050565b828054611a53906120b0565b90600052602060002090601f016020900481019282611a755760008555611abb565b82601f10611a8e57805160ff1916838001178555611abb565b82800160010185558215611abb579182015b82811115611abb578251825591602001919060010190611aa0565b50611ac7929150611acb565b5090565b5b80821115611ac75760008155600101611acc565b600060208284031215611af257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b3857611b38611af9565b604052919050565b600067ffffffffffffffff821115611b5a57611b5a611af9565b5060051b60200190565b6001600160a01b038116811461177457600080fd5b600082601f830112611b8a57600080fd5b81356020611b9f611b9a83611b40565b611b0f565b82815260059290921b84018101918181019086841115611bbe57600080fd5b8286015b84811015611be2578035611bd581611b64565b8352918301918301611bc2565b509695505050505050565b600060208284031215611bff57600080fd5b813567ffffffffffffffff811115611c1657600080fd5b611c2284828501611b79565b949350505050565b600060208284031215611c3c57600080fd5b81356118db81611b64565b600080600080600060808688031215611c5f57600080fd5b8535611c6a81611b64565b945060208601359350604086013567ffffffffffffffff80821115611c8e57600080fd5b818801915088601f830112611ca257600080fd5b813581811115611cb157600080fd5b896020828501011115611cc357600080fd5b96999598505060200195606001359392505050565b60008083601f840112611cea57600080fd5b50813567ffffffffffffffff811115611d0257600080fd5b6020830191508360208260051b8501011115611d1d57600080fd5b9250929050565b600080600060408486031215611d3957600080fd5b83359250602084013567ffffffffffffffff811115611d5757600080fd5b611d6386828701611cd8565b9497909650939450505050565b60008060408385031215611d8357600080fd5b8235611d8e81611b64565b946020939093013593505050565b60008060008060008060c08789031215611db557600080fd5b863595506020870135611dc781611b64565b945060408701359350606087013592506080870135915060a087013560ff81168114611df257600080fd5b809150509295509295509295565b600080600080600080600080600060e08a8c031215611e1e57600080fd5b8935985060208a0135611e3081611b64565b975060408a0135611e4081611b64565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff80821115611e6b57600080fd5b611e778d838e01611cd8565b909650945060c08c0135915080821115611e9057600080fd5b50611e9d8c828d01611cd8565b915080935050809150509295985092959850929598565b60008060208385031215611ec757600080fd5b823567ffffffffffffffff811115611ede57600080fd5b611eea85828601611cd8565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b81811015611f2a5788810183015185820160c001528201611f0e565b81811115611f3c57600060c083870101525b50601f01601f1916830160c0019150611f62905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b60008060408385031215611f9657600080fd5b823567ffffffffffffffff80821115611fae57600080fd5b611fba86838701611b79565b9350602091508185013581811115611fd157600080fd5b85019050601f81018613611fe457600080fd5b8035611ff2611b9a82611b40565b81815260059190911b8201830190838101908883111561201157600080fd5b928401925b8284101561203e578335801515811461202f5760008081fd5b82529284019290840190612016565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156120a45783516001600160a01b03168352928401929184019160010161207f565b50909695505050505050565b600181811c908216806120c457607f821691505b602082108114156120e557634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061210757607f831692505b602080841082141561212757634e487b7160e01b86526022600452602486fd5b81801561213b576001811461214c57612179565b60ff19861689528489019650612179565b60008c81526020902060005b868110156121715781548b820152908501908301612158565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121ba576121ba612192565b500390565b600082198211156121d2576121d2612192565b50019056fea164736f6c6343000809000a", - "deployedBytecode": "0x60806040526004361061018f5760003560e01c806377cd38a4116100d65780638e2a3d361161007f578063c52164c611610059578063c52164c614610539578063d6e8b97314610559578063f7d0e04b1461057957600080fd5b80638e2a3d36146104c25780639872dbfe146104f357806398a268711461050957600080fd5b80638652b37e116100b05780638652b37e1461044a5780638da5cb5b1461046a5780638e2749d6146104a257600080fd5b806377cd38a4146103dd5780637f94f65d1461040a5780638642b5c31461042a57600080fd5b806336317972116101385780635fd8c710116101125780635fd8c7101461036857806369cc6af41461037d57806372fada5c146103bd57600080fd5b806336317972146102fd5780634b2ae9801461031d578063574983c81461034857600080fd5b806316d722401161016957806316d722401461021d57806329cc7d10146102c65780632dfdf0b5146102e657600080fd5b8063049373201461019b5780630d2a2d44146101db57806313af4035146101fd57600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101c86101b6366004611ae0565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004611bed565b610599565b005b34801561020957600080fd5b506101fb610218366004611c2a565b61068a565b34801561022957600080fd5b50610282610238366004611ae0565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101d2565b3480156102d257600080fd5b506101c86102e1366004611c47565b61071e565b3480156102f257600080fd5b506003546101c89081565b34801561030957600080fd5b506101fb610318366004611d24565b6108fc565b34801561032957600080fd5b506101c8610338366004611c2a565b600c1b611000600160ac1b031690565b34801561035457600080fd5b506101fb610363366004611ae0565b6109bc565b34801561037457600080fd5b506101fb610a3a565b34801561038957600080fd5b506103ad610398366004611c2a565b600b6020526000908152604090205460ff1681565b60405190151581526020016101d2565b3480156103c957600080fd5b506101fb6103d8366004611ae0565b610ac4565b3480156103e957600080fd5b506101c86103f8366004611ae0565b600a6020526000908152604090205481565b34801561041657600080fd5b506101fb610425366004611d70565b610b4c565b34801561043657600080fd5b506101fb610445366004611d9c565b610b97565b34801561045657600080fd5b506101c8610465366004611e00565b610f65565b34801561047657600080fd5b5060005461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101d2565b3480156104ae57600080fd5b506101fb6104bd366004611eb4565b6112a7565b3480156104ce57600080fd5b506104e26104dd366004611ae0565b6113ff565b6040516101d2959493929190611ef6565b3480156104ff57600080fd5b506101c860045481565b34801561051557600080fd5b506103ad610524366004611ae0565b60066020526000908152604090205460ff1681565b34801561054557600080fd5b5060025461048a906001600160a01b031681565b34801561056557600080fd5b506101fb610574366004611f83565b6114c9565b34801561058557600080fd5b506101fb610594366004611c2a565b6115a1565b6000546001600160a01b031633146105e75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b8082101561064e57600061062784848151811061060c5761060c61204d565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff191660019081179091559290920191506105ed565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d78160405161067f9190612063565b60405180910390a150565b6000546001600160a01b031633146106d35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff1661075957604051630abc194760e11b815260040160405180910390fd5b610761611628565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a166040820152600160609091015290506107d6611678565b83156107e6576107e63385610b4c565b6000838152600760209081526040909120825181558183015180518493610814926001850192910190611a47565b5060408201516002820180546001600160a01b039283166001600160a01b03199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556108919080546001019055565b61089d8233308a6116a3565b6108a660018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b610904611678565b61090d8361173a565b61091782826112a7565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109475761094784610ac4565b600381015481546000835560028301546001600160a01b03928316926109709184911683611777565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506109b760018055565b505050565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b85118160405161067f91815260200190565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b47610a8e3382611803565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910161067f565b610acd8161173a565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6001600160a01b038216331415610b7e57600c9190911b611000600160ac1b03166000908152600a6020526040902055565b6040516342e8fb9360e11b815260040160405180910390fd5b610b9f611678565b6000868152600860205260409020600381015443101580610bc257506002810154155b15610be0576040516331da482760e11b815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610c1092600186019290918b91016120eb565b604051602081830303815290604052805190602001209050600081604051602001610c6791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610cb557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610d299060019060a0016020604051602081039080840390855afa158015610d0d573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610d5b57604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b0390921691600091610d82916121a8565b60006002890181905560038901819055868152600960205260409020805460ff191660011790556006880154909150336001600160a01b0390911614610e3d576001870154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610df39084906121bf565b909155505060028701546006880154600590600090600c1b611000600160ac1b031681526020019081526020016000206000828254610e3291906121bf565b90915550610e839050565b86600201548760010154610e5191906121bf565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610e7d9084906121bf565b90915550505b6004870154610e9d9083906001600160a01b031683611777565b600187015415610f095760058701546001600160a01b038d8116911614610efa576005870154600180890154610ee29285926001600160a01b0390911691901c611777565b610ef5828d60018a60010154901c611777565b610f09565b610f09828d8960010154611777565b60048701546040518e81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a250505050505050610f5d60018055565b505050505050565b6000610f6f611678565b610f7983836112a7565b60008a81526007602052604090206003810154600160a01b900460ff16610fb357604051635972996f60e11b815260040160405180910390fd5b8054871115610fd5576040516308aeed0f60e21b815260040160405180910390fd5b610fe08b888c61185e565b915060006040518060e001604052808d81526020018a81526020018981526020016004544361100f91906121bf565b81526001600160a01b03808e1660208301528c1660408201523360609091015290508515611150576002820154600c1b611000600160ac1b03166000908152600a60205260409020546110669088908890336118e2565b60008381526008602090815260408083208451815591840151600183015583015160028201556060830151600382015560808301516004820180546001600160a01b039283166001600160a01b03199182161790915560a085015160058401805491841691831691909117905560c0850151600690930180549390921692169190911790558254899184916110fc9084906121a8565b9091555050805160408051918252602082018a905284916001600160a01b038e16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a35050611291565b611000600160ac1b0333600c1b166000908152600560205260408120549061117782611914565b9050808360400151111561119e57604051630e0c7c2360e11b815260040160405180910390fd5b60008581526008602090815260408083208651815591860151600183015585015160028201556060850151600382015560808501516004820180546001600160a01b039283166001600160a01b03199182161790915560a087015160058401805491841691831691909117905560c08701516006909301805493909216921691909117905584548b9186916112349084906121a8565b92505081905550848d6001600160a01b03167f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea85600001518d604051611284929190918252602082015260400190565b60405180910390a3505050505b61129a60018055565b9998505050505050505050565b6000815b808210156113e3576000600860008686868181106112cb576112cb61204d565b90506020020135815260200190815260200160002090506112eb816119d0565b60028101548154600090815260076020526040812080549091906113109084906121bf565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c6064811161136457600082815260056020526040902060649055611376565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff8888888181106113b7576113b761204d565b905060200201356040516113cd91815260200190565b60405180910390a28460010194505050506112ab565b808210156113f95763dfb035c96000526004601cfd5b50505050565b60076020526000908152604090208054600182018054919291611421906120b0565b80601f016020809104026020016040519081016040528092919081815260200182805461144d906120b0565b801561149a5780601f1061146f5761010080835404028352916020019161149a565b820191906000526020600020905b81548152906001019060200180831161147d57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b031633146115125760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b8151806115275763df9578836000526004601cfd5b8151811461153d5763ff633a386000526004601cfd5b60208301602083016020830282015b808314610f5d578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915061154c565b6000546001600160a01b031633146115ea5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200161067f565b600061163360035490565b600081815260076020526040902060030154909150600160a01b900460ff161515600114156116755760405163c44bd76560e01b815260040160405180910390fd5b90565b6001546002141561169c5760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806117335760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016105de565b5050505050565b6000818152600760205260409020600201546001600160a01b03163314611774576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806113f95760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016105de565b600080600080600085875af19050806109b75760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016105de565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff191690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106118db5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6118f78484846001600160a01b038516611a03565b6113f957604051631dc23a5f60e11b815260040160405180910390fd5b600080634d2b179160e01b8360405160240161193291815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826119c75763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541015806119e557506002810154155b156117745760405163d0404f8560e01b815260040160405180910390fd5b60008315611a3f578360051b8501855b803580851160051b94855260209485185260406000209301818110611a3757611a3c565b611a13565b50505b501492915050565b828054611a53906120b0565b90600052602060002090601f016020900481019282611a755760008555611abb565b82601f10611a8e57805160ff1916838001178555611abb565b82800160010185558215611abb579182015b82811115611abb578251825591602001919060010190611aa0565b50611ac7929150611acb565b5090565b5b80821115611ac75760008155600101611acc565b600060208284031215611af257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b3857611b38611af9565b604052919050565b600067ffffffffffffffff821115611b5a57611b5a611af9565b5060051b60200190565b6001600160a01b038116811461177457600080fd5b600082601f830112611b8a57600080fd5b81356020611b9f611b9a83611b40565b611b0f565b82815260059290921b84018101918181019086841115611bbe57600080fd5b8286015b84811015611be2578035611bd581611b64565b8352918301918301611bc2565b509695505050505050565b600060208284031215611bff57600080fd5b813567ffffffffffffffff811115611c1657600080fd5b611c2284828501611b79565b949350505050565b600060208284031215611c3c57600080fd5b81356118db81611b64565b600080600080600060808688031215611c5f57600080fd5b8535611c6a81611b64565b945060208601359350604086013567ffffffffffffffff80821115611c8e57600080fd5b818801915088601f830112611ca257600080fd5b813581811115611cb157600080fd5b896020828501011115611cc357600080fd5b96999598505060200195606001359392505050565b60008083601f840112611cea57600080fd5b50813567ffffffffffffffff811115611d0257600080fd5b6020830191508360208260051b8501011115611d1d57600080fd5b9250929050565b600080600060408486031215611d3957600080fd5b83359250602084013567ffffffffffffffff811115611d5757600080fd5b611d6386828701611cd8565b9497909650939450505050565b60008060408385031215611d8357600080fd5b8235611d8e81611b64565b946020939093013593505050565b60008060008060008060c08789031215611db557600080fd5b863595506020870135611dc781611b64565b945060408701359350606087013592506080870135915060a087013560ff81168114611df257600080fd5b809150509295509295509295565b600080600080600080600080600060e08a8c031215611e1e57600080fd5b8935985060208a0135611e3081611b64565b975060408a0135611e4081611b64565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff80821115611e6b57600080fd5b611e778d838e01611cd8565b909650945060c08c0135915080821115611e9057600080fd5b50611e9d8c828d01611cd8565b915080935050809150509295985092959850929598565b60008060208385031215611ec757600080fd5b823567ffffffffffffffff811115611ede57600080fd5b611eea85828601611cd8565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b81811015611f2a5788810183015185820160c001528201611f0e565b81811115611f3c57600060c083870101525b50601f01601f1916830160c0019150611f62905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b60008060408385031215611f9657600080fd5b823567ffffffffffffffff80821115611fae57600080fd5b611fba86838701611b79565b9350602091508185013581811115611fd157600080fd5b85019050601f81018613611fe457600080fd5b8035611ff2611b9a82611b40565b81815260059190911b8201830190838101908883111561201157600080fd5b928401925b8284101561203e578335801515811461202f5760008081fd5b82529284019290840190612016565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156120a45783516001600160a01b03168352928401929184019160010161207f565b50909695505050505050565b600181811c908216806120c457607f821691505b602082108114156120e557634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061210757607f831692505b602080841082141561212757634e487b7160e01b86526022600452602486fd5b81801561213b576001811461214c57612179565b60ff19861689528489019650612179565b60008c81526020902060005b868110156121715781548b820152908501908301612158565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121ba576121ba612192565b500390565b600082198211156121d2576121d2612192565b50019056fea164736f6c6343000809000a", + "bytecode": "0x60806040526001805560405162002825380380620028258339810160408190526200002a916200049d565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000620565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005bb565b60200260200101516200038760201b60201c565b6000908152600660205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005d1565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083016020830282015b8083146200037f578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003d857620003d862000397565b604052919050565b60006001600160401b03821115620003fc57620003fc62000397565b5060051b60200190565b6001600160a01b03811681146200041c57600080fd5b50565b600082601f8301126200043157600080fd5b815160206200044a6200044483620003e0565b620003ad565b82815260059290921b840181019181810190868411156200046a57600080fd5b8286015b8481101562000492578051620004848162000406565b83529183019183016200046e565b509695505050505050565b600080600080600060a08688031215620004b657600080fd5b8551602080880151919650906001600160401b0380821115620004d857600080fd5b620004e68a838b016200041f565b965060408901519150620004fa8262000406565b6060890151919550808211156200051057600080fd5b6200051e8a838b016200041f565b945060808901519150808211156200053557600080fd5b508701601f810189136200054857600080fd5b8051620005596200044482620003e0565b81815260059190911b8201830190838101908b8311156200057957600080fd5b928401925b82841015620005a95783518015158114620005995760008081fd5b825292840192908401906200057e565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620006145783516001600160a01b031683529284019291840191600101620005ed565b50909695505050505050565b6121f580620006306000396000f3fe60806040526004361061018f5760003560e01c806377cd38a4116100d65780638e2a3d361161007f578063c52164c611610059578063c52164c614610539578063d6e8b97314610559578063f7d0e04b1461057957600080fd5b80638e2a3d36146104c25780639872dbfe146104f357806398a268711461050957600080fd5b80638652b37e116100b05780638652b37e1461044a5780638da5cb5b1461046a5780638e2749d6146104a257600080fd5b806377cd38a4146103dd5780637f94f65d1461040a5780638642b5c31461042a57600080fd5b806336317972116101385780635fd8c710116101125780635fd8c7101461036857806369cc6af41461037d57806372fada5c146103bd57600080fd5b806336317972146102fd5780634b2ae9801461031d578063574983c81461034857600080fd5b806316d722401161016957806316d722401461021d57806329cc7d10146102c65780632dfdf0b5146102e657600080fd5b8063049373201461019b5780630d2a2d44146101db57806313af4035146101fd57600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101c86101b6366004611af1565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004611bfe565b610599565b005b34801561020957600080fd5b506101fb610218366004611c3b565b61068a565b34801561022957600080fd5b50610282610238366004611af1565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101d2565b3480156102d257600080fd5b506101c86102e1366004611c58565b61071e565b3480156102f257600080fd5b506003546101c89081565b34801561030957600080fd5b506101fb610318366004611d35565b6108fc565b34801561032957600080fd5b506101c8610338366004611c3b565b600c1b611000600160ac1b031690565b34801561035457600080fd5b506101fb610363366004611af1565b6109bc565b34801561037457600080fd5b506101fb610a3a565b34801561038957600080fd5b506103ad610398366004611c3b565b600b6020526000908152604090205460ff1681565b60405190151581526020016101d2565b3480156103c957600080fd5b506101fb6103d8366004611af1565b610ac4565b3480156103e957600080fd5b506101c86103f8366004611af1565b600a6020526000908152604090205481565b34801561041657600080fd5b506101fb610425366004611d81565b610b4c565b34801561043657600080fd5b506101fb610445366004611dad565b610b97565b34801561045657600080fd5b506101c8610465366004611e11565b610f65565b34801561047657600080fd5b5060005461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101d2565b3480156104ae57600080fd5b506101fb6104bd366004611ec5565b6112b8565b3480156104ce57600080fd5b506104e26104dd366004611af1565b611410565b6040516101d2959493929190611f07565b3480156104ff57600080fd5b506101c860045481565b34801561051557600080fd5b506103ad610524366004611af1565b60066020526000908152604090205460ff1681565b34801561054557600080fd5b5060025461048a906001600160a01b031681565b34801561056557600080fd5b506101fb610574366004611f94565b6114da565b34801561058557600080fd5b506101fb610594366004611c3b565b6115b2565b6000546001600160a01b031633146105e75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b8082101561064e57600061062784848151811061060c5761060c61205e565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff191660019081179091559290920191506105ed565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d78160405161067f9190612074565b60405180910390a150565b6000546001600160a01b031633146106d35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff1661075957604051630abc194760e11b815260040160405180910390fd5b610761611639565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a166040820152600160609091015290506107d6611689565b83156107e6576107e63385610b4c565b6000838152600760209081526040909120825181558183015180518493610814926001850192910190611a58565b5060408201516002820180546001600160a01b039283166001600160a01b03199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556108919080546001019055565b61089d8233308a6116b4565b6108a660018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b610904611689565b61090d8361174b565b61091782826112b8565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109475761094784610ac4565b600381015481546000835560028301546001600160a01b03928316926109709184911683611788565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506109b760018055565b505050565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b85118160405161067f91815260200190565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b47610a8e3382611814565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910161067f565b610acd8161174b565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6001600160a01b038216331415610b7e57600c9190911b611000600160ac1b03166000908152600a6020526040902055565b6040516342e8fb9360e11b815260040160405180910390fd5b610b9f611689565b6000868152600860205260409020600381015443101580610bc257506002810154155b15610be0576040516331da482760e11b815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610c1092600186019290918b91016120fc565b604051602081830303815290604052805190602001209050600081604051602001610c6791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610cb557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610d299060019060a0016020604051602081039080840390855afa158015610d0d573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610d5b57604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b0390921691600091610d82916121b9565b60006002890181905560038901819055868152600960205260409020805460ff191660011790556006880154909150336001600160a01b0390911614610e3d576001870154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610df39084906121d0565b909155505060028701546006880154600590600090600c1b611000600160ac1b031681526020019081526020016000206000828254610e3291906121d0565b90915550610e839050565b86600201548760010154610e5191906121d0565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610e7d9084906121d0565b90915550505b6004870154610e9d9083906001600160a01b031683611788565b600187015415610f095760058701546001600160a01b038d8116911614610efa576005870154600180890154610ee29285926001600160a01b0390911691901c611788565b610ef5828d60018a60010154901c611788565b610f09565b610f09828d8960010154611788565b60048701546040518e81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a250505050505050610f5d60018055565b505050505050565b6000610f6f611689565b610f7983836112b8565b60008a81526007602052604090206003810154600160a01b900460ff16610fb357604051635972996f60e11b815260040160405180910390fd5b8054871115610fd5576040516308aeed0f60e21b815260040160405180910390fd5b610fe08b888c61186f565b915060006040518060e001604052808d81526020018a81526020018981526020016004544361100f91906121d0565b81526001600160a01b03808e1660208301528c1660408201523360609091015290508515611150576002820154600c1b611000600160ac1b03166000908152600a60205260409020546110669088908890336118f3565b60008381526008602090815260408083208451815591840151600183015583015160028201556060830151600382015560808301516004820180546001600160a01b039283166001600160a01b03199182161790915560a085015160058401805491841691831691909117905560c0850151600690930180549390921692169190911790558254899184916110fc9084906121b9565b9091555050805160408051918252602082018a905284916001600160a01b038e16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a350506112a2565b611000600160ac1b0333600c1b166000908152600560205260408120549061117782611925565b905080836040015111806111915750620f42408360400151115b156111af57604051630e0c7c2360e11b815260040160405180910390fd5b60008581526008602090815260408083208651815591860151600183015585015160028201556060850151600382015560808501516004820180546001600160a01b039283166001600160a01b03199182161790915560a087015160058401805491841691831691909117905560c08701516006909301805493909216921691909117905584548b9186916112459084906121b9565b92505081905550848d6001600160a01b03167f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea85600001518d604051611295929190918252602082015260400190565b60405180910390a3505050505b6112ab60018055565b9998505050505050505050565b6000815b808210156113f4576000600860008686868181106112dc576112dc61205e565b90506020020135815260200190815260200160002090506112fc816119e1565b60028101548154600090815260076020526040812080549091906113219084906121d0565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c6064811161137557600082815260056020526040902060649055611387565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff8888888181106113c8576113c861205e565b905060200201356040516113de91815260200190565b60405180910390a28460010194505050506112bc565b8082101561140a5763dfb035c96000526004601cfd5b50505050565b60076020526000908152604090208054600182018054919291611432906120c1565b80601f016020809104026020016040519081016040528092919081815260200182805461145e906120c1565b80156114ab5780601f10611480576101008083540402835291602001916114ab565b820191906000526020600020905b81548152906001019060200180831161148e57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b031633146115235760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b8151806115385763df9578836000526004601cfd5b8151811461154e5763ff633a386000526004601cfd5b60208301602083016020830282015b808314610f5d578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915061155d565b6000546001600160a01b031633146115fb5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200161067f565b600061164460035490565b600081815260076020526040902060030154909150600160a01b900460ff161515600114156116865760405163c44bd76560e01b815260040160405180910390fd5b90565b600154600214156116ad5760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806117445760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016105de565b5050505050565b6000818152600760205260409020600201546001600160a01b03163314611785576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d116001600051141617169150600060605280604052508061140a5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016105de565b600080600080600085875af19050806109b75760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016105de565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff191690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106118ec5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6119088484846001600160a01b038516611a14565b61140a57604051631dc23a5f60e11b815260040160405180910390fd5b600080634d2b179160e01b8360405160240161194391815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826119d85763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541015806119f657506002810154155b156117855760405163d0404f8560e01b815260040160405180910390fd5b60008315611a50578360051b8501855b803580851160051b94855260209485185260406000209301818110611a4857611a4d565b611a24565b50505b501492915050565b828054611a64906120c1565b90600052602060002090601f016020900481019282611a865760008555611acc565b82601f10611a9f57805160ff1916838001178555611acc565b82800160010185558215611acc579182015b82811115611acc578251825591602001919060010190611ab1565b50611ad8929150611adc565b5090565b5b80821115611ad85760008155600101611add565b600060208284031215611b0357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b4957611b49611b0a565b604052919050565b600067ffffffffffffffff821115611b6b57611b6b611b0a565b5060051b60200190565b6001600160a01b038116811461178557600080fd5b600082601f830112611b9b57600080fd5b81356020611bb0611bab83611b51565b611b20565b82815260059290921b84018101918181019086841115611bcf57600080fd5b8286015b84811015611bf3578035611be681611b75565b8352918301918301611bd3565b509695505050505050565b600060208284031215611c1057600080fd5b813567ffffffffffffffff811115611c2757600080fd5b611c3384828501611b8a565b949350505050565b600060208284031215611c4d57600080fd5b81356118ec81611b75565b600080600080600060808688031215611c7057600080fd5b8535611c7b81611b75565b945060208601359350604086013567ffffffffffffffff80821115611c9f57600080fd5b818801915088601f830112611cb357600080fd5b813581811115611cc257600080fd5b896020828501011115611cd457600080fd5b96999598505060200195606001359392505050565b60008083601f840112611cfb57600080fd5b50813567ffffffffffffffff811115611d1357600080fd5b6020830191508360208260051b8501011115611d2e57600080fd5b9250929050565b600080600060408486031215611d4a57600080fd5b83359250602084013567ffffffffffffffff811115611d6857600080fd5b611d7486828701611ce9565b9497909650939450505050565b60008060408385031215611d9457600080fd5b8235611d9f81611b75565b946020939093013593505050565b60008060008060008060c08789031215611dc657600080fd5b863595506020870135611dd881611b75565b945060408701359350606087013592506080870135915060a087013560ff81168114611e0357600080fd5b809150509295509295509295565b600080600080600080600080600060e08a8c031215611e2f57600080fd5b8935985060208a0135611e4181611b75565b975060408a0135611e5181611b75565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff80821115611e7c57600080fd5b611e888d838e01611ce9565b909650945060c08c0135915080821115611ea157600080fd5b50611eae8c828d01611ce9565b915080935050809150509295985092959850929598565b60008060208385031215611ed857600080fd5b823567ffffffffffffffff811115611eef57600080fd5b611efb85828601611ce9565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b81811015611f3b5788810183015185820160c001528201611f1f565b81811115611f4d57600060c083870101525b50601f01601f1916830160c0019150611f73905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b60008060408385031215611fa757600080fd5b823567ffffffffffffffff80821115611fbf57600080fd5b611fcb86838701611b8a565b9350602091508185013581811115611fe257600080fd5b85019050601f81018613611ff557600080fd5b8035612003611bab82611b51565b81815260059190911b8201830190838101908883111561202257600080fd5b928401925b8284101561204f57833580151581146120405760008081fd5b82529284019290840190612027565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156120b55783516001600160a01b031683529284019291840191600101612090565b50909695505050505050565b600181811c908216806120d557607f821691505b602082108114156120f657634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061211857607f831692505b602080841082141561213857634e487b7160e01b86526022600452602486fd5b81801561214c576001811461215d5761218a565b60ff1986168952848901965061218a565b60008c81526020902060005b868110156121825781548b820152908501908301612169565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121cb576121cb6121a3565b500390565b600082198211156121e3576121e36121a3565b50019056fea164736f6c6343000809000a", + "deployedBytecode": "0x60806040526004361061018f5760003560e01c806377cd38a4116100d65780638e2a3d361161007f578063c52164c611610059578063c52164c614610539578063d6e8b97314610559578063f7d0e04b1461057957600080fd5b80638e2a3d36146104c25780639872dbfe146104f357806398a268711461050957600080fd5b80638652b37e116100b05780638652b37e1461044a5780638da5cb5b1461046a5780638e2749d6146104a257600080fd5b806377cd38a4146103dd5780637f94f65d1461040a5780638642b5c31461042a57600080fd5b806336317972116101385780635fd8c710116101125780635fd8c7101461036857806369cc6af41461037d57806372fada5c146103bd57600080fd5b806336317972146102fd5780634b2ae9801461031d578063574983c81461034857600080fd5b806316d722401161016957806316d722401461021d57806329cc7d10146102c65780632dfdf0b5146102e657600080fd5b8063049373201461019b5780630d2a2d44146101db57806313af4035146101fd57600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101c86101b6366004611af1565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004611bfe565b610599565b005b34801561020957600080fd5b506101fb610218366004611c3b565b61068a565b34801561022957600080fd5b50610282610238366004611af1565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101d2565b3480156102d257600080fd5b506101c86102e1366004611c58565b61071e565b3480156102f257600080fd5b506003546101c89081565b34801561030957600080fd5b506101fb610318366004611d35565b6108fc565b34801561032957600080fd5b506101c8610338366004611c3b565b600c1b611000600160ac1b031690565b34801561035457600080fd5b506101fb610363366004611af1565b6109bc565b34801561037457600080fd5b506101fb610a3a565b34801561038957600080fd5b506103ad610398366004611c3b565b600b6020526000908152604090205460ff1681565b60405190151581526020016101d2565b3480156103c957600080fd5b506101fb6103d8366004611af1565b610ac4565b3480156103e957600080fd5b506101c86103f8366004611af1565b600a6020526000908152604090205481565b34801561041657600080fd5b506101fb610425366004611d81565b610b4c565b34801561043657600080fd5b506101fb610445366004611dad565b610b97565b34801561045657600080fd5b506101c8610465366004611e11565b610f65565b34801561047657600080fd5b5060005461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101d2565b3480156104ae57600080fd5b506101fb6104bd366004611ec5565b6112b8565b3480156104ce57600080fd5b506104e26104dd366004611af1565b611410565b6040516101d2959493929190611f07565b3480156104ff57600080fd5b506101c860045481565b34801561051557600080fd5b506103ad610524366004611af1565b60066020526000908152604090205460ff1681565b34801561054557600080fd5b5060025461048a906001600160a01b031681565b34801561056557600080fd5b506101fb610574366004611f94565b6114da565b34801561058557600080fd5b506101fb610594366004611c3b565b6115b2565b6000546001600160a01b031633146105e75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b8082101561064e57600061062784848151811061060c5761060c61205e565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff191660019081179091559290920191506105ed565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d78160405161067f9190612074565b60405180910390a150565b6000546001600160a01b031633146106d35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff1661075957604051630abc194760e11b815260040160405180910390fd5b610761611639565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a166040820152600160609091015290506107d6611689565b83156107e6576107e63385610b4c565b6000838152600760209081526040909120825181558183015180518493610814926001850192910190611a58565b5060408201516002820180546001600160a01b039283166001600160a01b03199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556108919080546001019055565b61089d8233308a6116b4565b6108a660018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b610904611689565b61090d8361174b565b61091782826112b8565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109475761094784610ac4565b600381015481546000835560028301546001600160a01b03928316926109709184911683611788565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506109b760018055565b505050565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b85118160405161067f91815260200190565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b47610a8e3382611814565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910161067f565b610acd8161174b565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6001600160a01b038216331415610b7e57600c9190911b611000600160ac1b03166000908152600a6020526040902055565b6040516342e8fb9360e11b815260040160405180910390fd5b610b9f611689565b6000868152600860205260409020600381015443101580610bc257506002810154155b15610be0576040516331da482760e11b815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610c1092600186019290918b91016120fc565b604051602081830303815290604052805190602001209050600081604051602001610c6791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610cb557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610d299060019060a0016020604051602081039080840390855afa158015610d0d573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610d5b57604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b0390921691600091610d82916121b9565b60006002890181905560038901819055868152600960205260409020805460ff191660011790556006880154909150336001600160a01b0390911614610e3d576001870154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610df39084906121d0565b909155505060028701546006880154600590600090600c1b611000600160ac1b031681526020019081526020016000206000828254610e3291906121d0565b90915550610e839050565b86600201548760010154610e5191906121d0565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610e7d9084906121d0565b90915550505b6004870154610e9d9083906001600160a01b031683611788565b600187015415610f095760058701546001600160a01b038d8116911614610efa576005870154600180890154610ee29285926001600160a01b0390911691901c611788565b610ef5828d60018a60010154901c611788565b610f09565b610f09828d8960010154611788565b60048701546040518e81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a250505050505050610f5d60018055565b505050505050565b6000610f6f611689565b610f7983836112b8565b60008a81526007602052604090206003810154600160a01b900460ff16610fb357604051635972996f60e11b815260040160405180910390fd5b8054871115610fd5576040516308aeed0f60e21b815260040160405180910390fd5b610fe08b888c61186f565b915060006040518060e001604052808d81526020018a81526020018981526020016004544361100f91906121d0565b81526001600160a01b03808e1660208301528c1660408201523360609091015290508515611150576002820154600c1b611000600160ac1b03166000908152600a60205260409020546110669088908890336118f3565b60008381526008602090815260408083208451815591840151600183015583015160028201556060830151600382015560808301516004820180546001600160a01b039283166001600160a01b03199182161790915560a085015160058401805491841691831691909117905560c0850151600690930180549390921692169190911790558254899184916110fc9084906121b9565b9091555050805160408051918252602082018a905284916001600160a01b038e16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a350506112a2565b611000600160ac1b0333600c1b166000908152600560205260408120549061117782611925565b905080836040015111806111915750620f42408360400151115b156111af57604051630e0c7c2360e11b815260040160405180910390fd5b60008581526008602090815260408083208651815591860151600183015585015160028201556060850151600382015560808501516004820180546001600160a01b039283166001600160a01b03199182161790915560a087015160058401805491841691831691909117905560c08701516006909301805493909216921691909117905584548b9186916112459084906121b9565b92505081905550848d6001600160a01b03167f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea85600001518d604051611295929190918252602082015260400190565b60405180910390a3505050505b6112ab60018055565b9998505050505050505050565b6000815b808210156113f4576000600860008686868181106112dc576112dc61205e565b90506020020135815260200190815260200160002090506112fc816119e1565b60028101548154600090815260076020526040812080549091906113219084906121d0565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c6064811161137557600082815260056020526040902060649055611387565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff8888888181106113c8576113c861205e565b905060200201356040516113de91815260200190565b60405180910390a28460010194505050506112bc565b8082101561140a5763dfb035c96000526004601cfd5b50505050565b60076020526000908152604090208054600182018054919291611432906120c1565b80601f016020809104026020016040519081016040528092919081815260200182805461145e906120c1565b80156114ab5780601f10611480576101008083540402835291602001916114ab565b820191906000526020600020905b81548152906001019060200180831161148e57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b031633146115235760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b8151806115385763df9578836000526004601cfd5b8151811461154e5763ff633a386000526004601cfd5b60208301602083016020830282015b808314610f5d578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915061155d565b6000546001600160a01b031633146115fb5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200161067f565b600061164460035490565b600081815260076020526040902060030154909150600160a01b900460ff161515600114156116865760405163c44bd76560e01b815260040160405180910390fd5b90565b600154600214156116ad5760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806117445760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016105de565b5050505050565b6000818152600760205260409020600201546001600160a01b03163314611785576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d116001600051141617169150600060605280604052508061140a5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016105de565b600080600080600085875af19050806109b75760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016105de565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff191690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106118ec5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6119088484846001600160a01b038516611a14565b61140a57604051631dc23a5f60e11b815260040160405180910390fd5b600080634d2b179160e01b8360405160240161194391815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826119d85763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541015806119f657506002810154155b156117855760405163d0404f8560e01b815260040160405180910390fd5b60008315611a50578360051b8501855b803580851160051b94855260209485185260406000209301818110611a4857611a4d565b611a24565b50505b501492915050565b828054611a64906120c1565b90600052602060002090601f016020900481019282611a865760008555611acc565b82601f10611a9f57805160ff1916838001178555611acc565b82800160010185558215611acc579182015b82811115611acc578251825591602001919060010190611ab1565b50611ad8929150611adc565b5090565b5b80821115611ad85760008155600101611add565b600060208284031215611b0357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b4957611b49611b0a565b604052919050565b600067ffffffffffffffff821115611b6b57611b6b611b0a565b5060051b60200190565b6001600160a01b038116811461178557600080fd5b600082601f830112611b9b57600080fd5b81356020611bb0611bab83611b51565b611b20565b82815260059290921b84018101918181019086841115611bcf57600080fd5b8286015b84811015611bf3578035611be681611b75565b8352918301918301611bd3565b509695505050505050565b600060208284031215611c1057600080fd5b813567ffffffffffffffff811115611c2757600080fd5b611c3384828501611b8a565b949350505050565b600060208284031215611c4d57600080fd5b81356118ec81611b75565b600080600080600060808688031215611c7057600080fd5b8535611c7b81611b75565b945060208601359350604086013567ffffffffffffffff80821115611c9f57600080fd5b818801915088601f830112611cb357600080fd5b813581811115611cc257600080fd5b896020828501011115611cd457600080fd5b96999598505060200195606001359392505050565b60008083601f840112611cfb57600080fd5b50813567ffffffffffffffff811115611d1357600080fd5b6020830191508360208260051b8501011115611d2e57600080fd5b9250929050565b600080600060408486031215611d4a57600080fd5b83359250602084013567ffffffffffffffff811115611d6857600080fd5b611d7486828701611ce9565b9497909650939450505050565b60008060408385031215611d9457600080fd5b8235611d9f81611b75565b946020939093013593505050565b60008060008060008060c08789031215611dc657600080fd5b863595506020870135611dd881611b75565b945060408701359350606087013592506080870135915060a087013560ff81168114611e0357600080fd5b809150509295509295509295565b600080600080600080600080600060e08a8c031215611e2f57600080fd5b8935985060208a0135611e4181611b75565b975060408a0135611e5181611b75565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff80821115611e7c57600080fd5b611e888d838e01611ce9565b909650945060c08c0135915080821115611ea157600080fd5b50611eae8c828d01611ce9565b915080935050809150509295985092959850929598565b60008060208385031215611ed857600080fd5b823567ffffffffffffffff811115611eef57600080fd5b611efb85828601611ce9565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b81811015611f3b5788810183015185820160c001528201611f1f565b81811115611f4d57600060c083870101525b50601f01601f1916830160c0019150611f73905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b60008060408385031215611fa757600080fd5b823567ffffffffffffffff80821115611fbf57600080fd5b611fcb86838701611b8a565b9350602091508185013581811115611fe257600080fd5b85019050601f81018613611ff557600080fd5b8035612003611bab82611b51565b81815260059190911b8201830190838101908883111561202257600080fd5b928401925b8284101561204f57833580151581146120405760008081fd5b82529284019290840190612027565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156120b55783516001600160a01b031683529284019291840191600101612090565b50909695505050505050565b600181811c908216806120d557607f821691505b602082108114156120f657634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061211857607f831692505b602080841082141561213857634e487b7160e01b86526022600452602486fd5b81801561214c576001811461215d5761218a565b60ff1986168952848901965061218a565b60008c81526020902060005b868110156121825781548b820152908501908301612169565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121cb576121cb6121a3565b500390565b600082198211156121e3576121e36121a3565b50019056fea164736f6c6343000809000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Reputation.sol b/contracts/Reputation.sol index 751e813..5d0326a 100644 --- a/contracts/Reputation.sol +++ b/contracts/Reputation.sol @@ -11,6 +11,7 @@ contract Reputation is IReputation, Owned(msg.sender) { uint256 public constant magicValue = 2.5e11; // prettier-ignore + // solhint-disable no-inline-assembly // solhint-disable-next-line no-empty-blocks constructor(/* */) {/* */} diff --git a/contracts/lib/mock/mockToken.sol b/contracts/lib/mock/mockToken.sol index c59b3bc..d0b3d8e 100644 --- a/contracts/lib/mock/mockToken.sol +++ b/contracts/lib/mock/mockToken.sol @@ -7,4 +7,16 @@ contract MockToken is ERC20 { constructor(uint256 supply) ERC20("MockBRL", "MBRL", 18) { _mint(msg.sender, supply); } + + function mint( + address[] memory to, + uint256 value + ) public virtual { + uint256 len = to.length; + uint256 j; + while (j < len) { + _mint(to[j], value); + ++j; + } + } } diff --git a/contracts/p2pix.sol b/contracts/p2pix.sol index aba17d6..18865af 100644 --- a/contracts/p2pix.sol +++ b/contracts/p2pix.sol @@ -213,7 +213,7 @@ contract P2PIX is uint256 spendLimit; (spendLimit) = _limiter(userCredit); - if (l.amount > spendLimit) + if (l.amount > spendLimit || l.amount > 1e6) revert AmountNotAllowed(); mapLocks[lockID] = l; @@ -473,10 +473,12 @@ contract P2PIX is assembly { // first 32 bytes eq to array's length let tLen := mload(_tokens) + // NoTokens() if iszero(tLen) { mstore(0x00, 0xdf957883) revert(0x1c, 0x04) } + // LengthMismatch() if iszero(eq(tLen, mload(_states))) { mstore(0x00, 0xff633a38) revert(0x1c, 0x04) @@ -489,6 +491,7 @@ contract P2PIX is tLoc := add(tLoc, 0x20) sLoc := add(sLoc, 0x20) } { + // cache hashmap entry in scratch space mstore(0x00, mload(tLoc)) mstore(0x20, allowedERC20s.slot) let mapSlot := keccak256(0x00, 0x40) diff --git a/src/types/factories/lib/mock/mockToken.sol/MockToken__factory.ts b/src/types/factories/lib/mock/mockToken.sol/MockToken__factory.ts index 81b11dc..5374c32 100644 --- a/src/types/factories/lib/mock/mockToken.sol/MockToken__factory.ts +++ b/src/types/factories/lib/mock/mockToken.sol/MockToken__factory.ts @@ -171,6 +171,24 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "address[]", + name: "to", + type: "address[]", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "mint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [], name: "name", @@ -328,7 +346,7 @@ const _abi = [ ]; const _bytecode = - "0x60e06040523480156200001157600080fd5b5060405162000e5138038062000e51833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610a86620003cb600039600061044501526000610410015260006101490152610a866000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806370a0823111610081578063a9059cbb1161005b578063a9059cbb146101cd578063d505accf146101e0578063dd62ed3e146101f557600080fd5b806370a08231146101855780637ecebe00146101a557806395d89b41146101c557600080fd5b806323b872dd116100b257806323b872dd14610131578063313ce567146101445780633644e5151461017d57600080fd5b806306fdde03146100d9578063095ea7b3146100f757806318160ddd1461011a575b600080fd5b6100e1610220565b6040516100ee91906107de565b60405180910390f35b61010a61010536600461084f565b6102ae565b60405190151581526020016100ee565b61012360025481565b6040519081526020016100ee565b61010a61013f366004610879565b61031a565b61016b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100ee565b61012361040c565b6101236101933660046108b5565b60036020526000908152604090205481565b6101236101b33660046108b5565b60056020526000908152604090205481565b6100e1610467565b61010a6101db36600461084f565b610474565b6101f36101ee3660046108d7565b6104ec565b005b61012361020336600461094a565b600460209081526000928352604080842090915290825290205481565b6000805461022d9061097d565b80601f01602080910402602001604051908101604052809291908181526020018280546102599061097d565b80156102a65780601f1061027b576101008083540402835291602001916102a6565b820191906000526020600020905b81548152906001019060200180831161028957829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103099086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103765761035183826109b8565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b0385166000908152600360205260408120805485929061039e9084906109b8565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103f99087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104425761043d610744565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461022d9061097d565b336000908152600360205260408120805483919083906104959084906109b8565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103099086815260200190565b428410156105415760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161054d61040c565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610659573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061068f5750876001600160a01b0316816001600160a01b0316145b6106db5760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610538565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161077691906109dd565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600060208083528351808285015260005b8181101561080b578581018301518582016040015282016107ef565b8181111561081d576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461084a57600080fd5b919050565b6000806040838503121561086257600080fd5b61086b83610833565b946020939093013593505050565b60008060006060848603121561088e57600080fd5b61089784610833565b92506108a560208501610833565b9150604084013590509250925092565b6000602082840312156108c757600080fd5b6108d082610833565b9392505050565b600080600080600080600060e0888a0312156108f257600080fd5b6108fb88610833565b965061090960208901610833565b95506040880135945060608801359350608088013560ff8116811461092d57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561095d57600080fd5b61096683610833565b915061097460208401610833565b90509250929050565b600181811c9082168061099157607f821691505b602082108114156109b257634e487b7160e01b600052602260045260246000fd5b50919050565b6000828210156109d857634e487b7160e01b600052601160045260246000fd5b500390565b600080835481600182811c9150808316806109f957607f831692505b6020808410821415610a1957634e487b7160e01b86526022600452602486fd5b818015610a2d5760018114610a3e57610a6b565b60ff19861689528489019650610a6b565b60008a81526020902060005b86811015610a635781548b820152908501908301610a4a565b505084890196505b50949897505050505050505056fea164736f6c6343000809000a"; + "0x60e06040523480156200001157600080fd5b506040516200105238038062001052833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610c87620003cb60003960006104630152600061042e015260006101540152610c876000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108ad565b60405180910390f35b61011561011036600461091e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610948565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e366004610984565b60036020526000908152604090205481565b61012e6101be366004610984565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461091e565b610492565b6101fe6101f93660046109a6565b61050a565b005b61012e61020e366004610a19565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610a62565b610762565b6000805461024b90610b2d565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b2d565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610b7e565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610b7e565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107a8565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b2d565b336000908152600360205260408120805483919083906104b3908490610b7e565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b4284101561055f5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161056b61042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610677573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106ad5750876001600160a01b0316816001600160a01b0316145b6106f95760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610556565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156107a25761079284828151811061078457610784610b95565b602002602001015184610842565b61079b81610bab565b9050610767565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516107da9190610bc6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108549190610c62565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b818110156108da578581018301518582016040015282016108be565b818111156108ec576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461091957600080fd5b919050565b6000806040838503121561093157600080fd5b61093a83610902565b946020939093013593505050565b60008060006060848603121561095d57600080fd5b61096684610902565b925061097460208501610902565b9150604084013590509250925092565b60006020828403121561099657600080fd5b61099f82610902565b9392505050565b600080600080600080600060e0888a0312156109c157600080fd5b6109ca88610902565b96506109d860208901610902565b95506040880135945060608801359350608088013560ff811681146109fc57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610a2c57600080fd5b610a3583610902565b9150610a4360208401610902565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a7557600080fd5b823567ffffffffffffffff80821115610a8d57600080fd5b818501915085601f830112610aa157600080fd5b8135602082821115610ab557610ab5610a4c565b8160051b604051601f19603f83011681018181108682111715610ada57610ada610a4c565b604052928352818301935084810182019289841115610af857600080fd5b948201945b83861015610b1d57610b0e86610902565b85529482019493820193610afd565b9997909101359750505050505050565b600181811c90821680610b4157607f821691505b60208210811415610b6257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610b9057610b90610b68565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610bbf57610bbf610b68565b5060010190565b600080835481600182811c915080831680610be257607f831692505b6020808410821415610c0257634e487b7160e01b86526022600452602486fd5b818015610c165760018114610c2757610c54565b60ff19861689528489019650610c54565b60008a81526020902060005b86811015610c4c5781548b820152908501908301610c33565b505084890196505b509498975050505050505050565b60008219821115610c7557610c75610b68565b50019056fea164736f6c6343000809000a"; type MockTokenConstructorParams = | [signer?: Signer] diff --git a/src/types/factories/p2pix.sol/P2PIX__factory.ts b/src/types/factories/p2pix.sol/P2PIX__factory.ts index 8d2d323..308ed76 100644 --- a/src/types/factories/p2pix.sol/P2PIX__factory.ts +++ b/src/types/factories/p2pix.sol/P2PIX__factory.ts @@ -867,7 +867,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040526001805560405162002814380380620028148339810160408190526200002a916200049d565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000620565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005bb565b60200260200101516200038760201b60201c565b6000908152600660205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005d1565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083016020830282015b8083146200037f578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003d857620003d862000397565b604052919050565b60006001600160401b03821115620003fc57620003fc62000397565b5060051b60200190565b6001600160a01b03811681146200041c57600080fd5b50565b600082601f8301126200043157600080fd5b815160206200044a6200044483620003e0565b620003ad565b82815260059290921b840181019181810190868411156200046a57600080fd5b8286015b8481101562000492578051620004848162000406565b83529183019183016200046e565b509695505050505050565b600080600080600060a08688031215620004b657600080fd5b8551602080880151919650906001600160401b0380821115620004d857600080fd5b620004e68a838b016200041f565b965060408901519150620004fa8262000406565b6060890151919550808211156200051057600080fd5b6200051e8a838b016200041f565b945060808901519150808211156200053557600080fd5b508701601f810189136200054857600080fd5b8051620005596200044482620003e0565b81815260059190911b8201830190838101908b8311156200057957600080fd5b928401925b82841015620005a95783518015158114620005995760008081fd5b825292840192908401906200057e565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620006145783516001600160a01b031683529284019291840191600101620005ed565b50909695505050505050565b6121e480620006306000396000f3fe60806040526004361061018f5760003560e01c806377cd38a4116100d65780638e2a3d361161007f578063c52164c611610059578063c52164c614610539578063d6e8b97314610559578063f7d0e04b1461057957600080fd5b80638e2a3d36146104c25780639872dbfe146104f357806398a268711461050957600080fd5b80638652b37e116100b05780638652b37e1461044a5780638da5cb5b1461046a5780638e2749d6146104a257600080fd5b806377cd38a4146103dd5780637f94f65d1461040a5780638642b5c31461042a57600080fd5b806336317972116101385780635fd8c710116101125780635fd8c7101461036857806369cc6af41461037d57806372fada5c146103bd57600080fd5b806336317972146102fd5780634b2ae9801461031d578063574983c81461034857600080fd5b806316d722401161016957806316d722401461021d57806329cc7d10146102c65780632dfdf0b5146102e657600080fd5b8063049373201461019b5780630d2a2d44146101db57806313af4035146101fd57600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101c86101b6366004611ae0565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004611bed565b610599565b005b34801561020957600080fd5b506101fb610218366004611c2a565b61068a565b34801561022957600080fd5b50610282610238366004611ae0565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101d2565b3480156102d257600080fd5b506101c86102e1366004611c47565b61071e565b3480156102f257600080fd5b506003546101c89081565b34801561030957600080fd5b506101fb610318366004611d24565b6108fc565b34801561032957600080fd5b506101c8610338366004611c2a565b600c1b611000600160ac1b031690565b34801561035457600080fd5b506101fb610363366004611ae0565b6109bc565b34801561037457600080fd5b506101fb610a3a565b34801561038957600080fd5b506103ad610398366004611c2a565b600b6020526000908152604090205460ff1681565b60405190151581526020016101d2565b3480156103c957600080fd5b506101fb6103d8366004611ae0565b610ac4565b3480156103e957600080fd5b506101c86103f8366004611ae0565b600a6020526000908152604090205481565b34801561041657600080fd5b506101fb610425366004611d70565b610b4c565b34801561043657600080fd5b506101fb610445366004611d9c565b610b97565b34801561045657600080fd5b506101c8610465366004611e00565b610f65565b34801561047657600080fd5b5060005461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101d2565b3480156104ae57600080fd5b506101fb6104bd366004611eb4565b6112a7565b3480156104ce57600080fd5b506104e26104dd366004611ae0565b6113ff565b6040516101d2959493929190611ef6565b3480156104ff57600080fd5b506101c860045481565b34801561051557600080fd5b506103ad610524366004611ae0565b60066020526000908152604090205460ff1681565b34801561054557600080fd5b5060025461048a906001600160a01b031681565b34801561056557600080fd5b506101fb610574366004611f83565b6114c9565b34801561058557600080fd5b506101fb610594366004611c2a565b6115a1565b6000546001600160a01b031633146105e75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b8082101561064e57600061062784848151811061060c5761060c61204d565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff191660019081179091559290920191506105ed565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d78160405161067f9190612063565b60405180910390a150565b6000546001600160a01b031633146106d35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff1661075957604051630abc194760e11b815260040160405180910390fd5b610761611628565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a166040820152600160609091015290506107d6611678565b83156107e6576107e63385610b4c565b6000838152600760209081526040909120825181558183015180518493610814926001850192910190611a47565b5060408201516002820180546001600160a01b039283166001600160a01b03199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556108919080546001019055565b61089d8233308a6116a3565b6108a660018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b610904611678565b61090d8361173a565b61091782826112a7565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109475761094784610ac4565b600381015481546000835560028301546001600160a01b03928316926109709184911683611777565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506109b760018055565b505050565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b85118160405161067f91815260200190565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b47610a8e3382611803565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910161067f565b610acd8161173a565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6001600160a01b038216331415610b7e57600c9190911b611000600160ac1b03166000908152600a6020526040902055565b6040516342e8fb9360e11b815260040160405180910390fd5b610b9f611678565b6000868152600860205260409020600381015443101580610bc257506002810154155b15610be0576040516331da482760e11b815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610c1092600186019290918b91016120eb565b604051602081830303815290604052805190602001209050600081604051602001610c6791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610cb557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610d299060019060a0016020604051602081039080840390855afa158015610d0d573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610d5b57604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b0390921691600091610d82916121a8565b60006002890181905560038901819055868152600960205260409020805460ff191660011790556006880154909150336001600160a01b0390911614610e3d576001870154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610df39084906121bf565b909155505060028701546006880154600590600090600c1b611000600160ac1b031681526020019081526020016000206000828254610e3291906121bf565b90915550610e839050565b86600201548760010154610e5191906121bf565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610e7d9084906121bf565b90915550505b6004870154610e9d9083906001600160a01b031683611777565b600187015415610f095760058701546001600160a01b038d8116911614610efa576005870154600180890154610ee29285926001600160a01b0390911691901c611777565b610ef5828d60018a60010154901c611777565b610f09565b610f09828d8960010154611777565b60048701546040518e81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a250505050505050610f5d60018055565b505050505050565b6000610f6f611678565b610f7983836112a7565b60008a81526007602052604090206003810154600160a01b900460ff16610fb357604051635972996f60e11b815260040160405180910390fd5b8054871115610fd5576040516308aeed0f60e21b815260040160405180910390fd5b610fe08b888c61185e565b915060006040518060e001604052808d81526020018a81526020018981526020016004544361100f91906121bf565b81526001600160a01b03808e1660208301528c1660408201523360609091015290508515611150576002820154600c1b611000600160ac1b03166000908152600a60205260409020546110669088908890336118e2565b60008381526008602090815260408083208451815591840151600183015583015160028201556060830151600382015560808301516004820180546001600160a01b039283166001600160a01b03199182161790915560a085015160058401805491841691831691909117905560c0850151600690930180549390921692169190911790558254899184916110fc9084906121a8565b9091555050805160408051918252602082018a905284916001600160a01b038e16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a35050611291565b611000600160ac1b0333600c1b166000908152600560205260408120549061117782611914565b9050808360400151111561119e57604051630e0c7c2360e11b815260040160405180910390fd5b60008581526008602090815260408083208651815591860151600183015585015160028201556060850151600382015560808501516004820180546001600160a01b039283166001600160a01b03199182161790915560a087015160058401805491841691831691909117905560c08701516006909301805493909216921691909117905584548b9186916112349084906121a8565b92505081905550848d6001600160a01b03167f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea85600001518d604051611284929190918252602082015260400190565b60405180910390a3505050505b61129a60018055565b9998505050505050505050565b6000815b808210156113e3576000600860008686868181106112cb576112cb61204d565b90506020020135815260200190815260200160002090506112eb816119d0565b60028101548154600090815260076020526040812080549091906113109084906121bf565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c6064811161136457600082815260056020526040902060649055611376565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff8888888181106113b7576113b761204d565b905060200201356040516113cd91815260200190565b60405180910390a28460010194505050506112ab565b808210156113f95763dfb035c96000526004601cfd5b50505050565b60076020526000908152604090208054600182018054919291611421906120b0565b80601f016020809104026020016040519081016040528092919081815260200182805461144d906120b0565b801561149a5780601f1061146f5761010080835404028352916020019161149a565b820191906000526020600020905b81548152906001019060200180831161147d57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b031633146115125760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b8151806115275763df9578836000526004601cfd5b8151811461153d5763ff633a386000526004601cfd5b60208301602083016020830282015b808314610f5d578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915061154c565b6000546001600160a01b031633146115ea5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200161067f565b600061163360035490565b600081815260076020526040902060030154909150600160a01b900460ff161515600114156116755760405163c44bd76560e01b815260040160405180910390fd5b90565b6001546002141561169c5760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806117335760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016105de565b5050505050565b6000818152600760205260409020600201546001600160a01b03163314611774576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d11600160005114161716915060006060528060405250806113f95760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016105de565b600080600080600085875af19050806109b75760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016105de565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff191690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106118db5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6118f78484846001600160a01b038516611a03565b6113f957604051631dc23a5f60e11b815260040160405180910390fd5b600080634d2b179160e01b8360405160240161193291815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826119c75763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541015806119e557506002810154155b156117745760405163d0404f8560e01b815260040160405180910390fd5b60008315611a3f578360051b8501855b803580851160051b94855260209485185260406000209301818110611a3757611a3c565b611a13565b50505b501492915050565b828054611a53906120b0565b90600052602060002090601f016020900481019282611a755760008555611abb565b82601f10611a8e57805160ff1916838001178555611abb565b82800160010185558215611abb579182015b82811115611abb578251825591602001919060010190611aa0565b50611ac7929150611acb565b5090565b5b80821115611ac75760008155600101611acc565b600060208284031215611af257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b3857611b38611af9565b604052919050565b600067ffffffffffffffff821115611b5a57611b5a611af9565b5060051b60200190565b6001600160a01b038116811461177457600080fd5b600082601f830112611b8a57600080fd5b81356020611b9f611b9a83611b40565b611b0f565b82815260059290921b84018101918181019086841115611bbe57600080fd5b8286015b84811015611be2578035611bd581611b64565b8352918301918301611bc2565b509695505050505050565b600060208284031215611bff57600080fd5b813567ffffffffffffffff811115611c1657600080fd5b611c2284828501611b79565b949350505050565b600060208284031215611c3c57600080fd5b81356118db81611b64565b600080600080600060808688031215611c5f57600080fd5b8535611c6a81611b64565b945060208601359350604086013567ffffffffffffffff80821115611c8e57600080fd5b818801915088601f830112611ca257600080fd5b813581811115611cb157600080fd5b896020828501011115611cc357600080fd5b96999598505060200195606001359392505050565b60008083601f840112611cea57600080fd5b50813567ffffffffffffffff811115611d0257600080fd5b6020830191508360208260051b8501011115611d1d57600080fd5b9250929050565b600080600060408486031215611d3957600080fd5b83359250602084013567ffffffffffffffff811115611d5757600080fd5b611d6386828701611cd8565b9497909650939450505050565b60008060408385031215611d8357600080fd5b8235611d8e81611b64565b946020939093013593505050565b60008060008060008060c08789031215611db557600080fd5b863595506020870135611dc781611b64565b945060408701359350606087013592506080870135915060a087013560ff81168114611df257600080fd5b809150509295509295509295565b600080600080600080600080600060e08a8c031215611e1e57600080fd5b8935985060208a0135611e3081611b64565b975060408a0135611e4081611b64565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff80821115611e6b57600080fd5b611e778d838e01611cd8565b909650945060c08c0135915080821115611e9057600080fd5b50611e9d8c828d01611cd8565b915080935050809150509295985092959850929598565b60008060208385031215611ec757600080fd5b823567ffffffffffffffff811115611ede57600080fd5b611eea85828601611cd8565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b81811015611f2a5788810183015185820160c001528201611f0e565b81811115611f3c57600060c083870101525b50601f01601f1916830160c0019150611f62905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b60008060408385031215611f9657600080fd5b823567ffffffffffffffff80821115611fae57600080fd5b611fba86838701611b79565b9350602091508185013581811115611fd157600080fd5b85019050601f81018613611fe457600080fd5b8035611ff2611b9a82611b40565b81815260059190911b8201830190838101908883111561201157600080fd5b928401925b8284101561203e578335801515811461202f5760008081fd5b82529284019290840190612016565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156120a45783516001600160a01b03168352928401929184019160010161207f565b50909695505050505050565b600181811c908216806120c457607f821691505b602082108114156120e557634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061210757607f831692505b602080841082141561212757634e487b7160e01b86526022600452602486fd5b81801561213b576001811461214c57612179565b60ff19861689528489019650612179565b60008c81526020902060005b868110156121715781548b820152908501908301612158565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121ba576121ba612192565b500390565b600082198211156121d2576121d2612192565b50019056fea164736f6c6343000809000a"; + "0x60806040526001805560405162002825380380620028258339810160408190526200002a916200049d565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000620565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005bb565b60200260200101516200038760201b60201c565b6000908152600660205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005d1565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083016020830282015b8083146200037f578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003d857620003d862000397565b604052919050565b60006001600160401b03821115620003fc57620003fc62000397565b5060051b60200190565b6001600160a01b03811681146200041c57600080fd5b50565b600082601f8301126200043157600080fd5b815160206200044a6200044483620003e0565b620003ad565b82815260059290921b840181019181810190868411156200046a57600080fd5b8286015b8481101562000492578051620004848162000406565b83529183019183016200046e565b509695505050505050565b600080600080600060a08688031215620004b657600080fd5b8551602080880151919650906001600160401b0380821115620004d857600080fd5b620004e68a838b016200041f565b965060408901519150620004fa8262000406565b6060890151919550808211156200051057600080fd5b6200051e8a838b016200041f565b945060808901519150808211156200053557600080fd5b508701601f810189136200054857600080fd5b8051620005596200044482620003e0565b81815260059190911b8201830190838101908b8311156200057957600080fd5b928401925b82841015620005a95783518015158114620005995760008081fd5b825292840192908401906200057e565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620006145783516001600160a01b031683529284019291840191600101620005ed565b50909695505050505050565b6121f580620006306000396000f3fe60806040526004361061018f5760003560e01c806377cd38a4116100d65780638e2a3d361161007f578063c52164c611610059578063c52164c614610539578063d6e8b97314610559578063f7d0e04b1461057957600080fd5b80638e2a3d36146104c25780639872dbfe146104f357806398a268711461050957600080fd5b80638652b37e116100b05780638652b37e1461044a5780638da5cb5b1461046a5780638e2749d6146104a257600080fd5b806377cd38a4146103dd5780637f94f65d1461040a5780638642b5c31461042a57600080fd5b806336317972116101385780635fd8c710116101125780635fd8c7101461036857806369cc6af41461037d57806372fada5c146103bd57600080fd5b806336317972146102fd5780634b2ae9801461031d578063574983c81461034857600080fd5b806316d722401161016957806316d722401461021d57806329cc7d10146102c65780632dfdf0b5146102e657600080fd5b8063049373201461019b5780630d2a2d44146101db57806313af4035146101fd57600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101c86101b6366004611af1565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004611bfe565b610599565b005b34801561020957600080fd5b506101fb610218366004611c3b565b61068a565b34801561022957600080fd5b50610282610238366004611af1565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101d2565b3480156102d257600080fd5b506101c86102e1366004611c58565b61071e565b3480156102f257600080fd5b506003546101c89081565b34801561030957600080fd5b506101fb610318366004611d35565b6108fc565b34801561032957600080fd5b506101c8610338366004611c3b565b600c1b611000600160ac1b031690565b34801561035457600080fd5b506101fb610363366004611af1565b6109bc565b34801561037457600080fd5b506101fb610a3a565b34801561038957600080fd5b506103ad610398366004611c3b565b600b6020526000908152604090205460ff1681565b60405190151581526020016101d2565b3480156103c957600080fd5b506101fb6103d8366004611af1565b610ac4565b3480156103e957600080fd5b506101c86103f8366004611af1565b600a6020526000908152604090205481565b34801561041657600080fd5b506101fb610425366004611d81565b610b4c565b34801561043657600080fd5b506101fb610445366004611dad565b610b97565b34801561045657600080fd5b506101c8610465366004611e11565b610f65565b34801561047657600080fd5b5060005461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101d2565b3480156104ae57600080fd5b506101fb6104bd366004611ec5565b6112b8565b3480156104ce57600080fd5b506104e26104dd366004611af1565b611410565b6040516101d2959493929190611f07565b3480156104ff57600080fd5b506101c860045481565b34801561051557600080fd5b506103ad610524366004611af1565b60066020526000908152604090205460ff1681565b34801561054557600080fd5b5060025461048a906001600160a01b031681565b34801561056557600080fd5b506101fb610574366004611f94565b6114da565b34801561058557600080fd5b506101fb610594366004611c3b565b6115b2565b6000546001600160a01b031633146105e75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b8082101561064e57600061062784848151811061060c5761060c61205e565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff191660019081179091559290920191506105ed565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d78160405161067f9190612074565b60405180910390a150565b6000546001600160a01b031633146106d35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff1661075957604051630abc194760e11b815260040160405180910390fd5b610761611639565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a166040820152600160609091015290506107d6611689565b83156107e6576107e63385610b4c565b6000838152600760209081526040909120825181558183015180518493610814926001850192910190611a58565b5060408201516002820180546001600160a01b039283166001600160a01b03199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556108919080546001019055565b61089d8233308a6116b4565b6108a660018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b610904611689565b61090d8361174b565b61091782826112b8565b60008381526007602052604090206003810154600160a01b900460ff161515600114156109475761094784610ac4565b600381015481546000835560028301546001600160a01b03928316926109709184911683611788565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506109b760018055565b505050565b6000546001600160a01b03163314610a055760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b85118160405161067f91815260200190565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b47610a8e3382611814565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910161067f565b610acd8161174b565b6000818152600760209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6001600160a01b038216331415610b7e57600c9190911b611000600160ac1b03166000908152600a6020526040902055565b6040516342e8fb9360e11b815260040160405180910390fd5b610b9f611689565b6000868152600860205260409020600381015443101580610bc257506002810154155b15610be0576040516331da482760e11b815260040160405180910390fd5b8054600090815260076020908152604080832060028501549151909392610c1092600186019290918b91016120fc565b604051602081830303815290604052805190602001209050600081604051602001610c6791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600990935291205490915060ff16151560011415610cb557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff8816928201929092526060810189905260808101889052610d299060019060a0016020604051602081039080840390855afa158015610d0d573d6000803e3d6000fd5b5050604051601f190151600c1b611000600160ac1b0316919050565b60008181526006602052604090205490915060ff16610d5b57604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b0390921691600091610d82916121b9565b60006002890181905560038901819055868152600960205260409020805460ff191660011790556006880154909150336001600160a01b0390911614610e3d576001870154611000600160ac1b0333600c1b1660009081526005602052604081208054909190610df39084906121d0565b909155505060028701546006880154600590600090600c1b611000600160ac1b031681526020019081526020016000206000828254610e3291906121d0565b90915550610e839050565b86600201548760010154610e5191906121d0565b611000600160ac1b0333600c1b1660009081526005602052604081208054909190610e7d9084906121d0565b90915550505b6004870154610e9d9083906001600160a01b031683611788565b600187015415610f095760058701546001600160a01b038d8116911614610efa576005870154600180890154610ee29285926001600160a01b0390911691901c611788565b610ef5828d60018a60010154901c611788565b610f09565b610f09828d8960010154611788565b60048701546040518e81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a250505050505050610f5d60018055565b505050505050565b6000610f6f611689565b610f7983836112b8565b60008a81526007602052604090206003810154600160a01b900460ff16610fb357604051635972996f60e11b815260040160405180910390fd5b8054871115610fd5576040516308aeed0f60e21b815260040160405180910390fd5b610fe08b888c61186f565b915060006040518060e001604052808d81526020018a81526020018981526020016004544361100f91906121d0565b81526001600160a01b03808e1660208301528c1660408201523360609091015290508515611150576002820154600c1b611000600160ac1b03166000908152600a60205260409020546110669088908890336118f3565b60008381526008602090815260408083208451815591840151600183015583015160028201556060830151600382015560808301516004820180546001600160a01b039283166001600160a01b03199182161790915560a085015160058401805491841691831691909117905560c0850151600690930180549390921692169190911790558254899184916110fc9084906121b9565b9091555050805160408051918252602082018a905284916001600160a01b038e16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a350506112a2565b611000600160ac1b0333600c1b166000908152600560205260408120549061117782611925565b905080836040015111806111915750620f42408360400151115b156111af57604051630e0c7c2360e11b815260040160405180910390fd5b60008581526008602090815260408083208651815591860151600183015585015160028201556060850151600382015560808501516004820180546001600160a01b039283166001600160a01b03199182161790915560a087015160058401805491841691831691909117905560c08701516006909301805493909216921691909117905584548b9186916112459084906121b9565b92505081905550848d6001600160a01b03167f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea85600001518d604051611295929190918252602082015260400190565b60405180910390a3505050505b6112ab60018055565b9998505050505050505050565b6000815b808210156113f4576000600860008686868181106112dc576112dc61205e565b90506020020135815260200190815260200160002090506112fc816119e1565b60028101548154600090815260076020526040812080549091906113219084906121d0565b90915550506000600282018190556006820154600c1b611000600160ac1b031660008181526005602052604090205490915060011c6064811161137557600082815260056020526040902060649055611387565b60008281526005602052604090208190555b60048301546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff8888888181106113c8576113c861205e565b905060200201356040516113de91815260200190565b60405180910390a28460010194505050506112bc565b8082101561140a5763dfb035c96000526004601cfd5b50505050565b60076020526000908152604090208054600182018054919291611432906120c1565b80601f016020809104026020016040519081016040528092919081815260200182805461145e906120c1565b80156114ab5780601f10611480576101008083540402835291602001916114ab565b820191906000526020600020905b81548152906001019060200180831161148e57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000546001600160a01b031633146115235760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b8151806115385763df9578836000526004601cfd5b8151811461154e5763ff633a386000526004601cfd5b60208301602083016020830282015b808314610f5d578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915061155d565b6000546001600160a01b031633146115fb5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016105de565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200161067f565b600061164460035490565b600081815260076020526040902060030154909150600160a01b900460ff161515600114156116865760405163c44bd76560e01b815260040160405180910390fd5b90565b600154600214156116ad5760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806117445760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016105de565b5050505050565b6000818152600760205260409020600201546001600160a01b03163314611785576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d116001600051141617169150600060605280604052508061140a5760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c4544000000000000000000000000000000000060448201526064016105de565b600080600080600085875af19050806109b75760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064016105de565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff191690820152600090607401604051602081830303815290604052805190602001209050436008600083815260200190815260200160002060030154106118ec5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6119088484846001600160a01b038516611a14565b61140a57604051631dc23a5f60e11b815260040160405180910390fd5b600080634d2b179160e01b8360405160240161194391815260200190565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600080600060206000855160208701600254617530fa92503d91506000519050809450826119d85763e10bf1cc6000526004601cfd5b50505050919050565b4381600301541015806119f657506002810154155b156117855760405163d0404f8560e01b815260040160405180910390fd5b60008315611a50578360051b8501855b803580851160051b94855260209485185260406000209301818110611a4857611a4d565b611a24565b50505b501492915050565b828054611a64906120c1565b90600052602060002090601f016020900481019282611a865760008555611acc565b82601f10611a9f57805160ff1916838001178555611acc565b82800160010185558215611acc579182015b82811115611acc578251825591602001919060010190611ab1565b50611ad8929150611adc565b5090565b5b80821115611ad85760008155600101611add565b600060208284031215611b0357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b4957611b49611b0a565b604052919050565b600067ffffffffffffffff821115611b6b57611b6b611b0a565b5060051b60200190565b6001600160a01b038116811461178557600080fd5b600082601f830112611b9b57600080fd5b81356020611bb0611bab83611b51565b611b20565b82815260059290921b84018101918181019086841115611bcf57600080fd5b8286015b84811015611bf3578035611be681611b75565b8352918301918301611bd3565b509695505050505050565b600060208284031215611c1057600080fd5b813567ffffffffffffffff811115611c2757600080fd5b611c3384828501611b8a565b949350505050565b600060208284031215611c4d57600080fd5b81356118ec81611b75565b600080600080600060808688031215611c7057600080fd5b8535611c7b81611b75565b945060208601359350604086013567ffffffffffffffff80821115611c9f57600080fd5b818801915088601f830112611cb357600080fd5b813581811115611cc257600080fd5b896020828501011115611cd457600080fd5b96999598505060200195606001359392505050565b60008083601f840112611cfb57600080fd5b50813567ffffffffffffffff811115611d1357600080fd5b6020830191508360208260051b8501011115611d2e57600080fd5b9250929050565b600080600060408486031215611d4a57600080fd5b83359250602084013567ffffffffffffffff811115611d6857600080fd5b611d7486828701611ce9565b9497909650939450505050565b60008060408385031215611d9457600080fd5b8235611d9f81611b75565b946020939093013593505050565b60008060008060008060c08789031215611dc657600080fd5b863595506020870135611dd881611b75565b945060408701359350606087013592506080870135915060a087013560ff81168114611e0357600080fd5b809150509295509295509295565b600080600080600080600080600060e08a8c031215611e2f57600080fd5b8935985060208a0135611e4181611b75565b975060408a0135611e5181611b75565b965060608a0135955060808a0135945060a08a013567ffffffffffffffff80821115611e7c57600080fd5b611e888d838e01611ce9565b909650945060c08c0135915080821115611ea157600080fd5b50611eae8c828d01611ce9565b915080935050809150509295985092959850929598565b60008060208385031215611ed857600080fd5b823567ffffffffffffffff811115611eef57600080fd5b611efb85828601611ce9565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b81811015611f3b5788810183015185820160c001528201611f1f565b81811115611f4d57600060c083870101525b50601f01601f1916830160c0019150611f73905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b60008060408385031215611fa757600080fd5b823567ffffffffffffffff80821115611fbf57600080fd5b611fcb86838701611b8a565b9350602091508185013581811115611fe257600080fd5b85019050601f81018613611ff557600080fd5b8035612003611bab82611b51565b81815260059190911b8201830190838101908883111561202257600080fd5b928401925b8284101561204f57833580151581146120405760008081fd5b82529284019290840190612027565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156120b55783516001600160a01b031683529284019291840191600101612090565b50909695505050505050565b600181811c908216806120d557607f821691505b602082108114156120f657634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061211857607f831692505b602080841082141561213857634e487b7160e01b86526022600452602486fd5b81801561214c576001811461215d5761218a565b60ff1986168952848901965061218a565b60008c81526020902060005b868110156121825781548b820152908501908301612169565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121cb576121cb6121a3565b500390565b600082198211156121e3576121e36121a3565b50019056fea164736f6c6343000809000a"; type P2PIXConstructorParams = | [signer?: Signer] diff --git a/src/types/lib/mock/mockToken.sol/MockToken.ts b/src/types/lib/mock/mockToken.sol/MockToken.ts index 5acfaa9..9e5aa73 100644 --- a/src/types/lib/mock/mockToken.sol/MockToken.ts +++ b/src/types/lib/mock/mockToken.sol/MockToken.ts @@ -34,6 +34,7 @@ export interface MockTokenInterface extends utils.Interface { "approve(address,uint256)": FunctionFragment; "balanceOf(address)": FunctionFragment; "decimals()": FunctionFragment; + "mint(address[],uint256)": FunctionFragment; "name()": FunctionFragment; "nonces(address)": FunctionFragment; "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; @@ -50,6 +51,7 @@ export interface MockTokenInterface extends utils.Interface { | "approve" | "balanceOf" | "decimals" + | "mint" | "name" | "nonces" | "permit" @@ -76,6 +78,10 @@ export interface MockTokenInterface extends utils.Interface { values: [PromiseOrValue] ): string; encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData( + functionFragment: "mint", + values: [PromiseOrValue[], PromiseOrValue] + ): string; encodeFunctionData(functionFragment: "name", values?: undefined): string; encodeFunctionData( functionFragment: "nonces", @@ -119,6 +125,7 @@ export interface MockTokenInterface extends utils.Interface { decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; @@ -214,6 +221,12 @@ export interface MockToken extends BaseContract { decimals(overrides?: CallOverrides): Promise<[number]>; + mint( + to: PromiseOrValue[], + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + name(overrides?: CallOverrides): Promise<[string]>; nonces( @@ -271,6 +284,12 @@ export interface MockToken extends BaseContract { decimals(overrides?: CallOverrides): Promise; + mint( + to: PromiseOrValue[], + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + name(overrides?: CallOverrides): Promise; nonces( @@ -328,6 +347,12 @@ export interface MockToken extends BaseContract { decimals(overrides?: CallOverrides): Promise; + mint( + to: PromiseOrValue[], + value: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + name(overrides?: CallOverrides): Promise; nonces( @@ -410,6 +435,12 @@ export interface MockToken extends BaseContract { decimals(overrides?: CallOverrides): Promise; + mint( + to: PromiseOrValue[], + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + name(overrides?: CallOverrides): Promise; nonces( @@ -468,6 +499,12 @@ export interface MockToken extends BaseContract { decimals(overrides?: CallOverrides): Promise; + mint( + to: PromiseOrValue[], + value: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + name(overrides?: CallOverrides): Promise; nonces( diff --git a/test/p2pix.test.ts b/test/p2pix.test.ts index 5f89d84..46e25aa 100644 --- a/test/p2pix.test.ts +++ b/test/p2pix.test.ts @@ -3,12 +3,18 @@ import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; import { expect } from "chai"; import { BigNumber, Wallet } from "ethers"; -import { ethers, network } from "hardhat"; +import { + ethers, + network, + /* , tracer */ +} from "hardhat"; import { MockToken, P2PIX, Reputation } from "../src/types"; import { P2PixErrors } from "./utils/errors"; import { - // getSignerAddrs, + Deposit, + Lock, + getSignerAddrs, p2pixFixture, randomSigners, } from "./utils/fixtures"; @@ -52,13 +58,14 @@ describe("P2PIX", () => { describe("Init", async () => { it("P2PIX, Reputation and ERC20 should initialize", async () => { + // tracer.enabled = true; await p2pix.deployed(); + // tracer.enabled = false; await erc20.deployed(); await reputation.deployed(); expect(p2pix).to.be.ok; expect(erc20).to.be.ok; expect(reputation).to.be.ok; - const ownerKey = await p2pix._castAddrToKey( owner.address, ); @@ -69,7 +76,7 @@ describe("P2PIX", () => { // storage checks expect( await p2pix.callStatic.defaultLockBlocks(), - ).to.eq(4); + ).to.eq(10); expect(await p2pix.callStatic.reputation()).to.eq( reputation.address, ); @@ -89,7 +96,7 @@ describe("P2PIX", () => { .to.emit(p2pix, "OwnerUpdated") .withArgs(zero, owner.address) .and.to.emit(p2pix, "LockBlocksUpdated") - .withArgs(4) + .withArgs(10) .and.to.emit(p2pix, "ReputationUpdated") .withArgs(reputation.address) .and.to.emit(p2pix, "ValidSignersUpdated") @@ -220,6 +227,8 @@ describe("P2PIX", () => { const fail = p2pix .connect(acc01) .tokenSettings([acc01.address], [false]); + const fail2 = p2pix.tokenSettings([], [true, false]); + const fail3 = p2pix.tokenSettings([zero], [true, true]); expect(tx).to.be.ok; await expect(tx) @@ -232,13 +241,228 @@ describe("P2PIX", () => { await expect(fail).to.be.revertedWith( P2PixErrors.UNAUTHORIZED, ); + await expect(fail).to.be.revertedWith( + P2PixErrors.UNAUTHORIZED, + ); + await expect(fail2).to.be.revertedWithCustomError( + p2pix, + P2PixErrors.NoTokens, + ); + await expect(fail3).to.be.revertedWithCustomError( + p2pix, + P2PixErrors.LengthMismatch, + ); }); }); describe("Deposit", async () => { - // it("should revert if ERC20 is not allowed", async () => { - // it ("should revert if deposit already exists") - // it ("should create deposit, update storage and emit event") - // it ("should create multiple deposits") - EDGE CASE TEST + it("should revert if ERC20 is not allowed", async () => { + const pTarget = ethers.utils.keccak256( + ethers.utils.toUtf8Bytes("_pixTarget"), + ); + const root = ethers.utils.keccak256( + ethers.utils.toUtf8Bytes("root"), + ); + const tx = p2pix.deposit( + owner.address, + 1, + pTarget, + root, + ); + + await expect(tx).to.be.revertedWithCustomError( + p2pix, + P2PixErrors.TokenDenied, + ); + }); + /// @todo DepositAlreadyExists() seems to be unreacheable + // it("should revert if deposit already exists", async () => { + // const pTarget = ethers.utils.keccak256( + // ethers.utils.toUtf8Bytes("_pixTarget"), + // ); + // const root = ethers.utils.keccak256( + // ethers.utils.toUtf8Bytes("0"), + // ); + // await erc20.approve(p2pix.address, 1); + // const tx = await p2pix.deposit( + // erc20.address, + // 1, + // pTarget, + // root, + // ); + // const info: Deposit = await p2pix.mapDeposits(0); + // // console.log(info) + // // console.log(info.valid); + // }); + it("should create deposit, update storage and emit event", async () => { + const pTarget = ethers.utils.keccak256( + ethers.utils.toUtf8Bytes("_pixTarget"), + ); + // we use `hashZero` to avoid updating seller's allowlist settings + const root = ethers.constants.HashZero; + await erc20.approve(p2pix.address, price); + const tx = await p2pix.deposit( + erc20.address, + price, + pTarget, + root, + ); + const storage: Deposit = await p2pix.mapDeposits(0); + const ownerKey = await p2pix.callStatic._castAddrToKey( + owner.address, + ); + const allowList = await p2pix.sellerAllowList(ownerKey); + + expect(tx).to.be.ok; + await expect(tx) + .to.emit(p2pix, "DepositAdded") + .withArgs(owner.address, 0, erc20.address, price); + await expect(tx).to.changeTokenBalances( + erc20, + [owner.address, p2pix.address], + ["-100000000000000000000", price], + ); + expect(storage.remaining).to.eq(price); + expect(storage.pixTarget).to.eq(pTarget); + expect(storage.seller).to.eq(owner.address); + expect(storage.token).to.eq(erc20.address); + expect(storage.valid).to.eq(true); + expect(allowList).to.eq(root); + }); + // edge case test + it("should create multiple deposits", async () => { + const ownerKey = await p2pix.callStatic._castAddrToKey(owner.address); + const acc01Key = await p2pix.callStatic._castAddrToKey(acc01.address); + const acc02Key = await p2pix.callStatic._castAddrToKey(acc02.address); + const acc03Key = await p2pix.callStatic._castAddrToKey(acc03.address); + + + const pTarget = ethers.utils.keccak256( + ethers.utils.toUtf8Bytes("_pixTarget"), + ); + const pTarget2 = ethers.utils.keccak256( + ethers.utils.toUtf8Bytes("_pixTarget2"), + ); + const pTarget3 = ethers.utils.keccak256( + ethers.utils.toUtf8Bytes("_pixTarget3"), + ); + // we mock the allowlist root here only to test storage update. In depth + // allowlist test coverage in both "Lock" and "Seller Allowlist Settings" unit tests. + const root = ethers.utils.keccak256( + ethers.utils.toUtf8Bytes("root"), + ); + const nullRoot = ethers.constants.HashZero; + const price2 = price.mul(ethers.BigNumber.from(2)); + const price3 = price.mul(ethers.BigNumber.from(3)); + const price4 = price.mul(ethers.BigNumber.from(4)); + await erc20.mint( + getSignerAddrs(4, await ethers.getSigners()), + price4, + ); + await erc20 + .connect(owner) + .approve(p2pix.address, price); + await erc20 + .connect(acc01) + .approve(p2pix.address, price2); + await erc20 + .connect(acc02) + .approve(p2pix.address, price3); + await erc20 + .connect(acc03) + .approve(p2pix.address, price4); + + const tx = await p2pix + .connect(owner) + .deposit(erc20.address, price, pTarget, root); + const tx2 = await p2pix + .connect(acc01) + .deposit(erc20.address, price2, pTarget2, nullRoot); + const tx3 = await p2pix + .connect(acc02) + .deposit(erc20.address, price3, pTarget3, root); + const tx4 = await p2pix + .connect(acc03) + .deposit(erc20.address, price4, pTarget, nullRoot); + + const storage1: Deposit = await p2pix.mapDeposits(0); + const storage2: Deposit = await p2pix.mapDeposits(1); + const storage3: Deposit = await p2pix.mapDeposits(2); + const storage4: Deposit = await p2pix.mapDeposits(3); + + const allowList1 = await p2pix.sellerAllowList(ownerKey); + const allowList2 = await p2pix.sellerAllowList(acc01Key); + const allowList3 = await p2pix.sellerAllowList(acc02Key); + const allowList4 = await p2pix.sellerAllowList(acc03Key); + + expect(tx).to.be.ok; + expect(tx2).to.be.ok; + expect(tx3).to.be.ok; + expect(tx4).to.be.ok; + + await expect(tx) + .to.emit(p2pix, "DepositAdded") + .withArgs(owner.address, 0, erc20.address, price); + await expect(tx).to.changeTokenBalances( + erc20, + [owner.address, p2pix.address], + ["-100000000000000000000", price], + ); + + await expect(tx2) + .to.emit(p2pix, "DepositAdded") + .withArgs(acc01.address, 1, erc20.address, price2); + await expect(tx2).to.changeTokenBalances( + erc20, + [acc01.address, p2pix.address], + ["-200000000000000000000", price2], + ); + + await expect(tx3) + .to.emit(p2pix, "DepositAdded") + .withArgs(acc02.address, 2, erc20.address, price3); + await expect(tx3).to.changeTokenBalances( + erc20, + [acc02.address, p2pix.address], + ["-300000000000000000000", price3], + ); + + await expect(tx4) + .to.emit(p2pix, "DepositAdded") + .withArgs(acc03.address, 3, erc20.address, price4); + await expect(tx4).to.changeTokenBalances( + erc20, + [acc03.address, p2pix.address], + ["-400000000000000000000", price4], + ); + + expect(storage1.remaining).to.eq(price); + expect(storage1.pixTarget).to.eq(pTarget); + expect(storage1.seller).to.eq(owner.address); + expect(storage1.token).to.eq(erc20.address); + expect(storage1.valid).to.eq(true); + expect(allowList1).to.eq(root); + + expect(storage2.remaining).to.eq(price2); + expect(storage2.pixTarget).to.eq(pTarget2); + expect(storage2.seller).to.eq(acc01.address); + expect(storage2.token).to.eq(erc20.address); + expect(storage2.valid).to.eq(true); + expect(allowList2).to.eq(nullRoot); + + expect(storage3.remaining).to.eq(price3); + expect(storage3.pixTarget).to.eq(pTarget3); + expect(storage3.seller).to.eq(acc02.address); + expect(storage3.token).to.eq(erc20.address); + expect(storage3.valid).to.eq(true); + expect(allowList3).to.eq(root); + + expect(storage4.remaining).to.eq(price4); + expect(storage4.pixTarget).to.eq(pTarget); + expect(storage4.seller).to.eq(acc03.address); + expect(storage4.token).to.eq(erc20.address); + expect(storage4.valid).to.eq(true); + expect(allowList4).to.eq(nullRoot); + }); }); describe("Lock", async () => { // it ("should revert if deposit is invalid") @@ -273,7 +497,7 @@ describe("P2PIX", () => { // it("should unlock expired locks, update storage and emit events") // CHECK FOR userRecord STORAGE UPDATE }); - describe("Seller withdraw", async () => { + describe("Seller Withdraw", async () => { // it("should revert if the msg.sender isn't the deposit's seller") // it -> withdraw remaining funds from deposit // CHECK UNEXPIRE LOCKS @@ -281,5 +505,6 @@ describe("P2PIX", () => { describe("Seller Allowlist Settings", async () => { // it -> set root of seller's allowlist // (test msg.sender != seller error) + // i.e., set it in the fixture }); }); diff --git a/test/utils/errors.ts b/test/utils/errors.ts index 021a6f2..e2c4f60 100644 --- a/test/utils/errors.ts +++ b/test/utils/errors.ts @@ -9,4 +9,7 @@ export enum P2PixErrors { TxAlreadyUsed = "TxAlreadyUsed", InvalidSigner = "InvalidSigner", UNAUTHORIZED = "UNAUTHORIZED", + TokenDenied = "TokenDenied", + NoTokens = "NoTokens", + LengthMismatch = "LengthMismatch", } diff --git a/test/utils/fixtures.ts b/test/utils/fixtures.ts index 6d8e0e0..82796ac 100644 --- a/test/utils/fixtures.ts +++ b/test/utils/fixtures.ts @@ -1,5 +1,5 @@ import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { Signer } from "ethers"; +import { BigNumber, Signer } from "ethers"; import { ethers } from "hardhat"; // import keccak256 from "keccak256"; @@ -11,6 +11,25 @@ import { } from "../../src/types"; // exported interfaces + +export interface Deposit { + remaining: BigNumber; + pixTarget: string; + seller: string; + token: string; + valid: boolean; +} + +export interface Lock { + depositID: string; + relayerPremium: string; + amount: string; + expirationBlock: string; + buyerAddress: string; + relayerTarget: string; + relayerAddress: string; +} + export interface P2pixFixture { p2pix: P2PIX; erc20: MockToken; @@ -95,7 +114,7 @@ export async function p2pixFixture(): Promise { const P2PIX = await ethers.getContractFactory("P2PIX"); const p2pix = (await P2PIX.deploy( - 4, + 10, validSigners, reputation.address, [erc20.address],