{
  "_format": "hh-sol-artifact-1",
  "contractName": "RegistrarCustody",
  "sourceName": "contracts/RegistrarCustody.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidExpiry",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "registrarId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "userDelegation",
          "type": "address"
        }
      ],
      "name": "DomainTokenized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NAME",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "registrarId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addRegistrar",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "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": [
        {
          "internalType": "address",
          "name": "_unsRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mintingManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "registrarId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isRegistrar",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mintingManager",
      "outputs": [
        {
          "internalType": "contract IMintingManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "nonceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "registrarDelegations",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "registrarId",
          "type": "uint256"
        }
      ],
      "name": "registrarRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "registrarId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeRegistrar",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "revoke",
      "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": "newAdmin",
          "type": "address"
        }
      ],
      "name": "rotateAdmin",
      "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": "keys",
          "type": "string[]"
        },
        {
          "internalType": "string[]",
          "name": "values",
          "type": "string[]"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "setRecords",
      "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": "string[]",
          "name": "labels",
          "type": "string[]"
        },
        {
          "internalType": "string[]",
          "name": "keys",
          "type": "string[]"
        },
        {
          "internalType": "string[]",
          "name": "values",
          "type": "string[]"
        },
        {
          "internalType": "uint64",
          "name": "expiry",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "registrarId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "userDelegation",
          "type": "address"
        }
      ],
      "name": "tokenizeDomain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unsRegistry",
      "outputs": [
        {
          "internalType": "contract IUNSRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "userDelegations",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61275a80620000ee5f395ff3fe608060405234801561000f575f80fd5b5060043610610208575f3560e01c8063588844321161011f578063a217fddf116100a9578063bb09d9e611610079578063bb09d9e6146104ce578063d547741f146104f7578063e71661231461050a578063f2fde38b1461051d578063ffa1ad7414610530575f80fd5b8063a217fddf1461046c578063a22cb46514610473578063a3f4df7e14610486578063a4247400146104bb575f80fd5b8063715018a6116100ef578063715018a6146104255780638bad0c0a1461042d5780638c9d518f146104355780638da5cb5b1461044857806391d1485414610459575f80fd5b806358884432146103d85780636aac4b00146103ec5780636ccbae5f146103ff5780637048027514610412575f80fd5b806324d7806c116101a05780633f41b614116101705780633f41b614146103575780633f7baeb914610383578063485cc9551461039657806348ef58cd146103a9578063572b6c05146103bc575f80fd5b806324d7806c1461030b5780632ccec6a01461031e5780632f2ff15d1461033157806336568abe14610344575f80fd5b80631bf7e13e116101db5780631bf7e13e146102a35780631eb76f65146102c357806320c5429b146102d6578063248a9ca3146102e9575f80fd5b806301ffc9a71461020c5780630511711c146102345780631626ba7e146102625780631785f53c1461028e575b5f80fd5b61021f61021a366004611e73565b610554565b60405190151581526020015b60405180910390f35b610254610242366004611e9a565b6101616020525f908152604090205481565b60405190815260200161022b565b610275610270366004611f4d565b61058a565b6040516001600160e01b0319909116815260200161022b565b6102a161029c366004611fa4565b6105e0565b005b6102b66102b1366004611fbf565b6105f5565b60405161022b91906120a1565b6102546102d1366004611e9a565b6106be565b6102a16102e4366004611e9a565b61070b565b6102546102f7366004611e9a565b5f90815260fb602052604090206001015490565b61021f610319366004611fa4565b6107b0565b6102a161032c366004611fa4565b6107bb565b6102a161033f3660046120b3565b6107d9565b6102a16103523660046120b3565b610802565b61015f5461036b906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b6102a16103913660046120b3565b610895565b6102a16103a43660046120e1565b6108af565b6102a16103b7366004612161565b610a05565b61021f6103ca366004611fa4565b6001600160a01b0316301490565b6101605461036b906001600160a01b031681565b6102a16103fa3660046120b3565b610ee3565b61025461040d366004611e9a565b610efd565b6102a1610420366004611fa4565b610f56565b6102a1610f68565b6102a1610f7b565b61021f6104433660046120b3565b610f87565b6097546001600160a01b031661036b565b61021f6104673660046120b3565b610f96565b6102545f81565b6102a161048136600461222d565b610fc0565b6102b660405180604001604052806016815260200175554e533a2052656769737472617220437573746f647960501b81525081565b61021f6104c9366004611fbf565b61102f565b61036b6104dc366004611e9a565b6101626020525f90815260409020546001600160a01b031681565b6102a16105053660046120b3565b611080565b6102a1610518366004612259565b6110a4565b6102a161052b366004611fa4565b611176565b6102b660405180604001604052806005815260200164302e322e3160d81b81525081565b5f6001600160e01b03198216637965db0b60e01b148061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8061059684846111ec565b90506105a1816107b0565b156105cf577f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d7496869915050610584565b506001600160e01b03199392505050565b6105e861120e565b6105f25f82611080565b50565b60605f5a905061060685858561102f565b61062357604051638baa579f60e01b815260040160405180910390fd5b6106b36106336020870187611fa4565b3060408801358461064760608b018b6122c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f9201919091525061128792505050565b9150505b9392505050565b604080516020810182905260096060820152682922a3a4a9aa2920a960b91b60808201529081018290525f9060a0015b604051602081830303815290604052805190602001209050919050565b5f818152610161602052604090205461072690610443611363565b610742576040516282b42960e81b815260040160405180910390fd5b61015f54610160546040516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018490529116906323b872dd906064015f604051808303815f87803b158015610797575f80fd5b505af11580156107a9573d5f803e3d5ffd5b5050505050565b5f6105848183610f96565b6107c361120e565b6107cd5f82611371565b6105f25f610352611363565b5f82815260fb60205260409020600101546107f38161137b565b6107fd838361138c565b505050565b61080a611363565b6001600160a01b0316816001600160a01b0316146108875760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108918282611412565b5050565b61089d61120e565b6108916108a9836106be565b82611371565b5f54610100900460ff16158080156108cd57505f54600160ff909116105b806108e65750303b1580156108e657505f5460ff166001145b6109495760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161087e565b5f805460ff19166001179055801561096a575f805461ff0019166101001790555b61015f80546001600160a01b038086166001600160a01b0319928316179092556101608054928516929091169190911790556109a4611496565b6109ac6114c4565b6109b46114fa565b6109bc611520565b80156107fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610a115f610467611363565b610a2d576040516282b42960e81b815260040160405180910390fd5b600260655403610a7f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161087e565b600260655561015f5460405163276fabb160e01b81525f916001600160a01b03169063276fabb190610ab7908d908d906004016123c1565b602060405180830381865afa158015610ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af691906123d4565b61015f54604051634f558e7960e01b8152600481018390529192505f916001600160a01b0390911690634f558e7990602401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6791906123eb565b610b71575f610bdd565b61015f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610bb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612406565b9050306001600160a01b03821603610d6c5761015f5460405163baef73e960e01b8152600481018490525f916001600160a01b03169063baef73e990602401602060405180830381865afa158015610c37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5b9190612421565b6001600160401b03169050805f03610c855760405162d36c8560e81b815260040160405180910390fd5b856001600160401b0316811015610d005761016054604051630f6dca4760e11b81526001600160401b0388166004820152602481018590526001600160a01b0390911690631edb948e906044015f604051808303815f87803b158015610ce9575f80fd5b505af1158015610cfb573d5f803e3d5ffd5b505050505b61015f54604051636749599f60e11b81526001600160a01b039091169063ce92b33e90610d39908d908d908d908d908a9060040161243c565b5f604051808303815f87803b158015610d50575f80fd5b505af1158015610d62573d5f803e3d5ffd5b5050505050610e62565b6001600160a01b03811615801590610d935750610160546001600160a01b03828116911614155b15610df357610160546040516320c5429b60e01b8152600481018490526001600160a01b03909116906320c5429b906024015f604051808303815f87803b158015610ddc575f80fd5b505af1158015610dee573d5f803e3d5ffd5b505050505b61016054604051632f1166c360e11b81526001600160a01b0390911690635e22cd8690610e349030908f908f908f908f908f908f908f905f90600401612475565b5f604051808303815f87803b158015610e4b575f80fd5b505af1158015610e5d573d5f803e3d5ffd5b505050505b5f8281526101616020908152604080832087905561016282529182902080546001600160a01b0319166001600160a01b03871690811790915582518781529182015283917ff62b185f823f021c1bb017de468883a6c58d0070339da7646c1742def39080b8910160405180910390a250506001606555505050505050505050565b610eeb61120e565b610891610ef7836106be565b82611080565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610f4f906060016040516020818303038152906040528051906020012090565b5492915050565b610f5e61120e565b6105f25f82611371565b610f7061120e565b610f795f611567565b565b610f795f610352611363565b5f6106b7610f94846106be565b835b5f91825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610fc861120e565b61015f5460405163a22cb46560e01b81526001600160a01b03848116600483015283151560248301529091169063a22cb465906044015f604051808303815f87803b158015611015575f80fd5b505af1158015611027573d5f803e3d5ffd5b505050505050565b5f61107861103c856124e8565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506115b892505050565b949350505050565b5f82815260fb602052604090206001015461109a8161137b565b6107fd8383611412565b5f81815261016160205260409020546110bf90610443611363565b15806110ec57506110ce611363565b5f82815261016260205260409020546001600160a01b039081169116145b15611109576040516282b42960e81b815260040160405180910390fd5b61015f54604051636749599f60e11b81526001600160a01b039091169063ce92b33e90611142908890889088908890889060040161243c565b5f604051808303815f87803b158015611159575f80fd5b505af115801561116b573d5f803e3d5ffd5b505050505050505050565b61117e61120e565b6001600160a01b0381166111e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087e565b6105f281611567565b5f805f6111f985856116b8565b91509150611206816116fa565b509392505050565b611216611363565b6001600160a01b03166112316097546001600160a01b031690565b6001600160a01b031614610f795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161087e565b6060611292856118af565b5f80876001600160a01b0316866112ab8b8a8989611914565b6040516112b8919061256f565b5f604051808303815f8787f1925050503d805f81146112f2576040519150601f19603f3d011682016040523d82523d5f602084013e6112f7565b606091505b509092509050611308603f8761259e565b5a11611316576113166125bd565b61135682826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c4544000000000000815250611944565b9998505050505050505050565b5f61136c61197d565b905090565b610891828261138c565b6105f281611387611363565b611997565b6113968282610f96565b610891575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113ce611363565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61141c8282610f96565b15610891575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff19169055611452611363565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b5f54610100900460ff166114bc5760405162461bcd60e51b815260040161087e906125d1565b610f796119fb565b5f54610100900460ff166114ea5760405162461bcd60e51b815260040161087e906125d1565b6114f2611a28565b610f79611a28565b5f54610100900460ff166114f25760405162461bcd60e51b815260040161087e906125d1565b5f54610100900460ff166115465760405162461bcd60e51b815260040161087e906125d1565b61154e611a4e565b611556611a28565b610f795f611562611363565b611371565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa1580156115fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162091906123d4565b90505f61168886606001518051906020012086886020015160405160200161166d9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60405160208183030381529060405280519060200120611a84565b90508186602001511480156116ae575085516116ae906001600160a01b03168286611abe565b9695505050505050565b5f8082516041036116ec576020830151604084015160608501515f1a6116e087828585611bf9565b945094505050506116f3565b505f905060025b9250929050565b5f81600481111561170d5761170d61261c565b036117155750565b60018160048111156117295761172961261c565b036117765760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087e565b600281600481111561178a5761178a61261c565b036117d75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087e565b60038160048111156117eb576117eb61261c565b036118435760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161087e565b60048160048111156118575761185761261c565b036105f25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161087e565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506119038190565b5461190f906001612630565b905550565b606082858560405160200161192b93929190612643565b6040516020818303038152906040529050949350505050565b606083156119535750816106b7565b8251156119635782518084602001fd5b8160405162461bcd60e51b815260040161087e91906120a1565b5f303303611992575060331936013560601c90565b503390565b6119a18282610f96565b610891576119b9816001600160a01b03166014611cde565b6119c4836020611cde565b6040516020016119d5929190612681565b60408051601f198184030181529082905262461bcd60e51b825261087e916004016120a1565b5f54610100900460ff16611a215760405162461bcd60e51b815260040161087e906125d1565b6001606555565b5f54610100900460ff16610f795760405162461bcd60e51b815260040161087e906125d1565b5f54610100900460ff16611a745760405162461bcd60e51b815260040161087e906125d1565b610f79611a7f611363565b611567565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c016106ee565b5f805f611acb85856116b8565b90925090505f816004811115611ae357611ae361261c565b148015611b015750856001600160a01b0316826001600160a01b0316145b15611b11576001925050506106b7565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401611b389291906126f5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611b76919061256f565b5f60405180830381855afa9150503d805f8114611bae576040519150601f19603f3d011682016040523d82523d5f602084013e611bb3565b606091505b5091509150818015611bc6575080516020145b8015611bed57508051630b135d3f60e11b90611beb90830160209081019084016123d4565b145b98975050505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611c2e57505f90506003611cd5565b8460ff16601b14158015611c4657508460ff16601c14155b15611c5657505f90506004611cd5565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611ca7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611ccf575f60019250925050611cd5565b91505f90505b94509492505050565b60605f611cec83600261270d565b611cf7906002612630565b6001600160401b03811115611d0e57611d0e611eb1565b6040519080825280601f01601f191660200182016040528015611d38576020820181803683370190505b509050600360fc1b815f81518110611d5257611d52612724565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611d8057611d80612724565b60200101906001600160f81b03191690815f1a9053505f611da284600261270d565b611dad906001612630565b90505b6001811115611e24576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611de157611de1612724565b1a60f81b828281518110611df757611df7612724565b60200101906001600160f81b03191690815f1a90535060049490941c93611e1d81612738565b9050611db0565b5083156106b75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161087e565b5f60208284031215611e83575f80fd5b81356001600160e01b0319811681146106b7575f80fd5b5f60208284031215611eaa575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ed4575f80fd5b81356001600160401b0380821115611eee57611eee611eb1565b604051601f8301601f19908116603f01168101908282118183101715611f1657611f16611eb1565b81604052838152866020858801011115611f2e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611f5e575f80fd5b8235915060208301356001600160401b03811115611f7a575f80fd5b611f8685828601611ec5565b9150509250929050565b6001600160a01b03811681146105f2575f80fd5b5f60208284031215611fb4575f80fd5b81356106b781611f90565b5f805f60408486031215611fd1575f80fd5b83356001600160401b0380821115611fe7575f80fd5b9085019060808288031215611ffa575f80fd5b9093506020850135908082111561200f575f80fd5b818601915086601f830112612022575f80fd5b813581811115612030575f80fd5b876020828501011115612041575f80fd5b6020830194508093505050509250925092565b5f5b8381101561206e578181015183820152602001612056565b50505f910152565b5f815180845261208d816020860160208601612054565b601f01601f19169290920160200192915050565b602081525f6106b76020830184612076565b5f80604083850312156120c4575f80fd5b8235915060208301356120d681611f90565b809150509250929050565b5f80604083850312156120f2575f80fd5b82356120fd81611f90565b915060208301356120d681611f90565b5f8083601f84011261211d575f80fd5b5081356001600160401b03811115612133575f80fd5b6020830191508360208260051b85010111156116f3575f80fd5b6001600160401b03811681146105f2575f80fd5b5f805f805f805f805f60c08a8c031215612179575f80fd5b89356001600160401b038082111561218f575f80fd5b61219b8d838e0161210d565b909b50995060208c01359150808211156121b3575f80fd5b6121bf8d838e0161210d565b909950975060408c01359150808211156121d7575f80fd5b506121e48c828d0161210d565b90965094505060608a01356121f88161214d565b925060808a0135915060a08a013561220f81611f90565b809150509295985092959850929598565b80151581146105f2575f80fd5b5f806040838503121561223e575f80fd5b823561224981611f90565b915060208301356120d681612220565b5f805f805f6060868803121561226d575f80fd5b85356001600160401b0380821115612283575f80fd5b61228f89838a0161210d565b909750955060208801359150808211156122a7575f80fd5b506122b48882890161210d565b96999598509660400135949350505050565b5f808335601e198436030181126122db575f80fd5b8301803591506001600160401b038211156122f4575f80fd5b6020019150368190038213156116f3575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f838385526020808601955060208560051b830101845f5b878110156123b457848303601f19018952813536889003601e1901811261236d575f80fd5b870184810190356001600160401b03811115612387575f80fd5b803603821315612395575f80fd5b6123a0858284612308565b9a86019a9450505090830190600101612348565b5090979650505050505050565b602081525f611078602083018486612330565b5f602082840312156123e4575f80fd5b5051919050565b5f602082840312156123fb575f80fd5b81516106b781612220565b5f60208284031215612416575f80fd5b81516106b781611f90565b5f60208284031215612431575f80fd5b81516106b78161214d565b606081525f61244f606083018789612330565b8281036020840152612462818688612330565b9150508260408301529695505050505050565b6001600160a01b038a16815260c0602082018190525f906124999083018a8c612330565b82810360408401526124ac81898b612330565b905082810360608401526124c1818789612330565b6001600160401b03959095166080840152505090151560a090910152979650505050505050565b5f608082360312156124f8575f80fd5b604051608081016001600160401b03828210818311171561251b5761251b611eb1565b816040528435915061252c82611f90565b81835260208501356020840152604085013560408401526060850135915080821115612556575f80fd5b5061256336828601611ec5565b60608301525092915050565b5f8251612580818460208701612054565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b5f826125b857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b5f52602160045260245ffd5b808201808211156105845761058461258a565b5f8451612654818460208901612054565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516126b8816017850160208801612054565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516126e9816028840160208801612054565b01602801949350505050565b828152604060208201525f6110786040830184612076565b80820281158282048414176105845761058461258a565b634e487b7160e01b5f52603260045260245ffd5b5f816127465761274661258a565b505f19019056fea164736f6c6343000818000a",
  "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610208575f3560e01c8063588844321161011f578063a217fddf116100a9578063bb09d9e611610079578063bb09d9e6146104ce578063d547741f146104f7578063e71661231461050a578063f2fde38b1461051d578063ffa1ad7414610530575f80fd5b8063a217fddf1461046c578063a22cb46514610473578063a3f4df7e14610486578063a4247400146104bb575f80fd5b8063715018a6116100ef578063715018a6146104255780638bad0c0a1461042d5780638c9d518f146104355780638da5cb5b1461044857806391d1485414610459575f80fd5b806358884432146103d85780636aac4b00146103ec5780636ccbae5f146103ff5780637048027514610412575f80fd5b806324d7806c116101a05780633f41b614116101705780633f41b614146103575780633f7baeb914610383578063485cc9551461039657806348ef58cd146103a9578063572b6c05146103bc575f80fd5b806324d7806c1461030b5780632ccec6a01461031e5780632f2ff15d1461033157806336568abe14610344575f80fd5b80631bf7e13e116101db5780631bf7e13e146102a35780631eb76f65146102c357806320c5429b146102d6578063248a9ca3146102e9575f80fd5b806301ffc9a71461020c5780630511711c146102345780631626ba7e146102625780631785f53c1461028e575b5f80fd5b61021f61021a366004611e73565b610554565b60405190151581526020015b60405180910390f35b610254610242366004611e9a565b6101616020525f908152604090205481565b60405190815260200161022b565b610275610270366004611f4d565b61058a565b6040516001600160e01b0319909116815260200161022b565b6102a161029c366004611fa4565b6105e0565b005b6102b66102b1366004611fbf565b6105f5565b60405161022b91906120a1565b6102546102d1366004611e9a565b6106be565b6102a16102e4366004611e9a565b61070b565b6102546102f7366004611e9a565b5f90815260fb602052604090206001015490565b61021f610319366004611fa4565b6107b0565b6102a161032c366004611fa4565b6107bb565b6102a161033f3660046120b3565b6107d9565b6102a16103523660046120b3565b610802565b61015f5461036b906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b6102a16103913660046120b3565b610895565b6102a16103a43660046120e1565b6108af565b6102a16103b7366004612161565b610a05565b61021f6103ca366004611fa4565b6001600160a01b0316301490565b6101605461036b906001600160a01b031681565b6102a16103fa3660046120b3565b610ee3565b61025461040d366004611e9a565b610efd565b6102a1610420366004611fa4565b610f56565b6102a1610f68565b6102a1610f7b565b61021f6104433660046120b3565b610f87565b6097546001600160a01b031661036b565b61021f6104673660046120b3565b610f96565b6102545f81565b6102a161048136600461222d565b610fc0565b6102b660405180604001604052806016815260200175554e533a2052656769737472617220437573746f647960501b81525081565b61021f6104c9366004611fbf565b61102f565b61036b6104dc366004611e9a565b6101626020525f90815260409020546001600160a01b031681565b6102a16105053660046120b3565b611080565b6102a1610518366004612259565b6110a4565b6102a161052b366004611fa4565b611176565b6102b660405180604001604052806005815260200164302e322e3160d81b81525081565b5f6001600160e01b03198216637965db0b60e01b148061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8061059684846111ec565b90506105a1816107b0565b156105cf577f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d7496869915050610584565b506001600160e01b03199392505050565b6105e861120e565b6105f25f82611080565b50565b60605f5a905061060685858561102f565b61062357604051638baa579f60e01b815260040160405180910390fd5b6106b36106336020870187611fa4565b3060408801358461064760608b018b6122c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f9201919091525061128792505050565b9150505b9392505050565b604080516020810182905260096060820152682922a3a4a9aa2920a960b91b60808201529081018290525f9060a0015b604051602081830303815290604052805190602001209050919050565b5f818152610161602052604090205461072690610443611363565b610742576040516282b42960e81b815260040160405180910390fd5b61015f54610160546040516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018490529116906323b872dd906064015f604051808303815f87803b158015610797575f80fd5b505af11580156107a9573d5f803e3d5ffd5b5050505050565b5f6105848183610f96565b6107c361120e565b6107cd5f82611371565b6105f25f610352611363565b5f82815260fb60205260409020600101546107f38161137b565b6107fd838361138c565b505050565b61080a611363565b6001600160a01b0316816001600160a01b0316146108875760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108918282611412565b5050565b61089d61120e565b6108916108a9836106be565b82611371565b5f54610100900460ff16158080156108cd57505f54600160ff909116105b806108e65750303b1580156108e657505f5460ff166001145b6109495760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161087e565b5f805460ff19166001179055801561096a575f805461ff0019166101001790555b61015f80546001600160a01b038086166001600160a01b0319928316179092556101608054928516929091169190911790556109a4611496565b6109ac6114c4565b6109b46114fa565b6109bc611520565b80156107fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610a115f610467611363565b610a2d576040516282b42960e81b815260040160405180910390fd5b600260655403610a7f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161087e565b600260655561015f5460405163276fabb160e01b81525f916001600160a01b03169063276fabb190610ab7908d908d906004016123c1565b602060405180830381865afa158015610ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af691906123d4565b61015f54604051634f558e7960e01b8152600481018390529192505f916001600160a01b0390911690634f558e7990602401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6791906123eb565b610b71575f610bdd565b61015f546040516331a9108f60e11b8152600481018490526001600160a01b0390911690636352211e90602401602060405180830381865afa158015610bb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612406565b9050306001600160a01b03821603610d6c5761015f5460405163baef73e960e01b8152600481018490525f916001600160a01b03169063baef73e990602401602060405180830381865afa158015610c37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5b9190612421565b6001600160401b03169050805f03610c855760405162d36c8560e81b815260040160405180910390fd5b856001600160401b0316811015610d005761016054604051630f6dca4760e11b81526001600160401b0388166004820152602481018590526001600160a01b0390911690631edb948e906044015f604051808303815f87803b158015610ce9575f80fd5b505af1158015610cfb573d5f803e3d5ffd5b505050505b61015f54604051636749599f60e11b81526001600160a01b039091169063ce92b33e90610d39908d908d908d908d908a9060040161243c565b5f604051808303815f87803b158015610d50575f80fd5b505af1158015610d62573d5f803e3d5ffd5b5050505050610e62565b6001600160a01b03811615801590610d935750610160546001600160a01b03828116911614155b15610df357610160546040516320c5429b60e01b8152600481018490526001600160a01b03909116906320c5429b906024015f604051808303815f87803b158015610ddc575f80fd5b505af1158015610dee573d5f803e3d5ffd5b505050505b61016054604051632f1166c360e11b81526001600160a01b0390911690635e22cd8690610e349030908f908f908f908f908f908f908f905f90600401612475565b5f604051808303815f87803b158015610e4b575f80fd5b505af1158015610e5d573d5f803e3d5ffd5b505050505b5f8281526101616020908152604080832087905561016282529182902080546001600160a01b0319166001600160a01b03871690811790915582518781529182015283917ff62b185f823f021c1bb017de468883a6c58d0070339da7646c1742def39080b8910160405180910390a250506001606555505050505050505050565b610eeb61120e565b610891610ef7836106be565b82611080565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610f4f906060016040516020818303038152906040528051906020012090565b5492915050565b610f5e61120e565b6105f25f82611371565b610f7061120e565b610f795f611567565b565b610f795f610352611363565b5f6106b7610f94846106be565b835b5f91825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610fc861120e565b61015f5460405163a22cb46560e01b81526001600160a01b03848116600483015283151560248301529091169063a22cb465906044015f604051808303815f87803b158015611015575f80fd5b505af1158015611027573d5f803e3d5ffd5b505050505050565b5f61107861103c856124e8565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506115b892505050565b949350505050565b5f82815260fb602052604090206001015461109a8161137b565b6107fd8383611412565b5f81815261016160205260409020546110bf90610443611363565b15806110ec57506110ce611363565b5f82815261016260205260409020546001600160a01b039081169116145b15611109576040516282b42960e81b815260040160405180910390fd5b61015f54604051636749599f60e11b81526001600160a01b039091169063ce92b33e90611142908890889088908890889060040161243c565b5f604051808303815f87803b158015611159575f80fd5b505af115801561116b573d5f803e3d5ffd5b505050505050505050565b61117e61120e565b6001600160a01b0381166111e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087e565b6105f281611567565b5f805f6111f985856116b8565b91509150611206816116fa565b509392505050565b611216611363565b6001600160a01b03166112316097546001600160a01b031690565b6001600160a01b031614610f795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161087e565b6060611292856118af565b5f80876001600160a01b0316866112ab8b8a8989611914565b6040516112b8919061256f565b5f604051808303815f8787f1925050503d805f81146112f2576040519150601f19603f3d011682016040523d82523d5f602084013e6112f7565b606091505b509092509050611308603f8761259e565b5a11611316576113166125bd565b61135682826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c4544000000000000815250611944565b9998505050505050505050565b5f61136c61197d565b905090565b610891828261138c565b6105f281611387611363565b611997565b6113968282610f96565b610891575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113ce611363565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61141c8282610f96565b15610891575f82815260fb602090815260408083206001600160a01b03851684529091529020805460ff19169055611452611363565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b5f54610100900460ff166114bc5760405162461bcd60e51b815260040161087e906125d1565b610f796119fb565b5f54610100900460ff166114ea5760405162461bcd60e51b815260040161087e906125d1565b6114f2611a28565b610f79611a28565b5f54610100900460ff166114f25760405162461bcd60e51b815260040161087e906125d1565b5f54610100900460ff166115465760405162461bcd60e51b815260040161087e906125d1565b61154e611a4e565b611556611a28565b610f795f611562611363565b611371565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa1580156115fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162091906123d4565b90505f61168886606001518051906020012086886020015160405160200161166d9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60405160208183030381529060405280519060200120611a84565b90508186602001511480156116ae575085516116ae906001600160a01b03168286611abe565b9695505050505050565b5f8082516041036116ec576020830151604084015160608501515f1a6116e087828585611bf9565b945094505050506116f3565b505f905060025b9250929050565b5f81600481111561170d5761170d61261c565b036117155750565b60018160048111156117295761172961261c565b036117765760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087e565b600281600481111561178a5761178a61261c565b036117d75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087e565b60038160048111156117eb576117eb61261c565b036118435760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161087e565b60048160048111156118575761185761261c565b036105f25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161087e565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506119038190565b5461190f906001612630565b905550565b606082858560405160200161192b93929190612643565b6040516020818303038152906040529050949350505050565b606083156119535750816106b7565b8251156119635782518084602001fd5b8160405162461bcd60e51b815260040161087e91906120a1565b5f303303611992575060331936013560601c90565b503390565b6119a18282610f96565b610891576119b9816001600160a01b03166014611cde565b6119c4836020611cde565b6040516020016119d5929190612681565b60408051601f198184030181529082905262461bcd60e51b825261087e916004016120a1565b5f54610100900460ff16611a215760405162461bcd60e51b815260040161087e906125d1565b6001606555565b5f54610100900460ff16610f795760405162461bcd60e51b815260040161087e906125d1565b5f54610100900460ff16611a745760405162461bcd60e51b815260040161087e906125d1565b610f79611a7f611363565b611567565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c016106ee565b5f805f611acb85856116b8565b90925090505f816004811115611ae357611ae361261c565b148015611b015750856001600160a01b0316826001600160a01b0316145b15611b11576001925050506106b7565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401611b389291906126f5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611b76919061256f565b5f60405180830381855afa9150503d805f8114611bae576040519150601f19603f3d011682016040523d82523d5f602084013e611bb3565b606091505b5091509150818015611bc6575080516020145b8015611bed57508051630b135d3f60e11b90611beb90830160209081019084016123d4565b145b98975050505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611c2e57505f90506003611cd5565b8460ff16601b14158015611c4657508460ff16601c14155b15611c5657505f90506004611cd5565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611ca7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611ccf575f60019250925050611cd5565b91505f90505b94509492505050565b60605f611cec83600261270d565b611cf7906002612630565b6001600160401b03811115611d0e57611d0e611eb1565b6040519080825280601f01601f191660200182016040528015611d38576020820181803683370190505b509050600360fc1b815f81518110611d5257611d52612724565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611d8057611d80612724565b60200101906001600160f81b03191690815f1a9053505f611da284600261270d565b611dad906001612630565b90505b6001811115611e24576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611de157611de1612724565b1a60f81b828281518110611df757611df7612724565b60200101906001600160f81b03191690815f1a90535060049490941c93611e1d81612738565b9050611db0565b5083156106b75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161087e565b5f60208284031215611e83575f80fd5b81356001600160e01b0319811681146106b7575f80fd5b5f60208284031215611eaa575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ed4575f80fd5b81356001600160401b0380821115611eee57611eee611eb1565b604051601f8301601f19908116603f01168101908282118183101715611f1657611f16611eb1565b81604052838152866020858801011115611f2e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611f5e575f80fd5b8235915060208301356001600160401b03811115611f7a575f80fd5b611f8685828601611ec5565b9150509250929050565b6001600160a01b03811681146105f2575f80fd5b5f60208284031215611fb4575f80fd5b81356106b781611f90565b5f805f60408486031215611fd1575f80fd5b83356001600160401b0380821115611fe7575f80fd5b9085019060808288031215611ffa575f80fd5b9093506020850135908082111561200f575f80fd5b818601915086601f830112612022575f80fd5b813581811115612030575f80fd5b876020828501011115612041575f80fd5b6020830194508093505050509250925092565b5f5b8381101561206e578181015183820152602001612056565b50505f910152565b5f815180845261208d816020860160208601612054565b601f01601f19169290920160200192915050565b602081525f6106b76020830184612076565b5f80604083850312156120c4575f80fd5b8235915060208301356120d681611f90565b809150509250929050565b5f80604083850312156120f2575f80fd5b82356120fd81611f90565b915060208301356120d681611f90565b5f8083601f84011261211d575f80fd5b5081356001600160401b03811115612133575f80fd5b6020830191508360208260051b85010111156116f3575f80fd5b6001600160401b03811681146105f2575f80fd5b5f805f805f805f805f60c08a8c031215612179575f80fd5b89356001600160401b038082111561218f575f80fd5b61219b8d838e0161210d565b909b50995060208c01359150808211156121b3575f80fd5b6121bf8d838e0161210d565b909950975060408c01359150808211156121d7575f80fd5b506121e48c828d0161210d565b90965094505060608a01356121f88161214d565b925060808a0135915060a08a013561220f81611f90565b809150509295985092959850929598565b80151581146105f2575f80fd5b5f806040838503121561223e575f80fd5b823561224981611f90565b915060208301356120d681612220565b5f805f805f6060868803121561226d575f80fd5b85356001600160401b0380821115612283575f80fd5b61228f89838a0161210d565b909750955060208801359150808211156122a7575f80fd5b506122b48882890161210d565b96999598509660400135949350505050565b5f808335601e198436030181126122db575f80fd5b8301803591506001600160401b038211156122f4575f80fd5b6020019150368190038213156116f3575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f838385526020808601955060208560051b830101845f5b878110156123b457848303601f19018952813536889003601e1901811261236d575f80fd5b870184810190356001600160401b03811115612387575f80fd5b803603821315612395575f80fd5b6123a0858284612308565b9a86019a9450505090830190600101612348565b5090979650505050505050565b602081525f611078602083018486612330565b5f602082840312156123e4575f80fd5b5051919050565b5f602082840312156123fb575f80fd5b81516106b781612220565b5f60208284031215612416575f80fd5b81516106b781611f90565b5f60208284031215612431575f80fd5b81516106b78161214d565b606081525f61244f606083018789612330565b8281036020840152612462818688612330565b9150508260408301529695505050505050565b6001600160a01b038a16815260c0602082018190525f906124999083018a8c612330565b82810360408401526124ac81898b612330565b905082810360608401526124c1818789612330565b6001600160401b03959095166080840152505090151560a090910152979650505050505050565b5f608082360312156124f8575f80fd5b604051608081016001600160401b03828210818311171561251b5761251b611eb1565b816040528435915061252c82611f90565b81835260208501356020840152604085013560408401526060850135915080821115612556575f80fd5b5061256336828601611ec5565b60608301525092915050565b5f8251612580818460208701612054565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b5f826125b857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b5f52602160045260245ffd5b808201808211156105845761058461258a565b5f8451612654818460208901612054565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516126b8816017850160208801612054565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516126e9816028840160208801612054565b01602801949350505050565b828152604060208201525f6110786040830184612076565b80820281158282048414176105845761058461258a565b634e487b7160e01b5f52603260045260245ffd5b5f816127465761274661258a565b505f19019056fea164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
