{
    "_format": "hh-sol-artifact-1",
    "contractName": "CrossChainLayerERC721",
    "sourceName": "contracts/core/tokens/CrossChainLayerERC721.sol",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "crossChainLayer",
                    "type": "address"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "ERC721IncorrectOwner",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "ERC721InsufficientApproval",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "approver",
                    "type": "address"
                }
            ],
            "name": "ERC721InvalidApprover",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "ERC721InvalidOperator",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "ERC721InvalidOwner",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "receiver",
                    "type": "address"
                }
            ],
            "name": "ERC721InvalidReceiver",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "ERC721InvalidSender",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "ERC721NonexistentToken",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidInitialization",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NotInitializing",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "UnauthorizedAccess",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "approved",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "approved",
                    "type": "bool"
                }
            ],
            "name": "ApprovalForAll",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint64",
                    "name": "version",
                    "type": "uint64"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "burn",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "getApproved",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getInfo",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "string",
                            "name": "name",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "symbol",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "baseURI",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "tvmAddress",
                            "type": "string"
                        }
                    ],
                    "internalType": "struct NFTInfo",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "name_",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "symbol_",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "baseURI_",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "tvmAddress_",
                    "type": "string"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "isApprovedForAll",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "ownerOf",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "safeMint",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "safeTransferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "safeTransferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "approved",
                    "type": "bool"
                }
            ],
            "name": "setApprovalForAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "baseURI",
                    "type": "string"
                }
            ],
            "name": "setBaseURI",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "tokenURI",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x6080604052348015600f57600080fd5b506040516119b93803806119b9833981016040819052602c916059565b600180546001600160a01b039092166001600160a01b031992831617905560028054909116331790556087565b600060208284031215606a57600080fd5b81516001600160a01b0381168114608057600080fd5b9392505050565b611923806100966000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636352211e116100a2578063a22cb46511610071578063a22cb46514610248578063a523d35e1461025b578063b88d4fde1461026e578063c87b56dd14610281578063e985e9c51461029457600080fd5b80636352211e146101f957806370a082311461020c5780638832e6e31461022d57806395d89b411461024057600080fd5b806323b872dd116100e957806323b872dd1461019857806342842e0e146101ab57806342966c68146101be57806355f804b3146101d15780635a9b0b89146101e457600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e6101293660046111a5565b6102a7565b60405190151581526020015b60405180910390f35b61014b6102d2565b60405161013a9190611212565b61016b610166366004611225565b610376565b6040516001600160a01b03909116815260200161013a565b61019661019136600461125a565b61038b565b005b6101966101a6366004611284565b61039a565b6101966101b9366004611284565b61042a565b6101966101cc366004611225565b61044a565b6101966101df3660046112c1565b61045e565b6101ec610473565b60405161013a9190611333565b61016b610207366004611225565b610563565b61021f61021a3660046113b1565b61056e565b60405190815260200161013a565b61019661023b366004611476565b6105ca565b61014b6105dd565b6101966102563660046114cc565b61061c565b610196610269366004611508565b610627565b61019661027c3660046115c4565b61075b565b61014b61028f366004611225565b610773565b61012e6102a2366004611613565b6107db565b60006001600160e01b0319821663c5c785b160e01b14806102cc57506102cc82610828565b92915050565b6000805160206118ce83398151915280546060919081906102f290611646565b80601f016020809104026020016040519081016040528092919081815260200182805461031e90611646565b801561036b5780601f106103405761010080835404028352916020019161036b565b820191906000526020600020905b81548152906001019060200180831161034e57829003601f168201915b505050505091505090565b600061038182610878565b506102cc826108b0565b6103968282336108ea565b5050565b6001600160a01b0382166103c957604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103d68383336108f7565b9050836001600160a01b0316816001600160a01b031614610424576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103c0565b50505050565b6104458383836040518060200160405280600081525061075b565b505050565b610452610a01565b61045b81610a2e565b50565b610466610a69565b60036104458284836116c7565b61049e6040518060800160405280606081526020016060815260200160608152602001606081525090565b60405180608001604052806104b16102d2565b81526020016104be6105dd565b81526020016104cb610a94565b8152602001600080546104dd90611646565b80601f016020809104026020016040519081016040528092919081815260200182805461050990611646565b80156105565780601f1061052b57610100808354040283529160200191610556565b820191906000526020600020905b81548152906001019060200180831161053957829003601f168201915b5050505050815250905090565b60006102cc82610878565b60006000805160206118ce8339815191526001600160a01b0383166105a9576040516322718ad960e21b8152600060048201526024016103c0565b6001600160a01b039092166000908152600390920160205250604090205490565b6105d2610a01565b610445838383610b26565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060916000805160206118ce833981519152916102f290611646565b610396338383610b3e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561066c5750825b90506000826001600160401b031660011480156106885750303b155b905081158015610696575080155b156106b45760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156106de57845460ff60401b1916600160401b1785555b6106e6610a69565b6106f08989610bef565b60036106fc8882611786565b5060006107098782611786565b50831561075057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b61076684848461039a565b6104243385858585610c01565b606061077e82610878565b506000610789610a94565b905060008151116107a957604051806020016040528060008152506107d4565b806107b384610d2c565b6040516020016107c4929190611844565b6040516020818303038152906040525b9392505050565b6001600160a01b0391821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061085957506001600160e01b03198216635b5e139f60e01b145b806102cc57506301ffc9a760e01b6001600160e01b03198316146102cc565b60008061088483610dbe565b90506001600160a01b0381166102cc57604051637e27328960e01b8152600481018490526024016103c0565b60009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b031690565b6104458383836001610df8565b60006000805160206118ce8339815191528161091285610dbe565b90506001600160a01b0384161561092e5761092e818587610f0e565b6001600160a01b0381161561096e5761094b600086600080610df8565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b0386161561099f576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6001546001600160a01b03163314610a2c57604051631a27eac360e11b815260040160405180910390fd5b565b6000610a3d60008360006108f7565b90506001600160a01b03811661039657604051637e27328960e01b8152600481018390526024016103c0565b6002546001600160a01b03163314610a2c57604051631a27eac360e11b815260040160405180910390fd5b606060038054610aa390611646565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90611646565b8015610b1c5780601f10610af157610100808354040283529160200191610b1c565b820191906000526020600020905b815481529060010190602001808311610aff57829003601f168201915b5050505050905090565b610b308383610f72565b610445336000858585610c01565b6000805160206118ce8339815191526001600160a01b038316610b7f57604051630b61174360e31b81526001600160a01b03841660048201526024016103c0565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b610bf7610fd7565b6103968282611020565b6001600160a01b0383163b15610d2557604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610c43908890889087908790600401611873565b6020604051808303816000875af1925050508015610c7e575060408051601f3d908101601f19168201909252610c7b918101906118b0565b60015b610ce7573d808015610cac576040519150601f19603f3d011682016040523d82523d6000602084013e610cb1565b606091505b508051600003610cdf57604051633250574960e11b81526001600160a01b03851660048201526024016103c0565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610d2357604051633250574960e11b81526001600160a01b03851660048201526024016103c0565b505b5050505050565b60606000610d3983611051565b60010190506000816001600160401b03811115610d5857610d586113cc565b6040519080825280601f01601f191660200182016040528015610d82576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610d8c57509392505050565b60009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260409020546001600160a01b031690565b6000805160206118ce8339815191528180610e1b57506001600160a01b03831615155b15610edd576000610e2b85610878565b90506001600160a01b03841615801590610e575750836001600160a01b0316816001600160a01b031614155b8015610e6a5750610e6881856107db565b155b15610e935760405163a9fbf51f60e01b81526001600160a01b03851660048201526024016103c0565b8215610edb5784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610f19838383611129565b610445576001600160a01b038316610f4757604051637e27328960e01b8152600481018290526024016103c0565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103c0565b6001600160a01b038216610f9c57604051633250574960e11b8152600060048201526024016103c0565b6000610faa838360006108f7565b90506001600160a01b03811615610445576040516339e3563760e11b8152600060048201526024016103c0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610a2c57604051631afcd79f60e31b815260040160405180910390fd5b611028610fd7565b6000805160206118ce833981519152806110428482611786565b50600181016104248382611786565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106110905772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106110bc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106110da57662386f26fc10000830492506010015b6305f5e10083106110f2576305f5e100830492506008015b612710831061110657612710830492506004015b60648310611118576064830492506002015b600a83106102cc5760010192915050565b60006001600160a01b038316158015906111875750826001600160a01b0316846001600160a01b03161480611163575061116384846107db565b806111875750826001600160a01b031661117c836108b0565b6001600160a01b0316145b949350505050565b6001600160e01b03198116811461045b57600080fd5b6000602082840312156111b757600080fd5b81356107d48161118f565b60005b838110156111dd5781810151838201526020016111c5565b50506000910152565b600081518084526111fe8160208601602086016111c2565b601f01601f19169290920160200192915050565b6020815260006107d460208301846111e6565b60006020828403121561123757600080fd5b5035919050565b80356001600160a01b038116811461125557600080fd5b919050565b6000806040838503121561126d57600080fd5b6112768361123e565b946020939093013593505050565b60008060006060848603121561129957600080fd5b6112a28461123e565b92506112b06020850161123e565b929592945050506040919091013590565b600080602083850312156112d457600080fd5b82356001600160401b038111156112ea57600080fd5b8301601f810185136112fb57600080fd5b80356001600160401b0381111561131157600080fd5b85602082840101111561132357600080fd5b6020919091019590945092505050565b60208152600082516080602084015261134f60a08401826111e6565b90506020840151601f1984830301604085015261136c82826111e6565b9150506040840151601f1984830301606085015261138a82826111e6565b9150506060840151601f198483030160808501526113a882826111e6565b95945050505050565b6000602082840312156113c357600080fd5b6107d48261123e565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126113f357600080fd5b8135602083016000806001600160401b03841115611413576114136113cc565b50604051601f19601f85018116603f011681018181106001600160401b0382111715611441576114416113cc565b60405283815290508082840187101561145957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561148b57600080fd5b6114948461123e565b92506020840135915060408401356001600160401b038111156114b657600080fd5b6114c2868287016113e2565b9150509250925092565b600080604083850312156114df57600080fd5b6114e88361123e565b9150602083013580151581146114fd57600080fd5b809150509250929050565b6000806000806080858703121561151e57600080fd5b84356001600160401b0381111561153457600080fd5b611540878288016113e2565b94505060208501356001600160401b0381111561155c57600080fd5b611568878288016113e2565b93505060408501356001600160401b0381111561158457600080fd5b611590878288016113e2565b92505060608501356001600160401b038111156115ac57600080fd5b6115b8878288016113e2565b91505092959194509250565b600080600080608085870312156115da57600080fd5b6115e38561123e565b93506115f16020860161123e565b92506040850135915060608501356001600160401b038111156115ac57600080fd5b6000806040838503121561162657600080fd5b61162f8361123e565b915061163d6020840161123e565b90509250929050565b600181811c9082168061165a57607f821691505b60208210810361167a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561044557806000526020600020601f840160051c810160208510156116a75750805b601f840160051c820191505b81811015610d2557600081556001016116b3565b6001600160401b038311156116de576116de6113cc565b6116f2836116ec8354611646565b83611680565b6000601f841160018114611726576000851561170e5750838201355b600019600387901b1c1916600186901b178355610d25565b600083815260209020601f19861690835b828110156117575786850135825560209485019460019092019101611737565b50868210156117745760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81516001600160401b0381111561179f5761179f6113cc565b6117b3816117ad8454611646565b84611680565b6020601f8211600181146117e757600083156117cf5750848201515b600019600385901b1c1916600184901b178455610d25565b600084815260208120601f198516915b8281101561181757878501518255602094850194600190920191016117f7565b50848210156118355786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600083516118568184602088016111c2565b83519083019061186a8183602088016111c2565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118a6908301846111e6565b9695505050505050565b6000602082840312156118c257600080fd5b81516107d48161118f56fe80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300a264697066735822122005d67ce4f8cb4ac98e8d7edac86a6415c3f0467ec7830f8611056bfd261367e164736f6c634300081c0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c80636352211e116100a2578063a22cb46511610071578063a22cb46514610248578063a523d35e1461025b578063b88d4fde1461026e578063c87b56dd14610281578063e985e9c51461029457600080fd5b80636352211e146101f957806370a082311461020c5780638832e6e31461022d57806395d89b411461024057600080fd5b806323b872dd116100e957806323b872dd1461019857806342842e0e146101ab57806342966c68146101be57806355f804b3146101d15780635a9b0b89146101e457600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e6101293660046111a5565b6102a7565b60405190151581526020015b60405180910390f35b61014b6102d2565b60405161013a9190611212565b61016b610166366004611225565b610376565b6040516001600160a01b03909116815260200161013a565b61019661019136600461125a565b61038b565b005b6101966101a6366004611284565b61039a565b6101966101b9366004611284565b61042a565b6101966101cc366004611225565b61044a565b6101966101df3660046112c1565b61045e565b6101ec610473565b60405161013a9190611333565b61016b610207366004611225565b610563565b61021f61021a3660046113b1565b61056e565b60405190815260200161013a565b61019661023b366004611476565b6105ca565b61014b6105dd565b6101966102563660046114cc565b61061c565b610196610269366004611508565b610627565b61019661027c3660046115c4565b61075b565b61014b61028f366004611225565b610773565b61012e6102a2366004611613565b6107db565b60006001600160e01b0319821663c5c785b160e01b14806102cc57506102cc82610828565b92915050565b6000805160206118ce83398151915280546060919081906102f290611646565b80601f016020809104026020016040519081016040528092919081815260200182805461031e90611646565b801561036b5780601f106103405761010080835404028352916020019161036b565b820191906000526020600020905b81548152906001019060200180831161034e57829003601f168201915b505050505091505090565b600061038182610878565b506102cc826108b0565b6103968282336108ea565b5050565b6001600160a01b0382166103c957604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103d68383336108f7565b9050836001600160a01b0316816001600160a01b031614610424576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016103c0565b50505050565b6104458383836040518060200160405280600081525061075b565b505050565b610452610a01565b61045b81610a2e565b50565b610466610a69565b60036104458284836116c7565b61049e6040518060800160405280606081526020016060815260200160608152602001606081525090565b60405180608001604052806104b16102d2565b81526020016104be6105dd565b81526020016104cb610a94565b8152602001600080546104dd90611646565b80601f016020809104026020016040519081016040528092919081815260200182805461050990611646565b80156105565780601f1061052b57610100808354040283529160200191610556565b820191906000526020600020905b81548152906001019060200180831161053957829003601f168201915b5050505050815250905090565b60006102cc82610878565b60006000805160206118ce8339815191526001600160a01b0383166105a9576040516322718ad960e21b8152600060048201526024016103c0565b6001600160a01b039092166000908152600390920160205250604090205490565b6105d2610a01565b610445838383610b26565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060916000805160206118ce833981519152916102f290611646565b610396338383610b3e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561066c5750825b90506000826001600160401b031660011480156106885750303b155b905081158015610696575080155b156106b45760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156106de57845460ff60401b1916600160401b1785555b6106e6610a69565b6106f08989610bef565b60036106fc8882611786565b5060006107098782611786565b50831561075057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b61076684848461039a565b6104243385858585610c01565b606061077e82610878565b506000610789610a94565b905060008151116107a957604051806020016040528060008152506107d4565b806107b384610d2c565b6040516020016107c4929190611844565b6040516020818303038152906040525b9392505050565b6001600160a01b0391821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061085957506001600160e01b03198216635b5e139f60e01b145b806102cc57506301ffc9a760e01b6001600160e01b03198316146102cc565b60008061088483610dbe565b90506001600160a01b0381166102cc57604051637e27328960e01b8152600481018490526024016103c0565b60009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b031690565b6104458383836001610df8565b60006000805160206118ce8339815191528161091285610dbe565b90506001600160a01b0384161561092e5761092e818587610f0e565b6001600160a01b0381161561096e5761094b600086600080610df8565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b0386161561099f576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6001546001600160a01b03163314610a2c57604051631a27eac360e11b815260040160405180910390fd5b565b6000610a3d60008360006108f7565b90506001600160a01b03811661039657604051637e27328960e01b8152600481018390526024016103c0565b6002546001600160a01b03163314610a2c57604051631a27eac360e11b815260040160405180910390fd5b606060038054610aa390611646565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90611646565b8015610b1c5780601f10610af157610100808354040283529160200191610b1c565b820191906000526020600020905b815481529060010190602001808311610aff57829003601f168201915b5050505050905090565b610b308383610f72565b610445336000858585610c01565b6000805160206118ce8339815191526001600160a01b038316610b7f57604051630b61174360e31b81526001600160a01b03841660048201526024016103c0565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b610bf7610fd7565b6103968282611020565b6001600160a01b0383163b15610d2557604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610c43908890889087908790600401611873565b6020604051808303816000875af1925050508015610c7e575060408051601f3d908101601f19168201909252610c7b918101906118b0565b60015b610ce7573d808015610cac576040519150601f19603f3d011682016040523d82523d6000602084013e610cb1565b606091505b508051600003610cdf57604051633250574960e11b81526001600160a01b03851660048201526024016103c0565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610d2357604051633250574960e11b81526001600160a01b03851660048201526024016103c0565b505b5050505050565b60606000610d3983611051565b60010190506000816001600160401b03811115610d5857610d586113cc565b6040519080825280601f01601f191660200182016040528015610d82576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610d8c57509392505050565b60009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260409020546001600160a01b031690565b6000805160206118ce8339815191528180610e1b57506001600160a01b03831615155b15610edd576000610e2b85610878565b90506001600160a01b03841615801590610e575750836001600160a01b0316816001600160a01b031614155b8015610e6a5750610e6881856107db565b155b15610e935760405163a9fbf51f60e01b81526001600160a01b03851660048201526024016103c0565b8215610edb5784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610f19838383611129565b610445576001600160a01b038316610f4757604051637e27328960e01b8152600481018290526024016103c0565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016103c0565b6001600160a01b038216610f9c57604051633250574960e11b8152600060048201526024016103c0565b6000610faa838360006108f7565b90506001600160a01b03811615610445576040516339e3563760e11b8152600060048201526024016103c0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610a2c57604051631afcd79f60e31b815260040160405180910390fd5b611028610fd7565b6000805160206118ce833981519152806110428482611786565b50600181016104248382611786565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106110905772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106110bc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106110da57662386f26fc10000830492506010015b6305f5e10083106110f2576305f5e100830492506008015b612710831061110657612710830492506004015b60648310611118576064830492506002015b600a83106102cc5760010192915050565b60006001600160a01b038316158015906111875750826001600160a01b0316846001600160a01b03161480611163575061116384846107db565b806111875750826001600160a01b031661117c836108b0565b6001600160a01b0316145b949350505050565b6001600160e01b03198116811461045b57600080fd5b6000602082840312156111b757600080fd5b81356107d48161118f565b60005b838110156111dd5781810151838201526020016111c5565b50506000910152565b600081518084526111fe8160208601602086016111c2565b601f01601f19169290920160200192915050565b6020815260006107d460208301846111e6565b60006020828403121561123757600080fd5b5035919050565b80356001600160a01b038116811461125557600080fd5b919050565b6000806040838503121561126d57600080fd5b6112768361123e565b946020939093013593505050565b60008060006060848603121561129957600080fd5b6112a28461123e565b92506112b06020850161123e565b929592945050506040919091013590565b600080602083850312156112d457600080fd5b82356001600160401b038111156112ea57600080fd5b8301601f810185136112fb57600080fd5b80356001600160401b0381111561131157600080fd5b85602082840101111561132357600080fd5b6020919091019590945092505050565b60208152600082516080602084015261134f60a08401826111e6565b90506020840151601f1984830301604085015261136c82826111e6565b9150506040840151601f1984830301606085015261138a82826111e6565b9150506060840151601f198483030160808501526113a882826111e6565b95945050505050565b6000602082840312156113c357600080fd5b6107d48261123e565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126113f357600080fd5b8135602083016000806001600160401b03841115611413576114136113cc565b50604051601f19601f85018116603f011681018181106001600160401b0382111715611441576114416113cc565b60405283815290508082840187101561145957600080fd5b838360208301376000602085830101528094505050505092915050565b60008060006060848603121561148b57600080fd5b6114948461123e565b92506020840135915060408401356001600160401b038111156114b657600080fd5b6114c2868287016113e2565b9150509250925092565b600080604083850312156114df57600080fd5b6114e88361123e565b9150602083013580151581146114fd57600080fd5b809150509250929050565b6000806000806080858703121561151e57600080fd5b84356001600160401b0381111561153457600080fd5b611540878288016113e2565b94505060208501356001600160401b0381111561155c57600080fd5b611568878288016113e2565b93505060408501356001600160401b0381111561158457600080fd5b611590878288016113e2565b92505060608501356001600160401b038111156115ac57600080fd5b6115b8878288016113e2565b91505092959194509250565b600080600080608085870312156115da57600080fd5b6115e38561123e565b93506115f16020860161123e565b92506040850135915060608501356001600160401b038111156115ac57600080fd5b6000806040838503121561162657600080fd5b61162f8361123e565b915061163d6020840161123e565b90509250929050565b600181811c9082168061165a57607f821691505b60208210810361167a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561044557806000526020600020601f840160051c810160208510156116a75750805b601f840160051c820191505b81811015610d2557600081556001016116b3565b6001600160401b038311156116de576116de6113cc565b6116f2836116ec8354611646565b83611680565b6000601f841160018114611726576000851561170e5750838201355b600019600387901b1c1916600186901b178355610d25565b600083815260209020601f19861690835b828110156117575786850135825560209485019460019092019101611737565b50868210156117745760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81516001600160401b0381111561179f5761179f6113cc565b6117b3816117ad8454611646565b84611680565b6020601f8211600181146117e757600083156117cf5750848201515b600019600385901b1c1916600184901b178455610d25565b600084815260208120601f198516915b8281101561181757878501518255602094850194600190920191016117f7565b50848210156118355786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600083516118568184602088016111c2565b83519083019061186a8183602088016111c2565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118a6908301846111e6565b9695505050505050565b6000602082840312156118c257600080fd5b81516107d48161118f56fe80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300a264697066735822122005d67ce4f8cb4ac98e8d7edac86a6415c3f0467ec7830f8611056bfd261367e164736f6c634300081c0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
