{
  "_format": "hh-sol-artifact-1",
  "contractName": "Roles",
  "sourceName": "src/v0.8/core/access/Roles.sol",
  "abi": [
    {
      "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": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "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": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_role",
          "type": "bytes32"
        }
      ],
      "name": "checkRole",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "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": "0x60a06040523060805234801561001457600080fd5b50608051611a9c61004c600039600081816103ec0152818161042c015281816104b4015281816104f4015261056c0152611a9c6000f3fe6080604052600436106100ef5760003560e01c806301ffc9a7146100f4578063248a9ca31461012a5780632f2ff15d1461015757806336568abe146101795780633659cfe6146101995780634f1ef286146101b957806352d1902d146101cc578063715018a6146101e157806379ba5097146101f65780638129fc1c1461020b5780638da5cb5b146102205780639010d07c1461024257806391d1485414610262578063a217fddf14610282578063aaf10f4214610297578063c5b95190146102ac578063ca15c873146102cc578063d547741f146102ec578063e30c39781461030c578063f2fde38b14610321575b600080fd5b34801561010057600080fd5b5061011461010f366004611162565b610341565b604051610121919061118d565b60405180910390f35b34801561013657600080fd5b5061014a6101453660046111ac565b61036c565b60405161012191906111d3565b34801561016357600080fd5b50610177610172366004611206565b610382565b005b34801561018557600080fd5b50610177610194366004611206565b6103a3565b3480156101a557600080fd5b506101776101b4366004611243565b6103e2565b6101776101c7366004611369565b6104aa565b3480156101d857600080fd5b5061014a61055f565b3480156101ed57600080fd5b506101776105bc565b34801561020257600080fd5b506101776105c6565b34801561021757600080fd5b506101776105ce565b34801561022c57600080fd5b506102356106b6565b60405161012191906113bf565b34801561024e57600080fd5b5061023561025d3660046113cd565b6106cf565b34801561026e57600080fd5b5061011461027d366004611206565b6106ef565b34801561028e57600080fd5b5061014a600081565b3480156102a357600080fd5b5061023561071b565b3480156102b857600080fd5b506101776102c73660046111ac565b610725565b3480156102d857600080fd5b5061014a6102e73660046111ac565b61072e565b3480156102f857600080fd5b50610177610307366004611206565b610746565b34801561031857600080fd5b50610235610762565b34801561032d57600080fd5b5061017761033c366004611243565b610776565b60006001600160e01b03198216635a05180f60e01b148061036657506103668261077f565b92915050565b600090815261012d602052604090206001015490565b61038b8261036c565b610394816107b4565b61039e83836107be565b505050565b6001600160a01b03811633146103d45760405162461bcd60e51b81526004016103cb9061144f565b60405180910390fd5b6103de82826107e1565b5050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361042a5760405162461bcd60e51b81526004016103cb90611496565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661045c610804565b6001600160a01b0316146104825760405162461bcd60e51b81526004016103cb906114dd565b61048b81610820565b604080516000808252602082019092526104a791839190610828565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104f25760405162461bcd60e51b81526004016103cb90611496565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610524610804565b6001600160a01b03161461054a5760405162461bcd60e51b81526004016103cb906114dd565b61055382610820565b6103de82826001610828565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105a95760405162461bcd60e51b81526004016103cb90611542565b50600080516020611a2083398151915290565b6105c461090a565b565b6105c461091c565b600054610100900460ff16158080156105ee5750600054600160ff909116105b8061060f57506105fd30610955565b15801561060f575060005460ff166001145b61062b5760405162461bcd60e51b81526004016103cb9061159d565b6000805460ff19166001179055801561064e576000805461ff0019166101001790555b6106596000336107be565b610661610964565b610669610993565b80156104a7576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906106ab906001906115c1565b60405180910390a150565b60006106ca6097546001600160a01b031690565b905090565b600082815261015f602052604081206106e890836109ba565b9392505050565b600091825261012d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006106ca610804565b6104a7816107b4565b600081815261015f60205260408120610366906109c6565b61074f8261036c565b610758816107b4565b61039e83836107e1565b60006106ca60c9546001600160a01b031690565b6104a7816109d0565b60006001600160e01b03198216637965db0b60e01b148061036657506301ffc9a760e01b6001600160e01b0319831614610366565b6104a78133610a36565b6107c88282610a8f565b600082815261015f6020526040902061039e9082610b16565b6107eb8282610b2b565b600082815261015f6020526040902061039e9082610b93565b600080516020611a20833981519152546001600160a01b031690565b6104a7610ba8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561085b5761039e83610bd7565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108b5575060408051601f3d908101601f191682019092526108b2918101906115da565b60015b6108d15760405162461bcd60e51b81526004016103cb90611646565b600080516020611a2083398151915281146108fe5760405162461bcd60e51b81526004016103cb9061169c565b5061039e838383610c2b565b610912610ba8565b6105c46000610c56565b3380610926610762565b6001600160a01b03161461094c5760405162461bcd60e51b81526004016103cb906116f2565b6104a781610c56565b6001600160a01b03163b151590565b600054610100900460ff1661098b5760405162461bcd60e51b81526004016103cb9061174a565b6105c4610c5f565b600054610100900460ff166105c45760405162461bcd60e51b81526004016103cb9061174a565b60006106e88383610c8f565b6000610366825490565b6109d8610ba8565b60c980546001600160a01b0319166001600160a01b0383169081179091556109fe6106b6565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610a4082826106ef565b6103de57610a4d81610cb9565b610a58836020610ccb565b604051602001610a699291906117a0565b60408051601f198184030181529082905262461bcd60e51b82526103cb91600401611826565b610a9982826106ef565b6103de57600082815261012d602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610ad23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006106e8836001600160a01b038416610e36565b610b3582826106ef565b156103de57600082815261012d602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006106e8836001600160a01b038416610e85565b33610bb16106b6565b6001600160a01b0316146105c45760405162461bcd60e51b81526004016103cb9061186c565b610be081610955565b610bfc5760405162461bcd60e51b81526004016103cb906118c6565b600080516020611a2083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610c3483610f7f565b600082511180610c415750805b1561039e57610c508383610fbf565b50505050565b6104a781610fe4565b600054610100900460ff16610c865760405162461bcd60e51b81526004016103cb9061174a565b6105c433610c56565b6000826000018281548110610ca657610ca66118d6565b9060005260206000200154905092915050565b60606103666001600160a01b03831660145b60606000610cda836002611902565b610ce590600261191a565b6001600160401b03811115610cfc57610cfc61126e565b6040519080825280601f01601f191660200182016040528015610d26576020820181803683370190505b509050600360fc1b81600081518110610d4157610d416118d6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d7057610d706118d6565b60200101906001600160f81b031916908160001a9053506000610d94846002611902565b610d9f90600161191a565b90505b6001811115610e17576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610dd357610dd36118d6565b1a60f81b828281518110610de957610de96118d6565b60200101906001600160f81b031916908160001a90535060049490941c93610e108161192d565b9050610da2565b5083156106e85760405162461bcd60e51b81526004016103cb90611976565b6000818152600183016020526040812054610e7d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610366565b506000610366565b60008181526001830160205260408120548015610f6e576000610ea9600183611986565b8554909150600090610ebd90600190611986565b9050818114610f22576000866000018281548110610edd57610edd6118d6565b9060005260206000200154905080876000018481548110610f0057610f006118d6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610f3357610f33611999565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610366565b6000915050610366565b5092915050565b610f8881610bd7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606106e88383604051806060016040528060278152602001611a4060279139610ffd565b60c980546001600160a01b03191690556104a781611075565b6060600080856001600160a01b03168560405161101a91906119af565b600060405180830381855af49150503d8060008114611055576040519150601f19603f3d011682016040523d82523d6000602084013e61105a565b606091505b509150915061106b868383876110c7565b9695505050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606083156111045782516000036110fd576110e185610955565b6110fd5760405162461bcd60e51b81526004016103cb906119ef565b508161110e565b61110e8383611116565b949350505050565b8151156111265781518083602001fd5b8060405162461bcd60e51b81526004016103cb9190611826565b6001600160e01b031981165b81146104a757600080fd5b803561036681611140565b60006020828403121561117757611177600080fd5b600061110e8484611157565b8015155b82525050565b602081016103668284611183565b8061114c565b80356103668161119b565b6000602082840312156111c1576111c1600080fd5b600061110e84846111a1565b80611187565b6020810161036682846111cd565b60006001600160a01b038216610366565b61114c816111e1565b8035610366816111f2565b6000806040838503121561121c5761121c600080fd5b600061122885856111a1565b9250506020611239858286016111fb565b9150509250929050565b60006020828403121561125857611258600080fd5b600061110e84846111fb565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b61128d82611264565b81018181106001600160401b03821117156112aa576112aa61126e565b6040525050565b60006112bc60405190565b90506112c88282611284565b919050565b60006001600160401b038211156112e6576112e661126e565b6112ef82611264565b60200192915050565b82818337506000910152565b6000611317611312846112cd565b6112b1565b90508281526020810184848401111561133257611332600080fd5b61133d8482856112f8565b509392505050565b600082601f83011261135957611359600080fd5b813561110e848260208601611304565b6000806040838503121561137f5761137f600080fd5b600061138b85856111fb565b92505060208301356001600160401b038111156113aa576113aa600080fd5b61123985828601611345565b611187816111e1565b6020810161036682846113b6565b600080604083850312156113e3576113e3600080fd5b60006113ef85856111a1565b9250506020611239858286016111a1565b602f81526000602082017f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636581526e103937b632b9903337b91039b2b63360891b602082015291505b5060400190565b6020808252810161036681611400565b602c8152600060208201600080516020611a0083398151915281526b19195b1959d85d1958d85b1b60a21b60208201529150611448565b602080825281016103668161145f565b602c8152600060208201600080516020611a0083398151915281526b6163746976652070726f787960a01b60208201529150611448565b60208082528101610366816114a6565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150611448565b60208082528101610366816114ed565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150611448565b6020808252810161036681611552565b600060ff8216610366565b611187816115ad565b6020810161036682846115b8565b80516103668161119b565b6000602082840312156115ef576115ef600080fd5b600061110e84846115cf565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150611448565b60208082528101610366816115fb565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150611448565b6020808252810161036681611656565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150611448565b60208082528101610366816116ac565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150611448565b6020808252810161036681611702565b60005b8381101561177557818101518382015260200161175d565b50506000910152565b6000611788825190565b61179681856020860161175a565b9290920192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260170160006117cc828561177e565b7001034b99036b4b9b9b4b733903937b6329607d1b8152601101915061110e828461177e565b60006117fc825190565b80845260208401935061181381856020860161175a565b61181c81611264565b9093019392505050565b602080825281016106e881846117f2565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910190815260005b5060200190565b6020808252810161036681611837565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150611448565b602080825281016103668161187c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818102808215838204851417610f7857610f786118ec565b80820180821115610366576103666118ec565b60008161193c5761193c6118ec565b506000190190565b60208082527f537472696e67733a20686578206c656e67746820696e73756666696369656e7491019081526000611865565b6020808252810161036681611944565b81810381811115610366576103666118ec565b634e487b7160e01b600052603160045260246000fd5b60006106e8828461177e565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150611865565b60208082528101610366816119bb56fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d357f9da7d431e81a731b3ac10375350c0f45e9c0c2bdf2dbae556d1f1d4a57f64736f6c63430008150033",
  "deployedBytecode": "0x6080604052600436106100ef5760003560e01c806301ffc9a7146100f4578063248a9ca31461012a5780632f2ff15d1461015757806336568abe146101795780633659cfe6146101995780634f1ef286146101b957806352d1902d146101cc578063715018a6146101e157806379ba5097146101f65780638129fc1c1461020b5780638da5cb5b146102205780639010d07c1461024257806391d1485414610262578063a217fddf14610282578063aaf10f4214610297578063c5b95190146102ac578063ca15c873146102cc578063d547741f146102ec578063e30c39781461030c578063f2fde38b14610321575b600080fd5b34801561010057600080fd5b5061011461010f366004611162565b610341565b604051610121919061118d565b60405180910390f35b34801561013657600080fd5b5061014a6101453660046111ac565b61036c565b60405161012191906111d3565b34801561016357600080fd5b50610177610172366004611206565b610382565b005b34801561018557600080fd5b50610177610194366004611206565b6103a3565b3480156101a557600080fd5b506101776101b4366004611243565b6103e2565b6101776101c7366004611369565b6104aa565b3480156101d857600080fd5b5061014a61055f565b3480156101ed57600080fd5b506101776105bc565b34801561020257600080fd5b506101776105c6565b34801561021757600080fd5b506101776105ce565b34801561022c57600080fd5b506102356106b6565b60405161012191906113bf565b34801561024e57600080fd5b5061023561025d3660046113cd565b6106cf565b34801561026e57600080fd5b5061011461027d366004611206565b6106ef565b34801561028e57600080fd5b5061014a600081565b3480156102a357600080fd5b5061023561071b565b3480156102b857600080fd5b506101776102c73660046111ac565b610725565b3480156102d857600080fd5b5061014a6102e73660046111ac565b61072e565b3480156102f857600080fd5b50610177610307366004611206565b610746565b34801561031857600080fd5b50610235610762565b34801561032d57600080fd5b5061017761033c366004611243565b610776565b60006001600160e01b03198216635a05180f60e01b148061036657506103668261077f565b92915050565b600090815261012d602052604090206001015490565b61038b8261036c565b610394816107b4565b61039e83836107be565b505050565b6001600160a01b03811633146103d45760405162461bcd60e51b81526004016103cb9061144f565b60405180910390fd5b6103de82826107e1565b5050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361042a5760405162461bcd60e51b81526004016103cb90611496565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661045c610804565b6001600160a01b0316146104825760405162461bcd60e51b81526004016103cb906114dd565b61048b81610820565b604080516000808252602082019092526104a791839190610828565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104f25760405162461bcd60e51b81526004016103cb90611496565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610524610804565b6001600160a01b03161461054a5760405162461bcd60e51b81526004016103cb906114dd565b61055382610820565b6103de82826001610828565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105a95760405162461bcd60e51b81526004016103cb90611542565b50600080516020611a2083398151915290565b6105c461090a565b565b6105c461091c565b600054610100900460ff16158080156105ee5750600054600160ff909116105b8061060f57506105fd30610955565b15801561060f575060005460ff166001145b61062b5760405162461bcd60e51b81526004016103cb9061159d565b6000805460ff19166001179055801561064e576000805461ff0019166101001790555b6106596000336107be565b610661610964565b610669610993565b80156104a7576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906106ab906001906115c1565b60405180910390a150565b60006106ca6097546001600160a01b031690565b905090565b600082815261015f602052604081206106e890836109ba565b9392505050565b600091825261012d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006106ca610804565b6104a7816107b4565b600081815261015f60205260408120610366906109c6565b61074f8261036c565b610758816107b4565b61039e83836107e1565b60006106ca60c9546001600160a01b031690565b6104a7816109d0565b60006001600160e01b03198216637965db0b60e01b148061036657506301ffc9a760e01b6001600160e01b0319831614610366565b6104a78133610a36565b6107c88282610a8f565b600082815261015f6020526040902061039e9082610b16565b6107eb8282610b2b565b600082815261015f6020526040902061039e9082610b93565b600080516020611a20833981519152546001600160a01b031690565b6104a7610ba8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561085b5761039e83610bd7565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108b5575060408051601f3d908101601f191682019092526108b2918101906115da565b60015b6108d15760405162461bcd60e51b81526004016103cb90611646565b600080516020611a2083398151915281146108fe5760405162461bcd60e51b81526004016103cb9061169c565b5061039e838383610c2b565b610912610ba8565b6105c46000610c56565b3380610926610762565b6001600160a01b03161461094c5760405162461bcd60e51b81526004016103cb906116f2565b6104a781610c56565b6001600160a01b03163b151590565b600054610100900460ff1661098b5760405162461bcd60e51b81526004016103cb9061174a565b6105c4610c5f565b600054610100900460ff166105c45760405162461bcd60e51b81526004016103cb9061174a565b60006106e88383610c8f565b6000610366825490565b6109d8610ba8565b60c980546001600160a01b0319166001600160a01b0383169081179091556109fe6106b6565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610a4082826106ef565b6103de57610a4d81610cb9565b610a58836020610ccb565b604051602001610a699291906117a0565b60408051601f198184030181529082905262461bcd60e51b82526103cb91600401611826565b610a9982826106ef565b6103de57600082815261012d602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610ad23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006106e8836001600160a01b038416610e36565b610b3582826106ef565b156103de57600082815261012d602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006106e8836001600160a01b038416610e85565b33610bb16106b6565b6001600160a01b0316146105c45760405162461bcd60e51b81526004016103cb9061186c565b610be081610955565b610bfc5760405162461bcd60e51b81526004016103cb906118c6565b600080516020611a2083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610c3483610f7f565b600082511180610c415750805b1561039e57610c508383610fbf565b50505050565b6104a781610fe4565b600054610100900460ff16610c865760405162461bcd60e51b81526004016103cb9061174a565b6105c433610c56565b6000826000018281548110610ca657610ca66118d6565b9060005260206000200154905092915050565b60606103666001600160a01b03831660145b60606000610cda836002611902565b610ce590600261191a565b6001600160401b03811115610cfc57610cfc61126e565b6040519080825280601f01601f191660200182016040528015610d26576020820181803683370190505b509050600360fc1b81600081518110610d4157610d416118d6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610d7057610d706118d6565b60200101906001600160f81b031916908160001a9053506000610d94846002611902565b610d9f90600161191a565b90505b6001811115610e17576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610dd357610dd36118d6565b1a60f81b828281518110610de957610de96118d6565b60200101906001600160f81b031916908160001a90535060049490941c93610e108161192d565b9050610da2565b5083156106e85760405162461bcd60e51b81526004016103cb90611976565b6000818152600183016020526040812054610e7d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610366565b506000610366565b60008181526001830160205260408120548015610f6e576000610ea9600183611986565b8554909150600090610ebd90600190611986565b9050818114610f22576000866000018281548110610edd57610edd6118d6565b9060005260206000200154905080876000018481548110610f0057610f006118d6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610f3357610f33611999565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610366565b6000915050610366565b5092915050565b610f8881610bd7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606106e88383604051806060016040528060278152602001611a4060279139610ffd565b60c980546001600160a01b03191690556104a781611075565b6060600080856001600160a01b03168560405161101a91906119af565b600060405180830381855af49150503d8060008114611055576040519150601f19603f3d011682016040523d82523d6000602084013e61105a565b606091505b509150915061106b868383876110c7565b9695505050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606083156111045782516000036110fd576110e185610955565b6110fd5760405162461bcd60e51b81526004016103cb906119ef565b508161110e565b61110e8383611116565b949350505050565b8151156111265781518083602001fd5b8060405162461bcd60e51b81526004016103cb9190611826565b6001600160e01b031981165b81146104a757600080fd5b803561036681611140565b60006020828403121561117757611177600080fd5b600061110e8484611157565b8015155b82525050565b602081016103668284611183565b8061114c565b80356103668161119b565b6000602082840312156111c1576111c1600080fd5b600061110e84846111a1565b80611187565b6020810161036682846111cd565b60006001600160a01b038216610366565b61114c816111e1565b8035610366816111f2565b6000806040838503121561121c5761121c600080fd5b600061122885856111a1565b9250506020611239858286016111fb565b9150509250929050565b60006020828403121561125857611258600080fd5b600061110e84846111fb565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b61128d82611264565b81018181106001600160401b03821117156112aa576112aa61126e565b6040525050565b60006112bc60405190565b90506112c88282611284565b919050565b60006001600160401b038211156112e6576112e661126e565b6112ef82611264565b60200192915050565b82818337506000910152565b6000611317611312846112cd565b6112b1565b90508281526020810184848401111561133257611332600080fd5b61133d8482856112f8565b509392505050565b600082601f83011261135957611359600080fd5b813561110e848260208601611304565b6000806040838503121561137f5761137f600080fd5b600061138b85856111fb565b92505060208301356001600160401b038111156113aa576113aa600080fd5b61123985828601611345565b611187816111e1565b6020810161036682846113b6565b600080604083850312156113e3576113e3600080fd5b60006113ef85856111a1565b9250506020611239858286016111a1565b602f81526000602082017f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636581526e103937b632b9903337b91039b2b63360891b602082015291505b5060400190565b6020808252810161036681611400565b602c8152600060208201600080516020611a0083398151915281526b19195b1959d85d1958d85b1b60a21b60208201529150611448565b602080825281016103668161145f565b602c8152600060208201600080516020611a0083398151915281526b6163746976652070726f787960a01b60208201529150611448565b60208082528101610366816114a6565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150611448565b60208082528101610366816114ed565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150611448565b6020808252810161036681611552565b600060ff8216610366565b611187816115ad565b6020810161036682846115b8565b80516103668161119b565b6000602082840312156115ef576115ef600080fd5b600061110e84846115cf565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150611448565b60208082528101610366816115fb565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150611448565b6020808252810161036681611656565b602981526000602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b60208201529150611448565b60208082528101610366816116ac565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150611448565b6020808252810161036681611702565b60005b8381101561177557818101518382015260200161175d565b50506000910152565b6000611788825190565b61179681856020860161175a565b9290920192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260170160006117cc828561177e565b7001034b99036b4b9b9b4b733903937b6329607d1b8152601101915061110e828461177e565b60006117fc825190565b80845260208401935061181381856020860161175a565b61181c81611264565b9093019392505050565b602080825281016106e881846117f2565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572910190815260005b5060200190565b6020808252810161036681611837565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150611448565b602080825281016103668161187c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818102808215838204851417610f7857610f786118ec565b80820180821115610366576103666118ec565b60008161193c5761193c6118ec565b506000190190565b60208082527f537472696e67733a20686578206c656e67746820696e73756666696369656e7491019081526000611865565b6020808252810161036681611944565b81810381811115610366576103666118ec565b634e487b7160e01b600052603160045260246000fd5b60006106e8828461177e565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150611865565b60208082528101610366816119bb56fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d357f9da7d431e81a731b3ac10375350c0f45e9c0c2bdf2dbae556d1f1d4a57f64736f6c63430008150033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
