0 txs
19 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
contractAddressManager
viewfunction contractAddressManager() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
expectedSigner
viewfunction expectedSigner() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
reviewCount
viewfunction reviewCount() view returns (uint256)
reviewIdsByAttestationHash
viewfunction reviewIdsByAttestationHash(bytes32, uint256) view returns (uint256)
reviewIdsByAuthorAddress
viewfunction reviewIdsByAuthorAddress(address, uint256) view returns (uint256)
reviewIdsBySubjectAddress
viewfunction reviewIdsBySubjectAddress(address, uint256) view returns (uint256)
reviewPrice
viewfunction reviewPrice(address) view returns (bool allowed, uint256 price)
reviews
viewfunction reviews(uint256) view returns (bool archived, uint8 score, address author, address subject, uint256 reviewId, uint256 createdAt, string comment, string metadata, tuple attestationDetails)
signatureUsed
viewfunction signatureUsed(bytes) view returns (bool)
signatureVerifier
viewfunction signatureVerifier() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
targetExistsAndAllowedForId
viewfunction targetExistsAndAllowedForId(uint256 targetId) view returns (bool exists, bool allowed)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addAdmin
nonpayablefunction addAdmin(address admin)
addReview
payablefunction addReview(uint8 score, address subject, address paymentToken, string comment, string metadata, tuple attestationDetails) payable
archiveReview
nonpayablefunction archiveReview(uint256 reviewId)
editReview
nonpayablefunction editReview(uint256 reviewId, string comment, string metadata)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, address admin, address expectedSigner, address signatureVerifier, address contractAddressManagerAddr)
pause
nonpayablefunction pause()
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
restoreReview
nonpayablefunction restoreReview(uint256 reviewId)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setReviewPrice
nonpayablefunction setReviewPrice(bool allowed, address paymentToken, uint256 price)
unpause
nonpayablefunction unpause()
updateContractAddressManager
nonpayablefunction updateContractAddressManager(address contractAddressesAddr)
updateExpectedSigner
nonpayablefunction updateExpectedSigner(address signer)
updateOwner
nonpayablefunction updateOwner(address owner)
updateSignatureVerifier
nonpayablefunction updateSignatureVerifier(address sinatureVerifier)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawFunds
nonpayablefunction withdrawFunds(address paymentToken)
events
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
ReviewArchived
event ReviewArchived(uint256 indexed reviewId, address indexed author, address indexed subject)
ReviewCreated
event ReviewCreated(uint8 score, address indexed author, bytes32 indexed attestationHash, address indexed subject, uint256 reviewId, uint256 profileId)
ReviewEdited
event ReviewEdited(uint256 indexed reviewId, address indexed author, address indexed subject)
ReviewRestored
event ReviewRestored(uint256 indexed reviewId, address indexed author, address indexed subject)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
InvalidReviewDetails
error InvalidReviewDetails(string message)
InvalidSignature
error InvalidSignature()
NotInitializing
error NotInitializing()
ReviewIsArchived
error ReviewIsArchived(uint256 reviewId)
ReviewNotArchived
error ReviewNotArchived(uint256 reviewId)
ReviewNotFound
error ReviewNotFound(uint256 reviewId)
SelfReview
error SelfReview(address subject)
SignatureWasUsed
error SignatureWasUsed()
UnauthorizedEdit
error UnauthorizedEdit(uint256 reviewId)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WrongPaymentAmount
error WrongPaymentAmount(address paymentToken, uint256 amount)
WrongPaymentToken
error WrongPaymentToken(address paymentToken)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040523461003257610011610037565b604051613b7a6101c78239608051818181612bf20152612d6d0152613b7a90f35b600080fd5b61003f61007e565b610047610118565b565b61005d90610060906001600160a01b031682565b90565b6001600160a01b031690565b61005d90610049565b61005d9061006c565b610086610094565b61008f30610075565b608052565b61004761004761004761003f565b61005d9060401c60ff1690565b61005d90546100a2565b61005d905b6001600160401b031690565b61005d90546100b9565b61005d906100be906001600160401b031682565b906100f861005d610114926100d4565b82546001600160401b0319166001600160401b03919091161790565b9055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610142816100af565b6101b45761014f816100ca565b6001600160401b0391908290811603610166575050565b816101957fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2936101af936100e8565b604051918291826001600160401b03909116815260200190565b0390a1565b63f92ee8a960e01b6000908152600490fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146102b257806303f6e47f146102ad57806304515c29146102a857806308473f64146102a35780631459457a1461029e5780631785f53c14610299578063248a9ca3146102945780632bdd87ff1461028f5780632cb3e4941461028a5780632f2ff15d1461028557806336568abe146102805780633f4ba83a1461027b5780634f1ef2861461027657806352d1902d146102715780635667981b1461026c5780635c975abb1461026757806362322499146102625780636821435a1461025d57806368742da6146102585780637048027514610253578063725641ac1461024e57806375b238fc146102495780637b95e94e146102445780638456cb591461023f578063880cdc311461023a5780639010d07c1461023557806391d14854146102305780639c4d5d5f1461022b578063a12c64b514610226578063a217fddf14610221578063a3246ad31461021c578063ad3cb1cc14610217578063ade9ae9714610212578063bb10c8291461020d578063ca15c87314610208578063d547741f14610203578063e070b805146101fe578063e58378bb146101f9578063e83ddcea146101f4578063eff5924f146101ef578063f3300ce7146101ea5763fde919f6036102ca576111ea565b6111c2565b61119c565b611159565b610e43565b610e2b565b610e12565b610df7565b610ddc565b610d0e565b610cc2565b610bee565b610b63565b610b08565b610aec565b610a78565b610a5c565b610a44565b610a2c565b610a0f565b610901565b6108e5565b6108a0565b610888565b61086f565b610815565b61075c565b610744565b610729565b610715565b610602565b6105e9565b6105d0565b61057f565b610539565b61050e565b6104f6565b6104da565b610476565b610448565b610351565b6102f9565b6001600160e01b031981165b036102ca57565b600080fd5b905035906102dc826102b7565b565b906020828203126102ca576102f2916102cf565b90565b9052565b346102ca5761032661031461030f3660046102de565b611205565b60405191829182901515815260200190565b0390f35b806102c3565b905035906102dc8261032a565b906020828203126102ca576102f291610330565b346102ca5761036961036436600461033d565b61133a565b604051005b6001600160a01b031690565b6001600160a01b0381166102c3565b905035906102dc8261037a565b906020828203126102ca576102f291610389565b6102f29061036e906001600160a01b031682565b6102f2906103aa565b6102f2906103be565b906103da906103c7565b600052602052604060002090565b6102f2905b60ff1690565b6102f290546103e8565b6102f29081565b6102f290546103fd565b6104199060376103d0565b906102f26001610428846103f3565b9301610404565b90151581526040810192916102dc9160200152565b0152565b346102ca5761046061045b366004610396565b61040e565b9061032661046d60405190565b9283928361042f565b346102ca57610369610489366004610396565b6113a1565b919060a0838203126102ca576104a48184610389565b926104b28260208301610389565b926102f26104c38460408501610389565b9360806104d38260608701610389565b9401610389565b346102ca576103696104ed36600461048e565b93929092611699565b346102ca57610369610509366004610396565b6116dc565b346102ca5761032661052961052436600461033d565b6116e5565b6040519182918290815260200190565b346102ca5761036961054c366004610396565b611739565b60009103126102ca57565b6102f2916008021c61036e565b906102f2915461055c565b6102f2600080610569565b346102ca5761058f366004610551565b61032661059a610574565b604051918291826001600160a01b03909116815260200190565b91906040838203126102ca576102f29060206104d38286610330565b346102ca576103696105e33660046105b4565b9061175d565b346102ca576103696105fc3660046105b4565b90611767565b346102ca57610612366004610551565b610369611913565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761065157604052565b61061a565b906102dc61066360405190565b9283610630565b6001600160401b03811161065157602090601f01601f19160190565b0190565b90826000939282370152565b909291926106ab6106a68261066a565b610656565b93818552818301116102ca576102dc91602085019061068a565b9080601f830112156102ca578160206102f293359101610696565b9190916040818403126102ca576106f78382610389565b9260208201356001600160401b0381116102ca576102f292016106c5565b6103696107233660046106e0565b9061193b565b346102ca57610739366004610551565b610326610529611988565b346102ca57610369610757366004610396565b6119b6565b346102ca5761076c366004610551565b6103266103146119bf565b91906040838203126102ca576102f29060206107938286610389565b9401610330565b634e487b7160e01b600052603260045260246000fd5b80548210156107d3576107ca600191600052602060002090565b91020190600090565b61079a565b6102f2916008021c81565b906102f291546107d8565b6107f990603a6103d0565b80548210156102ca576102f29161080f916107b0565b906107e3565b346102ca5761032661052961082b366004610777565b906107ee565b8015156102c3565b905035906102dc82610831565b90916060828403126102ca576102f261085f8484610839565b9360406107938260208701610389565b346102ca57610369610882366004610846565b91611a9a565b346102ca5761036961089b366004610396565b611c49565b346102ca576103696108b3366004610396565b611c85565b91906040838203126102ca576102f29060206107938286610330565b906103da565b6107f990603b6108d4565b346102ca576103266105296108fb3660046108b8565b906108da565b346102ca57610911366004610551565b610326600080516020613b25833981519152610529565b600311156102ca57565b905035906102dc82610928565b909182601f830112156102ca578135916001600160401b0383116102ca5760200192600183028401116102ca57565b908160409103126102ca5790565b9060c0828203126102ca576109918183610932565b9261099f8260208501610389565b926109ad8360408301610389565b9260608201356001600160401b0381116102ca57816109cd91840161093f565b92909360808201356001600160401b0381116102ca57836109ef91840161093f565b92909360a08201356001600160401b0381116102ca576102f2920161096e565b610369610a1d36600461097c565b96959095949194939293612433565b346102ca57610a3c366004610551565b6103696124a6565b346102ca57610369610a57366004610396565b6124fe565b346102ca5761032661059a610a723660046108b8565b90612507565b346102ca57610326610314610a8e3660046105b4565b90612548565b6060818303126102ca57610aa88282610330565b9260208201356001600160401b0381116102ca5783610ac891840161093f565b92909360408201356001600160401b0381116102ca57610ae8920161093f565b9091565b346102ca57610369610aff366004610a94565b939290926126f9565b346102ca57610b20610b1b36600461033d565b612706565b90610326610b2d60405190565b928392839015158152901515602082015260400190565b6102f26102f26102f29290565b6102f26000610b44565b6102f2610b51565b346102ca57610b73366004610551565b610326610529610b5b565b90610b9e610b97610b8d845190565b8084529260200190565b9260200190565b9060005b818110610baf5750505090565b909192610bd5610bce60019286516001600160a01b0316815260200190565b9460200190565b929101610ba2565b60208082526102f292910190610b7e565b346102ca57610326610c09610c0436600461033d565b612735565b60405191829182610bdd565b90610c226106a68361066a565b918252565b610c316005610c15565b640352e302e360dc1b602082015290565b6102f2610c27565b6102f2610c42565b6102f2610c4a565b60005b838110610c6d5750506000910152565b8181015183820152602001610c5d565b610c9e610ca760209361068693610c92815190565b80835293849260200190565b95869101610c5a565b601f01601f191690565b60208082526102f292910190610c7d565b346102ca57610cd2366004610551565b610326610cdd610c52565b60405191829182610cb1565b6102f260006003610569565b6102f5906103c7565b6020810192916102dc9190610cf5565b346102ca57610d1e366004610551565b610326610d29610ce9565b60405191829182610cfe565b906020828203126102ca5781356001600160401b0381116102ca576102f292016106c5565b610686610d7292602092610d6c815190565b94859290565b93849101610c5a565b610c226106869160209493610d5a565b610da0610d9760405190565b92839283610d7b565b03902090565b6102f291610d8b565b6102f2916008021c6103ed565b906102f29154610daf565b6000610dd76102f2926002610da6565b610dbc565b346102ca57610326610314610df2366004610d35565b610dc7565b346102ca57610326610529610e0d36600461033d565b61274c565b346102ca57610369610e253660046105b4565b9061277e565b346102ca57610369610e3e36600461033d565b612851565b346102ca57610e53366004610551565b610326600080516020613ae5833981519152610529565b906103da90610b44565b6102f29060081c6103ed565b6102f29054610e74565b6102f29060101c61036e565b6102f29054610e8a565b6102f29061036e565b6102f29054610ea0565b634e487b7160e01b600052602260045260246000fd5b9060016002830492168015610ee9575b6020831014610ee457565b610eb3565b91607f1691610ed9565b80546000939291610f10610f0683610ec9565b8085529360200190565b9160018116908115610f625750600114610f2957505050565b610f3c9192939450600052602060002090565b916000925b818410610f4e5750500190565b805484840152602090930192600101610f41565b92949550505060ff1916825215156020020190565b906102f291610ef3565b906102dc610f9b92610f9260405190565b93848092610f77565b0383610630565b6102f26040610656565b906102dc610fd46001610fbd610fa2565b94610fce610fca82610f81565b8752565b01610f81565b6020840152565b610fe6906038610e6a565b610fef816103f3565b91610ff982610e80565b9161100381610e96565b9161101060018301610ea9565b9161101d60028201610404565b9161102a60038301610404565b9161103760048201610f81565b916102f2600661104960058501610f81565b9301610fac565b634e487b7160e01b600052602160045260246000fd5b6003111561107057565b611050565b906102dc82611066565b6102f290611075565b6102f59061107f565b805160408084526102f293916020916110ad9190840190610c7d565b920151906020818403910152610c7d565b97949561112861114a9761112161113c9761111161112f96986102f29f9d988f6111026040926110f861012084019e600085019015159052565b6020830190611088565b01906001600160a01b03169052565b6001600160a01b031660608d0152565b60808b0152565b60a0890152565b86820360c0880152610c7d565b9084820360e0860152610c7d565b91610100818403910152611091565b346102ca5761032661117461116f36600461033d565b610fdb565b9561118799979995919594929460405190565b998a998a6110be565b6102f2600060366107e3565b346102ca576111ac366004610551565b610326610529611190565b6107f99060396103d0565b346102ca576103266105296111d8366004610777565b906111b7565b6102f260006001610569565b346102ca576111fa366004610551565b61032661059a6111de565b635a05180f60e01b6001600160e01b0319821614908115611224575090565b6102f2915061285a565b6102dc9061123a612894565b611269565b9060ff905b9181191691161790565b9061125e6102f261126592151590565b825461123f565b9055565b61127a61127582612706565b501590565b6113225761128c6102f2826038610e6a565b80611296816103f3565b6113065760016112c2926112b6826112bc946112b1886128b4565b61124e565b01610ea9565b91610b44565b906112d56112cf336103c7565b916103c7565b917f6e0a97d527a534d3590091587040d4d934863526c2be2dd3d89180017f49ed1061130060405190565b600090a4565b630cef71ed60e21b60009081526004849052602490fd5b036000fd5b633d9c511560e11b6000908152600491909152602490fd5b6102dc9061122e565b6102dc90611363600080516020613b258339815191526129b8565b6129b8565b61138e565b906001600160a01b0390611244565b906113876102f2611265926103c7565b8254611368565b61139a6102dc916103c7565b6003611377565b6102dc90611343565b6102f29060401c6103ed565b6102f290546113aa565b6102f2905b6001600160401b031690565b6102f290546113c0565b6113c56102f26102f29290565b906001600160401b0390611244565b6113c56102f26102f2926001600160401b031690565b9061141d6102f2611265926113f7565b82546113e8565b9068ff00000000000000009060401b611244565b906114486102f261126592151590565b8254611424565b6102f5906113db565b6020810192916102dc919061144f565b92939091907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009485926114aa6114a46114a0866113b6565b1590565b946113d1565b946000966114b7886113db565b6001600160401b03881614806115bd575b6001976114e46114d78a6113db565b916001600160401b031690565b149081611595575b155b908161158c575b50611579579061152294939291866115198a6115108b6113db565b9c019b8c61140d565b61156a57611648565b61152b57505050565b611559611565927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d294611438565b60405191829182611458565b0390a1565b611574888b611438565b611648565b63f92ee8a960e01b8852600488fd5b0390fd5b159050386114f5565b90506114ee6115a3306103c7565b3b6115b46115b08c610b44565b9190565b149190506114ec565b50856114c8565b61036e6102f26102f29290565b6102f2906115c4565b634e487b7160e01b600052600060045260246000fd5b9060001990611244565b9061160a6102f261126592610b44565b82546115f0565b600161163760206102dc9461163261162c6000830151151590565b8661124e565b015190565b91016115fa565b906102dc91611611565b9061165594939291612a96565b611691611660610fa2565b600181526116786116716000610b44565b6020830152565b61168c61168560006115d1565b60376103d0565b61163e565b6102dc612aab565b906102dc94939291611468565b6102dc906116c1600080516020613ae58339815191526129b8565b6116d990600080516020613b25833981519152612ab3565b50565b6102dc906116a6565b600161170f6102f2926116f6600090565b506000600080516020613b058339815191525b016108d4565b01610404565b6102dc90611730600080516020613b258339815191526129b8565b6102dc90612b24565b6102dc90611715565b906102dc9161175361135e826116e5565b906116d991612b2d565b906102dc91611742565b906117713361036e565b6001600160a01b03821603611789576116d991612ab3565b63334bd91960e11b6000908152600490fd5b6117a56019610c15565b7f4554484f535f494e544552414354494f4e5f434f4e54524f4c00000000000000602082015290565b6102f261179b565b6102f26117ce565b905051906102dc8261037a565b906020828203126102ca576102f2916117de565b6040513d6000823e3d90fd5b6001600160a01b0390911681526040810192916102dc9160200152565b61186b602061183f61183a6003610ea9565b6103c7565b6118476117d6565b9061185160405190565b9384928391829163d57f7aa360e01b835260048301610cb1565b03915afa908115611906576000916118d7575b50611891335b916001600160a01b031690565b0361189e576102dc61190b565b63e2517d3f60e01b600090815261131d7f261fea28325784de45eba41a3fbb84c4196fbab02ee802566edfe26616ba5afb33600461180b565b6118f9915060203d6020116118ff575b6118f18183610630565b8101906117eb565b3861187e565b503d6118e7565b6117ff565b6102dc612bdf565b6102dc611828565b906102dc91611928612be7565b906102dc9161193681612c8f565b612c98565b906102dc9161191b565b6102f290611951612d57565b61197f565b6102f27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610b44565b506102f2611956565b6102f26000611945565b6102dc906119ad600080516020613b258339815191526129b8565b6102dc90612db1565b6102dc90611992565b6102f2612dba565b6102dc9291906119e4600080516020613b258339815191526129b8565b906102dc92916119f2612894565b611a57565b9160001960089290920291821b911b611244565b9190611a1c6102f261126593610b44565b9083546119f7565b6102dc91600091611a0b565b60008082556102dc91600101611a24565b90600003611a52576102dc90611a30565b6115da565b90918115611a83576102dc9261168561168c92611a7c611a75610fa2565b9515158652565b6020850152565b50506000611a956102dc9260376103d0565b611a41565b906102dc92916119c7565b6102dc90611ac0600080516020613ae58339815191526129b8565b6102dc90611acc612894565b611b13565b905051906102dc8261032a565b906020828203126102ca576102f291611ad1565b905051906102dc82610831565b906020828203126102ca576102f291611af2565b600090611b2261036e836115d1565b6001600160a01b03821603611b655750808080611b4161183a336103c7565b611b4a306103c7565b3190828215611b5c575bf11561190657565b506108fc611b54565b61183a611b71916103c7565b611ba86020611b7f306103c7565b6040519283918291906370a0823160e01b5b83526001600160a01b031660048301526024820190565b0381855afa91821561190657602092611be392600091611c1c575b50604051948593849283919063a9059cbb60e01b8352336004840161180b565b03925af1801561190657611bf45750565b6116d99060203d602011611c15575b611c0d8183610630565b810190611aff565b503d611c03565b611c3c9150843d8611611c42575b611c348183610630565b810190611ade565b38611bc3565b503d611c2a565b6102dc90611aa5565b6102dc90611c6d600080516020613ae58339815191526129b8565b6116d990600080516020613b25833981519152612b2d565b6102dc90611c52565b906102dc97969594939291611ca1612894565b6120c2565b903590601e1936829003018212156102ca57018035906001600160401b0382116102ca57602001913682900383136102ca57565b9190610ca781611cf1816106869560209181520190565b809561068a565b9290611d15906102f2959360408601918683036000880152611cda565b926020818503910152611cda565b6102f2610120610656565b906102f590611075565b6102f2913691610696565b9190916040818403126102ca57611d5a6040610656565b9281356001600160401b0381116102ca5781611d779184016106c5565b845260208201356001600160401b0381116102ca5761167192016106c5565b6102f2903690611d43565b6102f29051611075565b9061ff009060081b611244565b90611dc86102f26112659261107f565b8254611dab565b9062010000600160b01b039060101b611244565b90611df36102f2611265926103c7565b8254611dcf565b818110611e05575050565b80611e136000600193611a24565b01611dfa565b9190601f8111611e2857505050565b611e3a6102dc93600052602060002090565b906020601f840181900483019310611e5c575b6020601f909101040190611dfa565b9091508190611e4d565b90611e6f815190565b906001600160401b03821161065157611e9282611e8c8554610ec9565b85611e19565b602090601f8311600114611ecd57611265929160009183611ec2575b5050600019600883021c1916906002021790565b015190503880611eae565b601f19831691611ee285600052602060002090565b9260005b818110611f2157509160029391856001969410611f07575b50505002019055565b01516000196008601f8516021c19165b9055388080611efe565b91936020600181928787015181550195019201611ee6565b906102dc91611e66565b6001611f6260206102dc94611632611f5c600083015190565b86611f39565b9101611f39565b906102dc91611f43565b6102dc9160069061203e9061010090611fc285611f99611f938451151590565b8261124e565b611fae611fa860208501611da1565b82611db8565b60408301516001600160a01b031690611de3565b611fe2611fd960608301516001600160a01b031690565b60018701611377565b611ff9611ff0608083015190565b600287016115fa565b61201061200760a083015190565b600387016115fa565b61202761201e60c083015190565b60048701611f39565b61163261203560e083015190565b60058701611f39565b9101611f69565b906102dc91611f73565b90815491600160401b83101561065157826120729160016102dc950181556107b0565b90611a0b565b6040906104446102dc949695939661167160608401986000850190611088565b634e487b7160e01b600052601160045260246000fd5b60001981146120bd5760010190565b612098565b939496909591966120d38288612de7565b6120db613112565b926120e5846103c7565b946120ef60405190565b63b8861c2360e01b81523360048201526020816024818a5afa801561190657612416575b506000976000958a61212761036e896115d1565b6001600160a01b03821614801599906123255761215e9160209161214a60405190565b938492839182916389a9132b60e01b611b91565b03915afa9182156119065761219192898e61218b94600093612304575b5061218582610b44565b926131e1565b9b6133a0565b61219b6036610404565b6121a3611d23565b966121b2908089019015159052565b6121bf8960208901611d2e565b3360408801526001600160a01b038b16606088015260808701526121e44260a0880152565b6121ed91611d38565b60c08501526121fb91611d38565b60e083015261220990611d96565b6101008201526122196036610404565b612224906038610e6a565b9061222e91612045565b6122393360396103d0565b6122436036610404565b61224c9161204f565b7fbcba601f87e317f5f2e5d40544c705eb73096974a8f4836ca5c4cd8f012451d99190156122ee576122956122856102f286603a6103d0565b61228f6036610404565b9061204f565b61229f6036610404565b906122cf6122bc6122b66122b2336103c7565b9690565b966103c7565b966122c660405190565b93849384612078565b0390a46102dc6122e76122e26036610404565b6120ae565b60366115fa565b6122ff6122856102f285603b6108d4565b612295565b61231e91935060203d602011611c4257611c348183610630565b913861217b565b919a505061233461183a61319e565b90602061234381890189611ca6565b936123508b8b018b611ca6565b95909261237a61235f60405190565b9788958694859463236dc36960e21b5b865260048601611cf8565b03915afa918215611906576000926123f5575b50819a602061239b60405190565b637dec74d760e01b81526004810185905292839060249082905afa9283156119065760018e6121919561218b956000916123d6575b506131e1565b6123ef915060203d602011611c4257611c348183610630565b386123d0565b61240f91925060203d602011611c4257611c348183610630565b903861238d565b61242e9060203d602011611c4257611c348183610630565b612113565b906102dc97969594939291611c8e565b612455602061183f61183a6003610ea9565b03915afa9081156119065760009161247f575b5061247233611884565b0361189e576102dc61249e565b612498915060203d6020116118ff576118f18183610630565b38612468565b6102dc61340b565b6102dc612443565b6102dc906124c9600080516020613ae58339815191526129b8565b6116d990600080516020613ae58339815191526124f86124f26124ec6000610b44565b83612507565b82612ab3565b50612b2d565b6102dc906124ae565b906125436102f26102f29361251a600090565b5060007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000611709565b61341c565b6102f29160006125736125799361255d600090565b5082600080516020613b05833981519152611709565b016103d0565b6103f3565b906102dc9493929161258e612894565b61265b565b91906001600160401b038211610651576125b182611e8c8554610ec9565b600090601f83116001146125eb576112659291600091836125e0575050600019600883021c1916906002021790565b013590503880611eae565b90601f1983169161260185600052602060002090565b92825b818110612638575091600293918560019694106126245750505002019055565b0135600019601f84166008021c1916611f17565b92936020600181928786013581550195019301612604565b906102dc9291612593565b939192909261266e6102f2866038610e6a565b93612678856103f3565b6126e2576112bc936001936126a16126aa97946112b6946126988b6128b4565b60048701612650565b60058401612650565b906126b76112cf336103c7565b917fd50d53f79201cac5bff0d80f7335371be90a3cb399bdcba65cc73b382dd353bd61130060405190565b630cef71ed60e21b60009081526004879052602490fd5b906102dc9493929161257e565b600361170f6102f26127229361271a600090565b506038610e6a565b61272f6115b06000610b44565b11908190565b6127476102f26102f29261251a606090565b613450565b61275e6102f26102f29261251a600090565b61345c565b906102dc9161277461135e826116e5565b906116d991612ab3565b906102dc91612763565b6102dc90612794612894565b6127a26102f2826038610e6a565b6127ab81610e96565b6000906127bd61188461036e846115d1565b1461283b578082016127d16114a0826103f3565b612824576127ec926112b66112bc936001936112b1886128b4565b906127f96112cf336103c7565b917fd1e776670553de8351018778f951226744cf387276a4a6bc85346de6bc0c9dc161130060405190565b5063594af9b960e01b815260048101839052602490fd5b633d9c511560e11b815260048101839052602490fd5b6102dc90612788565b637965db0b60e01b6001600160e01b0319821614908115612879575090565b6102f291506001600160e01b0319166301ffc9a760e01b1490565b61289c6119bf565b6128a257565b63d93c066560e01b6000908152600490fd5b6128bf61183a613112565b63b8861c2360206128cf60405190565b80936128db8460e01b90565b825233600483015260249082905afa91821561190657600092612992575b50602061293b9161290b61183a613112565b611b91612924600061291e896038610e6a565b01610e96565b9261292e60405190565b9586948593849360e01b90565b03915afa90811561190657612959916115b091600091612979575090565b036129615750565b63c43bcfe160e01b6000908152600491909152602490fd5b6102f2915060203d602011611c4257611c348183610630565b61293b9192506129b0602091823d8411611c4257611c348183610630565b9291506128f9565b6102dc903390613472565b906102dc949392916129d36134a1565b9290939160006129e2816115d1565b6001600160a01b0381166001600160a01b03871614908115612a79575b8115612a5d575b50612a4e575061139a612a399361183a6116d9979694612a25946134e3565b600080516020613ae5833981519152612b2d565b50600080516020613b25833981519152612b2d565b63d92e233d60e01b8152600490fd5b6001600160a01b031690506001600160a01b0385161438612a06565b90506001600160a01b0381166001600160a01b03881614906129ff565b906102dc949392916129c3565b6102dc6134a1565b6102dc612aa3565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200090612ae081846134ed565b9283612aed575b50505090565b612b0392612afe916102f2916108d4565b613583565b50388080612ae7565b6102dc90612b19816135b5565b6102dc906000611377565b6102dc90612b0c565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200090612b5a81846135cf565b9283612b665750505090565b612b0392612b77916102f2916108d4565b613640565b612b84613660565b6102dc612bb56000807fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005b0161124e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115653361059a565b6102dc612b7c565b612bf0306103c7565b7f000000000000000000000000000000000000000000000000000000000000000090612c246001600160a01b038316611884565b14908115612c46575b50612c3457565b63703e46dd60e11b6000908152600490fd5b9050612c63611884612c56613683565b926001600160a01b031690565b141538612c2d565b6102dc90612c86600080516020613ae58339815191526129b8565b6102dc906135b5565b6102dc90612c6b565b90612ca561183a836103c7565b906020612cb160405190565b6352d1902d60e01b815292839060049082905afa60009281612d36575b50612d005750506001612cde5750565b634c9c8ce360e01b60009081526001600160a01b039091166004526024036000fd5b909291612d0e6102f2611956565b8403612d1f576102dc929350613693565b632a87526960e21b60009081526004859052602490fd5b612d5091935060203d602011611c4257611c348183610630565b9138612cce565b612d60306103c7565b612d926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611884565b03612c3457565b6102dc90612da6816135b5565b6102dc906001611377565b6102dc90612d99565b6102f260007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005b016103f3565b600091612df661036e846115d1565b6001600160a01b038316148080613094575b61306357158080613011575b612fe057336001600160a01b03841614612fc257612e3361183a613112565b916389a9132b916020612e4560405190565b8095612e518660e01b90565b825233600483015260249082905afa93841561190657600094612fa1575b5015612eef57506020612e9391612e8761183a613112565b60405193849260e01b90565b82526001600160a01b03861660048301528180602481015b03915afa90811561190657612ec9916115b091600091612979575090565b14612ed2575050565b63d63f320360e01b82526001600160a01b03166004820152602490fd5b612f1a9150602090612f0261183a61319e565b612f0e83830183611ca6565b94909288810190611ca6565b949092612f3d612f2960405190565b9687958694859463236dc36960e21b61236f565b03915afa90811561190657612eab91602091600091612f84575b50612f6361183a613112565b60405193849283918291637dec74d760e01b83526004830190815260200190565b612f9b9150823d8411611c4257611c348183610630565b38612f57565b612fbb91945060203d602011611c4257611c348183610630565b9238612e6f565b63d63f320360e01b84526001600160a01b0383166004850152602484fd5b60405163ac15c56760e01b8152602060048201526008602482015267109bdd1a081cd95d60c21b6044820152606490fd5b50613029613024610ae886850185611ca6565b905090565b6130356115b086610b44565b141580612e145750613050613024610ae86020850185611ca6565b61305c6115b086610b44565b1415612e14565b60405163ac15c56760e01b8152602060048201526008602482015267139bdb99481cd95d60c21b6044820152606490fd5b506130a7613024610ae886850185611ca6565b6130b36115b086610b44565b1480612e0857506130cd613024610ae86020850185611ca6565b6130d96115b086610b44565b14612e08565b6130e9600d610c15565b6c4554484f535f50524f46494c4560981b602082015290565b6102f26130df565b6102f2613102565b61312c602061312461183a6003610ea9565b61184761310a565b03915afa8015611906576102f291600091613148575b506103c7565b613161915060203d6020116118ff576118f18183610630565b38613142565b6131716011610c15565b7022aa2427a9afa0aa2a22a9aa20aa24a7a760791b602082015290565b6102f2613167565b6102f261318e565b61312c60206131b061183a6003610ea9565b611847613196565b90151581526060810193926102dc929091604091610444905b6001600160a01b03166020830152565b93909192936131ee600090565b506131f96000610b44565b810361324d575091613237939160006132136020956103c7565b9261321d60405190565b968795869485936315c3e15560e21b8552600485016131b8565b03925af190811561190657600091612979575090565b935050505090565b6132686114a06000612de18460376103d0565b613275576102dc906132bc565b634dbdbad960e11b60009081526001600160a01b039091166004526024036000fd5b6001600160a01b0390911681526060810193926102dc929091604091610444906131d1565b6132cc600161170f8360376103d0565b906000906132d982610b44565b83116132e457505050565b6132ed826115d1565b6001600160a01b0381166001600160a01b0383160361332e575090913403613313575050565b6306e0823560e21b825281906115889034906004840161180b565b61333783610b44565b341161338557509160209161335161183a611be3956103c7565b9061335b306103c7565b9061336560405190565b8096819582946133796323b872dd60e01b90565b84523360048501613297565b8261158881926306e0823560e21b835234906004840161180b565b6102dc90613255565b6133b1612894565b6102dc6133e1600160007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300612baf565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115653361059a565b6102dc6133a9565b6102f290610b44565b6134466134416102f29361343c600061344b95613437600090565b500190565b6136fc565b613413565b6115c4565b6103be565b6060906130249061379a565b61346d60006102f292613437600090565b6137af565b906134806114a08284612548565b613488575050565b63e2517d3f60e01b60009081529161131d91600461180b565b6134ac6114a06137c3565b6134b257565b631afcd79f60e31b6000908152600490fd5b906102dc916134d16134a1565b906134de6102dc92612b24565b612db1565b906102dc916134c4565b600080516020613b058339815191526135068383612548565b156135695760006112b18482612573868261352197016108d4565b6135356112cf61352f339390565b936103c7565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b61356060405190565b600090a4600190565b505050600090565b6102f29081906001600160a01b031681565b906135b06115b06135ab6135a660006102f29661359e600090565b5001946103be565b613571565b610b44565b613852565b6000906135c761188461036e846115d1565b14612a4e5750565b600080516020613b058339815191526135eb6114a08484612548565b156135695760016112b1846000612573868261360797016108d4565b6136156112cf61352f339390565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d61356060405190565b9061365b6115b06135ab6135a660006102f29661359e600090565b613936565b61366b6114a06119bf565b61367157565b638dfc202b60e01b6000908152600490fd5b6102f260006112b66102f2611956565b9061369d82613977565b6136a6826103c7565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6136d060405190565b600090a280516136e36115b06000610b44565b11156136f2576116d991613a04565b50506102dc6139c2565b6102f291600061080f9261370e600090565b50016107b0565b90613730613724610b8d845490565b92600052602060002090565b9060005b8181106137415750505090565b90919261376561375e60019261375687610404565b815260200190565b9460010190565b929101613734565b906102f291613715565b906102dc610f9b9261378860405190565b9384809261376d565b6102f290613777565b60006102f2916137a8606090565b5001613791565b60006102f2916137bd600090565b50015490565b6102f27ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006113b6565b919082039182116120bd57565b9190611a1c6102f26112659390565b634e487b7160e01b600052603160045260246000fd5b6102dc916000916137f9565b8054801561384d57600019019061384a61384483836107b0565b9061381e565b55565b613808565b9061386861386382600185016108d4565b610404565b6138726000610b44565b8114613569576138d06102f2926000926138cb9561170960019788936138a061389a86610b44565b826137ec565b888501916138be6138af845490565b6138b889610b44565b906137ec565b8083036138d55750505090565b61382a565b611a24565b6138f86138fe61390b946138ef61080f61390695896107b0565b928391886107b0565b906137f9565b8888016108d4565b6115fa565b388080612ae7565b90815491600160401b83101561065157826138f89160016102dc950181556107b0565b6139436114a08383613a2b565b156139705761396b91613906906001613964846139608482613913565b5490565b93016108d4565b600190565b5050600090565b6000813b6139876115b083610b44565b146139a257906102dc9161399c6102f2611956565b01611377565b634c9c8ce360e01b81526001600160a01b03919091166004820152602490fd5b60006139cd81610b44565b34116139d65750565b63b398979f60e01b8152600490fd5b3d156139ff576139f43d610c15565b903d6000602084013e565b606090565b6000806102f293613a13606090565b50602081519101845af4613a256139e5565b91613a56565b613a4491600161386392613a3d600090565b50016108d4565b613a516115b06000610b44565b141590565b90613a615750613ab5565b815190600091613a736115b084610b44565b1480613aa0575b613a8357505090565b639996b31560e01b82526001600160a01b03166004820152602490fd5b50803b613aaf6115b084610b44565b14613a7a565b8051600090613ac66115b083610b44565b1115613ad55750805190602001fd5b63d6bda27560e01b8152600490fdfeb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220eff96b6eaac878b400bf6f9abbedeac905ab39a360e155159ba6d3fbe5dafbbe64736f6c634300081a0033