{
  "_format": "hh-sol-artifact-1",
  "contractName": "NFTWalletFactory",
  "sourceName": "contracts/factories/NFTWalletFactory.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminRole",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "UserAlreadyHasAWallet",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "userId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "wallet",
          "type": "address"
        }
      ],
      "name": "NewWallet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "userId",
          "type": "uint256"
        }
      ],
      "name": "deployWallet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "adminRole",
          "type": "address"
        }
      ],
      "name": "setAdminRole",
      "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": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "userToWallet",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040516118e43803806118e483398101604081905261002f91610149565b61003833610064565b600280546001600160a01b0319166001600160a01b03831617905561005e6000826100b4565b50610179565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100be82826100c2565b5050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166100be5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006020828403121561015b57600080fd5b81516001600160a01b038116811461017257600080fd5b9392505050565b61175c806101886000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c578063a217fddf11610066578063a217fddf146101bc578063b8c349af146101c4578063d547741f146101ed578063f2fde38b1461020057600080fd5b8063715018a61461017c5780638da5cb5b1461018457806391d14854146101a957600080fd5b806301ffc9a7146100d4578063248a9ca3146100fc5780632f2ff15d1461012e57806336568abe146101435780634adc7cfd146101565780636b51e5f814610169575b600080fd5b6100e76100e2366004610891565b610213565b60405190151581526020015b60405180910390f35b61012061010a3660046108bb565b6000908152600160208190526040909120015490565b6040519081526020016100f3565b61014161013c3660046108f0565b61024a565b005b6101416101513660046108f0565b610275565b61014161016436600461091c565b6102f8565b6101416101773660046108bb565b610322565b610141610419565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100f3565b6100e76101b73660046108f0565b61042d565b610120600081565b6101916101d23660046108bb565b6003602052600090815260409020546001600160a01b031681565b6101416101fb3660046108f0565b610458565b61014161020e36600461091c565b61047e565b60006001600160e01b03198216637965db0b60e01b148061024457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526001602081905260409091200154610266816104f7565b6102708383610501565b505050565b6001600160a01b03811633146102ea5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6102f4828261056c565b5050565b6103006105d3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600061032d816104f7565b6000828152600360205260409020546001600160a01b031615610363576040516322c948df60e21b815260040160405180910390fd5b6002546040516000916001600160a01b03169061037f90610884565b6001600160a01b039091168152602001604051809103906000f0801580156103ab573d6000803e3d6000fd5b5060008481526003602090815260409182902080546001600160a01b0319166001600160a01b03851690811790915582518781529182015291925082917f7055fa9d70040e29e5eb0784275e2cc4c5344d69a379ac5050d26f68947d4bd1910160405180910390a150505050565b6104216105d3565b61042b600061062d565b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008281526001602081905260409091200154610474816104f7565b610270838361056c565b6104866105d3565b6001600160a01b0381166104eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102e1565b6104f48161062d565b50565b6104f4813361067d565b61050b828261042d565b6102f45760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b610576828261042d565b156102f45760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000546001600160a01b0316331461042b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610687828261042d565b6102f45761069f816001600160a01b031660146106e1565b6106aa8360206106e1565b6040516020016106bb92919061095b565b60408051601f198184030181529082905262461bcd60e51b82526102e1916004016109d0565b606060006106f0836002610a19565b6106fb906002610a30565b67ffffffffffffffff81111561071357610713610a43565b6040519080825280601f01601f19166020018201604052801561073d576020820181803683370190505b509050600360fc1b8160008151811061075857610758610a59565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061078757610787610a59565b60200101906001600160f81b031916908160001a90535060006107ab846002610a19565b6107b6906001610a30565b90505b600181111561082e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106107ea576107ea610a59565b1a60f81b82828151811061080057610800610a59565b60200101906001600160f81b031916908160001a90535060049490941c9361082781610a6f565b90506107b9565b50831561087d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102e1565b9392505050565b610ca080610a8783390190565b6000602082840312156108a357600080fd5b81356001600160e01b03198116811461087d57600080fd5b6000602082840312156108cd57600080fd5b5035919050565b80356001600160a01b03811681146108eb57600080fd5b919050565b6000806040838503121561090357600080fd5b82359150610913602084016108d4565b90509250929050565b60006020828403121561092e57600080fd5b61087d826108d4565b60005b8381101561095257818101518382015260200161093a565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610993816017850160208801610937565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516109c4816028840160208801610937565b01602801949350505050565b60208152600082518060208401526109ef816040850160208701610937565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761024457610244610a03565b8082018082111561024457610244610a03565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610a7e57610a7e610a03565b50600019019056fe608060405234801561001057600080fd5b50604051610ca0380380610ca083398101604081905261002f916100ec565b61003a600082610040565b5061011c565b61004a828261004e565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661004a576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100a83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156100fe57600080fd5b81516001600160a01b038116811461011557600080fd5b9392505050565b610b758061012b6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806336568abe1161007157806336568abe1461019e57806389476069146101b157806391d14854146101c4578063a217fddf146101d7578063d547741f146101df578063e11f2689146101f257600080fd5b806301ffc9a7146100b9578063078d3b79146100e1578063150b7a02146100f6578063248a9ca31461014757806329501871146101785780632f2ff15d1461018b575b600080fd5b6100cc6100c7366004610818565b610207565b60405190151581526020015b60405180910390f35b6100f46100ef36600461085e565b61023e565b005b61012e61010436600461089a565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b031990911681526020016100d8565b61016a610155366004610935565b60009081526020819052604090206001015490565b6040519081526020016100d8565b6100f461018636600461094e565b6102f6565b6100f4610199366004610969565b61031d565b6100f46101ac366004610969565b610347565b6100f46101bf36600461094e565b6103c6565b6100cc6101d2366004610969565b6104c7565b61016a600081565b6100f46101ed366004610969565b6104f0565b61016a600080516020610b2083398151915281565b60006001600160e01b03198216637965db0b60e01b148061023857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6102496000336104c7565b15801561026b5750610269600080516020610b20833981519152336104c7565b155b1561028957604051633497394360e01b815260040160405180910390fd5b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528416906323b872dd90606401600060405180830381600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b50505050505050565b600061030181610515565b610319600080516020610b2083398151915283610522565b5050565b60008281526020819052604090206001015461033881610515565b6103428383610528565b505050565b6001600160a01b03811633146103bc5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61031982826105ac565b600080516020610b208339815191526103de81610515565b6040516370a0823160e01b815230600482015282906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190610995565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561049d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c191906109ae565b50505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008281526020819052604090206001015461050b81610515565b61034283836105ac565b61051f8133610611565b50565b61031982825b61053282826104c7565b610319576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105683390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105b682826104c7565b15610319576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61061b82826104c7565b61031957610633816001600160a01b03166014610675565b61063e836020610675565b60405160200161064f9291906109f4565b60408051601f198184030181529082905262461bcd60e51b82526103b391600401610a69565b60606000610684836002610ab2565b61068f906002610ac9565b67ffffffffffffffff8111156106a7576106a7610adc565b6040519080825280601f01601f1916602001820160405280156106d1576020820181803683370190505b509050600360fc1b816000815181106106ec576106ec610af2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061071b5761071b610af2565b60200101906001600160f81b031916908160001a905350600061073f846002610ab2565b61074a906001610ac9565b90505b60018111156107c2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061077e5761077e610af2565b1a60f81b82828151811061079457610794610af2565b60200101906001600160f81b031916908160001a90535060049490941c936107bb81610b08565b905061074d565b5083156108115760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103b3565b9392505050565b60006020828403121561082a57600080fd5b81356001600160e01b03198116811461081157600080fd5b80356001600160a01b038116811461085957600080fd5b919050565b60008060006060848603121561087357600080fd5b61087c84610842565b925061088a60208501610842565b9150604084013590509250925092565b6000806000806000608086880312156108b257600080fd5b6108bb86610842565b94506108c960208701610842565b935060408601359250606086013567ffffffffffffffff808211156108ed57600080fd5b818801915088601f83011261090157600080fd5b81358181111561091057600080fd5b89602082850101111561092257600080fd5b9699959850939650602001949392505050565b60006020828403121561094757600080fd5b5035919050565b60006020828403121561096057600080fd5b61081182610842565b6000806040838503121561097c57600080fd5b8235915061098c60208401610842565b90509250929050565b6000602082840312156109a757600080fd5b5051919050565b6000602082840312156109c057600080fd5b8151801515811461081157600080fd5b60005b838110156109eb5781810151838201526020016109d3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610a2c8160178501602088016109d0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610a5d8160288401602088016109d0565b01602801949350505050565b6020815260008251806020840152610a888160408501602087016109d0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761023857610238610a9c565b8082018082111561023857610238610a9c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610b1757610b17610a9c565b50600019019056fec3df401f63a41d9f333f158f681da44efbcd7612f21f8dc39c96fe9cda312edba26469706673582212207f739f5a53c705338aa90b7f09dcc3463961c86cc023fae177f08c294af6757e64736f6c63430008110033a264697066735822122090fa978d8a04310b140f77fe6aa28d9aaca1e2a4191db7835ad6e3fad6fa9a8164736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c578063a217fddf11610066578063a217fddf146101bc578063b8c349af146101c4578063d547741f146101ed578063f2fde38b1461020057600080fd5b8063715018a61461017c5780638da5cb5b1461018457806391d14854146101a957600080fd5b806301ffc9a7146100d4578063248a9ca3146100fc5780632f2ff15d1461012e57806336568abe146101435780634adc7cfd146101565780636b51e5f814610169575b600080fd5b6100e76100e2366004610891565b610213565b60405190151581526020015b60405180910390f35b61012061010a3660046108bb565b6000908152600160208190526040909120015490565b6040519081526020016100f3565b61014161013c3660046108f0565b61024a565b005b6101416101513660046108f0565b610275565b61014161016436600461091c565b6102f8565b6101416101773660046108bb565b610322565b610141610419565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100f3565b6100e76101b73660046108f0565b61042d565b610120600081565b6101916101d23660046108bb565b6003602052600090815260409020546001600160a01b031681565b6101416101fb3660046108f0565b610458565b61014161020e36600461091c565b61047e565b60006001600160e01b03198216637965db0b60e01b148061024457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526001602081905260409091200154610266816104f7565b6102708383610501565b505050565b6001600160a01b03811633146102ea5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6102f4828261056c565b5050565b6103006105d3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600061032d816104f7565b6000828152600360205260409020546001600160a01b031615610363576040516322c948df60e21b815260040160405180910390fd5b6002546040516000916001600160a01b03169061037f90610884565b6001600160a01b039091168152602001604051809103906000f0801580156103ab573d6000803e3d6000fd5b5060008481526003602090815260409182902080546001600160a01b0319166001600160a01b03851690811790915582518781529182015291925082917f7055fa9d70040e29e5eb0784275e2cc4c5344d69a379ac5050d26f68947d4bd1910160405180910390a150505050565b6104216105d3565b61042b600061062d565b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008281526001602081905260409091200154610474816104f7565b610270838361056c565b6104866105d3565b6001600160a01b0381166104eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102e1565b6104f48161062d565b50565b6104f4813361067d565b61050b828261042d565b6102f45760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b610576828261042d565b156102f45760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000546001600160a01b0316331461042b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610687828261042d565b6102f45761069f816001600160a01b031660146106e1565b6106aa8360206106e1565b6040516020016106bb92919061095b565b60408051601f198184030181529082905262461bcd60e51b82526102e1916004016109d0565b606060006106f0836002610a19565b6106fb906002610a30565b67ffffffffffffffff81111561071357610713610a43565b6040519080825280601f01601f19166020018201604052801561073d576020820181803683370190505b509050600360fc1b8160008151811061075857610758610a59565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061078757610787610a59565b60200101906001600160f81b031916908160001a90535060006107ab846002610a19565b6107b6906001610a30565b90505b600181111561082e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106107ea576107ea610a59565b1a60f81b82828151811061080057610800610a59565b60200101906001600160f81b031916908160001a90535060049490941c9361082781610a6f565b90506107b9565b50831561087d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102e1565b9392505050565b610ca080610a8783390190565b6000602082840312156108a357600080fd5b81356001600160e01b03198116811461087d57600080fd5b6000602082840312156108cd57600080fd5b5035919050565b80356001600160a01b03811681146108eb57600080fd5b919050565b6000806040838503121561090357600080fd5b82359150610913602084016108d4565b90509250929050565b60006020828403121561092e57600080fd5b61087d826108d4565b60005b8381101561095257818101518382015260200161093a565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610993816017850160208801610937565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516109c4816028840160208801610937565b01602801949350505050565b60208152600082518060208401526109ef816040850160208701610937565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761024457610244610a03565b8082018082111561024457610244610a03565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610a7e57610a7e610a03565b50600019019056fe608060405234801561001057600080fd5b50604051610ca0380380610ca083398101604081905261002f916100ec565b61003a600082610040565b5061011c565b61004a828261004e565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661004a576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100a83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000602082840312156100fe57600080fd5b81516001600160a01b038116811461011557600080fd5b9392505050565b610b758061012b6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806336568abe1161007157806336568abe1461019e57806389476069146101b157806391d14854146101c4578063a217fddf146101d7578063d547741f146101df578063e11f2689146101f257600080fd5b806301ffc9a7146100b9578063078d3b79146100e1578063150b7a02146100f6578063248a9ca31461014757806329501871146101785780632f2ff15d1461018b575b600080fd5b6100cc6100c7366004610818565b610207565b60405190151581526020015b60405180910390f35b6100f46100ef36600461085e565b61023e565b005b61012e61010436600461089a565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f95945050505050565b6040516001600160e01b031990911681526020016100d8565b61016a610155366004610935565b60009081526020819052604090206001015490565b6040519081526020016100d8565b6100f461018636600461094e565b6102f6565b6100f4610199366004610969565b61031d565b6100f46101ac366004610969565b610347565b6100f46101bf36600461094e565b6103c6565b6100cc6101d2366004610969565b6104c7565b61016a600081565b6100f46101ed366004610969565b6104f0565b61016a600080516020610b2083398151915281565b60006001600160e01b03198216637965db0b60e01b148061023857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6102496000336104c7565b15801561026b5750610269600080516020610b20833981519152336104c7565b155b1561028957604051633497394360e01b815260040160405180910390fd5b6040516323b872dd60e01b81523060048201526001600160a01b038381166024830152604482018390528416906323b872dd90606401600060405180830381600087803b1580156102d957600080fd5b505af11580156102ed573d6000803e3d6000fd5b50505050505050565b600061030181610515565b610319600080516020610b2083398151915283610522565b5050565b60008281526020819052604090206001015461033881610515565b6103428383610528565b505050565b6001600160a01b03811633146103bc5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61031982826105ac565b600080516020610b208339815191526103de81610515565b6040516370a0823160e01b815230600482015282906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190610995565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561049d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c191906109ae565b50505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008281526020819052604090206001015461050b81610515565b61034283836105ac565b61051f8133610611565b50565b61031982825b61053282826104c7565b610319576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556105683390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6105b682826104c7565b15610319576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61061b82826104c7565b61031957610633816001600160a01b03166014610675565b61063e836020610675565b60405160200161064f9291906109f4565b60408051601f198184030181529082905262461bcd60e51b82526103b391600401610a69565b60606000610684836002610ab2565b61068f906002610ac9565b67ffffffffffffffff8111156106a7576106a7610adc565b6040519080825280601f01601f1916602001820160405280156106d1576020820181803683370190505b509050600360fc1b816000815181106106ec576106ec610af2565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061071b5761071b610af2565b60200101906001600160f81b031916908160001a905350600061073f846002610ab2565b61074a906001610ac9565b90505b60018111156107c2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061077e5761077e610af2565b1a60f81b82828151811061079457610794610af2565b60200101906001600160f81b031916908160001a90535060049490941c936107bb81610b08565b905061074d565b5083156108115760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103b3565b9392505050565b60006020828403121561082a57600080fd5b81356001600160e01b03198116811461081157600080fd5b80356001600160a01b038116811461085957600080fd5b919050565b60008060006060848603121561087357600080fd5b61087c84610842565b925061088a60208501610842565b9150604084013590509250925092565b6000806000806000608086880312156108b257600080fd5b6108bb86610842565b94506108c960208701610842565b935060408601359250606086013567ffffffffffffffff808211156108ed57600080fd5b818801915088601f83011261090157600080fd5b81358181111561091057600080fd5b89602082850101111561092257600080fd5b9699959850939650602001949392505050565b60006020828403121561094757600080fd5b5035919050565b60006020828403121561096057600080fd5b61081182610842565b6000806040838503121561097c57600080fd5b8235915061098c60208401610842565b90509250929050565b6000602082840312156109a757600080fd5b5051919050565b6000602082840312156109c057600080fd5b8151801515811461081157600080fd5b60005b838110156109eb5781810151838201526020016109d3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610a2c8160178501602088016109d0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610a5d8160288401602088016109d0565b01602801949350505050565b6020815260008251806020840152610a888160408501602087016109d0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761023857610238610a9c565b8082018082111561023857610238610a9c565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610b1757610b17610a9c565b50600019019056fec3df401f63a41d9f333f158f681da44efbcd7612f21f8dc39c96fe9cda312edba26469706673582212207f739f5a53c705338aa90b7f09dcc3463961c86cc023fae177f08c294af6757e64736f6c63430008110033a264697066735822122090fa978d8a04310b140f77fe6aa28d9aaca1e2a4191db7835ad6e3fad6fa9a8164736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
