0 txs
6 calls
constructor
No constructor.
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEPLOYER_ROLE
viewfunction DEPLOYER_ROLE() view returns (bytes32)
getArtifactAddresses
viewfunction getArtifactAddresses() view returns (address[])
getArtifactByAddress
viewfunction getArtifactByAddress(address artifactAddress) view returns (tuple)
getArtifactsAmount
viewfunction getArtifactsAmount() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
createEOMultiFeedAdapter
nonpayablefunction createEOMultiFeedAdapter(tuple[] baseFeeds, tuple[] quoteFeeds, uint8 outputDecimals, string description) returns (address)
createMorphoOracle
nonpayablefunction createMorphoOracle(address baseVault, address baseFeed1, address baseFeed2, address quoteFeed1, uint8 baseTokenDecimals, uint8 quoteTokenDecimals, string desc) returns (address)
createPendlePTFeedLinearDiscount
nonpayablefunction createPendlePTFeedLinearDiscount(address ptToken, string desc, uint256 baseDiscountPerYear) returns (address)
createPendlePTFeedTWAP
nonpayablefunction createPendlePTFeedTWAP(address ptMarket, string desc, uint32 twapDuration, uint8 twapType) returns (address)
createSpectraPTFeed
nonpayablefunction createSpectraPTFeed(address ptToken, string desc, uint256 baseDiscountPerYear, uint8 discountType) returns (address)
deleteArtifact
nonpayablefunction deleteArtifact(address artifactAddress)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address morphoFactory, address ptOracle, address owner, address deployer)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setMorphoFactory
nonpayablefunction setMorphoFactory(address morphoFactory)
setPendlePTOracle
nonpayablefunction setPendlePTOracle(address pendlePTOracle)
events
Initialized
event Initialized(uint64 version)
MorphoFactorySet
event MorphoFactorySet(address indexed morphoFactory)
MorphoOracleCreated
event MorphoOracleCreated(address indexed oracle, address deployer)
MultiFeedAdapterCreated
event MultiFeedAdapterCreated(address indexed feed, address deployer)
PendlePTLinearDiscountFeedCreated
event PendlePTLinearDiscountFeedCreated(address indexed feed, address deployer)
PendlePTOracleSet
event PendlePTOracleSet(address indexed ptOracle)
PendlePTTWAPFeedCreated
event PendlePTTWAPFeedCreated(address indexed feed, uint8 twapType, address deployer)
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)
SpectraPTFeedCreated
event SpectraPTFeedCreated(address indexed feed, uint8 discountType, address deployer)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
DeployerZeroAddress
error DeployerZeroAddress()
InvalidInitialization
error InvalidInitialization()
MorphoFactoryZeroAddress
error MorphoFactoryZeroAddress()
NotInitializing
error NotInitializing()
OwnerZeroAddress
error OwnerZeroAddress()
PendlePTOracleZeroAddress
error PendlePTOracleZeroAddress()
creation bytecode
0x60808060405234601557614c55908161001a8239f35b5f80fdfe608060409080825260049081361015610016575f80fd5b5f3560e01c90816301ffc9a714611554575080630baed9e914611331578063248a9ca3146112e75780632f2ff15d146112be57806336568abe1461125357806343217c591461122a57806366ff912c1461118d57806383cb26fe1461116957806386bacdb8146110a35780638f5173b614610ec557806391d1485414610e53578063a217fddf14610e39578063b208514b14610c96578063b95558d914610c78578063d547741f14610c1c578063d671449f1461085b578063d7546bae14610630578063ecd00261146105f6578063f85890da1461035c5763f8c8765e146100fc575f80fd5b34610358576080600319360112610358576101156115f1565b9061011e611614565b610126611637565b9261012f61165a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009485549460ff86891c16159567ffffffffffffffff811680159081610350575b6001149081610346575b15908161033d575b50610315578660017fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083161789556102e0575b5060ff8754891c16156102b95773ffffffffffffffffffffffffffffffffffffffff808316156102915783161561026a57509161020661020c92610200856102006102119897611a24565b50611aff565b50611d7d565b611e11565b61021757005b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291817fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff602093541690555160018152a1005b87517f12cd6dbf000000000000000000000000000000000000000000000000000000008152fd5b5087517f12c44af2000000000000000000000000000000000000000000000000000000008152fd5b87517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000016680100000000000000011787555f6101b5565b5087517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f610182565b303b15915061017a565b889150610170565b5f80fd5b5034610358576060600319360112610358576103766115f1565b9167ffffffffffffffff916024358381116103585761039890369083016116d0565b906103a16118e3565b8251946107889586810196818810878911176105e3576132bc823973ffffffffffffffffffffffffffffffffffffffff8092168752806020976060898201526103ed6060820187611726565b908760443591015203905ff080156105d9571693847f2dfc3469dcf10b589544c2aac0192c99266145f6dc03b1f53dc770b01614df38878651338152a28351926104368461167d565b8352858301925f845284810191338352865f5260028852855f20915180519182116105c6576104658354611827565b601f811161058d575b508890601f83116001146105275791806104a092600195945f9261051c575b50505f198260011b9260031b1c19161790565b81555b019251918083101561050957507fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b16931691161717905561050282611ef0565b5051908152f35b602190634e487b7160e01b5f525260245ffd5b015190505f8061048d565b90601f19831691845f528a5f20925f5b8c82821061057757505091600195949291838795931061055f575b505050811b0181556104a3565b01515f1960f88460031b161c191690555f8080610552565b6001859682939686015181550195019301610537565b6105b690845f528a5f20601f850160051c8101918c86106105bc575b601f0160051c019061185f565b5f61046e565b90915081906105a9565b604185634e487b7160e01b5f525260245ffd5b84513d5f823e3d90fd5b604184634e487b7160e01b5f525260245ffd5b8234610358575f60031936011261035857602090517ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c8152f35b5090346103585760806003193601126103585767ffffffffffffffff90823582811161035857610663903690850161174b565b6024358381116103585761067a903690860161174b565b936044359160ff831680930361035857606435858111610358576106a190369084016116d0565b926106aa6118e3565b84519161127e90818401918483108984111761084857916106f06106e18695936107039561203e8839608084526080840190611882565b60209b8382038d850152611882565b9188820152606081830391015285611726565b03905ff0801561083e5773ffffffffffffffffffffffffffffffffffffffff1693847f25cb6ab4d676eacf0a1b262c7d414e841460d951d330b13c1ff14cc2350bb486878651338152a28351926107598461167d565b8352858301926002845284810191338352865f5260028852855f20915180519182116105c6576107898354611827565b601f8111610810575b508890601f83116001146107c35791806104a092600195945f9261051c5750505f198260011b9260031b1c19161790565b90601f19831691845f528a5f20925f5b8c8282106107fa57505091600195949291838795931061055f57505050811b0181556104a3565b60018596829396860151815501950193016107d3565b61083890845f528a5f20601f850160051c8101918c86106105bc57601f0160051c019061185f565b5f610792565b83513d5f823e3d90fd5b604186634e487b7160e01b5f525260245ffd5b5090346103585760e0600319360112610358576108766115f1565b9061087f611614565b610887611637565b9361089061165a565b6084359460ff86168096036103585760a4359560ff87168097036103585767ffffffffffffffff9460c435868111610358576108cf90369087016116d0565b976108d86118e3565b73ffffffffffffffffffffffffffffffffffffffff938416928315610c105788517f313ce5670000000000000000000000000000000000000000000000000000000081526020818981885afa8015610c06575f90610bc9575b60ff915016604d8111610bb6575f9b868092600a0a955b818f5416968d51987fb32cddf4000000000000000000000000000000000000000000000000000000008a528c8a0152602489015216604487015216606485015260848401528960a484015283600195600160c48601521660e48401528961010484015261012483015288610144830152816101648160209b8c945af1908115610bac575f91610b76575b5016948451906109e18261167d565b8152868101936003855285820192338452875f5260028952865f209251805192831161084857610a118454611827565b601f8111610b48575b508991601f8411600114610ade57509180610a4c92600195945f9261051c5750505f198260011b9260031b1c19161790565b81555b019251918083101561050957507fffffffffffffffffffffff00000000000000000000000000000000000000000060ff74ffffffffffffffffffffffffffffffffffffffff008554935160081b169316911617179055610aae82611ef0565b50817f94db49514f0cf5d266b56d1f8d565491766c8a518dd70f1ae36b66f3b72816e6848351338152a251908152f35b9190601f198416855f528b5f20935f905b8d838310610b3057505050916001959492918387959310610b18575b505050811b018155610a4f565b01515f1960f88460031b161c191690555f8080610b0b565b84860151875595810195948501949190910190610aef565b610b7090855f528b5f20601f860160051c8101918d87106105bc57601f0160051c019061185f565b5f610a1a565b90508781813d8311610ba5575b610b8d81836116ad565b8101031261035857518181168103610358575f6109d2565b503d610b83565b86513d5f823e3d90fd5b601188634e487b7160e01b5f525260245ffd5b506020813d602011610bfe575b81610be3602093836116ad565b81010312610358575160ff811681036103585760ff90610931565b3d9150610bd6565b8a513d5f823e3d90fd5b845f9b81600195610948565b509034610358578060031936011261035857610c769135610c716001610c40611614565b93835f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020525f2001546119e3565b611cbf565b005b8234610358575f600319360112610358576020906003549051908152f35b5090346103585760208060031936011261035857610cb26115f1565b5f838051610cbf8161167d565b606081528285820152015273ffffffffffffffffffffffffffffffffffffffff8091165f5260028252825f2092805193610cf88561167d565b81515f8254610d0681611827565b90818452600190886001821691825f14610df9575050600114610db7575b505090610d36816001949303826116ad565b865201549060ff8216938086019487811015610da45790610d75918652848388019460081c168452606083519782895251918801526080870190611726565b93519086821015610d9157858097500152511660608301520390f35b602187634e487b7160e01b5f525260245ffd5b602188634e487b7160e01b5f525260245ffd5b848892959493505f52815f20945f915b818310610de2575093945091925090820101610d3682610d24565b865485840185015295860195899390920191610dc7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168187015292151560051b85019092019250610d369150839050610d24565b8234610358575f60031936011261035857602090515f8152f35b509034610358578060031936011261035857602091610e70611614565b90355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800835273ffffffffffffffffffffffffffffffffffffffff825f2091165f52825260ff815f20541690519015158152f35b503461035857608060031936011261035857610edf6115f1565b9167ffffffffffffffff9160243583811161035857610f0190369083016116d0565b906064359360018086101561035857610f186118e3565b8451956108659687810197818910858a1117610848576143e4823973ffffffffffffffffffffffffffffffffffffffff80991688528060209860808a820152610f786060610f69608084018b611726565b926044358c8201520185611875565b03905ff08015610bac578697987ff937fc89bf034e068f1e3a97131790de63f3dbdd4e919120271bd817e463e3c59116978892610fb782518092611875565b338b820152a2845193610fc98561167d565b84528684019381855285810192338452875f5260028952865f209151805191821161084857610ff88354611827565b601f8111611075575b508990601f831160011461102e576104a092915f918361051c5750505f198260011b9260031b1c19161790565b8291601f1986941691855f528c5f20928d5f905b82821061105e575050841161055f57505050811b0181556104a3565b83850151865589979095019493840193018e611042565b61109d90845f528b5f20601f850160051c8101918d86106105bc57601f0160051c019061185f565b5f611001565b8234610358575f6003193601126103585780519081600354908181526020809101809260035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f5b81811061115557505050846111049103856116ad565b825181815293518185018190528493840192915f5b82811061112857505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101611119565b8254845292840192600192830192016110ee565b3461035857602060031936011261035857610c766111856115f1565b61020c611975565b823461035857602060031936011261035857610c76905f600173ffffffffffffffffffffffffffffffffffffffff6111c36115f1565b6111cb611975565b1692838352600260205282206111e18154611827565b806111ef575b500155611f5e565b601f8111831461120457508281555b856111e7565b8390828252611221601f60208420920160051c820185830161185f565b818355556111fe565b3461035857602060031936011261035857610c766112466115f1565b61124e611975565b611d7d565b50903461035857806003193601126103585761126d611614565b903373ffffffffffffffffffffffffffffffffffffffff8316036112965750610c769135611cbf565b9050517f6697b232000000000000000000000000000000000000000000000000000000008152fd5b509034610358578060031936011261035857610c7691356112e26001610c40611614565b611bfd565b50903461035857602060031936011261035857602091355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680082526001815f2001549051908152f35b5090346103585760806003193601126103585761134c6115f1565b9067ffffffffffffffff6024358181116103585761136d90369086016116d0565b9360443563ffffffff811680910361035857606435956002871015610358576113946118e3565b73ffffffffffffffffffffffffffffffffffffffff966001928860015416908751916109a090818401918483108a841117611541578493928692608092613a44873981528d60209d168d82015260a08c8201526113f460a0820189611726565b93606082015261140383611809565b015203905ff08015610bac578697987f15ce7d3879fe7d7f8f648de3b1db0e4161a6379299190e2786c831014ec1a968911697889281519061144481611809565b8152338b820152a28451906114588261167d565b8152868101935f855285820192338452875f5260028952865f2092518051928311610848576114878454611827565b601f8111611513575b508991601f84116001146114c2575091806104a092600195945f9261051c5750505f198260011b9260031b1c19161790565b9190601f198416855f528b5f20935f905b8d8383106114fb5750505091600195949291838795931061055f57505050811b0181556104a3565b848601518755958101959485019491909101906114d3565b61153b90855f528b5f20601f860160051c8101918d87106105bc57601f0160051c019061185f565b5f611490565b604189634e487b7160e01b5f525260245ffd5b82346103585760206003193601126103585735907fffffffff00000000000000000000000000000000000000000000000000000000821680920361035857817f7965db0b00000000000000000000000000000000000000000000000000000000602093149081156115c7575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836115c0565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361035857565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361035857565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361035857565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361035857565b6060810190811067ffffffffffffffff82111761169957604052565b634e487b7160e01b5f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761169957604052565b81601f820112156103585780359067ffffffffffffffff821161169957604051926117056020601f19601f86011601856116ad565b8284526020838301011161035857815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b81601f820112156103585767ffffffffffffffff906020813583811161169957604093845195611780848460051b01886116ad565b828752838088019360061b86010194818611610358578401925b8584106117ab575050505050505090565b8684830312610358578651908782018281108582111761169957885284356002811015610358578252858501359073ffffffffffffffffffffffffffffffffffffffff8216820361035857828792838b95015281520193019261179a565b6002111561181357565b634e487b7160e01b5f52602160045260245ffd5b90600182811c92168015611855575b602083101461184157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611836565b81811061186a575050565b5f815560010161185f565b9060018210156118135752565b9081518082526020808093019301915f5b8281106118a1575050505090565b9091929382604060019273ffffffffffffffffffffffffffffffffffffffff83895180516118ce81611809565b84520151168382015201950193929101611893565b335f9081527f8f7e9a8734279607aeaac474f24949ddc99eae25c0da72edcf5ad21022be2c9e60205260409020547ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c9060ff161561193e5750565b604490604051907fe2517d3f0000000000000000000000000000000000000000000000000000000082523360048301526024820152fd5b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16156119ad57565b60446040517fe2517d3f0000000000000000000000000000000000000000000000000000000081523360048201525f6024820152fd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f20335f5260205260ff60405f2054161561193e5750565b73ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020547f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009060ff16611af9575f805260205260405f20815f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905533905f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50505f90565b73ffffffffffffffffffffffffffffffffffffffff165f8181527f8f7e9a8734279607aeaac474f24949ddc99eae25c0da72edcf5ad21022be2c9e60205260409020547ffc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c91907f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009060ff16611bf657825f5260205260405f20815f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b5050505f90565b90815f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268008060205273ffffffffffffffffffffffffffffffffffffffff60405f20921691825f5260205260ff60405f205416155f14611bf657825f5260205260405f20815f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b90815f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268008060205273ffffffffffffffffffffffffffffffffffffffff60405f20921691825f5260205260ff60405f2054165f14611bf657825f5260205260405f20815f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b73ffffffffffffffffffffffffffffffffffffffff168015611de757807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f617370f36178428dc875efb4aa5e95dbb46606559302417e0b4475ba443b7e055f80a2565b60046040517fa681d23d000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff168015611e7d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557f068219f19fc412d19bac599fa894ef21d81187fc5fb5295836dbe550a0fa782d5f80a2565b60046040517ff2d708dc000000000000000000000000000000000000000000000000000000008152fd5b600354811015611edc5760035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01905f90565b634e487b7160e01b5f52603260045260245ffd5b805f52600460205260405f2054155f14611f59576003546801000000000000000081101561169957611f42611f2c826001859401600355611ea7565b81939154905f199060031b92831b921b19161790565b9055600354905f52600460205260405f2055600190565b505f90565b805f526004908160205260405f20548015155f14611bf6575f199081810181811161202a576003549083820191821161201757818103611fe4575b5050506003548015611fd157810190611fb182611ea7565b909182549160031b1b191690556003555f526020525f6040812055600190565b603184634e487b7160e01b5f525260245ffd5b612002611ff3611f2c93611ea7565b90549060031b1c928392611ea7565b90555f528360205260405f20555f8080611f99565b601186634e487b7160e01b5f525260245ffd5b601185634e487b7160e01b5f525260245ffdfe60e080604052346102135761127e803803809161001c8285610605565b83398101906080818303126102135780516001600160401b0381116102135782610047918301610628565b60208201519092906001600160401b0381116102135781610069918401610628565b92610076604084016106da565b606084015190936001600160401b03821161021357019382601f860112156102135784516001600160401b03811161025257601f1995604051946100c2602089601f8601160187610605565b8286526020838301011161021357815f9260208093018388015e850101525f945f9160038451116105f357600294858251116105e1575f975b8551891015610278576001600160a01b0360206101188b896106e8565b51015116156102665761012b89876106e8565b516001805490680100000000000000008210156102525780820180825582101561023e575f5260205f2001908051908982101561022a5760ff8354916020610100600160a81b0391015160081b1692169060018060a81b031916171790556004602060018060a01b038161019f8d8b6106e8565b510151166040519283809263313ce56760e01b82525afa90811561021f575f916101d9575b506101d1906001926106fc565b9801976100fb565b90506020813d602011610217575b816101f460209383610605565b810103126102135760019161020b6101d1926106da565b9150916101c4565b5f80fd5b3d91506101e7565b6040513d5f823e3d90fd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516366a0c58560e01b8152600490fd5b90869291885f965b845188101561039a576001600160a01b0380602061029e8b896106e8565b5101511615610266576102b189876106e8565b518754680100000000000000008110156102525760018101808a5581101561023e57885f5260205f2001918151928984101561022a5760049360209360ff83549186610100600160a81b0391015160081b1692169060018060a81b031916171790558161031e8c8a6106e8565b510151166040519283809263313ce56760e01b82525afa90811561021f575f91610358575b50610350906001926106fc565b970196610280565b90506020813d602011610392575b8161037360209383610605565b810103126102135760019161038a610350926106da565b915091610343565b3d9150610366565b60c08290528351876001600160401b038211610252575f54906001968783811c931680156105d7575b60208410146105c35782601f859411610565575b50602091601f84116001146104ff57505f926104f4575b50505f19600383901b1c191690851b175f555b60ff918284169083825f0b91165f0b03607f1992607f8213848312176104e05784165f0b905f0b0191808312607f8413176104e0575f83810b929083126104b45750505090610455603c92821680946106fc565b16116104a25761046490610710565b60805260a0525b604051610b3c9081610722823960805181818160c901526101d2015260a051818181610105015261020c015260c051816105360152f35b60405163d9d6206960e01b8152600490fd5b90939450603c91959250116104a25760805282146104e0576104d8915f0316610710565b60a05261046b565b634e487b7160e01b5f52601160045260245ffd5b0151905086806103ee565b5f80805289955f8051602061125e83398151915294939216905b81811061054d57508411610535575b505050811b015f55610401565b01515f1960f88460031b161c19169055868080610528565b8284015185558a969094019360209384019301610519565b5f8052919250905f8051602061125e833981519152601f850160051c810191602086106105b9575b8594939291601f8b920160051c01915b8281106105ab5750506103d7565b5f81558695508a910161059d565b909150819061058d565b634e487b7160e01b5f52602260045260245ffd5b92607f16926103c3565b6040516306498ddb60e11b8152600490fd5b6040516310b3d99960e31b8152600490fd5b601f909101601f19168101906001600160401b0382119082101761025257604052565b81601f820112156102135780516001600160401b0391906020908381116102525760409384519561065e848460051b0188610605565b828752838088019360061b86010194818611610213578401925b858410610689575050505050505090565b868483031261021357865190878201828110858211176102525788528451600281101561021357825284860151906001600160a01b038216820361021357828792838b950152815201930192610678565b519060ff8216820361021357565b805182101561023e5760209160051b010190565b9060ff8091169116019060ff82116104e057565b60ff16604d81116104e057600a0a9056fe6080604090808252600480361015610015575f80fd5b5f3560e01c91826302b5ffa014610590575081630417cf8e14610575578163188a95a91461055a578163313ce5671461051d57816351d4b9a0146104ea5781637284e4161461033c578163833ae521146102fb578163a0db13121461022f57508063b42fb22a146101f5578063c9114707146101bb578063db5ed050146101a05763feaf968c146100a4575f80fd5b3461019c575f60031936011261019c5760018054905f915b80831061017757836100ee7f000000000000000000000000000000000000000000000000000000000000000084610836565b906002545f905b8082106101475760a0835f61012a7f0000000000000000000000000000000000000000000000000000000000000000886108a1565b9180519282845260208401528201525f60608201525f6080820152f35b909261016f60019161016961016461015e8861079f565b5061075e565b61093a565b906108a1565b9301906100f5565b9061019360019161018d61016461015e87610801565b90610836565b920191906100bc565b5f80fd5b503461019c575f60031936011261019c576020905160028152f35b503461019c575f60031936011261019c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461019c575f60031936011261019c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b90503461019c575f60031936011261019c576002549067ffffffffffffffff82116102cf575060209082519161026b60208360051b018461071d565b818352602083019060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f925b8484106102b3578651806102af8882610687565b0390f35b60018381926102c18561075e565b81520192019301929061029b565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90503461019c57602060031936011261019c5761015e61032e915f60208551610323816106d4565b828152015235610801565b61033a8251809261062a565bf35b823461019c575f60031936011261019c5780515f80549060018260011c90600184169384156104e0575b60209788841086146104b457509187918694938286528386019690815f1461045c57506001146103e8575b505050916103c4601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561071d565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104465750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610391565b8054888501860152879550928401928101610411565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610391565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610366565b90503461019c57602060031936011261019c5761015e61032e915f60208551610512816106d4565b82815201523561079f565b823461019c575f60031936011261019c576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461019c575f60031936011261019c576020905160038152f35b823461019c575f60031936011261019c5760209051603c8152f35b91503461019c575f60031936011261019c576001906001549067ffffffffffffffff82116102cf575060206105cb60208360051b018561071d565b818452602084019060015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65f925b84841061060f578751806102af8982610687565b8583819261061c8561075e565b8152019201930192906105fb565b805190600282101561065a57602073ffffffffffffffffffffffffffffffffffffffff9181938552015116910152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b602080820190602083528351809252602060408094019401925f905b8382106106b257505050505090565b90919293948382826106c76001948a5161062a565b01960194939201906106a3565b6040810190811067ffffffffffffffff8211176106f057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106f057604052565b9060405161076b816106d4565b80925460ff8116600281101561065a5760209173ffffffffffffffffffffffffffffffffffffffff91845260081c16910152565b6002548110156107d45760025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6001548110156107d45760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b81810292915f82127f800000000000000000000000000000000000000000000000000000000000000082141661087457818405149015171561087457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81156108f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147f8000000000000000000000000000000000000000000000000000000000000000821416610874570590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b519069ffffffffffffffffffff8216820361019c57565b5f908051600281101561065a5715610a80575b8051600281101561065a57600114610963575090565b905073ffffffffffffffffffffffffffffffffffffffff602080920151166040517f313ce5670000000000000000000000000000000000000000000000000000000081528281600481855afa8015610a3d575f90610a48575b60ff915016604d81116108745782906024604051809481937f07a2d13a000000000000000000000000000000000000000000000000000000008352600a0a60048301525afa918215610a3d575f92610a1357505090565b90809250813d8311610a36575b610a2a818361071d565b8101031261019c575190565b503d610a20565b6040513d5f823e3d90fd5b508281813d8311610a79575b610a5e818361071d565b8101031261019c575160ff8116810361019c5760ff906109bc565b503d610a54565b9050600460a073ffffffffffffffffffffffffffffffffffffffff602084015116604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa908115610a3d575f91610ae2575b509061094d565b905060a0813d60a011610b27575b81610afd60a0938361071d565b8101031261019c57610b0e81610923565b50610b20608060208301519201610923565b505f610adb565b3d9150610af056fea164736f6c6343000819000a290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56360e06040908082523461028357610788803803809161001e82856102ba565b83398101606082820312610283578151906001600160a01b038216808303610283576020848101516001600160401b03949193919085811161028357860192601f938385820112156102835780519787891161024957601f19988a519561008b898c8a85011601886102ba565b8187528882850101116102835787815f92828e9601838a015e8701015201519181156102a957670de0b6b3a764000083116102985760805287516370c264df60e11b8152908590829060049082905afa90811561028e575f9161025d575b5060a05260c0528051938411610249575f54926001938481811c9116801561023f575b8282101461022b578381116101e8575b50809285116001146101885750839450908392915f9461017d575b50501b915f199060031b1c1916175f555b516104aa90816102de8239608051816101e4015260a051818181607a015261021f015260c05181818161019501526104360152f35b015192505f80610137565b9294849081165f8052845f20945f905b888383106101ce57505050106101b6575b505050811b015f55610148565b01515f1960f88460031b161c191690555f80806101a9565b858701518855909601959485019487935090810190610198565b5f8052815f208480880160051c820192848910610222575b0160051c019085905b82811061021757505061011c565b5f8155018590610209565b92508192610200565b634e487b7160e01b5f52602260045260245ffd5b90607f169061010c565b634e487b7160e01b5f52604160045260245ffd5b90508481813d8311610287575b61027481836102ba565b8101031261028357515f6100e9565b5f80fd5b503d61026a565b88513d5f823e3d90fd5b8851634317b02f60e01b8152600490fd5b8851634acd3c5360e11b8152600490fd5b601f909101601f19168101906001600160401b038211908210176102495760405256fe604060808152600480361015610013575f80fd5b5f3560e01c80632336dbe41461040e578063313ce567146103f35780637284e416146102425780638e12c0cd14610208578063bce2e8d9146101b8578063f6fd16ab1461017e5763feaf968c14610068575f80fd5b3461017a575f60031936011261017a577f00000000000000000000000000000000000000000000000000000000000000004281111561017057428103908111610144576100b490610434565b90670de0b6b3a76400009182811161011c5782039182116100f057505f8260a093519282845260208401528201525f60608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082517f6f4c337b000000000000000000000000000000000000000000000000000000008152fd5b6011827f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b506100b45f610434565b5f80fd5b823461017a575f60031936011261017a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b823461017a575f60031936011261017a576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461017a575f60031936011261017a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b50903461017a575f60031936011261017a5780515f80546001918160011c600183169384156103e9575b60209384831086146103bd578287528487019587949392918690821561038457505060011461032d575b5050601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095869203011681019581871067ffffffffffffffff881117610301575091601f9186949385875281865251918280928701528686015e5f85828601015201168101030190f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b82841061036c575050508201015f80610296565b8054848a018601528895508694909301928101610358565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f80610296565b6022897f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026c565b823461017a575f60031936011261017a576020905160128152f35b50903461017a57602060031936011261017a5761042d60209235610434565b9051908152f35b7f000000000000000000000000000000000000000000000000000000000000000090818102918183041490151715610470576301e13380900490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffdfea164736f6c6343000819000a60406101008152346102ba576109a08038038061001b816102be565b92833981019060a0818303126102ba57610034816102e3565b916020906100438284016102e3565b838601516001600160401b0394919291908581116102ba57810195601f938385890112156102ba57875187811161027357601f19986100878288018b1689016102be565b958287528883830101116102ba57815f92898093018389015e8601015260608301519163ffffffff8316938484036102ba57608001519360028510156102ba576001600160a01b03838116156102a95782161561029857156102875760805260a05260c05260e0528051938411610273575f54926001938481811c91168015610269575b8282101461025557838111610212575b50809285116001146101b25750839450908392915f946101a7575b50501b915f199060031b1c1916175f555b516106a890816102f8823960805181818161015e015281816102a701526103ae015260a05181818160e60152818161022f0152610609015260c0518181816101130152818161025c015261035e015260e051818181607e01526105940152f35b015192505f80610136565b9294849081165f8052845f20945f905b888383106101f857505050106101e0575b505050811b015f55610147565b01515f1960f88460031b161c191690555f80806101d3565b8587015188559096019594850194879350908101906101c2565b5f8052815f208480880160051c82019284891061024c575b0160051c019085905b82811061024157505061011b565b5f8155018590610233565b9250819261022a565b634e487b7160e01b5f52602260045260245ffd5b90607f169061010b565b634e487b7160e01b5f52604160045260245ffd5b895163e825678b60e01b8152600490fd5b8a51639067c2a960e01b8152600490fd5b8b51633cc0875b60e21b8152600490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761027357604052565b51906001600160a01b03821682036102ba5756fe6080604081815260049182361015610015575f80fd5b5f3560e01c908163299361a1146105df57508063313ce567146105c45780634886d7f0146105805780637284e416146103d2578063809d7b3114610382578063879ac8f8146103425763feaf968c1461006c575f80fd5b346101dd575f6003193601126101dd577f00000000000000000000000000000000000000000000000000000000000000006002811015610316576101f35780517fa31426d100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692810192835263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016602084810191909152909283908190604001038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101e9575f926101b1575b505f60a092915b80519282845260208401528201525f60608201525f6080820152f35b91506020823d6020116101e1575b816101cc6020938361062d565b810103126101dd579051905f61018e565b5f80fd5b3d91506101bf565b50513d5f823e3d90fd5b80517fabca0eab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692810192835263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016602084810191909152909283908190604001038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101e9575f926102e2575b505f60a09291610195565b91506020823d60201161030e575b816102fd6020938361062d565b810103126101dd579051905f6102d7565b3d91506102f0565b6021837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101dd575f6003193601126101dd576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101dd575f6003193601126101dd576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101dd575f6003193601126101dd5780515f80549060018260011c9060018416938415610576575b602097888410861461054a57509187918694938286528386019690815f146104f2575060011461047e575b5050509161045a601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561062d565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104dc5750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610427565b80548885018601528795509284019281016104a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610427565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f16916103fc565b50346101dd575f6003193601126101dd57517f0000000000000000000000000000000000000000000000000000000000000000600281101561031657602092508152f35b50346101dd575f6003193601126101dd576020905160128152f35b346101dd575f6003193601126101dd5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761066e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffdfea164736f6c6343000819000a610100604090808252346102a157610865803803809161001f82856102d8565b833981016080828203126102a15781516001600160a01b038116928382036102a1576020818101516001600160401b039491908581116102a157830195601f938385890112156102a157875187811161026757601f19988a5195610089868c8a86011601886102d8565b8287528583830101116102a157815f92868093018389015e8601015260608982015191015191600196878410156102a15781156102c757670de0b6b3a764000083116102b657608052895163204f83f960e01b8152908490829060049082905afa9081156102ac575f9161027b575b5060a05260c05260e0528151948511610267575f548481811c9116801561025d575b8282101461024957838111610206575b50809285116001146101a65750839450908392915f9461019b575b50501b915f199060031b1c1916175f555b5161056990816102fc82396080518161021f015260a0518181816089015261025a015260c05181818161013b0152610484015260e05181818161017201526104480152f35b015192505f80610145565b9294849081165f8052845f20945f905b888383106101ec57505050106101d4575b505050811b015f55610156565b01515f1960f88460031b161c191690555f80806101c7565b8587015188559096019594850194879350908101906101b6565b5f8052815f208480880160051c820192848910610240575b0160051c019085905b82811061023557505061012a565b5f8155018590610227565b9250819261021e565b634e487b7160e01b5f52602260045260245ffd5b90607f169061011a565b634e487b7160e01b5f52604160045260245ffd5b90508381813d83116102a5575b61029281836102d8565b810103126102a157515f6100f8565b5f80fd5b503d610288565b8a513d5f823e3d90fd5b8a51634317b02f60e01b8152600490fd5b8a51634acd3c5360e11b8152600490fd5b601f909101601f19168101906001600160401b038211908210176102675760405256fe6080604081815260049182361015610015575f80fd5b5f3560e01c908163313ce5671461042d575080637284e4161461027d5780638e12c0cd14610243578063bce2e8d9146101f3578063d52373e0146101ce578063e04d631e1461015e578063f6fd16ab146101245763feaf968c14610077575f80fd5b34610120575f600319360112610120577f00000000000000000000000000000000000000000000000000000000000000009142831115610111574283039283116100e557505f6100c860a093610446565b9180519282845260208401528201525f60608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5060a091505f6100c881610446565b5f80fd5b5034610120575f60031936011261012057602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610120575f60031936011261012057517f000000000000000000000000000000000000000000000000000000000000000060018110156101a257602092508152f35b6021837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5034610120576020600319360112610120576101ec60209235610446565b9051908152f35b5034610120575f600319360112610120576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610120575f60031936011261012057602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610120575f6003193601126101205780515f80546001918160011c60018316938415610423575b60209384831086146103f757828752848701958794939291869082156103be575050600114610367575b5050601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095869203011681019581871067ffffffffffffffff88111761033b575091601f9186949385875281865251918280928701528686015e5f85828601015201168101030190f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106103a6575050508201015f806102d0565b8054848a018601528895508694909301928101610392565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f806102d0565b6022897f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f16906102a6565b34610120575f6003193601126101205780601260209252f35b7f0000000000000000000000000000000000000000000000000000000000000000600181101561052f57156104825750670de0b6b3a764000090565b7f0000000000000000000000000000000000000000000000000000000000000000908181029181830414901517156104d8576301e133809004670de0b6b3a7640000908181116105055781039081116104d85790565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60046040517f6f4c337b000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea164736f6c6343000819000aa164736f6c6343000819000a