diff --git a/blockchain/contracts/abis/BackupRecovery.abi b/blockchain/contracts/abis/BackupRecovery.abi index 4c2bf8f..686f950 100644 --- a/blockchain/contracts/abis/BackupRecovery.abi +++ b/blockchain/contracts/abis/BackupRecovery.abi @@ -833,6 +833,11 @@ "internalType": "bytes", "name": "sessionId", "type": "bytes" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" } ], "name": "registerRecoveryKeys", diff --git a/blockchain/contracts/abis/ContractResolver.abi b/blockchain/contracts/abis/ContractResolver.abi index 6c59e6b..cbeb34b 100644 --- a/blockchain/contracts/abis/ContractResolver.abi +++ b/blockchain/contracts/abis/ContractResolver.abi @@ -388,6 +388,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "PUB_KEY_ROUTER_VIEWS_CONTRACT", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "RATE_LIMIT_NFT_CONTRACT", diff --git a/blockchain/contracts/abis/PubkeyRouter.abi b/blockchain/contracts/abis/PubkeyRouter.abi index adad0d0..b800ac9 100644 --- a/blockchain/contracts/abis/PubkeyRouter.abi +++ b/blockchain/contracts/abis/PubkeyRouter.abi @@ -497,6 +497,12 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "name": "PubkeyRoutingDataSet", @@ -618,6 +624,156 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -916,6 +1072,11 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", @@ -926,19 +1087,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getTrustedForwarder", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -984,6 +1132,11 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", @@ -993,132 +1146,5 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingDataAsAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "forwarder", - "type": "address" - } - ], - "name": "setTrustedForwarder", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "voteForRootKeys", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" } ] diff --git a/blockchain/contracts/abis/Staking.abi b/blockchain/contracts/abis/Staking.abi index 9af533e..813a6dc 100644 --- a/blockchain/contracts/abis/Staking.abi +++ b/blockchain/contracts/abis/Staking.abi @@ -390,6 +390,11 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, { "inputs": [ { @@ -579,6 +584,71 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + }, + { + "internalType": "string", + "name": "defaultKeySet", + "type": "string" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -690,11 +760,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "CallerNotOwner", - "type": "error" - }, { "inputs": [], "name": "CallerNotOwnerOrDevopsAdmin", @@ -1328,11 +1393,6 @@ "name": "tokenRewardPerTokenPerEpoch", "type": "uint256" }, - { - "internalType": "uint256[]", - "name": "keyTypes", - "type": "uint256[]" - }, { "internalType": "uint256", "name": "minimumValidatorCount", @@ -1684,66 +1744,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "realmId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "maxConcurrentRequests", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPresignCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minPresignCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "peerCheckingIntervalSecs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPresignConcurrency", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "rpcHealthcheckEnabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minEpochForRewards", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permittedValidatorsOn", - "type": "bool" - } - ], - "internalType": "struct LibStakingStorage.RealmConfig", - "name": "newConfig", - "type": "tuple" - } - ], - "name": "setRealmConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -2685,9 +2685,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig", @@ -2745,9 +2745,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig[]", @@ -2803,9 +2803,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig", @@ -3299,67 +3299,6 @@ "name": "ComplaintConfigSet", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newTokenRewardPerTokenPerEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "newKeyTypes", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinimumValidatorCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxConcurrentRequests", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxPresignCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinPresignCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newPeerCheckingIntervalSecs", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxPresignConcurrency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "newRpcHealthcheckEnabled", - "type": "bool" - } - ], - "name": "ConfigSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -4679,19 +4618,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getKeyTypes", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -5986,11 +5912,6 @@ "name": "tokenRewardPerTokenPerEpoch", "type": "uint256" }, - { - "internalType": "uint256[]", - "name": "keyTypes", - "type": "uint256[]" - }, { "internalType": "uint256", "name": "minimumValidatorCount", @@ -6641,6 +6562,11 @@ "internalType": "bool", "name": "permittedValidatorsOn", "type": "bool" + }, + { + "internalType": "string", + "name": "defaultKeySet", + "type": "string" } ], "internalType": "struct LibStakingStorage.RealmConfig", diff --git a/blockchain/contracts/abis/generated.ts b/blockchain/contracts/abis/generated.ts index a379b55..bfdcd58 100644 --- a/blockchain/contracts/abis/generated.ts +++ b/blockchain/contracts/abis/generated.ts @@ -21979,9 +21979,9 @@ export const stakingDiamondAbi = [ { name: 'curves', internalType: 'uint256[]', type: 'uint256[]' }, { name: 'counts', internalType: 'uint256[]', type: 'uint256[]' }, { - name: 'recoveryPartyMembers', - internalType: 'address[]', - type: 'address[]', + name: 'recoverySessionId', + internalType: 'bytes', + type: 'bytes', }, ], }, @@ -23103,9 +23103,9 @@ export const stakingDiamondAbi = [ { name: 'curves', internalType: 'uint256[]', type: 'uint256[]' }, { name: 'counts', internalType: 'uint256[]', type: 'uint256[]' }, { - name: 'recoveryPartyMembers', - internalType: 'address[]', - type: 'address[]', + name: 'recoverySessionId', + internalType: 'bytes', + type: 'bytes', }, ], }, @@ -23941,9 +23941,9 @@ export const stakingDiamondAbi = [ { name: 'curves', internalType: 'uint256[]', type: 'uint256[]' }, { name: 'counts', internalType: 'uint256[]', type: 'uint256[]' }, { - name: 'recoveryPartyMembers', - internalType: 'address[]', - type: 'address[]', + name: 'recoverySessionId', + internalType: 'bytes', + type: 'bytes', }, ], }, @@ -26164,9 +26164,9 @@ export const stakingKeySetsFacetAbi = [ { name: 'curves', internalType: 'uint256[]', type: 'uint256[]' }, { name: 'counts', internalType: 'uint256[]', type: 'uint256[]' }, { - name: 'recoveryPartyMembers', - internalType: 'address[]', - type: 'address[]', + name: 'recoverySessionId', + internalType: 'bytes', + type: 'bytes', }, ], }, @@ -30577,9 +30577,9 @@ export const stakingViewsFacetAbi = [ { name: 'curves', internalType: 'uint256[]', type: 'uint256[]' }, { name: 'counts', internalType: 'uint256[]', type: 'uint256[]' }, { - name: 'recoveryPartyMembers', - internalType: 'address[]', - type: 'address[]', + name: 'recoverySessionId', + internalType: 'bytes', + type: 'bytes', }, ], }, @@ -31415,9 +31415,9 @@ export const stakingViewsFacetAbi = [ { name: 'curves', internalType: 'uint256[]', type: 'uint256[]' }, { name: 'counts', internalType: 'uint256[]', type: 'uint256[]' }, { - name: 'recoveryPartyMembers', - internalType: 'address[]', - type: 'address[]', + name: 'recoverySessionId', + internalType: 'bytes', + type: 'bytes', }, ], }, diff --git a/blockchain/contracts/contracts/lit-core/ContractResolver.sol b/blockchain/contracts/contracts/lit-core/ContractResolver.sol index 39f4e37..95e9924 100644 --- a/blockchain/contracts/contracts/lit-core/ContractResolver.sol +++ b/blockchain/contracts/contracts/lit-core/ContractResolver.sol @@ -10,7 +10,7 @@ contract ContractResolver is AccessControl { // the comments following each one of these are the keccak256 hashes of the string values // this is very useful if you have to manually set any of these, so that you - // don't have to calculate the hahes yourself. + // don't have to calculate the hashes yourself. bytes32 public constant ADMIN_ROLE = keccak256("ADMIN"); // 0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42 @@ -23,6 +23,8 @@ contract ContractResolver is AccessControl { bytes32 public constant LIT_TOKEN_CONTRACT = keccak256("LIT_TOKEN"); bytes32 public constant PUB_KEY_ROUTER_CONTRACT = keccak256("PUB_KEY_ROUTER"); // 0xb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f7 + bytes32 public constant PUB_KEY_ROUTER_VIEWS_CONTRACT = + keccak256("PUB_KEY_ROUTER_VIEWS"); // 0x4c3f3e2f3e5d3e6f0c8e4f6b7a1e8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091 bytes32 public constant PKP_NFT_CONTRACT = keccak256("PKP_NFT"); // 0xb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b0 bytes32 public constant RATE_LIMIT_NFT_CONTRACT = keccak256("RATE_LIMIT_NFT"); // 0xb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a918 diff --git a/blockchain/contracts/contracts/lit-node/BackupRecovery/BackupRecoveryFacet.sol b/blockchain/contracts/contracts/lit-node/BackupRecovery/BackupRecoveryFacet.sol index 713c0be..a80d858 100644 --- a/blockchain/contracts/contracts/lit-node/BackupRecovery/BackupRecoveryFacet.sol +++ b/blockchain/contracts/contracts/lit-node/BackupRecovery/BackupRecoveryFacet.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.17; import { ContractResolver } from "../../lit-core/ContractResolver.sol"; import { LibBackupRecoveryStorage } from "./LibBackupRecoveryStorage.sol"; +import { LibStakingStorage } from "../Staking/LibStakingStorage.sol"; import { StakingViewsFacet } from "../Staking/StakingViewsFacet.sol"; import { LibDiamond } from "../../libraries/LibDiamond.sol"; import { EnumerableMap } from "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; @@ -45,6 +46,14 @@ contract BackupRecoveryFacet { return LibBackupRecoveryStorage.getStorage(); } + function ss() + internal + pure + returns (LibStakingStorage.GlobalStakingStorage storage) + { + return LibStakingStorage.getStakingStorage(); + } + function _getStakingViewsFacet() public view returns (StakingViewsFacet) { address stakingAddress = s().resolver.getContract( s().resolver.STAKING_CONTRACT(), @@ -323,10 +332,15 @@ contract BackupRecoveryFacet { delete s().nextState[0].backupMemberPeerMapping[oldPartyMember]; delete s().nextState[0].peerToBackupMemberMapping[oldPeer]; delete s().nextState[0].keysReceived[oldPartyMember]; - delete s().nextState[0].registeredRecoveryKeys; delete s().submittedProofs[oldPartyMember]; // No need to delete `votesToRegisterRecoveryKeys` as the pubKey will be different for all the DKGs } + delete s().nextState[0].registeredRecoveryKeys; + for (uint i = 0; i < s().nextState[0].keySetIds.length; i++) { + string memory keySetId = s().nextState[0].keySetIds[i]; + delete s().nextState[0].keySetIdExists[keySetId]; + } + delete s().nextState[0].keySetIds; } /** @@ -336,7 +350,8 @@ contract BackupRecoveryFacet { */ function registerRecoveryKeys( LibBackupRecoveryStorage.RecoveryKey[] memory recoveryKeys, - bytes memory sessionId + bytes memory sessionId, + string memory keySetId ) public { require( s().nextState[0].partyMembers.length > 1, @@ -381,6 +396,10 @@ contract BackupRecoveryFacet { .nextState[0] .votesToRegisterRecoveryKeys[recoveryKey.pubkey] .voted[msg.sender] = true; + if (!s().nextState[0].keySetIdExists[keySetId]) { + s().nextState[0].keySetIdExists[keySetId] = true; + s().nextState[0].keySetIds.push(keySetId); + } // If all the Recovery peers have voted, register it if ( @@ -393,6 +412,13 @@ contract BackupRecoveryFacet { // once a recovery key is registered so is the sessionId s().nextState[0].sessionId = sessionId; + for (uint i = 0; i < s().nextState[0].keySetIds.length; i++) { + string memory keySetId = s().nextState[0].keySetIds[i]; + ss() + .keySetsConfigs[keccak256(abi.encodePacked(keySetId))] + .recoverySessionId = sessionId; + } + emit RecoveryKeySet(recoveryKey); } } diff --git a/blockchain/contracts/contracts/lit-node/BackupRecovery/LibBackupRecoveryStorage.sol b/blockchain/contracts/contracts/lit-node/BackupRecovery/LibBackupRecoveryStorage.sol index 5f64d0e..a15cc69 100644 --- a/blockchain/contracts/contracts/lit-node/BackupRecovery/LibBackupRecoveryStorage.sol +++ b/blockchain/contracts/contracts/lit-node/BackupRecovery/LibBackupRecoveryStorage.sol @@ -62,6 +62,8 @@ library LibBackupRecoveryStorage { RecoveryKey[] registeredRecoveryKeys; bytes sessionId; uint256 partyThreshold; + mapping(string => bool) keySetIdExists; + string[] keySetIds; } struct K256Proof { diff --git a/blockchain/contracts/contracts/lit-node/PKPNFT/PKPNFTFacet.sol b/blockchain/contracts/contracts/lit-node/PKPNFT/PKPNFTFacet.sol index eb9d402..600825f 100644 --- a/blockchain/contracts/contracts/lit-node/PKPNFT/PKPNFTFacet.sol +++ b/blockchain/contracts/contracts/lit-node/PKPNFT/PKPNFTFacet.sol @@ -16,6 +16,7 @@ import { LibPKPNFTStorage } from "./LibPKPNFTStorage.sol"; import { IPubkeyRouter } from "../PubkeyRouter/LibPubkeyRouterStorage.sol"; import { LibPubkeyRouterStorage } from "../PubkeyRouter/LibPubkeyRouterStorage.sol"; import { PubkeyRouterFacet } from "../PubkeyRouter/PubkeyRouterFacet.sol"; +import { PubkeyRouterViewsFacet } from "../PubkeyRouter/PubkeyRouterViewsFacet.sol"; import { PKPNFTMetadata } from "../PKPNFTMetadata.sol"; import { ContractResolver } from "../../lit-core/ContractResolver.sol"; import { PKPPermissionsFacet } from "../PKPPermissions/PKPPermissionsFacet.sol"; @@ -79,7 +80,6 @@ contract PKPNFTFacet is s().env ); } - function getPkpNftMetadataAddress() public view returns (address) { return s().contractResolver.getContract( @@ -110,27 +110,35 @@ contract PKPNFTFacet is /// get the eth address for the keypair function getEthAddress(uint256 tokenId) public view returns (address) { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); return router.getEthAddress(tokenId); } /// includes the 0x04 prefix so you can pass this directly to ethers.utils.computeAddress function getPubkey(uint256 tokenId) public view returns (bytes memory) { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); return router.getPubkey(tokenId); } function getPkpInfoFromTokenIds( uint256[] memory tokenIds ) public view returns (LibPubkeyRouterStorage.PkpInfo[] memory) { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); return router.getPkpInfoFromTokenIds(tokenIds); } function getPkpInfoFromEthAddresses( address[] memory ethAddresses ) public view returns (LibPubkeyRouterStorage.PkpInfo[] memory) { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); return router.getPkpInfoFromEthAddresses(ethAddresses); } @@ -206,7 +214,9 @@ contract PKPNFTFacet is function tokenURI( uint256 tokenId ) public view override returns (string memory) { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); bytes memory pubKey = router.getPubkey(tokenId); address ethAddress = router.getEthAddress(tokenId); @@ -245,7 +255,9 @@ contract PKPNFTFacet is string memory keySetId ) public payable returns (uint256) { require(msg.value == s().mintCost, "You must pay exactly mint cost"); - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); bytes32 derivedKeyId = getNextDerivedKeyId(); bytes memory pubkey = router.getDerivedPubkey( getStakingAddress(), @@ -253,7 +265,7 @@ contract PKPNFTFacet is derivedKeyId ); uint256 tokenId = uint256(keccak256(pubkey)); - routeDerivedKey(keyType, derivedKeyId, pubkey, tokenId); + routeDerivedKey(keyType, derivedKeyId, pubkey, tokenId, keySetId); _mintWithoutValueCheck(tokenId, LibERC2771._msgSender()); return tokenId; } @@ -267,7 +279,9 @@ contract PKPNFTFacet is address stakingContractAddress ) public payable returns (uint256) { require(msg.value == s().mintCost, "You must pay exactly mint cost"); - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); router.checkNodeSignatures( realmId, signatures, @@ -280,7 +294,7 @@ contract PKPNFTFacet is ); uint256 tokenId = uint256(keccak256(pubkey)); - routeDerivedKey(keyType, derivedKeyId, pubkey, tokenId); + routeDerivedKey(keyType, derivedKeyId, pubkey, tokenId, keySetId); _mintWithoutValueCheck(tokenId, LibERC2771._msgSender()); return tokenId; @@ -292,7 +306,9 @@ contract PKPNFTFacet is bytes memory ipfsCID ) public payable returns (uint256) { require(msg.value == s().mintCost, "You must pay exactly mint cost"); - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); bytes32 derivedKeyId = getNextDerivedKeyId(); bytes memory pubkey = router.getDerivedPubkey( getStakingAddress(), @@ -300,7 +316,7 @@ contract PKPNFTFacet is derivedKeyId ); uint256 tokenId = uint256(keccak256(pubkey)); - routeDerivedKey(keyType, derivedKeyId, pubkey, tokenId); + routeDerivedKey(keyType, derivedKeyId, pubkey, tokenId, keySetId); _mintWithoutValueCheck(tokenId, address(this)); uint256[] memory scopes = new uint256[](1); scopes[0] = 1; @@ -317,19 +333,23 @@ contract PKPNFTFacet is uint256 keyType, bytes32 derivedKeyId, bytes memory pubkey, - uint256 tokenId + uint256 tokenId, + string memory keySetIdentifier ) internal { PubkeyRouterFacet(getRouterAddress()).setRoutingData( tokenId, pubkey, - address(getStakingAddress()), + getStakingAddress(), keyType, - derivedKeyId + derivedKeyId, + keySetIdentifier ); } function _mintWithoutValueCheck(uint256 tokenId, address to) internal { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); require(router.isRouted(tokenId), "This PKP has not been routed yet"); if (to == address(this)) { diff --git a/blockchain/contracts/contracts/lit-node/PKPPermissions/PKPPermissionsFacet.sol b/blockchain/contracts/contracts/lit-node/PKPPermissions/PKPPermissionsFacet.sol index 7a73514..48f9bf2 100644 --- a/blockchain/contracts/contracts/lit-node/PKPPermissions/PKPPermissionsFacet.sol +++ b/blockchain/contracts/contracts/lit-node/PKPPermissions/PKPPermissionsFacet.sol @@ -8,7 +8,7 @@ import "solidity-bytes-utils/contracts/BytesLib.sol"; import { LibDiamond } from "../../libraries/LibDiamond.sol"; import { ContractResolver } from "../../lit-core/ContractResolver.sol"; -import { PubkeyRouterFacet } from "../PubkeyRouter/PubkeyRouterFacet.sol"; +import { PubkeyRouterViewsFacet } from "../PubkeyRouter/PubkeyRouterViewsFacet.sol"; import { PKPNFTFacet } from "../PKPNFT/PKPNFTFacet.sol"; import { LibPKPPermissionsStorage } from "./LibPKPPermissionsStorage.sol"; @@ -78,20 +78,24 @@ contract PKPPermissionsFacet is ERC2771 { function getRouterAddress() public view returns (address) { return s().contractResolver.getContract( - s().contractResolver.PUB_KEY_ROUTER_CONTRACT(), + s().contractResolver.PUB_KEY_ROUTER_VIEWS_CONTRACT(), s().env ); } /// get the eth address for the keypair, as long as it's an ecdsa keypair function getEthAddress(uint256 tokenId) public view returns (address) { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); return router.getEthAddress(tokenId); } /// includes the 0x04 prefix so you can pass this directly to ethers.utils.computeAddress function getPubkey(uint256 tokenId) public view returns (bytes memory) { - PubkeyRouterFacet router = PubkeyRouterFacet(getRouterAddress()); + PubkeyRouterViewsFacet router = PubkeyRouterViewsFacet( + getRouterAddress() + ); return router.getPubkey(tokenId); } diff --git a/blockchain/contracts/contracts/lit-node/PubkeyRouter/LibPubkeyRouterStorage.sol b/blockchain/contracts/contracts/lit-node/PubkeyRouter/LibPubkeyRouterStorage.sol index 794c188..bfb51f0 100644 --- a/blockchain/contracts/contracts/lit-node/PubkeyRouter/LibPubkeyRouterStorage.sol +++ b/blockchain/contracts/contracts/lit-node/PubkeyRouter/LibPubkeyRouterStorage.sol @@ -32,6 +32,7 @@ library LibPubkeyRouterStorage { bytes pubkey; uint256 keyType; // 1 = BLS, 2 = ECDSA. Not doing this in an enum so we can add more keytypes in the future without redeploying. bytes32 derivedKeyId; + string keySetIdentifier; } struct VoteToRegisterRootKey { diff --git a/blockchain/contracts/contracts/lit-node/PubkeyRouter/PubkeyRouterFacet.sol b/blockchain/contracts/contracts/lit-node/PubkeyRouter/PubkeyRouterFacet.sol index 4579a6b..0e7df79 100644 --- a/blockchain/contracts/contracts/lit-node/PubkeyRouter/PubkeyRouterFacet.sol +++ b/blockchain/contracts/contracts/lit-node/PubkeyRouter/PubkeyRouterFacet.sol @@ -7,11 +7,10 @@ import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import { LibDiamond } from "../../libraries/LibDiamond.sol"; import { PKPNFT } from "../PKPNFT.sol"; -import { Staking } from "../Staking.sol"; import { ContractResolver } from "../../lit-core/ContractResolver.sol"; import { IKeyDeriver } from "../HDKeyDeriver.sol"; -import { StakingAcrossRealmsFacet } from "../Staking/StakingAcrossRealmsFacet.sol"; import { StakingViewsFacet } from "../Staking/StakingViewsFacet.sol"; +import { StakingAcrossRealmsFacet } from "../Staking/StakingAcrossRealmsFacet.sol"; import { PKPNFTFacet } from "../PKPNFT/PKPNFTFacet.sol"; import { LibPubkeyRouterStorage, IPubkeyRouter } from "./LibPubkeyRouterStorage.sol"; import { LibStakingStorage } from "../Staking/LibStakingStorage.sol"; @@ -19,6 +18,7 @@ import { ERC2771 } from "../../common/ERC2771.sol"; import { LibERC2771 } from "../../libraries/LibERC2771.sol"; import { StakingUtilsLib } from "../Staking/StakingUtilsLib.sol"; import { StakingKeySetsFacet } from "../Staking/StakingKeySetsFacet.sol"; +import { PubkeyRouterViewsFacet } from "./PubkeyRouterViewsFacet.sol"; import "hardhat/console.sol"; // TODO: make the tests send PKPNFT into the constructor @@ -61,8 +61,14 @@ contract PubkeyRouterFacet is ERC2771 { ); } - function realms() internal view returns (StakingAcrossRealmsFacet) { - return StakingAcrossRealmsFacet(getStakingAddress()); + function pubkeyRouterView() internal view returns (PubkeyRouterViewsFacet) { + return + PubkeyRouterViewsFacet( + s().contractResolver.getContract( + s().contractResolver.PUB_KEY_ROUTER_CONTRACT(), + s().env + ) + ); } function stakingViews() internal view returns (StakingViewsFacet) { @@ -73,159 +79,8 @@ contract PubkeyRouterFacet is ERC2771 { return StakingKeySetsFacet(getStakingAddress()); } - function ethAddressToPkpId( - address ethAddress - ) public view returns (uint256) { - return s().ethAddressToPkpId[ethAddress]; - } - - function pubkeys( - uint256 tokenId - ) public view returns (LibPubkeyRouterStorage.PubkeyRoutingData memory) { - return s().pubkeys[tokenId]; - } - - function getPkpNftAddress() public view returns (address) { - return - s().contractResolver.getContract( - s().contractResolver.PKP_NFT_CONTRACT(), - s().env - ); - } - - /// get root keys for a given staking contract - function getRootKeys( - address stakingContract, - string memory keySetId - ) public view returns (IPubkeyRouter.RootKey[] memory) { - return - s().rootKeys[stakingContract][ - keccak256(abi.encodePacked(keySetId)) - ]; - } - - /// get the routing data for a given key hash - function getRoutingData( - uint256 tokenId - ) external view returns (LibPubkeyRouterStorage.PubkeyRoutingData memory) { - return s().pubkeys[tokenId]; - } - - /// get if a given pubkey has routing data associated with it or not - function isRouted(uint256 tokenId) public view returns (bool) { - LibPubkeyRouterStorage.PubkeyRoutingData memory prd = s().pubkeys[ - tokenId - ]; - return - prd.pubkey.length != 0 && - prd.keyType != 0 && - prd.derivedKeyId != bytes32(0); - } - - /// get the eth address for the keypair, as long as it's an ecdsa keypair - function getEthAddress(uint256 tokenId) public view returns (address) { - return deriveEthAddressFromPubkey(s().pubkeys[tokenId].pubkey); - } - - function getPkpInfoFromTokenIds( - uint256[] memory tokenIds - ) public view returns (LibPubkeyRouterStorage.PkpInfo[] memory) { - if (tokenIds.length == 0) { - return new LibPubkeyRouterStorage.PkpInfo[](0); - } - - uint256 count = 0; - for (uint256 i = 0; i < tokenIds.length; i++) { - if (s().pubkeys[tokenIds[i]].pubkey.length > 0) { - count++; - } - } - - LibPubkeyRouterStorage.PkpInfo[] - memory pkpInfos = new LibPubkeyRouterStorage.PkpInfo[](count); - uint256 pkpIndex = 0; - for (uint256 i = 0; i < tokenIds.length; i++) { - if (s().pubkeys[tokenIds[i]].pubkey.length > 0) { - pkpInfos[pkpIndex].tokenId = tokenIds[i]; - pkpInfos[pkpIndex].pubkey = s().pubkeys[tokenIds[i]].pubkey; - pkpInfos[pkpIndex].ethAddress = deriveEthAddressFromPubkey( - s().pubkeys[tokenIds[i]].pubkey - ); - pkpIndex++; - } - } - return pkpInfos; - } - - function getPkpInfoFromEthAddresses( - address[] memory ethAddresses - ) public view returns (LibPubkeyRouterStorage.PkpInfo[] memory) { - if (ethAddresses.length == 0) { - return new LibPubkeyRouterStorage.PkpInfo[](0); - } - - uint256 count = 0; - for (uint256 i = 0; i < ethAddresses.length; i++) { - if (s().ethAddressToPkpId[ethAddresses[i]] != 0) { - count++; - } - } - - LibPubkeyRouterStorage.PkpInfo[] - memory pkpInfos = new LibPubkeyRouterStorage.PkpInfo[](count); - uint256 pkpIndex = 0; - for (uint256 i = 0; i < ethAddresses.length; i++) { - if (s().ethAddressToPkpId[ethAddresses[i]] != 0) { - pkpInfos[pkpIndex].tokenId = s().ethAddressToPkpId[ - ethAddresses[i] - ]; - pkpInfos[pkpIndex].pubkey = s() - .pubkeys[pkpInfos[pkpIndex].tokenId] - .pubkey; - pkpInfos[pkpIndex].ethAddress = ethAddresses[i]; - pkpIndex++; - } - } - return pkpInfos; - } - - /// includes the 0x04 prefix so you can pass this directly to ethers.utils.computeAddress - function getPubkey(uint256 tokenId) public view returns (bytes memory) { - return s().pubkeys[tokenId].pubkey; - } - - function deriveEthAddressFromPubkey( - bytes memory pubkey - ) public pure returns (address) { - // remove 0x04 prefix - bytes32 hashed = keccak256(pubkey.slice(1, 64)); - return address(uint160(uint256(hashed))); - } - - function checkNodeSignatures( - uint256 realmId, - IPubkeyRouter.Signature[] memory signatures, - bytes memory signedMessage - ) public view returns (bool) { - require( - signatures.length >= - stakingViews().currentValidatorCountForConsensus(realmId), - "PubkeyRouter: incorrect number of signatures on a given root key" - ); - for (uint256 i = 0; i < signatures.length; i++) { - IPubkeyRouter.Signature memory sig = signatures[i]; - address signer = ECDSA.recover( - ECDSA.toEthSignedMessageHash(signedMessage), - sig.v, - sig.r, - sig.s - ); - require( - stakingViews().isActiveValidatorByNodeAddress(realmId, signer), - "PubkeyRouter: signer is not active validator" - ); - } - return true; + function realms() internal view returns (StakingAcrossRealmsFacet) { + return StakingAcrossRealmsFacet(getStakingAddress()); } /* ========== MUTATIVE FUNCTIONS ========== */ @@ -236,10 +91,12 @@ contract PubkeyRouterFacet is ERC2771 { bytes memory pubkey, address stakingContractAddress, uint256 keyType, - bytes32 derivedKeyId + bytes32 derivedKeyId, + string memory keySetIdentifier ) public { require( - LibERC2771._msgSender() == address(getPkpNftAddress()), + LibERC2771._msgSender() == + address(pubkeyRouterView().getPkpNftAddress()), "setRoutingData must be called by PKPNFT contract" ); @@ -248,15 +105,18 @@ contract PubkeyRouterFacet is ERC2771 { "tokenId does not match hashed pubkey" ); require( - !isRouted(tokenId), + !pubkeyRouterView().isRouted(tokenId), "PubkeyRouter: pubkey already has routing data" ); s().pubkeys[tokenId].pubkey = pubkey; s().pubkeys[tokenId].keyType = keyType; s().pubkeys[tokenId].derivedKeyId = derivedKeyId; + s().pubkeys[tokenId].keySetIdentifier = keySetIdentifier; - address pkpAddress = deriveEthAddressFromPubkey(pubkey); + address pkpAddress = pubkeyRouterView().deriveEthAddressFromPubkey( + pubkey + ); s().ethAddressToPkpId[pkpAddress] = tokenId; emit PubkeyRoutingDataSet( @@ -264,7 +124,8 @@ contract PubkeyRouterFacet is ERC2771 { pubkey, stakingContractAddress, keyType, - derivedKeyId + derivedKeyId, + keySetIdentifier ); } @@ -275,13 +136,17 @@ contract PubkeyRouterFacet is ERC2771 { bytes memory pubkey, address stakingContract, uint256 keyType, - bytes32 derivedKeyId + bytes32 derivedKeyId, + string memory keySetIdentifier ) public onlyOwner { s().pubkeys[tokenId].pubkey = pubkey; s().pubkeys[tokenId].keyType = keyType; s().pubkeys[tokenId].derivedKeyId = derivedKeyId; + s().pubkeys[tokenId].keySetIdentifier = keySetIdentifier; - address pkpAddress = deriveEthAddressFromPubkey(pubkey); + address pkpAddress = pubkeyRouterView().deriveEthAddressFromPubkey( + pubkey + ); s().ethAddressToPkpId[pkpAddress] = tokenId; emit PubkeyRoutingDataSet( @@ -289,7 +154,8 @@ contract PubkeyRouterFacet is ERC2771 { pubkey, stakingContract, keyType, - derivedKeyId + derivedKeyId, + keySetIdentifier ); } @@ -378,21 +244,6 @@ contract PubkeyRouterFacet is ERC2771 { } } - function getDerivedPubkey( - address stakingContract, - string memory keySetId, - bytes32 derivedKeyId - ) public view returns (bytes memory) { - IPubkeyRouter.RootKey[] memory rootPubkeys = getRootKeys( - stakingContract, - keySetId - ); - - bytes memory pubkey = _computeHDPubkey(derivedKeyId, rootPubkeys, 2); - - return pubkey; - } - function adminResetRootKeys( address stakingContract, string memory keySetId @@ -417,22 +268,6 @@ contract PubkeyRouterFacet is ERC2771 { } } - function _computeHDPubkey( - bytes32 derivedKeyId, - IPubkeyRouter.RootKey[] memory rootHDKeys, - uint256 keyType - ) internal view returns (bytes memory) { - address deriverAddr = s().contractResolver.getContract( - s().contractResolver.HD_KEY_DERIVER_CONTRACT(), - s().env - ); - (bool success, bytes memory pubkey) = IKeyDeriver(deriverAddr) - .computeHDPubKey(derivedKeyId, rootHDKeys, keyType); - - require(success, "PubkeyRouter: Failed public key calculation"); - return pubkey; - } - /* ========== EVENTS ========== */ event PubkeyRoutingDataSet( @@ -440,7 +275,8 @@ contract PubkeyRouterFacet is ERC2771 { bytes pubkey, address stakingContract, uint256 keyType, - bytes32 derivedKeyId + bytes32 derivedKeyId, + string keySetIdentifier ); event ContractResolverAddressSet(address newResolverAddress); event RootKeySet(address stakingContract, IPubkeyRouter.RootKey rootKey); diff --git a/blockchain/contracts/contracts/lit-node/PubkeyRouter/PubkeyRouterViewsFacet.sol b/blockchain/contracts/contracts/lit-node/PubkeyRouter/PubkeyRouterViewsFacet.sol new file mode 100644 index 0000000..12d8dc6 --- /dev/null +++ b/blockchain/contracts/contracts/lit-node/PubkeyRouter/PubkeyRouterViewsFacet.sol @@ -0,0 +1,229 @@ +//SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity ^0.8.17; + +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "solidity-bytes-utils/contracts/BytesLib.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; +import { LibPubkeyRouterStorage, IPubkeyRouter } from "./LibPubkeyRouterStorage.sol"; +import { IKeyDeriver } from "../HDKeyDeriver.sol"; +import { StakingAcrossRealmsFacet } from "../Staking/StakingAcrossRealmsFacet.sol"; +import { StakingViewsFacet } from "../Staking/StakingViewsFacet.sol"; +import { ERC2771 } from "../../common/ERC2771.sol"; + +import "hardhat/console.sol"; + +contract PubkeyRouterViewsFacet { + using BytesLib for bytes; + + function s() + internal + pure + returns (LibPubkeyRouterStorage.PubkeyRouterStorage storage) + { + return LibPubkeyRouterStorage.getStorage(); + } + + /// get the staking address from the resolver + function getStakingAddress() internal view returns (address) { + return + s().contractResolver.getContract( + s().contractResolver.STAKING_CONTRACT(), + s().env + ); + } + + function ethAddressToPkpId( + address ethAddress + ) public view returns (uint256) { + return s().ethAddressToPkpId[ethAddress]; + } + + function realms() internal view returns (StakingAcrossRealmsFacet) { + return StakingAcrossRealmsFacet(getStakingAddress()); + } + + function stakingViews() internal view returns (StakingViewsFacet) { + return StakingViewsFacet(getStakingAddress()); + } + + function pubkeys( + uint256 tokenId + ) public view returns (LibPubkeyRouterStorage.PubkeyRoutingData memory) { + return s().pubkeys[tokenId]; + } + + function getPkpNftAddress() public view returns (address) { + return + s().contractResolver.getContract( + s().contractResolver.PKP_NFT_CONTRACT(), + s().env + ); + } + + /// get root keys for a given staking contract + function getRootKeys( + address stakingContract, + string memory keySetId + ) public view returns (IPubkeyRouter.RootKey[] memory) { + return + s().rootKeys[stakingContract][ + keccak256(abi.encodePacked(keySetId)) + ]; + } + + /// get the routing data for a given key hash + function getRoutingData( + uint256 tokenId + ) external view returns (LibPubkeyRouterStorage.PubkeyRoutingData memory) { + return s().pubkeys[tokenId]; + } + + /// get if a given pubkey has routing data associated with it or not + function isRouted(uint256 tokenId) public view returns (bool) { + LibPubkeyRouterStorage.PubkeyRoutingData memory prd = s().pubkeys[ + tokenId + ]; + return + prd.pubkey.length != 0 && + prd.keyType != 0 && + bytes(prd.keySetIdentifier).length != 0 && + prd.derivedKeyId != bytes32(0); + } + + /// get the eth address for the keypair, as long as it's an ecdsa keypair + function getEthAddress(uint256 tokenId) public view returns (address) { + return deriveEthAddressFromPubkey(s().pubkeys[tokenId].pubkey); + } + + function getPkpInfoFromTokenIds( + uint256[] memory tokenIds + ) public view returns (LibPubkeyRouterStorage.PkpInfo[] memory) { + if (tokenIds.length == 0) { + return new LibPubkeyRouterStorage.PkpInfo[](0); + } + + uint256 count = 0; + for (uint256 i = 0; i < tokenIds.length; i++) { + if (s().pubkeys[tokenIds[i]].pubkey.length > 0) { + count++; + } + } + + LibPubkeyRouterStorage.PkpInfo[] + memory pkpInfos = new LibPubkeyRouterStorage.PkpInfo[](count); + uint256 pkpIndex = 0; + for (uint256 i = 0; i < tokenIds.length; i++) { + if (s().pubkeys[tokenIds[i]].pubkey.length > 0) { + pkpInfos[pkpIndex].tokenId = tokenIds[i]; + pkpInfos[pkpIndex].pubkey = s().pubkeys[tokenIds[i]].pubkey; + pkpInfos[pkpIndex].ethAddress = deriveEthAddressFromPubkey( + s().pubkeys[tokenIds[i]].pubkey + ); + pkpIndex++; + } + } + return pkpInfos; + } + + function getPkpInfoFromEthAddresses( + address[] memory ethAddresses + ) public view returns (LibPubkeyRouterStorage.PkpInfo[] memory) { + if (ethAddresses.length == 0) { + return new LibPubkeyRouterStorage.PkpInfo[](0); + } + + uint256 count = 0; + for (uint256 i = 0; i < ethAddresses.length; i++) { + if (s().ethAddressToPkpId[ethAddresses[i]] != 0) { + count++; + } + } + + LibPubkeyRouterStorage.PkpInfo[] + memory pkpInfos = new LibPubkeyRouterStorage.PkpInfo[](count); + uint256 pkpIndex = 0; + for (uint256 i = 0; i < ethAddresses.length; i++) { + if (s().ethAddressToPkpId[ethAddresses[i]] != 0) { + pkpInfos[pkpIndex].tokenId = s().ethAddressToPkpId[ + ethAddresses[i] + ]; + pkpInfos[pkpIndex].pubkey = s() + .pubkeys[pkpInfos[pkpIndex].tokenId] + .pubkey; + pkpInfos[pkpIndex].ethAddress = ethAddresses[i]; + pkpIndex++; + } + } + return pkpInfos; + } + + /// includes the 0x04 prefix so you can pass this directly to ethers.utils.computeAddress + function getPubkey(uint256 tokenId) public view returns (bytes memory) { + return s().pubkeys[tokenId].pubkey; + } + + function deriveEthAddressFromPubkey( + bytes memory pubkey + ) public pure returns (address) { + // remove 0x04 prefix + bytes32 hashed = keccak256(pubkey.slice(1, 64)); + return address(uint160(uint256(hashed))); + } + + function checkNodeSignatures( + uint256 realmId, + IPubkeyRouter.Signature[] memory signatures, + bytes memory signedMessage + ) public view returns (bool) { + require( + signatures.length >= + stakingViews().currentValidatorCountForConsensus(realmId), + "PubkeyRouter: incorrect number of signatures on a given root key" + ); + for (uint256 i = 0; i < signatures.length; i++) { + IPubkeyRouter.Signature memory sig = signatures[i]; + address signer = ECDSA.recover( + ECDSA.toEthSignedMessageHash(signedMessage), + sig.v, + sig.r, + sig.s + ); + require( + stakingViews().isActiveValidatorByNodeAddress(realmId, signer), + "PubkeyRouter: signer is not active validator" + ); + } + return true; + } + + function getDerivedPubkey( + address stakingContract, + string memory keySetId, + bytes32 derivedKeyId + ) public view returns (bytes memory) { + IPubkeyRouter.RootKey[] memory rootPubkeys = getRootKeys( + stakingContract, + keySetId + ); + + bytes memory pubkey = _computeHDPubkey(derivedKeyId, rootPubkeys, 2); + + return pubkey; + } + + function _computeHDPubkey( + bytes32 derivedKeyId, + IPubkeyRouter.RootKey[] memory rootHDKeys, + uint256 keyType + ) internal view returns (bytes memory) { + address deriverAddr = s().contractResolver.getContract( + s().contractResolver.HD_KEY_DERIVER_CONTRACT(), + s().env + ); + (bool success, bytes memory pubkey) = IKeyDeriver(deriverAddr) + .computeHDPubKey(derivedKeyId, rootHDKeys, keyType); + + require(success, "PubkeyRouter: Failed public key calculation"); + return pubkey; + } +} diff --git a/blockchain/contracts/contracts/lit-node/Staking.sol b/blockchain/contracts/contracts/lit-node/Staking.sol index 94e9d9e..712455e 100644 --- a/blockchain/contracts/contracts/lit-node/Staking.sol +++ b/blockchain/contracts/contracts/lit-node/Staking.sol @@ -46,10 +46,6 @@ contract Staking { // this is a monotonic counter that is incremented every time a new reward epoch is created s.nextAvailableRewardEpochNumber = 0; - uint256[] memory keyTypesTemp = new uint256[](2); - keyTypesTemp[0] = 1; - keyTypesTemp[1] = 2; - // Hardcode the total supply of the token to 1 billion. s.tokenTotalSupplyStandIn = 1_000_000_000 ether; @@ -57,7 +53,6 @@ contract Staking { // Most of this is related to staking / delegation s.globalConfig[0] = LibStakingStorage.GlobalConfig({ tokenRewardPerTokenPerEpoch: (10 ** 18) / 20, // 18 decimal places in token - keyTypes: keyTypesTemp, rewardEpochDuration: 1 hours, maxTimeLock: 4 * 365 days, minTimeLock: 90 days, diff --git a/blockchain/contracts/contracts/lit-node/Staking/FunctionSelectorHelper.t.sol b/blockchain/contracts/contracts/lit-node/Staking/FunctionSelectorHelper.t.sol index cc4ecfa..8a72863 100644 --- a/blockchain/contracts/contracts/lit-node/Staking/FunctionSelectorHelper.t.sol +++ b/blockchain/contracts/contracts/lit-node/Staking/FunctionSelectorHelper.t.sol @@ -63,104 +63,103 @@ contract FunctionSelectorHelper { functionSignatures[1] = "realmConfig(uint256)"; functionSignatures[2] = "globalConfig()"; functionSignatures[3] = "complaintConfig(uint256)"; - functionSignatures[4] = "getKeyTypes()"; - functionSignatures[5] = "contractResolver()"; - functionSignatures[6] = "kickPenaltyPercentByReason(uint256)"; - functionSignatures[7] = "getNodeDemerits(address)"; - functionSignatures[8] = "nodeAddressToStakerAddress(address)"; - functionSignatures[9] = "readyForNextEpoch(uint256,address)"; - functionSignatures[10] = "state(uint256)"; - functionSignatures[11] = "getTokenContractAddress()"; - functionSignatures[12] = "validators(address)"; - functionSignatures[13] = "isActiveValidator(uint256,address)"; + functionSignatures[4] = "contractResolver()"; + functionSignatures[5] = "kickPenaltyPercentByReason(uint256)"; + functionSignatures[6] = "getNodeDemerits(address)"; + functionSignatures[7] = "nodeAddressToStakerAddress(address)"; + functionSignatures[8] = "readyForNextEpoch(uint256,address)"; + functionSignatures[9] = "state(uint256)"; + functionSignatures[10] = "getTokenContractAddress()"; + functionSignatures[11] = "validators(address)"; + functionSignatures[12] = "isActiveValidator(uint256,address)"; functionSignatures[ - 14 + 13 ] = "isActiveValidatorForNextEpoch(uint256,address)"; functionSignatures[ - 15 + 14 ] = "isActiveValidatorByNodeAddress(uint256,address)"; functionSignatures[ - 16 + 15 ] = "isActiveValidatorByNodeAddressForNextEpoch(uint256,address)"; functionSignatures[ - 17 + 16 ] = "getVotingStatusToKickValidator(uint256,uint256,address,address)"; - functionSignatures[18] = "getValidatorsInCurrentEpoch(uint256)"; + functionSignatures[17] = "getValidatorsInCurrentEpoch(uint256)"; functionSignatures[ - 19 + 18 ] = "getNonShadowValidatorsInCurrentEpochLength(uint256)"; - functionSignatures[20] = "getValidatorsInNextEpoch(uint256)"; - functionSignatures[21] = "getValidatorsStructs(address[])"; - functionSignatures[22] = "getValidatorsStructsInCurrentEpoch(uint256)"; - functionSignatures[23] = "getValidatorsStructsInNextEpoch(uint256)"; - functionSignatures[24] = "getTotalStake(address)"; - functionSignatures[25] = "getTotalStakeByUser(address,address)"; - functionSignatures[26] = "getNodeStakerAddressMappings(address[])"; - functionSignatures[27] = "getNodeAttestedPubKeyMappings(address[])"; - functionSignatures[ - 28 + functionSignatures[19] = "getValidatorsInNextEpoch(uint256)"; + functionSignatures[20] = "getValidatorsStructs(address[])"; + functionSignatures[21] = "getValidatorsStructsInCurrentEpoch(uint256)"; + functionSignatures[22] = "getValidatorsStructsInNextEpoch(uint256)"; + functionSignatures[23] = "getTotalStake(address)"; + functionSignatures[24] = "getTotalStakeByUser(address,address)"; + functionSignatures[25] = "getNodeStakerAddressMappings(address[])"; + functionSignatures[26] = "getNodeAttestedPubKeyMappings(address[])"; + functionSignatures[ + 27 ] = "countOfCurrentValidatorsReadyForNextEpoch(uint256)"; functionSignatures[ - 29 + 28 ] = "countOfNextValidatorsReadyForNextEpoch(uint256)"; - functionSignatures[30] = "isReadyForNextEpoch(uint256)"; - functionSignatures[31] = "shouldKickValidator(uint256,address)"; - functionSignatures[32] = "currentValidatorCountForConsensus(uint256)"; - functionSignatures[33] = "isRecentValidator(uint256,address)"; - functionSignatures[34] = "nextValidatorCountForConsensus(uint256)"; - functionSignatures[35] = "getKickedValidators(uint256)"; - functionSignatures[36] = "getActiveUnkickedValidators(uint256)"; - functionSignatures[37] = "getStakeRecordCount(address,address)"; - functionSignatures[38] = "getValidatorsDelegated(address)"; - functionSignatures[39] = "getStakeRecordsForUser(address,address)"; - functionSignatures[40] = "getActiveUnkickedValidatorCount(uint256)"; - functionSignatures[41] = "getActiveUnkickedValidatorStructs(uint256)"; - functionSignatures[ - 42 + functionSignatures[29] = "isReadyForNextEpoch(uint256)"; + functionSignatures[30] = "shouldKickValidator(uint256,address)"; + functionSignatures[31] = "currentValidatorCountForConsensus(uint256)"; + functionSignatures[32] = "isRecentValidator(uint256,address)"; + functionSignatures[33] = "nextValidatorCountForConsensus(uint256)"; + functionSignatures[34] = "getKickedValidators(uint256)"; + functionSignatures[35] = "getActiveUnkickedValidators(uint256)"; + functionSignatures[36] = "getStakeRecordCount(address,address)"; + functionSignatures[37] = "getValidatorsDelegated(address)"; + functionSignatures[38] = "getStakeRecordsForUser(address,address)"; + functionSignatures[39] = "getActiveUnkickedValidatorCount(uint256)"; + functionSignatures[40] = "getActiveUnkickedValidatorStructs(uint256)"; + functionSignatures[ + 41 ] = "getActiveUnkickedValidatorStructsAndCounts(uint256)"; functionSignatures[ - 43 + 42 ] = "getTimelockInEpoch(address,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,address),uint256)"; functionSignatures[ - 44 + 43 ] = "getStakeWeightInEpoch(address,uint256,address,uint256)"; - functionSignatures[45] = "calculateStakeWeight(uint256,uint256)"; + functionSignatures[44] = "calculateStakeWeight(uint256,uint256)"; functionSignatures[ - 46 + 45 ] = "getTokensStaked(address,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,address),uint256)"; - functionSignatures[47] = "getRewardEpochNumber(uint256)"; - functionSignatures[48] = "pow(uint256,uint256)"; + functionSignatures[46] = "getRewardEpochNumber(uint256)"; + functionSignatures[47] = "pow(uint256,uint256)"; functionSignatures[ - 49 + 48 ] = "calculateRewardsPerDay((uint256,uint256,address[],uint256))"; - functionSignatures[50] = "getLitCirc()"; - functionSignatures[51] = "getStakeRecord(address,uint256,address)"; + functionSignatures[49] = "getLitCirc()"; + functionSignatures[50] = "getStakeRecord(address,uint256,address)"; functionSignatures[ - 52 + 51 ] = "validatorSelfStakeWillExpire(uint256,address,bool)"; - functionSignatures[53] = "getRewardEpochGlobalStats(uint256)"; - functionSignatures[54] = "getTokenPrice()"; - functionSignatures[55] = "minSelfStake()"; - functionSignatures[56] = "minStake()"; - functionSignatures[57] = "maxStake()"; - functionSignatures[58] = "minTimeLock()"; - functionSignatures[59] = "maxTimeLock()"; - functionSignatures[60] = "getLowestRewardEpochNumber()"; - functionSignatures[61] = "getAllReserveValidators()"; - functionSignatures[62] = "getAllValidators()"; - functionSignatures[63] = "getSelfStakeRecordCount(address)"; - functionSignatures[64] = "permittedValidators(uint256)"; - functionSignatures[65] = "permittedRealmsForValidator(address)"; - functionSignatures[66] = "stakerToValidatorsTheyStakedTo(address)"; - functionSignatures[67] = "operatorAddressToStakerAddress(address)"; - functionSignatures[ - 68 + functionSignatures[52] = "getRewardEpochGlobalStats(uint256)"; + functionSignatures[53] = "getTokenPrice()"; + functionSignatures[54] = "minSelfStake()"; + functionSignatures[55] = "minStake()"; + functionSignatures[56] = "maxStake()"; + functionSignatures[57] = "minTimeLock()"; + functionSignatures[58] = "maxTimeLock()"; + functionSignatures[59] = "getLowestRewardEpochNumber()"; + functionSignatures[60] = "getAllReserveValidators()"; + functionSignatures[61] = "getAllValidators()"; + functionSignatures[62] = "getSelfStakeRecordCount(address)"; + functionSignatures[63] = "permittedValidators(uint256)"; + functionSignatures[64] = "permittedRealmsForValidator(address)"; + functionSignatures[65] = "stakerToValidatorsTheyStakedTo(address)"; + functionSignatures[66] = "operatorAddressToStakerAddress(address)"; + functionSignatures[ + 67 ] = "getDelegatedStakersWithUnfreezingStakes(address,uint256,uint256)"; functionSignatures[ - 69 + 68 ] = "getDelegatedStakersWithUnfreezingStakesCount(address)"; functionSignatures[ - 70 + 69 ] = "getUnfrozenStakeCountForUser(address,address)"; return functionSignatures; } @@ -210,7 +209,7 @@ contract FunctionSelectorHelper { functionSignatures[15] = "decreaseRewardPool(uint256,uint256)"; functionSignatures[ 16 - ] = "setConfig((uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))"; + ] = "setConfig((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))"; functionSignatures[ 17 ] = "setComplaintConfig(uint256,(uint256,uint256,uint256,uint256))"; diff --git a/blockchain/contracts/contracts/lit-node/Staking/LibStakingStorage.sol b/blockchain/contracts/contracts/lit-node/Staking/LibStakingStorage.sol index 3f9e931..41e7cef 100644 --- a/blockchain/contracts/contracts/lit-node/Staking/LibStakingStorage.sol +++ b/blockchain/contracts/contracts/lit-node/Staking/LibStakingStorage.sol @@ -206,7 +206,7 @@ library LibStakingStorage { uint256[] curves; uint256[] counts; /// Set when the recovery DKG completes for the key set - address[] recoveryPartyMembers; + bytes recoverySessionId; } struct RealmConfig { @@ -222,14 +222,14 @@ library LibStakingStorage { uint256 minEpochForRewards; /// @notice Whether the validator set allows for an allowlist of operators to join the validator set. bool permittedValidatorsOn; + /// The default key set identifier to use if the realm has more than one + /// This allows the realm to operate without asking this value from clients + /// for some operations like session keys and sign as action + string defaultKeySet; } struct GlobalConfig { uint256 tokenRewardPerTokenPerEpoch; - // the key type of the node. // 1 = BLS, 2 = ECDSA. Not doing this in an enum so we can add more keytypes in the future without redeploying. - uint256[] keyTypes; - // don't start the DKG or let nodes leave the validator set - // if there are less than this many nodes uint256 minimumValidatorCount; /// @notice Keep this the same as the epoch length for now. uint256 rewardEpochDuration; diff --git a/blockchain/contracts/contracts/lit-node/Staking/StakingAcrossRealmsFacet.sol b/blockchain/contracts/contracts/lit-node/Staking/StakingAcrossRealmsFacet.sol index 11207a7..4731a73 100644 --- a/blockchain/contracts/contracts/lit-node/Staking/StakingAcrossRealmsFacet.sol +++ b/blockchain/contracts/contracts/lit-node/Staking/StakingAcrossRealmsFacet.sol @@ -6,6 +6,7 @@ import { ContractResolver } from "../../lit-core/ContractResolver.sol"; import { LibDiamond } from "../../libraries/LibDiamond.sol"; import { StakingViewsFacet } from "./StakingViewsFacet.sol"; import { LibStakingStorage } from "./LibStakingStorage.sol"; +import { StakingUtilsLib } from "./StakingUtilsLib.sol"; import "hardhat/console.sol"; contract StakingAcrossRealmsFacet { @@ -24,6 +25,18 @@ contract StakingAcrossRealmsFacet { return LibStakingStorage.getStakingStorage(); } + modifier onlyOwner() { + if (msg.sender != LibDiamond.contractOwner()) + revert StakingUtilsLib.CallerNotOwner(); + _; + } + + function realm( + uint256 realmId + ) internal view returns (LibStakingStorage.RealmStorage storage) { + return LibStakingStorage.getRealmStorage(realmId); + } + function numRealms() public view returns (uint256) { return s().realmIds.length(); } @@ -169,4 +182,21 @@ contract StakingAcrossRealmsFacet { ) public view returns (LibStakingStorage.Validator memory) { return s().validators[stakerAddress]; } + + function setRealmConfig( + uint256 realmId, + LibStakingStorage.RealmConfig memory newConfig + ) external onlyOwner { + LibStakingStorage.RealmConfig storage config = realm(realmId) + .realm_configs[0]; + config.maxConcurrentRequests = newConfig.maxConcurrentRequests; + config.maxPresignCount = newConfig.maxPresignCount; + config.minPresignCount = newConfig.minPresignCount; + config.peerCheckingIntervalSecs = newConfig.peerCheckingIntervalSecs; + config.maxPresignConcurrency = newConfig.maxPresignConcurrency; + config.rpcHealthcheckEnabled = newConfig.rpcHealthcheckEnabled; + config.minEpochForRewards = newConfig.minEpochForRewards; + config.permittedValidatorsOn = newConfig.permittedValidatorsOn; + config.defaultKeySet = newConfig.defaultKeySet; + } } diff --git a/blockchain/contracts/contracts/lit-node/Staking/StakingAdminFacet.sol b/blockchain/contracts/contracts/lit-node/Staking/StakingAdminFacet.sol index 759d14d..d9b49a5 100644 --- a/blockchain/contracts/contracts/lit-node/Staking/StakingAdminFacet.sol +++ b/blockchain/contracts/contracts/lit-node/Staking/StakingAdminFacet.sol @@ -16,6 +16,7 @@ import "hardhat/console.sol"; contract StakingAdminFacet is StakingCommon { using EnumerableSet for EnumerableSet.AddressSet; + /* ========== Modifier Equivalents ========== */ /* ========== Modifier Equivalents ========== */ function onlyOwner() internal view { @@ -244,24 +245,7 @@ contract StakingAdminFacet is StakingCommon { realmStorage.validatorsInNextEpoch.add(validatorsForNextEpoch[i]); } } - - function setRealmConfig( - uint256 realmId, - LibStakingStorage.RealmConfig memory newConfig - ) external { - onlyOwner(); - LibStakingStorage.RealmConfig storage config = realm(realmId) - .realm_configs[0]; - config.maxConcurrentRequests = newConfig.maxConcurrentRequests; - config.maxPresignCount = newConfig.maxPresignCount; - config.minPresignCount = newConfig.minPresignCount; - config.peerCheckingIntervalSecs = newConfig.peerCheckingIntervalSecs; - config.maxPresignConcurrency = newConfig.maxPresignConcurrency; - config.rpcHealthcheckEnabled = newConfig.rpcHealthcheckEnabled; - config.minEpochForRewards = newConfig.minEpochForRewards; - config.permittedValidatorsOn = newConfig.permittedValidatorsOn; - } - + function adminSlashValidator( uint256 percentage, address stakerAddress @@ -318,7 +302,6 @@ contract StakingAdminFacet is StakingCommon { .globalConfig[0]; config.tokenRewardPerTokenPerEpoch = newConfig .tokenRewardPerTokenPerEpoch; - config.keyTypes = newConfig.keyTypes; config.minimumValidatorCount = newConfig.minimumValidatorCount; // thunderhead @@ -374,7 +357,8 @@ contract StakingAdminFacet is StakingCommon { maxPresignConcurrency: 2, rpcHealthcheckEnabled: true, minEpochForRewards: 3, - permittedValidatorsOn: false + permittedValidatorsOn: false, + defaultKeySet: "" }); uint256 epochLengthSeconds = 1 seconds; diff --git a/blockchain/contracts/contracts/lit-node/Staking/StakingKeySetsFacet.sol b/blockchain/contracts/contracts/lit-node/Staking/StakingKeySetsFacet.sol index 0512a5a..e492761 100644 --- a/blockchain/contracts/contracts/lit-node/Staking/StakingKeySetsFacet.sol +++ b/blockchain/contracts/contracts/lit-node/Staking/StakingKeySetsFacet.sol @@ -120,6 +120,7 @@ contract StakingKeySetsFacet { config.description = update.description; config.realms = update.realms; config.minimumThreshold = update.minimumThreshold; + config.recoverySessionId = update.recoverySessionId; emit KeySetConfigUpdated(update.identifier); } else { @@ -141,8 +142,8 @@ contract StakingKeySetsFacet { gs.keySetsConfigs[keySetId].realms = update.realms; gs.keySetsConfigs[keySetId].curves = update.curves; gs.keySetsConfigs[keySetId].counts = update.counts; - gs.keySetsConfigs[keySetId].recoveryPartyMembers = update - .recoveryPartyMembers; + gs.keySetsConfigs[keySetId].recoverySessionId = update + .recoverySessionId; for (uint i = 0; i < update.curves.length; i++) { require(update.counts[i] > 0, "key counts cannot be set to 0"); gs.keySetKeyCounts[keySetId][update.curves[i]] = update.counts[ @@ -188,7 +189,9 @@ contract StakingKeySetsFacet { for (uint i = 0; i < config.counts.length; i++) { delete gs.keySetKeyCounts[keySetId][config.curves[i]]; } - // TODO: delete the root keys from the pub key router + // Delete the root keys from the pub key router + LibPubkeyRouterStorage.PubkeyRouterStorage storage ps = pubkeyRouter(); + delete ps.rootKeys[address(this)][keySetId]; } event KeySetConfigSet(bool exists, string identifier, bytes32 hashed); diff --git a/blockchain/contracts/contracts/lit-node/Staking/StakingValidatorFacet.sol b/blockchain/contracts/contracts/lit-node/Staking/StakingValidatorFacet.sol index b2607a7..e5e302a 100644 --- a/blockchain/contracts/contracts/lit-node/Staking/StakingValidatorFacet.sol +++ b/blockchain/contracts/contracts/lit-node/Staking/StakingValidatorFacet.sol @@ -1086,17 +1086,6 @@ contract StakingValidatorFacet { event StakingTokenSet(address newStakingTokenAddress); event KickPenaltyPercentSet(uint256 reason, uint256 newKickPenaltyPercent); event ResolverContractAddressSet(address newResolverContractAddress); - event ConfigSet( - uint256 newTokenRewardPerTokenPerEpoch, - uint256[] newKeyTypes, - uint256 newMinimumValidatorCount, - uint256 newMaxConcurrentRequests, - uint256 newMaxPresignCount, - uint256 newMinPresignCount, - uint256 newPeerCheckingIntervalSecs, - uint256 newMaxPresignConcurrency, - bool newRpcHealthcheckEnabled - ); event ComplaintConfigSet( uint256 reason, LibStakingStorage.ComplaintConfig config diff --git a/blockchain/contracts/contracts/lit-node/Staking/StakingViewsFacet.sol b/blockchain/contracts/contracts/lit-node/Staking/StakingViewsFacet.sol index 5febf11..7617cec 100644 --- a/blockchain/contracts/contracts/lit-node/Staking/StakingViewsFacet.sol +++ b/blockchain/contracts/contracts/lit-node/Staking/StakingViewsFacet.sol @@ -76,10 +76,6 @@ contract StakingViewsFacet { return s().complaintReasonToConfig[reason]; } - function getKeyTypes() external view returns (uint256[] memory) { - return s().globalConfig[0].keyTypes; - } - function contractResolver() external view returns (address) { return address(s().contractResolver); } diff --git a/blockchain/contracts/hardhat.config.ts b/blockchain/contracts/hardhat.config.ts index 6df2440..8d9aff6 100644 --- a/blockchain/contracts/hardhat.config.ts +++ b/blockchain/contracts/hardhat.config.ts @@ -337,6 +337,7 @@ const config: HardhatUserConfig = { include: [ 'OwnershipFacet', 'PubkeyRouterFacet', + 'PubkeyRouterViewsFacet', 'DiamondCutFacet', 'DiamondLoupeFacet', ], diff --git a/blockchain/contracts/scripts/deployConfig/configs/ci-config.json b/blockchain/contracts/scripts/deployConfig/configs/ci-config.json index 011ffe7..5ab775d 100644 --- a/blockchain/contracts/scripts/deployConfig/configs/ci-config.json +++ b/blockchain/contracts/scripts/deployConfig/configs/ci-config.json @@ -35,10 +35,6 @@ "127.0.0.1:7491", "127.0.0.1:7492", "127.0.0.1:7493" - ], - "keyTypes": [ - 1, - 2 ] }, "deployCoreConfig": { diff --git a/blockchain/contracts/scripts/deployConfig/configs/three-local-nodes.json b/blockchain/contracts/scripts/deployConfig/configs/three-local-nodes.json index 2d9b0e3..d9dabbf 100644 --- a/blockchain/contracts/scripts/deployConfig/configs/three-local-nodes.json +++ b/blockchain/contracts/scripts/deployConfig/configs/three-local-nodes.json @@ -16,10 +16,6 @@ "127.0.0.1:7471", "127.0.0.1:7472" ], - "keyTypes": [ - 1, - 2 - ], "backupRecoveryAddresses": [], "backupRecoveryKeys": [], "verifyContracts": true diff --git a/blockchain/contracts/scripts/deployConfig/deployNodeConfig.ts b/blockchain/contracts/scripts/deployConfig/deployNodeConfig.ts index 553a2c1..4d51b22 100644 --- a/blockchain/contracts/scripts/deployConfig/deployNodeConfig.ts +++ b/blockchain/contracts/scripts/deployConfig/deployNodeConfig.ts @@ -33,8 +33,6 @@ export async function askDeployNodeConfig( const numberOfStakedAndJoinedWallets = await askForNumberOfStakedAndJoinedWallets(); - const keyTypes = await askForKeyTypes(); - const ipAddresses = ( await askForIpAddresses( numberOfStakedAndJoinedWallets + numberOfStakedOnlyWallets @@ -64,7 +62,6 @@ export async function askDeployNodeConfig( copyNodeConfigsToRustProject, ipAddresses, existingContracts, - keyTypes, backupRecoveryAddresses: bpAddresses, backupRecoveryKeys: bpKeys, }; @@ -73,49 +70,6 @@ export async function askDeployNodeConfig( } const SUPPORTED_KEY_TYPES = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']; -async function askForKeyTypes(): Promise { - const promptResult = await inquirer.prompt([ - { - type: 'input', - name: 'keyTypes', - message: `Enter the key types you would like to use, separated by commas.\n - 1 - BLS-Encryption, - 2 - Secp256k1, - 3 - Ed25519 - 4 - Ed448 - 5 - Ristretto25519 - 6 - NistP256 - 7 - NistP384 - 8 - BabyJubJub - 9 - Decaf377 - 10 - BLS-Signing - `, - validate: (input) => { - try { - const keyTypes = input.split(','); - if (keyTypes.length === 0) { - return `Please enter at least one key type`; - } - - for (const keyType of keyTypes) { - if (!SUPPORTED_KEY_TYPES.includes(keyType)) { - return `Key type ${keyType} is not supported`; - } - } - } catch (e) { - return `Error parsing input: ${e}`; - } - return true; - }, - default: SUPPORTED_KEY_TYPES.join(','), - }, - ]); - - return promptResult.keyTypes - .split(',') - .map((keyType: string) => parseInt(keyType)); -} - async function askForExistingContractAddresses(): Promise { const existingAddresses = await inquirer.prompt([ { diff --git a/blockchain/contracts/scripts/deployConfig/models.ts b/blockchain/contracts/scripts/deployConfig/models.ts index b20e56b..ca4bb38 100644 --- a/blockchain/contracts/scripts/deployConfig/models.ts +++ b/blockchain/contracts/scripts/deployConfig/models.ts @@ -27,7 +27,6 @@ export interface DeployNodeConfig extends DeployBaseConfig { copyNodeConfigsToRustProject: boolean; ipAddresses?: string[]; existingContracts?: Partial; - keyTypes: number[]; nodePrivateKeys?: string[]; chainPollingInterval?: string; customNodeRuntimeConfigPath?: string; diff --git a/blockchain/contracts/scripts/deploy_lit_node_contracts.js b/blockchain/contracts/scripts/deploy_lit_node_contracts.js index 499a91b..aa70a18 100644 --- a/blockchain/contracts/scripts/deploy_lit_node_contracts.js +++ b/blockchain/contracts/scripts/deploy_lit_node_contracts.js @@ -240,7 +240,7 @@ async function deployLitNodeContracts(deployNodeConfig) { 'PubkeyRouter', [deployNodeConfig.resolverContractAddress, deployEnvEnum], true, - ['PubkeyRouterFacet'], + ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], false, deployNodeConfig.verifyContracts ); @@ -548,7 +548,7 @@ async function deployLitNodeContracts(deployNodeConfig) { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }; tx = await stakingContract.setKeySet(defaultKeysetConfig); await tx.wait(); diff --git a/blockchain/contracts/test/domain-wallets/DomainWalletRegistry.ts b/blockchain/contracts/test/domain-wallets/DomainWalletRegistry.ts index fbe97fc..dcf91a3 100644 --- a/blockchain/contracts/test/domain-wallets/DomainWalletRegistry.ts +++ b/blockchain/contracts/test/domain-wallets/DomainWalletRegistry.ts @@ -10,6 +10,7 @@ import { PKPNFTFacet, PKPPermissionsFacet, PubkeyRouterFacet, + PubkeyRouterViewsFacet, StakingAdminFacet, StakingFacet, StakingKeySetsFacet, @@ -36,6 +37,7 @@ describe('DomainWalletRegistry', function () { let pkpPermissionsFacet: PKPPermissionsFacet; let pkpNftMetadata: PKPNFTMetadata; let pubkeyRouter: PubkeyRouterFacet; + let pubkeyRouterViews: PubkeyRouterViewsFacet; let keyDeriver: KeyDeriver; let domainWalletRegistryFacet: DomainWalletRegistryFacet; let domainWalletRegistryViewsFacet: DomainWalletRegistryViewsFacet; @@ -129,7 +131,7 @@ describe('DomainWalletRegistry', function () { await contractResolver.getAddress(), Environment.DEV, { - additionalFacets: ['PubkeyRouterFacet'], + additionalFacets: ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], verifyContracts: false, waitForDeployment: false, } @@ -139,6 +141,10 @@ describe('DomainWalletRegistry', function () { 'PubkeyRouterFacet', await pubkeyRouterDiamond.getAddress() ); + pubkeyRouterViews = await ethers.getContractAt( + 'PubkeyRouterViewsFacet', + await pubkeyRouterDiamond.getAddress() + ); keyDeriver = await ethers.deployContract('KeyDeriver'); @@ -192,6 +198,7 @@ describe('DomainWalletRegistry', function () { pkpPermissionsContract: pkpPermissionsFacet, pkpNftMetadataContract: pkpNftMetadata, pubkeyRouterContract: pubkeyRouter, + pubkeyRouterViewsContract: pubkeyRouterViews, hdKeyDeriverContract: keyDeriver, stakingContract: stakingFacet, tokenContract: token, @@ -206,7 +213,7 @@ describe('DomainWalletRegistry', function () { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }); // Mint enough tokens for the deployer diff --git a/blockchain/contracts/test/lit-node/BackupRecovery.js b/blockchain/contracts/test/lit-node/BackupRecovery.js index bc90900..fd27a19 100644 --- a/blockchain/contracts/test/lit-node/BackupRecovery.js +++ b/blockchain/contracts/test/lit-node/BackupRecovery.js @@ -138,7 +138,7 @@ describe('BackupRecovery', function () { await contractResolver.getAddress(), Environment.DEV, { - additionalFacets: ['PubkeyRouterFacet'], + additionalFacets: ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], verifyContracts: false, waitForDeployment: false, } @@ -202,7 +202,7 @@ describe('BackupRecovery', function () { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }); await token.mint(deployer.address, totalTokens); @@ -451,7 +451,11 @@ describe('BackupRecovery', function () { stakingAccounts[backupPartyCount].nodeAddress ); await expect( - backupContract.registerRecoveryKeys([blsKey, ecdsaKey], sessionId) + backupContract.registerRecoveryKeys( + [blsKey, ecdsaKey], + sessionId, + 'naga-keyset1' + ) ).to.be.revertedWith( 'BackupRecovery: not a member of the Recovery DKG peer group' ); @@ -464,7 +468,8 @@ describe('BackupRecovery', function () { const tx = await backupContract.registerRecoveryKeys( [blsKey, ecdsaKey], - sessionId + sessionId, + 'naga-keyset1' ); await tx.wait(); @@ -476,7 +481,11 @@ describe('BackupRecovery', function () { stakingAccounts[0].nodeAddress ); await expect( - backupContract.registerRecoveryKeys([blsKey, ecdsaKey], sessionId) + backupContract.registerRecoveryKeys( + [blsKey, ecdsaKey], + sessionId, + 'naga-keyset1' + ) ).to.be.revertedWith( 'BackupRecovery: validator has already voted for this recovery key' ); @@ -487,7 +496,8 @@ describe('BackupRecovery', function () { ); tx = await backupContract.registerRecoveryKeys( [blsKey, ecdsaKey], - sessionId + sessionId, + 'naga-keyset1' ); await tx.wait(); expect(await backupRecoveryContract.isRecoveryDkgCompleted()).to.be.true; @@ -497,7 +507,11 @@ describe('BackupRecovery', function () { stakingAccounts[0].nodeAddress ); await expect( - backupContract.registerRecoveryKeys([blsKey, ecdsaKey], sessionId) + backupContract.registerRecoveryKeys( + [blsKey, ecdsaKey], + sessionId, + 'naga-keyset1' + ) ).to.be.revertedWith( 'BackupRecovery: recovery keys already set for this Recovery DKG' ); diff --git a/blockchain/contracts/test/lit-node/PKPHelper.js b/blockchain/contracts/test/lit-node/PKPHelper.js index 464914b..9b089c4 100644 --- a/blockchain/contracts/test/lit-node/PKPHelper.js +++ b/blockchain/contracts/test/lit-node/PKPHelper.js @@ -15,6 +15,7 @@ describe('PKPHelper', function () { let signers; let pkpContract; let router; + let routerViews; let pkpHelper; let pkpPermissionsDiamond; let pkpPermissions; @@ -54,7 +55,7 @@ describe('PKPHelper', function () { await contractResolver.getAddress(), Environment.DEV, { - additionalFacets: ['PubkeyRouterFacet'], + additionalFacets: ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], verifyContracts: false, waitForDeployment: false, } @@ -64,6 +65,10 @@ describe('PKPHelper', function () { 'PubkeyRouterFacet', await routerDiamond.getAddress() ); + routerViews = await ethers.getContractAt( + 'PubkeyRouterViewsFacet', + await routerDiamond.getAddress() + ); deployResult = await deployDiamond( 'PKPPermissions', @@ -131,6 +136,7 @@ describe('PKPHelper', function () { pkpPermissionsContract: pkpPermissions, hdKeyDeriverContract: keyDeriver, pubkeyRouterContract: router, + pubkeyRouterViewsContract: routerViews, }); // Mint enough tokens for the deployer @@ -161,7 +167,7 @@ describe('PKPHelper', function () { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }); await allNodesVoteForRootKeys( diff --git a/blockchain/contracts/test/lit-node/PKPNFT.js b/blockchain/contracts/test/lit-node/PKPNFT.js index 0af6d78..8a5aefe 100644 --- a/blockchain/contracts/test/lit-node/PKPNFT.js +++ b/blockchain/contracts/test/lit-node/PKPNFT.js @@ -14,6 +14,7 @@ describe('PKPNFT', function () { let signers; let pkpContract; let router; + let routerViews; let pkpPermissions; let pkpNftMetadata; let contractResolver; @@ -63,7 +64,7 @@ describe('PKPNFT', function () { await contractResolver.getAddress(), Environment.DEV, { - additionalFacets: ['PubkeyRouterFacet'], + additionalFacets: ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], verifyContracts: false, waitForDeployment: false, } @@ -72,6 +73,10 @@ describe('PKPNFT', function () { 'PubkeyRouterFacet', await routerDiamond.getAddress() ); + routerViews = await ethers.getContractAt( + 'PubkeyRouterViewsFacet', + await routerDiamond.getAddress() + ); const { diamond: pkpPermissionsDiamond } = await deployDiamond( 'PKPPermissions', await contractResolver.getAddress(), @@ -155,6 +160,7 @@ describe('PKPNFT', function () { pkpNftMetadataContract: pkpNftMetadata, hdKeyDeriverContract: keyDeriver, pubkeyRouterContract: router, + pubkeyRouterViewsContract: routerViews, stylusContractP256: supportsArbitrumStylus(hre.network.config) ? hre.network.config.stylusContractsForTests.p256 : undefined, @@ -172,7 +178,7 @@ describe('PKPNFT', function () { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }); // Mint enough tokens for the deployer diff --git a/blockchain/contracts/test/lit-node/PKPPermissions.js b/blockchain/contracts/test/lit-node/PKPPermissions.js index 815e05e..bf51952 100644 --- a/blockchain/contracts/test/lit-node/PKPPermissions.js +++ b/blockchain/contracts/test/lit-node/PKPPermissions.js @@ -17,6 +17,7 @@ describe('PKPPermissions', function () { let signers; let pkpContract; let router; + let routerViews; let pkpHelper; let pkpPermissionsDiamond; let pkpPermissions; @@ -58,7 +59,7 @@ describe('PKPPermissions', function () { await contractResolver.getAddress(), Environment.DEV, { - additionalFacets: ['PubkeyRouterFacet'], + additionalFacets: ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], verifyContracts: false, waitForDeployment: false, } @@ -68,6 +69,10 @@ describe('PKPPermissions', function () { 'PubkeyRouterFacet', await routerDiamond.getAddress() ); + routerViews = await ethers.getContractAt( + 'PubkeyRouterViewsFacet', + await routerDiamond.getAddress() + ); deployResult = await deployDiamond( 'PKPPermissions', await contractResolver.getAddress(), @@ -142,6 +147,7 @@ describe('PKPPermissions', function () { pkpPermissionsContract: pkpPermissions, hdKeyDeriverContract: keyDeriver, pubkeyRouterContract: router, + pubkeyRouterViewsContract: routerViews, }); await stakingKeySetsFacet.setKeySet({ @@ -153,7 +159,7 @@ describe('PKPPermissions', function () { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }); // Mint enough tokens for the deployer @@ -194,6 +200,7 @@ describe('PKPPermissions', function () { [creator, tester, randomAccountWithGas, ...signers] = signers; router = await router.connect(deployer); + routerViews = await routerViews.connect(deployer); // mint the PKP to the tester account pkpContract = await pkpContract.connect(tester); @@ -212,7 +219,7 @@ describe('PKPPermissions', function () { // validate that it was set const [pubkeyAfter, keyTypeAfter, _derivedKeyIdAfter] = - await router.getRoutingData(tokenId); + await routerViews.getRoutingData(tokenId); expect(pubkeyAfter).equal(pubkey); expect(keyTypeAfter).equal(2); diff --git a/blockchain/contracts/test/lit-node/PubkeyRouter.js b/blockchain/contracts/test/lit-node/PubkeyRouter.js index 9f712b8..18a7d4d 100644 --- a/blockchain/contracts/test/lit-node/PubkeyRouter.js +++ b/blockchain/contracts/test/lit-node/PubkeyRouter.js @@ -18,6 +18,7 @@ describe('PubkeyRouter', function () { let pkpContract; let routerDiamond; let router; + let routerViews; let pkpHelper; let pkpPermissions; let pkpPermissionsDiamond; @@ -57,7 +58,7 @@ describe('PubkeyRouter', function () { await contractResolver.getAddress(), Environment.DEV, { - additionalFacets: ['PubkeyRouterFacet'], + additionalFacets: ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], verifyContracts: false, waitForDeployment: false, } @@ -67,6 +68,10 @@ describe('PubkeyRouter', function () { 'PubkeyRouterFacet', await routerDiamond.getAddress() ); + routerViews = await ethers.getContractAt( + 'PubkeyRouterViewsFacet', + await routerDiamond.getAddress() + ); deployResult = await deployDiamond( 'PKPPermissions', await contractResolver.getAddress(), @@ -151,7 +156,7 @@ describe('PubkeyRouter', function () { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }); // Mint enough tokens for the deployer @@ -178,7 +183,7 @@ describe('PubkeyRouter', function () { [deployer, ...signers] = signers; // vote for the root keys - let existingRootKeys = await router.getRootKeys( + let existingRootKeys = await routerViews.getRootKeys( await staking.getAddress(), 'naga-keyset1' ); @@ -216,15 +221,15 @@ describe('PubkeyRouter', function () { context('when routing data is unset', async () => { beforeEach(async () => { router = router.connect(deployer); + routerViews = routerViews.connect(deployer); }); it('retrieves empty routing data', async () => { const fakePubkey = '0x0443d46287aa31a62f8319438b6210e169fd9e686a11fad81f6cf375e84ed9ba38a3909e41cc52c0c2f2ad95b4cf32982a6295e410b1ff6d455a7c7a4c44463f48'; const pubkeyHash = ethers.keccak256(fakePubkey); - const [pubkey, stakingContract, keyType] = await router.getRoutingData( - pubkeyHash - ); + const [pubkey, stakingContract, keyType] = + await routerViews.getRoutingData(pubkeyHash); expect(pubkey).equal('0x'); expect(stakingContract).equal( '0x0000000000000000000000000000000000000000' @@ -247,9 +252,10 @@ describe('PubkeyRouter', function () { [creator, tester, ...signers] = signers; router = await router.connect(deployer); + routerViews = await routerViews.connect(deployer); // vote for the root keys - let existingRootKeys = await router.getRootKeys( + let existingRootKeys = await routerViews.getRootKeys( await staking.getAddress(), 'naga-keyset1' ); @@ -283,7 +289,7 @@ describe('PubkeyRouter', function () { // validate that it was set const [pubkeyAfter, keyTypeAfter, _derivedKeyIdAfter] = - await router.getRoutingData(tokenId); + await routerViews.getRoutingData(tokenId); expect(pubkeyAfter).equal(pubkey); expect(keyTypeAfter).equal(2); @@ -294,20 +300,20 @@ describe('PubkeyRouter', function () { it('checks the PKP eth address and the reverse mapping', async () => { // validate that the address matches what ethers calculates const ethersResult = ethers.computeAddress(pubkey); - const pubkeyFromContract = await router.getPubkey(tokenId); - let ethAddressOfPKP = await router.getEthAddress(tokenId); + const pubkeyFromContract = await routerViews.getPubkey(tokenId); + let ethAddressOfPKP = await routerViews.getEthAddress(tokenId); expect(ethAddressOfPKP).equal(ethersResult); expect(pubkey).equal(pubkeyFromContract); // check the reverse mapping - const tokenIdFromContract = await router.ethAddressToPkpId( + const tokenIdFromContract = await routerViews.ethAddressToPkpId( ethAddressOfPKP ); expect(tokenIdFromContract).equal(tokenId); }); it('gets and sets root keys', async () => { - const fetchedRootKeys = await router.getRootKeys( + const fetchedRootKeys = await routerViews.getRootKeys( await staking.getAddress(), 'naga-keyset1' ); diff --git a/blockchain/contracts/test/lit-node/Staking.js b/blockchain/contracts/test/lit-node/Staking.js index 507b32a..2ed365a 100644 --- a/blockchain/contracts/test/lit-node/Staking.js +++ b/blockchain/contracts/test/lit-node/Staking.js @@ -19,6 +19,7 @@ describe('Staking', function () { let signers; let token; let routerContract; + let routerViews; let pkpNft; let stakingAccount1; let nodeAccount1; @@ -139,7 +140,7 @@ describe('Staking', function () { await contractResolver.getAddress(), 0, { - additionalFacets: ['PubkeyRouterFacet'], + additionalFacets: ['PubkeyRouterFacet', 'PubkeyRouterViewsFacet'], verifyContracts: false, waitForDeployment: false, } @@ -149,6 +150,10 @@ describe('Staking', function () { 'PubkeyRouterFacet', await routerDiamond.getAddress() ); + routerViews = await ethers.getContractAt( + 'PubkeyRouterViewsFacet', + await routerDiamond.getAddress() + ); // Deploy forwarder contract and set on Staking const forwarder = await ethers.deployContract('Forwarder'); @@ -159,6 +164,7 @@ describe('Staking', function () { stakingContract: stakingValidatorFacet, pkpContract: pkpNft, pubkeyRouterContract: routerContract, + pubkeyRouterViewsContract: routerViews, }); await stakingKeySetsFacet.setKeySet({ @@ -170,7 +176,7 @@ describe('Staking', function () { realms: [1], curves: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], counts: [1, 2, 2, 2, 2, 2, 2, 2, 2, 2], - recoveryPartyMembers: [], + recoverySessionId: '0x', }); await token.mint(deployer.address, totalTokens); @@ -1309,7 +1315,6 @@ describe('Staking', function () { await expect( stakingAdminFacet.setConfig({ tokenRewardPerTokenPerEpoch: 1, - keyTypes: [1, 2, 3], minimumValidatorCount: 1, rewardEpochDuration: 1, maxTimeLock: 1, @@ -1552,7 +1557,6 @@ async function updateMinimumValidatorCount( await stakingAdminFacet.setConfig({ tokenRewardPerTokenPerEpoch: currentConfig.tokenRewardPerTokenPerEpoch, - keyTypes: [...(await stakingViewsFacet.getKeyTypes())], minimumValidatorCount: newMinimumValidatorCount, rewardEpochDuration: currentConfig.rewardEpochDuration, maxTimeLock: currentConfig.maxTimeLock, diff --git a/blockchain/contracts/utils/contract.ts b/blockchain/contracts/utils/contract.ts index 39b0bd6..c5abec0 100644 --- a/blockchain/contracts/utils/contract.ts +++ b/blockchain/contracts/utils/contract.ts @@ -20,6 +20,7 @@ import { StakingAdminFacet, StakingFacet, Forwarder, + PubkeyRouterViewsFacet, } from '../typechain-types'; import { LITToken } from '../typechain-types/contracts/lit-node/LITToken'; import { ip2int } from './index.js'; @@ -52,6 +53,7 @@ export async function setContractResolver( domainWalletRegistryContract, hdKeyDeriverContract, pubkeyRouterContract, + pubkeyRouterViewsContract, stylusContractP256, stylusContractK256, }: { @@ -65,6 +67,7 @@ export async function setContractResolver( domainWalletRegistryContract?: DomainWalletRegistryFacet; hdKeyDeriverContract?: KeyDeriver; pubkeyRouterContract?: PubkeyRouterFacet; + pubkeyRouterViewsContract?: PubkeyRouterViewsFacet; stylusContractP256?: string; stylusContractK256?: string; } @@ -141,6 +144,14 @@ export async function setContractResolver( ); } + if (pubkeyRouterViewsContract) { + await contractResolver.setContract( + await contractResolver.PUB_KEY_ROUTER_VIEWS_CONTRACT(), + env, + await pubkeyRouterViewsContract.getAddress() + ); + } + if (backupRecoveryContract) { await contractResolver.setContract( await contractResolver.BACKUP_RECOVERY_CONTRACT(), diff --git a/rust/lit-core/Cargo.lock b/rust/lit-core/Cargo.lock index 8018719..b1caed7 100644 --- a/rust/lit-core/Cargo.lock +++ b/rust/lit-core/Cargo.lock @@ -1757,28 +1757,16 @@ dependencies = [ "typenum", ] -[[package]] -name = "bitvec" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" -dependencies = [ - "funty 1.1.0", - "radium 0.6.2", - "tap", - "wyz 0.2.0", -] - [[package]] name = "bitvec" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ - "funty 2.0.0", - "radium 0.7.0", + "funty", + "radium", "tap", - "wyz 0.5.1", + "wyz", ] [[package]] @@ -2385,7 +2373,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ - "bitvec 1.0.1", + "bitvec", "coins-bip32", "hmac 0.12.1", "once_cell", @@ -3593,28 +3581,13 @@ dependencies = [ "uuid 0.8.2", ] -[[package]] -name = "ethabi" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c98847055d934070b90e806e12d3936b787d0a115068981c1d8dfd5dfef5a5" -dependencies = [ - "ethereum-types 0.12.1", - "hex", - "serde", - "serde_json", - "sha3 0.9.1", - "thiserror 1.0.69", - "uint", -] - [[package]] name = "ethabi" version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ - "ethereum-types 0.14.1", + "ethereum-types", "hex", "once_cell", "regex", @@ -3625,19 +3598,6 @@ dependencies = [ "uint", ] -[[package]] -name = "ethbloom" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb684ac8fa8f6c5759f788862bb22ec6fe3cb392f6bfd08e3c64b603661e3f8" -dependencies = [ - "crunchy", - "fixed-hash 0.7.0", - "impl-rlp", - "impl-serde 0.3.2", - "tiny-keccak", -] - [[package]] name = "ethbloom" version = "0.13.0" @@ -3645,40 +3605,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ "crunchy", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", + "impl-serde", "scale-info", "tiny-keccak", ] -[[package]] -name = "ethereum-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05136f7057fe789f06e6d41d07b34e6f70d8c86e5693b60f97aaa6553553bdaf" -dependencies = [ - "ethbloom 0.11.1", - "fixed-hash 0.7.0", - "impl-rlp", - "impl-serde 0.3.2", - "primitive-types 0.10.1", - "uint", -] - [[package]] name = "ethereum-types" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "ethbloom 0.13.0", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "ethbloom", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", - "primitive-types 0.12.2", + "impl-serde", + "primitive-types", "scale-info", "uint", ] @@ -3782,7 +3728,7 @@ dependencies = [ "chrono", "const-hex", "elliptic-curve", - "ethabi 18.0.0", + "ethabi", "generic-array 0.14.7", "k256", "num_enum", @@ -4056,7 +4002,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ - "bitvec 1.0.1", + "bitvec", "rand_core 0.6.4", "subtle", ] @@ -4093,18 +4039,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - [[package]] name = "fixed-hash" version = "0.8.0" @@ -4218,12 +4152,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "funty" version = "2.0.0" @@ -5259,22 +5187,13 @@ dependencies = [ "version_check", ] -[[package]] -name = "impl-codec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" -dependencies = [ - "parity-scale-codec 2.3.1", -] - [[package]] name = "impl-codec" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.7.5", + "parity-scale-codec", ] [[package]] @@ -5286,15 +5205,6 @@ dependencies = [ "rlp", ] -[[package]] -name = "impl-serde" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" -dependencies = [ - "serde", -] - [[package]] name = "impl-serde" version = "0.4.0" @@ -5596,7 +5506,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2c5e88d1ac6a903e693287073860ea35299b200273d5c2bd9d7845ec39f319" dependencies = [ - "bitvec 1.0.1", + "bitvec", "bls12_381_plus", "elliptic-curve", "ff", @@ -5819,7 +5729,7 @@ dependencies = [ "opentelemetry_sdk", "reqwest 0.11.27", "rocket", - "scc 3.3.2", + "scc", "sd-notify", "semver 1.0.26", "serde", @@ -5883,7 +5793,7 @@ dependencies = [ "once_cell", "pretty_assertions", "reqwest 0.11.27", - "scc 2.4.0", + "scc", "serde", "serde_json", "serde_yaml", @@ -6016,7 +5926,7 @@ dependencies = [ "decaf377", "ed25519-dalek", "ed448-goldilocks-plus", - "ethabi 16.0.0", + "ethabi", "ethers", "hd-keys-curves-wasm 1.0.3 (git+https://github.com/LIT-Protocol/hd-keys-curves-wasm)", "hex", @@ -6822,7 +6732,7 @@ dependencies = [ "arrayvec 0.7.6", "auto_impl", "bytes", - "ethereum-types 0.14.1", + "ethereum-types", "open-fastrlp-derive", ] @@ -7051,20 +6961,6 @@ dependencies = [ "group", ] -[[package]] -name = "parity-scale-codec" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" -dependencies = [ - "arrayvec 0.7.6", - "bitvec 0.20.4", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive 2.3.1", - "serde", -] - [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -7072,27 +6968,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec 0.7.6", - "bitvec 1.0.1", + "bitvec", "byte-slice-cast", "const_format", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.7.5", + "parity-scale-codec-derive", "rustversion", "serde", ] -[[package]] -name = "parity-scale-codec-derive" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "parity-scale-codec-derive" version = "3.7.5" @@ -7608,29 +7492,16 @@ dependencies = [ "serdect 0.2.0", ] -[[package]] -name = "primitive-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" -dependencies = [ - "fixed-hash 0.7.0", - "impl-codec 0.5.1", - "impl-rlp", - "impl-serde 0.3.2", - "uint", -] - [[package]] name = "primitive-types" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", + "impl-serde", "scale-info", "uint", ] @@ -7927,12 +7798,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "radium" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" - [[package]] name = "radium" version = "0.7.0" @@ -8487,8 +8352,8 @@ dependencies = [ "num-bigint", "num-integer", "num-traits", - "parity-scale-codec 3.7.5", - "primitive-types 0.12.2", + "parity-scale-codec", + "primitive-types", "proptest", "rand 0.8.5", "rand 0.9.2", @@ -8795,7 +8660,7 @@ checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", "derive_more 1.0.0", - "parity-scale-codec 3.7.5", + "parity-scale-codec", "scale-info-derive", ] @@ -8811,15 +8676,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd 3.0.10", -] - [[package]] name = "scc" version = "3.3.2" @@ -8827,7 +8683,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd0b9e1890c5b17833a779c68a974f04170dfa36e3789395d17845418cc779ac" dependencies = [ "saa", - "sdd 4.2.4", + "sdd", ] [[package]] @@ -8915,12 +8771,6 @@ dependencies = [ "libc", ] -[[package]] -name = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - [[package]] name = "sdd" version = "4.2.4" @@ -11497,12 +11347,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "wyz" version = "0.5.1" diff --git a/rust/lit-core/lit-attestation/src/attestation.rs b/rust/lit-core/lit-attestation/src/attestation.rs index 0bc85e3..902c0a4 100644 --- a/rust/lit-core/lit-attestation/src/attestation.rs +++ b/rust/lit-core/lit-attestation/src/attestation.rs @@ -1068,7 +1068,6 @@ mod tests { #[cfg(feature = "generate-via-system")] async fn amdsev_snp_verify_success_test() { use crate::attestation::AmdSevSnpAttestation; - use lit_core::utils::binary::bytes_to_hex; use lit_node_core::AttestationType; if !Path::new("/dev/sev-guest").exists() { diff --git a/rust/lit-core/lit-blockchain-lite/abis/ArbitrumKeyDeriver.json b/rust/lit-core/lit-blockchain-lite/abis/ArbitrumKeyDeriver.json index f48ee96..132cb67 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/ArbitrumKeyDeriver.json +++ b/rust/lit-core/lit-blockchain-lite/abis/ArbitrumKeyDeriver.json @@ -348,8 +348,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516111ca3803806111ca83398101604081905261002f916101a4565b6100476000805160206111aa833981519152336100ad565b61005f6000805160206111aa833981519152806100bb565b600180546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b8360028111156100a1576100a16101ee565b02179055505050610204565b6100b78282610106565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100b7576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600080604083850312156101b757600080fd5b82516001600160a01b03811681146101ce57600080fd5b6020840151909250600381106101e357600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b610f97806102136000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa264697066735822122037243bc43e78ac34bb45bfe243450c281f61d226e12cdab04b2899832a44ff7764736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa264697066735822122037243bc43e78ac34bb45bfe243450c281f61d226e12cdab04b2899832a44ff7764736f6c634300081c0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516111ca3803806111ca83398101604081905261002f916101a4565b6100476000805160206111aa833981519152336100ad565b61005f6000805160206111aa833981519152806100bb565b600180546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b8360028111156100a1576100a16101ee565b02179055505050610204565b6100b78282610106565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100b7576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600080604083850312156101b757600080fd5b82516001600160a01b03811681146101ce57600080fd5b6020840151909250600381106101e357600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b610f97806102136000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220bdc8612bb25d7d879718d919f8d48a539a8f5aea688047d221856122dc78617064736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220bdc8612bb25d7d879718d919f8d48a539a8f5aea688047d221856122dc78617064736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain-lite/abis/BackupRecovery.json b/rust/lit-core/lit-blockchain-lite/abis/BackupRecovery.json index 773b719..da1f7d0 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/BackupRecovery.json +++ b/rust/lit-core/lit-blockchain-lite/abis/BackupRecovery.json @@ -837,6 +837,11 @@ "internalType": "bytes", "name": "sessionId", "type": "bytes" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" } ], "name": "registerRecoveryKeys", diff --git a/rust/lit-core/lit-blockchain-lite/abis/ContractResolver.json b/rust/lit-core/lit-blockchain-lite/abis/ContractResolver.json index e4bfde8..925faad 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/ContractResolver.json +++ b/rust/lit-core/lit-blockchain-lite/abis/ContractResolver.json @@ -392,6 +392,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "PUB_KEY_ROUTER_VIEWS_CONTRACT", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "RATE_LIMIT_NFT_CONTRACT", @@ -684,8 +697,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161146738038061146783398101604081905261002f916101e0565b610047600080516020611447833981519152336100e9565b61005f600080516020611447833981519152806100f7565b600180600083600281111561007657610076610208565b600281111561008757610087610208565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece8015816040516100db919061021e565b60405180910390a150610246565b6100f38282610142565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100f3576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561019c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156101f257600080fd5b81516003811061020157600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b602081016003831061024057634e487b7160e01b600052602160045260246000fd5b91905290565b6111f2806102556000396000f3fe608060405234801561001057600080fd5b50600436106101bc5760003560e01c80637cadf69f116100f55780637cadf69f146104175780637d4a03bd1461043e5780637d9d2880146104655780637f90209f1461048c57806385cb1191146104b35780638c1536df146104da5780638deb3893146105015780638e8dfd16146105145780639072f8381461052757806391d148541461054e578063977a807014610561578063a217fddf14610588578063ad1c8a8614610590578063cddcace5146105b7578063d547741f146105de578063da19ddfb146105f1578063df38069314610618578063f8ae93b41461063f57600080fd5b806301ffc9a7146101c157806311ee8ff7146101e957806316f76bbf1461021e5780631785f53c14610245578063219c266a1461025a578063248a9ca3146102815780632668f305146102945780632c0b8bf7146102bb5780632e4885e8146102e25780632f2ff15d1461030957806336568abe1461031c5780633ebf79851461032f5780634216e73a1461037b57806351ad0a80146103a25780635af27f79146103b557806370480275146103dc57806374bc8139146103ef57806375b238fc14610402575b600080fd5b6101d46101cf366004610eb1565b610666565b60405190151581526020015b60405180910390f35b6102107f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101e0565b6102107ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b610258610253366004610ef7565b61069d565b005b6102107f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021061028f366004610f12565b61074e565b6102107fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b6102107fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b6102107fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610258610317366004610f2b565b610763565b61025861032a366004610f2b565b610784565b61036361033d366004610f66565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101e0565b6102107f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102586103b0366004610f89565b6107fe565b6102107fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102586103ea366004610ef7565b610982565b6102586103fd366004610fc5565b6109b2565b61021060008051602061119d83398151915281565b6102107f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b6102107f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b6102107fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b6102107fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b6102107fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b6102107faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b61025861050f366004610fc5565b610a6e565b610363610522366004610f66565b610b12565b6102107f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101d461055c366004610f2b565b610b68565b6102107f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b610210600081565b6102107f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b6102107f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b6102586105ec366004610f2b565b610b91565b6102107f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b6102107fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b6102107fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b148061069757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061119d8339815191526106b581610bad565b336001600160a01b038316036107325760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61074a60008051602061119d83398151915283610bba565b5050565b60009081526020819052604090206001015490565b61076c8261074e565b61077581610bad565b61077f8383610c1f565b505050565b6001600160a01b03811633146107f45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610729565b61074a8282610bba565b61081660008051602061119d83398151915233610b68565b610833576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561084957610849610fe0565b600281111561085a5761085a610fe0565b815260208101919091526040016000205460ff1615156001146108d75760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b6064820152608401610729565b806002600085815260200190815260200160002060008460028111156108ff576108ff610fe0565b600281111561091057610910610fe0565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d83838360405161097593929190611018565b60405180910390a1505050565b60008051602061119d83398151915261099a81610bad565b61074a60008051602061119d83398151915283610c1f565b6109ca60008051602061119d83398151915233610b68565b6109e7576040516364487c2560e11b815260040160405180910390fd5b60018060008360028111156109fe576109fe610fe0565b6002811115610a0f57610a0f610fe0565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a639190611045565b60405180910390a150565b610a8660008051602061119d83398151915233610b68565b610aa3576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610ab957610ab9610fe0565b6002811115610aca57610aca610fe0565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a63908390611045565b600082815260026020819052604082209082908490811115610b3657610b36610fe0565b6002811115610b4757610b47610fe0565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610b9a8261074e565b610ba381610bad565b61077f8383610bba565b610bb78133610ca3565b50565b610bc48282610b68565b1561074a576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c298282610b68565b61074a576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c5f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cad8282610b68565b61074a57610cba81610cfc565b610cc5836020610d0e565b604051602001610cd6929190611077565b60408051601f198184030181529082905262461bcd60e51b8252610729916004016110e6565b60606106976001600160a01b03831660145b60606000610d1d83600261112f565b610d28906002611146565b67ffffffffffffffff811115610d4057610d40611159565b6040519080825280601f01601f191660200182016040528015610d6a576020820181803683370190505b509050600360fc1b81600081518110610d8557610d8561116f565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610db457610db461116f565b60200101906001600160f81b031916908160001a9053506000610dd884600261112f565b610de3906001611146565b90505b6001811115610e5b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e1757610e1761116f565b1a60f81b828281518110610e2d57610e2d61116f565b60200101906001600160f81b031916908160001a90535060049490941c93610e5481611185565b9050610de6565b508315610eaa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610729565b9392505050565b600060208284031215610ec357600080fd5b81356001600160e01b031981168114610eaa57600080fd5b80356001600160a01b0381168114610ef257600080fd5b919050565b600060208284031215610f0957600080fd5b610eaa82610edb565b600060208284031215610f2457600080fd5b5035919050565b60008060408385031215610f3e57600080fd5b82359150610f4e60208401610edb565b90509250929050565b803560038110610ef257600080fd5b60008060408385031215610f7957600080fd5b82359150610f4e60208401610f57565b600080600060608486031215610f9e57600080fd5b83359250610fae60208501610f57565b9150610fbc60408501610edb565b90509250925092565b600060208284031215610fd757600080fd5b610eaa82610f57565b634e487b7160e01b600052602160045260246000fd5b6003811061101457634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161102c6020830185610ff6565b6001600160a01b03929092166040919091015292915050565b602081016106978284610ff6565b60005b8381101561106e578181015183820152602001611056565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110a9816017850160208801611053565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516110da816028840160208801611053565b01602801949350505050565b6020815260008251806020840152611105816040850160208701611053565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761069757610697611119565b8082018082111561069757610697611119565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008161119457611194611119565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a2646970667358221220bcfb5aa3251ddf33a8736c9689bd99cea1df5baa0fac387c556913725825c97264736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101bc5760003560e01c80637cadf69f116100f55780637cadf69f146104175780637d4a03bd1461043e5780637d9d2880146104655780637f90209f1461048c57806385cb1191146104b35780638c1536df146104da5780638deb3893146105015780638e8dfd16146105145780639072f8381461052757806391d148541461054e578063977a807014610561578063a217fddf14610588578063ad1c8a8614610590578063cddcace5146105b7578063d547741f146105de578063da19ddfb146105f1578063df38069314610618578063f8ae93b41461063f57600080fd5b806301ffc9a7146101c157806311ee8ff7146101e957806316f76bbf1461021e5780631785f53c14610245578063219c266a1461025a578063248a9ca3146102815780632668f305146102945780632c0b8bf7146102bb5780632e4885e8146102e25780632f2ff15d1461030957806336568abe1461031c5780633ebf79851461032f5780634216e73a1461037b57806351ad0a80146103a25780635af27f79146103b557806370480275146103dc57806374bc8139146103ef57806375b238fc14610402575b600080fd5b6101d46101cf366004610eb1565b610666565b60405190151581526020015b60405180910390f35b6102107f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101e0565b6102107ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b610258610253366004610ef7565b61069d565b005b6102107f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021061028f366004610f12565b61074e565b6102107fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b6102107fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b6102107fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610258610317366004610f2b565b610763565b61025861032a366004610f2b565b610784565b61036361033d366004610f66565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101e0565b6102107f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102586103b0366004610f89565b6107fe565b6102107fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102586103ea366004610ef7565b610982565b6102586103fd366004610fc5565b6109b2565b61021060008051602061119d83398151915281565b6102107f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b6102107f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b6102107fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b6102107fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b6102107fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b6102107faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b61025861050f366004610fc5565b610a6e565b610363610522366004610f66565b610b12565b6102107f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101d461055c366004610f2b565b610b68565b6102107f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b610210600081565b6102107f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b6102107f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b6102586105ec366004610f2b565b610b91565b6102107f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b6102107fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b6102107fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b148061069757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061119d8339815191526106b581610bad565b336001600160a01b038316036107325760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61074a60008051602061119d83398151915283610bba565b5050565b60009081526020819052604090206001015490565b61076c8261074e565b61077581610bad565b61077f8383610c1f565b505050565b6001600160a01b03811633146107f45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610729565b61074a8282610bba565b61081660008051602061119d83398151915233610b68565b610833576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561084957610849610fe0565b600281111561085a5761085a610fe0565b815260208101919091526040016000205460ff1615156001146108d75760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b6064820152608401610729565b806002600085815260200190815260200160002060008460028111156108ff576108ff610fe0565b600281111561091057610910610fe0565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d83838360405161097593929190611018565b60405180910390a1505050565b60008051602061119d83398151915261099a81610bad565b61074a60008051602061119d83398151915283610c1f565b6109ca60008051602061119d83398151915233610b68565b6109e7576040516364487c2560e11b815260040160405180910390fd5b60018060008360028111156109fe576109fe610fe0565b6002811115610a0f57610a0f610fe0565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a639190611045565b60405180910390a150565b610a8660008051602061119d83398151915233610b68565b610aa3576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610ab957610ab9610fe0565b6002811115610aca57610aca610fe0565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a63908390611045565b600082815260026020819052604082209082908490811115610b3657610b36610fe0565b6002811115610b4757610b47610fe0565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610b9a8261074e565b610ba381610bad565b61077f8383610bba565b610bb78133610ca3565b50565b610bc48282610b68565b1561074a576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c298282610b68565b61074a576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c5f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cad8282610b68565b61074a57610cba81610cfc565b610cc5836020610d0e565b604051602001610cd6929190611077565b60408051601f198184030181529082905262461bcd60e51b8252610729916004016110e6565b60606106976001600160a01b03831660145b60606000610d1d83600261112f565b610d28906002611146565b67ffffffffffffffff811115610d4057610d40611159565b6040519080825280601f01601f191660200182016040528015610d6a576020820181803683370190505b509050600360fc1b81600081518110610d8557610d8561116f565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610db457610db461116f565b60200101906001600160f81b031916908160001a9053506000610dd884600261112f565b610de3906001611146565b90505b6001811115610e5b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e1757610e1761116f565b1a60f81b828281518110610e2d57610e2d61116f565b60200101906001600160f81b031916908160001a90535060049490941c93610e5481611185565b9050610de6565b508315610eaa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610729565b9392505050565b600060208284031215610ec357600080fd5b81356001600160e01b031981168114610eaa57600080fd5b80356001600160a01b0381168114610ef257600080fd5b919050565b600060208284031215610f0957600080fd5b610eaa82610edb565b600060208284031215610f2457600080fd5b5035919050565b60008060408385031215610f3e57600080fd5b82359150610f4e60208401610edb565b90509250929050565b803560038110610ef257600080fd5b60008060408385031215610f7957600080fd5b82359150610f4e60208401610f57565b600080600060608486031215610f9e57600080fd5b83359250610fae60208501610f57565b9150610fbc60408501610edb565b90509250925092565b600060208284031215610fd757600080fd5b610eaa82610f57565b634e487b7160e01b600052602160045260246000fd5b6003811061101457634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161102c6020830185610ff6565b6001600160a01b03929092166040919091015292915050565b602081016106978284610ff6565b60005b8381101561106e578181015183820152602001611056565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110a9816017850160208801611053565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516110da816028840160208801611053565b01602801949350505050565b6020815260008251806020840152611105816040850160208701611053565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761069757610697611119565b8082018082111561069757610697611119565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008161119457611194611119565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a2646970667358221220bcfb5aa3251ddf33a8736c9689bd99cea1df5baa0fac387c556913725825c97264736f6c634300081c0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161149938038061149983398101604081905261002f916101e0565b610047600080516020611479833981519152336100e9565b61005f600080516020611479833981519152806100f7565b600180600083600281111561007657610076610208565b600281111561008757610087610208565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece8015816040516100db919061021e565b60405180910390a150610246565b6100f38282610142565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100f3576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561019c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156101f257600080fd5b81516003811061020157600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b602081016003831061024057634e487b7160e01b600052602160045260246000fd5b91905290565b611224806102556000396000f3fe608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cadf69f116101005780637cadf69f146104225780637d4a03bd146104495780637d9d2880146104705780637f90209f1461049757806381d49578146104be57806385cb1191146104e55780638c1536df1461050c5780638deb3893146105335780638e8dfd16146105465780639072f8381461055957806391d1485414610580578063977a807014610593578063a217fddf146105ba578063ad1c8a86146105c2578063cddcace5146105e9578063d547741f14610610578063da19ddfb14610623578063df3806931461064a578063f8ae93b41461067157600080fd5b806301ffc9a7146101cc57806311ee8ff7146101f457806316f76bbf146102295780631785f53c14610250578063219c266a14610265578063248a9ca31461028c5780632668f3051461029f5780632c0b8bf7146102c65780632e4885e8146102ed5780632f2ff15d1461031457806336568abe146103275780633ebf79851461033a5780634216e73a1461038657806351ad0a80146103ad5780635af27f79146103c057806370480275146103e757806374bc8139146103fa57806375b238fc1461040d575b600080fd5b6101df6101da366004610ee3565b610698565b60405190151581526020015b60405180910390f35b61021b7f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101eb565b61021b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b61026361025e366004610f29565b6106cf565b005b61021b7f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021b61029a366004610f44565b610780565b61021b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b61021b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b61021b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610263610322366004610f5d565b610795565b610263610335366004610f5d565b6107b6565b61036e610348366004610f98565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101eb565b61021b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102636103bb366004610fbb565b610830565b61021b7fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102636103f5366004610f29565b6109b4565b610263610408366004610ff7565b6109e4565b61021b6000805160206111cf83398151915281565b61021b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b61021b7f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b61021b7fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b61021b7fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b61021b7f57496de430028f322c592b0f735110eb34f1ae8184a94bc51d40b0847b54469b81565b61021b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b61021b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610263610541366004610ff7565b610aa0565b61036e610554366004610f98565b610b44565b61021b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101df61058e366004610f5d565b610b9a565b61021b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b61021b600081565b61021b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b61021b7f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b61026361061e366004610f5d565b610bc3565b61021b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b61021b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b61021b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b14806106c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206111cf8339815191526106e781610bdf565b336001600160a01b038316036107645760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61077c6000805160206111cf83398151915283610bec565b5050565b60009081526020819052604090206001015490565b61079e82610780565b6107a781610bdf565b6107b18383610c51565b505050565b6001600160a01b03811633146108265760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161075b565b61077c8282610bec565b6108486000805160206111cf83398151915233610b9a565b610865576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561087b5761087b611012565b600281111561088c5761088c611012565b815260208101919091526040016000205460ff1615156001146109095760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b606482015260840161075b565b8060026000858152602001908152602001600020600084600281111561093157610931611012565b600281111561094257610942611012565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d8383836040516109a79392919061104a565b60405180910390a1505050565b6000805160206111cf8339815191526109cc81610bdf565b61077c6000805160206111cf83398151915283610c51565b6109fc6000805160206111cf83398151915233610b9a565b610a19576040516364487c2560e11b815260040160405180910390fd5b6001806000836002811115610a3057610a30611012565b6002811115610a4157610a41611012565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a959190611077565b60405180910390a150565b610ab86000805160206111cf83398151915233610b9a565b610ad5576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610aeb57610aeb611012565b6002811115610afc57610afc611012565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a95908390611077565b600082815260026020819052604082209082908490811115610b6857610b68611012565b6002811115610b7957610b79611012565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610bcc82610780565b610bd581610bdf565b6107b18383610bec565b610be98133610cd5565b50565b610bf68282610b9a565b1561077c576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c5b8282610b9a565b61077c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c913390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cdf8282610b9a565b61077c57610cec81610d2e565b610cf7836020610d40565b604051602001610d089291906110a9565b60408051601f198184030181529082905262461bcd60e51b825261075b91600401611118565b60606106c96001600160a01b03831660145b60606000610d4f836002611161565b610d5a906002611178565b67ffffffffffffffff811115610d7257610d7261118b565b6040519080825280601f01601f191660200182016040528015610d9c576020820181803683370190505b509050600360fc1b81600081518110610db757610db76111a1565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610de657610de66111a1565b60200101906001600160f81b031916908160001a9053506000610e0a846002611161565b610e15906001611178565b90505b6001811115610e8d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e4957610e496111a1565b1a60f81b828281518110610e5f57610e5f6111a1565b60200101906001600160f81b031916908160001a90535060049490941c93610e86816111b7565b9050610e18565b508315610edc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161075b565b9392505050565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610edc57600080fd5b80356001600160a01b0381168114610f2457600080fd5b919050565b600060208284031215610f3b57600080fd5b610edc82610f0d565b600060208284031215610f5657600080fd5b5035919050565b60008060408385031215610f7057600080fd5b82359150610f8060208401610f0d565b90509250929050565b803560038110610f2457600080fd5b60008060408385031215610fab57600080fd5b82359150610f8060208401610f89565b600080600060608486031215610fd057600080fd5b83359250610fe060208501610f89565b9150610fee60408501610f0d565b90509250925092565b60006020828403121561100957600080fd5b610edc82610f89565b634e487b7160e01b600052602160045260246000fd5b6003811061104657634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161105e6020830185611028565b6001600160a01b03929092166040919091015292915050565b602081016106c98284611028565b60005b838110156110a0578181015183820152602001611088565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110db816017850160208801611085565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161110c816028840160208801611085565b01602801949350505050565b6020815260008251806020840152611137816040850160208701611085565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106c9576106c961114b565b808201808211156106c9576106c961114b565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816111c6576111c661114b565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a264697066735822122065276870aecc95d0026a39a8a08dc1b9a726496c4d88b6456f2ac640543c468664736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cadf69f116101005780637cadf69f146104225780637d4a03bd146104495780637d9d2880146104705780637f90209f1461049757806381d49578146104be57806385cb1191146104e55780638c1536df1461050c5780638deb3893146105335780638e8dfd16146105465780639072f8381461055957806391d1485414610580578063977a807014610593578063a217fddf146105ba578063ad1c8a86146105c2578063cddcace5146105e9578063d547741f14610610578063da19ddfb14610623578063df3806931461064a578063f8ae93b41461067157600080fd5b806301ffc9a7146101cc57806311ee8ff7146101f457806316f76bbf146102295780631785f53c14610250578063219c266a14610265578063248a9ca31461028c5780632668f3051461029f5780632c0b8bf7146102c65780632e4885e8146102ed5780632f2ff15d1461031457806336568abe146103275780633ebf79851461033a5780634216e73a1461038657806351ad0a80146103ad5780635af27f79146103c057806370480275146103e757806374bc8139146103fa57806375b238fc1461040d575b600080fd5b6101df6101da366004610ee3565b610698565b60405190151581526020015b60405180910390f35b61021b7f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101eb565b61021b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b61026361025e366004610f29565b6106cf565b005b61021b7f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021b61029a366004610f44565b610780565b61021b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b61021b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b61021b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610263610322366004610f5d565b610795565b610263610335366004610f5d565b6107b6565b61036e610348366004610f98565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101eb565b61021b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102636103bb366004610fbb565b610830565b61021b7fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102636103f5366004610f29565b6109b4565b610263610408366004610ff7565b6109e4565b61021b6000805160206111cf83398151915281565b61021b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b61021b7f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b61021b7fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b61021b7fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b61021b7f57496de430028f322c592b0f735110eb34f1ae8184a94bc51d40b0847b54469b81565b61021b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b61021b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610263610541366004610ff7565b610aa0565b61036e610554366004610f98565b610b44565b61021b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101df61058e366004610f5d565b610b9a565b61021b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b61021b600081565b61021b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b61021b7f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b61026361061e366004610f5d565b610bc3565b61021b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b61021b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b61021b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b14806106c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206111cf8339815191526106e781610bdf565b336001600160a01b038316036107645760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61077c6000805160206111cf83398151915283610bec565b5050565b60009081526020819052604090206001015490565b61079e82610780565b6107a781610bdf565b6107b18383610c51565b505050565b6001600160a01b03811633146108265760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161075b565b61077c8282610bec565b6108486000805160206111cf83398151915233610b9a565b610865576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561087b5761087b611012565b600281111561088c5761088c611012565b815260208101919091526040016000205460ff1615156001146109095760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b606482015260840161075b565b8060026000858152602001908152602001600020600084600281111561093157610931611012565b600281111561094257610942611012565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d8383836040516109a79392919061104a565b60405180910390a1505050565b6000805160206111cf8339815191526109cc81610bdf565b61077c6000805160206111cf83398151915283610c51565b6109fc6000805160206111cf83398151915233610b9a565b610a19576040516364487c2560e11b815260040160405180910390fd5b6001806000836002811115610a3057610a30611012565b6002811115610a4157610a41611012565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a959190611077565b60405180910390a150565b610ab86000805160206111cf83398151915233610b9a565b610ad5576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610aeb57610aeb611012565b6002811115610afc57610afc611012565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a95908390611077565b600082815260026020819052604082209082908490811115610b6857610b68611012565b6002811115610b7957610b79611012565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610bcc82610780565b610bd581610bdf565b6107b18383610bec565b610be98133610cd5565b50565b610bf68282610b9a565b1561077c576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c5b8282610b9a565b61077c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c913390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cdf8282610b9a565b61077c57610cec81610d2e565b610cf7836020610d40565b604051602001610d089291906110a9565b60408051601f198184030181529082905262461bcd60e51b825261075b91600401611118565b60606106c96001600160a01b03831660145b60606000610d4f836002611161565b610d5a906002611178565b67ffffffffffffffff811115610d7257610d7261118b565b6040519080825280601f01601f191660200182016040528015610d9c576020820181803683370190505b509050600360fc1b81600081518110610db757610db76111a1565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610de657610de66111a1565b60200101906001600160f81b031916908160001a9053506000610e0a846002611161565b610e15906001611178565b90505b6001811115610e8d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e4957610e496111a1565b1a60f81b828281518110610e5f57610e5f6111a1565b60200101906001600160f81b031916908160001a90535060049490941c93610e86816111b7565b9050610e18565b508315610edc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161075b565b9392505050565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610edc57600080fd5b80356001600160a01b0381168114610f2457600080fd5b919050565b600060208284031215610f3b57600080fd5b610edc82610f0d565b600060208284031215610f5657600080fd5b5035919050565b60008060408385031215610f7057600080fd5b82359150610f8060208401610f0d565b90509250929050565b803560038110610f2457600080fd5b60008060408385031215610fab57600080fd5b82359150610f8060208401610f89565b600080600060608486031215610fd057600080fd5b83359250610fe060208501610f89565b9150610fee60408501610f0d565b90509250925092565b60006020828403121561100957600080fd5b610edc82610f89565b634e487b7160e01b600052602160045260246000fd5b6003811061104657634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161105e6020830185611028565b6001600160a01b03929092166040919091015292915050565b602081016106c98284611028565b60005b838110156110a0578181015183820152602001611088565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110db816017850160208801611085565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161110c816028840160208801611085565b01602801949350505050565b6020815260008251806020840152611137816040850160208701611085565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106c9576106c961114b565b808201808211156106c9576106c961114b565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816111c6576111c661114b565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a264697066735822122065276870aecc95d0026a39a8a08dc1b9a726496c4d88b6456f2ac640543c468664736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain-lite/abis/KeyDeriver.json b/rust/lit-core/lit-blockchain-lite/abis/KeyDeriver.json index ce2864b..54ba673 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/KeyDeriver.json +++ b/rust/lit-core/lit-blockchain-lite/abis/KeyDeriver.json @@ -68,8 +68,8 @@ "type": "function" } ], - "bytecode": "0x6080604052348015600f57600080fd5b506105ee8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220b3f5d6acd5a7371344cacab05e607079ebf476b46d8b170419612f80e7a8ac9564736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220b3f5d6acd5a7371344cacab05e607079ebf476b46d8b170419612f80e7a8ac9564736f6c634300081c0033", + "bytecode": "0x6080604052348015600f57600080fd5b506105ee8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa26469706673582212205d2e87924405c75a37cb3199109dc5847775ce28137c5e1ca405720cfa3bea3d64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa26469706673582212205d2e87924405c75a37cb3199109dc5847775ce28137c5e1ca405720cfa3bea3d64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain-lite/abis/PKPHelper.json b/rust/lit-core/lit-blockchain-lite/abis/PKPHelper.json index 69d8a2c..2c436d7 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/PKPHelper.json +++ b/rust/lit-core/lit-blockchain-lite/abis/PKPHelper.json @@ -1007,8 +1007,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50604051613a76380380613a7683398101604081905261002f916100d5565b61003833610085565b600280546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b83838111156100795761007961011f565b02179055505050610135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100e857600080fd5b82516001600160a01b03811681146100ff57600080fd5b60208401519092506003811061011457600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b613932806101446000396000f3fe60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a264697066735822122038295780a313e895b6dcea68e900a66f083bf36d7a4524b63cf8bf23e49d630d64736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a264697066735822122038295780a313e895b6dcea68e900a66f083bf36d7a4524b63cf8bf23e49d630d64736f6c634300081c0033", + "bytecode": "0x608060405234801561001057600080fd5b50604051613a76380380613a7683398101604081905261002f916100d5565b61003833610085565b600280546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b83838111156100795761007961011f565b02179055505050610135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100e857600080fd5b82516001600160a01b03811681146100ff57600080fd5b60208401519092506003811061011457600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b613932806101446000396000f3fe60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a26469706673582212201f30b6e11b3dbcaec61a3cbe0e65bd69f7cc1a45ca4792f4fc3a0b6259a4bae164736f6c634300081c0033", + "deployedBytecode": "0x60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a26469706673582212201f30b6e11b3dbcaec61a3cbe0e65bd69f7cc1a45ca4792f4fc3a0b6259a4bae164736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain-lite/abis/PKPNFTMetadata.json b/rust/lit-core/lit-blockchain-lite/abis/PKPNFTMetadata.json index f2f8bc7..6e0a3f4 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/PKPNFTMetadata.json +++ b/rust/lit-core/lit-blockchain-lite/abis/PKPNFTMetadata.json @@ -156,8 +156,8 @@ "type": "function" } ], - "bytecode": "0x6080604052348015600f57600080fd5b50604051611c7d380380611c7d833981016040819052602c916076565b600080546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b836002811115606b57606b60bd565b0217905550505060d3565b60008060408385031215608857600080fd5b82516001600160a01b0381168114609e57600080fd5b60208401519092506003811060b257600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b611b9b806100e26000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208f1399b085bffde06578f1dd04ad36217eed47fba06d75a31f5ce9e67151788264736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208f1399b085bffde06578f1dd04ad36217eed47fba06d75a31f5ce9e67151788264736f6c634300081c0033", + "bytecode": "0x6080604052348015600f57600080fd5b50604051611c7d380380611c7d833981016040819052602c916076565b600080546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b836002811115606b57606b60bd565b0217905550505060d3565b60008060408385031215608857600080fd5b82516001600160a01b0381168114609e57600080fd5b60208401519092506003811060b257600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b611b9b806100e26000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220119f3eff15d9f5ea1c055f3790173296030e59973e2ad660e8711a55e2f0331364736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220119f3eff15d9f5ea1c055f3790173296030e59973e2ad660e8711a55e2f0331364736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain-lite/abis/PubkeyRouter.json b/rust/lit-core/lit-blockchain-lite/abis/PubkeyRouter.json index 814aec2..5c48ab5 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/PubkeyRouter.json +++ b/rust/lit-core/lit-blockchain-lite/abis/PubkeyRouter.json @@ -501,6 +501,12 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "name": "PubkeyRoutingDataSet", @@ -622,6 +628,156 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -920,6 +1076,11 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", @@ -930,19 +1091,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getTrustedForwarder", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -988,6 +1136,11 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", @@ -997,133 +1150,6 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingDataAsAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "forwarder", - "type": "address" - } - ], - "name": "setTrustedForwarder", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "voteForRootKeys", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" } ], "deployedBytecode": "", diff --git a/rust/lit-core/lit-blockchain-lite/abis/Staking.json b/rust/lit-core/lit-blockchain-lite/abis/Staking.json index 5925884..08eb31f 100644 --- a/rust/lit-core/lit-blockchain-lite/abis/Staking.json +++ b/rust/lit-core/lit-blockchain-lite/abis/Staking.json @@ -394,6 +394,11 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, { "inputs": [ { @@ -583,6 +588,71 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + }, + { + "internalType": "string", + "name": "defaultKeySet", + "type": "string" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -694,11 +764,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "CallerNotOwner", - "type": "error" - }, { "inputs": [], "name": "CallerNotOwnerOrDevopsAdmin", @@ -1332,11 +1397,6 @@ "name": "tokenRewardPerTokenPerEpoch", "type": "uint256" }, - { - "internalType": "uint256[]", - "name": "keyTypes", - "type": "uint256[]" - }, { "internalType": "uint256", "name": "minimumValidatorCount", @@ -1688,66 +1748,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "realmId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "maxConcurrentRequests", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPresignCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minPresignCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "peerCheckingIntervalSecs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPresignConcurrency", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "rpcHealthcheckEnabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minEpochForRewards", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permittedValidatorsOn", - "type": "bool" - } - ], - "internalType": "struct LibStakingStorage.RealmConfig", - "name": "newConfig", - "type": "tuple" - } - ], - "name": "setRealmConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -2689,9 +2689,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig", @@ -2749,9 +2749,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig[]", @@ -2807,9 +2807,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig", @@ -3303,67 +3303,6 @@ "name": "ComplaintConfigSet", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newTokenRewardPerTokenPerEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "newKeyTypes", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinimumValidatorCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxConcurrentRequests", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxPresignCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinPresignCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newPeerCheckingIntervalSecs", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxPresignConcurrency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "newRpcHealthcheckEnabled", - "type": "bool" - } - ], - "name": "ConfigSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -4683,19 +4622,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getKeyTypes", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -5990,11 +5916,6 @@ "name": "tokenRewardPerTokenPerEpoch", "type": "uint256" }, - { - "internalType": "uint256[]", - "name": "keyTypes", - "type": "uint256[]" - }, { "internalType": "uint256", "name": "minimumValidatorCount", @@ -6645,6 +6566,11 @@ "internalType": "bool", "name": "permittedValidatorsOn", "type": "bool" + }, + { + "internalType": "string", + "name": "defaultKeySet", + "type": "string" } ], "internalType": "struct LibStakingStorage.RealmConfig", diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/arbitrum_key_deriver.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/arbitrum_key_deriver.rs index 95ca8c6..2d45083 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/arbitrum_key_deriver.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/arbitrum_key_deriver.rs @@ -562,13 +562,13 @@ pub mod arbitrum_key_deriver { ::ethers::core::abi::Abi, > = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x11\xCA8\x03\x80a\x11\xCA\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xA4V[a\0G`\0\x80Q` a\x11\xAA\x839\x81Q\x91R3a\0\xADV[a\0_`\0\x80Q` a\x11\xAA\x839\x81Q\x91R\x80a\0\xBBV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15a\0\xA1Wa\0\xA1a\x01\xEEV[\x02\x17\x90UPPPa\x02\x04V[a\0\xB7\x82\x82a\x01\x06V[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xB7W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01`3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0\x80`@\x83\x85\x03\x12\x15a\x01\xB7W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\xCEW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\xE3W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x0F\x97\x80a\x02\x13`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 7$;\xC4>x\xAC4\xBBE\xBF\xE2CE\x0C(\x1Fa\xD2&\xE1,\xDA\xB0K(\x99\x83*D\xFFwdsolcC\0\x08\x1C\x003\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x11\xCA8\x03\x80a\x11\xCA\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xA4V[a\0G`\0\x80Q` a\x11\xAA\x839\x81Q\x91R3a\0\xADV[a\0_`\0\x80Q` a\x11\xAA\x839\x81Q\x91R\x80a\0\xBBV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15a\0\xA1Wa\0\xA1a\x01\xEEV[\x02\x17\x90UPPPa\x02\x04V[a\0\xB7\x82\x82a\x01\x06V[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xB7W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01`3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0\x80`@\x83\x85\x03\x12\x15a\x01\xB7W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\xCEW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\xE3W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x0F\x97\x80a\x02\x13`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xBD\xC8a+\xB2]}\x87\x97\x18\xD9\x19\xF8\xD4\x8AS\x9A\x8FZ\xEAh\x80G\xD2!\x85a\"\xDCxapdsolcC\0\x08\x1C\x003\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB"; /// The bytecode of the contract. pub static ARBITRUMKEYDERIVER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 7$;\xC4>x\xAC4\xBBE\xBF\xE2CE\x0C(\x1Fa\xD2&\xE1,\xDA\xB0K(\x99\x83*D\xFFwdsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xBD\xC8a+\xB2]}\x87\x97\x18\xD9\x19\xF8\xD4\x8AS\x9A\x8FZ\xEAh\x80G\xD2!\x85a\"\xDCxapdsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static ARBITRUMKEYDERIVER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/backup_recovery.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/backup_recovery.rs index f980418..5caa616 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/backup_recovery.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/backup_recovery.rs @@ -970,6 +970,13 @@ pub mod backup_recovery { ::std::borrow::ToOwned::to_owned("bytes"), ), }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("keySetId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, ], outputs: ::std::vec![], constant: ::core::option::Option::None, @@ -2206,14 +2213,18 @@ pub mod backup_recovery { .method_hash([93, 28, 27, 61], party_members) .expect("method not found (this should never happen)") } - ///Calls the contract's `registerRecoveryKeys` (0x960cb990) function + ///Calls the contract's `registerRecoveryKeys` (0xa6fdb149) function pub fn register_recovery_keys( &self, recovery_keys: ::std::vec::Vec, session_id: ::ethers::core::types::Bytes, + key_set_id: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([150, 12, 185, 144], (recovery_keys, session_id)) + .method_hash( + [166, 253, 177, 73], + (recovery_keys, session_id, key_set_id), + ) .expect("method not found (this should never happen)") } ///Calls the contract's `setBackupPartyState` (0xb347cccc) function @@ -4151,7 +4162,7 @@ pub mod backup_recovery { pub struct RegisterNewBackupPartyCall { pub party_members: ::std::vec::Vec<::ethers::core::types::Address>, } - ///Container type for all input parameters for the `registerRecoveryKeys` function with signature `registerRecoveryKeys((bytes,uint256)[],bytes)` and selector `0x960cb990` + ///Container type for all input parameters for the `registerRecoveryKeys` function with signature `registerRecoveryKeys((bytes,uint256)[],bytes,string)` and selector `0xa6fdb149` #[derive( Clone, ::ethers::contract::EthCall, @@ -4166,11 +4177,12 @@ pub mod backup_recovery { )] #[ethcall( name = "registerRecoveryKeys", - abi = "registerRecoveryKeys((bytes,uint256)[],bytes)" + abi = "registerRecoveryKeys((bytes,uint256)[],bytes,string)" )] pub struct RegisterRecoveryKeysCall { pub recovery_keys: ::std::vec::Vec, pub session_id: ::ethers::core::types::Bytes, + pub key_set_id: ::std::string::String, } ///Container type for all input parameters for the `setBackupPartyState` function with signature `setBackupPartyState(bytes[],address[])` and selector `0xb347cccc` #[derive( diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/contract_resolver.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/contract_resolver.rs index 78b3c46..ef6c289 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/contract_resolver.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/contract_resolver.rs @@ -462,6 +462,30 @@ pub mod contract_resolver { }, ], ), + ( + ::std::borrow::ToOwned::to_owned("PUB_KEY_ROUTER_VIEWS_CONTRACT"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "PUB_KEY_ROUTER_VIEWS_CONTRACT", + ), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), ( ::std::borrow::ToOwned::to_owned("RATE_LIMIT_NFT_CONTRACT"), ::std::vec![ @@ -1150,13 +1174,13 @@ pub mod contract_resolver { ::ethers::core::abi::Abi, > = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x14g8\x03\x80a\x14g\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xE0V[a\0G`\0\x80Q` a\x14G\x839\x81Q\x91R3a\0\xE9V[a\0_`\0\x80Q` a\x14G\x839\x81Q\x91R\x80a\0\xF7V[`\x01\x80`\0\x83`\x02\x81\x11\x15a\0vWa\0va\x02\x08V[`\x02\x81\x11\x15a\0\x87Wa\0\x87a\x02\x08V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\0\xDB\x91\x90a\x02\x1EV[`@Q\x80\x91\x03\x90\xA1Pa\x02FV[a\0\xF3\x82\x82a\x01BV[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xF3W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01\x9C3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0` \x82\x84\x03\x12\x15a\x01\xF2W`\0\x80\xFD[\x81Q`\x03\x81\x10a\x02\x01W`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[` \x81\x01`\x03\x83\x10a\x02@WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x91\x90R\x90V[a\x11\xF2\x80a\x02U`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xBCW`\x005`\xE0\x1C\x80c|\xAD\xF6\x9F\x11a\0\xF5W\x80c|\xAD\xF6\x9F\x14a\x04\x17W\x80c}J\x03\xBD\x14a\x04>W\x80c}\x9D(\x80\x14a\x04eW\x80c\x7F\x90 \x9F\x14a\x04\x8CW\x80c\x85\xCB\x11\x91\x14a\x04\xB3W\x80c\x8C\x156\xDF\x14a\x04\xDAW\x80c\x8D\xEB8\x93\x14a\x05\x01W\x80c\x8E\x8D\xFD\x16\x14a\x05\x14W\x80c\x90r\xF88\x14a\x05'W\x80c\x91\xD1HT\x14a\x05NW\x80c\x97z\x80p\x14a\x05aW\x80c\xA2\x17\xFD\xDF\x14a\x05\x88W\x80c\xAD\x1C\x8A\x86\x14a\x05\x90W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xB7W\x80c\xD5Gt\x1F\x14a\x05\xDEW\x80c\xDA\x19\xDD\xFB\x14a\x05\xF1W\x80c\xDF8\x06\x93\x14a\x06\x18W\x80c\xF8\xAE\x93\xB4\x14a\x06?W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xC1W\x80c\x11\xEE\x8F\xF7\x14a\x01\xE9W\x80c\x16\xF7k\xBF\x14a\x02\x1EW\x80c\x17\x85\xF5<\x14a\x02EW\x80c!\x9C&j\x14a\x02ZW\x80c$\x8A\x9C\xA3\x14a\x02\x81W\x80c&h\xF3\x05\x14a\x02\x94W\x80c,\x0B\x8B\xF7\x14a\x02\xBBW\x80c.H\x85\xE8\x14a\x02\xE2W\x80c//\xF1]\x14a\x03\tW\x80c6V\x8A\xBE\x14a\x03\x1CW\x80c>\xBFy\x85\x14a\x03/W\x80cB\x16\xE7:\x14a\x03{W\x80cQ\xAD\n\x80\x14a\x03\xA2W\x80cZ\xF2\x7Fy\x14a\x03\xB5W\x80cpH\x02u\x14a\x03\xDCW\x80ct\xBC\x819\x14a\x03\xEFW\x80cu\xB28\xFC\x14a\x04\x02W[`\0\x80\xFD[a\x01\xD4a\x01\xCF6`\x04a\x0E\xB1V[a\x06fV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x10\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xE0V[a\x02\x10\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02Xa\x02S6`\x04a\x0E\xF7V[a\x06\x9DV[\0[a\x02\x10\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x10a\x02\x8F6`\x04a\x0F\x12V[a\x07NV[a\x02\x10\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x10\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x10\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02Xa\x03\x176`\x04a\x0F+V[a\x07cV[a\x02Xa\x03*6`\x04a\x0F+V[a\x07\x84V[a\x03ca\x03=6`\x04a\x0FfV[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xE0V[a\x02\x10\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02Xa\x03\xB06`\x04a\x0F\x89V[a\x07\xFEV[a\x02\x10\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02Xa\x03\xEA6`\x04a\x0E\xF7V[a\t\x82V[a\x02Xa\x03\xFD6`\x04a\x0F\xC5V[a\t\xB2V[a\x02\x10`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x81V[a\x02\x10\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x10\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x10\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x10\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x10\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x10\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02Xa\x05\x0F6`\x04a\x0F\xC5V[a\nnV[a\x03ca\x05\"6`\x04a\x0FfV[a\x0B\x12V[a\x02\x10\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xD4a\x05\\6`\x04a\x0F+V[a\x0BhV[a\x02\x10\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x10`\0\x81V[a\x02\x10\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x10\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02Xa\x05\xEC6`\x04a\x0F+V[a\x0B\x91V[a\x02\x10\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x10\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x10\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\x97WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\x06\xB5\x81a\x0B\xADV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x072W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0B\xBAV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07l\x82a\x07NV[a\x07u\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0C\x1FV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x07\xF4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07)V[a\x07J\x82\x82a\x0B\xBAV[a\x08\x16`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\x083W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08IWa\x08Ia\x0F\xE0V[`\x02\x81\x11\x15a\x08ZWa\x08Za\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\x08\xD7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07)V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\x08\xFFWa\x08\xFFa\x0F\xE0V[`\x02\x81\x11\x15a\t\x10Wa\t\x10a\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\tu\x93\x92\x91\x90a\x10\x18V[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\t\x9A\x81a\x0B\xADV[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0C\x1FV[a\t\xCA`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\t\xE7W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\t\xFEWa\t\xFEa\x0F\xE0V[`\x02\x81\x11\x15a\n\x0FWa\n\x0Fa\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\nc\x91\x90a\x10EV[`@Q\x80\x91\x03\x90\xA1PV[a\n\x86`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\n\xA3W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xB9Wa\n\xB9a\x0F\xE0V[`\x02\x81\x11\x15a\n\xCAWa\n\xCAa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\nc\x90\x83\x90a\x10EV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0B6Wa\x0B6a\x0F\xE0V[`\x02\x81\x11\x15a\x0BGWa\x0BGa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\x9A\x82a\x07NV[a\x0B\xA3\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0B\xBAV[a\x0B\xB7\x813a\x0C\xA3V[PV[a\x0B\xC4\x82\x82a\x0BhV[\x15a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C)\x82\x82a\x0BhV[a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C_3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xAD\x82\x82a\x0BhV[a\x07JWa\x0C\xBA\x81a\x0C\xFCV[a\x0C\xC5\x83` a\r\x0EV[`@Q` \x01a\x0C\xD6\x92\x91\x90a\x10wV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07)\x91`\x04\x01a\x10\xE6V[``a\x06\x97`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\r\x1D\x83`\x02a\x11/V[a\r(\x90`\x02a\x11FV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\r@Wa\r@a\x11YV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\rjW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x85Wa\r\x85a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xB4Wa\r\xB4a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\r\xD8\x84`\x02a\x11/V[a\r\xE3\x90`\x01a\x11FV[\x90P[`\x01\x81\x11\x15a\x0E[Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0E\x17Wa\x0E\x17a\x11oV[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E-Wa\x0E-a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0ET\x81a\x11\x85V[\x90Pa\r\xE6V[P\x83\x15a\x0E\xAAW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07)V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xC3W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xAAW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0E\xF2W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F\tW`\0\x80\xFD[a\x0E\xAA\x82a\x0E\xDBV[`\0` \x82\x84\x03\x12\x15a\x0F$W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0F>W`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0E\xDBV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0E\xF2W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0FyW`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0FWV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\x9EW`\0\x80\xFD[\x835\x92Pa\x0F\xAE` \x85\x01a\x0FWV[\x91Pa\x0F\xBC`@\x85\x01a\x0E\xDBV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x0F\xD7W`\0\x80\xFD[a\x0E\xAA\x82a\x0FWV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10\x14WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10,` \x83\x01\x85a\x0F\xF6V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\x97\x82\x84a\x0F\xF6V[`\0[\x83\x81\x10\x15a\x10nW\x81\x81\x01Q\x83\x82\x01R` \x01a\x10VV[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xA9\x81`\x17\x85\x01` \x88\x01a\x10SV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x10\xDA\x81`(\x84\x01` \x88\x01a\x10SV[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x11\x05\x81`@\x85\x01` \x87\x01a\x10SV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\x97Wa\x06\x97a\x11\x19V[\x80\x82\x01\x80\x82\x11\x15a\x06\x97Wa\x06\x97a\x11\x19V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\x94Wa\x11\x94a\x11\x19V[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 \xBC\xFBZ\xA3%\x1D\xDF3\xA8sl\x96\x89\xBD\x99\xCE\xA1\xDF[\xAA\x0F\xAC8|Ui\x13rX%\xC9rdsolcC\0\x08\x1C\x003\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x14\x998\x03\x80a\x14\x99\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xE0V[a\0G`\0\x80Q` a\x14y\x839\x81Q\x91R3a\0\xE9V[a\0_`\0\x80Q` a\x14y\x839\x81Q\x91R\x80a\0\xF7V[`\x01\x80`\0\x83`\x02\x81\x11\x15a\0vWa\0va\x02\x08V[`\x02\x81\x11\x15a\0\x87Wa\0\x87a\x02\x08V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\0\xDB\x91\x90a\x02\x1EV[`@Q\x80\x91\x03\x90\xA1Pa\x02FV[a\0\xF3\x82\x82a\x01BV[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xF3W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01\x9C3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0` \x82\x84\x03\x12\x15a\x01\xF2W`\0\x80\xFD[\x81Q`\x03\x81\x10a\x02\x01W`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[` \x81\x01`\x03\x83\x10a\x02@WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x91\x90R\x90V[a\x12$\x80a\x02U`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xC7W`\x005`\xE0\x1C\x80c|\xAD\xF6\x9F\x11a\x01\0W\x80c|\xAD\xF6\x9F\x14a\x04\"W\x80c}J\x03\xBD\x14a\x04IW\x80c}\x9D(\x80\x14a\x04pW\x80c\x7F\x90 \x9F\x14a\x04\x97W\x80c\x81\xD4\x95x\x14a\x04\xBEW\x80c\x85\xCB\x11\x91\x14a\x04\xE5W\x80c\x8C\x156\xDF\x14a\x05\x0CW\x80c\x8D\xEB8\x93\x14a\x053W\x80c\x8E\x8D\xFD\x16\x14a\x05FW\x80c\x90r\xF88\x14a\x05YW\x80c\x91\xD1HT\x14a\x05\x80W\x80c\x97z\x80p\x14a\x05\x93W\x80c\xA2\x17\xFD\xDF\x14a\x05\xBAW\x80c\xAD\x1C\x8A\x86\x14a\x05\xC2W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xE9W\x80c\xD5Gt\x1F\x14a\x06\x10W\x80c\xDA\x19\xDD\xFB\x14a\x06#W\x80c\xDF8\x06\x93\x14a\x06JW\x80c\xF8\xAE\x93\xB4\x14a\x06qW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xCCW\x80c\x11\xEE\x8F\xF7\x14a\x01\xF4W\x80c\x16\xF7k\xBF\x14a\x02)W\x80c\x17\x85\xF5<\x14a\x02PW\x80c!\x9C&j\x14a\x02eW\x80c$\x8A\x9C\xA3\x14a\x02\x8CW\x80c&h\xF3\x05\x14a\x02\x9FW\x80c,\x0B\x8B\xF7\x14a\x02\xC6W\x80c.H\x85\xE8\x14a\x02\xEDW\x80c//\xF1]\x14a\x03\x14W\x80c6V\x8A\xBE\x14a\x03'W\x80c>\xBFy\x85\x14a\x03:W\x80cB\x16\xE7:\x14a\x03\x86W\x80cQ\xAD\n\x80\x14a\x03\xADW\x80cZ\xF2\x7Fy\x14a\x03\xC0W\x80cpH\x02u\x14a\x03\xE7W\x80ct\xBC\x819\x14a\x03\xFAW\x80cu\xB28\xFC\x14a\x04\rW[`\0\x80\xFD[a\x01\xDFa\x01\xDA6`\x04a\x0E\xE3V[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x1B\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xEBV[a\x02\x1B\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02ca\x02^6`\x04a\x0F)V[a\x06\xCFV[\0[a\x02\x1B\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x1Ba\x02\x9A6`\x04a\x0FDV[a\x07\x80V[a\x02\x1B\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x1B\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x1B\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02ca\x03\"6`\x04a\x0F]V[a\x07\x95V[a\x02ca\x0356`\x04a\x0F]V[a\x07\xB6V[a\x03na\x03H6`\x04a\x0F\x98V[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xEBV[a\x02\x1B\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02ca\x03\xBB6`\x04a\x0F\xBBV[a\x080V[a\x02\x1B\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02ca\x03\xF56`\x04a\x0F)V[a\t\xB4V[a\x02ca\x04\x086`\x04a\x0F\xF7V[a\t\xE4V[a\x02\x1B`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x81V[a\x02\x1B\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x1B\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x1B\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x1B\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x1B\x7FWIm\xE40\x02\x8F2,Y+\x0FsQ\x10\xEB4\xF1\xAE\x81\x84\xA9K\xC5\x1D@\xB0\x84{TF\x9B\x81V[a\x02\x1B\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x1B\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02ca\x05A6`\x04a\x0F\xF7V[a\n\xA0V[a\x03na\x05T6`\x04a\x0F\x98V[a\x0BDV[a\x02\x1B\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xDFa\x05\x8E6`\x04a\x0F]V[a\x0B\x9AV[a\x02\x1B\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x1B`\0\x81V[a\x02\x1B\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x1B\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02ca\x06\x1E6`\x04a\x0F]V[a\x0B\xC3V[a\x02\x1B\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x1B\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x1B\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\xC9WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\x06\xE7\x81a\x0B\xDFV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x07dW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0B\xECV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07\x9E\x82a\x07\x80V[a\x07\xA7\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0CQV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x08&W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07[V[a\x07|\x82\x82a\x0B\xECV[a\x08H`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\x08eW`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08{Wa\x08{a\x10\x12V[`\x02\x81\x11\x15a\x08\x8CWa\x08\x8Ca\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\t\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07[V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\t1Wa\t1a\x10\x12V[`\x02\x81\x11\x15a\tBWa\tBa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\t\xA7\x93\x92\x91\x90a\x10JV[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\t\xCC\x81a\x0B\xDFV[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0CQV[a\t\xFC`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\x19W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\n0Wa\n0a\x10\x12V[`\x02\x81\x11\x15a\nAWa\nAa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\n\x95\x91\x90a\x10wV[`@Q\x80\x91\x03\x90\xA1PV[a\n\xB8`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\xD5W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xEBWa\n\xEBa\x10\x12V[`\x02\x81\x11\x15a\n\xFCWa\n\xFCa\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\n\x95\x90\x83\x90a\x10wV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0BhWa\x0Bha\x10\x12V[`\x02\x81\x11\x15a\x0ByWa\x0Bya\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\xCC\x82a\x07\x80V[a\x0B\xD5\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0B\xECV[a\x0B\xE9\x813a\x0C\xD5V[PV[a\x0B\xF6\x82\x82a\x0B\x9AV[\x15a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C[\x82\x82a\x0B\x9AV[a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C\x913\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xDF\x82\x82a\x0B\x9AV[a\x07|Wa\x0C\xEC\x81a\r.V[a\x0C\xF7\x83` a\r@V[`@Q` \x01a\r\x08\x92\x91\x90a\x10\xA9V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07[\x91`\x04\x01a\x11\x18V[``a\x06\xC9`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\rO\x83`\x02a\x11aV[a\rZ\x90`\x02a\x11xV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\rrWa\rra\x11\x8BV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\r\x9CW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\xB7Wa\r\xB7a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xE6Wa\r\xE6a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x0E\n\x84`\x02a\x11aV[a\x0E\x15\x90`\x01a\x11xV[\x90P[`\x01\x81\x11\x15a\x0E\x8DWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0EIWa\x0EIa\x11\xA1V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E_Wa\x0E_a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0E\x86\x81a\x11\xB7V[\x90Pa\x0E\x18V[P\x83\x15a\x0E\xDCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07[V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xF5W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xDCW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0F$W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F;W`\0\x80\xFD[a\x0E\xDC\x82a\x0F\rV[`\0` \x82\x84\x03\x12\x15a\x0FVW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0FpW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\rV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0F$W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0F\xABW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\x89V[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\xD0W`\0\x80\xFD[\x835\x92Pa\x0F\xE0` \x85\x01a\x0F\x89V[\x91Pa\x0F\xEE`@\x85\x01a\x0F\rV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x10\tW`\0\x80\xFD[a\x0E\xDC\x82a\x0F\x89V[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10^` \x83\x01\x85a\x10(V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\xC9\x82\x84a\x10(V[`\0[\x83\x81\x10\x15a\x10\xA0W\x81\x81\x01Q\x83\x82\x01R` \x01a\x10\x88V[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xDB\x81`\x17\x85\x01` \x88\x01a\x10\x85V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x11\x0C\x81`(\x84\x01` \x88\x01a\x10\x85V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x117\x81`@\x85\x01` \x87\x01a\x10\x85V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\xC9Wa\x06\xC9a\x11KV[\x80\x82\x01\x80\x82\x11\x15a\x06\xC9Wa\x06\xC9a\x11KV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\xC6Wa\x11\xC6a\x11KV[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 e'hp\xAE\xCC\x95\xD0\x02j9\xA8\xA0\x8D\xC1\xB9\xA7&IlM\x88\xB6Eo*\xC6@TW\x80c}\x9D(\x80\x14a\x04eW\x80c\x7F\x90 \x9F\x14a\x04\x8CW\x80c\x85\xCB\x11\x91\x14a\x04\xB3W\x80c\x8C\x156\xDF\x14a\x04\xDAW\x80c\x8D\xEB8\x93\x14a\x05\x01W\x80c\x8E\x8D\xFD\x16\x14a\x05\x14W\x80c\x90r\xF88\x14a\x05'W\x80c\x91\xD1HT\x14a\x05NW\x80c\x97z\x80p\x14a\x05aW\x80c\xA2\x17\xFD\xDF\x14a\x05\x88W\x80c\xAD\x1C\x8A\x86\x14a\x05\x90W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xB7W\x80c\xD5Gt\x1F\x14a\x05\xDEW\x80c\xDA\x19\xDD\xFB\x14a\x05\xF1W\x80c\xDF8\x06\x93\x14a\x06\x18W\x80c\xF8\xAE\x93\xB4\x14a\x06?W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xC1W\x80c\x11\xEE\x8F\xF7\x14a\x01\xE9W\x80c\x16\xF7k\xBF\x14a\x02\x1EW\x80c\x17\x85\xF5<\x14a\x02EW\x80c!\x9C&j\x14a\x02ZW\x80c$\x8A\x9C\xA3\x14a\x02\x81W\x80c&h\xF3\x05\x14a\x02\x94W\x80c,\x0B\x8B\xF7\x14a\x02\xBBW\x80c.H\x85\xE8\x14a\x02\xE2W\x80c//\xF1]\x14a\x03\tW\x80c6V\x8A\xBE\x14a\x03\x1CW\x80c>\xBFy\x85\x14a\x03/W\x80cB\x16\xE7:\x14a\x03{W\x80cQ\xAD\n\x80\x14a\x03\xA2W\x80cZ\xF2\x7Fy\x14a\x03\xB5W\x80cpH\x02u\x14a\x03\xDCW\x80ct\xBC\x819\x14a\x03\xEFW\x80cu\xB28\xFC\x14a\x04\x02W[`\0\x80\xFD[a\x01\xD4a\x01\xCF6`\x04a\x0E\xB1V[a\x06fV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x10\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xE0V[a\x02\x10\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02Xa\x02S6`\x04a\x0E\xF7V[a\x06\x9DV[\0[a\x02\x10\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x10a\x02\x8F6`\x04a\x0F\x12V[a\x07NV[a\x02\x10\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x10\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x10\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02Xa\x03\x176`\x04a\x0F+V[a\x07cV[a\x02Xa\x03*6`\x04a\x0F+V[a\x07\x84V[a\x03ca\x03=6`\x04a\x0FfV[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xE0V[a\x02\x10\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02Xa\x03\xB06`\x04a\x0F\x89V[a\x07\xFEV[a\x02\x10\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02Xa\x03\xEA6`\x04a\x0E\xF7V[a\t\x82V[a\x02Xa\x03\xFD6`\x04a\x0F\xC5V[a\t\xB2V[a\x02\x10`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x81V[a\x02\x10\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x10\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x10\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x10\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x10\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x10\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02Xa\x05\x0F6`\x04a\x0F\xC5V[a\nnV[a\x03ca\x05\"6`\x04a\x0FfV[a\x0B\x12V[a\x02\x10\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xD4a\x05\\6`\x04a\x0F+V[a\x0BhV[a\x02\x10\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x10`\0\x81V[a\x02\x10\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x10\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02Xa\x05\xEC6`\x04a\x0F+V[a\x0B\x91V[a\x02\x10\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x10\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x10\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\x97WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\x06\xB5\x81a\x0B\xADV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x072W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0B\xBAV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07l\x82a\x07NV[a\x07u\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0C\x1FV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x07\xF4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07)V[a\x07J\x82\x82a\x0B\xBAV[a\x08\x16`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\x083W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08IWa\x08Ia\x0F\xE0V[`\x02\x81\x11\x15a\x08ZWa\x08Za\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\x08\xD7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07)V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\x08\xFFWa\x08\xFFa\x0F\xE0V[`\x02\x81\x11\x15a\t\x10Wa\t\x10a\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\tu\x93\x92\x91\x90a\x10\x18V[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\t\x9A\x81a\x0B\xADV[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0C\x1FV[a\t\xCA`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\t\xE7W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\t\xFEWa\t\xFEa\x0F\xE0V[`\x02\x81\x11\x15a\n\x0FWa\n\x0Fa\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\nc\x91\x90a\x10EV[`@Q\x80\x91\x03\x90\xA1PV[a\n\x86`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\n\xA3W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xB9Wa\n\xB9a\x0F\xE0V[`\x02\x81\x11\x15a\n\xCAWa\n\xCAa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\nc\x90\x83\x90a\x10EV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0B6Wa\x0B6a\x0F\xE0V[`\x02\x81\x11\x15a\x0BGWa\x0BGa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\x9A\x82a\x07NV[a\x0B\xA3\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0B\xBAV[a\x0B\xB7\x813a\x0C\xA3V[PV[a\x0B\xC4\x82\x82a\x0BhV[\x15a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C)\x82\x82a\x0BhV[a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C_3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xAD\x82\x82a\x0BhV[a\x07JWa\x0C\xBA\x81a\x0C\xFCV[a\x0C\xC5\x83` a\r\x0EV[`@Q` \x01a\x0C\xD6\x92\x91\x90a\x10wV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07)\x91`\x04\x01a\x10\xE6V[``a\x06\x97`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\r\x1D\x83`\x02a\x11/V[a\r(\x90`\x02a\x11FV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\r@Wa\r@a\x11YV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\rjW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x85Wa\r\x85a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xB4Wa\r\xB4a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\r\xD8\x84`\x02a\x11/V[a\r\xE3\x90`\x01a\x11FV[\x90P[`\x01\x81\x11\x15a\x0E[Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0E\x17Wa\x0E\x17a\x11oV[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E-Wa\x0E-a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0ET\x81a\x11\x85V[\x90Pa\r\xE6V[P\x83\x15a\x0E\xAAW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07)V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xC3W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xAAW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0E\xF2W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F\tW`\0\x80\xFD[a\x0E\xAA\x82a\x0E\xDBV[`\0` \x82\x84\x03\x12\x15a\x0F$W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0F>W`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0E\xDBV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0E\xF2W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0FyW`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0FWV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\x9EW`\0\x80\xFD[\x835\x92Pa\x0F\xAE` \x85\x01a\x0FWV[\x91Pa\x0F\xBC`@\x85\x01a\x0E\xDBV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x0F\xD7W`\0\x80\xFD[a\x0E\xAA\x82a\x0FWV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10\x14WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10,` \x83\x01\x85a\x0F\xF6V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\x97\x82\x84a\x0F\xF6V[`\0[\x83\x81\x10\x15a\x10nW\x81\x81\x01Q\x83\x82\x01R` \x01a\x10VV[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xA9\x81`\x17\x85\x01` \x88\x01a\x10SV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x10\xDA\x81`(\x84\x01` \x88\x01a\x10SV[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x11\x05\x81`@\x85\x01` \x87\x01a\x10SV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\x97Wa\x06\x97a\x11\x19V[\x80\x82\x01\x80\x82\x11\x15a\x06\x97Wa\x06\x97a\x11\x19V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\x94Wa\x11\x94a\x11\x19V[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 \xBC\xFBZ\xA3%\x1D\xDF3\xA8sl\x96\x89\xBD\x99\xCE\xA1\xDF[\xAA\x0F\xAC8|Ui\x13rX%\xC9rdsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xC7W`\x005`\xE0\x1C\x80c|\xAD\xF6\x9F\x11a\x01\0W\x80c|\xAD\xF6\x9F\x14a\x04\"W\x80c}J\x03\xBD\x14a\x04IW\x80c}\x9D(\x80\x14a\x04pW\x80c\x7F\x90 \x9F\x14a\x04\x97W\x80c\x81\xD4\x95x\x14a\x04\xBEW\x80c\x85\xCB\x11\x91\x14a\x04\xE5W\x80c\x8C\x156\xDF\x14a\x05\x0CW\x80c\x8D\xEB8\x93\x14a\x053W\x80c\x8E\x8D\xFD\x16\x14a\x05FW\x80c\x90r\xF88\x14a\x05YW\x80c\x91\xD1HT\x14a\x05\x80W\x80c\x97z\x80p\x14a\x05\x93W\x80c\xA2\x17\xFD\xDF\x14a\x05\xBAW\x80c\xAD\x1C\x8A\x86\x14a\x05\xC2W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xE9W\x80c\xD5Gt\x1F\x14a\x06\x10W\x80c\xDA\x19\xDD\xFB\x14a\x06#W\x80c\xDF8\x06\x93\x14a\x06JW\x80c\xF8\xAE\x93\xB4\x14a\x06qW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xCCW\x80c\x11\xEE\x8F\xF7\x14a\x01\xF4W\x80c\x16\xF7k\xBF\x14a\x02)W\x80c\x17\x85\xF5<\x14a\x02PW\x80c!\x9C&j\x14a\x02eW\x80c$\x8A\x9C\xA3\x14a\x02\x8CW\x80c&h\xF3\x05\x14a\x02\x9FW\x80c,\x0B\x8B\xF7\x14a\x02\xC6W\x80c.H\x85\xE8\x14a\x02\xEDW\x80c//\xF1]\x14a\x03\x14W\x80c6V\x8A\xBE\x14a\x03'W\x80c>\xBFy\x85\x14a\x03:W\x80cB\x16\xE7:\x14a\x03\x86W\x80cQ\xAD\n\x80\x14a\x03\xADW\x80cZ\xF2\x7Fy\x14a\x03\xC0W\x80cpH\x02u\x14a\x03\xE7W\x80ct\xBC\x819\x14a\x03\xFAW\x80cu\xB28\xFC\x14a\x04\rW[`\0\x80\xFD[a\x01\xDFa\x01\xDA6`\x04a\x0E\xE3V[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x1B\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xEBV[a\x02\x1B\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02ca\x02^6`\x04a\x0F)V[a\x06\xCFV[\0[a\x02\x1B\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x1Ba\x02\x9A6`\x04a\x0FDV[a\x07\x80V[a\x02\x1B\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x1B\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x1B\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02ca\x03\"6`\x04a\x0F]V[a\x07\x95V[a\x02ca\x0356`\x04a\x0F]V[a\x07\xB6V[a\x03na\x03H6`\x04a\x0F\x98V[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xEBV[a\x02\x1B\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02ca\x03\xBB6`\x04a\x0F\xBBV[a\x080V[a\x02\x1B\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02ca\x03\xF56`\x04a\x0F)V[a\t\xB4V[a\x02ca\x04\x086`\x04a\x0F\xF7V[a\t\xE4V[a\x02\x1B`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x81V[a\x02\x1B\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x1B\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x1B\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x1B\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x1B\x7FWIm\xE40\x02\x8F2,Y+\x0FsQ\x10\xEB4\xF1\xAE\x81\x84\xA9K\xC5\x1D@\xB0\x84{TF\x9B\x81V[a\x02\x1B\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x1B\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02ca\x05A6`\x04a\x0F\xF7V[a\n\xA0V[a\x03na\x05T6`\x04a\x0F\x98V[a\x0BDV[a\x02\x1B\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xDFa\x05\x8E6`\x04a\x0F]V[a\x0B\x9AV[a\x02\x1B\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x1B`\0\x81V[a\x02\x1B\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x1B\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02ca\x06\x1E6`\x04a\x0F]V[a\x0B\xC3V[a\x02\x1B\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x1B\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x1B\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\xC9WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\x06\xE7\x81a\x0B\xDFV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x07dW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0B\xECV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07\x9E\x82a\x07\x80V[a\x07\xA7\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0CQV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x08&W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07[V[a\x07|\x82\x82a\x0B\xECV[a\x08H`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\x08eW`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08{Wa\x08{a\x10\x12V[`\x02\x81\x11\x15a\x08\x8CWa\x08\x8Ca\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\t\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07[V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\t1Wa\t1a\x10\x12V[`\x02\x81\x11\x15a\tBWa\tBa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\t\xA7\x93\x92\x91\x90a\x10JV[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\t\xCC\x81a\x0B\xDFV[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0CQV[a\t\xFC`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\x19W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\n0Wa\n0a\x10\x12V[`\x02\x81\x11\x15a\nAWa\nAa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\n\x95\x91\x90a\x10wV[`@Q\x80\x91\x03\x90\xA1PV[a\n\xB8`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\xD5W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xEBWa\n\xEBa\x10\x12V[`\x02\x81\x11\x15a\n\xFCWa\n\xFCa\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\n\x95\x90\x83\x90a\x10wV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0BhWa\x0Bha\x10\x12V[`\x02\x81\x11\x15a\x0ByWa\x0Bya\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\xCC\x82a\x07\x80V[a\x0B\xD5\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0B\xECV[a\x0B\xE9\x813a\x0C\xD5V[PV[a\x0B\xF6\x82\x82a\x0B\x9AV[\x15a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C[\x82\x82a\x0B\x9AV[a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C\x913\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xDF\x82\x82a\x0B\x9AV[a\x07|Wa\x0C\xEC\x81a\r.V[a\x0C\xF7\x83` a\r@V[`@Q` \x01a\r\x08\x92\x91\x90a\x10\xA9V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07[\x91`\x04\x01a\x11\x18V[``a\x06\xC9`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\rO\x83`\x02a\x11aV[a\rZ\x90`\x02a\x11xV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\rrWa\rra\x11\x8BV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\r\x9CW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\xB7Wa\r\xB7a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xE6Wa\r\xE6a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x0E\n\x84`\x02a\x11aV[a\x0E\x15\x90`\x01a\x11xV[\x90P[`\x01\x81\x11\x15a\x0E\x8DWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0EIWa\x0EIa\x11\xA1V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E_Wa\x0E_a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0E\x86\x81a\x11\xB7V[\x90Pa\x0E\x18V[P\x83\x15a\x0E\xDCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07[V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xF5W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xDCW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0F$W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F;W`\0\x80\xFD[a\x0E\xDC\x82a\x0F\rV[`\0` \x82\x84\x03\x12\x15a\x0FVW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0FpW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\rV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0F$W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0F\xABW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\x89V[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\xD0W`\0\x80\xFD[\x835\x92Pa\x0F\xE0` \x85\x01a\x0F\x89V[\x91Pa\x0F\xEE`@\x85\x01a\x0F\rV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x10\tW`\0\x80\xFD[a\x0E\xDC\x82a\x0F\x89V[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10^` \x83\x01\x85a\x10(V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\xC9\x82\x84a\x10(V[`\0[\x83\x81\x10\x15a\x10\xA0W\x81\x81\x01Q\x83\x82\x01R` \x01a\x10\x88V[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xDB\x81`\x17\x85\x01` \x88\x01a\x10\x85V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x11\x0C\x81`(\x84\x01` \x88\x01a\x10\x85V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x117\x81`@\x85\x01` \x87\x01a\x10\x85V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\xC9Wa\x06\xC9a\x11KV[\x80\x82\x01\x80\x82\x11\x15a\x06\xC9Wa\x06\xC9a\x11KV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\xC6Wa\x11\xC6a\x11KV[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 e'hp\xAE\xCC\x95\xD0\x02j9\xA8\xA0\x8D\xC1\xB9\xA7&IlM\x88\xB6Eo*\xC6@T ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([129, 212, 149, 120], ()) + .expect("method not found (this should never happen)") + } ///Calls the contract's `RATE_LIMIT_NFT_CONTRACT` (0x2e4885e8) function pub fn rate_limit_nft_contract( &self, @@ -2142,6 +2174,24 @@ pub mod contract_resolver { )] #[ethcall(name = "PUB_KEY_ROUTER_CONTRACT", abi = "PUB_KEY_ROUTER_CONTRACT()")] pub struct PubKeyRouterContractCall; + ///Container type for all input parameters for the `PUB_KEY_ROUTER_VIEWS_CONTRACT` function with signature `PUB_KEY_ROUTER_VIEWS_CONTRACT()` and selector `0x81d49578` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "PUB_KEY_ROUTER_VIEWS_CONTRACT", + abi = "PUB_KEY_ROUTER_VIEWS_CONTRACT()" + )] + pub struct PubKeyRouterViewsContractCall; ///Container type for all input parameters for the `RATE_LIMIT_NFT_CONTRACT` function with signature `RATE_LIMIT_NFT_CONTRACT()` and selector `0x2e4885e8` #[derive( Clone, @@ -2459,6 +2509,7 @@ pub mod contract_resolver { PkpPermissionsContract(PkpPermissionsContractCall), PriceFeedContract(PriceFeedContractCall), PubKeyRouterContract(PubKeyRouterContractCall), + PubKeyRouterViewsContract(PubKeyRouterViewsContractCall), RateLimitNftContract(RateLimitNftContractCall), ReleaseRegisterContract(ReleaseRegisterContractCall), StakingBalancesContract(StakingBalancesContractCall), @@ -2577,6 +2628,11 @@ pub mod contract_resolver { ) { return Ok(Self::PubKeyRouterContract(decoded)); } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::PubKeyRouterViewsContract(decoded)); + } if let Ok(decoded) = ::decode( data, ) { @@ -2725,6 +2781,9 @@ pub mod contract_resolver { Self::PubKeyRouterContract(element) => { ::ethers::core::abi::AbiEncode::encode(element) } + Self::PubKeyRouterViewsContract(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } Self::RateLimitNftContract(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -2819,6 +2878,9 @@ pub mod contract_resolver { Self::PubKeyRouterContract(element) => { ::core::fmt::Display::fmt(element, f) } + Self::PubKeyRouterViewsContract(element) => { + ::core::fmt::Display::fmt(element, f) + } Self::RateLimitNftContract(element) => { ::core::fmt::Display::fmt(element, f) } @@ -2940,6 +3002,11 @@ pub mod contract_resolver { Self::PubKeyRouterContract(value) } } + impl ::core::convert::From for ContractResolverCalls { + fn from(value: PubKeyRouterViewsContractCall) -> Self { + Self::PubKeyRouterViewsContract(value) + } + } impl ::core::convert::From for ContractResolverCalls { fn from(value: RateLimitNftContractCall) -> Self { Self::RateLimitNftContract(value) @@ -3291,6 +3358,20 @@ pub mod contract_resolver { Hash )] pub struct PubKeyRouterContractReturn(pub [u8; 32]); + ///Container type for all return fields from the `PUB_KEY_ROUTER_VIEWS_CONTRACT` function with signature `PUB_KEY_ROUTER_VIEWS_CONTRACT()` and selector `0x81d49578` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct PubKeyRouterViewsContractReturn(pub [u8; 32]); ///Container type for all return fields from the `RATE_LIMIT_NFT_CONTRACT` function with signature `RATE_LIMIT_NFT_CONTRACT()` and selector `0x2e4885e8` #[derive( Clone, diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/key_deriver.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/key_deriver.rs index 46874e3..01aa58f 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/key_deriver.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/key_deriver.rs @@ -127,13 +127,13 @@ pub mod key_deriver { __abi, ); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[Pa\x05\xEE\x80a\0\x1F`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xB3\xF5\xD6\xAC\xD5\xA77\x13D\xCA\xCA\xB0^`py\xEB\xF4v\xB4m\x8B\x17\x04\x19a/\x80\xE7\xA8\xAC\x95dsolcC\0\x08\x1C\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[Pa\x05\xEE\x80a\0\x1F`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 ].\x87\x92D\x05\xC7Z7\xCB1\x99\x10\x9D\xC5\x84wu\xCE(\x13|^\x1C\xA4\x05r\x0C\xFA;\xEA=dsolcC\0\x08\x1C\x003"; /// The bytecode of the contract. pub static KEYDERIVER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xB3\xF5\xD6\xAC\xD5\xA77\x13D\xCA\xCA\xB0^`py\xEB\xF4v\xB4m\x8B\x17\x04\x19a/\x80\xE7\xA8\xAC\x95dsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 ].\x87\x92D\x05\xC7Z7\xCB1\x99\x10\x9D\xC5\x84wu\xCE(\x13|^\x1C\xA4\x05r\x0C\xFA;\xEA=dsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static KEYDERIVER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/pkp_helper.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/pkp_helper.rs index 940d467..c6c64a2 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/pkp_helper.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/pkp_helper.rs @@ -1434,13 +1434,13 @@ pub mod pkp_helper { __abi, ); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa:v8\x03\x80a:v\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xD5V[a\083a\0\x85V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83\x83\x81\x11\x15a\0yWa\0ya\x01\x1FV[\x02\x17\x90UPPPa\x015V[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0\x80`@\x83\x85\x03\x12\x15a\0\xE8W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xFFW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\x14W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a92\x80a\x01D`\09`\0\xF3\xFE`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 8)W\x80\xA3\x13\xE8\x95\xB6\xDC\xEAh\xE9\0\xA6o\x08;\xF3mzE$\xB6<\xF8\xBF#\xE4\x9Dc\rdsolcC\0\x08\x1C\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa:v8\x03\x80a:v\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xD5V[a\083a\0\x85V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83\x83\x81\x11\x15a\0yWa\0ya\x01\x1FV[\x02\x17\x90UPPPa\x015V[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0\x80`@\x83\x85\x03\x12\x15a\0\xE8W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xFFW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\x14W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a92\x80a\x01D`\09`\0\xF3\xFE`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 \x1F0\xB6\xE1\x1B=\xBC\xAE\xC6\x1A<\xBE\x0Ee\xBDi\xF7\xCC\x1AE\xCAG\x92\xF4\xFC:\x0BbY\xA4\xBA\xE1dsolcC\0\x08\x1C\x003"; /// The bytecode of the contract. pub static PKPHELPER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 8)W\x80\xA3\x13\xE8\x95\xB6\xDC\xEAh\xE9\0\xA6o\x08;\xF3mzE$\xB6<\xF8\xBF#\xE4\x9Dc\rdsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 \x1F0\xB6\xE1\x1B=\xBC\xAE\xC6\x1A<\xBE\x0Ee\xBDi\xF7\xCC\x1AE\xCAG\x92\xF4\xFC:\x0BbY\xA4\xBA\xE1dsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static PKPHELPER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/pkpnft_metadata.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/pkpnft_metadata.rs index 1dec6bc..8f315c8 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/pkpnft_metadata.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/pkpnft_metadata.rs @@ -278,13 +278,13 @@ pub mod pkpnft_metadata { __abi, ); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`@Qa\x1C}8\x03\x80a\x1C}\x839\x81\x01`@\x81\x90R`,\x91`vV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15`kW`k`\xBDV[\x02\x17\x90UPPP`\xD3V[`\0\x80`@\x83\x85\x03\x12\x15`\x88W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14`\x9EW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10`\xB2W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x1B\x9B\x80a\0\xE2`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x8F\x13\x99\xB0\x85\xBF\xFD\xE0ex\xF1\xDD\x04\xAD6!~\xEDG\xFB\xA0mu\xA3\x1F\\\xE9\xE6qQx\x82dsolcC\0\x08\x1C\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`@Qa\x1C}8\x03\x80a\x1C}\x839\x81\x01`@\x81\x90R`,\x91`vV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15`kW`k`\xBDV[\x02\x17\x90UPPP`\xD3V[`\0\x80`@\x83\x85\x03\x12\x15`\x88W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14`\x9EW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10`\xB2W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x1B\x9B\x80a\0\xE2`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x11\x9F>\xFF\x15\xD9\xF5\xEA\x1C\x05_7\x90\x172\x96\x03\x0EY\x97>*\xD6`\xE8q\x1AU\xE2\xF03\x13dsolcC\0\x08\x1C\x003"; /// The bytecode of the contract. pub static PKPNFTMETADATA_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x8F\x13\x99\xB0\x85\xBF\xFD\xE0ex\xF1\xDD\x04\xAD6!~\xEDG\xFB\xA0mu\xA3\x1F\\\xE9\xE6qQx\x82dsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x11\x9F>\xFF\x15\xD9\xF5\xEA\x1C\x05_7\x90\x172\x96\x03\x0EY\x97>*\xD6`\xE8q\x1AU\xE2\xF03\x13dsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static PKPNFTMETADATA_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/pubkey_router.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/pubkey_router.rs index 900433a..fe9416f 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/pubkey_router.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/pubkey_router.rs @@ -671,6 +671,7 @@ pub mod pubkey_router { ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -781,6 +782,7 @@ pub mod pubkey_router { ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -868,6 +870,13 @@ pub mod pubkey_router { ::std::borrow::ToOwned::to_owned("bytes32"), ), }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("keySetIdentifier"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, ], outputs: ::std::vec![], constant: ::core::option::Option::None, @@ -924,6 +933,13 @@ pub mod pubkey_router { ::std::borrow::ToOwned::to_owned("bytes32"), ), }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("keySetIdentifier"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, ], outputs: ::std::vec![], constant: ::core::option::Option::None, @@ -1209,6 +1225,11 @@ pub mod pubkey_router { ), indexed: false, }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("keySetIdentifier"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, ], anonymous: false, }, @@ -1979,7 +2000,7 @@ pub mod pubkey_router { .method_hash([249, 93, 113, 177], new_resolver_address) .expect("method not found (this should never happen)") } - ///Calls the contract's `setRoutingData` (0x0fccbd62) function + ///Calls the contract's `setRoutingData` (0xff463de6) function pub fn set_routing_data( &self, token_id: ::ethers::core::types::U256, @@ -1987,21 +2008,23 @@ pub mod pubkey_router { staking_contract_address: ::ethers::core::types::Address, key_type: ::ethers::core::types::U256, derived_key_id: [u8; 32], + key_set_identifier: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash( - [15, 204, 189, 98], + [255, 70, 61, 230], ( token_id, pubkey, staking_contract_address, key_type, derived_key_id, + key_set_identifier, ), ) .expect("method not found (this should never happen)") } - ///Calls the contract's `setRoutingDataAsAdmin` (0x6e289d8e) function + ///Calls the contract's `setRoutingDataAsAdmin` (0x6c095735) function pub fn set_routing_data_as_admin( &self, token_id: ::ethers::core::types::U256, @@ -2009,11 +2032,19 @@ pub mod pubkey_router { staking_contract: ::ethers::core::types::Address, key_type: ::ethers::core::types::U256, derived_key_id: [u8; 32], + key_set_identifier: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash( - [110, 40, 157, 142], - (token_id, pubkey, staking_contract, key_type, derived_key_id), + [108, 9, 87, 53], + ( + token_id, + pubkey, + staking_contract, + key_type, + derived_key_id, + key_set_identifier, + ), ) .expect("method not found (this should never happen)") } @@ -3001,7 +3032,7 @@ pub mod pubkey_router { )] #[ethevent( name = "PubkeyRoutingDataSet", - abi = "PubkeyRoutingDataSet(uint256,bytes,address,uint256,bytes32)" + abi = "PubkeyRoutingDataSet(uint256,bytes,address,uint256,bytes32,string)" )] pub struct PubkeyRoutingDataSetFilter { #[ethevent(indexed)] @@ -3010,6 +3041,7 @@ pub mod pubkey_router { pub staking_contract: ::ethers::core::types::Address, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } #[derive( Clone, @@ -3587,7 +3619,7 @@ pub mod pubkey_router { pub struct SetContractResolverCall { pub new_resolver_address: ::ethers::core::types::Address, } - ///Container type for all input parameters for the `setRoutingData` function with signature `setRoutingData(uint256,bytes,address,uint256,bytes32)` and selector `0x0fccbd62` + ///Container type for all input parameters for the `setRoutingData` function with signature `setRoutingData(uint256,bytes,address,uint256,bytes32,string)` and selector `0xff463de6` #[derive( Clone, ::ethers::contract::EthCall, @@ -3602,7 +3634,7 @@ pub mod pubkey_router { )] #[ethcall( name = "setRoutingData", - abi = "setRoutingData(uint256,bytes,address,uint256,bytes32)" + abi = "setRoutingData(uint256,bytes,address,uint256,bytes32,string)" )] pub struct SetRoutingDataCall { pub token_id: ::ethers::core::types::U256, @@ -3610,8 +3642,9 @@ pub mod pubkey_router { pub staking_contract_address: ::ethers::core::types::Address, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } - ///Container type for all input parameters for the `setRoutingDataAsAdmin` function with signature `setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32)` and selector `0x6e289d8e` + ///Container type for all input parameters for the `setRoutingDataAsAdmin` function with signature `setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32,string)` and selector `0x6c095735` #[derive( Clone, ::ethers::contract::EthCall, @@ -3626,7 +3659,7 @@ pub mod pubkey_router { )] #[ethcall( name = "setRoutingDataAsAdmin", - abi = "setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32)" + abi = "setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32,string)" )] pub struct SetRoutingDataAsAdminCall { pub token_id: ::ethers::core::types::U256, @@ -3634,6 +3667,7 @@ pub mod pubkey_router { pub staking_contract: ::ethers::core::types::Address, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } ///Container type for all input parameters for the `setTrustedForwarder` function with signature `setTrustedForwarder(address)` and selector `0xda742228` #[derive( @@ -4568,7 +4602,7 @@ pub mod pubkey_router { pub pubkey: ::ethers::core::types::Bytes, pub eth_address: ::ethers::core::types::Address, } - ///`PubkeyRoutingData(bytes,uint256,bytes32)` + ///`PubkeyRoutingData(bytes,uint256,bytes32,string)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -4585,5 +4619,6 @@ pub mod pubkey_router { pub pubkey: ::ethers::core::types::Bytes, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } } diff --git a/rust/lit-core/lit-blockchain-lite/src/contracts/staking.rs b/rust/lit-core/lit-blockchain-lite/src/contracts/staking.rs index bc8580a..2dbcc49 100644 --- a/rust/lit-core/lit-blockchain-lite/src/contracts/staking.rs +++ b/rust/lit-core/lit-blockchain-lite/src/contracts/staking.rs @@ -1722,11 +1722,7 @@ abi_functions.append(&mut __abi_functions_4()); ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ), ), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Address, - ), - ), + ::ethers::core::abi::ethabi::ParamType::Bytes, ], ), internal_type: ::core::option::Option::Some( @@ -1741,30 +1737,6 @@ abi_functions.append(&mut __abi_functions_4()); }, ], ), - ( - ::std::borrow::ToOwned::to_owned("getKeyTypes"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("getKeyTypes"), - inputs: ::std::vec![], - outputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256[]"), - ), - }, - ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("getKickedValidators"), ::std::vec![ @@ -1800,19 +1772,8 @@ abi_functions.append(&mut __abi_functions_4()); state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, }, ], - ) - ] - ) - } - - - -#[allow(deprecated)] - fn __abi_functions_2() -> std::collections::BTreeMap> { - - std::collections::BTreeMap::from( - [ - ( + ), + ( ::std::borrow::ToOwned::to_owned("getLastStakeRecord"), ::std::vec![ ::ethers::core::abi::ethabi::Function { @@ -1861,8 +1822,19 @@ abi_functions.append(&mut __abi_functions_4()); state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, }, ], - ), - ( + ) + ] + ) + } + + + +#[allow(deprecated)] + fn __abi_functions_2() -> std::collections::BTreeMap> { + + std::collections::BTreeMap::from( + [ + ( ::std::borrow::ToOwned::to_owned("getLitCirc"), ::std::vec![ ::ethers::core::abi::ethabi::Function { @@ -3567,11 +3539,6 @@ abi_functions.append(&mut __abi_functions_4()); kind: ::ethers::core::abi::ethabi::ParamType::Tuple( ::std::vec![ ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -3832,19 +3799,8 @@ abi_functions.append(&mut __abi_functions_4()); state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, }, ], - ) - ] - ) - } - - - -#[allow(deprecated)] - fn __abi_functions_3() -> std::collections::BTreeMap> { - - std::collections::BTreeMap::from( - [ - ( + ), + ( ::std::borrow::ToOwned::to_owned("isActiveValidatorByNodeAddress"), ::std::vec![ ::ethers::core::abi::ethabi::Function { @@ -3882,8 +3838,19 @@ abi_functions.append(&mut __abi_functions_4()); state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, }, ], - ), - ( + ) + ] + ) + } + + + +#[allow(deprecated)] + fn __abi_functions_3() -> std::collections::BTreeMap> { + + std::collections::BTreeMap::from( + [ + ( ::std::borrow::ToOwned::to_owned( "isActiveValidatorByNodeAddressForNextEpoch", ), @@ -4206,11 +4173,7 @@ abi_functions.append(&mut __abi_functions_4()); ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ), ), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Address, - ), - ), + ::ethers::core::abi::ethabi::ParamType::Bytes, ], ), ), @@ -4867,6 +4830,7 @@ abi_functions.append(&mut __abi_functions_4()); ::ethers::core::abi::ethabi::ParamType::Bool, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -5157,11 +5121,6 @@ abi_functions.append(&mut __abi_functions_4()); kind: ::ethers::core::abi::ethabi::ParamType::Tuple( ::std::vec![ ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -5464,11 +5423,7 @@ abi_functions.append(&mut __abi_functions_4()); ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ), ), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Address, - ), - ), + ::ethers::core::abi::ethabi::ParamType::Bytes, ], ), internal_type: ::core::option::Option::Some( @@ -5483,19 +5438,8 @@ abi_functions.append(&mut __abi_functions_4()); state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, }, ], - ) - ] - ) - } - - - -#[allow(deprecated)] - fn __abi_functions_4() -> std::collections::BTreeMap> { - - std::collections::BTreeMap::from( - [ - ( + ), + ( ::std::borrow::ToOwned::to_owned("setLitActionConfig"), ::std::vec![ ::ethers::core::abi::ethabi::Function { @@ -5540,8 +5484,19 @@ abi_functions.append(&mut __abi_functions_4()); state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, }, ], - ), - ( + ) + ] + ) + } + + + +#[allow(deprecated)] + fn __abi_functions_4() -> std::collections::BTreeMap> { + + std::collections::BTreeMap::from( + [ + ( ::std::borrow::ToOwned::to_owned("setMaxVersion"), ::std::vec![ ::ethers::core::abi::ethabi::Function { @@ -5734,6 +5689,7 @@ abi_functions.append(&mut __abi_functions_4()); ::ethers::core::abi::ethabi::ParamType::Bool, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -6475,96 +6431,6 @@ abi_functions.append(&mut __abi_functions_4()); }, ], ), - ( - ::std::borrow::ToOwned::to_owned("ConfigSet"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConfigSet"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newTokenRewardPerTokenPerEpoch", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("newKeyTypes"), - kind: ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMinimumValidatorCount", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMaxConcurrentRequests", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMaxPresignCount", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMinPresignCount", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newPeerCheckingIntervalSecs", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMaxPresignConcurrency", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newRpcHealthcheckEnabled", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Bool, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("CountOfflinePhaseData"), ::std::vec![ @@ -9482,17 +9348,6 @@ abi_errors.append(&mut __abi_errors_2()); .method_hash([163, 5, 229, 254], identifier) .expect("method not found (this should never happen)") } - ///Calls the contract's `getKeyTypes` (0xf1b877a8) function - pub fn get_key_types( - &self, - ) -> ::ethers::contract::builders::ContractCall< - M, - ::std::vec::Vec<::ethers::core::types::U256>, - > { - self.0 - .method_hash([241, 184, 119, 168], ()) - .expect("method not found (this should never happen)") - } ///Calls the contract's `getKickedValidators` (0x4b6afbbb) function pub fn get_kicked_validators( &self, @@ -10472,13 +10327,13 @@ abi_errors.append(&mut __abi_errors_2()); .method_hash([68, 14, 141, 34], (reason, config)) .expect("method not found (this should never happen)") } - ///Calls the contract's `setConfig` (0x077b0d40) function + ///Calls the contract's `setConfig` (0xd94c412d) function pub fn set_config( &self, new_config: GlobalConfig, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([7, 123, 13, 64], (new_config,)) + .method_hash([217, 76, 65, 45], (new_config,)) .expect("method not found (this should never happen)") } ///Calls the contract's `setContractResolver` (0xf95d71b1) function @@ -10560,13 +10415,13 @@ abi_errors.append(&mut __abi_errors_2()); .method_hash([44, 128, 181, 73], (ip, ipv_6, port, operator_address)) .expect("method not found (this should never happen)") } - ///Calls the contract's `setKeySet` (0x74d0be87) function + ///Calls the contract's `setKeySet` (0x774d0151) function pub fn set_key_set( &self, update: KeySetConfig, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([116, 208, 190, 135], (update,)) + .method_hash([119, 77, 1, 81], (update,)) .expect("method not found (this should never happen)") } ///Calls the contract's `setLitActionConfig` (0xe7d1f9a1) function @@ -10628,14 +10483,14 @@ abi_errors.append(&mut __abi_errors_2()); .method_hash([116, 162, 44, 81], (realm_id, permitted_validators_on)) .expect("method not found (this should never happen)") } - ///Calls the contract's `setRealmConfig` (0x7d35690f) function + ///Calls the contract's `setRealmConfig` (0x006d27b6) function pub fn set_realm_config( &self, realm_id: ::ethers::core::types::U256, new_config: RealmConfig, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([125, 53, 105, 15], (realm_id, new_config)) + .method_hash([0, 109, 39, 182], (realm_id, new_config)) .expect("method not found (this should never happen)") } ///Calls the contract's `setTokenTotalSupplyStandIn` (0xe941a733) function @@ -10860,16 +10715,6 @@ abi_errors.append(&mut __abi_errors_2()); > { self.0.event() } - ///Gets the contract's `ConfigSet` event - pub fn config_set_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - ConfigSetFilter, - > { - self.0.event() - } ///Gets the contract's `CountOfflinePhaseData` event pub fn count_offline_phase_data_filter( &self, @@ -14206,33 +14051,6 @@ abi_errors.append(&mut __abi_errors_2()); Eq, Hash )] - #[ethevent( - name = "ConfigSet", - abi = "ConfigSet(uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,bool)" - )] - pub struct ConfigSetFilter { - pub new_token_reward_per_token_per_epoch: ::ethers::core::types::U256, - pub new_key_types: ::std::vec::Vec<::ethers::core::types::U256>, - pub new_minimum_validator_count: ::ethers::core::types::U256, - pub new_max_concurrent_requests: ::ethers::core::types::U256, - pub new_max_presign_count: ::ethers::core::types::U256, - pub new_min_presign_count: ::ethers::core::types::U256, - pub new_peer_checking_interval_secs: ::ethers::core::types::U256, - pub new_max_presign_concurrency: ::ethers::core::types::U256, - pub new_rpc_healthcheck_enabled: bool, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash - )] #[ethevent(name = "CountOfflinePhaseData", abi = "CountOfflinePhaseData(uint256)")] pub struct CountOfflinePhaseDataFilter { pub data_type: ::ethers::core::types::U256, @@ -14884,7 +14702,6 @@ abi_errors.append(&mut __abi_errors_2()); AttestedWalletRegisteredFilter(AttestedWalletRegisteredFilter), ClearOfflinePhaseDataFilter(ClearOfflinePhaseDataFilter), ComplaintConfigSetFilter(ComplaintConfigSetFilter), - ConfigSetFilter(ConfigSetFilter), CountOfflinePhaseDataFilter(CountOfflinePhaseDataFilter), DebugEventFilter(DebugEventFilter), DevopsAdminSetFilter(DevopsAdminSetFilter), @@ -14937,9 +14754,6 @@ abi_errors.append(&mut __abi_errors_2()); if let Ok(decoded) = ComplaintConfigSetFilter::decode_log(log) { return Ok(StakingEvents::ComplaintConfigSetFilter(decoded)); } - if let Ok(decoded) = ConfigSetFilter::decode_log(log) { - return Ok(StakingEvents::ConfigSetFilter(decoded)); - } if let Ok(decoded) = CountOfflinePhaseDataFilter::decode_log(log) { return Ok(StakingEvents::CountOfflinePhaseDataFilter(decoded)); } @@ -15063,7 +14877,6 @@ abi_errors.append(&mut __abi_errors_2()); Self::ComplaintConfigSetFilter(element) => { ::core::fmt::Display::fmt(element, f) } - Self::ConfigSetFilter(element) => ::core::fmt::Display::fmt(element, f), Self::CountOfflinePhaseDataFilter(element) => { ::core::fmt::Display::fmt(element, f) } @@ -15182,11 +14995,6 @@ abi_errors.append(&mut __abi_errors_2()); Self::ComplaintConfigSetFilter(value) } } - impl ::core::convert::From for StakingEvents { - fn from(value: ConfigSetFilter) -> Self { - Self::ConfigSetFilter(value) - } - } impl ::core::convert::From for StakingEvents { fn from(value: CountOfflinePhaseDataFilter) -> Self { Self::CountOfflinePhaseDataFilter(value) @@ -16275,21 +16083,6 @@ abi_errors.append(&mut __abi_errors_2()); pub struct GetKeySetCall { pub identifier: ::std::string::String, } - ///Container type for all input parameters for the `getKeyTypes` function with signature `getKeyTypes()` and selector `0xf1b877a8` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "getKeyTypes", abi = "getKeyTypes()")] - pub struct GetKeyTypesCall; ///Container type for all input parameters for the `getKickedValidators` function with signature `getKickedValidators(uint256)` and selector `0x4b6afbbb` #[derive( Clone, @@ -17990,7 +17783,7 @@ abi_errors.append(&mut __abi_errors_2()); pub reason: ::ethers::core::types::U256, pub config: ComplaintConfig, } - ///Container type for all input parameters for the `setConfig` function with signature `setConfig((uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x077b0d40` + ///Container type for all input parameters for the `setConfig` function with signature `setConfig((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0xd94c412d` #[derive( Clone, ::ethers::contract::EthCall, @@ -18000,7 +17793,7 @@ abi_errors.append(&mut __abi_errors_2()); )] #[ethcall( name = "setConfig", - abi = "setConfig((uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))" + abi = "setConfig((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))" )] pub struct SetConfigCall { pub new_config: GlobalConfig, @@ -18154,7 +17947,7 @@ abi_errors.append(&mut __abi_errors_2()); pub port: u32, pub operator_address: ::ethers::core::types::Address, } - ///Container type for all input parameters for the `setKeySet` function with signature `setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],address[]))` and selector `0x74d0be87` + ///Container type for all input parameters for the `setKeySet` function with signature `setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],bytes))` and selector `0x774d0151` #[derive( Clone, ::ethers::contract::EthCall, @@ -18169,7 +17962,7 @@ abi_errors.append(&mut __abi_errors_2()); )] #[ethcall( name = "setKeySet", - abi = "setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],address[]))" + abi = "setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],bytes))" )] pub struct SetKeySetCall { pub update: KeySetConfig, @@ -18299,7 +18092,7 @@ abi_errors.append(&mut __abi_errors_2()); pub realm_id: ::ethers::core::types::U256, pub permitted_validators_on: bool, } - ///Container type for all input parameters for the `setRealmConfig` function with signature `setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool))` and selector `0x7d35690f` + ///Container type for all input parameters for the `setRealmConfig` function with signature `setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool,string))` and selector `0x006d27b6` #[derive( Clone, ::ethers::contract::EthCall, @@ -18314,7 +18107,7 @@ abi_errors.append(&mut __abi_errors_2()); )] #[ethcall( name = "setRealmConfig", - abi = "setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool))" + abi = "setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool,string))" )] pub struct SetRealmConfigCall { pub realm_id: ::ethers::core::types::U256, @@ -18715,7 +18508,6 @@ abi_errors.append(&mut __abi_errors_2()); GetDelegatedStakersWithUnfreezingStakesCountCall, ), GetKeySet(GetKeySetCall), - GetKeyTypes(GetKeyTypesCall), GetKickedValidators(GetKickedValidatorsCall), GetLastStakeRecord(GetLastStakeRecordCall), GetLitCirc(GetLitCircCall), @@ -19096,11 +18888,6 @@ abi_errors.append(&mut __abi_errors_2()); ) { return Ok(Self::GetKeySet(decoded)); } - if let Ok(decoded) = ::decode( - data, - ) { - return Ok(Self::GetKeyTypes(decoded)); - } if let Ok(decoded) = ::decode( data, ) { @@ -19875,9 +19662,6 @@ abi_errors.append(&mut __abi_errors_2()); Self::GetKeySet(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::GetKeyTypes(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::GetKickedValidators(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -20360,7 +20144,6 @@ abi_errors.append(&mut __abi_errors_2()); ::core::fmt::Display::fmt(element, f) } Self::GetKeySet(element) => ::core::fmt::Display::fmt(element, f), - Self::GetKeyTypes(element) => ::core::fmt::Display::fmt(element, f), Self::GetKickedValidators(element) => { ::core::fmt::Display::fmt(element, f) } @@ -20890,11 +20673,6 @@ abi_errors.append(&mut __abi_errors_2()); Self::GetKeySet(value) } } - impl ::core::convert::From for StakingCalls { - fn from(value: GetKeyTypesCall) -> Self { - Self::GetKeyTypes(value) - } - } impl ::core::convert::From for StakingCalls { fn from(value: GetKickedValidatorsCall) -> Self { Self::GetKickedValidators(value) @@ -21940,20 +21718,6 @@ abi_errors.append(&mut __abi_errors_2()); Hash )] pub struct GetKeySetReturn(pub KeySetConfig); - ///Container type for all return fields from the `getKeyTypes` function with signature `getKeyTypes()` and selector `0xf1b877a8` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetKeyTypesReturn(pub ::std::vec::Vec<::ethers::core::types::U256>); ///Container type for all return fields from the `getKickedValidators` function with signature `getKickedValidators(uint256)` and selector `0x4b6afbbb` #[derive( Clone, @@ -23251,7 +23015,7 @@ abi_errors.append(&mut __abi_errors_2()); pub start_time: ::ethers::core::types::U256, pub last_advance_vote_time: ::ethers::core::types::U256, } - ///`GlobalConfig(uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)` + ///`GlobalConfig(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -23266,7 +23030,6 @@ abi_errors.append(&mut __abi_errors_2()); )] pub struct GlobalConfig { pub token_reward_per_token_per_epoch: ::ethers::core::types::U256, - pub key_types: ::std::vec::Vec<::ethers::core::types::U256>, pub minimum_validator_count: ::ethers::core::types::U256, pub reward_epoch_duration: ::ethers::core::types::U256, pub max_time_lock: ::ethers::core::types::U256, @@ -23288,7 +23051,7 @@ abi_errors.append(&mut __abi_errors_2()); pub min_threshold_to_clamp_at: ::ethers::core::types::U256, pub vote_to_advance_time_out: ::ethers::core::types::U256, } - ///`KeySetConfig(uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],address[])` + ///`KeySetConfig(uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],bytes)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -23310,7 +23073,7 @@ abi_errors.append(&mut __abi_errors_2()); pub realms: ::std::vec::Vec<::ethers::core::types::U256>, pub curves: ::std::vec::Vec<::ethers::core::types::U256>, pub counts: ::std::vec::Vec<::ethers::core::types::U256>, - pub recovery_party_members: ::std::vec::Vec<::ethers::core::types::Address>, + pub recovery_session_id: ::ethers::core::types::Bytes, } ///`LitActionConfig(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)` #[derive( @@ -23356,7 +23119,7 @@ abi_errors.append(&mut __abi_errors_2()); pub node_address: ::ethers::core::types::Address, pub pub_key: UncompressedK256Key, } - ///`RealmConfig(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool)` + ///`RealmConfig(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool,string)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -23378,6 +23141,7 @@ abi_errors.append(&mut __abi_errors_2()); pub rpc_healthcheck_enabled: bool, pub min_epoch_for_rewards: ::ethers::core::types::U256, pub permitted_validators_on: bool, + pub default_key_set: ::std::string::String, } ///`RewardEpoch(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)` #[derive( diff --git a/rust/lit-core/lit-blockchain/Cargo.toml b/rust/lit-core/lit-blockchain/Cargo.toml index 7ad1d95..8444c6f 100644 --- a/rust/lit-core/lit-blockchain/Cargo.toml +++ b/rust/lit-core/lit-blockchain/Cargo.toml @@ -20,7 +20,7 @@ im = "15.1.0" moka = { version = "0.12.10", features = ["sync"] } once_cell.workspace = true reqwest.workspace = true -scc = "2.4" +scc.workspace = true serde.workspace = true serde_json.workspace = true serde_yaml = { version = "0.9.14" } diff --git a/rust/lit-core/lit-blockchain/abis/ArbitrumKeyDeriver.json b/rust/lit-core/lit-blockchain/abis/ArbitrumKeyDeriver.json index f48ee96..132cb67 100644 --- a/rust/lit-core/lit-blockchain/abis/ArbitrumKeyDeriver.json +++ b/rust/lit-core/lit-blockchain/abis/ArbitrumKeyDeriver.json @@ -348,8 +348,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516111ca3803806111ca83398101604081905261002f916101a4565b6100476000805160206111aa833981519152336100ad565b61005f6000805160206111aa833981519152806100bb565b600180546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b8360028111156100a1576100a16101ee565b02179055505050610204565b6100b78282610106565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100b7576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600080604083850312156101b757600080fd5b82516001600160a01b03811681146101ce57600080fd5b6020840151909250600381106101e357600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b610f97806102136000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa264697066735822122037243bc43e78ac34bb45bfe243450c281f61d226e12cdab04b2899832a44ff7764736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa264697066735822122037243bc43e78ac34bb45bfe243450c281f61d226e12cdab04b2899832a44ff7764736f6c634300081c0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516111ca3803806111ca83398101604081905261002f916101a4565b6100476000805160206111aa833981519152336100ad565b61005f6000805160206111aa833981519152806100bb565b600180546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b8360028111156100a1576100a16101ee565b02179055505050610204565b6100b78282610106565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100b7576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556101603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600080604083850312156101b757600080fd5b82516001600160a01b03811681146101ce57600080fd5b6020840151909250600381106101e357600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b610f97806102136000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220bdc8612bb25d7d879718d919f8d48a539a8f5aea688047d221856122dc78617064736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ba5760003560e01c806301ffc9a7146100bf578063248a9ca3146100e75780632f2ff15d1461010857806336568abe1461011d57806350d17b5e1461013057806375b238fc1461015b57806391d14854146101825780639dca003214610195578063a217fddf146101b6578063a32c2b99146101be578063b24ed308146101df578063d547741f14610206578063f95d71b114610219578063fe89c9701461022c575b600080fd5b6100d26100cd36600461098d565b610252565b60405190151581526020015b60405180910390f35b6100fa6100f53660046109b7565b610289565b6040519081526020016100de565b61011b6101163660046109e5565b61029e565b005b61011b61012b3660046109e5565b6102bf565b600154610143906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b6100fa7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b6100d26101903660046109e5565b610342565b6001546101a990600160a01b900460ff1681565b6040516100de9190610a37565b6100fa600081565b6101d16101cc366004610ada565b61036b565b6040516100de929190610c92565b6100fa7f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d981565b61011b6102143660046109e5565b6104f6565b61011b610227366004610cb5565b610512565b6100fa7ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c6481565b60006001600160e01b03198216637965db0b60e01b148061028357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b6102a782610289565b6102b08161055f565b6102ba838361056c565b505050565b6001600160a01b03811633146103345760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61033e82826105f0565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60006060600061037c868686610655565b905060008160008151811061039357610393610cd2565b01602001516001600160f81b0319166000036103d057507f9a91862ef15434e2658e682752e743fa4975a117807df7f0eacab66e37e804d96103f2565b507ec348ef80e66d22f4440a90bf9643a03c82260d0dcca4286cf114cc97db0c645b600154604051634746fe8b60e11b81526000916001600160a01b03811691638e8dfd169161042f918691600160a01b900460ff1690600401610ce8565b602060405180830381865afa15801561044c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104709190610cfc565b90506000816001600160a01b031663ec723367856040518263ffffffff1660e01b81526004016104a09190610d19565b600060405180830381865afa1580156104bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104e59190810190610d2c565b60019a909950975050505050505050565b6104ff82610289565b6105088161055f565b6102ba83836105f0565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261053c8161055f565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b6105698133610787565b50565b6105768282610342565b61033e576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105fa8282610342565b1561033e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60408051600080825260208201909252606091805b85518110156106ef578486828151811061068657610686610cd2565b602002602001015160200151036106e757828682815181106106aa576106aa610cd2565b6020026020010151600001516040516020016106c7929190610da2565b604051602081830303815290604052925081806106e390610de7565b9250505b60010161066a565b5083600203610701576001935061070e565b8360030361070e57600093505b60006040518060600160405280602b8152602001610f37602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061076590869086908f9087908b9088908f90602001610e0c565b60408051601f19818403018152919052985050505050505050505b9392505050565b6107918282610342565b61033e5761079e816107e0565b6107a98360206107f2565b6040516020016107ba929190610e86565b60408051601f198184030181529082905262461bcd60e51b825261032b91600401610d19565b60606102836001600160a01b03831660145b60606000610801836002610ef5565b61080c906002610f0c565b6001600160401b0381111561082357610823610a45565b6040519080825280601f01601f19166020018201604052801561084d576020820181803683370190505b509050600360fc1b8160008151811061086857610868610cd2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061089757610897610cd2565b60200101906001600160f81b031916908160001a90535060006108bb846002610ef5565b6108c6906001610f0c565b90505b600181111561093e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106108fa576108fa610cd2565b1a60f81b82828151811061091057610910610cd2565b60200101906001600160f81b031916908160001a90535060049490941c9361093781610f1f565b90506108c9565b5083156107805760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161032b565b60006020828403121561099f57600080fd5b81356001600160e01b03198116811461078057600080fd5b6000602082840312156109c957600080fd5b5035919050565b6001600160a01b038116811461056957600080fd5b600080604083850312156109f857600080fd5b823591506020830135610a0a816109d0565b809150509250929050565b60038110610a3357634e487b7160e01b600052602160045260246000fd5b9052565b602081016102838284610a15565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610a7d57610a7d610a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610aab57610aab610a45565b604052919050565b60006001600160401b03821115610acc57610acc610a45565b50601f01601f191660200190565b600080600060608486031215610aef57600080fd5b8335925060208401356001600160401b03811115610b0c57600080fd5b8401601f81018613610b1d57600080fd5b80356001600160401b03811115610b3657610b36610a45565b8060051b610b4660208201610a83565b91825260208184018101929081019089841115610b6257600080fd5b6020850192505b83831015610c2d5782356001600160401b03811115610b8757600080fd5b85016040818c03601f19011215610b9d57600080fd5b610ba5610a5b565b60208201356001600160401b03811115610bbe57600080fd5b82016020810190603f018d13610bd357600080fd5b8035610be6610be182610ab3565b610a83565b8181528e6020838501011115610bfb57600080fd5b816020840160208301376000602092820183015283526040939093013582840152508352928301929190910190610b69565b96999698505050506040949094013593505050565b60005b83811015610c5d578181015183820152602001610c45565b50506000910152565b60008151808452610c7e816020860160208601610c42565b601f01601f19169290920160200192915050565b8215158152604060208201526000610cad6040830184610c66565b949350505050565b600060208284031215610cc757600080fd5b8135610780816109d0565b634e487b7160e01b600052603260045260246000fd5b828152604081016107806020830184610a15565b600060208284031215610d0e57600080fd5b8151610780816109d0565b6020815260006107806020830184610c66565b600060208284031215610d3e57600080fd5b81516001600160401b03811115610d5457600080fd5b8201601f81018413610d6557600080fd5b8051610d73610be182610ab3565b818152856020838501011115610d8857600080fd5b610d99826020830160208601610c42565b95945050505050565b60008351610db4818460208801610c42565b835190830190610dc8818360208801610c42565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff821663ffffffff8103610e0357610e03610dd1565b60010192915050565b6001600160f81b0319881681526001600160e01b0319878116600183015260058201879052851660258201528351600090610e4e816029850160208901610c42565b6001600160e01b031985166029918401918201528351610e7581602d840160208801610c42565b01602d019998505050505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351610eb8816017850160208801610c42565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610ee9816028840160208801610c42565b01602801949350505050565b808202811582820484141761028357610283610dd1565b8082018082111561028357610283610dd1565b600081610f2e57610f2e610dd1565b50600019019056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220bdc8612bb25d7d879718d919f8d48a539a8f5aea688047d221856122dc78617064736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain/abis/BackupRecovery.json b/rust/lit-core/lit-blockchain/abis/BackupRecovery.json index 773b719..da1f7d0 100644 --- a/rust/lit-core/lit-blockchain/abis/BackupRecovery.json +++ b/rust/lit-core/lit-blockchain/abis/BackupRecovery.json @@ -837,6 +837,11 @@ "internalType": "bytes", "name": "sessionId", "type": "bytes" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" } ], "name": "registerRecoveryKeys", diff --git a/rust/lit-core/lit-blockchain/abis/ContractResolver.json b/rust/lit-core/lit-blockchain/abis/ContractResolver.json index e4bfde8..925faad 100644 --- a/rust/lit-core/lit-blockchain/abis/ContractResolver.json +++ b/rust/lit-core/lit-blockchain/abis/ContractResolver.json @@ -392,6 +392,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "PUB_KEY_ROUTER_VIEWS_CONTRACT", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "RATE_LIMIT_NFT_CONTRACT", @@ -684,8 +697,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161146738038061146783398101604081905261002f916101e0565b610047600080516020611447833981519152336100e9565b61005f600080516020611447833981519152806100f7565b600180600083600281111561007657610076610208565b600281111561008757610087610208565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece8015816040516100db919061021e565b60405180910390a150610246565b6100f38282610142565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100f3576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561019c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156101f257600080fd5b81516003811061020157600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b602081016003831061024057634e487b7160e01b600052602160045260246000fd5b91905290565b6111f2806102556000396000f3fe608060405234801561001057600080fd5b50600436106101bc5760003560e01c80637cadf69f116100f55780637cadf69f146104175780637d4a03bd1461043e5780637d9d2880146104655780637f90209f1461048c57806385cb1191146104b35780638c1536df146104da5780638deb3893146105015780638e8dfd16146105145780639072f8381461052757806391d148541461054e578063977a807014610561578063a217fddf14610588578063ad1c8a8614610590578063cddcace5146105b7578063d547741f146105de578063da19ddfb146105f1578063df38069314610618578063f8ae93b41461063f57600080fd5b806301ffc9a7146101c157806311ee8ff7146101e957806316f76bbf1461021e5780631785f53c14610245578063219c266a1461025a578063248a9ca3146102815780632668f305146102945780632c0b8bf7146102bb5780632e4885e8146102e25780632f2ff15d1461030957806336568abe1461031c5780633ebf79851461032f5780634216e73a1461037b57806351ad0a80146103a25780635af27f79146103b557806370480275146103dc57806374bc8139146103ef57806375b238fc14610402575b600080fd5b6101d46101cf366004610eb1565b610666565b60405190151581526020015b60405180910390f35b6102107f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101e0565b6102107ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b610258610253366004610ef7565b61069d565b005b6102107f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021061028f366004610f12565b61074e565b6102107fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b6102107fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b6102107fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610258610317366004610f2b565b610763565b61025861032a366004610f2b565b610784565b61036361033d366004610f66565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101e0565b6102107f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102586103b0366004610f89565b6107fe565b6102107fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102586103ea366004610ef7565b610982565b6102586103fd366004610fc5565b6109b2565b61021060008051602061119d83398151915281565b6102107f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b6102107f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b6102107fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b6102107fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b6102107fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b6102107faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b61025861050f366004610fc5565b610a6e565b610363610522366004610f66565b610b12565b6102107f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101d461055c366004610f2b565b610b68565b6102107f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b610210600081565b6102107f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b6102107f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b6102586105ec366004610f2b565b610b91565b6102107f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b6102107fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b6102107fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b148061069757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061119d8339815191526106b581610bad565b336001600160a01b038316036107325760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61074a60008051602061119d83398151915283610bba565b5050565b60009081526020819052604090206001015490565b61076c8261074e565b61077581610bad565b61077f8383610c1f565b505050565b6001600160a01b03811633146107f45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610729565b61074a8282610bba565b61081660008051602061119d83398151915233610b68565b610833576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561084957610849610fe0565b600281111561085a5761085a610fe0565b815260208101919091526040016000205460ff1615156001146108d75760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b6064820152608401610729565b806002600085815260200190815260200160002060008460028111156108ff576108ff610fe0565b600281111561091057610910610fe0565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d83838360405161097593929190611018565b60405180910390a1505050565b60008051602061119d83398151915261099a81610bad565b61074a60008051602061119d83398151915283610c1f565b6109ca60008051602061119d83398151915233610b68565b6109e7576040516364487c2560e11b815260040160405180910390fd5b60018060008360028111156109fe576109fe610fe0565b6002811115610a0f57610a0f610fe0565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a639190611045565b60405180910390a150565b610a8660008051602061119d83398151915233610b68565b610aa3576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610ab957610ab9610fe0565b6002811115610aca57610aca610fe0565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a63908390611045565b600082815260026020819052604082209082908490811115610b3657610b36610fe0565b6002811115610b4757610b47610fe0565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610b9a8261074e565b610ba381610bad565b61077f8383610bba565b610bb78133610ca3565b50565b610bc48282610b68565b1561074a576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c298282610b68565b61074a576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c5f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cad8282610b68565b61074a57610cba81610cfc565b610cc5836020610d0e565b604051602001610cd6929190611077565b60408051601f198184030181529082905262461bcd60e51b8252610729916004016110e6565b60606106976001600160a01b03831660145b60606000610d1d83600261112f565b610d28906002611146565b67ffffffffffffffff811115610d4057610d40611159565b6040519080825280601f01601f191660200182016040528015610d6a576020820181803683370190505b509050600360fc1b81600081518110610d8557610d8561116f565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610db457610db461116f565b60200101906001600160f81b031916908160001a9053506000610dd884600261112f565b610de3906001611146565b90505b6001811115610e5b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e1757610e1761116f565b1a60f81b828281518110610e2d57610e2d61116f565b60200101906001600160f81b031916908160001a90535060049490941c93610e5481611185565b9050610de6565b508315610eaa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610729565b9392505050565b600060208284031215610ec357600080fd5b81356001600160e01b031981168114610eaa57600080fd5b80356001600160a01b0381168114610ef257600080fd5b919050565b600060208284031215610f0957600080fd5b610eaa82610edb565b600060208284031215610f2457600080fd5b5035919050565b60008060408385031215610f3e57600080fd5b82359150610f4e60208401610edb565b90509250929050565b803560038110610ef257600080fd5b60008060408385031215610f7957600080fd5b82359150610f4e60208401610f57565b600080600060608486031215610f9e57600080fd5b83359250610fae60208501610f57565b9150610fbc60408501610edb565b90509250925092565b600060208284031215610fd757600080fd5b610eaa82610f57565b634e487b7160e01b600052602160045260246000fd5b6003811061101457634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161102c6020830185610ff6565b6001600160a01b03929092166040919091015292915050565b602081016106978284610ff6565b60005b8381101561106e578181015183820152602001611056565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110a9816017850160208801611053565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516110da816028840160208801611053565b01602801949350505050565b6020815260008251806020840152611105816040850160208701611053565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761069757610697611119565b8082018082111561069757610697611119565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008161119457611194611119565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a2646970667358221220bcfb5aa3251ddf33a8736c9689bd99cea1df5baa0fac387c556913725825c97264736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101bc5760003560e01c80637cadf69f116100f55780637cadf69f146104175780637d4a03bd1461043e5780637d9d2880146104655780637f90209f1461048c57806385cb1191146104b35780638c1536df146104da5780638deb3893146105015780638e8dfd16146105145780639072f8381461052757806391d148541461054e578063977a807014610561578063a217fddf14610588578063ad1c8a8614610590578063cddcace5146105b7578063d547741f146105de578063da19ddfb146105f1578063df38069314610618578063f8ae93b41461063f57600080fd5b806301ffc9a7146101c157806311ee8ff7146101e957806316f76bbf1461021e5780631785f53c14610245578063219c266a1461025a578063248a9ca3146102815780632668f305146102945780632c0b8bf7146102bb5780632e4885e8146102e25780632f2ff15d1461030957806336568abe1461031c5780633ebf79851461032f5780634216e73a1461037b57806351ad0a80146103a25780635af27f79146103b557806370480275146103dc57806374bc8139146103ef57806375b238fc14610402575b600080fd5b6101d46101cf366004610eb1565b610666565b60405190151581526020015b60405180910390f35b6102107f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101e0565b6102107ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b610258610253366004610ef7565b61069d565b005b6102107f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021061028f366004610f12565b61074e565b6102107fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b6102107fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b6102107fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610258610317366004610f2b565b610763565b61025861032a366004610f2b565b610784565b61036361033d366004610f66565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101e0565b6102107f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102586103b0366004610f89565b6107fe565b6102107fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102586103ea366004610ef7565b610982565b6102586103fd366004610fc5565b6109b2565b61021060008051602061119d83398151915281565b6102107f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b6102107f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b6102107fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b6102107fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b6102107fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b6102107faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b61025861050f366004610fc5565b610a6e565b610363610522366004610f66565b610b12565b6102107f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101d461055c366004610f2b565b610b68565b6102107f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b610210600081565b6102107f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b6102107f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b6102586105ec366004610f2b565b610b91565b6102107f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b6102107fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b6102107fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b148061069757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061119d8339815191526106b581610bad565b336001600160a01b038316036107325760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61074a60008051602061119d83398151915283610bba565b5050565b60009081526020819052604090206001015490565b61076c8261074e565b61077581610bad565b61077f8383610c1f565b505050565b6001600160a01b03811633146107f45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610729565b61074a8282610bba565b61081660008051602061119d83398151915233610b68565b610833576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561084957610849610fe0565b600281111561085a5761085a610fe0565b815260208101919091526040016000205460ff1615156001146108d75760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b6064820152608401610729565b806002600085815260200190815260200160002060008460028111156108ff576108ff610fe0565b600281111561091057610910610fe0565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d83838360405161097593929190611018565b60405180910390a1505050565b60008051602061119d83398151915261099a81610bad565b61074a60008051602061119d83398151915283610c1f565b6109ca60008051602061119d83398151915233610b68565b6109e7576040516364487c2560e11b815260040160405180910390fd5b60018060008360028111156109fe576109fe610fe0565b6002811115610a0f57610a0f610fe0565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a639190611045565b60405180910390a150565b610a8660008051602061119d83398151915233610b68565b610aa3576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610ab957610ab9610fe0565b6002811115610aca57610aca610fe0565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a63908390611045565b600082815260026020819052604082209082908490811115610b3657610b36610fe0565b6002811115610b4757610b47610fe0565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610b9a8261074e565b610ba381610bad565b61077f8383610bba565b610bb78133610ca3565b50565b610bc48282610b68565b1561074a576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c298282610b68565b61074a576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c5f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cad8282610b68565b61074a57610cba81610cfc565b610cc5836020610d0e565b604051602001610cd6929190611077565b60408051601f198184030181529082905262461bcd60e51b8252610729916004016110e6565b60606106976001600160a01b03831660145b60606000610d1d83600261112f565b610d28906002611146565b67ffffffffffffffff811115610d4057610d40611159565b6040519080825280601f01601f191660200182016040528015610d6a576020820181803683370190505b509050600360fc1b81600081518110610d8557610d8561116f565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610db457610db461116f565b60200101906001600160f81b031916908160001a9053506000610dd884600261112f565b610de3906001611146565b90505b6001811115610e5b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e1757610e1761116f565b1a60f81b828281518110610e2d57610e2d61116f565b60200101906001600160f81b031916908160001a90535060049490941c93610e5481611185565b9050610de6565b508315610eaa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610729565b9392505050565b600060208284031215610ec357600080fd5b81356001600160e01b031981168114610eaa57600080fd5b80356001600160a01b0381168114610ef257600080fd5b919050565b600060208284031215610f0957600080fd5b610eaa82610edb565b600060208284031215610f2457600080fd5b5035919050565b60008060408385031215610f3e57600080fd5b82359150610f4e60208401610edb565b90509250929050565b803560038110610ef257600080fd5b60008060408385031215610f7957600080fd5b82359150610f4e60208401610f57565b600080600060608486031215610f9e57600080fd5b83359250610fae60208501610f57565b9150610fbc60408501610edb565b90509250925092565b600060208284031215610fd757600080fd5b610eaa82610f57565b634e487b7160e01b600052602160045260246000fd5b6003811061101457634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161102c6020830185610ff6565b6001600160a01b03929092166040919091015292915050565b602081016106978284610ff6565b60005b8381101561106e578181015183820152602001611056565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110a9816017850160208801611053565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516110da816028840160208801611053565b01602801949350505050565b6020815260008251806020840152611105816040850160208701611053565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761069757610697611119565b8082018082111561069757610697611119565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008161119457611194611119565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a2646970667358221220bcfb5aa3251ddf33a8736c9689bd99cea1df5baa0fac387c556913725825c97264736f6c634300081c0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161149938038061149983398101604081905261002f916101e0565b610047600080516020611479833981519152336100e9565b61005f600080516020611479833981519152806100f7565b600180600083600281111561007657610076610208565b600281111561008757610087610208565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece8015816040516100db919061021e565b60405180910390a150610246565b6100f38282610142565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166100f3576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561019c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156101f257600080fd5b81516003811061020157600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b602081016003831061024057634e487b7160e01b600052602160045260246000fd5b91905290565b611224806102556000396000f3fe608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cadf69f116101005780637cadf69f146104225780637d4a03bd146104495780637d9d2880146104705780637f90209f1461049757806381d49578146104be57806385cb1191146104e55780638c1536df1461050c5780638deb3893146105335780638e8dfd16146105465780639072f8381461055957806391d1485414610580578063977a807014610593578063a217fddf146105ba578063ad1c8a86146105c2578063cddcace5146105e9578063d547741f14610610578063da19ddfb14610623578063df3806931461064a578063f8ae93b41461067157600080fd5b806301ffc9a7146101cc57806311ee8ff7146101f457806316f76bbf146102295780631785f53c14610250578063219c266a14610265578063248a9ca31461028c5780632668f3051461029f5780632c0b8bf7146102c65780632e4885e8146102ed5780632f2ff15d1461031457806336568abe146103275780633ebf79851461033a5780634216e73a1461038657806351ad0a80146103ad5780635af27f79146103c057806370480275146103e757806374bc8139146103fa57806375b238fc1461040d575b600080fd5b6101df6101da366004610ee3565b610698565b60405190151581526020015b60405180910390f35b61021b7f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101eb565b61021b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b61026361025e366004610f29565b6106cf565b005b61021b7f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021b61029a366004610f44565b610780565b61021b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b61021b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b61021b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610263610322366004610f5d565b610795565b610263610335366004610f5d565b6107b6565b61036e610348366004610f98565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101eb565b61021b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102636103bb366004610fbb565b610830565b61021b7fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102636103f5366004610f29565b6109b4565b610263610408366004610ff7565b6109e4565b61021b6000805160206111cf83398151915281565b61021b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b61021b7f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b61021b7fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b61021b7fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b61021b7f57496de430028f322c592b0f735110eb34f1ae8184a94bc51d40b0847b54469b81565b61021b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b61021b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610263610541366004610ff7565b610aa0565b61036e610554366004610f98565b610b44565b61021b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101df61058e366004610f5d565b610b9a565b61021b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b61021b600081565b61021b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b61021b7f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b61026361061e366004610f5d565b610bc3565b61021b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b61021b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b61021b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b14806106c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206111cf8339815191526106e781610bdf565b336001600160a01b038316036107645760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61077c6000805160206111cf83398151915283610bec565b5050565b60009081526020819052604090206001015490565b61079e82610780565b6107a781610bdf565b6107b18383610c51565b505050565b6001600160a01b03811633146108265760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161075b565b61077c8282610bec565b6108486000805160206111cf83398151915233610b9a565b610865576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561087b5761087b611012565b600281111561088c5761088c611012565b815260208101919091526040016000205460ff1615156001146109095760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b606482015260840161075b565b8060026000858152602001908152602001600020600084600281111561093157610931611012565b600281111561094257610942611012565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d8383836040516109a79392919061104a565b60405180910390a1505050565b6000805160206111cf8339815191526109cc81610bdf565b61077c6000805160206111cf83398151915283610c51565b6109fc6000805160206111cf83398151915233610b9a565b610a19576040516364487c2560e11b815260040160405180910390fd5b6001806000836002811115610a3057610a30611012565b6002811115610a4157610a41611012565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a959190611077565b60405180910390a150565b610ab86000805160206111cf83398151915233610b9a565b610ad5576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610aeb57610aeb611012565b6002811115610afc57610afc611012565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a95908390611077565b600082815260026020819052604082209082908490811115610b6857610b68611012565b6002811115610b7957610b79611012565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610bcc82610780565b610bd581610bdf565b6107b18383610bec565b610be98133610cd5565b50565b610bf68282610b9a565b1561077c576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c5b8282610b9a565b61077c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c913390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cdf8282610b9a565b61077c57610cec81610d2e565b610cf7836020610d40565b604051602001610d089291906110a9565b60408051601f198184030181529082905262461bcd60e51b825261075b91600401611118565b60606106c96001600160a01b03831660145b60606000610d4f836002611161565b610d5a906002611178565b67ffffffffffffffff811115610d7257610d7261118b565b6040519080825280601f01601f191660200182016040528015610d9c576020820181803683370190505b509050600360fc1b81600081518110610db757610db76111a1565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610de657610de66111a1565b60200101906001600160f81b031916908160001a9053506000610e0a846002611161565b610e15906001611178565b90505b6001811115610e8d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e4957610e496111a1565b1a60f81b828281518110610e5f57610e5f6111a1565b60200101906001600160f81b031916908160001a90535060049490941c93610e86816111b7565b9050610e18565b508315610edc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161075b565b9392505050565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610edc57600080fd5b80356001600160a01b0381168114610f2457600080fd5b919050565b600060208284031215610f3b57600080fd5b610edc82610f0d565b600060208284031215610f5657600080fd5b5035919050565b60008060408385031215610f7057600080fd5b82359150610f8060208401610f0d565b90509250929050565b803560038110610f2457600080fd5b60008060408385031215610fab57600080fd5b82359150610f8060208401610f89565b600080600060608486031215610fd057600080fd5b83359250610fe060208501610f89565b9150610fee60408501610f0d565b90509250925092565b60006020828403121561100957600080fd5b610edc82610f89565b634e487b7160e01b600052602160045260246000fd5b6003811061104657634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161105e6020830185611028565b6001600160a01b03929092166040919091015292915050565b602081016106c98284611028565b60005b838110156110a0578181015183820152602001611088565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110db816017850160208801611085565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161110c816028840160208801611085565b01602801949350505050565b6020815260008251806020840152611137816040850160208701611085565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106c9576106c961114b565b808201808211156106c9576106c961114b565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816111c6576111c661114b565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a264697066735822122065276870aecc95d0026a39a8a08dc1b9a726496c4d88b6456f2ac640543c468664736f6c634300081c0033df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cadf69f116101005780637cadf69f146104225780637d4a03bd146104495780637d9d2880146104705780637f90209f1461049757806381d49578146104be57806385cb1191146104e55780638c1536df1461050c5780638deb3893146105335780638e8dfd16146105465780639072f8381461055957806391d1485414610580578063977a807014610593578063a217fddf146105ba578063ad1c8a86146105c2578063cddcace5146105e9578063d547741f14610610578063da19ddfb14610623578063df3806931461064a578063f8ae93b41461067157600080fd5b806301ffc9a7146101cc57806311ee8ff7146101f457806316f76bbf146102295780631785f53c14610250578063219c266a14610265578063248a9ca31461028c5780632668f3051461029f5780632c0b8bf7146102c65780632e4885e8146102ed5780632f2ff15d1461031457806336568abe146103275780633ebf79851461033a5780634216e73a1461038657806351ad0a80146103ad5780635af27f79146103c057806370480275146103e757806374bc8139146103fa57806375b238fc1461040d575b600080fd5b6101df6101da366004610ee3565b610698565b60405190151581526020015b60405180910390f35b61021b7f58a0044e0ecd81025e398bf1815075d1234cbac3749614b0b33a404c2ee2babf81565b6040519081526020016101eb565b61021b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b61026361025e366004610f29565b6106cf565b005b61021b7f4fd3e0487a0382fb027c77b1ae4c563672c9fb30a74879855f0c86c376cf96ea81565b61021b61029a366004610f44565b610780565b61021b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b61021b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b61021b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b610263610322366004610f5d565b610795565b610263610335366004610f5d565b6107b6565b61036e610348366004610f98565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016101eb565b61021b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6102636103bb366004610fbb565b610830565b61021b7fa2c73732de657ad0f36e0ddbb2710f4b13e8dde46421386bb92d1e179dae4d4d81565b6102636103f5366004610f29565b6109b4565b610263610408366004610ff7565b6109e4565b61021b6000805160206111cf83398151915281565b61021b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b61021b7f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b61021b7fc26faedaeeda2fb94a66d786aa89c4a18bb790fa009d9da94a541d92185ca91681565b61021b7fc6674f98ba35c01c130e08195dd26c70466037473a068c5aaa470a783d99c16c81565b61021b7f57496de430028f322c592b0f735110eb34f1ae8184a94bc51d40b0847b54469b81565b61021b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b61021b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610263610541366004610ff7565b610aa0565b61036e610554366004610f98565b610b44565b61021b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b6101df61058e366004610f5d565b610b9a565b61021b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b61021b600081565b61021b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b61021b7f0f27b9e46b89c5c742e28094dcefe5e946c3b98f0fbed87d9fcf5b10ba9684ec81565b61026361061e366004610f5d565b610bc3565b61021b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b61021b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b61021b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60006001600160e01b03198216637965db0b60e01b14806106c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000805160206111cf8339815191526106e781610bdf565b336001600160a01b038316036107645760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f742072656d6f76652073656c662061732061646d696e2e202048616044820152763b32903a3432903732bb9030b236b4b71032379034ba1760491b60648201526084015b60405180910390fd5b61077c6000805160206111cf83398151915283610bec565b5050565b60009081526020819052604090206001015490565b61079e82610780565b6107a781610bdf565b6107b18383610c51565b505050565b6001600160a01b03811633146108265760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161075b565b61077c8282610bec565b6108486000805160206111cf83398151915233610b9a565b610865576040516364487c2560e11b815260040160405180910390fd5b6001600083600281111561087b5761087b611012565b600281111561088c5761088c611012565b815260208101919091526040016000205460ff1615156001146109095760405162461bcd60e51b815260206004820152602f60248201527f5468652070726f766964656420456e76206973206e6f742076616c696420666f60448201526e1c881d1a1a5cc818dbdb9d1c9858dd608a1b606482015260840161075b565b8060026000858152602001908152602001600020600084600281111561093157610931611012565b600281111561094257610942611012565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d8383836040516109a79392919061104a565b60405180910390a1505050565b6000805160206111cf8339815191526109cc81610bdf565b61077c6000805160206111cf83398151915283610c51565b6109fc6000805160206111cf83398151915233610b9a565b610a19576040516364487c2560e11b815260040160405180910390fd5b6001806000836002811115610a3057610a30611012565b6002811115610a4157610a41611012565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610a959190611077565b60405180910390a150565b610ab86000805160206111cf83398151915233610b9a565b610ad5576040516364487c2560e11b815260040160405180910390fd5b60016000826002811115610aeb57610aeb611012565b6002811115610afc57610afc611012565b815260208101919091526040908101600020805460ff19169055517f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4790610a95908390611077565b600082815260026020819052604082209082908490811115610b6857610b68611012565b6002811115610b7957610b79611012565b81526020810191909152604001600020546001600160a01b03169392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610bcc82610780565b610bd581610bdf565b6107b18383610bec565b610be98133610cd5565b50565b610bf68282610b9a565b1561077c576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c5b8282610b9a565b61077c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610c913390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610cdf8282610b9a565b61077c57610cec81610d2e565b610cf7836020610d40565b604051602001610d089291906110a9565b60408051601f198184030181529082905262461bcd60e51b825261075b91600401611118565b60606106c96001600160a01b03831660145b60606000610d4f836002611161565b610d5a906002611178565b67ffffffffffffffff811115610d7257610d7261118b565b6040519080825280601f01601f191660200182016040528015610d9c576020820181803683370190505b509050600360fc1b81600081518110610db757610db76111a1565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610de657610de66111a1565b60200101906001600160f81b031916908160001a9053506000610e0a846002611161565b610e15906001611178565b90505b6001811115610e8d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e4957610e496111a1565b1a60f81b828281518110610e5f57610e5f6111a1565b60200101906001600160f81b031916908160001a90535060049490941c93610e86816111b7565b9050610e18565b508315610edc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161075b565b9392505050565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610edc57600080fd5b80356001600160a01b0381168114610f2457600080fd5b919050565b600060208284031215610f3b57600080fd5b610edc82610f0d565b600060208284031215610f5657600080fd5b5035919050565b60008060408385031215610f7057600080fd5b82359150610f8060208401610f0d565b90509250929050565b803560038110610f2457600080fd5b60008060408385031215610fab57600080fd5b82359150610f8060208401610f89565b600080600060608486031215610fd057600080fd5b83359250610fe060208501610f89565b9150610fee60408501610f0d565b90509250925092565b60006020828403121561100957600080fd5b610edc82610f89565b634e487b7160e01b600052602160045260246000fd5b6003811061104657634e487b7160e01b600052602160045260246000fd5b9052565b8381526060810161105e6020830185611028565b6001600160a01b03929092166040919091015292915050565b602081016106c98284611028565b60005b838110156110a0578181015183820152602001611088565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516110db816017850160208801611085565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161110c816028840160208801611085565b01602801949350505050565b6020815260008251806020840152611137816040850160208701611085565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106c9576106c961114b565b808201808211156106c9576106c961114b565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816111c6576111c661114b565b50600019019056fedf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42a264697066735822122065276870aecc95d0026a39a8a08dc1b9a726496c4d88b6456f2ac640543c468664736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain/abis/KeyDeriver.json b/rust/lit-core/lit-blockchain/abis/KeyDeriver.json index ce2864b..54ba673 100644 --- a/rust/lit-core/lit-blockchain/abis/KeyDeriver.json +++ b/rust/lit-core/lit-blockchain/abis/KeyDeriver.json @@ -68,8 +68,8 @@ "type": "function" } ], - "bytecode": "0x6080604052348015600f57600080fd5b506105ee8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220b3f5d6acd5a7371344cacab05e607079ebf476b46d8b170419612f80e7a8ac9564736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa2646970667358221220b3f5d6acd5a7371344cacab05e607079ebf476b46d8b170419612f80e7a8ac9564736f6c634300081c0033", + "bytecode": "0x6080604052348015600f57600080fd5b506105ee8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa26469706673582212205d2e87924405c75a37cb3199109dc5847775ce28137c5e1ca405720cfa3bea3d64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806362e4c4641461003b578063a32c2b9914610060575b600080fd5b61004360f581565b6040516001600160a01b0390911681526020015b60405180910390f35b61007361006e36600461029e565b610081565b604051610057929190610443565b600060606000610092868686610100565b905060008060f56001600160a01b0316836040516100b0919061047f565b600060405180830381855afa9150503d80600081146100eb576040519150601f19603f3d011682016040523d82523d6000602084013e6100f0565b606091505b5090999098509650505050505050565b60408051600080825260208201909252606091805b855181101561019a57848682815181106101315761013161049b565b6020026020010151602001510361019257828682815181106101555761015561049b565b6020026020010151600001516040516020016101729291906104b1565b6040516020818303038152906040529250818061018e906104e0565b9250505b600101610115565b50836002036101ac57600193506101b9565b836003036101b957600093505b60006040518060600160405280602b815260200161058e602b9139805160405191925060f887901b91600160e51b9160e090811b919086901b9060009061021090869086908f9087908b9088908f90602001610513565b60408051808303601f190181529190529c9b505050505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561026857610268610230565b60405290565b604051601f8201601f191681016001600160401b038111828210171561029657610296610230565b604052919050565b6000806000606084860312156102b357600080fd5b8335925060208401356001600160401b038111156102d057600080fd5b8401601f810186136102e157600080fd5b80356001600160401b038111156102fa576102fa610230565b8060051b61030a6020820161026e565b9182526020818401810192908101908984111561032657600080fd5b6020850192505b8383101561040a5782356001600160401b0381111561034b57600080fd5b85016040818c03601f1901121561036157600080fd5b610369610246565b60208201356001600160401b0381111561038257600080fd5b82016020810190603f018d1361039757600080fd5b80356001600160401b038111156103b0576103b0610230565b6103c3601f8201601f191660200161026e565b8181528e60208385010111156103d857600080fd5b81602084016020830137600060209282018301528352604093909301358284015250835292830192919091019061032d565b96999698505050506040949094013593505050565b60005b8381101561043a578181015183820152602001610422565b50506000910152565b8215158152604060208201526000825180604084015261046a81606085016020870161041f565b601f01601f1916919091016060019392505050565b6000825161049181846020870161041f565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600083516104c381846020880161041f565b8351908301906104d781836020880161041f565b01949350505050565b600063ffffffff821663ffffffff810361050a57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6001600160f81b0319881681526001600160e01b031987811660018301526005820187905285166025820152835160009061055581602985016020890161041f565b6001600160e01b03198516602991840191820152835161057c81602d84016020880161041f565b01602d01999850505050505050505056fe4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5fa26469706673582212205d2e87924405c75a37cb3199109dc5847775ce28137c5e1ca405720cfa3bea3d64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain/abis/PKPHelper.json b/rust/lit-core/lit-blockchain/abis/PKPHelper.json index 69d8a2c..2c436d7 100644 --- a/rust/lit-core/lit-blockchain/abis/PKPHelper.json +++ b/rust/lit-core/lit-blockchain/abis/PKPHelper.json @@ -1007,8 +1007,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50604051613a76380380613a7683398101604081905261002f916100d5565b61003833610085565b600280546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b83838111156100795761007961011f565b02179055505050610135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100e857600080fd5b82516001600160a01b03811681146100ff57600080fd5b60208401519092506003811061011457600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b613932806101446000396000f3fe60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a264697066735822122038295780a313e895b6dcea68e900a66f083bf36d7a4524b63cf8bf23e49d630d64736f6c634300081c0033", - "deployedBytecode": "0x60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a264697066735822122038295780a313e895b6dcea68e900a66f083bf36d7a4524b63cf8bf23e49d630d64736f6c634300081c0033", + "bytecode": "0x608060405234801561001057600080fd5b50604051613a76380380613a7683398101604081905261002f916100d5565b61003833610085565b600280546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b83838111156100795761007961011f565b02179055505050610135565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100e857600080fd5b82516001600160a01b03811681146100ff57600080fd5b60208401519092506003811061011457600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b613932806101446000396000f3fe60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a26469706673582212201f30b6e11b3dbcaec61a3cbe0e65bd69f7cc1a45ca4792f4fc3a0b6259a4bae164736f6c634300081c0033", + "deployedBytecode": "0x60806040526004361061014c5760003560e01c806373cc4111116100bc57806373cc4111146102f6578063778fe5721461030b578063782e2ea51461031e5780638da5cb5b1461033e57806391d148541461035357806391ee4fd5146103735780639dca003214610386578063a217fddf146103b4578063caead0c7146103c9578063d547741f146103de578063db0bf933146103fe578063e4f11df614610411578063f2fde38b14610424578063f95d71b11461044457600080fd5b806301ffc9a7146101515780630e9ed68b1461018657806313af411b146101a8578063150b7a02146101c9578063202f724f14610202578063248a9ca3146102155780632b553551146102355780632f2ff15d146102575780633276558c1461027757806336568abe1461028c5780635043026c146102ac57806350d17b5e146102c1578063715018a6146102e1575b600080fd5b34801561015d57600080fd5b5061017161016c366004612598565b610464565b60405190151581526020015b60405180910390f35b34801561019257600080fd5b5061019b61049b565b60405161017d91906125c2565b6101bb6101b6366004612b84565b610586565b60405190815260200161017d565b3480156101d557600080fd5b506101e96101e4366004612c32565b610603565b6040516001600160e01b0319909116815260200161017d565b6101bb610210366004612b84565b6106a7565b34801561022157600080fd5b506101bb610230366004612cd1565b6106ba565b34801561024157600080fd5b50610255610250366004612cd1565b6106d0565b005b34801561026357600080fd5b50610255610272366004612cea565b6108ab565b34801561028357600080fd5b5061019b6108cc565b34801561029857600080fd5b506102556102a7366004612cea565b61091e565b3480156102b857600080fd5b5061019b61099c565b3480156102cd57600080fd5b5060025461019b906001600160a01b031681565b3480156102ed57600080fd5b506102556109ee565b34801561030257600080fd5b5061019b610a02565b6101bb610319366004612d3a565b610a54565b34801561032a57600080fd5b50610255610339366004612fb8565b611066565b34801561034a57600080fd5b5061019b611289565b34801561035f57600080fd5b5061017161036e366004612cea565b611298565b6101bb610381366004612ff4565b6112c3565b34801561039257600080fd5b506002546103a790600160a01b900460ff1681565b60405161017d91906130f0565b3480156103c057600080fd5b506101bb600081565b3480156103d557600080fd5b5061019b611965565b3480156103ea57600080fd5b506102556103f9366004612cea565b6119b7565b6101bb61040c3660046130fe565b6119d3565b6101bb61041f36600461323b565b611fdd565b34801561043057600080fd5b5061025561043f36600461334d565b612130565b34801561045057600080fd5b5061025561045f36600461334d565b6121a9565b60006001600160e01b03198216637965db0b60e01b148061049557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546040805163da19ddfb60e01b815290516000926001600160a01b031691638e8dfd1691839163da19ddfb9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610511919061336a565b60025460405160e084901b6001600160e01b03191681526105409291600160a01b900460ff1690600401613383565b602060405180830381865afa15801561055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105819190613397565b905090565b6000806040518060a00160405280856000015181526020016040518060400160405280600c81526020016b6e6167612d6b65797365743160a01b815250815260200185602001518152602001856040015181526020016105e461049b565b6001600160a01b0316905290506105fb81846112c3565b949350505050565b600061060d611965565b6001600160a01b0316336001600160a01b0316146106955760405162461bcd60e51b815260206004820152603a60248201527f504b5048656c7065723a206f6e6c792061636365707473207472616e736665726044820152791cc8199c9bdb481d1a19481412d41391950818dbdb9d1c9858dd60321b60648201526084015b60405180910390fd5b50630a85bd0160e11b95945050505050565b60006106b38383610586565b9392505050565b6000908152600160208190526040909120015490565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610746919061336a565b60025460405160e084901b6001600160e01b03191681526107759291600160a01b900460ff1690600401613383565b602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b69190613397565b6001600160a01b0316336001600160a01b0316146107e65760405162461bcd60e51b815260040161068c906133b4565b60006107f061099c565b60405163b63a767760e01b8152600481018490529091506001600160a01b0382169063b63a767790602401600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50506040516328cd10c760e11b8152600481018590526001600160a01b038416925063519a218e9150602401600060405180830381600087803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050505050565b6108b4826106ba565b6108bd81612207565b6108c78383612211565b505050565b6002546040805163120e5f0760e31b815290516000926001600160a01b031691638e8dfd16918391639072f8389160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6001600160a01b038116331461098e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068c565b610998828261227c565b5050565b600254604080516316f76bbf60e01b815290516000926001600160a01b031691638e8dfd169183916316f76bbf9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6109f66122e3565b610a006000612342565b565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b600080610a5f611965565b83516020850151604051633ff8069760e11b81526001600160a01b039390931692637ff00d2e923492610a9492600401613484565b60206040518083038185885af1158015610ab2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad7919061336a565b905082606001515183604001515114610b025760405162461bcd60e51b815260040161068c9061349d565b8260a001515183608001515114610b2b5760405162461bcd60e51b815260040161068c906134f3565b8260e00151518360c001515114610b545760405162461bcd60e51b815260040161068c90613548565b826101000151518360c001515114610b7e5760405162461bcd60e51b815260040161068c90613591565b826101200151518360c001515114610ba85760405162461bcd60e51b815260040161068c906135dc565b60408301515115610c745760005b836040015151811015610c7257610bcb6108cc565b6001600160a01b0316638a4315788386604001518481518110610bf057610bf0613627565b602002602001015187606001518581518110610c0e57610c0e613627565b60200260200101516040518463ffffffff1660e01b8152600401610c3493929190613679565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505060019092019150610bb69050565b505b60808301515115610d405760005b836080015151811015610d3e57610c976108cc565b6001600160a01b0316631663c1218386608001518481518110610cbc57610cbc613627565b60200260200101518760a001518581518110610cda57610cda613627565b60200260200101516040518463ffffffff1660e01b8152600401610d00939291906136ae565b600060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505060019092019150610c829050565b505b60c08301515115610e625760005b8360c0015151811015610e6057610d636108cc565b6001600160a01b0316639dd4349b8360405180606001604052808860c001518681518110610d9357610d93613627565b602002602001015181526020018860e001518681518110610db657610db6613627565b602002602001015181526020018861010001518681518110610dda57610dda613627565b60200260200101518152508761012001518581518110610dfc57610dfc613627565b60200260200101516040518463ffffffff1660e01b8152600401610e22939291906136e1565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b505060019092019150610d4e9050565b505b6000610e6c6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401610e9991815260200190565b602060405180830381865afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613397565b905083610140015115610f7c57610eef6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015610f2a578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401610f49939291906136ae565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505050505b83610160015115610ff557610f8f611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401610fbe9392919061373f565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b5050505061105f565b610ffd611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b815260040161102c9392919061373f565b600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050505b5092915050565b6002546040805163210b739d60e11b815290516001600160a01b0390921691638e8dfd16918391634216e73a916004808201926020929091908290030181865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc919061336a565b60025460405160e084901b6001600160e01b031916815261110b9291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613397565b6001600160a01b0316336001600160a01b03161461117c5760405162461bcd60e51b815260040161068c906133b4565b600061118661099c565b8251909150156108c757806001600160a01b031663855eec2284846000815181106111b3576111b3613627565b60200260200101516040518363ffffffff1660e01b81526004016111d8929190613484565b600060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b50505050806001600160a01b0316639000fee1848460018151811061122d5761122d613627565b60200260200101516040518363ffffffff1660e01b8152600401611252929190613484565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031690565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b805182516000911461133d5760405162461bcd60e51b815260206004820152603e60248201527f504b5048656c7065723a20436c61696d206b65792074797065206d757374206d60448201527f617463682041757468204d6574686f642064617461206b657920747970650000606482015260840161068c565b60016000611349611965565b6001600160a01b03166371aa9acf3484886000015189602001518a604001518b606001518c608001516040518863ffffffff1660e01b815260040161139396959493929190613763565b60206040518083038185885af11580156113b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113d6919061336a565b9050836040015151846020015151146114015760405162461bcd60e51b815260040161068c9061349d565b8360800151518460600151511461142a5760405162461bcd60e51b815260040161068c906134f3565b8360c00151518460a0015151146114535760405162461bcd60e51b815260040161068c90613548565b8360e00151518460a00151511461147c5760405162461bcd60e51b815260040161068c90613591565b836101000151518460a0015151146114a65760405162461bcd60e51b815260040161068c906135dc565b602084015151156115725760005b846020015151811015611570576114c96108cc565b6001600160a01b0316638a43157883876020015184815181106114ee576114ee613627565b60200260200101518860400151858151811061150c5761150c613627565b60200260200101516040518463ffffffff1660e01b815260040161153293929190613679565b600060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b5050600190920191506114b49050565b505b6060840151511561163e5760005b84606001515181101561163c576115956108cc565b6001600160a01b0316631663c12183876060015184815181106115ba576115ba613627565b6020026020010151886080015185815181106115d8576115d8613627565b60200260200101516040518463ffffffff1660e01b81526004016115fe939291906136ae565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b5050600190920191506115809050565b505b60a0840151511561175f5760005b8460a001515181101561175d576116616108cc565b6001600160a01b0316639dd4349b8360405180606001604052808960a00151868151811061169157611691613627565b602002602001015181526020018960c0015186815181106116b4576116b4613627565b602002602001015181526020018960e0015186815181106116d7576116d7613627565b602002602001015181525088610100015185815181106116f9576116f9613627565b60200260200101516040518463ffffffff1660e01b815260040161171f939291906136e1565b600060405180830381600087803b15801561173957600080fd5b505af115801561174d573d6000803e3d6000fd5b50506001909201915061164c9050565b505b60006117696108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b815260040161179691815260200190565b602060405180830381865afa1580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190613397565b905084610120015115611879576117ec6108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611827578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611846939291906136ae565b600060405180830381600087803b15801561186057600080fd5b505af1158015611874573d6000803e3d6000fd5b505050505b846101400151156118f25761188c611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b81526004016118bb9392919061373f565b600060405180830381600087803b1580156118d557600080fd5b505af11580156118e9573d6000803e3d6000fd5b5050505061195c565b6118fa611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b81526004016119299392919061373f565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b50949350505050565b60025460408051632c0b8bf760e01b815290516000926001600160a01b031691638e8dfd16918391632c0b8bf79160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b6119c0826106ba565b6119c981612207565b6108c7838361227c565b6002546040805163210b739d60e11b815290516000926001600160a01b031691638e8dfd16918391634216e73a9160048083019260209291908290030181865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061336a565b60025460405160e084901b6001600160e01b0319168152611a789291600160a01b900460ff1690600401613383565b602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190613397565b6001600160a01b0316336001600160a01b031614611ae95760405162461bcd60e51b815260040161068c906133b4565b6000611af3611965565b6001600160a01b0316637ff00d2e348d8d6040518463ffffffff1660e01b8152600401611b21929190613484565b60206040518083038185885af1158015611b3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b64919061336a565b90508751895114611b875760405162461bcd60e51b815260040161068c90613548565b8651895114611ba85760405162461bcd60e51b815260040161068c90613591565b8551895114611bc95760405162461bcd60e51b815260040161068c906135dc565b885115611cd15760005b8951811015611ccf57611be46108cc565b6001600160a01b0316639dd4349b8360405180606001604052808e8681518110611c1057611c10613627565b602002602001015181526020018d8681518110611c2f57611c2f613627565b602002602001015181526020018c8681518110611c4e57611c4e613627565b60200260200101518152508a8581518110611c6b57611c6b613627565b60200260200101516040518463ffffffff1660e01b8152600401611c91939291906136e1565b600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b505060019092019150611bd39050565b505b6000611cdb6108cc565b6001600160a01b031663bd4986a0836040518263ffffffff1660e01b8152600401611d0891815260200190565b602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613397565b90508415611de657611d596108cc565b6001600160a01b0316631663c12183836000604051908082528060200260200182016040528015611d94578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401611db3939291906136ae565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050505b8315611e5a57611df4611965565b6001600160a01b03166342842e0e3083856040518463ffffffff1660e01b8152600401611e239392919061373f565b600060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b50505050611ec4565b611e62611965565b6001600160a01b03166342842e0e3033856040518463ffffffff1660e01b8152600401611e919392919061373f565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b855115611fce57611ed361099c565b6001600160a01b031663855eec228388600081518110611ef557611ef5613627565b60200260200101516040518363ffffffff1660e01b8152600401611f1a929190613484565b600060405180830381600087803b158015611f3457600080fd5b505af1158015611f48573d6000803e3d6000fd5b50505050611f5461099c565b6001600160a01b0316639000fee18388600181518110611f7657611f76613627565b60200260200101516040518363ffffffff1660e01b8152600401611f9b929190613484565b600060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050505b509a9950505050505050505050565b6000806040518061018001604052808b81526020018a815260200160006001600160401b03811115612011576120116125d6565b60405190808252806020026020018201604052801561204457816020015b606081526020019060019003908161202f5790505b508152602001600060405190808252806020026020018201604052801561207f57816020015b606081526020019060019003908161206a5790505b50815260200160006040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50815260200160006040519080825280602002602001820160405280156120eb57816020015b60608152602001906001900390816120d65790505b5081526020018981526020018881526020018781526020018681526020018515158152602001841515815250905061212281610a54565b9a9950505050505050505050565b6121386122e3565b6001600160a01b03811661219d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161068c565b6121a681612342565b50565b6121b16122e3565b600280546001600160a01b0319166001600160a01b0383161790556040517f2760073c7cd8cac531d7f643becbfbb74d8b8156443eacf879622532dbbb3cd5906121fc9083906125c2565b60405180910390a150565b6121a68133612392565b61221b8282611298565b6109985760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6122868282611298565b156109985760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b336122ec611289565b6001600160a01b031614610a005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161068c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61239c8282611298565b610998576123a9816123eb565b6123b48360206123fd565b6040516020016123c5929190613803565b60408051601f198184030181529082905262461bcd60e51b825261068c91600401613872565b60606104956001600160a01b03831660145b6060600061240c83600261389b565b6124179060026138b2565b6001600160401b0381111561242e5761242e6125d6565b6040519080825280601f01601f191660200182016040528015612458576020820181803683370190505b509050600360fc1b8160008151811061247357612473613627565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106124a2576124a2613627565b60200101906001600160f81b031916908160001a90535060006124c684600261389b565b6124d19060016138b2565b90505b6001811115612549576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061250557612505613627565b1a60f81b82828151811061251b5761251b613627565b60200101906001600160f81b031916908160001a90535060049490941c93612542816138c5565b90506124d4565b5083156106b35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068c565b6000602082840312156125aa57600080fd5b81356001600160e01b0319811681146106b357600080fd5b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561260e5761260e6125d6565b60405290565b60405161016081016001600160401b038111828210171561260e5761260e6125d6565b60405161018081016001600160401b038111828210171561260e5761260e6125d6565b60405160a081016001600160401b038111828210171561260e5761260e6125d6565b604051601f8201601f191681016001600160401b03811182821017156126a4576126a46125d6565b604052919050565b60006001600160401b038211156126c5576126c56125d6565b5060051b60200190565b600082601f8301126126e057600080fd5b81356126f36126ee826126ac565b61267c565b8082825260208201915060206060840286010192508583111561271557600080fd5b602085015b83811015612771576060818803121561273257600080fd5b61273a6125ec565b8135815260208083013590820152604082013560ff8116811461275c57600080fd5b6040820152835260209092019160600161271a565b5095945050505050565b6000806001600160401b03841115612795576127956125d6565b50601f8301601f19166020016127aa8161267c565b9150508281528383830111156127bf57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e757600080fd5b81356127f56126ee826126ac565b8082825260208201915060208360051b86010192508583111561281757600080fd5b602085015b838110156127715780356001600160401b0381111561283a57600080fd5b8601603f8101881361284b57600080fd5b61285d8860208301356040840161277b565b8452506020928301920161281c565b600082601f83011261287d57600080fd5b813561288b6126ee826126ac565b8082825260208201915060208360051b8601019250858311156128ad57600080fd5b602085015b838110156127715780358352602092830192016128b2565b600082601f8301126128db57600080fd5b81356128e96126ee826126ac565b8082825260208201915060208360051b86010192508583111561290b57600080fd5b602085015b838110156127715780356001600160401b0381111561292e57600080fd5b61293d886020838a010161286c565b84525060209283019201612910565b6001600160a01b03811681146121a657600080fd5b600082601f83011261297257600080fd5b81356129806126ee826126ac565b8082825260208201915060208360051b8601019250858311156129a257600080fd5b602085015b838110156127715780356129ba8161294c565b8352602092830192016129a7565b803580151581146129d857600080fd5b919050565b600061016082840312156129f057600080fd5b6129f8612614565b82358152905060208201356001600160401b03811115612a1757600080fd5b612a23848285016127d6565b60208301525060408201356001600160401b03811115612a4257600080fd5b612a4e848285016128ca565b60408301525060608201356001600160401b03811115612a6d57600080fd5b612a7984828501612961565b60608301525060808201356001600160401b03811115612a9857600080fd5b612aa4848285016128ca565b60808301525060a08201356001600160401b03811115612ac357600080fd5b612acf8482850161286c565b60a08301525060c08201356001600160401b03811115612aee57600080fd5b612afa848285016127d6565b60c08301525060e08201356001600160401b03811115612b1957600080fd5b612b25848285016127d6565b60e0830152506101008201356001600160401b03811115612b4557600080fd5b612b51848285016128ca565b61010083015250612b6561012083016129c8565b610120820152612b7861014083016129c8565b61014082015292915050565b60008060408385031215612b9757600080fd5b82356001600160401b03811115612bad57600080fd5b830160608186031215612bbf57600080fd5b612bc76125ec565b813581526020808301359082015260408201356001600160401b03811115612bee57600080fd5b612bfa878285016126cf565b60408301525092505060208301356001600160401b03811115612c1c57600080fd5b612c28858286016129dd565b9150509250929050565b600080600080600060808688031215612c4a57600080fd5b8535612c558161294c565b94506020860135612c658161294c565b93506040860135925060608601356001600160401b03811115612c8757600080fd5b8601601f81018813612c9857600080fd5b80356001600160401b03811115612cae57600080fd5b886020828401011115612cc057600080fd5b959894975092955050506020019190565b600060208284031215612ce357600080fd5b5035919050565b60008060408385031215612cfd57600080fd5b823591506020830135612d0f8161294c565b809150509250929050565b600082601f830112612d2b57600080fd5b6106b38383356020850161277b565b600060208284031215612d4c57600080fd5b81356001600160401b03811115612d6257600080fd5b82016101808185031215612d7557600080fd5b612d7d612637565b8135815260208201356001600160401b03811115612d9a57600080fd5b612da686828501612d1a565b60208301525060408201356001600160401b03811115612dc557600080fd5b612dd1868285016127d6565b60408301525060608201356001600160401b03811115612df057600080fd5b612dfc868285016128ca565b60608301525060808201356001600160401b03811115612e1b57600080fd5b612e2786828501612961565b60808301525060a08201356001600160401b03811115612e4657600080fd5b612e52868285016128ca565b60a08301525060c08201356001600160401b03811115612e7157600080fd5b612e7d8682850161286c565b60c08301525060e08201356001600160401b03811115612e9c57600080fd5b612ea8868285016127d6565b60e0830152506101008201356001600160401b03811115612ec857600080fd5b612ed4868285016127d6565b610100830152506101208201356001600160401b03811115612ef557600080fd5b612f01868285016128ca565b61012083015250612f1561014083016129c8565b610140820152612f2861016083016129c8565b610160820152949350505050565b600082601f830112612f4757600080fd5b8135612f556126ee826126ac565b8082825260208201915060208360051b860101925085831115612f7757600080fd5b602085015b838110156127715780356001600160401b03811115612f9a57600080fd5b612fa9886020838a0101612d1a565b84525060209283019201612f7c565b60008060408385031215612fcb57600080fd5b8235915060208301356001600160401b03811115612fe857600080fd5b612c2885828601612f36565b6000806040838503121561300757600080fd5b82356001600160401b0381111561301d57600080fd5b830160a0818603121561302f57600080fd5b61303761265a565b8135815260208201356001600160401b0381111561305457600080fd5b61306087828501612d1a565b6020830152506040828101359082015260608201356001600160401b0381111561308957600080fd5b613095878285016126cf565b606083015250608082013591506130ab8261294c565b6080810191909152915060208301356001600160401b03811115612c1c57600080fd5b600381106130ec57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161049582846130ce565b60008060008060008060008060006101208a8c03121561311d57600080fd5b8935985060208a01356001600160401b0381111561313a57600080fd5b6131468c828d01612d1a565b98505060408a01356001600160401b0381111561316257600080fd5b61316e8c828d0161286c565b97505060608a01356001600160401b0381111561318a57600080fd5b6131968c828d016127d6565b96505060808a01356001600160401b038111156131b257600080fd5b6131be8c828d016127d6565b95505060a08a01356001600160401b038111156131da57600080fd5b6131e68c828d016128ca565b94505060c08a01356001600160401b0381111561320257600080fd5b61320e8c828d01612f36565b93505061321d60e08b016129c8565b915061322c6101008b016129c8565b90509295985092959850929598565b600080600080600080600080610100898b03121561325857600080fd5b8835975060208901356001600160401b0381111561327557600080fd5b6132818b828c01612d1a565b97505060408901356001600160401b0381111561329d57600080fd5b6132a98b828c0161286c565b96505060608901356001600160401b038111156132c557600080fd5b6132d18b828c016127d6565b95505060808901356001600160401b038111156132ed57600080fd5b6132f98b828c016127d6565b94505060a08901356001600160401b0381111561331557600080fd5b6133218b828c016128ca565b93505061333060c08a016129c8565b915061333e60e08a016129c8565b90509295985092959890939650565b60006020828403121561335f57600080fd5b81356106b38161294c565b60006020828403121561337c57600080fd5b5051919050565b828152604081016106b360208301846130ce565b6000602082840312156133a957600080fd5b81516106b38161294c565b6020808252605a908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f6060820152796d61696e2077616c6c6574732c2077686f2061726520796f753f60301b608082015260a00190565b60005b8381101561344f578181015183820152602001613437565b50506000910152565b60008151808452613470816020860160208601613434565b601f01601f19169290920160200192915050565b8281526040602082015260006105fb6040830184613458565b60208082526036908201527f504b5048656c7065723a20697066732063696420616e642073636f70652061726040820152750e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d60531b606082015260800190565b60208082526035908201527f504b5048656c7065723a206164647265737320616e642073636f7065206172726040820152740c2f240d8cadccee8d0e640daeae6e840dac2e8c6d605b1b606082015260800190565b6020808252603b908201526000805160206138dd83398151915260408201527a0d2c840c2e4e4c2f240d8cadccee8d0e640daeae6e840dac2e8c6d602b1b606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f7075626b6579206172726179206c656e67746873206d757374206d6174636800606082015260800190565b6020808252603f908201526000805160206138dd83398151915260408201527f73636f706573206172726179206c656e67746873206d757374206d6174636800606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561366f578151865260209586019590910190600101613651565b5093949350505050565b8381526060602082015260006136926060830185613458565b82810360408401526136a4818561363d565b9695505050505050565b8381526001600160a01b03831660208201526060604082018190526000906136d89083018461363d565b95945050505050565b8381526060602082015282516060820152600060208401516060608084015261370d60c0840182613458565b90506040850151605f198483030160a085015261372a8282613458565b91505082810360408401526136a4818561363d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b86815285602082015260c06040820152600061378260c0830187613458565b6060830186905282810360808401528451808252602080870192019060005b818110156137de578351805184526020810151602085015260ff6040820151166040850152506060830192506020840193506001810190506137a1565b50506001600160a01b03851660a085015291506137f89050565b979650505050505050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351613835816017850160208801613434565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613866816028840160208801613434565b01602801949350505050565b6020815260006106b36020830184613458565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761049557610495613885565b8082018082111561049557610495613885565b6000816138d4576138d4613885565b50600019019056fe504b5048656c7065723a2061757468206d6574686f64207479706520616e6420a26469706673582212201f30b6e11b3dbcaec61a3cbe0e65bd69f7cc1a45ca4792f4fc3a0b6259a4bae164736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain/abis/PKPNFTMetadata.json b/rust/lit-core/lit-blockchain/abis/PKPNFTMetadata.json index f2f8bc7..6e0a3f4 100644 --- a/rust/lit-core/lit-blockchain/abis/PKPNFTMetadata.json +++ b/rust/lit-core/lit-blockchain/abis/PKPNFTMetadata.json @@ -156,8 +156,8 @@ "type": "function" } ], - "bytecode": "0x6080604052348015600f57600080fd5b50604051611c7d380380611c7d833981016040819052602c916076565b600080546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b836002811115606b57606b60bd565b0217905550505060d3565b60008060408385031215608857600080fd5b82516001600160a01b0381168114609e57600080fd5b60208401519092506003811060b257600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b611b9b806100e26000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208f1399b085bffde06578f1dd04ad36217eed47fba06d75a31f5ce9e67151788264736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208f1399b085bffde06578f1dd04ad36217eed47fba06d75a31f5ce9e67151788264736f6c634300081c0033", + "bytecode": "0x6080604052348015600f57600080fd5b50604051611c7d380380611c7d833981016040819052602c916076565b600080546001600160a01b0384166001600160a01b03198216811783558392916001600160a81b03191617600160a01b836002811115606b57606b60bd565b0217905550505060d3565b60008060408385031215608857600080fd5b82516001600160a01b0381168114609e57600080fd5b60208401519092506003811060b257600080fd5b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b611b9b806100e26000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220119f3eff15d9f5ea1c055f3790173296030e59973e2ad660e8711a55e2f0331364736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c8063451d89fa1461007d57806350d17b5e146100a6578063519a218e146100d1578063855eec22146100e65780639000fee1146100f9578063950462ee1461010c5780639dca00321461011f578063b63a767714610140575b600080fd5b61009061008b366004610fb0565b610153565b60405161009d9190611010565b60405180910390f35b6000546100b9906001600160a01b031681565b6040516001600160a01b03909116815260200161009d565b6100e46100df366004611043565b61030c565b005b6100e46100f436600461105c565b610456565b6100e461010736600461105c565b610589565b61009061011a3660046110ce565b6106b7565b60005461013390600160a01b900460ff1681565b60405161009d919061114a565b6100e461014e366004611043565b6106f3565b6060600082516002610165919061116e565b6001600160401b0381111561017c5761017c610f02565b6040519080825280601f01601f1916602001820160405280156101a6576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156102e2578182518683815181106101f2576101f2611185565b0160200151610204919060f81c6111b1565b8151811061021457610214611185565b01602001516001600160f81b0319168361022f83600261116e565b8151811061023f5761023f611185565b60200101906001600160f81b031916908160001a90535081825186838151811061026b5761026b611185565b016020015161027d919060f81c6111c5565b8151811061028d5761028d611185565b01602001516001600160f81b031916836102a883600261116e565b6102b39060016111d9565b815181106102c3576102c3611185565b60200101906001600160f81b031916908160001a9053506001016101d4565b50816040516020016102f49190611208565b60405160208183030381529060405292505050919050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103829190611232565b60005460405160e084901b6001600160e01b03191681526103b19291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f2919061125f565b6001600160a01b0316336001600160a01b03161461042b5760405162461bcd60e51b81526004016104229061127c565b60405180910390fd5b60408051602080820183526000808352848152600190915291909120906104529082611376565b5050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc9190611232565b60005460405160e084901b6001600160e01b03191681526104fb9291600160a01b900460ff169060040161124b565b602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c919061125f565b6001600160a01b0316336001600160a01b03161461056c5760405162461bcd60e51b81526004016104229061127c565b60008281526001602052604090206105848282611376565b505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff9190611232565b60005460405160e084901b6001600160e01b031916815261062e9291600160a01b900460ff169060040161124b565b602060405180830381865afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f919061125f565b6001600160a01b0316336001600160a01b03161461069f5760405162461bcd60e51b81526004016104229061127c565b60008281526002602052604090206105848282611376565b606060006106c6858585610830565b9050806040516020016106d99190611434565b6040516020818303038152906040529150505b9392505050565b60005460408051630977a80760e41b815290516001600160a01b0390921691638e8dfd1691839163977a8070916004808201926020929091908290030181865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190611232565b60005460405160e084901b6001600160e01b03191681526107989291600160a01b900460ff169060040161124b565b602060405180830381865afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d9919061125f565b6001600160a01b0316336001600160a01b0316146108095760405162461bcd60e51b81526004016104229061127c565b60408051602080820183526000808352848152600290915291909120906104529082611376565b6060600060405180610480016040528061045681526020016116d061045691399050600061085d85610153565b9050600061086a85610a84565b9050600061087788610aa0565b600089815260016020526040812080549293509091610895906112ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108c1906112ee565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b505050505090506000600260008b81526020019081526020016000208054610935906112ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906112ee565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b50505050509050815160001480156109c65750805115155b156109f257826040516020016109dc9190611479565b6040516020818303038152906040529150610a46565b815115801590610a0157508051155b15610a0d575084610a46565b8151158015610a1b57508051155b15610a465782604051602001610a319190611479565b60405160208183030381529060405291508590505b610a768282878787604051602001610a629594939291906114aa565b604051602081830303815290604052610b32565b9a9950505050505050505050565b6060610a9a6001600160a01b0383166014610c91565b92915050565b60606000610aad83610e2c565b60010190506000816001600160401b03811115610acc57610acc610f02565b6040519080825280601f01601f191660200182016040528015610af6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610b0057509392505050565b60608151600003610b5157505060408051602081019091526000815290565b6000604051806060016040528060408152602001611b266040913990506000600384516002610b8091906111d9565b610b8a91906111b1565b610b9590600461116e565b6001600160401b03811115610bac57610bac610f02565b6040519080825280601f01601f191660200182016040528015610bd6576020820181803683370190505b50905060018201602082018586518701602081018051600082525b82841015610c4c576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450610bf1565b9052505085516003900660018114610c6b5760028114610c7e57610c86565b603d6001830353603d6002830353610c86565b603d60018303535b509195945050505050565b60606000610ca083600261116e565b610cab9060026111d9565b6001600160401b03811115610cc257610cc2610f02565b6040519080825280601f01601f191660200182016040528015610cec576020820181803683370190505b509050600360fc1b81600081518110610d0757610d07611185565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d3657610d36611185565b60200101906001600160f81b031916908160001a9053506000610d5a84600261116e565b610d659060016111d9565b90505b6001811115610ddd576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d9957610d99611185565b1a60f81b828281518110610daf57610daf611185565b60200101906001600160f81b031916908160001a90535060049490941c93610dd6816116b8565b9050610d68565b5083156106ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610422565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e6b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310610e95576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310610eb357662386f26fc10000830492506010015b6305f5e1008310610ecb576305f5e100830492506008015b6127108310610edf57612710830492506004015b60648310610ef1576064830492506002015b600a8310610a9a5760010192915050565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b03841115610f3257610f32610f02565b50604051601f19601f85018116603f011681018181106001600160401b0382111715610f6057610f60610f02565b604052838152905080828401851015610f7857600080fd5b83836020830137600060208583010152509392505050565b600082601f830112610fa157600080fd5b6106ec83833560208501610f18565b600060208284031215610fc257600080fd5b81356001600160401b03811115610fd857600080fd5b610fe484828501610f90565b949350505050565b60005b83811015611007578181015183820152602001610fef565b50506000910152565b602081526000825180602084015261102f816040850160208701610fec565b601f01601f19169190910160400192915050565b60006020828403121561105557600080fd5b5035919050565b6000806040838503121561106f57600080fd5b8235915060208301356001600160401b0381111561108c57600080fd5b8301601f8101851361109d57600080fd5b6110ac85823560208401610f18565b9150509250929050565b6001600160a01b03811681146110cb57600080fd5b50565b6000806000606084860312156110e357600080fd5b8335925060208401356001600160401b0381111561110057600080fd5b61110c86828701610f90565b925050604084013561111d816110b6565b809150509250925092565b6003811061114657634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a9a8284611128565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9a57610a9a611158565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826111c0576111c061119b565b500490565b6000826111d4576111d461119b565b500690565b80820180821115610a9a57610a9a611158565b600081516111fe818560208601610fec565b9290920192915050565b61060f60f31b815260008251611225816002850160208701610fec565b9190910160020192915050565b60006020828403121561124457600080fd5b5051919050565b828152604081016106ec6020830184611128565b60006020828403121561127157600080fd5b81516106ec816110b6565b6020808252604c908201527f504b5048656c7065723a206f6e6c792074686520446f6d61696e2057616c6c6560408201527f7420726567697374727920697320616c6c6f77656420746f206d696e7420646f60608201526b6d61696e2077616c6c65747360a01b608082015260a00190565b600181811c9082168061130257607f821691505b60208210810361132257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561058457806000526020600020601f840160051c8101602085101561134f5750805b601f840160051c820191505b8181101561136f576000815560010161135b565b5050505050565b81516001600160401b0381111561138f5761138f610f02565b6113a38161139d84546112ee565b84611328565b6020601f8211600181146113d757600083156113bf5750848201515b600019600385901b1c1916600184901b17845561136f565b600084815260208120601f198516915b8281101561140757878501518255602094850194600190920191016113e7565b50848210156114255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161146c81601d850160208701610fec565b91909101601d0192915050565b684c697420504b50202360b81b81526000825161149d816009850160208701610fec565b9190910160090192915050565b683d913730b6b2911d1160b91b815285516000906114cf816009850160208b01610fec565b7f222c20226465736372697074696f6e223a202254686973204e465420656e74696009918401918201527f746c65732074686520686f6c64657220746f207573652061204c69742050726f60298201527f746f636f6c20504b502c20616e6420746f206772616e7420616363657373207460498201527f6f206f7468657220757365727320616e64204c697420416374696f6e7320746f60698201527f20757365207468697320504b50222c22696d6167655f64617461223a20220000608982015286516115a48160a7840160208b01610fec565b6009818301019150507f222c2261747472696275746573223a205b7b2274726169745f74797065223a20609e8201527711283ab13634b19025b2bc911610113b30b63ab2911d101160411b60be8201526116ac61169c61169661165b61165561161060d687018c6111ec565b7f227d2c207b2274726169745f74797065223a20224554482057616c6c6574204181527232323932b9b9911610113b30b63ab2911d101160691b602082015260330190565b896111ec565b7f227d2c207b2274726169745f74797065223a2022546f6b656e204944222c20228152683b30b63ab2911d101160b91b602082015260290190565b866111ec565b63227d5d7d60e01b815260040190565b98975050505050505050565b6000816116c7576116c7611158565b50600019019056fe3c73766720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667272077696474683d273130383027206865696768743d2731303830272066696c6c3d276e6f6e652720786d6c6e733a763d2768747470733a2f2f76656374612e696f2f6e616e6f273e3c7061746820643d274d3336332e303736203339322e323237732d2e3937372031382e3532342d33362e3837342037382e393437632d34312e3537362037302e3031382d34352e343831203135312e3937382d332e303137203232302e342038392e353231203134342e323435203333322e343831203134312e3532203432322e3535362e3038392033342e3833322d35342e3730372034342e3831362d3131372e3437392033322e3932342d3138312e323438203020302d32382e3831392d3133332e3134342d3132372e3233372d3231372e30393920312e35353320312e33303820352e3336392031392e31323220362e3130312032362e37323220322e3234312032332e3335342e3034352034372e3833382d372e3738372037302e3036322d352e3734362031362e33332d31332e3731312033302e3436372d32372e3137382034312e33363820302d332e3831312d2e3935342d31302e3633352d2e3937362d31322e3931382d2e3634342d34362e3530382d31382e3635392d38392e3538322d34382e3031312d3132352e3734332d32352e3634372d33312e3535322d36302e3831322d35332e3038392d39372e38342d36382e3933322e39333120332e31393120322e3636322031362e34313920322e3930362031392e30333320312e3930382032312e39353820322e3236332035322e3731332d2e3632312037342e363439732d372e3833322033332e3837382d31342e3535342035342e343431632d31302e3138342033312e3137352d32342e30352035342e3238352d34312e3632312038322e3030342d332e323420352e3039362d31322e3931332031392e3037382d31382e3038322032362e313436203020302d382e3839372d35362e3139312d34302e3636372d38372e393231682d2e3032327a272066696c6c3d2723303030272f3e3c7061746820643d274d3536322e352032372e32386c3431302e323739203233362e3837346331332e39323320382e3033392032322e352032322e3839352032322e352033382e393731763437332e373563302031362e3037362d382e3537372033302e3933322d32322e352033382e3937314c3536322e3520313035322e3732632d31332e39323320382e30342d33312e30373720382e30342d343520304c3130372e323231203831352e383436632d31332e3932332d382e3033392d32322e352d32322e3839352d32322e352d33382e393731762d3437332e37356134352034352030203020312032322e352d33382e3937314c3531372e352032372e323861343520343520302030203120343520307a27207374726f6b653d272330303027207374726f6b652d77696474683d2732342e3735272f3e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220119f3eff15d9f5ea1c055f3790173296030e59973e2ad660e8711a55e2f0331364736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/rust/lit-core/lit-blockchain/abis/PubkeyRouter.json b/rust/lit-core/lit-blockchain/abis/PubkeyRouter.json index 814aec2..5c48ab5 100644 --- a/rust/lit-core/lit-blockchain/abis/PubkeyRouter.json +++ b/rust/lit-core/lit-blockchain/abis/PubkeyRouter.json @@ -501,6 +501,12 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "name": "PubkeyRoutingDataSet", @@ -622,6 +628,156 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -920,6 +1076,11 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", @@ -930,19 +1091,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getTrustedForwarder", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -988,6 +1136,11 @@ "internalType": "bytes32", "name": "derivedKeyId", "type": "bytes32" + }, + { + "internalType": "string", + "name": "keySetIdentifier", + "type": "string" } ], "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", @@ -997,133 +1150,6 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newResolverAddress", - "type": "address" - } - ], - "name": "setContractResolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "address", - "name": "stakingContract", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "derivedKeyId", - "type": "bytes32" - } - ], - "name": "setRoutingDataAsAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "forwarder", - "type": "address" - } - ], - "name": "setTrustedForwarder", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "stakingContractAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "voteForRootKeys", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" } ], "deployedBytecode": "", diff --git a/rust/lit-core/lit-blockchain/abis/Staking.json b/rust/lit-core/lit-blockchain/abis/Staking.json index 5925884..08eb31f 100644 --- a/rust/lit-core/lit-blockchain/abis/Staking.json +++ b/rust/lit-core/lit-blockchain/abis/Staking.json @@ -394,6 +394,11 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, { "inputs": [ { @@ -583,6 +588,71 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + }, + { + "internalType": "string", + "name": "defaultKeySet", + "type": "string" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -694,11 +764,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "CallerNotOwner", - "type": "error" - }, { "inputs": [], "name": "CallerNotOwnerOrDevopsAdmin", @@ -1332,11 +1397,6 @@ "name": "tokenRewardPerTokenPerEpoch", "type": "uint256" }, - { - "internalType": "uint256[]", - "name": "keyTypes", - "type": "uint256[]" - }, { "internalType": "uint256", "name": "minimumValidatorCount", @@ -1688,66 +1748,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "realmId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "maxConcurrentRequests", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPresignCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minPresignCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "peerCheckingIntervalSecs", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPresignConcurrency", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "rpcHealthcheckEnabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "minEpochForRewards", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "permittedValidatorsOn", - "type": "bool" - } - ], - "internalType": "struct LibStakingStorage.RealmConfig", - "name": "newConfig", - "type": "tuple" - } - ], - "name": "setRealmConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -2689,9 +2689,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig", @@ -2749,9 +2749,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig[]", @@ -2807,9 +2807,9 @@ "type": "uint256[]" }, { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" + "internalType": "bytes", + "name": "recoverySessionId", + "type": "bytes" } ], "internalType": "struct LibStakingStorage.KeySetConfig", @@ -3303,67 +3303,6 @@ "name": "ComplaintConfigSet", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newTokenRewardPerTokenPerEpoch", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "newKeyTypes", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinimumValidatorCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxConcurrentRequests", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxPresignCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinPresignCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newPeerCheckingIntervalSecs", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMaxPresignConcurrency", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "newRpcHealthcheckEnabled", - "type": "bool" - } - ], - "name": "ConfigSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -4683,19 +4622,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getKeyTypes", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -5990,11 +5916,6 @@ "name": "tokenRewardPerTokenPerEpoch", "type": "uint256" }, - { - "internalType": "uint256[]", - "name": "keyTypes", - "type": "uint256[]" - }, { "internalType": "uint256", "name": "minimumValidatorCount", @@ -6645,6 +6566,11 @@ "internalType": "bool", "name": "permittedValidatorsOn", "type": "bool" + }, + { + "internalType": "string", + "name": "defaultKeySet", + "type": "string" } ], "internalType": "struct LibStakingStorage.RealmConfig", diff --git a/rust/lit-core/lit-blockchain/src/contracts/arbitrum_key_deriver.rs b/rust/lit-core/lit-blockchain/src/contracts/arbitrum_key_deriver.rs index dfc3f72..0b30e2d 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/arbitrum_key_deriver.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/arbitrum_key_deriver.rs @@ -544,13 +544,13 @@ pub mod arbitrum_key_deriver { ::ethers::core::abi::Abi, > = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x11\xCA8\x03\x80a\x11\xCA\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xA4V[a\0G`\0\x80Q` a\x11\xAA\x839\x81Q\x91R3a\0\xADV[a\0_`\0\x80Q` a\x11\xAA\x839\x81Q\x91R\x80a\0\xBBV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15a\0\xA1Wa\0\xA1a\x01\xEEV[\x02\x17\x90UPPPa\x02\x04V[a\0\xB7\x82\x82a\x01\x06V[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xB7W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01`3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0\x80`@\x83\x85\x03\x12\x15a\x01\xB7W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\xCEW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\xE3W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x0F\x97\x80a\x02\x13`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 7$;\xC4>x\xAC4\xBBE\xBF\xE2CE\x0C(\x1Fa\xD2&\xE1,\xDA\xB0K(\x99\x83*D\xFFwdsolcC\0\x08\x1C\x003\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x11\xCA8\x03\x80a\x11\xCA\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xA4V[a\0G`\0\x80Q` a\x11\xAA\x839\x81Q\x91R3a\0\xADV[a\0_`\0\x80Q` a\x11\xAA\x839\x81Q\x91R\x80a\0\xBBV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15a\0\xA1Wa\0\xA1a\x01\xEEV[\x02\x17\x90UPPPa\x02\x04V[a\0\xB7\x82\x82a\x01\x06V[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xB7W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01`3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0\x80`@\x83\x85\x03\x12\x15a\x01\xB7W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x01\xCEW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\xE3W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x0F\x97\x80a\x02\x13`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xBD\xC8a+\xB2]}\x87\x97\x18\xD9\x19\xF8\xD4\x8AS\x9A\x8FZ\xEAh\x80G\xD2!\x85a\"\xDCxapdsolcC\0\x08\x1C\x003\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB"; /// The bytecode of the contract. pub static ARBITRUMKEYDERIVER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 7$;\xC4>x\xAC4\xBBE\xBF\xE2CE\x0C(\x1Fa\xD2&\xE1,\xDA\xB0K(\x99\x83*D\xFFwdsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xBAW`\x005`\xE0\x1C\x80c\x01\xFF\xC9\xA7\x14a\0\xBFW\x80c$\x8A\x9C\xA3\x14a\0\xE7W\x80c//\xF1]\x14a\x01\x08W\x80c6V\x8A\xBE\x14a\x01\x1DW\x80cP\xD1{^\x14a\x010W\x80cu\xB28\xFC\x14a\x01[W\x80c\x91\xD1HT\x14a\x01\x82W\x80c\x9D\xCA\x002\x14a\x01\x95W\x80c\xA2\x17\xFD\xDF\x14a\x01\xB6W\x80c\xA3,+\x99\x14a\x01\xBEW\x80c\xB2N\xD3\x08\x14a\x01\xDFW\x80c\xD5Gt\x1F\x14a\x02\x06W\x80c\xF9]q\xB1\x14a\x02\x19W\x80c\xFE\x89\xC9p\x14a\x02,W[`\0\x80\xFD[a\0\xD2a\0\xCD6`\x04a\t\x8DV[a\x02RV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xFAa\0\xF56`\x04a\t\xB7V[a\x02\x89V[`@Q\x90\x81R` \x01a\0\xDEV[a\x01\x1Ba\x01\x166`\x04a\t\xE5V[a\x02\x9EV[\0[a\x01\x1Ba\x01+6`\x04a\t\xE5V[a\x02\xBFV[`\x01Ta\x01C\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\xDEV[a\0\xFA\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\x81V[a\0\xD2a\x01\x906`\x04a\t\xE5V[a\x03BV[`\x01Ta\x01\xA9\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\xDE\x91\x90a\n7V[a\0\xFA`\0\x81V[a\x01\xD1a\x01\xCC6`\x04a\n\xDAV[a\x03kV[`@Qa\0\xDE\x92\x91\x90a\x0C\x92V[a\0\xFA\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9\x81V[a\x01\x1Ba\x02\x146`\x04a\t\xE5V[a\x04\xF6V[a\x01\x1Ba\x02'6`\x04a\x0C\xB5V[a\x05\x12V[a\0\xFA~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x02\x83WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xA7\x82a\x02\x89V[a\x02\xB0\x81a\x05_V[a\x02\xBA\x83\x83a\x05lV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x034W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x03>\x82\x82a\x05\xF0V[PPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0```\0a\x03|\x86\x86\x86a\x06UV[\x90P`\0\x81`\0\x81Q\x81\x10a\x03\x93Wa\x03\x93a\x0C\xD2V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16`\0\x03a\x03\xD0WP\x7F\x9A\x91\x86.\xF1T4\xE2e\x8Eh'R\xE7C\xFAIu\xA1\x17\x80}\xF7\xF0\xEA\xCA\xB6n7\xE8\x04\xD9a\x03\xF2V[P~\xC3H\xEF\x80\xE6m\"\xF4D\n\x90\xBF\x96C\xA0<\x82&\r\r\xCC\xA4(l\xF1\x14\xCC\x97\xDB\x0Cd[`\x01T`@QcGF\xFE\x8B`\xE1\x1B\x81R`\0\x91`\x01`\x01`\xA0\x1B\x03\x81\x16\x91c\x8E\x8D\xFD\x16\x91a\x04/\x91\x86\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x0C\xE8V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04LW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04p\x91\x90a\x0C\xFCV[\x90P`\0\x81`\x01`\x01`\xA0\x1B\x03\x16c\xECr3g\x85`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\xA0\x91\x90a\r\x19V[`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xBDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x04\xE5\x91\x90\x81\x01\x90a\r,V[`\x01\x9A\x90\x99P\x97PPPPPPPPV[a\x04\xFF\x82a\x02\x89V[a\x05\x08\x81a\x05_V[a\x02\xBA\x83\x83a\x05\xF0V[\x7F\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECBa\x05<\x81a\x05_V[P`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[a\x05i\x813a\x07\x87V[PV[a\x05v\x82\x82a\x03BV[a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x05\xAC3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x05\xFA\x82\x82a\x03BV[\x15a\x03>W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x06\xEFW\x84\x86\x82\x81Q\x81\x10a\x06\x86Wa\x06\x86a\x0C\xD2V[` \x02` \x01\x01Q` \x01Q\x03a\x06\xE7W\x82\x86\x82\x81Q\x81\x10a\x06\xAAWa\x06\xAAa\x0C\xD2V[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x06\xC7\x92\x91\x90a\r\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x06\xE3\x90a\r\xE7V[\x92PP[`\x01\x01a\x06jV[P\x83`\x02\x03a\x07\x01W`\x01\x93Pa\x07\x0EV[\x83`\x03\x03a\x07\x0EW`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x0F7`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x07e\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x0E\x0CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PPPPPPPPP[\x93\x92PPPV[a\x07\x91\x82\x82a\x03BV[a\x03>Wa\x07\x9E\x81a\x07\xE0V[a\x07\xA9\x83` a\x07\xF2V[`@Q` \x01a\x07\xBA\x92\x91\x90a\x0E\x86V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x03+\x91`\x04\x01a\r\x19V[``a\x02\x83`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\x08\x01\x83`\x02a\x0E\xF5V[a\x08\x0C\x90`\x02a\x0F\x0CV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08#Wa\x08#a\nEV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08MW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x08hWa\x08ha\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x08\x97Wa\x08\x97a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x08\xBB\x84`\x02a\x0E\xF5V[a\x08\xC6\x90`\x01a\x0F\x0CV[\x90P[`\x01\x81\x11\x15a\t>Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x08\xFAWa\x08\xFAa\x0C\xD2V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\t\x10Wa\t\x10a\x0C\xD2V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\t7\x81a\x0F\x1FV[\x90Pa\x08\xC9V[P\x83\x15a\x07\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x03+V[`\0` \x82\x84\x03\x12\x15a\t\x9FW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x07\x80W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\t\xC9W`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x05iW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\t\xF8W`\0\x80\xFD[\x825\x91P` \x83\x015a\n\n\x81a\t\xD0V[\x80\x91PP\x92P\x92\x90PV[`\x03\x81\x10a\n3WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x02\x83\x82\x84a\n\x15V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n}Wa\n}a\nEV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\n\xABWa\n\xABa\nEV[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xCCWa\n\xCCa\nEV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x80`\0``\x84\x86\x03\x12\x15a\n\xEFW`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x0CW`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x0B\x1DW`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B6Wa\x0B6a\nEV[\x80`\x05\x1Ba\x0BF` \x82\x01a\n\x83V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x0BbW`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x0C-W\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\x87W`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x0B\x9DW`\0\x80\xFD[a\x0B\xA5a\n[V[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xBEW`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x0B\xD3W`\0\x80\xFD[\x805a\x0B\xE6a\x0B\xE1\x82a\n\xB3V[a\n\x83V[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x0B\xFBW`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x0BiV[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x0C]W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0CEV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x0C~\x81` \x86\x01` \x86\x01a\x0CBV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x15\x15\x81R`@` \x82\x01R`\0a\x0C\xAD`@\x83\x01\x84a\x0CfV[\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x0C\xC7W`\0\x80\xFD[\x815a\x07\x80\x81a\t\xD0V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x82\x81R`@\x81\x01a\x07\x80` \x83\x01\x84a\n\x15V[`\0` \x82\x84\x03\x12\x15a\r\x0EW`\0\x80\xFD[\x81Qa\x07\x80\x81a\t\xD0V[` \x81R`\0a\x07\x80` \x83\x01\x84a\x0CfV[`\0` \x82\x84\x03\x12\x15a\r>W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\rTW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\reW`\0\x80\xFD[\x80Qa\rsa\x0B\xE1\x82a\n\xB3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\r\x88W`\0\x80\xFD[a\r\x99\x82` \x83\x01` \x86\x01a\x0CBV[\x95\x94PPPPPV[`\0\x83Qa\r\xB4\x81\x84` \x88\x01a\x0CBV[\x83Q\x90\x83\x01\x90a\r\xC8\x81\x83` \x88\x01a\x0CBV[\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x0E\x03Wa\x0E\x03a\r\xD1V[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x0EN\x81`)\x85\x01` \x89\x01a\x0CBV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x0Eu\x81`-\x84\x01` \x88\x01a\x0CBV[\x01`-\x01\x99\x98PPPPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x0E\xB8\x81`\x17\x85\x01` \x88\x01a\x0CBV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x0E\xE9\x81`(\x84\x01` \x88\x01a\x0CBV[\x01`(\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x02\x83Wa\x02\x83a\r\xD1V[\x80\x82\x01\x80\x82\x11\x15a\x02\x83Wa\x02\x83a\r\xD1V[`\0\x81a\x0F.Wa\x0F.a\r\xD1V[P`\0\x19\x01\x90V\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xBD\xC8a+\xB2]}\x87\x97\x18\xD9\x19\xF8\xD4\x8AS\x9A\x8FZ\xEAh\x80G\xD2!\x85a\"\xDCxapdsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static ARBITRUMKEYDERIVER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain/src/contracts/backup_recovery.rs b/rust/lit-core/lit-blockchain/src/contracts/backup_recovery.rs index 72fe4fb..c46a621 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/backup_recovery.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/backup_recovery.rs @@ -970,6 +970,13 @@ pub mod backup_recovery { ::std::borrow::ToOwned::to_owned("bytes"), ), }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("keySetId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, ], outputs: ::std::vec![], constant: ::core::option::Option::None, @@ -2179,14 +2186,18 @@ pub mod backup_recovery { .method_hash([93, 28, 27, 61], party_members) .expect("method not found (this should never happen)") } - ///Calls the contract's `registerRecoveryKeys` (0x960cb990) function + ///Calls the contract's `registerRecoveryKeys` (0xa6fdb149) function pub fn register_recovery_keys( &self, recovery_keys: ::std::vec::Vec, session_id: ::ethers::core::types::Bytes, + key_set_id: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([150, 12, 185, 144], (recovery_keys, session_id)) + .method_hash( + [166, 253, 177, 73], + (recovery_keys, session_id, key_set_id), + ) .expect("method not found (this should never happen)") } ///Calls the contract's `setBackupPartyState` (0xb347cccc) function @@ -4124,7 +4135,7 @@ pub mod backup_recovery { pub struct RegisterNewBackupPartyCall { pub party_members: ::std::vec::Vec<::ethers::core::types::Address>, } - ///Container type for all input parameters for the `registerRecoveryKeys` function with signature `registerRecoveryKeys((bytes,uint256)[],bytes)` and selector `0x960cb990` + ///Container type for all input parameters for the `registerRecoveryKeys` function with signature `registerRecoveryKeys((bytes,uint256)[],bytes,string)` and selector `0xa6fdb149` #[derive( Clone, ::ethers::contract::EthCall, @@ -4139,11 +4150,12 @@ pub mod backup_recovery { )] #[ethcall( name = "registerRecoveryKeys", - abi = "registerRecoveryKeys((bytes,uint256)[],bytes)" + abi = "registerRecoveryKeys((bytes,uint256)[],bytes,string)" )] pub struct RegisterRecoveryKeysCall { pub recovery_keys: ::std::vec::Vec, pub session_id: ::ethers::core::types::Bytes, + pub key_set_id: ::std::string::String, } ///Container type for all input parameters for the `setBackupPartyState` function with signature `setBackupPartyState(bytes[],address[])` and selector `0xb347cccc` #[derive( diff --git a/rust/lit-core/lit-blockchain/src/contracts/contract_resolver.rs b/rust/lit-core/lit-blockchain/src/contracts/contract_resolver.rs index a4347cc..5668ab8 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/contract_resolver.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/contract_resolver.rs @@ -472,6 +472,30 @@ pub mod contract_resolver { }, ], ), + ( + ::std::borrow::ToOwned::to_owned("PUB_KEY_ROUTER_VIEWS_CONTRACT"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned( + "PUB_KEY_ROUTER_VIEWS_CONTRACT", + ), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes( + 32usize, + ), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), ( ::std::borrow::ToOwned::to_owned("RATE_LIMIT_NFT_CONTRACT"), ::std::vec![ @@ -1123,13 +1147,13 @@ pub mod contract_resolver { ::ethers::core::abi::Abi, > = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x14g8\x03\x80a\x14g\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xE0V[a\0G`\0\x80Q` a\x14G\x839\x81Q\x91R3a\0\xE9V[a\0_`\0\x80Q` a\x14G\x839\x81Q\x91R\x80a\0\xF7V[`\x01\x80`\0\x83`\x02\x81\x11\x15a\0vWa\0va\x02\x08V[`\x02\x81\x11\x15a\0\x87Wa\0\x87a\x02\x08V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\0\xDB\x91\x90a\x02\x1EV[`@Q\x80\x91\x03\x90\xA1Pa\x02FV[a\0\xF3\x82\x82a\x01BV[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xF3W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01\x9C3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0` \x82\x84\x03\x12\x15a\x01\xF2W`\0\x80\xFD[\x81Q`\x03\x81\x10a\x02\x01W`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[` \x81\x01`\x03\x83\x10a\x02@WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x91\x90R\x90V[a\x11\xF2\x80a\x02U`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xBCW`\x005`\xE0\x1C\x80c|\xAD\xF6\x9F\x11a\0\xF5W\x80c|\xAD\xF6\x9F\x14a\x04\x17W\x80c}J\x03\xBD\x14a\x04>W\x80c}\x9D(\x80\x14a\x04eW\x80c\x7F\x90 \x9F\x14a\x04\x8CW\x80c\x85\xCB\x11\x91\x14a\x04\xB3W\x80c\x8C\x156\xDF\x14a\x04\xDAW\x80c\x8D\xEB8\x93\x14a\x05\x01W\x80c\x8E\x8D\xFD\x16\x14a\x05\x14W\x80c\x90r\xF88\x14a\x05'W\x80c\x91\xD1HT\x14a\x05NW\x80c\x97z\x80p\x14a\x05aW\x80c\xA2\x17\xFD\xDF\x14a\x05\x88W\x80c\xAD\x1C\x8A\x86\x14a\x05\x90W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xB7W\x80c\xD5Gt\x1F\x14a\x05\xDEW\x80c\xDA\x19\xDD\xFB\x14a\x05\xF1W\x80c\xDF8\x06\x93\x14a\x06\x18W\x80c\xF8\xAE\x93\xB4\x14a\x06?W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xC1W\x80c\x11\xEE\x8F\xF7\x14a\x01\xE9W\x80c\x16\xF7k\xBF\x14a\x02\x1EW\x80c\x17\x85\xF5<\x14a\x02EW\x80c!\x9C&j\x14a\x02ZW\x80c$\x8A\x9C\xA3\x14a\x02\x81W\x80c&h\xF3\x05\x14a\x02\x94W\x80c,\x0B\x8B\xF7\x14a\x02\xBBW\x80c.H\x85\xE8\x14a\x02\xE2W\x80c//\xF1]\x14a\x03\tW\x80c6V\x8A\xBE\x14a\x03\x1CW\x80c>\xBFy\x85\x14a\x03/W\x80cB\x16\xE7:\x14a\x03{W\x80cQ\xAD\n\x80\x14a\x03\xA2W\x80cZ\xF2\x7Fy\x14a\x03\xB5W\x80cpH\x02u\x14a\x03\xDCW\x80ct\xBC\x819\x14a\x03\xEFW\x80cu\xB28\xFC\x14a\x04\x02W[`\0\x80\xFD[a\x01\xD4a\x01\xCF6`\x04a\x0E\xB1V[a\x06fV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x10\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xE0V[a\x02\x10\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02Xa\x02S6`\x04a\x0E\xF7V[a\x06\x9DV[\0[a\x02\x10\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x10a\x02\x8F6`\x04a\x0F\x12V[a\x07NV[a\x02\x10\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x10\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x10\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02Xa\x03\x176`\x04a\x0F+V[a\x07cV[a\x02Xa\x03*6`\x04a\x0F+V[a\x07\x84V[a\x03ca\x03=6`\x04a\x0FfV[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xE0V[a\x02\x10\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02Xa\x03\xB06`\x04a\x0F\x89V[a\x07\xFEV[a\x02\x10\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02Xa\x03\xEA6`\x04a\x0E\xF7V[a\t\x82V[a\x02Xa\x03\xFD6`\x04a\x0F\xC5V[a\t\xB2V[a\x02\x10`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x81V[a\x02\x10\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x10\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x10\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x10\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x10\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x10\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02Xa\x05\x0F6`\x04a\x0F\xC5V[a\nnV[a\x03ca\x05\"6`\x04a\x0FfV[a\x0B\x12V[a\x02\x10\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xD4a\x05\\6`\x04a\x0F+V[a\x0BhV[a\x02\x10\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x10`\0\x81V[a\x02\x10\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x10\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02Xa\x05\xEC6`\x04a\x0F+V[a\x0B\x91V[a\x02\x10\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x10\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x10\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\x97WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\x06\xB5\x81a\x0B\xADV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x072W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0B\xBAV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07l\x82a\x07NV[a\x07u\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0C\x1FV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x07\xF4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07)V[a\x07J\x82\x82a\x0B\xBAV[a\x08\x16`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\x083W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08IWa\x08Ia\x0F\xE0V[`\x02\x81\x11\x15a\x08ZWa\x08Za\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\x08\xD7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07)V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\x08\xFFWa\x08\xFFa\x0F\xE0V[`\x02\x81\x11\x15a\t\x10Wa\t\x10a\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\tu\x93\x92\x91\x90a\x10\x18V[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\t\x9A\x81a\x0B\xADV[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0C\x1FV[a\t\xCA`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\t\xE7W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\t\xFEWa\t\xFEa\x0F\xE0V[`\x02\x81\x11\x15a\n\x0FWa\n\x0Fa\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\nc\x91\x90a\x10EV[`@Q\x80\x91\x03\x90\xA1PV[a\n\x86`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\n\xA3W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xB9Wa\n\xB9a\x0F\xE0V[`\x02\x81\x11\x15a\n\xCAWa\n\xCAa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\nc\x90\x83\x90a\x10EV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0B6Wa\x0B6a\x0F\xE0V[`\x02\x81\x11\x15a\x0BGWa\x0BGa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\x9A\x82a\x07NV[a\x0B\xA3\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0B\xBAV[a\x0B\xB7\x813a\x0C\xA3V[PV[a\x0B\xC4\x82\x82a\x0BhV[\x15a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C)\x82\x82a\x0BhV[a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C_3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xAD\x82\x82a\x0BhV[a\x07JWa\x0C\xBA\x81a\x0C\xFCV[a\x0C\xC5\x83` a\r\x0EV[`@Q` \x01a\x0C\xD6\x92\x91\x90a\x10wV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07)\x91`\x04\x01a\x10\xE6V[``a\x06\x97`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\r\x1D\x83`\x02a\x11/V[a\r(\x90`\x02a\x11FV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\r@Wa\r@a\x11YV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\rjW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x85Wa\r\x85a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xB4Wa\r\xB4a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\r\xD8\x84`\x02a\x11/V[a\r\xE3\x90`\x01a\x11FV[\x90P[`\x01\x81\x11\x15a\x0E[Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0E\x17Wa\x0E\x17a\x11oV[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E-Wa\x0E-a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0ET\x81a\x11\x85V[\x90Pa\r\xE6V[P\x83\x15a\x0E\xAAW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07)V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xC3W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xAAW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0E\xF2W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F\tW`\0\x80\xFD[a\x0E\xAA\x82a\x0E\xDBV[`\0` \x82\x84\x03\x12\x15a\x0F$W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0F>W`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0E\xDBV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0E\xF2W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0FyW`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0FWV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\x9EW`\0\x80\xFD[\x835\x92Pa\x0F\xAE` \x85\x01a\x0FWV[\x91Pa\x0F\xBC`@\x85\x01a\x0E\xDBV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x0F\xD7W`\0\x80\xFD[a\x0E\xAA\x82a\x0FWV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10\x14WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10,` \x83\x01\x85a\x0F\xF6V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\x97\x82\x84a\x0F\xF6V[`\0[\x83\x81\x10\x15a\x10nW\x81\x81\x01Q\x83\x82\x01R` \x01a\x10VV[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xA9\x81`\x17\x85\x01` \x88\x01a\x10SV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x10\xDA\x81`(\x84\x01` \x88\x01a\x10SV[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x11\x05\x81`@\x85\x01` \x87\x01a\x10SV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\x97Wa\x06\x97a\x11\x19V[\x80\x82\x01\x80\x82\x11\x15a\x06\x97Wa\x06\x97a\x11\x19V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\x94Wa\x11\x94a\x11\x19V[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 \xBC\xFBZ\xA3%\x1D\xDF3\xA8sl\x96\x89\xBD\x99\xCE\xA1\xDF[\xAA\x0F\xAC8|Ui\x13rX%\xC9rdsolcC\0\x08\x1C\x003\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x14\x998\x03\x80a\x14\x99\x839\x81\x01`@\x81\x90Ra\0/\x91a\x01\xE0V[a\0G`\0\x80Q` a\x14y\x839\x81Q\x91R3a\0\xE9V[a\0_`\0\x80Q` a\x14y\x839\x81Q\x91R\x80a\0\xF7V[`\x01\x80`\0\x83`\x02\x81\x11\x15a\0vWa\0va\x02\x08V[`\x02\x81\x11\x15a\0\x87Wa\0\x87a\x02\x08V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\0\xDB\x91\x90a\x02\x1EV[`@Q\x80\x91\x03\x90\xA1Pa\x02FV[a\0\xF3\x82\x82a\x01BV[PPV[`\0\x82\x81R` \x81\x90R`@\x80\x82 `\x01\x01\x80T\x90\x84\x90U\x90Q\x90\x91\x83\x91\x83\x91\x86\x91\x7F\xBDy\xB8o\xFE\n\xB8\xE8waQQB\x17\xCD|\xAC\xD5,\x90\x9FfG\\:\xF4N\x12\x9F\x0B\0\xFF\x91\x90\xA4PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16a\0\xF3W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x01\x9C3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0` \x82\x84\x03\x12\x15a\x01\xF2W`\0\x80\xFD[\x81Q`\x03\x81\x10a\x02\x01W`\0\x80\xFD[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[` \x81\x01`\x03\x83\x10a\x02@WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x91\x90R\x90V[a\x12$\x80a\x02U`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xC7W`\x005`\xE0\x1C\x80c|\xAD\xF6\x9F\x11a\x01\0W\x80c|\xAD\xF6\x9F\x14a\x04\"W\x80c}J\x03\xBD\x14a\x04IW\x80c}\x9D(\x80\x14a\x04pW\x80c\x7F\x90 \x9F\x14a\x04\x97W\x80c\x81\xD4\x95x\x14a\x04\xBEW\x80c\x85\xCB\x11\x91\x14a\x04\xE5W\x80c\x8C\x156\xDF\x14a\x05\x0CW\x80c\x8D\xEB8\x93\x14a\x053W\x80c\x8E\x8D\xFD\x16\x14a\x05FW\x80c\x90r\xF88\x14a\x05YW\x80c\x91\xD1HT\x14a\x05\x80W\x80c\x97z\x80p\x14a\x05\x93W\x80c\xA2\x17\xFD\xDF\x14a\x05\xBAW\x80c\xAD\x1C\x8A\x86\x14a\x05\xC2W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xE9W\x80c\xD5Gt\x1F\x14a\x06\x10W\x80c\xDA\x19\xDD\xFB\x14a\x06#W\x80c\xDF8\x06\x93\x14a\x06JW\x80c\xF8\xAE\x93\xB4\x14a\x06qW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xCCW\x80c\x11\xEE\x8F\xF7\x14a\x01\xF4W\x80c\x16\xF7k\xBF\x14a\x02)W\x80c\x17\x85\xF5<\x14a\x02PW\x80c!\x9C&j\x14a\x02eW\x80c$\x8A\x9C\xA3\x14a\x02\x8CW\x80c&h\xF3\x05\x14a\x02\x9FW\x80c,\x0B\x8B\xF7\x14a\x02\xC6W\x80c.H\x85\xE8\x14a\x02\xEDW\x80c//\xF1]\x14a\x03\x14W\x80c6V\x8A\xBE\x14a\x03'W\x80c>\xBFy\x85\x14a\x03:W\x80cB\x16\xE7:\x14a\x03\x86W\x80cQ\xAD\n\x80\x14a\x03\xADW\x80cZ\xF2\x7Fy\x14a\x03\xC0W\x80cpH\x02u\x14a\x03\xE7W\x80ct\xBC\x819\x14a\x03\xFAW\x80cu\xB28\xFC\x14a\x04\rW[`\0\x80\xFD[a\x01\xDFa\x01\xDA6`\x04a\x0E\xE3V[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x1B\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xEBV[a\x02\x1B\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02ca\x02^6`\x04a\x0F)V[a\x06\xCFV[\0[a\x02\x1B\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x1Ba\x02\x9A6`\x04a\x0FDV[a\x07\x80V[a\x02\x1B\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x1B\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x1B\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02ca\x03\"6`\x04a\x0F]V[a\x07\x95V[a\x02ca\x0356`\x04a\x0F]V[a\x07\xB6V[a\x03na\x03H6`\x04a\x0F\x98V[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xEBV[a\x02\x1B\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02ca\x03\xBB6`\x04a\x0F\xBBV[a\x080V[a\x02\x1B\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02ca\x03\xF56`\x04a\x0F)V[a\t\xB4V[a\x02ca\x04\x086`\x04a\x0F\xF7V[a\t\xE4V[a\x02\x1B`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x81V[a\x02\x1B\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x1B\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x1B\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x1B\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x1B\x7FWIm\xE40\x02\x8F2,Y+\x0FsQ\x10\xEB4\xF1\xAE\x81\x84\xA9K\xC5\x1D@\xB0\x84{TF\x9B\x81V[a\x02\x1B\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x1B\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02ca\x05A6`\x04a\x0F\xF7V[a\n\xA0V[a\x03na\x05T6`\x04a\x0F\x98V[a\x0BDV[a\x02\x1B\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xDFa\x05\x8E6`\x04a\x0F]V[a\x0B\x9AV[a\x02\x1B\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x1B`\0\x81V[a\x02\x1B\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x1B\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02ca\x06\x1E6`\x04a\x0F]V[a\x0B\xC3V[a\x02\x1B\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x1B\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x1B\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\xC9WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\x06\xE7\x81a\x0B\xDFV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x07dW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0B\xECV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07\x9E\x82a\x07\x80V[a\x07\xA7\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0CQV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x08&W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07[V[a\x07|\x82\x82a\x0B\xECV[a\x08H`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\x08eW`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08{Wa\x08{a\x10\x12V[`\x02\x81\x11\x15a\x08\x8CWa\x08\x8Ca\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\t\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07[V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\t1Wa\t1a\x10\x12V[`\x02\x81\x11\x15a\tBWa\tBa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\t\xA7\x93\x92\x91\x90a\x10JV[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\t\xCC\x81a\x0B\xDFV[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0CQV[a\t\xFC`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\x19W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\n0Wa\n0a\x10\x12V[`\x02\x81\x11\x15a\nAWa\nAa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\n\x95\x91\x90a\x10wV[`@Q\x80\x91\x03\x90\xA1PV[a\n\xB8`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\xD5W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xEBWa\n\xEBa\x10\x12V[`\x02\x81\x11\x15a\n\xFCWa\n\xFCa\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\n\x95\x90\x83\x90a\x10wV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0BhWa\x0Bha\x10\x12V[`\x02\x81\x11\x15a\x0ByWa\x0Bya\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\xCC\x82a\x07\x80V[a\x0B\xD5\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0B\xECV[a\x0B\xE9\x813a\x0C\xD5V[PV[a\x0B\xF6\x82\x82a\x0B\x9AV[\x15a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C[\x82\x82a\x0B\x9AV[a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C\x913\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xDF\x82\x82a\x0B\x9AV[a\x07|Wa\x0C\xEC\x81a\r.V[a\x0C\xF7\x83` a\r@V[`@Q` \x01a\r\x08\x92\x91\x90a\x10\xA9V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07[\x91`\x04\x01a\x11\x18V[``a\x06\xC9`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\rO\x83`\x02a\x11aV[a\rZ\x90`\x02a\x11xV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\rrWa\rra\x11\x8BV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\r\x9CW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\xB7Wa\r\xB7a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xE6Wa\r\xE6a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x0E\n\x84`\x02a\x11aV[a\x0E\x15\x90`\x01a\x11xV[\x90P[`\x01\x81\x11\x15a\x0E\x8DWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0EIWa\x0EIa\x11\xA1V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E_Wa\x0E_a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0E\x86\x81a\x11\xB7V[\x90Pa\x0E\x18V[P\x83\x15a\x0E\xDCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07[V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xF5W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xDCW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0F$W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F;W`\0\x80\xFD[a\x0E\xDC\x82a\x0F\rV[`\0` \x82\x84\x03\x12\x15a\x0FVW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0FpW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\rV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0F$W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0F\xABW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\x89V[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\xD0W`\0\x80\xFD[\x835\x92Pa\x0F\xE0` \x85\x01a\x0F\x89V[\x91Pa\x0F\xEE`@\x85\x01a\x0F\rV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x10\tW`\0\x80\xFD[a\x0E\xDC\x82a\x0F\x89V[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10^` \x83\x01\x85a\x10(V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\xC9\x82\x84a\x10(V[`\0[\x83\x81\x10\x15a\x10\xA0W\x81\x81\x01Q\x83\x82\x01R` \x01a\x10\x88V[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xDB\x81`\x17\x85\x01` \x88\x01a\x10\x85V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x11\x0C\x81`(\x84\x01` \x88\x01a\x10\x85V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x117\x81`@\x85\x01` \x87\x01a\x10\x85V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\xC9Wa\x06\xC9a\x11KV[\x80\x82\x01\x80\x82\x11\x15a\x06\xC9Wa\x06\xC9a\x11KV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\xC6Wa\x11\xC6a\x11KV[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 e'hp\xAE\xCC\x95\xD0\x02j9\xA8\xA0\x8D\xC1\xB9\xA7&IlM\x88\xB6Eo*\xC6@TW\x80c}\x9D(\x80\x14a\x04eW\x80c\x7F\x90 \x9F\x14a\x04\x8CW\x80c\x85\xCB\x11\x91\x14a\x04\xB3W\x80c\x8C\x156\xDF\x14a\x04\xDAW\x80c\x8D\xEB8\x93\x14a\x05\x01W\x80c\x8E\x8D\xFD\x16\x14a\x05\x14W\x80c\x90r\xF88\x14a\x05'W\x80c\x91\xD1HT\x14a\x05NW\x80c\x97z\x80p\x14a\x05aW\x80c\xA2\x17\xFD\xDF\x14a\x05\x88W\x80c\xAD\x1C\x8A\x86\x14a\x05\x90W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xB7W\x80c\xD5Gt\x1F\x14a\x05\xDEW\x80c\xDA\x19\xDD\xFB\x14a\x05\xF1W\x80c\xDF8\x06\x93\x14a\x06\x18W\x80c\xF8\xAE\x93\xB4\x14a\x06?W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xC1W\x80c\x11\xEE\x8F\xF7\x14a\x01\xE9W\x80c\x16\xF7k\xBF\x14a\x02\x1EW\x80c\x17\x85\xF5<\x14a\x02EW\x80c!\x9C&j\x14a\x02ZW\x80c$\x8A\x9C\xA3\x14a\x02\x81W\x80c&h\xF3\x05\x14a\x02\x94W\x80c,\x0B\x8B\xF7\x14a\x02\xBBW\x80c.H\x85\xE8\x14a\x02\xE2W\x80c//\xF1]\x14a\x03\tW\x80c6V\x8A\xBE\x14a\x03\x1CW\x80c>\xBFy\x85\x14a\x03/W\x80cB\x16\xE7:\x14a\x03{W\x80cQ\xAD\n\x80\x14a\x03\xA2W\x80cZ\xF2\x7Fy\x14a\x03\xB5W\x80cpH\x02u\x14a\x03\xDCW\x80ct\xBC\x819\x14a\x03\xEFW\x80cu\xB28\xFC\x14a\x04\x02W[`\0\x80\xFD[a\x01\xD4a\x01\xCF6`\x04a\x0E\xB1V[a\x06fV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x10\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xE0V[a\x02\x10\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02Xa\x02S6`\x04a\x0E\xF7V[a\x06\x9DV[\0[a\x02\x10\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x10a\x02\x8F6`\x04a\x0F\x12V[a\x07NV[a\x02\x10\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x10\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x10\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02Xa\x03\x176`\x04a\x0F+V[a\x07cV[a\x02Xa\x03*6`\x04a\x0F+V[a\x07\x84V[a\x03ca\x03=6`\x04a\x0FfV[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xE0V[a\x02\x10\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02Xa\x03\xB06`\x04a\x0F\x89V[a\x07\xFEV[a\x02\x10\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02Xa\x03\xEA6`\x04a\x0E\xF7V[a\t\x82V[a\x02Xa\x03\xFD6`\x04a\x0F\xC5V[a\t\xB2V[a\x02\x10`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x81V[a\x02\x10\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x10\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x10\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x10\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x10\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x10\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02Xa\x05\x0F6`\x04a\x0F\xC5V[a\nnV[a\x03ca\x05\"6`\x04a\x0FfV[a\x0B\x12V[a\x02\x10\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xD4a\x05\\6`\x04a\x0F+V[a\x0BhV[a\x02\x10\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x10`\0\x81V[a\x02\x10\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x10\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02Xa\x05\xEC6`\x04a\x0F+V[a\x0B\x91V[a\x02\x10\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x10\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x10\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\x97WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\x06\xB5\x81a\x0B\xADV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x072W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0B\xBAV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07l\x82a\x07NV[a\x07u\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0C\x1FV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x07\xF4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07)V[a\x07J\x82\x82a\x0B\xBAV[a\x08\x16`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\x083W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08IWa\x08Ia\x0F\xE0V[`\x02\x81\x11\x15a\x08ZWa\x08Za\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\x08\xD7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07)V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\x08\xFFWa\x08\xFFa\x0F\xE0V[`\x02\x81\x11\x15a\t\x10Wa\t\x10a\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\tu\x93\x92\x91\x90a\x10\x18V[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\x9D\x839\x81Q\x91Ra\t\x9A\x81a\x0B\xADV[a\x07J`\0\x80Q` a\x11\x9D\x839\x81Q\x91R\x83a\x0C\x1FV[a\t\xCA`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\t\xE7W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\t\xFEWa\t\xFEa\x0F\xE0V[`\x02\x81\x11\x15a\n\x0FWa\n\x0Fa\x0F\xE0V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\nc\x91\x90a\x10EV[`@Q\x80\x91\x03\x90\xA1PV[a\n\x86`\0\x80Q` a\x11\x9D\x839\x81Q\x91R3a\x0BhV[a\n\xA3W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xB9Wa\n\xB9a\x0F\xE0V[`\x02\x81\x11\x15a\n\xCAWa\n\xCAa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\nc\x90\x83\x90a\x10EV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0B6Wa\x0B6a\x0F\xE0V[`\x02\x81\x11\x15a\x0BGWa\x0BGa\x0F\xE0V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\x9A\x82a\x07NV[a\x0B\xA3\x81a\x0B\xADV[a\x07\x7F\x83\x83a\x0B\xBAV[a\x0B\xB7\x813a\x0C\xA3V[PV[a\x0B\xC4\x82\x82a\x0BhV[\x15a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C)\x82\x82a\x0BhV[a\x07JW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C_3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xAD\x82\x82a\x0BhV[a\x07JWa\x0C\xBA\x81a\x0C\xFCV[a\x0C\xC5\x83` a\r\x0EV[`@Q` \x01a\x0C\xD6\x92\x91\x90a\x10wV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07)\x91`\x04\x01a\x10\xE6V[``a\x06\x97`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\r\x1D\x83`\x02a\x11/V[a\r(\x90`\x02a\x11FV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\r@Wa\r@a\x11YV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\rjW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x85Wa\r\x85a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xB4Wa\r\xB4a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\r\xD8\x84`\x02a\x11/V[a\r\xE3\x90`\x01a\x11FV[\x90P[`\x01\x81\x11\x15a\x0E[Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0E\x17Wa\x0E\x17a\x11oV[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E-Wa\x0E-a\x11oV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0ET\x81a\x11\x85V[\x90Pa\r\xE6V[P\x83\x15a\x0E\xAAW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07)V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xC3W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xAAW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0E\xF2W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F\tW`\0\x80\xFD[a\x0E\xAA\x82a\x0E\xDBV[`\0` \x82\x84\x03\x12\x15a\x0F$W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0F>W`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0E\xDBV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0E\xF2W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0FyW`\0\x80\xFD[\x825\x91Pa\x0FN` \x84\x01a\x0FWV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\x9EW`\0\x80\xFD[\x835\x92Pa\x0F\xAE` \x85\x01a\x0FWV[\x91Pa\x0F\xBC`@\x85\x01a\x0E\xDBV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x0F\xD7W`\0\x80\xFD[a\x0E\xAA\x82a\x0FWV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10\x14WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10,` \x83\x01\x85a\x0F\xF6V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\x97\x82\x84a\x0F\xF6V[`\0[\x83\x81\x10\x15a\x10nW\x81\x81\x01Q\x83\x82\x01R` \x01a\x10VV[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xA9\x81`\x17\x85\x01` \x88\x01a\x10SV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x10\xDA\x81`(\x84\x01` \x88\x01a\x10SV[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x11\x05\x81`@\x85\x01` \x87\x01a\x10SV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\x97Wa\x06\x97a\x11\x19V[\x80\x82\x01\x80\x82\x11\x15a\x06\x97Wa\x06\x97a\x11\x19V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\x94Wa\x11\x94a\x11\x19V[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 \xBC\xFBZ\xA3%\x1D\xDF3\xA8sl\x96\x89\xBD\x99\xCE\xA1\xDF[\xAA\x0F\xAC8|Ui\x13rX%\xC9rdsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xC7W`\x005`\xE0\x1C\x80c|\xAD\xF6\x9F\x11a\x01\0W\x80c|\xAD\xF6\x9F\x14a\x04\"W\x80c}J\x03\xBD\x14a\x04IW\x80c}\x9D(\x80\x14a\x04pW\x80c\x7F\x90 \x9F\x14a\x04\x97W\x80c\x81\xD4\x95x\x14a\x04\xBEW\x80c\x85\xCB\x11\x91\x14a\x04\xE5W\x80c\x8C\x156\xDF\x14a\x05\x0CW\x80c\x8D\xEB8\x93\x14a\x053W\x80c\x8E\x8D\xFD\x16\x14a\x05FW\x80c\x90r\xF88\x14a\x05YW\x80c\x91\xD1HT\x14a\x05\x80W\x80c\x97z\x80p\x14a\x05\x93W\x80c\xA2\x17\xFD\xDF\x14a\x05\xBAW\x80c\xAD\x1C\x8A\x86\x14a\x05\xC2W\x80c\xCD\xDC\xAC\xE5\x14a\x05\xE9W\x80c\xD5Gt\x1F\x14a\x06\x10W\x80c\xDA\x19\xDD\xFB\x14a\x06#W\x80c\xDF8\x06\x93\x14a\x06JW\x80c\xF8\xAE\x93\xB4\x14a\x06qW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01\xCCW\x80c\x11\xEE\x8F\xF7\x14a\x01\xF4W\x80c\x16\xF7k\xBF\x14a\x02)W\x80c\x17\x85\xF5<\x14a\x02PW\x80c!\x9C&j\x14a\x02eW\x80c$\x8A\x9C\xA3\x14a\x02\x8CW\x80c&h\xF3\x05\x14a\x02\x9FW\x80c,\x0B\x8B\xF7\x14a\x02\xC6W\x80c.H\x85\xE8\x14a\x02\xEDW\x80c//\xF1]\x14a\x03\x14W\x80c6V\x8A\xBE\x14a\x03'W\x80c>\xBFy\x85\x14a\x03:W\x80cB\x16\xE7:\x14a\x03\x86W\x80cQ\xAD\n\x80\x14a\x03\xADW\x80cZ\xF2\x7Fy\x14a\x03\xC0W\x80cpH\x02u\x14a\x03\xE7W\x80ct\xBC\x819\x14a\x03\xFAW\x80cu\xB28\xFC\x14a\x04\rW[`\0\x80\xFD[a\x01\xDFa\x01\xDA6`\x04a\x0E\xE3V[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02\x1B\x7FX\xA0\x04N\x0E\xCD\x81\x02^9\x8B\xF1\x81Pu\xD1#L\xBA\xC3t\x96\x14\xB0\xB3:@L.\xE2\xBA\xBF\x81V[`@Q\x90\x81R` \x01a\x01\xEBV[a\x02\x1B\x7F\xF1OC\x1D\xAD\xC8.}\xBC^7\x9Fq#NW5\xC9\x18~C'\xA7\xC6\xAC\x01MU\xD1\xB7rz\x81V[a\x02ca\x02^6`\x04a\x0F)V[a\x06\xCFV[\0[a\x02\x1B\x7FO\xD3\xE0Hz\x03\x82\xFB\x02|w\xB1\xAELV6r\xC9\xFB0\xA7Hy\x85_\x0C\x86\xC3v\xCF\x96\xEA\x81V[a\x02\x1Ba\x02\x9A6`\x04a\x0FDV[a\x07\x80V[a\x02\x1B\x7F\xB1\xF7\x98\x13\xBCv0\xA5*\xE9H\xBC\x99x\x13\x97\xE4\t\xD0\xDD5!\x95;\xF7\xD8\xD7\xA2\xDBaG\xF7\x81V[a\x02\x1B\x7F\xB7\xB4\xFD\xE9\x94M<\x13\xE9\xA7\x885C\x1C3\xA5\x08M\x90\xA7\xF0\xC7=\xEFv\xD7\x88c\x15\xFE\x87\xB0\x81V[a\x02\x1B\x7F\xB91\xB2q\x9A\xEB*e\xA5\x03_\xA0\xA1\x90\xBF\xDCL\x86\"\xCE\x8C\xBF\xF7\xA3\xD1\xABBS\x1F\xB1\xA9\x18\x81V[a\x02ca\x03\"6`\x04a\x0F]V[a\x07\x95V[a\x02ca\x0356`\x04a\x0F]V[a\x07\xB6V[a\x03na\x03H6`\x04a\x0F\x98V[`\x02` \x90\x81R`\0\x92\x83R`@\x80\x84 \x90\x91R\x90\x82R\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01\xEBV[a\x02\x1B\x7FLA\xAEEK\xEBk\xBB\xE9\xBEP\xAC\xCC\x95z;\x156\xE4\x8B\x83Z\x86\x91\x9A\xF9\x81\xB5$M\xB7U\x81V[a\x02ca\x03\xBB6`\x04a\x0F\xBBV[a\x080V[a\x02\x1B\x7F\xA2\xC772\xDEez\xD0\xF3n\r\xDB\xB2q\x0FK\x13\xE8\xDD\xE4d!8k\xB9-\x1E\x17\x9D\xAEMM\x81V[a\x02ca\x03\xF56`\x04a\x0F)V[a\t\xB4V[a\x02ca\x04\x086`\x04a\x0F\xF7V[a\t\xE4V[a\x02\x1B`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x81V[a\x02\x1B\x7Ft\x84]\xE3|\xFA\xBD5v3!KG\xFA\x91\xCC\xD1\x9B\x05\xB7\xC5\xA0\x8A\xC2,\x18\x7F\x81\x1F\xB6+\xCA\x81V[a\x02\x1B\x7F\x9F5\xEF>\x0C&R\xA8\xBB\x87G\xD9/@\x7F\xCD9\xA7v\x8D\xAC\xC7\xF1e\x81\xC7\xA7\x1F\x10>Ub\x81V[a\x02\x1B\x7F\xC2o\xAE\xDA\xEE\xDA/\xB9Jf\xD7\x86\xAA\x89\xC4\xA1\x8B\xB7\x90\xFA\0\x9D\x9D\xA9JT\x1D\x92\x18\\\xA9\x16\x81V[a\x02\x1B\x7F\xC6gO\x98\xBA5\xC0\x1C\x13\x0E\x08\x19]\xD2lpF`7G:\x06\x8CZ\xAAG\nx=\x99\xC1l\x81V[a\x02\x1B\x7FWIm\xE40\x02\x8F2,Y+\x0FsQ\x10\xEB4\xF1\xAE\x81\x84\xA9K\xC5\x1D@\xB0\x84{TF\x9B\x81V[a\x02\x1B\x7F\xAEy\xA95sp\x12\xD0f\xE7\x1802i.R\x1F\xFE\x1A\xDE+\xED\xA2g\xE2>\x02\xB1\xD6\xE9\x11\x87\x81V[a\x02\x1B\x7F\xAA\x06\xD1\x08\xDB\xD7\xBF\x97k\x16\xB7\xBFZ\xDB)\xD2\xD0\xEF,8\\\xA8\xB9\xD83\xCC\x80/3\x94-r\x81V[a\x02ca\x05A6`\x04a\x0F\xF7V[a\n\xA0V[a\x03na\x05T6`\x04a\x0F\x98V[a\x0BDV[a\x02\x1B\x7FT\x95<#\x06\x8B\x8F\xC4\xC0sc\x01\xB5\x0F\x10\x02}kF\x93'\xDE\x1F\xD4(A\xA5\x07+\x1B\xCE\xBE\x81V[a\x01\xDFa\x05\x8E6`\x04a\x0F]V[a\x0B\x9AV[a\x02\x1B\x7F'\xD7d\xEA*J8eCK\xBFJ9\x11\x10\x14\x96D\xBE1D\x8F4y\xFD\x15\xB4C\x88uWe\x81V[a\x02\x1B`\0\x81V[a\x02\x1B\x7F:h\xDB\xFD\x8B\xBBd\x01\\B\xBC\x13\x1C8\x8D\xEAye\xE2\x8C\x10\x04\xD0\x9B9\xF5\x95\0\xC3\xA7c\xEC\x81V[a\x02\x1B\x7F\x0F'\xB9\xE4k\x89\xC5\xC7B\xE2\x80\x94\xDC\xEF\xE5\xE9F\xC3\xB9\x8F\x0F\xBE\xD8}\x9F\xCF[\x10\xBA\x96\x84\xEC\x81V[a\x02ca\x06\x1E6`\x04a\x0F]V[a\x0B\xC3V[a\x02\x1B\x7F\x08\t\t\xC1\x8C\x95\x8C\xE5\xA2\xD3d\x81ix$\xE4w1\x93#\xD01T\xCE\xBA;x\xF2\x8Aa\x88{\x81V[a\x02\x1B\x7F\xB4\xBF\x99\x9Bh\xD8\x08]\xBB\xF7\xA0\xEC/Z-f\x08s\x93[\xDF\x1E\xD0\x8E\xB4!\xACm\xCB\xC0\x03b\x81V[a\x02\x1B\x7F\xDD[\x9B\x8A^\x8E\x01\xF2\x96.\xD7\xE9\x83\xD5\x8F\xE3.\x1Ff\xAA\x88\xDDz\xB3\x07p\xFA\x9Bw\xDArC\x81V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x06\xC9WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\x06\xE7\x81a\x0B\xDFV[3`\x01`\x01`\xA0\x1B\x03\x83\x16\x03a\x07dW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`7`$\x82\x01R\x7FCannot remove self as admin. Ha`D\x82\x01Rv;2\x90:42\x9072\xBB\x900\xB26\xB4\xB7\x1027\x904\xBA\x17`I\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0B\xECV[PPV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x07\x9E\x82a\x07\x80V[a\x07\xA7\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0CQV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x08&W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x07[V[a\x07|\x82\x82a\x0B\xECV[a\x08H`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\x08eW`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x83`\x02\x81\x11\x15a\x08{Wa\x08{a\x10\x12V[`\x02\x81\x11\x15a\x08\x8CWa\x08\x8Ca\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\xFF\x16\x15\x15`\x01\x14a\t\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FThe provided Env is not valid fo`D\x82\x01Rn\x1C\x88\x1D\x1A\x1A\\\xC8\x18\xDB\xDB\x9D\x1C\x98X\xDD`\x8A\x1B`d\x82\x01R`\x84\x01a\x07[V[\x80`\x02`\0\x85\x81R` \x01\x90\x81R` \x01`\0 `\0\x84`\x02\x81\x11\x15a\t1Wa\t1a\x10\x12V[`\x02\x81\x11\x15a\tBWa\tBa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\x01`\x01`\xA0\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`\xA0\x1B\x03\x16\x02\x17\x90UP\x7F3\xF0\x14\x89\x0F\x10\x92)\xBB\xCF\x8D\xD4r\x04\xC1S\xA2\xC0\xFF\x1CW*a\xDE\"\r\x103e0\xF5=\x83\x83\x83`@Qa\t\xA7\x93\x92\x91\x90a\x10JV[`@Q\x80\x91\x03\x90\xA1PPPV[`\0\x80Q` a\x11\xCF\x839\x81Q\x91Ra\t\xCC\x81a\x0B\xDFV[a\x07|`\0\x80Q` a\x11\xCF\x839\x81Q\x91R\x83a\x0CQV[a\t\xFC`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\x19W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01\x80`\0\x83`\x02\x81\x11\x15a\n0Wa\n0a\x10\x12V[`\x02\x81\x11\x15a\nAWa\nAa\x10\x12V[\x81R` \x01\x90\x81R` \x01`\0 `\0a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\x83\x9A\xD2t=@b\xDFW\x9E\xDF8\x18\xF6B\xB7\x1E\xE0h\x8A5\xD6\xBCD8\xEFS\x14\xCE\xCE\x80\x15\x81`@Qa\n\x95\x91\x90a\x10wV[`@Q\x80\x91\x03\x90\xA1PV[a\n\xB8`\0\x80Q` a\x11\xCF\x839\x81Q\x91R3a\x0B\x9AV[a\n\xD5W`@QcdH|%`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\0\x82`\x02\x81\x11\x15a\n\xEBWa\n\xEBa\x10\x12V[`\x02\x81\x11\x15a\n\xFCWa\n\xFCa\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x90\x81\x01`\0 \x80T`\xFF\x19\x16\x90UQ\x7F?\x17\x8F\x17\xDA\xE6\xCA\xF8\xCA\t\xC4\x85u\x02\xBA\xF7tN\x85\x97\xDEB\xD6Ydv\xFE\x9E\x06\xB8\xADG\x90a\n\x95\x90\x83\x90a\x10wV[`\0\x82\x81R`\x02` \x81\x90R`@\x82 \x90\x82\x90\x84\x90\x81\x11\x15a\x0BhWa\x0Bha\x10\x12V[`\x02\x81\x11\x15a\x0ByWa\x0Bya\x10\x12V[\x81R` \x81\x01\x91\x90\x91R`@\x01`\0 T`\x01`\x01`\xA0\x1B\x03\x16\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[a\x0B\xCC\x82a\x07\x80V[a\x0B\xD5\x81a\x0B\xDFV[a\x07\xB1\x83\x83a\x0B\xECV[a\x0B\xE9\x813a\x0C\xD5V[PV[a\x0B\xF6\x82\x82a\x0B\x9AV[\x15a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[a\x0C[\x82\x82a\x0B\x9AV[a\x07|W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x0C\x913\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[a\x0C\xDF\x82\x82a\x0B\x9AV[a\x07|Wa\x0C\xEC\x81a\r.V[a\x0C\xF7\x83` a\r@V[`@Q` \x01a\r\x08\x92\x91\x90a\x10\xA9V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x07[\x91`\x04\x01a\x11\x18V[``a\x06\xC9`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a\rO\x83`\x02a\x11aV[a\rZ\x90`\x02a\x11xV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\rrWa\rra\x11\x8BV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\r\x9CW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\xB7Wa\r\xB7a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r\xE6Wa\r\xE6a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x0E\n\x84`\x02a\x11aV[a\x0E\x15\x90`\x01a\x11xV[\x90P[`\x01\x81\x11\x15a\x0E\x8DWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x0EIWa\x0EIa\x11\xA1V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x0E_Wa\x0E_a\x11\xA1V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x0E\x86\x81a\x11\xB7V[\x90Pa\x0E\x18V[P\x83\x15a\x0E\xDCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x07[V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x0E\xF5W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x0E\xDCW`\0\x80\xFD[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0F$W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x0F;W`\0\x80\xFD[a\x0E\xDC\x82a\x0F\rV[`\0` \x82\x84\x03\x12\x15a\x0FVW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x0FpW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\rV[\x90P\x92P\x92\x90PV[\x805`\x03\x81\x10a\x0F$W`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x0F\xABW`\0\x80\xFD[\x825\x91Pa\x0F\x80` \x84\x01a\x0F\x89V[`\0\x80`\0``\x84\x86\x03\x12\x15a\x0F\xD0W`\0\x80\xFD[\x835\x92Pa\x0F\xE0` \x85\x01a\x0F\x89V[\x91Pa\x0F\xEE`@\x85\x01a\x0F\rV[\x90P\x92P\x92P\x92V[`\0` \x82\x84\x03\x12\x15a\x10\tW`\0\x80\xFD[a\x0E\xDC\x82a\x0F\x89V[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x03\x81\x10a\x10FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x83\x81R``\x81\x01a\x10^` \x83\x01\x85a\x10(V[`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16`@\x91\x90\x91\x01R\x92\x91PPV[` \x81\x01a\x06\xC9\x82\x84a\x10(V[`\0[\x83\x81\x10\x15a\x10\xA0W\x81\x81\x01Q\x83\x82\x01R` \x01a\x10\x88V[PP`\0\x91\x01RV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa\x10\xDB\x81`\x17\x85\x01` \x88\x01a\x10\x85V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa\x11\x0C\x81`(\x84\x01` \x88\x01a\x10\x85V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x117\x81`@\x85\x01` \x87\x01a\x10\x85V[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x06\xC9Wa\x06\xC9a\x11KV[\x80\x82\x01\x80\x82\x11\x15a\x06\xC9Wa\x06\xC9a\x11KV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81a\x11\xC6Wa\x11\xC6a\x11KV[P`\0\x19\x01\x90V\xFE\xDF\x8BLR\x0F\xFE\x19|SC\xC6\xF5\xAE\xC5\x95p\x15\x1E\xF9\xA4\x92\xF2\xC6$\xFDE\xDD\xDEa5\xECB\xA2dipfsX\"\x12 e'hp\xAE\xCC\x95\xD0\x02j9\xA8\xA0\x8D\xC1\xB9\xA7&IlM\x88\xB6Eo*\xC6@T ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([129, 212, 149, 120], ()) + .expect("method not found (this should never happen)") + } ///Calls the contract's `RATE_LIMIT_NFT_CONTRACT` (0x2e4885e8) function pub fn rate_limit_nft_contract( &self, @@ -2115,6 +2147,24 @@ pub mod contract_resolver { )] #[ethcall(name = "PUB_KEY_ROUTER_CONTRACT", abi = "PUB_KEY_ROUTER_CONTRACT()")] pub struct PubKeyRouterContractCall; + ///Container type for all input parameters for the `PUB_KEY_ROUTER_VIEWS_CONTRACT` function with signature `PUB_KEY_ROUTER_VIEWS_CONTRACT()` and selector `0x81d49578` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + #[ethcall( + name = "PUB_KEY_ROUTER_VIEWS_CONTRACT", + abi = "PUB_KEY_ROUTER_VIEWS_CONTRACT()" + )] + pub struct PubKeyRouterViewsContractCall; ///Container type for all input parameters for the `RATE_LIMIT_NFT_CONTRACT` function with signature `RATE_LIMIT_NFT_CONTRACT()` and selector `0x2e4885e8` #[derive( Clone, @@ -2432,6 +2482,7 @@ pub mod contract_resolver { PkpPermissionsContract(PkpPermissionsContractCall), PriceFeedContract(PriceFeedContractCall), PubKeyRouterContract(PubKeyRouterContractCall), + PubKeyRouterViewsContract(PubKeyRouterViewsContractCall), RateLimitNftContract(RateLimitNftContractCall), ReleaseRegisterContract(ReleaseRegisterContractCall), StakingBalancesContract(StakingBalancesContractCall), @@ -2550,6 +2601,11 @@ pub mod contract_resolver { ) { return Ok(Self::PubKeyRouterContract(decoded)); } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::PubKeyRouterViewsContract(decoded)); + } if let Ok(decoded) = ::decode( data, ) { @@ -2698,6 +2754,9 @@ pub mod contract_resolver { Self::PubKeyRouterContract(element) => { ::ethers::core::abi::AbiEncode::encode(element) } + Self::PubKeyRouterViewsContract(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } Self::RateLimitNftContract(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -2792,6 +2851,9 @@ pub mod contract_resolver { Self::PubKeyRouterContract(element) => { ::core::fmt::Display::fmt(element, f) } + Self::PubKeyRouterViewsContract(element) => { + ::core::fmt::Display::fmt(element, f) + } Self::RateLimitNftContract(element) => { ::core::fmt::Display::fmt(element, f) } @@ -2913,6 +2975,11 @@ pub mod contract_resolver { Self::PubKeyRouterContract(value) } } + impl ::core::convert::From for ContractResolverCalls { + fn from(value: PubKeyRouterViewsContractCall) -> Self { + Self::PubKeyRouterViewsContract(value) + } + } impl ::core::convert::From for ContractResolverCalls { fn from(value: RateLimitNftContractCall) -> Self { Self::RateLimitNftContract(value) @@ -3264,6 +3331,20 @@ pub mod contract_resolver { Hash )] pub struct PubKeyRouterContractReturn(pub [u8; 32]); + ///Container type for all return fields from the `PUB_KEY_ROUTER_VIEWS_CONTRACT` function with signature `PUB_KEY_ROUTER_VIEWS_CONTRACT()` and selector `0x81d49578` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + serde::Serialize, + serde::Deserialize, + Default, + Debug, + PartialEq, + Eq, + Hash + )] + pub struct PubKeyRouterViewsContractReturn(pub [u8; 32]); ///Container type for all return fields from the `RATE_LIMIT_NFT_CONTRACT` function with signature `RATE_LIMIT_NFT_CONTRACT()` and selector `0x2e4885e8` #[derive( Clone, diff --git a/rust/lit-core/lit-blockchain/src/contracts/key_deriver.rs b/rust/lit-core/lit-blockchain/src/contracts/key_deriver.rs index 21eed94..cd73689 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/key_deriver.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/key_deriver.rs @@ -118,13 +118,13 @@ pub mod key_deriver { __abi, ); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[Pa\x05\xEE\x80a\0\x1F`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xB3\xF5\xD6\xAC\xD5\xA77\x13D\xCA\xCA\xB0^`py\xEB\xF4v\xB4m\x8B\x17\x04\x19a/\x80\xE7\xA8\xAC\x95dsolcC\0\x08\x1C\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[Pa\x05\xEE\x80a\0\x1F`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 ].\x87\x92D\x05\xC7Z7\xCB1\x99\x10\x9D\xC5\x84wu\xCE(\x13|^\x1C\xA4\x05r\x0C\xFA;\xEA=dsolcC\0\x08\x1C\x003"; /// The bytecode of the contract. pub static KEYDERIVER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 \xB3\xF5\xD6\xAC\xD5\xA77\x13D\xCA\xCA\xB0^`py\xEB\xF4v\xB4m\x8B\x17\x04\x19a/\x80\xE7\xA8\xAC\x95dsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80cb\xE4\xC4d\x14a\0;W\x80c\xA3,+\x99\x14a\0`W[`\0\x80\xFD[a\0C`\xF5\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0sa\0n6`\x04a\x02\x9EV[a\0\x81V[`@Qa\0W\x92\x91\x90a\x04CV[`\0```\0a\0\x92\x86\x86\x86a\x01\0V[\x90P`\0\x80`\xF5`\x01`\x01`\xA0\x1B\x03\x16\x83`@Qa\0\xB0\x91\x90a\x04\x7FV[`\0`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80`\0\x81\x14a\0\xEBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\0\xF0V[``\x91P[P\x90\x99\x90\x98P\x96PPPPPPPV[`@\x80Q`\0\x80\x82R` \x82\x01\x90\x92R``\x91\x80[\x85Q\x81\x10\x15a\x01\x9AW\x84\x86\x82\x81Q\x81\x10a\x011Wa\x011a\x04\x9BV[` \x02` \x01\x01Q` \x01Q\x03a\x01\x92W\x82\x86\x82\x81Q\x81\x10a\x01UWa\x01Ua\x04\x9BV[` \x02` \x01\x01Q`\0\x01Q`@Q` \x01a\x01r\x92\x91\x90a\x04\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92P\x81\x80a\x01\x8E\x90a\x04\xE0V[\x92PP[`\x01\x01a\x01\x15V[P\x83`\x02\x03a\x01\xACW`\x01\x93Pa\x01\xB9V[\x83`\x03\x03a\x01\xB9W`\0\x93P[`\0`@Q\x80``\x01`@R\x80`+\x81R` \x01a\x05\x8E`+\x919\x80Q`@Q\x91\x92P`\xF8\x87\x90\x1B\x91`\x01`\xE5\x1B\x91`\xE0\x90\x81\x1B\x91\x90\x86\x90\x1B\x90`\0\x90a\x02\x10\x90\x86\x90\x86\x90\x8F\x90\x87\x90\x8B\x90\x88\x90\x8F\x90` \x01a\x05\x13V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x9C\x9BPPPPPPPPPPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02hWa\x02ha\x020V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x02\x96Wa\x02\x96a\x020V[`@R\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x02\xB3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xD0W`\0\x80\xFD[\x84\x01`\x1F\x81\x01\x86\x13a\x02\xE1W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x02\xFAWa\x02\xFAa\x020V[\x80`\x05\x1Ba\x03\n` \x82\x01a\x02nV[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x89\x84\x11\x15a\x03&W`\0\x80\xFD[` \x85\x01\x92P[\x83\x83\x10\x15a\x04\nW\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03KW`\0\x80\xFD[\x85\x01`@\x81\x8C\x03`\x1F\x19\x01\x12\x15a\x03aW`\0\x80\xFD[a\x03ia\x02FV[` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\x82W`\0\x80\xFD[\x82\x01` \x81\x01\x90`?\x01\x8D\x13a\x03\x97W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x03\xB0Wa\x03\xB0a\x020V[a\x03\xC3`\x1F\x82\x01`\x1F\x19\x16` \x01a\x02nV[\x81\x81R\x8E` \x83\x85\x01\x01\x11\x15a\x03\xD8W`\0\x80\xFD[\x81` \x84\x01` \x83\x017`\0` \x92\x82\x01\x83\x01R\x83R`@\x93\x90\x93\x015\x82\x84\x01RP\x83R\x92\x83\x01\x92\x91\x90\x91\x01\x90a\x03-V[\x96\x99\x96\x98PPPP`@\x94\x90\x94\x015\x93PPPV[`\0[\x83\x81\x10\x15a\x04:W\x81\x81\x01Q\x83\x82\x01R` \x01a\x04\"V[PP`\0\x91\x01RV[\x82\x15\x15\x81R`@` \x82\x01R`\0\x82Q\x80`@\x84\x01Ra\x04j\x81``\x85\x01` \x87\x01a\x04\x1FV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01``\x01\x93\x92PPPV[`\0\x82Qa\x04\x91\x81\x84` \x87\x01a\x04\x1FV[\x91\x90\x91\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x83Qa\x04\xC3\x81\x84` \x88\x01a\x04\x1FV[\x83Q\x90\x83\x01\x90a\x04\xD7\x81\x83` \x88\x01a\x04\x1FV[\x01\x94\x93PPPPV[`\0c\xFF\xFF\xFF\xFF\x82\x16c\xFF\xFF\xFF\xFF\x81\x03a\x05\nWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01\x01\x92\x91PPV[`\x01`\x01`\xF8\x1B\x03\x19\x88\x16\x81R`\x01`\x01`\xE0\x1B\x03\x19\x87\x81\x16`\x01\x83\x01R`\x05\x82\x01\x87\x90R\x85\x16`%\x82\x01R\x83Q`\0\x90a\x05U\x81`)\x85\x01` \x89\x01a\x04\x1FV[`\x01`\x01`\xE0\x1B\x03\x19\x85\x16`)\x91\x84\x01\x91\x82\x01R\x83Qa\x05|\x81`-\x84\x01` \x88\x01a\x04\x1FV[\x01`-\x01\x99\x98PPPPPPPPPV\xFELIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_\xA2dipfsX\"\x12 ].\x87\x92D\x05\xC7Z7\xCB1\x99\x10\x9D\xC5\x84wu\xCE(\x13|^\x1C\xA4\x05r\x0C\xFA;\xEA=dsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static KEYDERIVER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain/src/contracts/mod.rs b/rust/lit-core/lit-blockchain/src/contracts/mod.rs index 4f4047d..c2fb8c1 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/mod.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/mod.rs @@ -9,6 +9,7 @@ use ethers::providers::Provider; use lit_core::config::LitConfig; +use crate::SignerProvider; use crate::config::LitBlockchainConfig; use crate::contracts::allowlist::Allowlist; use crate::contracts::backup_recovery::BackupRecovery; @@ -103,6 +104,7 @@ pub const RELEASE_REGISTER_CONTRACT: &str = "RELEASE_REGISTER"; pub const MULTI_SENDER_CONTRACT: &str = "MULTI_SENDER"; pub const LIT_TOKEN_CONTRACT: &str = "LIT_TOKEN"; pub const PUB_KEY_ROUTER_CONTRACT: &str = "PUB_KEY_ROUTER"; +pub const PUB_KEY_ROUTER_VIEWS_CONTRACT: &str = "PUB_KEY_ROUTER_VIEWS"; pub const PKP_NFT_CONTRACT: &str = "PKP_NFT"; pub const RATE_LIMIT_NFT_CONTRACT: &str = "RATE_LIMIT_NFT"; pub const PKP_HELPER_CONTRACT: &str = "PKP_HELPER"; @@ -124,25 +126,19 @@ impl Staking> { } } -impl Staking>, Wallet>> { +impl Staking { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(Staking::new(address, default_local_client(cfg, wallet_key)?)) } } -impl - Staking>, Wallet>>> -{ +impl Staking> { pub(crate) fn load_with_gas_relay( cfg: &LitConfig, address: H160, forwarder_address: H160, gas_relayer_wallet_key: Option<&str>, meta_signer_key: impl Into, - ) -> Result< - Staking< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { let chain = cfg.blockchain_chain_name()?; let provider = ENDPOINT_MANAGER.get_provider(chain.as_str())?; let meta_signer = meta_signer_key.into(); @@ -169,10 +165,10 @@ impl BackupRecovery> { } } -impl BackupRecovery>, Wallet>> { +impl BackupRecovery { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(BackupRecovery::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -186,25 +182,19 @@ impl Ledger> { } } -impl Ledger>, Wallet>> { +impl Ledger { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(Ledger::new(address, default_local_client(cfg, wallet_key)?)) } } -impl - Ledger>, Wallet>>> -{ +impl Ledger> { pub(crate) fn load_with_gas_relay( cfg: &LitConfig, address: H160, forwarder_address: H160, gas_relayer_wallet_key: Option<&str>, meta_signer_key: impl Into, - ) -> Result< - Ledger< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { let chain = cfg.blockchain_chain_name()?; let provider = ENDPOINT_MANAGER.get_provider(chain.as_str())?; let meta_signer = meta_signer_key.into(); @@ -231,10 +221,10 @@ impl ContractResolver> { } } -impl ContractResolver>, Wallet>> { +impl ContractResolver { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(ContractResolver::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -247,10 +237,10 @@ impl ReleaseRegister> { } } -impl ReleaseRegister>, Wallet>> { +impl ReleaseRegister { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(ReleaseRegister::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -263,10 +253,10 @@ impl Multisender> { } } -impl Multisender>, Wallet>> { +impl Multisender { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(Multisender::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -279,10 +269,10 @@ impl LITToken> { } } -impl LITToken>, Wallet>> { +impl LITToken { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(LITToken::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -295,27 +285,19 @@ impl PubkeyRouter> { } } -impl PubkeyRouter>, Wallet>> { +impl PubkeyRouter { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(PubkeyRouter::new(address, default_local_client(cfg, wallet_key)?)) } } -impl - PubkeyRouter< - EIP2771GasRelayerMiddleware>, Wallet>>, - > -{ +impl PubkeyRouter> { pub(crate) fn load_with_gas_relay( cfg: &LitConfig, address: H160, forwarder_address: H160, gas_relayer_wallet_key: Option<&str>, meta_signer_key: impl Into, - ) -> Result< - PubkeyRouter< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { let chain = cfg.blockchain_chain_name()?; let provider = ENDPOINT_MANAGER.get_provider(chain.as_str())?; let meta_signer = meta_signer_key.into(); @@ -342,25 +324,19 @@ impl PKPNFT> { } } -impl PKPNFT>, Wallet>> { +impl PKPNFT { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(PKPNFT::new(address, default_local_client(cfg, wallet_key)?)) } } -impl - PKPNFT>, Wallet>>> -{ +impl PKPNFT> { pub(crate) fn load_with_gas_relay( cfg: &LitConfig, address: H160, forwarder_address: H160, gas_relayer_wallet_key: Option<&str>, meta_signer_key: impl Into, - ) -> Result< - PKPNFT< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { let chain = cfg.blockchain_chain_name()?; let provider = ENDPOINT_MANAGER.get_provider(chain.as_str())?; let meta_signer = meta_signer_key.into(); @@ -389,10 +365,10 @@ impl PKPHelper> { } } -impl PKPHelper>, Wallet>> { +impl PKPHelper { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(PKPHelper::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -405,27 +381,19 @@ impl PKPPermissions> { } } -impl PKPPermissions>, Wallet>> { +impl PKPPermissions { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(PKPPermissions::new(address, default_local_client(cfg, wallet_key)?)) } } -impl - PKPPermissions< - EIP2771GasRelayerMiddleware>, Wallet>>, - > -{ +impl PKPPermissions> { pub(crate) fn load_with_gas_relay( cfg: &LitConfig, address: H160, forwarder_address: H160, gas_relayer_wallet_key: Option<&str>, meta_signer_key: impl Into, - ) -> Result< - PKPPermissions< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { let chain = cfg.blockchain_chain_name()?; let provider = ENDPOINT_MANAGER.get_provider(chain.as_str())?; let meta_signer = meta_signer_key.into(); @@ -452,10 +420,10 @@ impl PKPNFTMetadata> { } } -impl PKPNFTMetadata>, Wallet>> { +impl PKPNFTMetadata { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(PKPNFTMetadata::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -468,10 +436,10 @@ impl Allowlist> { } } -impl Allowlist>, Wallet>> { +impl Allowlist { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(Allowlist::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -486,10 +454,10 @@ impl PaymentDelegation> { } } -impl PaymentDelegation>, Wallet>> { +impl PaymentDelegation { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(PaymentDelegation::new(address, default_local_client(cfg, wallet_key)?)) } } @@ -502,27 +470,19 @@ impl PriceFeed> { } } -impl PriceFeed>, Wallet>> { +impl PriceFeed { pub(crate) fn load_with_signer( cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Ok(PriceFeed::new(address, default_local_client(cfg, wallet_key)?)) } } -impl - PriceFeed< - EIP2771GasRelayerMiddleware>, Wallet>>, - > -{ +impl PriceFeed> { pub(crate) fn load_with_gas_relay( cfg: &LitConfig, address: H160, forwarder_address: H160, gas_relayer_wallet_key: Option<&str>, meta_signer_key: impl Into, - ) -> Result< - PriceFeed< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { let chain = cfg.blockchain_chain_name()?; let provider = ENDPOINT_MANAGER.get_provider(chain.as_str())?; let meta_signer = meta_signer_key.into(); @@ -567,7 +527,7 @@ pub fn load_wallet(cfg: &LitConfig, wallet_key: Option<&str>) -> Result, -) -> Result>, Wallet>>> { +) -> Result> { let chain = cfg.blockchain_chain_name()?; let wallet = load_wallet(cfg, wallet_key)?; let provider = ENDPOINT_MANAGER.get_provider(chain.as_str())?; diff --git a/rust/lit-core/lit-blockchain/src/contracts/pkp_helper.rs b/rust/lit-core/lit-blockchain/src/contracts/pkp_helper.rs index a354d6b..63b9488 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/pkp_helper.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/pkp_helper.rs @@ -1416,13 +1416,13 @@ pub mod pkp_helper { __abi, ); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa:v8\x03\x80a:v\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xD5V[a\083a\0\x85V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83\x83\x81\x11\x15a\0yWa\0ya\x01\x1FV[\x02\x17\x90UPPPa\x015V[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0\x80`@\x83\x85\x03\x12\x15a\0\xE8W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xFFW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\x14W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a92\x80a\x01D`\09`\0\xF3\xFE`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 8)W\x80\xA3\x13\xE8\x95\xB6\xDC\xEAh\xE9\0\xA6o\x08;\xF3mzE$\xB6<\xF8\xBF#\xE4\x9Dc\rdsolcC\0\x08\x1C\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa:v8\x03\x80a:v\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\xD5V[a\083a\0\x85V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83\x83\x81\x11\x15a\0yWa\0ya\x01\x1FV[\x02\x17\x90UPPPa\x015V[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\0\x80`@\x83\x85\x03\x12\x15a\0\xE8W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\xFFW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10a\x01\x14W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a92\x80a\x01D`\09`\0\xF3\xFE`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 \x1F0\xB6\xE1\x1B=\xBC\xAE\xC6\x1A<\xBE\x0Ee\xBDi\xF7\xCC\x1AE\xCAG\x92\xF4\xFC:\x0BbY\xA4\xBA\xE1dsolcC\0\x08\x1C\x003"; /// The bytecode of the contract. pub static PKPHELPER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 8)W\x80\xA3\x13\xE8\x95\xB6\xDC\xEAh\xE9\0\xA6o\x08;\xF3mzE$\xB6<\xF8\xBF#\xE4\x9Dc\rdsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a\x01LW`\x005`\xE0\x1C\x80cs\xCCA\x11\x11a\0\xBCW\x80cs\xCCA\x11\x14a\x02\xF6W\x80cw\x8F\xE5r\x14a\x03\x0BW\x80cx..\xA5\x14a\x03\x1EW\x80c\x8D\xA5\xCB[\x14a\x03>W\x80c\x91\xD1HT\x14a\x03SW\x80c\x91\xEEO\xD5\x14a\x03sW\x80c\x9D\xCA\x002\x14a\x03\x86W\x80c\xA2\x17\xFD\xDF\x14a\x03\xB4W\x80c\xCA\xEA\xD0\xC7\x14a\x03\xC9W\x80c\xD5Gt\x1F\x14a\x03\xDEW\x80c\xDB\x0B\xF93\x14a\x03\xFEW\x80c\xE4\xF1\x1D\xF6\x14a\x04\x11W\x80c\xF2\xFD\xE3\x8B\x14a\x04$W\x80c\xF9]q\xB1\x14a\x04DW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x01QW\x80c\x0E\x9E\xD6\x8B\x14a\x01\x86W\x80c\x13\xAFA\x1B\x14a\x01\xA8W\x80c\x15\x0Bz\x02\x14a\x01\xC9W\x80c /rO\x14a\x02\x02W\x80c$\x8A\x9C\xA3\x14a\x02\x15W\x80c+U5Q\x14a\x025W\x80c//\xF1]\x14a\x02WW\x80c2vU\x8C\x14a\x02wW\x80c6V\x8A\xBE\x14a\x02\x8CW\x80cPC\x02l\x14a\x02\xACW\x80cP\xD1{^\x14a\x02\xC1W\x80cqP\x18\xA6\x14a\x02\xE1W[`\0\x80\xFD[4\x80\x15a\x01]W`\0\x80\xFD[Pa\x01qa\x01l6`\x04a%\x98V[a\x04dV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x92W`\0\x80\xFD[Pa\x01\x9Ba\x04\x9BV[`@Qa\x01}\x91\x90a%\xC2V[a\x01\xBBa\x01\xB66`\x04a+\x84V[a\x05\x86V[`@Q\x90\x81R` \x01a\x01}V[4\x80\x15a\x01\xD5W`\0\x80\xFD[Pa\x01\xE9a\x01\xE46`\x04a,2V[a\x06\x03V[`@Q`\x01`\x01`\xE0\x1B\x03\x19\x90\x91\x16\x81R` \x01a\x01}V[a\x01\xBBa\x02\x106`\x04a+\x84V[a\x06\xA7V[4\x80\x15a\x02!W`\0\x80\xFD[Pa\x01\xBBa\x0206`\x04a,\xD1V[a\x06\xBAV[4\x80\x15a\x02AW`\0\x80\xFD[Pa\x02Ua\x02P6`\x04a,\xD1V[a\x06\xD0V[\0[4\x80\x15a\x02cW`\0\x80\xFD[Pa\x02Ua\x02r6`\x04a,\xEAV[a\x08\xABV[4\x80\x15a\x02\x83W`\0\x80\xFD[Pa\x01\x9Ba\x08\xCCV[4\x80\x15a\x02\x98W`\0\x80\xFD[Pa\x02Ua\x02\xA76`\x04a,\xEAV[a\t\x1EV[4\x80\x15a\x02\xB8W`\0\x80\xFD[Pa\x01\x9Ba\t\x9CV[4\x80\x15a\x02\xCDW`\0\x80\xFD[P`\x02Ta\x01\x9B\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[4\x80\x15a\x02\xEDW`\0\x80\xFD[Pa\x02Ua\t\xEEV[4\x80\x15a\x03\x02W`\0\x80\xFD[Pa\x01\x9Ba\n\x02V[a\x01\xBBa\x03\x196`\x04a-:V[a\nTV[4\x80\x15a\x03*W`\0\x80\xFD[Pa\x02Ua\x0396`\x04a/\xB8V[a\x10fV[4\x80\x15a\x03JW`\0\x80\xFD[Pa\x01\x9Ba\x12\x89V[4\x80\x15a\x03_W`\0\x80\xFD[Pa\x01qa\x03n6`\x04a,\xEAV[a\x12\x98V[a\x01\xBBa\x03\x816`\x04a/\xF4V[a\x12\xC3V[4\x80\x15a\x03\x92W`\0\x80\xFD[P`\x02Ta\x03\xA7\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\x01}\x91\x90a0\xF0V[4\x80\x15a\x03\xC0W`\0\x80\xFD[Pa\x01\xBB`\0\x81V[4\x80\x15a\x03\xD5W`\0\x80\xFD[Pa\x01\x9Ba\x19eV[4\x80\x15a\x03\xEAW`\0\x80\xFD[Pa\x02Ua\x03\xF96`\x04a,\xEAV[a\x19\xB7V[a\x01\xBBa\x04\x0C6`\x04a0\xFEV[a\x19\xD3V[a\x01\xBBa\x04\x1F6`\x04a2;V[a\x1F\xDDV[4\x80\x15a\x040W`\0\x80\xFD[Pa\x02Ua\x04?6`\x04a3MV[a!0V[4\x80\x15a\x04PW`\0\x80\xFD[Pa\x02Ua\x04_6`\x04a3MV[a!\xA9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x04\x95WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14[\x92\x91PPV[`\x02T`@\x80Qc\xDA\x19\xDD\xFB`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\xDA\x19\xDD\xFB\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x11\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x05@\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05]W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x81\x91\x90a3\x97V[\x90P\x90V[`\0\x80`@Q\x80`\xA0\x01`@R\x80\x85`\0\x01Q\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0C\x81R` \x01knaga-keyset1`\xA0\x1B\x81RP\x81R` \x01\x85` \x01Q\x81R` \x01\x85`@\x01Q\x81R` \x01a\x05\xE4a\x04\x9BV[`\x01`\x01`\xA0\x1B\x03\x16\x90R\x90Pa\x05\xFB\x81\x84a\x12\xC3V[\x94\x93PPPPV[`\0a\x06\ra\x19eV[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`:`$\x82\x01R\x7FPKPHelper: only accepts transfer`D\x82\x01Ry\x1C\xC8\x19\x9C\x9B\xDBH\x1D\x1A\x19H\x14\x12\xD4\x13\x91\x95\x08\x18\xDB\xDB\x9D\x1C\x98X\xDD`2\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[Pc\n\x85\xBD\x01`\xE1\x1B\x95\x94PPPPPV[`\0a\x06\xB3\x83\x83a\x05\x86V[\x93\x92PPPV[`\0\x90\x81R`\x01` \x81\x90R`@\x90\x91 \x01T\x90V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07\"W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07F\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07u\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xB6\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x07\xF0a\t\x9CV[`@Qc\xB6:vw`\xE0\x1B\x81R`\x04\x81\x01\x84\x90R\x90\x91P`\x01`\x01`\xA0\x1B\x03\x82\x16\x90c\xB6:vw\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x085W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08IW=`\0\x80>=`\0\xFD[PP`@Qc(\xCD\x10\xC7`\xE1\x1B\x81R`\x04\x81\x01\x85\x90R`\x01`\x01`\xA0\x1B\x03\x84\x16\x92PcQ\x9A!\x8E\x91P`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x08\x8FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x08\xA3W=`\0\x80>=`\0\xFD[PPPPPPV[a\x08\xB4\x82a\x06\xBAV[a\x08\xBD\x81a\"\x07V[a\x08\xC7\x83\x83a\"\x11V[PPPV[`\x02T`@\x80Qc\x12\x0E_\x07`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x90r\xF88\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a\t\x98\x82\x82a\"|V[PPV[`\x02T`@\x80Qc\x16\xF7k\xBF`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x16\xF7k\xBF\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\t\xF6a\"\xE3V[a\n\0`\0a#BV[V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[`\0\x80a\n_a\x19eV[\x83Q` \x85\x01Q`@Qc?\xF8\x06\x97`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x92c\x7F\xF0\r.\x924\x92a\n\x94\x92`\x04\x01a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\n\xB2W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xD7\x91\x90a3jV[\x90P\x82``\x01QQ\x83`@\x01QQ\x14a\x0B\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x82`\xA0\x01QQ\x83`\x80\x01QQ\x14a\x0B+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x82`\xE0\x01QQ\x83`\xC0\x01QQ\x14a\x0BTW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x82a\x01\0\x01QQ\x83`\xC0\x01QQ\x14a\x0B~W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x82a\x01 \x01QQ\x83`\xC0\x01QQ\x14a\x0B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[`@\x83\x01QQ\x15a\x0CtW`\0[\x83`@\x01QQ\x81\x10\x15a\x0CrWa\x0B\xCBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x86`@\x01Q\x84\x81Q\x81\x10a\x0B\xF0Wa\x0B\xF0a6'V[` \x02` \x01\x01Q\x87``\x01Q\x85\x81Q\x81\x10a\x0C\x0EWa\x0C\x0Ea6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0C4\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0CNW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0CbW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0B\xB6\x90PV[P[`\x80\x83\x01QQ\x15a\r@W`\0[\x83`\x80\x01QQ\x81\x10\x15a\r>Wa\x0C\x97a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x86`\x80\x01Q\x84\x81Q\x81\x10a\x0C\xBCWa\x0C\xBCa6'V[` \x02` \x01\x01Q\x87`\xA0\x01Q\x85\x81Q\x81\x10a\x0C\xDAWa\x0C\xDAa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\0\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\r\x1AW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\r.W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x0C\x82\x90PV[P[`\xC0\x83\x01QQ\x15a\x0EbW`\0[\x83`\xC0\x01QQ\x81\x10\x15a\x0E`Wa\rca\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x88`\xC0\x01Q\x86\x81Q\x81\x10a\r\x93Wa\r\x93a6'V[` \x02` \x01\x01Q\x81R` \x01\x88`\xE0\x01Q\x86\x81Q\x81\x10a\r\xB6Wa\r\xB6a6'V[` \x02` \x01\x01Q\x81R` \x01\x88a\x01\0\x01Q\x86\x81Q\x81\x10a\r\xDAWa\r\xDAa6'V[` \x02` \x01\x01Q\x81RP\x87a\x01 \x01Q\x85\x81Q\x81\x10a\r\xFCWa\r\xFCa6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\"\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0E=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\rN\x90PV[P[`\0a\x0Ela\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x99\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xB6W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xDA\x91\x90a3\x97V[\x90P\x83a\x01@\x01Q\x15a\x0F|Wa\x0E\xEFa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0F*W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0FcW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0FwW=`\0\x80>=`\0\xFD[PPPP[\x83a\x01`\x01Q\x15a\x0F\xF5Wa\x0F\x8Fa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\xBE\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x0F\xD8W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x0F\xECW=`\0\x80>=`\0\xFD[PPPPa\x10_V[a\x0F\xFDa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10,\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10FW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10ZW=`\0\x80>=`\0\xFD[PPPP[P\x92\x91PPV[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x10\xB8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xDC\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x11\x0B\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11(W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11L\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x11\x86a\t\x9CV[\x82Q\x90\x91P\x15a\x08\xC7W\x80`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x84\x84`\0\x81Q\x81\x10a\x11\xB3Wa\x11\xB3a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xD8\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x11\xF2W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x06W=`\0\x80>=`\0\xFD[PPPP\x80`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x84\x84`\x01\x81Q\x81\x10a\x12-Wa\x12-a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12R\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x12lW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x12\x80W=`\0\x80>=`\0\xFD[PPPPPPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0\x91\x82R`\x01` \x90\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[\x80Q\x82Q`\0\x91\x14a\x13=W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`>`$\x82\x01R\x7FPKPHelper: Claim key type must m`D\x82\x01R\x7Fatch Auth Method data key type\0\0`d\x82\x01R`\x84\x01a\x06\x8CV[`\x01`\0a\x13Ia\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cq\xAA\x9A\xCF4\x84\x88`\0\x01Q\x89` \x01Q\x8A`@\x01Q\x8B``\x01Q\x8C`\x80\x01Q`@Q\x88c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\x93\x96\x95\x94\x93\x92\x91\x90a7cV[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x13\xB1W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xD6\x91\x90a3jV[\x90P\x83`@\x01QQ\x84` \x01QQ\x14a\x14\x01W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\x9DV[\x83`\x80\x01QQ\x84``\x01QQ\x14a\x14*W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a4\xF3V[\x83`\xC0\x01QQ\x84`\xA0\x01QQ\x14a\x14SW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x83`\xE0\x01QQ\x84`\xA0\x01QQ\x14a\x14|W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x83a\x01\0\x01QQ\x84`\xA0\x01QQ\x14a\x14\xA6W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[` \x84\x01QQ\x15a\x15rW`\0[\x84` \x01QQ\x81\x10\x15a\x15pWa\x14\xC9a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x8AC\x15x\x83\x87` \x01Q\x84\x81Q\x81\x10a\x14\xEEWa\x14\xEEa6'V[` \x02` \x01\x01Q\x88`@\x01Q\x85\x81Q\x81\x10a\x15\x0CWa\x15\x0Ca6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x152\x93\x92\x91\x90a6yV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x15LW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x15`W=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x14\xB4\x90PV[P[``\x84\x01QQ\x15a\x16>W`\0[\x84``\x01QQ\x81\x10\x15a\x16=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x15\x80\x90PV[P[`\xA0\x84\x01QQ\x15a\x17_W`\0[\x84`\xA0\x01QQ\x81\x10\x15a\x17]Wa\x16aa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x89`\xA0\x01Q\x86\x81Q\x81\x10a\x16\x91Wa\x16\x91a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xC0\x01Q\x86\x81Q\x81\x10a\x16\xB4Wa\x16\xB4a6'V[` \x02` \x01\x01Q\x81R` \x01\x89`\xE0\x01Q\x86\x81Q\x81\x10a\x16\xD7Wa\x16\xD7a6'V[` \x02` \x01\x01Q\x81RP\x88a\x01\0\x01Q\x85\x81Q\x81\x10a\x16\xF9Wa\x16\xF9a6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x1F\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x179W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x17MW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x16L\x90PV[P[`\0a\x17ia\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\x96\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xB3W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x17\xD7\x91\x90a3\x97V[\x90P\x84a\x01 \x01Q\x15a\x18yWa\x17\xECa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x18'W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18F\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18`W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18tW=`\0\x80>=`\0\xFD[PPPP[\x84a\x01@\x01Q\x15a\x18\xF2Wa\x18\x8Ca\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x18\xBB\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x18\xD5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x18\xE9W=`\0\x80>=`\0\xFD[PPPPa\x19\\V[a\x18\xFAa\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19)\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x19CW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x19WW=`\0\x80>=`\0\xFD[PPPP[P\x94\x93PPPPV[`\x02T`@\x80Qc,\x0B\x8B\xF7`\xE0\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c,\x0B\x8B\xF7\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xEDW=`\0\x80>=`\0\xFD[a\x19\xC0\x82a\x06\xBAV[a\x19\xC9\x81a\"\x07V[a\x08\xC7\x83\x83a\"|V[`\x02T`@\x80Qc!\x0Bs\x9D`\xE1\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91cB\x16\xE7:\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x1A%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1AI\x91\x90a3jV[`\x02T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x1Ax\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a3\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\x95W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\xB9\x91\x90a3\x97V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x1A\xE9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a3\xB4V[`\0a\x1A\xF3a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16c\x7F\xF0\r.4\x8D\x8D`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B!\x92\x91\x90a4\x84V[` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x1B?W=`\0\x80>=`\0\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Bd\x91\x90a3jV[\x90P\x87Q\x89Q\x14a\x1B\x87W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5HV[\x86Q\x89Q\x14a\x1B\xA8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\x91V[\x85Q\x89Q\x14a\x1B\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06\x8C\x90a5\xDCV[\x88Q\x15a\x1C\xD1W`\0[\x89Q\x81\x10\x15a\x1C\xCFWa\x1B\xE4a\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x9D\xD44\x9B\x83`@Q\x80``\x01`@R\x80\x8E\x86\x81Q\x81\x10a\x1C\x10Wa\x1C\x10a6'V[` \x02` \x01\x01Q\x81R` \x01\x8D\x86\x81Q\x81\x10a\x1C/Wa\x1C/a6'V[` \x02` \x01\x01Q\x81R` \x01\x8C\x86\x81Q\x81\x10a\x1CNWa\x1CNa6'V[` \x02` \x01\x01Q\x81RP\x8A\x85\x81Q\x81\x10a\x1CkWa\x1Cka6'V[` \x02` \x01\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\x91\x93\x92\x91\x90a6\xE1V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1C\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1C\xBFW=`\0\x80>=`\0\xFD[PP`\x01\x90\x92\x01\x91Pa\x1B\xD3\x90PV[P[`\0a\x1C\xDBa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\xBDI\x86\xA0\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x08\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D%W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1DI\x91\x90a3\x97V[\x90P\x84\x15a\x1D\xE6Wa\x1DYa\x08\xCCV[`\x01`\x01`\xA0\x1B\x03\x16c\x16c\xC1!\x83\x83`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1D\x94W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\xB3\x93\x92\x91\x90a6\xAEV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1D\xCDW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1D\xE1W=`\0\x80>=`\0\xFD[PPPP[\x83\x15a\x1EZWa\x1D\xF4a\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E0\x83\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E#\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E=W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1EQW=`\0\x80>=`\0\xFD[PPPPa\x1E\xC4V[a\x1Eba\x19eV[`\x01`\x01`\xA0\x1B\x03\x16cB\x84.\x0E03\x85`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E\x91\x93\x92\x91\x90a7?V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1E\xABW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1E\xBFW=`\0\x80>=`\0\xFD[PPPP[\x85Q\x15a\x1F\xCEWa\x1E\xD3a\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x85^\xEC\"\x83\x88`\0\x81Q\x81\x10a\x1E\xF5Wa\x1E\xF5a6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x1A\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F4W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1FHW=`\0\x80>=`\0\xFD[PPPPa\x1FTa\t\x9CV[`\x01`\x01`\xA0\x1B\x03\x16c\x90\0\xFE\xE1\x83\x88`\x01\x81Q\x81\x10a\x1FvWa\x1Fva6'V[` \x02` \x01\x01Q`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x9B\x92\x91\x90a4\x84V[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x1F\xB5W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x1F\xC9W=`\0\x80>=`\0\xFD[PPPP[P\x9A\x99PPPPPPPPPPV[`\0\x80`@Q\x80a\x01\x80\x01`@R\x80\x8B\x81R` \x01\x8A\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x81\x11\x15a \x11Wa \x11a%\xD6V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a DW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a /W\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \x7FW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a jW\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xB0W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x81R` \x01`\0`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a \xEBW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a \xD6W\x90P[P\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x81R` \x01\x85\x15\x15\x81R` \x01\x84\x15\x15\x81RP\x90Pa!\"\x81a\nTV[\x9A\x99PPPPPPPPPPV[a!8a\"\xE3V[`\x01`\x01`\xA0\x1B\x03\x81\x16a!\x9DW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06\x8CV[a!\xA6\x81a#BV[PV[a!\xB1a\"\xE3V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x17\x90U`@Q\x7F'`\x07<|\xD8\xCA\xC51\xD7\xF6C\xBE\xCB\xFB\xB7M\x8B\x81VD>\xAC\xF8yb%2\xDB\xBB<\xD5\x90a!\xFC\x90\x83\x90a%\xC2V[`@Q\x80\x91\x03\x90\xA1PV[a!\xA6\x813a#\x92V[a\"\x1B\x82\x82a\x12\x98V[a\t\x98W`\0\x82\x81R`\x01` \x81\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x86\x16\x80\x86R\x92R\x80\x84 \x80T`\xFF\x19\x16\x90\x93\x17\x90\x92U\x90Q3\x92\x85\x91\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r\x91\x90\xA4PPV[a\"\x86\x82\x82a\x12\x98V[\x15a\t\x98W`\0\x82\x81R`\x01` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[3a\"\xECa\x12\x89V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\n\0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\x06\x8CV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[a#\x9C\x82\x82a\x12\x98V[a\t\x98Wa#\xA9\x81a#\xEBV[a#\xB4\x83` a#\xFDV[`@Q` \x01a#\xC5\x92\x91\x90a8\x03V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06\x8C\x91`\x04\x01a8rV[``a\x04\x95`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14[```\0a$\x0C\x83`\x02a8\x9BV[a$\x17\x90`\x02a8\xB2V[`\x01`\x01`@\x1B\x03\x81\x11\x15a$.Wa$.a%\xD6V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a$XW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a$sWa$sa6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a$\xA2Wa$\xA2a6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a$\xC6\x84`\x02a8\x9BV[a$\xD1\x90`\x01a8\xB2V[\x90P[`\x01\x81\x11\x15a%IWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a%\x05Wa%\x05a6'V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a%\x1BWa%\x1Ba6'V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a%B\x81a8\xC5V[\x90Pa$\xD4V[P\x83\x15a\x06\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06\x8CV[`\0` \x82\x84\x03\x12\x15a%\xAAW`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x06\xB3W`\0\x80\xFD[`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16\x81R` \x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@R\x90V[`@Qa\x01`\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\x0EWa&\x0Ea%\xD6V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a&\xA4Wa&\xA4a%\xD6V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a&\xC5Wa&\xC5a%\xD6V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a&\xE0W`\0\x80\xFD[\x815a&\xF3a&\xEE\x82a&\xACV[a&|V[\x80\x82\x82R` \x82\x01\x91P` ``\x84\x02\x86\x01\x01\x92P\x85\x83\x11\x15a'\x15W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW``\x81\x88\x03\x12\x15a'2W`\0\x80\xFD[a':a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\xFF\x81\x16\x81\x14a'\\W`\0\x80\xFD[`@\x82\x01R\x83R` \x90\x92\x01\x91``\x01a'\x1AV[P\x95\x94PPPPPV[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a'\x95Wa'\x95a%\xD6V[P`\x1F\x83\x01`\x1F\x19\x16` \x01a'\xAA\x81a&|V[\x91PP\x82\x81R\x83\x83\x83\x01\x11\x15a'\xBFW`\0\x80\xFD[\x82\x82` \x83\x017`\0` \x84\x83\x01\x01R\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a'\xE7W`\0\x80\xFD[\x815a'\xF5a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\x17W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a(:W`\0\x80\xFD[\x86\x01`?\x81\x01\x88\x13a(KW`\0\x80\xFD[a(]\x88` \x83\x015`@\x84\x01a'{V[\x84RP` \x92\x83\x01\x92\x01a(\x1CV[`\0\x82`\x1F\x83\x01\x12a(}W`\0\x80\xFD[\x815a(\x8Ba&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a(\xADW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805\x83R` \x92\x83\x01\x92\x01a(\xB2V[`\0\x82`\x1F\x83\x01\x12a(\xDBW`\0\x80\xFD[\x815a(\xE9a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\x0BW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a).W`\0\x80\xFD[a)=\x88` \x83\x8A\x01\x01a(lV[\x84RP` \x92\x83\x01\x92\x01a)\x10V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xA6W`\0\x80\xFD[`\0\x82`\x1F\x83\x01\x12a)rW`\0\x80\xFD[\x815a)\x80a&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a)\xA2W`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805a)\xBA\x81a)LV[\x83R` \x92\x83\x01\x92\x01a)\xA7V[\x805\x80\x15\x15\x81\x14a)\xD8W`\0\x80\xFD[\x91\x90PV[`\0a\x01`\x82\x84\x03\x12\x15a)\xF0W`\0\x80\xFD[a)\xF8a&\x14V[\x825\x81R\x90P` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x17W`\0\x80\xFD[a*#\x84\x82\x85\x01a'\xD6V[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*BW`\0\x80\xFD[a*N\x84\x82\x85\x01a(\xCAV[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*mW`\0\x80\xFD[a*y\x84\x82\x85\x01a)aV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\x98W`\0\x80\xFD[a*\xA4\x84\x82\x85\x01a(\xCAV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xC3W`\0\x80\xFD[a*\xCF\x84\x82\x85\x01a(lV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a*\xEEW`\0\x80\xFD[a*\xFA\x84\x82\x85\x01a'\xD6V[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\x19W`\0\x80\xFD[a+%\x84\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+EW`\0\x80\xFD[a+Q\x84\x82\x85\x01a(\xCAV[a\x01\0\x83\x01RPa+ea\x01 \x83\x01a)\xC8V[a\x01 \x82\x01Ra+xa\x01@\x83\x01a)\xC8V[a\x01@\x82\x01R\x92\x91PPV[`\0\x80`@\x83\x85\x03\x12\x15a+\x97W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xADW`\0\x80\xFD[\x83\x01``\x81\x86\x03\x12\x15a+\xBFW`\0\x80\xFD[a+\xC7a%\xECV[\x815\x81R` \x80\x83\x015\x90\x82\x01R`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a+\xEEW`\0\x80\xFD[a+\xFA\x87\x82\x85\x01a&\xCFV[`@\x83\x01RP\x92PP` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[a,(\x85\x82\x86\x01a)\xDDV[\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\0`\x80\x86\x88\x03\x12\x15a,JW`\0\x80\xFD[\x855a,U\x81a)LV[\x94P` \x86\x015a,e\x81a)LV[\x93P`@\x86\x015\x92P``\x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x87W`\0\x80\xFD[\x86\x01`\x1F\x81\x01\x88\x13a,\x98W`\0\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a,\xAEW`\0\x80\xFD[\x88` \x82\x84\x01\x01\x11\x15a,\xC0W`\0\x80\xFD[\x95\x98\x94\x97P\x92\x95PPP` \x01\x91\x90V[`\0` \x82\x84\x03\x12\x15a,\xE3W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a,\xFDW`\0\x80\xFD[\x825\x91P` \x83\x015a-\x0F\x81a)LV[\x80\x91PP\x92P\x92\x90PV[`\0\x82`\x1F\x83\x01\x12a-+W`\0\x80\xFD[a\x06\xB3\x83\x835` \x85\x01a'{V[`\0` \x82\x84\x03\x12\x15a-LW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a-bW`\0\x80\xFD[\x82\x01a\x01\x80\x81\x85\x03\x12\x15a-uW`\0\x80\xFD[a-}a&7V[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\x9AW`\0\x80\xFD[a-\xA6\x86\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xC5W`\0\x80\xFD[a-\xD1\x86\x82\x85\x01a'\xD6V[`@\x83\x01RP``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a-\xF0W`\0\x80\xFD[a-\xFC\x86\x82\x85\x01a(\xCAV[``\x83\x01RP`\x80\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x1BW`\0\x80\xFD[a.'\x86\x82\x85\x01a)aV[`\x80\x83\x01RP`\xA0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.FW`\0\x80\xFD[a.R\x86\x82\x85\x01a(\xCAV[`\xA0\x83\x01RP`\xC0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.qW`\0\x80\xFD[a.}\x86\x82\x85\x01a(lV[`\xC0\x83\x01RP`\xE0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\x9CW`\0\x80\xFD[a.\xA8\x86\x82\x85\x01a'\xD6V[`\xE0\x83\x01RPa\x01\0\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xC8W`\0\x80\xFD[a.\xD4\x86\x82\x85\x01a'\xD6V[a\x01\0\x83\x01RPa\x01 \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a.\xF5W`\0\x80\xFD[a/\x01\x86\x82\x85\x01a(\xCAV[a\x01 \x83\x01RPa/\x15a\x01@\x83\x01a)\xC8V[a\x01@\x82\x01Ra/(a\x01`\x83\x01a)\xC8V[a\x01`\x82\x01R\x94\x93PPPPV[`\0\x82`\x1F\x83\x01\x12a/GW`\0\x80\xFD[\x815a/Ua&\xEE\x82a&\xACV[\x80\x82\x82R` \x82\x01\x91P` \x83`\x05\x1B\x86\x01\x01\x92P\x85\x83\x11\x15a/wW`\0\x80\xFD[` \x85\x01[\x83\x81\x10\x15a'qW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a/\x9AW`\0\x80\xFD[a/\xA9\x88` \x83\x8A\x01\x01a-\x1AV[\x84RP` \x92\x83\x01\x92\x01a/|V[`\0\x80`@\x83\x85\x03\x12\x15a/\xCBW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a/\xE8W`\0\x80\xFD[a,(\x85\x82\x86\x01a/6V[`\0\x80`@\x83\x85\x03\x12\x15a0\x07W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x1DW`\0\x80\xFD[\x83\x01`\xA0\x81\x86\x03\x12\x15a0/W`\0\x80\xFD[a07a&ZV[\x815\x81R` \x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0TW`\0\x80\xFD[a0`\x87\x82\x85\x01a-\x1AV[` \x83\x01RP`@\x82\x81\x015\x90\x82\x01R``\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a0\x89W`\0\x80\xFD[a0\x95\x87\x82\x85\x01a&\xCFV[``\x83\x01RP`\x80\x82\x015\x91Pa0\xAB\x82a)LV[`\x80\x81\x01\x91\x90\x91R\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a,\x1CW`\0\x80\xFD[`\x03\x81\x10a0\xECWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\x04\x95\x82\x84a0\xCEV[`\0\x80`\0\x80`\0\x80`\0\x80`\0a\x01 \x8A\x8C\x03\x12\x15a1\x1DW`\0\x80\xFD[\x895\x98P` \x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1:W`\0\x80\xFD[a1F\x8C\x82\x8D\x01a-\x1AV[\x98PP`@\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1bW`\0\x80\xFD[a1n\x8C\x82\x8D\x01a(lV[\x97PP``\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\x8AW`\0\x80\xFD[a1\x96\x8C\x82\x8D\x01a'\xD6V[\x96PP`\x80\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xB2W`\0\x80\xFD[a1\xBE\x8C\x82\x8D\x01a'\xD6V[\x95PP`\xA0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a1\xDAW`\0\x80\xFD[a1\xE6\x8C\x82\x8D\x01a(\xCAV[\x94PP`\xC0\x8A\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x02W`\0\x80\xFD[a2\x0E\x8C\x82\x8D\x01a/6V[\x93PPa2\x1D`\xE0\x8B\x01a)\xC8V[\x91Pa2,a\x01\0\x8B\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98P\x92\x95\x98V[`\0\x80`\0\x80`\0\x80`\0\x80a\x01\0\x89\x8B\x03\x12\x15a2XW`\0\x80\xFD[\x885\x97P` \x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2uW`\0\x80\xFD[a2\x81\x8B\x82\x8C\x01a-\x1AV[\x97PP`@\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\x9DW`\0\x80\xFD[a2\xA9\x8B\x82\x8C\x01a(lV[\x96PP``\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xC5W`\0\x80\xFD[a2\xD1\x8B\x82\x8C\x01a'\xD6V[\x95PP`\x80\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a2\xEDW`\0\x80\xFD[a2\xF9\x8B\x82\x8C\x01a'\xD6V[\x94PP`\xA0\x89\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a3\x15W`\0\x80\xFD[a3!\x8B\x82\x8C\x01a(\xCAV[\x93PPa30`\xC0\x8A\x01a)\xC8V[\x91Pa3>`\xE0\x8A\x01a)\xC8V[\x90P\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[`\0` \x82\x84\x03\x12\x15a3_W`\0\x80\xFD[\x815a\x06\xB3\x81a)LV[`\0` \x82\x84\x03\x12\x15a3|W`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xB3` \x83\x01\x84a0\xCEV[`\0` \x82\x84\x03\x12\x15a3\xA9W`\0\x80\xFD[\x81Qa\x06\xB3\x81a)LV[` \x80\x82R`Z\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rymain wallets, who are you?`0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\0[\x83\x81\x10\x15a4OW\x81\x81\x01Q\x83\x82\x01R` \x01a47V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra4p\x81` \x86\x01` \x86\x01a44V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x05\xFB`@\x83\x01\x84a4XV[` \x80\x82R`6\x90\x82\x01R\x7FPKPHelper: ipfs cid and scope ar`@\x82\x01Ru\x0EL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`S\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`5\x90\x82\x01R\x7FPKPHelper: address and scope arr`@\x82\x01Rt\x0C/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`[\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`;\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01Rz\r,\x84\x0C.NL/$\r\x8C\xAD\xCC\xEE\x8D\x0Ed\r\xAE\xAEn\x84\r\xAC.\x8Cm`+\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fpubkey array lengths must match\0``\x82\x01R`\x80\x01\x90V[` \x80\x82R`?\x90\x82\x01R`\0\x80Q` a8\xDD\x839\x81Q\x91R`@\x82\x01R\x7Fscopes array lengths must match\0``\x82\x01R`\x80\x01\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x81Q\x80\x84R` \x84\x01\x93P` \x83\x01`\0[\x82\x81\x10\x15a6oW\x81Q\x86R` \x95\x86\x01\x95\x90\x91\x01\x90`\x01\x01a6QV[P\x93\x94\x93PPPPV[\x83\x81R``` \x82\x01R`\0a6\x92``\x83\x01\x85a4XV[\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[\x96\x95PPPPPPV[\x83\x81R`\x01`\x01`\xA0\x1B\x03\x83\x16` \x82\x01R```@\x82\x01\x81\x90R`\0\x90a6\xD8\x90\x83\x01\x84a6=V[\x95\x94PPPPPV[\x83\x81R``` \x82\x01R\x82Q``\x82\x01R`\0` \x84\x01Q```\x80\x84\x01Ra7\r`\xC0\x84\x01\x82a4XV[\x90P`@\x85\x01Q`_\x19\x84\x83\x03\x01`\xA0\x85\x01Ra7*\x82\x82a4XV[\x91PP\x82\x81\x03`@\x84\x01Ra6\xA4\x81\x85a6=V[`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x81R\x91\x90\x92\x16` \x82\x01R`@\x81\x01\x91\x90\x91R``\x01\x90V[\x86\x81R\x85` \x82\x01R`\xC0`@\x82\x01R`\0a7\x82`\xC0\x83\x01\x87a4XV[``\x83\x01\x86\x90R\x82\x81\x03`\x80\x84\x01R\x84Q\x80\x82R` \x80\x87\x01\x92\x01\x90`\0[\x81\x81\x10\x15a7\xDEW\x83Q\x80Q\x84R` \x81\x01Q` \x85\x01R`\xFF`@\x82\x01Q\x16`@\x85\x01RP``\x83\x01\x92P` \x84\x01\x93P`\x01\x81\x01\x90Pa7\xA1V[PP`\x01`\x01`\xA0\x1B\x03\x85\x16`\xA0\x85\x01R\x91Pa7\xF8\x90PV[\x97\x96PPPPPPPV[v\x02\x0B\x1B\x1B+\x9B\x9A\x1B{s\xA3\x93{a\xD1\x03\x0B\x1B\x1B{\xABs\xA1`M\x1B\x81R`\0\x83Qa85\x81`\x17\x85\x01` \x88\x01a44V[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa8f\x81`(\x84\x01` \x88\x01a44V[\x01`(\x01\x94\x93PPPPV[` \x81R`\0a\x06\xB3` \x83\x01\x84a4XV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x04\x95Wa\x04\x95a8\x85V[\x80\x82\x01\x80\x82\x11\x15a\x04\x95Wa\x04\x95a8\x85V[`\0\x81a8\xD4Wa8\xD4a8\x85V[P`\0\x19\x01\x90V\xFEPKPHelper: auth method type and \xA2dipfsX\"\x12 \x1F0\xB6\xE1\x1B=\xBC\xAE\xC6\x1A<\xBE\x0Ee\xBDi\xF7\xCC\x1AE\xCAG\x92\xF4\xFC:\x0BbY\xA4\xBA\xE1dsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static PKPHELPER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain/src/contracts/pkpnft_metadata.rs b/rust/lit-core/lit-blockchain/src/contracts/pkpnft_metadata.rs index 206405a..b8ff198 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/pkpnft_metadata.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/pkpnft_metadata.rs @@ -269,13 +269,13 @@ pub mod pkpnft_metadata { __abi, ); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`@Qa\x1C}8\x03\x80a\x1C}\x839\x81\x01`@\x81\x90R`,\x91`vV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15`kW`k`\xBDV[\x02\x17\x90UPPP`\xD3V[`\0\x80`@\x83\x85\x03\x12\x15`\x88W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14`\x9EW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10`\xB2W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x1B\x9B\x80a\0\xE2`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x8F\x13\x99\xB0\x85\xBF\xFD\xE0ex\xF1\xDD\x04\xAD6!~\xEDG\xFB\xA0mu\xA3\x1F\\\xE9\xE6qQx\x82dsolcC\0\x08\x1C\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15`\x0FW`\0\x80\xFD[P`@Qa\x1C}8\x03\x80a\x1C}\x839\x81\x01`@\x81\x90R`,\x91`vV[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U\x83\x92\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x02\x81\x11\x15`kW`k`\xBDV[\x02\x17\x90UPPP`\xD3V[`\0\x80`@\x83\x85\x03\x12\x15`\x88W`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14`\x9EW`\0\x80\xFD[` \x84\x01Q\x90\x92P`\x03\x81\x10`\xB2W`\0\x80\xFD[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[a\x1B\x9B\x80a\0\xE2`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x11\x9F>\xFF\x15\xD9\xF5\xEA\x1C\x05_7\x90\x172\x96\x03\x0EY\x97>*\xD6`\xE8q\x1AU\xE2\xF03\x13dsolcC\0\x08\x1C\x003"; /// The bytecode of the contract. pub static PKPNFTMETADATA_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __BYTECODE, ); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x8F\x13\x99\xB0\x85\xBF\xFD\xE0ex\xF1\xDD\x04\xAD6!~\xEDG\xFB\xA0mu\xA3\x1F\\\xE9\xE6qQx\x82dsolcC\0\x08\x1C\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0xW`\x005`\xE0\x1C\x80cE\x1D\x89\xFA\x14a\0}W\x80cP\xD1{^\x14a\0\xA6W\x80cQ\x9A!\x8E\x14a\0\xD1W\x80c\x85^\xEC\"\x14a\0\xE6W\x80c\x90\0\xFE\xE1\x14a\0\xF9W\x80c\x95\x04b\xEE\x14a\x01\x0CW\x80c\x9D\xCA\x002\x14a\x01\x1FW\x80c\xB6:vw\x14a\x01@W[`\0\x80\xFD[a\0\x90a\0\x8B6`\x04a\x0F\xB0V[a\x01SV[`@Qa\0\x9D\x91\x90a\x10\x10V[`@Q\x80\x91\x03\x90\xF3[`\0Ta\0\xB9\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0\x9DV[a\0\xE4a\0\xDF6`\x04a\x10CV[a\x03\x0CV[\0[a\0\xE4a\0\xF46`\x04a\x10\\V[a\x04VV[a\0\xE4a\x01\x076`\x04a\x10\\V[a\x05\x89V[a\0\x90a\x01\x1A6`\x04a\x10\xCEV[a\x06\xB7V[`\0Ta\x013\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16\x81V[`@Qa\0\x9D\x91\x90a\x11JV[a\0\xE4a\x01N6`\x04a\x10CV[a\x06\xF3V[```\0\x82Q`\x02a\x01e\x91\x90a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x01|Wa\x01|a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xA6W` \x82\x01\x81\x806\x837\x01\x90P[P`@\x80Q\x80\x82\x01\x90\x91R`\x10\x81Ro\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B` \x82\x01R\x90\x91P`\0[\x84Q\x81\x10\x15a\x02\xE2W\x81\x82Q\x86\x83\x81Q\x81\x10a\x01\xF2Wa\x01\xF2a\x11\x85V[\x01` \x01Qa\x02\x04\x91\x90`\xF8\x1Ca\x11\xB1V[\x81Q\x81\x10a\x02\x14Wa\x02\x14a\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02/\x83`\x02a\x11nV[\x81Q\x81\x10a\x02?Wa\x02?a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP\x81\x82Q\x86\x83\x81Q\x81\x10a\x02kWa\x02ka\x11\x85V[\x01` \x01Qa\x02}\x91\x90`\xF8\x1Ca\x11\xC5V[\x81Q\x81\x10a\x02\x8DWa\x02\x8Da\x11\x85V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x83a\x02\xA8\x83`\x02a\x11nV[a\x02\xB3\x90`\x01a\x11\xD9V[\x81Q\x81\x10a\x02\xC3Wa\x02\xC3a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xD4V[P\x81`@Q` \x01a\x02\xF4\x91\x90a\x12\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x03^W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x82\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x03\xB1\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xCEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xF2\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x04+W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@Q\x80\x91\x03\x90\xFD[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x01\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[PPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x04\xA8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCC\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x04\xFB\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\x18W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05<\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x05lW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x01` R`@\x90 a\x05\x84\x82\x82a\x13vV[PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xDBW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xFF\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x06.\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06KW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06o\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x06\x9FW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`\0\x82\x81R`\x02` R`@\x90 a\x05\x84\x82\x82a\x13vV[```\0a\x06\xC6\x85\x85\x85a\x080V[\x90P\x80`@Q` \x01a\x06\xD9\x91\x90a\x144V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91PP[\x93\x92PPPV[`\0T`@\x80Qc\tw\xA8\x07`\xE4\x1B\x81R\x90Q`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91c\x8E\x8D\xFD\x16\x91\x83\x91c\x97z\x80p\x91`\x04\x80\x82\x01\x92` \x92\x90\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x07EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07i\x91\x90a\x122V[`\0T`@Q`\xE0\x84\x90\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x81Ra\x07\x98\x92\x91`\x01`\xA0\x1B\x90\x04`\xFF\x16\x90`\x04\x01a\x12KV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD9\x91\x90a\x12_V[`\x01`\x01`\xA0\x1B\x03\x163`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\tW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x04\"\x90a\x12|V[`@\x80Q` \x80\x82\x01\x83R`\0\x80\x83R\x84\x81R`\x02\x90\x91R\x91\x90\x91 \x90a\x04R\x90\x82a\x13vV[```\0`@Q\x80a\x04\x80\x01`@R\x80a\x04V\x81R` \x01a\x16\xD0a\x04V\x919\x90P`\0a\x08]\x85a\x01SV[\x90P`\0a\x08j\x85a\n\x84V[\x90P`\0a\x08w\x88a\n\xA0V[`\0\x89\x81R`\x01` R`@\x81 \x80T\x92\x93P\x90\x91a\x08\x95\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xC1\x90a\x12\xEEV[\x80\x15a\t\x0EW\x80`\x1F\x10a\x08\xE3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\x0EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x08\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0`\x02`\0\x8B\x81R` \x01\x90\x81R` \x01`\0 \x80Ta\t5\x90a\x12\xEEV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\ta\x90a\x12\xEEV[\x80\x15a\t\xAEW\x80`\x1F\x10a\t\x83Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t\xAEV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x91W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x81Q`\0\x14\x80\x15a\t\xC6WP\x80Q\x15\x15[\x15a\t\xF2W\x82`@Q` \x01a\t\xDC\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91Pa\nFV[\x81Q\x15\x80\x15\x90a\n\x01WP\x80Q\x15[\x15a\n\rWP\x84a\nFV[\x81Q\x15\x80\x15a\n\x1BWP\x80Q\x15[\x15a\nFW\x82`@Q` \x01a\n1\x91\x90a\x14yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P\x85\x90P[a\nv\x82\x82\x87\x87\x87`@Q` \x01a\nb\x95\x94\x93\x92\x91\x90a\x14\xAAV[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x0B2V[\x9A\x99PPPPPPPPPPV[``a\n\x9A`\x01`\x01`\xA0\x1B\x03\x83\x16`\x14a\x0C\x91V[\x92\x91PPV[```\0a\n\xAD\x83a\x0E,V[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xCCWa\n\xCCa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\n\xF6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\0WP\x93\x92PPPV[``\x81Q`\0\x03a\x0BQWPP`@\x80Q` \x81\x01\x90\x91R`\0\x81R\x90V[`\0`@Q\x80``\x01`@R\x80`@\x81R` \x01a\x1B&`@\x919\x90P`\0`\x03\x84Q`\x02a\x0B\x80\x91\x90a\x11\xD9V[a\x0B\x8A\x91\x90a\x11\xB1V[a\x0B\x95\x90`\x04a\x11nV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B\xACWa\x0B\xACa\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\xD6W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x01\x82\x01` \x82\x01\x85\x86Q\x87\x01` \x81\x01\x80Q`\0\x82R[\x82\x84\x10\x15a\x0CLW`\x03\x84\x01\x93P\x83Q`?\x81`\x12\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x0C\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81`\x06\x1C\x16\x87\x01Q\x86S`\x01\x86\x01\x95P`?\x81\x16\x87\x01Q\x86SP`\x01\x85\x01\x94Pa\x0B\xF1V[\x90RPP\x85Q`\x03\x90\x06`\x01\x81\x14a\x0CkW`\x02\x81\x14a\x0C~Wa\x0C\x86V[`=`\x01\x83\x03S`=`\x02\x83\x03Sa\x0C\x86V[`=`\x01\x83\x03S[P\x91\x95\x94PPPPPV[```\0a\x0C\xA0\x83`\x02a\x11nV[a\x0C\xAB\x90`\x02a\x11\xD9V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\xC2Wa\x0C\xC2a\x0F\x02V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0C\xECW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\r\x07Wa\r\x07a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\r6Wa\r6a\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\rZ\x84`\x02a\x11nV[a\re\x90`\x01a\x11\xD9V[\x90P[`\x01\x81\x11\x15a\r\xDDWo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\r\x99Wa\r\x99a\x11\x85V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\r\xAFWa\r\xAFa\x11\x85V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\r\xD6\x81a\x16\xB8V[\x90Pa\rhV[P\x83\x15a\x06\xECW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x04\"V[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0EkWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[i\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x10a\x0E\x95Wi\x04\xEE-mA[\x85\xAC\xEF\x81` \x1B\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0E\xB3Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0E\xCBWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0E\xDFWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0E\xF1W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\n\x9AW`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`\x01`\x01`@\x1B\x03\x84\x11\x15a\x0F2Wa\x0F2a\x0F\x02V[P`@Q`\x1F\x19`\x1F\x85\x01\x81\x16`?\x01\x16\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x0F`Wa\x0F`a\x0F\x02V[`@R\x83\x81R\x90P\x80\x82\x84\x01\x85\x10\x15a\x0FxW`\0\x80\xFD[\x83\x83` \x83\x017`\0` \x85\x83\x01\x01RP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a\x0F\xA1W`\0\x80\xFD[a\x06\xEC\x83\x835` \x85\x01a\x0F\x18V[`\0` \x82\x84\x03\x12\x15a\x0F\xC2W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\xD8W`\0\x80\xFD[a\x0F\xE4\x84\x82\x85\x01a\x0F\x90V[\x94\x93PPPPV[`\0[\x83\x81\x10\x15a\x10\x07W\x81\x81\x01Q\x83\x82\x01R` \x01a\x0F\xEFV[PP`\0\x91\x01RV[` \x81R`\0\x82Q\x80` \x84\x01Ra\x10/\x81`@\x85\x01` \x87\x01a\x0F\xECV[`\x1F\x01`\x1F\x19\x16\x91\x90\x91\x01`@\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10UW`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\x10oW`\0\x80\xFD[\x825\x91P` \x83\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\x8CW`\0\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x10\x9DW`\0\x80\xFD[a\x10\xAC\x85\x825` \x84\x01a\x0F\x18V[\x91PP\x92P\x92\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x10\xCBW`\0\x80\xFD[PV[`\0\x80`\0``\x84\x86\x03\x12\x15a\x10\xE3W`\0\x80\xFD[\x835\x92P` \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\0W`\0\x80\xFD[a\x11\x0C\x86\x82\x87\x01a\x0F\x90V[\x92PP`@\x84\x015a\x11\x1D\x81a\x10\xB6V[\x80\x91PP\x92P\x92P\x92V[`\x03\x81\x10a\x11FWcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[` \x81\x01a\n\x9A\x82\x84a\x11(V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\n\x9AWa\n\x9Aa\x11XV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\x11\xC0Wa\x11\xC0a\x11\x9BV[P\x04\x90V[`\0\x82a\x11\xD4Wa\x11\xD4a\x11\x9BV[P\x06\x90V[\x80\x82\x01\x80\x82\x11\x15a\n\x9AWa\n\x9Aa\x11XV[`\0\x81Qa\x11\xFE\x81\x85` \x86\x01a\x0F\xECV[\x92\x90\x92\x01\x92\x91PPV[a\x06\x0F`\xF3\x1B\x81R`\0\x82Qa\x12%\x81`\x02\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x02\x01\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12DW`\0\x80\xFD[PQ\x91\x90PV[\x82\x81R`@\x81\x01a\x06\xEC` \x83\x01\x84a\x11(V[`\0` \x82\x84\x03\x12\x15a\x12qW`\0\x80\xFD[\x81Qa\x06\xEC\x81a\x10\xB6V[` \x80\x82R`L\x90\x82\x01R\x7FPKPHelper: only the Domain Walle`@\x82\x01R\x7Ft registry is allowed to mint do``\x82\x01Rkmain wallets`\xA0\x1B`\x80\x82\x01R`\xA0\x01\x90V[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x13\x02W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x13\"WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15a\x05\x84W\x80`\0R` `\0 `\x1F\x84\x01`\x05\x1C\x81\x01` \x85\x10\x15a\x13OWP\x80[`\x1F\x84\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x13oW`\0\x81U`\x01\x01a\x13[V[PPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\x8FWa\x13\x8Fa\x0F\x02V[a\x13\xA3\x81a\x13\x9D\x84Ta\x12\xEEV[\x84a\x13(V[` `\x1F\x82\x11`\x01\x81\x14a\x13\xD7W`\0\x83\x15a\x13\xBFWP\x84\x82\x01Q[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x13oV[`\0\x84\x81R` \x81 `\x1F\x19\x85\x16\x91[\x82\x81\x10\x15a\x14\x07W\x87\x85\x01Q\x82U` \x94\x85\x01\x94`\x01\x90\x92\x01\x91\x01a\x13\xE7V[P\x84\x82\x10\x15a\x14%W\x86\x84\x01Q`\0\x19`\x03\x87\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPP`\x01\x90\x81\x1B\x01\x90UPV[\x7Fdata:application/json;base64,\0\0\0\x81R`\0\x82Qa\x14l\x81`\x1D\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\x1D\x01\x92\x91PPV[hLit PKP #`\xB8\x1B\x81R`\0\x82Qa\x14\x9D\x81`\t\x85\x01` \x87\x01a\x0F\xECV[\x91\x90\x91\x01`\t\x01\x92\x91PPV[h=\x9170\xB6\xB2\x91\x1D\x11`\xB9\x1B\x81R\x85Q`\0\x90a\x14\xCF\x81`\t\x85\x01` \x8B\x01a\x0F\xECV[\x7F\", \"description\": \"This NFT enti`\t\x91\x84\x01\x91\x82\x01R\x7Ftles the holder to use a Lit Pro`)\x82\x01R\x7Ftocol PKP, and to grant access t`I\x82\x01R\x7Fo other users and Lit Actions to`i\x82\x01R\x7F use this PKP\",\"image_data\": \"\0\0`\x89\x82\x01R\x86Qa\x15\xA4\x81`\xA7\x84\x01` \x8B\x01a\x0F\xECV[`\t\x81\x83\x01\x01\x91PP\x7F\",\"attributes\": [{\"trait_type\": `\x9E\x82\x01Rw\x11(:\xB164\xB1\x90%\xB2\xBC\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`A\x1B`\xBE\x82\x01Ra\x16\xACa\x16\x9Ca\x16\x96a\x16[a\x16Ua\x16\x10`\xD6\x87\x01\x8Ca\x11\xECV[\x7F\"}, {\"trait_type\": \"ETH Wallet A\x81Rr2292\xB9\xB9\x91\x16\x10\x11;0\xB6:\xB2\x91\x1D\x10\x11`i\x1B` \x82\x01R`3\x01\x90V[\x89a\x11\xECV[\x7F\"}, {\"trait_type\": \"Token ID\", \"\x81Rh;0\xB6:\xB2\x91\x1D\x10\x11`\xB9\x1B` \x82\x01R`)\x01\x90V[\x86a\x11\xECV[c\"}]}`\xE0\x1B\x81R`\x04\x01\x90V[\x98\x97PPPPPPPPV[`\0\x81a\x16\xC7Wa\x16\xC7a\x11XV[P`\0\x19\x01\x90V\xFEABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\xA2dipfsX\"\x12 \x11\x9F>\xFF\x15\xD9\xF5\xEA\x1C\x05_7\x90\x172\x96\x03\x0EY\x97>*\xD6`\xE8q\x1AU\xE2\xF03\x13dsolcC\0\x08\x1C\x003"; /// The deployed bytecode of the contract. pub static PKPNFTMETADATA_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( __DEPLOYED_BYTECODE, diff --git a/rust/lit-core/lit-blockchain/src/contracts/pubkey_router.rs b/rust/lit-core/lit-blockchain/src/contracts/pubkey_router.rs index 985e3f9..aef0880 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/pubkey_router.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/pubkey_router.rs @@ -671,6 +671,7 @@ pub mod pubkey_router { ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -781,6 +782,7 @@ pub mod pubkey_router { ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize), + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -868,6 +870,13 @@ pub mod pubkey_router { ::std::borrow::ToOwned::to_owned("bytes32"), ), }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("keySetIdentifier"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, ], outputs: ::std::vec![], constant: ::core::option::Option::None, @@ -924,6 +933,13 @@ pub mod pubkey_router { ::std::borrow::ToOwned::to_owned("bytes32"), ), }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("keySetIdentifier"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, ], outputs: ::std::vec![], constant: ::core::option::Option::None, @@ -1202,6 +1218,11 @@ pub mod pubkey_router { ), indexed: false, }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("keySetIdentifier"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, ], anonymous: false, }, @@ -1952,7 +1973,7 @@ pub mod pubkey_router { .method_hash([249, 93, 113, 177], new_resolver_address) .expect("method not found (this should never happen)") } - ///Calls the contract's `setRoutingData` (0x0fccbd62) function + ///Calls the contract's `setRoutingData` (0xff463de6) function pub fn set_routing_data( &self, token_id: ::ethers::core::types::U256, @@ -1960,21 +1981,23 @@ pub mod pubkey_router { staking_contract_address: ::ethers::core::types::Address, key_type: ::ethers::core::types::U256, derived_key_id: [u8; 32], + key_set_identifier: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash( - [15, 204, 189, 98], + [255, 70, 61, 230], ( token_id, pubkey, staking_contract_address, key_type, derived_key_id, + key_set_identifier, ), ) .expect("method not found (this should never happen)") } - ///Calls the contract's `setRoutingDataAsAdmin` (0x6e289d8e) function + ///Calls the contract's `setRoutingDataAsAdmin` (0x6c095735) function pub fn set_routing_data_as_admin( &self, token_id: ::ethers::core::types::U256, @@ -1982,11 +2005,19 @@ pub mod pubkey_router { staking_contract: ::ethers::core::types::Address, key_type: ::ethers::core::types::U256, derived_key_id: [u8; 32], + key_set_identifier: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash( - [110, 40, 157, 142], - (token_id, pubkey, staking_contract, key_type, derived_key_id), + [108, 9, 87, 53], + ( + token_id, + pubkey, + staking_contract, + key_type, + derived_key_id, + key_set_identifier, + ), ) .expect("method not found (this should never happen)") } @@ -2974,7 +3005,7 @@ pub mod pubkey_router { )] #[ethevent( name = "PubkeyRoutingDataSet", - abi = "PubkeyRoutingDataSet(uint256,bytes,address,uint256,bytes32)" + abi = "PubkeyRoutingDataSet(uint256,bytes,address,uint256,bytes32,string)" )] pub struct PubkeyRoutingDataSetFilter { #[ethevent(indexed)] @@ -2983,6 +3014,7 @@ pub mod pubkey_router { pub staking_contract: ::ethers::core::types::Address, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } #[derive( Clone, @@ -3560,7 +3592,7 @@ pub mod pubkey_router { pub struct SetContractResolverCall { pub new_resolver_address: ::ethers::core::types::Address, } - ///Container type for all input parameters for the `setRoutingData` function with signature `setRoutingData(uint256,bytes,address,uint256,bytes32)` and selector `0x0fccbd62` + ///Container type for all input parameters for the `setRoutingData` function with signature `setRoutingData(uint256,bytes,address,uint256,bytes32,string)` and selector `0xff463de6` #[derive( Clone, ::ethers::contract::EthCall, @@ -3575,7 +3607,7 @@ pub mod pubkey_router { )] #[ethcall( name = "setRoutingData", - abi = "setRoutingData(uint256,bytes,address,uint256,bytes32)" + abi = "setRoutingData(uint256,bytes,address,uint256,bytes32,string)" )] pub struct SetRoutingDataCall { pub token_id: ::ethers::core::types::U256, @@ -3583,8 +3615,9 @@ pub mod pubkey_router { pub staking_contract_address: ::ethers::core::types::Address, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } - ///Container type for all input parameters for the `setRoutingDataAsAdmin` function with signature `setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32)` and selector `0x6e289d8e` + ///Container type for all input parameters for the `setRoutingDataAsAdmin` function with signature `setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32,string)` and selector `0x6c095735` #[derive( Clone, ::ethers::contract::EthCall, @@ -3599,7 +3632,7 @@ pub mod pubkey_router { )] #[ethcall( name = "setRoutingDataAsAdmin", - abi = "setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32)" + abi = "setRoutingDataAsAdmin(uint256,bytes,address,uint256,bytes32,string)" )] pub struct SetRoutingDataAsAdminCall { pub token_id: ::ethers::core::types::U256, @@ -3607,6 +3640,7 @@ pub mod pubkey_router { pub staking_contract: ::ethers::core::types::Address, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } ///Container type for all input parameters for the `setTrustedForwarder` function with signature `setTrustedForwarder(address)` and selector `0xda742228` #[derive( @@ -4541,7 +4575,7 @@ pub mod pubkey_router { pub pubkey: ::ethers::core::types::Bytes, pub eth_address: ::ethers::core::types::Address, } - ///`PubkeyRoutingData(bytes,uint256,bytes32)` + ///`PubkeyRoutingData(bytes,uint256,bytes32,string)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -4558,5 +4592,6 @@ pub mod pubkey_router { pub pubkey: ::ethers::core::types::Bytes, pub key_type: ::ethers::core::types::U256, pub derived_key_id: [u8; 32], + pub key_set_identifier: ::std::string::String, } } diff --git a/rust/lit-core/lit-blockchain/src/contracts/staking.rs b/rust/lit-core/lit-blockchain/src/contracts/staking.rs index 36b9c83..468d110 100644 --- a/rust/lit-core/lit-blockchain/src/contracts/staking.rs +++ b/rust/lit-core/lit-blockchain/src/contracts/staking.rs @@ -1708,11 +1708,7 @@ pub mod staking { ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ), ), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Address, - ), - ), + ::ethers::core::abi::ethabi::ParamType::Bytes, ], ), internal_type: ::core::option::Option::Some( @@ -1727,30 +1723,6 @@ pub mod staking { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("getKeyTypes"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("getKeyTypes"), - inputs: ::std::vec![], - outputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256[]"), - ), - }, - ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("getKickedValidators"), ::std::vec![ @@ -3542,11 +3514,6 @@ pub mod staking { kind: ::ethers::core::abi::ethabi::ParamType::Tuple( ::std::vec![ ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -4170,11 +4137,7 @@ pub mod staking { ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ), ), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Address, - ), - ), + ::ethers::core::abi::ethabi::ParamType::Bytes, ], ), ), @@ -4831,6 +4794,7 @@ pub mod staking { ::ethers::core::abi::ethabi::ParamType::Bool, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -5121,11 +5085,6 @@ pub mod staking { kind: ::ethers::core::abi::ethabi::ParamType::Tuple( ::std::vec![ ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -5428,11 +5387,7 @@ pub mod staking { ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ), ), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Address, - ), - ), + ::ethers::core::abi::ethabi::ParamType::Bytes, ], ), internal_type: ::core::option::Option::Some( @@ -5687,6 +5642,7 @@ pub mod staking { ::ethers::core::abi::ethabi::ParamType::Bool, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Bool, + ::ethers::core::abi::ethabi::ParamType::String, ], ), internal_type: ::core::option::Option::Some( @@ -6419,96 +6375,6 @@ pub mod staking { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("ConfigSet"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConfigSet"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newTokenRewardPerTokenPerEpoch", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("newKeyTypes"), - kind: ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMinimumValidatorCount", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMaxConcurrentRequests", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMaxPresignCount", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMinPresignCount", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newPeerCheckingIntervalSecs", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newMaxPresignConcurrency", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "newRpcHealthcheckEnabled", - ), - kind: ::ethers::core::abi::ethabi::ParamType::Bool, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("CountOfflinePhaseData"), ::std::vec![ @@ -9383,17 +9249,6 @@ pub mod staking { .method_hash([163, 5, 229, 254], identifier) .expect("method not found (this should never happen)") } - ///Calls the contract's `getKeyTypes` (0xf1b877a8) function - pub fn get_key_types( - &self, - ) -> ::ethers::contract::builders::ContractCall< - M, - ::std::vec::Vec<::ethers::core::types::U256>, - > { - self.0 - .method_hash([241, 184, 119, 168], ()) - .expect("method not found (this should never happen)") - } ///Calls the contract's `getKickedValidators` (0x4b6afbbb) function pub fn get_kicked_validators( &self, @@ -10373,13 +10228,13 @@ pub mod staking { .method_hash([68, 14, 141, 34], (reason, config)) .expect("method not found (this should never happen)") } - ///Calls the contract's `setConfig` (0x077b0d40) function + ///Calls the contract's `setConfig` (0xd94c412d) function pub fn set_config( &self, new_config: GlobalConfig, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([7, 123, 13, 64], (new_config,)) + .method_hash([217, 76, 65, 45], (new_config,)) .expect("method not found (this should never happen)") } ///Calls the contract's `setContractResolver` (0xf95d71b1) function @@ -10461,13 +10316,13 @@ pub mod staking { .method_hash([44, 128, 181, 73], (ip, ipv_6, port, operator_address)) .expect("method not found (this should never happen)") } - ///Calls the contract's `setKeySet` (0x74d0be87) function + ///Calls the contract's `setKeySet` (0x774d0151) function pub fn set_key_set( &self, update: KeySetConfig, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([116, 208, 190, 135], (update,)) + .method_hash([119, 77, 1, 81], (update,)) .expect("method not found (this should never happen)") } ///Calls the contract's `setLitActionConfig` (0xe7d1f9a1) function @@ -10529,14 +10384,14 @@ pub mod staking { .method_hash([116, 162, 44, 81], (realm_id, permitted_validators_on)) .expect("method not found (this should never happen)") } - ///Calls the contract's `setRealmConfig` (0x7d35690f) function + ///Calls the contract's `setRealmConfig` (0x006d27b6) function pub fn set_realm_config( &self, realm_id: ::ethers::core::types::U256, new_config: RealmConfig, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([125, 53, 105, 15], (realm_id, new_config)) + .method_hash([0, 109, 39, 182], (realm_id, new_config)) .expect("method not found (this should never happen)") } ///Calls the contract's `setTokenTotalSupplyStandIn` (0xe941a733) function @@ -10761,16 +10616,6 @@ pub mod staking { > { self.0.event() } - ///Gets the contract's `ConfigSet` event - pub fn config_set_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - ConfigSetFilter, - > { - self.0.event() - } ///Gets the contract's `CountOfflinePhaseData` event pub fn count_offline_phase_data_filter( &self, @@ -14107,33 +13952,6 @@ pub mod staking { Eq, Hash )] - #[ethevent( - name = "ConfigSet", - abi = "ConfigSet(uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,bool)" - )] - pub struct ConfigSetFilter { - pub new_token_reward_per_token_per_epoch: ::ethers::core::types::U256, - pub new_key_types: ::std::vec::Vec<::ethers::core::types::U256>, - pub new_minimum_validator_count: ::ethers::core::types::U256, - pub new_max_concurrent_requests: ::ethers::core::types::U256, - pub new_max_presign_count: ::ethers::core::types::U256, - pub new_min_presign_count: ::ethers::core::types::U256, - pub new_peer_checking_interval_secs: ::ethers::core::types::U256, - pub new_max_presign_concurrency: ::ethers::core::types::U256, - pub new_rpc_healthcheck_enabled: bool, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash - )] #[ethevent(name = "CountOfflinePhaseData", abi = "CountOfflinePhaseData(uint256)")] pub struct CountOfflinePhaseDataFilter { pub data_type: ::ethers::core::types::U256, @@ -14785,7 +14603,6 @@ pub mod staking { AttestedWalletRegisteredFilter(AttestedWalletRegisteredFilter), ClearOfflinePhaseDataFilter(ClearOfflinePhaseDataFilter), ComplaintConfigSetFilter(ComplaintConfigSetFilter), - ConfigSetFilter(ConfigSetFilter), CountOfflinePhaseDataFilter(CountOfflinePhaseDataFilter), DebugEventFilter(DebugEventFilter), DevopsAdminSetFilter(DevopsAdminSetFilter), @@ -14838,9 +14655,6 @@ pub mod staking { if let Ok(decoded) = ComplaintConfigSetFilter::decode_log(log) { return Ok(StakingEvents::ComplaintConfigSetFilter(decoded)); } - if let Ok(decoded) = ConfigSetFilter::decode_log(log) { - return Ok(StakingEvents::ConfigSetFilter(decoded)); - } if let Ok(decoded) = CountOfflinePhaseDataFilter::decode_log(log) { return Ok(StakingEvents::CountOfflinePhaseDataFilter(decoded)); } @@ -14964,7 +14778,6 @@ pub mod staking { Self::ComplaintConfigSetFilter(element) => { ::core::fmt::Display::fmt(element, f) } - Self::ConfigSetFilter(element) => ::core::fmt::Display::fmt(element, f), Self::CountOfflinePhaseDataFilter(element) => { ::core::fmt::Display::fmt(element, f) } @@ -15083,11 +14896,6 @@ pub mod staking { Self::ComplaintConfigSetFilter(value) } } - impl ::core::convert::From for StakingEvents { - fn from(value: ConfigSetFilter) -> Self { - Self::ConfigSetFilter(value) - } - } impl ::core::convert::From for StakingEvents { fn from(value: CountOfflinePhaseDataFilter) -> Self { Self::CountOfflinePhaseDataFilter(value) @@ -16176,21 +15984,6 @@ pub mod staking { pub struct GetKeySetCall { pub identifier: ::std::string::String, } - ///Container type for all input parameters for the `getKeyTypes` function with signature `getKeyTypes()` and selector `0xf1b877a8` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "getKeyTypes", abi = "getKeyTypes()")] - pub struct GetKeyTypesCall; ///Container type for all input parameters for the `getKickedValidators` function with signature `getKickedValidators(uint256)` and selector `0x4b6afbbb` #[derive( Clone, @@ -17891,7 +17684,7 @@ pub mod staking { pub reason: ::ethers::core::types::U256, pub config: ComplaintConfig, } - ///Container type for all input parameters for the `setConfig` function with signature `setConfig((uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x077b0d40` + ///Container type for all input parameters for the `setConfig` function with signature `setConfig((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0xd94c412d` #[derive( Clone, ::ethers::contract::EthCall, @@ -17901,7 +17694,7 @@ pub mod staking { )] #[ethcall( name = "setConfig", - abi = "setConfig((uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))" + abi = "setConfig((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))" )] pub struct SetConfigCall { pub new_config: GlobalConfig, @@ -18055,7 +17848,7 @@ pub mod staking { pub port: u32, pub operator_address: ::ethers::core::types::Address, } - ///Container type for all input parameters for the `setKeySet` function with signature `setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],address[]))` and selector `0x74d0be87` + ///Container type for all input parameters for the `setKeySet` function with signature `setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],bytes))` and selector `0x774d0151` #[derive( Clone, ::ethers::contract::EthCall, @@ -18070,7 +17863,7 @@ pub mod staking { )] #[ethcall( name = "setKeySet", - abi = "setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],address[]))" + abi = "setKeySet((uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],bytes))" )] pub struct SetKeySetCall { pub update: KeySetConfig, @@ -18200,7 +17993,7 @@ pub mod staking { pub realm_id: ::ethers::core::types::U256, pub permitted_validators_on: bool, } - ///Container type for all input parameters for the `setRealmConfig` function with signature `setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool))` and selector `0x7d35690f` + ///Container type for all input parameters for the `setRealmConfig` function with signature `setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool,string))` and selector `0x006d27b6` #[derive( Clone, ::ethers::contract::EthCall, @@ -18215,7 +18008,7 @@ pub mod staking { )] #[ethcall( name = "setRealmConfig", - abi = "setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool))" + abi = "setRealmConfig(uint256,(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool,string))" )] pub struct SetRealmConfigCall { pub realm_id: ::ethers::core::types::U256, @@ -18616,7 +18409,6 @@ pub mod staking { GetDelegatedStakersWithUnfreezingStakesCountCall, ), GetKeySet(GetKeySetCall), - GetKeyTypes(GetKeyTypesCall), GetKickedValidators(GetKickedValidatorsCall), GetLastStakeRecord(GetLastStakeRecordCall), GetLitCirc(GetLitCircCall), @@ -18997,11 +18789,6 @@ pub mod staking { ) { return Ok(Self::GetKeySet(decoded)); } - if let Ok(decoded) = ::decode( - data, - ) { - return Ok(Self::GetKeyTypes(decoded)); - } if let Ok(decoded) = ::decode( data, ) { @@ -19776,9 +19563,6 @@ pub mod staking { Self::GetKeySet(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::GetKeyTypes(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::GetKickedValidators(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -20261,7 +20045,6 @@ pub mod staking { ::core::fmt::Display::fmt(element, f) } Self::GetKeySet(element) => ::core::fmt::Display::fmt(element, f), - Self::GetKeyTypes(element) => ::core::fmt::Display::fmt(element, f), Self::GetKickedValidators(element) => { ::core::fmt::Display::fmt(element, f) } @@ -20791,11 +20574,6 @@ pub mod staking { Self::GetKeySet(value) } } - impl ::core::convert::From for StakingCalls { - fn from(value: GetKeyTypesCall) -> Self { - Self::GetKeyTypes(value) - } - } impl ::core::convert::From for StakingCalls { fn from(value: GetKickedValidatorsCall) -> Self { Self::GetKickedValidators(value) @@ -21841,20 +21619,6 @@ pub mod staking { Hash )] pub struct GetKeySetReturn(pub KeySetConfig); - ///Container type for all return fields from the `getKeyTypes` function with signature `getKeyTypes()` and selector `0xf1b877a8` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetKeyTypesReturn(pub ::std::vec::Vec<::ethers::core::types::U256>); ///Container type for all return fields from the `getKickedValidators` function with signature `getKickedValidators(uint256)` and selector `0x4b6afbbb` #[derive( Clone, @@ -23152,7 +22916,7 @@ pub mod staking { pub start_time: ::ethers::core::types::U256, pub last_advance_vote_time: ::ethers::core::types::U256, } - ///`GlobalConfig(uint256,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)` + ///`GlobalConfig(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -23167,7 +22931,6 @@ pub mod staking { )] pub struct GlobalConfig { pub token_reward_per_token_per_epoch: ::ethers::core::types::U256, - pub key_types: ::std::vec::Vec<::ethers::core::types::U256>, pub minimum_validator_count: ::ethers::core::types::U256, pub reward_epoch_duration: ::ethers::core::types::U256, pub max_time_lock: ::ethers::core::types::U256, @@ -23189,7 +22952,7 @@ pub mod staking { pub min_threshold_to_clamp_at: ::ethers::core::types::U256, pub vote_to_advance_time_out: ::ethers::core::types::U256, } - ///`KeySetConfig(uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],address[])` + ///`KeySetConfig(uint32,uint32,bool,string,string,uint256[],uint256[],uint256[],bytes)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -23211,7 +22974,7 @@ pub mod staking { pub realms: ::std::vec::Vec<::ethers::core::types::U256>, pub curves: ::std::vec::Vec<::ethers::core::types::U256>, pub counts: ::std::vec::Vec<::ethers::core::types::U256>, - pub recovery_party_members: ::std::vec::Vec<::ethers::core::types::Address>, + pub recovery_session_id: ::ethers::core::types::Bytes, } ///`LitActionConfig(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)` #[derive( @@ -23257,7 +23020,7 @@ pub mod staking { pub node_address: ::ethers::core::types::Address, pub pub_key: UncompressedK256Key, } - ///`RealmConfig(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool)` + ///`RealmConfig(uint256,uint256,uint256,uint256,uint256,bool,uint256,bool,string)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -23279,6 +23042,7 @@ pub mod staking { pub rpc_healthcheck_enabled: bool, pub min_epoch_for_rewards: ::ethers::core::types::U256, pub permitted_validators_on: bool, + pub default_key_set: ::std::string::String, } ///`RewardEpoch(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)` #[derive( diff --git a/rust/lit-core/lit-blockchain/src/lib.rs b/rust/lit-core/lit-blockchain/src/lib.rs index db16762..adc074c 100644 --- a/rust/lit-core/lit-blockchain/src/lib.rs +++ b/rust/lit-core/lit-blockchain/src/lib.rs @@ -7,3 +7,9 @@ pub mod contracts; pub mod error; pub mod resolver; pub mod util; + +use ethers::prelude::*; +use k256::ecdsa::SigningKey; +use std::sync::Arc; + +pub type SignerProvider = SignerMiddleware>, Wallet>; diff --git a/rust/lit-core/lit-blockchain/src/resolver/contract/mod.rs b/rust/lit-core/lit-blockchain/src/resolver/contract/mod.rs index f6731fd..8ba1621 100644 --- a/rust/lit-core/lit-blockchain/src/resolver/contract/mod.rs +++ b/rust/lit-core/lit-blockchain/src/resolver/contract/mod.rs @@ -19,7 +19,6 @@ use lit_core::config::LitConfig; #[allow(unused_imports)] use lit_core::config::envs::LitEnv; -use crate::ReleaseRegister; use crate::config::LitBlockchainConfig; use crate::contracts::allowlist::Allowlist; use crate::contracts::backup_recovery::BackupRecovery; @@ -48,6 +47,7 @@ use crate::resolver::contract::config::SubnetConfig; use crate::resolver::rpc::{RPC_RESOLVER, RpcResolver}; use crate::util::ether::middleware::EIP2771GasRelayerMiddleware; use crate::util::ether::transaction_receipt_to_serde; +use crate::{ReleaseRegister, SignerProvider}; pub mod config; @@ -272,7 +272,7 @@ impl ContractResolver { pub async fn staking_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { Staking::load_with_signer( cfg, *self.resolve(cfg, STAKING_CONTRACT).await?.address(), @@ -282,17 +282,13 @@ impl ContractResolver { pub async fn staking_contract_with_signer_override( &self, cfg: &LitConfig, address: H160, wallet_key: Option<&str>, - ) -> Result>, Wallet>>> { + ) -> Result> { Staking::load_with_signer(cfg, address, wallet_key) } pub async fn staking_contract_with_gas_relay( &self, cfg: &LitConfig, meta_signer_key: impl Into, - ) -> Result< - Staking< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { Staking::load_with_gas_relay( cfg, *self.resolve(cfg, STAKING_CONTRACT).await?.address(), @@ -315,8 +311,7 @@ impl ContractResolver { pub async fn resolver_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> - { + ) -> Result> { ContractResolverContract::load_with_signer( cfg, *self.resolve(cfg, CONTRACT_RESOLVER_CONTRACT).await?.address(), @@ -334,7 +329,7 @@ impl ContractResolver { pub async fn release_register_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { ReleaseRegister::load_with_signer( cfg, *self.resolve(cfg, RELEASE_REGISTER_CONTRACT).await?.address(), @@ -352,7 +347,7 @@ impl ContractResolver { pub async fn multisender_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { Multisender::load_with_signer( cfg, *self.resolve(cfg, MULTI_SENDER_CONTRACT).await?.address(), @@ -368,7 +363,7 @@ impl ContractResolver { pub async fn lit_token_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { LITToken::load_with_signer( cfg, *self.resolve(cfg, LIT_TOKEN_CONTRACT).await?.address(), @@ -386,7 +381,7 @@ impl ContractResolver { pub async fn pub_key_router_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { PubkeyRouter::load_with_signer( cfg, *self.resolve(cfg, PUB_KEY_ROUTER_CONTRACT).await?.address(), @@ -396,11 +391,7 @@ impl ContractResolver { pub async fn pub_key_router_contract_with_gas_relay( &self, cfg: &LitConfig, meta_signer_key: impl Into, - ) -> Result< - PubkeyRouter< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { PubkeyRouter::load_with_gas_relay( cfg, *self.resolve(cfg, PUB_KEY_ROUTER_CONTRACT).await?.address(), @@ -418,7 +409,7 @@ impl ContractResolver { pub async fn pkp_nft_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { PKPNFT::load_with_signer( cfg, *self.resolve(cfg, PKP_NFT_CONTRACT).await?.address(), @@ -428,11 +419,7 @@ impl ContractResolver { pub async fn pkp_nft_contract_with_gas_relay( &self, cfg: &LitConfig, meta_signer_key: impl Into, - ) -> Result< - PKPNFT< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { PKPNFT::load_with_gas_relay( cfg, *self.resolve(cfg, PKP_NFT_CONTRACT).await?.address(), @@ -449,7 +436,7 @@ impl ContractResolver { pub async fn pkp_helper_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { PKPHelper::load_with_signer( cfg, *self.resolve(cfg, PKP_HELPER_CONTRACT).await?.address(), @@ -467,7 +454,7 @@ impl ContractResolver { pub async fn pkp_permissions_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { PKPPermissions::load_with_signer( cfg, *self.resolve(cfg, PKP_PERMISSIONS_CONTRACT).await?.address(), @@ -477,11 +464,7 @@ impl ContractResolver { pub async fn pkp_permissions_contract_with_gas_relay( &self, cfg: &LitConfig, meta_signer_key: impl Into, - ) -> Result< - PKPPermissions< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { PKPPermissions::load_with_gas_relay( cfg, *self.resolve(cfg, PKP_PERMISSIONS_CONTRACT).await?.address(), @@ -501,7 +484,7 @@ impl ContractResolver { pub async fn pkp_nft_metadata_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { PKPNFTMetadata::load_with_signer( cfg, *self.resolve(cfg, PKP_NFT_METADATA_CONTRACT).await?.address(), @@ -517,7 +500,7 @@ impl ContractResolver { pub async fn allowlist_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { Allowlist::load_with_signer( cfg, *self.resolve(cfg, ALLOWLIST_CONTRACT).await?.address(), @@ -534,7 +517,7 @@ impl ContractResolver { pub async fn backup_recovery_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { BackupRecovery::load_with_signer( cfg, *self.resolve(cfg, BACKUP_RECOVERY_CONTRACT).await?.address(), @@ -544,7 +527,7 @@ impl ContractResolver { pub async fn backup_recovery_contract_with_signer_override( &self, cfg: &LitConfig, address: Address, private_key_bytes: &str, - ) -> Result>, Wallet>>> { + ) -> Result> { BackupRecovery::load_with_signer(cfg, address, Some(private_key_bytes)) } @@ -555,7 +538,7 @@ impl ContractResolver { pub async fn ledger_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { Ledger::load_with_signer( cfg, *self.resolve(cfg, LEDGER_CONTRACT).await?.address(), @@ -565,11 +548,7 @@ impl ContractResolver { pub async fn ledger_contract_with_gas_relay( &self, cfg: &LitConfig, meta_signer_key: impl Into, - ) -> Result< - Ledger< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { Ledger::load_with_gas_relay( cfg, *self.resolve(cfg, LEDGER_CONTRACT).await?.address(), @@ -591,7 +570,7 @@ impl ContractResolver { pub async fn payment_delegation_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { PaymentDelegation::load_with_signer( cfg, *self.resolve(cfg, PAYMENT_DELEGATION_CONTRACT).await?.address(), @@ -606,7 +585,7 @@ impl ContractResolver { pub async fn price_feed_contract_with_signer( &self, cfg: &LitConfig, - ) -> Result>, Wallet>>> { + ) -> Result> { PriceFeed::load_with_signer( cfg, *self.resolve(cfg, PRICE_FEED_CONTRACT).await?.address(), @@ -616,11 +595,7 @@ impl ContractResolver { pub async fn price_feed_contract_with_gas_relay( &self, cfg: &LitConfig, meta_signer_key: impl Into, - ) -> Result< - PriceFeed< - EIP2771GasRelayerMiddleware>, Wallet>>, - >, - > { + ) -> Result>> { PriceFeed::load_with_gas_relay( cfg, *self.resolve(cfg, PRICE_FEED_CONTRACT).await?.address(), diff --git a/rust/lit-core/lit-blockchain/src/resolver/rpc/mod.rs b/rust/lit-core/lit-blockchain/src/resolver/rpc/mod.rs index 2f20ea8..5f814d6 100644 --- a/rust/lit-core/lit-blockchain/src/resolver/rpc/mod.rs +++ b/rust/lit-core/lit-blockchain/src/resolver/rpc/mod.rs @@ -52,7 +52,7 @@ impl<'a> StandardRpcHealthcheckPoller<'a> { } } -impl<'a> RpcHealthcheckPoller for StandardRpcHealthcheckPoller<'a> { +impl RpcHealthcheckPoller for StandardRpcHealthcheckPoller<'_> { fn get_latencies(&self) -> &ArcSwap> { &self.latencies } @@ -392,16 +392,16 @@ impl RpcResolver { } fn create_provider(rpc_entry: &RpcEntry) -> Result>> { - let http_cache = HTTP_CLIENT.get_or_init(|| scc::HashIndex::default()); + let http_cache = HTTP_CLIENT.get_or_init(scc::HashIndex::default); - let guard = scc::ebr::Guard::new(); + let guard = scc::Guard::new(); let provider = match http_cache.peek(rpc_entry.url(), &guard) { Some(provider) => provider.clone(), None => { let provider = Arc::new(rpc_provider(rpc_entry)?); - http_cache - .insert(rpc_entry.url().to_owned(), provider.clone()) - .map_err(|_| unexpected_err("how does it already exist?", None))?; + // If it already exists, we'll temporarily have two providers which is okay + // Once this one goes out of scope, it will be dropped freeing resources + let _ = http_cache.insert_sync(rpc_entry.url().to_owned(), provider.clone()); provider } }; diff --git a/rust/lit-core/lit-blockchain/src/util/ether.rs b/rust/lit-core/lit-blockchain/src/util/ether.rs index 136c4c1..e6ce91a 100644 --- a/rust/lit-core/lit-blockchain/src/util/ether.rs +++ b/rust/lit-core/lit-blockchain/src/util/ether.rs @@ -189,15 +189,18 @@ pub mod middleware { let typed_tx: Eip1559TransactionRequest = match typed_tx { TypedTransaction::Legacy(legacy_tx) => { // Map to Eip1559TransactionRequest - let mut eip1559_tx = Eip1559TransactionRequest::default(); - eip1559_tx.from = legacy_tx.from; - eip1559_tx.to = legacy_tx.to; - eip1559_tx.value = legacy_tx.value; - eip1559_tx.gas = legacy_tx.gas; - eip1559_tx.nonce = legacy_tx.nonce; - eip1559_tx.data = legacy_tx.data; - eip1559_tx.chain_id = legacy_tx.chain_id; - eip1559_tx + Eip1559TransactionRequest { + from: legacy_tx.from, + to: legacy_tx.to, + value: legacy_tx.value, + gas: legacy_tx.gas, + nonce: legacy_tx.nonce, + data: legacy_tx.data, + chain_id: legacy_tx.chain_id, + access_list: Default::default(), + max_priority_fee_per_gas: Default::default(), + max_fee_per_gas: Default::default(), + } } TypedTransaction::Eip1559(tx) => tx, _ => return Err(EIP2771GasRelayerMiddlewareError::UnsupportedTransactionType), @@ -240,10 +243,10 @@ pub mod middleware { .0, ), value: alloy::primitives::U256::from_limbs( - U256::from(typed_tx.value.unwrap_or(U256::from(0))).0, + typed_tx.value.unwrap_or_else(U256::zero).0, ), gas: alloy::primitives::U256::from_limbs(gas.0), - nonce: alloy::primitives::U256::from_limbs(U256::from(nonce).0), + nonce: alloy::primitives::U256::from_limbs(nonce.0), data: alloy::primitives::Bytes::from( typed_tx .data diff --git a/rust/lit-core/lit-blockchain/src/util/mod.rs b/rust/lit-core/lit-blockchain/src/util/mod.rs index a0db13c..3755009 100644 --- a/rust/lit-core/lit-blockchain/src/util/mod.rs +++ b/rust/lit-core/lit-blockchain/src/util/mod.rs @@ -59,9 +59,9 @@ where stringified_error.strip_prefix("Contract call reverted with data: "); if let Some(revert_bytes_str) = maybe_revert_bytes_str { // Check if the length of the string is even and >0. - if revert_bytes_str.len() % 2 == 0 && revert_bytes_str.len() > 0 { + if revert_bytes_str.len() % 2 == 0 && !revert_bytes_str.is_empty() { // Convert to bytes - let revert_bytes = match Bytes::from_hex(revert_bytes_str) { + match Bytes::from_hex(revert_bytes_str) { Ok(bytes) => bytes, Err(conversion_err) => { return format!( @@ -69,9 +69,7 @@ where conversion_err ); } - }; - - revert_bytes + } } else { return format!("Contract Error is not a revert error: {:?}", e); } diff --git a/rust/lit-core/lit-core/src/error/mod.rs b/rust/lit-core/lit-core/src/error/mod.rs index a716229..81c6c43 100644 --- a/rust/lit-core/lit-core/src/error/mod.rs +++ b/rust/lit-core/lit-core/src/error/mod.rs @@ -129,11 +129,7 @@ impl Error { where K: Into, { - let mut fields = match self.inner.fields.take() { - Some(v) => v, - None => HashMap::new(), - }; - + let mut fields = self.inner.fields.take().unwrap_or_default(); fields.insert(key.into(), value); self.inner.fields = Some(fields); self @@ -777,7 +773,7 @@ mod tests { assert_eq!( err, - "lit_core::Error { kind: Unexpected, code: CoreFatal, msg: \"fatal-1\", source: lit_core::Error { kind: SevSnp, msg: \"sev-snp\", source: lit_core::Error { kind: Generic, source: \"first\", caller: { file: \"lit-core/src/error/mod.rs:772:19\" } }, caller: { file: \"lit-core/src/error/mod.rs:773:19\" } }, caller: { file: \"lit-core/src/error/mod.rs:774:19\" } }" + "lit_core::Error { kind: Unexpected, code: CoreFatal, msg: \"fatal-1\", source: lit_core::Error { kind: SevSnp, msg: \"sev-snp\", source: lit_core::Error { kind: Generic, source: \"first\", caller: { file: \"lit-core/src/error/mod.rs:768:19\" } }, caller: { file: \"lit-core/src/error/mod.rs:769:19\" } }, caller: { file: \"lit-core/src/error/mod.rs:770:19\" } }" ); } diff --git a/rust/lit-core/lit-core/src/error/serializer.rs b/rust/lit-core/lit-core/src/error/serializer.rs index 3777658..7edcda6 100644 --- a/rust/lit-core/lit-core/src/error/serializer.rs +++ b/rust/lit-core/lit-core/src/error/serializer.rs @@ -4,7 +4,6 @@ use serde::ser::SerializeStruct; use serde::{Serialize, Serializer}; /// NB: This is intended for structured logging and not to send as a HTTP response object. - impl Serialize for Error { fn serialize(&self, serializer: S) -> Result where @@ -78,7 +77,7 @@ mod tests { assert_eq!( json, - "{\"pkg\":\"lit_core\",\"kind\":\"Unexpected\",\"code\":\"CoreFatal\",\"msg\":\"fatal-1\",\"source\":{\"pkg\":\"lit_core\",\"kind\":\"SevSnp\",\"msg\":\"sev-snp\",\"source\":{\"pkg\":\"lit_core\",\"kind\":\"Generic\",\"source\":\"first\",\"caller\":{\"file\":\"lit-core/src/error/serializer.rs:73:19\"}},\"caller\":{\"file\":\"lit-core/src/error/serializer.rs:74:19\"}},\"caller\":{\"file\":\"lit-core/src/error/serializer.rs:75:19\"}}" + "{\"pkg\":\"lit_core\",\"kind\":\"Unexpected\",\"code\":\"CoreFatal\",\"msg\":\"fatal-1\",\"source\":{\"pkg\":\"lit_core\",\"kind\":\"SevSnp\",\"msg\":\"sev-snp\",\"source\":{\"pkg\":\"lit_core\",\"kind\":\"Generic\",\"source\":\"first\",\"caller\":{\"file\":\"lit-core/src/error/serializer.rs:72:19\"}},\"caller\":{\"file\":\"lit-core/src/error/serializer.rs:73:19\"}},\"caller\":{\"file\":\"lit-core/src/error/serializer.rs:74:19\"}}" ); } } diff --git a/rust/lit-core/lit-core/src/error/unexpected.rs b/rust/lit-core/lit-core/src/error/unexpected.rs index 6eb9d6e..5e8eab9 100644 --- a/rust/lit-core/lit-core/src/error/unexpected.rs +++ b/rust/lit-core/lit-core/src/error/unexpected.rs @@ -69,16 +69,14 @@ where { match self { Ok(v) => Ok(v), - Err(e) => { - return Err(Error::new( - Some(Kind::Unexpected), - err_pkg_name(), - Some(format!("unexpected err in Result: {}", msg.as_ref())), - None, - Some(e), - Some(Location::caller()), - )); - } + Err(e) => Err(Error::new( + Some(Kind::Unexpected), + err_pkg_name(), + Some(format!("unexpected err in Result: {}", msg.as_ref())), + None, + Some(e), + Some(Location::caller()), + )), } } @@ -91,16 +89,14 @@ where { match self { Ok(v) => Ok(v), - Err(e) => { - return Err(Error::new( - Some(Kind::Unexpected), - err_pkg_name(), - Some(format!("unexpected err in Result: {}", msg.as_ref())), - Some(Arc::new(code)), - Some(e), - Some(Location::caller()), - )); - } + Err(e) => Err(Error::new( + Some(Kind::Unexpected), + err_pkg_name(), + Some(format!("unexpected err in Result: {}", msg.as_ref())), + Some(Arc::new(code)), + Some(e), + Some(Location::caller()), + )), } } } diff --git a/rust/lit-core/lit-core/src/logging/kv.rs b/rust/lit-core/lit-core/src/logging/kv.rs index 9ef0537..864a775 100644 --- a/rust/lit-core/lit-core/src/logging/kv.rs +++ b/rust/lit-core/lit-core/src/logging/kv.rs @@ -32,7 +32,7 @@ impl<'a, 'kvs> Visitor<'kvs> for InlineKVVisitor<'a> { pub struct FieldCollectorKVVisitor<'a>(pub &'a mut Map); -impl<'a, 'kvs> Visitor<'kvs> for FieldCollectorKVVisitor<'a> { +impl<'kvs> Visitor<'kvs> for FieldCollectorKVVisitor<'_> { fn visit_pair(&mut self, key: Key<'kvs>, value: Value<'kvs>) -> Result<(), KVError> { let value = if let Some(err) = value.to_borrowed_error() { if let Some(err) = err.downcast_ref::() { @@ -55,7 +55,7 @@ impl<'a, 'kvs> Visitor<'kvs> for FieldCollectorKVVisitor<'a> { } } -impl<'a> tracing::field::Visit for FieldCollectorKVVisitor<'a> { +impl tracing::field::Visit for FieldCollectorKVVisitor<'_> { fn record_f64(&mut self, field: &tracing::field::Field, value: f64) { if let Ok(value) = serde_json::to_value(value) { self.0.insert(field.name().to_string(), value); diff --git a/rust/lit-core/lit-core/src/utils/backtrace.rs b/rust/lit-core/lit-core/src/utils/backtrace.rs index 8ee97ad..2e50933 100644 --- a/rust/lit-core/lit-core/src/utils/backtrace.rs +++ b/rust/lit-core/lit-core/src/utils/backtrace.rs @@ -4,7 +4,7 @@ use std::panic::PanicHookInfo; pub fn backtrace_to_vec(backtrace: &Backtrace) -> Vec { let backtrace_str = format!("{backtrace}"); let backtrace: Vec = - backtrace_str.split('\n').map(|s| s.trim().to_string()).filter(|s| !s.eq("")).collect(); + backtrace_str.split('\n').map(|s| s.trim().to_string()).filter(|s| !s.is_empty()).collect(); backtrace } diff --git a/rust/lit-core/lit-core/src/utils/env.rs b/rust/lit-core/lit-core/src/utils/env.rs index db09dfe..8d11e8b 100644 --- a/rust/lit-core/lit-core/src/utils/env.rs +++ b/rust/lit-core/lit-core/src/utils/env.rs @@ -40,7 +40,7 @@ pub fn parse_env(reader: &mut BufReader) -> Result(), + &std::mem::take(&mut substitution_name), &mut output, ); if c == '$' { @@ -273,7 +273,7 @@ fn parse_value( substitution_mode = SubstitutionMode::None; apply_substitution( substitution_data, - &substitution_name.drain(..).collect::(), + &std::mem::take(&mut substitution_name), &mut output, ); } else { @@ -317,11 +317,7 @@ fn parse_value( if value_length == 0 { 0 } else { value_length - 1 }, )) } else { - apply_substitution( - substitution_data, - &substitution_name.drain(..).collect::(), - &mut output, - ); + apply_substitution(substitution_data, &std::mem::take(&mut substitution_name), &mut output); Ok(output) } } diff --git a/rust/lit-core/lit-core/src/utils/tar.rs b/rust/lit-core/lit-core/src/utils/tar.rs index 48fbf94..0472447 100644 --- a/rust/lit-core/lit-core/src/utils/tar.rs +++ b/rust/lit-core/lit-core/src/utils/tar.rs @@ -134,8 +134,7 @@ pub fn write_tar_gz(dir_to_pack: impl AsRef, output: impl Write) -> Result } let encoder = flate2::write::GzEncoder::new(output, flate2::Compression::default()); let mut builder = tar_file::Builder::new(encoder); - let name = - dir_to_pack.file_name().map(|p| PathBuf::from(p)).unwrap_or_else(|| PathBuf::from("")); + let name = dir_to_pack.file_name().map(PathBuf::from).unwrap_or_else(|| PathBuf::from("")); builder.append_dir_all(name, dir_to_pack).map_err(|e| { io_err(e, Some(format!("Unable to append directory {} to tar file", dir_to_pack.display()))) })?; diff --git a/rust/lit-core/lit-fast-ecdsa/src/error.rs b/rust/lit-core/lit-fast-ecdsa/src/error.rs index da5c262..bb1d5b6 100644 --- a/rust/lit-core/lit-fast-ecdsa/src/error.rs +++ b/rust/lit-core/lit-fast-ecdsa/src/error.rs @@ -54,8 +54,7 @@ pub enum EcdsaError { /// Invalid round 3 payload error #[error("Invalid round 3 payload")] InvalidRound3Payload, - /// Invalid round 4 payload error - /// Insufficient shares error + /// Insufficient round 1 payloads error #[error("Insufficient round 1 payloads received")] InsufficientRound1Payloads, /// Invalid ID in commitment or share error @@ -67,7 +66,6 @@ pub enum EcdsaError { /// Insufficient round 3 payloads error #[error("Insufficient round 3 payloads received")] InsufficientRound3Payloads, - /// Invalid round 4 payload error /// Invalid computed pre-signature big R error #[error("Invalid computed pre-signature big R")] InvalidBigR, diff --git a/rust/lit-core/lit-recovery/src/lib.rs b/rust/lit-core/lit-recovery/src/lib.rs index 23d548c..04f5ed6 100644 --- a/rust/lit-core/lit-recovery/src/lib.rs +++ b/rust/lit-core/lit-recovery/src/lib.rs @@ -571,14 +571,11 @@ impl LitRecovery { self.config.store(new_config); } Commands::SetConfig { address, chain_id, rpc_url, env } => { - let config = self.config.load(); - let new_config = Arc::new(RecoveryConfig { resolver_address: Some(address.clone()), chain_id: Some(chain_id), rpc_url: Some(rpc_url.clone()), environment: Some(env), - ..config.as_ref().clone() }); new_config.save(self.config_path.clone())?; diff --git a/rust/lit-node/Cargo.lock b/rust/lit-node/Cargo.lock index 4e973ae..fc11d8c 100644 --- a/rust/lit-node/Cargo.lock +++ b/rust/lit-node/Cargo.lock @@ -2128,28 +2128,16 @@ dependencies = [ "typenum", ] -[[package]] -name = "bitvec" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" -dependencies = [ - "funty 1.1.0", - "radium 0.6.2", - "tap", - "wyz 0.2.0", -] - [[package]] name = "bitvec" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ - "funty 2.0.0", - "radium 0.7.0", + "funty", + "radium", "tap", - "wyz 0.5.1", + "wyz", ] [[package]] @@ -3109,7 +3097,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ - "bitvec 1.0.1", + "bitvec", "coins-bip32", "hmac 0.12.1", "once_cell", @@ -6296,28 +6284,13 @@ dependencies = [ "uuid 0.8.2", ] -[[package]] -name = "ethabi" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c98847055d934070b90e806e12d3936b787d0a115068981c1d8dfd5dfef5a5" -dependencies = [ - "ethereum-types 0.12.1", - "hex", - "serde", - "serde_json", - "sha3 0.9.1", - "thiserror 1.0.69", - "uint", -] - [[package]] name = "ethabi" version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ - "ethereum-types 0.14.1", + "ethereum-types", "hex", "once_cell", "regex", @@ -6328,19 +6301,6 @@ dependencies = [ "uint", ] -[[package]] -name = "ethbloom" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb684ac8fa8f6c5759f788862bb22ec6fe3cb392f6bfd08e3c64b603661e3f8" -dependencies = [ - "crunchy", - "fixed-hash 0.7.0", - "impl-rlp", - "impl-serde 0.3.2", - "tiny-keccak", -] - [[package]] name = "ethbloom" version = "0.13.0" @@ -6348,40 +6308,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ "crunchy", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", + "impl-serde", "scale-info", "tiny-keccak", ] -[[package]] -name = "ethereum-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05136f7057fe789f06e6d41d07b34e6f70d8c86e5693b60f97aaa6553553bdaf" -dependencies = [ - "ethbloom 0.11.1", - "fixed-hash 0.7.0", - "impl-rlp", - "impl-serde 0.3.2", - "primitive-types 0.10.1", - "uint", -] - [[package]] name = "ethereum-types" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "ethbloom 0.13.0", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "ethbloom", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", - "primitive-types 0.12.2", + "impl-serde", + "primitive-types", "scale-info", "uint", ] @@ -6485,7 +6431,7 @@ dependencies = [ "chrono", "const-hex", "elliptic-curve 0.13.8", - "ethabi 18.0.0", + "ethabi", "generic-array 0.14.7", "k256 0.13.4", "num_enum 0.7.4", @@ -6811,7 +6757,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ - "bitvec 1.0.1", + "bitvec", "rand_core 0.6.4", "subtle", ] @@ -6854,18 +6800,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - [[package]] name = "fixed-hash" version = "0.8.0" @@ -7264,12 +7198,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "funty" version = "2.0.0" @@ -8714,22 +8642,13 @@ dependencies = [ "zune-jpeg", ] -[[package]] -name = "impl-codec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" -dependencies = [ - "parity-scale-codec 2.3.1", -] - [[package]] name = "impl-codec" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.7.5", + "parity-scale-codec", ] [[package]] @@ -8741,15 +8660,6 @@ dependencies = [ "rlp", ] -[[package]] -name = "impl-serde" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" -dependencies = [ - "serde", -] - [[package]] name = "impl-serde" version = "0.4.0" @@ -9239,7 +9149,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8499f7a74008aafbecb2a2e608a3e13e4dd3e84df198b604451efe93f2de6e61" dependencies = [ - "bitvec 1.0.1", + "bitvec", "bls12_381", "ff 0.13.1", "group 0.13.0", @@ -9253,7 +9163,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2c5e88d1ac6a903e693287073860ea35299b200273d5c2bd9d7845ec39f319" dependencies = [ - "bitvec 1.0.1", + "bitvec", "bls12_381_plus", "elliptic-curve 0.13.8", "ff 0.13.1", @@ -9699,7 +9609,7 @@ dependencies = [ "atty", "deno_core", "deno_error", - "ethabi 18.0.0", + "ethabi", "flume", "lazy_static", "lit-actions-grpc", @@ -9785,7 +9695,7 @@ dependencies = [ "opentelemetry_sdk 0.24.1", "reqwest 0.11.27", "rocket", - "scc 3.3.2", + "scc", "sd-notify", "semver 1.0.26", "serde", @@ -9846,7 +9756,7 @@ dependencies = [ "moka 0.12.10", "once_cell", "reqwest 0.11.27", - "scc 2.4.0", + "scc", "serde", "serde_json", "serde_yaml 0.9.34+deprecated", @@ -10027,7 +9937,7 @@ dependencies = [ "rand_chacha 0.3.1", "rand_core 0.6.4", "reqwest 0.11.27", - "sdd 3.0.10", + "sdd", "serde", "serde_json", "serdect 0.3.0", @@ -10049,7 +9959,7 @@ dependencies = [ "decaf377 0.10.1 (git+https://github.com/LIT-Protocol/decaf377?rev=1c5755b2b90e1969d47ce89cf2d35078984a0ee5)", "ed25519-dalek 2.2.0", "ed448-goldilocks-plus", - "ethabi 16.0.0", + "ethabi", "ethers", "hd-keys-curves-wasm 1.0.3 (git+https://github.com/LIT-Protocol/hd-keys-curves-wasm)", "hex", @@ -10273,7 +10183,7 @@ dependencies = [ "ed25519-dalek 2.2.0", "ed448-goldilocks-plus", "elliptic-curve 0.13.8", - "ethabi 16.0.0", + "ethabi", "ethers", "flume", "frost-dkg", @@ -10311,6 +10221,7 @@ dependencies = [ "lit-recovery", "lit-sdk", "lit-vrf", + "log", "maplit", "moka 0.12.10", "mpl-token-metadata", @@ -10336,8 +10247,8 @@ dependencies = [ "rsa 0.7.0-pre", "rstest", "rusqlite", - "scc 2.4.0", - "sdd 3.0.10", + "scc", + "sdd", "semver 1.0.26", "serde", "serde_bare", @@ -11426,7 +11337,7 @@ dependencies = [ "arrayvec 0.7.6", "auto_impl", "bytes", - "ethereum-types 0.14.1", + "ethereum-types", "open-fastrlp-derive", ] @@ -11825,20 +11736,6 @@ dependencies = [ "group 0.13.0", ] -[[package]] -name = "parity-scale-codec" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" -dependencies = [ - "arrayvec 0.7.6", - "bitvec 0.20.4", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive 2.3.1", - "serde", -] - [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -11846,27 +11743,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec 0.7.6", - "bitvec 1.0.1", + "bitvec", "byte-slice-cast", "const_format", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.7.5", + "parity-scale-codec-derive", "rustversion", "serde", ] -[[package]] -name = "parity-scale-codec-derive" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2 1.0.101", - "quote 1.0.40", - "syn 1.0.109", -] - [[package]] name = "parity-scale-codec-derive" version = "3.7.5" @@ -12504,29 +12389,16 @@ dependencies = [ "elliptic-curve 0.13.8", ] -[[package]] -name = "primitive-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" -dependencies = [ - "fixed-hash 0.7.0", - "impl-codec 0.5.1", - "impl-rlp", - "impl-serde 0.3.2", - "uint", -] - [[package]] name = "primitive-types" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", + "impl-serde", "scale-info", "uint", ] @@ -12928,12 +12800,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "radium" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" - [[package]] name = "radium" version = "0.7.0" @@ -13660,8 +13526,8 @@ dependencies = [ "num-bigint", "num-integer", "num-traits", - "parity-scale-codec 3.7.5", - "primitive-types 0.12.2", + "parity-scale-codec", + "primitive-types", "proptest", "rand 0.8.5", "rand 0.9.2", @@ -14083,7 +13949,7 @@ checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if 1.0.3", "derive_more 1.0.0", - "parity-scale-codec 3.7.5", + "parity-scale-codec", "scale-info-derive", ] @@ -14099,15 +13965,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd 3.0.10", -] - [[package]] name = "scc" version = "3.3.2" @@ -14115,7 +13972,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd0b9e1890c5b17833a779c68a974f04170dfa36e3789395d17845418cc779ac" dependencies = [ "saa", - "sdd 4.2.4", + "sdd", ] [[package]] @@ -14234,12 +14091,6 @@ dependencies = [ "libc", ] -[[package]] -name = "sdd" -version = "3.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" - [[package]] name = "sdd" version = "4.2.4" @@ -15811,7 +15662,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" dependencies = [ "base64-simd 0.7.0", - "bitvec 1.0.1", + "bitvec", "data-encoding", "debugid", "if_chain", @@ -15830,7 +15681,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22afbcb92ce02d23815b9795523c005cb9d3c214f8b7a66318541c240ea7935" dependencies = [ "base64-simd 0.8.0", - "bitvec 1.0.1", + "bitvec", "data-encoding", "debugid", "if_chain", @@ -18628,8 +18479,8 @@ dependencies = [ "base64 0.21.7", "bytes", "derive_more 0.99.20", - "ethabi 18.0.0", - "ethereum-types 0.14.1", + "ethabi", + "ethereum-types", "futures", "futures-timer", "headers", @@ -19423,12 +19274,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c01ae8492c38f52376efd3a17d0994b6bcf3df1e39c0226d458b7d81670b2a06" -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "wyz" version = "0.5.1" diff --git a/rust/lit-node/Cargo.toml b/rust/lit-node/Cargo.toml index 5190dcd..005599a 100644 --- a/rust/lit-node/Cargo.toml +++ b/rust/lit-node/Cargo.toml @@ -27,16 +27,16 @@ edition = "2024" [workspace.dependencies] async-std = "1.13" async-trait = "0.1" -blsful = "3.0.0-pre8" +blsful = "3.0.0" bulletproofs = { git = "https://github.com/LIT-Protocol/bulletproofs", rev = "ddf11c2f593e71f24c9a3d64c56f62d82f2b5099" } curve25519-dalek = { package = "curve25519-dalek-ml", version="4.3.0", features = ["group", "serde", "rand_core"] } -data-encoding = "2.8" +data-encoding = "2.9" decaf377 = { git = "https://github.com/LIT-Protocol/decaf377", rev = "1c5755b2b90e1969d47ce89cf2d35078984a0ee5", features = ["serde"] } derive_more = { version = "2" , features = ["display"] } ed25519-dalek = { version = "2.2", features = ["rand_core"] } ed448-goldilocks = { version = "0.16", package = "ed448-goldilocks-plus", features = ["serde"] } elliptic-curve = { version = "0.13", features = ["arithmetic", "serde"] } -ethabi = "16.0.0" +ethabi = "18.0.0" ethers = { version = "2.0.8", features = [ "abigen", "legacy" @@ -48,7 +48,7 @@ reqwest = { version = "0.11.14", default-features = false, features = ["json", " rand = "0.8" rand_core = "0.6" rand_chacha = "0.3.1" -sdd = "3" +sdd = "4.2.4" sha2 = "0.10.9" sha3 = "0.10.8" serde = { version = "1.0", features = ["derive"] } diff --git a/rust/lit-node/lit-node-core/src/models/ability.rs b/rust/lit-node/lit-node-core/src/models/ability.rs index cd5f4f0..bc7c481 100644 --- a/rust/lit-node/lit-node-core/src/models/ability.rs +++ b/rust/lit-node/lit-node-core/src/models/ability.rs @@ -1,13 +1,18 @@ use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] +/// Abilities that can be granted via authentication signatures. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)] pub enum LitAbility { - // Used by top level auth sigs + /// Ability to decrypt data protected by access control conditions. AccessControlConditionDecryption, + /// Ability to sign data protected by access control conditions. AccessControlConditionSigning, + /// Ability to use PKP (Programmable Key Pair) for signing. PKPSigning, + /// Ability to execute Lit Actions (serverless functions). LitActionExecution, + /// Ability to delegate payment for operations. PaymentDelegationAuth, } diff --git a/rust/lit-node/lit-node-core/src/models/attestation.rs b/rust/lit-node/lit-node-core/src/models/attestation.rs index a6b3fa8..d5e960e 100644 --- a/rust/lit-node/lit-node-core/src/models/attestation.rs +++ b/rust/lit-node/lit-node-core/src/models/attestation.rs @@ -3,11 +3,14 @@ use serde::{Deserialize, Serialize}; use std::fmt::{self, Display, Formatter}; use std::str::FromStr; -#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)] +/// Supported attestation types for node verification. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)] #[serde(rename_all = "SCREAMING_SNAKE_CASE")] #[allow(unused)] pub enum AttestationType { + /// AMD SEV-SNP (Secure Encrypted Virtualization - Secure Nested Paging) attestation. AmdSevSnp, + /// Admin-signed attestation for development/testing. AdminSigned, } diff --git a/rust/lit-node/lit-node-core/src/models/endpoint_version.rs b/rust/lit-node/lit-node-core/src/models/endpoint_version.rs index 3d2cd99..a839a43 100644 --- a/rust/lit-node/lit-node-core/src/models/endpoint_version.rs +++ b/rust/lit-node/lit-node-core/src/models/endpoint_version.rs @@ -1,10 +1,14 @@ use serde::{Deserialize, Serialize}; -#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +/// API endpoint version identifier. +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] pub enum EndpointVersion { + /// Original API version (no version prefix). #[default] Initial, + /// Version 1 of the API. V1, + /// Version 2 of the API. V2, } diff --git a/rust/lit-node/lit-node-core/src/models/invocation.rs b/rust/lit-node/lit-node-core/src/models/invocation.rs index 95314ba..efa2bb3 100644 --- a/rust/lit-node/lit-node-core/src/models/invocation.rs +++ b/rust/lit-node/lit-node-core/src/models/invocation.rs @@ -1,9 +1,12 @@ use serde::{Deserialize, Serialize}; +/// Execution mode for Lit Actions. #[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub enum Invocation { + /// Synchronous execution - waits for result (default). #[default] Sync, + /// Asynchronous execution - returns immediately. Async, } diff --git a/rust/lit-node/lit-node-core/src/models/request.rs b/rust/lit-node/lit-node-core/src/models/request.rs index f924745..c88f0ac 100644 --- a/rust/lit-node/lit-node-core/src/models/request.rs +++ b/rust/lit-node/lit-node-core/src/models/request.rs @@ -9,7 +9,7 @@ use serde_json::Value; #[derive(Clone, Debug, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct JsonSDKHandshakeRequest { +pub struct SDKHandshakeRequest { pub client_public_key: String, pub challenge: Option, } diff --git a/rust/lit-node/lit-node-core/src/models/response.rs b/rust/lit-node/lit-node-core/src/models/response.rs index d4c057e..1d62d82 100644 --- a/rust/lit-node/lit-node-core/src/models/response.rs +++ b/rust/lit-node/lit-node-core/src/models/response.rs @@ -2,11 +2,31 @@ use super::{DynamicPaymentItem, SignableOutput, SignedData, default_epoch}; use blsful::{Bls12381G2Impl, SignatureShare}; use serde::{Deserialize, Serialize, de::DeserializeOwned}; use serde_json::Value; -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; #[derive(Clone, Debug, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct JsonSDKHandshakeResponse { +pub struct SDKHandshakeResponseV1 { + pub client_sdk_version: String, + pub attestation: Option, + pub latest_blockhash: String, + pub node_version: String, + pub node_identity_key: String, + pub git_commit_hash: String, + pub key_sets: BTreeMap, +} + +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct KeySetHandshake { + pub realm_id: u64, + #[serde(default = "default_epoch")] + pub epoch: u64, +} + +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct SDKHandshakeResponseV0 { pub server_public_key: String, pub subnet_public_key: String, pub network_public_key: String, diff --git a/rust/lit-node/lit-node-core/src/models/signed_data.rs b/rust/lit-node/lit-node-core/src/models/signed_data.rs index 17092fc..e521b5f 100644 --- a/rust/lit-node/lit-node-core/src/models/signed_data.rs +++ b/rust/lit-node/lit-node-core/src/models/signed_data.rs @@ -1,10 +1,15 @@ use serde::{Deserialize, Serialize}; +/// Data representing a signature share from a distributed signing operation. #[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SignedData { + /// The type of signature (e.g., "ECDSA", "BLS"). pub sig_type: String, + /// The signature share value (hex-encoded). pub signature_share: String, + /// The public key associated with this signature (hex-encoded). pub public_key: String, + /// Human-readable name for this signature. pub sig_name: String, } diff --git a/rust/lit-node/lit-node-core/src/models/signing_scheme.rs b/rust/lit-node/lit-node-core/src/models/signing_scheme.rs index 091d8da..df2290f 100644 --- a/rust/lit-node/lit-node-core/src/models/signing_scheme.rs +++ b/rust/lit-node/lit-node-core/src/models/signing_scheme.rs @@ -3,23 +3,33 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::fmt::{self, Display, Formatter}; use std::str::FromStr; -#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)] +/// Cryptographic signing algorithm types supported by the system. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)] pub enum SigningAlgorithm { + /// Pairing-based cryptography (e.g., BLS signatures). Pairing, + /// Elliptic Curve Digital Signature Algorithm. Ecdsa, + /// Schnorr signature scheme. Schnorr, } -#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)] +/// Preference for public key encoding format. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)] pub enum KeyFormatPreference { + /// Full uncompressed point representation. Uncompressed, + /// Compressed point representation (x-coordinate with sign bit). Compressed, } -#[derive(Clone, Copy, Debug, Default, Hash, Eq, PartialEq)] +/// Comprehensive signing schemes combining curve type, signature algorithm, and hash function. +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Hash)] pub enum SigningScheme { + /// BLS12-381 pairing-based signatures (default). #[default] Bls12381, + /// ECDSA on secp256k1 with SHA-256. EcdsaK256Sha256, EcdsaP256Sha256, EcdsaP384Sha384, diff --git a/rust/lit-node/lit-node-testnet/src/end_user/pkp.rs b/rust/lit-node/lit-node-testnet/src/end_user/pkp.rs index 6ef7696..3959a4b 100644 --- a/rust/lit-node/lit-node-testnet/src/end_user/pkp.rs +++ b/rust/lit-node/lit-node-testnet/src/end_user/pkp.rs @@ -18,6 +18,7 @@ pub struct Pkp { pub pubkey: String, pub token_id: U256, pub eth_address: H160, + pub key_set_id: String, } impl Pkp { @@ -88,11 +89,17 @@ impl Pkp { pubkey: pubkey.clone(), token_id, eth_address, + key_set_id: "naga-keyset1".to_string(), }) } - pub fn info(&self) -> (String, U256, H160) { - (self.pubkey.clone(), self.token_id, self.eth_address) + pub fn info(&self) -> (String, U256, H160, String) { + ( + self.pubkey.clone(), + self.token_id, + self.eth_address, + self.key_set_id.clone(), + ) } #[doc = "Grant an address permission to use a PKP"] @@ -349,6 +356,7 @@ impl Pkp { actions: Arc::new(end_user.actions().clone()), pubkey, token_id, + key_set_id: "naga-keyset1".to_string(), eth_address: eth_address.into(), }) } diff --git a/rust/lit-node/lit-node-testnet/src/node_collection.rs b/rust/lit-node/lit-node-testnet/src/node_collection.rs index 0671222..d2f0710 100644 --- a/rust/lit-node/lit-node-testnet/src/node_collection.rs +++ b/rust/lit-node/lit-node-testnet/src/node_collection.rs @@ -5,7 +5,7 @@ use ethers::types::U256; use ethers::utils::hex; use futures::future::join_all; use lit_node_core::response::GenericResponse; -use lit_node_core::response::JsonSDKHandshakeResponse; +use lit_node_core::response::SDKHandshakeResponseV0; use std::collections::HashMap; use std::collections::HashSet; use std::fmt::Debug; @@ -199,7 +199,7 @@ pub async fn get_identity_pubkeys_from_node_set( async fn handshake_nodes( actions: &Actions, realm_id: U256, -) -> Vec> { +) -> Vec> { let validators = actions.get_current_validator_structs(realm_id).await; let node_set = validators .iter() diff --git a/rust/lit-node/lit-node-testnet/src/testnet/actions.rs b/rust/lit-node/lit-node-testnet/src/testnet/actions.rs index 6758013..92cf726 100644 --- a/rust/lit-node/lit-node-testnet/src/testnet/actions.rs +++ b/rust/lit-node/lit-node-testnet/src/testnet/actions.rs @@ -1269,4 +1269,51 @@ impl Actions { } Ok(()) } + + pub async fn add_second_keyset(&self, realm_id: U256) -> Result<()> { + let update_key_set_request = staking::KeySetConfig { + minimum_threshold: 3, + monetary_value: 0, + complete_isolation: false, + identifier: "naga_keyset_2".to_string(), + description: "Naga Keyset 2".to_string(), + realms: vec![realm_id], + curves: vec![ + U256::from(1), + U256::from(2), + U256::from(3), + U256::from(4), + U256::from(5), + U256::from(6), + U256::from(7), + U256::from(8), + U256::from(9), + U256::from(10), + ], + counts: vec![ + U256::from(1), + U256::from(2), + U256::from(2), + U256::from(2), + U256::from(2), + U256::from(2), + U256::from(2), + U256::from(2), + U256::from(2), + U256::from(2), + ], + recovery_session_id: Bytes::from_static(&[]), + }; + + let cc = self.contracts.staking.set_key_set(update_key_set_request); + let result = cc + .send() + .await + .map_err(|e| anyhow::anyhow!("Error sending tx to add second keyset! {:?}", e))?; + let _result = result.log_msg("add_second_keyset").await.map_err(|e| { + anyhow::anyhow!("Error waiting for successful add second keyset tx! {:?}", e) + })?; + info!("Second keyset added successfully"); + Ok(()) + } } diff --git a/rust/lit-node/lit-node-testnet/src/testnet/contracts.rs b/rust/lit-node/lit-node-testnet/src/testnet/contracts.rs index f5da6c0..b3fd746 100644 --- a/rust/lit-node/lit-node-testnet/src/testnet/contracts.rs +++ b/rust/lit-node/lit-node-testnet/src/testnet/contracts.rs @@ -81,6 +81,7 @@ pub struct StakingContractRealmConfigBuilder { peer_checking_interval_secs: Option, max_presign_concurrency: Option, complaint_reason_to_config: Option>, + default_key_set: Option, } impl StakingContractRealmConfigBuilder { @@ -138,6 +139,11 @@ impl StakingContractRealmConfigBuilder { self } + pub fn default_key_set(mut self, value: Option) -> Self { + self.default_key_set = value; + self + } + pub fn build(self) -> StakingContractRealmConfig { StakingContractRealmConfig { realm_id: self.realm_id.unwrap_or(U256::from(1)), @@ -148,6 +154,7 @@ impl StakingContractRealmConfigBuilder { peer_checking_interval_secs: self.peer_checking_interval_secs, max_presign_concurrency: self.max_presign_concurrency, complaint_reason_to_config: self.complaint_reason_to_config, + default_key_set: self.default_key_set, } } } @@ -228,6 +235,7 @@ pub struct StakingContractRealmConfig { peer_checking_interval_secs: Option, max_presign_concurrency: Option, complaint_reason_to_config: Option>, + default_key_set: Option, } #[derive(Default)] @@ -732,14 +740,8 @@ impl Contracts { .await .map_err(|e| anyhow::anyhow!("unable to get staking config: {:?}", e))?; - let key_types = staking - .get_key_types() - .call() - .await - .map_err(|e| anyhow::anyhow!("unable to get key types: {:?}", e))?; let cc = staking.set_config(GlobalConfig { token_reward_per_token_per_epoch: global_config.token_reward_per_token_per_epoch, - key_types: key_types, reward_epoch_duration: U256::from(86400), // 1 day max_time_lock: U256::from(31536000), // 1 year min_time_lock: U256::from(86400 * 100), // 100 days diff --git a/rust/lit-node/lit-node-testnet/src/validator.rs b/rust/lit-node/lit-node-testnet/src/validator.rs index 0b8177d..9f2da11 100644 --- a/rust/lit-node/lit-node-testnet/src/validator.rs +++ b/rust/lit-node/lit-node-testnet/src/validator.rs @@ -36,7 +36,7 @@ use tracing::error; use tracing::trace; use tracing::{debug, info, warn}; -use lit_node_core::response::JsonSDKHandshakeResponse; +use lit_node_core::response::SDKHandshakeResponseV0; use super::testnet::NodeAccount; use super::testnet::Testnet; @@ -1398,7 +1398,7 @@ impl Node { let response = Self::handshake(port).await?; let response_text = response.text().await?; - let handshake_json = serde_json::from_str::(&response_text)?; + let handshake_json = serde_json::from_str::(&response_text)?; Ok(handshake_json.epoch) } @@ -1658,6 +1658,6 @@ pub fn default_keyset_config() -> KeySetConfig { counts: std::iter::once(U256::from(1)) .chain(CurveType::into_iter().skip(1).map(|_| U256::from(2))) .collect(), - recovery_party_members: Vec::new(), + recovery_session_id: Bytes::from_static(&[]), } } diff --git a/rust/lit-node/lit-node/Cargo.lock b/rust/lit-node/lit-node/Cargo.lock index 8747199..0b44c14 100644 --- a/rust/lit-node/lit-node/Cargo.lock +++ b/rust/lit-node/lit-node/Cargo.lock @@ -11863,15 +11863,6 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "scc" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e1c91382686d21b5ac7959341fcb9780fa7c03773646995a87c950fa7be640" -dependencies = [ - "sdd", -] - [[package]] name = "schannel" version = "0.1.27" diff --git a/rust/lit-node/lit-node/Cargo.toml b/rust/lit-node/lit-node/Cargo.toml index 079d39d..dc2e6c7 100644 --- a/rust/lit-node/lit-node/Cargo.toml +++ b/rust/lit-node/lit-node/Cargo.toml @@ -130,7 +130,7 @@ p384 = { version = "0.13", features = [ postcard = { version = "1.1.1", features = ["use-std"] } prost = "0.13" ripemd = "0.1.3" -scc = "2" +scc = "3.3.2" sdd.workspace = true semver = "1.0.22" serde.workspace = true @@ -171,6 +171,7 @@ x25519-dalek = { version = "2.0", features = ["static_secrets"] } xor_name = "3.0.0" xorf = { version = "0.8.1", features = ["serde"] } tokio-stream = "0.1.17" +log = "0.4.27" [dependencies.lit-node-common] path = "../lit-node-common" diff --git a/rust/lit-node/lit-node/src/common/key_helper.rs b/rust/lit-node/lit-node/src/common/key_helper.rs index 0328b69..6db0f4e 100644 --- a/rust/lit-node/lit-node/src/common/key_helper.rs +++ b/rust/lit-node/lit-node/src/common/key_helper.rs @@ -65,8 +65,9 @@ impl Default for KeyCache { impl Debug for KeyCache { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { let mut entries = Vec::with_capacity(self.0.len()); - self.0.scan(|key, value| { + self.0.iter_sync(|key, value| { entries.push(key.clone()); + true }); write!(f, "KeyCache {{ {:#?} }}", entries) } @@ -75,8 +76,9 @@ impl Debug for KeyCache { impl Display for KeyCache { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { let mut entries = Vec::with_capacity(self.0.len()); - self.0.scan(|key, value| { + self.0.iter_sync(|key, value| { entries.push(key.clone()); + true }); write!(f, "KeyCache {{ {} }}", entries.join(", ")) } diff --git a/rust/lit-node/lit-node/src/config/chain.rs b/rust/lit-node/lit-node/src/config/chain.rs index a388516..eefc4d0 100644 --- a/rust/lit-node/lit-node/src/config/chain.rs +++ b/rust/lit-node/lit-node/src/config/chain.rs @@ -10,14 +10,16 @@ use moka::future::Cache; use rocket::serde::{Deserialize, Serialize}; use sdd::AtomicShared; use sha2::{Digest, Sha256}; -use std::collections::{HashMap, HashSet}; +use std::collections::{BTreeMap, HashMap, HashSet}; use std::sync::Arc; use std::time::Duration; use tokio::sync::mpsc; use tracing::{Instrument, debug_span, info, instrument, trace, warn}; -use crate::error::{EC, Result, blockchain_err, conversion_err, io_err, unexpected_err_code}; -use crate::models::PeerValidator; +use crate::error::{ + EC, Result, blockchain_err, conversion_err, io_err, unexpected_err, unexpected_err_code, +}; +use crate::models::{KeySetConfig, PeerValidator}; use crate::payment::dynamic::{LitActionPriceConfig, NodePriceMeasurement}; use crate::payment::payed_endpoint::PayedEndpoint; use crate::peers::peer_reviewer::MAX_COMPLAINT_REASON_VALUE; @@ -46,13 +48,13 @@ impl std::fmt::Display for PeerGroupEpoch { #[derive(Debug, Serialize, Deserialize, Clone)] pub struct GenericConfig { pub token_reward_per_token_per_epoch: u64, - pub key_types: Vec, pub minimum_validator_count: u64, pub max_presign_count: u64, pub min_presign_count: u64, pub peer_checking_interval_secs: u64, pub max_presign_concurrency: u64, pub rpc_healthcheck_enabled: bool, + pub default_key_set: Option, } #[derive(Clone, Copy, Debug, Serialize, Deserialize)] @@ -104,10 +106,10 @@ pub struct ChainDataConfigManager { pub peers: PeersByRealm, pub shadow_peers: PeersByRealm, pub realm_id: AtomicShared, + pub key_sets: AtomicShared>, pub shadow_realm_id: AtomicShared, pub staker_address: AtomicShared
, pub config: ReloadableLitConfig, - pub root_keys: AtomicShared>, pub generic_config: AtomicShared, pub actions_config: AtomicShared, pub complaint_reason_to_config: Cache, @@ -167,17 +169,17 @@ impl ChainDataConfigManager { realm_id: AtomicShared::new(U256::from(0)), staker_address: AtomicShared::new(Address::zero()), shadow_realm_id: AtomicShared::new(U256::from(0)), + key_sets: AtomicShared::new(BTreeMap::new()), config, - root_keys: AtomicShared::new(Vec::new()), generic_config: AtomicShared::new(GenericConfig { token_reward_per_token_per_epoch: 0, - key_types: Vec::new(), minimum_validator_count: 2, - max_presign_count: 0, - min_presign_count: 0, + max_presign_count: 25, + min_presign_count: 10, peer_checking_interval_secs: 5, max_presign_concurrency: 2, rpc_healthcheck_enabled: false, + default_key_set: None, }), actions_config: AtomicShared::new(ActionsConfig { timeout_ms: 30000, @@ -237,7 +239,7 @@ impl ChainDataConfigManager { warn!("Error setting peer and epoch config: {e:?}"); } - let res = self.set_root_keys_from_chain().await; + let res = self.set_key_sets_from_chain().await; if let Err(e) = res { warn!("Error setting root pubkeys from chain: {e:?}"); } @@ -279,50 +281,68 @@ impl ChainDataConfigManager { } #[instrument(level = "debug", skip_all)] - pub(crate) async fn set_root_keys_from_chain(&self) -> Result<()> { + pub(crate) async fn set_key_sets_from_chain(&self) -> Result<()> { + let Some(realm_id) = self.get_realm_id() else { + return Err(unexpected_err("realm_id needs to be set", None)); + }; let (config, contract_resolver) = self.get_config_with_resolver()?; let staking_contract = contract_resolver.staking_contract(&config).await?; + + let block_chain_key_sets = + staking_contract.key_sets().call().await.map_err(|e| { + blockchain_err(e, Some("Unable to get key sets from contract".into())) + })?; let staking_contract_address = staking_contract.address(); let contract = contract_resolver.pub_key_router_contract(&config).await?; - let root_keys: Vec = contract - .get_root_keys( - staking_contract_address, - crate::tss::util::DEFAULT_KEY_SET_NAME.to_string(), - ) - .call() - .await - .map_err(|e| blockchain_err(e, Some("Unable to get root keys from contract".into())))?; - - let mut cache = Vec::with_capacity(root_keys.len()); - for k in root_keys.into_iter() { - cache.push(CachedRootKey { - public_key: bytes_to_hex(&k.pubkey), - curve_type: CurveType::try_from(k.key_type).map_err(|e| io_err(e, None))?, - }); + let mut key_sets = BTreeMap::new(); + for key_set_config in block_chain_key_sets { + trace!("Fetching root keys for key set: {:?}", key_set_config); + let root_keys = contract + .get_root_keys(staking_contract_address, key_set_config.identifier.clone()) + .call() + .await + .map_err(|e| { + let revert = decode_revert(&e, contract.abi()); + blockchain_err( + e, + Some(format!("Unable to get root keys from contract: {}", revert)), + ) + })?; + let mut key_set = KeySetConfig::try_from(key_set_config)?; + for k in root_keys.into_iter() { + let curve_type = CurveType::try_from(k.key_type).map_err(|e| io_err(e, None))?; + let public_key = bytes_to_hex(&k.pubkey); + let public_key_clone = public_key.clone(); + key_set + .root_keys_by_curve + .entry(curve_type) + .and_modify(|pubkeys| pubkeys.push(public_key)) + .or_insert_with(|| vec![public_key_clone]); + } + let entry = key_sets.entry(key_set.identifier.clone()); + let key_set_clone = key_set.clone(); + entry.and_modify(|v| *v = key_set).or_insert(key_set_clone); } - DataVersionWriter::store(&self.root_keys, cache); + DataVersionWriter::store(&self.key_sets, key_sets); + Ok(()) } pub fn get_realm_id(&self) -> Option { - let realm_id = DataVersionReader::new(&self.realm_id).map(|r| *r); - if realm_id == Some(U256::zero()) { + let realm_id = DataVersionReader::new(&self.realm_id).map(|r| *r)?; + if realm_id.is_zero() { return None; } - realm_id + Some(realm_id) } pub fn get_shadow_realm_id(&self) -> Option { - let realm_id = DataVersionReader::new(&self.shadow_realm_id).map(|r| *r); - if realm_id == Some(U256::zero()) { + let realm_id = DataVersionReader::new(&self.shadow_realm_id).map(|r| *r)?; + if realm_id.is_zero() { return None; } - realm_id - } - - pub fn root_keys(&self) -> Vec { - DataVersionReader::new_unchecked(&self.root_keys).clone() + Some(realm_id) } pub fn get_actions_config(&self) -> ActionsConfig { @@ -348,30 +368,17 @@ impl ChainDataConfigManager { DataVersionWriter::store(&self.staker_address, my_staker_address); let realm_id = staking - .get_realm_id_for_staker_address(my_staker_address) - .call() - .await - .map_err(|e| { - blockchain_err( - decode_revert(&e, staking.abi()), - Some("Unable to contact chain to get realm id for node in the current/next epoch".into()), - ) - }); - - let realm_id = match realm_id { - Ok(realm_id) => realm_id, - Err(e) => { - return Err(blockchain_err( - anyhow::Error::msg(format!( - "Unable to get realm id for node with staker {:?} in the current/next epoch", - my_staker_address - )), - None, - )); - } - }; + .get_realm_id_for_staker_address(my_staker_address) + .call() + .await + .map_err(|e| { + blockchain_err( + decode_revert(&e, staking.abi()), + Some(format!("Unable to contact chain to get realm id for node with staker {:?} in the current/next epoch", my_staker_address)), + ) + })?; - if realm_id == U256::zero() { + if realm_id.is_zero() { // return an error if the realm id is zero return Err(blockchain_err( anyhow::Error::msg( @@ -391,7 +398,7 @@ impl ChainDataConfigManager { let shadow_realm_id = shadow_realm_id.unwrap_or_else(|e| U256::from(0)); - if shadow_realm_id != U256::zero() { + if !shadow_realm_id.is_zero() { DataVersionWriter::store(&self.shadow_realm_id, shadow_realm_id); } @@ -411,7 +418,7 @@ impl ChainDataConfigManager { trace!("set_peer_and_epoch_data_from_chain"); - if realm_id != U256::from(0) { + if !realm_id.is_zero() { self.set_peers_and_epoch_data_from_chain_by_realm(realm_id, &self.peers) .await?; } @@ -430,12 +437,8 @@ impl ChainDataConfigManager { trace!("set_dynamic_payment_config_from_chain()"); let configs = self.get_lit_action_price_configs().await?; + DataVersionWriter::store(&self.dynamic_lit_action_price_configs, configs); - let mut dynamic_payment_config = - DataVersionWriter::new_unchecked(&self.dynamic_lit_action_price_configs); - dynamic_payment_config.clear(); - dynamic_payment_config.extend(configs.into_iter()); - dynamic_payment_config.commit(); Ok(()) } @@ -630,11 +633,6 @@ impl ChainDataConfigManager { .token_reward_per_token_per_epoch .as_u64(); - let key_types = staking_contract_config - .key_types - .iter() - .map(|k| CurveType::try_from(*k).expect("Key Types in Staking Config should be valid.")) - .collect::>(); let minimum_validator_count = staking_contract_config.minimum_validator_count.as_u64(); let realm_config = contract.realm_config(realm_id).call().await.map_err(|e| { @@ -646,15 +644,20 @@ impl ChainDataConfigManager { let peer_checking_interval_secs = realm_config.peer_checking_interval_secs.as_u64(); let max_presign_concurrency = realm_config.max_presign_concurrency.as_u64(); let rpc_healthcheck_enabled = realm_config.rpc_healthcheck_enabled; + let default_key_set = if realm_config.default_key_set.is_empty() { + None + } else { + Some(realm_config.default_key_set) + }; let mut generic_config = DataVersionWriter::new_unchecked(&self.generic_config); - generic_config.key_types = key_types; generic_config.minimum_validator_count = minimum_validator_count; generic_config.max_presign_count = max_presign_count; generic_config.min_presign_count = min_presign_count; generic_config.peer_checking_interval_secs = peer_checking_interval_secs; generic_config.max_presign_concurrency = max_presign_concurrency; generic_config.rpc_healthcheck_enabled = rpc_healthcheck_enabled; + generic_config.default_key_set = default_key_set; let lit_actions_config = contract @@ -813,7 +816,7 @@ impl ChainDataConfigManager { current_or_next: PeerGroupEpoch, realm_id: U256, ) -> Result> { - if realm_id == U256::from(0) { + if realm_id.is_zero() { return Ok(vec![]); } diff --git a/rust/lit-node/lit-node/src/endpoints/admin/endpoints.rs b/rust/lit-node/lit-node/src/endpoints/admin/endpoints.rs index 86ae670..94534e2 100644 --- a/rust/lit-node/lit-node/src/endpoints/admin/endpoints.rs +++ b/rust/lit-node/lit-node/src/endpoints/admin/endpoints.rs @@ -8,6 +8,7 @@ use crate::tss::common::restore::{NodeRecoveryStatus, RestoreState, report_progr use crate::auth::auth_material::JsonAuthSigExtended; use crate::tss::common::tss_state::TssState; +use crate::version::DataVersionReader; use chrono::{DateTime, Utc}; use lit_api_core::error::ApiError; use lit_blockchain::resolver::rpc::config::{RPC_CONFIG_PROTECTED_CHAINS, RpcConfig}; @@ -257,13 +258,33 @@ pub async fn admin_get_key_backup( Ok(peer) => peer, Err(e) => return Err(e.handle()), }; - let root_keys = tss_state.chain_data_config_manager.root_keys(); + let default_key_set = DataVersionReader::read_field_unchecked( + &tss_state.chain_data_config_manager.generic_config, + |generic_config| generic_config.default_key_set.clone(), + ); + let key_set_root_keys = DataVersionReader::read_field_unchecked( + &tss_state.chain_data_config_manager.key_sets, + |key_sets| match &default_key_set { + Some(id) => match key_sets.get(id) { + Some(key_set) => Ok(key_set.root_keys_by_curve.clone()), + None => Err( + unexpected_err(format!("No key set root keys exist for {}", id), None).handle(), + ), + }, + None => match key_sets.first_key_value() { + Some((_id, key_set)) => Ok(key_set.root_keys_by_curve.clone()), + None => { + Err(unexpected_err("No key sets exist for backup".to_string(), None).handle()) + } + }, + }, + )?; // Zip up and encrypt. match encrypt_and_tar_backup_keys( cfg, self_peer.peer_id, - &root_keys, + &key_set_root_keys, &blinders, &recovery_party, &peers, diff --git a/rust/lit-node/lit-node/src/endpoints/admin/utils.rs b/rust/lit-node/lit-node/src/endpoints/admin/utils.rs index b895b46..4e3f6a9 100644 --- a/rust/lit-node/lit-node/src/endpoints/admin/utils.rs +++ b/rust/lit-node/lit-node/src/endpoints/admin/utils.rs @@ -32,7 +32,6 @@ use tokio::process::Command; use tokio_stream::StreamExt; use tracing::trace; -use crate::config::chain::CachedRootKey; use crate::endpoints::auth_sig::{LITNODE_ADMIN_RES, check_auth_sig}; use crate::error::{EC, Result, io_err, io_err_code, unexpected_err}; use crate::peers::peer_state::models::SimplePeerCollection; @@ -69,7 +68,7 @@ fn blinder_comm_fn(curve_type: CurveType) -> String { pub(crate) async fn encrypt_and_tar_backup_keys( cfg: Arc, peer_id: PeerId, - root_keys: &[CachedRootKey], + key_set_root_keys: &HashMap>, blinders: &Blinders, recovery_party: &RecoveryParty, peers: &SimplePeerCollection, @@ -114,17 +113,10 @@ pub(crate) async fn encrypt_and_tar_backup_keys( let key_cache = KeyCache::default(); let mut tasks = tokio::task::JoinSet::new(); - let mut root_keys_map = HashMap::with_capacity(root_keys.len()); - for root_key in root_keys { - root_keys_map - .entry(root_key.curve_type) - .and_modify(|v: &mut Vec| v.push(root_key.public_key.clone())) - .or_insert(vec![root_key.public_key.clone()]); - } let write_curve_recovery_data_args = Arc::new(WriteCurveRecoveryDataArgs { cfg: cfg.clone(), peer_id, - root_keys: root_keys_map, + root_keys: key_set_root_keys.clone(), epoch, staker_address: staker_address.clone(), peers: peers.clone(), @@ -436,6 +428,19 @@ pub(crate) async fn untar_keys_stream( let threshold = read_from_disk(path.clone(), RECOVERY_PARTY_THRESHOLD_FN).await?; trace!("Threshold: {:?}", threshold); + let session_id: String = read_from_disk(path.clone(), SESSION_ID_FN).await?; + trace!( + "Session id: backup {}, key_set {}", + session_id, + restore_state.get_expected_recovery_session_id() + ); + + let peers: Result = read_from_disk(path.clone(), PEERS_FN).await; + if let Ok(peers) = peers { + // Might be missing for legacy reasons + trace!("Peers: {:?}", peers); + } + let bls_recovery_data = read_curve_recovery_data::( blinders.bls_blinder, G1Projective::GENERATOR, @@ -856,7 +861,6 @@ fn parse_k256_blinder(blinder_str: &str) -> Result<::Scalar> { #[cfg(test)] mod test { use crate::common::key_helper::KeyCache; - use crate::config::chain::CachedRootKey; use crate::endpoints::admin::utils::{encrypt_and_tar_backup_keys, untar_keys_stream}; use crate::peers::peer_state::models::{SimplePeer, SimplePeerCollection}; use crate::tests::key_shares::{ @@ -965,6 +969,11 @@ mod test { .expect("Failed to get staker address"); let bls_key_helper = KeyPersistence::::new(CurveType::BLS); let k256_key_helper = KeyPersistence::::new(CurveType::K256); + let recovery_party = get_test_recovery_party_with_encryption_keys(); + let key_set_root_keys = maplit::hashmap! { + CurveType::BLS => vec!["83fc126ef56547bb28734a4a5393a873b8c22a9ba2d507036285a506567b2b3a376fc524cd589bb018613e24c51ebbae".to_string()], + CurveType::K256 => vec!["0268c27a16f03d19949f0a64d58c71ea32049b754888211cc25827f5449d26bf74".to_string()], + }; // Make sure that there is at least one ECDSA and one BLS key share. let bls_key: KeyShare = serde_json::from_str(TEST_BLS_KEY_SHARE).unwrap(); @@ -1047,17 +1056,6 @@ mod test { // Call the function to be tested let blinders = RestoreState::generate_blinders(); - let recovery_party = get_test_recovery_party_with_encryption_keys(); - let root_keys = vec![ - CachedRootKey { - public_key: bls_key.hex_public_key.clone(), - curve_type: CurveType::BLS, - }, - CachedRootKey { - public_key: k256_key.hex_public_key.clone(), - curve_type: CurveType::K256, - }, - ]; let peers = SimplePeerCollection(vec![SimplePeer { socket_address: "127.0.0.1".to_string(), peer_id: bls_key.peer_id, @@ -1071,7 +1069,7 @@ mod test { let child = encrypt_and_tar_backup_keys( cfg.clone(), bls_key.peer_id, - &root_keys, + &key_set_root_keys, &blinders, &recovery_party, &peers, diff --git a/rust/lit-node/lit-node/src/endpoints/pkp.rs b/rust/lit-node/lit-node/src/endpoints/pkp.rs index 72011f7..a849cc0 100644 --- a/rust/lit-node/lit-node/src/endpoints/pkp.rs +++ b/rust/lit-node/lit-node/src/endpoints/pkp.rs @@ -69,7 +69,7 @@ pub(crate) async fn pkp_sign( let resource_ability = resource.signing_ability(); // Validate auth sig item - let bls_root_pubkey = match get_bls_root_pubkey(tss_state).await { + let bls_root_pubkey = match get_bls_root_pubkey(tss_state, None) { Ok(bls_root_pubkey) => bls_root_pubkey, Err(e) => { return client_session diff --git a/rust/lit-node/lit-node/src/endpoints/versions/initial.rs b/rust/lit-node/lit-node/src/endpoints/versions/initial.rs index 8e874b0..b4e750c 100644 --- a/rust/lit-node/lit-node/src/endpoints/versions/initial.rs +++ b/rust/lit-node/lit-node/src/endpoints/versions/initial.rs @@ -14,7 +14,7 @@ use lit_api_core::error::ApiError; use lit_core::config::ReloadableLitConfig; use lit_node_common::client_state::ClientState; use lit_node_core::{ - request::{self, EncryptionSignRequest, JsonPKPClaimKeyRequest, JsonSDKHandshakeRequest}, + request::{self, EncryptionSignRequest, JsonPKPClaimKeyRequest, SDKHandshakeRequest}, response::GenericResponse, }; use lit_sdk::EncryptedPayload; @@ -247,7 +247,7 @@ curl --header "Content-Type: application/json" \ pub async fn handshake( session: &State>, remote_addr: SocketAddr, - json_handshake_request: Json, + json_handshake_request: Json, tracing_required: TracingRequired, version: SdkVersion, cfg: &State, @@ -255,7 +255,7 @@ pub async fn handshake( client_state: &State>, ) -> status::Custom { with_timeout(&cfg.load_full(), None, None, async move { - web_client::handshake( + web_client::handshake_v0( session, remote_addr, json_handshake_request, diff --git a/rust/lit-node/lit-node/src/endpoints/versions/mod.rs b/rust/lit-node/lit-node/src/endpoints/versions/mod.rs index b179701..abffa23 100644 --- a/rust/lit-node/lit-node/src/endpoints/versions/mod.rs +++ b/rust/lit-node/lit-node/src/endpoints/versions/mod.rs @@ -3,7 +3,6 @@ pub const LATEST_VERSION: &str = "v2"; pub mod initial; pub mod v1; pub mod v2; - pub fn deprecated_endpoint_error() -> rocket::response::status::Custom { use lit_api_core::error::ApiError; let msg = format!( diff --git a/rust/lit-node/lit-node/src/endpoints/versions/v1.rs b/rust/lit-node/lit-node/src/endpoints/versions/v1.rs index 2953cca..592447e 100644 --- a/rust/lit-node/lit-node/src/endpoints/versions/v1.rs +++ b/rust/lit-node/lit-node/src/endpoints/versions/v1.rs @@ -1,14 +1,17 @@ use super::deprecated_endpoint_error; +use crate::endpoints::web_client; use crate::models; use crate::payment::delegated_usage::DelegatedUsageDB; use crate::payment::payment_tracker::PaymentTracker; +use crate::siwe_db::rpc::EthBlockhashCache; use crate::tss::common::tss_state::TssState; use crate::utils::rocket::guards::RequestHeaders; -use lit_api_core::context::{Tracer, Tracing}; +use crate::utils::web::with_timeout; +use lit_api_core::context::{SdkVersion, Tracer, Tracing, TracingRequired}; use lit_core::config::ReloadableLitConfig; use lit_node_common::client_state::ClientState; use lit_node_core::request; -use lit_node_core::request::EncryptionSignRequest; +use lit_node_core::request::{EncryptionSignRequest, SDKHandshakeRequest}; use lit_sdk::EncryptedPayload; use moka::future::Cache; use rocket::response::status; @@ -24,10 +27,40 @@ pub(crate) fn routes() -> Vec { encryption_sign, sign_session_key, pkp_sign, - execute_function + execute_function, + handshake ] } +#[post("/web/handshake/v1", format = "json", data = "")] +#[instrument(name = "POST /web/handshake/v1", skip_all, fields(correlation_id = tracing_required.correlation_id()), ret)] +#[allow(clippy::too_many_arguments)] +pub(crate) async fn handshake( + session: &State>, + remote_addr: SocketAddr, + handshake_request: Json, + tracing_required: TracingRequired, + version: SdkVersion, + cfg: &State, + eth_blockhash_cache: &State>, + client_state: &State>, +) -> status::Custom { + with_timeout(&cfg.load_full(), None, None, async move { + web_client::handshake( + session, + remote_addr, + handshake_request, + tracing_required, + version, + cfg, + eth_blockhash_cache, + client_state, + ) + .await + }) + .await +} + #[allow(clippy::too_many_arguments)] #[post( "/web/encryption/sign/v1", diff --git a/rust/lit-node/lit-node/src/endpoints/web_client.rs b/rust/lit-node/lit-node/src/endpoints/web_client.rs index fd6d138..f81510d 100644 --- a/rust/lit-node/lit-node/src/endpoints/web_client.rs +++ b/rust/lit-node/lit-node/src/endpoints/web_client.rs @@ -19,6 +19,7 @@ use crate::pkp; use crate::pkp::auth::serialize_auth_context_for_checking_against_contract_data; use crate::siwe_db::utils::make_timestamp_siwe_compatible; use crate::siwe_db::{db, rpc::EthBlockhashCache}; +use crate::tss::common::curve_state::CurveState; use crate::tss::common::tss_state::TssState; use crate::utils::attestation::create_attestation; use crate::utils::encoding; @@ -42,16 +43,19 @@ use lit_node_common::{client_state::ClientState, config::LitNodeConfig}; use lit_node_core::CurveType; use lit_node_core::SigningScheme; use lit_node_core::request::{EncryptionSignRequest, JsonExecutionRequest}; -use lit_node_core::response::{EncryptionSignResponse, GenericResponse}; +use lit_node_core::response::{ + EncryptionSignResponse, GenericResponse, KeySetHandshake, SDKHandshakeResponseV1, +}; use lit_node_core::{ AccessControlConditionItem, AccessControlConditionResource, AuthSigItem, EVMContractConditionItem, EndpointVersion, LitActionResource, LitResource, LitResourceAbility, SolRpcConditionItem, UnifiedAccessControlConditionItem, constants::{CHAIN_ETHEREUM, LIT_RESOURCE_KEY_RAC, LIT_RESOURCE_PREFIX_RAC}, request, - request::JsonSDKHandshakeRequest, - response::JsonSDKHandshakeResponse, + request::SDKHandshakeRequest, + response::SDKHandshakeResponseV0, }; +use log::warn; use moka::future::Cache; use rocket::State; use rocket::http::Status; @@ -145,7 +149,7 @@ pub(crate) async fn encryption_sign( let before = std::time::Instant::now(); // Validate auth sig item - let bls_root_pubkey = match get_bls_root_pubkey(session).await { + let bls_root_pubkey = match get_bls_root_pubkey(session, None) { Ok(bls_root_pubkey) => bls_root_pubkey, Err(e) => { return client_session.json_encrypt_err_custom_response("no bls root key", e.handle()); @@ -312,14 +316,14 @@ pub(crate) async fn encryption_sign( let before = std::time::Instant::now(); // Sign the identity parameter using the blsful secret key share. - let (signature_share, share_peer_id) = match cipher_state.sign(&identity_parameter, epoch).await - { - Ok(signature_share) => signature_share, - Err(e) => { - return client_session - .json_encrypt_err_custom_response("unable to BLS sign", e.handle()); - } - }; + let (signature_share, share_peer_id) = + match cipher_state.sign(&identity_parameter, None, epoch).await { + Ok(signature_share) => signature_share, + Err(e) => { + return client_session + .json_encrypt_err_custom_response("unable to BLS sign", e.handle()); + } + }; timing.insert("sign identity parameter".to_string(), before.elapsed()); timing.insert("total".to_string(), request_start.elapsed()); @@ -332,6 +336,130 @@ pub(crate) async fn encryption_sign( }) } +#[instrument(name = "POST /web/handshake/v1", skip_all, fields(correlation_id = tracing_required.correlation_id()))] +#[allow(clippy::too_many_arguments)] +pub async fn handshake( + session: &State>, + remote_addr: SocketAddr, + handshake_request: Json, + tracing_required: TracingRequired, + version: SdkVersion, + cfg: &State, + eth_blockhash_cache: &State>, + client_state: &Arc, +) -> status::Custom { + let request_start = std::time::Instant::now(); + let mut timing: BTreeMap = BTreeMap::new(); + + debug!( + " + handshake, request: {:?}, client_state: {:?}", + handshake_request, client_state, + ); + + // Validate that the challenge exists in the request. + let challenge = match &handshake_request.challenge { + Some(challenge) => challenge, + None => { + return status::Custom( + Status::BadRequest, + json!(GenericResponse::err_and_data_json( + "".to_string(), + SDKHandshakeResponseV1 { + client_sdk_version: version.to_string(), + attestation: None, + latest_blockhash: "".to_string(), + node_version: crate::version::get_version().to_string(), + node_identity_key: "".to_string(), + git_commit_hash: "".to_string(), + key_sets: Default::default(), + } + )), + ); + } + }; + + let cfg = cfg.load_full(); + + let before = std::time::Instant::now(); + // run the attestation + let attestation = create_attestation( + cfg, + challenge.as_str(), + Some(&[( + NODE_IDENTITY_KEY.to_string(), + client_state.get_current_identity_public_key().to_vec(), + )]), + ) + .await + .map_err(|e| { + #[cfg(not(feature = "testing"))] + warn!("Error creating attestation: {:?}", e); + unexpected_err(e, Some("error producing attestation".into())) + }) + .ok(); + let attestation = match serde_json::to_value(&attestation) { + Ok(attestation) => Some(attestation), + Err(e) => { + error!("unable to convert the attestation to a json object"); + return status::Custom( + Status::BadRequest, + json!(GenericResponse::err_and_data_json( + "".to_string(), + SDKHandshakeResponseV1 { + client_sdk_version: version.to_string(), + attestation: None, + latest_blockhash: "".to_string(), + node_version: crate::version::get_version().to_string(), + node_identity_key: "".to_string(), + git_commit_hash: "".to_string(), + key_sets: Default::default(), + } + )), + ); + } + }; + + timing.insert("create attestation".to_string(), before.elapsed()); + + let before = std::time::Instant::now(); + let latest_blockhash = eth_blockhash_cache.blockhash.read().await.clone(); + timing.insert("get latest blockhash".to_string(), before.elapsed()); + + let before = std::time::Instant::now(); + + let realm_id = session.peer_state.realm_id(); + let epoch = session.peer_state.epoch(); + let key_sets = DataVersionReader::read_field_unchecked( + &session.chain_data_config_manager.key_sets, + |key_sets| { + key_sets + .keys() + .map(|identifier| (identifier.clone(), KeySetHandshake { realm_id, epoch })) + .collect::>() + }, + ); + + timing.insert("get key sets".to_string(), before.elapsed()); + + timing.insert("total".to_string(), request_start.elapsed()); + + trace!("POST /web/handshake/v1 timing: {:?}", timing); + + status::Custom( + Status::Ok, + json!(GenericResponse::ok(SDKHandshakeResponseV1 { + client_sdk_version: version.to_string(), + attestation, + latest_blockhash, + node_version: crate::version::get_version().to_string(), + node_identity_key: client_state.get_current_identity_public_key_hex(), + git_commit_hash: "".to_string(), + key_sets, + })), + ) +} + /* curl --header "Content-Type: application/json" \ --request POST \ @@ -341,10 +469,10 @@ curl --header "Content-Type: application/json" \ #[instrument(level = "debug", name = "POST /web/handshake", skip_all, fields(correlation_id = tracing_required.correlation_id()))] #[allow(clippy::too_many_arguments)] -pub async fn handshake( +pub async fn handshake_v0( session: &State>, remote_addr: SocketAddr, - json_handshake_request: Json, + json_handshake_request: Json, tracing_required: TracingRequired, version: SdkVersion, cfg: &State, @@ -368,7 +496,7 @@ pub async fn handshake( Status::BadRequest, json!(GenericResponse::err_and_data_json( "".to_string(), - JsonSDKHandshakeResponse { + SDKHandshakeResponseV0 { server_public_key: "ERR".to_string(), subnet_public_key: "ERR".to_string(), network_public_key: "ERR".to_string(), @@ -390,24 +518,20 @@ pub async fn handshake( let cfg = cfg.load_full(); let before = std::time::Instant::now(); - let ecdsa_root_keys = match session.get_dkg_state(CurveType::K256) { - Ok(dkg_state) => dkg_state.root_keys().await, - Err(_) => { - debug!("Failed to acquire lock on hd_root_keys for ECDSA."); - vec![] - } - }; + let curve_state = CurveState::new(session.peer_state.clone(), CurveType::K256, None); + let ecdsa_root_keys = curve_state.root_keys().unwrap_or_else(|_| { + warn!("Failed to get root keys"); + vec![] + }); timing.insert("get ecdsa root keys".to_string(), before.elapsed()); let before = std::time::Instant::now(); - let bls_root_keys = match session.get_dkg_state(CurveType::BLS) { - Ok(dkg_state) => dkg_state.root_keys().await, - Err(_) => { - debug!("Failed to acquire lock on hd_root_keys for BLS."); - vec![] - } - }; - timing.insert("get bls root keys".to_string(), before.elapsed()); + let curve_state = CurveState::new(session.peer_state.clone(), CurveType::BLS, None); + let bls_root_key = get_bls_root_pubkey(session, None).unwrap_or_else(|_| { + warn!("Failed to get root keys"); + String::new() + }); + timing.insert("get bls root key".to_string(), before.elapsed()); let before = std::time::Instant::now(); // run the attestation @@ -434,7 +558,7 @@ pub async fn handshake( Status::BadRequest, json!(GenericResponse::err_and_data_json( "".to_string(), - JsonSDKHandshakeResponse { + SDKHandshakeResponseV0 { server_public_key: "ERR".to_string(), subnet_public_key: "ERR".to_string(), network_public_key: "ERR".to_string(), @@ -464,19 +588,17 @@ pub async fn handshake( trace!("POST /web/handshake timing: {:?}", timing); // the public key set is currently the bls root key... of which there is only one. - if !bls_root_keys.is_empty() { - let network_public_key = &bls_root_keys[0]; - + if !bls_root_key.is_empty() { let realm_id = session.peer_state.realm_id(); let epoch = session.peer_state.epoch(); return status::Custom( Status::Ok, - json!(GenericResponse::ok(JsonSDKHandshakeResponse { + json!(GenericResponse::ok(SDKHandshakeResponseV0 { server_public_key: "".to_string(), - subnet_public_key: network_public_key.clone(), - network_public_key: network_public_key.clone(), - network_public_key_set: network_public_key.clone(), + subnet_public_key: bls_root_key.clone(), + network_public_key: bls_root_key.clone(), + network_public_key_set: bls_root_key.clone(), client_sdk_version: version.to_string(), hd_root_pubkeys: ecdsa_root_keys, attestation, @@ -493,7 +615,7 @@ pub async fn handshake( Status::Ok, json!(GenericResponse::err_and_data_json( "".to_string(), - JsonSDKHandshakeResponse { + SDKHandshakeResponseV0 { server_public_key: "ERR".to_string(), subnet_public_key: "ERR".to_string(), network_public_key: "ERR".to_string(), @@ -521,7 +643,7 @@ pub(crate) async fn get_job_status( cfg: &State, client_state: &Arc, ) -> status::Custom { - let bls_root_pubkey = match get_bls_root_pubkey(tss_state).await { + let bls_root_pubkey = match get_bls_root_pubkey(tss_state, None) { Ok(key) => key, Err(e) => { return client_session @@ -711,7 +833,7 @@ pub(crate) async fn execute_function( let before = std::time::Instant::now(); // Validate auth sig item - let bls_root_pubkey = match get_bls_root_pubkey(tss_state).await { + let bls_root_pubkey = match get_bls_root_pubkey(tss_state, None) { Ok(bls_root_pubkey) => bls_root_pubkey, Err(e) => { return client_session.json_encrypt_err_custom_response("no bls root key", e.handle()); @@ -1310,27 +1432,25 @@ pub(crate) async fn sign_session_key( } } - let origin_domain = match get_domain_from_request_origin( + let origin_domain = get_domain_from_request_origin( request_headers .headers .get_one("Origin") .unwrap_or("http://localhost"), - ) { - Ok(origin_domain) => origin_domain, - Err(e) => { - error!( - "Error getting origin domain - swallowing and using default of localhost: {:?}", - e - ); - "http://localhost".into() - } - }; - trace!("Origin: {:?}", origin_domain); + ) + .unwrap_or_else(|e| { + error!( + "Error getting origin domain - swallowing and using default of localhost: {:?}", + e + ); + "http://localhost".into() + }); + debug!("Origin: {:?}", origin_domain); let before = std::time::Instant::now(); // convert the auth methods into an auth context by resolving the oauth ids // from the oauth endpoints - let bls_root_pubkey = match get_bls_root_pubkey(tss_state).await { + let bls_root_pubkey = match get_bls_root_pubkey(tss_state, None) { Ok(bls_root_pubkey) => bls_root_pubkey, Err(e) => { return client_session.json_encrypt_err_custom_response("no bls root key", e.handle()); @@ -2005,7 +2125,7 @@ pub(crate) async fn sign_session_key( ); let before = std::time::Instant::now(); - let bls_root_pubkey = match get_bls_root_pubkey(tss_state).await { + let bls_root_pubkey = match get_bls_root_pubkey(tss_state, None) { Ok(bls_root_pubkey) => bls_root_pubkey, Err(e) => { return client_session @@ -2067,7 +2187,7 @@ pub(crate) async fn sign_session_key( bls_root_pubkey, to_sign ); let before = std::time::Instant::now(); - let (signature_share, share_peer_id) = match cipher_state.sign(&to_sign, epoch).await { + let (signature_share, share_peer_id) = match cipher_state.sign(&to_sign, None, epoch).await { Ok(signature_share) => signature_share, Err(e) => { return client_session.json_encrypt_err_custom_response( diff --git a/rust/lit-node/lit-node/src/functions/action_client.rs b/rust/lit-node/lit-node/src/functions/action_client.rs index 8eb4331..d9baa6c 100644 --- a/rust/lit-node/lit-node/src/functions/action_client.rs +++ b/rust/lit-node/lit-node/src/functions/action_client.rs @@ -48,11 +48,12 @@ use serde::{Deserialize, Serialize}; use tokio::time::Duration; use tracing::{debug, instrument}; +use crate::tss::common::curve_state::CurveState; use lit_node_common::config::LitNodeConfig as _; use lit_node_core::{ - AccessControlConditionResource, AuthSigItem, BeHex, CompressedBytes, CurveType, - EndpointVersion, JsonAuthSig, LitActionPriceComponent, LitResource, NodeSet, PeerId, - SignableOutput, SignedData, SigningScheme, UnifiedAccessControlConditionItem, response, + AccessControlConditionResource, AuthSigItem, BeHex, CompressedBytes, EndpointVersion, + JsonAuthSig, LitActionPriceComponent, LitResource, NodeSet, PeerId, SignableOutput, SignedData, + SigningScheme, UnifiedAccessControlConditionItem, response, }; use lit_sdk::signature::{SignedDataOutput, combine_and_verify_signature_shares}; @@ -897,13 +898,15 @@ impl Client { }; // Sign the identity parameter using the blsful secret key share. - let (signature_share, share_id) = - match cipher_state.sign(&identity_parameter, self.epoch).await { - Ok(signature_share) => signature_share, - Err(e) => { - bail!("Couldn't sign the identity parameter: {:?}", e); - } - }; + let (signature_share, share_id) = match cipher_state + .sign(&identity_parameter, None, self.epoch) + .await + { + Ok(signature_share) => signature_share, + Err(e) => { + bail!("Couldn't sign the identity parameter: {:?}", e); + } + }; let cm = CommsManager::new(&tss_state, 0, &txn_prefix, "0", &self.node_set).await?; let mut shares = cm @@ -914,7 +917,7 @@ impl Client { shares.push((PeerId::ONE, signature_share)); // lazy - it's not zero, but we don't seem to care! - let network_pubkey = get_bls_root_pubkey(&tss_state).await?; + let network_pubkey = get_bls_root_pubkey(&tss_state, None)?; let network_pubkey = blsful::PublicKey::try_from(&hex::decode(&network_pubkey)?)?; let serialized_decryption_shares = @@ -999,13 +1002,15 @@ impl Client { }; // Sign the identity parameter using the blsful secret key share. - let (signature_share, share_index) = - match cipher_state.sign(&identity_parameter, self.epoch).await { - Ok(signature_share) => signature_share, - Err(e) => { - bail!("Couldn't sign the identity parameter: {:?}", e); - } - }; + let (signature_share, share_index) = match cipher_state + .sign(&identity_parameter, None, self.epoch) + .await + { + Ok(signature_share) => signature_share, + Err(e) => { + bail!("Couldn't sign the identity parameter: {:?}", e); + } + }; let cm = CommsManager::new(&tss_state, 0, &txn_prefix, "0", &self.node_set).await?; let leader_peer = peers.peer_at_address(&leader_addr)?; @@ -1036,9 +1041,9 @@ impl Client { shares.push((PeerId::ONE, signature_share)); // lazy - it's not zero, but we don't seem to care! - let network_pubkey = &get_bls_root_pubkey(&tss_state).await?; + let network_pubkey = get_bls_root_pubkey(&tss_state, None)?; let network_pubkey = - blsful::PublicKey::try_from(&hex::decode(network_pubkey)?)?; + blsful::PublicKey::try_from(&hex::decode(&network_pubkey)?)?; let serialized_decryption_shares = shares.iter().map(|(_, share)| *share).collect::>(); @@ -1361,8 +1366,9 @@ impl Client { to_encrypt, }) => { let (tss_state, txn_prefix) = self.tss_state_and_txn_prefix()?; - let network_pubkey = &get_bls_root_pubkey(&tss_state).await?; - let network_pubkey = blsful::PublicKey::try_from(&hex::decode(network_pubkey)?)?; + let tss_state = Arc::new(tss_state); + let network_pubkey = get_bls_root_pubkey(&tss_state, None)?; + let network_pubkey = blsful::PublicKey::try_from(&hex::decode(&network_pubkey)?)?; use sha2::{Digest, Sha256}; let mut hasher = Sha256::new(); @@ -1478,8 +1484,8 @@ impl Client { let txn_prefix = format!("{}_signasaction_{}", txn_prefix, scheme); let tss_state = Arc::new(tss_state); let curve_type = scheme.curve_type(); - let dkg_state = tss_state.get_dkg_state(curve_type)?; - let root_keys = dkg_state.root_keys().await; + let curve_state = CurveState::new(tss_state.peer_state.clone(), curve_type, None); + let root_keys = curve_state.root_keys()?; let pubkey = lit_sdk::signature::get_lit_action_public_key( scheme, &action_ipfs_cid, @@ -1516,8 +1522,8 @@ impl Client { let (tss_state, txn_prefix) = self.tss_state_and_txn_prefix()?; let txn_prefix = format!("{}_signasaction_{}", txn_prefix, scheme); let tss_state = Arc::new(tss_state); - let dkg_state = tss_state.get_dkg_state(curve_type)?; - let root_keys = dkg_state.root_keys().await; + let curve_state = CurveState::new(tss_state.peer_state.clone(), curve_type, None); + let root_keys = curve_state.root_keys()?; let pubkey = lit_sdk::signature::get_lit_action_public_key( scheme, &action_ipfs_cid, @@ -1746,23 +1752,13 @@ impl Client { async fn get_bls_root_pubkey(&self) -> Result { let tss_state = match &self.js_env.tss_state { - Some(tss_state) => tss_state, + Some(tss_state) => Arc::new(tss_state.clone()), None => { return Err(anyhow::anyhow!("No TSS state found")); } }; - - let dkg_state = match tss_state.get_dkg_state(CurveType::BLS) { - Ok(state) => state, - Err(e) => { - return Err(e.into()); - } - }; - let bls_root_pubkeys = dkg_state.root_keys().await; - match bls_root_pubkeys.first() { - Some(bls_root_key) => Ok(bls_root_key.clone()), - None => Err(anyhow::anyhow!("No BLS root key found")), - } + get_bls_root_pubkey(&tss_state, None) + .map_err(|e| anyhow::anyhow!(format!("Error getting BLS root pubkey: {:?}", e))) } async fn leader_helper(&self, request_hash: u64) -> Result<(String, bool)> { @@ -1782,6 +1778,7 @@ impl Client { Ok((leader.socket_address.clone(), is_leader)) } + #[allow(clippy::too_many_arguments)] async fn sign_with_action( &mut self, to_sign: &[u8], @@ -1800,20 +1797,19 @@ impl Client { let curve_type = signing_scheme.curve_type(); let mut sign_state = tss_state.get_signing_state(signing_scheme)?; - let dkg_state = tss_state.get_dkg_state(curve_type)?; + let curve_state = CurveState::new(tss_state.peer_state.clone(), curve_type, None); let key_id = keccak256(format!("lit_action_{}", action_ipfs_id)); - let root_keys = dkg_state.root_keys().await; let epoch = tss_state.get_keyshare_epoch().await; let pubkey = self - .get_action_pubkey(tss_state.clone(), action_ipfs_id, signing_scheme) + .get_action_pubkey(tss_state.clone(), action_ipfs_id, None, signing_scheme) .await?; let my_result = sign_state .sign_with_pubkey( to_sign, pubkey, - Some(root_keys), Some(key_id.to_vec()), self.request_id().as_bytes().to_vec(), + None, Some(epoch), &self.node_set, ) @@ -1872,6 +1868,7 @@ impl Client { &self, tss_state: Arc, action_ipfs_id: &str, + key_set_id: Option<&str>, signing_scheme: SigningScheme, ) -> Result> { let pubkey = match signing_scheme { @@ -1879,6 +1876,7 @@ impl Client { &derive_ipfs_keys::( tss_state, action_ipfs_id, + key_set_id, signing_scheme, ) .await? @@ -1886,36 +1884,53 @@ impl Client { ), SigningScheme::EcdsaK256Sha256 | SigningScheme::SchnorrK256Sha256 - | SigningScheme::SchnorrK256Taproot => { - derive_ipfs_keys::(tss_state, action_ipfs_id, signing_scheme) - .await? - .1 - .to_compressed() - } - SigningScheme::EcdsaP256Sha256 | SigningScheme::SchnorrP256Sha256 => { - derive_ipfs_keys::(tss_state, action_ipfs_id, signing_scheme) - .await? - .1 - .to_compressed() - } - SigningScheme::EcdsaP384Sha384 | SigningScheme::SchnorrP384Sha384 => { - derive_ipfs_keys::(tss_state, action_ipfs_id, signing_scheme) - .await? - .1 - .to_compressed() - } - SigningScheme::SchnorrEd25519Sha512 => derive_ipfs_keys::< - vsss_rs::curve25519::WrappedEdwards, - >( - tss_state, action_ipfs_id, signing_scheme + | SigningScheme::SchnorrK256Taproot => derive_ipfs_keys::( + tss_state, + action_ipfs_id, + key_set_id, + signing_scheme, ) .await? .1 .to_compressed(), + SigningScheme::EcdsaP256Sha256 | SigningScheme::SchnorrP256Sha256 => { + derive_ipfs_keys::( + tss_state, + action_ipfs_id, + key_set_id, + signing_scheme, + ) + .await? + .1 + .to_compressed() + } + SigningScheme::EcdsaP384Sha384 | SigningScheme::SchnorrP384Sha384 => { + derive_ipfs_keys::( + tss_state, + action_ipfs_id, + key_set_id, + signing_scheme, + ) + .await? + .1 + .to_compressed() + } + SigningScheme::SchnorrEd25519Sha512 => { + derive_ipfs_keys::( + tss_state, + action_ipfs_id, + key_set_id, + signing_scheme, + ) + .await? + .1 + .to_compressed() + } SigningScheme::SchnorrRistretto25519Sha512 | SigningScheme::SchnorrkelSubstrate => { derive_ipfs_keys::( tss_state, action_ipfs_id, + key_set_id, signing_scheme, ) .await? @@ -1926,24 +1941,31 @@ impl Client { derive_ipfs_keys::( tss_state, action_ipfs_id, + key_set_id, signing_scheme, ) .await? .1 .to_compressed() } - SigningScheme::SchnorrRedDecaf377Blake2b512 => { - derive_ipfs_keys::(tss_state, action_ipfs_id, signing_scheme) - .await? - .1 - .to_compressed() - } - SigningScheme::SchnorrRedJubjubBlake2b512 => { - derive_ipfs_keys::(tss_state, action_ipfs_id, signing_scheme) - .await? - .1 - .to_compressed() - } + SigningScheme::SchnorrRedDecaf377Blake2b512 => derive_ipfs_keys::( + tss_state, + action_ipfs_id, + key_set_id, + signing_scheme, + ) + .await? + .1 + .to_compressed(), + SigningScheme::SchnorrRedJubjubBlake2b512 => derive_ipfs_keys::( + tss_state, + action_ipfs_id, + key_set_id, + signing_scheme, + ) + .await? + .1 + .to_compressed(), _ => { return Err(anyhow::anyhow!( "Unsupported derive action pubkey signing scheme: {}", @@ -1985,6 +2007,7 @@ pub fn get_identity_param( async fn derive_ipfs_keys( tss_state: Arc, action_ipfs_id: &str, + key_set_id: Option<&str>, signing_scheme: SigningScheme, ) -> Result<(G::Scalar, G)> where @@ -1993,8 +2016,12 @@ where { let key_id = keccak256(format!("lit_action_{}", action_ipfs_id)); let curve_type = signing_scheme.curve_type(); - let dkg_state = tss_state.get_dkg_state(curve_type)?; - let root_keys = dkg_state.root_keys().await; + let curve_state = CurveState::new( + tss_state.peer_state.clone(), + curve_type, + key_set_id.map(String::from), + ); + let root_keys = curve_state.root_keys()?; let staker_address = &tss_state.peer_state.hex_staker_address(); let peers = tss_state.peer_state.peers(); let self_peer = peers.peer_at_address(&tss_state.addr)?; diff --git a/rust/lit-node/lit-node/src/git_info.rs b/rust/lit-node/lit-node/src/git_info.rs index e7d0e87..9c22363 100644 --- a/rust/lit-node/lit-node/src/git_info.rs +++ b/rust/lit-node/lit-node/src/git_info.rs @@ -1 +1 @@ -pub const GIT_COMMIT_HASH: &str = "5caf4cb4b70f0ec3b5094e71785ce78421027805"; +pub const GIT_COMMIT_HASH: &str = "a5ee37b8b3d192e0b36a02bd13b433820673bf1c"; diff --git a/rust/lit-node/lit-node/src/models/mod.rs b/rust/lit-node/lit-node/src/models/mod.rs index ea6e13f..9bc0690 100644 --- a/rust/lit-node/lit-node/src/models/mod.rs +++ b/rust/lit-node/lit-node/src/models/mod.rs @@ -1,5 +1,6 @@ use ethers::types::{Address, U256}; +use crate::error::blockchain_err; use crate::functions::action_client::ExecutionState; use crate::functions::{JobId, JobStatus}; use iri_string::spec::UriSpec; @@ -16,7 +17,7 @@ use lit_recovery::models::UploadedShareData; use moka::future::Cache; use serde::{Deserialize, Serialize}; use serde_json::Value; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; #[cfg(feature = "lit-actions")] use std::sync::Arc; use std::time::{Duration, SystemTime}; @@ -348,6 +349,70 @@ pub struct EthBlock { pub block_number: usize, } +#[derive(Clone, Debug, Default)] +pub struct KeySetConfig { + pub identifier: String, + pub description: String, + pub minimum_threshold: usize, + pub monetary_value: usize, + pub complete_isolation: bool, + pub realms: HashSet, + pub root_keys_by_curve: HashMap>, + pub root_key_counts: HashMap, + pub recovery_session_id: String, +} + +impl TryFrom for KeySetConfig { + type Error = lit_core::error::Error; + + fn try_from( + config: lit_blockchain::contracts::staking::KeySetConfig, + ) -> lit_core::error::Result { + let mut root_keys_by_curve = HashMap::with_capacity(config.curves.len()); + let mut root_key_counts = HashMap::with_capacity(config.curves.len()); + for (curve, count) in config.curves.iter().zip(config.counts.iter()) { + let curve_type = CurveType::try_from(*curve).map_err(|e| blockchain_err(e, None))?; + root_keys_by_curve.insert(curve_type, Vec::with_capacity(count.as_usize())); + root_key_counts.insert(curve_type, count.as_usize()); + } + + Ok(Self { + identifier: config.identifier, + description: config.description, + minimum_threshold: config.minimum_threshold as usize, + monetary_value: config.monetary_value as usize, + complete_isolation: config.complete_isolation, + realms: config.realms.into_iter().map(|r| r.as_usize()).collect(), + recovery_session_id: hex::encode(config.recovery_session_id), + root_keys_by_curve, + root_key_counts, + }) + } +} + +#[derive(Clone, Debug, Default)] +pub struct PubKeyRoutingData { + pub pubkey: Vec, + pub curve_type: CurveType, + pub tweak_preimage: [u8; 32], + pub key_set_identifier: String, +} + +impl TryFrom for PubKeyRoutingData { + type Error = lit_core::error::Error; + + fn try_from( + data: lit_blockchain::contracts::pubkey_router::PubkeyRoutingData, + ) -> lit_core::error::Result { + Ok(Self { + pubkey: data.pubkey.to_vec(), + curve_type: CurveType::try_from(data.key_type).map_err(|e| blockchain_err(e, None))?, + tweak_preimage: data.derived_key_id, + key_set_identifier: data.key_set_identifier, + }) + } +} + #[test] fn serialize() { use lit_node_core::response::JsonSignSessionKeyResponseV2; diff --git a/rust/lit-node/lit-node/src/p2p_comms/web/chatter_server.rs b/rust/lit-node/lit-node/src/p2p_comms/web/chatter_server.rs index 47ad075..58ba204 100644 --- a/rust/lit-node/lit-node/src/p2p_comms/web/chatter_server.rs +++ b/rust/lit-node/lit-node/src/p2p_comms/web/chatter_server.rs @@ -183,7 +183,6 @@ impl ChatterService for ChatterServer { } }; let public_key = libsecp256k1::PublicKey::from_secret_key(&secret_key); - let mut peer_item = PeerItem { id: peer_state.id, public_key, diff --git a/rust/lit-node/lit-node/src/peers/mod.rs b/rust/lit-node/lit-node/src/peers/mod.rs index 9895b29..7edfb56 100644 --- a/rust/lit-node/lit-node/src/peers/mod.rs +++ b/rust/lit-node/lit-node/src/peers/mod.rs @@ -205,11 +205,16 @@ impl PeerState { } pub fn realm_id(&self) -> u64 { - DataVersionReader::new_unchecked(&self.chain_data_config_manager.realm_id).as_u64() + DataVersionReader::read_field_unchecked(&self.chain_data_config_manager.realm_id, |realm| { + realm.as_u64() + }) } pub fn shadow_realm_id(&self) -> u64 { - DataVersionReader::new_unchecked(&self.chain_data_config_manager.shadow_realm_id).as_u64() + DataVersionReader::read_field_unchecked( + &self.chain_data_config_manager.shadow_realm_id, + |realm| realm.as_u64(), + ) } pub fn peer_id_in_current_epoch(&self) -> Result { @@ -218,10 +223,10 @@ impl PeerState { } pub fn epoch(&self) -> u64 { - DataVersionReader::new_unchecked( + DataVersionReader::read_field_unchecked( &self.chain_data_config_manager.peers.peers_for_current_epoch, + |peers| peers.epoch_number, ) - .epoch_number } #[instrument(level = "debug", skip(self))] diff --git a/rust/lit-node/lit-node/src/peers/peer_state/backup_recovery.rs b/rust/lit-node/lit-node/src/peers/peer_state/backup_recovery.rs index 8444cea..982734c 100644 --- a/rust/lit-node/lit-node/src/peers/peer_state/backup_recovery.rs +++ b/rust/lit-node/lit-node/src/peers/peer_state/backup_recovery.rs @@ -4,6 +4,7 @@ use lit_blockchain::contracts::{backup_recovery::RecoveryKey, staking::Validator use lit_blockchain::util::decode_revert; use lit_core::error::Result; use sha2::Sha256; +use std::collections::HashMap; use std::time::Duration; use super::{super::PeerState, models::SimplePeer}; @@ -155,55 +156,61 @@ impl PeerState { } // No retries for this function similar to Standard DKG - pub async fn register_recovery_keys(&self, recovery_root_keys: Vec) { - let mut recovery_keys: Vec = Vec::new(); - + pub async fn register_recovery_keys( + &self, + recovery_root_keys: HashMap>, + ) { info!("Registering Recovery DKG keys: {:?}", recovery_root_keys); - let mut hasher = Sha256::default(); - for recovery_key in recovery_root_keys { - let pubkey_bytes = match hex_to_bytes(&recovery_key.public_key) { - Ok(pubkey_bytes) => pubkey_bytes, - Err(e) => { - debug!("Error converting pubkey to bytes w/: {:?}", e); - return; - } - }; - hasher.update(&pubkey_bytes); - recovery_keys.push(RecoveryKey { - pubkey: Bytes::from(pubkey_bytes), - key_type: recovery_key.curve_type.into(), - }); - } - let session_id = Bytes::from(hasher.finalize().to_vec()); - - let func = self - .backup_recovery_contract - .register_recovery_keys(recovery_keys, session_id); - let gas_estimate = func.estimate_gas().await; - match gas_estimate { - Ok(gas_estimate) => { - let func_with_gas = func.gas(gas_estimate * U256::from(5)); - let result = func_with_gas.send().await; - - match result { - Ok(_) => { - debug!("register pubkey for Recovery dkg"); - - // Once the recovery keys are registered, we sleep briefly to make sure any future chain reads will see the updated state. - tokio::time::sleep(Duration::from_secs(1)).await; - } + for (key_set_id, dkg_recovery_keys) in recovery_root_keys { + let mut recovery_keys: Vec = Vec::new(); + let mut hasher = Sha256::default(); + for recovery_key in dkg_recovery_keys { + let pubkey_bytes = match hex_to_bytes(&recovery_key.public_key) { + Ok(pubkey_bytes) => pubkey_bytes, Err(e) => { - debug!("Failed to register pubkey for Recovery dkg w/ err {:?}", e); - debug!("{}", decode_revert(&e, self.backup_recovery_contract.abi())); + debug!("Error converting pubkey to bytes w/: {:?}", e); + return; } - } + }; + hasher.update(&pubkey_bytes); + recovery_keys.push(RecoveryKey { + pubkey: Bytes::from(pubkey_bytes), + key_type: recovery_key.curve_type.into(), + }); } - Err(e) => { - debug!( - "Failed to estimate gas for registerRecoveryKeys w/ err {:?}", - e - ); - debug!("{}", decode_revert(&e, self.backup_recovery_contract.abi())); + let session_id = Bytes::from(hasher.finalize().to_vec()); + + let func = self.backup_recovery_contract.register_recovery_keys( + recovery_keys, + session_id, + key_set_id.clone(), + ); + let gas_estimate = func.estimate_gas().await; + match gas_estimate { + Ok(gas_estimate) => { + let func_with_gas = func.gas(gas_estimate * U256::from(5)); + let result = func_with_gas.send().await; + + match result { + Ok(_) => { + debug!("register pubkey for Recovery dkg"); + + // Once the recovery keys are registered, we sleep briefly to make sure any future chain reads will see the updated state. + tokio::time::sleep(Duration::from_secs(1)).await; + } + Err(e) => { + debug!("Failed to register pubkey for Recovery dkg w/ err {:?}", e); + debug!("{}", decode_revert(&e, self.backup_recovery_contract.abi())); + } + } + } + Err(e) => { + debug!( + "Failed to estimate gas for registerRecoveryKeys w/ err {:?}", + e + ); + debug!("{}", decode_revert(&e, self.backup_recovery_contract.abi())); + } } } } diff --git a/rust/lit-node/lit-node/src/peers/peer_state/listener.rs b/rust/lit-node/lit-node/src/peers/peer_state/listener.rs index 6c3c763..5d4bde8 100644 --- a/rust/lit-node/lit-node/src/peers/peer_state/listener.rs +++ b/rust/lit-node/lit-node/src/peers/peer_state/listener.rs @@ -113,15 +113,6 @@ impl PeerState { } } } - StakingEvents::ConfigSetFilter( - global_config_set_event, - ) => { - debug!("Global Config event"); - // update CDM state - if let Err(e) = self.chain_data_config_manager.set_all_config_from_chain().await { - error!("Failed to update chain data manager state: {:?}", e); - } - } StakingEvents::CountOfflinePhaseDataFilter(data_type) => { debug!("CountOfflinePhaseData event: {:?}", data_type); diff --git a/rust/lit-node/lit-node/src/pkp/auth/mod.rs b/rust/lit-node/lit-node/src/pkp/auth/mod.rs index 1399261..aedca2e 100644 --- a/rust/lit-node/lit-node/src/pkp/auth/mod.rs +++ b/rust/lit-node/lit-node/src/pkp/auth/mod.rs @@ -586,7 +586,7 @@ pub async fn check_pkp_auth( ); } - return Err(validation_err_code( + Err(validation_err_code( Error::new( ErrorKind::Other, format!( @@ -596,7 +596,7 @@ pub async fn check_pkp_auth( ), EC::NodeAuthSigScopeTooLimited, None, - )); + )) } // We need this due to an issue in the SDK which allows user to permit the following 3 formats: diff --git a/rust/lit-node/lit-node/src/pkp/utils.rs b/rust/lit-node/lit-node/src/pkp/utils.rs index b342684..f9921b7 100644 --- a/rust/lit-node/lit-node/src/pkp/utils.rs +++ b/rust/lit-node/lit-node/src/pkp/utils.rs @@ -22,6 +22,7 @@ use std::sync::Arc; use tracing::instrument; use super::auth::serialize_auth_context_for_checking_against_contract_data; +use crate::models::PubKeyRoutingData; use ethers::{signers::Signer, types::U256}; use lit_blockchain::contracts::load_wallet; use lit_node_core::NodeSet; @@ -375,17 +376,12 @@ pub async fn sign( )); } - let tweak_preimage = get_tweak_preimage_from_pubkey(cfg, &pubkey).await; + let pubkey_routing_data = get_pubkey_routing_data_from_pubkey(cfg, &pubkey).await; let tss_state = tss_state.expect_or_err("tss_state not set in RustJsComms")?; - // if this is a HD key, we need to get the root pubkeys, otherwise check the fs for the key share - let (tweak_preimage, root_pubkeys) = match tweak_preimage { - Ok(_) => { - let tweak_preimage = tweak_preimage.expect_or_err("hd_key_id is None")?; - let temp_signable = tss_state.get_dkg_state(signing_scheme.curve_type())?; - let root_pub_keys = temp_signable.root_keys().await; - (Some(tweak_preimage.to_vec()), Some(root_pub_keys)) - } + // if this is an HD key, we need to get the root pubkeys, otherwise check the fs for the key share + let pubkey_routing_data = match pubkey_routing_data { + Ok(p) => p, Err(_) => { let staker_address = &tss_state.peer_state.hex_staker_address(); @@ -410,6 +406,11 @@ pub async fn sign( pubkey )), )); + } else { + return Err(unexpected_err( + "No pubkey routing data exists".to_string(), + None, + )); } } Err(err) => { @@ -434,15 +435,13 @@ pub async fn sign( None, )); } - }; - - (None, None) + } } }; trace!( - "sign() pubkey: {}, hd_key_id: {:?}, root_pubkeys: {:?}", - pubkey, tweak_preimage, root_pubkeys + "sign() pubkey: {}, routing data: {:?}", + pubkey, pubkey_routing_data ); let mut signing_state = tss_state.get_signing_state(signing_scheme)?; @@ -457,9 +456,9 @@ pub async fn sign( .sign_with_pubkey( to_sign, public_key, - root_pubkeys, - tweak_preimage, + Some(pubkey_routing_data.tweak_preimage.to_vec()), request_id.clone(), + Some(&pubkey_routing_data.key_set_identifier), epoch, node_set, ) @@ -471,8 +470,11 @@ pub async fn sign( Ok(sign_result) } -#[instrument(level = "debug", skip(cfg))] -pub async fn get_tweak_preimage_from_pubkey(cfg: &LitConfig, pubkey: &str) -> Result<[u8; 32]> { +#[instrument(skip(cfg), level = "debug")] +pub async fn get_pubkey_routing_data_from_pubkey( + cfg: &LitConfig, + pubkey: &str, +) -> Result { let resolver = ContractResolver::try_from(cfg) .map_err(|e| unexpected_err_code(e, EC::NodeContractResolverConversionFailed, None))?; let contract = resolver.pub_key_router_contract(cfg).await?; @@ -489,11 +491,12 @@ pub async fn get_tweak_preimage_from_pubkey(cfg: &LitConfig, pubkey: &str) -> Re Some("Could not find token id in pubkey routing contract.".to_string()), ) })?; - Ok(pubkey_routing_data.derived_key_id) + pubkey_routing_data.try_into() } pub async fn vote_for_root_key( cfg: &LitConfig, + key_set_id: &str, root_keys: Vec, peer_state: &Arc, ) -> Result { @@ -506,11 +509,8 @@ pub async fn vote_for_root_key( let contract = resolver .pub_key_router_contract_with_gas_relay(cfg, peer_state.wallet_keys.signing_key().clone()) .await?; - let func = contract.vote_for_root_keys( - staking_contract_address, - crate::tss::util::DEFAULT_KEY_SET_NAME.to_string(), - root_keys, - ); + let func = + contract.vote_for_root_keys(staking_contract_address, key_set_id.to_string(), root_keys); let gas_estimate = match func.estimate_gas().await { Ok(gas_estimate) => gas_estimate, diff --git a/rust/lit-node/lit-node/src/tasks/fsm/epoch_change.rs b/rust/lit-node/lit-node/src/tasks/fsm/epoch_change.rs index a463a25..09717f8 100644 --- a/rust/lit-node/lit-node/src/tasks/fsm/epoch_change.rs +++ b/rust/lit-node/lit-node/src/tasks/fsm/epoch_change.rs @@ -1,19 +1,29 @@ use crate::config::chain::CachedRootKey; -use crate::error::unexpected_err; +use crate::models::KeySetConfig; +use crate::peers::PeerState; use crate::peers::peer_state::models::SimplePeerCollection; use crate::tasks::fsm::utils::parse_epoch_number_from_dkg_id; +use crate::tss::common::curve_state::CurveState; use crate::tss::common::dkg_type::DkgType; use crate::tss::common::key_persistence::RECOVERY_DKG_EPOCH; use crate::tss::common::traits::fsm_worker_metadata::FSMWorkerMetadata; use crate::tss::dkg::manager::DkgManager; +use crate::version::DataVersionReader; use ethers::types::U256; use lit_core::error::Result; +use lit_node_core::CurveType; +use std::collections::HashMap; use std::sync::Arc; use tracing::instrument; use super::utils::get_current_and_new_peer_addresses; use super::utils::key_share_proofs_check; +struct EpochChangeResOrUpdateNeeded { + pub epoch_change_res: Option>>>, + pub update_req: Option, +} + // only log the epoch number field #[instrument(level = "debug", skip(dkg_manager, fsm_worker_metadata))] pub(crate) async fn perform_epoch_change( @@ -22,20 +32,11 @@ pub(crate) async fn perform_epoch_change( realm_id: u64, is_shadow: bool, epoch_number: U256, -) -> Result>> { - struct EpochChangeResOrUpdateNeeded { - pub epoch_change_res: Option>>, - pub update_req: Option, - } - +) -> Option>> { let peer_state = dkg_manager.tss_state.peer_state.clone(); - let cfg = dkg_manager.tss_state.lit_config.clone(); - - // Derive the DKG ID. let mut fsm_worker_lifecycle_id = fsm_worker_metadata.get_lifecycle_id(realm_id); - - // We keep looping until we get a result from a completed epoch change operation. let mut latest_dkg_id = "".to_string(); + // We keep looping until we get a result from a completed epoch change operation. let mut abort_and_restart_count = 0; // We currently set the limit of aborts and restarts to be a high number to avoid infinite loops. This should never happen, @@ -49,11 +50,11 @@ pub(crate) async fn perform_epoch_change( // make sure peers are up to date, across potential abort + restarts. let (current_peers, new_peers) = - match get_current_next_dkg_peers(dkg_manager, realm_id, is_shadow).await { + match get_dkg_peers_and_keysets(dkg_manager, realm_id, is_shadow).await { Ok((current_peers, new_peers)) => (current_peers, new_peers), Err(e) => { - error!("Error in get_current_next_dkg_peers: {}", e); - return Err(e); + warn!("get_current_next_dkg_peers failed: {}", e); + return None; } }; @@ -61,77 +62,123 @@ pub(crate) async fn perform_epoch_change( latest_dkg_id = dkg_id.clone(); // when you start with a shadow node, they are going to read the "original" key (from the src realm) .... - let shadow_key_opts = match is_shadow { - true => { - trace!("Getting key epoch number for shadow realm"); - let base_realm_id = peer_state.realm_id(); - let base_epoch_number = peer_state.get_epoch(base_realm_id).await; - - let base_epoch_number = match base_epoch_number { - Ok(base_epoch_number) => base_epoch_number.1, - Err(e) => { - error!( - "Error in get_epoch for base epoch when shadow node is starting: {}", - e - ); - continue; - } - }; - - trace!("Base epoch number: {}", base_epoch_number); - (base_epoch_number.as_u64(), base_realm_id) - } - false => (epoch_number.as_u64(), realm_id), - }; + let shadow_key_opts = + get_shadow_key_opts(&peer_state, is_shadow, epoch_number, realm_id).await; + if shadow_key_opts.0 == 0 && is_shadow { + warn!( + "Shadow realm is not ready yet, aborting the epoch change attempt #{}.", + abort_and_restart_count + ); + continue; + } let current_epoch = epoch_number.as_u64(); - let epoch_change_res_or_update_needed = tokio::select! { - // We stop polling the other future as soon as `yield_until_update` returns, and - // after we parse the lifecycle IDs. - new_lifecycle_id = fsm_worker_metadata.yield_until_update(realm_id) => { - let existing_lifecycle_id = fsm_worker_metadata.get_lifecycle_id(realm_id); - info!("FSMWorkerMetadata is outdated, updating the lifecycle id from {} to {} in realm {}, aborting the current epoch change and restarting with the new updated lifecycle id", existing_lifecycle_id, new_lifecycle_id, realm_id); - EpochChangeResOrUpdateNeeded { - epoch_change_res: None, - update_req: Some(new_lifecycle_id), - } + // If we are going to generate a new keyset, we need to ensure that the threshold of an existing keyset is not changed. + // The exception to this is when the current peer set is not yet populated, in which case we can create one or more new keysets. + // If the current peer set is not empty and not equivalent to the new peer set, we need to skip the DKG creation for this epoch. + // let (key_sets_to_use, current_peers_to_use) = if empty_key_sets.is_empty() { + // (keysets, current_peers) + // } else { + // if current_peers != new_peers && !current_peers.is_empty() { + // warn!( + // "When creating a new set of root keys, current peers should be empty or equivalent to new peers. Skipping the DKG creation for this epoch." + // ); + // (full_key_sets, current_peers) + // } else { + // (empty_key_sets, SimplePeerCollection(vec![])) + // } + // }; + + let (existing_key_sets, new_key_sets) = match get_existing_and_new_key_sets( + peer_state.clone(), + ) + .await + { + Ok((existing_key_sets, new_key_sets)) => (existing_key_sets, new_key_sets), + Err(e) => { + warn!( + "Unable to get existing and new key sets when performing epoch change in realm {}: {}", + realm_id, e + ); + return None; } + }; - res = dkg_manager.change_epoch(&latest_dkg_id, current_epoch, shadow_key_opts, realm_id, ¤t_peers, &new_peers) => { - if res.is_ok() { - let epoch = match dkg_manager.dkg_type { - DkgType::RecoveryParty => RECOVERY_DKG_EPOCH, - DkgType::Standard => current_epoch + 1, - }; + trace!("new_key_sets: {:?}", new_key_sets); + trace!("existing_key_sets: {:?}", existing_key_sets); - let lifecycle_id = fsm_worker_metadata.get_lifecycle_id(realm_id); - match key_share_proofs_check(&dkg_manager.tss_state, &res, &new_peers, &latest_dkg_id, realm_id, epoch, lifecycle_id).await { - Err(e) => { - error!("Key share proofs check failed in realm {}: {}", realm_id, e); - return Err(e); - }, - Ok(()) => { - debug!("Key share proofs check passed for realm {}", realm_id); - } - } - } - EpochChangeResOrUpdateNeeded { - epoch_change_res: Some(res.inspect_err(|e| error!("DKG error: {}", e)).ok()), - update_req: None, + + // start by processing the epoch change for the new key sets + let mut epoch_change_res_or_update_needed_for_new_keys = None; + if !new_key_sets.is_empty() { + if current_peers != new_peers && !current_peers.is_empty() { + warn!( + "When creating a new set of root keys, current peers should be empty or equivalent to new peers. DKG will not be performed until the keyset is removed or the current peer set is equivalent to the new peer set." + ); + return None; + } + let empty_peers = SimplePeerCollection(vec![]); + epoch_change_res_or_update_needed_for_new_keys = match process_epoch_for_key_set( + dkg_manager, + fsm_worker_metadata.clone(), + realm_id, + is_shadow, + &new_key_sets, + &latest_dkg_id, + current_epoch, + shadow_key_opts, + &empty_peers, + &new_peers, + None, + ) + .await + { + Ok(result) => Some(result), + Err(e) => { + warn!( + "Unable to process epoch change for new key sets when performing epoch change in realm {}: {}", + realm_id, e + ); + return None; } + }; + } + + let epoch_change_res_or_update_needed = match process_epoch_for_key_set( + dkg_manager, + fsm_worker_metadata.clone(), + realm_id, + is_shadow, + &existing_key_sets, + &latest_dkg_id, + current_epoch, + shadow_key_opts, + ¤t_peers, + &new_peers, + epoch_change_res_or_update_needed_for_new_keys, + ) + .await + { + Ok(result) => result, + Err(e) => { + warn!( + "Unable to process epoch change for existing key sets when performing epoch change in realm {}: {}", + realm_id, e + ); + return None; } }; let (post_current_peers, post_new_peers) = - match get_current_next_dkg_peers(dkg_manager, realm_id, is_shadow).await { + match get_dkg_peers_and_keysets(dkg_manager, realm_id, is_shadow).await { Ok((current_peers, new_peers)) => (current_peers, new_peers), Err(e) => { error!( "Error in get_current_next_dkg_peers in realm {}: {}", realm_id, e ); - return Err(e); + return None; } }; @@ -148,7 +195,7 @@ pub(crate) async fn perform_epoch_change( } // If there is a result, we immediately return the result. if let Some(res) = epoch_change_res_or_update_needed.epoch_change_res { - return Ok(res); + return res; } // If we are here, that means that we need to update the lifecycle ID and restart the epoch change. @@ -156,10 +203,7 @@ pub(crate) async fn perform_epoch_change( Some(new_lifecycle_id) => new_lifecycle_id, None => { error!("epoch_change_res_or_update_needed.update_req is None"); - return Err(unexpected_err( - "epoch_change_res_or_update_needed.update_req is None", - None, - )); + return None; } }; @@ -169,7 +213,7 @@ pub(crate) async fn perform_epoch_change( Ok(existing_epoch_number) => existing_epoch_number, Err(e) => { error!("Error in parse_epoch_number_from_dkg_id: {}", e); - return Err(e); + return None; } }; trace!( @@ -196,10 +240,111 @@ pub(crate) async fn perform_epoch_change( // If we are here, that means that we have aborted and restarted the epoch change too many times. Just return a failure. error!("Aborted and restarted the epoch change too many times. Aborting the epoch change."); - Err(unexpected_err( - "Aborted and restarted the epoch change too many times. Aborting the epoch change.", - None, - )) + None +} + +async fn process_epoch_for_key_set( + dkg_manager: &DkgManager, + fsm_worker_metadata: Arc>, + realm_id: u64, + is_shadow: bool, + key_sets: &Vec, + latest_dkg_id: &str, + current_epoch: u64, + shadow_key_opts: (u64, u64), + current_peers: &SimplePeerCollection, + new_peers: &SimplePeerCollection, + existing_epoch_change_res_or_update_needed: Option, +) -> Result { + let existing_keys = match existing_epoch_change_res_or_update_needed { + Some(existing_epoch_change_res_or_update_needed) => { + match existing_epoch_change_res_or_update_needed.epoch_change_res { + Some(existing_keys) => existing_keys, + None => None, + } + } + None => None, + }; + + let epoch_change_res_or_update_needed = tokio::select! { + // We stop polling the other future as soon as `yield_until_update` returns, and + // after we parse the lifecycle IDs. + new_lifecycle_id = fsm_worker_metadata.yield_until_update(realm_id) => { + let existing_lifecycle_id = fsm_worker_metadata.get_lifecycle_id(realm_id); + info!("FSMWorkerMetadata is outdated, updating the lifecycle id from {} to {} in realm {}, aborting the current epoch change and restarting with the new updated lifecycle id", existing_lifecycle_id, new_lifecycle_id, realm_id); + EpochChangeResOrUpdateNeeded { + epoch_change_res: None, + update_req: Some(new_lifecycle_id), + } + } + + res = dkg_manager.change_epoch(&latest_dkg_id, current_epoch, shadow_key_opts, realm_id, ¤t_peers, &new_peers, &key_sets) => { + match res { + Ok(res) => { + let epoch = match dkg_manager.dkg_type { + DkgType::RecoveryParty => RECOVERY_DKG_EPOCH, + DkgType::Standard => current_epoch + 1, + }; + + let lifecycle_id = fsm_worker_metadata.get_lifecycle_id(realm_id); + if false { + match key_share_proofs_check(&dkg_manager.tss_state, &res, &new_peers, &latest_dkg_id, realm_id, epoch, lifecycle_id).await { + Err(e) => { + warn!("Key share proofs check failed in realm {}: {}", realm_id, e); + return Err(e); + }, + Ok(()) => { + debug!("Key share proofs check passed for realm {}", realm_id); + } + } + } + let mut res = res; + if let Some(existing_keys) = existing_keys { + res.extend(existing_keys); + } + + EpochChangeResOrUpdateNeeded { + epoch_change_res: Some(Some(res)), + update_req: None, + } + } + Err(e) => { + error!("DKG error: {:?}", e); + return Err(e); + } + } + + } + }; + + Ok(epoch_change_res_or_update_needed) +} + +async fn get_shadow_key_opts( + peer_state: &PeerState, + is_shadow: bool, + epoch_number: U256, + realm_id: u64, +) -> (u64, u64) { + if is_shadow { + let base_realm_id = peer_state.shadow_realm_id(); + let base_epoch_number = peer_state.get_epoch(base_realm_id).await; + + let base_epoch_number = match base_epoch_number { + Ok(base_epoch_number) => base_epoch_number.1, + Err(e) => { + warn!( + "get_epoch failed for base epoch when shadow node is starting: {}", + e + ); + return (0, 0); + } + }; + trace!("Base epoch number: {}", base_epoch_number); + (base_epoch_number.as_u64(), base_realm_id) + } else { + (epoch_number.as_u64(), realm_id) + } } pub fn derive_dkg_id( @@ -217,7 +362,59 @@ pub fn derive_dkg_id( ) } -pub async fn get_current_next_dkg_peers( +pub async fn get_existing_and_new_key_sets( + peer_state: Arc, +) -> Result<(Vec, Vec)> { + // if there are any key sets that are empty, we need to generate new root keys for them. + // we'll skip doing a regular DKG for already generated root keys / key sets during this epoch change. + let cdm = &peer_state.chain_data_config_manager; + let keysets = DataVersionReader::read_field_unchecked(&cdm.key_sets, |key_sets| { + key_sets.values().cloned().collect::>() + }); + + let mut new_key_sets = Vec::new(); + let mut existing_key_sets = Vec::new(); + for keyset in &keysets { + let curve_type = CurveType::K256; // should inspect the keyset and determine the curve type + let key_set_identifier = Some(keyset.identifier.clone()); + let curve_state = CurveState::new(peer_state.clone(), curve_type, key_set_identifier); + let root_keys = curve_state.root_keys(); + + // we assume that if some keys are present, then all keys are present. + match root_keys { + Ok(root_keys) => { + if root_keys.is_empty() { + new_key_sets.push(keyset.clone()); + } else { + existing_key_sets.push(keyset.clone()); + } + } + Err(e) => { + // this is temporary until we have a proper way to get the root keys from the chain. + warn!("Error in getting root keys: {}", e); + new_key_sets.push(keyset.clone()); + } + } + } + + trace!( + "Full key sets: {:?}", + existing_key_sets + .iter() + .map(|ks| ks.identifier.clone()) + .collect::>() + ); + trace!( + "Empty key sets: {:?}", + new_key_sets + .iter() + .map(|ks| ks.identifier.clone()) + .collect::>() + ); + Ok((existing_key_sets, new_key_sets)) +} + +pub async fn get_dkg_peers_and_keysets( dkg_manager: &DkgManager, realm_id: u64, is_shadow: bool, diff --git a/rust/lit-node/lit-node/src/tasks/fsm/mod.rs b/rust/lit-node/lit-node/src/tasks/fsm/mod.rs index 682f02f..9eee637 100644 --- a/rust/lit-node/lit-node/src/tasks/fsm/mod.rs +++ b/rust/lit-node/lit-node/src/tasks/fsm/mod.rs @@ -25,6 +25,7 @@ use lit_node_common::{ client_state::ClientState, config::{CFG_KEY_CHAIN_POLLING_INTERVAL_MS_DEFAULT, LitNodeConfig}, }; +use std::collections::HashMap; use std::sync::Arc; use std::time::Duration; use tokio::sync::mpsc; @@ -42,7 +43,11 @@ pub async fn node_fsm_worker( ) { let peer_state = standard_dkg_manager.tss_state.peer_state.clone(); let cfg = standard_dkg_manager.tss_state.lit_config.clone(); - let realm_id = fsm_realm_id(&peer_state, is_shadow).await; + + let mut root_keys = HashMap::>::new(); + let mut epoch_to_signal_ready = U256::from(0); + let mut previous_included_epoch_number = U256::from(0); // Any initial value will work + let mut previous_retries = U256::from(0); let interval_ms = cfg .load_full() .chain_polling_interval_ms() @@ -50,10 +55,7 @@ pub async fn node_fsm_worker( // These are the state changing variables that are used throughout the FSM loop. let mut interval = tokio::time::interval(Duration::from_millis(interval_ms)); - let mut root_keys: Vec = Vec::new(); - let mut epoch_to_signal_ready = U256::from(0); - let mut previous_included_epoch_number = U256::from(0); // Any initial value will work - let mut previous_retries = U256::from(0); + let realm_id = fsm_realm_id(&peer_state, is_shadow).await; // initialize the node state let mut node_state = NodeState::new(); node_state.next(Transition::Init); @@ -250,15 +252,9 @@ pub async fn node_fsm_worker( // Get the root keys from the epoch change results root_keys = match epoch_change_results { - Ok(root_keys_result) => match root_keys_result { - Some(root_keys) => root_keys, - None => { - debug!("root_keys_result == None for realm {}", realm_id); - continue; - } - }, - Err(e) => { - error!("Error in perform_epoch_change: {}", e); + Some(root_keys) => root_keys, + None => { + debug!("root_keys_result == None for realm {}", realm_id); continue; } }; @@ -511,13 +507,13 @@ pub async fn get_fsm_state( } pub async fn check_root_key_voting( - root_keys: &mut Vec, + root_keys: &mut HashMap>, cfg: &ReloadableLitConfig, peer_state: &Arc, epoch_number: U256, ) { if !root_keys.is_empty() && epoch_number >= U256::from(1) { - match vote_for_root_pubkeys(cfg, root_keys.clone(), peer_state).await { + match vote_for_root_pubkeys(cfg, root_keys, peer_state).await { Ok(result) => { if !result { info!("vote_for_root_pubkeys returned false"); @@ -535,9 +531,10 @@ pub async fn check_root_key_voting( } } } + pub async fn vote_for_root_pubkeys( cfg: &ReloadableLitConfig, - pubkeys: Vec, + pubkeys: &HashMap>, peer_state: &Arc, ) -> Result { use crate::pkp::utils::vote_for_root_key; @@ -545,19 +542,21 @@ pub async fn vote_for_root_pubkeys( info!("incoming root pubkeys: {:?}", pubkeys); - let mut root_keys: Vec = Vec::new(); - - for dkg_root_key in pubkeys { - let pk_bytes = hex_to_bytes(&dkg_root_key.public_key)?; - let rootkey = RootKey { - pubkey: Bytes::from(pk_bytes), - key_type: dkg_root_key.curve_type.into(), - }; - root_keys.push(rootkey); + let mut res = true; + for (key_set_id, dkg_root_key) in pubkeys { + let mut root_keys: Vec = Vec::with_capacity(dkg_root_key.len()); + for key in dkg_root_key { + let pk_bytes = hex_to_bytes(&key.public_key)?; + let rootkey = RootKey { + pubkey: Bytes::from(pk_bytes), + key_type: key.curve_type.into(), + }; + root_keys.push(rootkey); + } + info!("Root Keys to vote for: {:?}", root_keys); + res &= vote_for_root_key(&cfg.load_full(), key_set_id, root_keys, peer_state).await?; } - - info!("Root Keys to vote for: {:?}", root_keys); - vote_for_root_key(&cfg.load_full(), root_keys, peer_state).await + Ok(res) } pub async fn handle_not_part_of_validators_union( @@ -671,14 +670,6 @@ async fn check_recovery_dkg_complete( ) .await; - let recovery_keys_result = match recovery_keys_result { - Ok(recovery_keys_result) => recovery_keys_result, - Err(e) => { - error!("Error in perform_epoch_change: {}", e); - return false; - } - }; - // NOTE: We can't continue until it's registered on chain as other nodes won't know that the Recovery DKG is completed so they should keep on waiting let recovery_keys_result = match recovery_keys_result { Some(recovery_keys) => recovery_keys, diff --git a/rust/lit-node/lit-node/src/tasks/fsm/utils.rs b/rust/lit-node/lit-node/src/tasks/fsm/utils.rs index db7520c..34d6580 100644 --- a/rust/lit-node/lit-node/src/tasks/fsm/utils.rs +++ b/rust/lit-node/lit-node/src/tasks/fsm/utils.rs @@ -8,7 +8,7 @@ use crate::tss::common::tss_state::TssState; use crate::utils::key_share_proof::{ KeyShareProofs, compute_key_share_proofs, verify_key_share_proofs, }; -use crate::version::get_version; +use crate::version::{DataVersionReader, get_version}; use ethers::types::U256; use lit_blockchain::contracts::staking::Version; use lit_core::error::Result; @@ -142,7 +142,7 @@ pub(crate) async fn fsm_realm_id(peer_state: &Arc, is_shadow: bool) - pub(crate) async fn key_share_proofs_check( tss_state: &Arc, - root_key_res: &Result>, + root_key_res: &HashMap>, peers: &SimplePeerCollection, latest_dkg_id: &str, realm_id: u64, @@ -154,108 +154,124 @@ pub(crate) async fn key_share_proofs_check( return Ok(()); // no need to compute key share proofs } - let mut root_keys = Vec::new(); - if let Ok(rk) = root_key_res { - if !rk.is_empty() { - root_keys = rk.clone(); - } - } - if root_keys.is_empty() { - root_keys = tss_state.chain_data_config_manager.root_keys(); - } - - trace!("Root keys for key share proofs: {:?}", root_keys); - let mut root_keys_map = HashMap::>::with_capacity(root_keys.len()); - for root_key in root_keys { - root_keys_map - .entry(root_key.curve_type) - .and_modify(|v| v.push(root_key.public_key.clone())) - .or_insert(vec![root_key.public_key.clone()]); + let mut root_keys = HashMap::new(); + if !root_key_res.is_empty() { + root_keys = root_key_res.clone(); } + trace!( + "Key share proofs check incoming root keys - root keys {:?}", + root_keys + ); + let root_keys_map: Vec<(String, HashMap>)> = if root_keys.is_empty() { + DataVersionReader::read_field_unchecked( + &tss_state.chain_data_config_manager.key_sets, + |key_sets| { + key_sets + .values() + .map(|config| (config.identifier.clone(), config.root_keys_by_curve.clone())) + .collect() + }, + ) + } else { + let mut map = Vec::with_capacity(root_keys.len()); + for (identifier, keys) in &root_keys { + let l = keys.len(); + let mut dkg_keys = HashMap::with_capacity(l); + for k in keys { + dkg_keys + .entry(k.curve_type) + .and_modify(|v: &mut Vec| v.push(k.public_key.clone())) + .or_insert_with(|| { + let mut v = Vec::with_capacity(l); + v.push(k.public_key.clone()); + v + }); + } + map.push((identifier.clone(), dkg_keys)); + } + map + }; + trace!("Key share proof check - root keys: {:?}", root_keys_map); - let noonce = format!("{}-{}", epoch, lifecycle_id); - trace!("Key share proofs nonce signed: {}", noonce); - - let proofs = compute_key_share_proofs( - &noonce, - &root_keys_map, - &tss_state.addr, - peers, - realm_id, - epoch, - ) - .await?; - trace!("Key share proofs generated"); + for (identifier, map) in &root_keys_map { + let noonce = format!("{}-{}-{}", epoch, lifecycle_id, identifier); + trace!("Key share proofs nonce signed: {}", noonce); + let proofs = + compute_key_share_proofs(&noonce, map, &tss_state.addr, peers, realm_id, epoch).await?; + trace!("Key share proofs generated"); - let txn_prefix = format!( - "KEYSHAREPROOFS_{}-{}_1_{}_{}", - epoch, - lifecycle_id, - peers.hash(), - realm_id - ); + let txn_prefix = format!( + "KEYSHAREPROOFS_{}-{}_1_{}_{}", + epoch, + lifecycle_id, + peers.hash(), + realm_id + ); - let cm = CommsManager::new_with_peers(tss_state, &txn_prefix, peers, "10").await?; + let cm = CommsManager::new_with_peers(tss_state, &txn_prefix, peers, "10").await?; - let received: Vec<(PeerId, KeyShareProofs)> = cm.broadcast_and_collect(&proofs).await?; - trace!("Received key share proofs: {}", received.len()); + let received: Vec<(PeerId, KeyShareProofs)> = cm.broadcast_and_collect(&proofs).await?; + trace!("Received key share proofs: {}", received.len()); - let mut any_failed = false; - for (peer_id, key_share_proofs) in received { - trace!( - "Key share proofs for peer: {} - {}", - peer_id, - key_share_proofs.proofs.len() - ); - let peer = peers.peer_by_id(&peer_id)?; - let res = verify_key_share_proofs( - &root_keys_map, - &noonce, - &tss_state.addr, - &peer.socket_address, - &tss_state.peer_state.hex_staker_address(), - &key_share_proofs, - peers, - epoch, - realm_id, - ) - .await?; + let mut any_failed = false; + for (peer_id, key_share_proofs) in received { + trace!( + "Key share proofs for peer: {} - {}", + peer_id, + key_share_proofs.proofs.len() + ); + let peer = peers.peer_by_id(&peer_id)?; + let res = verify_key_share_proofs( + map, + &noonce, + &tss_state.addr, + &peer.socket_address, + &tss_state.peer_state.hex_staker_address(), + &key_share_proofs, + peers, + epoch, + realm_id, + ) + .await?; - for (curve, result) in res { - if result.is_err() { - if !any_failed { - any_failed = true; - error!( - "Key share proof verification failed for peer {} - curve {}: {:?} - complaining", - peer.socket_address, curve, result - ); - tss_state - .peer_state - .complaint_channel - .send_async(PeerComplaint { - complainer: tss_state.peer_state.addr.clone(), - issue: Issue::KeyShareValidationFailure(curve), - peer_node_staker_address: peer.staker_address, - peer_node_socket_address: peer.socket_address.clone(), - }) - .await - .map_err(|e| unexpected_err(e, Some("Unable to complain".to_string())))?; - } else { - error!( - "Key share proof verification failed for peer {} - curve {}: {:?} - already complainted for this DKG.", - peer.socket_address, curve, result - ); + for (curve, result) in res { + if result.is_err() { + if !any_failed { + any_failed = true; + error!( + "Key share proof verification failed for peer {} - curve {}: {:?} - complaining", + peer.socket_address, curve, result + ); + tss_state + .peer_state + .complaint_channel + .send_async(PeerComplaint { + complainer: tss_state.peer_state.addr.clone(), + issue: Issue::KeyShareValidationFailure(curve), + peer_node_staker_address: peer.staker_address, + peer_node_socket_address: peer.socket_address.clone(), + }) + .await + .map_err(|e| { + unexpected_err(e, Some("Unable to complain".to_string())) + })?; + } else { + error!( + "Key share proof verification failed for peer {} - curve {}: {:?} - already complained for this DKG.", + peer.socket_address, curve, result + ); + } } } } + if any_failed { + return Err(unexpected_err( + "Key share proof verification failed".to_string(), + None, + )); + } + trace!("Valid key share proofs for key set {}", identifier); } - if any_failed { - return Err(unexpected_err( - "Key share proof verification failed".to_string(), - None, - )); - } - trace!("Valid key share proofs"); Ok(()) } diff --git a/rust/lit-node/lit-node/src/tss/blsful/mod.rs b/rust/lit-node/lit-node/src/tss/blsful/mod.rs index 264d719..795cbee 100644 --- a/rust/lit-node/lit-node/src/tss/blsful/mod.rs +++ b/rust/lit-node/lit-node/src/tss/blsful/mod.rs @@ -1,10 +1,12 @@ pub mod models; use crate::error::{Result, unexpected_err}; use crate::tss::blsful::models::BlsState; +use crate::tss::common::curve_state::CurveState; use crate::tss::common::hd_keys::get_derived_keyshare; use crate::tss::common::key_share::KeyShare; use crate::tss::common::traits::signable::Signable; use crate::tss::common::{storage::read_key_share_from_disk, traits::cipherable::Cipherable}; +use crate::utils::web::get_bls_root_pubkey; use blsful::{Pairing, SecretKeyShare, SignatureShare, vsss_rs::Share}; use elliptic_curve::Group; use hd_keys_curves::HDDeriver; @@ -21,18 +23,11 @@ impl Cipherable for BlsState { async fn sign( &self, message_bytes: &[u8], + key_set_id: Option<&str>, epoch: Option, ) -> Result<(SignatureShare, PeerId)> { - let dkg_state = self.state.get_dkg_state(CurveType::BLS)?; - let root_keys = dkg_state.root_keys().await; - if root_keys.is_empty() { - return Err(unexpected_err( - "No primary BLS key found!".to_string(), - None, - )); - } - - self.sign_with_pubkey(message_bytes, &root_keys[0], epoch) + let bls_root_pubkey = get_bls_root_pubkey(&self.state, key_set_id)?; + self.sign_with_pubkey(message_bytes, &bls_root_pubkey, key_set_id, epoch) .await } @@ -41,6 +36,7 @@ impl Cipherable for BlsState { &self, message_bytes: &[u8], pub_key: &str, + key_set_id: Option<&str>, epoch: Option, ) -> Result<(SignatureShare, PeerId)> { trace!( @@ -62,9 +58,9 @@ impl Signable for BlsState { &mut self, message_bytes: &[u8], public_key: Vec, - root_pubkeys: Option>, tweak_preimage: Option>, request_id: Vec, + key_set_id: Option<&str>, epoch: Option, nodeset: &[NodeSet], ) -> Result { @@ -102,13 +98,14 @@ impl Signable for BlsState { let key_id = tweak_preimage.expect_or_err("No hd_key_id provided!")?; let realm_id = self.state.peer_state.realm_id(); - let dkg_state = self.state.get_dkg_state(CurveType::BLS12381G1)?; - let root_keys = dkg_state.root_keys().await; - if root_keys.is_empty() { - return Err(unexpected_err( - "No primary BLS key found!".to_string(), - None, - )); + let curve_state = CurveState::new( + self.state.peer_state.clone(), + CurveType::BLS12381G1, + key_set_id.map(String::from), + ); + let root_keys = curve_state.root_keys()?; + if root_keys.len() < 2 { + return Err(unexpected_err("No BLS root keys found!".to_string(), None)); } let staker_address = &bytes_to_hex(self_peer.staker_address.as_bytes()); let deriver = ::create( diff --git a/rust/lit-node/lit-node/src/tss/common/curve_state.rs b/rust/lit-node/lit-node/src/tss/common/curve_state.rs index 394d6a6..cbaae6b 100644 --- a/rust/lit-node/lit-node/src/tss/common/curve_state.rs +++ b/rust/lit-node/lit-node/src/tss/common/curve_state.rs @@ -1,21 +1,98 @@ -use crate::tss::common::traits::dkg::BasicDkg; -use crate::tss::common::tss_state::TssState; +use crate::error::blockchain_err; +use crate::models::KeySetConfig; +use crate::peers::PeerState; +use crate::version::DataVersionReader; use lit_node_core::CurveType; use std::sync::Arc; #[derive(Clone, Debug)] pub struct CurveState { - pub state: Arc, + pub peer_state: Arc, pub curve_type: CurveType, + pub key_set_identifier: Option, } -#[async_trait::async_trait] -impl BasicDkg for CurveState { - fn tss_state(&self) -> Arc { - self.state.clone() +impl CurveState { + pub fn new( + peer_state: Arc, + curve_type: CurveType, + key_set_identifier: Option, + ) -> Self { + Self { + peer_state, + curve_type, + key_set_identifier, + } } - fn curve_type(&self) -> CurveType { - self.curve_type + pub fn root_keys(&self) -> lit_core::error::Result> { + Ok(match &self.key_set_identifier { + None => { + let default_key_set = DataVersionReader::read_field_unchecked( + &self.peer_state.chain_data_config_manager.generic_config, + |generic_config| generic_config.default_key_set.clone(), + ); + match &default_key_set { + Some(key_set_id) => self.get_root_keys_by_key_set_id(key_set_id)?, + None => DataVersionReader::read_field_unchecked( + &self.peer_state.chain_data_config_manager.key_sets, + |key_sets| { + Ok::, lit_core::error::Error>( + key_sets + .values() + .find(|&config| valid_key_set(config, self.curve_type)) + .ok_or_else(|| { + blockchain_err( + format!( + "No key set with curve type {} exists", + self.curve_type + ), + None, + ) + })? + .root_keys_by_curve[&self.curve_type] + .clone(), + ) + }, + )?, + } + } + Some(key_set_id) => self.get_root_keys_by_key_set_id(key_set_id)?, + }) } + + fn get_root_keys_by_key_set_id( + &self, + key_set_id: &str, + ) -> lit_core::error::Result> { + DataVersionReader::read_field_unchecked( + &self.peer_state.chain_data_config_manager.key_sets, + |key_sets| { + let config = key_sets.get(key_set_id).ok_or_else(|| { + blockchain_err( + format!("No key set with identifier {} exists", key_set_id), + None, + ) + })?; + if valid_key_set(config, self.curve_type) { + Ok(config.root_keys_by_curve[&self.curve_type].clone()) + } else { + Err(blockchain_err( + format!( + "Key set with identifier {} does not contain any root keys with curve type {}", + key_set_id, self.curve_type + ), + None, + )) + } + }, + ) + } +} + +fn valid_key_set(config: &KeySetConfig, curve_type: CurveType) -> bool { + config.root_keys_by_curve.contains_key(&curve_type) + && config.root_key_counts.contains_key(&curve_type) + && config.root_key_counts[&curve_type] > 0 + && !config.root_keys_by_curve[&curve_type].is_empty() } diff --git a/rust/lit-node/lit-node/src/tss/common/hd_keys.rs b/rust/lit-node/lit-node/src/tss/common/hd_keys.rs index 56c628b..ea4602b 100644 --- a/rust/lit-node/lit-node/src/tss/common/hd_keys.rs +++ b/rust/lit-node/lit-node/src/tss/common/hd_keys.rs @@ -11,8 +11,6 @@ use lit_node_core::CurveType; use lit_node_core::PeerId; use tracing::instrument; -pub const ID_SIGN_CTX: &[u8] = b"LIT_HD_KEY_ID_K256_XMD:SHA-256_SSWU_RO_NUL_"; - #[allow(clippy::too_many_arguments)] #[instrument(level = "debug", skip_all)] pub async fn get_derived_keyshare( diff --git a/rust/lit-node/lit-node/src/tss/common/mod.rs b/rust/lit-node/lit-node/src/tss/common/mod.rs index 6fb478b..a71965c 100644 --- a/rust/lit-node/lit-node/src/tss/common/mod.rs +++ b/rust/lit-node/lit-node/src/tss/common/mod.rs @@ -1,6 +1,6 @@ pub mod backup; pub mod contract; -mod curve_state; +pub mod curve_state; pub mod dkg_type; pub mod hd_keys; pub mod key_persistence; diff --git a/rust/lit-node/lit-node/src/tss/common/restore/eks_and_ds.rs b/rust/lit-node/lit-node/src/tss/common/restore/eks_and_ds.rs index ab1f5a9..e61c119 100644 --- a/rust/lit-node/lit-node/src/tss/common/restore/eks_and_ds.rs +++ b/rust/lit-node/lit-node/src/tss/common/restore/eks_and_ds.rs @@ -21,6 +21,16 @@ use vsss_rs::{ VecFeldmanVerifierSet, }; +/// Parameters for restoring key shares +pub struct RestoreParams<'a> { + pub threshold: usize, + pub current_peer_id: &'a PeerId, + pub epoch: u64, + pub realm_id: u64, + pub staker_address: &'a str, + pub restore_key_cache: &'a KeyCache, +} + /// Identifier for a Recovery Party member. pub type RecPartyMemberIdType = String; /// Decryption shares @@ -60,28 +70,10 @@ where ::Point: CompressedBytes, C::Scalar: CompressedBytes + From, { - pub async fn try_restore( - &self, - threshold: usize, - current_peer_id: &PeerId, - epoch: u64, - realm_id: u64, - staker_address: &str, - restore_key_cache: &KeyCache, - ) -> Vec { + pub async fn try_restore(&self, params: &RestoreParams<'_>) -> Vec { let mut restored_keys = Vec::new(); for eks_and_ds in self.eks_and_ds.iter() { - let restore_result = eks_and_ds - .try_restore( - threshold, - &self.blinder, - current_peer_id, - epoch, - realm_id, - staker_address, - restore_key_cache, - ) - .await; + let restore_result = eks_and_ds.try_restore(&self.blinder, params).await; if let Some(public_key) = restore_result { restored_keys.push(public_key); }; @@ -197,20 +189,15 @@ where #[allow(clippy::too_many_arguments)] pub async fn try_restore( &self, - threshold: usize, blinder: &C::Scalar, - current_peer_id: &PeerId, - epoch: u64, - realm_id: u64, - staker_address: &str, - restore_key_cache: &KeyCache, + params: &RestoreParams<'_>, ) -> Option { // If this key is already restored, return. if self.restored { return None; } // If this key does not have enough decryption shares, don't attempt. - if self.decryption_shares.len() < threshold { + if self.decryption_shares.len() < params.threshold { return None; } @@ -266,7 +253,7 @@ where threshold: self.encrypted_key_share.threshold, total_shares: self.encrypted_key_share.total_shares, txn_prefix: self.encrypted_key_share.txn_prefix.clone(), - realm_id, + realm_id: params.realm_id, peers: self .encrypted_key_share .peers @@ -279,11 +266,11 @@ where &self.encrypted_key_share.public_key, // Make sure to compute the file name with the peer id of // the current peer, so that it can later be found by this node. - current_peer_id, - staker_address, - epoch, - realm_id, - restore_key_cache, + params.current_peer_id, + params.staker_address, + params.epoch, + params.realm_id, + params.restore_key_cache, &key_share, ) .await diff --git a/rust/lit-node/lit-node/src/tss/common/restore/restore_state.rs b/rust/lit-node/lit-node/src/tss/common/restore/restore_state.rs index 273106e..147fe80 100644 --- a/rust/lit-node/lit-node/src/tss/common/restore/restore_state.rs +++ b/rust/lit-node/lit-node/src/tss/common/restore/restore_state.rs @@ -12,15 +12,16 @@ use tokio::sync::RwLock; use tracing::{instrument, warn}; use crate::common::key_helper::KeyCache; -use crate::config::chain::CachedRootKey; use crate::error::{Result, conversion_err, parser_err, unexpected_err}; +use crate::models::KeySetConfig; use crate::tss::common::key_persistence::KeyPersistence; use crate::tss::common::restore::eks_and_ds::{ - CurveRecoveryData, EksAndDs, RecPartyMemberIdType, RootKeyRecoveryLog, + CurveRecoveryData, EksAndDs, RecPartyMemberIdType, RestoreParams, RootKeyRecoveryLog, }; use crate::tss::common::restore::point_reader::PointReader; use crate::tss::common::tss_state::TssState; use crate::utils::contract::get_backup_recovery_contract_with_signer; +use crate::utils::traits::SignatureCurve; use crate::version::{DataVersionReader, DataVersionWriter}; use lit_blockchain::contracts::backup_recovery::{BackupRecoveryErrors, RecoveredPeerId}; use lit_core::config::LitConfig; @@ -41,7 +42,7 @@ pub struct RestoreState { blinders: AtomicShared, actively_restoring: AtomicBool, state: RwLock>, - restoring_root_keys: AtomicShared>, + restoring_key_set: AtomicShared, } /// Inner state kept by RestoreState. @@ -70,7 +71,7 @@ impl RestoreState { blinders: AtomicShared::from(Shared::new(Self::generate_blinders())), actively_restoring: AtomicBool::new(false), state: RwLock::new(None), - restoring_root_keys: AtomicShared::from(Shared::new(Vec::new())), + restoring_key_set: AtomicShared::from(Shared::new(KeySetConfig::default())), } } @@ -80,11 +81,47 @@ impl RestoreState { self.init_inner_state().await; tss_state .chain_data_config_manager - .set_root_keys_from_chain() + .set_all_config_from_chain() .await?; - let root_keys = tss_state.chain_data_config_manager.root_keys(); - debug!("Restoring root keys: {:?}", &root_keys); - DataVersionWriter::store(&self.restoring_root_keys, root_keys); + tss_state + .chain_data_config_manager + .set_key_sets_from_chain() + .await?; + let default_key_set = DataVersionReader::read_field_unchecked( + &tss_state.chain_data_config_manager.generic_config, + |generic_config| generic_config.default_key_set.clone(), + ); + let key_set = DataVersionReader::read_field_unchecked( + &tss_state.chain_data_config_manager.key_sets, + |key_sets| { + let key_set = match &default_key_set { + Some(id) => match key_sets.get(id) { + Some(key_set) => key_set.clone(), + None => { + return Err(unexpected_err( + format!( + "Expected key set config information for {} but it doesn't exist", + id + ), + None, + )); + } + }, + None => match key_sets.first_key_value() { + Some((_id, key_set)) => key_set.clone(), + None => { + return Err(unexpected_err( + "No key sets exist to restore".to_string(), + None, + )); + } + }, + }; + Ok(key_set) + }, + )?; + debug!("Restoring key set: {:?}", &key_set); + DataVersionWriter::store(&self.restoring_key_set, key_set); Ok(()) } @@ -251,134 +288,53 @@ impl RestoreState { return restored_key_shares; }; + let params = RestoreParams { + threshold: state.threshold, + current_peer_id: peer_id, + epoch, + realm_id, + staker_address, + restore_key_cache: &state.restored_key_cache, + }; + if let Some(recovery_data) = &state.bls_recovery_data { - restored_key_shares.bls_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.bls_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.k256_recovery_data { - restored_key_shares.k256_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.k256_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.p256_recovery_data { - restored_key_shares.p256_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.p256_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.p384_recovery_data { - restored_key_shares.p384_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.p384_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.ed25519_recovery_data { - restored_key_shares.ed25519_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.ed25519_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.ristretto25519_recovery_data { - restored_key_shares.ristretto25519_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.ristretto25519_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.ed448_recovery_data { - restored_key_shares.ed448_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.ed448_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.jubjub_recovery_data { - restored_key_shares.jubjub_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.jubjub_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.decaf377_recovery_data { - restored_key_shares.decaf377_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.decaf377_shares = recovery_data.try_restore(¶ms).await; } if let Some(recovery_data) = &state.bls12381g1_recovery_data { - restored_key_shares.bls12381g1_shares = recovery_data - .try_restore( - state.threshold, - peer_id, - epoch, - realm_id, - staker_address, - &state.restored_key_cache, - ) - .await; + restored_key_shares.bls12381g1_shares = recovery_data.try_restore(¶ms).await; } restored_key_shares @@ -448,56 +404,85 @@ impl RestoreState { return false; }; - let restoring_root_keys = DataVersionReader::new_unchecked(&self.restoring_root_keys); + let root_keys_by_curve = { + DataVersionReader::new_unchecked(&self.restoring_key_set) + .root_keys_by_curve + .clone() + }; let mut restored = true; - for root_key in restoring_root_keys.iter() { - let r = match root_key.curve_type { - CurveType::BLS => CurveRecoveryData::are_all_keys_restored( + for (curve_type, root_keys) in root_keys_by_curve.iter() { + let r = match curve_type { + CurveType::BLS => Self::are_all_curve_keys_restored( + *curve_type, &state.bls_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::K256 => CurveRecoveryData::are_all_keys_restored( + CurveType::K256 => Self::are_all_curve_keys_restored( + *curve_type, &state.k256_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::P256 => CurveRecoveryData::are_all_keys_restored( + CurveType::P256 => Self::are_all_curve_keys_restored( + *curve_type, &state.p256_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::P384 => CurveRecoveryData::are_all_keys_restored( + CurveType::P384 => Self::are_all_curve_keys_restored( + *curve_type, &state.p384_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::Ed25519 => CurveRecoveryData::are_all_keys_restored( + CurveType::Ed25519 => Self::are_all_curve_keys_restored( + *curve_type, &state.ed25519_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::Ed448 => CurveRecoveryData::are_all_keys_restored( + CurveType::Ed448 => Self::are_all_curve_keys_restored( + *curve_type, &state.ed448_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::Ristretto25519 => CurveRecoveryData::are_all_keys_restored( + CurveType::Ristretto25519 => Self::are_all_curve_keys_restored( + *curve_type, &state.ristretto25519_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::RedJubjub => CurveRecoveryData::are_all_keys_restored( + CurveType::RedJubjub => Self::are_all_curve_keys_restored( + *curve_type, &state.jubjub_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::RedDecaf377 => CurveRecoveryData::are_all_keys_restored( + CurveType::RedDecaf377 => Self::are_all_curve_keys_restored( + *curve_type, &state.decaf377_recovery_data, - &root_key.public_key, + root_keys, ), - CurveType::BLS12381G1 => CurveRecoveryData::are_all_keys_restored( + CurveType::BLS12381G1 => Self::are_all_curve_keys_restored( + *curve_type, &state.bls12381g1_recovery_data, - &root_key.public_key, + root_keys, ), }; - debug!( - "Root key is restored: {} {} {}", - root_key.curve_type, root_key.public_key, r - ); + restored &= r; + } + restored + } + + fn are_all_curve_keys_restored( + curve_type: CurveType, + recovery_data: &Option>, + root_keys: &[String], + ) -> bool + where + C: VerifiableEncryptionDecryptor + SignatureCurve::Point>, + ::Point: CompressedBytes, + C::Scalar: CompressedBytes + From, + { + let mut restored = true; + for root_key in root_keys { + let r = CurveRecoveryData::are_all_keys_restored(recovery_data, root_key); + debug!("Root key is restored: {} {} {}", curve_type, root_key, r); restored &= r; } restored @@ -556,6 +541,12 @@ impl RestoreState { } } + pub fn get_expected_recovery_session_id(&self) -> String { + DataVersionReader::new_unchecked(&self.restoring_key_set) + .recovery_session_id + .clone() + } + pub async fn pull_recovered_key_cache(&self) -> Result { self.assert_actively_restoring()?; @@ -1005,6 +996,7 @@ mod tests { use crate::tss::common::storage::{ StorageType, read_key_share_from_disk, read_recovery_data_from_disk, }; + use crate::tss::util::DEFAULT_KEY_SET_NAME; use async_std::path::PathBuf; use blsful::inner_types::G1Projective; use elliptic_curve::Group; @@ -1107,16 +1099,23 @@ mod tests { blinders: AtomicShared::new(blinders), actively_restoring: AtomicBool::new(true), state: RwLock::new(None), - restoring_root_keys: AtomicShared::new(vec![ - CachedRootKey { - curve_type: CurveType::BLS, - public_key: BLS_ROOT_KEY.to_string(), + restoring_key_set: AtomicShared::new(KeySetConfig { + identifier: DEFAULT_KEY_SET_NAME.to_string(), + description: String::new(), + minimum_threshold: 3, + monetary_value: 0, + complete_isolation: false, + realms: maplit::hashset![1], + root_keys_by_curve: maplit::hashmap! { + CurveType::BLS => vec![BLS_ROOT_KEY.to_string()], + CurveType::K256 => vec![K256_ROOT_KEY.to_string()] }, - CachedRootKey { - curve_type: CurveType::K256, - public_key: K256_ROOT_KEY.to_string(), + root_key_counts: maplit::hashmap! { + CurveType::BLS => 1, + CurveType::K256 => 1, }, - ]), + recovery_session_id: "".to_string(), + }), }; // Generate recovery party members diff --git a/rust/lit-node/lit-node/src/tss/common/storage.rs b/rust/lit-node/lit-node/src/tss/common/storage.rs index c4b64a0..75e709e 100644 --- a/rust/lit-node/lit-node/src/tss/common/storage.rs +++ b/rust/lit-node/lit-node/src/tss/common/storage.rs @@ -486,7 +486,7 @@ async fn delete_from_disk(path: PathBuf, key_cache: &KeyCache) -> Result<()> { .to_str() .expect("Could not convert path to string") .to_string(); - key_cache.as_ref().remove(&key_path); + key_cache.as_ref().remove_async(&key_path).await; Ok(()) } diff --git a/rust/lit-node/lit-node/src/tss/common/traits/cipherable.rs b/rust/lit-node/lit-node/src/tss/common/traits/cipherable.rs index 26c7914..9b200ba 100644 --- a/rust/lit-node/lit-node/src/tss/common/traits/cipherable.rs +++ b/rust/lit-node/lit-node/src/tss/common/traits/cipherable.rs @@ -8,6 +8,7 @@ pub trait Cipherable: Debug + Send + Sync { async fn sign( &self, message_bytes: &[u8], + key_set_id: Option<&str>, epoch: Option, ) -> Result<(SignatureShare, PeerId)>; @@ -15,6 +16,7 @@ pub trait Cipherable: Debug + Send + Sync { &self, message_bytes: &[u8], public_key: &str, + key_set_id: Option<&str>, epoch: Option, ) -> Result<(SignatureShare, PeerId)>; } diff --git a/rust/lit-node/lit-node/src/tss/common/traits/dkg.rs b/rust/lit-node/lit-node/src/tss/common/traits/dkg.rs deleted file mode 100644 index 95ba353..0000000 --- a/rust/lit-node/lit-node/src/tss/common/traits/dkg.rs +++ /dev/null @@ -1,23 +0,0 @@ -use crate::version::DataVersionReader; -use lit_node_core::CurveType; -use std::{fmt::Debug, sync::Arc}; - -#[async_trait::async_trait] -pub trait BasicDkg: Debug + Send + Sync { - fn tss_state(&self) -> Arc; - fn curve_type(&self) -> CurveType; - async fn root_keys(&self) -> Vec { - let curve_type = self.curve_type(); - DataVersionReader::read_field_unchecked( - &self.tss_state().chain_data_config_manager.root_keys, - |crk| { - crk.iter() - .filter_map(|k| match k.curve_type == curve_type { - true => Some(k.public_key.clone()), - false => None, - }) - .collect() - }, - ) - } -} diff --git a/rust/lit-node/lit-node/src/tss/common/traits/mod.rs b/rust/lit-node/lit-node/src/tss/common/traits/mod.rs index 15aa9bb..763859f 100644 --- a/rust/lit-node/lit-node/src/tss/common/traits/mod.rs +++ b/rust/lit-node/lit-node/src/tss/common/traits/mod.rs @@ -1,5 +1,4 @@ pub mod cipherable; -pub mod dkg; pub mod fsm_worker_metadata; pub mod signable; mod vrf; diff --git a/rust/lit-node/lit-node/src/tss/common/traits/signable.rs b/rust/lit-node/lit-node/src/tss/common/traits/signable.rs index 24f07a6..e313123 100644 --- a/rust/lit-node/lit-node/src/tss/common/traits/signable.rs +++ b/rust/lit-node/lit-node/src/tss/common/traits/signable.rs @@ -9,9 +9,9 @@ pub trait Signable: Debug + Send + Sync { &mut self, message_bytes: &[u8], public_key: Vec, - root_pubkeys: Option>, tweak_preimage: Option>, request_id: Vec, + key_set_id: Option<&str>, epoch: Option, nodeset: &[NodeSet], ) -> Result; diff --git a/rust/lit-node/lit-node/src/tss/common/traits/vrf.rs b/rust/lit-node/lit-node/src/tss/common/traits/vrf.rs index 5b13f96..b6cbaa0 100644 --- a/rust/lit-node/lit-node/src/tss/common/traits/vrf.rs +++ b/rust/lit-node/lit-node/src/tss/common/traits/vrf.rs @@ -1,14 +1,16 @@ use crate::error::Result; -use crate::tss::common::traits::dkg::BasicDkg; +use crate::tss::common::curve_state::CurveState; use elliptic_curve::{Group, group::GroupEncoding}; use lit_vrf::Proof; #[allow(dead_code)] #[async_trait::async_trait] -pub trait Vrf: BasicDkg +pub trait Vrf where G: Group + GroupEncoding + Default, { + fn curve_state(&self) -> CurveState; + async fn prove(&self, message: &[u8]) -> Result>; async fn verify(&self, message: &[u8], proof: Proof) -> Result<()>; diff --git a/rust/lit-node/lit-node/src/tss/common/tss_state.rs b/rust/lit-node/lit-node/src/tss/common/tss_state.rs index 05aea55..ab58994 100644 --- a/rust/lit-node/lit-node/src/tss/common/tss_state.rs +++ b/rust/lit-node/lit-node/src/tss/common/tss_state.rs @@ -1,6 +1,5 @@ use super::models::{NodeTransmissionDetails, RoundData}; use super::traits::cipherable::Cipherable; -use super::traits::dkg::BasicDkg; use super::traits::signable::Signable; use crate::common::key_helper::KeyCache; use crate::config::chain::ChainDataConfigManager; @@ -187,12 +186,6 @@ impl TssState { Ok(cipher_state) } - #[instrument(level = "debug", skip(self))] - pub fn get_dkg_state(&self, curve_type: CurveType) -> Result> { - let state = Arc::new(self.clone()); - Ok(Box::new(CurveState { state, curve_type }) as Box) - } - pub async fn get_threshold_using_current_epoch_realm_peers_for_curve( &self, peers: &SimplePeerCollection, @@ -201,8 +194,10 @@ impl TssState { ) -> Result { let self_peer = peers.peer_at_address(&self.addr)?; - let dkg_state = self.get_dkg_state(curve_type)?; - let root_keys = dkg_state.root_keys().await; + // Shouldn't matter which key set is used, all the keys on this + // node should have the same threshold + let curve_state = CurveState::new(self.peer_state.clone(), curve_type, None); + let root_keys = curve_state.root_keys()?; if root_keys.is_empty() { return Err(unexpected_err( @@ -213,10 +208,7 @@ impl TssState { let staker_address = &bytes_to_hex(self_peer.staker_address.as_bytes()); let realm_id = self.peer_state.realm_id(); - let epoch = match epoch { - Some(e) => e, - None => self.peer_state.epoch(), - }; + let epoch = epoch.unwrap_or_else(|| self.peer_state.epoch()); let keyshare = read_key_share_from_disk::( curve_type, diff --git a/rust/lit-node/lit-node/src/tss/dkg/engine.rs b/rust/lit-node/lit-node/src/tss/dkg/engine.rs index 9983253..e66a51b 100644 --- a/rust/lit-node/lit-node/src/tss/dkg/engine.rs +++ b/rust/lit-node/lit-node/src/tss/dkg/engine.rs @@ -99,10 +99,17 @@ impl DkgEngine { } /// Add a DKG to be computed - pub fn add_dkg(&mut self, dkg_id: &str, curve_type: CurveType, pubkey: Option) { + pub fn add_dkg( + &mut self, + dkg_id: &str, + key_set_id: &str, + curve_type: CurveType, + pubkey: Option, + ) { let dkg_data = DkgData { dkg_id: dkg_id.to_string(), curve_type, + key_set_id: key_set_id.to_string(), pubkey: pubkey.clone(), result: None, }; @@ -299,7 +306,7 @@ impl DkgEngine { } } - let txn_prefix = format!("{}.{}_keyset1", root_dkg_id, self.dkg_type); + let txn_prefix = format!("{}.{}_keyset", root_dkg_id, self.dkg_type); trace!( "Node {} - Using DKG txn prefix: {}, realm_id: {}", self_peer.peer_id, txn_prefix, realm_id @@ -940,30 +947,24 @@ impl DkgEngine { } } -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Default)] pub struct DkgData { pub(crate) dkg_id: String, + pub(crate) key_set_id: String, pub(crate) curve_type: CurveType, pub(crate) pubkey: Option, pub(crate) result: Option, } -impl Default for DkgData { - fn default() -> Self { - Self { - dkg_id: "".to_string(), - curve_type: CurveType::BLS, - pubkey: None, - result: None, - } - } -} - impl DkgData { pub fn dkg_id(&self) -> &str { &self.dkg_id } + pub fn key_set_id(&self) -> &str { + &self.key_set_id + } + pub fn curve_type(&self) -> CurveType { self.curve_type } diff --git a/rust/lit-node/lit-node/src/tss/dkg/manager.rs b/rust/lit-node/lit-node/src/tss/dkg/manager.rs index 020e03d..e6b949b 100644 --- a/rust/lit-node/lit-node/src/tss/dkg/manager.rs +++ b/rust/lit-node/lit-node/src/tss/dkg/manager.rs @@ -1,13 +1,14 @@ use crate::config::chain::CachedRootKey; use crate::error::{Result, unexpected_err}; +use crate::models::KeySetConfig; use crate::peers::peer_state::models::SimplePeerCollection; use crate::tss::common::dkg_type::DkgType; use crate::tss::common::tss_state::TssState; use crate::tss::dkg::engine::{DkgAfterRestore, DkgEngine}; use crate::tss::dkg::models::Mode; -use crate::tss::util::DEFAULT_KEY_SET_NAME; +use crate::version::DataVersionWriter; use lit_core::error::Unexpected; -use lit_node_core::CurveType; +use std::collections::HashMap; use std::sync::Arc; use tracing::instrument; @@ -36,17 +37,8 @@ impl DkgManager { realm_id: u64, current_peers: &SimplePeerCollection, new_peers: &SimplePeerCollection, - ) -> Result> { - let key_set_config = self - .tss_state - .peer_state - .staking_contract - .get_key_set(DEFAULT_KEY_SET_NAME.to_string()) - .call() - .await - .map_err(|e| unexpected_err(e, None))?; - - let mut root_keys: Vec = Vec::new(); + key_sets: &Vec, + ) -> Result>> { let threshold = self .tss_state .peer_state @@ -63,46 +55,39 @@ impl DkgManager { new_peers, self.next_dkg_after_restore.clone(), ); - let chain_root_keys = if current_peers.is_empty() { - Vec::new() - } else { - self.root_keys() - }; - for (curve_type, hd_root_key_count) in key_set_config - .curves - .iter() - .zip(key_set_config.counts.iter()) - { - let curve_type = - CurveType::try_from(*curve_type).map_err(|e| unexpected_err(e, None))?; - let hd_root_key_count = match self.dkg_type { - DkgType::RecoveryParty => 1, - DkgType::Standard => hd_root_key_count.as_usize(), - }; - let epoch_dkg_id = format!("{}.{}.{}", dkg_id, curve_type, self.dkg_type); - let existing_root_keys = if current_peers.is_empty() { - Vec::new() - } else { - chain_root_keys - .iter() - .filter_map(|k| match k.curve_type == curve_type { - true => Some(k.public_key.clone()), - false => None, - }) - .collect() - }; - for i in 0..hd_root_key_count { - if current_peers.is_empty() { - let dkg_id = format!("{}_key_{}", epoch_dkg_id, i); - dkg_engine.add_dkg(&dkg_id, curve_type, None); - } else { - let root_key = existing_root_keys.get(i).expect_or_err(format!( - "root key missing at index {} for curve: {}", - i, curve_type - ))?; + if key_sets.is_empty() { + error!("No key sets exist to do DKGs"); + return Err(unexpected_err( + "No key sets exist to do DKGs".to_string(), + None, + )); + } + + for key_set_config in key_sets { + for (&curve_type, &hd_root_key_count) in &key_set_config.root_key_counts { + let hd_root_key_count = match self.dkg_type { + DkgType::RecoveryParty => 1, + DkgType::Standard => hd_root_key_count, + }; + let epoch_dkg_id = format!("{}.{}.{}", dkg_id, curve_type, self.dkg_type); + let existing_root_keys = key_set_config + .root_keys_by_curve + .get(&curve_type) + .expect("expected existing root keys but got none") + .clone(); + for i in 0..hd_root_key_count { let dkg_id = format!("{}_key_{}", epoch_dkg_id, i); - dkg_engine.add_dkg(&dkg_id, curve_type, Some(root_key.clone())); + if current_peers.is_empty() { + dkg_engine.add_dkg(&dkg_id, &key_set_config.identifier, curve_type, None); + } else { + let root_key = existing_root_keys.get(i).expect_or_err(format!( + "root key missing at index {} for curve: {}", + i, curve_type + ))?; + let key = Some(root_key.clone()); + dkg_engine.add_dkg(&dkg_id, &key_set_config.identifier, curve_type, key); + } } } } @@ -112,8 +97,12 @@ impl DkgManager { "DKG {} with ID {} completed: {:?}", self.dkg_type, dkg_id, mode ); + let mut root_keys = HashMap::with_capacity(key_sets.len()); if let Some(m) = mode { if m == Mode::Initial { + let mut key_sets = DataVersionWriter::new_unchecked( + &self.tss_state.chain_data_config_manager.key_sets, + ); for dkg in dkg_engine.get_dkgs() { match dkg.result { Some(ref result) => { @@ -121,7 +110,29 @@ impl DkgManager { "DKG for epoch change complete for {} {}.", dkg.dkg_id, dkg.curve_type ); - root_keys.push(result.dkg_root_key()); + let key_set = key_sets + .get_mut(&dkg.key_set_id) + .expect("How can key set have a DKG but not exist in the key set?"); + let counts = key_set.root_key_counts[&dkg.curve_type]; + key_set + .root_keys_by_curve + .entry(dkg.curve_type) + .and_modify(|v: &mut Vec| v.push(result.public_key())) + .or_insert_with(|| { + let mut v = Vec::with_capacity(counts); + v.push(result.public_key()); + v + }); + root_keys + .entry(dkg.key_set_id.clone()) + .and_modify(|v: &mut Vec| { + v.push(result.dkg_root_key()) + }) + .or_insert_with(|| { + let mut v = Vec::with_capacity(counts); + v.push(result.dkg_root_key()); + v + }); } None => { error!("DKG failed!"); @@ -129,12 +140,9 @@ impl DkgManager { } } } + key_sets.commit(); } } Ok(root_keys) } - - pub fn root_keys(&self) -> Vec { - self.tss_state.chain_data_config_manager.root_keys() - } } diff --git a/rust/lit-node/lit-node/src/tss/ecdsa_damfast/mod.rs b/rust/lit-node/lit-node/src/tss/ecdsa_damfast/mod.rs index 35d6809..c4c33c1 100644 --- a/rust/lit-node/lit-node/src/tss/ecdsa_damfast/mod.rs +++ b/rust/lit-node/lit-node/src/tss/ecdsa_damfast/mod.rs @@ -22,6 +22,7 @@ use tracing::trace; use super::common::traits::signable::Signable; use crate::tasks::utils::generate_hash; +use crate::tss::common::curve_state::CurveState; use crate::utils::traits::SignatureCurve; use elliptic_curve::generic_array::ArrayLength; use elliptic_curve::group::{Curve, GroupEncoding}; @@ -217,7 +218,7 @@ impl DamFastState { pub async fn sign_with_pubkey_internal( &mut self, message_bytes: &[u8], - root_pubkeys: Option>, + root_pubkeys: &[String], tweak_preimage: Option>, request_id: Vec, epoch: Option, @@ -304,7 +305,7 @@ impl DamFastState { pub async fn generate_signature_share_from_key_id( &mut self, message_bytes: &[u8], - root_pubkeys: Option>, + root_pubkeys: &[String], presig: &PreSignature, request_id: &[u8], peers: &SimplePeerCollection, @@ -340,11 +341,10 @@ impl DamFastState { debug!("Participants: {:?}", participants); let participant_list = ParticipantList::new(participants.as_slice()) .map_err(|e| unexpected_err(e, Some("Error creating participant list".to_owned())))?; - let root_pubkeys = root_pubkeys.expect_or_err("No root pubkeys provided!")?; let (sk, pk) = get_derived_keyshare::( deriver, - &root_pubkeys, + root_pubkeys, self.signing_scheme.curve_type(), staker_address, &self_peer.peer_id, @@ -405,19 +405,25 @@ impl Signable for DamFastState { &mut self, message_bytes: &[u8], public_key: Vec, - root_pubkeys: Option>, tweak_preimage: Option>, request_id: Vec, + key_set_id: Option<&str>, epoch: Option, nodeset: &[NodeSet], ) -> Result { let txn_id = generate_hash(request_id.clone()); + let curve_state = CurveState::new( + self.state.peer_state.clone(), + self.signing_scheme.curve_type(), + key_set_id.map(String::from), + ); + let root_pubkeys = curve_state.root_keys()?; let df_sig_share = match self.signing_scheme { SigningScheme::EcdsaK256Sha256 => { self.sign_with_pubkey_internal::( message_bytes, - root_pubkeys, + &root_pubkeys, tweak_preimage, request_id, epoch, @@ -428,7 +434,7 @@ impl Signable for DamFastState { SigningScheme::EcdsaP256Sha256 => { self.sign_with_pubkey_internal::( message_bytes, - root_pubkeys, + &root_pubkeys, tweak_preimage, request_id, epoch, @@ -439,7 +445,7 @@ impl Signable for DamFastState { SigningScheme::EcdsaP384Sha384 => { self.sign_with_pubkey_internal::( message_bytes, - root_pubkeys, + &root_pubkeys, tweak_preimage, request_id, epoch, diff --git a/rust/lit-node/lit-node/src/tss/frost/mod.rs b/rust/lit-node/lit-node/src/tss/frost/mod.rs index 03d3039..e9c0214 100644 --- a/rust/lit-node/lit-node/src/tss/frost/mod.rs +++ b/rust/lit-node/lit-node/src/tss/frost/mod.rs @@ -1,6 +1,7 @@ use crate::error::{EC, parser_err, unexpected_err, unexpected_err_code}; use crate::p2p_comms::CommsManager; use crate::peers::peer_state::models::SimplePeer; +use crate::tss::common::curve_state::CurveState; use crate::tss::common::hd_keys::get_derived_keyshare; use crate::tss::common::signing_scheme::signing_scheme_to_frost_scheme; use crate::tss::common::traits::signable::Signable; @@ -148,7 +149,7 @@ impl FrostState { async fn derive_frost_signing_components( &self, deriver: G::Scalar, - root_pubkeys: Option>, + root_pubkeys: &[String], self_peer: &SimplePeer, epoch: u64, ) -> Result<(VerifyingKey, SigningShare)> @@ -156,13 +157,12 @@ impl FrostState { G: HDDerivable + GroupEncoding + Default + CompressedBytes, G::Scalar: HDDeriver + CompressedBytes, { - let root_pubkeys = root_pubkeys.expect_or_err("No root pubkeys provided!")?; let staker_address = &bytes_to_hex(self_peer.staker_address.as_bytes()); let realm_id = self.state.peer_state.realm_id(); let (sk, pk) = get_derived_keyshare::( deriver, - &root_pubkeys, + root_pubkeys, self.signing_scheme.curve_type(), staker_address, &self_peer.peer_id, @@ -216,9 +216,9 @@ impl Signable for FrostState { &mut self, message_bytes: &[u8], public_key: Vec, - root_pubkeys: Option>, tweak_preimage: Option>, request_id: Vec, + key_set_id: Option<&str>, epoch: Option, nodeset: &[NodeSet], ) -> Result { @@ -229,13 +229,19 @@ impl Signable for FrostState { let threshold = nodeset.len(); let key_id = tweak_preimage.expect_or_err("No hd_key_id provided!")?; let realm_id = self.state.peer_state.realm_id(); - let epoch = epoch.unwrap_or(self.state.peer_state.epoch()); + let epoch = epoch.unwrap_or_else(|| self.state.peer_state.epoch()); + let curve_state = CurveState::new( + self.state.peer_state.clone(), + self.signing_scheme.curve_type(), + key_set_id.map(String::from), + ); + let root_pubkeys = curve_state.root_keys()?; let (vk, signing_share) = match self.signing_scheme { SigningScheme::SchnorrK256Sha256 | SigningScheme::SchnorrK256Taproot => { let deriver = k256::Scalar::create(&key_id, self.signing_scheme.id_sign_ctx()); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) @@ -245,7 +251,7 @@ impl Signable for FrostState { let deriver = p256::Scalar::create(&key_id, self.signing_scheme.id_sign_ctx()); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) @@ -255,7 +261,7 @@ impl Signable for FrostState { let deriver = p384::Scalar::create(&key_id, self.signing_scheme.id_sign_ctx()); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) @@ -268,7 +274,7 @@ impl Signable for FrostState { ); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) @@ -281,7 +287,7 @@ impl Signable for FrostState { ); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) @@ -292,7 +298,7 @@ impl Signable for FrostState { ed448_goldilocks::Scalar::create(&key_id, self.signing_scheme.id_sign_ctx()); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) @@ -302,7 +308,7 @@ impl Signable for FrostState { let deriver = jubjub::Scalar::create(&key_id, self.signing_scheme.id_sign_ctx()); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) @@ -312,7 +318,7 @@ impl Signable for FrostState { let deriver = decaf377::Fr::create(&key_id, self.signing_scheme.id_sign_ctx()); self.derive_frost_signing_components::( deriver, - root_pubkeys, + &root_pubkeys, &self_peer, epoch, ) diff --git a/rust/lit-node/lit-node/src/utils/web.rs b/rust/lit-node/lit-node/src/utils/web.rs index c59dcc0..5f6f1ca 100644 --- a/rust/lit-node/lit-node/src/utils/web.rs +++ b/rust/lit-node/lit-node/src/utils/web.rs @@ -7,6 +7,7 @@ use crate::models; use crate::models::AuthContext; use crate::models::RequestConditions; use crate::models::auth::SessionKeySignedMessageV2; +use crate::tss::common::curve_state::CurveState; use crate::tss::common::tss_state::TssState; use crate::utils::encoding; use ethers::utils::keccak256; @@ -800,10 +801,13 @@ pub fn pubkey_to_token_id(pubkey: &str) -> Result { Ok(token_id) } -pub async fn get_bls_root_pubkey(tss_state: &TssState) -> Result { - let curve_state = tss_state.get_dkg_state(CurveType::BLS)?; - let bls_root_pubkeys = curve_state.root_keys().await; - match bls_root_pubkeys.first() { +pub fn get_bls_root_pubkey(tss_state: &Arc, key_set_id: Option<&str>) -> Result { + let curve_state = CurveState::new( + tss_state.peer_state.clone(), + CurveType::BLS, + key_set_id.map(|k| k.to_string()), + ); + match curve_state.root_keys()?.first() { Some(bls_root_key) => Ok(bls_root_key.clone()), None => Err(unexpected_err_code( "No BLS root key found", diff --git a/rust/lit-node/lit-node/tests/acceptance/payment.rs b/rust/lit-node/lit-node/tests/acceptance/payment.rs index baaf42a..5c420d5 100644 --- a/rust/lit-node/lit-node/tests/acceptance/payment.rs +++ b/rust/lit-node/lit-node/tests/acceptance/payment.rs @@ -290,7 +290,7 @@ async fn test_all_payment_methods_for_user() { let auth_sig = generate_authsig_item(&self_pay_user.wallet).await.unwrap(); - let (network_pubkey, _token_id, eth_address) = self_pay_user.first_pkp().info(); + let (network_pubkey, _token_id, eth_address, _key_set_id) = self_pay_user.first_pkp().info(); let signing_key = ed25519_dalek::SigningKey::generate(&mut OsRng); let verifying_key = signing_key.verifying_key(); @@ -793,7 +793,7 @@ async fn test_all_payment_methods_for_pkp() { pkp_owner.new_pkp().await.expect("Failed to mint PKP"); // add the PKP itself as a permitted address, so that our session sig from the PKP will be able to sign with it - let (pubkey, _token_id, eth_address) = pkp_owner.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = pkp_owner.first_pkp().info(); let pkp = pkp_owner.pkp_by_pubkey(pubkey.clone()); pkp.add_permitted_address_to_pkp(eth_address, &[U256::from(1)]) .await diff --git a/rust/lit-node/lit-node/tests/common/assertions.rs b/rust/lit-node/lit-node/tests/common/assertions.rs index b6063b5..a3dfd68 100644 --- a/rust/lit-node/lit-node/tests/common/assertions.rs +++ b/rust/lit-node/lit-node/tests/common/assertions.rs @@ -28,7 +28,7 @@ impl NetworkIntegrityChecker { let initial_bls_pubkey = get_network_pubkey(&actions).await; // Use the first PKP for the network integrity check. - let (pubkey, token_id, _) = end_user.first_pkp().info(); + let (pubkey, token_id, _, _) = end_user.first_pkp().info(); info!( "PKP for network integrity check: {:?} / token_id: {:?}", pubkey, token_id diff --git a/rust/lit-node/lit-node/tests/common/lit_actions.rs b/rust/lit-node/lit-node/tests/common/lit_actions.rs index e5f2db4..91f812c 100644 --- a/rust/lit-node/lit-node/tests/common/lit_actions.rs +++ b/rust/lit-node/lit-node/tests/common/lit_actions.rs @@ -118,7 +118,7 @@ pub async fn sign_using_child_lit_action( let lit_action_code = CALL_CHILD_LIT_ACTION_CODE.to_string(); - let (pubkey, _token_id, _eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, _eth_address, _key_set_id) = end_user.first_pkp().info(); let (lit_action_code, ipfs_id, js_params, auth_methods) = lit_action_params(lit_action_code, pubkey).await?; @@ -282,7 +282,7 @@ pub async fn prepare_sign_from_file_parameters( info!("Attempting to run lit action from file: {}", file_name); let lit_action_code = std::fs::read_to_string(file_name)?; - let (pubkey, _token_id, _eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, _eth_address, _key_set_id) = end_user.first_pkp().info(); Ok(lit_action_params(lit_action_code, pubkey).await?) } @@ -422,7 +422,7 @@ pub async fn generate_pkp_check_get_permitted_pkp_action( let cfg = lit_node_common::config::load_cfg().expect("failed to load LitConfig"); let loaded_config = &cfg.load_full(); - let (pkp_pubkey, token_id, _) = end_user.first_pkp().info(); + let (pkp_pubkey, token_id, _, _) = end_user.first_pkp().info(); let pkp = end_user.pkp_by_pubkey(pkp_pubkey.clone()); let res = pkp @@ -457,7 +457,7 @@ pub async fn generate_pkp_check_is_permitted_pkp_action( let cfg = lit_node_common::config::load_cfg().expect("failed to load LitConfig"); let loaded_config = &cfg.load_full(); - let (pkp_pubkey, token_id, _) = end_user.first_pkp().info(); + let (pkp_pubkey, token_id, _, _) = end_user.first_pkp().info(); let pkp = end_user.pkp_by_pubkey(pkp_pubkey); let res = pkp diff --git a/rust/lit-node/lit-node/tests/common/mod.rs b/rust/lit-node/lit-node/tests/common/mod.rs index cea53d8..3741808 100644 --- a/rust/lit-node/lit-node/tests/common/mod.rs +++ b/rust/lit-node/lit-node/tests/common/mod.rs @@ -25,6 +25,7 @@ use lit_core::config::ENV_LIT_CONFIG_FILE; use lit_node::tss::util::DEFAULT_KEY_SET_NAME; use lit_node_common::config::load_cfg; use lit_node_core::CurveType; +use lit_node_core::ethers::prelude::Bytes; use lit_observability::logging::simple_logging_subscriber; use once_cell::sync::Lazy; use std::sync::Mutex; @@ -84,6 +85,6 @@ pub fn default_keyset_config() -> KeySetConfig { counts: std::iter::once(U256::from(1)) .chain(CurveType::into_iter().skip(1).map(|_| U256::from(2))) .collect(), - recovery_party_members: Vec::new(), + recovery_session_id: Bytes::new(), } } diff --git a/rust/lit-node/lit-node/tests/common/pkp.rs b/rust/lit-node/lit-node/tests/common/pkp.rs index 5de0e7f..b90833a 100644 --- a/rust/lit-node/lit-node/tests/common/pkp.rs +++ b/rust/lit-node/lit-node/tests/common/pkp.rs @@ -194,7 +194,7 @@ pub async fn sign_with_pkp_request( signing_scheme, ) .await; - debug!("endpoint_responses: {:?}", endpoint_responses); + info!("endpoint_responses: {:?}", endpoint_responses); assert!(endpoint_responses.len() >= expected_responses); diff --git a/rust/lit-node/lit-node/tests/common/web_user_tests.rs b/rust/lit-node/lit-node/tests/common/web_user_tests.rs index a2b87f4..09ca7c7 100644 --- a/rust/lit-node/lit-node/tests/common/web_user_tests.rs +++ b/rust/lit-node/lit-node/tests/common/web_user_tests.rs @@ -454,7 +454,7 @@ pub async fn generate_session_sigs_execute_lit_action( end_user: &EndUser, ) -> Result>> { - let (pubkey, _token_id, pkp_eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, pkp_eth_address, _key_set_id) = end_user.first_pkp().info(); let wallet = end_user.wallet.clone(); // add the PKP itself as a permitted address, so that our session sig from the PKP will be able to sign with it end_user diff --git a/rust/lit-node/lit-node/tests/component/dkg.rs b/rust/lit-node/lit-node/tests/component/dkg.rs index ab3d450..0367cd5 100644 --- a/rust/lit-node/lit-node/tests/component/dkg.rs +++ b/rust/lit-node/lit-node/tests/component/dkg.rs @@ -7,7 +7,7 @@ use futures::future::join_all; use lit_blockchain::contracts::backup_recovery::RecoveredPeerId; use lit_core::utils::binary::bytes_to_hex; use lit_node::common::key_helper::KeyCache; -use lit_node::config::chain::CachedRootKey; +use lit_node::models::KeySetConfig; use lit_node::peers::peer_state::models::SimplePeerCollection; use lit_node::tss::common::dkg_type::DkgType; use lit_node::tss::common::key_share::KeyShare; @@ -16,12 +16,13 @@ use lit_node::tss::common::storage::{ write_key_share_to_cache_only, }; use lit_node::tss::dkg::engine::{DkgAfterRestore, DkgAfterRestoreData, DkgEngine}; +use lit_node::tss::util::DEFAULT_KEY_SET_NAME; use lit_node::utils::key_share_proof::{compute_key_share_proofs, verify_key_share_proofs}; use lit_node::version::DataVersionWriter; use lit_node_core::CompressedBytes; use lit_node_core::CurveType; use lit_node_core::PeerId; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use test_case::test_case; use tokio::task::JoinHandle; use tracing::{error, info}; @@ -70,14 +71,32 @@ pub async fn dkg_and_key_share_proofs(curve_type: CurveType) { ); peers_in_current_epoch.epoch_number = epoch; peers_in_current_epoch.commit(); - let mut root_keys = DataVersionWriter::new_unchecked( - &node.tss_state.chain_data_config_manager.root_keys, + let mut key_sets = DataVersionWriter::new_unchecked( + &node.tss_state.chain_data_config_manager.key_sets, ); - root_keys.push(CachedRootKey { - curve_type, - public_key: pubkey.clone(), - }); - root_keys.commit(); + let mut realms = HashSet::with_capacity(1); + realms.insert(1); + let mut root_keys_by_curve = HashMap::with_capacity(1); + root_keys_by_curve.insert(curve_type, vec![pubkey.clone()]); + let mut root_key_counts = HashMap::with_capacity(1); + root_key_counts.insert(curve_type, 1); + + key_sets.insert( + DEFAULT_KEY_SET_NAME.to_string(), + KeySetConfig { + identifier: DEFAULT_KEY_SET_NAME.to_string(), + description: "".to_string(), + minimum_threshold: 3, + monetary_value: 0, + complete_isolation: false, + realms, + root_keys_by_curve, + root_key_counts, + recovery_session_id: "".to_string(), + }, + ); + + key_sets.commit(); root_keys_map .entry(curve_type) .and_modify(|v| v.push(pubkey.clone())) @@ -300,7 +319,7 @@ pub async fn dkg_after_restore( ); for i in 0..2 { let dkg_id = format!("{}{}_key_{}", dkg_id, curve_type, i + 1); - dkg_engine.add_dkg(&dkg_id, curve_type, None); + dkg_engine.add_dkg(&dkg_id, DEFAULT_KEY_SET_NAME, curve_type, None); } join_set.spawn(async move { let r = dkg_engine.execute(dkg_id, realm_id).await; @@ -391,7 +410,12 @@ pub async fn dkg_after_restore( ); for (i, pubkey) in root_keys.iter().enumerate() { let dkg_id = format!("{}{}_key_{}", dkg_id, curve_type, i + 1); - dkg_engine.add_dkg(&dkg_id, curve_type, Some(pubkey.clone())); + dkg_engine.add_dkg( + &dkg_id, + DEFAULT_KEY_SET_NAME, + curve_type, + Some(pubkey.clone()), + ); } join_set.spawn(async move { let r = dkg_engine.execute(dkg_id, realm_id).await; @@ -628,7 +652,7 @@ pub async fn dkg( &next_peers, DkgAfterRestore::False, ); - dkg_engine.add_dkg(dkg_id, curve_type, pubkey.clone()); + dkg_engine.add_dkg(dkg_id, DEFAULT_KEY_SET_NAME, curve_type, pubkey.clone()); let jh: JoinHandle = tokio::task::spawn(async move { let r = dkg_engine.execute(dkg_id, realm_id).await; @@ -706,7 +730,7 @@ pub async fn dkg_all_curves( for curve_type in CurveType::into_iter() { for i in 0..2 { let dkg_id = format!("{}{}_key_{}", dkg_id, curve_type, i); - dkg_engine.add_dkg(&dkg_id, curve_type, None); + dkg_engine.add_dkg(&dkg_id, DEFAULT_KEY_SET_NAME, curve_type, None); } } diff --git a/rust/lit-node/lit-node/tests/component/encryption/bls.rs b/rust/lit-node/lit-node/tests/component/encryption/bls.rs index ff4f8dd..6292b2d 100644 --- a/rust/lit-node/lit-node/tests/component/encryption/bls.rs +++ b/rust/lit-node/lit-node/tests/component/encryption/bls.rs @@ -43,7 +43,7 @@ pub async fn sign_min_threshold() { // Sign the message using the blsful secret key share. let (signature_share, _share_index) = match cipher_state - .sign_with_pubkey(&message_bytes.clone(), &pubkey, None) + .sign_with_pubkey(&message_bytes.clone(), &pubkey, None, None) .await { Ok(signature_share) => signature_share, @@ -96,7 +96,7 @@ pub async fn sign_with_pubkey() { // Sign the message using the blsful secret key share. let (signature_share, _share_index) = match cipher_state - .sign_with_pubkey(&message_bytes.clone(), &pubkey, None) + .sign_with_pubkey(&message_bytes.clone(), &pubkey, None, None) .await { Ok(signature_share) => signature_share, diff --git a/rust/lit-node/lit-node/tests/component/precompute/damfast_presignatures.rs b/rust/lit-node/lit-node/tests/component/precompute/damfast_presignatures.rs index 08f005f..0ffdfe2 100644 --- a/rust/lit-node/lit-node/tests/component/precompute/damfast_presignatures.rs +++ b/rust/lit-node/lit-node/tests/component/precompute/damfast_presignatures.rs @@ -105,7 +105,7 @@ async fn damfast_signature(vnc: &VirtualNodeCollection) -> bool { let _pubkey = super::super::dkg::dkg(&vnc, CurveType::K256, 0, None, ¤t_peers).await; let message_bytes = b"DamFast Test!"; - let root_pubkeys = None; + let root_pubkeys = []; let tweak_preimage = None; let request_id = b"damfasttxn"; let epoch = Some(1); @@ -131,7 +131,7 @@ async fn damfast_signature(vnc: &VirtualNodeCollection) -> bool { let r = damfast_state .sign_with_pubkey_internal::( message_bytes, - root_pubkeys, + &root_pubkeys, tweak_preimage, request_id.to_vec(), epoch, diff --git a/rust/lit-node/lit-node/tests/component/sign/ecdsa_damfast.rs b/rust/lit-node/lit-node/tests/component/sign/ecdsa_damfast.rs index eea76fa..dab6518 100644 --- a/rust/lit-node/lit-node/tests/component/sign/ecdsa_damfast.rs +++ b/rust/lit-node/lit-node/tests/component/sign/ecdsa_damfast.rs @@ -173,7 +173,7 @@ pub async fn do_sign_with_pubkey( let sig_share = damfast_state .generate_signature_share_from_key_id::( &loop_message_bytes, - Some(hd_root_keys), + &hd_root_keys, &presign_share.share.unwrap::().clone(), request_id, &peers, diff --git a/rust/lit-node/lit-node/tests/integration/backup_datil_long.rs b/rust/lit-node/lit-node/tests/integration/backup_datil_long.rs index cd96d8f..d8cf749 100644 --- a/rust/lit-node/lit-node/tests/integration/backup_datil_long.rs +++ b/rust/lit-node/lit-node/tests/integration/backup_datil_long.rs @@ -10,6 +10,7 @@ use lit_node::auth::auth_material::JsonAuthSigExtended; use lit_node::endpoints::auth_sig::LITNODE_ADMIN_RES; use lit_node::peers::peer_state::models::NetworkState; use lit_node::tss::common::restore::NodeRecoveryStatus; +use lit_node::tss::util::DEFAULT_KEY_SET_NAME; use lit_node_core::JsonAuthSig; use lit_node_testnet::TestSetupBuilder; use lit_node_testnet::testnet::Testnet; @@ -26,6 +27,12 @@ const TARBALL_NAME: &str = "lit_backup_encrypted_keys.tar.gz"; #[tokio::test] async fn recover_datil_into_naga_test() { + unsafe { + std::env::set_var( + "IPFS_API_KEY", + "NkOJGWDsFcLTn7gXH37bS85HIMJJ4-d-r2qVHJWBXOXyxJYtG7FbyXATZCEAyf2s", + ); + } std::thread::Builder::new() .stack_size(128 * 1024 * 1024) // 32MB stack .spawn(move || { @@ -64,6 +71,66 @@ async fn end_to_end_test(number_of_nodes: usize, recovery_party_size: usize) { .await; testnet.actions().sleep_millis(5000).await; + let tx = validator_collection + .actions() + .contracts() + .pubkey_router + .admin_reset_root_keys( + testnet.actions().contracts().staking.address(), + DEFAULT_KEY_SET_NAME.to_string(), + ); + tx.send().await.unwrap(); + let tx = validator_collection.actions().contracts().pubkey_router.admin_set_root_keys( + testnet.actions().contracts().staking.address(), + DEFAULT_KEY_SET_NAME.to_string(), + vec![ + RootKey { + key_type: U256::from(1), + pubkey: ethers::types::Bytes::from_hex("0xb500ba119f643feb1981d26ffe7235288fdd39c36d6ebd35aebea7a5f92a812798513c1ae710461a6d229c59a782e375").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x02a11f8d29fabb49b5bbcd92159698afe4f136bab8b4a33f8606a71bd03bd6dc27").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x02cd471f410f17f1e932886a90effbb522a7841d9107d256c034cfa04020ba64c6").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x02d63650585b90ae80acde8fc4c638c4db0a00945f9b1c40024c92064cd99bdbbe").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x03a9e669a6f3b662a6b91fcb3cfa08608ab705e83b9b01bbf4fc4c2fcac3163b23").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x03d16416e913ba7adc1ccd58c36ff9f2130fa64d36e510551af70fb1be2174bb74").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x022e26c96cdeabee0930344a08cf3ee290c9efb3344fc8d50e460706ef7b55c518").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x027b98e8d099788fae7d9dc79865f28d4ddc0f630c6c593e5e8d7ef94c0285d729").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x033c8c0840302669019a6d0d12108caa6b0581a1d96022d4ea87ab203fba94cf1e").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x039af7bc7d673c899cc45ec5e30ba518be438931e9acb916fef7a336b9954687e9").unwrap(), + }, + RootKey { + key_type: U256::from(2), + pubkey: ethers::types::Bytes::from_hex("0x023403362ef1a693967858606e0cd9c5a67b30d5bd3a1a70a960c1286c15c8f68a").unwrap(), + }, + ], + ); + tx.send().await.unwrap(); let tx = validator_collection .actions() .contracts() diff --git a/rust/lit-node/lit-node/tests/integration/keysets.rs b/rust/lit-node/lit-node/tests/integration/keysets.rs new file mode 100644 index 0000000..58b794b --- /dev/null +++ b/rust/lit-node/lit-node/tests/integration/keysets.rs @@ -0,0 +1,46 @@ +use super::signing::sign_with_each_curve_type; +use ethers::types::U256; +use lit_node_testnet::TestSetupBuilder; +use tracing::info; + +#[tokio::test] +#[doc = "Primary test to ensure that the network can add a second keyset and sign with it."] +pub async fn test_add_second_keyset() { + crate::common::setup_logging(); + + info!("Starting test: test_pkp_hd_sign_generic_key_with_epoch_change"); + let (_testnet, validator_collection, end_user) = TestSetupBuilder::default().build().await; + + let actions = validator_collection.actions(); + let pubkey = end_user.first_pkp().pubkey.clone(); + + let realm_id = U256::from(1); + let current_epoch = actions.get_current_epoch(realm_id).await; + + // check to see that we can sign + sign_with_each_curve_type(&validator_collection, &end_user, pubkey.clone()).await; + + info!("**** Adding second keyset ****"); + // add a second keyset + let r = actions.add_second_keyset(realm_id).await; + assert!(r.is_ok(), "Failed to add second keyset"); + + actions.sleep_millis(2000).await; // wait for the nodes to check the chain for the new keyset + + for i in 0..10 { + let current_epoch = actions.get_current_epoch(realm_id).await; + info!("Epoch: {}", current_epoch); + + // Fast forward the network by 300 seconds, and wait for the new node to be active - effectively waiting for the next epoch. + actions.increase_blockchain_timestamp(300).await; + + // Wait for DKG to start and then finish, by effectively waiting for the epoch change - nodes become active once more. + actions.wait_for_epoch(realm_id, current_epoch + 1).await; + + actions.sleep_millis(2000).await; + // test signing + sign_with_each_curve_type(&validator_collection, &end_user, pubkey.clone()).await; + } + + actions.sleep_millis(2000000).await; +} diff --git a/rust/lit-node/lit-node/tests/integration/lit_actions.rs b/rust/lit-node/lit-node/tests/integration/lit_actions.rs index 0e1b6e8..933f865 100644 --- a/rust/lit-node/lit-node/tests/integration/lit_actions.rs +++ b/rust/lit-node/lit-node/tests/integration/lit_actions.rs @@ -146,7 +146,7 @@ pub mod litactions { ) .await; - let (pubkey, _token_id, _eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, _eth_address, _key_set_id) = end_user.first_pkp().info(); let lit_action_code = data_encoding::BASE64.encode(lit_action_code.as_bytes()); // per above, there are more params than needed for some actions, but they are ignored @@ -815,7 +815,7 @@ pub mod litactions { let auth_sig = generate_authsig(&end_user.wallet) .await .expect("Couldn't generate auth sig"); - let (pubkey, _token_id, _eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, _eth_address, _key_set_id) = end_user.first_pkp().info(); let lit_action_code = data_encoding::BASE64.encode(lit_action_code.as_bytes()); let mut js_params = serde_json::Map::new(); diff --git a/rust/lit-node/lit-node/tests/integration/mod.rs b/rust/lit-node/lit-node/tests/integration/mod.rs index 4fd75da..ee951ea 100644 --- a/rust/lit-node/lit-node/tests/integration/mod.rs +++ b/rust/lit-node/lit-node/tests/integration/mod.rs @@ -5,6 +5,7 @@ pub mod signing; pub mod backup; pub mod epoch_change_long; pub mod integration_tests; +pub mod keysets; pub mod lit_actions; pub mod session_sigs; pub mod shadow; diff --git a/rust/lit-node/lit-node/tests/integration/session_sigs.rs b/rust/lit-node/lit-node/tests/integration/session_sigs.rs index 473aeb9..c822de3 100644 --- a/rust/lit-node/lit-node/tests/integration/session_sigs.rs +++ b/rust/lit-node/lit-node/tests/integration/session_sigs.rs @@ -52,7 +52,7 @@ async fn sign_session_sig_with_lit_actions() { let wallet = end_user.signing_provider().signer().clone(); let auth_sig = generate_authsig_item(&wallet).await.unwrap(); - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let signing_key = ed25519_dalek::SigningKey::generate(&mut OsRng); let verifying_key = signing_key.verifying_key(); @@ -157,7 +157,7 @@ async fn sign_session_sig_with_lit_actions_requires_payment() { end_user.set_wallet_balance("0").await; let auth_sig = generate_authsig_item(&wallet).await.unwrap(); - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let signing_key = ed25519_dalek::SigningKey::generate(&mut OsRng); let verifying_key = signing_key.verifying_key(); @@ -215,7 +215,7 @@ async fn only_permitted_lit_action_can_sign_session_sig() { let non_owner_wallet = LocalWallet::new(&mut OsRng); let auth_sig = generate_authsig_item(&non_owner_wallet).await.unwrap(); - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let signing_key = ed25519_dalek::SigningKey::generate(&mut OsRng); let verifying_key = signing_key.verifying_key(); @@ -267,7 +267,7 @@ async fn sign_pkp_with_lit_action_session_sigs() { let (_testnet, validator_collection, end_user) = init_test().await; let node_set = validator_collection.random_threshold_nodeset().await; let node_set = get_identity_pubkeys_from_node_set(&node_set).await; - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let lit_action_code = data_encoding::BASE64.encode(VALID_SESSION_SIG_LIT_ACTION_CODE.to_string().as_bytes()); @@ -339,7 +339,7 @@ async fn sign_lit_actions_with_lit_action_session_sig() { let (_testnet, validator_collection, end_user) = init_test().await; let node_set = validator_collection.random_threshold_nodeset().await; let node_set = get_identity_pubkeys_from_node_set(&node_set).await; - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let session_sig_lit_action_code = data_encoding::BASE64.encode(VALID_SESSION_SIG_LIT_ACTION_CODE.to_string().as_bytes()); @@ -430,7 +430,7 @@ async fn only_permitted_can_sign_with_lit_action_session_sig() { .get_current_epoch(realm_id) .await .as_u64(); - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let session_sig_lit_action_code = data_encoding::BASE64.encode(VALID_SESSION_SIG_LIT_ACTION_CODE.to_string().as_bytes()); @@ -534,7 +534,7 @@ async fn sign_lit_actions_with_custom_auth_resource_lit_action_session_sig() { let (_testnet, validator_collection, end_user) = init_test().await; let node_set = validator_collection.random_threshold_nodeset().await; let node_set = get_identity_pubkeys_from_node_set(&node_set).await; - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let session_sig_lit_action_code = data_encoding::BASE64.encode( CUSTOM_AUTH_RESOURCE_VALID_SESSION_SIG_LIT_ACTION_CODE @@ -624,7 +624,7 @@ async fn sign_pkp_with_no_auth_method_lit_action_session_sig() { let (_testnet, validator_collection, end_user) = init_test().await; let node_set = validator_collection.random_threshold_nodeset().await; let node_set = get_identity_pubkeys_from_node_set(&node_set).await; - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let session_sig_lit_action_code = data_encoding::BASE64.encode( NO_AUTH_METHOD_SESSION_SIG_LIT_ACTION_CODE @@ -706,7 +706,7 @@ async fn sign_lit_actions_with_no_auth_method_lit_action_session_sig() { let (_testnet, validator_collection, end_user) = init_test().await; let node_set = validator_collection.random_threshold_nodeset().await; let node_set = get_identity_pubkeys_from_node_set(&node_set).await; - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let session_sig_lit_action_code = data_encoding::BASE64.encode( NO_AUTH_METHOD_SESSION_SIG_LIT_ACTION_CODE @@ -800,7 +800,7 @@ async fn sign_pkp_with_eoa_session_sigs() { let wallet = end_user.wallet.clone(); - let (pubkey, _token_id, _eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, _eth_address, _key_set_id) = end_user.first_pkp().info(); let session_sigs_and_node_set = get_session_sigs_for_auth( &node_set, @@ -856,7 +856,7 @@ async fn execute_js_with_eoa_session_sigs() { let node_set = get_identity_pubkeys_from_node_set(&node_set).await; let wallet = end_user.wallet.clone(); - let (pubkey, _token_id, _eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, _eth_address, _key_set_id) = end_user.first_pkp().info(); let session_sigs_and_node_set = get_session_sigs_for_auth( &node_set, @@ -903,7 +903,7 @@ async fn decrypt_with_lit_action_session_sig() { let (_testnet, validator_collection, end_user) = init_test().await; let node_set = validator_collection.random_threshold_nodeset().await; let node_set = get_identity_pubkeys_from_node_set(&node_set).await; - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let lit_action_code = data_encoding::BASE64.encode(VALID_SESSION_SIG_LIT_ACTION_CODE.to_string().as_bytes()); @@ -1018,7 +1018,7 @@ async fn test_v1_endpoints_api_constraints() { let wallet = end_user.wallet.clone(); let auth_sig = generate_authsig_item(&wallet).await.unwrap(); - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let signing_key = ed25519_dalek::SigningKey::generate(&mut OsRng); let verifying_key = signing_key.verifying_key(); @@ -1148,7 +1148,7 @@ async fn sign_session_key_auth_method() { let node_set = validator_collection.random_threshold_nodeset().await; let node_set = get_identity_pubkeys_from_node_set(&node_set).await; - let (pubkey, _token_id, eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, eth_address, _key_set_id) = end_user.first_pkp().info(); let signing_key = ed25519_dalek::SigningKey::generate(&mut rand::rngs::OsRng); let verifying_key = signing_key.verifying_key(); @@ -1422,7 +1422,7 @@ async fn explicit_resource_permission_required_for_lit_action() { let (_testnet, validator_collection, end_user) = init_test().await; - let (pubkey, _token_id, _eth_address) = end_user.first_pkp().info(); + let (pubkey, _token_id, _eth_address, _key_set_id) = end_user.first_pkp().info(); // the lit action we're going to test is VALID_PKP_SIGNING_LIT_ACTION_CODE // so let's derive the IPFS CID for it diff --git a/rust/lit-node/lit-node/tests/integration/signing.rs b/rust/lit-node/lit-node/tests/integration/signing.rs index dcfc04b..7cb3348 100644 --- a/rust/lit-node/lit-node/tests/integration/signing.rs +++ b/rust/lit-node/lit-node/tests/integration/signing.rs @@ -11,6 +11,7 @@ use lit_node_testnet::end_user::EndUser; use lit_node_core::SigningScheme; use lit_node_testnet::node_collection::get_identity_pubkeys_from_node_set; +use lit_node_testnet::validator::ValidatorCollection; use rand::Rng; use rand_core::OsRng; use std::str::FromStr; @@ -256,36 +257,10 @@ pub async fn test_pkp_hd_sign_and_submit_eth_txn() { pub async fn test_pkp_hd_sign_generic_key() { crate::common::setup_logging(); info!("Starting test: test_hd_pkp_sign"); - let setup_time = std::time::Instant::now(); let (testnet, validator_collection, end_user) = TestSetupBuilder::default().build().await; - let pubkey = end_user.first_pkp().pubkey.clone(); - info!("Setup time: {:?}", setup_time.elapsed()); - - // We loop instead of running this test multiple times due to spinning up and tearing down - // the network. Essentially, this accomplishes the exact same thing. - for scheme in ALL_SIGNING_SCHEMES { - let start = std::time::Instant::now(); - info!( - "Starting test_pkp_hd_sign_generic_key for signing_scheme: {}", - scheme - ); - // check to see that we can sign - info!("Signing with scheme: {:?}", scheme); - assert!( - simple_single_sign_with_hd_key( - &validator_collection, - &end_user, - pubkey.clone(), - scheme, - &vec![] - ) - .await, - "Failed to sign first time with all nodes up." - ); - info!("Time elapsed: {:?}", start.elapsed()); - } + sign_with_each_curve_type(&validator_collection, &end_user, pubkey.clone()).await; drop(testnet); } @@ -302,25 +277,10 @@ pub async fn test_pkp_hd_sign_generic_key_with_epoch_change() { let pubkey = end_user.first_pkp().pubkey.clone(); let realm_id = U256::from(1); - let current_epoch = validator_collection - .actions() - .get_current_epoch(realm_id) - .await; + let current_epoch = actions.get_current_epoch(realm_id).await; // check to see that we can sign - for scheme in ALL_SIGNING_SCHEMES { - assert!( - simple_single_sign_with_hd_key( - &validator_collection, - &end_user, - pubkey.clone(), - scheme, - &vec![] - ) - .await, - "Failed to sign first time with all nodes up." - ); - } + sign_with_each_curve_type(&validator_collection, &end_user, pubkey.clone()).await; // Wait for the new node to be active. actions.wait_for_active(realm_id).await; @@ -335,20 +295,7 @@ pub async fn test_pkp_hd_sign_generic_key_with_epoch_change() { actions.wait_for_epoch(realm_id, current_epoch + 1).await; // check to see that we can sign - for scheme in ALL_SIGNING_SCHEMES { - info!("Signing with scheme: {:?}", scheme); - assert!( - simple_single_sign_with_hd_key( - &validator_collection, - &end_user, - pubkey.clone(), - scheme, - &vec![] - ) - .await, - "Failed to sign after epoch change." - ); - } + sign_with_each_curve_type(&validator_collection, &end_user, pubkey.clone()).await; } #[tokio::test] @@ -366,19 +313,7 @@ pub async fn test_pkp_signing_when_nodes_drop() { let pubkey = end_user.first_pkp().pubkey.clone(); - for scheme in ALL_SIGNING_SCHEMES { - assert!( - simple_single_sign_with_hd_key( - &validator_collection, - &end_user, - pubkey.clone(), - scheme, - &vec![] - ) - .await, - "Failed to sign with all nodes up." - ); - } + sign_with_each_curve_type(&validator_collection, &end_user, pubkey.clone()).await; assert!(validator_collection.stop_node(node_to_kill).await.is_ok()); let realm_id = U256::from(1); @@ -425,6 +360,25 @@ pub async fn test_pkp_signing_when_nodes_drop() { } } +pub async fn sign_with_each_curve_type( + validator_collection: &ValidatorCollection, + end_user: &EndUser, + pubkey: String, +) { + for scheme in ALL_SIGNING_SCHEMES { + info!("Signing with scheme: {:?}", scheme); + let result = simple_single_sign_with_hd_key( + &validator_collection, + &end_user, + pubkey.clone(), + scheme, + &vec![], + ) + .await; + assert!(result, "Failed to sign with all nodes up."); + } +} + #[test_case(SigningScheme::EcdsaK256Sha256; "Secp256k1 ECDSA Sign with presignatures")] #[test_case(SigningScheme::EcdsaP256Sha256; "P-256 ECDSA Sign with presignatures")] #[test_case(SigningScheme::EcdsaP384Sha384; "P-384 ECDSA Sign with presignatures")] @@ -620,7 +574,7 @@ pub async fn eoa_session_sig_with_mgb_pkp_signing() { let (testnet, validator_collection, end_user) = TestSetupBuilder::default().build().await; info!("end user pkp info: {:?}", end_user.first_pkp().info()); - let (pubkey, token_id, pkp_address) = end_user.first_pkp().info().clone(); + let (pubkey, token_id, pkp_address, _key_set_id) = end_user.first_pkp().info().clone(); let owner_wallet = end_user.signing_provider().clone(); diff --git a/rust/lit-node/lit-sdk/src/cait_sith.rs b/rust/lit-node/lit-sdk/src/cait_sith.rs index f67eb3d..2ffec18 100644 --- a/rust/lit-node/lit-sdk/src/cait_sith.rs +++ b/rust/lit-node/lit-sdk/src/cait_sith.rs @@ -6,6 +6,7 @@ use ecdsa::{ RecoveryId, elliptic_curve::{Group, scalar::IsHigh, subtle::ConditionallyNegatable}, }; +use lit_frost::k256; use serde::Deserialize; /// Cait-Sith shares diff --git a/rust/lit-node/lit-sdk/src/handshake.rs b/rust/lit-node/lit-sdk/src/handshake.rs index d0b5c3f..d31f59e 100644 --- a/rust/lit-node/lit-sdk/src/handshake.rs +++ b/rust/lit-node/lit-sdk/src/handshake.rs @@ -2,26 +2,23 @@ use crate::common::{Request, Response, UrlPrefix}; use crate::{SdkError, SdkResult}; use lit_node_core::{ NodeSet, - request::JsonSDKHandshakeRequest, - response::{GenericResponse, JsonSDKHandshakeResponse}, + request::SDKHandshakeRequest, + response::{GenericResponse, SDKHandshakeResponseV0}, }; use std::{collections::HashMap, marker::PhantomData}; use uuid::Uuid; /// The handshake request struct -pub type HandshakeRequest = Request< - HandshakeRequestBuilder, - JsonSDKHandshakeRequest, - GenericResponse, ->; +pub type HandshakeRequest = + Request>; /// The response type for handshake calls -pub type HandshakeResponse = Response>; +pub type HandshakeResponse = Response>; basic_builder!( HandshakeRequestBuilder, - JsonSDKHandshakeRequest, - GenericResponse, + SDKHandshakeRequest, + GenericResponse, "web/handshake" ); @@ -30,14 +27,14 @@ impl HandshakeRequestBuilder { client_public_key, client_public_key, String, - JsonSDKHandshakeRequest, + SDKHandshakeRequest, client_public_key ); builder_setter!( challenge, challenge, Option, - JsonSDKHandshakeRequest, + SDKHandshakeRequest, challenge ); @@ -82,7 +79,7 @@ mod tests { #[test] fn set_request() { let request = HandshakeRequest::new() - .request(JsonSDKHandshakeRequest { + .request(SDKHandshakeRequest { challenge: None, client_public_key: "blah".to_string(), }) diff --git a/rust/lit-os/Cargo.lock b/rust/lit-os/Cargo.lock index 5be402a..ea77b01 100644 --- a/rust/lit-os/Cargo.lock +++ b/rust/lit-os/Cargo.lock @@ -2223,28 +2223,16 @@ dependencies = [ "typenum", ] -[[package]] -name = "bitvec" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" -dependencies = [ - "funty 1.1.0", - "radium 0.6.2", - "tap", - "wyz 0.2.0", -] - [[package]] name = "bitvec" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ - "funty 2.0.0", - "radium 0.7.0", + "funty", + "radium", "tap", - "wyz 0.5.1", + "wyz", ] [[package]] @@ -3243,7 +3231,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ - "bitvec 1.0.1", + "bitvec", "coins-bip32", "hmac 0.12.1", "once_cell", @@ -6522,28 +6510,13 @@ dependencies = [ "uuid 0.8.2", ] -[[package]] -name = "ethabi" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c98847055d934070b90e806e12d3936b787d0a115068981c1d8dfd5dfef5a5" -dependencies = [ - "ethereum-types 0.12.1", - "hex", - "serde", - "serde_json", - "sha3 0.9.1", - "thiserror 1.0.69", - "uint", -] - [[package]] name = "ethabi" version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" dependencies = [ - "ethereum-types 0.14.1", + "ethereum-types", "hex", "once_cell", "regex", @@ -6554,19 +6527,6 @@ dependencies = [ "uint", ] -[[package]] -name = "ethbloom" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb684ac8fa8f6c5759f788862bb22ec6fe3cb392f6bfd08e3c64b603661e3f8" -dependencies = [ - "crunchy", - "fixed-hash 0.7.0", - "impl-rlp", - "impl-serde 0.3.2", - "tiny-keccak", -] - [[package]] name = "ethbloom" version = "0.13.0" @@ -6574,40 +6534,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ "crunchy", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", + "impl-serde", "scale-info", "tiny-keccak", ] -[[package]] -name = "ethereum-types" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05136f7057fe789f06e6d41d07b34e6f70d8c86e5693b60f97aaa6553553bdaf" -dependencies = [ - "ethbloom 0.11.1", - "fixed-hash 0.7.0", - "impl-rlp", - "impl-serde 0.3.2", - "primitive-types 0.10.1", - "uint", -] - [[package]] name = "ethereum-types" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "ethbloom 0.13.0", - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "ethbloom", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", - "primitive-types 0.12.2", + "impl-serde", + "primitive-types", "scale-info", "uint", ] @@ -6711,7 +6657,7 @@ dependencies = [ "chrono", "const-hex", "elliptic-curve 0.13.8", - "ethabi 18.0.0", + "ethabi", "generic-array 0.14.7", "k256 0.13.4", "num_enum 0.7.4", @@ -7037,7 +6983,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ - "bitvec 1.0.1", + "bitvec", "rand_core 0.6.4", "subtle", ] @@ -7089,18 +7035,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - [[package]] name = "fixed-hash" version = "0.8.0" @@ -7499,12 +7433,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "funty" version = "2.0.0" @@ -9064,22 +8992,13 @@ dependencies = [ "zune-jpeg", ] -[[package]] -name = "impl-codec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" -dependencies = [ - "parity-scale-codec 2.3.1", -] - [[package]] name = "impl-codec" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.7.5", + "parity-scale-codec", ] [[package]] @@ -9091,15 +9010,6 @@ dependencies = [ "rlp", ] -[[package]] -name = "impl-serde" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" -dependencies = [ - "serde", -] - [[package]] name = "impl-serde" version = "0.4.0" @@ -9615,7 +9525,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8499f7a74008aafbecb2a2e608a3e13e4dd3e84df198b604451efe93f2de6e61" dependencies = [ - "bitvec 1.0.1", + "bitvec", "bls12_381", "ff 0.13.1", "group 0.13.0", @@ -9629,7 +9539,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2c5e88d1ac6a903e693287073860ea35299b200273d5c2bd9d7845ec39f319" dependencies = [ - "bitvec 1.0.1", + "bitvec", "bls12_381_plus", "elliptic-curve 0.13.8", "ff 0.13.1", @@ -10112,7 +10022,7 @@ dependencies = [ "atty", "deno_core", "deno_error", - "ethabi 18.0.0", + "ethabi", "flume", "lazy_static", "lit-actions-grpc", @@ -10292,7 +10202,7 @@ dependencies = [ "moka 0.12.10", "once_cell", "reqwest 0.11.27", - "scc 2.4.0", + "scc 3.3.2", "serde", "serde_json", "serde_yaml 0.9.34+deprecated", @@ -10546,7 +10456,7 @@ dependencies = [ "rand_chacha 0.3.1", "rand_core 0.6.4", "reqwest 0.11.27", - "sdd 3.0.10", + "sdd 4.2.4", "serde", "serde_json", "serdect 0.3.0", @@ -10568,7 +10478,7 @@ dependencies = [ "decaf377 0.10.1 (git+https://github.com/LIT-Protocol/decaf377?rev=1c5755b2b90e1969d47ce89cf2d35078984a0ee5)", "ed25519-dalek 2.2.0", "ed448-goldilocks-plus", - "ethabi 16.0.0", + "ethabi", "ethers", "hd-keys-curves-wasm 1.0.3 (git+https://github.com/LIT-Protocol/hd-keys-curves-wasm)", "hex", @@ -10983,7 +10893,7 @@ dependencies = [ "ed25519-dalek 2.2.0", "ed448-goldilocks-plus", "elliptic-curve 0.13.8", - "ethabi 16.0.0", + "ethabi", "ethers", "flume", "frost-dkg", @@ -11017,6 +10927,7 @@ dependencies = [ "lit-recovery", "lit-sdk", "lit-vrf", + "log", "moka 0.12.10", "mpl-token-metadata", "num_cpus", @@ -11037,8 +10948,8 @@ dependencies = [ "rocket_cors", "rsa 0.7.0-pre", "rusqlite", - "scc 2.4.0", - "sdd 3.0.10", + "scc 3.3.2", + "sdd 4.2.4", "semver 1.0.26", "serde", "serde_bare", @@ -12268,7 +12179,7 @@ dependencies = [ "arrayvec 0.7.6", "auto_impl", "bytes", - "ethereum-types 0.14.1", + "ethereum-types", "open-fastrlp-derive", ] @@ -12772,20 +12683,6 @@ dependencies = [ "group 0.13.0", ] -[[package]] -name = "parity-scale-codec" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" -dependencies = [ - "arrayvec 0.7.6", - "bitvec 0.20.4", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive 2.3.1", - "serde", -] - [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -12793,27 +12690,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec 0.7.6", - "bitvec 1.0.1", + "bitvec", "byte-slice-cast", "const_format", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.7.5", + "parity-scale-codec-derive", "rustversion", "serde", ] -[[package]] -name = "parity-scale-codec-derive" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2 1.0.101", - "quote 1.0.40", - "syn 1.0.109", -] - [[package]] name = "parity-scale-codec-derive" version = "3.7.5" @@ -13499,29 +13384,16 @@ dependencies = [ "elliptic-curve 0.13.8", ] -[[package]] -name = "primitive-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" -dependencies = [ - "fixed-hash 0.7.0", - "impl-codec 0.5.1", - "impl-rlp", - "impl-serde 0.3.2", - "uint", -] - [[package]] name = "primitive-types" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ - "fixed-hash 0.8.0", - "impl-codec 0.6.0", + "fixed-hash", + "impl-codec", "impl-rlp", - "impl-serde 0.4.0", + "impl-serde", "scale-info", "uint", ] @@ -13923,12 +13795,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "radium" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" - [[package]] name = "radium" version = "0.7.0" @@ -14628,8 +14494,8 @@ dependencies = [ "num-bigint", "num-integer", "num-traits", - "parity-scale-codec 3.7.5", - "primitive-types 0.12.2", + "parity-scale-codec", + "primitive-types", "proptest", "rand 0.8.5", "rand 0.9.2", @@ -15077,7 +14943,7 @@ checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if", "derive_more 1.0.0", - "parity-scale-codec 3.7.5", + "parity-scale-codec", "scale-info-derive", ] @@ -16862,7 +16728,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" dependencies = [ "base64-simd 0.7.0", - "bitvec 1.0.1", + "bitvec", "data-encoding", "debugid", "if_chain", @@ -16881,7 +16747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22afbcb92ce02d23815b9795523c005cb9d3c214f8b7a66318541c240ea7935" dependencies = [ "base64-simd 0.8.0", - "bitvec 1.0.1", + "bitvec", "data-encoding", "debugid", "if_chain", @@ -19844,8 +19710,8 @@ dependencies = [ "base64 0.21.7", "bytes", "derive_more 0.99.20", - "ethabi 18.0.0", - "ethereum-types 0.14.1", + "ethabi", + "ethereum-types", "futures", "futures-timer", "headers", @@ -20679,12 +20545,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c01ae8492c38f52376efd3a17d0994b6bcf3df1e39c0226d458b7d81670b2a06" -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "wyz" version = "0.5.1"