@bigmaxwatermelon/sdk 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sdk/rpc/wallet.ts","../src/sdk/rpc/contracts.ts","../src/abis/IsometryPlatform.json","../src/abis/StableCoinFactory.json","../src/abis/StableCoin.json","../src/abis/StableCoinBeacon.json","../src/sdk/rpc/platform.ts","../src/sdk/rpc/factory.ts","../src/sdk/rpc/stablecoin.ts","../src/sdk/rpc/errorMap.ts","../src/sdk/rpc/writeExecutor.ts","../src/sdk/graph/client.ts","../src/sdk/graph/queries.ts","../src/sdk/graph/tokenHistory.ts","../src/sdk/graph/platformHistory.ts","../src/sdk/graph/analytics.ts","../src/sdk/graph/index.ts","../src/sdk/client.ts"],"sourcesContent":["import { ethers } from 'ethers'\n\n// ─── IWallet ────────────────────────────────────────────────────────────────────\n\nexport type WalletMode = 'eip1193' | 'privatekey' | 'readonly'\n\n// ─── IWallet ───────────────────────────────────────────────────────────────────\n\nexport interface IWallet {\n readonly mode: WalletMode\n /** For read operations */\n readonly provider: ethers.Provider\n /** For write operations (may equal provider in read-only mode) */\n readonly signer: ethers.Signer | null\n getAddress(): Promise<string | null>\n isConnected(): boolean\n}\n\n// ─── ReadOnly ──────────────────────────────────────────────────────────────────\n\nexport class ReadOnlyWallet implements IWallet {\n readonly mode: WalletMode = 'readonly'\n readonly provider: ethers.Provider\n readonly signer = null\n\n constructor(rpcUrl: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n }\n\n getAddress(): Promise<string | null> {\n return Promise.resolve(null)\n }\n\n isConnected(): boolean {\n return false\n }\n}\n\n// ─── PrivateKey ────────────────────────────────────────────────────────────────\n\nexport class PrivateKeyWallet implements IWallet {\n readonly mode: WalletMode = 'privatekey'\n readonly provider: ethers.Provider\n readonly signer: ethers.Signer\n\n constructor(rpcUrl: string, privateKey: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n this.signer = new ethers.Wallet(privateKey, this.provider)\n }\n\n async getAddress(): Promise<string | null> {\n return this.signer.getAddress()\n }\n\n isConnected(): boolean {\n return true\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createWallet(\n rpcUrl: string,\n privateKey?: string\n): IWallet {\n if (privateKey) return new PrivateKeyWallet(rpcUrl, privateKey)\n return new ReadOnlyWallet(rpcUrl)\n}\n","import { Contract, InterfaceAbi } from 'ethers'\nimport type { ContractRunner } from 'ethers'\nimport platformAbi from '../../abis/IsometryPlatform.json' with { type: 'json' }\nimport factoryAbi from '../../abis/StableCoinFactory.json' with { type: 'json' }\nimport stablecoinAbi from '../../abis/StableCoin.json' with { type: 'json' }\nimport beaconAbi from '../../abis/StableCoinBeacon.json' with { type: 'json' }\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface ContractAddresses {\n platform?: string\n factory?: string\n beacon?: string\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Extract and cast ABI from Hardhat artifact format */\nfunction abiOf(artifact: { abi: unknown[] }): InterfaceAbi {\n return artifact.abi as InterfaceAbi\n}\n\n// ─── Contracts ────────────────────────────────────────────────────────────────\n\nexport function getContracts(addresses: ContractAddresses, runner: ContractRunner) {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n if (!addresses.factory) throw new Error('ISOMETRY_FACTORY_ADDRESS is required')\n if (!addresses.beacon) throw new Error('ISOMETRY_BEACON_ADDRESS is required')\n\n return {\n platform: new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner),\n factory: new Contract(addresses.factory, abiOf(factoryAbi as { abi: unknown[] }), runner),\n beacon: new Contract(addresses.beacon, abiOf(beaconAbi as { abi: unknown[] }), runner),\n }\n}\n\nexport function getStableCoin(address: string, runner: ContractRunner): Contract {\n return new Contract(address, abiOf(stablecoinAbi as { abi: unknown[] }), runner)\n}\n\nexport function getPlatform(runner: ContractRunner, addresses: ContractAddresses): Contract {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n return new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner)\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"IsometryPlatform\",\n \"sourceName\": \"contracts/platform/IsometryPlatform.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldFactory\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newFactory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"FactorySet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformPaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformUnpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"TokenRegistered\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACCESS_USER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"APPROVED_ISSUER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PLATFORM_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"accessUserList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addPlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approvedIssuerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAccessUserCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllAccessUsers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllApprovedIssuers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllPlatformAdmins\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getApprovedIssuerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPlatformAdminCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getTokenCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isOwner\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"platformAdminList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerTokenFor\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"registeredTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removePlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setFactory\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125ab62000104600039600081816118da015281816119030152611a4701526125ab6000f3fe6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"deployedBytecode\": \"0x6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinFactory\",\n \"sourceName\": \"contracts/platform/StableCoinFactory.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BeaconSet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StableCoinCreated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"beacon\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"createStableCoin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_platform\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"platform\",\n \"outputs\": [\n {\n \"internalType\": \"contract IsometryPlatform\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setBeacon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fb8806100df6000396000f3fe60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoin\",\n \"sourceName\": \"contracts/token/StableCoin.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AllowanceUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Blacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Burn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Mint\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnBlacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnpausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"BLACKLIST_MANAGER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_STATUS_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOKEN_OWNER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"blacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistManagerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"blacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklist\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklistManagers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinterItems\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct StableCoin.MinterItem[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistManagerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterStatusCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getMinterInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"holdersTotal\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterMinterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterStatusList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"minterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setMinterAllowance\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalBurned\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unBlacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161402c62000104600039600081816129b8015281816129e10152612c78015261402c6000f3fe60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinBeacon\",\n \"sourceName\": \"contracts/token/StableCoinBeacon.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_implementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconInvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161043c38038061043c83398101604081905261002f91610169565b8181806001600160a01b03811661006157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006a8161007d565b50610074826100cd565b5050505061019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036101035760405163211eb15960e21b81526001600160a01b0382166004820152602401610058565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80516001600160a01b038116811461016457600080fd5b919050565b6000806040838503121561017c57600080fd5b6101858361014d565b91506101936020840161014d565b90509250929050565b610291806101ab6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","import type { Contract, ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface PlatformInfo {\n address: string\n paused: boolean\n tokenCount: bigint\n platformAdminCount: bigint\n approvedIssuerCount: bigint\n accessUserCount: bigint\n}\n\nexport interface PlatformRoles {\n address: string\n isOwner: boolean\n isPlatformAdmin: boolean\n isApprovedIssuer: boolean\n isAccessUser: boolean\n}\n\n// ─── PlatformRpcService ────────────────────────────────────────────────────────\n\nexport class PlatformRpcService {\n private contracts: ReturnType<typeof getContracts>\n private platform: Contract\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.contracts = getContracts(addresses, runner)\n this.platform = this.contracts.platform\n }\n\n async getPlatformInfo(): Promise<PlatformInfo> {\n const [paused, tokenCount, adminCount, issuerCount, accessCount] =\n await Promise.all([\n this.platform.paused(),\n this.platform.getTokenCount(),\n this.platform.getPlatformAdminCount(),\n this.platform.getApprovedIssuerCount(),\n this.platform.getAccessUserCount(),\n ])\n\n return {\n address: this.platform.target as string,\n paused,\n tokenCount,\n platformAdminCount: adminCount,\n approvedIssuerCount: issuerCount,\n accessUserCount: accessCount,\n }\n }\n\n async getAllTokens(): Promise<string[]> {\n return this.platform.getAllTokens()\n }\n\n async getAccountRoles(account: string): Promise<PlatformRoles> {\n const [isOwner, isPlatformAdmin, isApprovedIssuer, isAccessUser] =\n await Promise.all([\n this.platform.isOwner(account),\n this.platform.isPlatformAdmin(account),\n this.platform.isApprovedIssuer(account),\n this.platform.isAccessUser(account),\n ])\n\n return {\n address: account,\n isOwner,\n isPlatformAdmin,\n isApprovedIssuer,\n isAccessUser,\n }\n }\n\n async isPaused(): Promise<boolean> {\n return this.platform.paused()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\nexport class FactoryRpcService {\n private addresses: ContractAddresses\n private runner: ContractRunner\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.addresses = addresses\n this.runner = runner\n }\n\n async getBeaconAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.beacon()\n }\n\n async getPlatformAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.platform()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getStableCoin, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TokenInfo {\n address: string\n name: string\n symbol: string\n decimals: number\n totalSupply: bigint\n paused: boolean\n}\n\nexport interface TokenStats {\n address: string\n holdersTotal: bigint\n totalMinted: bigint\n totalBurned: bigint\n totalAllowance: bigint\n mintersCount: bigint\n blacklistCount: bigint\n}\n\nexport interface MinterInfo {\n minter: string\n allowance: bigint\n}\n\nexport interface TokenRoles {\n address: string\n account: string\n isTokenOwner: boolean\n isMasterMinter: boolean\n isMinter: boolean\n isBlacklistManager: boolean\n isMasterStatus: boolean\n}\n\n// ─── StableCoinRpcService ─────────────────────────────────────────────────────\n\nexport class StableCoinRpcService {\n private runner: ContractRunner\n\n constructor(_addresses: ContractAddresses, runner: ContractRunner) {\n this.runner = runner\n }\n\n async getTokenInfo(address: string): Promise<TokenInfo> {\n const token = getStableCoin(address, this.runner)\n\n const [name, symbol, decimals, totalSupply, paused] = await Promise.all([\n token.name(),\n token.symbol(),\n token.decimals(),\n token.totalSupply(),\n token.paused(),\n ])\n\n return { address, name, symbol, decimals, totalSupply, paused }\n }\n\n async getTokenStats(address: string): Promise<TokenStats> {\n const token = getStableCoin(address, this.runner)\n\n const [holdersTotal, totalMinted, totalBurned, totalAllowance, minterCount, blacklistCount] =\n await Promise.all([\n token.holdersTotal(),\n token.totalMinted(),\n token.totalBurned(),\n token.totalAllowance(),\n token.getMinterCount(),\n token.getBlacklistCount(),\n ])\n\n return {\n address,\n holdersTotal,\n totalMinted,\n totalBurned,\n totalAllowance,\n mintersCount: minterCount,\n blacklistCount,\n }\n }\n\n async getUserRoles(address: string, account: string): Promise<TokenRoles> {\n const token = getStableCoin(address, this.runner)\n\n const TOKEN_OWNER_ROLE = await token.TOKEN_OWNER_ROLE()\n const MASTER_MINTER_ROLE = await token.MASTER_MINTER_ROLE()\n const MINTER_ROLE = await token.MINTER_ROLE()\n const BLACKLIST_MANAGER_ROLE = await token.BLACKLIST_MANAGER_ROLE()\n const MASTER_STATUS_ROLE = await token.MASTER_STATUS_ROLE()\n\n const [isTokenOwner, isMasterMinter, isMinter, isBlacklistManager, isMasterStatus] =\n await Promise.all([\n token.hasRole(TOKEN_OWNER_ROLE, account),\n token.hasRole(MASTER_MINTER_ROLE, account),\n token.hasRole(MINTER_ROLE, account),\n token.hasRole(BLACKLIST_MANAGER_ROLE, account),\n token.hasRole(MASTER_STATUS_ROLE, account),\n ])\n\n return {\n address,\n account,\n isTokenOwner,\n isMasterMinter,\n isMinter,\n isBlacklistManager,\n isMasterStatus,\n }\n }\n\n async isPaused(address: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.paused()\n }\n\n async isBlacklisted(address: string, user: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.blacklisted(user)\n }\n}\n","/**\n * Error selector → human-readable code mapping\n *\n * Observed on Sepolia (from live testing):\n * - 0xe2517d3f = OpenZeppelin AccessControlUnauthorizedAccount\n * - 0x08c379a0 = Error(string) — \"Not authorized\", \"Not approved issuer\"\n *\n * Extend this map as new selectors are observed on-chain.\n */\n\nexport interface DecodedError {\n code: string\n message: string\n}\n\n/**\n * Maps 4-byte error selector (0x...) to { code, message }.\n * Code is a SCREAMING_SNAKE_CASE identifier suitable for JSON output.\n */\nexport const ERROR_SELECTOR_MAP: Record<string, DecodedError> = {\n // OpenZeppelin AccessControlUnauthorizedAccount(address account, bytes32 role)\n // keccak256(\"AccessControlUnauthorizedAccount(address,bytes32)\") = 0x761f22a3\n // ethers v6 surfaces this as 0xe2517d3f in CALL_EXCEPTION details\n '0xe2517d3f': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n '0x761f22a3': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n\n // OpenZeppelin AccessControl: account is missing role\n '0x4e6f6c52': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: account is missing role',\n },\n\n // ERC20: insufficient balance\n '0x13be252b': {\n code: 'INSUFFICIENT_BALANCE',\n message: 'ERC20: transfer amount exceeds balance',\n },\n\n // ERC20: insufficient allowance\n '0xf4d708f0': {\n code: 'INSUFFICIENT_ALLOWANCE',\n message: 'ERC20: insufficient allowance',\n },\n\n // Pausable: paused\n '0x8d1c0a00': {\n code: 'PAUSED',\n message: 'Pausable: paused',\n },\n\n // ERC20: invalid sender\n '0xdf24fd05': {\n code: 'INVALID_SENDER',\n message: 'ERC20: invalid sender',\n },\n\n // ERC20: blacklisted\n '0x12d1b5d1': {\n code: 'BLACKLISTED',\n message: 'ERC20: sender is blacklisted',\n },\n\n // Isometry platform / factory custom errors (observed)\n '0x1e55aece': {\n code: 'NOT_APPROVED_ISSUER',\n message: 'Not an approved issuer',\n },\n\n '0xf2d4620b': {\n code: 'FACTORY_SYMBOL_EXISTS',\n message: 'Factory: symbol already exists',\n },\n\n '0x3b800a46': {\n code: 'ZERO_ADDRESS',\n message: 'Address cannot be zero',\n },\n}\n\n/**\n * Decode an ethers CALL_EXCEPTION error details object.\n * Returns a DecodedError if the selector is known, otherwise null.\n */\nexport function decodeError(details: {\n data?: string\n revert?: { signature?: string; name?: string; args?: unknown[] }\n reason?: string | null\n}): DecodedError | null {\n // Try custom error selector from data\n if (details.data && details.data !== '0x') {\n const selector = details.data.slice(0, 10).toLowerCase()\n const mapped = ERROR_SELECTOR_MAP[selector]\n if (mapped) return mapped\n }\n\n // Try known revert reason string\n if (details.reason) {\n const reason = details.reason\n if (reason === 'Not authorized' || reason === 'Not approved issuer') {\n return { code: 'ACCESS_DENIED', message: reason }\n }\n return { code: 'REVERT', message: reason }\n }\n\n // Try ethers revert with args\n if (details.revert?.args) {\n const name = details.revert.name ?? details.revert.signature ?? ''\n if (name.includes('AccessControl')) {\n const [account, role] = details.revert.args\n return {\n code: 'ACCESS_DENIED',\n message: `AccessControl: account ${account} missing role ${role}`,\n }\n }\n }\n\n return null\n}\n","/**\n * WriteExecutor — unified write transaction executor\n *\n * Consistent interface for all write operations:\n * - simulate: dry-run via estimateGas only\n * - execute: real transaction with receipt\n * - unified error model with human-readable codes\n * - CLI output helpers with --json / --simulate support\n */\n\nimport { Contract, type Log } from 'ethers'\nimport type { IWallet } from './wallet.js'\nimport { decodeError } from './errorMap.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SimulateResult {\n ok: true\n estimatedGas: bigint\n functionFragment: string\n params: Record<string, unknown>\n}\n\nexport interface TxReceipt {\n txHash: string\n blockNumber: number | null\n blockHash: string | null\n status: number | null\n gasUsed: bigint\n effectiveGasPrice: bigint\n from: string\n to: string | null\n nonce: number\n logs: Array<{\n address: string\n topics: string[]\n data: string\n blockNumber: number | null\n }>\n}\n\nexport interface ExecuteResult {\n ok: true\n receipt: TxReceipt\n}\n\nexport type WriteErrorCode =\n | 'NO_SIGNER'\n | 'INVALID_KEY'\n | 'INVALID_ARGUMENT'\n | 'SIMULATION_FAILED'\n | 'REVERT'\n | 'ACCESS_DENIED'\n | 'INSUFFICIENT_BALANCE'\n | 'INSUFFICIENT_ALLOWANCE'\n | 'PAUSED'\n | 'BLACKLISTED'\n | 'NOT_APPROVED_ISSUER'\n | 'FACTORY_SYMBOL_EXISTS'\n | 'ZERO_ADDRESS'\n | 'RPC_ERROR'\n | 'UNKNOWN'\n\nexport interface WriteError {\n ok: false\n code: WriteErrorCode\n message: string\n details?: unknown\n /** Raw 4-byte selector from the revert data, present when code is UNKNOWN or REVERT */\n selector?: string\n}\n\nexport type WriteResult = SimulateResult | ExecuteResult | WriteError\n\nexport interface WriteCall {\n method: string\n args: unknown[]\n overrides?: Record<string, unknown>\n}\n\nexport interface WriteExecutorConfig {\n wallet: IWallet\n contract: Contract\n}\n\n// ─── WriteExecutor ────────────────────────────────────────────────────────────\n\nexport class WriteExecutor {\n constructor(private config: WriteExecutorConfig) {}\n\n /** Dry-run: estimate gas without signing. Returns gas estimate or decoded error. */\n async simulate(call: WriteCall): Promise<SimulateResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot simulate: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n try {\n const fn = this.config.contract.getFunction(call.method)\n const gasEstimate = await fn.estimateGas(...call.args, call.overrides ?? {})\n\n const params: Record<string, unknown> = {}\n fn.fragment.inputs.forEach((input, i) => {\n params[input.name || `arg${i}`] = call.args[i]\n })\n\n return {\n ok: true,\n estimatedGas: gasEstimate,\n functionFragment: `${call.method}(${fn.fragment.inputs.map((i) => i.type).join(',')})`,\n params,\n }\n } catch (err: unknown) {\n // Always tag simulation failures as SIMULATION_FAILED; message is decoded\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: 'SIMULATION_FAILED',\n message: `[simulate] ${decoded.message}`,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /** Execute: sign and broadcast, wait for receipt. */\n async execute(call: WriteCall, confirmations = 1): Promise<ExecuteResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot execute: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n if (!this.config.wallet.signer) {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: 'Wallet has no signer.',\n }\n }\n\n try {\n const contract = this.config.contract.connect(this.config.wallet.signer)\n const fn = contract.getFunction(call.method)\n const tx = await fn.populateTransaction(...call.args, call.overrides ?? {})\n const signedTx = await this.config.wallet.signer!.sendTransaction(tx)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _receipt: any = await signedTx.wait(confirmations)\n if (!_receipt) {\n return { ok: false, code: 'RPC_ERROR', message: 'Transaction receipt is null' }\n }\n\n return {\n ok: true,\n receipt: {\n txHash: _receipt.hash,\n blockNumber: _receipt.blockNumber,\n blockHash: _receipt.blockHash ?? null,\n status: _receipt.status ?? null,\n gasUsed: _receipt.gasUsed,\n effectiveGasPrice: _receipt.effectiveGasPrice ?? 0n,\n from: _receipt.from,\n to: _receipt.to ?? null,\n nonce: _receipt.nonce,\n logs: _receipt.logs.map((log: Log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber,\n })),\n },\n }\n } catch (err: unknown) {\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: decoded.code as WriteErrorCode,\n message: decoded.message,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /**\n * Parse a revert error and extract { code, message, selector }.\n * selector is always included for unknown errors so users can report it.\n */\n private parseRevertError(err: unknown): { code: string; message: string; selector?: string } {\n // Extract raw selector from ethers error object (present in CALL_EXCEPTION)\n let rawSelector: string | undefined\n if (err && typeof err === 'object') {\n const errObj = err as Record<string, unknown>\n // ethers v6 surfaces custom error selector in error.data (4-byte hex)\n const data = (errObj as { data?: string }).data\n if (data && data !== '0x' && data.length >= 10) {\n rawSelector = data.slice(0, 10).toLowerCase()\n }\n }\n\n // Try known error mapping\n if (err && typeof err === 'object') {\n const decoded = decodeError(err as Record<string, unknown>)\n if (decoded) {\n return { code: decoded.code, message: decoded.message, selector: rawSelector }\n }\n }\n\n if (!(err instanceof Error)) {\n return { code: 'UNKNOWN', message: String(err), selector: rawSelector }\n }\n\n const msg = err.message\n if (msg.includes('insufficient funds')) return { code: 'INSUFFICIENT_BALANCE', message: 'insufficient funds for gas', selector: rawSelector }\n if (msg.includes('nonce')) return { code: 'RPC_ERROR', message: 'nonce error (tx may already be mined)', selector: rawSelector }\n if (msg.includes('read-only')) return { code: 'NO_SIGNER', message: 'wallet is read-only', selector: rawSelector }\n\n return { code: 'REVERT', message: msg.slice(0, 200), selector: rawSelector }\n }\n}\n\n// ─── CLI Output Helpers ───────────────────────────────────────────────────────\n\nexport interface WriteOpts {\n simulate: boolean\n json: boolean\n}\n\nexport interface WriteMeta {\n chainId: number\n source: 'rpc'\n timestamp: number\n command?: string\n}\n\nexport function makeWriteMeta(command?: string): WriteMeta {\n return {\n chainId: 11155111,\n source: 'rpc',\n timestamp: Math.floor(Date.now() / 1000),\n ...(command ? { command } : {}),\n }\n}\n\nexport function formatWriteResult(\n result: WriteResult,\n opts: WriteOpts,\n meta?: WriteMeta\n): string {\n if (opts.json) {\n const out: Record<string, unknown> = { ok: result.ok }\n if (result.ok) {\n if (opts.simulate) {\n const r = result as SimulateResult\n Object.assign(out, { estimatedGas: r.estimatedGas, functionFragment: r.functionFragment, params: r.params })\n } else {\n const r = result as ExecuteResult\n Object.assign(out, { receipt: r.receipt })\n }\n } else {\n const r = result as WriteError\n Object.assign(out, { code: r.code, message: r.message })\n if (r.selector) Object.assign(out, { selector: r.selector })\n }\n if (meta) Object.assign(out, { meta })\n return JSON.stringify(out, (_key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n , 2)\n }\n\n if (!result.ok) {\n return `❌ [${result.code}] ${result.message}`\n }\n\n if (opts.simulate) {\n const sim = result as SimulateResult\n return `✅ Simulation passed\\n Estimated gas: ${sim.estimatedGas.toLocaleString()}`\n }\n\n const exec = result as ExecuteResult\n const r = exec.receipt\n const ok = r.status === 1\n return [\n `${ok ? '✅' : '❌'} Transaction ${ok ? 'confirmed' : 'FAILED'}`,\n ` Tx Hash ${r.txHash}`,\n ` Block ${r.blockNumber ?? 'pending'}`,\n ` From ${r.from}`,\n ` To ${r.to ?? 'N/A'}`,\n ` Gas Used ${r.gasUsed.toLocaleString()}`,\n ` Status ${ok ? 'success' : 'reverted'}`,\n ].join('\\n')\n}\n","import { GraphQLClient } from 'graphql-request'\n\n// ─── Errors ───────────────────────────────────────────────────────────────────\n\nexport class GraphError extends Error {\n constructor(\n message: string,\n public readonly code: 'NETWORK_ERROR' | 'SUBGRAPH_ERROR' | 'PARSE_ERROR' | 'UNKNOWN',\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'GraphError'\n }\n}\n\n// ─── GraphClient ───────────────────────────────────────────────────────────────\n\nexport interface GraphClientConfig {\n endpoint: string\n /** Optional headers (e.g. authorization) */\n headers?: Record<string, string>\n}\n\nexport class GraphClient {\n private client: GraphQLClient\n\n constructor(config: GraphClientConfig) {\n this.client = new GraphQLClient(config.endpoint, {\n headers: config.headers,\n })\n }\n\n /**\n * Execute a raw GraphQL query.\n * @param query - GraphQL query string\n * @param variables - Optional query variables\n */\n async query<T>(\n query: string,\n variables?: Record<string, unknown>\n ): Promise<T> {\n try {\n return await this.client.request<T>(query, variables)\n } catch (err: unknown) {\n throw this.normalizeError(err)\n }\n }\n\n /**\n * Ping the subgraph — useful for health checks.\n * Returns current block number or throws.\n */\n async ping(): Promise<{ number: number; hash: string; deployment: string }> {\n const data = await this.query<{\n _meta: { block: { number: number; hash: string }; deployment: string }\n }>(`query { _meta { block { number hash } deployment } }`)\n\n if (!data._meta) throw new GraphError('No _meta', 'PARSE_ERROR')\n\n return {\n number: data._meta.block.number,\n hash: data._meta.block.hash,\n deployment: data._meta.deployment,\n }\n }\n\n // ─── Private ────────────────────────────────────────────────────────────────\n\n private normalizeError(err: unknown): GraphError {\n if (err instanceof GraphError) return err\n\n if (err instanceof Error) {\n // graphql-request throws { response: { errors: [...] } }\n const graphErr = (err as unknown as Record<string, unknown>).response as\n | { errors?: unknown[] }\n | undefined\n\n if (graphErr?.errors) {\n return new GraphError(\n `Subgraph error: ${JSON.stringify(graphErr.errors)}`,\n 'SUBGRAPH_ERROR',\n graphErr.errors\n )\n }\n\n // Network-level errors\n if (\n err.message.includes('fetch') ||\n err.message.includes('ECONNREFUSED') ||\n err.message.includes('timeout')\n ) {\n return new GraphError(`Network error: ${err.message}`, 'NETWORK_ERROR', err)\n }\n\n return new GraphError(err.message, 'UNKNOWN', err)\n }\n\n return new GraphError('Unknown error', 'UNKNOWN', err)\n }\n}\n","// ─── Token Queries ────────────────────────────────────────────────────────────\n\nexport const TOKENS_QUERY = `\n query Tokens($first: Int!, $skip: Int!) {\n tokens(first: $first, skip: $skip, orderBy: createdAt, orderDirection: desc) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\nexport const TOKEN_BY_ID_QUERY = `\n query TokenById($id: ID!) {\n token(id: $id) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Token Registered ─────────────────────────────────────────────────────────\n\nexport const TOKEN_REGISTERED_EVENTS_QUERY = `\n query TokenRegisteredEvents($first: Int!, $skip: Int!) {\n tokenRegisteredEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n token\n name\n symbol\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Mint History ─────────────────────────────────────────────────────────────\n\nexport const MINT_EVENTS_QUERY = `\n query MintEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n mintEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n to\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Burn History ─────────────────────────────────────────────────────────────\n\nexport const BURN_EVENTS_QUERY = `\n query BurnEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n burnEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n from\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Pause History ────────────────────────────────────────────────────────────\n\nexport const PAUSE_EVENTS_QUERY = `\n query PauseEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pauseEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n action\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const PAUSED_BY_OWNER_EVENTS_QUERY = `\n query PausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const UNPAUSED_BY_OWNER_EVENTS_QUERY = `\n query UnpausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n unpausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Blacklist ────────────────────────────────────────────────────────────────\n\nexport const BLACKLIST_EVENTS_QUERY = `\n query BlacklistEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n blacklistEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n user\n action\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Transfer ─────────────────────────────────────────────────────────────────\n\nexport const TRANSFER_EVENTS_QUERY = `\n query TransferEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n transferEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n from\n to\n amount\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Token Holders ────────────────────────────────────────────────────────────\n\nexport const TOKEN_HOLDERS_QUERY = `\n query TokenHolders($token: Bytes!, $first: Int!, $skip: Int!) {\n tokenHolders(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: balance\n orderDirection: desc\n ) {\n id\n token\n address\n balance\n firstSeenAt\n hasMinted\n hasBurned\n }\n }\n`\n\n// ─── 24h Snapshot ─────────────────────────────────────────────────────────────\n\nexport const TOKEN_24H_SNAPSHOT_QUERY = `\n query Token24hSnapshot($token: Bytes!) {\n token24hSnapshot(id: $token) {\n id\n token\n mintAmount24h\n burnAmount24h\n mintCount24h\n burnCount24h\n lastUpdatedAt\n }\n }\n`\n\n// ─── Platform ─────────────────────────────────────────────────────────────────\n\nexport const PLATFORM_ADMINS_QUERY = `\n query PlatformAdmins($first: Int!, $skip: Int!) {\n platformAdmins(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const APPROVED_ISSUERS_QUERY = `\n query ApprovedIssuers($first: Int!, $skip: Int!) {\n approvedIssuers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const ACCESS_USERS_QUERY = `\n query AccessUsers($first: Int!, $skip: Int!) {\n accessUsers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Factory ─────────────────────────────────────────────────────────────────\n\nexport const FACTORY_INITIALIZED_EVENTS_QUERY = `\n query FactoryInitializedEvents($first: Int!, $skip: Int!) {\n factoryInitializedEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n version\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const FACTORY_SET_EVENTS_QUERY = `\n query FactorySetEvents($first: Int!, $skip: Int!) {\n factorySetEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n oldFactory\n newFactory\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Minter ──────────────────────────────────────────────────────────────────\n\nexport const MINTER_ADDED_EVENTS_QUERY = `\n query MinterAddedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterAddedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const MINTER_REMOVED_EVENTS_QUERY = `\n query MinterRemovedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterRemovedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n","import type { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenHolder,\n Token24hSnapshot,\n Token,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n} from './types.js'\nimport {\n MINT_EVENTS_QUERY,\n BURN_EVENTS_QUERY,\n TRANSFER_EVENTS_QUERY,\n PAUSE_EVENTS_QUERY,\n PAUSED_BY_OWNER_EVENTS_QUERY,\n UNPAUSED_BY_OWNER_EVENTS_QUERY,\n BLACKLIST_EVENTS_QUERY,\n TOKEN_HOLDERS_QUERY,\n TOKEN_24H_SNAPSHOT_QUERY,\n TOKEN_BY_ID_QUERY,\n TOKENS_QUERY,\n TOKEN_REGISTERED_EVENTS_QUERY,\n MINTER_ADDED_EVENTS_QUERY,\n MINTER_REMOVED_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── TokenHistoryService ──────────────────────────────────────────────────────\n\nexport class TokenHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Token ─────────────────────────────────────────────────────────────────\n\n async getToken(address: string): Promise<Token | null> {\n const data = await this.client.query<{ token: Token | null }>(\n TOKEN_BY_ID_QUERY,\n { id: address }\n )\n return data.token\n }\n\n async getTokens(first = DEFAULT_FIRST, skip = DEFAULT_SKIP): Promise<Token[]> {\n const data = await this.client.query<{ tokens: Token[] }>(TOKENS_QUERY, {\n first,\n skip,\n })\n return data.tokens\n }\n\n // ─── Creation ──────────────────────────────────────────────────────────────\n\n async getTokenCreatedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenRegisteredEvent[]> {\n const data = await this.client.query<{\n tokenRegisteredEvents: TokenRegisteredEvent[]\n }>(TOKEN_REGISTERED_EVENTS_QUERY, { first, skip })\n return data.tokenRegisteredEvents\n }\n\n // ─── Mint / Burn ──────────────────────────────────────────────────────────\n\n async getMintHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MintEvent[]> {\n const data = await this.client.query<{ mintEvents: MintEvent[] }>(\n MINT_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.mintEvents\n }\n\n async getBurnHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BurnEvent[]> {\n const data = await this.client.query<{ burnEvents: BurnEvent[] }>(\n BURN_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.burnEvents\n }\n\n // ─── Transfer ─────────────────────────────────────────────────────────────\n\n async getTransferHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TransferEvent[]> {\n const data = await this.client.query<{ transferEvents: TransferEvent[] }>(\n TRANSFER_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.transferEvents\n }\n\n // ─── Pause ────────────────────────────────────────────────────────────────\n\n async getPauseHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PauseEvent[]> {\n const data = await this.client.query<{ pauseEvents: PauseEvent[] }>(\n PAUSE_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.pauseEvents\n }\n\n async getPausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PausedByOwnerEvent[]> {\n const data = await this.client.query<{\n pausedByOwnerEvents: PausedByOwnerEvent[]\n }>(PAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.pausedByOwnerEvents\n }\n\n async getUnpausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<UnpausedByOwnerEvent[]> {\n const data = await this.client.query<{\n unpausedByOwnerEvents: UnpausedByOwnerEvent[]\n }>(UNPAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.unpausedByOwnerEvents\n }\n\n // ─── Blacklist ────────────────────────────────────────────────────────────\n\n async getBlacklistHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BlacklistEvent[]> {\n const data = await this.client.query<{ blacklistEvents: BlacklistEvent[] }>(\n BLACKLIST_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.blacklistEvents\n }\n\n // ─── Holders ──────────────────────────────────────────────────────────────\n\n async getHolders(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenHolder[]> {\n const data = await this.client.query<{ tokenHolders: TokenHolder[] }>(\n TOKEN_HOLDERS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.tokenHolders\n }\n\n // ─── 24h Snapshot ────────────────────────────────────────────────────────\n\n async get24hSnapshot(\n tokenAddress: string\n ): Promise<Token24hSnapshot | null> {\n const data = await this.client.query<{\n token24hSnapshot: Token24hSnapshot | null\n }>(TOKEN_24H_SNAPSHOT_QUERY, { token: tokenAddress })\n return data.token24hSnapshot\n }\n\n // ─── Minters ───────────────────────────────────────────────────────────────\n\n async getMinterAddedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterAddedEvent[]> {\n const data = await this.client.query<{\n minterAddedEvents: MinterAddedEvent[]\n }>(MINTER_ADDED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterAddedEvents\n }\n\n async getMinterRemovedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterRemovedEvent[]> {\n const data = await this.client.query<{\n minterRemovedEvents: MinterRemovedEvent[]\n }>(MINTER_REMOVED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterRemovedEvents\n }\n}\n","import type { GraphClient } from './client.js'\nimport type {\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n} from './types.js'\nimport {\n PLATFORM_ADMINS_QUERY,\n APPROVED_ISSUERS_QUERY,\n ACCESS_USERS_QUERY,\n FACTORY_INITIALIZED_EVENTS_QUERY,\n FACTORY_SET_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── PlatformHistoryService ───────────────────────────────────────────────────\n\nexport class PlatformHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Platform Admins ──────────────────────────────────────────────────────\n\n async getPlatformAdmins(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PlatformAdmin[]> {\n const data = await this.client.query<{ platformAdmins: PlatformAdmin[] }>(\n PLATFORM_ADMINS_QUERY,\n { first, skip }\n )\n return data.platformAdmins\n }\n\n async getActivePlatformAdins(): Promise<PlatformAdmin[]> {\n const all = await this.getPlatformAdmins(1000, 0)\n return all.filter((a) => a.isActive)\n }\n\n // ─── Approved Issuers ────────────────────────────────────────────────────\n\n async getApprovedIssuers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<ApprovedIssuer[]> {\n const data = await this.client.query<{ approvedIssuers: ApprovedIssuer[] }>(\n APPROVED_ISSUERS_QUERY,\n { first, skip }\n )\n return data.approvedIssuers\n }\n\n async getActiveApprovedIssuers(): Promise<ApprovedIssuer[]> {\n const all = await this.getApprovedIssuers(1000, 0)\n return all.filter((i) => i.isActive)\n }\n\n // ─── Access Users ────────────────────────────────────────────────────────\n\n async getAccessUsers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<AccessUser[]> {\n const data = await this.client.query<{ accessUsers: AccessUser[] }>(\n ACCESS_USERS_QUERY,\n { first, skip }\n )\n return data.accessUsers\n }\n\n async getActiveAccessUsers(): Promise<AccessUser[]> {\n const all = await this.getAccessUsers(1000, 0)\n return all.filter((u) => u.isActive)\n }\n\n // ─── Factory Events ─────────────────────────────────────────────────────\n\n async getFactoryInitializedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactoryInitializedEvent[]> {\n const data = await this.client.query<{\n factoryInitializedEvents: FactoryInitializedEvent[]\n }>(FACTORY_INITIALIZED_EVENTS_QUERY, { first, skip })\n return data.factoryInitializedEvents\n }\n\n async getFactorySetEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactorySetEvent[]> {\n const data = await this.client.query<{\n factorySetEvents: FactorySetEvent[]\n }>(FACTORY_SET_EVENTS_QUERY, { first, skip })\n return data.factorySetEvents\n }\n}\n","import { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n} from './types.js'\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Convert subgraph BigInt decimal string to bigint */\nexport function parseBigInt(value: string): bigint {\n return BigInt(value)\n}\n\n/** Convert subgraph BigInt to number (may lose precision for huge values) */\nexport function parseBigIntToNumber(value: string): number {\n return Number(BigInt(value))\n}\n\n// ─── AnalyticsService ─────────────────────────────────────────────────────────\n\nexport class AnalyticsService {\n readonly token: TokenHistoryService\n readonly platform: PlatformHistoryService\n\n constructor(graph: GraphClient) {\n this.token = new TokenHistoryService(graph)\n this.platform = new PlatformHistoryService(graph)\n }\n\n // ─── Token analytics ──────────────────────────────────────────────────────\n\n /**\n * Get a quick supply summary for a token.\n * Combines live token stats (from GQL) with 24h snapshot.\n */\n async getTokenSupplySummary(tokenAddress: string) {\n const [token, snapshot] = await Promise.all([\n this.token.getToken(tokenAddress),\n this.token.get24hSnapshot(tokenAddress),\n ])\n\n if (!token) return null\n\n return {\n tokenAddress,\n name: token.name,\n symbol: token.symbol,\n status: token.status,\n totalMintAmount: parseBigInt(token.totalMintAmount),\n totalBurnAmount: parseBigInt(token.totalBurnAmount),\n netSupply:\n parseBigInt(token.totalMintAmount) -\n parseBigInt(token.totalBurnAmount),\n activeHolderCount: parseBigIntToNumber(token.activeHolderCount),\n snapshot: snapshot\n ? {\n mintAmount24h: parseBigInt(snapshot.mintAmount24h),\n burnAmount24h: parseBigInt(snapshot.burnAmount24h),\n mintCount24h: parseBigIntToNumber(snapshot.mintCount24h),\n burnCount24h: parseBigIntToNumber(snapshot.burnCount24h),\n }\n : null,\n }\n }\n\n /**\n * Get top N holders for a token.\n * Returns address + balance sorted by balance descending.\n */\n async getTopHolders(tokenAddress: string, limit = 10) {\n const holders = await this.token.getHolders(tokenAddress, limit, 0)\n const mapped = holders.map((h) => ({\n address: h.address,\n balance: parseBigInt(h.balance),\n }))\n return mapped.sort((a, b) => (a.balance > b.balance ? -1 : 1))\n }\n\n /**\n * Get recent activity (mint + burn events) for a token.\n * Useful for a quick activity feed.\n */\n async getRecentActivity(tokenAddress: string, limit = 20) {\n const [mints, burns] = await Promise.all([\n this.token.getMintHistory(tokenAddress, limit, 0),\n this.token.getBurnHistory(tokenAddress, limit, 0),\n ])\n\n type ActivityItem = {\n type: 'mint' | 'burn'\n txHash: string\n blockNumber: bigint\n timestamp: bigint\n amount: bigint\n actor: string\n }\n\n const events: ActivityItem[] = [\n ...mints.map((e: MintEvent): ActivityItem => ({\n type: 'mint',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ...burns.map((e: BurnEvent): ActivityItem => ({\n type: 'burn',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ]\n\n // Sort by block desc\n events.sort((a, b) =>\n a.blockNumber > b.blockNumber ? -1 : 1\n )\n\n return events.slice(0, limit)\n }\n\n /**\n * Get a holder balance across all their holdings.\n * Useful for an address summary view.\n */\n async getAccountPortfolio(ethAddress: string): Promise<\n Array<{\n token: string\n balance: bigint\n }>\n > {\n // NOTE: subgraph doesn't expose a direct \"account\" entity,\n // so we scan all token holders and filter client-side.\n // For large scale, add a dedicated `account(address: Bytes)` query to the subgraph.\n const tokens = await this.token.getTokens(100, 0)\n const results = await Promise.all(\n tokens.map(async (t) => {\n const holders = await this.token.getHolders(t.address, 1000, 0)\n const found = holders.find(\n (h: { address: string }) => h.address.toLowerCase() === ethAddress.toLowerCase()\n )\n return found\n ? { token: t.address, balance: parseBigInt(found.balance) }\n : null\n })\n )\n return results.filter(Boolean) as Array<{ token: string; balance: bigint }>\n }\n}\n","// ─── Graph Client ─────────────────────────────────────────────────────────────\n\nexport { GraphClient, GraphError } from './client.js'\nexport type { GraphClientConfig } from './client.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type {\n Token,\n TokenHolder,\n Token24hSnapshot,\n TokenStatus,\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenBlacklist,\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n Bytes,\n BigInt,\n PaginatedResult,\n PageInfo,\n} from './types.js'\n\n// ─── Services ─────────────────────────────────────────────────────────────────\n\nexport { TokenHistoryService } from './tokenHistory.js'\nexport { PlatformHistoryService } from './platformHistory.js'\nexport { AnalyticsService, parseBigInt, parseBigIntToNumber } from './analytics.js'\n\n// ─── Convenience factory ──────────────────────────────────────────────────────\n\nimport { GraphClient } from './client.js'\nimport { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { AnalyticsService } from './analytics.js'\n\nexport interface IsometryGraphConfig {\n endpoint: string\n headers?: Record<string, string>\n}\n\n/**\n * Create all graph services from a single config.\n * Convenience wrapper — individual services are also importable directly.\n */\nexport function createGraphClient(config: IsometryGraphConfig) {\n const client = new GraphClient(config)\n return {\n client,\n token: new TokenHistoryService(client),\n platform: new PlatformHistoryService(client),\n analytics: new AnalyticsService(client),\n }\n}\n","/**\n * IsometryClient — RPC + Graph 双通道聚合\n */\n\nimport { createWallet, type IWallet } from './rpc/wallet.js'\nimport { PlatformRpcService, FactoryRpcService, StableCoinRpcService } from './rpc/index.js'\nimport { createGraphClient } from './graph/index.js'\nimport { TokenHistoryService } from './graph/tokenHistory.js'\nimport { PlatformHistoryService } from './graph/platformHistory.js'\nimport { AnalyticsService } from './graph/analytics.js'\nimport type { ContractAddresses } from './rpc/contracts.js'\nimport type { IsometryGraphConfig } from './graph/index.js'\n\n// ─── Config ───────────────────────────────────────────────────────────────────\n\nexport interface IsometryConfig {\n chainId?: number\n rpcUrl?: string\n graphUrl?: string\n addresses?: ContractAddresses\n privateKey?: string\n}\n\nconst DEFAULT_ADDRESSES: ContractAddresses = {\n platform: '0x062B11C5Ed0F2b1f9B7dFaa7B95737dD221863F7',\n factory: '0x73D6BC64f4f54F9dF05851216F70F42135d56864',\n beacon: '0x99d6512B5483DFA003F73F737f87e7DAE9482F89',\n}\n\nfunction resolveAddresses(env: typeof process.env): ContractAddresses {\n return {\n platform: env.ISOMETRY_PLATFORM_ADDRESS ?? DEFAULT_ADDRESSES.platform,\n factory: env.ISOMETRY_FACTORY_ADDRESS ?? DEFAULT_ADDRESSES.factory,\n beacon: env.ISOMETRY_BEACON_ADDRESS ?? DEFAULT_ADDRESSES.beacon,\n }\n}\n\n// ─── SDK version ─────────────────────────────────────────────────────────────\n\nexport const SDK_VERSION = '0.4.4'\n\n// ─── IsometryClient ────────────────────────────────────────────────────────────\n\nexport class IsometryClient {\n readonly rpc: {\n platform: PlatformRpcService\n factory: FactoryRpcService\n token: StableCoinRpcService\n }\n\n readonly graph: ReturnType<typeof createGraphClient>\n\n readonly config: {\n chainId: number\n rpcUrl: string\n graphUrl: string\n addresses: ContractAddresses\n privateKey: string | undefined\n walletMode: string\n }\n\n private _wallet: IWallet\n private _addresses: ContractAddresses\n private _chainId: number\n\n constructor(config: IsometryConfig = {}) {\n const rpcUrl = config.rpcUrl ?? process.env.ISOMETRY_RPC_URL ?? 'https://ethereum-sepolia.publicnode.com'\n const graphUrl =\n config.graphUrl ?? process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry'\n const privateKey = config.privateKey ?? process.env.ISOMETRY_PRIVATE_KEY\n this._chainId = config.chainId ?? parseInt(process.env.ISOMETRY_CHAIN_ID ?? '11155111')\n\n this._wallet = createWallet(rpcUrl, privateKey)\n this._addresses = config.addresses ?? resolveAddresses(process.env)\n\n this.config = {\n chainId: this._chainId,\n rpcUrl,\n graphUrl,\n addresses: this._addresses,\n privateKey,\n walletMode: this._wallet.mode as string,\n }\n\n // Read runner — always use provider\n const runner = this._wallet.provider as unknown as import('ethers').ContractRunner\n\n this.rpc = {\n platform: new PlatformRpcService(this._addresses, runner),\n factory: new FactoryRpcService(this._addresses, runner),\n token: new StableCoinRpcService(this._addresses, runner),\n }\n\n const graphConfig: IsometryGraphConfig = { endpoint: graphUrl }\n const graphResult = createGraphClient(graphConfig)\n this.graph = graphResult\n\n // Pass the actual GraphClient (not the wrapper) to services\n this.graph.token = new TokenHistoryService(graphResult.client)\n this.graph.platform = new PlatformHistoryService(graphResult.client)\n this.graph.analytics = new AnalyticsService(graphResult.client)\n }\n\n /** Validate chain ID matches configured value */\n async validateChain(): Promise<void> {\n const network = await this._wallet.provider.getNetwork()\n if (Number(network.chainId) !== this._chainId) {\n throw new Error(\n `Chain ID mismatch: expected ${this._chainId}, got ${network.chainId}`\n )\n }\n }\n\n /** Get connected address (null if read-only) */\n async getAddress(): Promise<string | null> {\n return this._wallet.getAddress()\n }\n\n async destroy(): Promise<void> {\n // No-op for now\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createClient(config?: IsometryConfig): IsometryClient {\n return new IsometryClient(config)\n}\n"],"mappings":"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","names":["DEFAULT_FIRST","DEFAULT_SKIP"]}
1
+ {"version":3,"sources":["../src/sdk/rpc/wallet.ts","../src/sdk/rpc/contracts.ts","../src/abis/IsometryPlatform.json","../src/abis/StableCoinFactory.json","../src/abis/StableCoin.json","../src/abis/StableCoinBeacon.json","../src/sdk/rpc/platform.ts","../src/sdk/rpc/factory.ts","../src/sdk/rpc/stablecoin.ts","../src/sdk/rpc/errorMap.ts","../src/sdk/rpc/writeExecutor.ts","../src/sdk/graph/client.ts","../src/sdk/graph/queries.ts","../src/sdk/graph/tokenHistory.ts","../src/sdk/graph/platformHistory.ts","../src/sdk/graph/analytics.ts","../src/sdk/graph/index.ts","../src/sdk/client.ts"],"sourcesContent":["import { ethers } from 'ethers'\n\n// ─── IWallet ────────────────────────────────────────────────────────────────────\n\nexport type WalletMode = 'eip1193' | 'privatekey' | 'readonly'\n\n// ─── IWallet ───────────────────────────────────────────────────────────────────\n\nexport interface IWallet {\n readonly mode: WalletMode\n /** For read operations */\n readonly provider: ethers.Provider\n /** For write operations (may equal provider in read-only mode) */\n readonly signer: ethers.Signer | null\n getAddress(): Promise<string | null>\n isConnected(): boolean\n}\n\n// ─── ReadOnly ──────────────────────────────────────────────────────────────────\n\nexport class ReadOnlyWallet implements IWallet {\n readonly mode: WalletMode = 'readonly'\n readonly provider: ethers.Provider\n readonly signer = null\n\n constructor(rpcUrl: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n }\n\n getAddress(): Promise<string | null> {\n return Promise.resolve(null)\n }\n\n isConnected(): boolean {\n return false\n }\n}\n\n// ─── PrivateKey ────────────────────────────────────────────────────────────────\n\nexport class PrivateKeyWallet implements IWallet {\n readonly mode: WalletMode = 'privatekey'\n readonly provider: ethers.Provider\n readonly signer: ethers.Signer\n\n constructor(rpcUrl: string, privateKey: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n this.signer = new ethers.Wallet(privateKey, this.provider)\n }\n\n async getAddress(): Promise<string | null> {\n return this.signer.getAddress()\n }\n\n isConnected(): boolean {\n return true\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createWallet(\n rpcUrl: string,\n privateKey?: string\n): IWallet {\n if (privateKey) return new PrivateKeyWallet(rpcUrl, privateKey)\n return new ReadOnlyWallet(rpcUrl)\n}\n","import { Contract, InterfaceAbi } from 'ethers'\nimport type { ContractRunner } from 'ethers'\nimport platformAbi from '../../abis/IsometryPlatform.json' with { type: 'json' }\nimport factoryAbi from '../../abis/StableCoinFactory.json' with { type: 'json' }\nimport stablecoinAbi from '../../abis/StableCoin.json' with { type: 'json' }\nimport beaconAbi from '../../abis/StableCoinBeacon.json' with { type: 'json' }\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface ContractAddresses {\n platform?: string\n factory?: string\n beacon?: string\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Extract and cast ABI from Hardhat artifact format */\nfunction abiOf(artifact: { abi: unknown[] }): InterfaceAbi {\n return artifact.abi as InterfaceAbi\n}\n\n// ─── Contracts ────────────────────────────────────────────────────────────────\n\nexport function getContracts(addresses: ContractAddresses, runner: ContractRunner) {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n if (!addresses.factory) throw new Error('ISOMETRY_FACTORY_ADDRESS is required')\n if (!addresses.beacon) throw new Error('ISOMETRY_BEACON_ADDRESS is required')\n\n return {\n platform: new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner),\n factory: new Contract(addresses.factory, abiOf(factoryAbi as { abi: unknown[] }), runner),\n beacon: new Contract(addresses.beacon, abiOf(beaconAbi as { abi: unknown[] }), runner),\n }\n}\n\nexport function getStableCoin(address: string, runner: ContractRunner): Contract {\n return new Contract(address, abiOf(stablecoinAbi as { abi: unknown[] }), runner)\n}\n\nexport function getPlatform(runner: ContractRunner, addresses: ContractAddresses): Contract {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n return new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner)\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"IsometryPlatform\",\n \"sourceName\": \"contracts/platform/IsometryPlatform.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldFactory\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newFactory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"FactorySet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformPaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformUnpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"TokenRegistered\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACCESS_USER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"APPROVED_ISSUER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PLATFORM_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"accessUserList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addPlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approvedIssuerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAccessUserCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllAccessUsers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllApprovedIssuers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllPlatformAdmins\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getApprovedIssuerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPlatformAdminCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getTokenCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isOwner\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"platformAdminList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerTokenFor\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"registeredTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removePlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setFactory\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125ab62000104600039600081816118da015281816119030152611a4701526125ab6000f3fe6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"deployedBytecode\": \"0x6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinFactory\",\n \"sourceName\": \"contracts/platform/StableCoinFactory.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BeaconSet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StableCoinCreated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"beacon\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"createStableCoin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_platform\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"platform\",\n \"outputs\": [\n {\n \"internalType\": \"contract IsometryPlatform\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setBeacon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fb8806100df6000396000f3fe60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoin\",\n \"sourceName\": \"contracts/token/StableCoin.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AllowanceUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Blacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Burn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Mint\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnBlacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnpausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"BLACKLIST_MANAGER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_STATUS_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOKEN_OWNER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"blacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistManagerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"blacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklist\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklistManagers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinterItems\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct StableCoin.MinterItem[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistManagerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterStatusCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getMinterInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"holdersTotal\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterMinterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterStatusList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"minterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setMinterAllowance\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalBurned\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unBlacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161402c62000104600039600081816129b8015281816129e10152612c78015261402c6000f3fe60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinBeacon\",\n \"sourceName\": \"contracts/token/StableCoinBeacon.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_implementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconInvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161043c38038061043c83398101604081905261002f91610169565b8181806001600160a01b03811661006157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006a8161007d565b50610074826100cd565b5050505061019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036101035760405163211eb15960e21b81526001600160a01b0382166004820152602401610058565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80516001600160a01b038116811461016457600080fd5b919050565b6000806040838503121561017c57600080fd5b6101858361014d565b91506101936020840161014d565b90509250929050565b610291806101ab6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","import type { Contract, ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface PlatformInfo {\n address: string\n paused: boolean\n tokenCount: bigint\n platformAdminCount: bigint\n approvedIssuerCount: bigint\n accessUserCount: bigint\n}\n\nexport interface PlatformRoles {\n address: string\n isOwner: boolean\n isPlatformAdmin: boolean\n isApprovedIssuer: boolean\n isAccessUser: boolean\n}\n\n// ─── PlatformRpcService ────────────────────────────────────────────────────────\n\nexport class PlatformRpcService {\n private contracts: ReturnType<typeof getContracts>\n private platform: Contract\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.contracts = getContracts(addresses, runner)\n this.platform = this.contracts.platform\n }\n\n async getPlatformInfo(): Promise<PlatformInfo> {\n const [paused, tokenCount, adminCount, issuerCount, accessCount] =\n await Promise.all([\n this.platform.paused(),\n this.platform.getTokenCount(),\n this.platform.getPlatformAdminCount(),\n this.platform.getApprovedIssuerCount(),\n this.platform.getAccessUserCount(),\n ])\n\n return {\n address: this.platform.target as string,\n paused,\n tokenCount,\n platformAdminCount: adminCount,\n approvedIssuerCount: issuerCount,\n accessUserCount: accessCount,\n }\n }\n\n async getAllTokens(): Promise<string[]> {\n return this.platform.getAllTokens()\n }\n\n async getAccountRoles(account: string): Promise<PlatformRoles> {\n const [isOwner, isPlatformAdmin, isApprovedIssuer, isAccessUser] =\n await Promise.all([\n this.platform.isOwner(account),\n this.platform.isPlatformAdmin(account),\n this.platform.isApprovedIssuer(account),\n this.platform.isAccessUser(account),\n ])\n\n return {\n address: account,\n isOwner,\n isPlatformAdmin,\n isApprovedIssuer,\n isAccessUser,\n }\n }\n\n async isPaused(): Promise<boolean> {\n return this.platform.paused()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\nexport class FactoryRpcService {\n private addresses: ContractAddresses\n private runner: ContractRunner\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.addresses = addresses\n this.runner = runner\n }\n\n async getBeaconAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.beacon()\n }\n\n async getPlatformAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.platform()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getStableCoin, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TokenInfo {\n address: string\n name: string\n symbol: string\n decimals: number\n totalSupply: bigint\n paused: boolean\n}\n\nexport interface TokenStats {\n address: string\n holdersTotal: bigint\n totalMinted: bigint\n totalBurned: bigint\n totalAllowance: bigint\n mintersCount: bigint\n blacklistCount: bigint\n}\n\nexport interface MinterInfo {\n minter: string\n allowance: bigint\n}\n\nexport interface TokenRoles {\n address: string\n account: string\n isTokenOwner: boolean\n isMasterMinter: boolean\n isMinter: boolean\n isBlacklistManager: boolean\n isMasterStatus: boolean\n}\n\n// ─── StableCoinRpcService ─────────────────────────────────────────────────────\n\nexport class StableCoinRpcService {\n private runner: ContractRunner\n\n constructor(_addresses: ContractAddresses, runner: ContractRunner) {\n this.runner = runner\n }\n\n async getTokenInfo(address: string): Promise<TokenInfo> {\n const token = getStableCoin(address, this.runner)\n\n const [name, symbol, decimals, totalSupply, paused] = await Promise.all([\n token.name(),\n token.symbol(),\n token.decimals(),\n token.totalSupply(),\n token.paused(),\n ])\n\n return { address, name, symbol, decimals, totalSupply, paused }\n }\n\n async getTokenStats(address: string): Promise<TokenStats> {\n const token = getStableCoin(address, this.runner)\n\n const [holdersTotal, totalMinted, totalBurned, totalAllowance, minterCount, blacklistCount] =\n await Promise.all([\n token.holdersTotal(),\n token.totalMinted(),\n token.totalBurned(),\n token.totalAllowance(),\n token.getMinterCount(),\n token.getBlacklistCount(),\n ])\n\n return {\n address,\n holdersTotal,\n totalMinted,\n totalBurned,\n totalAllowance,\n mintersCount: minterCount,\n blacklistCount,\n }\n }\n\n async getUserRoles(address: string, account: string): Promise<TokenRoles> {\n const token = getStableCoin(address, this.runner)\n\n const TOKEN_OWNER_ROLE = await token.TOKEN_OWNER_ROLE()\n const MASTER_MINTER_ROLE = await token.MASTER_MINTER_ROLE()\n const MINTER_ROLE = await token.MINTER_ROLE()\n const BLACKLIST_MANAGER_ROLE = await token.BLACKLIST_MANAGER_ROLE()\n const MASTER_STATUS_ROLE = await token.MASTER_STATUS_ROLE()\n\n const [isTokenOwner, isMasterMinter, isMinter, isBlacklistManager, isMasterStatus] =\n await Promise.all([\n token.hasRole(TOKEN_OWNER_ROLE, account),\n token.hasRole(MASTER_MINTER_ROLE, account),\n token.hasRole(MINTER_ROLE, account),\n token.hasRole(BLACKLIST_MANAGER_ROLE, account),\n token.hasRole(MASTER_STATUS_ROLE, account),\n ])\n\n return {\n address,\n account,\n isTokenOwner,\n isMasterMinter,\n isMinter,\n isBlacklistManager,\n isMasterStatus,\n }\n }\n\n async isPaused(address: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.paused()\n }\n\n async isBlacklisted(address: string, user: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.blacklisted(user)\n }\n}\n","/**\n * Error selector → human-readable code mapping\n *\n * Observed on Sepolia (from live testing):\n * - 0xe2517d3f = OpenZeppelin AccessControlUnauthorizedAccount\n * - 0x08c379a0 = Error(string) — \"Not authorized\", \"Not approved issuer\"\n *\n * Extend this map as new selectors are observed on-chain.\n */\n\nexport interface DecodedError {\n code: string\n message: string\n}\n\n/**\n * Maps 4-byte error selector (0x...) to { code, message }.\n * Code is a SCREAMING_SNAKE_CASE identifier suitable for JSON output.\n */\nexport const ERROR_SELECTOR_MAP: Record<string, DecodedError> = {\n // OpenZeppelin AccessControlUnauthorizedAccount(address account, bytes32 role)\n // keccak256(\"AccessControlUnauthorizedAccount(address,bytes32)\") = 0x761f22a3\n // ethers v6 surfaces this as 0xe2517d3f in CALL_EXCEPTION details\n '0xe2517d3f': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n '0x761f22a3': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n\n // OpenZeppelin AccessControl: account is missing role\n '0x4e6f6c52': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: account is missing role',\n },\n\n // ERC20: insufficient balance\n '0x13be252b': {\n code: 'INSUFFICIENT_BALANCE',\n message: 'ERC20: transfer amount exceeds balance',\n },\n\n // ERC20: insufficient allowance\n '0xf4d708f0': {\n code: 'INSUFFICIENT_ALLOWANCE',\n message: 'ERC20: insufficient allowance',\n },\n\n // Pausable: paused\n '0x8d1c0a00': {\n code: 'PAUSED',\n message: 'Pausable: paused',\n },\n\n // ERC20: invalid sender\n '0xdf24fd05': {\n code: 'INVALID_SENDER',\n message: 'ERC20: invalid sender',\n },\n\n // ERC20: blacklisted\n '0x12d1b5d1': {\n code: 'BLACKLISTED',\n message: 'ERC20: sender is blacklisted',\n },\n\n // Isometry platform / factory custom errors (observed)\n '0x1e55aece': {\n code: 'NOT_APPROVED_ISSUER',\n message: 'Not an approved issuer',\n },\n\n '0xf2d4620b': {\n code: 'FACTORY_SYMBOL_EXISTS',\n message: 'Factory: symbol already exists',\n },\n\n '0x3b800a46': {\n code: 'ZERO_ADDRESS',\n message: 'Address cannot be zero',\n },\n}\n\n/**\n * Decode an ethers CALL_EXCEPTION error details object.\n * Returns a DecodedError if the selector is known, otherwise null.\n */\nexport function decodeError(details: {\n data?: string\n revert?: { signature?: string; name?: string; args?: unknown[] }\n reason?: string | null\n}): DecodedError | null {\n // Try custom error selector from data\n if (details.data && details.data !== '0x') {\n const selector = details.data.slice(0, 10).toLowerCase()\n const mapped = ERROR_SELECTOR_MAP[selector]\n if (mapped) return mapped\n }\n\n // Try known revert reason string\n if (details.reason) {\n const reason = details.reason\n if (reason === 'Not authorized' || reason === 'Not approved issuer') {\n return { code: 'ACCESS_DENIED', message: reason }\n }\n return { code: 'REVERT', message: reason }\n }\n\n // Try ethers revert with args\n if (details.revert?.args) {\n const name = details.revert.name ?? details.revert.signature ?? ''\n if (name.includes('AccessControl')) {\n const [account, role] = details.revert.args\n return {\n code: 'ACCESS_DENIED',\n message: `AccessControl: account ${account} missing role ${role}`,\n }\n }\n }\n\n return null\n}\n","/**\n * WriteExecutor — unified write transaction executor\n *\n * Consistent interface for all write operations:\n * - simulate: dry-run via estimateGas only\n * - execute: real transaction with receipt\n * - unified error model with human-readable codes\n * - CLI output helpers with --json / --simulate support\n */\n\nimport { Contract, type Log } from 'ethers'\nimport type { IWallet } from './wallet.js'\nimport { decodeError } from './errorMap.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SimulateResult {\n ok: true\n estimatedGas: bigint\n functionFragment: string\n params: Record<string, unknown>\n}\n\nexport interface TxReceipt {\n txHash: string\n blockNumber: number | null\n blockHash: string | null\n status: number | null\n gasUsed: bigint\n effectiveGasPrice: bigint\n from: string\n to: string | null\n nonce: number\n logs: Array<{\n address: string\n topics: string[]\n data: string\n blockNumber: number | null\n }>\n}\n\nexport interface ExecuteResult {\n ok: true\n receipt: TxReceipt\n}\n\nexport type WriteErrorCode =\n | 'NO_SIGNER'\n | 'INVALID_KEY'\n | 'INVALID_ARGUMENT'\n | 'SIMULATION_FAILED'\n | 'REVERT'\n | 'ACCESS_DENIED'\n | 'INSUFFICIENT_BALANCE'\n | 'INSUFFICIENT_ALLOWANCE'\n | 'PAUSED'\n | 'BLACKLISTED'\n | 'NOT_APPROVED_ISSUER'\n | 'FACTORY_SYMBOL_EXISTS'\n | 'ZERO_ADDRESS'\n | 'RPC_ERROR'\n | 'UNKNOWN'\n\nexport interface WriteError {\n ok: false\n code: WriteErrorCode\n message: string\n details?: unknown\n /** Raw 4-byte selector from the revert data, present when code is UNKNOWN or REVERT */\n selector?: string\n}\n\nexport type WriteResult = SimulateResult | ExecuteResult | WriteError\n\nexport interface WriteCall {\n method: string\n args: unknown[]\n overrides?: Record<string, unknown>\n}\n\nexport interface WriteExecutorConfig {\n wallet: IWallet\n contract: Contract\n}\n\n// ─── WriteExecutor ────────────────────────────────────────────────────────────\n\nexport class WriteExecutor {\n constructor(private config: WriteExecutorConfig) {}\n\n /** Dry-run: estimate gas without signing. Returns gas estimate or decoded error. */\n async simulate(call: WriteCall): Promise<SimulateResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot simulate: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n try {\n const fn = this.config.contract.getFunction(call.method)\n const gasEstimate = await fn.estimateGas(...call.args, call.overrides ?? {})\n\n const params: Record<string, unknown> = {}\n fn.fragment.inputs.forEach((input, i) => {\n params[input.name || `arg${i}`] = call.args[i]\n })\n\n return {\n ok: true,\n estimatedGas: gasEstimate,\n functionFragment: `${call.method}(${fn.fragment.inputs.map((i) => i.type).join(',')})`,\n params,\n }\n } catch (err: unknown) {\n // Always tag simulation failures as SIMULATION_FAILED; message is decoded\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: 'SIMULATION_FAILED',\n message: `[simulate] ${decoded.message}`,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /** Execute: sign and broadcast, wait for receipt. */\n async execute(call: WriteCall, confirmations = 1): Promise<ExecuteResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot execute: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n if (!this.config.wallet.signer) {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: 'Wallet has no signer.',\n }\n }\n\n try {\n const contract = this.config.contract.connect(this.config.wallet.signer)\n const fn = contract.getFunction(call.method)\n const tx = await fn.populateTransaction(...call.args, call.overrides ?? {})\n const signedTx = await this.config.wallet.signer!.sendTransaction(tx)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _receipt: any = await signedTx.wait(confirmations)\n if (!_receipt) {\n return { ok: false, code: 'RPC_ERROR', message: 'Transaction receipt is null' }\n }\n\n return {\n ok: true,\n receipt: {\n txHash: _receipt.hash,\n blockNumber: _receipt.blockNumber,\n blockHash: _receipt.blockHash ?? null,\n status: _receipt.status ?? null,\n gasUsed: _receipt.gasUsed,\n effectiveGasPrice: _receipt.effectiveGasPrice ?? 0n,\n from: _receipt.from,\n to: _receipt.to ?? null,\n nonce: _receipt.nonce,\n logs: _receipt.logs.map((log: Log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber,\n })),\n },\n }\n } catch (err: unknown) {\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: decoded.code as WriteErrorCode,\n message: decoded.message,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /**\n * Parse a revert error and extract { code, message, selector }.\n * selector is always included for unknown errors so users can report it.\n */\n private parseRevertError(err: unknown): { code: string; message: string; selector?: string } {\n // Extract raw selector from ethers error object (present in CALL_EXCEPTION)\n let rawSelector: string | undefined\n if (err && typeof err === 'object') {\n const errObj = err as Record<string, unknown>\n // ethers v6 surfaces custom error selector in error.data (4-byte hex)\n const data = (errObj as { data?: string }).data\n if (data && data !== '0x' && data.length >= 10) {\n rawSelector = data.slice(0, 10).toLowerCase()\n }\n }\n\n // Try known error mapping\n if (err && typeof err === 'object') {\n const decoded = decodeError(err as Record<string, unknown>)\n if (decoded) {\n return { code: decoded.code, message: decoded.message, selector: rawSelector }\n }\n }\n\n if (!(err instanceof Error)) {\n return { code: 'UNKNOWN', message: String(err), selector: rawSelector }\n }\n\n const msg = err.message\n if (msg.includes('insufficient funds')) return { code: 'INSUFFICIENT_BALANCE', message: 'insufficient funds for gas', selector: rawSelector }\n if (msg.includes('nonce')) return { code: 'RPC_ERROR', message: 'nonce error (tx may already be mined)', selector: rawSelector }\n if (msg.includes('read-only')) return { code: 'NO_SIGNER', message: 'wallet is read-only', selector: rawSelector }\n\n return { code: 'REVERT', message: msg.slice(0, 200), selector: rawSelector }\n }\n}\n\n// ─── CLI Output Helpers ───────────────────────────────────────────────────────\n\nexport interface WriteOpts {\n simulate: boolean\n json: boolean\n}\n\nexport interface WriteMeta {\n chainId: number\n source: 'rpc'\n timestamp: number\n command?: string\n}\n\nexport function makeWriteMeta(command?: string): WriteMeta {\n return {\n chainId: 11155111,\n source: 'rpc',\n timestamp: Math.floor(Date.now() / 1000),\n ...(command ? { command } : {}),\n }\n}\n\nexport function formatWriteResult(\n result: WriteResult,\n opts: WriteOpts,\n meta?: WriteMeta\n): string {\n if (opts.json) {\n const out: Record<string, unknown> = { ok: result.ok }\n if (result.ok) {\n if (opts.simulate) {\n const r = result as SimulateResult\n Object.assign(out, { estimatedGas: r.estimatedGas, functionFragment: r.functionFragment, params: r.params })\n } else {\n const r = result as ExecuteResult\n Object.assign(out, { receipt: r.receipt })\n }\n } else {\n const r = result as WriteError\n Object.assign(out, { code: r.code, message: r.message })\n if (r.selector) Object.assign(out, { selector: r.selector })\n }\n if (meta) Object.assign(out, { meta })\n return JSON.stringify(out, (_key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n , 2)\n }\n\n if (!result.ok) {\n return `❌ [${result.code}] ${result.message}`\n }\n\n if (opts.simulate) {\n const sim = result as SimulateResult\n return `✅ Simulation passed\\n Estimated gas: ${sim.estimatedGas.toLocaleString()}`\n }\n\n const exec = result as ExecuteResult\n const r = exec.receipt\n const ok = r.status === 1\n return [\n `${ok ? '✅' : '❌'} Transaction ${ok ? 'confirmed' : 'FAILED'}`,\n ` Tx Hash ${r.txHash}`,\n ` Block ${r.blockNumber ?? 'pending'}`,\n ` From ${r.from}`,\n ` To ${r.to ?? 'N/A'}`,\n ` Gas Used ${r.gasUsed.toLocaleString()}`,\n ` Status ${ok ? 'success' : 'reverted'}`,\n ].join('\\n')\n}\n","import { GraphQLClient } from 'graphql-request'\n\n// ─── Errors ───────────────────────────────────────────────────────────────────\n\nexport class GraphError extends Error {\n constructor(\n message: string,\n public readonly code: 'NETWORK_ERROR' | 'SUBGRAPH_ERROR' | 'PARSE_ERROR' | 'UNKNOWN',\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'GraphError'\n }\n}\n\n// ─── GraphClient ───────────────────────────────────────────────────────────────\n\nexport interface GraphClientConfig {\n endpoint: string\n /** Optional headers (e.g. authorization) */\n headers?: Record<string, string>\n}\n\nexport class GraphClient {\n private client: GraphQLClient\n\n constructor(config: GraphClientConfig) {\n this.client = new GraphQLClient(config.endpoint, {\n headers: config.headers,\n })\n }\n\n /**\n * Execute a raw GraphQL query.\n * @param query - GraphQL query string\n * @param variables - Optional query variables\n */\n async query<T>(\n query: string,\n variables?: Record<string, unknown>\n ): Promise<T> {\n try {\n return await this.client.request<T>(query, variables)\n } catch (err: unknown) {\n throw this.normalizeError(err)\n }\n }\n\n /**\n * Ping the subgraph — useful for health checks.\n * Returns current block number or throws.\n */\n async ping(): Promise<{ number: number; hash: string; deployment: string }> {\n const data = await this.query<{\n _meta: { block: { number: number; hash: string }; deployment: string }\n }>(`query { _meta { block { number hash } deployment } }`)\n\n if (!data._meta) throw new GraphError('No _meta', 'PARSE_ERROR')\n\n return {\n number: data._meta.block.number,\n hash: data._meta.block.hash,\n deployment: data._meta.deployment,\n }\n }\n\n // ─── Private ────────────────────────────────────────────────────────────────\n\n private normalizeError(err: unknown): GraphError {\n if (err instanceof GraphError) return err\n\n if (err instanceof Error) {\n // graphql-request throws { response: { errors: [...] } }\n const graphErr = (err as unknown as Record<string, unknown>).response as\n | { errors?: unknown[] }\n | undefined\n\n if (graphErr?.errors) {\n return new GraphError(\n `Subgraph error: ${JSON.stringify(graphErr.errors)}`,\n 'SUBGRAPH_ERROR',\n graphErr.errors\n )\n }\n\n // Network-level errors\n if (\n err.message.includes('fetch') ||\n err.message.includes('ECONNREFUSED') ||\n err.message.includes('timeout')\n ) {\n return new GraphError(`Network error: ${err.message}`, 'NETWORK_ERROR', err)\n }\n\n return new GraphError(err.message, 'UNKNOWN', err)\n }\n\n return new GraphError('Unknown error', 'UNKNOWN', err)\n }\n}\n","// ─── Token Queries ────────────────────────────────────────────────────────────\n\nexport const TOKENS_QUERY = `\n query Tokens($first: Int!, $skip: Int!) {\n tokens(first: $first, skip: $skip, orderBy: createdAt, orderDirection: desc) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\nexport const TOKEN_BY_ID_QUERY = `\n query TokenById($id: ID!) {\n token(id: $id) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Token Registered ─────────────────────────────────────────────────────────\n\nexport const TOKEN_REGISTERED_EVENTS_QUERY = `\n query TokenRegisteredEvents($first: Int!, $skip: Int!) {\n tokenRegisteredEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n token\n name\n symbol\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Mint History ─────────────────────────────────────────────────────────────\n\nexport const MINT_EVENTS_QUERY = `\n query MintEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n mintEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n to\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Burn History ─────────────────────────────────────────────────────────────\n\nexport const BURN_EVENTS_QUERY = `\n query BurnEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n burnEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n from\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Pause History ────────────────────────────────────────────────────────────\n\nexport const PAUSE_EVENTS_QUERY = `\n query PauseEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pauseEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n action\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const PAUSED_BY_OWNER_EVENTS_QUERY = `\n query PausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const UNPAUSED_BY_OWNER_EVENTS_QUERY = `\n query UnpausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n unpausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Blacklist ────────────────────────────────────────────────────────────────\n\nexport const BLACKLIST_EVENTS_QUERY = `\n query BlacklistEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n blacklistEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n user\n action\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Transfer ─────────────────────────────────────────────────────────────────\n\nexport const TRANSFER_EVENTS_QUERY = `\n query TransferEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n transferEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n from\n to\n amount\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Token Holders ────────────────────────────────────────────────────────────\n\nexport const TOKEN_HOLDERS_QUERY = `\n query TokenHolders($token: Bytes!, $first: Int!, $skip: Int!) {\n tokenHolders(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: balance\n orderDirection: desc\n ) {\n id\n token\n address\n balance\n firstSeenAt\n hasMinted\n hasBurned\n }\n }\n`\n\n// ─── 24h Snapshot ─────────────────────────────────────────────────────────────\n\nexport const TOKEN_24H_SNAPSHOT_QUERY = `\n query Token24hSnapshot($token: Bytes!) {\n token24hSnapshot(id: $token) {\n id\n token\n mintAmount24h\n burnAmount24h\n mintCount24h\n burnCount24h\n lastUpdatedAt\n }\n }\n`\n\n// ─── Platform ─────────────────────────────────────────────────────────────────\n\nexport const PLATFORM_ADMINS_QUERY = `\n query PlatformAdmins($first: Int!, $skip: Int!) {\n platformAdmins(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const APPROVED_ISSUERS_QUERY = `\n query ApprovedIssuers($first: Int!, $skip: Int!) {\n approvedIssuers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const ACCESS_USERS_QUERY = `\n query AccessUsers($first: Int!, $skip: Int!) {\n accessUsers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Factory ─────────────────────────────────────────────────────────────────\n\nexport const FACTORY_INITIALIZED_EVENTS_QUERY = `\n query FactoryInitializedEvents($first: Int!, $skip: Int!) {\n factoryInitializedEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n version\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const FACTORY_SET_EVENTS_QUERY = `\n query FactorySetEvents($first: Int!, $skip: Int!) {\n factorySetEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n oldFactory\n newFactory\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Minter ──────────────────────────────────────────────────────────────────\n\nexport const MINTER_ADDED_EVENTS_QUERY = `\n query MinterAddedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterAddedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const MINTER_REMOVED_EVENTS_QUERY = `\n query MinterRemovedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterRemovedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n","import type { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenHolder,\n Token24hSnapshot,\n Token,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n} from './types.js'\nimport {\n MINT_EVENTS_QUERY,\n BURN_EVENTS_QUERY,\n TRANSFER_EVENTS_QUERY,\n PAUSE_EVENTS_QUERY,\n PAUSED_BY_OWNER_EVENTS_QUERY,\n UNPAUSED_BY_OWNER_EVENTS_QUERY,\n BLACKLIST_EVENTS_QUERY,\n TOKEN_HOLDERS_QUERY,\n TOKEN_24H_SNAPSHOT_QUERY,\n TOKEN_BY_ID_QUERY,\n TOKENS_QUERY,\n TOKEN_REGISTERED_EVENTS_QUERY,\n MINTER_ADDED_EVENTS_QUERY,\n MINTER_REMOVED_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── TokenHistoryService ──────────────────────────────────────────────────────\n\nexport class TokenHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Token ─────────────────────────────────────────────────────────────────\n\n async getToken(address: string): Promise<Token | null> {\n const data = await this.client.query<{ token: Token | null }>(\n TOKEN_BY_ID_QUERY,\n { id: address }\n )\n return data.token\n }\n\n async getTokens(first = DEFAULT_FIRST, skip = DEFAULT_SKIP): Promise<Token[]> {\n const data = await this.client.query<{ tokens: Token[] }>(TOKENS_QUERY, {\n first,\n skip,\n })\n return data.tokens\n }\n\n // ─── Creation ──────────────────────────────────────────────────────────────\n\n async getTokenCreatedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenRegisteredEvent[]> {\n const data = await this.client.query<{\n tokenRegisteredEvents: TokenRegisteredEvent[]\n }>(TOKEN_REGISTERED_EVENTS_QUERY, { first, skip })\n return data.tokenRegisteredEvents\n }\n\n // ─── Mint / Burn ──────────────────────────────────────────────────────────\n\n async getMintHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MintEvent[]> {\n const data = await this.client.query<{ mintEvents: MintEvent[] }>(\n MINT_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.mintEvents\n }\n\n async getBurnHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BurnEvent[]> {\n const data = await this.client.query<{ burnEvents: BurnEvent[] }>(\n BURN_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.burnEvents\n }\n\n // ─── Transfer ─────────────────────────────────────────────────────────────\n\n async getTransferHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TransferEvent[]> {\n const data = await this.client.query<{ transferEvents: TransferEvent[] }>(\n TRANSFER_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.transferEvents\n }\n\n // ─── Pause ────────────────────────────────────────────────────────────────\n\n async getPauseHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PauseEvent[]> {\n const data = await this.client.query<{ pauseEvents: PauseEvent[] }>(\n PAUSE_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.pauseEvents\n }\n\n async getPausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PausedByOwnerEvent[]> {\n const data = await this.client.query<{\n pausedByOwnerEvents: PausedByOwnerEvent[]\n }>(PAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.pausedByOwnerEvents\n }\n\n async getUnpausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<UnpausedByOwnerEvent[]> {\n const data = await this.client.query<{\n unpausedByOwnerEvents: UnpausedByOwnerEvent[]\n }>(UNPAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.unpausedByOwnerEvents\n }\n\n // ─── Blacklist ────────────────────────────────────────────────────────────\n\n async getBlacklistHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BlacklistEvent[]> {\n const data = await this.client.query<{ blacklistEvents: BlacklistEvent[] }>(\n BLACKLIST_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.blacklistEvents\n }\n\n // ─── Holders ──────────────────────────────────────────────────────────────\n\n async getHolders(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenHolder[]> {\n const data = await this.client.query<{ tokenHolders: TokenHolder[] }>(\n TOKEN_HOLDERS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.tokenHolders\n }\n\n // ─── 24h Snapshot ────────────────────────────────────────────────────────\n\n async get24hSnapshot(\n tokenAddress: string\n ): Promise<Token24hSnapshot | null> {\n const data = await this.client.query<{\n token24hSnapshot: Token24hSnapshot | null\n }>(TOKEN_24H_SNAPSHOT_QUERY, { token: tokenAddress })\n return data.token24hSnapshot\n }\n\n // ─── Minters ───────────────────────────────────────────────────────────────\n\n async getMinterAddedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterAddedEvent[]> {\n const data = await this.client.query<{\n minterAddedEvents: MinterAddedEvent[]\n }>(MINTER_ADDED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterAddedEvents\n }\n\n async getMinterRemovedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterRemovedEvent[]> {\n const data = await this.client.query<{\n minterRemovedEvents: MinterRemovedEvent[]\n }>(MINTER_REMOVED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterRemovedEvents\n }\n}\n","import type { GraphClient } from './client.js'\nimport type {\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n} from './types.js'\nimport {\n PLATFORM_ADMINS_QUERY,\n APPROVED_ISSUERS_QUERY,\n ACCESS_USERS_QUERY,\n FACTORY_INITIALIZED_EVENTS_QUERY,\n FACTORY_SET_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── PlatformHistoryService ───────────────────────────────────────────────────\n\nexport class PlatformHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Platform Admins ──────────────────────────────────────────────────────\n\n async getPlatformAdmins(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PlatformAdmin[]> {\n const data = await this.client.query<{ platformAdmins: PlatformAdmin[] }>(\n PLATFORM_ADMINS_QUERY,\n { first, skip }\n )\n return data.platformAdmins\n }\n\n async getActivePlatformAdins(): Promise<PlatformAdmin[]> {\n const all = await this.getPlatformAdmins(1000, 0)\n return all.filter((a) => a.isActive)\n }\n\n // ─── Approved Issuers ────────────────────────────────────────────────────\n\n async getApprovedIssuers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<ApprovedIssuer[]> {\n const data = await this.client.query<{ approvedIssuers: ApprovedIssuer[] }>(\n APPROVED_ISSUERS_QUERY,\n { first, skip }\n )\n return data.approvedIssuers\n }\n\n async getActiveApprovedIssuers(): Promise<ApprovedIssuer[]> {\n const all = await this.getApprovedIssuers(1000, 0)\n return all.filter((i) => i.isActive)\n }\n\n // ─── Access Users ────────────────────────────────────────────────────────\n\n async getAccessUsers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<AccessUser[]> {\n const data = await this.client.query<{ accessUsers: AccessUser[] }>(\n ACCESS_USERS_QUERY,\n { first, skip }\n )\n return data.accessUsers\n }\n\n async getActiveAccessUsers(): Promise<AccessUser[]> {\n const all = await this.getAccessUsers(1000, 0)\n return all.filter((u) => u.isActive)\n }\n\n // ─── Factory Events ─────────────────────────────────────────────────────\n\n async getFactoryInitializedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactoryInitializedEvent[]> {\n const data = await this.client.query<{\n factoryInitializedEvents: FactoryInitializedEvent[]\n }>(FACTORY_INITIALIZED_EVENTS_QUERY, { first, skip })\n return data.factoryInitializedEvents\n }\n\n async getFactorySetEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactorySetEvent[]> {\n const data = await this.client.query<{\n factorySetEvents: FactorySetEvent[]\n }>(FACTORY_SET_EVENTS_QUERY, { first, skip })\n return data.factorySetEvents\n }\n}\n","import { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n} from './types.js'\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Convert subgraph BigInt decimal string to bigint */\nexport function parseBigInt(value: string): bigint {\n return BigInt(value)\n}\n\n/** Convert subgraph BigInt to number (may lose precision for huge values) */\nexport function parseBigIntToNumber(value: string): number {\n return Number(BigInt(value))\n}\n\n// ─── AnalyticsService ─────────────────────────────────────────────────────────\n\nexport class AnalyticsService {\n readonly token: TokenHistoryService\n readonly platform: PlatformHistoryService\n\n constructor(graph: GraphClient) {\n this.token = new TokenHistoryService(graph)\n this.platform = new PlatformHistoryService(graph)\n }\n\n // ─── Token analytics ──────────────────────────────────────────────────────\n\n /**\n * Get a quick supply summary for a token.\n * Combines live token stats (from GQL) with 24h snapshot.\n */\n async getTokenSupplySummary(tokenAddress: string) {\n const [token, snapshot] = await Promise.all([\n this.token.getToken(tokenAddress),\n this.token.get24hSnapshot(tokenAddress),\n ])\n\n if (!token) return null\n\n return {\n tokenAddress,\n name: token.name,\n symbol: token.symbol,\n status: token.status,\n totalMintAmount: parseBigInt(token.totalMintAmount),\n totalBurnAmount: parseBigInt(token.totalBurnAmount),\n netSupply:\n parseBigInt(token.totalMintAmount) -\n parseBigInt(token.totalBurnAmount),\n activeHolderCount: parseBigIntToNumber(token.activeHolderCount),\n snapshot: snapshot\n ? {\n mintAmount24h: parseBigInt(snapshot.mintAmount24h),\n burnAmount24h: parseBigInt(snapshot.burnAmount24h),\n mintCount24h: parseBigIntToNumber(snapshot.mintCount24h),\n burnCount24h: parseBigIntToNumber(snapshot.burnCount24h),\n }\n : null,\n }\n }\n\n /**\n * Get top N holders for a token.\n * Returns address + balance sorted by balance descending.\n */\n async getTopHolders(tokenAddress: string, limit = 10) {\n const holders = await this.token.getHolders(tokenAddress, limit, 0)\n const mapped = holders.map((h) => ({\n address: h.address,\n balance: parseBigInt(h.balance),\n }))\n return mapped.sort((a, b) => (a.balance > b.balance ? -1 : 1))\n }\n\n /**\n * Get recent activity (mint + burn events) for a token.\n * Useful for a quick activity feed.\n */\n async getRecentActivity(tokenAddress: string, limit = 20) {\n const [mints, burns] = await Promise.all([\n this.token.getMintHistory(tokenAddress, limit, 0),\n this.token.getBurnHistory(tokenAddress, limit, 0),\n ])\n\n type ActivityItem = {\n type: 'mint' | 'burn'\n txHash: string\n blockNumber: bigint\n timestamp: bigint\n amount: bigint\n actor: string\n }\n\n const events: ActivityItem[] = [\n ...mints.map((e: MintEvent): ActivityItem => ({\n type: 'mint',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ...burns.map((e: BurnEvent): ActivityItem => ({\n type: 'burn',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ]\n\n // Sort by block desc\n events.sort((a, b) =>\n a.blockNumber > b.blockNumber ? -1 : 1\n )\n\n return events.slice(0, limit)\n }\n\n /**\n * Get a holder balance across all their holdings.\n * Useful for an address summary view.\n */\n async getAccountPortfolio(ethAddress: string): Promise<\n Array<{\n token: string\n balance: bigint\n }>\n > {\n // NOTE: subgraph doesn't expose a direct \"account\" entity,\n // so we scan all token holders and filter client-side.\n // For large scale, add a dedicated `account(address: Bytes)` query to the subgraph.\n const tokens = await this.token.getTokens(100, 0)\n const results = await Promise.all(\n tokens.map(async (t) => {\n const holders = await this.token.getHolders(t.address, 1000, 0)\n const found = holders.find(\n (h: { address: string }) => h.address.toLowerCase() === ethAddress.toLowerCase()\n )\n return found\n ? { token: t.address, balance: parseBigInt(found.balance) }\n : null\n })\n )\n return results.filter(Boolean) as Array<{ token: string; balance: bigint }>\n }\n}\n","// ─── Graph Client ─────────────────────────────────────────────────────────────\n\nexport { GraphClient, GraphError } from './client.js'\nexport type { GraphClientConfig } from './client.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type {\n Token,\n TokenHolder,\n Token24hSnapshot,\n TokenStatus,\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenBlacklist,\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n Bytes,\n BigInt,\n PaginatedResult,\n PageInfo,\n} from './types.js'\n\n// ─── Services ─────────────────────────────────────────────────────────────────\n\nexport { TokenHistoryService } from './tokenHistory.js'\nexport { PlatformHistoryService } from './platformHistory.js'\nexport { AnalyticsService, parseBigInt, parseBigIntToNumber } from './analytics.js'\n\n// ─── Convenience factory ──────────────────────────────────────────────────────\n\nimport { GraphClient } from './client.js'\nimport { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { AnalyticsService } from './analytics.js'\n\nexport interface IsometryGraphConfig {\n endpoint: string\n headers?: Record<string, string>\n}\n\n/**\n * Create all graph services from a single config.\n * Convenience wrapper — individual services are also importable directly.\n */\nexport function createGraphClient(config: IsometryGraphConfig) {\n const client = new GraphClient(config)\n return {\n client,\n token: new TokenHistoryService(client),\n platform: new PlatformHistoryService(client),\n analytics: new AnalyticsService(client),\n }\n}\n","/**\n * IsometryClient — RPC + Graph 双通道聚合\n */\n\nimport { createWallet, type IWallet } from './rpc/wallet.js'\nimport { PlatformRpcService, FactoryRpcService, StableCoinRpcService } from './rpc/index.js'\nimport { createGraphClient } from './graph/index.js'\nimport { TokenHistoryService } from './graph/tokenHistory.js'\nimport { PlatformHistoryService } from './graph/platformHistory.js'\nimport { AnalyticsService } from './graph/analytics.js'\nimport type { ContractAddresses } from './rpc/contracts.js'\nimport type { IsometryGraphConfig } from './graph/index.js'\n\n// ─── Config ───────────────────────────────────────────────────────────────────\n\nexport interface IsometryConfig {\n chainId?: number\n rpcUrl?: string\n graphUrl?: string\n addresses?: ContractAddresses\n privateKey?: string\n}\n\nconst DEFAULT_ADDRESSES: ContractAddresses = {\n platform: '0x062B11C5Ed0F2b1f9B7dFaa7B95737dD221863F7',\n factory: '0x73D6BC64f4f54F9dF05851216F70F42135d56864',\n beacon: '0x99d6512B5483DFA003F73F737f87e7DAE9482F89',\n}\n\nfunction resolveAddresses(env: typeof process.env): ContractAddresses {\n return {\n platform: env.ISOMETRY_PLATFORM_ADDRESS ?? DEFAULT_ADDRESSES.platform,\n factory: env.ISOMETRY_FACTORY_ADDRESS ?? DEFAULT_ADDRESSES.factory,\n beacon: env.ISOMETRY_BEACON_ADDRESS ?? DEFAULT_ADDRESSES.beacon,\n }\n}\n\n// ─── SDK version ─────────────────────────────────────────────────────────────\n\nexport const SDK_VERSION = '0.4.5'\n\n// ─── IsometryClient ────────────────────────────────────────────────────────────\n\nexport class IsometryClient {\n readonly rpc: {\n platform: PlatformRpcService\n factory: FactoryRpcService\n token: StableCoinRpcService\n }\n\n readonly graph: ReturnType<typeof createGraphClient>\n\n readonly config: {\n chainId: number\n rpcUrl: string\n graphUrl: string\n addresses: ContractAddresses\n privateKey: string | undefined\n walletMode: string\n }\n\n private _wallet: IWallet\n private _addresses: ContractAddresses\n private _chainId: number\n\n constructor(config: IsometryConfig = {}) {\n const rpcUrl = config.rpcUrl ?? process.env.ISOMETRY_RPC_URL ?? 'https://ethereum-sepolia.publicnode.com'\n const graphUrl =\n config.graphUrl ?? process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry'\n const privateKey = config.privateKey ?? process.env.ISOMETRY_PRIVATE_KEY\n this._chainId = config.chainId ?? parseInt(process.env.ISOMETRY_CHAIN_ID ?? '11155111')\n\n this._wallet = createWallet(rpcUrl, privateKey)\n this._addresses = config.addresses ?? resolveAddresses(process.env)\n\n this.config = {\n chainId: this._chainId,\n rpcUrl,\n graphUrl,\n addresses: this._addresses,\n privateKey,\n walletMode: this._wallet.mode as string,\n }\n\n // Read runner — always use provider\n const runner = this._wallet.provider as unknown as import('ethers').ContractRunner\n\n this.rpc = {\n platform: new PlatformRpcService(this._addresses, runner),\n factory: new FactoryRpcService(this._addresses, runner),\n token: new StableCoinRpcService(this._addresses, runner),\n }\n\n const graphConfig: IsometryGraphConfig = { endpoint: graphUrl }\n const graphResult = createGraphClient(graphConfig)\n this.graph = graphResult\n\n // Pass the actual GraphClient (not the wrapper) to services\n this.graph.token = new TokenHistoryService(graphResult.client)\n this.graph.platform = new PlatformHistoryService(graphResult.client)\n this.graph.analytics = new AnalyticsService(graphResult.client)\n }\n\n /** Validate chain ID matches configured value */\n async validateChain(): Promise<void> {\n const network = await this._wallet.provider.getNetwork()\n if (Number(network.chainId) !== this._chainId) {\n throw new Error(\n `Chain ID mismatch: expected ${this._chainId}, got ${network.chainId}`\n )\n }\n }\n\n /** Get connected address (null if read-only) */\n async getAddress(): Promise<string | null> {\n return this._wallet.getAddress()\n }\n\n async destroy(): Promise<void> {\n // No-op for now\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createClient(config?: IsometryConfig): IsometryClient {\n return new IsometryClient(config)\n}\n"],"mappings":"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","names":["DEFAULT_FIRST","DEFAULT_SKIP"]}