{
  "_format": "hh-sol-artifact-1",
  "contractName": "ACL",
  "sourceName": "contracts/acl/direct/ACL.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CannotRemoveLastAdmin",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidContractEntityInterface",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RolesContractIncorrectlyConfigured",
      "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": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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": "adminRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "checkRole",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractKey",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "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": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "listingWizardRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "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": [],
      "name": "supervisorRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenQuoteSignerRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "universeWizardRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b50600054610100900460ff1615808015620000375750600054600160ff909116105b8062000067575062000054306200014160201b620009221760201c565b15801562000067575060005460ff166001145b620000cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000f3576000805461ff0019166101001790555b80156200013a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000150565b6001600160a01b03163b151590565b60805161175962000188600039600081816104fb0152818161053b015281816105da0152818161061a01526106a901526117596000f3fe60806040526004361061011e5760003560e01c806352d1902d116100a0578063a217fddf11610064578063a217fddf14610356578063bc26ddf21461036b578063ca15c8731461039e578063d547741f146103be578063ec21896d146103de57600080fd5b806352d1902d146102a157806377de90cf146102b65780638129fc1c146102e95780639010d07c146102fe57806391d148541461033657600080fd5b8063248a9ca3116100e7578063248a9ca3146101fe5780632f2ff15d1461022e57806336568abe1461024e5780633659cfe61461026e5780634f1ef2861461028e57600080fd5b80629f2f3c1461012357806301ffc9a7146101465780630ab50a111461017657806312d9a6ad146101a9578063223db416146101cb575b600080fd5b34801561012f57600080fd5b5060005b6040519081526020015b60405180910390f35b34801561015257600080fd5b506101666101613660046112f4565b610400565b604051901515815260200161013d565b34801561018257600080fd5b507fd32997eb8da47061ae1f290beaa522fdc9482e2badbbdbff9df6853304225d30610133565b3480156101b557600080fd5b506101c96101c436600461133a565b61043a565b005b3480156101d757600080fd5b507fa97435a2c1406684a93bd153a34e2bb66d94217a9036e577511b120563fbd055610133565b34801561020a57600080fd5b50610133610219366004611366565b60009081526065602052604090206001015490565b34801561023a57600080fd5b506101c961024936600461133a565b610448565b34801561025a57600080fd5b506101c961026936600461133a565b610472565b34801561027a57600080fd5b506101c961028936600461137f565b6104f1565b6101c961029c3660046113b0565b6105d0565b3480156102ad57600080fd5b5061013361069c565b3480156102c257600080fd5b507f2ce5ff1c5df796eb89f23d55f7992ef01581674d025b6806d71aa187cee80b81610133565b3480156102f557600080fd5b506101c961074f565b34801561030a57600080fd5b5061031e610319366004611472565b61089c565b6040516001600160a01b03909116815260200161013d565b34801561034257600080fd5b5061016661035136600461133a565b6108bb565b34801561036257600080fd5b50610133600081565b34801561037757600080fd5b507f060c8eced3c6b422fe5573c862b67b9f6e25a3fc7d9543b14f7aee77b138e70d610133565b3480156103aa57600080fd5b506101336103b9366004611366565b6108e6565b3480156103ca57600080fd5b506101c96103d936600461133a565b6108fd565b3480156103ea57600080fd5b5060405163d1310f5160e01b815260200161013d565b60006001600160e01b0319821663f1367aab60e01b1480610425575061042582610931565b80610434575061043482610931565b92915050565b6104448282610966565b5050565b600082815260656020526040902060010154610463816109ca565b61046d83836109d4565b505050565b6001600160a01b03811633146104e75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61044482826109f6565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105395760405162461bcd60e51b81526004016104de90611494565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105826000805160206116dd833981519152546001600160a01b031690565b6001600160a01b0316146105a85760405162461bcd60e51b81526004016104de906114e0565b6105b181610a34565b604080516000808252602082019092526105cd91839190610a91565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106185760405162461bcd60e51b81526004016104de90611494565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106616000805160206116dd833981519152546001600160a01b031690565b6001600160a01b0316146106875760405162461bcd60e51b81526004016104de906114e0565b61069082610a34565b61044482826001610a91565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461073c5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104de565b506000805160206116dd83398151915290565b600054610100900460ff161580801561076f5750600054600160ff909116105b806107895750303b158015610789575060005460ff166001145b6107ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104de565b6000805460ff19166001179055801561080f576000805461ff0019166101001790555b610817610bfc565b61081f610bfc565b61082a6000336109d4565b6108547f060c8eced3c6b422fe5573c862b67b9f6e25a3fc7d9543b14f7aee77b138e70d336109d4565b80156105cd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60008281526097602052604081206108b49083610c69565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260976020526040812061043490610c75565b600082815260656020526040902060010154610918816109ca565b61046d83836109f6565b6001600160a01b03163b151590565b60006001600160e01b0319821663ec21896d60e01b148061043457506301ffc9a760e01b6001600160e01b0319831614610434565b61097082826108bb565b61044457610988816001600160a01b03166014610c7f565b610993836020610c7f565b6040516020016109a4929190611558565b60408051601f198184030181529082905262461bcd60e51b82526104de916004016115cd565b6105cd8133610966565b6109de8282610e1b565b600082815260976020526040902061046d9082610ea1565b81158015610a0c5750610a08826108e6565b6001145b15610a2a5760405163c13a62ad60e01b815260040160405180910390fd5b6104448282610eb6565b604080516312d9a6ad60e01b8152600060048201819052336024830152915130926312d9a6ad9260448082019391829003018186803b158015610a7657600080fd5b505afa158015610a8a573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ac45761046d83610ed8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b1e575060408051601f3d908101601f19168201909252610b1b91810190611600565b60015b610b815760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104de565b6000805160206116dd8339815191528114610bf05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104de565b5061046d838383610f74565b600054610100900460ff16610c675760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104de565b565b60006108b48383610f9f565b6000610434825490565b60606000610c8e83600261162f565b610c9990600261164e565b67ffffffffffffffff811115610cb157610cb161139a565b6040519080825280601f01601f191660200182016040528015610cdb576020820181803683370190505b509050600360fc1b81600081518110610cf657610cf6611666565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d2557610d25611666565b60200101906001600160f81b031916908160001a9053506000610d4984600261162f565b610d5490600161164e565b90505b6001811115610dcc576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d8857610d88611666565b1a60f81b828281518110610d9e57610d9e611666565b60200101906001600160f81b031916908160001a90535060049490941c93610dc58161167c565b9050610d57565b5083156108b45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104de565b610e2582826108bb565b6104445760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610e5d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006108b4836001600160a01b038416610fc9565b610ec08282611018565b600082815260976020526040902061046d908261107f565b6001600160a01b0381163b610f455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104de565b6000805160206116dd83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610f7d83611094565b600082511180610f8a5750805b1561046d57610f9983836110d4565b50505050565b6000826000018281548110610fb657610fb6611666565b9060005260206000200154905092915050565b600081815260018301602052604081205461101057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610434565b506000610434565b61102282826108bb565b156104445760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006108b4836001600160a01b0384166111c8565b61109d81610ed8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b61113c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104de565b600080846001600160a01b0316846040516111579190611693565b600060405180830381855af49150503d8060008114611192576040519150601f19603f3d011682016040523d82523d6000602084013e611197565b606091505b50915091506111bf82826040518060600160405280602781526020016116fd602791396112bb565b95945050505050565b600081815260018301602052604081205480156112b15760006111ec6001836116af565b8554909150600090611200906001906116af565b905081811461126557600086600001828154811061122057611220611666565b906000526020600020015490508087600001848154811061124357611243611666565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611276576112766116c6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610434565b6000915050610434565b606083156112ca5750816108b4565b8251156112da5782518084602001fd5b8160405162461bcd60e51b81526004016104de91906115cd565b60006020828403121561130657600080fd5b81356001600160e01b0319811681146108b457600080fd5b80356001600160a01b038116811461133557600080fd5b919050565b6000806040838503121561134d57600080fd5b8235915061135d6020840161131e565b90509250929050565b60006020828403121561137857600080fd5b5035919050565b60006020828403121561139157600080fd5b6108b48261131e565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156113c357600080fd5b6113cc8361131e565b9150602083013567ffffffffffffffff808211156113e957600080fd5b818501915085601f8301126113fd57600080fd5b81358181111561140f5761140f61139a565b604051601f8201601f19908116603f011681019083821181831017156114375761143761139a565b8160405282815288602084870101111561145057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806040838503121561148557600080fd5b50508035926020909101359150565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60005b8381101561154757818101518382015260200161152f565b83811115610f995750506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161159081601785016020880161152c565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516115c181602884016020880161152c565b01602801949350505050565b60208152600082518060208401526115ec81604085016020870161152c565b601f01601f19169190910160400192915050565b60006020828403121561161257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561164957611649611619565b500290565b6000821982111561166157611661611619565b500190565b634e487b7160e01b600052603260045260246000fd5b60008161168b5761168b611619565b506000190190565b600082516116a581846020870161152c565b9190910192915050565b6000828210156116c1576116c1611619565b500390565b634e487b7160e01b600052603160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f5e1d8bcbb98b2e23b34dbfb237b9ac25c33d0dba9d99170d57cbabd58d83e9864736f6c634300080d0033",
  "deployedBytecode": "0x60806040526004361061011e5760003560e01c806352d1902d116100a0578063a217fddf11610064578063a217fddf14610356578063bc26ddf21461036b578063ca15c8731461039e578063d547741f146103be578063ec21896d146103de57600080fd5b806352d1902d146102a157806377de90cf146102b65780638129fc1c146102e95780639010d07c146102fe57806391d148541461033657600080fd5b8063248a9ca3116100e7578063248a9ca3146101fe5780632f2ff15d1461022e57806336568abe1461024e5780633659cfe61461026e5780634f1ef2861461028e57600080fd5b80629f2f3c1461012357806301ffc9a7146101465780630ab50a111461017657806312d9a6ad146101a9578063223db416146101cb575b600080fd5b34801561012f57600080fd5b5060005b6040519081526020015b60405180910390f35b34801561015257600080fd5b506101666101613660046112f4565b610400565b604051901515815260200161013d565b34801561018257600080fd5b507fd32997eb8da47061ae1f290beaa522fdc9482e2badbbdbff9df6853304225d30610133565b3480156101b557600080fd5b506101c96101c436600461133a565b61043a565b005b3480156101d757600080fd5b507fa97435a2c1406684a93bd153a34e2bb66d94217a9036e577511b120563fbd055610133565b34801561020a57600080fd5b50610133610219366004611366565b60009081526065602052604090206001015490565b34801561023a57600080fd5b506101c961024936600461133a565b610448565b34801561025a57600080fd5b506101c961026936600461133a565b610472565b34801561027a57600080fd5b506101c961028936600461137f565b6104f1565b6101c961029c3660046113b0565b6105d0565b3480156102ad57600080fd5b5061013361069c565b3480156102c257600080fd5b507f2ce5ff1c5df796eb89f23d55f7992ef01581674d025b6806d71aa187cee80b81610133565b3480156102f557600080fd5b506101c961074f565b34801561030a57600080fd5b5061031e610319366004611472565b61089c565b6040516001600160a01b03909116815260200161013d565b34801561034257600080fd5b5061016661035136600461133a565b6108bb565b34801561036257600080fd5b50610133600081565b34801561037757600080fd5b507f060c8eced3c6b422fe5573c862b67b9f6e25a3fc7d9543b14f7aee77b138e70d610133565b3480156103aa57600080fd5b506101336103b9366004611366565b6108e6565b3480156103ca57600080fd5b506101c96103d936600461133a565b6108fd565b3480156103ea57600080fd5b5060405163d1310f5160e01b815260200161013d565b60006001600160e01b0319821663f1367aab60e01b1480610425575061042582610931565b80610434575061043482610931565b92915050565b6104448282610966565b5050565b600082815260656020526040902060010154610463816109ca565b61046d83836109d4565b505050565b6001600160a01b03811633146104e75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61044482826109f6565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105395760405162461bcd60e51b81526004016104de90611494565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105826000805160206116dd833981519152546001600160a01b031690565b6001600160a01b0316146105a85760405162461bcd60e51b81526004016104de906114e0565b6105b181610a34565b604080516000808252602082019092526105cd91839190610a91565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106185760405162461bcd60e51b81526004016104de90611494565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106616000805160206116dd833981519152546001600160a01b031690565b6001600160a01b0316146106875760405162461bcd60e51b81526004016104de906114e0565b61069082610a34565b61044482826001610a91565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461073c5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104de565b506000805160206116dd83398151915290565b600054610100900460ff161580801561076f5750600054600160ff909116105b806107895750303b158015610789575060005460ff166001145b6107ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104de565b6000805460ff19166001179055801561080f576000805461ff0019166101001790555b610817610bfc565b61081f610bfc565b61082a6000336109d4565b6108547f060c8eced3c6b422fe5573c862b67b9f6e25a3fc7d9543b14f7aee77b138e70d336109d4565b80156105cd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60008281526097602052604081206108b49083610c69565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260976020526040812061043490610c75565b600082815260656020526040902060010154610918816109ca565b61046d83836109f6565b6001600160a01b03163b151590565b60006001600160e01b0319821663ec21896d60e01b148061043457506301ffc9a760e01b6001600160e01b0319831614610434565b61097082826108bb565b61044457610988816001600160a01b03166014610c7f565b610993836020610c7f565b6040516020016109a4929190611558565b60408051601f198184030181529082905262461bcd60e51b82526104de916004016115cd565b6105cd8133610966565b6109de8282610e1b565b600082815260976020526040902061046d9082610ea1565b81158015610a0c5750610a08826108e6565b6001145b15610a2a5760405163c13a62ad60e01b815260040160405180910390fd5b6104448282610eb6565b604080516312d9a6ad60e01b8152600060048201819052336024830152915130926312d9a6ad9260448082019391829003018186803b158015610a7657600080fd5b505afa158015610a8a573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ac45761046d83610ed8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b1e575060408051601f3d908101601f19168201909252610b1b91810190611600565b60015b610b815760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104de565b6000805160206116dd8339815191528114610bf05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104de565b5061046d838383610f74565b600054610100900460ff16610c675760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104de565b565b60006108b48383610f9f565b6000610434825490565b60606000610c8e83600261162f565b610c9990600261164e565b67ffffffffffffffff811115610cb157610cb161139a565b6040519080825280601f01601f191660200182016040528015610cdb576020820181803683370190505b509050600360fc1b81600081518110610cf657610cf6611666565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d2557610d25611666565b60200101906001600160f81b031916908160001a9053506000610d4984600261162f565b610d5490600161164e565b90505b6001811115610dcc576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610d8857610d88611666565b1a60f81b828281518110610d9e57610d9e611666565b60200101906001600160f81b031916908160001a90535060049490941c93610dc58161167c565b9050610d57565b5083156108b45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104de565b610e2582826108bb565b6104445760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610e5d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006108b4836001600160a01b038416610fc9565b610ec08282611018565b600082815260976020526040902061046d908261107f565b6001600160a01b0381163b610f455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104de565b6000805160206116dd83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610f7d83611094565b600082511180610f8a5750805b1561046d57610f9983836110d4565b50505050565b6000826000018281548110610fb657610fb6611666565b9060005260206000200154905092915050565b600081815260018301602052604081205461101057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610434565b506000610434565b61102282826108bb565b156104445760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006108b4836001600160a01b0384166111c8565b61109d81610ed8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b61113c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104de565b600080846001600160a01b0316846040516111579190611693565b600060405180830381855af49150503d8060008114611192576040519150601f19603f3d011682016040523d82523d6000602084013e611197565b606091505b50915091506111bf82826040518060600160405280602781526020016116fd602791396112bb565b95945050505050565b600081815260018301602052604081205480156112b15760006111ec6001836116af565b8554909150600090611200906001906116af565b905081811461126557600086600001828154811061122057611220611666565b906000526020600020015490508087600001848154811061124357611243611666565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611276576112766116c6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610434565b6000915050610434565b606083156112ca5750816108b4565b8251156112da5782518084602001fd5b8160405162461bcd60e51b81526004016104de91906115cd565b60006020828403121561130657600080fd5b81356001600160e01b0319811681146108b457600080fd5b80356001600160a01b038116811461133557600080fd5b919050565b6000806040838503121561134d57600080fd5b8235915061135d6020840161131e565b90509250929050565b60006020828403121561137857600080fd5b5035919050565b60006020828403121561139157600080fd5b6108b48261131e565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156113c357600080fd5b6113cc8361131e565b9150602083013567ffffffffffffffff808211156113e957600080fd5b818501915085601f8301126113fd57600080fd5b81358181111561140f5761140f61139a565b604051601f8201601f19908116603f011681019083821181831017156114375761143761139a565b8160405282815288602084870101111561145057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806040838503121561148557600080fd5b50508035926020909101359150565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60005b8381101561154757818101518382015260200161152f565b83811115610f995750506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161159081601785016020880161152c565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516115c181602884016020880161152c565b01602801949350505050565b60208152600082518060208401526115ec81604085016020870161152c565b601f01601f19169190910160400192915050565b60006020828403121561161257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561164957611649611619565b500290565b6000821982111561166157611661611619565b500190565b634e487b7160e01b600052603260045260246000fd5b60008161168b5761168b611619565b506000190190565b600082516116a581846020870161152c565b9190910192915050565b6000828210156116c1576116c1611619565b500390565b634e487b7160e01b600052603160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f5e1d8bcbb98b2e23b34dbfb237b9ac25c33d0dba9d99170d57cbabd58d83e9864736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
