diff --git a/artifacts/abi/assets/lsp7/GenesisDigitalAsset.json b/artifacts/abi/assets/lsp7/GenesisDigitalAsset.json index e46e807..d74d1a5 100644 --- a/artifacts/abi/assets/lsp7/GenesisDigitalAsset.json +++ b/artifacts/abi/assets/lsp7/GenesisDigitalAsset.json @@ -99,6 +99,25 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "batchCalls", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "beneficiary", @@ -457,37 +476,6 @@ "outputs": [], "stateMutability": "nonpayable" }, - { - "type": "event", - "name": "AuthorizedOperator", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "operatorNotificationData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, { "type": "event", "name": "BeneficiaryChanged", @@ -528,26 +516,38 @@ }, { "type": "event", - "name": "OwnershipTransferred", + "name": "OperatorAuthorizationChanged", "inputs": [ { - "name": "previousOwner", + "name": "operator", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "newOwner", + "name": "tokenOwner", "type": "address", "indexed": true, "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "operatorNotificationData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], "anonymous": false }, { "type": "event", - "name": "RevokedOperator", + "name": "OperatorRevoked", "inputs": [ { "name": "operator", @@ -564,7 +564,7 @@ { "name": "notified", "type": "bool", - "indexed": false, + "indexed": true, "internalType": "bool" }, { @@ -576,6 +576,25 @@ ], "anonymous": false }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, { "type": "event", "name": "Transfer", @@ -671,6 +690,11 @@ "name": "LSP4TokenSymbolNotEditable", "inputs": [] }, + { + "type": "error", + "name": "LSP4TokenTypeNotEditable", + "inputs": [] + }, { "type": "error", "name": "LSP7AmountExceedsAuthorizedAmount", @@ -718,6 +742,17 @@ } ] }, + { + "type": "error", + "name": "LSP7BatchCallFailed", + "inputs": [ + { + "name": "callIndex", + "type": "uint256", + "internalType": "uint256" + } + ] + }, { "type": "error", "name": "LSP7CannotSendToSelf", diff --git a/artifacts/abi/assets/lsp7/MintableDigitalAsset.json b/artifacts/abi/assets/lsp7/MintableDigitalAsset.json index 47a1aa1..d3e4a96 100644 --- a/artifacts/abi/assets/lsp7/MintableDigitalAsset.json +++ b/artifacts/abi/assets/lsp7/MintableDigitalAsset.json @@ -17,6 +17,11 @@ "type": "address", "internalType": "address" }, + { + "name": "lsp4TokenType_", + "type": "uint256", + "internalType": "uint256" + }, { "name": "isNonDivisible_", "type": "bool", @@ -104,6 +109,25 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "batchCalls", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "decimals", @@ -451,37 +475,6 @@ "outputs": [], "stateMutability": "nonpayable" }, - { - "type": "event", - "name": "AuthorizedOperator", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "operatorNotificationData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, { "type": "event", "name": "DataChanged", @@ -503,26 +496,38 @@ }, { "type": "event", - "name": "OwnershipTransferred", + "name": "OperatorAuthorizationChanged", "inputs": [ { - "name": "previousOwner", + "name": "operator", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "newOwner", + "name": "tokenOwner", "type": "address", "indexed": true, "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "operatorNotificationData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], "anonymous": false }, { "type": "event", - "name": "RevokedOperator", + "name": "OperatorRevoked", "inputs": [ { "name": "operator", @@ -539,7 +544,7 @@ { "name": "notified", "type": "bool", - "indexed": false, + "indexed": true, "internalType": "bool" }, { @@ -551,6 +556,25 @@ ], "anonymous": false }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, { "type": "event", "name": "Transfer", @@ -641,6 +665,11 @@ "name": "LSP4TokenSymbolNotEditable", "inputs": [] }, + { + "type": "error", + "name": "LSP4TokenTypeNotEditable", + "inputs": [] + }, { "type": "error", "name": "LSP7AmountExceedsAuthorizedAmount", @@ -688,6 +717,17 @@ } ] }, + { + "type": "error", + "name": "LSP7BatchCallFailed", + "inputs": [ + { + "name": "callIndex", + "type": "uint256", + "internalType": "uint256" + } + ] + }, { "type": "error", "name": "LSP7CannotSendToSelf", diff --git a/artifacts/abi/assets/lsp8/CollectorIdentifiableDigitalAsset.json b/artifacts/abi/assets/lsp8/CollectorIdentifiableDigitalAsset.json index b5d8291..6c46df9 100644 --- a/artifacts/abi/assets/lsp8/CollectorIdentifiableDigitalAsset.json +++ b/artifacts/abi/assets/lsp8/CollectorIdentifiableDigitalAsset.json @@ -80,6 +80,25 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "batchCalls", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "beneficiary", @@ -163,6 +182,54 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "getTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "isOperatorFor", @@ -394,6 +461,52 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "setTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataValue", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "setTokenSupplyLimit", @@ -661,28 +774,54 @@ }, { "type": "event", - "name": "AuthorizedOperator", + "name": "BeneficiaryChanged", "inputs": [ { - "name": "operator", + "name": "oldBeneficiary", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "tokenOwner", + "name": "newBeneficiary", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ControllerChanged", + "inputs": [ + { + "name": "oldController", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "tokenId", + "name": "newController", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DataChanged", + "inputs": [ + { + "name": "dataKey", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { - "name": "operatorNotificationData", + "name": "dataValue", "type": "bytes", "indexed": false, "internalType": "bytes" @@ -692,54 +831,65 @@ }, { "type": "event", - "name": "BeneficiaryChanged", + "name": "OperatorAuthorizationChanged", "inputs": [ { - "name": "oldBeneficiary", + "name": "operator", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "newBeneficiary", + "name": "tokenOwner", "type": "address", "indexed": true, "internalType": "address" + }, + { + "name": "tokenId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "operatorNotificationData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], "anonymous": false }, { "type": "event", - "name": "ControllerChanged", + "name": "OperatorRevoked", "inputs": [ { - "name": "oldController", + "name": "operator", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "newController", + "name": "tokenOwner", "type": "address", "indexed": true, "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DataChanged", - "inputs": [ + }, { - "name": "dataKey", + "name": "tokenId", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { - "name": "dataValue", + "name": "notified", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "operatorNotificationData", "type": "bytes", "indexed": false, "internalType": "bytes" @@ -794,20 +944,8 @@ }, { "type": "event", - "name": "RevokedOperator", + "name": "TokenIdDataChanged", "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, { "name": "tokenId", "type": "bytes32", @@ -815,13 +953,13 @@ "internalType": "bytes32" }, { - "name": "notified", - "type": "bool", - "indexed": false, - "internalType": "bool" + "name": "dataKey", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - "name": "operatorNotificationData", + "name": "dataValue", "type": "bytes", "indexed": false, "internalType": "bytes" @@ -1108,6 +1246,22 @@ "name": "LSP4TokenSymbolNotEditable", "inputs": [] }, + { + "type": "error", + "name": "LSP4TokenTypeNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8BatchCallFailed", + "inputs": [ + { + "name": "callIndex", + "type": "uint256", + "internalType": "uint256" + } + ] + }, { "type": "error", "name": "LSP8CannotSendToAddressZero", @@ -1253,7 +1407,17 @@ }, { "type": "error", - "name": "LSP8TokenIdTypeNotEditable", + "name": "LSP8TokenIdSchemaNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataEmptyArray", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataLengthMismatch", "inputs": [] }, { diff --git a/artifacts/abi/assets/lsp8/MintableIdentifiableDigitalAsset.json b/artifacts/abi/assets/lsp8/MintableIdentifiableDigitalAsset.json index d32c138..910c557 100644 --- a/artifacts/abi/assets/lsp8/MintableIdentifiableDigitalAsset.json +++ b/artifacts/abi/assets/lsp8/MintableIdentifiableDigitalAsset.json @@ -22,6 +22,11 @@ "type": "uint256", "internalType": "uint256" }, + { + "name": "lsp8TokenIdSchema_", + "type": "uint256", + "internalType": "uint256" + }, { "name": "tokenSupplyCap_", "type": "uint256", @@ -80,6 +85,25 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "batchCalls", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "getData", @@ -137,6 +161,54 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "getTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "isOperatorFor", @@ -273,6 +345,52 @@ "outputs": [], "stateMutability": "payable" }, + { + "type": "function", + "name": "setTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataValue", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "supportsInterface", @@ -456,7 +574,26 @@ }, { "type": "event", - "name": "AuthorizedOperator", + "name": "DataChanged", + "inputs": [ + { + "name": "dataKey", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "dataValue", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorAuthorizationChanged", "inputs": [ { "name": "operator", @@ -487,16 +624,34 @@ }, { "type": "event", - "name": "DataChanged", + "name": "OperatorRevoked", "inputs": [ { - "name": "dataKey", + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { - "name": "dataValue", + "name": "notified", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "operatorNotificationData", "type": "bytes", "indexed": false, "internalType": "bytes" @@ -525,20 +680,8 @@ }, { "type": "event", - "name": "RevokedOperator", + "name": "TokenIdDataChanged", "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, { "name": "tokenId", "type": "bytes32", @@ -546,13 +689,13 @@ "internalType": "bytes32" }, { - "name": "notified", - "type": "bool", - "indexed": false, - "internalType": "bool" + "name": "dataKey", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - "name": "operatorNotificationData", + "name": "dataValue", "type": "bytes", "indexed": false, "internalType": "bytes" @@ -650,6 +793,22 @@ "name": "LSP4TokenSymbolNotEditable", "inputs": [] }, + { + "type": "error", + "name": "LSP4TokenTypeNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8BatchCallFailed", + "inputs": [ + { + "name": "callIndex", + "type": "uint256", + "internalType": "uint256" + } + ] + }, { "type": "error", "name": "LSP8CannotSendToAddressZero", @@ -800,7 +959,17 @@ }, { "type": "error", - "name": "LSP8TokenIdTypeNotEditable", + "name": "LSP8TokenIdSchemaNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataEmptyArray", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataLengthMismatch", "inputs": [] }, { diff --git a/artifacts/abi/drops/LSP7DropsDigitalAsset.json b/artifacts/abi/drops/LSP7DropsDigitalAsset.json index c79dd30..d0576cd 100644 --- a/artifacts/abi/drops/LSP7DropsDigitalAsset.json +++ b/artifacts/abi/drops/LSP7DropsDigitalAsset.json @@ -147,6 +147,25 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "batchCalls", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "claim", @@ -698,37 +717,6 @@ "inputs": [], "anonymous": false }, - { - "type": "event", - "name": "AuthorizedOperator", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "operatorNotificationData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, { "type": "event", "name": "Claimed", @@ -837,26 +825,38 @@ }, { "type": "event", - "name": "OwnershipTransferred", + "name": "OperatorAuthorizationChanged", "inputs": [ { - "name": "previousOwner", + "name": "operator", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "newOwner", + "name": "tokenOwner", "type": "address", "indexed": true, "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "operatorNotificationData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], "anonymous": false }, { "type": "event", - "name": "RevokedOperator", + "name": "OperatorRevoked", "inputs": [ { "name": "operator", @@ -873,7 +873,7 @@ { "name": "notified", "type": "bool", - "indexed": false, + "indexed": true, "internalType": "bool" }, { @@ -885,6 +885,25 @@ ], "anonymous": false }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, { "type": "event", "name": "Transfer", @@ -1050,6 +1069,11 @@ "name": "LSP4TokenSymbolNotEditable", "inputs": [] }, + { + "type": "error", + "name": "LSP4TokenTypeNotEditable", + "inputs": [] + }, { "type": "error", "name": "LSP7AmountExceedsAuthorizedAmount", @@ -1097,6 +1121,17 @@ } ] }, + { + "type": "error", + "name": "LSP7BatchCallFailed", + "inputs": [ + { + "name": "callIndex", + "type": "uint256", + "internalType": "uint256" + } + ] + }, { "type": "error", "name": "LSP7CannotSendToSelf", diff --git a/artifacts/abi/drops/LSP8DropsDigitalAsset.json b/artifacts/abi/drops/LSP8DropsDigitalAsset.json index a5fc4a4..52dc056 100644 --- a/artifacts/abi/drops/LSP8DropsDigitalAsset.json +++ b/artifacts/abi/drops/LSP8DropsDigitalAsset.json @@ -123,6 +123,25 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "batchCalls", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "claim", @@ -265,6 +284,54 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "getTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "isOperatorFor", @@ -514,6 +581,52 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "setTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataValue", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "startTime", @@ -727,37 +840,6 @@ "inputs": [], "anonymous": false }, - { - "type": "event", - "name": "AuthorizedOperator", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "operatorNotificationData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, { "type": "event", "name": "Claimed", @@ -879,26 +961,38 @@ }, { "type": "event", - "name": "OwnershipTransferred", + "name": "OperatorAuthorizationChanged", "inputs": [ { - "name": "previousOwner", + "name": "operator", "type": "address", "indexed": true, "internalType": "address" }, { - "name": "newOwner", + "name": "tokenOwner", "type": "address", "indexed": true, "internalType": "address" + }, + { + "name": "tokenId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "operatorNotificationData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], "anonymous": false }, { "type": "event", - "name": "RevokedOperator", + "name": "OperatorRevoked", "inputs": [ { "name": "operator", @@ -933,6 +1027,50 @@ ], "anonymous": false }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TokenIdDataChanged", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "dataValue", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, { "type": "event", "name": "Transfer", @@ -1098,6 +1236,22 @@ "name": "LSP4TokenSymbolNotEditable", "inputs": [] }, + { + "type": "error", + "name": "LSP4TokenTypeNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8BatchCallFailed", + "inputs": [ + { + "name": "callIndex", + "type": "uint256", + "internalType": "uint256" + } + ] + }, { "type": "error", "name": "LSP8CannotSendToAddressZero", @@ -1248,7 +1402,17 @@ }, { "type": "error", - "name": "LSP8TokenIdTypeNotEditable", + "name": "LSP8TokenIdSchemaNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataEmptyArray", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataLengthMismatch", "inputs": [] }, { diff --git a/artifacts/abi/page/PageName.json b/artifacts/abi/page/PageName.json index a8c2466..d331994 100644 --- a/artifacts/abi/page/PageName.json +++ b/artifacts/abi/page/PageName.json @@ -54,6 +54,25 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "batchCalls", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "beneficiary", @@ -137,6 +156,54 @@ ], "stateMutability": "view" }, + { + "type": "function", + "name": "getTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [ + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "initialize", @@ -500,6 +567,52 @@ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "setTokenIdData", + "inputs": [ + { + "name": "tokenId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataKey", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "dataValue", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setTokenIdDataBatch", + "inputs": [ + { + "name": "tokenIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataKeys", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "dataValues", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, { "type": "function", "name": "supportsInterface", @@ -688,37 +801,6 @@ "outputs": [], "stateMutability": "nonpayable" }, - { - "type": "event", - "name": "AuthorizedOperator", - "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "operatorNotificationData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, { "type": "event", "name": "BeneficiaryChanged", @@ -789,6 +871,74 @@ ], "anonymous": false }, + { + "type": "event", + "name": "OperatorAuthorizationChanged", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "operatorNotificationData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorRevoked", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "tokenId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "notified", + "type": "bool", + "indexed": false, + "internalType": "bool" + }, + { + "name": "operatorNotificationData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, { "type": "event", "name": "OwnershipTransferred", @@ -867,20 +1017,8 @@ }, { "type": "event", - "name": "RevokedOperator", + "name": "TokenIdDataChanged", "inputs": [ - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, { "name": "tokenId", "type": "bytes32", @@ -888,13 +1026,13 @@ "internalType": "bytes32" }, { - "name": "notified", - "type": "bool", - "indexed": false, - "internalType": "bool" + "name": "dataKey", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" }, { - "name": "operatorNotificationData", + "name": "dataValue", "type": "bytes", "indexed": false, "internalType": "bytes" @@ -1112,6 +1250,22 @@ "name": "LSP4TokenSymbolNotEditable", "inputs": [] }, + { + "type": "error", + "name": "LSP4TokenTypeNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8BatchCallFailed", + "inputs": [ + { + "name": "callIndex", + "type": "uint256", + "internalType": "uint256" + } + ] + }, { "type": "error", "name": "LSP8CannotSendToAddressZero", @@ -1247,7 +1401,17 @@ }, { "type": "error", - "name": "LSP8TokenIdTypeNotEditable", + "name": "LSP8TokenIdSchemaNotEditable", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataEmptyArray", + "inputs": [] + }, + { + "type": "error", + "name": "LSP8TokenIdsDataLengthMismatch", "inputs": [] }, { diff --git a/artifacts/bytecode/assets/lsp7/DigitalAssetDrop.bin b/artifacts/bytecode/assets/lsp7/DigitalAssetDrop.bin index 69ea1ee..910c006 100644 --- a/artifacts/bytecode/assets/lsp7/DigitalAssetDrop.bin +++ b/artifacts/bytecode/assets/lsp7/DigitalAssetDrop.bin @@ -1 +1 @@ -0x60a060405234801561001057600080fd5b50604051610cc7380380610cc783398101604081905261002f916101a6565b600180556001600160a01b03831661007e5760405162461bcd60e51b815260206004820152600d60248201526c6173736574206973207a65726f60981b60448201526064015b60405180910390fd5b60008290036100be5760405162461bcd60e51b815260206004820152600c60248201526b726f6f74206973207a65726f60a01b6044820152606401610075565b6001600160a01b0381166101045760405162461bcd60e51b815260206004820152600d60248201526c6f776e6572206973207a65726f60981b6044820152606401610075565b6001600160a01b03831660805261011a82600255565b6101238161012b565b5050506101e9565b6000546001600160a01b0382811691161461018e57600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b6001600160a01b038116811461018e57600080fd5b6000806000606084860312156101bb57600080fd5b83516101c681610191565b6020850151604086015191945092506101de81610191565b809150509250925092565b608051610aaf6102186000396000818160870152818161024f0152818161034c01526104450152610aaf6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80639e34070f1161005b5780639e34070f146100e1578063c8edd8ab14610104578063f05c55ac14610117578063f2fde38b1461012a57600080fd5b806338d52e0f14610082578063715018a6146100c65780638da5cb5b146100d0575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ce61013d565b005b6000546001600160a01b03166100a9565b6100f46100ef3660046108ab565b610151565b60405190151581526020016100bd565b6100ce6101123660046108e0565b610162565b6100ce610125366004610974565b6102bb565b6100ce610138366004610974565b6104ae565b61014561053b565b61014f60006105a4565b565b600061015c82610621565b92915050565b61016a610662565b6101ca858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805133602082015290810186905287925060600190506040516020818303038152906040526106bb565b816001600160a01b0316837f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0268360405161020691815260200190565b60405180910390a3604051633b06cddd60e11b81523060048201526001600160a01b0383811660248301526044820183905260006064830181905260a0608484015260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063760d9bba9060c401600060405180830381600087803b15801561029357600080fd5b505af11580156102a7573d6000803e3d6000fd5b505050506102b460018055565b5050505050565b6102c361053b565b6102cb610662565b6001600160a01b03811661031b576040517f1a3b45fd0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561039b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bf919061098f565b9050816001600160a01b03167feb44e1b23fad598a86840f12d9ab99216d186e1eeebb5ef8e3b3d152ba7cbc7e826040516103fc91815260200190565b60405180910390a2604051633b06cddd60e11b81523060048201526001600160a01b038381166024830152604482018390526001606483015260a06084830152600060a48301527f0000000000000000000000000000000000000000000000000000000000000000169063760d9bba9060c401600060405180830381600087803b15801561048957600080fd5b505af115801561049d573d6000803e3d6000fd5b50505050506104ab60018055565b50565b6104b661053b565b6001600160a01b0381166105325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610312565b6104ab816105a4565b3361054e6000546001600160a01b031690565b6001600160a01b03161461014f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610312565b6000546001600160a01b038281169116146104ab57600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080610630610100846109be565b90506000610640610100856109d2565b60009283526003602052604090922054600190921b9182169091149392505050565b6002600154036106b45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610312565b6002600155565b6002546106f4576040517f5058901600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106fd82610621565b156107385781816040517f331e2c3f0000000000000000000000000000000000000000000000000000000081526004016103129291906109e6565b6000828260405160200161074d9291906109e6565b60408051601f198184030181528282528051602091820120908301520160405160208183030381529060405280519060200120905061078f84600254836107d8565b6107c95782826040517f4a0e7b130000000000000000000000000000000000000000000000000000000081526004016103129291906109e6565b6107d2836107ee565b50505050565b6000826107e5858461082c565b14949350505050565b60006107fc610100836109be565b9050600061080c610100846109d2565b6000928352600360205260409092208054600190931b9092179091555050565b600081815b84518110156108715761085d8286838151811061085057610850610a3c565b6020026020010151610879565b91508061086981610a52565b915050610831565b509392505050565b60008183106108955760008281526020849052604090206108a4565b60008381526020839052604090205b9392505050565b6000602082840312156108bd57600080fd5b5035919050565b80356001600160a01b03811681146108db57600080fd5b919050565b6000806000806000608086880312156108f857600080fd5b853567ffffffffffffffff8082111561091057600080fd5b818801915088601f83011261092457600080fd5b81358181111561093357600080fd5b8960208260051b850101111561094857600080fd5b602092830197509550508601359250610963604087016108c4565b949793965091946060013592915050565b60006020828403121561098657600080fd5b6108a4826108c4565b6000602082840312156109a157600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826109cd576109cd6109a8565b500490565b6000826109e1576109e16109a8565b500690565b82815260006020604081840152835180604085015260005b81811015610a1a578581018301518582016060015282016109fe565b506000606082860101526060601f19601f830116850101925050509392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610a7257634e487b7160e01b600052601160045260246000fd5b506001019056fea264697066735822122017d6fb2ad4dcade26a12168d82d26895d257d57ff8aee93f5aef6f0824d9f1d264736f6c63430008110033 +0x60a060405234801561001057600080fd5b50604051610cc7380380610cc783398101604081905261002f916101a6565b600180556001600160a01b03831661007e5760405162461bcd60e51b815260206004820152600d60248201526c6173736574206973207a65726f60981b60448201526064015b60405180910390fd5b60008290036100be5760405162461bcd60e51b815260206004820152600c60248201526b726f6f74206973207a65726f60a01b6044820152606401610075565b6001600160a01b0381166101045760405162461bcd60e51b815260206004820152600d60248201526c6f776e6572206973207a65726f60981b6044820152606401610075565b6001600160a01b03831660805261011a82600255565b6101238161012b565b5050506101e9565b6000546001600160a01b0382811691161461018e57600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b6001600160a01b038116811461018e57600080fd5b6000806000606084860312156101bb57600080fd5b83516101c681610191565b6020850151604086015191945092506101de81610191565b809150509250925092565b608051610aaf6102186000396000818160870152818161024f0152818161034c01526104450152610aaf6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80639e34070f1161005b5780639e34070f146100e1578063c8edd8ab14610104578063f05c55ac14610117578063f2fde38b1461012a57600080fd5b806338d52e0f14610082578063715018a6146100c65780638da5cb5b146100d0575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ce61013d565b005b6000546001600160a01b03166100a9565b6100f46100ef3660046108ab565b610151565b60405190151581526020016100bd565b6100ce6101123660046108e0565b610162565b6100ce610125366004610974565b6102bb565b6100ce610138366004610974565b6104ae565b61014561053b565b61014f60006105a4565b565b600061015c82610621565b92915050565b61016a610662565b6101ca858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805133602082015290810186905287925060600190506040516020818303038152906040526106bb565b816001600160a01b0316837f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0268360405161020691815260200190565b60405180910390a3604051633b06cddd60e11b81523060048201526001600160a01b0383811660248301526044820183905260006064830181905260a0608484015260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063760d9bba9060c401600060405180830381600087803b15801561029357600080fd5b505af11580156102a7573d6000803e3d6000fd5b505050506102b460018055565b5050505050565b6102c361053b565b6102cb610662565b6001600160a01b03811661031b576040517f1a3b45fd0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561039b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bf919061098f565b9050816001600160a01b03167feb44e1b23fad598a86840f12d9ab99216d186e1eeebb5ef8e3b3d152ba7cbc7e826040516103fc91815260200190565b60405180910390a2604051633b06cddd60e11b81523060048201526001600160a01b038381166024830152604482018390526001606483015260a06084830152600060a48301527f0000000000000000000000000000000000000000000000000000000000000000169063760d9bba9060c401600060405180830381600087803b15801561048957600080fd5b505af115801561049d573d6000803e3d6000fd5b50505050506104ab60018055565b50565b6104b661053b565b6001600160a01b0381166105325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610312565b6104ab816105a4565b3361054e6000546001600160a01b031690565b6001600160a01b03161461014f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610312565b6000546001600160a01b038281169116146104ab57600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080610630610100846109be565b90506000610640610100856109d2565b60009283526003602052604090922054600190921b9182169091149392505050565b6002600154036106b45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610312565b6002600155565b6002546106f4576040517f5058901600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106fd82610621565b156107385781816040517f331e2c3f0000000000000000000000000000000000000000000000000000000081526004016103129291906109e6565b6000828260405160200161074d9291906109e6565b60408051601f198184030181528282528051602091820120908301520160405160208183030381529060405280519060200120905061078f84600254836107d8565b6107c95782826040517f4a0e7b130000000000000000000000000000000000000000000000000000000081526004016103129291906109e6565b6107d2836107ee565b50505050565b6000826107e5858461082c565b14949350505050565b60006107fc610100836109be565b9050600061080c610100846109d2565b6000928352600360205260409092208054600190931b9092179091555050565b600081815b84518110156108715761085d8286838151811061085057610850610a3c565b6020026020010151610879565b91508061086981610a52565b915050610831565b509392505050565b60008183106108955760008281526020849052604090206108a4565b60008381526020839052604090205b9392505050565b6000602082840312156108bd57600080fd5b5035919050565b80356001600160a01b03811681146108db57600080fd5b919050565b6000806000806000608086880312156108f857600080fd5b853567ffffffffffffffff8082111561091057600080fd5b818801915088601f83011261092457600080fd5b81358181111561093357600080fd5b8960208260051b850101111561094857600080fd5b602092830197509550508601359250610963604087016108c4565b949793965091946060013592915050565b60006020828403121561098657600080fd5b6108a4826108c4565b6000602082840312156109a157600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826109cd576109cd6109a8565b500490565b6000826109e1576109e16109a8565b500690565b82815260006020604081840152835180604085015260005b81811015610a1a578581018301518582016060015282016109fe565b506000606082860101526060601f19601f830116850101925050509392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610a7257634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212204a9c817ccaa89546c4240df8314beb22cb4eb93ab083254d0f060b3c14c4878864736f6c63430008110033 diff --git a/artifacts/bytecode/assets/lsp7/MintableDigitalAsset.bin b/artifacts/bytecode/assets/lsp7/MintableDigitalAsset.bin index 1b9c995..87333ee 100644 --- a/artifacts/bytecode/assets/lsp7/MintableDigitalAsset.bin +++ b/artifacts/bytecode/assets/lsp7/MintableDigitalAsset.bin @@ -1 +1 @@ -0x60a06040523480156200001157600080fd5b5060405162002e0138038062002e01833981016040819052620000349162000369565b808585858583838383838383806001600160a01b038116620000ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840160405180910390fd5b620000c181620001dc60201b62000cef1760201c565b50620001187feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b8152506200024360201b62000d6c1760201c565b620001527fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b846200024360201b62000d6c1760201c565b6200018c7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b836200024360201b62000d6c1760201c565b50506002805460ff19169215159290921790915550505060008690039450620001cd93505050505760405163acf1d8c560e01b815260040160405180910390fd5b60805250620005aa9350505050565b6000546001600160a01b038281169116146200024057600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b60008281526001602052604090206200025d8282620004a9565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b28260405162000290919062000575565b60405180910390a25050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002cf578181015183820152602001620002b5565b50506000910152565b600082601f830112620002ea57600080fd5b81516001600160401b03808211156200030757620003076200029c565b604051601f8301601f19908116603f011681019082821181831017156200033257620003326200029c565b816040528381528660208588010111156200034c57600080fd5b6200035f846020830160208901620002b2565b9695505050505050565b600080600080600060a086880312156200038257600080fd5b85516001600160401b03808211156200039a57600080fd5b620003a889838a01620002d8565b96506020880151915080821115620003bf57600080fd5b50620003ce88828901620002d8565b604088015190955090506001600160a01b0381168114620003ee57600080fd5b606087015190935080151581146200040557600080fd5b80925050608086015190509295509295909350565b600181811c908216806200042f57607f821691505b6020821081036200045057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004a457600081815260208120601f850160051c810160208610156200047f5750805b601f850160051c820191505b81811015620004a0578281556001016200048b565b5050505b505050565b81516001600160401b03811115620004c557620004c56200029c565b620004dd81620004d684546200041a565b8462000456565b602080601f831160018114620005155760008415620004fc5750858301515b600019600386901b1c1916600185901b178555620004a0565b600085815260208120601f198616915b82811015620005465788860151825594840194600190910190840162000525565b5085821015620005655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602081526000825180602084015262000596816040850160208701620002b2565b601f01601f19169190910160400192915050565b608051612834620005cd6000396000818161030f015261176b01526128346000f3fe60806040526004361061016e5760003560e01c8063715018a6116100cb5780638da5cb5b1161007f578063d72fc29a11610059578063d72fc29a14610499578063dedff9c6146104c6578063f2fde38b146104f3576101e2565b80638da5cb5b1461043e5780639790242114610466578063b49506fd14610479576101e2565b8063760d9bba116100b0578063760d9bba146103eb5780637b204c4e1461040b5780637f23690c1461042b576101e2565b8063715018a6146103b65780637580d920146103cb576101e2565b80634521748e1161012257806354f6127f1161010757806354f6127f1461033357806365aeaa951461036057806370a0823114610380576101e2565b80634521748e146102e057806352058d8a14610300576101e2565b80632bc1da82116101535780632bc1da82146102775780632d7667c914610299578063313ce567146102b9576101e2565b806301ffc9a71461022357806318160ddd14610258576101e2565b366101e257346000036101b05760405163e5099ee360e01b81526004016101a79060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561020d57828260405163e5099ee360e01b81526004016101a7929190611ca9565b6102178383610513565b80519350602001915050f35b34801561022f57600080fd5b5061024361023e366004611cd8565b610622565b60405190151581526020015b60405180910390f35b34801561026457600080fd5b506003545b60405190815260200161024f565b34801561028357600080fd5b50610297610292366004611de3565b61066f565b005b3480156102a557600080fd5b506102976102b4366004612018565b610743565b3480156102c557600080fd5b506102ce61084b565b60405160ff909116815260200161024f565b3480156102ec57600080fd5b506102976102fb3660046120ea565b610864565b34801561030c57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610269565b34801561033f57600080fd5b5061035361034e366004612132565b6108dd565b60405161024f919061219b565b34801561036c57600080fd5b5061026961037b3660046121ae565b6108e8565b34801561038c57600080fd5b5061026961039b3660046121e1565b6001600160a01b031660009081526004602052604090205490565b3480156103c257600080fd5b5061029761094e565b3480156103d757600080fd5b506102976103e63660046121fc565b610962565b3480156103f757600080fd5b50610297610406366004612264565b610976565b34801561041757600080fd5b50610297610426366004611de3565b6109f0565b6102976104393660046122d0565b610a49565b34801561044a57600080fd5b506000546040516001600160a01b03909116815260200161024f565b610297610474366004612317565b610a7e565b34801561048557600080fd5b50610297610494366004611de3565b610b6b565b3480156104a557600080fd5b506104b96104b43660046121e1565b610b90565b60405161024f9190612371565b3480156104d257600080fd5b506104e66104e13660046123be565b610bb4565b60405161024f91906123f3565b3480156104ff57600080fd5b5061029761050e3660046121e1565b610c5f565b6060600061052c6000356001600160e01b031916610dc1565b5090506001600160a01b03811661057d576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101a7565b600080826001600160a01b031634878733346040516020016105a29493929190612455565b60408051601f19818403018152908290526105bc91612485565b60006040518083038185875af1925050503d80600081146105f9576040519150601f19603f3d011682016040523d82523d6000602084013e6105fe565b606091505b5091509150811561061357925061061c915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fdaa746b7000000000000000000000000000000000000000000000000000000001480610660575061066082610e6b565b8061061c575061061c82610ea9565b600061067b84336108e8565b9050806000036106c2576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016101a7565b60006106ce84836124b7565b90506106de338683600187610ee7565b60003382856040516020016106f5939291906124ca565b60408051601f19818403018152919052905061073b6001600160a01b0387167f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc8361108b565b505050505050565b8451845181141580610756575083518114155b80610762575082518114155b8061076e575081518114155b156107a5576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156108425761083a8782815181106107c5576107c56124fb565b60200260200101518783815181106107df576107df6124fb565b60200260200101518784815181106107f9576107f96124fb565b6020026020010151878581518110610813576108136124fb565b602002602001015187868151811061082d5761082d6124fb565b6020026020010151610976565b6001016107a8565b50505050505050565b60025460009060ff1661085e5750601290565b50600090565b610872338460008585610ee7565b81156108d85760003360008360405160200161089093929190612511565b60408051601f1981840301815291905290506108d66001600160a01b0385167f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc8361108b565b505b505050565b606061061c8261111f565b6000826001600160a01b0316826001600160a01b03160361092257506001600160a01b03811660009081526004602052604090205461061c565b506001600160a01b0380821660009081526006602090815260408083209386168352929052205461061c565b6109566111c1565b6109606000610cef565b565b61096a6111c1565b6108d68484848461122a565b836001600160a01b0316856001600160a01b0316036109c1576040517fb9afb00000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b038616146109dc576109dc338685611236565b6109e985858585856112dd565b5050505050565b60006109fc84336108e8565b905082811015610a38576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8281036106de338683600187610ee7565b610a516111c1565b3415610a705760405163f36ba73760e01b815260040160405180910390fd5b610a7a82826114bb565b5050565b610a866111c1565b3415610aa55760405163f36ba73760e01b815260040160405180910390fd5b8051825114610ae0576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003610b1b576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156108d857610b63838281518110610b3c57610b3c6124fb565b6020026020010151838381518110610b5657610b566124fb565b60200260200101516114bb565b600101610b1e565b610b79338484600185610ee7565b6000338383604051602001610890939291906124ca565b6001600160a01b038116600090815260056020526040902060609061061c906115d5565b6060815167ffffffffffffffff811115610bd057610bd0611d1e565b604051908082528060200260200182016040528015610c0357816020015b6060815260200190600190039081610bee5790505b50905060005b8251811015610c5957610c34838281518110610c2757610c276124fb565b602002602001015161111f565b828281518110610c4657610c466124fb565b6020908102919091010152600101610c09565b50919050565b610c676111c1565b6001600160a01b038116610ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101a7565b610cec81610cef565b50565b6000546001600160a01b03828116911614610cec57600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000828152600160205260409020610d8482826125b6565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051610db5919061219b565b60405180910390a25050565b60008080610df97fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b031986166115e2565b90506000610e068261111f565b90508051601414158015610e1a5750805115155b15610e5357806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016101a7919061219b565b610e5c81612676565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b00000000000000000000000000000000000000000000000000000000148061061c575061061c82611653565b600080610ebc6301ffc9a760e01b610dc1565b5090506001600160a01b038116610ed65750600092915050565b610ee081846116a1565b9392505050565b6001600160a01b038416610f27576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603610f72576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0380861660009081526006602090815260408083209388168352929052208390558215611014576001600160a01b0385166000908152600560205260409020610fc2908561173f565b5082856001600160a01b0316856001600160a01b03167f0744b3de98efaff36606a0e67662fb8697adb0ed49d90730bdb4bbf885f3059784604051611007919061219b565b60405180910390a46109e9565b6001600160a01b03851660009081526005602052604090206110369085611754565b50846001600160a01b0316846001600160a01b03167f66015c8835ee443e5bc280176609215a5035da4bae05bdef994596d7e43aae22848460405161107c9291906126b2565b60405180910390a35050505050565b6110a56001600160a01b038416631aed5a8560e21b6116a1565b156108d857604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906110d890859085906004016126cd565b6000604051808303816000875af11580156110f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d691908101906126e6565b600081815260016020526040902080546060919061113c9061253c565b80601f01602080910402602001604051908101604052809291908181526020018280546111689061253c565b80156111b55780601f1061118a576101008083540402835291602001916111b5565b820191906000526020600020905b81548152906001019060200180831161119857829003601f168201915b50505050509050919050565b336111d46000546001600160a01b031690565b6001600160a01b0316146109605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a7565b6108d684848484611769565b6001600160a01b03808316600090815260066020908152604080832093871683529290522054808211156112b7576040517ff3a6b6910000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301526024820183905285166044820152606481018390526084016101a7565b6108d683856112c68585612754565b600060405180602001604052806000815250610ee7565b6001600160a01b03851615806112fa57506001600160a01b038416155b1561131857604051630d2d5ec360e41b815260040160405180910390fd5b6001600160a01b03851660009081526004602052604090205480841115611384576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b0387166024820152604481018590526064016101a7565b611390868686856108d6565b6001600160a01b038616600090815260046020526040812080548692906113b8908490612754565b90915550506001600160a01b038516600090815260046020526040812080548692906113e59084906124b7565b92505081905550846001600160a01b0316866001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a687878760405161143d93929190612767565b60405180910390a4611451868686856108d6565b60008686868560405160200161146a9493929190612788565b60408051601f1981840301815291905290506114b06001600160a01b0388167f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea8361108b565b6108428685836117e2565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611514576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa820161156d576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260016020526040902061158582826125b6565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2610100835111156115c6576115c18360006101006118de565b6115c8565b825b604051610db5919061219b565b60606000610ee083611a06565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c8301529182910160405160208183030381529060405290508061164b906127c4565b949350505050565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061061c57506301ffc9a760e01b6001600160e01b031983161461061c565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611728575060208210155b80156117345750600081115b979650505050505050565b6000610ee0836001600160a01b038416611a61565b6000610ee0836001600160a01b038416611ab0565b7f00000000000000000000000000000000000000000000000000000000000000008361179460035490565b61179e91906124b7565b11156117d6576040517feacbf0d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d684848484611ba3565b6117fc6001600160a01b038416631aed5a8560e21b6116a1565b1561184f57604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906110d8907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c9085906004016126cd565b816108d8576001600160a01b0383163b156118a1576040517fa608fbb60000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6040517f26c247f40000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6060816118ec81601f6124b7565b101561193a5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101a7565b61194482846124b7565b845110156119945760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016101a7565b6060821580156119b357604051915060008252602082016040526119fd565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156119ec5780518352602092830192016119d4565b5050858452601f01601f1916604052505b50949350505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156111b557602002820191906000526020600020905b815481526020019060010190808311611a425750505050509050919050565b6000818152600183016020526040812054611aa85750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561061c565b50600061061c565b60008181526001830160205260408120548015611b99576000611ad4600183612754565b8554909150600090611ae890600190612754565b9050818114611b4d576000866000018281548110611b0857611b086124fb565b9060005260206000200154905080876000018481548110611b2b57611b2b6124fb565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611b5e57611b5e6127e8565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061061c565b600091505061061c565b6001600160a01b038416611bca57604051630d2d5ec360e41b815260040160405180910390fd5b611bd760008585846108d6565b8260036000828254611be991906124b7565b90915550506001600160a01b03841660009081526004602052604081208054859290611c169084906124b7565b90915550506040516001600160a01b0385169060009033907f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a690611c5f90889088908890612767565b60405180910390a4611c7460008585846108d6565b600080858584604051602001611c8d9493929190612788565b60405160208183030381529060405290506109e98584836117e2565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215611cea57600080fd5b81356001600160e01b031981168114610ee057600080fd5b80356001600160a01b0381168114611d1957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d5d57611d5d611d1e565b604052919050565b600067ffffffffffffffff821115611d7f57611d7f611d1e565b50601f01601f191660200190565b600082601f830112611d9e57600080fd5b8135611db1611dac82611d65565b611d34565b818152846020838601011115611dc657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215611df857600080fd5b611e0184611d02565b925060208401359150604084013567ffffffffffffffff811115611e2457600080fd5b611e3086828701611d8d565b9150509250925092565b600067ffffffffffffffff821115611e5457611e54611d1e565b5060051b60200190565b600082601f830112611e6f57600080fd5b81356020611e7f611dac83611e3a565b82815260059290921b84018101918181019086841115611e9e57600080fd5b8286015b84811015611ec057611eb381611d02565b8352918301918301611ea2565b509695505050505050565b600082601f830112611edc57600080fd5b81356020611eec611dac83611e3a565b82815260059290921b84018101918181019086841115611f0b57600080fd5b8286015b84811015611ec05780358352918301918301611f0f565b80358015158114611d1957600080fd5b600082601f830112611f4757600080fd5b81356020611f57611dac83611e3a565b82815260059290921b84018101918181019086841115611f7657600080fd5b8286015b84811015611ec057611f8b81611f26565b8352918301918301611f7a565b600082601f830112611fa957600080fd5b81356020611fb9611dac83611e3a565b82815260059290921b84018101918181019086841115611fd857600080fd5b8286015b84811015611ec057803567ffffffffffffffff811115611ffc5760008081fd5b61200a8986838b0101611d8d565b845250918301918301611fdc565b600080600080600060a0868803121561203057600080fd5b853567ffffffffffffffff8082111561204857600080fd5b61205489838a01611e5e565b9650602088013591508082111561206a57600080fd5b61207689838a01611e5e565b9550604088013591508082111561208c57600080fd5b61209889838a01611ecb565b945060608801359150808211156120ae57600080fd5b6120ba89838a01611f36565b935060808801359150808211156120d057600080fd5b506120dd88828901611f98565b9150509295509295909350565b6000806000606084860312156120ff57600080fd5b61210884611d02565b925061211660208501611f26565b9150604084013567ffffffffffffffff811115611e2457600080fd5b60006020828403121561214457600080fd5b5035919050565b60005b8381101561216657818101518382015260200161214e565b50506000910152565b6000815180845261218781602086016020860161214b565b601f01601f19169290920160200192915050565b602081526000610ee0602083018461216f565b600080604083850312156121c157600080fd5b6121ca83611d02565b91506121d860208401611d02565b90509250929050565b6000602082840312156121f357600080fd5b610ee082611d02565b6000806000806080858703121561221257600080fd5b61221b85611d02565b93506020850135925061223060408601611f26565b9150606085013567ffffffffffffffff81111561224c57600080fd5b61225887828801611d8d565b91505092959194509250565b600080600080600060a0868803121561227c57600080fd5b61228586611d02565b945061229360208701611d02565b9350604086013592506122a860608701611f26565b9150608086013567ffffffffffffffff8111156122c457600080fd5b6120dd88828901611d8d565b600080604083850312156122e357600080fd5b82359150602083013567ffffffffffffffff81111561230157600080fd5b61230d85828601611d8d565b9150509250929050565b6000806040838503121561232a57600080fd5b823567ffffffffffffffff8082111561234257600080fd5b61234e86838701611ecb565b9350602085013591508082111561236457600080fd5b5061230d85828601611f98565b6020808252825182820181905260009190848201906040850190845b818110156123b25783516001600160a01b03168352928401929184019160010161238d565b50909695505050505050565b6000602082840312156123d057600080fd5b813567ffffffffffffffff8111156123e757600080fd5b61164b84828501611ecb565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561244857603f1988860301845261243685835161216f565b9450928501929085019060010161241a565b5092979650505050505050565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b6000825161249781846020870161214b565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561061c5761061c6124a1565b6001600160a01b03841681528260208201526060604082015260006124f2606083018461216f565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038416815260ff831660208201526060604082015260006124f2606083018461216f565b600181811c9082168061255057607f821691505b602082108103610c5957634e487b7160e01b600052602260045260246000fd5b601f8211156108d857600081815260208120601f850160051c810160208610156125975750805b601f850160051c820191505b8181101561073b578281556001016125a3565b815167ffffffffffffffff8111156125d0576125d0611d1e565b6125e4816125de845461253c565b84612570565b602080601f83116001811461261957600084156126015750858301515b600019600386901b1c1916600185901b17855561073b565b600085815260208120601f198616915b8281101561264857888601518255948401946001909101908401612629565b50858210156126665787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff1980821692919060148310156126aa5780818460140360031b1b83161693505b505050919050565b821515815260406020820152600061164b604083018461216f565b82815260406020820152600061164b604083018461216f565b6000602082840312156126f857600080fd5b815167ffffffffffffffff81111561270f57600080fd5b8201601f8101841361272057600080fd5b805161272e611dac82611d65565b81815285602083850101111561274357600080fd5b6124f282602083016020860161214b565b8181038181111561061c5761061c6124a1565b83815282151560208201526060604082015260006124f2606083018461216f565b60006001600160a01b038087168352808616602084015250836040830152608060608301526127ba608083018461216f565b9695505050505050565b80516020808301519190811015610c595760001960209190910360031b1b16919050565b634e487b7160e01b600052603160045260246000fdfea26469706673582212206761a83f19f7be3dcddc701a28336220d2c7ded1036a1d7653ef4866ea4c8a9264736f6c63430008110033 +0x60a06040523480156200001157600080fd5b5060405162002f3938038062002f398339810160408190526200003491620003c3565b808686868686848484848484848484816001600160a01b038116620000ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840160405180910390fd5b620000c4816200023660201b62000e141760201c565b506200011b7feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b8152506200029d60201b62000e911760201c565b620001557fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b856200029d60201b62000e911760201c565b6200018f7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b846200029d60201b62000e911760201c565b6040805160208101839052620001e2917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb391016040516020818303038152906040526200029d60201b62000e911760201c565b50506002805460ff191693151593909317909255505050600089900397506200022696505050505050505760405163acf1d8c560e01b815260040160405180910390fd5b608052506200060c945050505050565b6000546001600160a01b038281169116146200029a57600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b6000828152600160205260409020620002b782826200050b565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051620002ea9190620005d7565b60405180910390a25050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003295781810151838201526020016200030f565b50506000910152565b600082601f8301126200034457600080fd5b81516001600160401b0380821115620003615762000361620002f6565b604051601f8301601f19908116603f011681019082821181831017156200038c576200038c620002f6565b81604052838152866020858801011115620003a657600080fd5b620003b98460208301602089016200030c565b9695505050505050565b60008060008060008060c08789031215620003dd57600080fd5b86516001600160401b0380821115620003f557600080fd5b620004038a838b0162000332565b975060208901519150808211156200041a57600080fd5b506200042989828a0162000332565b604089015190965090506001600160a01b03811681146200044957600080fd5b60608801516080890151919550935080151581146200046757600080fd5b8092505060a087015190509295509295509295565b600181811c908216806200049157607f821691505b602082108103620004b257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200050657600081815260208120601f850160051c81016020861015620004e15750805b601f850160051c820191505b818110156200050257828155600101620004ed565b5050505b505050565b81516001600160401b03811115620005275762000527620002f6565b6200053f816200053884546200047c565b84620004b8565b602080601f8311600181146200057757600084156200055e5750858301515b600019600386901b1c1916600185901b17855562000502565b600085815260208120601f198616915b82811015620005a85788860151825594840194600190910190840162000587565b5085821015620005c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620005f88160408501602087016200030c565b601f01601f19169190910160400192915050565b60805161290a6200062f6000396000818161031a0152611783015261290a6000f3fe6080604052600436106101795760003560e01c8063715018a6116100cb5780638da5cb5b1161007f578063d72fc29a11610059578063d72fc29a146104d1578063dedff9c6146104fe578063f2fde38b1461051e576101ed565b80638da5cb5b14610476578063979024211461049e578063b49506fd146104b1576101ed565b8063760d9bba116100b0578063760d9bba146104235780637b204c4e146104435780637f23690c14610463576101ed565b8063715018a6146103ee5780637580d92014610403576101ed565b80634521748e1161012d57806365aeaa951161010757806365aeaa951461036b5780636963d4381461038b57806370a08231146103b8576101ed565b80634521748e146102eb57806352058d8a1461030b57806354f6127f1461033e576101ed565b80632bc1da821161015e5780632bc1da82146102825780632d7667c9146102a4578063313ce567146102c4576101ed565b806301ffc9a71461022e57806318160ddd14610263576101ed565b366101ed57346000036101bb5760405163e5099ee360e01b81526004016101b29060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561021857828260405163e5099ee360e01b81526004016101b2929190611cc9565b610222838361053e565b80519350602001915050f35b34801561023a57600080fd5b5061024e610249366004611cf8565b61064d565b60405190151581526020015b60405180910390f35b34801561026f57600080fd5b506003545b60405190815260200161025a565b34801561028e57600080fd5b506102a261029d366004611e03565b61069a565b005b3480156102b057600080fd5b506102a26102bf366004612038565b610743565b3480156102d057600080fd5b506102d961084b565b60405160ff909116815260200161025a565b3480156102f757600080fd5b506102a261030636600461210a565b610864565b34801561031757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610274565b34801561034a57600080fd5b5061035e610359366004612152565b6108b2565b60405161025a91906121bb565b34801561037757600080fd5b506102746103863660046121ce565b6108bd565b34801561039757600080fd5b506103ab6103a6366004612201565b610923565b60405161025a9190612276565b3480156103c457600080fd5b506102746103d33660046122d8565b6001600160a01b031660009081526004602052604090205490565b3480156103fa57600080fd5b506102a2610a73565b34801561040f57600080fd5b506102a261041e3660046122f3565b610a87565b34801561042f57600080fd5b506102a261043e36600461235b565b610a9b565b34801561044f57600080fd5b506102a261045e366004611e03565b610b15565b6102a26104713660046123c7565b610b6e565b34801561048257600080fd5b506000546040516001600160a01b03909116815260200161025a565b6102a26104ac36600461240e565b610ba3565b3480156104bd57600080fd5b506102a26104cc366004611e03565b610c90565b3480156104dd57600080fd5b506104f16104ec3660046122d8565b610cb5565b60405161025a9190612468565b34801561050a57600080fd5b506103ab6105193660046124b5565b610cd9565b34801561052a57600080fd5b506102a26105393660046122d8565b610d84565b606060006105576000356001600160e01b031916610ee6565b5090506001600160a01b0381166105a8576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101b2565b600080826001600160a01b031634878733346040516020016105cd94939291906124ea565b60408051601f19818403018152908290526105e79161251a565b60006040518083038185875af1925050503d8060008114610624576040519150601f19603f3d011682016040523d82523d6000602084013e610629565b606091505b5091509150811561063e579250610647915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fb3c4928f00000000000000000000000000000000000000000000000000000000148061068b575061068b82610f90565b80610647575061064782610fce565b60006106a684336108bd565b9050806000036106ed576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016101b2565b60006106f9848361254c565b905061070933868360018761100c565b60003382856040516020016107209392919061255f565b604051602081830303815290604052905061073b86826111b1565b505050505050565b8451845181141580610756575083518114155b80610762575082518114155b8061076e575081518114155b156107a5576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156108425761083a8782815181106107c5576107c5612590565b60200260200101518783815181106107df576107df612590565b60200260200101518784815181106107f9576107f9612590565b602002602001015187858151811061081357610813612590565b602002602001015187868151811061082d5761082d612590565b6020026020010151610a9b565b6001016107a8565b50505050505050565b60025460009060ff1661085e5750601290565b50600090565b61087233846000858561100c565b81156108ad57600033600083604051602001610890939291906125a6565b60405160208183030381529060405290506108ab84826111b1565b505b505050565b6060610647826111dc565b6000826001600160a01b0316826001600160a01b0316036108f757506001600160a01b038116600090815260046020526040902054610647565b506001600160a01b03808216600090815260066020908152604080832093861683529290522054610647565b60608167ffffffffffffffff81111561093e5761093e611d3e565b60405190808252806020026020018201604052801561097157816020015b606081526020019060019003908161095c5790505b50905060005b82811015610a6c576000803086868581811061099557610995612590565b90506020028101906109a791906125d1565b6040516109b592919061261f565b600060405180830381855af49150503d80600081146109f0576040519150601f19603f3d011682016040523d82523d6000602084013e6109f5565b606091505b509150915081610a4457805115610a0f5780518082602001fd5b6040517fb774c284000000000000000000000000000000000000000000000000000000008152600481018490526024016101b2565b80848481518110610a5757610a57612590565b60209081029190910101525050600101610977565b5092915050565b610a7b61127e565b610a856000610e14565b565b610a8f61127e565b6108ab848484846112e7565b836001600160a01b0316856001600160a01b031603610ae6576040517fb9afb00000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03861614610b0157610b013386856112f3565b610b0e858585858561139a565b5050505050565b6000610b2184336108bd565b905082811015610b5d576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82810361070933868360018761100c565b610b7661127e565b3415610b955760405163f36ba73760e01b815260040160405180910390fd5b610b9f828261154f565b5050565b610bab61127e565b3415610bca5760405163f36ba73760e01b815260040160405180910390fd5b8051825114610c05576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003610c40576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156108ad57610c88838281518110610c6157610c61612590565b6020026020010151838381518110610c7b57610c7b612590565b602002602001015161154f565b600101610c43565b610c9e33848460018561100c565b60003383836040516020016108909392919061255f565b6001600160a01b038116600090815260056020526040902060609061064790611559565b6060815167ffffffffffffffff811115610cf557610cf5611d3e565b604051908082528060200260200182016040528015610d2857816020015b6060815260200190600190039081610d135790505b50905060005b8251811015610d7e57610d59838281518110610d4c57610d4c612590565b60200260200101516111dc565b828281518110610d6b57610d6b612590565b6020908102919091010152600101610d2e565b50919050565b610d8c61127e565b6001600160a01b038116610e085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101b2565b610e1181610e14565b50565b6000546001600160a01b03828116911614610e1157600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000828152600160205260409020610ea982826126a9565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051610eda91906121bb565b60405180910390a25050565b60008080610f1e7fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b03198616611566565b90506000610f2b826111dc565b90508051601414158015610f3f5750805115155b15610f7857806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016101b291906121bb565b610f8181612769565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806106475750610647826115d7565b600080610fe16301ffc9a760e01b610ee6565b5090506001600160a01b038116610ffb5750600092915050565b6110058184611625565b9392505050565b6001600160a01b03841661104c576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603611097576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0380861660009081526006602090815260408083209388168352929052208390558215611139576001600160a01b03851660009081526005602052604090206110e790856116c3565b5082856001600160a01b0316856001600160a01b03167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d8460405161112c91906121bb565b60405180910390a4610b0e565b6001600160a01b038516600090815260056020526040902061115b90856116d8565b50811515856001600160a01b0316856001600160a01b03167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167846040516111a291906121bb565b60405180910390a45050505050565b610b9f827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc836116ed565b60008181526001602052604090208054606091906111f99061262f565b80601f01602080910402602001604051908101604052809291908181526020018280546112259061262f565b80156112725780601f1061124757610100808354040283529160200191611272565b820191906000526020600020905b81548152906001019060200180831161125557829003601f168201915b50505050509050919050565b336112916000546001600160a01b031690565b6001600160a01b031614610a855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b2565b6108ab84848484611781565b6001600160a01b0380831660009081526006602090815260408083209387168352929052205480821115611374576040517ff3a6b6910000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301526024820183905285166044820152606481018390526084016101b2565b6108ab838561138385856127a5565b60006040518060200160405280600081525061100c565b6001600160a01b03851615806113b757506001600160a01b038416155b156113d557604051630d2d5ec360e41b815260040160405180910390fd5b6001600160a01b03851660009081526004602052604090205480841115611441576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b0387166024820152604481018590526064016101b2565b61144d868686856108ab565b6001600160a01b038616600090815260046020526040812080548692906114759084906127a5565b90915550506001600160a01b038516600090815260046020526040812080548692906114a290849061254c565b92505081905550846001600160a01b0316866001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a68787876040516114fa939291906127b8565b60405180910390a461150e868686856108ab565b600033878787866040516020016115299594939291906127d9565b604051602081830303815290604052905061154487826117fa565b610842868583611825565b610b9f8282611918565b6060600061100583611a23565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c830152918291016040516020818303038152906040529050806115cf90612813565b949350505050565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061064757506301ffc9a760e01b6001600160e01b0319831614610647565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d915060005190508280156116ac575060208210155b80156116b85750600081115b979650505050505050565b6000611005836001600160a01b038416611a7e565b6000611005836001600160a01b038416611acd565b6117076001600160a01b038416631aed5a8560e21b611625565b156108ad57604051631aed5a8560e21b81526001600160a01b03841690636bb56a149061173a9085908590600401612837565b6000604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ab9190810190612850565b7f0000000000000000000000000000000000000000000000000000000000000000836117ac60035490565b6117b6919061254c565b11156117ee576040517feacbf0d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ab84848484611bc0565b610b9f827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea836116ed565b61183683631aed5a8560e21b611625565b1561188957604051631aed5a8560e21b81526001600160a01b03841690636bb56a149061173a907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c908590600401612837565b816108ad576001600160a01b0383163b156118db576040517fa608fbb60000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101b2565b6040517f26c247f40000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101b2565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611971576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa82016119ca576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201610e91576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608160000180548060200260200160405190810160405280929190818152602001828054801561127257602002820191906000526020600020905b815481526020019060010190808311611a5f5750505050509050919050565b6000818152600183016020526040812054611ac557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610647565b506000610647565b60008181526001830160205260408120548015611bb6576000611af16001836127a5565b8554909150600090611b05906001906127a5565b9050818114611b6a576000866000018281548110611b2557611b25612590565b9060005260206000200154905080876000018481548110611b4857611b48612590565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611b7b57611b7b6128be565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610647565b6000915050610647565b6001600160a01b038416611be757604051630d2d5ec360e41b815260040160405180910390fd5b611bf460008585846108ab565b8260036000828254611c06919061254c565b90915550506001600160a01b03841660009081526004602052604081208054859290611c3390849061254c565b90915550506040516001600160a01b0385169060009033907f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a690611c7c908890889088906127b8565b60405180910390a4611c9160008585846108ab565b6000336000868685604051602001611cad9594939291906127d9565b6040516020818303038152906040529050610b0e858483611825565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215611d0a57600080fd5b81356001600160e01b03198116811461100557600080fd5b80356001600160a01b0381168114611d3957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d7d57611d7d611d3e565b604052919050565b600067ffffffffffffffff821115611d9f57611d9f611d3e565b50601f01601f191660200190565b600082601f830112611dbe57600080fd5b8135611dd1611dcc82611d85565b611d54565b818152846020838601011115611de657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215611e1857600080fd5b611e2184611d22565b925060208401359150604084013567ffffffffffffffff811115611e4457600080fd5b611e5086828701611dad565b9150509250925092565b600067ffffffffffffffff821115611e7457611e74611d3e565b5060051b60200190565b600082601f830112611e8f57600080fd5b81356020611e9f611dcc83611e5a565b82815260059290921b84018101918181019086841115611ebe57600080fd5b8286015b84811015611ee057611ed381611d22565b8352918301918301611ec2565b509695505050505050565b600082601f830112611efc57600080fd5b81356020611f0c611dcc83611e5a565b82815260059290921b84018101918181019086841115611f2b57600080fd5b8286015b84811015611ee05780358352918301918301611f2f565b80358015158114611d3957600080fd5b600082601f830112611f6757600080fd5b81356020611f77611dcc83611e5a565b82815260059290921b84018101918181019086841115611f9657600080fd5b8286015b84811015611ee057611fab81611f46565b8352918301918301611f9a565b600082601f830112611fc957600080fd5b81356020611fd9611dcc83611e5a565b82815260059290921b84018101918181019086841115611ff857600080fd5b8286015b84811015611ee057803567ffffffffffffffff81111561201c5760008081fd5b61202a8986838b0101611dad565b845250918301918301611ffc565b600080600080600060a0868803121561205057600080fd5b853567ffffffffffffffff8082111561206857600080fd5b61207489838a01611e7e565b9650602088013591508082111561208a57600080fd5b61209689838a01611e7e565b955060408801359150808211156120ac57600080fd5b6120b889838a01611eeb565b945060608801359150808211156120ce57600080fd5b6120da89838a01611f56565b935060808801359150808211156120f057600080fd5b506120fd88828901611fb8565b9150509295509295909350565b60008060006060848603121561211f57600080fd5b61212884611d22565b925061213660208501611f46565b9150604084013567ffffffffffffffff811115611e4457600080fd5b60006020828403121561216457600080fd5b5035919050565b60005b8381101561218657818101518382015260200161216e565b50506000910152565b600081518084526121a781602086016020860161216b565b601f01601f19169290920160200192915050565b602081526000611005602083018461218f565b600080604083850312156121e157600080fd5b6121ea83611d22565b91506121f860208401611d22565b90509250929050565b6000806020838503121561221457600080fd5b823567ffffffffffffffff8082111561222c57600080fd5b818501915085601f83011261224057600080fd5b81358181111561224f57600080fd5b8660208260051b850101111561226457600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156122cb57603f198886030184526122b985835161218f565b9450928501929085019060010161229d565b5092979650505050505050565b6000602082840312156122ea57600080fd5b61100582611d22565b6000806000806080858703121561230957600080fd5b61231285611d22565b93506020850135925061232760408601611f46565b9150606085013567ffffffffffffffff81111561234357600080fd5b61234f87828801611dad565b91505092959194509250565b600080600080600060a0868803121561237357600080fd5b61237c86611d22565b945061238a60208701611d22565b93506040860135925061239f60608701611f46565b9150608086013567ffffffffffffffff8111156123bb57600080fd5b6120fd88828901611dad565b600080604083850312156123da57600080fd5b82359150602083013567ffffffffffffffff8111156123f857600080fd5b61240485828601611dad565b9150509250929050565b6000806040838503121561242157600080fd5b823567ffffffffffffffff8082111561243957600080fd5b61244586838701611eeb565b9350602085013591508082111561245b57600080fd5b5061240485828601611fb8565b6020808252825182820181905260009190848201906040850190845b818110156124a95783516001600160a01b031683529284019291840191600101612484565b50909695505050505050565b6000602082840312156124c757600080fd5b813567ffffffffffffffff8111156124de57600080fd5b6115cf84828501611eeb565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b6000825161252c81846020870161216b565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561064757610647612536565b6001600160a01b0384168152826020820152606060408201526000612587606083018461218f565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038416815260ff83166020820152606060408201526000612587606083018461218f565b6000808335601e198436030181126125e857600080fd5b83018035915067ffffffffffffffff82111561260357600080fd5b60200191503681900382131561261857600080fd5b9250929050565b8183823760009101908152919050565b600181811c9082168061264357607f821691505b602082108103610d7e57634e487b7160e01b600052602260045260246000fd5b601f8211156108ad57600081815260208120601f850160051c8101602086101561268a5750805b601f850160051c820191505b8181101561073b57828155600101612696565b815167ffffffffffffffff8111156126c3576126c3611d3e565b6126d7816126d1845461262f565b84612663565b602080601f83116001811461270c57600084156126f45750858301515b600019600386901b1c1916600185901b17855561073b565b600085815260208120601f198616915b8281101561273b5788860151825594840194600190910190840161271c565b50858210156127595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff19808216929190601483101561279d5780818460140360031b1b83161693505b505050919050565b8181038181111561064757610647612536565b8381528215156020820152606060408201526000612587606083018461218f565b60006001600160a01b038088168352808716602084015280861660408401525083606083015260a060808301526116b860a083018461218f565b80516020808301519190811015610d7e5760001960209190910360031b1b16919050565b8281526040602082015260006115cf604083018461218f565b60006020828403121561286257600080fd5b815167ffffffffffffffff81111561287957600080fd5b8201601f8101841361288a57600080fd5b8051612898611dcc82611d85565b8181528560208385010111156128ad57600080fd5b61258782602083016020860161216b565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220a7cf82cb42761a5389c2b569bfd658fc9887432bec0fc0acd6b9496c2f5e7ca564736f6c63430008110033 diff --git a/artifacts/bytecode/assets/lsp8/MintableIdentifiableDigitalAsset.bin b/artifacts/bytecode/assets/lsp8/MintableIdentifiableDigitalAsset.bin index 3869100..a4cd86c 100644 --- a/artifacts/bytecode/assets/lsp8/MintableIdentifiableDigitalAsset.bin +++ b/artifacts/bytecode/assets/lsp8/MintableIdentifiableDigitalAsset.bin @@ -1 +1 @@ -0x60a06040523480156200001157600080fd5b50604051620032953803806200329583398101604081905262000034916200059d565b808585858583838383838383806001600160a01b038116620000ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620000c2816200021c60201b62000dc71760201c565b50620001197feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b8152506200028360201b62000e391760201c565b620001537fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b846200028360201b62000e391760201c565b6200018d7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b836200028360201b62000e391760201c565b50506040805160208101849052620001e392507f715f248956de7ce65e94d9d836bfead479f7e70d69b718d47bfe7b00e05b4fe49101604051602081830303815290604052620002cb60201b62000e8e1760201c565b5050505050505050806000036200020d5760405163038d9fc360e41b815260040160405180910390fd5b60805250620007f39350505050565b6000546001600160a01b038281169116146200028057600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b60008281526001602052604090206200029d8282620006ca565b50816000805160206200327583398151915282604051620002bf919062000796565b60405180910390a25050565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f82016200030c576040516385c169bd60e01b815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa82016200034d57604051630eceab6760e31b815260040160405180910390fd5b6000828152600160205260409020620003678282620006ca565b50816000805160206200327583398151915261010083511115620003a657620003a0836000610100620003b760201b62000fa81760201c565b620003a8565b825b604051620002bf919062000796565b606081620003c781601f620007cb565b1015620004085760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401620000a3565b620004148284620007cb565b845110156200045a5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401620000a3565b6060821580156200047b5760405191506000825260208201604052620004c7565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015620004b65780518352602092830192016200049c565b5050858452601f01601f1916604052505b50949350505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000503578181015183820152602001620004e9565b50506000910152565b600082601f8301126200051e57600080fd5b81516001600160401b03808211156200053b576200053b620004d0565b604051601f8301601f19908116603f01168101908282118183101715620005665762000566620004d0565b816040528381528660208588010111156200058057600080fd5b62000593846020830160208901620004e6565b9695505050505050565b600080600080600060a08688031215620005b657600080fd5b85516001600160401b0380821115620005ce57600080fd5b620005dc89838a016200050c565b96506020880151915080821115620005f357600080fd5b5062000602888289016200050c565b604088015190955090506001600160a01b03811681146200062257600080fd5b6060870151608090970151959894975095949392505050565b600181811c908216806200065057607f821691505b6020821081036200067157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006c557600081815260208120601f850160051c81016020861015620006a05750805b601f850160051c820191505b81811015620006c157828155600101620006ac565b5050505b505050565b81516001600160401b03811115620006e657620006e6620004d0565b620006fe81620006f784546200063b565b8462000677565b602080601f8311600181146200073657600084156200071d5750858301515b600019600386901b1c1916600185901b178555620006c1565b600085815260208120601f198616915b82811015620007675788860151825594840194600190910190840162000746565b5085821015620007865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620007b7816040850160208701620004e6565b601f01601f19169190910160400192915050565b80820180821115620007ed57634e487b7160e01b600052601160045260246000fd5b92915050565b608051612a5f620008166000396000818161032d0152611b110152612a5f6000f3fe60806040526004361061016e5760003560e01c80637e87632c116100cb578063979024211161007f578063db8c966311610059578063db8c9663146104b1578063dedff9c6146104d1578063f2fde38b146104fe576101e2565b80639790242114610451578063a3b261f214610464578063af255b6114610491576101e2565b806386a10ddd116100b057806386a10ddd146103e65780638da5cb5b1461040657806392a91a3a14610424576101e2565b80637e87632c146103b35780637f23690c146103d3576101e2565b8063511b69521161012257806354f6127f1161010757806354f6127f1461035157806370a082311461037e578063715018a61461039e576101e2565b8063511b6952146102fc57806352058d8a1461031e576101e2565b8063217b227011610153578063217b2270146102775780632a3654a4146102af57806349a6078d146102cf576101e2565b806301ffc9a71461022357806318160ddd14610258576101e2565b366101e257346000036101b05760405163e5099ee360e01b81526004016101a79060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f61f4944200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561020d57828260405163e5099ee360e01b81526004016101a7929190611eee565b610217838361051e565b80519350602001915050f35b34801561022f57600080fd5b5061024361023e366004611f1d565b61062d565b60405190151581526020015b60405180910390f35b34801561026457600080fd5b506002545b60405190815260200161024f565b34801561028357600080fd5b50610297610292366004611f47565b61067a565b6040516001600160a01b03909116815260200161024f565b3480156102bb57600080fd5b506102436102ca366004611f7c565b6106b3565b3480156102db57600080fd5b506102ef6102ea366004611f47565b6106cf565b60405161024f9190611fa6565b34801561030857600080fd5b5061031c6103173660046120c8565b6106f1565b005b34801561032a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610269565b34801561035d57600080fd5b5061037161036c366004611f47565b61074e565b60405161024f9190612191565b34801561038a57600080fd5b506102696103993660046121a4565b610759565b3480156103aa57600080fd5b5061031c61077a565b3480156103bf57600080fd5b5061031c6103ce36600461238d565b61078e565b61031c6103e1366004612452565b610896565b3480156103f257600080fd5b5061031c610401366004612499565b6108cb565b34801561041257600080fd5b506000546001600160a01b0316610297565b34801561043057600080fd5b5061026961043f366004611f47565b60009081526007602052604090205490565b61031c61045f3660046124f0565b610a88565b34801561047057600080fd5b5061048461047f3660046121a4565b610b7a565b60405161024f919061254a565b34801561049d57600080fd5b5061031c6104ac366004612582565b610b9e565b3480156104bd57600080fd5b5061031c6104cc366004612582565b610bb8565b3480156104dd57600080fd5b506104f16104ec3660046125ea565b610c8c565b60405161024f919061261f565b34801561050a57600080fd5b5061031c6105193660046121a4565b610d37565b606060006105376000356001600160e01b0319166110d0565b5090506001600160a01b038116610588576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101a7565b600080826001600160a01b031634878733346040516020016105ad9493929190612681565b60408051601f19818403018152908290526105c7916126b1565b60006040518083038185875af1925050503d8060008114610604576040519150601f19603f3d011682016040523d82523d6000602084013e610609565b606091505b5091509150811561061e579250610627915050565b80518060208301fd5b92915050565b60006001600160e01b031982167f30dc527800000000000000000000000000000000000000000000000000000000148061066b575061066b8261117a565b806106275750610627826111b8565b6000818152600360205260408120546001600160a01b03168061062757604051635747cd1b60e11b8152600481018490526024016101a7565b60006106be826111ef565b6106c88383611227565b9392505050565b60606106da826111ef565b600082815260056020526040902061062790611264565b6106fb3384611227565b61073a576040517f1294d2a9000000000000000000000000000000000000000000000000000000008152600481018490523360248201526044016101a7565b6107478585858585611271565b5050505050565b606061062782611488565b6001600160a01b03811660009081526004602052604081206106279061152a565b610782611534565b61078c6000610dc7565b565b84518451811415806107a1575083518114155b806107ad575082518114155b806107b9575081518114155b156107f0576040517f93a8311900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561088d57610885878281518110610810576108106126cd565b602002602001015187838151811061082a5761082a6126cd565b6020026020010151878481518110610844576108446126cd565b602002602001015187858151811061085e5761085e6126cd565b6020026020010151878681518110610878576108786126cd565b60200260200101516106f1565b6001016107f3565b50505050505050565b61089e611534565b34156108bd5760405163f36ba73760e01b815260040160405180910390fd5b6108c7828261159d565b5050565b60006108d68361067a565b90506001600160a01b038116331461091957604051632d938f5160e11b81526001600160a01b0382166004820152602481018490523360448201526064016101a7565b6001600160a01b03841661094057604051639577b8b360e01b815260040160405180910390fd5b836001600160a01b0316816001600160a01b031603610972576040516344fed6b160e11b815260040160405180910390fd5b600083815260056020526040812061098a9086611600565b9050806109d5576040517fa7626b680000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481018590526044016101a7565b83826001600160a01b0316866001600160a01b03167e52e433f2d4225671bc164dd1cdc9a76044356091f27ad234798bd0cbf0834986604051610a189190612191565b60405180910390a460003385600186604051602001610a3a94939291906126e3565b60408051601f198184030181529190529050610a806001600160a01b0387167f8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f0097083611615565b505050505050565b610a90611534565b3415610aaf5760405163f36ba73760e01b815260040160405180910390fd5b8051825114610aea576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003610b25576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610b7557610b6d838281518110610b4657610b466126cd565b6020026020010151838381518110610b6057610b606126cd565b602002602001015161159d565b600101610b28565b505050565b6001600160a01b038116600090815260046020526040902060609061062790611264565b610ba6611534565b610bb2848484846116a9565b50505050565b6000610bc38461067a565b90506001600160a01b0381163314610c0657604051632d938f5160e11b81526001600160a01b0382166004820152602481018590523360448201526064016101a7565b6001600160a01b038516610c2d57604051639577b8b360e01b815260040160405180910390fd5b846001600160a01b0316816001600160a01b031603610c5f576040516344fed6b160e11b815260040160405180910390fd5b610c6c85828686866116b5565b82156107475760003385600085604051602001610a3a94939291906126e3565b6060815167ffffffffffffffff811115610ca857610ca8612003565b604051908082528060200260200182016040528015610cdb57816020015b6060815260200190600190039081610cc65790505b50905060005b8251811015610d3157610d0c838281518110610cff57610cff6126cd565b6020026020010151611488565b828281518110610d1e57610d1e6126cd565b6020908102919091010152600101610ce1565b50919050565b610d3f611534565b6001600160a01b038116610dbb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101a7565b610dc481610dc7565b50565b6000546001600160a01b03828116911614610dc457600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000828152600160205260409020610e518282612797565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051610e829190612191565b60405180910390a25050565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201610ee7576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201610f40576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600160205260409020610f588282612797565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b261010083511115610f9957610f94836000610100610fa8565b610f9b565b825b604051610e829190612191565b606081610fb681601f61286d565b10156110045760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101a7565b61100e828461286d565b8451101561105e5760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016101a7565b60608215801561107d57604051915060008252602082016040526110c7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156110b657805183526020928301920161109e565b5050858452601f01601f1916604052505b50949350505050565b600080806111087fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b0319861661176e565b9050600061111582611488565b905080516014141580156111295750805115155b1561116257806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016101a79190612191565b61116b81612880565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806106275750610627826117df565b6000806111cb6301ffc9a760e01b6110d0565b5090506001600160a01b0381166111e55750600092915050565b6106c8818461182d565b6000818152600360205260409020546001600160a01b0316610dc457604051635747cd1b60e11b8152600481018290526024016101a7565b60006112328261067a565b6001600160a01b0316836001600160a01b031614806106c8575060008281526005602052604090206106c890846118cb565b606060006106c8836118ed565b836001600160a01b0316856001600160a01b0316036112bc576040517f5d67d6c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112c78461067a565b9050856001600160a01b0316816001600160a01b03161461131557604051632d938f5160e11b81526001600160a01b03808316600483015260248201869052871660448201526064016101a7565b6001600160a01b03851661133c576040516324ecef4d60e01b815260040160405180910390fd5b61134886868685611948565b6113518461067a565b905061135d8685611954565b6001600160a01b038616600090815260046020526040902061137f90856119ac565b506001600160a01b03851660009081526004602052604090206113a290856119b8565b5060008481526003602052604090819020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388811691821790925591518692918916907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf90611416903390899089906128bc565b60405180910390a460008686868560405160200161143794939291906128ef565b60408051601f19818403018152919052905061147d6001600160a01b0388167fb23eae7e6d1564b295b4c3e3be402d9a2f0776c57bdf365903496f6fa481ab0083611615565b61088d8685836119c4565b60008181526001602052604090208054606091906114a59061271d565b80601f01602080910402602001604051908101604052809291908181526020018280546114d19061271d565b801561151e5780601f106114f35761010080835404028352916020019161151e565b820191906000526020600020905b81548152906001019060200180831161150157829003601f168201915b50505050509050919050565b6000610627825490565b336115476000546001600160a01b031690565b6001600160a01b03161461078c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a7565b7f8ea0db76a9218319a16b2627c940152b860818f29648e72b840184ff1fa4b01c82016115f6576040517f53bc112200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c78282610e8e565b60006106c8836001600160a01b038416611ac0565b61162f6001600160a01b038416631aed5a8560e21b61182d565b15610b7557604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906116629085908590600401612921565b6000604051808303816000875af1158015611681573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bb2919081019061293a565b610bb284848484611b0f565b60008381526005602052604081206116cd9087611b82565b905080611718576040517f4aa31a8c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602481018590526044016101a7565b83856001600160a01b0316876001600160a01b03167f3ee932cea40ebbbfd8577d47156cc17cce8683802c57bbd1fb8c131c6f07af0a868660405161175e9291906129a8565b60405180910390a4505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c830152918291016040516020818303038152906040529050806117d7906129c3565b949350505050565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061062757506301ffc9a760e01b6001600160e01b0319831614610627565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d915060005190508280156118b4575060208210155b80156118c05750600081115b979650505050505050565b6001600160a01b038116600090815260018301602052604081205415156106c8565b60608160000180548060200260200160405190810160405280929190818152602001828054801561151e57602002820191906000526020600020905b8154815260200190600101908083116119295750505050509050919050565b610bb284848484611b97565b60008181526005602052604081209061196c8261152a565b90506000805b82811015610a8057611985846000611c5e565b91506119a48287876000604051806020016040528060008152506116b5565b600101611972565b60006106c88383611c6a565b60006106c88383611ac0565b6119de6001600160a01b038416631aed5a8560e21b61182d565b15611a3157604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611662907f0b084a55ebf70fd3c06fd755269dac2212c4d3f0f4d09079780bfa50c1b2984d908590600401612921565b81610b75576001600160a01b0383163b15611a83576040517f4349776d0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6040517f031731370000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101a7565b6000818152600183016020526040812054611b0757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610627565b506000610627565b7f0000000000000000000000000000000000000000000000000000000000000000600254611b3e90600161286d565b1115611b76576040517fe8ba229100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb284848484611d5d565b60006106c8836001600160a01b038416611c6a565b6001600160a01b038416611bd1576000611bb060025490565b60008181526007602090815260408083208790558683526008909152902055505b6001600160a01b038316611c595760006001611bec60025490565b611bf691906129e7565b60008481526008602052604090205490915081811015611c38576000828152600760209081526040808320548484528184208190558352600890915290208190555b50600090815260076020908152604080832083905584835260089091528120555b610bb2565b60006106c88383611ec4565b60008181526001830160205260408120548015611d53576000611c8e6001836129e7565b8554909150600090611ca2906001906129e7565b9050818114611d07576000866000018281548110611cc257611cc26126cd565b9060005260206000200154905080876000018481548110611ce557611ce56126cd565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d1857611d186129fa565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610627565b6000915050610627565b6001600160a01b038416611d84576040516324ecef4d60e01b815260040160405180910390fd5b611d916000858584611948565b6000838152600360205260409020546001600160a01b031615611de3576040517f34c7b511000000000000000000000000000000000000000000000000000000008152600481018490526024016101a7565b600260008154611df290612a10565b909155506001600160a01b0384166000908152600460205260409020611e1890846119b8565b50600083815260036020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881690811790915590518592907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf90611e87903390889088906128bc565b60405180910390a4600080858584604051602001611ea894939291906128ef565b60405160208183030381529060405290506107478584836119c4565b6000826000018281548110611edb57611edb6126cd565b9060005260206000200154905092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215611f2f57600080fd5b81356001600160e01b0319811681146106c857600080fd5b600060208284031215611f5957600080fd5b5035919050565b80356001600160a01b0381168114611f7757600080fd5b919050565b60008060408385031215611f8f57600080fd5b611f9883611f60565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015611fe75783516001600160a01b031683529284019291840191600101611fc2565b50909695505050505050565b80358015158114611f7757600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561204257612042612003565b604052919050565b600067ffffffffffffffff82111561206457612064612003565b50601f01601f191660200190565b600082601f83011261208357600080fd5b81356120966120918261204a565b612019565b8181528460208386010111156120ab57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156120e057600080fd5b6120e986611f60565b94506120f760208701611f60565b93506040860135925061210c60608701611ff3565b9150608086013567ffffffffffffffff81111561212857600080fd5b61213488828901612072565b9150509295509295909350565b60005b8381101561215c578181015183820152602001612144565b50506000910152565b6000815180845261217d816020860160208601612141565b601f01601f19169290920160200192915050565b6020815260006106c86020830184612165565b6000602082840312156121b657600080fd5b6106c882611f60565b600067ffffffffffffffff8211156121d9576121d9612003565b5060051b60200190565b600082601f8301126121f457600080fd5b81356020612204612091836121bf565b82815260059290921b8401810191818101908684111561222357600080fd5b8286015b848110156122455761223881611f60565b8352918301918301612227565b509695505050505050565b600082601f83011261226157600080fd5b81356020612271612091836121bf565b82815260059290921b8401810191818101908684111561229057600080fd5b8286015b848110156122455780358352918301918301612294565b600082601f8301126122bc57600080fd5b813560206122cc612091836121bf565b82815260059290921b840181019181810190868411156122eb57600080fd5b8286015b848110156122455761230081611ff3565b83529183019183016122ef565b600082601f83011261231e57600080fd5b8135602061232e612091836121bf565b82815260059290921b8401810191818101908684111561234d57600080fd5b8286015b8481101561224557803567ffffffffffffffff8111156123715760008081fd5b61237f8986838b0101612072565b845250918301918301612351565b600080600080600060a086880312156123a557600080fd5b853567ffffffffffffffff808211156123bd57600080fd5b6123c989838a016121e3565b965060208801359150808211156123df57600080fd5b6123eb89838a016121e3565b9550604088013591508082111561240157600080fd5b61240d89838a01612250565b9450606088013591508082111561242357600080fd5b61242f89838a016122ab565b9350608088013591508082111561244557600080fd5b506121348882890161230d565b6000806040838503121561246557600080fd5b82359150602083013567ffffffffffffffff81111561248357600080fd5b61248f85828601612072565b9150509250929050565b6000806000606084860312156124ae57600080fd5b6124b784611f60565b925060208401359150604084013567ffffffffffffffff8111156124da57600080fd5b6124e686828701612072565b9150509250925092565b6000806040838503121561250357600080fd5b823567ffffffffffffffff8082111561251b57600080fd5b61252786838701612250565b9350602085013591508082111561253d57600080fd5b5061248f8582860161230d565b6020808252825182820181905260009190848201906040850190845b81811015611fe757835183529284019291840191600101612566565b6000806000806080858703121561259857600080fd5b6125a185611f60565b9350602085013592506125b660408601611ff3565b9150606085013567ffffffffffffffff8111156125d257600080fd5b6125de87828801612072565b91505092959194509250565b6000602082840312156125fc57600080fd5b813567ffffffffffffffff81111561261357600080fd5b6117d784828501612250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561267457603f19888603018452612662858351612165565b94509285019290850190600101612646565b5092979650505050505050565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b600082516126c3818460208701612141565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038516815283602082015282151560408201526080606082015260006127136080830184612165565b9695505050505050565b600181811c9082168061273157607f821691505b602082108103610d3157634e487b7160e01b600052602260045260246000fd5b601f821115610b7557600081815260208120601f850160051c810160208610156127785750805b601f850160051c820191505b81811015610a8057828155600101612784565b815167ffffffffffffffff8111156127b1576127b1612003565b6127c5816127bf845461271d565b84612751565b602080601f8311600181146127fa57600084156127e25750858301515b600019600386901b1c1916600185901b178555610a80565b600085815260208120601f198616915b828110156128295788860151825594840194600190910190840161280a565b50858210156128475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062757610627612857565b805160208201516bffffffffffffffffffffffff1980821692919060148310156128b45780818460140360031b1b83161693505b505050919050565b6001600160a01b038416815282151560208201526060604082015260006128e66060830184612165565b95945050505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526127136080830184612165565b8281526040602082015260006117d76040830184612165565b60006020828403121561294c57600080fd5b815167ffffffffffffffff81111561296357600080fd5b8201601f8101841361297457600080fd5b80516129826120918261204a565b81815285602083850101111561299757600080fd5b6128e6826020830160208601612141565b82151581526040602082015260006117d76040830184612165565b80516020808301519190811015610d315760001960209190910360031b1b16919050565b8181038181111561062757610627612857565b634e487b7160e01b600052603160045260246000fd5b600060018201612a2257612a22612857565b506001019056fea2646970667358221220e5ab04787d9d00378716e5b4f4a49e2c18a84a71c3bf96a8711987d3e175332764736f6c63430008110033ece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2 +0x60a06040523480156200001157600080fd5b50604051620037d9380380620037d98339810160408190526200003491620004e0565b808686868686848484848484848484816001600160a01b038116620000ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840160405180910390fd5b620000c4816200027560201b620011991760201c565b506200011b7feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b815250620002dc60201b6200120b1760201c565b620001557fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b85620002dc60201b6200120b1760201c565b6200018f7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b84620002dc60201b6200120b1760201c565b6040805160208101839052620001e2917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb39101604051602081830303815290604052620002dc60201b6200120b1760201c565b505060408051602081018590526200023993507f341bc44e55234544c70af9d37b2cb8cc7ba74685b58526221de2cc977f4699249250016040516020818303038152906040526200033560201b620012601760201c565b5050505050505050505080600003620002655760405163038d9fc360e41b815260040160405180910390fd5b6080525062000719945050505050565b6000546001600160a01b03828116911614620002d957600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b6000828152600160205260409020620002f6828262000618565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051620003299190620006e4565b60405180910390a25050565b6200034c82826200035060201b620012661760201c565b5050565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f820162000391576040516385c169bd60e01b815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201620003d257604051630eceab6760e31b815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201620002dc57604051634ef6d7fb60e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004465781810151838201526020016200042c565b50506000910152565b600082601f8301126200046157600080fd5b81516001600160401b03808211156200047e576200047e62000413565b604051601f8301601f19908116603f01168101908282118183101715620004a957620004a962000413565b81604052838152866020858801011115620004c357600080fd5b620004d684602083016020890162000429565b9695505050505050565b60008060008060008060c08789031215620004fa57600080fd5b86516001600160401b03808211156200051257600080fd5b620005208a838b016200044f565b975060208901519150808211156200053757600080fd5b506200054689828a016200044f565b604089015190965090506001600160a01b03811681146200056657600080fd5b80945050606087015192506080870151915060a087015190509295509295509295565b600181811c908216806200059e57607f821691505b602082108103620005bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061357600081815260208120601f850160051c81016020861015620005ee5750805b601f850160051c820191505b818110156200060f57828155600101620005fa565b5050505b505050565b81516001600160401b0381111562000634576200063462000413565b6200064c8162000645845462000589565b84620005c5565b602080601f8311600181146200068457600084156200066b5750858301515b600019600386901b1c1916600185901b1785556200060f565b600085815260208120601f198616915b82811015620006b55788860151825594840194600190910190840162000694565b5085821015620006d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200070581604085016020870162000429565b601f01601f19169190910160400192915050565b60805161309d6200073c600039600081816103840152611f3d015261309d6000f3fe6080604052600436106101a55760003560e01c80637f23690c116100e1578063ae0646d71161008a578063db8c966311610064578063db8c966314610575578063dedff9c614610595578063e7bb5942146105b5578063f2fde38b146105d557610219565b8063ae0646d714610515578063af255b6114610535578063c797c7771461055557610219565b806392a91a3a116100bb57806392a91a3a146104a857806397902421146104d5578063a3b261f2146104e857610219565b80637f23690c1461045757806386a10ddd1461046a5780638da5cb5b1461048a57610219565b8063511b69521161014e5780636963d438116101285780636963d438146103d557806370a0823114610402578063715018a6146104225780637e87632c1461043757610219565b8063511b69521461035557806352058d8a1461037557806354f6127f146103a857610219565b80632a3654a41161017f5780632a3654a4146102e65780633b38c1d71461030657806349a6078d1461032857610219565b806301ffc9a71461025a57806318160ddd1461028f578063217b2270146102ae57610219565b3661021957346000036101e75760405163e5099ee360e01b81526004016101de9060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f61f4944200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561024457828260405163e5099ee360e01b81526004016101de92919061231d565b61024e83836105f5565b80519350602001915050f35b34801561026657600080fd5b5061027a61027536600461234c565b610704565b60405190151581526020015b60405180910390f35b34801561029b57600080fd5b506002545b604051908152602001610286565b3480156102ba57600080fd5b506102ce6102c9366004612376565b610751565b6040516001600160a01b039091168152602001610286565b3480156102f257600080fd5b5061027a6103013660046123ab565b61078a565b34801561031257600080fd5b5061032661032136600461249a565b6107a6565b005b34801561033457600080fd5b50610348610343366004612376565b6107be565b60405161028691906124ea565b34801561036157600080fd5b50610326610370366004612547565b6107e0565b34801561038157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102a0565b3480156103b457600080fd5b506103c86103c3366004612376565b61083d565b6040516102869190612610565b3480156103e157600080fd5b506103f56103f0366004612623565b610848565b6040516102869190612698565b34801561040e57600080fd5b506102a061041d3660046126fa565b610998565b34801561042e57600080fd5b506103266109b9565b34801561044357600080fd5b506103266104523660046128e3565b6109cd565b6103266104653660046129a8565b610ad5565b34801561047657600080fd5b506103266104853660046129ef565b610b0a565b34801561049657600080fd5b506000546001600160a01b03166102ce565b3480156104b457600080fd5b506102a06104c3366004612376565b60009081526007602052604090205490565b6103266104e3366004612a30565b610c9d565b3480156104f457600080fd5b506105086105033660046126fa565b610d8a565b6040516102869190612a8a565b34801561052157600080fd5b50610326610530366004612ac2565b610dae565b34801561054157600080fd5b50610326610550366004612b40565b610eab565b34801561056157600080fd5b506103f5610570366004612ba8565b610ebf565b34801561058157600080fd5b50610326610590366004612b40565b610f7e565b3480156105a157600080fd5b506103f56105b0366004612c02565b611052565b3480156105c157600080fd5b506103c86105d0366004612c37565b6110fd565b3480156105e157600080fd5b506103266105f03660046126fa565b611109565b6060600061060e6000356001600160e01b031916611371565b5090506001600160a01b03811661065f576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101de565b600080826001600160a01b031634878733346040516020016106849493929190612c59565b60408051601f198184030181529082905261069e91612c89565b60006040518083038185875af1925050503d80600081146106db576040519150601f19603f3d011682016040523d82523d6000602084013e6106e0565b606091505b509150915081156106f55792506106fe915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fecad9f7500000000000000000000000000000000000000000000000000000000148061074257506107428261141b565b806106fe57506106fe82611459565b6000818152600360205260408120546001600160a01b0316806106fe57604051635747cd1b60e11b8152600481018490526024016101de565b600061079582611490565b61079f83836114c8565b9392505050565b6107ae611505565b6107b983838361156e565b505050565b60606107c982611490565b60008281526005602052604090206106fe906115fe565b6107ea33846114c8565b610829576040517f1294d2a9000000000000000000000000000000000000000000000000000000008152600481018490523360248201526044016101de565b610836858585858561160b565b5050505050565b60606106fe826117f9565b60608167ffffffffffffffff811115610863576108636123d5565b60405190808252806020026020018201604052801561089657816020015b60608152602001906001900390816108815790505b50905060005b8281101561099157600080308686858181106108ba576108ba612ca5565b90506020028101906108cc9190612cbb565b6040516108da929190612d09565b600060405180830381855af49150503d8060008114610915576040519150601f19603f3d011682016040523d82523d6000602084013e61091a565b606091505b509150915081610969578051156109345780518082602001fd5b6040517f234eb819000000000000000000000000000000000000000000000000000000008152600481018490526024016101de565b8084848151811061097c5761097c612ca5565b6020908102919091010152505060010161089c565b5092915050565b6001600160a01b03811660009081526004602052604081206106fe9061189b565b6109c1611505565b6109cb6000611199565b565b84518451811415806109e0575083518114155b806109ec575082518114155b806109f8575081518114155b15610a2f576040517f93a8311900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610acc57610ac4878281518110610a4f57610a4f612ca5565b6020026020010151878381518110610a6957610a69612ca5565b6020026020010151878481518110610a8357610a83612ca5565b6020026020010151878581518110610a9d57610a9d612ca5565b6020026020010151878681518110610ab757610ab7612ca5565b60200260200101516107e0565b600101610a32565b50505050505050565b610add611505565b3415610afc5760405163f36ba73760e01b815260040160405180910390fd5b610b0682826118a5565b5050565b6000610b1583610751565b90506001600160a01b0381163314610b5857604051632d938f5160e11b81526001600160a01b0382166004820152602481018490523360448201526064016101de565b6001600160a01b038416610b7f57604051639577b8b360e01b815260040160405180910390fd5b836001600160a01b0316816001600160a01b031603610bb1576040516344fed6b160e11b815260040160405180910390fd5b6000838152600560205260408120610bc99086611908565b905080610c14576040517fa7626b680000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481018590526044016101de565b83826001600160a01b0316866001600160a01b03167f1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc23667121586604051610c589190612610565b60405180910390a460003385600186604051602001610c7a9493929190612d19565b6040516020818303038152906040529050610c95868261191d565b505050505050565b610ca5611505565b3415610cc45760405163f36ba73760e01b815260040160405180910390fd5b8051825114610cff576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003610d3a576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156107b957610d82838281518110610d5b57610d5b612ca5565b6020026020010151838381518110610d7557610d75612ca5565b60200260200101516118a5565b600101610d3d565b6001600160a01b03811660009081526004602052604090206060906106fe906115fe565b610db6611505565b81518351141580610dc957508051825114155b15610e00576040517f2fa71dfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251600003610e3b576040517f80c9830500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8351811015610ea557610e9d848281518110610e5c57610e5c612ca5565b6020026020010151848381518110610e7657610e76612ca5565b6020026020010151848481518110610e9057610e90612ca5565b602002602001015161156e565b600101610e3e565b50505050565b610eb3611505565b610ea584848484611948565b6060825167ffffffffffffffff811115610edb57610edb6123d5565b604051908082528060200260200182016040528015610f0e57816020015b6060815260200190600190039081610ef95790505b50905060005b835181101561099157610f59848281518110610f3257610f32612ca5565b6020026020010151848381518110610f4c57610f4c612ca5565b6020026020010151611954565b828281518110610f6b57610f6b612ca5565b6020908102919091010152600101610f14565b6000610f8984610751565b90506001600160a01b0381163314610fcc57604051632d938f5160e11b81526001600160a01b0382166004820152602481018590523360448201526064016101de565b6001600160a01b038516610ff357604051639577b8b360e01b815260040160405180910390fd5b846001600160a01b0316816001600160a01b031603611025576040516344fed6b160e11b815260040160405180910390fd5b6110328582868686611a2b565b82156108365760003385600085604051602001610c7a9493929190612d19565b6060815167ffffffffffffffff81111561106e5761106e6123d5565b6040519080825280602002602001820160405280156110a157816020015b606081526020019060019003908161108c5790505b50905060005b82518110156110f7576110d28382815181106110c5576110c5612ca5565b60200260200101516117f9565b8282815181106110e4576110e4612ca5565b60209081029190910101526001016110a7565b50919050565b606061079f8383611954565b611111611505565b6001600160a01b03811661118d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101de565b61119681611199565b50565b6000546001600160a01b0382811691161461119657600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008281526001602052604090206112238282612dcd565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516112549190612610565b60405180910390a25050565b610b0682825b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f82016112bf576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201611318576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d820161120b576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080806113a97fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b03198616611ae4565b905060006113b6826117f9565b905080516014141580156113ca5750805115155b1561140357806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016101de9190612610565b61140c81612e8d565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806106fe57506106fe82611b55565b60008061146c6301ffc9a760e01b611371565b5090506001600160a01b0381166114865750600092915050565b61079f8184611ba3565b6000818152600360205260409020546001600160a01b031661119657604051635747cd1b60e11b8152600481018290526024016101de565b60006114d382610751565b6001600160a01b0316836001600160a01b0316148061079f5750600082815260056020526040902061079f9084611c41565b336115186000546001600160a01b031690565b6001600160a01b0316146109cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101de565b8060016000858560405160200161158f929190918252602082015260400190565b60405160208183030381529060405280519060200120815260200190815260200160002090816115bf9190612dcd565b5081837fa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb836040516115f19190612610565b60405180910390a3505050565b6060600061079f83611c63565b836001600160a01b0316856001600160a01b031603611656576040517f5d67d6c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061166184610751565b9050856001600160a01b0316816001600160a01b0316146116af57604051632d938f5160e11b81526001600160a01b03808316600483015260248201869052871660448201526064016101de565b6001600160a01b0385166116d6576040516324ecef4d60e01b815260040160405180910390fd5b6116e286868685611cbe565b6116eb84610751565b90506116f78685611cca565b6001600160a01b03861660009081526004602052604090206117199085611d22565b506001600160a01b038516600090815260046020526040902061173c9085611d2e565b5060008481526003602052604090819020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388811691821790925591518692918916907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf906117b090339089908990612ec9565b60405180910390a4600033878787866040516020016117d3959493929190612efc565b60405160208183030381529060405290506117ee8782611d3a565b610acc868583611d65565b600081815260016020526040902080546060919061181690612d53565b80601f016020809104026020016040519081016040528092919081815260200182805461184290612d53565b801561188f5780601f106118645761010080835404028352916020019161188f565b820191906000526020600020905b81548152906001019060200180831161187257829003601f168201915b50505050509050919050565b60006106fe825490565b7fcbe43bb1aadcbabb38f5062c84d347338458b97a4a7ad9dde21d336880b966dc82016118fe576040517fce0c755200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b068282611260565b600061079f836001600160a01b038416611e9f565b610b06827f8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f0097083611eee565b610ea584848484611f3b565b6060600160008484604051602001611976929190918252602082015260400190565b60405160208183030381529060405280519060200120815260200190815260200160002080546119a590612d53565b80601f01602080910402602001604051908101604052809291908181526020018280546119d190612d53565b8015611a1e5780601f106119f357610100808354040283529160200191611a1e565b820191906000526020600020905b815481529060010190602001808311611a0157829003601f168201915b5050505050905092915050565b6000838152600560205260408120611a439087611fae565b905080611a8e576040517f4aa31a8c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602481018590526044016101de565b83856001600160a01b0316876001600160a01b03167fc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c8686604051611ad4929190612f36565b60405180910390a4505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080611b4d90612f51565b949350505050565b60006001600160e01b031982167f629aa6940000000000000000000000000000000000000000000000000000000014806106fe57506301ffc9a760e01b6001600160e01b03198316146106fe565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611c2a575060208210155b8015611c365750600081115b979650505050505050565b6001600160a01b0381166000908152600183016020526040812054151561079f565b60608160000180548060200260200160405190810160405280929190818152602001828054801561188f57602002820191906000526020600020905b815481526020019060010190808311611c9f5750505050509050919050565b610ea584848484611fc3565b600081815260056020526040812090611ce28261189b565b90506000805b82811015610c9557611cfb84600061208a565b9150611d1a828787600060405180602001604052806000815250611a2b565b600101611ce8565b600061079f8383612096565b600061079f8383611e9f565b610b06827fb23eae7e6d1564b295b4c3e3be402d9a2f0776c57bdf365903496f6fa481ab0083611eee565b611d7683631aed5a8560e21b611ba3565b15611e1057604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611dc9907f0b084a55ebf70fd3c06fd755269dac2212c4d3f0f4d09079780bfa50c1b2984d908590600401612f75565b6000604051808303816000875af1158015611de8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea59190810190612f8e565b816107b9576001600160a01b0383163b15611e62576040517f4349776d0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101de565b6040517f031731370000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101de565b6000818152600183016020526040812054611ee6575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106fe565b5060006106fe565b611f086001600160a01b038416631aed5a8560e21b611ba3565b156107b957604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611dc99085908590600401612f75565b7f0000000000000000000000000000000000000000000000000000000000000000600254611f6a906001613012565b1115611fa2576040517fe8ba229100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea584848484612189565b600061079f836001600160a01b038416612096565b6001600160a01b038416611ffd576000611fdc60025490565b60008181526007602090815260408083208790558683526008909152902055505b6001600160a01b038316612085576000600161201860025490565b6120229190613025565b60008481526008602052604090205490915081811015612064576000828152600760209081526040808320548484528184208190558352600890915290208190555b50600090815260076020908152604080832083905584835260089091528120555b610ea5565b600061079f83836122f3565b6000818152600183016020526040812054801561217f5760006120ba600183613025565b85549091506000906120ce90600190613025565b90508181146121335760008660000182815481106120ee576120ee612ca5565b906000526020600020015490508087600001848154811061211157612111612ca5565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061214457612144613038565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106fe565b60009150506106fe565b6001600160a01b0384166121b0576040516324ecef4d60e01b815260040160405180910390fd5b6121bd6000858584611cbe565b6000838152600360205260409020546001600160a01b03161561220f576040517f34c7b511000000000000000000000000000000000000000000000000000000008152600481018490526024016101de565b60026000815461221e9061304e565b909155506001600160a01b03841660009081526004602052604090206122449084611d2e565b50600083815260036020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881690811790915590518592907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf906122b390339088908890612ec9565b60405180910390a460003360008686856040516020016122d7959493929190612efc565b6040516020818303038152906040529050610836858483611d65565b600082600001828154811061230a5761230a612ca5565b9060005260206000200154905092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561235e57600080fd5b81356001600160e01b03198116811461079f57600080fd5b60006020828403121561238857600080fd5b5035919050565b80356001600160a01b03811681146123a657600080fd5b919050565b600080604083850312156123be57600080fd5b6123c78361238f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612414576124146123d5565b604052919050565b600067ffffffffffffffff821115612436576124366123d5565b50601f01601f191660200190565b600082601f83011261245557600080fd5b81356124686124638261241c565b6123eb565b81815284602083860101111561247d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156124af57600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156124d457600080fd5b6124e086828701612444565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561252b5783516001600160a01b031683529284019291840191600101612506565b50909695505050505050565b803580151581146123a657600080fd5b600080600080600060a0868803121561255f57600080fd5b6125688661238f565b94506125766020870161238f565b93506040860135925061258b60608701612537565b9150608086013567ffffffffffffffff8111156125a757600080fd5b6125b388828901612444565b9150509295509295909350565b60005b838110156125db5781810151838201526020016125c3565b50506000910152565b600081518084526125fc8160208601602086016125c0565b601f01601f19169290920160200192915050565b60208152600061079f60208301846125e4565b6000806020838503121561263657600080fd5b823567ffffffffffffffff8082111561264e57600080fd5b818501915085601f83011261266257600080fd5b81358181111561267157600080fd5b8660208260051b850101111561268657600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156126ed57603f198886030184526126db8583516125e4565b945092850192908501906001016126bf565b5092979650505050505050565b60006020828403121561270c57600080fd5b61079f8261238f565b600067ffffffffffffffff82111561272f5761272f6123d5565b5060051b60200190565b600082601f83011261274a57600080fd5b8135602061275a61246383612715565b82815260059290921b8401810191818101908684111561277957600080fd5b8286015b8481101561279b5761278e8161238f565b835291830191830161277d565b509695505050505050565b600082601f8301126127b757600080fd5b813560206127c761246383612715565b82815260059290921b840181019181810190868411156127e657600080fd5b8286015b8481101561279b57803583529183019183016127ea565b600082601f83011261281257600080fd5b8135602061282261246383612715565b82815260059290921b8401810191818101908684111561284157600080fd5b8286015b8481101561279b5761285681612537565b8352918301918301612845565b600082601f83011261287457600080fd5b8135602061288461246383612715565b82815260059290921b840181019181810190868411156128a357600080fd5b8286015b8481101561279b57803567ffffffffffffffff8111156128c75760008081fd5b6128d58986838b0101612444565b8452509183019183016128a7565b600080600080600060a086880312156128fb57600080fd5b853567ffffffffffffffff8082111561291357600080fd5b61291f89838a01612739565b9650602088013591508082111561293557600080fd5b61294189838a01612739565b9550604088013591508082111561295757600080fd5b61296389838a016127a6565b9450606088013591508082111561297957600080fd5b61298589838a01612801565b9350608088013591508082111561299b57600080fd5b506125b388828901612863565b600080604083850312156129bb57600080fd5b82359150602083013567ffffffffffffffff8111156129d957600080fd5b6129e585828601612444565b9150509250929050565b600080600060608486031215612a0457600080fd5b612a0d8461238f565b925060208401359150604084013567ffffffffffffffff8111156124d457600080fd5b60008060408385031215612a4357600080fd5b823567ffffffffffffffff80821115612a5b57600080fd5b612a67868387016127a6565b93506020850135915080821115612a7d57600080fd5b506129e585828601612863565b6020808252825182820181905260009190848201906040850190845b8181101561252b57835183529284019291840191600101612aa6565b600080600060608486031215612ad757600080fd5b833567ffffffffffffffff80821115612aef57600080fd5b612afb878388016127a6565b94506020860135915080821115612b1157600080fd5b612b1d878388016127a6565b93506040860135915080821115612b3357600080fd5b506124e086828701612863565b60008060008060808587031215612b5657600080fd5b612b5f8561238f565b935060208501359250612b7460408601612537565b9150606085013567ffffffffffffffff811115612b9057600080fd5b612b9c87828801612444565b91505092959194509250565b60008060408385031215612bbb57600080fd5b823567ffffffffffffffff80821115612bd357600080fd5b612bdf868387016127a6565b93506020850135915080821115612bf557600080fd5b506129e5858286016127a6565b600060208284031215612c1457600080fd5b813567ffffffffffffffff811115612c2b57600080fd5b611b4d848285016127a6565b60008060408385031215612c4a57600080fd5b50508035926020909101359150565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b60008251612c9b8184602087016125c0565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612cd257600080fd5b83018035915067ffffffffffffffff821115612ced57600080fd5b602001915036819003821315612d0257600080fd5b9250929050565b8183823760009101908152919050565b6001600160a01b03851681528360208201528215156040820152608060608201526000612d4960808301846125e4565b9695505050505050565b600181811c90821680612d6757607f821691505b6020821081036110f757634e487b7160e01b600052602260045260246000fd5b601f8211156107b957600081815260208120601f850160051c81016020861015612dae5750805b601f850160051c820191505b81811015610c9557828155600101612dba565b815167ffffffffffffffff811115612de757612de76123d5565b612dfb81612df58454612d53565b84612d87565b602080601f831160018114612e305760008415612e185750858301515b600019600386901b1c1916600185901b178555610c95565b600085815260208120601f198616915b82811015612e5f57888601518255948401946001909101908401612e40565b5085821015612e7d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff198082169291906014831015612ec15780818460140360031b1b83161693505b505050919050565b6001600160a01b03841681528215156020820152606060408201526000612ef360608301846125e4565b95945050505050565b60006001600160a01b038088168352808716602084015280861660408401525083606083015260a06080830152611c3660a08301846125e4565b8215158152604060208201526000611b4d60408301846125e4565b805160208083015191908110156110f75760001960209190910360031b1b16919050565b828152604060208201526000611b4d60408301846125e4565b600060208284031215612fa057600080fd5b815167ffffffffffffffff811115612fb757600080fd5b8201601f81018413612fc857600080fd5b8051612fd66124638261241c565b818152856020838501011115612feb57600080fd5b612ef38260208301602086016125c0565b634e487b7160e01b600052601160045260246000fd5b808201808211156106fe576106fe612ffc565b818103818111156106fe576106fe612ffc565b634e487b7160e01b600052603160045260246000fd5b60006001820161306057613060612ffc565b506001019056fea26469706673582212208aa59e10ec01e16c331b60ed599615e8deeb71394c375d5870566da7603aa55c64736f6c63430008110033 diff --git a/artifacts/bytecode/drops/LSP7DropsDigitalAsset.bin b/artifacts/bytecode/drops/LSP7DropsDigitalAsset.bin index bfe0395..aa46e19 100644 --- a/artifacts/bytecode/drops/LSP7DropsDigitalAsset.bin +++ b/artifacts/bytecode/drops/LSP7DropsDigitalAsset.bin @@ -1 +1 @@ -0x6101006040523480156200001257600080fd5b506040516200409138038062004091833981016040819052620000359162000490565b838382848a8a8a6001838383806001600160a01b038116620000ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620000c381620002e660201b620013e81760201c565b506200011a7feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b8152506200034d60201b620014651760201c565b620001547fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b846200034d60201b620014651760201c565b6200018e7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b836200034d60201b620014651760201c565b50506002805460ff19169215159290921790915550505060008290039050620001ca5760405163acf1d8c560e01b815260040160405180910390fd5b6080526001600755604051633c7bdc1960e01b815263ffffffff82166004820152733582f474f6e9fb087651b135d6224500a89e6f4490633c7bdc1990602401602060405180830381865af415801562000228573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024e91906200055a565b62000275576040516363a0a0e760e01b815263ffffffff82166004820152602401620000a4565b6001600160a01b03831615806200029357506001600160a01b038216155b15620002b25760405163d92e233d60e01b815260040160405180910390fd5b600d805460ff191690556001600160a01b0392831660c052911660e05263ffffffff1660a052506200071595505050505050565b6000546001600160a01b038281169116146200034a57600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b600082815260016020526040902062000367828262000614565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516200039a9190620006e0565b60405180910390a25050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003d9578181015183820152602001620003bf565b50506000910152565b600082601f830112620003f457600080fd5b81516001600160401b0380821115620004115762000411620003a6565b604051601f8301601f19908116603f011681019082821181831017156200043c576200043c620003a6565b816040528381528660208588010111156200045657600080fd5b62000469846020830160208901620003bc565b9695505050505050565b80516001600160a01b03811681146200048b57600080fd5b919050565b600080600080600080600060e0888a031215620004ac57600080fd5b87516001600160401b0380821115620004c457600080fd5b620004d28b838c01620003e2565b985060208a0151915080821115620004e957600080fd5b50620004f88a828b01620003e2565b965050620005096040890162000473565b9450620005196060890162000473565b9350620005296080890162000473565b925060a0880151915060c088015163ffffffff811681146200054a57600080fd5b8091505092959891949750929550565b6000602082840312156200056d57600080fd5b815180151581146200057e57600080fd5b9392505050565b600181811c908216806200059a57607f821691505b602082108103620005bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200060f57600081815260208120601f850160051c81016020861015620005ea5750805b601f850160051c820191505b818110156200060b57828155600101620005f6565b5050505b505050565b81516001600160401b03811115620006305762000630620003a6565b620006488162000641845462000585565b84620005c1565b602080601f831160018114620006805760008415620006675750858301515b600019600386901b1c1916600185901b1785556200060b565b600085815260208120601f198616915b82811015620006b15788860151825594840194600190910190840162000690565b5085821015620006d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602081526000825180602084015262000701816040850160208701620003bc565b601f01601f19169190910160400192915050565b60805160a05160c05160e0516139266200076b600039600081816103990152611edb0152600081816106c5015261210f01526000818161044c01526120270152600081816104c70152612a4601526139266000f3fe6080604052600436106102385760003560e01c8063715018a611610138578063aad3ec96116100b0578063dedff9c61161007f578063f2fde38b11610064578063f2fde38b14610754578063f575191e14610774578063fc6180711461078a576102ac565b8063dedff9c614610714578063edb8d1e214610741576102ac565b8063aad3ec9614610673578063b49506fd14610693578063d598d4c9146106b3578063d72fc29a146106e7576102ac565b80637f23690c116101075780638da5cb5b116100ec5780638da5cb5b1461060c578063942cd44b1461062a5780639790242114610660576102ac565b80637f23690c146105d95780638bbd4378146105ec576102ac565b8063715018a61461056e578063760d9bba1461058357806378e97925146105a35780637b204c4e146105b9576102ac565b8063313ce567116101cb57806352058d8a1161019a57806365aeaa951161017f57806365aeaa95146105185780636817c76c1461053857806370a082311461054e576102ac565b806352058d8a146104b857806354f6127f146104eb576102ac565b8063313ce567146104135780633c3e8ae31461043a5780634521748e1461048357806351b42b00146104a3576102ac565b80632b47da52116102075780632b47da52146103725780632b7ac3f3146103875780632bc1da82146103d35780632d7667c9146103f3576102ac565b806301ffc9a7146102ed5780630f15f4c01461032257806318160ddd14610339578063186601ca14610358576102ac565b366102ac573460000361027a5760405163e5099ee360e01b81526004016102719060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600036606060048210156102d757828260405163e5099ee360e01b8152600401610271929190612bf2565b6102e1838361079d565b80519350602001915050f35b3480156102f957600080fd5b5061030d610308366004612c21565b6108ac565b60405190151581526020015b60405180910390f35b34801561032e57600080fd5b506103376108f9565b005b34801561034557600080fd5b506003545b604051908152602001610319565b34801561036457600080fd5b50600d5461030d9060ff1681565b34801561037e57600080fd5b5061034a61090b565b34801561039357600080fd5b506103bb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610319565b3480156103df57600080fd5b506103376103ee366004612d2c565b61091b565b3480156103ff57600080fd5b5061033761040e366004612f61565b6109ef565b34801561041f57600080fd5b50610428610af7565b60405160ff9091168152602001610319565b34801561044657600080fd5b5061046e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610319565b34801561048f57600080fd5b5061033761049e366004613033565b610b10565b3480156104af57600080fd5b50610337610b89565b3480156104c457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061034a565b3480156104f757600080fd5b5061050b61050636600461307b565b610bd1565b60405161031991906130e4565b34801561052457600080fd5b5061034a6105333660046130f7565b610bdc565b34801561054457600080fd5b5061034a600b5481565b34801561055a57600080fd5b5061034a61056936600461312a565b610c42565b34801561057a57600080fd5b50610337610c60565b34801561058f57600080fd5b5061033761059e366004613145565b610c72565b3480156105af57600080fd5b5061034a600a5481565b3480156105c557600080fd5b506103376105d4366004612d2c565b610cec565b6103376105e73660046131b1565b610d45565b3480156105f857600080fd5b506103376106073660046131f8565b610d7a565b34801561061857600080fd5b506000546001600160a01b03166103bb565b34801561063657600080fd5b5061034a61064536600461312a565b6001600160a01b03166000908152600e602052604090205490565b61033761066e36600461322a565b610e5f565b34801561067f57600080fd5b5061033761068e366004613284565b610f4c565b34801561069f57600080fd5b506103376106ae366004612d2c565b611128565b3480156106bf57600080fd5b506103bb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f357600080fd5b5061070761070236600461312a565b61114d565b60405161031991906132ae565b34801561072057600080fd5b5061073461072f3660046132fb565b611171565b6040516103199190613330565b61033761074f3660046133a3565b61121c565b34801561076057600080fd5b5061033761076f36600461312a565b6112ce565b34801561078057600080fd5b5061034a600c5481565b61033761079836600461345c565b61135e565b606060006107b66000356001600160e01b0319166114ba565b5090506001600160a01b038116610807576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b0319600035166004820152602401610271565b600080826001600160a01b0316348787333460405160200161082c94939291906134aa565b60408051601f1981840301815290829052610846916134da565b60006040518083038185875af1925050503d8060008114610883576040519150601f19603f3d011682016040523d82523d6000602084013e610888565b606091505b5091509150811561089d5792506108a6915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fdaa746b70000000000000000000000000000000000000000000000000000000014806108ea57506108ea82611564565b806108a657506108a6826115a2565b6109016115e0565b610909611649565b565b600061091660085490565b905090565b60006109278433610bdc565b90508060000361096e576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610271565b600061097a848361350c565b905061098a33868360018761168b565b60003382856040516020016109a19392919061351f565b60408051601f1981840301815291905290506109e76001600160a01b0387167f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc8361182f565b505050505050565b8451845181141580610a02575083518114155b80610a0e575082518114155b80610a1a575081518114155b15610a51576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610aee57610ae6878281518110610a7157610a71613550565b6020026020010151878381518110610a8b57610a8b613550565b6020026020010151878481518110610aa557610aa5613550565b6020026020010151878581518110610abf57610abf613550565b6020026020010151878681518110610ad957610ad9613550565b6020026020010151610c72565b600101610a54565b50505050505050565b60025460009060ff16610b0a5750601290565b50600090565b610b1e33846000858561168b565b8115610b8457600033600083604051602001610b3c93929190613566565b60408051601f198184030181529190529050610b826001600160a01b0385167f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc8361182f565b505b505050565b610b916115e0565b600d5460ff161561090957600d805460ff191690556040517f1142a68cc39970640eb3524e77b91f78be21abc64f20f5919387eb46699bb77290600090a1565b60606108a6826118c3565b6000826001600160a01b0316826001600160a01b031603610c1657506001600160a01b0381166000908152600460205260409020546108a6565b506001600160a01b038082166000908152600660209081526040808320938616835292905220546108a6565b6001600160a01b0381166000908152600460205260408120546108a6565b610c686115e0565b61090960006113e8565b836001600160a01b0316856001600160a01b031603610cbd576040517fb9afb00000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03861614610cd857610cd8338685611965565b610ce58585858585611a0c565b5050505050565b6000610cf88433610bdc565b905082811015610d34576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82810361098a33868360018761168b565b610d4d6115e0565b3415610d6c5760405163f36ba73760e01b815260040160405180910390fd5b610d768282611bea565b5050565b610d826115e0565b42841015610dbf576040517f76429b5700000000000000000000000000000000000000000000000000000000815260048101859052602401610271565b81600003610df9576040517f39af805800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a849055600b839055600c829055610e1181600855565b6040805185815260208101859052908101839052606081018290527f8aeedf0ed8cd3693ef01d328f512281c622ee40528326aa6fba505184ab13a439060800160405180910390a150505050565b610e676115e0565b3415610e865760405163f36ba73760e01b815260040160405180910390fd5b8051825114610ec1576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003610efc576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610b8457610f44838281518110610f1d57610f1d613550565b6020026020010151838381518110610f3757610f37613550565b6020026020010151611bea565b600101610eff565b610f54611d04565b6001600160a01b038216610f94576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610fce576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e60205260409020548181101561101b576040517fffb97f8100000000000000000000000000000000000000000000000000000000815260048101839052602401610271565b336000908152600e60205260408120805484929061103a908490613591565b90915550506040516000906001600160a01b0385169084908381818185875af1925050503d806000811461108a576040519150601f19603f3d011682016040523d82523d6000602084013e61108f565b606091505b50509050806110dc576040517fa00139f80000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260248101849052604401610271565b6040518381526001600160a01b0385169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a35050610d766001600755565b61113633848460018561168b565b6000338383604051602001610b3c9392919061351f565b6001600160a01b03811660009081526005602052604090206060906108a690611d5d565b6060815167ffffffffffffffff81111561118d5761118d612c67565b6040519080825280602002602001820160405280156111c057816020015b60608152602001906001900390816111ab5790505b50905060005b8251811015611216576111f18382815181106111e4576111e4613550565b60200260200101516118c3565b82828151811061120357611203613550565b60209081029190910101526001016111c6565b50919050565b600d5460ff16158061122f5750600a5442105b1561124d57604051632e8acb0d60e01b815260040160405180910390fd5b611255611d04565b6112ad88888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080513360208201528b9350019050604051602081830303815290604052611d6a565b6112ba8585858585611e81565b6112c46001600755565b5050505050505050565b6112d66115e0565b6001600160a01b0381166113525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610271565b61135b816113e8565b50565b600d5460ff1615806113715750600a5442105b1561138f57604051632e8acb0d60e01b815260040160405180910390fd5b611397611d04565b600854156113d1576040517f1df4698600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113de8585858585611e81565b610ce56001600755565b6000546001600160a01b0382811691161461135b57600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082815260016020526040902061147d828261361e565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516114ae91906130e4565b60405180910390a25050565b600080806114f27fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b03198616612169565b905060006114ff826118c3565b905080516014141580156115135750805115155b1561154c57806040517f42bfe79f00000000000000000000000000000000000000000000000000000000815260040161027191906130e4565b611555816136de565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806108a657506108a6826121da565b6000806115b56301ffc9a760e01b6114ba565b5090506001600160a01b0381166115cf5750600092915050565b6115d98184612228565b9392505050565b336115f36000546001600160a01b031690565b6001600160a01b0316146109095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610271565b600d5460ff1661090957600d805460ff191660011790556040517fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b090600090a1565b6001600160a01b0384166116cb576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603611716576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808616600090815260066020908152604080832093881683529290522083905582156117b8576001600160a01b038516600090815260056020526040902061176690856122c6565b5082856001600160a01b0316856001600160a01b03167f0744b3de98efaff36606a0e67662fb8697adb0ed49d90730bdb4bbf885f30597846040516117ab91906130e4565b60405180910390a4610ce5565b6001600160a01b03851660009081526005602052604090206117da90856122db565b50846001600160a01b0316846001600160a01b03167f66015c8835ee443e5bc280176609215a5035da4bae05bdef994596d7e43aae22848460405161182092919061371a565b60405180910390a35050505050565b6118496001600160a01b038416631aed5a8560e21b612228565b15610b8457604051631aed5a8560e21b81526001600160a01b03841690636bb56a149061187c9085908590600401613735565b6000604051808303816000875af115801561189b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b82919081019061374e565b60008181526001602052604090208054606091906118e0906135a4565b80601f016020809104026020016040519081016040528092919081815260200182805461190c906135a4565b80156119595780601f1061192e57610100808354040283529160200191611959565b820191906000526020600020905b81548152906001019060200180831161193c57829003601f168201915b50505050509050919050565b6001600160a01b03808316600090815260066020908152604080832093871683529290522054808211156119e6576040517ff3a6b6910000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152602482018390528516604482015260648101839052608401610271565b610b8283856119f58585613591565b60006040518060200160405280600081525061168b565b6001600160a01b0385161580611a2957506001600160a01b038416155b15611a4757604051630d2d5ec360e41b815260040160405180910390fd5b6001600160a01b03851660009081526004602052604090205480841115611ab3576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b038716602482015260448101859052606401610271565b611abf86868685610b82565b6001600160a01b03861660009081526004602052604081208054869290611ae7908490613591565b90915550506001600160a01b03851660009081526004602052604081208054869290611b1490849061350c565b92505081905550846001600160a01b0316866001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6878787604051611b6c939291906137bc565b60405180910390a4611b8086868685610b82565b600086868685604051602001611b9994939291906137dd565b60408051601f198184030181529190529050611bdf6001600160a01b0388167f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea8361182f565b610aee8685836122f0565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611c43576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201611c9c576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600160205260409020611cb4828261361e565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b261010083511115611cf557611cf08360006101006123ec565b611cf7565b825b6040516114ae91906130e4565b600260075403611d565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610271565b6002600755565b606060006115d983612514565b600854611da3576040517f5058901600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dac8261256f565b15611de75781816040517f331e2c3f000000000000000000000000000000000000000000000000000000008152600401610271929190613735565b60008282604051602001611dfc929190613735565b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050611e3e84600854836125b0565b611e785782826040517f4a0e7b13000000000000000000000000000000000000000000000000000000008152600401610271929190613735565b610b82836125c6565b6040516bffffffffffffffffffffffff1930606090811b8216602084015246603484015287901b1660548201526068810185905234608882015260009060a8016040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f0f82868686612604565b6001600160a01b031614611f4f576040517f04f186ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085611f5b88610c42565b611f65919061350c565b9050600c54811115611fa6576040517f941b43eb00000000000000000000000000000000000000000000000000000000815260048101829052602401610271565b6000600b5487611fb69190613819565b9050803414611ff3576040517ffe2b8195000000000000000000000000000000000000000000000000000000008152346004820152602401610271565b6040517f1817cb8e0000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152600090733582f474f6e9fb087651b135d6224500a89e6f4490631817cb8e90604401602060405180830381865af415801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190613830565b90506120bb8183613591565b600e60006120d16000546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612100919061350c565b90915550506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600e60205260408120805483929061214d90849061350c565b9091555061215e905089898461262c565b505050505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c830152918291016040516020818303038152906040529050806121d290613849565b949350505050565b60006001600160e01b031982167f629aa6940000000000000000000000000000000000000000000000000000000014806108a657506301ffc9a760e01b6001600160e01b03198316146108a6565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d915060005190508280156122af575060208210155b80156122bb5750600081115b979650505050505050565b60006115d9836001600160a01b03841661268c565b60006115d9836001600160a01b0384166126db565b61230a6001600160a01b038416631aed5a8560e21b612228565b1561235d57604051631aed5a8560e21b81526001600160a01b03841690636bb56a149061187c907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c908590600401613735565b81610b84576001600160a01b0383163b156123af576040517fa608fbb60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610271565b6040517f26c247f40000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610271565b6060816123fa81601f61350c565b10156124485760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610271565b612452828461350c565b845110156124a25760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610271565b6060821580156124c1576040519150600082526020820160405261250b565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124fa5780518352602092830192016124e2565b5050858452601f01601f1916604052505b50949350505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561195957602002820191906000526020600020905b8154815260200190600101908083116125505750505050509050919050565b60008061257e61010084613883565b9050600061258e61010085613897565b60009283526009602052604090922054600190921b9182169091149392505050565b6000826125bd85846127ce565b14949350505050565b60006125d461010083613883565b905060006125e461010084613897565b6000928352600960205260409092208054600190931b9092179091555050565b60008060006126158787878761281b565b91509150612622816128df565b5095945050505050565b60408051838152602081018390526001600160a01b038516917f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff910160405180910390a2610b848383600060405180602001604052806000815250612a44565b60008181526001830160205260408120546126d3575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108a6565b5060006108a6565b600081815260018301602052604081205480156127c45760006126ff600183613591565b855490915060009061271390600190613591565b905081811461277857600086600001828154811061273357612733613550565b906000526020600020015490508087600001848154811061275657612756613550565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612789576127896138ab565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108a6565b60009150506108a6565b600081815b8451811015612813576127ff828683815181106127f2576127f2613550565b6020026020010151612abd565b91508061280b816138c1565b9150506127d3565b509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561285257506000905060036128d6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156128a6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166128cf576000600192509250506128d6565b9150600090505b94509492505050565b60008160048111156128f3576128f36138da565b036128fb5750565b600181600481111561290f5761290f6138da565b0361295c5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610271565b6002816004811115612970576129706138da565b036129bd5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610271565b60038160048111156129d1576129d16138da565b0361135b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610271565b7f000000000000000000000000000000000000000000000000000000000000000083612a6f60035490565b612a79919061350c565b1115612ab1576040517feacbf0d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8284848484612aec565b6000818310612ad95760008281526020849052604090206115d9565b60008381526020839052604090206115d9565b6001600160a01b038416612b1357604051630d2d5ec360e41b815260040160405180910390fd5b612b206000858584610b82565b8260036000828254612b32919061350c565b90915550506001600160a01b03841660009081526004602052604081208054859290612b5f90849061350c565b90915550506040516001600160a01b0385169060009033907f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a690612ba8908890889088906137bc565b60405180910390a4612bbd6000858584610b82565b600080858584604051602001612bd694939291906137dd565b6040516020818303038152906040529050610ce58584836122f0565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215612c3357600080fd5b81356001600160e01b0319811681146115d957600080fd5b80356001600160a01b0381168114612c6257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ca657612ca6612c67565b604052919050565b600067ffffffffffffffff821115612cc857612cc8612c67565b50601f01601f191660200190565b600082601f830112612ce757600080fd5b8135612cfa612cf582612cae565b612c7d565b818152846020838601011115612d0f57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215612d4157600080fd5b612d4a84612c4b565b925060208401359150604084013567ffffffffffffffff811115612d6d57600080fd5b612d7986828701612cd6565b9150509250925092565b600067ffffffffffffffff821115612d9d57612d9d612c67565b5060051b60200190565b600082601f830112612db857600080fd5b81356020612dc8612cf583612d83565b82815260059290921b84018101918181019086841115612de757600080fd5b8286015b84811015612e0957612dfc81612c4b565b8352918301918301612deb565b509695505050505050565b600082601f830112612e2557600080fd5b81356020612e35612cf583612d83565b82815260059290921b84018101918181019086841115612e5457600080fd5b8286015b84811015612e095780358352918301918301612e58565b80358015158114612c6257600080fd5b600082601f830112612e9057600080fd5b81356020612ea0612cf583612d83565b82815260059290921b84018101918181019086841115612ebf57600080fd5b8286015b84811015612e0957612ed481612e6f565b8352918301918301612ec3565b600082601f830112612ef257600080fd5b81356020612f02612cf583612d83565b82815260059290921b84018101918181019086841115612f2157600080fd5b8286015b84811015612e0957803567ffffffffffffffff811115612f455760008081fd5b612f538986838b0101612cd6565b845250918301918301612f25565b600080600080600060a08688031215612f7957600080fd5b853567ffffffffffffffff80821115612f9157600080fd5b612f9d89838a01612da7565b96506020880135915080821115612fb357600080fd5b612fbf89838a01612da7565b95506040880135915080821115612fd557600080fd5b612fe189838a01612e14565b94506060880135915080821115612ff757600080fd5b61300389838a01612e7f565b9350608088013591508082111561301957600080fd5b5061302688828901612ee1565b9150509295509295909350565b60008060006060848603121561304857600080fd5b61305184612c4b565b925061305f60208501612e6f565b9150604084013567ffffffffffffffff811115612d6d57600080fd5b60006020828403121561308d57600080fd5b5035919050565b60005b838110156130af578181015183820152602001613097565b50506000910152565b600081518084526130d0816020860160208601613094565b601f01601f19169290920160200192915050565b6020815260006115d960208301846130b8565b6000806040838503121561310a57600080fd5b61311383612c4b565b915061312160208401612c4b565b90509250929050565b60006020828403121561313c57600080fd5b6115d982612c4b565b600080600080600060a0868803121561315d57600080fd5b61316686612c4b565b945061317460208701612c4b565b93506040860135925061318960608701612e6f565b9150608086013567ffffffffffffffff8111156131a557600080fd5b61302688828901612cd6565b600080604083850312156131c457600080fd5b82359150602083013567ffffffffffffffff8111156131e257600080fd5b6131ee85828601612cd6565b9150509250929050565b6000806000806080858703121561320e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561323d57600080fd5b823567ffffffffffffffff8082111561325557600080fd5b61326186838701612e14565b9350602085013591508082111561327757600080fd5b506131ee85828601612ee1565b6000806040838503121561329757600080fd5b6132a083612c4b565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156132ef5783516001600160a01b0316835292840192918401916001016132ca565b50909695505050505050565b60006020828403121561330d57600080fd5b813567ffffffffffffffff81111561332457600080fd5b6121d284828501612e14565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561338557603f198886030184526133738583516130b8565b94509285019290850190600101613357565b5092979650505050505050565b803560ff81168114612c6257600080fd5b60008060008060008060008060e0898b0312156133bf57600080fd5b883567ffffffffffffffff808211156133d757600080fd5b818b0191508b601f8301126133eb57600080fd5b8135818111156133fa57600080fd5b8c60208260051b850101111561340f57600080fd5b60209283019a50985050890135955061342a60408a01612c4b565b94506060890135935061343f60808a01613392565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a0868803121561347457600080fd5b61347d86612c4b565b94506020860135935061349260408701613392565b94979396509394606081013594506080013592915050565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b600082516134ec818460208701613094565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108a6576108a66134f6565b6001600160a01b038416815282602082015260606040820152600061354760608301846130b8565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038416815260ff8316602082015260606040820152600061354760608301846130b8565b818103818111156108a6576108a66134f6565b600181811c908216806135b857607f821691505b60208210810361121657634e487b7160e01b600052602260045260246000fd5b601f821115610b8457600081815260208120601f850160051c810160208610156135ff5750805b601f850160051c820191505b818110156109e75782815560010161360b565b815167ffffffffffffffff81111561363857613638612c67565b61364c8161364684546135a4565b846135d8565b602080601f83116001811461368157600084156136695750858301515b600019600386901b1c1916600185901b1785556109e7565b600085815260208120601f198616915b828110156136b057888601518255948401946001909101908401613691565b50858210156136ce5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff1980821692919060148310156137125780818460140360031b1b83161693505b505050919050565b82151581526040602082015260006121d260408301846130b8565b8281526040602082015260006121d260408301846130b8565b60006020828403121561376057600080fd5b815167ffffffffffffffff81111561377757600080fd5b8201601f8101841361378857600080fd5b8051613796612cf582612cae565b8181528560208385010111156137ab57600080fd5b613547826020830160208601613094565b838152821515602082015260606040820152600061354760608301846130b8565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261380f60808301846130b8565b9695505050505050565b80820281158282048414176108a6576108a66134f6565b60006020828403121561384257600080fd5b5051919050565b805160208083015191908110156112165760001960209190910360031b1b16919050565b634e487b7160e01b600052601260045260246000fd5b6000826138925761389261386d565b500490565b6000826138a6576138a661386d565b500690565b634e487b7160e01b600052603160045260246000fd5b6000600182016138d3576138d36134f6565b5060010190565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220bc7e321c5458b9747381f1942f8721a1f7d1a58d16fcb22e1d674d953902c0b264736f6c63430008110033 +0x6101006040523480156200001257600080fd5b50604051620041b2380380620041b28339810160408190526200003591620004e8565b838382848a8a8a60018084848483816001600160a01b038116620000af5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620000c5816200033e60201b6200151d1760201c565b506200011c7feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b815250620003a560201b6200159a1760201c565b620001567fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b85620003a560201b6200159a1760201c565b620001907f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b84620003a560201b6200159a1760201c565b6040805160208101839052620001e3917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb39101604051602081830303815290604052620003a560201b6200159a1760201c565b50506002805460ff19169315159390931790925550505060008490039250620002229150505760405163acf1d8c560e01b815260040160405180910390fd5b6080526001600755604051633c7bdc1960e01b815263ffffffff82166004820152733582f474f6e9fb087651b135d6224500a89e6f4490633c7bdc1990602401602060405180830381865af415801562000280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a69190620005b2565b620002cd576040516363a0a0e760e01b815263ffffffff82166004820152602401620000a6565b6001600160a01b0383161580620002eb57506001600160a01b038216155b156200030a5760405163d92e233d60e01b815260040160405180910390fd5b600d805460ff191690556001600160a01b0392831660c052911660e05263ffffffff1660a052506200076d95505050505050565b6000546001600160a01b03828116911614620003a257600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b6000828152600160205260409020620003bf82826200066c565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051620003f2919062000738565b60405180910390a25050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200043157818101518382015260200162000417565b50506000910152565b600082601f8301126200044c57600080fd5b81516001600160401b0380821115620004695762000469620003fe565b604051601f8301601f19908116603f01168101908282118183101715620004945762000494620003fe565b81604052838152866020858801011115620004ae57600080fd5b620004c184602083016020890162000414565b9695505050505050565b80516001600160a01b0381168114620004e357600080fd5b919050565b600080600080600080600060e0888a0312156200050457600080fd5b87516001600160401b03808211156200051c57600080fd5b6200052a8b838c016200043a565b985060208a01519150808211156200054157600080fd5b50620005508a828b016200043a565b9650506200056160408901620004cb565b94506200057160608901620004cb565b93506200058160808901620004cb565b925060a0880151915060c088015163ffffffff81168114620005a257600080fd5b8091505092959891949750929550565b600060208284031215620005c557600080fd5b81518015158114620005d657600080fd5b9392505050565b600181811c90821680620005f257607f821691505b6020821081036200061357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200066757600081815260208120601f850160051c81016020861015620006425750805b601f850160051c820191505b8181101562000663578281556001016200064e565b5050505b505050565b81516001600160401b03811115620006885762000688620003fe565b620006a081620006998454620005dd565b8462000619565b602080601f831160018114620006d85760008415620006bf5750858301515b600019600386901b1c1916600185901b17855562000663565b600085815260208120601f198616915b828110156200070957888601518255948401946001909101908401620006e8565b5085821015620007285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200075981604085016020870162000414565b601f01601f19169190910160400192915050565b60805160a05160c05160e0516139ef620007c3600039600081816103b40152611e6f01526000818161070d01526120a30152600081816104670152611fbb0152600081816104e20152612a7301526139ef6000f3fe6080604052600436106102535760003560e01c8063715018a611610138578063aad3ec96116100b0578063dedff9c61161007f578063f2fde38b11610064578063f2fde38b1461078f578063f575191e146107af578063fc618071146107c5576102c7565b8063dedff9c61461075c578063edb8d1e21461077c576102c7565b8063aad3ec96146106bb578063b49506fd146106db578063d598d4c9146106fb578063d72fc29a1461072f576102c7565b80637f23690c116101075780638da5cb5b116100ec5780638da5cb5b14610654578063942cd44b1461067257806397902421146106a8576102c7565b80637f23690c146106215780638bbd437814610634576102c7565b8063715018a6146105b6578063760d9bba146105cb57806378e97925146105eb5780637b204c4e14610601576102c7565b80633c3e8ae3116101cb57806354f6127f1161019a5780636817c76c1161017f5780636817c76c146105535780636963d4381461056957806370a0823114610596576102c7565b806354f6127f1461050657806365aeaa9514610533576102c7565b80633c3e8ae3146104555780634521748e1461049e57806351b42b00146104be57806352058d8a146104d3576102c7565b80632b47da52116102225780632bc1da82116102075780632bc1da82146103ee5780632d7667c91461040e578063313ce5671461042e576102c7565b80632b47da521461038d5780632b7ac3f3146103a2576102c7565b806301ffc9a7146103085780630f15f4c01461033d57806318160ddd14610354578063186601ca14610373576102c7565b366102c757346000036102955760405163e5099ee360e01b815260040161028c9060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600036606060048210156102f257828260405163e5099ee360e01b815260040161028c929190612c22565b6102fc83836107d8565b80519350602001915050f35b34801561031457600080fd5b50610328610323366004612c51565b6108e7565b60405190151581526020015b60405180910390f35b34801561034957600080fd5b50610352610934565b005b34801561036057600080fd5b506003545b604051908152602001610334565b34801561037f57600080fd5b50600d546103289060ff1681565b34801561039957600080fd5b50610365610946565b3480156103ae57600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610334565b3480156103fa57600080fd5b50610352610409366004612d5c565b610956565b34801561041a57600080fd5b50610352610429366004612f91565b6109ff565b34801561043a57600080fd5b50610443610b07565b60405160ff9091168152602001610334565b34801561046157600080fd5b506104897f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610334565b3480156104aa57600080fd5b506103526104b9366004613063565b610b20565b3480156104ca57600080fd5b50610352610b6e565b3480156104df57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610365565b34801561051257600080fd5b506105266105213660046130ab565b610bb6565b6040516103349190613114565b34801561053f57600080fd5b5061036561054e366004613127565b610bc1565b34801561055f57600080fd5b50610365600b5481565b34801561057557600080fd5b506105896105843660046131a6565b610c27565b60405161033491906131e8565b3480156105a257600080fd5b506103656105b136600461324a565b610d77565b3480156105c257600080fd5b50610352610d95565b3480156105d757600080fd5b506103526105e6366004613265565b610da7565b3480156105f757600080fd5b50610365600a5481565b34801561060d57600080fd5b5061035261061c366004612d5c565b610e21565b61035261062f3660046132d1565b610e7a565b34801561064057600080fd5b5061035261064f366004613318565b610eaf565b34801561066057600080fd5b506000546001600160a01b03166103d6565b34801561067e57600080fd5b5061036561068d36600461324a565b6001600160a01b03166000908152600e602052604090205490565b6103526106b636600461334a565b610f94565b3480156106c757600080fd5b506103526106d63660046133a4565b611081565b3480156106e757600080fd5b506103526106f6366004612d5c565b61125d565b34801561070757600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561073b57600080fd5b5061074f61074a36600461324a565b611282565b60405161033491906133ce565b34801561076857600080fd5b5061058961077736600461341b565b6112a6565b61035261078a366004613461565b611351565b34801561079b57600080fd5b506103526107aa36600461324a565b611403565b3480156107bb57600080fd5b50610365600c5481565b6103526107d33660046134eb565b611493565b606060006107f16000356001600160e01b0319166115ef565b5090506001600160a01b038116610842576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b031960003516600482015260240161028c565b600080826001600160a01b031634878733346040516020016108679493929190613539565b60408051601f198184030181529082905261088191613569565b60006040518083038185875af1925050503d80600081146108be576040519150601f19603f3d011682016040523d82523d6000602084013e6108c3565b606091505b509150915081156108d85792506108e1915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fb3c4928f000000000000000000000000000000000000000000000000000000001480610925575061092582611699565b806108e157506108e1826116d7565b61093c611715565b61094461177e565b565b600061095160085490565b905090565b60006109628433610bc1565b9050806000036109a9576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161028c565b60006109b5848361359b565b90506109c53386836001876117c0565b60003382856040516020016109dc939291906135ae565b60405160208183030381529060405290506109f78682611965565b505050505050565b8451845181141580610a12575083518114155b80610a1e575082518114155b80610a2a575081518114155b15610a61576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610afe57610af6878281518110610a8157610a816135df565b6020026020010151878381518110610a9b57610a9b6135df565b6020026020010151878481518110610ab557610ab56135df565b6020026020010151878581518110610acf57610acf6135df565b6020026020010151878681518110610ae957610ae96135df565b6020026020010151610da7565b600101610a64565b50505050505050565b60025460009060ff16610b1a5750601290565b50600090565b610b2e3384600085856117c0565b8115610b6957600033600083604051602001610b4c939291906135f5565b6040516020818303038152906040529050610b678482611965565b505b505050565b610b76611715565b600d5460ff161561094457600d805460ff191690556040517f1142a68cc39970640eb3524e77b91f78be21abc64f20f5919387eb46699bb77290600090a1565b60606108e182611990565b6000826001600160a01b0316826001600160a01b031603610bfb57506001600160a01b0381166000908152600460205260409020546108e1565b506001600160a01b038082166000908152600660209081526040808320938616835292905220546108e1565b60608167ffffffffffffffff811115610c4257610c42612c97565b604051908082528060200260200182016040528015610c7557816020015b6060815260200190600190039081610c605790505b50905060005b82811015610d705760008030868685818110610c9957610c996135df565b9050602002810190610cab9190613620565b604051610cb9929190613667565b600060405180830381855af49150503d8060008114610cf4576040519150601f19603f3d011682016040523d82523d6000602084013e610cf9565b606091505b509150915081610d4857805115610d135780518082602001fd5b6040517fb774c2840000000000000000000000000000000000000000000000000000000081526004810184905260240161028c565b80848481518110610d5b57610d5b6135df565b60209081029190910101525050600101610c7b565b5092915050565b6001600160a01b0381166000908152600460205260408120546108e1565b610d9d611715565b610944600061151d565b836001600160a01b0316856001600160a01b031603610df2576040517fb9afb00000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03861614610e0d57610e0d338685611a32565b610e1a8585858585611ad9565b5050505050565b6000610e2d8433610bc1565b905082811015610e69576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8281036109c53386836001876117c0565b610e82611715565b3415610ea15760405163f36ba73760e01b815260040160405180910390fd5b610eab8282611c8e565b5050565b610eb7611715565b42841015610ef4576040517f76429b570000000000000000000000000000000000000000000000000000000081526004810185905260240161028c565b81600003610f2e576040517f39af805800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a849055600b839055600c829055610f4681600855565b6040805185815260208101859052908101839052606081018290527f8aeedf0ed8cd3693ef01d328f512281c622ee40528326aa6fba505184ab13a439060800160405180910390a150505050565b610f9c611715565b3415610fbb5760405163f36ba73760e01b815260040160405180910390fd5b8051825114610ff6576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003611031576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610b6957611079838281518110611052576110526135df565b602002602001015183838151811061106c5761106c6135df565b6020026020010151611c8e565b600101611034565b611089611c98565b6001600160a01b0382166110c9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003611103576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e602052604090205481811015611150576040517fffb97f810000000000000000000000000000000000000000000000000000000081526004810183905260240161028c565b336000908152600e60205260408120805484929061116f908490613677565b90915550506040516000906001600160a01b0385169084908381818185875af1925050503d80600081146111bf576040519150601f19603f3d011682016040523d82523d6000602084013e6111c4565b606091505b5050905080611211576040517fa00139f80000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810184905260440161028c565b6040518381526001600160a01b0385169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a35050610eab6001600755565b61126b3384846001856117c0565b6000338383604051602001610b4c939291906135ae565b6001600160a01b03811660009081526005602052604090206060906108e190611cf1565b6060815167ffffffffffffffff8111156112c2576112c2612c97565b6040519080825280602002602001820160405280156112f557816020015b60608152602001906001900390816112e05790505b50905060005b825181101561134b57611326838281518110611319576113196135df565b6020026020010151611990565b828281518110611338576113386135df565b60209081029190910101526001016112fb565b50919050565b600d5460ff1615806113645750600a5442105b1561138257604051632e8acb0d60e01b815260040160405180910390fd5b61138a611c98565b6113e288888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080513360208201528b9350019050604051602081830303815290604052611cfe565b6113ef8585858585611e15565b6113f96001600755565b5050505050505050565b61140b611715565b6001600160a01b0381166114875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161028c565b6114908161151d565b50565b600d5460ff1615806114a65750600a5442105b156114c457604051632e8acb0d60e01b815260040160405180910390fd5b6114cc611c98565b60085415611506576040517f1df4698600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115138585858585611e15565b610e1a6001600755565b6000546001600160a01b0382811691161461149057600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008281526001602052604090206115b28282613704565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516115e39190613114565b60405180910390a25050565b600080806116277fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b031986166120fd565b9050600061163482611990565b905080516014141580156116485750805115155b1561168157806040517f42bfe79f00000000000000000000000000000000000000000000000000000000815260040161028c9190613114565b61168a816137c4565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806108e157506108e18261216e565b6000806116ea6301ffc9a760e01b6115ef565b5090506001600160a01b0381166117045750600092915050565b61170e81846121bc565b9392505050565b336117286000546001600160a01b031690565b6001600160a01b0316146109445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028c565b600d5460ff1661094457600d805460ff191660011790556040517fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b090600090a1565b6001600160a01b038416611800576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316846001600160a01b03160361184b576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808616600090815260066020908152604080832093881683529290522083905582156118ed576001600160a01b038516600090815260056020526040902061189b908561225a565b5082856001600160a01b0316856001600160a01b03167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d846040516118e09190613114565b60405180910390a4610e1a565b6001600160a01b038516600090815260056020526040902061190f908561226f565b50811515856001600160a01b0316856001600160a01b03167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167846040516119569190613114565b60405180910390a45050505050565b610eab827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc83612284565b60008181526001602052604090208054606091906119ad9061368a565b80601f01602080910402602001604051908101604052809291908181526020018280546119d99061368a565b8015611a265780601f106119fb57610100808354040283529160200191611a26565b820191906000526020600020905b815481529060010190602001808311611a0957829003601f168201915b50505050509050919050565b6001600160a01b0380831660009081526006602090815260408083209387168352929052205480821115611ab3576040517ff3a6b6910000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015260248201839052851660448201526064810183905260840161028c565b610b678385611ac28585613677565b6000604051806020016040528060008152506117c0565b6001600160a01b0385161580611af657506001600160a01b038416155b15611b1457604051630d2d5ec360e41b815260040160405180910390fd5b6001600160a01b03851660009081526004602052604090205480841115611b80576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b03871660248201526044810185905260640161028c565b611b8c86868685610b67565b6001600160a01b03861660009081526004602052604081208054869290611bb4908490613677565b90915550506001600160a01b03851660009081526004602052604081208054869290611be190849061359b565b92505081905550846001600160a01b0316866001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6878787604051611c3993929190613800565b60405180910390a4611c4d86868685610b67565b60003387878786604051602001611c68959493929190613821565b6040516020818303038152906040529050611c838782612318565b610afe868583612343565b610eab8282612436565b600260075403611cea5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161028c565b6002600755565b6060600061170e83612541565b600854611d37576040517f5058901600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d408261259c565b15611d7b5781816040517f331e2c3f00000000000000000000000000000000000000000000000000000000815260040161028c92919061385b565b60008282604051602001611d9092919061385b565b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050611dd284600854836125dd565b611e0c5782826040517f4a0e7b1300000000000000000000000000000000000000000000000000000000815260040161028c92919061385b565b610b67836125f3565b6040516bffffffffffffffffffffffff1930606090811b8216602084015246603484015287901b1660548201526068810185905234608882015260009060a8016040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ea382868686612631565b6001600160a01b031614611ee3576040517f04f186ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085611eef88610d77565b611ef9919061359b565b9050600c54811115611f3a576040517f941b43eb0000000000000000000000000000000000000000000000000000000081526004810182905260240161028c565b6000600b5487611f4a9190613874565b9050803414611f87576040517ffe2b819500000000000000000000000000000000000000000000000000000000815234600482015260240161028c565b6040517f1817cb8e0000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152600090733582f474f6e9fb087651b135d6224500a89e6f4490631817cb8e90604401602060405180830381865af415801561201f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612043919061388b565b905061204f8183613677565b600e60006120656000546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612094919061359b565b90915550506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600e6020526040812080548392906120e190849061359b565b909155506120f29050898984612659565b505050505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080612166906138a4565b949350505050565b60006001600160e01b031982167f629aa6940000000000000000000000000000000000000000000000000000000014806108e157506301ffc9a760e01b6001600160e01b03198316146108e1565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015612243575060208210155b801561224f5750600081115b979650505050505050565b600061170e836001600160a01b0384166126b9565b600061170e836001600160a01b038416612708565b61229e6001600160a01b038416631aed5a8560e21b6121bc565b15610b6957604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906122d1908590859060040161385b565b6000604051808303816000875af11580156122f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6791908101906138c8565b610eab827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea83612284565b61235483631aed5a8560e21b6121bc565b156123a757604051631aed5a8560e21b81526001600160a01b03841690636bb56a14906122d1907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c90859060040161385b565b81610b69576001600160a01b0383163b156123f9576040517fa608fbb60000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161028c565b6040517f26c247f40000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161028c565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f820161248f576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa82016124e8576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d820161159a576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081600001805480602002602001604051908101604052809291908181526020018280548015611a2657602002820191906000526020600020905b81548152602001906001019080831161257d5750505050509050919050565b6000806125ab6101008461394c565b905060006125bb61010085613960565b60009283526009602052604090922054600190921b9182169091149392505050565b6000826125ea85846127fb565b14949350505050565b60006126016101008361394c565b9050600061261161010084613960565b6000928352600960205260409092208054600190931b9092179091555050565b600080600061264287878787612848565b9150915061264f8161290c565b5095945050505050565b60408051838152602081018390526001600160a01b038516917f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff910160405180910390a2610b698383600060405180602001604052806000815250612a71565b6000818152600183016020526040812054612700575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108e1565b5060006108e1565b600081815260018301602052604081205480156127f157600061272c600183613677565b855490915060009061274090600190613677565b90508181146127a5576000866000018281548110612760576127606135df565b9060005260206000200154905080876000018481548110612783576127836135df565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806127b6576127b6613974565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108e1565b60009150506108e1565b600081815b84518110156128405761282c8286838151811061281f5761281f6135df565b6020026020010151612aea565b9150806128388161398a565b915050612800565b509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561287f5750600090506003612903565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156128d3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166128fc57600060019250925050612903565b9150600090505b94509492505050565b6000816004811115612920576129206139a3565b036129285750565b600181600481111561293c5761293c6139a3565b036129895760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161028c565b600281600481111561299d5761299d6139a3565b036129ea5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161028c565b60038160048111156129fe576129fe6139a3565b036114905760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161028c565b7f000000000000000000000000000000000000000000000000000000000000000083612a9c60035490565b612aa6919061359b565b1115612ade576040517feacbf0d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6784848484612b19565b6000818310612b0657600082815260208490526040902061170e565b600083815260208390526040902061170e565b6001600160a01b038416612b4057604051630d2d5ec360e41b815260040160405180910390fd5b612b4d6000858584610b67565b8260036000828254612b5f919061359b565b90915550506001600160a01b03841660009081526004602052604081208054859290612b8c90849061359b565b90915550506040516001600160a01b0385169060009033907f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a690612bd590889088908890613800565b60405180910390a4612bea6000858584610b67565b6000336000868685604051602001612c06959493929190613821565b6040516020818303038152906040529050610e1a858483612343565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215612c6357600080fd5b81356001600160e01b03198116811461170e57600080fd5b80356001600160a01b0381168114612c9257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cd657612cd6612c97565b604052919050565b600067ffffffffffffffff821115612cf857612cf8612c97565b50601f01601f191660200190565b600082601f830112612d1757600080fd5b8135612d2a612d2582612cde565b612cad565b818152846020838601011115612d3f57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215612d7157600080fd5b612d7a84612c7b565b925060208401359150604084013567ffffffffffffffff811115612d9d57600080fd5b612da986828701612d06565b9150509250925092565b600067ffffffffffffffff821115612dcd57612dcd612c97565b5060051b60200190565b600082601f830112612de857600080fd5b81356020612df8612d2583612db3565b82815260059290921b84018101918181019086841115612e1757600080fd5b8286015b84811015612e3957612e2c81612c7b565b8352918301918301612e1b565b509695505050505050565b600082601f830112612e5557600080fd5b81356020612e65612d2583612db3565b82815260059290921b84018101918181019086841115612e8457600080fd5b8286015b84811015612e395780358352918301918301612e88565b80358015158114612c9257600080fd5b600082601f830112612ec057600080fd5b81356020612ed0612d2583612db3565b82815260059290921b84018101918181019086841115612eef57600080fd5b8286015b84811015612e3957612f0481612e9f565b8352918301918301612ef3565b600082601f830112612f2257600080fd5b81356020612f32612d2583612db3565b82815260059290921b84018101918181019086841115612f5157600080fd5b8286015b84811015612e3957803567ffffffffffffffff811115612f755760008081fd5b612f838986838b0101612d06565b845250918301918301612f55565b600080600080600060a08688031215612fa957600080fd5b853567ffffffffffffffff80821115612fc157600080fd5b612fcd89838a01612dd7565b96506020880135915080821115612fe357600080fd5b612fef89838a01612dd7565b9550604088013591508082111561300557600080fd5b61301189838a01612e44565b9450606088013591508082111561302757600080fd5b61303389838a01612eaf565b9350608088013591508082111561304957600080fd5b5061305688828901612f11565b9150509295509295909350565b60008060006060848603121561307857600080fd5b61308184612c7b565b925061308f60208501612e9f565b9150604084013567ffffffffffffffff811115612d9d57600080fd5b6000602082840312156130bd57600080fd5b5035919050565b60005b838110156130df5781810151838201526020016130c7565b50506000910152565b600081518084526131008160208601602086016130c4565b601f01601f19169290920160200192915050565b60208152600061170e60208301846130e8565b6000806040838503121561313a57600080fd5b61314383612c7b565b915061315160208401612c7b565b90509250929050565b60008083601f84011261316c57600080fd5b50813567ffffffffffffffff81111561318457600080fd5b6020830191508360208260051b850101111561319f57600080fd5b9250929050565b600080602083850312156131b957600080fd5b823567ffffffffffffffff8111156131d057600080fd5b6131dc8582860161315a565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561323d57603f1988860301845261322b8583516130e8565b9450928501929085019060010161320f565b5092979650505050505050565b60006020828403121561325c57600080fd5b61170e82612c7b565b600080600080600060a0868803121561327d57600080fd5b61328686612c7b565b945061329460208701612c7b565b9350604086013592506132a960608701612e9f565b9150608086013567ffffffffffffffff8111156132c557600080fd5b61305688828901612d06565b600080604083850312156132e457600080fd5b82359150602083013567ffffffffffffffff81111561330257600080fd5b61330e85828601612d06565b9150509250929050565b6000806000806080858703121561332e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561335d57600080fd5b823567ffffffffffffffff8082111561337557600080fd5b61338186838701612e44565b9350602085013591508082111561339757600080fd5b5061330e85828601612f11565b600080604083850312156133b757600080fd5b6133c083612c7b565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561340f5783516001600160a01b0316835292840192918401916001016133ea565b50909695505050505050565b60006020828403121561342d57600080fd5b813567ffffffffffffffff81111561344457600080fd5b61216684828501612e44565b803560ff81168114612c9257600080fd5b60008060008060008060008060e0898b03121561347d57600080fd5b883567ffffffffffffffff81111561349457600080fd5b6134a08b828c0161315a565b909950975050602089013595506134b960408a01612c7b565b9450606089013593506134ce60808a01613450565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a0868803121561350357600080fd5b61350c86612c7b565b94506020860135935061352160408701613450565b94979396509394606081013594506080013592915050565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b6000825161357b8184602087016130c4565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108e1576108e1613585565b6001600160a01b03841681528260208201526060604082015260006135d660608301846130e8565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038416815260ff831660208201526060604082015260006135d660608301846130e8565b6000808335601e1984360301811261363757600080fd5b83018035915067ffffffffffffffff82111561365257600080fd5b60200191503681900382131561319f57600080fd5b8183823760009101908152919050565b818103818111156108e1576108e1613585565b600181811c9082168061369e57607f821691505b60208210810361134b57634e487b7160e01b600052602260045260246000fd5b601f821115610b6957600081815260208120601f850160051c810160208610156136e55750805b601f850160051c820191505b818110156109f7578281556001016136f1565b815167ffffffffffffffff81111561371e5761371e612c97565b6137328161372c845461368a565b846136be565b602080601f831160018114613767576000841561374f5750858301515b600019600386901b1c1916600185901b1785556109f7565b600085815260208120601f198616915b8281101561379657888601518255948401946001909101908401613777565b50858210156137b45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff1980821692919060148310156137f85780818460140360031b1b83161693505b505050919050565b83815282151560208201526060604082015260006135d660608301846130e8565b60006001600160a01b038088168352808716602084015280861660408401525083606083015260a0608083015261224f60a08301846130e8565b82815260406020820152600061216660408301846130e8565b80820281158282048414176108e1576108e1613585565b60006020828403121561389d57600080fd5b5051919050565b8051602080830151919081101561134b5760001960209190910360031b1b16919050565b6000602082840312156138da57600080fd5b815167ffffffffffffffff8111156138f157600080fd5b8201601f8101841361390257600080fd5b8051613910612d2582612cde565b81815285602083850101111561392557600080fd5b6135d68260208301602086016130c4565b634e487b7160e01b600052601260045260246000fd5b60008261395b5761395b613936565b500490565b60008261396f5761396f613936565b500690565b634e487b7160e01b600052603160045260246000fd5b60006001820161399c5761399c613585565b5060010190565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220f4de278d5348a5b6295b174505e1301e6d26f30880a0d161fe8b0d207a43b15b64736f6c63430008110033 diff --git a/artifacts/bytecode/drops/LSP8DropsDigitalAsset.bin b/artifacts/bytecode/drops/LSP8DropsDigitalAsset.bin index 47f74b2..712fea2 100644 --- a/artifacts/bytecode/drops/LSP8DropsDigitalAsset.bin +++ b/artifacts/bytecode/drops/LSP8DropsDigitalAsset.bin @@ -1 +1 @@ -0x6101006040523480156200001257600080fd5b5060405162004a0138038062004a018339810160408190526200003591620006c4565b838382848a8a8a6000838383806001600160a01b038116620000ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620000c3816200032660201b620015da1760201c565b506200011a7feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b8152506200038d60201b6200164c1760201c565b620001547fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b846200038d60201b6200164c1760201c565b6200018e7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b836200038d60201b6200164c1760201c565b50506040805160208101849052620001e492507f715f248956de7ce65e94d9d836bfead479f7e70d69b718d47bfe7b00e05b4fe49101604051602081830303815290604052620003d560201b620016a11760201c565b50505050806000036200020a5760405163038d9fc360e41b815260040160405180910390fd5b6080526001600955604051633c7bdc1960e01b815263ffffffff82166004820152733582f474f6e9fb087651b135d6224500a89e6f4490633c7bdc1990602401602060405180830381865af415801562000268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028e91906200078e565b620002b5576040516363a0a0e760e01b815263ffffffff82166004820152602401620000a4565b6001600160a01b0383161580620002d357506001600160a01b038216155b15620002f25760405163d92e233d60e01b815260040160405180910390fd5b600f805460ff191690556001600160a01b0392831660c052911660e05263ffffffff1660a052506200097195505050505050565b6000546001600160a01b038281169116146200038a57600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b6000828152600160205260409020620003a7828262000848565b5081600080516020620049e183398151915282604051620003c9919062000914565b60405180910390a25050565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f820162000416576040516385c169bd60e01b815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa82016200045757604051630eceab6760e31b815260040160405180910390fd5b600082815260016020526040902062000471828262000848565b5081600080516020620049e183398151915261010083511115620004b057620004aa836000610100620004c160201b620017bb1760201c565b620004b2565b825b604051620003c9919062000914565b606081620004d181601f62000949565b1015620005125760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401620000a4565b6200051e828462000949565b84511015620005645760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401620000a4565b606082158015620005855760405191506000825260208201604052620005d1565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015620005c0578051835260209283019201620005a6565b5050858452601f01601f1916604052505b50949350505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200060d578181015183820152602001620005f3565b50506000910152565b600082601f8301126200062857600080fd5b81516001600160401b0380821115620006455762000645620005da565b604051601f8301601f19908116603f01168101908282118183101715620006705762000670620005da565b816040528381528660208588010111156200068a57600080fd5b6200069d846020830160208901620005f0565b9695505050505050565b80516001600160a01b0381168114620006bf57600080fd5b919050565b600080600080600080600060e0888a031215620006e057600080fd5b87516001600160401b0380821115620006f857600080fd5b620007068b838c0162000616565b985060208a01519150808211156200071d57600080fd5b506200072c8a828b0162000616565b9650506200073d60408901620006a7565b94506200074d60608901620006a7565b93506200075d60808901620006a7565b925060a0880151915060c088015163ffffffff811681146200077e57600080fd5b8091505092959891949750929550565b600060208284031215620007a157600080fd5b81518015158114620007b257600080fd5b9392505050565b600181811c90821680620007ce57607f821691505b602082108103620007ef57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084357600081815260208120601f850160051c810160208610156200081e5750805b601f850160051c820191505b818110156200083f578281556001016200082a565b5050505b505050565b81516001600160401b03811115620008645762000864620005da565b6200087c81620008758454620007b9565b84620007f5565b602080601f831160018114620008b457600084156200089b5750858301515b600019600386901b1c1916600185901b1785556200083f565b600085815260208120601f198616915b82811015620008e557888601518255948401946001909101908401620008c4565b5085821015620009045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602081526000825180602084015262000935816040850160208701620005f0565b601f01601f19169190910160400192915050565b808201808211156200096b57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e05161401a620009c760003960008181610427015261221301526000818161073b015261244701526000818161047b015261235f0152600081816105230152612f9e015261401a6000f3fe60806040526004361061026e5760003560e01c806378e9792511610153578063a3b261f2116100cb578063dedff9c61161007f578063f2fde38b11610064578063f2fde38b146107d2578063f575191e146107f2578063fc61807114610808576102e2565b8063dedff9c614610792578063edb8d1e2146107bf576102e2565b8063d598d4c9116100b0578063d598d4c914610729578063db8c96631461075d578063dd5ffa1e1461077d576102e2565b8063a3b261f2146106dc578063aad3ec9614610709576102e2565b80638bbd43781161012257806392a91a3a1161010757806392a91a3a14610666578063942cd44b1461069357806397902421146106c9576102e2565b80638bbd4378146106285780638da5cb5b14610648576102e2565b806378e97925146105bf5780637e87632c146105d55780637f23690c146105f557806386a10ddd14610608576102e2565b80633c3e8ae3116101e657806352058d8a116101b55780636817c76c1161019a5780636817c76c1461057457806370a082311461058a578063715018a6146105aa576102e2565b806352058d8a1461051457806354f6127f14610547576102e2565b80633c3e8ae31461046957806349a6078d146104b2578063511b6952146104df57806351b42b00146104ff576102e2565b8063217b22701161023d5780632b47da52116102225780632b47da52146104005780632b7ac3f31461041557806337e3f8dc14610449576102e2565b8063217b2270146103a85780632a3654a4146103e0576102e2565b806301ffc9a7146103235780630f15f4c01461035857806318160ddd1461036f578063186601ca1461038e576102e2565b366102e257346000036102b05760405163e5099ee360e01b81526004016102a79060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f61f4944200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561030d57828260405163e5099ee360e01b81526004016102a7929190613171565b610317838361081b565b80519350602001915050f35b34801561032f57600080fd5b5061034361033e3660046131a0565b61092a565b60405190151581526020015b60405180910390f35b34801561036457600080fd5b5061036d610977565b005b34801561037b57600080fd5b506002545b60405190815260200161034f565b34801561039a57600080fd5b50600f546103439060ff1681565b3480156103b457600080fd5b506103c86103c33660046131ca565b610989565b6040516001600160a01b03909116815260200161034f565b3480156103ec57600080fd5b506103436103fb3660046131ff565b6109c2565b34801561040c57600080fd5b506103806109de565b34801561042157600080fd5b506103c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561045557600080fd5b5061036d610464366004613229565b6109ee565b34801561047557600080fd5b5061049d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161034f565b3480156104be57600080fd5b506104d26104cd3660046131ca565b610a41565b60405161034f919061329b565b3480156104eb57600080fd5b5061036d6104fa3660046133bd565b610a63565b34801561050b57600080fd5b5061036d610ac0565b34801561052057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610380565b34801561055357600080fd5b506105676105623660046131ca565b610b08565b60405161034f9190613486565b34801561058057600080fd5b50610380600d5481565b34801561059657600080fd5b506103806105a5366004613499565b610b13565b3480156105b657600080fd5b5061036d610b1e565b3480156105cb57600080fd5b50610380600c5481565b3480156105e157600080fd5b5061036d6105f0366004613682565b610b30565b61036d610603366004613747565b610c38565b34801561061457600080fd5b5061036d61062336600461378e565b610c6d565b34801561063457600080fd5b5061036d6106433660046137e5565b610e2a565b34801561065457600080fd5b506000546001600160a01b03166103c8565b34801561067257600080fd5b506103806106813660046131ca565b60009081526007602052604090205490565b34801561069f57600080fd5b506103806106ae366004613499565b6001600160a01b031660009081526010602052604090205490565b61036d6106d7366004613817565b610f0f565b3480156106e857600080fd5b506106fc6106f7366004613499565b611001565b60405161034f91906138ac565b34801561071557600080fd5b5061036d6107243660046131ff565b611025565b34801561073557600080fd5b506103c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561076957600080fd5b5061036d6107783660046138bf565b611201565b34801561078957600080fd5b506105676112d5565b34801561079e57600080fd5b506107b26107ad366004613927565b611363565b60405161034f919061395c565b61036d6107cd3660046139cf565b61140e565b3480156107de57600080fd5b5061036d6107ed366004613499565b6114c0565b3480156107fe57600080fd5b50610380600e5481565b61036d610816366004613a88565b611550565b606060006108346000356001600160e01b0319166118e3565b5090506001600160a01b038116610885576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016102a7565b600080826001600160a01b031634878733346040516020016108aa9493929190613ad6565b60408051601f19818403018152908290526108c491613b06565b60006040518083038185875af1925050503d8060008114610901576040519150601f19603f3d011682016040523d82523d6000602084013e610906565b606091505b5091509150811561091b579250610924915050565b80518060208301fd5b92915050565b60006001600160e01b031982167f30dc527800000000000000000000000000000000000000000000000000000000148061096857506109688261198d565b806109245750610924826119cb565b61097f611a02565b610987611a6b565b565b6000818152600360205260408120546001600160a01b03168061092457604051635747cd1b60e11b8152600481018490526024016102a7565b60006109cd82611aad565b6109d78383611ae5565b9392505050565b60006109e9600a5490565b905090565b6109f6611a02565b6011610a03828483613b9c565b507ff85f74f3190acca77203c20a6d4934fd0908afeec893df8bc8c9ca6edfbf9be88282604051610a35929190613171565b60405180910390a15050565b6060610a4c82611aad565b600082815260056020526040902061092490611b22565b610a6d3384611ae5565b610aac576040517f1294d2a9000000000000000000000000000000000000000000000000000000008152600481018490523360248201526044016102a7565b610ab98585858585611b2f565b5050505050565b610ac8611a02565b600f5460ff161561098757600f805460ff191690556040517f1142a68cc39970640eb3524e77b91f78be21abc64f20f5919387eb46699bb77290600090a1565b606061092482611d46565b600061092482611e5d565b610b26611a02565b61098760006115da565b8451845181141580610b43575083518114155b80610b4f575082518114155b80610b5b575081518114155b15610b92576040517f93a8311900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610c2f57610c27878281518110610bb257610bb2613c5c565b6020026020010151878381518110610bcc57610bcc613c5c565b6020026020010151878481518110610be657610be6613c5c565b6020026020010151878581518110610c0057610c00613c5c565b6020026020010151878681518110610c1a57610c1a613c5c565b6020026020010151610a63565b600101610b95565b50505050505050565b610c40611a02565b3415610c5f5760405163f36ba73760e01b815260040160405180910390fd5b610c698282611e7e565b5050565b6000610c7883610989565b90506001600160a01b0381163314610cbb57604051632d938f5160e11b81526001600160a01b0382166004820152602481018490523360448201526064016102a7565b6001600160a01b038416610ce257604051639577b8b360e01b815260040160405180910390fd5b836001600160a01b0316816001600160a01b031603610d14576040516344fed6b160e11b815260040160405180910390fd5b6000838152600560205260408120610d2c9086611ee1565b905080610d77576040517fa7626b680000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481018590526044016102a7565b83826001600160a01b0316866001600160a01b03167e52e433f2d4225671bc164dd1cdc9a76044356091f27ad234798bd0cbf0834986604051610dba9190613486565b60405180910390a460003385600186604051602001610ddc9493929190613c72565b60408051601f198184030181529190529050610e226001600160a01b0387167f8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f0097083611ef6565b505050505050565b610e32611a02565b42841015610e6f576040517f76429b57000000000000000000000000000000000000000000000000000000008152600481018590526024016102a7565b81600003610ea9576040517f39af805800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c849055600d839055600e829055610ec181600a55565b6040805185815260208101859052908101839052606081018290527f8aeedf0ed8cd3693ef01d328f512281c622ee40528326aa6fba505184ab13a439060800160405180910390a150505050565b610f17611a02565b3415610f365760405163f36ba73760e01b815260040160405180910390fd5b8051825114610f71576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600003610fac576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610ffc57610ff4838281518110610fcd57610fcd613c5c565b6020026020010151838381518110610fe757610fe7613c5c565b6020026020010151611e7e565b600101610faf565b505050565b6001600160a01b038116600090815260046020526040902060609061092490611b22565b61102d611f90565b6001600160a01b03821661106d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036110a7576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260106020526040902054818110156110f4576040517fffb97f81000000000000000000000000000000000000000000000000000000008152600481018390526024016102a7565b3360009081526010602052604081208054849290611113908490613cc2565b90915550506040516000906001600160a01b0385169084908381818185875af1925050503d8060008114611163576040519150601f19603f3d011682016040523d82523d6000602084013e611168565b606091505b50509050806111b5576040517fa00139f80000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602481018490526044016102a7565b6040518381526001600160a01b0385169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a35050610c696001600955565b600061120c84610989565b90506001600160a01b038116331461124f57604051632d938f5160e11b81526001600160a01b0382166004820152602481018590523360448201526064016102a7565b6001600160a01b03851661127657604051639577b8b360e01b815260040160405180910390fd5b846001600160a01b0316816001600160a01b0316036112a8576040516344fed6b160e11b815260040160405180910390fd5b6112b58582868686611fe9565b8215610ab95760003385600085604051602001610ddc9493929190613c72565b601180546112e290613b22565b80601f016020809104026020016040519081016040528092919081815260200182805461130e90613b22565b801561135b5780601f106113305761010080835404028352916020019161135b565b820191906000526020600020905b81548152906001019060200180831161133e57829003601f168201915b505050505081565b6060815167ffffffffffffffff81111561137f5761137f6132f8565b6040519080825280602002602001820160405280156113b257816020015b606081526020019060019003908161139d5790505b50905060005b8251811015611408576113e38382815181106113d6576113d6613c5c565b6020026020010151611d46565b8282815181106113f5576113f5613c5c565b60209081029190910101526001016113b8565b50919050565b600f5460ff1615806114215750600c5442105b1561143f57604051632e8acb0d60e01b815260040160405180910390fd5b611447611f90565b61149f88888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080513360208201528b93500190506040516020818303038152906040526120a2565b6114ac85858585856121b9565b6114b66001600955565b5050505050505050565b6114c8611a02565b6001600160a01b0381166115445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102a7565b61154d816115da565b50565b600f5460ff1615806115635750600c5442105b1561158157604051632e8acb0d60e01b815260040160405180910390fd5b611589611f90565b600a54156115c3576040517f1df4698600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115d085858585856121b9565b610ab96001600955565b6000546001600160a01b0382811691161461154d57600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008281526001602052604090206116648282613cd5565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516116959190613486565b60405180910390a25050565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f82016116fa576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201611753576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260016020526040902061176b8282613cd5565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2610100835111156117ac576117a78360006101006117bb565b6117ae565b825b6040516116959190613486565b6060816117c981601f613d95565b10156118175760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016102a7565b6118218284613d95565b845110156118715760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016102a7565b60608215801561189057604051915060008252602082016040526118da565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156118c95780518352602092830192016118b1565b5050858452601f01601f1916604052505b50949350505050565b6000808061191b7fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b031986166124a1565b9050600061192882612512565b9050805160141415801561193c5750805115155b1561197557806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016102a79190613486565b61197e81613da8565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806109245750610924826125b4565b6000806119de6301ffc9a760e01b6118e3565b5090506001600160a01b0381166119f85750600092915050565b6109d78184612602565b33611a156000546001600160a01b031690565b6001600160a01b0316146109875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102a7565b600f5460ff1661098757600f805460ff191660011790556040517fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b090600090a1565b6000818152600360205260409020546001600160a01b031661154d57604051635747cd1b60e11b8152600481018290526024016102a7565b6000611af082610989565b6001600160a01b0316836001600160a01b031614806109d7575060008281526005602052604090206109d790846126a0565b606060006109d7836126c2565b836001600160a01b0316856001600160a01b031603611b7a576040517f5d67d6c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611b8584610989565b9050856001600160a01b0316816001600160a01b031614611bd357604051632d938f5160e11b81526001600160a01b03808316600483015260248201869052871660448201526064016102a7565b6001600160a01b038516611bfa576040516324ecef4d60e01b815260040160405180910390fd5b611c068686868561271d565b611c0f84610989565b9050611c1b8685612729565b6001600160a01b0386166000908152600460205260409020611c3d9085612781565b506001600160a01b0385166000908152600460205260409020611c60908561278d565b5060008481526003602052604090819020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388811691821790925591518692918916907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf90611cd490339089908990613de4565b60405180910390a4600086868685604051602001611cf59493929190613e17565b60408051601f198184030181529190529050611d3b6001600160a01b0388167fb23eae7e6d1564b295b4c3e3be402d9a2f0776c57bdf365903496f6fa481ab0083611ef6565b610c2f868583612799565b60606000611d5383612512565b905080516000148015611d8757507f1339e76a390b7b9ec90100000000000000000000000000000000000000000000838116145b15610924576000611db77f1a7628600c3bac7101f53697f48df381ddc36b9015e7d7c9c5633d1252aa2843612512565b90508051600003611e565760118054611dcf90613b22565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfb90613b22565b8015611e485780601f10611e1d57610100808354040283529160200191611e48565b820191906000526020600020905b815481529060010190602001808311611e2b57829003601f168201915b505050505092505050919050565b5092915050565b6001600160a01b038116600090815260046020526040812061092490612895565b7f8ea0db76a9218319a16b2627c940152b860818f29648e72b840184ff1fa4b01c8201611ed7576040517f53bc112200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6982826116a1565b60006109d7836001600160a01b03841661289f565b611f106001600160a01b038416631aed5a8560e21b612602565b15610ffc57604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611f439085908590600401613e49565b6000604051808303816000875af1158015611f62573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f8a9190810190613e62565b50505050565b600260095403611fe25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102a7565b6002600955565b600083815260056020526040812061200190876128ee565b90508061204c576040517f4aa31a8c0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602481018590526044016102a7565b83856001600160a01b0316876001600160a01b03167f3ee932cea40ebbbfd8577d47156cc17cce8683802c57bbd1fb8c131c6f07af0a8686604051612092929190613ed0565b60405180910390a4505050505050565b600a546120db576040517f5058901600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e482612903565b1561211f5781816040517f331e2c3f0000000000000000000000000000000000000000000000000000000081526004016102a7929190613e49565b60008282604051602001612134929190613e49565b60408051601f198184030181528282528051602091820120908301520160405160208183030381529060405280519060200120905061217684600a5483612944565b6121b05782826040517f4a0e7b130000000000000000000000000000000000000000000000000000000081526004016102a7929190613e49565b611f8a8361295a565b6040516bffffffffffffffffffffffff1930606090811b8216602084015246603484015287901b1660548201526068810185905234608882015260009060a8016040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661224782868686612998565b6001600160a01b031614612287576040517f04f186ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008561229388610b13565b61229d9190613d95565b9050600e548111156122de576040517f941b43eb000000000000000000000000000000000000000000000000000000008152600481018290526024016102a7565b6000600d54876122ee9190613eeb565b905080341461232b576040517ffe2b81950000000000000000000000000000000000000000000000000000000081523460048201526024016102a7565b6040517f1817cb8e0000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152600090733582f474f6e9fb087651b135d6224500a89e6f4490631817cb8e90604401602060405180830381865af41580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e79190613f02565b90506123f38183613cc2565b601060006124096000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546124389190613d95565b90915550506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526010602052604081208054839290612485908490613d95565b9091555061249690508989846129c0565b505050505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c8301529182910160405160208183030381529060405290508061250a90613f1b565b949350505050565b600081815260016020526040902080546060919061252f90613b22565b80601f016020809104026020016040519081016040528092919081815260200182805461255b90613b22565b80156125a85780601f1061257d576101008083540402835291602001916125a8565b820191906000526020600020905b81548152906001019060200180831161258b57829003601f168201915b50505050509050919050565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061092457506301ffc9a760e01b6001600160e01b0319831614610924565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015612689575060208210155b80156126955750600081115b979650505050505050565b6001600160a01b038116600090815260018301602052604081205415156109d7565b6060816000018054806020026020016040519081016040528092919081815260200182805480156125a857602002820191906000526020600020905b8154815260200190600101908083116126fe5750505050509050919050565b611f8a84848484612afb565b60008181526005602052604081209061274182612895565b90506000805b82811015610e225761275a846000612bc2565b9150612779828787600060405180602001604052806000815250611fe9565b600101612747565b60006109d78383612bce565b60006109d7838361289f565b6127b36001600160a01b038416631aed5a8560e21b612602565b1561280657604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611f43907f0b084a55ebf70fd3c06fd755269dac2212c4d3f0f4d09079780bfa50c1b2984d908590600401613e49565b81610ffc576001600160a01b0383163b15612858576040517f4349776d0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016102a7565b6040517f031731370000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016102a7565b6000610924825490565b60008181526001830160205260408120546128e657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610924565b506000610924565b60006109d7836001600160a01b038416612bce565b60008061291261010084613f55565b9050600061292261010085613f69565b6000928352600b602052604090922054600190921b9182169091149392505050565b6000826129518584612cc1565b14949350505050565b600061296861010083613f55565b9050600061297861010084613f69565b6000928352600b60205260409092208054600190931b9092179091555050565b60008060006129a987878787612d0e565b915091506129b681612dd2565b5095945050505050565b60008267ffffffffffffffff8111156129db576129db6132f8565b604051908082528060200260200182016040528015612a04578160200160208202803683370190505b50905060006012546001612a189190613d95565b90508360126000828254612a2c9190613d95565b90915550600090505b84811015612a6f57612a478183613d95565b60001b838281518110612a5c57612a5c613c5c565b6020908102919091010152600101612a35565b50846001600160a01b03167f3c48674dd1f5f1f6cbbeaa3b830f54a7b75f5c1598e1ea94b968ea1424f7bff38385604051612aab929190613f7d565b60405180910390a260005b84811015610e2257612af386848381518110612ad457612ad4613c5c565b6020026020010151600060405180602001604052806000815250612f37565b600101612ab6565b6001600160a01b038416612b35576000612b1460025490565b60008181526007602090815260408083208790558683526008909152902055505b6001600160a01b038316612bbd5760006001612b5060025490565b612b5a9190613cc2565b60008481526008602052604090205490915081811015612b9c576000828152600760209081526040808320548484528184208190558352600890915290208190555b50600090815260076020908152604080832083905584835260089091528120555b611f8a565b60006109d78383612f43565b60008181526001830160205260408120548015612cb7576000612bf2600183613cc2565b8554909150600090612c0690600190613cc2565b9050818114612c6b576000866000018281548110612c2657612c26613c5c565b9060005260206000200154905080876000018481548110612c4957612c49613c5c565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612c7c57612c7c613f9f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610924565b6000915050610924565b600081815b8451811015612d0657612cf282868381518110612ce557612ce5613c5c565b6020026020010151612f6d565b915080612cfe81613fb5565b915050612cc6565b509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612d455750600090506003612dc9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612d99573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612dc257600060019250925050612dc9565b9150600090505b94509492505050565b6000816004811115612de657612de6613fce565b03612dee5750565b6001816004811115612e0257612e02613fce565b03612e4f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016102a7565b6002816004811115612e6357612e63613fce565b03612eb05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016102a7565b6003816004811115612ec457612ec4613fce565b0361154d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016102a7565b611f8a84848484612f9c565b6000826000018281548110612f5a57612f5a613c5c565b9060005260206000200154905092915050565b6000818310612f895760008281526020849052604090206109d7565b60008381526020839052604090206109d7565b7f0000000000000000000000000000000000000000000000000000000000000000600254612fcb906001613d95565b1115613003576040517fe8ba229100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f8a848484846001600160a01b038416613031576040516324ecef4d60e01b815260040160405180910390fd5b61303e600085858461271d565b6000838152600360205260409020546001600160a01b031615613090576040517f34c7b511000000000000000000000000000000000000000000000000000000008152600481018490526024016102a7565b60026000815461309f90613fb5565b909155506001600160a01b03841660009081526004602052604090206130c5908461278d565b50600083815260036020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881690811790915590518592907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf9061313490339088908890613de4565b60405180910390a46000808585846040516020016131559493929190613e17565b6040516020818303038152906040529050610ab9858483612799565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156131b257600080fd5b81356001600160e01b0319811681146109d757600080fd5b6000602082840312156131dc57600080fd5b5035919050565b80356001600160a01b03811681146131fa57600080fd5b919050565b6000806040838503121561321257600080fd5b61321b836131e3565b946020939093013593505050565b6000806020838503121561323c57600080fd5b823567ffffffffffffffff8082111561325457600080fd5b818501915085601f83011261326857600080fd5b81358181111561327757600080fd5b86602082850101111561328957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156132dc5783516001600160a01b0316835292840192918401916001016132b7565b50909695505050505050565b803580151581146131fa57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613337576133376132f8565b604052919050565b600067ffffffffffffffff821115613359576133596132f8565b50601f01601f191660200190565b600082601f83011261337857600080fd5b813561338b6133868261333f565b61330e565b8181528460208386010111156133a057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156133d557600080fd5b6133de866131e3565b94506133ec602087016131e3565b935060408601359250613401606087016132e8565b9150608086013567ffffffffffffffff81111561341d57600080fd5b61342988828901613367565b9150509295509295909350565b60005b83811015613451578181015183820152602001613439565b50506000910152565b60008151808452613472816020860160208601613436565b601f01601f19169290920160200192915050565b6020815260006109d7602083018461345a565b6000602082840312156134ab57600080fd5b6109d7826131e3565b600067ffffffffffffffff8211156134ce576134ce6132f8565b5060051b60200190565b600082601f8301126134e957600080fd5b813560206134f9613386836134b4565b82815260059290921b8401810191818101908684111561351857600080fd5b8286015b8481101561353a5761352d816131e3565b835291830191830161351c565b509695505050505050565b600082601f83011261355657600080fd5b81356020613566613386836134b4565b82815260059290921b8401810191818101908684111561358557600080fd5b8286015b8481101561353a5780358352918301918301613589565b600082601f8301126135b157600080fd5b813560206135c1613386836134b4565b82815260059290921b840181019181810190868411156135e057600080fd5b8286015b8481101561353a576135f5816132e8565b83529183019183016135e4565b600082601f83011261361357600080fd5b81356020613623613386836134b4565b82815260059290921b8401810191818101908684111561364257600080fd5b8286015b8481101561353a57803567ffffffffffffffff8111156136665760008081fd5b6136748986838b0101613367565b845250918301918301613646565b600080600080600060a0868803121561369a57600080fd5b853567ffffffffffffffff808211156136b257600080fd5b6136be89838a016134d8565b965060208801359150808211156136d457600080fd5b6136e089838a016134d8565b955060408801359150808211156136f657600080fd5b61370289838a01613545565b9450606088013591508082111561371857600080fd5b61372489838a016135a0565b9350608088013591508082111561373a57600080fd5b5061342988828901613602565b6000806040838503121561375a57600080fd5b82359150602083013567ffffffffffffffff81111561377857600080fd5b61378485828601613367565b9150509250929050565b6000806000606084860312156137a357600080fd5b6137ac846131e3565b925060208401359150604084013567ffffffffffffffff8111156137cf57600080fd5b6137db86828701613367565b9150509250925092565b600080600080608085870312156137fb57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561382a57600080fd5b823567ffffffffffffffff8082111561384257600080fd5b61384e86838701613545565b9350602085013591508082111561386457600080fd5b5061378485828601613602565b600081518084526020808501945080840160005b838110156138a157815187529582019590820190600101613885565b509495945050505050565b6020815260006109d76020830184613871565b600080600080608085870312156138d557600080fd5b6138de856131e3565b9350602085013592506138f3604086016132e8565b9150606085013567ffffffffffffffff81111561390f57600080fd5b61391b87828801613367565b91505092959194509250565b60006020828403121561393957600080fd5b813567ffffffffffffffff81111561395057600080fd5b61250a84828501613545565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156139b157603f1988860301845261399f85835161345a565b94509285019290850190600101613983565b5092979650505050505050565b803560ff811681146131fa57600080fd5b60008060008060008060008060e0898b0312156139eb57600080fd5b883567ffffffffffffffff80821115613a0357600080fd5b818b0191508b601f830112613a1757600080fd5b813581811115613a2657600080fd5b8c60208260051b8501011115613a3b57600080fd5b60209283019a509850508901359550613a5660408a016131e3565b945060608901359350613a6b60808a016139be565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a08688031215613aa057600080fd5b613aa9866131e3565b945060208601359350613abe604087016139be565b94979396509394606081013594506080013592915050565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b60008251613b18818460208701613436565b9190910192915050565b600181811c90821680613b3657607f821691505b60208210810361140857634e487b7160e01b600052602260045260246000fd5b601f821115610ffc57600081815260208120601f850160051c81016020861015613b7d5750805b601f850160051c820191505b81811015610e2257828155600101613b89565b67ffffffffffffffff831115613bb457613bb46132f8565b613bc883613bc28354613b22565b83613b56565b6000601f841160018114613bfc5760008515613be45750838201355b600019600387901b1c1916600186901b178355610ab9565b600083815260209020601f19861690835b82811015613c2d5786850135825560209485019460019092019101613c0d565b5086821015613c4a5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03851681528360208201528215156040820152608060608201526000613ca2608083018461345a565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561092457610924613cac565b815167ffffffffffffffff811115613cef57613cef6132f8565b613d0381613cfd8454613b22565b84613b56565b602080601f831160018114613d385760008415613d205750858301515b600019600386901b1c1916600185901b178555610e22565b600085815260208120601f198616915b82811015613d6757888601518255948401946001909101908401613d48565b5085821015613d855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561092457610924613cac565b805160208201516bffffffffffffffffffffffff198082169291906014831015613ddc5780818460140360031b1b83161693505b505050919050565b6001600160a01b03841681528215156020820152606060408201526000613e0e606083018461345a565b95945050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613ca2608083018461345a565b82815260406020820152600061250a604083018461345a565b600060208284031215613e7457600080fd5b815167ffffffffffffffff811115613e8b57600080fd5b8201601f81018413613e9c57600080fd5b8051613eaa6133868261333f565b818152856020838501011115613ebf57600080fd5b613e0e826020830160208601613436565b821515815260406020820152600061250a604083018461345a565b808202811582820484141761092457610924613cac565b600060208284031215613f1457600080fd5b5051919050565b805160208083015191908110156114085760001960209190910360031b1b16919050565b634e487b7160e01b600052601260045260246000fd5b600082613f6457613f64613f3f565b500490565b600082613f7857613f78613f3f565b500690565b604081526000613f906040830185613871565b90508260208301529392505050565b634e487b7160e01b600052603160045260246000fd5b600060018201613fc757613fc7613cac565b5060010190565b634e487b7160e01b600052602160045260246000fdfea264697066735822122022fbce5d31fc4ace546c2fe6f81e9ba562d1be72aef3e5f8a1c5d9e6fd9f199364736f6c63430008110033ece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2 +0x6101006040523480156200001257600080fd5b5060405162004f4538038062004f45833981016040819052620000359162000606565b838382848a8a8a6001600084848484816001600160a01b038116620000b05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620000c6816200037e60201b620019e21760201c565b506200011d7feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b604051806040016040528060048152602001632936598960e21b815250620003e560201b62001a541760201c565b620001577fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af160001b85620003e560201b62001a541760201c565b620001917f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275660001b84620003e560201b62001a541760201c565b6040805160208101839052620001e4917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb39101604051602081830303815290604052620003e560201b62001a541760201c565b505060408051602081018590526200023b93507f341bc44e55234544c70af9d37b2cb8cc7ba74685b58526221de2cc977f4699249250016040516020818303038152906040526200043e60201b62001aa91760201c565b505050505080600003620002625760405163038d9fc360e41b815260040160405180910390fd5b6080526001600955604051633c7bdc1960e01b815263ffffffff82166004820152733582f474f6e9fb087651b135d6224500a89e6f4490633c7bdc1990602401602060405180830381865af4158015620002c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e69190620006d0565b6200030d576040516363a0a0e760e01b815263ffffffff82166004820152602401620000a7565b6001600160a01b03831615806200032b57506001600160a01b038216155b156200034a5760405163d92e233d60e01b815260040160405180910390fd5b600f805460ff191690556001600160a01b0392831660c052911660e05263ffffffff1660a052506200088b95505050505050565b6000546001600160a01b03828116911614620003e257600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a3505b50565b6000828152600160205260409020620003ff82826200078a565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b28260405162000432919062000856565b60405180910390a25050565b6200045582826200045960201b62001aaf1760201c565b5050565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f82016200049a576040516385c169bd60e01b815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201620004db57604051630eceab6760e31b815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201620003e557604051634ef6d7fb60e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b838110156200054f57818101518382015260200162000535565b50506000910152565b600082601f8301126200056a57600080fd5b81516001600160401b03808211156200058757620005876200051c565b604051601f8301601f19908116603f01168101908282118183101715620005b257620005b26200051c565b81604052838152866020858801011115620005cc57600080fd5b620005df84602083016020890162000532565b9695505050505050565b80516001600160a01b03811681146200060157600080fd5b919050565b600080600080600080600060e0888a0312156200062257600080fd5b87516001600160401b03808211156200063a57600080fd5b620006488b838c0162000558565b985060208a01519150808211156200065f57600080fd5b506200066e8a828b0162000558565b9650506200067f60408901620005e9565b94506200068f60608901620005e9565b93506200069f60808901620005e9565b925060a0880151915060c088015163ffffffff81168114620006c057600080fd5b8091505092959891949750929550565b600060208284031215620006e357600080fd5b81518015158114620006f457600080fd5b9392505050565b600181811c908216806200071057607f821691505b6020821081036200073157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200078557600081815260208120601f850160051c81016020861015620007605750805b601f850160051c820191505b8181101562000781578281556001016200076c565b5050505b505050565b81516001600160401b03811115620007a657620007a66200051c565b620007be81620007b78454620006fb565b8462000737565b602080601f831160018114620007f65760008415620007dd5750858301515b600019600386901b1c1916600185901b17855562000781565b600085815260208120601f198616915b82811015620008275788860151825594840194600190910190840162000806565b5085821015620008465787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200087781604085016020870162000532565b601f01601f19169190910160400192915050565b60805160a05160c05160e051614664620008e16000396000818161048e01526125b201526000818161082f01526127e601526000818161050201526126fe0152600081816105aa01526133f301526146646000f3fe6080604052600436106102d55760003560e01c80637e87632c11610179578063ae0646d7116100d6578063dedff9c61161008a578063f2fde38b11610064578063f2fde38b146108d9578063f575191e146108f9578063fc6180711461090f57610349565b8063dedff9c614610886578063e7bb5942146108a6578063edb8d1e2146108c657610349565b8063d598d4c9116100bb578063d598d4c91461081d578063db8c966314610851578063dd5ffa1e1461087157610349565b8063ae0646d7146107dd578063c797c777146107fd57610349565b806392a91a3a1161012d5780639790242111610112578063979024211461077d578063a3b261f214610790578063aad3ec96146107bd57610349565b806392a91a3a1461071a578063942cd44b1461074757610349565b806386a10ddd1161015e57806386a10ddd146106bc5780638bbd4378146106dc5780638da5cb5b146106fc57610349565b80637e87632c146106895780637f23690c146106a957610349565b80633c3e8ae31161023257806354f6127f116101e657806370a08231116101c057806370a082311461063e578063715018a61461065e57806378e979251461067357610349565b806354f6127f146105ce5780636817c76c146105fb5780636963d4381461061157610349565b8063511b695211610217578063511b69521461056657806351b42b001461058657806352058d8a1461059b57610349565b80633c3e8ae3146104f057806349a6078d1461053957610349565b80632a3654a4116102895780632b7ac3f31161026e5780632b7ac3f31461047c57806337e3f8dc146104b05780633b38c1d7146104d057610349565b80632a3654a4146104475780632b47da521461046757610349565b806318160ddd116102ba57806318160ddd146103d6578063186601ca146103f5578063217b22701461040f57610349565b806301ffc9a71461038a5780630f15f4c0146103bf57610349565b3661034957346000036103175760405163e5099ee360e01b815260040161030e9060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f61f4944200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561037457828260405163e5099ee360e01b815260040161030e9291906135c9565b61037e8383610922565b80519350602001915050f35b34801561039657600080fd5b506103aa6103a53660046135f8565b610a31565b60405190151581526020015b60405180910390f35b3480156103cb57600080fd5b506103d4610a7e565b005b3480156103e257600080fd5b506002545b6040519081526020016103b6565b34801561040157600080fd5b50600f546103aa9060ff1681565b34801561041b57600080fd5b5061042f61042a366004613622565b610a90565b6040516001600160a01b0390911681526020016103b6565b34801561045357600080fd5b506103aa610462366004613657565b610ac9565b34801561047357600080fd5b506103e7610ae5565b34801561048857600080fd5b5061042f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bc57600080fd5b506103d46104cb366004613681565b610af5565b3480156104dc57600080fd5b506103d46104eb3660046137b8565b610b48565b3480156104fc57600080fd5b506105247f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103b6565b34801561054557600080fd5b50610559610554366004613622565b610b60565b6040516103b69190613808565b34801561057257600080fd5b506103d4610581366004613865565b610b82565b34801561059257600080fd5b506103d4610bdf565b3480156105a757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e7565b3480156105da57600080fd5b506105ee6105e9366004613622565b610c27565b6040516103b6919061392e565b34801561060757600080fd5b506103e7600d5481565b34801561061d57600080fd5b5061063161062c36600461398d565b610c32565b6040516103b691906139cf565b34801561064a57600080fd5b506103e7610659366004613a31565b610d82565b34801561066a57600080fd5b506103d4610d8d565b34801561067f57600080fd5b506103e7600c5481565b34801561069557600080fd5b506103d46106a4366004613c1a565b610d9f565b6103d46106b7366004613cdf565b610ea7565b3480156106c857600080fd5b506103d46106d7366004613d26565b610edc565b3480156106e857600080fd5b506103d46106f7366004613d67565b61106f565b34801561070857600080fd5b506000546001600160a01b031661042f565b34801561072657600080fd5b506103e7610735366004613622565b60009081526007602052604090205490565b34801561075357600080fd5b506103e7610762366004613a31565b6001600160a01b031660009081526010602052604090205490565b6103d461078b366004613d99565b611154565b34801561079c57600080fd5b506107b06107ab366004613a31565b611241565b6040516103b69190613e2e565b3480156107c957600080fd5b506103d46107d8366004613657565b611265565b3480156107e957600080fd5b506103d46107f8366004613e41565b611441565b34801561080957600080fd5b50610631610818366004613ebf565b61153e565b34801561082957600080fd5b5061042f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561085d57600080fd5b506103d461086c366004613f19565b6115fd565b34801561087d57600080fd5b506105ee6116d1565b34801561089257600080fd5b506106316108a1366004613f81565b61175f565b3480156108b257600080fd5b506105ee6108c1366004613fb6565b61180a565b6103d46108d4366004613fe9565b611816565b3480156108e557600080fd5b506103d46108f4366004613a31565b6118c8565b34801561090557600080fd5b506103e7600e5481565b6103d461091d366004614073565b611958565b6060600061093b6000356001600160e01b031916611bba565b5090506001600160a01b03811661098c576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b031960003516600482015260240161030e565b600080826001600160a01b031634878733346040516020016109b194939291906140c1565b60408051601f19818403018152908290526109cb916140f1565b60006040518083038185875af1925050503d8060008114610a08576040519150601f19603f3d011682016040523d82523d6000602084013e610a0d565b606091505b50915091508115610a22579250610a2b915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fecad9f75000000000000000000000000000000000000000000000000000000001480610a6f5750610a6f82611c64565b80610a2b5750610a2b82611ca2565b610a86611cd9565b610a8e611d42565b565b6000818152600360205260408120546001600160a01b031680610a2b57604051635747cd1b60e11b81526004810184905260240161030e565b6000610ad482611d84565b610ade8383611dbc565b9392505050565b6000610af0600a5490565b905090565b610afd611cd9565b6011610b0a828483614187565b507ff85f74f3190acca77203c20a6d4934fd0908afeec893df8bc8c9ca6edfbf9be88282604051610b3c9291906135c9565b60405180910390a15050565b610b50611cd9565b610b5b838383611df9565b505050565b6060610b6b82611d84565b6000828152600560205260409020610a2b90611e89565b610b8c3384611dbc565b610bcb576040517f1294d2a90000000000000000000000000000000000000000000000000000000081526004810184905233602482015260440161030e565b610bd88585858585611e96565b5050505050565b610be7611cd9565b600f5460ff1615610a8e57600f805460ff191690556040517f1142a68cc39970640eb3524e77b91f78be21abc64f20f5919387eb46699bb77290600090a1565b6060610a2b82612084565b60608167ffffffffffffffff811115610c4d57610c4d6136f3565b604051908082528060200260200182016040528015610c8057816020015b6060815260200190600190039081610c6b5790505b50905060005b82811015610d7b5760008030868685818110610ca457610ca4614247565b9050602002810190610cb6919061425d565b604051610cc49291906142a4565b600060405180830381855af49150503d8060008114610cff576040519150601f19603f3d011682016040523d82523d6000602084013e610d04565b606091505b509150915081610d5357805115610d1e5780518082602001fd5b6040517f234eb8190000000000000000000000000000000000000000000000000000000081526004810184905260240161030e565b80848481518110610d6657610d66614247565b60209081029190910101525050600101610c86565b5092915050565b6000610a2b82612194565b610d95611cd9565b610a8e60006119e2565b8451845181141580610db2575083518114155b80610dbe575082518114155b80610dca575081518114155b15610e01576040517f93a8311900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610e9e57610e96878281518110610e2157610e21614247565b6020026020010151878381518110610e3b57610e3b614247565b6020026020010151878481518110610e5557610e55614247565b6020026020010151878581518110610e6f57610e6f614247565b6020026020010151878681518110610e8957610e89614247565b6020026020010151610b82565b600101610e04565b50505050505050565b610eaf611cd9565b3415610ece5760405163f36ba73760e01b815260040160405180910390fd5b610ed882826121b5565b5050565b6000610ee783610a90565b90506001600160a01b0381163314610f2a57604051632d938f5160e11b81526001600160a01b03821660048201526024810184905233604482015260640161030e565b6001600160a01b038416610f5157604051639577b8b360e01b815260040160405180910390fd5b836001600160a01b0316816001600160a01b031603610f83576040516344fed6b160e11b815260040160405180910390fd5b6000838152600560205260408120610f9b9086612218565b905080610fe6576040517fa7626b680000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260440161030e565b83826001600160a01b0316866001600160a01b03167f1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc2366712158660405161102a919061392e565b60405180910390a46000338560018660405160200161104c94939291906142b4565b6040516020818303038152906040529050611067868261222d565b505050505050565b611077611cd9565b428410156110b4576040517f76429b570000000000000000000000000000000000000000000000000000000081526004810185905260240161030e565b816000036110ee576040517f39af805800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c849055600d839055600e82905561110681600a55565b6040805185815260208101859052908101839052606081018290527f8aeedf0ed8cd3693ef01d328f512281c622ee40528326aa6fba505184ab13a439060800160405180910390a150505050565b61115c611cd9565b341561117b5760405163f36ba73760e01b815260040160405180910390fd5b80518251146111b6576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516000036111f1576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015610b5b5761123983828151811061121257611212614247565b602002602001015183838151811061122c5761122c614247565b60200260200101516121b5565b6001016111f4565b6001600160a01b0381166000908152600460205260409020606090610a2b90611e89565b61126d612258565b6001600160a01b0382166112ad576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036112e7576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526010602052604090205481811015611334576040517fffb97f810000000000000000000000000000000000000000000000000000000081526004810183905260240161030e565b3360009081526010602052604081208054849290611353908490614304565b90915550506040516000906001600160a01b0385169084908381818185875af1925050503d80600081146113a3576040519150601f19603f3d011682016040523d82523d6000602084013e6113a8565b606091505b50509050806113f5576040517fa00139f80000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810184905260440161030e565b6040518381526001600160a01b0385169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a35050610ed86001600955565b611449611cd9565b8151835114158061145c57508051825114155b15611493576040517f2fa71dfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82516000036114ce576040517f80c9830500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8351811015611538576115308482815181106114ef576114ef614247565b602002602001015184838151811061150957611509614247565b602002602001015184848151811061152357611523614247565b6020026020010151611df9565b6001016114d1565b50505050565b6060825167ffffffffffffffff81111561155a5761155a6136f3565b60405190808252806020026020018201604052801561158d57816020015b60608152602001906001900390816115785790505b50905060005b8351811015610d7b576115d88482815181106115b1576115b1614247565b60200260200101518483815181106115cb576115cb614247565b60200260200101516122b1565b8282815181106115ea576115ea614247565b6020908102919091010152600101611593565b600061160884610a90565b90506001600160a01b038116331461164b57604051632d938f5160e11b81526001600160a01b03821660048201526024810185905233604482015260640161030e565b6001600160a01b03851661167257604051639577b8b360e01b815260040160405180910390fd5b846001600160a01b0316816001600160a01b0316036116a4576040516344fed6b160e11b815260040160405180910390fd5b6116b18582868686612388565b8215610bd8576000338560008560405160200161104c94939291906142b4565b601180546116de9061410d565b80601f016020809104026020016040519081016040528092919081815260200182805461170a9061410d565b80156117575780601f1061172c57610100808354040283529160200191611757565b820191906000526020600020905b81548152906001019060200180831161173a57829003601f168201915b505050505081565b6060815167ffffffffffffffff81111561177b5761177b6136f3565b6040519080825280602002602001820160405280156117ae57816020015b60608152602001906001900390816117995790505b50905060005b8251811015611804576117df8382815181106117d2576117d2614247565b6020026020010151612084565b8282815181106117f1576117f1614247565b60209081029190910101526001016117b4565b50919050565b6060610ade83836122b1565b600f5460ff1615806118295750600c5442105b1561184757604051632e8acb0d60e01b815260040160405180910390fd5b61184f612258565b6118a788888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080513360208201528b9350019050604051602081830303815290604052612441565b6118b48585858585612558565b6118be6001600955565b5050505050505050565b6118d0611cd9565b6001600160a01b03811661194c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161030e565b611955816119e2565b50565b600f5460ff16158061196b5750600c5442105b1561198957604051632e8acb0d60e01b815260040160405180910390fd5b611991612258565b600a54156119cb576040517f1df4698600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119d88585858585612558565b610bd86001600955565b6000546001600160a01b0382811691161461195557600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000828152600160205260409020611a6c8282614317565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051611a9d919061392e565b60405180910390a25050565b610ed882825b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611b08576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201611b61576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201611a54576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080611bf27fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b03198616612840565b90506000611bff826128b1565b90508051601414158015611c135750805115155b15611c4c57806040517f42bfe79f00000000000000000000000000000000000000000000000000000000815260040161030e919061392e565b611c55816143d7565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b000000000000000000000000000000000000000000000000000000001480610a2b5750610a2b82612953565b600080611cb56301ffc9a760e01b611bba565b5090506001600160a01b038116611ccf5750600092915050565b610ade81846129a1565b33611cec6000546001600160a01b031690565b6001600160a01b031614610a8e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030e565b600f5460ff16610a8e57600f805460ff191660011790556040517fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b090600090a1565b6000818152600360205260409020546001600160a01b031661195557604051635747cd1b60e11b81526004810182905260240161030e565b6000611dc782610a90565b6001600160a01b0316836001600160a01b03161480610ade57506000828152600560205260409020610ade9084612a3f565b80600160008585604051602001611e1a929190918252602082015260400190565b6040516020818303038152906040528051906020012081526020019081526020016000209081611e4a9190614317565b5081837fa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb83604051611e7c919061392e565b60405180910390a3505050565b60606000610ade83612a61565b836001600160a01b0316856001600160a01b031603611ee1576040517f5d67d6c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611eec84610a90565b9050856001600160a01b0316816001600160a01b031614611f3a57604051632d938f5160e11b81526001600160a01b038083166004830152602482018690528716604482015260640161030e565b6001600160a01b038516611f61576040516324ecef4d60e01b815260040160405180910390fd5b611f6d86868685612abc565b611f7684610a90565b9050611f828685612ac8565b6001600160a01b0386166000908152600460205260409020611fa49085612b20565b506001600160a01b0385166000908152600460205260409020611fc79085612b2c565b5060008481526003602052604090819020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388811691821790925591518692918916907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf9061203b90339089908990614413565b60405180910390a46000338787878660405160200161205e959493929190614446565b60405160208183030381529060405290506120798782612b38565b610e9e868583612b63565b60606000612091836128b1565b9050805160001480156120c557507f1339e76a390b7b9ec90100000000000000000000000000000000000000000000838116145b15610a2b5760006120f57f1a7628600c3bac7101f53697f48df381ddc36b9015e7d7c9c5633d1252aa28436128b1565b90508051600003610d7b576011805461210d9061410d565b80601f01602080910402602001604051908101604052809291908181526020018280546121399061410d565b80156121865780601f1061215b57610100808354040283529160200191612186565b820191906000526020600020905b81548152906001019060200180831161216957829003601f168201915b505050505092505050919050565b6001600160a01b0381166000908152600460205260408120610a2b90612c9d565b7fcbe43bb1aadcbabb38f5062c84d347338458b97a4a7ad9dde21d336880b966dc820161220e576040517fce0c755200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ed88282611aa9565b6000610ade836001600160a01b038416612ca7565b610ed8827f8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f0097083612cf6565b6002600954036122aa5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161030e565b6002600955565b60606001600084846040516020016122d3929190918252602082015260400190565b60405160208183030381529060405280519060200120815260200190815260200160002080546123029061410d565b80601f016020809104026020016040519081016040528092919081815260200182805461232e9061410d565b801561237b5780601f106123505761010080835404028352916020019161237b565b820191906000526020600020905b81548152906001019060200180831161235e57829003601f168201915b5050505050905092915050565b60008381526005602052604081206123a09087612d43565b9050806123eb576040517f4aa31a8c0000000000000000000000000000000000000000000000000000000081526001600160a01b03871660048201526024810185905260440161030e565b83856001600160a01b0316876001600160a01b03167fc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c8686604051612431929190614480565b60405180910390a4505050505050565b600a5461247a576040517f5058901600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61248382612d58565b156124be5781816040517f331e2c3f00000000000000000000000000000000000000000000000000000000815260040161030e92919061449b565b600082826040516020016124d392919061449b565b60408051601f198184030181528282528051602091820120908301520160405160208183030381529060405280519060200120905061251584600a5483612d99565b61254f5782826040517f4a0e7b1300000000000000000000000000000000000000000000000000000000815260040161030e92919061449b565b61153883612daf565b6040516bffffffffffffffffffffffff1930606090811b8216602084015246603484015287901b1660548201526068810185905234608882015260009060a8016040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166125e682868686612ded565b6001600160a01b031614612626576040517f04f186ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008561263288610d82565b61263c91906144b4565b9050600e5481111561267d576040517f941b43eb0000000000000000000000000000000000000000000000000000000081526004810182905260240161030e565b6000600d548761268d91906144c7565b90508034146126ca576040517ffe2b819500000000000000000000000000000000000000000000000000000000815234600482015260240161030e565b6040517f1817cb8e0000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152600090733582f474f6e9fb087651b135d6224500a89e6f4490631817cb8e90604401602060405180830381865af4158015612762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278691906144de565b90506127928183614304565b601060006127a86000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546127d791906144b4565b90915550506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260106020526040812080548392906128249084906144b4565b909155506128359050898984612e15565b505050505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c830152918291016040516020818303038152906040529050806128a9906144f7565b949350505050565b60008181526001602052604090208054606091906128ce9061410d565b80601f01602080910402602001604051908101604052809291908181526020018280546128fa9061410d565b80156129475780601f1061291c57610100808354040283529160200191612947565b820191906000526020600020905b81548152906001019060200180831161292a57829003601f168201915b50505050509050919050565b60006001600160e01b031982167f629aa694000000000000000000000000000000000000000000000000000000001480610a2b57506301ffc9a760e01b6001600160e01b0319831614610a2b565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015612a28575060208210155b8015612a345750600081115b979650505050505050565b6001600160a01b03811660009081526001830160205260408120541515610ade565b60608160000180548060200260200160405190810160405280929190818152602001828054801561294757602002820191906000526020600020905b815481526020019060010190808311612a9d5750505050509050919050565b61153884848484612f50565b600081815260056020526040812090612ae082612c9d565b90506000805b8281101561106757612af9846000613017565b9150612b18828787600060405180602001604052806000815250612388565b600101612ae6565b6000610ade8383613023565b6000610ade8383612ca7565b610ed8827fb23eae7e6d1564b295b4c3e3be402d9a2f0776c57bdf365903496f6fa481ab0083612cf6565b612b7483631aed5a8560e21b6129a1565b15612c0e57604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490612bc7907f0b084a55ebf70fd3c06fd755269dac2212c4d3f0f4d09079780bfa50c1b2984d90859060040161449b565b6000604051808303816000875af1158015612be6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611538919081019061451b565b81610b5b576001600160a01b0383163b15612c60576040517f4349776d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161030e565b6040517f031731370000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161030e565b6000610a2b825490565b6000818152600183016020526040812054612cee57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a2b565b506000610a2b565b612d106001600160a01b038416631aed5a8560e21b6129a1565b15610b5b57604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490612bc7908590859060040161449b565b6000610ade836001600160a01b038416613023565b600080612d676101008461459f565b90506000612d77610100856145b3565b6000928352600b602052604090922054600190921b9182169091149392505050565b600082612da68584613116565b14949350505050565b6000612dbd6101008361459f565b90506000612dcd610100846145b3565b6000928352600b60205260409092208054600190931b9092179091555050565b6000806000612dfe87878787613163565b91509150612e0b81613227565b5095945050505050565b60008267ffffffffffffffff811115612e3057612e306136f3565b604051908082528060200260200182016040528015612e59578160200160208202803683370190505b50905060006012546001612e6d91906144b4565b90508360126000828254612e8191906144b4565b90915550600090505b84811015612ec457612e9c81836144b4565b60001b838281518110612eb157612eb1614247565b6020908102919091010152600101612e8a565b50846001600160a01b03167f3c48674dd1f5f1f6cbbeaa3b830f54a7b75f5c1598e1ea94b968ea1424f7bff38385604051612f009291906145c7565b60405180910390a260005b8481101561106757612f4886848381518110612f2957612f29614247565b602002602001015160006040518060200160405280600081525061338c565b600101612f0b565b6001600160a01b038416612f8a576000612f6960025490565b60008181526007602090815260408083208790558683526008909152902055505b6001600160a01b0383166130125760006001612fa560025490565b612faf9190614304565b60008481526008602052604090205490915081811015612ff1576000828152600760209081526040808320548484528184208190558352600890915290208190555b50600090815260076020908152604080832083905584835260089091528120555b611538565b6000610ade8383613398565b6000818152600183016020526040812054801561310c576000613047600183614304565b855490915060009061305b90600190614304565b90508181146130c057600086600001828154811061307b5761307b614247565b906000526020600020015490508087600001848154811061309e5761309e614247565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130d1576130d16145e9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a2b565b6000915050610a2b565b600081815b845181101561315b576131478286838151811061313a5761313a614247565b60200260200101516133c2565b915080613153816145ff565b91505061311b565b509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561319a575060009050600361321e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156131ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166132175760006001925092505061321e565b9150600090505b94509492505050565b600081600481111561323b5761323b614618565b036132435750565b600181600481111561325757613257614618565b036132a45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161030e565b60028160048111156132b8576132b8614618565b036133055760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161030e565b600381600481111561331957613319614618565b036119555760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161030e565b611538848484846133f1565b60008260000182815481106133af576133af614247565b9060005260206000200154905092915050565b60008183106133de576000828152602084905260409020610ade565b6000838152602083905260409020610ade565b7f00000000000000000000000000000000000000000000000000000000000000006002546134209060016144b4565b1115613458576040517fe8ba229100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611538848484846001600160a01b038416613486576040516324ecef4d60e01b815260040160405180910390fd5b6134936000858584612abc565b6000838152600360205260409020546001600160a01b0316156134e5576040517f34c7b5110000000000000000000000000000000000000000000000000000000081526004810184905260240161030e565b6002600081546134f4906145ff565b909155506001600160a01b038416600090815260046020526040902061351a9084612b2c565b50600083815260036020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881690811790915590518592907fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf9061358990339088908890614413565b60405180910390a460003360008686856040516020016135ad959493929190614446565b6040516020818303038152906040529050610bd8858483612b63565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561360a57600080fd5b81356001600160e01b031981168114610ade57600080fd5b60006020828403121561363457600080fd5b5035919050565b80356001600160a01b038116811461365257600080fd5b919050565b6000806040838503121561366a57600080fd5b6136738361363b565b946020939093013593505050565b6000806020838503121561369457600080fd5b823567ffffffffffffffff808211156136ac57600080fd5b818501915085601f8301126136c057600080fd5b8135818111156136cf57600080fd5b8660208285010111156136e157600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613732576137326136f3565b604052919050565b600067ffffffffffffffff821115613754576137546136f3565b50601f01601f191660200190565b600082601f83011261377357600080fd5b81356137866137818261373a565b613709565b81815284602083860101111561379b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156137cd57600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156137f257600080fd5b6137fe86828701613762565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156138495783516001600160a01b031683529284019291840191600101613824565b50909695505050505050565b8035801515811461365257600080fd5b600080600080600060a0868803121561387d57600080fd5b6138868661363b565b94506138946020870161363b565b9350604086013592506138a960608701613855565b9150608086013567ffffffffffffffff8111156138c557600080fd5b6138d188828901613762565b9150509295509295909350565b60005b838110156138f95781810151838201526020016138e1565b50506000910152565b6000815180845261391a8160208601602086016138de565b601f01601f19169290920160200192915050565b602081526000610ade6020830184613902565b60008083601f84011261395357600080fd5b50813567ffffffffffffffff81111561396b57600080fd5b6020830191508360208260051b850101111561398657600080fd5b9250929050565b600080602083850312156139a057600080fd5b823567ffffffffffffffff8111156139b757600080fd5b6139c385828601613941565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613a2457603f19888603018452613a12858351613902565b945092850192908501906001016139f6565b5092979650505050505050565b600060208284031215613a4357600080fd5b610ade8261363b565b600067ffffffffffffffff821115613a6657613a666136f3565b5060051b60200190565b600082601f830112613a8157600080fd5b81356020613a9161378183613a4c565b82815260059290921b84018101918181019086841115613ab057600080fd5b8286015b84811015613ad257613ac58161363b565b8352918301918301613ab4565b509695505050505050565b600082601f830112613aee57600080fd5b81356020613afe61378183613a4c565b82815260059290921b84018101918181019086841115613b1d57600080fd5b8286015b84811015613ad25780358352918301918301613b21565b600082601f830112613b4957600080fd5b81356020613b5961378183613a4c565b82815260059290921b84018101918181019086841115613b7857600080fd5b8286015b84811015613ad257613b8d81613855565b8352918301918301613b7c565b600082601f830112613bab57600080fd5b81356020613bbb61378183613a4c565b82815260059290921b84018101918181019086841115613bda57600080fd5b8286015b84811015613ad257803567ffffffffffffffff811115613bfe5760008081fd5b613c0c8986838b0101613762565b845250918301918301613bde565b600080600080600060a08688031215613c3257600080fd5b853567ffffffffffffffff80821115613c4a57600080fd5b613c5689838a01613a70565b96506020880135915080821115613c6c57600080fd5b613c7889838a01613a70565b95506040880135915080821115613c8e57600080fd5b613c9a89838a01613add565b94506060880135915080821115613cb057600080fd5b613cbc89838a01613b38565b93506080880135915080821115613cd257600080fd5b506138d188828901613b9a565b60008060408385031215613cf257600080fd5b82359150602083013567ffffffffffffffff811115613d1057600080fd5b613d1c85828601613762565b9150509250929050565b600080600060608486031215613d3b57600080fd5b613d448461363b565b925060208401359150604084013567ffffffffffffffff8111156137f257600080fd5b60008060008060808587031215613d7d57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613dac57600080fd5b823567ffffffffffffffff80821115613dc457600080fd5b613dd086838701613add565b93506020850135915080821115613de657600080fd5b50613d1c85828601613b9a565b600081518084526020808501945080840160005b83811015613e2357815187529582019590820190600101613e07565b509495945050505050565b602081526000610ade6020830184613df3565b600080600060608486031215613e5657600080fd5b833567ffffffffffffffff80821115613e6e57600080fd5b613e7a87838801613add565b94506020860135915080821115613e9057600080fd5b613e9c87838801613add565b93506040860135915080821115613eb257600080fd5b506137fe86828701613b9a565b60008060408385031215613ed257600080fd5b823567ffffffffffffffff80821115613eea57600080fd5b613ef686838701613add565b93506020850135915080821115613f0c57600080fd5b50613d1c85828601613add565b60008060008060808587031215613f2f57600080fd5b613f388561363b565b935060208501359250613f4d60408601613855565b9150606085013567ffffffffffffffff811115613f6957600080fd5b613f7587828801613762565b91505092959194509250565b600060208284031215613f9357600080fd5b813567ffffffffffffffff811115613faa57600080fd5b6128a984828501613add565b60008060408385031215613fc957600080fd5b50508035926020909101359150565b803560ff8116811461365257600080fd5b60008060008060008060008060e0898b03121561400557600080fd5b883567ffffffffffffffff81111561401c57600080fd5b6140288b828c01613941565b9099509750506020890135955061404160408a0161363b565b94506060890135935061405660808a01613fd8565b925060a0890135915060c089013590509295985092959890939650565b600080600080600060a0868803121561408b57600080fd5b6140948661363b565b9450602086013593506140a960408701613fd8565b94979396509394606081013594506080013592915050565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b600082516141038184602087016138de565b9190910192915050565b600181811c9082168061412157607f821691505b60208210810361180457634e487b7160e01b600052602260045260246000fd5b601f821115610b5b57600081815260208120601f850160051c810160208610156141685750805b601f850160051c820191505b8181101561106757828155600101614174565b67ffffffffffffffff83111561419f5761419f6136f3565b6141b3836141ad835461410d565b83614141565b6000601f8411600181146141e757600085156141cf5750838201355b600019600387901b1c1916600186901b178355610bd8565b600083815260209020601f19861690835b8281101561421857868501358255602094850194600190920191016141f8565b50868210156142355760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261427457600080fd5b83018035915067ffffffffffffffff82111561428f57600080fd5b60200191503681900382131561398657600080fd5b8183823760009101908152919050565b6001600160a01b038516815283602082015282151560408201526080606082015260006142e46080830184613902565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a2b57610a2b6142ee565b815167ffffffffffffffff811115614331576143316136f3565b6143458161433f845461410d565b84614141565b602080601f83116001811461437a57600084156143625750858301515b600019600386901b1c1916600185901b178555611067565b600085815260208120601f198616915b828110156143a95788860151825594840194600190910190840161438a565b50858210156143c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b805160208201516bffffffffffffffffffffffff19808216929190601483101561440b5780818460140360031b1b83161693505b505050919050565b6001600160a01b0384168152821515602082015260606040820152600061443d6060830184613902565b95945050505050565b60006001600160a01b038088168352808716602084015280861660408401525083606083015260a06080830152612a3460a0830184613902565b82151581526040602082015260006128a96040830184613902565b8281526040602082015260006128a96040830184613902565b80820180821115610a2b57610a2b6142ee565b8082028115828204841417610a2b57610a2b6142ee565b6000602082840312156144f057600080fd5b5051919050565b805160208083015191908110156118045760001960209190910360031b1b16919050565b60006020828403121561452d57600080fd5b815167ffffffffffffffff81111561454457600080fd5b8201601f8101841361455557600080fd5b80516145636137818261373a565b81815285602083850101111561457857600080fd5b61443d8260208301602086016138de565b634e487b7160e01b600052601260045260246000fd5b6000826145ae576145ae614589565b500490565b6000826145c2576145c2614589565b500690565b6040815260006145da6040830185613df3565b90508260208301529392505050565b634e487b7160e01b600052603160045260246000fd5b600060018201614611576146116142ee565b5060010190565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220037a3ceb6827fbb50d2170026008760edfcc888cdbb4a4dfdeeb216f092e048b64736f6c63430008110033 diff --git a/lib/lsp-smart-contracts b/lib/lsp-smart-contracts index cab33b2..5c559e6 160000 --- a/lib/lsp-smart-contracts +++ b/lib/lsp-smart-contracts @@ -1 +1 @@ -Subproject commit cab33b2b7870c9e717fa6a6467c12e6822b134a1 +Subproject commit 5c559e657686f3c19a4fa323044955ef92fe9d48 diff --git a/src/assets/lsp7/GenesisDigitalAsset.sol b/src/assets/lsp7/GenesisDigitalAsset.sol index f64508b..fe93ad3 100644 --- a/src/assets/lsp7/GenesisDigitalAsset.sol +++ b/src/assets/lsp7/GenesisDigitalAsset.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.17; import {LSP7DigitalAsset} from "@lukso/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.sol"; +import {_LSP4_TOKEN_TYPE_NFT} from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; contract GenesisDigitalAsset is LSP7DigitalAsset { error InvalidBeneficiary(); @@ -12,7 +13,7 @@ contract GenesisDigitalAsset is LSP7DigitalAsset { address public beneficiary; constructor(string memory name_, string memory symbol_, address newOwner_, address newBeneficiary_) - LSP7DigitalAsset(name_, symbol_, newOwner_, true) + LSP7DigitalAsset(name_, symbol_, newOwner_, _LSP4_TOKEN_TYPE_NFT, true) { _setBeneficiary(newBeneficiary_); } diff --git a/src/assets/lsp7/MintableDigitalAsset.sol b/src/assets/lsp7/MintableDigitalAsset.sol index d3271b6..cfe98da 100644 --- a/src/assets/lsp7/MintableDigitalAsset.sol +++ b/src/assets/lsp7/MintableDigitalAsset.sol @@ -10,9 +10,10 @@ contract MintableDigitalAsset is LSP7Mintable, LSP7CappedSupply { string memory name_, string memory symbol_, address newOwner_, + uint256 lsp4TokenType_, bool isNonDivisible_, uint256 tokenSupplyCap_ - ) LSP7Mintable(name_, symbol_, newOwner_, isNonDivisible_) LSP7CappedSupply(tokenSupplyCap_) {} + ) LSP7Mintable(name_, symbol_, newOwner_, lsp4TokenType_, isNonDivisible_) LSP7CappedSupply(tokenSupplyCap_) {} function _mint(address to, uint256 amount, bool allowNonLSP1Recipient, bytes memory data) internal diff --git a/src/assets/lsp8/CollectorIdentifiableDigitalAsset.sol b/src/assets/lsp8/CollectorIdentifiableDigitalAsset.sol index d69761e..ff7f678 100644 --- a/src/assets/lsp8/CollectorIdentifiableDigitalAsset.sol +++ b/src/assets/lsp8/CollectorIdentifiableDigitalAsset.sol @@ -12,11 +12,12 @@ import {LSP8Enumerable} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Enumerable.sol"; import {LSP8IdentifiableDigitalAssetCore} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAssetCore.sol"; +import {_LSP8_TOKENID_SCHEMA_UNIQUE_ID} from + "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8Constants.sol"; +import {_LSP4_TOKEN_TYPE_NFT} from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; import {Withdrawable} from "../../common/Withdrawable.sol"; import {ICollectorIdentifiableDigitalAsset} from "./ICollectorIdentifiableDigitalAsset.sol"; -uint256 constant _LSP8_TOKEN_ID_TYPE_UNIQUE_IDENTIFIER = 2; - contract CollectorIdentifiableDigitalAsset is ICollectorIdentifiableDigitalAsset, LSP8IdentifiableDigitalAsset, @@ -52,7 +53,7 @@ contract CollectorIdentifiableDigitalAsset is address controller_, uint256 tokenSupplyCap_ ) - LSP8IdentifiableDigitalAsset(name_, symbol_, newOwner_, _LSP8_TOKEN_ID_TYPE_UNIQUE_IDENTIFIER) + LSP8IdentifiableDigitalAsset(name_, symbol_, newOwner_, _LSP4_TOKEN_TYPE_NFT, _LSP8_TOKENID_SCHEMA_UNIQUE_ID) LSP8CappedSupply(tokenSupplyCap_) { _setController(controller_); diff --git a/src/assets/lsp8/MintableIdentifiableDigitalAsset.sol b/src/assets/lsp8/MintableIdentifiableDigitalAsset.sol index 519b7aa..80eb404 100644 --- a/src/assets/lsp8/MintableIdentifiableDigitalAsset.sol +++ b/src/assets/lsp8/MintableIdentifiableDigitalAsset.sol @@ -15,8 +15,9 @@ contract MintableIdentifiableDigitalAsset is LSP8Mintable, LSP8Enumerable, LSP8C string memory symbol_, address newOwner_, uint256 tokenIdType_, + uint256 lsp8TokenIdSchema_, uint256 tokenSupplyCap_ - ) LSP8Mintable(name_, symbol_, newOwner_, tokenIdType_) LSP8CappedSupply(tokenSupplyCap_) { + ) LSP8Mintable(name_, symbol_, newOwner_, tokenIdType_, lsp8TokenIdSchema_) LSP8CappedSupply(tokenSupplyCap_) { // noop } diff --git a/src/drops/LSP7DropsDigitalAsset.sol b/src/drops/LSP7DropsDigitalAsset.sol index d0d3e45..5fdfa78 100644 --- a/src/drops/LSP7DropsDigitalAsset.sol +++ b/src/drops/LSP7DropsDigitalAsset.sol @@ -6,6 +6,7 @@ import { LSP7DigitalAssetCore } from "@lukso/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.sol"; import {LSP7CappedSupply} from "@lukso/lsp-smart-contracts/contracts/LSP7DigitalAsset/extensions/LSP7CappedSupply.sol"; +import {_LSP4_TOKEN_TYPE_NFT} from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; import {DropsDigitalAsset} from "./DropsDigitalAsset.sol"; contract LSP7DropsDigitalAsset is LSP7CappedSupply, DropsDigitalAsset { @@ -20,7 +21,7 @@ contract LSP7DropsDigitalAsset is LSP7CappedSupply, DropsDigitalAsset { uint256 tokenSupplyCap_, uint32 serviceFeePoints_ ) - LSP7DigitalAsset(name_, symbol_, newOwner_, true) + LSP7DigitalAsset(name_, symbol_, newOwner_, _LSP4_TOKEN_TYPE_NFT, true) LSP7CappedSupply(tokenSupplyCap_) DropsDigitalAsset(service_, verifier_, serviceFeePoints_) {} diff --git a/src/drops/LSP8DropsDigitalAsset.sol b/src/drops/LSP8DropsDigitalAsset.sol index e0a19d0..358dad1 100644 --- a/src/drops/LSP8DropsDigitalAsset.sol +++ b/src/drops/LSP8DropsDigitalAsset.sol @@ -9,6 +9,7 @@ import {LSP8CappedSupply} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8CappedSupply.sol"; import {LSP8Enumerable} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Enumerable.sol"; +import {_LSP4_TOKEN_TYPE_NFT} from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; import {DropsDigitalAsset} from "./DropsDigitalAsset.sol"; contract LSP8DropsDigitalAsset is LSP8CappedSupply, LSP8Enumerable, DropsDigitalAsset { @@ -35,7 +36,7 @@ contract LSP8DropsDigitalAsset is LSP8CappedSupply, LSP8Enumerable, DropsDigital uint256 tokenSupplyCap_, uint32 serviceFeePoints_ ) - LSP8IdentifiableDigitalAsset(name_, symbol_, newOwner_, _LSP8_TOKEN_ID_TYPE_UNIQUE_NUMBER) + LSP8IdentifiableDigitalAsset(name_, symbol_, newOwner_, _LSP4_TOKEN_TYPE_NFT, _LSP8_TOKEN_ID_TYPE_UNIQUE_NUMBER) LSP8CappedSupply(tokenSupplyCap_) DropsDigitalAsset(service_, verifier_, serviceFeePoints_) { diff --git a/src/page/PageName.sol b/src/page/PageName.sol index 8ffcdf3..93ccbcd 100644 --- a/src/page/PageName.sol +++ b/src/page/PageName.sol @@ -4,6 +4,9 @@ pragma solidity 0.8.17; import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {PausableUpgradeable} from "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import {_LSP4_TOKEN_TYPE_NFT} from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; +import {_LSP8_TOKENID_SCHEMA_STRING} from + "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8Constants.sol"; import {LSP8EnumerableInitAbstract} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8EnumerableInitAbstract.sol"; import {LSP8IdentifiableDigitalAssetInitAbstract} from @@ -11,8 +14,6 @@ import {LSP8IdentifiableDigitalAssetInitAbstract} from import {Withdrawable} from "../common/Withdrawable.sol"; import {IPageNameMarketplace, PendingSale} from "./IPageNameMarketplace.sol"; -uint256 constant _LSP8_TOKEN_ID_TYPE_UNIQUE_NAME = 1; - contract PageName is LSP8EnumerableInitAbstract, ReentrancyGuardUpgradeable, PausableUpgradeable, Withdrawable { error InvalidController(); @@ -52,7 +53,7 @@ contract PageName is LSP8EnumerableInitAbstract, ReentrancyGuardUpgradeable, Pau uint16 profileLimit_, IPageNameMarketplace marketplace_ ) external initializer { - super._initialize(name_, symbol_, newOwner_, _LSP8_TOKEN_ID_TYPE_UNIQUE_NAME); + super._initialize(name_, symbol_, newOwner_, _LSP4_TOKEN_TYPE_NFT, _LSP8_TOKENID_SCHEMA_STRING); __ReentrancyGuard_init(); __Pausable_init(); _setBeneficiary(beneficiary_); diff --git a/test/assets/lsp7/DigitalAssetDrop.t.sol b/test/assets/lsp7/DigitalAssetDrop.t.sol index 3e053fa..758fe9d 100644 --- a/test/assets/lsp7/DigitalAssetDrop.t.sol +++ b/test/assets/lsp7/DigitalAssetDrop.t.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.17; import {Test} from "forge-std/Test.sol"; import {Merkle} from "murky/Merkle.sol"; import {UniversalProfile} from "@lukso/lsp-smart-contracts/contracts/UniversalProfile.sol"; +import {_LSP4_TOKEN_TYPE_NFT} from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; import {DigitalAssetDrop} from "../../../src/assets/lsp7/DigitalAssetDrop.sol"; import {deployProfile} from "../../utils/profile.sol"; import {DigitalAssetMock} from "./DigitalAssetMock.sol"; @@ -24,7 +25,7 @@ contract DigitalAssetDropTest is Test { dropOwner = vm.addr(3); merkle = new Merkle(); - asset = new DigitalAssetMock("Mock", "MCK", assetOwner, true); + asset = new DigitalAssetMock("Mock", "MCK", assetOwner, _LSP4_TOKEN_TYPE_NFT, true); } function test_Claim() public { diff --git a/test/assets/lsp7/DigitalAssetMock.sol b/test/assets/lsp7/DigitalAssetMock.sol index cec8d9a..702c669 100644 --- a/test/assets/lsp7/DigitalAssetMock.sol +++ b/test/assets/lsp7/DigitalAssetMock.sol @@ -4,9 +4,13 @@ pragma solidity 0.8.17; import {LSP7DigitalAsset} from "@lukso/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.sol"; contract DigitalAssetMock is LSP7DigitalAsset { - constructor(string memory name_, string memory symbol_, address newOwner_, bool isNonDivisible_) - LSP7DigitalAsset(name_, symbol_, newOwner_, isNonDivisible_) - {} + constructor( + string memory name_, + string memory symbol_, + address newOwner_, + uint256 lsp4TokenType_, + bool isNonDivisible_ + ) LSP7DigitalAsset(name_, symbol_, newOwner_, lsp4TokenType_, isNonDivisible_) {} function mint(address to, uint256 amount, bool allowNonLSP1Recipient, bytes memory data) external { _mint(to, amount, allowNonLSP1Recipient, data); diff --git a/test/assets/lsp7/MintableDigitalAsset.t.sol b/test/assets/lsp7/MintableDigitalAsset.t.sol index bc59282..9c48b8b 100644 --- a/test/assets/lsp7/MintableDigitalAsset.t.sol +++ b/test/assets/lsp7/MintableDigitalAsset.t.sol @@ -3,6 +3,10 @@ pragma solidity 0.8.17; import {Test} from "forge-std/Test.sol"; import {UniversalProfile} from "@lukso/lsp-smart-contracts/contracts/UniversalProfile.sol"; +import { + _LSP4_TOKEN_TYPE_TOKEN, + _LSP4_TOKEN_TYPE_NFT +} from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; import {MintableDigitalAsset} from "../../../src/assets/lsp7/MintableDigitalAsset.sol"; contract MintableDigitalAssetTest is Test { @@ -13,7 +17,7 @@ contract MintableDigitalAssetTest is Test { } function test_NonDivisble() public { - MintableDigitalAsset asset = new MintableDigitalAsset("Test", "TST", owner, true, 100); + MintableDigitalAsset asset = new MintableDigitalAsset("Test", "TST", owner, _LSP4_TOKEN_TYPE_NFT, true, 100); assertEq(0, asset.totalSupply()); assertEq(100, asset.tokenSupplyCap()); assertEq(owner, asset.owner()); @@ -21,7 +25,7 @@ contract MintableDigitalAssetTest is Test { } function test_Divisible() public { - MintableDigitalAsset asset = new MintableDigitalAsset("Test", "TST", owner, false, 100); + MintableDigitalAsset asset = new MintableDigitalAsset("Test", "TST", owner, _LSP4_TOKEN_TYPE_TOKEN, false, 100); assertEq(0, asset.totalSupply()); assertEq(100, asset.tokenSupplyCap()); assertEq(owner, asset.owner()); diff --git a/test/assets/lsp8/CollectorIdentifiableDigitalAsset.t.sol b/test/assets/lsp8/CollectorIdentifiableDigitalAsset.t.sol index 53914d5..f2b6a16 100644 --- a/test/assets/lsp8/CollectorIdentifiableDigitalAsset.t.sol +++ b/test/assets/lsp8/CollectorIdentifiableDigitalAsset.t.sol @@ -5,13 +5,17 @@ import {Test} from "forge-std/Test.sol"; import {UniversalProfile} from "@lukso/lsp-smart-contracts/contracts/UniversalProfile.sol"; import { _LSP4_TOKEN_NAME_KEY, - _LSP4_TOKEN_SYMBOL_KEY + _LSP4_TOKEN_SYMBOL_KEY, + _LSP4_TOKEN_TYPE_KEY, + _LSP4_TOKEN_TYPE_NFT } from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; +import { + _LSP8_TOKENID_SCHEMA_KEY, + _LSP8_TOKENID_SCHEMA_UNIQUE_ID +} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8Constants.sol"; import {CollectorIdentifiableDigitalAsset} from "../../../src/assets/lsp8/CollectorIdentifiableDigitalAsset.sol"; import {deployProfile} from "../../utils/profile.sol"; -bytes32 constant _LSP8_TOKEN_ID_TYPE_KEY = 0x715f248956de7ce65e94d9d836bfead479f7e70d69b718d47bfe7b00e05b4fe4; - contract CollectorIdentifiableDigitalAssetTest is Test { event TokensPurchased(address indexed recipient, bytes32[] tokenIds, uint256 totalPaid); event TokenSupplyLimitChanged(uint256 limit); @@ -35,7 +39,8 @@ contract CollectorIdentifiableDigitalAssetTest is Test { function test_Initialize() public { assertEq("Universal Page Collector", asset.getData(_LSP4_TOKEN_NAME_KEY)); assertEq("UPC", asset.getData(_LSP4_TOKEN_SYMBOL_KEY)); - assertEq(2, /* unuque identifier/sequence */ uint256(bytes32(asset.getData(_LSP8_TOKEN_ID_TYPE_KEY)))); + assertEq(_LSP4_TOKEN_TYPE_NFT, uint256(bytes32(asset.getData(_LSP4_TOKEN_TYPE_KEY)))); + assertEq(_LSP8_TOKENID_SCHEMA_UNIQUE_ID, uint256(bytes32(asset.getData(_LSP8_TOKENID_SCHEMA_KEY)))); assertEq(0, asset.totalSupply()); assertEq(100, asset.tokenSupplyCap()); assertEq(0, asset.tokenSupplyLimit()); diff --git a/test/assets/lsp8/MintableIdentifiableDigitalAsset.t.sol b/test/assets/lsp8/MintableIdentifiableDigitalAsset.t.sol index f70406e..dc60d50 100644 --- a/test/assets/lsp8/MintableIdentifiableDigitalAsset.t.sol +++ b/test/assets/lsp8/MintableIdentifiableDigitalAsset.t.sol @@ -13,7 +13,7 @@ contract MintableIdentifiableDigitalAssetTest is Test { } function test() public { - MintableIdentifiableDigitalAsset asset = new MintableIdentifiableDigitalAsset("Test", "TST", owner, 1, 100); + MintableIdentifiableDigitalAsset asset = new MintableIdentifiableDigitalAsset("Test", "TST", owner, 1, 1, 100); assertEq(0, asset.totalSupply()); assertEq(100, asset.tokenSupplyCap()); assertEq(owner, asset.owner()); diff --git a/test/marketplace/Participant.t.sol b/test/marketplace/Participant.t.sol index 043c9ed..fe925aa 100644 --- a/test/marketplace/Participant.t.sol +++ b/test/marketplace/Participant.t.sol @@ -37,7 +37,7 @@ contract ParticipantTest is Test { controllerKey = 4; controller = vm.addr(controllerKey); - genesisAsset = new LSP7DigitalAssetMock("Mock", "MCK", assetOwner, true); + genesisAsset = new LSP7DigitalAssetMock("Mock", "MCK", assetOwner, 0, true); collectorAsset = new CollectorIdentifiableDigitalAsset("Universal Page Collector", "UPC", assetOwner, controller, 1000); diff --git a/test/marketplace/lsp7/LSP7DigitalAssetMock.sol b/test/marketplace/lsp7/LSP7DigitalAssetMock.sol index c40ea9c..a0d7eb5 100644 --- a/test/marketplace/lsp7/LSP7DigitalAssetMock.sol +++ b/test/marketplace/lsp7/LSP7DigitalAssetMock.sol @@ -4,9 +4,13 @@ pragma solidity 0.8.17; import {LSP7DigitalAsset} from "@lukso/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.sol"; contract LSP7DigitalAssetMock is LSP7DigitalAsset { - constructor(string memory name_, string memory symbol_, address newOwner_, bool isNonDivisible_) - LSP7DigitalAsset(name_, symbol_, newOwner_, isNonDivisible_) - {} + constructor( + string memory name_, + string memory symbol_, + address newOwner_, + uint256 lsp4TokenType_, + bool isNonDivisible_ + ) LSP7DigitalAsset(name_, symbol_, newOwner_, lsp4TokenType_, isNonDivisible_) {} function mint(address to, uint256 amount, bool allowNonLSP1Recipient, bytes memory data) external { _mint(to, amount, allowNonLSP1Recipient, data); diff --git a/test/marketplace/lsp7/LSP7Listings.t.sol b/test/marketplace/lsp7/LSP7Listings.t.sol index 1163a56..3e75830 100644 --- a/test/marketplace/lsp7/LSP7Listings.t.sol +++ b/test/marketplace/lsp7/LSP7Listings.t.sol @@ -44,7 +44,7 @@ contract LSP7ListingsTest is Test { admin = vm.addr(1); owner = vm.addr(2); - asset = new LSP7DigitalAssetMock("Mock", "MCK", owner, true); + asset = new LSP7DigitalAssetMock("Mock", "MCK", owner, 0, true); listings = LSP7Listings( address( diff --git a/test/marketplace/lsp7/LSP7Marketplace.t.sol b/test/marketplace/lsp7/LSP7Marketplace.t.sol index a355a1e..6d9922c 100644 --- a/test/marketplace/lsp7/LSP7Marketplace.t.sol +++ b/test/marketplace/lsp7/LSP7Marketplace.t.sol @@ -50,7 +50,7 @@ contract LSP7MarketplaceTest is Test { owner = vm.addr(2); beneficiary = vm.addr(3); - asset = new LSP7DigitalAssetMock("Mock", "MCK", owner, true); + asset = new LSP7DigitalAssetMock("Mock", "MCK", owner, 0, true); participant = Participant( payable( @@ -208,7 +208,7 @@ contract LSP7MarketplaceTest is Test { } function test_BuyWithDiscount() public { - LSP7DigitalAssetMock discountAsset = new LSP7DigitalAssetMock("Discount", "DSC", owner, true); + LSP7DigitalAssetMock discountAsset = new LSP7DigitalAssetMock("Discount", "DSC", owner, 0, true); vm.prank(owner); participant.setGenesisAsset(discountAsset); diff --git a/test/marketplace/lsp7/LSP7Offers.t.sol b/test/marketplace/lsp7/LSP7Offers.t.sol index da484e1..3b515fe 100644 --- a/test/marketplace/lsp7/LSP7Offers.t.sol +++ b/test/marketplace/lsp7/LSP7Offers.t.sol @@ -30,7 +30,7 @@ contract LSP7OffersTest is Test { admin = vm.addr(1); owner = vm.addr(2); - asset = new LSP7DigitalAssetMock("Mock", "MCK", owner, true); + asset = new LSP7DigitalAssetMock("Mock", "MCK", owner, 0, true); listings = LSP7Listings( address( diff --git a/test/marketplace/lsp8/LSP8Auctions.t.sol b/test/marketplace/lsp8/LSP8Auctions.t.sol index ec44b70..719a93f 100644 --- a/test/marketplace/lsp8/LSP8Auctions.t.sol +++ b/test/marketplace/lsp8/LSP8Auctions.t.sol @@ -59,7 +59,7 @@ contract LSP8AuctionsTest is Test { admin = vm.addr(1); owner = vm.addr(2); - asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0); + asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0, 0); listings = LSP8Listings( address( diff --git a/test/marketplace/lsp8/LSP8DigitalAssetMock.sol b/test/marketplace/lsp8/LSP8DigitalAssetMock.sol index 8a8d388..8bf7035 100644 --- a/test/marketplace/lsp8/LSP8DigitalAssetMock.sol +++ b/test/marketplace/lsp8/LSP8DigitalAssetMock.sol @@ -5,9 +5,13 @@ import {LSP8IdentifiableDigitalAsset} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.sol"; contract LSP8DigitalAssetMock is LSP8IdentifiableDigitalAsset { - constructor(string memory name_, string memory symbol_, address newOwner_, uint256 tokenIdType_) - LSP8IdentifiableDigitalAsset(name_, symbol_, newOwner_, tokenIdType_) - { + constructor( + string memory name_, + string memory symbol_, + address newOwner_, + uint256 tokenIdType_, + uint256 lsp8TokenIdSchema_ + ) LSP8IdentifiableDigitalAsset(name_, symbol_, newOwner_, tokenIdType_, lsp8TokenIdSchema_) { // noop } diff --git a/test/marketplace/lsp8/LSP8Listings.t.sol b/test/marketplace/lsp8/LSP8Listings.t.sol index 1654140..529f376 100644 --- a/test/marketplace/lsp8/LSP8Listings.t.sol +++ b/test/marketplace/lsp8/LSP8Listings.t.sol @@ -36,7 +36,7 @@ contract LSP8ListingsTest is Test { admin = vm.addr(1); owner = vm.addr(2); - asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0); + asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0, 0); listings = LSP8Listings( address( diff --git a/test/marketplace/lsp8/LSP8Marketplace.t.sol b/test/marketplace/lsp8/LSP8Marketplace.t.sol index 91e30fa..88b9cf4 100644 --- a/test/marketplace/lsp8/LSP8Marketplace.t.sol +++ b/test/marketplace/lsp8/LSP8Marketplace.t.sol @@ -53,7 +53,7 @@ contract LSP8MarketplaceTest is Test { owner = vm.addr(2); beneficiary = vm.addr(3); - asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0); + asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0, 0); participant = Participant( payable( @@ -218,7 +218,7 @@ contract LSP8MarketplaceTest is Test { } function test_BuyWithDiscount() public { - LSP7DigitalAssetMock discountAsset = new LSP7DigitalAssetMock("Discount", "DSC", owner, true); + LSP7DigitalAssetMock discountAsset = new LSP7DigitalAssetMock("Discount", "DSC", owner, 0, true); vm.prank(owner); participant.setGenesisAsset(discountAsset); diff --git a/test/marketplace/lsp8/LSP8Offers.t.sol b/test/marketplace/lsp8/LSP8Offers.t.sol index d4ee08b..164beee 100644 --- a/test/marketplace/lsp8/LSP8Offers.t.sol +++ b/test/marketplace/lsp8/LSP8Offers.t.sol @@ -30,7 +30,7 @@ contract LSP8OffersTest is Test { admin = vm.addr(1); owner = vm.addr(2); - asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0); + asset = new LSP8DigitalAssetMock("Mock", "MCK", owner, 0, 0); listings = LSP8Listings( address( diff --git a/test/page/PageName.t.sol b/test/page/PageName.t.sol index fd5d82b..60ad57e 100644 --- a/test/page/PageName.t.sol +++ b/test/page/PageName.t.sol @@ -5,16 +5,20 @@ import {Test} from "forge-std/Test.sol"; import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import { _LSP4_TOKEN_NAME_KEY, - _LSP4_TOKEN_SYMBOL_KEY + _LSP4_TOKEN_SYMBOL_KEY, + _LSP4_TOKEN_TYPE_KEY, + _LSP4_TOKEN_TYPE_NFT } from "@lukso/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Constants.sol"; +import { + _LSP8_TOKENID_SCHEMA_KEY, + _LSP8_TOKENID_SCHEMA_STRING +} from "@lukso/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8Constants.sol"; import {UniversalProfile} from "@lukso/lsp-smart-contracts/contracts/UniversalProfile.sol"; import {IPageNameMarketplace, PendingSale} from "../../src/page/IPageNameMarketplace.sol"; import {PageName} from "../../src/page/PageName.sol"; import {deployProfile} from "../utils/profile.sol"; import {PageNameMarketplaceMock} from "./PageNameMarketplaceMock.sol"; -bytes32 constant _LSP8_TOKEN_ID_TYPE_KEY = 0x715f248956de7ce65e94d9d836bfead479f7e70d69b718d47bfe7b00e05b4fe4; - contract PageNameTest is Test { event ValueReceived(address indexed sender, uint256 indexed value); event ValueWithdrawn(address indexed sender, uint256 indexed value); @@ -63,7 +67,8 @@ contract PageNameTest is Test { assertTrue(!name.paused()); assertEq("Universal Page Name", name.getData(_LSP4_TOKEN_NAME_KEY)); assertEq("UPN", name.getData(_LSP4_TOKEN_SYMBOL_KEY)); - assertEq(1, /* string */ uint256(bytes32(name.getData(_LSP8_TOKEN_ID_TYPE_KEY)))); + assertEq(_LSP4_TOKEN_TYPE_NFT, uint256(bytes32(name.getData(_LSP4_TOKEN_TYPE_KEY)))); + assertEq(_LSP8_TOKENID_SCHEMA_STRING, uint256(bytes32(name.getData(_LSP8_TOKENID_SCHEMA_KEY)))); assertEq(owner, name.owner()); assertEq(beneficiary, name.beneficiary()); assertEq(controller, name.controller());