From dd672ea39a9c19c00e9e8078a96e63d8b7ddd105 Mon Sep 17 00:00:00 2001 From: Michael de Hoog Date: Mon, 13 Jan 2025 04:02:49 -1000 Subject: [PATCH] Bump nitro validator after audit (and regenerate bindings) (#58) * Bump nitro-validator library * Re-gen bindings * Bump again * Regen bindings --- bindings/cert_manager.go | 196 ++++++++++++++++++++--- bindings/deploy_chain.go | 237 ++++++++++++++++++++++++++-- bindings/output_oracle.go | 2 +- bindings/portal.go | 2 +- bindings/system_config_global.go | 2 +- contracts/lib/nitro-validator | 2 +- contracts/script/DeploySystem.s.sol | 2 +- register-signer/main.go | 7 +- 8 files changed, 402 insertions(+), 48 deletions(-) diff --git a/bindings/cert_manager.go b/bindings/cert_manager.go index 6d2effe..72a5191 100644 --- a/bindings/cert_manager.go +++ b/bindings/cert_manager.go @@ -40,8 +40,8 @@ type ICertManagerVerifiedCert struct { // CertManagerMetaData contains all meta data concerning the CertManager contract. var CertManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BASIC_CONSTRAINTS_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERT_ALGO_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"EC_PUB_KEY_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KEY_USAGE_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_MAX_PATH_LEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int64\",\"internalType\":\"int64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_NOT_AFTER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_PUB_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_SUBJECT_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"SECP_384_R1_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verified\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCert\",\"inputs\":[{\"name\":\"cert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"ca\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentCertHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICertManager.VerifiedCert\",\"components\":[{\"name\":\"ca\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"notAfter\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxPathLen\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"subjectHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertBundle\",\"inputs\":[{\"name\":\"certificate\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"cabundle\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICertManager.VerifiedCert\",\"components\":[{\"name\":\"ca\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"notAfter\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxPathLen\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"subjectHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"}]", - Bin: "0x608060405234801562000010575f80fd5b50620000b37f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f1855f1b6040518060a001604052806001151581526020016396258ff56001600160401b031681526020015f1960070b81526020017f3c3e2e5f1dd14dee5db88341ba71521e939afdb7881aa24c9f1e1c007a2fa8b65f1b8152602001604051806080016040528060608152602001620062bf606091399052620000b9565b620002dd565b8051602080830151604080850151606086015160808701519251620000e49695929391920162000110565b60408051601f198184030181529181525f848152602081905220906200010b908262000211565b505050565b85151560f81b815260c085811b6001600160c01b031916600183015284901b60098201526011810183905281515f90815b8181101562000160576020818601810151603186840101520162000141565b505f92016031019182525095945050505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200019d57607f821691505b602082108103620001bc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200010b57805f5260205f20601f840160051c81016020851015620001e95750805b601f840160051c820191505b818110156200020a575f8155600101620001f5565b5050505050565b81516001600160401b038111156200022d576200022d62000174565b62000245816200023e845462000188565b84620001c2565b602080601f8311600181146200027b575f8415620002635750858301515b5f19600386901b1c1916600185901b178555620002d5565b5f85815260208120601f198616915b82811015620002ab578886015182559484019460019091019084016200028a565b5085821015620002c957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b615fd480620002eb5f395ff3fe608060405234801561000f575f80fd5b50600436106100da575f3560e01c80639ecc005011610088578063af9bdbc211610063578063af9bdbc214610247578063c59e43e51461026e578063dc28a38d14610281578063f69a82fe14610294575f80fd5b80639ecc0050146101d1578063ab68988d1461020b578063aeb255ea14610220575f80fd5b80635ab70904116100b85780635ab70904146101635780635b608e2a1461018a5780638fb57b62146101aa575f80fd5b8063441b31df146100de5780634519a3521461011857806358e3139e1461013f575b5f80fd5b6101057f3c3e2e5f1dd14dee5db88341ba71521e939afdb7881aa24c9f1e1c007a2fa8b681565b6040519081526020015b60405180910390f35b6101057f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a81565b61014a6396258ff581565b60405167ffffffffffffffff909116815260200161010f565b6101057fbd74344bb507daeb9ed315bc535f24a236ccab72c5cd6945fb0efe5c037e209781565b61019d6101983660046154c9565b6102bb565b60405161010f91906155c6565b6101057f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f18581565b6101f87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405160079190910b815260200161010f565b61021361047a565b60405161010f9190615617565b6101057f45529d8772b07ebd6d507a1680da791f4a2192882bf89d518801579f7a5167d281565b6101057f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e81565b61021361027c366004615629565b610496565b61019d61028f366004615640565b61052d565b6101057fb60fee1fd85f867dd7c8d16884a49a20287ebe4c0fb49294e9825988aa8e42b481565b6040805160a080820183525f8083526020808401829052838501829052606080850183905260808086018290528651948501875283855291840183905294830182905282850182905282019390935290915b8381101561045b575f8585838181106103285761032861569a565b905060200281019061033a91906156c7565b604051610348929190615728565b604051809103902090505f82118061037f57507f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f18581145b6103ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f526f6f742043412063657274206e6f74206d61746368696e670000000000000060448201526064015b60405180910390fd5b6104508686848181106103ff576103ff61569a565b905060200281019061041191906156c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508592506001915087905061057c565b92505060010161030d565b5061046f8586805190602001205f8461057c565b9150505b9392505050565b604051806080016040528060608152602001615e786060913981565b5f60208190529081526040902080546104ae90615737565b80601f01602080910402602001604051908101604052809291908181526020018280546104da90615737565b80156105255780601f106104fc57610100808354040283529160200191610525565b820191905f5260205f20905b81548152906001019060200180831161050857829003601f168201915b505050505081565b6040805160a0810182525f8082526020820181905291810182905260608082019290925260808101919091526105748485805190602001208561056f866109e2565b61057c565b949350505050565b6040805160a0810182525f8082526020820181905291810182905260608082019290925260808101919091527f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f1858414610796575f8260800151511161063d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f706172656e74206365727420756e76657269666965640000000000000000000060448201526064016103e1565b42826020015167ffffffffffffffff1610156106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f706172656e74206365727420657870697265640000000000000000000000000060448201526064016103e1565b815161071d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f706172656e742063657274206973206e6f74206120434100000000000000000060448201526064016103e1565b8215806107305750604082015160070b15155b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6d6178506174684c656e2065786365656465640000000000000000000000000060448201526064016103e1565b5f6107a0856109e2565b90508060800151515f1461089b5742816020015167ffffffffffffffff161015610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f636572742065787069726564000000000000000000000000000000000000000060448201526064016103e1565b8051151584151514610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f63657274206973206e6f7420612043410000000000000000000000000000000060448201526064016103e1565b9050610574565b5f6108a587610b5a565b90505f6108b28883610b6b565b90505f805f805f6108c48d878d610c39565b94509450945094509450828a606001511461093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f697373756572202f207375626a656374206d69736d617463680000000000000060448201526064016103e1565b5f8a6040015160070b13801561096757505f8460070b12806109675750896040015160070b8460070b12155b156109805760018a6040015161097d91906157b5565b93505b61098f8d878c60800151610dd2565b6040518060a001604052808c151581526020018667ffffffffffffffff1681526020018560070b81526020018381526020018281525097506109d18c89610f96565b50959b9a5050505050505050505050565b6040805160a0810182525f8082526020808301829052828401829052606080840183905260808401528482528190529182208054919291610a2290615737565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90615737565b8015610a995780601f10610a7057610100808354040283529160200191610a99565b820191905f5260205f20905b815481529060010190602001808311610a7c57829003601f168201915b5050505050905080515f03610ae45750506040805160a0810182525f808252602080830182905282840182905260608301829052835190810190935282526080810191909152919050565b600181015160098201516011830151603180850151855190915f91610b179190610b0f9082906157fb565b889190611007565b6040805160a08101825260ff9097161515875267ffffffffffffffff909516602087015260079390930b9385019390935260608401526080830152509392505050565b5f610b65825f6110e2565b92915050565b5f8269ffffffffffffffffffff831681518110610b8a57610b8a61569a565b01602001517f200000000000000000000000000000000000000000000000000000000000000090811614610c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120636f6e737472756374656420747970650000000000000000000060448201526064016103e1565b61047383605084901c69ffffffffffffffffffff166110e2565b6110e2565b5f808080606081610c4a8989610b6b565b90505f610c578a83610b6b565b90505f610c648b8461128f565b90505f610c718c8361128f565b90507f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e610cc5605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff168f919091016020012090565b14610d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636572742073696720616c676f000000000000000000000060448201526064016103e1565b5f610d378d856112b5565b905080600214610da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f76657273696f6e2073686f756c6420626520330000000000000000000000000060448201526064016103e1565b610dae8d838d611481565b809a50819b50829c50839d50849e5050505050505050505050939792965093509350565b5f610ddd848461128f565b90507f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e610e31605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff1687919091016020012090565b14610e98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636572742073696720616c676f000000000000000000000060448201526064016103e1565b5f610eb88569ffffffffffffffffffff8616610eb387611654565b611698565b90505f610ec5868461128f565b90505f610ed287836117bf565b90505f610edf8883611996565b90505f610eec8983610b6b565b90505f610ef98a8361128f565b90505f80610f078c856119b1565b90925090505f80610f188e866119b1565b604051608087811b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811660208401526030830188905284821b166050830152606082018390529294509092505f91016040516020818303038152906040529050610f858d8c83611c09565b505050505050505050505050505050565b8051602080830151604080850151606086015160808701519251610fbf9695929391920161580e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181525f8481526020819052209061100290826158c0565b505050565b825160609061101683856159dc565b111561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016103e1565b8167ffffffffffffffff811115611097576110976153f5565b6040519080825280601f01601f1916602001820160405280156110c1576020820181803683370190505b509050602080820190858501016110d9828286611c82565b50509392505050565b5f8080846110f18560016159dc565b815181106111015761110161569a565b01602001517f8000000000000000000000000000000000000000000000000000000000000000165f03611166578461113a8560016159dc565b8151811061114a5761114a61569a565b016020015160f81c915061115f8460026159dc565b9050611243565b5f856111738660016159dc565b815181106111835761118361569a565b60209101015160f81c607f16905060018190036111c557856111a68660026159dc565b815181106111b6576111b661569a565b016020015160f81c9250611226565b8060ff166002036111f0576111e56111de8660026159dc565b8790611cf6565b61ffff169250611226565b6111fb8160206159ef565b611206906008615a08565b60ff16611221876112188860026159dc565b8460ff16611d78565b901c92505b60ff81166112358660026159dc565b61123f91906159dc565b9150505b73ffffffffffffffffffff00000000000000000000605082901b1684177dffffffffffffffffffff000000000000000000000000000000000000000060a084901b161795945050505050565b5f61047383610c3469ffffffffffffffffffff60a086901c811690605087901c166159dc565b5f8269ffffffffffffffffffff8316815181106112d4576112d461569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f020000000000000000000000000000000000000000000000000000000000000014611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f74207479706520494e54454745520000000000000000000000000000000060448201526064016103e1565b82605083901c69ffffffffffffffffffff16815181106113a6576113a661569a565b01602001517f80000000000000000000000000000000000000000000000000000000000000001615611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420706f736974697665000000000000000000000000000000000000000060448201526064016103e1565b69ffffffffffffffffffff60a083901c166114508160206157fb565b61145b906008615a2b565b61147785605086901c69ffffffffffffffffffff165b84611d78565b901c949350505050565b5f808080606081611492898961128f565b90506114c6605082901c69ffffffffffffffffffff1660a083901c69ffffffffffffffffffff165b8b919091016020012090565b93505f6114d38a8361128f565b90505f6114e08b8361128f565b9050611513605082901c69ffffffffffffffffffff1660a083901c69ffffffffffffffffffff168d919091016020012090565b94505f6115208c8361128f565b90505f61152d8d8361128f565b90508c69ffffffffffffffffffff82168151811061154d5761154d61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f8100000000000000000000000000000000000000000000000000000000000000036115a7576115a48d8261128f565b90505b8c69ffffffffffffffffffff8216815181106115c5576115c561569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f82000000000000000000000000000000000000000000000000000000000000000361161f5761161c8d8261128f565b90505b6116298d85611dd4565b99506116368d828d611eef565b98506116428d836123e1565b95505050505050939792965093509350565b5f69ffffffffffffffffffff8216605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff1661168e91906159dc565b610b6591906157fb565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e083015290611723858585846125d0565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b5f8269ffffffffffffffffffff8316815181106117de576117de61569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f03000000000000000000000000000000000000000000000000000000000000001461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e470000000000000000000000000060448201526064016103e1565b82605083901c69ffffffffffffffffffff16815181106118b0576118b061569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f6e2d302d7061646465642042495420535452494e4700000000000000000060448201526064016103e1565b61047369ffffffffffffffffffff8316605084901c69ffffffffffffffffffff1661196a9060016159dc565b611985600169ffffffffffffffffffff60a088901c166157fb565b60a01b60509190911b919091171790565b5f61047383605084901c69ffffffffffffffffffff166110e2565b5f808369ffffffffffffffffffff8416815181106119d1576119d161569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f020000000000000000000000000000000000000000000000000000000000000014611a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f74207479706520494e54454745520000000000000000000000000000000060448201526064016103e1565b83605084901c69ffffffffffffffffffff1681518110611aa357611aa361569a565b01602001517f80000000000000000000000000000000000000000000000000000000000000001615611b31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420706f736974697665000000000000000000000000000000000000000060448201526064016103e1565b5f60a084901c69ffffffffffffffffffff1690505f605085901c69ffffffffffffffffffff169050858181518110611b6b57611b6b61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000165f03611bb45780611ba281615a42565b9150508180611bb090615a79565b9250505b6080611bc287836010611d78565b901c611bcf8360306157fb565b611bda906008615a2b565b611bf988611be98560106159dc565b611bf46010886157fb565b611d78565b9195501c925050505b9250929050565b611c1c611c14612e35565b838386612f50565b611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642073696700000000000000000000000000000000000000000060448201526064016103e1565b60208110611cba5781518352611c996020846159dc565b9250611ca66020836159dc565b9150611cb36020826157fb565b9050611c82565b8015611002575f6001611cce8360206157fb565b611cda90610100615bcb565b611ce491906157fb565b83518551821691191617845250505050565b5f611d028260026159dc565b83511015611d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016103e1565b50016020015160f01c90565b5f6020821115611d86575f80fd5b8351611d9283856159dc565b1115611d9c575f80fd5b506020919092018101519190036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01191690565b5f80611de08484610b6b565b90505f611ded858361128f565b90505f611dfa86846131e9565b9050611e0686836131e9565b935042811115611e72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6365727469666963617465206e6f742076616c6964207965740000000000000060448201526064016103e1565b428467ffffffffffffffff161015611ee6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6365727469666963617465206e6f742076616c696420616e796d6f726500000060448201526064016103e1565b50505092915050565b5f8369ffffffffffffffffffff841681518110611f0e57611f0e61569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fa30000000000000000000000000000000000000000000000000000000000000014611fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c696420657874656e73696f6e73000000000000000000000000000060448201526064016103e1565b611fc88484610b6b565b92505f611fd58585610b6b565b90505f611ff969ffffffffffffffffffff60a087901c811690605088901c166159dc565b90505f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b5f61202c8986610b6b565b90505f612060605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff168c919091016020012090565b90507f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a8114806120af57507f45529d8772b07ebd6d507a1680da791f4a2192882bf89d518801579f7a5167d281145b1561220d575f6120bf8b8461128f565b90508a69ffffffffffffffffffff8216815181106120df576120df61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f0100000000000000000000000000000000000000000000000000000000000000036121b35760a081901c69ffffffffffffffffffff166001146121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420637269746963616c20626f6f6c2076616c7565000000000060448201526064016103e1565b6121b08b8261128f565b90505b6121bd8b826135e5565b90507f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a82036121fc57600194506121f58b828b6136b4565b975061220b565b6001935061220b8b828b61390f565b505b8461222f69ffffffffffffffffffff60a089901c81169060508a901c166159dc565b0361223b57505061224e565b6122458a8761128f565b95505050612021565b816122b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6261736963436f6e73747261696e7473206e6f7420666f756e6400000000000060448201526064016103e1565b8061231c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6b65795573616765206e6f7420666f756e64000000000000000000000000000060448201526064016103e1565b858061234a57508460070b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b6123d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f6d6178506174684c656e206d75737420626520756e646566696e656420666f7260448201527f20636c69656e742063657274000000000000000000000000000000000000000060648201526084016103e1565b505050509392505050565b60605f6123ee8484610b6b565b90505f6123fb8583610b6b565b90505f612408868361128f565b90505f612415878561128f565b90505f61242288836117bf565b90507fb60fee1fd85f867dd7c8d16884a49a20287ebe4c0fb49294e9825988aa8e42b461246f605086901c69ffffffffffffffffffff1660a087901c69ffffffffffffffffffff166114ba565b146124d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206365727420616c676f20696400000000000000000000000060448201526064016103e1565b7fbd74344bb507daeb9ed315bc535f24a236ccab72c5cd6945fb0efe5c037e2097612521605085901c69ffffffffffffffffffff1660a086901c69ffffffffffffffffffff166114ba565b14612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206365727420616c676f20706172616d00000000000000000060448201526064016103e1565b5f6125aa69ffffffffffffffffffff60a084901c811690605085901c166159dc565b90506125c36125ba6060836157fb565b8a906060611007565b9998505050505050505050565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201525f612a8e868686613a07565b905060808151612a9e9190615c03565b15612b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f520000000000000000000000000000000000000060448201526064016103e1565b612b0d61534c565b612b1561536b565b612b1d61538a565b5f612b29608089615c16565b612b34906080615a2b565b90505f5b85518201811015612e285781811015612b5d57612b588b84838d01613b11565b612b6a565b612b6a8684848403613b11565b5f5b6010811015612bba57838160108110612b8757612b8761569a565b6020020151868260508110612b9e57612b9e61569a565b67ffffffffffffffff9092166020929092020152600101612b6c565b5060105b6050811015612c7057856010820360508110612bdc57612bdc61569a565b6020020151612c0387600f840360508110612bf957612bf961569a565b6020020151613b69565b876007840360508110612c1857612c1861569a565b6020020151612c3f896002860360508110612c3557612c3561569a565b6020020151613b97565b010101868260508110612c5457612c5461569a565b67ffffffffffffffff9092166020929092020152600101612bbe565b505f5b6008811015612cc157888160088110612c8e57612c8e61569a565b6020020151858260088110612ca557612ca561569a565b67ffffffffffffffff9092166020929092020152600101612c73565b505f5b6050811015612dcc575f868260508110612ce057612ce061569a565b6020020151898360508110612cf757612cf761569a565b6020020151608088015160a089015160c08a01518219169116186080890151612d1f90613bbd565b89600760200201510101010190505f612d57878260200201518860016020020151896002602002015180821690831691909216181890565b8751612d6290613bdf565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612cc4565b505f5b6008811015612e1f57848160088110612dea57612dea61569a565b6020020151898260088110612e0157612e0161569a565b6020020180519190910167ffffffffffffffff169052600101612dcf565b50608001612b38565b5050505050505050505050565b612e756040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615f386101008401398152602001604051806060016040528060308152602001615e18603091398152602001604051806060016040528060308152602001615f08603091398152602001604051806060016040528060308152602001615e48603091398152602001604051806060016040528060308152602001615f98603091398152602001604051806060016040528060308152602001615f68603091398152602001604051806060016040528060308152602001615ed8603091399052919050565b5f612f7860405180608001604052805f81526020015f81526020015f81526020015f81525090565b612f8184613c01565b60208301528152612f9183613c01565b6060830152604080830191909152805160e0810190915286515f91908190612fb890613cb1565b8152602001612fca8960200151613cb1565b8152602001612fdc8960400151613cb1565b8152602001612fee8960600151613cb1565b81526020016130008960800151613cb1565b81526020016130128960a00151613cb1565b81526020016130248960c00151613cb1565b81525090505f6130378260800151613d45565b835160208101519051919250159015168061306257505f61305f845f01518460a00151613dba565b12155b8061307f575061307f83602001515f602082015191511591141690565b8061309a57505f61309884602001518460c00151613dba565b135b156130aa575f9350505050610574565b6130cb818360800151845f0151856020015187604001518860600151613e5f565b6130da575f9350505050610574565b8651603081101561311d57604080516030808252606082019092525f916020820181803683375091925061311a91505060208a0183830360500184613f3d565b97505b505f61313b8261312c8a613cb1565b86602001518660a00151613f4b565b90505f61315583865f015187602001518760a00151613f4b565b90505f613162600361405b565b90505f61318c85876080015184895f01518a604001518b606001518d604001518e6060015161407b565b90506131a485876080015184895f0151858989614462565b9050809450819550505050506131db6131c38484848860800151613f4b565b86516020808201519083015191519251911491141690565b9a9950505050505050505050565b5f8069ffffffffffffffffffff605084901c81169060a085901c16600d81900361325057600560308784815181106132235761322361569a565b0160200151613235919060f81c6159ef565b60ff16106132455761076c613249565b6107d05b92506132dd565b60308661325e8460016159dc565b8151811061326e5761326e61569a565b0160200151613280919060f81c6159ef565b61328b906064615a08565b60ff1660308784815181106132a2576132a261569a565b01602001516132b4919060f81c6159ef565b6132c39060ff166103e8615c29565b6132cd9190615c47565b92506132da6002836159dc565b91505b6030866132eb8460016159dc565b815181106132fb576132fb61569a565b602001015160f81c60f81b60f81c603088858151811061331d5761331d61569a565b016020015161332f919060f81c6159ef565b61333a90600a615a08565b6133449190615c62565b61334e91906159ef565b61335b9060ff1684615c47565b92505f60308761336c8560036159dc565b8151811061337c5761337c61569a565b016020015160f81c6030896133928760026159dc565b815181106133a2576133a261569a565b01602001516133b4919060f81c6159ef565b6133bf90600a615a08565b6133c99190615c62565b6133d391906159ef565b90505f6030886133e48660056159dc565b815181106133f4576133f461569a565b016020015160f81c60308a61340a8860046159dc565b8151811061341a5761341a61569a565b016020015161342c919060f81c6159ef565b61343790600a615a08565b6134419190615c62565b61344b91906159ef565b90505f60308961345c8760076159dc565b8151811061346c5761346c61569a565b016020015160f81c60308b6134828960066159dc565b815181106134925761349261569a565b01602001516134a4919060f81c6159ef565b6134af90600a615a08565b6134b99190615c62565b6134c391906159ef565b90505f60308a6134d48860096159dc565b815181106134e4576134e461569a565b016020015160f81c60308c6134fa8a60086159dc565b8151811061350a5761350a61569a565b016020015161351c919060f81c6159ef565b61352790600a615a08565b6135319190615c62565b61353b91906159ef565b90505f60308b61354c89600b6159dc565b8151811061355c5761355c61569a565b016020015160f81c60308d6135728b600a6159dc565b815181106135825761358261569a565b0160200151613594919060f81c6159ef565b61359f90600a615a08565b6135a99190615c62565b6135b391906159ef565b90506135d68861ffff168660ff168660ff168660ff168660ff168660ff166145e6565b9b9a5050505050505050505050565b5f8269ffffffffffffffffffff8316815181106136045761360461569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f040000000000000000000000000000000000000000000000000000000000000014610c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f742074797065204f4354455420535452494e47000000000000000000000060448201526064016103e1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6136e08585610b6b565b90505f8569ffffffffffffffffffff8316815181106137015761370161569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f0100000000000000000000000000000000000000000000000000000000000000036138235760a082901c69ffffffffffffffffffff166001146137c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206973434120626f6f6c2076616c756500000000000000000060448201526064016103e1565b85605083901c69ffffffffffffffffffff16815181106137ea576137ea61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000908116149050613820868361128f565b91505b80151584151514613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f69734341206d757374206265207472756520666f72204341206365727473000060448201526064016103e1565b8569ffffffffffffffffffff8316815181106138ae576138ae61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f0200000000000000000000000000000000000000000000000000000000000000036110d95761390586836112b5565b9695505050505050565b5f61391a8484614758565b90508115613994578060041660041461398f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f436572745369676e206d7573742062652070726573656e74000000000000000060448201526064016103e1565b613a01565b80608016608014613a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469676974616c5369676e6174757265206d7573742062652070726573656e7460448201526064016103e1565b50505050565b60605f613a15836008615a2b565b60c01b90505f613a26608085615c03565b90505f6070821015613a4457613a3d8260776157fb565b9050613a52565b613a4f8260f76157fb565b90505b5f8167ffffffffffffffff811115613a6c57613a6c6153f5565b6040519080825280601f01601f191660200182016040528015613a96576020820181803683370190505b5090505f613aba84613aa8898b6159dc565b613ab291906157fb565b8a9086611007565b604051909150613af49082907f80000000000000000000000000000000000000000000000000000000000000009085908990602001615c7b565b604051602081830303815290604052955050505050509392505050565b5f5b6010811015613a0157613b3b613b2a826008615a2b565b613b3490846159dc565b859061487a565b838260108110613b4d57613b4d61569a565b67ffffffffffffffff9092166020929092020152600101613b13565b5f60078267ffffffffffffffff16901c613b848360086148fc565b613b8f8460016148fc565b181892915050565b5f60068267ffffffffffffffff16901c613bb283603d6148fc565b613b8f8460136148fc565b5f613bc98260296148fc565b613bd48360126148fc565b613b8f84600e6148fc565b5f613beb8260276148fc565b613bf68360226148fc565b613b8f84601c6148fc565b5f808251606014613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203736380000000000000000000000000000000000000060448201526064016103e1565b604080516080810182529250820190505f825260208301516010830152603083015160208301525f81526050830151601082015260608301516020820152915091565b5f8151603014613d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203338340000000000000000000000000000000000000060448201526064016103e1565b6040805180820190915290505f81526020820151601082015260308201516020820152919050565b5f613d5861036060408051918201905290565b6060610120820152602061014082018190526040610160830181905260016101e0840152845161020084015284820180516102208501526102408401829052610260840192909252610280830152925161030082015291516103208301525090565b815181515f919080821115613dd457600192505050610b65565b80821015613e06577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610b65565b50506020838101519083015180821115613e2557600192505050610b65565b80821015613e57577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610b65565b505092915050565b602082015182515f911590151680613e8557506020868101519084015187518551149114165b80613e97575060208201518251159015165b80613eb057506020868101519083015187518451149114165b15613ebc57505f613905565b5f613ec988846002614938565b90505f613ed889866003614938565b6020880151885191925015901516613f0257613eff81613ef98b888b61497c565b8a614a6d565b90505b6020860151865115901516613f1f57613f1c81878a614a6d565b90505b60208181015190830151915192519114911416979650505050505050565b8082828560045afa50505050565b5f613f57858484614acf565b905061401c8482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b5f61406c6040808051918201905290565b5f815260208101929092525090565b6140836153a9565b61408c85614b5c565b61409585614b5c565b61409f600161405b565b6080840180516040810192909252602082810193909352929052905180519101516140df918b918b918b918b91908760045b602002015160400151614b82565b61010084018051604080820193909352602081810194909452939093526080840151805181840151919092015193518051930151614137948e948e948e948e949193909290918a60085b602002015160400151614d38565b610180840151604081019190915260208101919091525261415783614b5c565b61416083614b5c565b61416a600161405b565b6020808501805160408101939093528282019390935292905251805191015161419e918b918b918b918b91908760016140d1565b60408085015190810191909152602081810192909252919091528082015180519101516141f6918b918b918b918b91908760015b60209081029190910151604090810151908a015180519201519091908a6002614129565b60608401516040810191909152602081810192909252919091526080820151805191015161424d918b918b918b918b91908760045b60209081029190910151604001518982015180519201519091908a6001614129565b60a084015160408101919091526020818101929092529190915260808201518051910151614286918b918b918b918b91908760046141d2565b60c0840151604081019190915260208181019290925291909152608082015180519101516142de918b918b918b918b91908760045b602090810291909101516040015160608a015180519201519091908a6003614129565b60e08401516040810191909152602081810192909252919091526101008201518051910151614318918b918b918b918b919087600861422b565b6101208401516040810191909152602081810192909252919091526101008201518051910151614353918b918b918b918b91908760086141d2565b610140840151604081019190915260208181019290925291909152610100820151805191015161438e918b918b918b918b91908760086142bb565b61016084015160408101919091526020818101929092529190915261018082015180519101516143c9918b918b918b918b919087600c61422b565b6101a08401516040810191909152602081810192909252919091526101808201518051910151614404918b918b918b918b919087600c6141d2565b6101c0840151604081019190915260208181019290925291909152610180820151805191015161443f918b918b918b918b919087600c6142bb565b6101e0840151604081019190915260208101919091525298975050505050505050565b815181515f918291829182916144778361405b565b95506144825f61405b565b945061448e600161405b565b935060025b60b88111614537576144aa8e8e8e8e8b8b8b614b82565b919850965094506144c08e8e8e8e8b8b8b614b82565b9198509650945060b881900382811c6003169084901c60021b600c16179350831561452f575f8a85601081106144f8576144f861569a565b602002015190506145268f8f8f8f855f5b6020020151866001602002015187600260200201518f8f8f614d38565b91995097509550505b600201614493565b5050506020868101519086015160025b61010081116145d45761455f8e8e8e8e8b8b8b614b82565b919850965094506145758e8e8e8e8b8b8b614b82565b9198509650945061010081900382811c6003169084901c60021b600c1617935083156145cc575f8a85601081106145ae576145ae61569a565b602002015190506145c38f8f8f8f855f614509565b91995097509550505b600201614547565b505050505b9750975097945050505050565b5f6107b28710156145f5575f80fd5b8686865f62253d8c60046064600c61460e600e88615d06565b6146189190615d25565b61462488611324615d8c565b61462e9190615d8c565b6146389190615d25565b614643906003615dab565b61464d9190615d25565b600c8061465b600e88615d06565b6146659190615d25565b61467090600c615dab565b61467b600288615d06565b6146859190615d06565b6146919061016f615dab565b61469b9190615d25565b6004600c6146aa600e89615d06565b6146b49190615d25565b6146c0896112c0615d8c565b6146ca9190615d8c565b6146d6906105b5615dab565b6146e09190615d25565b6146ec617d4b87615d06565b6146f69190615d8c565b6147009190615d8c565b61470a9190615d06565b6147149190615d06565b9050858789614724846018615a2b565b61472e91906159dc565b61473990603c615a2b565b61474391906159dc565b61474e90603c615a2b565b6135d691906159dc565b5f8269ffffffffffffffffffff8316815181106147775761477761569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f030000000000000000000000000000000000000000000000000000000000000014614827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e470000000000000000000000000060448201526064016103e1565b5f614843600169ffffffffffffffffffff60a086901c166157fb565b90506148508160206157fb565b61485b906008615a2b565b6114778561147169ffffffffffffffffffff605088901c1660016159dc565b5f6148868260086159dc565b835110156148f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016103e1565b50016020015160c01c90565b5f67ffffffffffffffff8381169083161c614918836040615df6565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b5f6149496040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b5f61498d6040808051918201905290565b9050614a53838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b5f614a7e6040808051918201905290565b6020858101518582015181019183018290528551875101911001815290505f614aa78284613dba565b1261047357602080820180519184015182039081905283518351929091119103038152610473565b5f614ae06040808051918201905290565b9050614b1482614af0600261405b565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b5f614b6d6040808051918201905290565b90508151815260208201516020820152919050565b5f805f614b98865f602082015191511591141690565b8015614bab575060208501518551159015165b15614bd757614bb95f61405b565b614bc25f61405b565b614bcc600161405b565b9250925092506145d9565b5f614be38b878761497c565b9050614bef818b614e8c565b614bfa8b828961497c565b9350614c078b8588614ed9565b614c11848b614e8c565b614c1d8b886002614938565b9650614c2a8b888b61497c565b9250614c388b866002614938565b9450614c458b868a614ed9565b614c5083868c614fb5565b614c5c8b846002614938565b9150614c6987858c61500a565b5f614c748b89615029565b9050614c8183828d614fb5565b6020808c015181850151810391830182905284518d51929091109103038152614cac8886838e615060565b614cb78c8986614ed9565b614cc28c888461497c565b9650614cd08c8860026150af565b614cda878c614e8c565b6020808c015181890151810391830182905288518d51929091109103038152614d058489838e615060565b614d118c8684866150de565b614d1e8c848460026151bb565b614d298c8484614ed9565b50509750975097945050505050565b5f805f614d4e895f602082015191511591141690565b8015614d61575060208801518851159015165b15614d8c57614d6f86614b5c565b614d7886614b5c565b614d8186614b5c565b925092509250614e7c565b60208601518651159015168015614daa575060208501518551159015165b15614dca57614db889614b5c565b614dc189614b5c565b614d8189614b5c565b614dd58d898661497c565b9250614de28d868961497c565b9150614def8d8a8661497c565b9050614dfc8d878961497c565b6020808201519083015182518451939850911491141615614e595760208281015190840151835185511491141615614e3d57614d818d8d8d8d8d8d8d614b82565b614e465f61405b565b614e4f5f61405b565b614d81600161405b565b614e648d888661497c565b9950614e758d8b838f8987896151eb565b9250925092505b9a509a509a975050505050505050565b6020820180518351600190811b60ff83901c1785521b90525f614eaf8383613dba565b12614ed55760208281018051918301518203908190529151835191909211919003039052565b5050565b614f9d828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614fd78383602082810180519183015182019081905291518351019110019052565b5f614fe28483613dba565b1261100257602080840180519183015182039081905282518551929091119103038352505050565b6020808301518351600190811b60ff83901c1786521b90840152614fd7565b5f61503a6040808051918201905290565b602080850151818501518103918301829052845186519290911091030381529050610b65565b602083810151838201518101918601829052835185510191100184525f6150878583613dba565b12613a0157602080850180519183015182039081905282518651929091119103038452613a01565b610240830192508151836060015260208201518360800152808360a001526040826101008560055afa50505050565b6151a2828261018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040836101208660055afa5050505050565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b5f805f806151f98887615029565b905061520685828a614a6d565b6020808a0151818a0151810391840182905289518b51929091109103038252925061523289828a614a6d565b93505f6152418c866002614938565b905061524f8c856002614938565b925061525c8c848d614ed9565b615267888b8b614a6d565b97506152748c8983614ed9565b6020808a0151818a0151810391840182905289518b5192909110910303825261529e83838b614fb5565b5f6152aa8d838861497c565b90506152b78d8786614ed9565b6152c28d8c8461497c565b6020808c015181870151810391860182905286518d519290911091030384529a506152ee8b848c614fb5565b6152f98d868d614ed9565b6153048d888361497c565b6020808c015181830151810391860182905282518d51929091109103038452965061533085848c614fb5565b61533c8d85838f6150de565b5050509750975097945050505050565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061020001604052806010905b6153c16153d7565b8152602001906001900390816153b95790505090565b60405180606001604052806003906020820280368337509192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615431575f80fd5b813567ffffffffffffffff8082111561544c5761544c6153f5565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615492576154926153f5565b816040528381528660208588010111156154aa575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f604084860312156154db575f80fd5b833567ffffffffffffffff808211156154f2575f80fd5b6154fe87838801615422565b94506020860135915080821115615513575f80fd5b818601915086601f830112615526575f80fd5b813581811115615534575f80fd5b8760208260051b8501011115615548575f80fd5b6020830194508093505050509250925092565b5f5b8381101561557557818101518382015260200161555d565b50505f910152565b5f815180845261559481602086016020860161555b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815281511515602082015267ffffffffffffffff6020830151166040820152604082015160070b6060820152606082015160808201525f608083015160a08084015261057460c084018261557d565b602081525f610473602083018461557d565b5f60208284031215615639575f80fd5b5035919050565b5f805f60608486031215615652575f80fd5b833567ffffffffffffffff811115615668575f80fd5b61567486828701615422565b93505060208401358015158114615689575f80fd5b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126156fa575f80fd5b83018035915067ffffffffffffffff821115615714575f80fd5b602001915036819003821315611c02575f80fd5b818382375f9101908152919050565b600181811c9082168061574b57607f821691505b602082108103615782577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600782810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffff80000000000000008112677fffffffffffffff82131715610b6557610b65615788565b81810381811115610b6557610b65615788565b85151560f81b81527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1660018201528360c01b60098201528260118201525f825161586481603185016020870161555b565b919091016031019695505050505050565b601f82111561100257805f5260205f20601f840160051c8101602085101561589a5750805b601f840160051c820191505b818110156158b9575f81556001016158a6565b5050505050565b815167ffffffffffffffff8111156158da576158da6153f5565b6158ee816158e88454615737565b84615875565b602080601f831160018114615940575f841561590a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556159d4565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561598c5788860151825594840194600190910190840161596d565b50858210156159c857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820180821115610b6557610b65615788565b60ff8281168282160390811115610b6557610b65615788565b60ff8181168382160290811690818114615a2457615a24615788565b5092915050565b8082028115828204841417610b6557610b65615788565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a7257615a72615788565b5060010190565b5f81615a8757615a87615788565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181815b80851115615b0657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615aec57615aec615788565b80851615615af957918102915b93841c9390800290615ab2565b509250929050565b5f82615b1c57506001610b65565b81615b2857505f610b65565b8160018114615b3e5760028114615b4857615b64565b6001915050610b65565b60ff841115615b5957615b59615788565b50506001821b610b65565b5060208310610133831016604e8410600b8410161715615b87575081810a610b65565b615b918383615aad565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615bc357615bc3615788565b029392505050565b5f6104738383615b0e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82615c1157615c11615bd6565b500690565b5f82615c2457615c24615bd6565b500490565b61ffff818116838216028082169190828114613e5757613e57615788565b61ffff818116838216019080821115615a2457615a24615788565b60ff8181168382160190811115610b6557610b65615788565b5f8551615c8c818460208a0161555b565b7fff0000000000000000000000000000000000000000000000000000000000000086169083019081528451615cc881600184016020890161555b565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b8181035f831280158383131683831282161715615a2457615a24615788565b5f82615d3357615d33615bd6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615d8757615d87615788565b500590565b8082018281125f831280158216821582161715613e5757613e57615788565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615de257615de2615788565b8181058314821517610b6557610b65615788565b67ffffffffffffffff828116828216039080821115615a2457615a2461578856feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5ffc0254eba608c1f36870e29ada90be46383292736e894bfff672d989444b5051e534a4b1f6dbe3c0bc581a32b7b176070ede12d69a3fea211b66e752cf7dd1dd095f6f1370f4170843d9dc100121e4cf63012809664487c9796284304dc53ff4ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c6343000818000afc0254eba608c1f36870e29ada90be46383292736e894bfff672d989444b5051e534a4b1f6dbe3c0bc581a32b7b176070ede12d69a3fea211b66e752cf7dd1dd095f6f1370f4170843d9dc100121e4cf63012809664487c9796284304dc53ff4", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BASIC_CONSTRAINTS_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERT_ALGO_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"EC_PUB_KEY_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KEY_USAGE_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_MAX_PATH_LEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int64\",\"internalType\":\"int64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_NOT_AFTER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_PUB_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_SUBJECT_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"SECP_384_R1_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verified\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCACert\",\"inputs\":[{\"name\":\"cert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"parentCertHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyClientCert\",\"inputs\":[{\"name\":\"cert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"parentCertHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICertManager.VerifiedCert\",\"components\":[{\"name\":\"ca\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"notAfter\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxPathLen\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"subjectHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"CertVerified\",\"inputs\":[{\"name\":\"certHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false}]", + Bin: "0x608060405234801562000010575f80fd5b50620000b37f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f1855f1b6040518060a001604052806001151581526020016396258ff56001600160401b031681526020015f1960070b81526020017f3c3e2e5f1dd14dee5db88341ba71521e939afdb7881aa24c9f1e1c007a2fa8b65f1b8152602001604051806080016040528060608152602001620062a0606091399052620000b9565b620002dd565b8051602080830151604080850151606086015160808701519251620000e49695929391920162000110565b60408051601f198184030181529181525f848152602081905220906200010b908262000211565b505050565b85151560f81b815260c085811b6001600160c01b031916600183015284901b60098201526011810183905281515f90815b8181101562000160576020818601810151603186840101520162000141565b505f92016031019182525095945050505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200019d57607f821691505b602082108103620001bc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200010b57805f5260205f20601f840160051c81016020851015620001e95750805b601f840160051c820191505b818110156200020a575f8155600101620001f5565b5050505050565b81516001600160401b038111156200022d576200022d62000174565b62000245816200023e845462000188565b84620001c2565b602080601f8311600181146200027b575f8415620002635750858301515b5f19600386901b1c1916600185901b178555620002d5565b5f85815260208120601f198616915b82811015620002ab578886015182559484019460019091019084016200028a565b5085821015620002c957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b615fb580620002eb5f395ff3fe608060405234801561000f575f80fd5b50600436106100da575f3560e01c80638fb57b6211610088578063aeb255ea11610063578063aeb255ea14610233578063af9bdbc21461025a578063c59e43e514610281578063f69a82fe14610294575f80fd5b80638fb57b62146101bd5780639ecc0050146101e4578063ab68988d1461021e575f80fd5b80634519a352116100b85780634519a3521461014b57806358e3139e146101725780635ab7090414610196575f80fd5b80630890702c146100de57806328c5463714610104578063441b31df14610124575b5f80fd5b6100f16100ec366004615539565b6102bb565b6040519081526020015b60405180910390f35b610117610112366004615539565b6102e3565b6040516100fb9190615671565b6100f17f3c3e2e5f1dd14dee5db88341ba71521e939afdb7881aa24c9f1e1c007a2fa8b681565b6100f17f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a81565b61017d6396258ff581565b60405167ffffffffffffffff90911681526020016100fb565b6100f17fbd74344bb507daeb9ed315bc535f24a236ccab72c5cd6945fb0efe5c037e209781565b6100f17f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f18581565b61020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405160079190910b81526020016100fb565b61022661032c565b6040516100fb91906156c2565b6100f17f45529d8772b07ebd6d507a1680da791f4a2192882bf89d518801579f7a5167d281565b6100f17f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e81565b61022661028f3660046156d4565b610348565b6100f17fb60fee1fd85f867dd7c8d16884a49a20287ebe4c0fb49294e9825988aa8e42b481565b815160208301205f906102d9848260016102d4876103df565b610557565b5090505b92915050565b6040805160a0810182525f8082526020820181905291810182905260608082019290925260808101919091526103258384805190602001205f6102d4866103df565b9392505050565b604051806080016040528060608152602001615e596060913981565b5f6020819052908152604090208054610360906156eb565b80601f016020809104026020016040519081016040528092919081815260200182805461038c906156eb565b80156103d75780601f106103ae576101008083540402835291602001916103d7565b820191905f5260205f20905b8154815290600101906020018083116103ba57829003601f168201915b505050505081565b6040805160a0810182525f808252602080830182905282840182905260608084018390526080840152848252819052918220805491929161041f906156eb565b80601f016020809104026020016040519081016040528092919081815260200182805461044b906156eb565b80156104965780601f1061046d57610100808354040283529160200191610496565b820191905f5260205f20905b81548152906001019060200180831161047957829003601f168201915b5050505050905080515f036104e15750506040805160a0810182525f808252602080830182905282840182905260608301829052835190810190935282526080810191909152919050565b600181015160098201516011830151603180850151855190915f91610514919061050c908290615769565b8891906109ee565b6040805160a08101825260ff9097161515875267ffffffffffffffff909516602087015260079390930b9385019390935260608401526080830152509392505050565b6040805160a0810182525f8082526020820181905291810182905260608082019290925260808101919091527f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f1858414610776575f8260800151511161061d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f706172656e74206365727420756e76657269666965640000000000000000000060448201526064015b60405180910390fd5b42826020015167ffffffffffffffff161015610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f706172656e7420636572742065787069726564000000000000000000000000006044820152606401610614565b81516106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f706172656e742063657274206973206e6f7420612043410000000000000000006044820152606401610614565b8215806107105750604082015160070b15155b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6d6178506174684c656e206578636565646564000000000000000000000000006044820152606401610614565b5f610780856103df565b90508060800151515f1461087b5742816020015167ffffffffffffffff161015610806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f63657274206578706972656400000000000000000000000000000000000000006044820152606401610614565b8051151584151514610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f63657274206973206e6f742061204341000000000000000000000000000000006044820152606401610614565b90506109e6565b5f61088587610ac9565b90505f6108928883610ad4565b90505f805f805f6108a48d878d610ba2565b94509450945094509450828a606001511461091b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f697373756572202f207375626a656374206d69736d61746368000000000000006044820152606401610614565b5f8a6040015160070b13801561094757505f8460070b12806109475750896040015160070b8460070b12155b156109605760018a6040015161095d919061577c565b93505b61096f8d878c60800151610d2c565b6040518060a001604052808c151581526020018667ffffffffffffffff1681526020018560070b81526020018381526020018281525097506109b18c89610ee1565b6040518c907f694e63280ec3524c75db17994cf1341b1dbc3efa9f68ad3f4b8da1f00804828e905f90a2509596505050505050505b949350505050565b82516060906109fd83856157c2565b1115610a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e6473000000000000000000000000006044820152606401610614565b8167ffffffffffffffff811115610a7e57610a7e61550c565b6040519080825280601f01601f191660200182016040528015610aa8576020820181803683370190505b50905060208082019085850101610ac0828286610f52565b50509392505050565b5f6102dd825f610fc6565b5f8269ffffffffffffffffffff831681518110610af357610af36157d5565b01602001517f200000000000000000000000000000000000000000000000000000000000000090811614610b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120636f6e73747275637465642074797065000000000000000000006044820152606401610614565b61032583605084901c69ffffffffffffffffffff16610fc6565b610fc6565b5f808080606081610bb38989610ad4565b90505f610bc08a83610ad4565b90505f610bcd8b84611219565b90505f610bda8c83611219565b90507f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e610c1f8d69ffffffffffffffffffff605085901c81169060a086901c1661123f565b14610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636572742073696720616c676f00000000000000000000006044820152606401610614565b5f610c918d856112bf565b905080600214610cfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f76657273696f6e2073686f756c642062652033000000000000000000000000006044820152606401610614565b610d088d838d61148b565b809a50819b50829c50839d50849e5050505050505050505050939792965093509350565b5f610d378484611219565b90507f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e610d7c8569ffffffffffffffffffff605085901c81169060a086901c1661123f565b14610de3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636572742073696720616c676f00000000000000000000006044820152606401610614565b5f610e038569ffffffffffffffffffff8616610dfe8761164b565b61168f565b90505f610e108684611219565b90505f610e1d87836117b6565b90505f610e2a888361198d565b90505f610e378983610ad4565b90505f610e448a83611219565b90505f80610e528c856119a8565b90925090505f80610e638e866119a8565b604051608087811b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811660208401526030830188905284821b166050830152606082018390529294509092505f91016040516020818303038152906040529050610ed08d8c83611bff565b505050505050505050505050505050565b8051602080830151604080850151606086015160808701519251610f0a96959293919201615802565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181525f84815260208190522090610f4d90826158b4565b505050565b60208110610f8a5781518352610f696020846157c2565b9250610f766020836157c2565b9150610f83602082615769565b9050610f52565b8015610f4d575f6001610f9e836020615769565b610faa90610100615aee565b610fb49190615769565b83518551821691191617845250505050565b5f828281518110610fd957610fd96157d5565b01602001517f1f000000000000000000000000000000000000000000000000000000000000009081169003611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f41534e2e312074616773206c6f6e676572207468616e20312d6279746520617260448201527f65206e6f7420737570706f7274656400000000000000000000000000000000006064820152608401610614565b5f808461109e8560016157c2565b815181106110ae576110ae6157d5565b01602001517f8000000000000000000000000000000000000000000000000000000000000000165f0361111357846110e78560016157c2565b815181106110f7576110f76157d5565b016020015160f81c915061110c8460026157c2565b9050611203565b5f856111208660016157c2565b81518110611130576111306157d5565b60209101015160f81c607f169050600181900361117257856111538660026157c2565b81518110611163576111636157d5565b016020015160f81c92506111e6565b8060ff1660020361119d5761119261118b8660026157c2565b8790611c78565b61ffff1692506111e6565b6111a8816020615af9565b6111b3906008615b12565b60ff166111ce876111c58860026157c2565b8460ff16611cfa565b901c925067ffffffffffffffff8311156111e6575f80fd5b60ff81166111f58660026157c2565b6111ff91906157c2565b9150505b605081901b841760a083901b1795945050505050565b5f61032583610b9d69ffffffffffffffffffff60a086901c811690605087901c166157c2565b82515f9061124d83856157c2565b11156112b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e6473000000000000000000000000006044820152606401610614565b5091016020012090565b5f8269ffffffffffffffffffff8316815181106112de576112de6157d5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f02000000000000000000000000000000000000000000000000000000000000001461138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f74207479706520494e5445474552000000000000000000000000000000006044820152606401610614565b82605083901c69ffffffffffffffffffff16815181106113b0576113b06157d5565b01602001517f8000000000000000000000000000000000000000000000000000000000000000161561143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420706f73697469766500000000000000000000000000000000000000006044820152606401610614565b69ffffffffffffffffffff60a083901c1661145a816020615769565b611465906008615b35565b61148185605086901c69ffffffffffffffffffff165b84611cfa565b901c949350505050565b5f80808060608161149c8989611219565b90506114cc605082901c69ffffffffffffffffffff1660a083901c69ffffffffffffffffffff165b8b919061123f565b93505f6114d98a83611219565b90505f6114e68b83611219565b905061150a8b69ffffffffffffffffffff605084901c81169060a085901c1661123f565b94505f6115178c83611219565b90505f6115248d83611219565b90508c69ffffffffffffffffffff821681518110611544576115446157d5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f81000000000000000000000000000000000000000000000000000000000000000361159e5761159b8d82611219565b90505b8c69ffffffffffffffffffff8216815181106115bc576115bc6157d5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f820000000000000000000000000000000000000000000000000000000000000003611616576116138d82611219565b90505b6116208d85611d56565b995061162d8d828d611e71565b98506116398d83612354565b95505050505050939792965093509350565b5f69ffffffffffffffffffff8216605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff1661168591906157c2565b6102dd9190615769565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e08301529061171a85858584612543565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b5f8269ffffffffffffffffffff8316815181106117d5576117d56157d5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f030000000000000000000000000000000000000000000000000000000000000014611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e47000000000000000000000000006044820152606401610614565b82605083901c69ffffffffffffffffffff16815181106118a7576118a76157d5565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f6e2d302d7061646465642042495420535452494e470000000000000000006044820152606401610614565b61032569ffffffffffffffffffff8316605084901c69ffffffffffffffffffff166119619060016157c2565b61197c600169ffffffffffffffffffff60a088901c16615769565b60a01b60509190911b919091171790565b5f61032583605084901c69ffffffffffffffffffff16610fc6565b5f808369ffffffffffffffffffff8416815181106119c8576119c86157d5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f020000000000000000000000000000000000000000000000000000000000000014611a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f74207479706520494e5445474552000000000000000000000000000000006044820152606401610614565b83605084901c69ffffffffffffffffffff1681518110611a9a57611a9a6157d5565b01602001517f80000000000000000000000000000000000000000000000000000000000000001615611b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420706f73697469766500000000000000000000000000000000000000006044820152606401610614565b5f60a084901c69ffffffffffffffffffff1690505f605085901c69ffffffffffffffffffff169050858181518110611b6257611b626157d5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000165f03611bab5780611b9981615b4c565b9150508180611ba790615b83565b9250505b6080611bb987836010611cfa565b901c611bc6836030615769565b611bd1906008615b35565b611bf088611be08560106157c2565b611beb601088615769565b611cfa565b9195501c925050509250929050565b611c12611c0a612e1c565b838386612f37565b610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c6964207369670000000000000000000000000000000000000000006044820152606401610614565b5f611c848260026157c2565b83511015611cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e6473000000000000000000000000006044820152606401610614565b50016020015160f01c90565b5f6020821115611d08575f80fd5b8351611d1483856157c2565b1115611d1e575f80fd5b506020919092018101519190036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01191690565b5f80611d628484610ad4565b90505f611d6f8583611219565b90505f611d7c86846131c3565b9050611d8886836131c3565b935042811115611df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6365727469666963617465206e6f742076616c696420796574000000000000006044820152606401610614565b428467ffffffffffffffff161015611e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6365727469666963617465206e6f742076616c696420616e796d6f72650000006044820152606401610614565b50505092915050565b5f8369ffffffffffffffffffff841681518110611e9057611e906157d5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fa30000000000000000000000000000000000000000000000000000000000000014611f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c696420657874656e73696f6e7300000000000000000000000000006044820152606401610614565b611f4a8484610ad4565b92505f611f578585610ad4565b90505f611f7b69ffffffffffffffffffff60a087901c811690605088901c166157c2565b90505f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b5f611fae8986610ad4565b90505f611fd38a69ffffffffffffffffffff605085901c81169060a086901c1661123f565b90507f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a81148061202257507f45529d8772b07ebd6d507a1680da791f4a2192882bf89d518801579f7a5167d281145b15612180575f6120328b84611219565b90508a69ffffffffffffffffffff821681518110612052576120526157d5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f0100000000000000000000000000000000000000000000000000000000000000036121265760a081901c69ffffffffffffffffffff16600114612119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420637269746963616c20626f6f6c2076616c756500000000006044820152606401610614565b6121238b82611219565b90505b6121308b8261380d565b90507f9cae28d5bc34bd0465dace5d79f73d873769d6070fda4a0a238fa0c01ba16af6820161216f57600194506121688b828b6138dc565b975061217e565b6001935061217e8b828b613b37565b505b846121a269ffffffffffffffffffff60a089901c81169060508a901c166157c2565b036121ae5750506121c1565b6121b88a87611219565b95505050611fa3565b81612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6261736963436f6e73747261696e7473206e6f7420666f756e640000000000006044820152606401610614565b8061228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6b65795573616765206e6f7420666f756e6400000000000000000000000000006044820152606401610614565b85806122bd57508460070b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f6d6178506174684c656e206d75737420626520756e646566696e656420666f7260448201527f20636c69656e74206365727400000000000000000000000000000000000000006064820152608401610614565b505050509392505050565b60605f6123618484610ad4565b90505f61236e8583610ad4565b90505f61237b8683611219565b90505f6123888785611219565b90505f61239588836117b6565b90507fb60fee1fd85f867dd7c8d16884a49a20287ebe4c0fb49294e9825988aa8e42b46123e2605086901c69ffffffffffffffffffff1660a087901c69ffffffffffffffffffff166114c4565b14612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206365727420616c676f2069640000000000000000000000006044820152606401610614565b7fbd74344bb507daeb9ed315bc535f24a236ccab72c5cd6945fb0efe5c037e2097612494605085901c69ffffffffffffffffffff1660a086901c69ffffffffffffffffffff166114c4565b146124fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206365727420616c676f20706172616d0000000000000000006044820152606401610614565b5f61251d69ffffffffffffffffffff60a084901c811690605085901c166157c2565b905061253661252d606083615769565b8a9060606109ee565b9998505050505050505050565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201528451612a0184866157c2565b1115612a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4f55545f4f465f424f554e4453000000000000000000000000000000000000006044820152606401610614565b5f612a75868686613c2f565b905060808151612a859190615be4565b15612aec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f52000000000000000000000000000000000000006044820152606401610614565b612af4615463565b612afc615482565b612b046154a1565b5f612b10608089615bf7565b612b1b906080615b35565b90505f5b85518201811015612e0f5781811015612b4457612b3f8b84838d01613d39565b612b51565b612b518684848403613d39565b5f5b6010811015612ba157838160108110612b6e57612b6e6157d5565b6020020151868260508110612b8557612b856157d5565b67ffffffffffffffff9092166020929092020152600101612b53565b5060105b6050811015612c5757856010820360508110612bc357612bc36157d5565b6020020151612bea87600f840360508110612be057612be06157d5565b6020020151613d91565b876007840360508110612bff57612bff6157d5565b6020020151612c26896002860360508110612c1c57612c1c6157d5565b6020020151613dbf565b010101868260508110612c3b57612c3b6157d5565b67ffffffffffffffff9092166020929092020152600101612ba5565b505f5b6008811015612ca857888160088110612c7557612c756157d5565b6020020151858260088110612c8c57612c8c6157d5565b67ffffffffffffffff9092166020929092020152600101612c5a565b505f5b6050811015612db3575f868260508110612cc757612cc76157d5565b6020020151898360508110612cde57612cde6157d5565b6020020151608088015160a089015160c08a01518219169116186080890151612d0690613de5565b89600760200201510101010190505f612d3e878260200201518860016020020151896002602002015180821690831691909216181890565b8751612d4990613e07565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612cab565b505f5b6008811015612e0657848160088110612dd157612dd16157d5565b6020020151898260088110612de857612de86157d5565b6020020180519190910167ffffffffffffffff169052600101612db6565b50608001612b1f565b5050505050505050505050565b612e5c6040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615f196101008401398152602001604051806060016040528060308152602001615df9603091398152602001604051806060016040528060308152602001615ee9603091398152602001604051806060016040528060308152602001615e29603091398152602001604051806060016040528060308152602001615f79603091398152602001604051806060016040528060308152602001615f49603091398152602001604051806060016040528060308152602001615eb9603091399052919050565b5f612f5f60405180608001604052805f81526020015f81526020015f81526020015f81525090565b612f6884613e29565b60208301528152612f7883613e29565b6060830152604080830191909152805160e0810190915286515f91908190612f9f90613ed9565b8152602001612fb18960200151613ed9565b8152602001612fc38960400151613ed9565b8152602001612fd58960600151613ed9565b8152602001612fe78960800151613ed9565b8152602001612ff98960a00151613ed9565b815260200161300b8960c00151613ed9565b81525090505f61301e8260800151613f6d565b835160208101519051919250159015168061304957505f613046845f01518460a0015161403f565b12155b80613066575061306683602001515f602082015191511591141690565b8061308157505f61307f84602001518460c0015161403f565b135b15613091575f93505050506109e6565b6130b2818360800151845f01518560200151876040015188606001516140e4565b6130c1575f93505050506109e6565b8651603081101561310457604080516030808252606082019092525f916020820181803683375091925061310191505060208a01838303605001846141c2565b97505b505f613122826131138a613ed9565b86602001518660a001516141d0565b90505f61313c83865f015187602001518760a001516141d0565b90505f61314960036142e0565b90505f61317385876080015184895f01518a604001518b606001518d604001518e60600151614300565b905061318b85876080015184895f01518589896144e9565b508094505050506131a183838660a001516146d7565b84516020808201519084015191518451149114169a9950505050505050505050565b5f808369ffffffffffffffffffff8416815181106131e3576131e36157d5565b016020015160f81c905069ffffffffffffffffffff605084901c81169060a085901c16601783148015613216575080600d145b8061322f57508260ff16601814801561322f575080600f145b613295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c69642054494d455354414d500000000000000000000000000000006044820152606401610614565b8560016132a283856157c2565b6132ac9190615769565b815181106132bc576132bc6157d5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f5a000000000000000000000000000000000000000000000000000000000000001461336c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f54494d455354414d50206d7573742062652055544300000000000000000000006044820152606401610614565b5f5b613379600183615769565b81101561342a575f8761338c83866157c2565b8151811061339c5761339c6157d5565b016020015160f81c9050603081108015906133bb575060398160ff1611155b613421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c69642063686172616374657220696e2054494d455354414d5000006044820152606401610614565b5060010161336e565b505f81600d03613477576005603088858151811061344a5761344a6157d5565b016020015161345c919060f81c615af9565b60ff161061346c5761076c613470565b6107d05b9050613504565b6030876134858560016157c2565b81518110613495576134956157d5565b01602001516134a7919060f81c615af9565b6134b2906064615b12565b60ff1660308885815181106134c9576134c96157d5565b01602001516134db919060f81c615af9565b6134ea9060ff166103e8615c0a565b6134f49190615c28565b90506135016002846157c2565b92505b6030876135128560016157c2565b81518110613522576135226157d5565b602001015160f81c60f81b60f81c6030898681518110613544576135446157d5565b0160200151613556919060f81c615af9565b61356190600a615b12565b61356b9190615c43565b6135759190615af9565b6135829060ff1682615c28565b90505f6030886135938660036157c2565b815181106135a3576135a36157d5565b016020015160f81c60308a6135b98860026157c2565b815181106135c9576135c96157d5565b01602001516135db919060f81c615af9565b6135e690600a615b12565b6135f09190615c43565b6135fa9190615af9565b90505f60308961360b8760056157c2565b8151811061361b5761361b6157d5565b016020015160f81c60308b6136318960046157c2565b81518110613641576136416157d5565b0160200151613653919060f81c615af9565b61365e90600a615b12565b6136689190615c43565b6136729190615af9565b90505f60308a6136838860076157c2565b81518110613693576136936157d5565b016020015160f81c60308c6136a98a60066157c2565b815181106136b9576136b96157d5565b01602001516136cb919060f81c615af9565b6136d690600a615b12565b6136e09190615c43565b6136ea9190615af9565b90505f60308b6136fb8960096157c2565b8151811061370b5761370b6157d5565b016020015160f81c60308d6137218b60086157c2565b81518110613731576137316157d5565b0160200151613743919060f81c615af9565b61374e90600a615b12565b6137589190615c43565b6137629190615af9565b90505f60308c6137738a600b6157c2565b81518110613783576137836157d5565b016020015160f81c60308e6137998c600a6157c2565b815181106137a9576137a96157d5565b01602001516137bb919060f81c615af9565b6137c690600a615b12565b6137d09190615c43565b6137da9190615af9565b90506137fd8661ffff168660ff168660ff168660ff168660ff168660ff16614723565b9c9b505050505050505050505050565b5f8269ffffffffffffffffffff83168151811061382c5761382c6157d5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f040000000000000000000000000000000000000000000000000000000000000014610b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f742074797065204f4354455420535452494e4700000000000000000000006044820152606401610614565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6139088585610ad4565b90505f8569ffffffffffffffffffff831681518110613929576139296157d5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f010000000000000000000000000000000000000000000000000000000000000003613a4b5760a082901c69ffffffffffffffffffff166001146139f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206973434120626f6f6c2076616c75650000000000000000006044820152606401610614565b85605083901c69ffffffffffffffffffff1681518110613a1257613a126157d5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000908116149050613a488683611219565b91505b80151584151514613ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f69734341206d757374206265207472756520666f7220434120636572747300006044820152606401610614565b8569ffffffffffffffffffff831681518110613ad657613ad66157d5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f020000000000000000000000000000000000000000000000000000000000000003610ac057613b2d86836112bf565b9695505050505050565b5f613b4284846148ff565b90508115613bbc5780600416600414613bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f436572745369676e206d7573742062652070726573656e7400000000000000006044820152606401610614565b613c29565b80608016608014613c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469676974616c5369676e6174757265206d7573742062652070726573656e746044820152606401610614565b50505050565b60605f613c3d836008615b35565b60c01b90505f613c4e608085615be4565b90505f6070821015613c6c57613c65826077615769565b9050613c7a565b613c778260f7615769565b90505b5f8167ffffffffffffffff811115613c9457613c9461550c565b6040519080825280601f01601f191660200182016040528015613cbe576020820181803683370190505b5090505f613ce284613cd0898b6157c2565b613cda9190615769565b8a90866109ee565b604051909150613d1c9082907f80000000000000000000000000000000000000000000000000000000000000009085908990602001615c5c565b604051602081830303815290604052955050505050509392505050565b5f5b6010811015613c2957613d63613d52826008615b35565b613d5c90846157c2565b8590614a21565b838260108110613d7557613d756157d5565b67ffffffffffffffff9092166020929092020152600101613d3b565b5f60078267ffffffffffffffff16901c613dac836008614aa3565b613db7846001614aa3565b181892915050565b5f60068267ffffffffffffffff16901c613dda83603d614aa3565b613db7846013614aa3565b5f613df1826029614aa3565b613dfc836012614aa3565b613db784600e614aa3565b5f613e13826027614aa3565b613e1e836022614aa3565b613db784601c614aa3565b5f808251606014613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f7420373638000000000000000000000000000000000000006044820152606401610614565b604080516080810182529250820190505f825260208301516010830152603083015160208301525f81526050830151601082015260608301516020820152915091565b5f8151603014613f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f7420333834000000000000000000000000000000000000006044820152606401610614565b6040805180820190915290505f81526020820151601082015260308201516020820152919050565b5f613f8061048060408051918201905290565b9050613fb682613f9060026142e0565b602082810151908201518103610420860181905291519251911191900303610400830152565b6060610120820152602061014082018190526040610160830181905260016101e0840152835161020084015283820180516102208501526102408401829052610260840192909252610280830181905283516103008401528151610320840152610360830181905261038083018190526103a08301529151610440820152905161046082015290565b815181515f919080821115614059576001925050506102dd565b8082101561408b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff925050506102dd565b505060208381015190830151808211156140aa576001925050506102dd565b808210156140dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff925050506102dd565b505092915050565b602082015182515f91159015168061410a57506020868101519084015187518551149114165b8061411c575060208201518251159015165b8061413557506020868101519083015187518451149114165b1561414157505f613b2d565b5f61414e88846002614adf565b90505f61415d89866003614adf565b6020880151885191925015901516614187576141848161417e8b888b614b23565b8a614c14565b90505b60208601518651159015166141a4576141a181878a614c14565b90505b60208181015190830151915192519114911416979650505050505050565b8082828560045afa50505050565b5f6141dc858484614c76565b90506142a18482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b5f6142f16040808051918201905290565b5f815260208101929092525090565b6143086154c0565b61431183614d03565b61431a83614d03565b602080840151908101919091525261433185614d03565b61433a85614d03565b6101008301516020810191909152525f5b60088110156144dc575f5b60088110156144d3576002818301106144cb57600382901b81178215614421577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830160031b82176143e28d8d8d8d8986604081106143b7576143b76157d5565b6020020151518a87604081106143cf576143cf6157d5565b6020020151600160200201518f8f614d29565b8684604081106143f4576143f46157d5565b602002015187856040811061440b5761440b6157d5565b60200201516001602002019190915252506144c9565b600383901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83011761448e8d8d8d8d898660408110614463576144636157d5565b6020020151518a876040811061447b5761447b6157d5565b6020020151600160200201518d8d614d29565b8684604081106144a0576144a06157d5565b60200201518785604081106144b7576144b76157d5565b60200201516001602002019190915252505b505b600101614356565b5060010161434b565b5098975050505050505050565b815181515f9182918291906145028c8c8c8c8780614e52565b9095509350690ffffffffffffffffff860b483901c1660b782901c17925082156145705761456a8c8c8c8c8c886040811061453f5761453f6157d5565b6020020151518d8960408110614557576145576157d5565b6020020151600160200201518b8b614d29565b90955093505b60045b60b88111614605576145898d8d8d8d8a8a614f11565b80965081975050508060b80382901c60071660038260b80385901c600716901b179350835f146145fd576145f78d8d8d8d8d89604081106145cc576145cc6157d5565b6020020151518e8a604081106145e4576145e46157d5565b6020020151600160200201518c8c614d29565b90965094505b600301614573565b505050602085810151908501516146208c8c8c8c8989614e52565b9095509350600860fc83901c1660ff82901c179250821561465a576146548c8c8c8c8c886040811061453f5761453f6157d5565b90955093505b60045b61010081116146c7576146748d8d8d8d8a8a614f11565b8096508197505050806101000382901c6007166003826101000385901c600716901b179350835f146146bf576146b98d8d8d8d8d89604081106145cc576145cc6157d5565b90965094505b60030161465d565b5050505097509795505050505050565b604083526020836020015260408360400152815183606001526020820151836080015260018360a0015280518360c0015260208101518360e001526040826101008560055afa50505050565b5f6107b2871015614732575f80fd5b856001111580156147445750600c8611155b61474c575f80fd5b8460011115801561475e5750601f8511155b614766575f80fd5b6017841115614773575f80fd5b603b831115614780575f80fd5b603b82111561478d575f80fd5b8686865f62253d8c60046064600c6147a6600e88615ce7565b6147b09190615d06565b6147bc88611324615d6d565b6147c69190615d6d565b6147d09190615d06565b6147db906003615d8c565b6147e59190615d06565b600c806147f3600e88615ce7565b6147fd9190615d06565b61480890600c615d8c565b614813600288615ce7565b61481d9190615ce7565b6148299061016f615d8c565b6148339190615d06565b6004600c614842600e89615ce7565b61484c9190615d06565b614858896112c0615d6d565b6148629190615d6d565b61486e906105b5615d8c565b6148789190615d06565b614884617d4b87615ce7565b61488e9190615d6d565b6148989190615d6d565b6148a29190615ce7565b6148ac9190615ce7565b90508587896148bc846018615b35565b6148c691906157c2565b6148d190603c615b35565b6148db91906157c2565b6148e690603c615b35565b6148f091906157c2565b9b9a5050505050505050505050565b5f8269ffffffffffffffffffff83168151811061491e5761491e6157d5565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f0300000000000000000000000000000000000000000000000000000000000000146149ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e47000000000000000000000000006044820152606401610614565b5f6149ea600169ffffffffffffffffffff60a086901c16615769565b90506149f7816020615769565b614a02906008615b35565b6114818561147b69ffffffffffffffffffff605088901c1660016157c2565b5f614a2d8260086157c2565b83511015614a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e6473000000000000000000000000006044820152606401610614565b50016020015160c01c90565b5f67ffffffffffffffff8381169083161c614abf836040615dd7565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b5f614af06040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b5f614b346040808051918201905290565b9050614bfa838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b5f614c256040808051918201905290565b6020858101518582015181019183018290528551875101911001815290505f614c4e828461403f565b1261032557602080820180519184015182039081905283518351929091119103038152610325565b5f614c876040808051918201905290565b9050614cbb82614c9760026142e0565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b5f614d146040808051918201905290565b90508151815260208201516020820152919050565b5f80851580614d36575083155b15614d8e5785158015614d47575083155b15614d5657505f905080614e45565b8515614d7357614d6586614d03565b614d6e86614d03565b614d85565b614d7c84614d03565b614d8584614d03565b91509150614e45565b60208481015190870151855188511491141615614dd45760208381015190860151845187511491141615614dca57614d858a8a8a8a8a8a614e52565b505f905080614e45565b5f614de086858c6150ed565b90505f614dee88878d6150ed565b9050614dfb8c838361516d565b614e078c836002614adf565b9350614e1484898d6151a0565b614e1f84878d6151a0565b614e2a88858d6150ed565b9250614e378c8484615216565b614e4283888d6151a0565b50505b9850989650505050505050565b5f80835f03614e6557505f905080614f06565b602083015183511590151615614e7f57505f905080614f06565b5f614e8c89866002614adf565b9050614e99898289615216565b614ea481878a6152f2565b5f614eaf858a615347565b9050614ebc8a838361516d565b614ec88a836002614adf565b9350614ed584878b6151a0565b614ee084878b6151a0565b614eeb86858b6150ed565b9250614ef88a8484615216565b614f0383868b6151a0565b50505b965096945050505050565b5f80835f03614f2457505f905080614f06565b602083015183511590151615614f3e57505f905080614f06565b5f614f4b89866002614adf565b9050614f58898289615216565b614f6381878a6152f2565b5f614f6e858a615347565b9050614f7b8a838361516d565b614f878a836002614adf565b9350614f9484878b6151a0565b614f9f84878b6151a0565b614faa86858b6150ed565b9250614fb78a8484615216565b614fc283868b6151a0565b602083015183511590151615614fdf575f80935093505050614f06565b614fec8a838660026153a7565b614ff78a838a615216565b61500282888b6152f2565b61500d81848b6153d7565b6150188a838361516d565b6150258a878460026153a7565b61503086858b6151a0565b61503b86858b6151a0565b6150478585888c6153f6565b6150528a8684615216565b61505d85848b6151a0565b60208501518551159015161561507a575f80935093505050614f06565b6150878a838860026153a7565b6150928a838a615216565b61509d82888b6152f2565b6150a881868b6153d7565b6150b38a838361516d565b6150c08a858460026153a7565b6150cb84878b6151a0565b6150d684878b6151a0565b6150e28387868c6153f6565b614ef88a8484615216565b5f6150fe6040808051918201905290565b90505f61510b858561403f565b126151345760208085015181850151810391830182905284518651929091109103038152610325565b60208481015183820151810183830181815285518851019282109290920180855292860151810391829052855191119103038152610325565b6103608301925080518360600152602081015183608001526040816101208560055afa50610f4d61036084038383615216565b5f6151ab848461403f565b126151d2575060208281018051918301518203908190529151835191909211919003039052565b6151f48382602082810180519183015182019081905291518351019110019052565b5060208281018051918301518203908190529151835191909211919003039052565b6152da828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b6153148383602082810180519183015182019081905291518351019110019052565b5f61531f848361403f565b12610f4d57602080840180519183015182039081905282518551929091119103038352505050565b5f6153586040808051918201905290565b6020808501518551600190811b60ff83901c1784521b9082015290505f61537f828461403f565b126102dd576020808201805191840151820390819052835183519290911191030381526102dd565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b6020808301518351600190811b60ff83901c1786521b90840152615314565b5f615401848461403f565b1261542a5760208084015181840151810391860182905283518551929091109103038452613c29565b60208381015182820151810186830181815284518751019282109290920180885292850151810391829052845191119103038452613c29565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061080001604052806040905b6154d86154ee565b8152602001906001900390816154d05790505090565b60405180604001604052806002906020820280368337509192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561554a575f80fd5b823567ffffffffffffffff80821115615561575f80fd5b818501915085601f830112615574575f80fd5b8135818111156155865761558661550c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156155cc576155cc61550c565b816040528281528860208487010111156155e4575f80fd5b826020860160208301375f602093820184015298969091013596505050505050565b5f5b83811015615620578181015183820152602001615608565b50505f910152565b5f815180845261563f816020860160208601615606565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815281511515602082015267ffffffffffffffff6020830151166040820152604082015160070b6060820152606082015160808201525f608083015160a0808401526109e660c0840182615628565b602081525f6103256020830184615628565b5f602082840312156156e4575f80fd5b5035919050565b600181811c908216806156ff57607f821691505b602082108103615736577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156102dd576102dd61573c565b600782810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffff80000000000000008112677fffffffffffffff821317156102dd576102dd61573c565b808201808211156102dd576102dd61573c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85151560f81b81527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1660018201528360c01b60098201528260118201525f8251615858816031850160208701615606565b919091016031019695505050505050565b601f821115610f4d57805f5260205f20601f840160051c8101602085101561588e5750805b601f840160051c820191505b818110156158ad575f815560010161589a565b5050505050565b815167ffffffffffffffff8111156158ce576158ce61550c565b6158e2816158dc84546156eb565b84615869565b602080601f831160018114615934575f84156158fe5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556159c8565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561598057888601518255948401946001909101908401615961565b50858210156159bc57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b600181815b80851115615a2957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a0f57615a0f61573c565b80851615615a1c57918102915b93841c93908002906159d5565b509250929050565b5f82615a3f575060016102dd565b81615a4b57505f6102dd565b8160018114615a615760028114615a6b57615a87565b60019150506102dd565b60ff841115615a7c57615a7c61573c565b50506001821b6102dd565b5060208310610133831016604e8410600b8410161715615aaa575081810a6102dd565b615ab483836159d0565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615ae657615ae661573c565b029392505050565b5f6103258383615a31565b60ff82811682821603908111156102dd576102dd61573c565b60ff8181168382160290811690818114615b2e57615b2e61573c565b5092915050565b80820281158282048414176102dd576102dd61573c565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b7c57615b7c61573c565b5060010190565b5f81615b9157615b9161573c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82615bf257615bf2615bb7565b500690565b5f82615c0557615c05615bb7565b500490565b61ffff8181168382160280821691908281146140dc576140dc61573c565b61ffff818116838216019080821115615b2e57615b2e61573c565b60ff81811683821601908111156102dd576102dd61573c565b5f8551615c6d818460208a01615606565b7fff0000000000000000000000000000000000000000000000000000000000000086169083019081528451615ca9816001840160208901615606565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b8181035f831280158383131683831282161715615b2e57615b2e61573c565b5f82615d1457615d14615bb7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615d6857615d6861573c565b500590565b8082018281125f8312801582168215821617156140dc576140dc61573c565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615dc357615dc361573c565b81810583148215176102dd576102dd61573c565b67ffffffffffffffff828116828216039080821115615b2e57615b2e61573c56feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5ffc0254eba608c1f36870e29ada90be46383292736e894bfff672d989444b5051e534a4b1f6dbe3c0bc581a32b7b176070ede12d69a3fea211b66e752cf7dd1dd095f6f1370f4170843d9dc100121e4cf63012809664487c9796284304dc53ff4ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c6343000818000afc0254eba608c1f36870e29ada90be46383292736e894bfff672d989444b5051e534a4b1f6dbe3c0bc581a32b7b176070ede12d69a3fea211b66e752cf7dd1dd095f6f1370f4170843d9dc100121e4cf63012809664487c9796284304dc53ff4", } // CertManagerABI is the input ABI used to generate the binding from. @@ -552,44 +552,188 @@ func (_CertManager *CertManagerCallerSession) Verified(arg0 [32]byte) ([]byte, e return _CertManager.Contract.Verified(&_CertManager.CallOpts, arg0) } -// VerifyCert is a paid mutator transaction binding the contract method 0xdc28a38d. +// VerifyCACert is a paid mutator transaction binding the contract method 0x0890702c. // -// Solidity: function verifyCert(bytes cert, bool ca, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) -func (_CertManager *CertManagerTransactor) VerifyCert(opts *bind.TransactOpts, cert []byte, ca bool, parentCertHash [32]byte) (*types.Transaction, error) { - return _CertManager.contract.Transact(opts, "verifyCert", cert, ca, parentCertHash) +// Solidity: function verifyCACert(bytes cert, bytes32 parentCertHash) returns(bytes32) +func (_CertManager *CertManagerTransactor) VerifyCACert(opts *bind.TransactOpts, cert []byte, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.contract.Transact(opts, "verifyCACert", cert, parentCertHash) } -// VerifyCert is a paid mutator transaction binding the contract method 0xdc28a38d. +// VerifyCACert is a paid mutator transaction binding the contract method 0x0890702c. // -// Solidity: function verifyCert(bytes cert, bool ca, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) -func (_CertManager *CertManagerSession) VerifyCert(cert []byte, ca bool, parentCertHash [32]byte) (*types.Transaction, error) { - return _CertManager.Contract.VerifyCert(&_CertManager.TransactOpts, cert, ca, parentCertHash) +// Solidity: function verifyCACert(bytes cert, bytes32 parentCertHash) returns(bytes32) +func (_CertManager *CertManagerSession) VerifyCACert(cert []byte, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyCACert(&_CertManager.TransactOpts, cert, parentCertHash) } -// VerifyCert is a paid mutator transaction binding the contract method 0xdc28a38d. +// VerifyCACert is a paid mutator transaction binding the contract method 0x0890702c. // -// Solidity: function verifyCert(bytes cert, bool ca, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) -func (_CertManager *CertManagerTransactorSession) VerifyCert(cert []byte, ca bool, parentCertHash [32]byte) (*types.Transaction, error) { - return _CertManager.Contract.VerifyCert(&_CertManager.TransactOpts, cert, ca, parentCertHash) +// Solidity: function verifyCACert(bytes cert, bytes32 parentCertHash) returns(bytes32) +func (_CertManager *CertManagerTransactorSession) VerifyCACert(cert []byte, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyCACert(&_CertManager.TransactOpts, cert, parentCertHash) } -// VerifyCertBundle is a paid mutator transaction binding the contract method 0x5b608e2a. +// VerifyClientCert is a paid mutator transaction binding the contract method 0x28c54637. // -// Solidity: function verifyCertBundle(bytes certificate, bytes[] cabundle) returns((bool,uint64,int64,bytes32,bytes)) -func (_CertManager *CertManagerTransactor) VerifyCertBundle(opts *bind.TransactOpts, certificate []byte, cabundle [][]byte) (*types.Transaction, error) { - return _CertManager.contract.Transact(opts, "verifyCertBundle", certificate, cabundle) +// Solidity: function verifyClientCert(bytes cert, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerTransactor) VerifyClientCert(opts *bind.TransactOpts, cert []byte, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.contract.Transact(opts, "verifyClientCert", cert, parentCertHash) } -// VerifyCertBundle is a paid mutator transaction binding the contract method 0x5b608e2a. +// VerifyClientCert is a paid mutator transaction binding the contract method 0x28c54637. // -// Solidity: function verifyCertBundle(bytes certificate, bytes[] cabundle) returns((bool,uint64,int64,bytes32,bytes)) -func (_CertManager *CertManagerSession) VerifyCertBundle(certificate []byte, cabundle [][]byte) (*types.Transaction, error) { - return _CertManager.Contract.VerifyCertBundle(&_CertManager.TransactOpts, certificate, cabundle) +// Solidity: function verifyClientCert(bytes cert, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerSession) VerifyClientCert(cert []byte, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyClientCert(&_CertManager.TransactOpts, cert, parentCertHash) } -// VerifyCertBundle is a paid mutator transaction binding the contract method 0x5b608e2a. +// VerifyClientCert is a paid mutator transaction binding the contract method 0x28c54637. // -// Solidity: function verifyCertBundle(bytes certificate, bytes[] cabundle) returns((bool,uint64,int64,bytes32,bytes)) -func (_CertManager *CertManagerTransactorSession) VerifyCertBundle(certificate []byte, cabundle [][]byte) (*types.Transaction, error) { - return _CertManager.Contract.VerifyCertBundle(&_CertManager.TransactOpts, certificate, cabundle) +// Solidity: function verifyClientCert(bytes cert, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerTransactorSession) VerifyClientCert(cert []byte, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyClientCert(&_CertManager.TransactOpts, cert, parentCertHash) +} + +// CertManagerCertVerifiedIterator is returned from FilterCertVerified and is used to iterate over the raw logs and unpacked data for CertVerified events raised by the CertManager contract. +type CertManagerCertVerifiedIterator struct { + Event *CertManagerCertVerified // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CertManagerCertVerifiedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CertManagerCertVerified) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CertManagerCertVerified) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CertManagerCertVerifiedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CertManagerCertVerifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CertManagerCertVerified represents a CertVerified event raised by the CertManager contract. +type CertManagerCertVerified struct { + CertHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCertVerified is a free log retrieval operation binding the contract event 0x694e63280ec3524c75db17994cf1341b1dbc3efa9f68ad3f4b8da1f00804828e. +// +// Solidity: event CertVerified(bytes32 indexed certHash) +func (_CertManager *CertManagerFilterer) FilterCertVerified(opts *bind.FilterOpts, certHash [][32]byte) (*CertManagerCertVerifiedIterator, error) { + + var certHashRule []interface{} + for _, certHashItem := range certHash { + certHashRule = append(certHashRule, certHashItem) + } + + logs, sub, err := _CertManager.contract.FilterLogs(opts, "CertVerified", certHashRule) + if err != nil { + return nil, err + } + return &CertManagerCertVerifiedIterator{contract: _CertManager.contract, event: "CertVerified", logs: logs, sub: sub}, nil +} + +// WatchCertVerified is a free log subscription operation binding the contract event 0x694e63280ec3524c75db17994cf1341b1dbc3efa9f68ad3f4b8da1f00804828e. +// +// Solidity: event CertVerified(bytes32 indexed certHash) +func (_CertManager *CertManagerFilterer) WatchCertVerified(opts *bind.WatchOpts, sink chan<- *CertManagerCertVerified, certHash [][32]byte) (event.Subscription, error) { + + var certHashRule []interface{} + for _, certHashItem := range certHash { + certHashRule = append(certHashRule, certHashItem) + } + + logs, sub, err := _CertManager.contract.WatchLogs(opts, "CertVerified", certHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CertManagerCertVerified) + if err := _CertManager.contract.UnpackLog(event, "CertVerified", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCertVerified is a log parse operation binding the contract event 0x694e63280ec3524c75db17994cf1341b1dbc3efa9f68ad3f4b8da1f00804828e. +// +// Solidity: event CertVerified(bytes32 indexed certHash) +func (_CertManager *CertManagerFilterer) ParseCertVerified(log types.Log) (*CertManagerCertVerified, error) { + event := new(CertManagerCertVerified) + if err := _CertManager.contract.UnpackLog(event, "CertVerified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } diff --git a/bindings/deploy_chain.go b/bindings/deploy_chain.go index 79c7355..f470425 100644 --- a/bindings/deploy_chain.go +++ b/bindings/deploy_chain.go @@ -65,8 +65,8 @@ type DeployChainGenesisConfiguration struct { // DeployChainMetaData contains all meta data concerning the DeployChain contract. var DeployChainMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_proxyAdmin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_protocolVersions\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_PASSER_STORAGE_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateBatchInbox\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"genesisConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GenesisConfiguration\",\"components\":[{\"name\":\"l1Number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l2Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2StateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2Time\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"gasConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GasConfiguration\",\"components\":[{\"name\":\"basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"addressConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.AddressConfiguration\",\"components\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"proofsEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployAddresses\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deployProxy\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"protocolVersions\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAddress\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"configHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"batchInbox\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"addresses\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162001e9738038062001e9783398101604081905262000035916200009c565b6001600160a01b03998a1660805297891660a05295881660c05293871660e05291861661010052851661012052841661014052831661016052821661018052166101a0526200016b565b80516001600160a01b03811681146200009757600080fd5b919050565b6000806000806000806000806000806101408b8d031215620000bd57600080fd5b620000c88b6200007f565b9950620000d860208c016200007f565b9850620000e860408c016200007f565b9750620000f860608c016200007f565b96506200010860808c016200007f565b95506200011860a08c016200007f565b94506200012860c08c016200007f565b93506200013860e08c016200007f565b9250620001496101008c016200007f565b91506200015a6101208c016200007f565b90509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051611c246200027360003960006102440152600081816101a9015281816110dc015281816113ed015281816114b6015261157001526000818161021d015281816106b30152610bc10152600081816102a7015281816107820152610c90015260008181610280015281816108510152610d5f0152600081816103230152818161080c0152610d1a01526000818161010a015281816107c70152610cd5015260008181610182015281816106f80152610c0601526000818161015b0152818161073d0152610c4b0152600081816101f6015281816103b0015261058c0152611c246000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80636624856a11610097578063aabcb26e11610066578063aabcb26e146102c9578063beab4f7e146102fe578063c4e8ddfa1461031e578063d655a76f1461034557600080fd5b80636624856a1461023f57806394e49a1b146102665780639b7d7f0a1461027b578063a7119869146102a257600080fd5b8063380cb000116100d3578063380cb000146101cb57806338db8411146101de5780633e47158c146101f15780634d9f15591461021857600080fd5b8063078f29cf146101055780630a49cb031461015657806333d7e2bd1461017d57806335e80ab3146101a4575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101d93660046116ee565b610358565b61012c6101ec3660046116ee565b610584565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61027961027436600461183a565b6105b1565b005b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6102f07f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1281565b60405190815260200161014d565b61031161030c36600461196b565b61063d565b60405161014d9190611984565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c6103533660046119f5565b610895565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606083811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c8301527f0000000000000000000000000000000000000000000000000000000000000000811b601f8301527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338301527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538301527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738301527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938301527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38301527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38301527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38301527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138301527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338301527fe8ee1178d6a717850b5d61039156ff000000000000000000000000000000000061015383015230901b610162820152610176810182905261016180822061019683015260559101206000905b90505b92915050565b600061057b837f0000000000000000000000000000000000000000000000000000000000000000846108d8565b60006105bc86610b4b565b905060006105d1878787876000015186610d84565b905060006105e0600089610895565b90506105f0868683858789610fde565b815160208301516040518a927f49ea8b4c640f12c7d41cb7b7931d984f226f95ce1d55e1e449ee3d61b877c1ad9261062b9286908990611a19565b60405180910390a25050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260008260405160200161068b91815260200190565b6040516020818303038152906040528051906020012090506040518060e001604052806106d87f000000000000000000000000000000000000000000000000000000000000000084610358565b73ffffffffffffffffffffffffffffffffffffffff16815260200161071d7f000000000000000000000000000000000000000000000000000000000000000084610358565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107627f000000000000000000000000000000000000000000000000000000000000000084610358565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107a77f000000000000000000000000000000000000000000000000000000000000000084610358565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107ec7f000000000000000000000000000000000000000000000000000000000000000084610358565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108317f000000000000000000000000000000000000000000000000000000000000000084610358565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108767f000000000000000000000000000000000000000000000000000000000000000084610358565b73ffffffffffffffffffffffffffffffffffffffff1690529392505050565b60006068826040516020016108ac91815260200190565b6040516020818303038152906040528051906020012060001c901c60988460ff16901b17905092915050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606084811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c83015283901b601f8201527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338201527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538201527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738201527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938201527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38201527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38201527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38201527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138201527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338201527fe8ee1178d6a717850b5d61039156000000000000000000000000000000000000610153820152600090826101618284f591505073ffffffffffffffffffffffffffffffffffffffff8116610b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f50726f78793a2063726561746532206661696c6564000000000000000000000060448201526064015b60405180910390fd5b9392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600082604051602001610b9991815260200190565b6040516020818303038152906040528051906020012090506040518060e00160405280610be67f000000000000000000000000000000000000000000000000000000000000000084610584565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c2b7f000000000000000000000000000000000000000000000000000000000000000084610584565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c707f000000000000000000000000000000000000000000000000000000000000000084610584565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cb57f000000000000000000000000000000000000000000000000000000000000000084610584565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cfa7f000000000000000000000000000000000000000000000000000000000000000084610584565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3f7f000000000000000000000000000000000000000000000000000000000000000084610584565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108767f000000000000000000000000000000000000000000000000000000000000000084610584565b6040805180820190915260008082526020820152845167ffffffffffffffff164080610e32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4465706c6f79436861696e3a2067656e6573697320626c6f636b68617368206e60448201527f6f7420617661696c61626c6500000000000000000000000000000000000000006064820152608401610b3b565b6000856000015163ffffffff166020876020015163ffffffff16901b60f86001901b171760001b905060008089848a602001518b606001518a878d604001518c604001518d60200151604051602001610f379a9998979695949392919060c09a8b1b7fffffffffffffffff0000000000000000000000000000000000000000000000009081168252600882019a909a526028810198909852604888019690965293881b87166068870152606092831b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660708801526084870192909252871b90951660a485015290811b841660ac8401521b9091169181019190915260d40190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060808401835260008085528c840151858401527f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1293850193909352908b01516060840152925090610fbd90611669565b60408051808201909152928352602083015250925050505b95945050505050565b81516020808401518551918601516040517fb820514800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352604483015283151560648301529091169063b820514890608401600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050506040828101518351602085015192517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292811660248401527f000000000000000000000000000000000000000000000000000000000000000081166044840152169063c0c53b8b90606401600060405180830381600087803b15801561112757600080fd5b505af115801561113b573d6000803e3d6000fd5b50505050600061126d8388606001516040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e00160405280846060015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015173ffffffffffffffffffffffffffffffffffffffff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff1681526020018460c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250905092915050565b9050826020015173ffffffffffffffffffffffffffffffffffffffff1663dc7e20a588600001518960200151896000015173ffffffffffffffffffffffffffffffffffffffff1660001b8b604001518b604001516113446040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b8c8e602001518a6040518a63ffffffff1660e01b815260040161136f99989796959493929190611ab4565b600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b505050506060830151604080850151602086015191517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015291811660448301529091169063c0c53b8b90606401600060405180830381600087803b15801561144a57600080fd5b505af115801561145e573d6000803e3d6000fd5b505050506080830151606084015160208501516040517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201527f000000000000000000000000000000000000000000000000000000000000000083166024820152908216604482015291169063c0c53b8b90606401600060405180830381600087803b15801561150a57600080fd5b505af115801561151e573d6000803e3d6000fd5b50505060a084015160608501516040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000821660248201529116915063485cc95590604401600060405180830381600087803b1580156115bd57600080fd5b505af11580156115d1573d6000803e3d6000fd5b50505060c084015160808501516040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116915063c4d66de890602401600060405180830381600087803b15801561164857600080fd5b505af115801561165c573d6000803e3d6000fd5b5050505050505050505050565b600081600001518260200151836040015184606001516040516020016116a8949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146116e957600080fd5b919050565b6000806040838503121561170157600080fd5b61170a836116c5565b946020939093013593505050565b6040516080810167ffffffffffffffff81118282101715611762577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803567ffffffffffffffff811681146116e957600080fd5b803563ffffffff811681146116e957600080fd5b6000606082840312156117a657600080fd5b6040516060810181811067ffffffffffffffff821117156117f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806117ff836116c5565b815261180d602084016116c5565b602082015261181e604084016116c5565b60408201525092915050565b803580151581146116e957600080fd5b60008060008060008587036101a081121561185457600080fd5b8635955060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561188857600080fd5b611890611718565b61189c60208901611768565b815260408801356020820152606088013560408201526118be60808901611768565b6060820152945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60820112156118f557600080fd5b506118fe611718565b61190a60a08801611780565b815261191860c08801611780565b602082015261192960e08801611768565b604082015261193b61010088016116c5565b60608201529250611950876101208801611794565b915061195f610180870161182a565b90509295509295909350565b60006020828403121561197d57600080fd5b5035919050565b60e0810161057e828473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60008060408385031215611a0857600080fd5b823560ff8116811461170a57600080fd5b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526101408101610fd5606083018473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60006102808201905063ffffffff808c168352808b16602084015289604084015267ffffffffffffffff8916606084015273ffffffffffffffffffffffffffffffffffffffff881660808401528087511660a084015260ff60208801511660c084015260ff60408801511660e08401528060608801511661010084015280608088015116610120840152506fffffffffffffffffffffffffffffffff60a087015116610140830152611b7f61016083018673ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8416610180830152825173ffffffffffffffffffffffffffffffffffffffff9081166101a0840152602084015181166101c0840152604084015181166101e0840152606084015181166102008401526080840151811661022084015260a0840151811661024084015260c0840151166102608301529a995050505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_proxyAdmin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_protocolVersions\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_PASSER_STORAGE_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateBatchInbox\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"genesisConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GenesisConfiguration\",\"components\":[{\"name\":\"l1Number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l2Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2StateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2Time\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"gasConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GasConfiguration\",\"components\":[{\"name\":\"basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"addressConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.AddressConfiguration\",\"components\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"proofsEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployAddresses\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"protocolVersions\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAddress\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"configHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"batchInbox\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"addresses\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x6101c06040523480156200001257600080fd5b506040516200230a3803806200230a8339810160408190526200003591620002bb565b62000040336200016d565b6001600160a01b038a166200005457600080fd5b6001600160a01b0389166200006857600080fd5b6001600160a01b0388166200007c57600080fd5b6001600160a01b0387166200009057600080fd5b6001600160a01b038616620000a457600080fd5b6001600160a01b038516620000b857600080fd5b6001600160a01b038416620000cc57600080fd5b6001600160a01b038316620000e057600080fd5b6001600160a01b038216620000f457600080fd5b6001600160a01b0381166200010857600080fd5b6001600160a01b03808b1660805289811660a05288811660c05287811660e052868116610100528581166101205284811661014052838116610160528281166101805281166101a0526200015c8b620001bd565b50505050505050505050506200039e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001c762000240565b6001600160a01b038116620002325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200023d816200016d565b50565b6000546001600160a01b031633146200029c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000229565b565b80516001600160a01b0381168114620002b657600080fd5b919050565b60008060008060008060008060008060006101608c8e031215620002de57600080fd5b620002e98c6200029e565b9a50620002f960208d016200029e565b99506200030960408d016200029e565b98506200031960608d016200029e565b97506200032960808d016200029e565b96506200033960a08d016200029e565b95506200034960c08d016200029e565b94506200035960e08d016200029e565b93506200036a6101008d016200029e565b92506200037b6101208d016200029e565b91506200038c6101408d016200029e565b90509295989b509295989b9093969950565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051611e64620004a660003960006102670152600081816101df01528181611066015281816113770152818161144001526114fa015260008181610240015281816106fe0152610b4b0152600081816102f0015281816107cd0152610c1a0152600081816102c90152818161089c0152610ce901526000818161036c015281816108570152610ca4015260008181610140015281816108120152610c5f0152600081816101b8015281816107430152610b90015260008181610191015281816107880152610bd50152600081816102190152818161040c01526115fb0152611e646000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638da5cb5b116100b2578063aabcb26e11610081578063c4e8ddfa11610066578063c4e8ddfa14610367578063d655a76f1461038e578063f2fde38b146103a157600080fd5b8063aabcb26e14610312578063beab4f7e1461034757600080fd5b80638da5cb5b1461029357806394e49a1b146102b15780639b7d7f0a146102c4578063a7119869146102eb57600080fd5b8063380cb000116101095780634d9f1559116100ee5780634d9f15591461023b5780636624856a14610262578063715018a61461028957600080fd5b8063380cb000146102015780633e47158c1461021457600080fd5b8063078f29cf1461013b5780630a49cb031461018c57806333d7e2bd146101b357806335e80ab3146101da575b600080fd5b6101627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b61016261020f366004611913565b6103b4565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6102916105e0565b005b60005473ffffffffffffffffffffffffffffffffffffffff16610162565b6102916102bf366004611a5f565b6105f4565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6103397f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1281565b604051908152602001610183565b61035a610355366004611b90565b610688565b6040516101839190611ba9565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b61016261039c366004611c1a565b6108e0565b6102916103af366004611c3e565b610923565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606083811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c8301527f0000000000000000000000000000000000000000000000000000000000000000811b601f8301527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338301527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538301527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738301527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938301527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38301527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38301527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38301527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138301527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338301527fe8ee1178d6a717850b5d61039156ff000000000000000000000000000000000061015383015230901b610162820152610176810182905261016180822061019683015260559101206000905b90505b92915050565b6105e86109df565b6105f26000610a60565b565b6105fc6109df565b600061060786610ad5565b9050600061061c878787876000015186610d0e565b9050600061062b6000896108e0565b905061063b868683858789610f68565b815160208301516040518a927f49ea8b4c640f12c7d41cb7b7931d984f226f95ce1d55e1e449ee3d61b877c1ad926106769286908990611c59565b60405180910390a25050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526000826040516020016106d691815260200190565b6040516020818303038152906040528051906020012090506040518060e001604052806107237f0000000000000000000000000000000000000000000000000000000000000000846103b4565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107687f0000000000000000000000000000000000000000000000000000000000000000846103b4565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107ad7f0000000000000000000000000000000000000000000000000000000000000000846103b4565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107f27f0000000000000000000000000000000000000000000000000000000000000000846103b4565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108377f0000000000000000000000000000000000000000000000000000000000000000846103b4565b73ffffffffffffffffffffffffffffffffffffffff16815260200161087c7f0000000000000000000000000000000000000000000000000000000000000000846103b4565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108c17f0000000000000000000000000000000000000000000000000000000000000000846103b4565b73ffffffffffffffffffffffffffffffffffffffff1690529392505050565b60006068826040516020016108f791815260200190565b6040516020818303038152906040528051906020012060001c901c60988460ff16901b17905092915050565b61092b6109df565b73ffffffffffffffffffffffffffffffffffffffff81166109d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6109dc81610a60565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ca565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600082604051602001610b2391815260200190565b6040516020818303038152906040528051906020012090506040518060e00160405280610b707f0000000000000000000000000000000000000000000000000000000000000000846115f3565b73ffffffffffffffffffffffffffffffffffffffff168152602001610bb57f0000000000000000000000000000000000000000000000000000000000000000846115f3565b73ffffffffffffffffffffffffffffffffffffffff168152602001610bfa7f0000000000000000000000000000000000000000000000000000000000000000846115f3565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c3f7f0000000000000000000000000000000000000000000000000000000000000000846115f3565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c847f0000000000000000000000000000000000000000000000000000000000000000846115f3565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cc97f0000000000000000000000000000000000000000000000000000000000000000846115f3565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108c17f0000000000000000000000000000000000000000000000000000000000000000846115f3565b6040805180820190915260008082526020820152845167ffffffffffffffff164080610dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4465706c6f79436861696e3a2067656e6573697320626c6f636b68617368206e60448201527f6f7420617661696c61626c65000000000000000000000000000000000000000060648201526084016109ca565b6000856000015163ffffffff166020876020015163ffffffff16901b60f86001901b171760001b905060008089848a602001518b606001518a878d604001518c604001518d60200151604051602001610ec19a9998979695949392919060c09a8b1b7fffffffffffffffff0000000000000000000000000000000000000000000000009081168252600882019a909a526028810198909852604888019690965293881b87166068870152606092831b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660708801526084870192909252871b90951660a485015290811b841660ac8401521b9091169181019190915260d40190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060808401835260008085528c840151858401527f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1293850193909352908b01516060840152925090610f4790611620565b60408051808201909152928352602083015250925050505b95945050505050565b81516020808401518551918601516040517fb820514800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352604483015283151560648301529091169063b820514890608401600060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b505050506040828101518351602085015192517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292811660248401527f000000000000000000000000000000000000000000000000000000000000000081166044840152169063c0c53b8b90606401600060405180830381600087803b1580156110b157600080fd5b505af11580156110c5573d6000803e3d6000fd5b5050505060006111f78388606001516040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e00160405280846060015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015173ffffffffffffffffffffffffffffffffffffffff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff1681526020018460c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250905092915050565b9050826020015173ffffffffffffffffffffffffffffffffffffffff1663dc7e20a588600001518960200151896000015173ffffffffffffffffffffffffffffffffffffffff1660001b8b604001518b604001516112ce6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b8c8e602001518a6040518a63ffffffff1660e01b81526004016112f999989796959493929190611cf4565b600060405180830381600087803b15801561131357600080fd5b505af1158015611327573d6000803e3d6000fd5b505050506060830151604080850151602086015191517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015291811660448301529091169063c0c53b8b90606401600060405180830381600087803b1580156113d457600080fd5b505af11580156113e8573d6000803e3d6000fd5b505050506080830151606084015160208501516040517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201527f000000000000000000000000000000000000000000000000000000000000000083166024820152908216604482015291169063c0c53b8b90606401600060405180830381600087803b15801561149457600080fd5b505af11580156114a8573d6000803e3d6000fd5b50505060a084015160608501516040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000821660248201529116915063485cc95590604401600060405180830381600087803b15801561154757600080fd5b505af115801561155b573d6000803e3d6000fd5b50505060c084015160808501516040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116915063c4d66de890602401600060405180830381600087803b1580156115d257600080fd5b505af11580156115e6573d6000803e3d6000fd5b5050505050505050505050565b60006105d7837f00000000000000000000000000000000000000000000000000000000000000008461167c565b6000816000015182602001518360400151846060015160405160200161165f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606084811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c83015283901b601f8201527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338201527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538201527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738201527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938201527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38201527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38201527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38201527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138201527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338201527fe8ee1178d6a717850b5d61039156000000000000000000000000000000000000610153820152600090826101618284f591505073ffffffffffffffffffffffffffffffffffffffff81166118e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f50726f78793a2063726561746532206661696c6564000000000000000000000060448201526064016109ca565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461190e57600080fd5b919050565b6000806040838503121561192657600080fd5b61192f836118ea565b946020939093013593505050565b6040516080810167ffffffffffffffff81118282101715611987577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803567ffffffffffffffff8116811461190e57600080fd5b803563ffffffff8116811461190e57600080fd5b6000606082840312156119cb57600080fd5b6040516060810181811067ffffffffffffffff82111715611a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080611a24836118ea565b8152611a32602084016118ea565b6020820152611a43604084016118ea565b60408201525092915050565b8035801515811461190e57600080fd5b60008060008060008587036101a0811215611a7957600080fd5b8635955060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215611aad57600080fd5b611ab561193d565b611ac16020890161198d565b81526040880135602082015260608801356040820152611ae36080890161198d565b6060820152945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082011215611b1a57600080fd5b50611b2361193d565b611b2f60a088016119a5565b8152611b3d60c088016119a5565b6020820152611b4e60e0880161198d565b6040820152611b6061010088016118ea565b60608201529250611b758761012088016119b9565b9150611b846101808701611a4f565b90509295509295909350565b600060208284031215611ba257600080fd5b5035919050565b60e081016105da828473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60008060408385031215611c2d57600080fd5b823560ff8116811461192f57600080fd5b600060208284031215611c5057600080fd5b6105d7826118ea565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526101408101610f5f606083018473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60006102808201905063ffffffff808c168352808b16602084015289604084015267ffffffffffffffff8916606084015273ffffffffffffffffffffffffffffffffffffffff881660808401528087511660a084015260ff60208801511660c084015260ff60408801511660e08401528060608801511661010084015280608088015116610120840152506fffffffffffffffffffffffffffffffff60a087015116610140830152611dbf61016083018673ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8416610180830152825173ffffffffffffffffffffffffffffffffffffffff9081166101a0840152602084015181166101c0840152604084015181166101e0840152606084015181166102008401526080840151811661022084015260a0840151811661024084015260c0840151166102608301529a995050505050505050505056fea164736f6c634300080f000a", } // DeployChainABI is the input ABI used to generate the binding from. @@ -78,7 +78,7 @@ var DeployChainABI = DeployChainMetaData.ABI var DeployChainBin = DeployChainMetaData.Bin // DeployDeployChain deploys a new Ethereum contract, binding an instance of DeployChain to it. -func DeployDeployChain(auth *bind.TransactOpts, backend bind.ContractBackend, _proxyAdmin common.Address, _optimismPortal common.Address, _systemConfig common.Address, _l1StandardBridge common.Address, _l1ERC721Bridge common.Address, _optimismMintableERC20Factory common.Address, _l1CrossDomainMessenger common.Address, _l2OutputOracle common.Address, _superchainConfig common.Address, _protocolVersions common.Address) (common.Address, *types.Transaction, *DeployChain, error) { +func DeployDeployChain(auth *bind.TransactOpts, backend bind.ContractBackend, _owner common.Address, _proxyAdmin common.Address, _optimismPortal common.Address, _systemConfig common.Address, _l1StandardBridge common.Address, _l1ERC721Bridge common.Address, _optimismMintableERC20Factory common.Address, _l1CrossDomainMessenger common.Address, _l2OutputOracle common.Address, _superchainConfig common.Address, _protocolVersions common.Address) (common.Address, *types.Transaction, *DeployChain, error) { parsed, err := DeployChainMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -87,7 +87,7 @@ func DeployDeployChain(auth *bind.TransactOpts, backend bind.ContractBackend, _p return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(DeployChainBin), backend, _proxyAdmin, _optimismPortal, _systemConfig, _l1StandardBridge, _l1ERC721Bridge, _optimismMintableERC20Factory, _l1CrossDomainMessenger, _l2OutputOracle, _superchainConfig, _protocolVersions) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(DeployChainBin), backend, _owner, _proxyAdmin, _optimismPortal, _systemConfig, _l1StandardBridge, _l1ERC721Bridge, _optimismMintableERC20Factory, _l1CrossDomainMessenger, _l2OutputOracle, _superchainConfig, _protocolVersions) if err != nil { return common.Address{}, nil, nil, err } @@ -515,6 +515,37 @@ func (_DeployChain *DeployChainCallerSession) OptimismPortal() (common.Address, return _DeployChain.Contract.OptimismPortal(&_DeployChain.CallOpts) } +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DeployChain *DeployChainCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DeployChain.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DeployChain *DeployChainSession) Owner() (common.Address, error) { + return _DeployChain.Contract.Owner(&_DeployChain.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DeployChain *DeployChainCallerSession) Owner() (common.Address, error) { + return _DeployChain.Contract.Owner(&_DeployChain.CallOpts) +} + // ProtocolVersions is a free data retrieval call binding the contract method 0x6624856a. // // Solidity: function protocolVersions() view returns(address) @@ -691,25 +722,46 @@ func (_DeployChain *DeployChainTransactorSession) Deploy(chainID *big.Int, genes return _DeployChain.Contract.Deploy(&_DeployChain.TransactOpts, chainID, genesisConfig, gasConfig, addressConfig, proofsEnabled) } -// DeployProxy is a paid mutator transaction binding the contract method 0x38db8411. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function deployProxy(address proxy, bytes32 salt) returns(address) -func (_DeployChain *DeployChainTransactor) DeployProxy(opts *bind.TransactOpts, proxy common.Address, salt [32]byte) (*types.Transaction, error) { - return _DeployChain.contract.Transact(opts, "deployProxy", proxy, salt) +// Solidity: function renounceOwnership() returns() +func (_DeployChain *DeployChainTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DeployChain.contract.Transact(opts, "renounceOwnership") } -// DeployProxy is a paid mutator transaction binding the contract method 0x38db8411. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function deployProxy(address proxy, bytes32 salt) returns(address) -func (_DeployChain *DeployChainSession) DeployProxy(proxy common.Address, salt [32]byte) (*types.Transaction, error) { - return _DeployChain.Contract.DeployProxy(&_DeployChain.TransactOpts, proxy, salt) +// Solidity: function renounceOwnership() returns() +func (_DeployChain *DeployChainSession) RenounceOwnership() (*types.Transaction, error) { + return _DeployChain.Contract.RenounceOwnership(&_DeployChain.TransactOpts) } -// DeployProxy is a paid mutator transaction binding the contract method 0x38db8411. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function deployProxy(address proxy, bytes32 salt) returns(address) -func (_DeployChain *DeployChainTransactorSession) DeployProxy(proxy common.Address, salt [32]byte) (*types.Transaction, error) { - return _DeployChain.Contract.DeployProxy(&_DeployChain.TransactOpts, proxy, salt) +// Solidity: function renounceOwnership() returns() +func (_DeployChain *DeployChainTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _DeployChain.Contract.RenounceOwnership(&_DeployChain.TransactOpts) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DeployChain *DeployChainTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _DeployChain.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DeployChain *DeployChainSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DeployChain.Contract.TransferOwnership(&_DeployChain.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DeployChain *DeployChainTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DeployChain.Contract.TransferOwnership(&_DeployChain.TransactOpts, newOwner) } // DeployChainDeployIterator is returned from FilterDeploy and is used to iterate over the raw logs and unpacked data for Deploy events raised by the DeployChain contract. @@ -859,3 +911,156 @@ func (_DeployChain *DeployChainFilterer) ParseDeploy(log types.Log) (*DeployChai event.Raw = log return event, nil } + +// DeployChainOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the DeployChain contract. +type DeployChainOwnershipTransferredIterator struct { + Event *DeployChainOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DeployChainOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DeployChainOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DeployChainOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DeployChainOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DeployChainOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DeployChainOwnershipTransferred represents a OwnershipTransferred event raised by the DeployChain contract. +type DeployChainOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DeployChain *DeployChainFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*DeployChainOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _DeployChain.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &DeployChainOwnershipTransferredIterator{contract: _DeployChain.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DeployChain *DeployChainFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *DeployChainOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _DeployChain.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DeployChainOwnershipTransferred) + if err := _DeployChain.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DeployChain *DeployChainFilterer) ParseOwnershipTransferred(log types.Log) (*DeployChainOwnershipTransferred, error) { + event := new(DeployChainOwnershipTransferred) + if err := _DeployChain.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/bindings/output_oracle.go b/bindings/output_oracle.go index f31d4f6..89eb04c 100644 --- a/bindings/output_oracle.go +++ b/bindings/output_oracle.go @@ -39,7 +39,7 @@ type TypesOutputProposal struct { // OutputOracleMetaData contains all meta data concerning the OutputOracle contract. var OutputOracleMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_systemConfigGlobal\",\"type\":\"address\",\"internalType\":\"contractSystemConfigGlobal\"},{\"name\":\"_maxOutputCount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"configHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"enableProofs\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getL2Output\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputProposal\",\"components\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getL2OutputAfter\",\"inputs\":[{\"name\":\"_l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputProposal\",\"components\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getL2OutputIndexAfter\",\"inputs\":[{\"name\":\"_l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfigOwnable\"},{\"name\":\"_configHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_genesisOutputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_proofsEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"latestBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestL2Output\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputProposal\",\"components\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestOutputIndex\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOutputCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextOutputIndex\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofsEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposeL2Output\",\"inputs\":[{\"name\":\"_outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proposer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfigOwnable\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfigGlobal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfigGlobal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutputProposed\",\"inputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"l1Timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162001c4538038062001c45833981016040819052620000349162000266565b6001600160a01b03821660805260a08190526200005560008080806200005d565b5050620002a2565b600054610100900460ff16158080156200007e5750600054600160ff909116105b80620000ae57506200009b306200025760201b620012981760201c565b158015620000ae575060005460ff166001145b620001165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff1916600117905580156200013a576000805461ff0019166101001790555b600080546001600160a01b038716620100000262010000600160b01b03199091161781556001858155604080516060810182528681526001600160801b0342811660208301908152928201858152600280549586018155958690529151939094027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810193909355905190518316600160801b029216919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf909101556003805483151560ff19909116179055801562000250576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600080604083850312156200027a57600080fd5b82516001600160a01b03811681146200029257600080fd5b6020939093015192949293505050565b60805160a051611961620002e4600039600081816102a40152818161046e0152610bdd0152600081816102cb01528181610a8d0152610e7d01526119616000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80639ad84880116100b2578063c885bbb611610081578063cd92b3fe11610066578063cd92b3fe146102c6578063cf8e5cf0146102ed578063e1f1176d1461030057600080fd5b8063c885bbb614610297578063cc23c3811461029f57600080fd5b80639ad848801461021a578063a25ae5571461022d578063a8e4fb901461027c578063b82051481461028457600080fd5b806360df09b2116100ee57806360df09b2146101ec57806369f16eec146101f65780636abcf563146101ff5780637f0064201461020757600080fd5b806325f881721461012057806333d7e2bd146101425780634599c7881461018d57806354fd4d50146101a3575b600080fd5b60035461012d9060ff1681565b60405190151581526020015b60405180910390f35b6000546101689062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610139565b610195610309565b604051908152602001610139565b6101df6040518060400160405280600c81526020017f312e382e312d626574612e31000000000000000000000000000000000000000081525081565b604051610139919061168c565b6101f4610376565b005b61019560045481565b61019561046a565b6101956102153660046116ff565b6104ab565b6101f4610228366004611718565b6106fa565b61024061023b3660046116ff565b610d0c565b60408051825181526020808401516fffffffffffffffffffffffffffffffff908116918301919091529282015190921690820152606001610139565b610168610da0565b6101f46102923660046117d5565b610f17565b6102406111cb565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6102406102fb3660046116ff565b611260565b61019560015481565b6002546000901561035c576002600454815481106103295761032961181f565b906000526020600020906002020160010160109054906101000a90046fffffffffffffffffffffffffffffffff1661035f565b60005b6fffffffffffffffffffffffffffffffff16905090565b61037e610da0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4f75747075744f7261636c653a206f6e6c79207468652070726f706f7365722060448201527f616464726573732063616e20656e61626c652070726f6f66730000000000000060648201526084015b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60007f0000000000000000000000000000000000000000000000000000000000000000600454600161049c919061184e565b6104a691906118bc565b905090565b60006104b5610309565b82111561056a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a401610434565b60025461061f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a401610434565b600254600090816106318260016118bc565b60045461063e919061184e565b90505b818310156106f15760006002610657848661184e565b61066191906118d0565b600254909150600090610674848461184e565b61067e91906118bc565b905086600282815481106106945761069461181f565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1610156106e6576106df82600161184e565b94506106ea565b8193505b5050610641565b50909392505050565b610702610da0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f75747075744f7261636c653a206f6e6c79207468652070726f706f7365722060448201527f616464726573732063616e2070726f706f7365206e6577206f757470757473006064820152608401610434565b6107c4610309565b8411610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f4f75747075744f7261636c653a20626c6f636b206e756d626572206d7573742060448201527f62652067726561746572207468616e2070726576696f75736c792070726f706f60648201527f73656420626c6f636b206e756d62657200000000000000000000000000000000608482015260a401610434565b84610905576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4f75747075744f7261636c653a204c32206f75747075742070726f706f73616c60448201527f2063616e6e6f7420626520746865207a65726f206861736800000000000000006064820152608401610434565b60035460ff1615610b645782408061099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4f75747075744f7261636c653a20626c6f636b68617368206e6f74206176616960448201527f6c61626c650000000000000000000000000000000000000000000000000000006064820152608401610434565b60006002600454815481106109b6576109b661181f565b600091825260208083206002909202909101546001546040805193840191909152820185905260608201819052608082018a90529250610a459060a0016040516020818303038152906040528051906020012086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112b492505050565b6040517f6a73b00b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636a73b00b90602401602060405180830381865afa158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa91906118e4565b610b60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f75747075744f7261636c653a20696e76616c6964207369676e6174757265006044820152606401610434565b5050505b610b6c61046a565b600481905560405142815285919087907fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e29060200160405180910390a4604080516060810182528681526fffffffffffffffffffffffffffffffff42811660208301528616918101919091526002547f00000000000000000000000000000000000000000000000000000000000000001115610c9a57600280546001810182556000829052825191027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810191909155602082015160408301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029116177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf90910155610d04565b80600260045481548110610cb057610cb061181f565b60009182526020918290208351600290920201908155908201516040909201516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029216919091176001909101555b505050505050565b604080516060810182526000808252602082018190529181019190915260028281548110610d3c57610d3c61181f565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b60008054819062010000900473ffffffffffffffffffffffffffffffffffffffff16610dcd576000610e5e565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190611908565b905073ffffffffffffffffffffffffffffffffffffffff8116610f0f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0a9190611908565b610f11565b805b91505090565b600054610100900460ff1615808015610f375750600054600160ff909116105b80610f515750303b158015610f51575060005460ff166001145b610fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610434565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561103b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6000805473ffffffffffffffffffffffffffffffffffffffff871662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff9091161781556001858155604080516060810182528681526fffffffffffffffffffffffffffffffff42811660208301908152928201858152600280549586018155958690529151939094027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810193909355905190518316700100000000000000000000000000000000029216919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf90910155600380548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911617905580156111c457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60408051606081018252600080825260208201819052918101919091526002600454815481106111fd576111fd61181f565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff80821694840194909452700100000000000000000000000000000000900490921691810191909152919050565b60408051606081018252600080825260208201819052918101919091526002611288836104ab565b81548110610d3c57610d3c61181f565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008060006112c385856112d8565b915091506112d08161131d565b509392505050565b600080825160410361130e5760208301516040840151606085015160001a61130287828585611574565b94509450505050611316565b506000905060025b9250929050565b600081600481111561133157611331611925565b036113395750565b600181600481111561134d5761134d611925565b036113b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610434565b60028160048111156113c8576113c8611925565b0361142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610434565b600381600481111561144357611443611925565b036114d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610434565b60048160048111156114e4576114e4611925565b03611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610434565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156115ab5750600090506003611683565b8460ff16601b141580156115c357508460ff16601c14155b156115d45750600090506004611683565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611628573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661167c57600060019250925050611683565b9150600090505b94509492505050565b600060208083528351808285015260005b818110156116b95785810183015185820160400152820161169d565b818111156116cb576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561171157600080fd5b5035919050565b60008060008060006080868803121561173057600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff8082111561175d57600080fd5b818801915088601f83011261177157600080fd5b81358181111561178057600080fd5b89602082850101111561179257600080fd5b9699959850939650602001949392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461157157600080fd5b801515811461157157600080fd5b600080600080608085870312156117eb57600080fd5b84356117f6816117a5565b935060208501359250604085013591506060850135611814816117c7565b939692955090935050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115611888577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826118cb576118cb61188d565b500690565b6000826118df576118df61188d565b500490565b6000602082840312156118f657600080fd5b8151611901816117c7565b9392505050565b60006020828403121561191a57600080fd5b8151611901816117a5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + Bin: "0x60c06040523480156200001157600080fd5b5060405162001b9338038062001b93833981016040819052620000349162000266565b6001600160a01b03821660805260a08190526200005560008080806200005d565b5050620002a2565b600054610100900460ff16158080156200007e5750600054600160ff909116105b80620000ae57506200009b306200025760201b620011e61760201c565b158015620000ae575060005460ff166001145b620001165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff1916600117905580156200013a576000805461ff0019166101001790555b600080546001600160a01b038716620100000262010000600160b01b03199091161781556001858155604080516060810182528681526001600160801b0342811660208301908152928201858152600280549586018155958690529151939094027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810193909355905190518316600160801b029216919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf909101556003805483151560ff19909116179055801562000250576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600080604083850312156200027a57600080fd5b82516001600160a01b03811681146200029257600080fd5b6020939093015192949293505050565b60805160a0516118af620002e4600039600081816102a40152818161046e0152610b2b0152600081816102cb015281816109db0152610dcb01526118af6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80639ad84880116100b2578063c885bbb611610081578063cd92b3fe11610066578063cd92b3fe146102c6578063cf8e5cf0146102ed578063e1f1176d1461030057600080fd5b8063c885bbb614610297578063cc23c3811461029f57600080fd5b80639ad848801461021a578063a25ae5571461022d578063a8e4fb901461027c578063b82051481461028457600080fd5b806360df09b2116100ee57806360df09b2146101ec57806369f16eec146101f65780636abcf563146101ff5780637f0064201461020757600080fd5b806325f881721461012057806333d7e2bd146101425780634599c7881461018d57806354fd4d50146101a3575b600080fd5b60035461012d9060ff1681565b60405190151581526020015b60405180910390f35b6000546101689062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610139565b610195610309565b604051908152602001610139565b6101df6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161013991906115da565b6101f4610376565b005b61019560045481565b61019561046a565b61019561021536600461164d565b6104ab565b6101f4610228366004611666565b610641565b61024061023b36600461164d565b610c5a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff908116918301919091529282015190921690820152606001610139565b610168610cee565b6101f4610292366004611723565b610e65565b610240611119565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6102406102fb36600461164d565b6111ae565b61019560015481565b6002546000901561035c576002600454815481106103295761032961176d565b906000526020600020906002020160010160109054906101000a90046fffffffffffffffffffffffffffffffff1661035f565b60005b6fffffffffffffffffffffffffffffffff16905090565b61037e610cee565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4f75747075744f7261636c653a206f6e6c79207468652070726f706f7365722060448201527f616464726573732063616e20656e61626c652070726f6f66730000000000000060648201526084015b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60007f0000000000000000000000000000000000000000000000000000000000000000600454600161049c919061179c565b6104a6919061180a565b905090565b60006104b5610309565b82111561056a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a401610434565b600061057461046a565b6002549091508190600090610589908361179c565b90505b8082101561062b57600060026105a2838561179c565b6105ac919061181e565b6002805491925087916105bf908461180a565b815481106105cf576105cf61176d565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1610156106215761061a81600161179c565b9250610625565b8091505b5061058c565b600254610638908361180a565b95945050505050565b610649610cee565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610703576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f75747075744f7261636c653a206f6e6c79207468652070726f706f7365722060448201527f616464726573732063616e2070726f706f7365206e6577206f757470757473006064820152608401610434565b61070b610309565b84116107bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f4f75747075744f7261636c653a20626c6f636b206e756d626572206d7573742060448201527f62652067726561746572207468616e2070726576696f75736c792070726f706f60648201527f73656420626c6f636b206e756d62657200000000000000000000000000000000608482015260a401610434565b8461084c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4f75747075744f7261636c653a204c32206f75747075742070726f706f73616c60448201527f2063616e6e6f7420626520746865207a65726f206861736800000000000000006064820152608401610434565b60035460ff1615610ab2578240806108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4f75747075744f7261636c653a20626c6f636b68617368206e6f74206176616960448201527f6c61626c650000000000000000000000000000000000000000000000000000006064820152608401610434565b60006002600454815481106108fd576108fd61176d565b6000918252602080832060029092029091015460015460408051938401919091528201859052606082018990526080820181905260a082018a905292506109939060c0016040516020818303038152906040528051906020012086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120292505050565b6040517f6a73b00b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636a73b00b90602401602060405180830381865afa158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a489190611832565b610aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f75747075744f7261636c653a20696e76616c6964207369676e6174757265006044820152606401610434565b5050505b610aba61046a565b600481905560405142815285919087907fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e29060200160405180910390a4604080516060810182528681526fffffffffffffffffffffffffffffffff42811660208301528616918101919091526002547f00000000000000000000000000000000000000000000000000000000000000001115610be857600280546001810182556000829052825191027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810191909155602082015160408301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029116177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf90910155610c52565b80600260045481548110610bfe57610bfe61176d565b60009182526020918290208351600290920201908155908201516040909201516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029216919091176001909101555b505050505050565b604080516060810182526000808252602082018190529181019190915260028281548110610c8a57610c8a61176d565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b60008054819062010000900473ffffffffffffffffffffffffffffffffffffffff16610d1b576000610dac565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dac9190611856565b905073ffffffffffffffffffffffffffffffffffffffff8116610e5d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a8e4fb906040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e589190611856565b610e5f565b805b91505090565b600054610100900460ff1615808015610e855750600054600160ff909116105b80610e9f5750303b158015610e9f575060005460ff166001145b610f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610434565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f8957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6000805473ffffffffffffffffffffffffffffffffffffffff871662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff9091161781556001858155604080516060810182528681526fffffffffffffffffffffffffffffffff42811660208301908152928201858152600280549586018155958690529151939094027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810193909355905190518316700100000000000000000000000000000000029216919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf90910155600380548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055801561111257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b604080516060810182526000808252602082018190529181019190915260026004548154811061114b5761114b61176d565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff80821694840194909452700100000000000000000000000000000000900490921691810191909152919050565b604080516060810182526000808252602082018190529181019190915260026111d6836104ab565b81548110610c8a57610c8a61176d565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008060006112118585611226565b9150915061121e8161126b565b509392505050565b600080825160410361125c5760208301516040840151606085015160001a611250878285856114c2565b94509450505050611264565b506000905060025b9250929050565b600081600481111561127f5761127f611873565b036112875750565b600181600481111561129b5761129b611873565b03611302576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610434565b600281600481111561131657611316611873565b0361137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610434565b600381600481111561139157611391611873565b0361141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610434565b600481600481111561143257611432611873565b036114bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610434565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156114f957506000905060036115d1565b8460ff16601b1415801561151157508460ff16601c14155b1561152257506000905060046115d1565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611576573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166115ca576000600192509250506115d1565b9150600090505b94509492505050565b600060208083528351808285015260005b81811015611607578581018301518582016040015282016115eb565b81811115611619576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561165f57600080fd5b5035919050565b60008060008060006080868803121561167e57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff808211156116ab57600080fd5b818801915088601f8301126116bf57600080fd5b8135818111156116ce57600080fd5b8960208285010111156116e057600080fd5b9699959850939650602001949392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146114bf57600080fd5b80151581146114bf57600080fd5b6000806000806080858703121561173957600080fd5b8435611744816116f3565b93506020850135925060408501359150606085013561176281611715565b939692955090935050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156117d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611819576118196117db565b500690565b60008261182d5761182d6117db565b500490565b60006020828403121561184457600080fd5b815161184f81611715565b9392505050565b60006020828403121561186857600080fd5b815161184f816116f3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", } // OutputOracleABI is the input ABI used to generate the binding from. diff --git a/bindings/portal.go b/bindings/portal.go index ff5c3ca..0654056 100644 --- a/bindings/portal.go +++ b/bindings/portal.go @@ -50,7 +50,7 @@ type TypesWithdrawalTransaction struct { // PortalMetaData contains all meta data concerning the Portal contract. var PortalMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"balance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositERC20Transaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_mint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractOutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractISystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveAndFinalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ContentLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyItem\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDataRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidHeader\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonReentrant\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCustomGasToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedList\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedString\",\"inputs\":[]}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b62000282565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001b460201b620018841760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603580546001600160a01b038087166001600160a01b03199283161790925560368054868416908316179055603480548584169216919091179055603254166200015d57603280546001600160a01b03191661dead1790555b62000167620001c3565b8015620001ae576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff16620002305760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b0316600003620002805760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b6150d180620002926000396000f3fe6080604052600436106101635760003560e01c80638b4c40b0116100c0578063a35d99df11610074578063c0c53b8b11610059578063c0c53b8b1461043f578063cff0ab961461045f578063e9e05c421461050057600080fd5b8063a35d99df146103e3578063b69ef8a81461041c57600080fd5b80639b5f694a116100a55780639b5f694a146103595780639bf62d8214610386578063a14238e7146103b357600080fd5b80638b4c40b0146101885780638c3152e91461033957600080fd5b80634870496f116101175780635c975abb116100fc5780635c975abb146102d45780636dbffb78146102f957806371cfaa3f1461031957600080fd5b80634870496f1461026857806354fd4d501461028857600080fd5b806335e80ab31161014857806335e80ab314610206578063452a93201461023357806347f55db51461024857600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a060006040518060200160405280600081525061050e565b005b600080fd5b34801561019b57600080fd5b506101886101aa3660046144f1565b6105b3565b3480156101bb57600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506034546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561023f57600080fd5b506101dc6107f4565b34801561025457600080fd5b50610188610263366004614625565b61088d565b34801561027457600080fd5b50610188610283366004614625565b611280565b34801561029457600080fd5b50604080518082018252600c81527f322e382e312d626574612e320000000000000000000000000000000000000000602082015290516101fd9190614777565b3480156102e057600080fd5b506102e9611294565b60405190151581526020016101fd565b34801561030557600080fd5b506102e961031436600461478a565b611328565b34801561032557600080fd5b506101886103343660046147b2565b6113e3565b34801561034557600080fd5b506101886103543660046147f8565b6115a5565b34801561036557600080fd5b506035546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039257600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506102e96103ce36600461478a565b60336020526000908152604090205460ff1681565b3480156103ef57600080fd5b506104036103fe366004614835565b6115e7565b60405167ffffffffffffffff90911681526020016101fd565b34801561042857600080fd5b50610431611600565b6040519081526020016101fd565b34801561044b57600080fd5b5061018861045a366004614850565b61165a565b34801561046b57600080fd5b506001546104c7906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b61018861050e36600461489b565b8260005a9050600061051e6118a0565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061055a57503415155b15610591576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059f88348989898961193d565b506105aa8282611ae9565b50505050505050565b8260005a905060006105c36118a0565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601610635576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603760008282546106479190614947565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd919061495f565b905061070173ffffffffffffffffffffffffffffffffffffffff831633308c611db6565b61070b8982614947565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610799919061495f565b146107d0576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107de8a8a8a8a8a8a61193d565b50506107ea8282611ae9565b5050505050505050565b603454604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108889190614978565b905090565b610895611294565b156108cc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610935576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c991906149b5565b5190506109e36109de36869003860186614a1a565b611e92565b8114610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610a8187611eee565b90506000816000604051602001610aa2929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610b559101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610b4b8789614a80565b8960400135611f1e565b610be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610a6d565b876040015173ffffffffffffffffffffffffffffffffffffffff16886020015173ffffffffffffffffffffffffffffffffffffffff16837f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6260405160405180910390a460325473ffffffffffffffffffffffffffffffffffffffff1661dead14610c97576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810189905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2b91906149b5565b80519091508414610de4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610a6d565b60008381526033602052604090205460ff1615610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610a6d565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558a01516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580610f0e6118a0565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601610f7157610f6a8b604001518c608001518d606001518e60a00151611f42565b91506111c4565b8073ffffffffffffffffffffffffffffffffffffffff168b6040015173ffffffffffffffffffffffffffffffffffffffff1603610fda576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608b01511561119b578a6060015160376000828254610ffa9190614b04565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611090919061495f565b90506110c58c604001518d606001518473ffffffffffffffffffffffffffffffffffffffff16611fa09092919063ffffffff16565b60608c01516110d49082614b04565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa15801561113e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611162919061495f565b14611199576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08b015151156111bf57610f6a8b604001518c6080015160008e60a00151611f42565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061122690851515815260200190565b60405180910390a28115801561123c5750326001145b15611273576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b61128d858585858561088d565b5050505050565b603454604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015611304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108889190614b1b565b6035546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916113dd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa15801561139e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c291906149b5565b602001516fffffffffffffffffffffffffffffffff16421190565b92915050565b60365473ffffffffffffffffffffffffffffffffffffffff163314611434576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61144062030d40611ffb565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32908490819062030d4090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161155d96959493929101614b38565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261159591614777565b60405180910390a450505050565b565b6115ad611294565b156115e4576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60006115f4826010614b9d565b6113dd90615208614bcd565b60008061160b6118a0565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611652574791505090565b505060375490565b600054610100900460ff161580801561167a5750600054600160ff909116105b806116945750303b158015611694575060005460ff166001145b611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a6d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561177e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6035805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603680548684169083161790556034805485841692169190911790556032541661181357603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61181b61205d565b801561187e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603654604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119349190614bf9565b90939092509050565b81801561195f575073ffffffffffffffffffffffffffffffffffffffff861615155b15611996576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119a081516115e7565b67ffffffffffffffff168367ffffffffffffffff1610156119ed576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c081511115611a2b576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114611a4c575033731111000000000000000000000000000000001111015b60008686868686604051602001611a67959493929190614b38565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051611ad79190614777565b60405180910390a45050505050505050565b600154600090611b1f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614b04565b90506000611b2b612170565b90506000816020015160ff16826000015163ffffffff16611b4c9190614c62565b90508215611c8357600154600090611b83908390700100000000000000000000000000000000900467ffffffffffffffff16614cca565b90506000836040015160ff1683611b9a9190614d3e565b600154611bba9084906fffffffffffffffffffffffffffffffff16614d3e565b611bc49190614c62565b600154909150600090611c1590611bee9084906fffffffffffffffffffffffffffffffff16614dfa565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166122ad565b90506001861115611c4457611c41611bee82876040015160ff1660018a611c3c9190614b04565b6122cc565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611cb6908490700100000000000000000000000000000000900467ffffffffffffffff16614bcd565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611d43576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611d6f906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614e6e565b90506000611d8148633b9aca00612321565b611d8b9083614eab565b905060005a611d9a9088614b04565b9050808211156107ea576107ea611db18284614b04565b612338565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261187e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612361565b60008160000151826020015183604001518460600151604051602001611ed1949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611ed1979096959101614ebf565b600080611f2a8661246d565b9050611f388186868661249f565b9695505050505050565b6000806000611f528660006124cf565b905080611f88576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611ff69084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611e10565b505050565b6001805463ffffffff83169190601090612034908490700100000000000000000000000000000000900467ffffffffffffffff16614bcd565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600054610100900460ff166120f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a6d565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036115a35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152603654604080517fcc731b02000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cc731b029160048083019260c09291908290030181865afa158015612212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122369190614f2a565b90506040518060c00160405280826000015163ffffffff168152602001826020015160ff168152602001826040015160ff168152602001826060015163ffffffff168152602001826080015163ffffffff1681526020018260a001516fffffffffffffffffffffffffffffffff1681525091505090565b60006122c26122bc85856124ed565b836124fd565b90505b9392505050565b6000670de0b6b3a764000061230d6122e48583614c62565b6122f690670de0b6b3a7640000614cca565b61230885670de0b6b3a7640000614d3e565b61250c565b6123179086614d3e565b6122c29190614c62565b60008183101561233157816122c5565b5090919050565b6000805a90505b825a61234b9083614b04565b1015611ff65761235a82614fcd565b915061233f565b60006123c3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661253d9092919063ffffffff16565b805190915015611ff657808060200190518101906123e19190614b1b565b611ff6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a6d565b6060818051906020012060405160200161248991815260200190565b6040516020818303038152906040529050919050565b60006124c6846124b087868661254c565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561233157816122c5565b600081831261233157816122c5565b60006122c5670de0b6b3a76400008361252486612fca565b61252e9190614d3e565b6125389190614c62565b61320e565b60606122c2848460008561344d565b606060008451116125b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610a6d565b60006125c4846135e3565b905060006125d1866136cf565b90506000846040516020016125e891815260200190565b60405160208183030381529060405290506000805b8451811015612f4157600085828151811061261a5761261a615005565b6020026020010151905084518311156126b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610a6d565b8260000361276e5780518051602091820120604051612703926126dd92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610a6d565b6128c5565b8051516020116128245780518051602091820120604051612798926126dd92910190815260200190565b612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610a6d565b8051845160208087019190912082519190920120146128c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610a6d565b6128d160106001614947565b81602001515103612aad5784518303612a455761290b81602001516010815181106128fe576128fe615005565b6020026020010151613732565b9650600087511161299e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610a6d565b600186516129ac9190614b04565b8214612a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610a6d565b5050505050506122c5565b6000858481518110612a5957612a59615005565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a8457612a84615005565b60200260200101519050612a97816137e6565b9550612aa4600186614947565b94505050612f2e565b600281602001515103612ea6576000612ac58261380b565b9050600081600081518110612adc57612adc615005565b016020015160f81c90506000612af3600283615034565b612afe906002615056565b90506000612b0f848360ff1661382f565b90506000612b1d8a8961382f565b90506000612b2b8383613865565b905080835114612bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610a6d565b60ff851660021480612bd2575060ff85166003145b15612dc15780825114612c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610a6d565b612c8187602001516001815181106128fe576128fe615005565b9c5060008d5111612d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610a6d565b60018c51612d229190614b04565b8814612db0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610a6d565b5050505050505050505050506122c5565b60ff85161580612dd4575060ff85166001145b15612e1357612e008760200151600181518110612df357612df3615005565b60200260200101516137e6565b9950612e0c818a614947565b9850612e9b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610a6d565b505050505050612f2e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610a6d565b5080612f3981614fcd565b9150506125fd565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610a6d565b6000808213613035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610a6d565b6000606061304284613919565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361323f57506000919050565b680755bf798b4a1bf1e582126132b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610a6d565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156134df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a6d565b73ffffffffffffffffffffffffffffffffffffffff85163b61355d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6d565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516135869190615079565b60006040518083038185875af1925050503d80600081146135c3576040519150601f19603f3d011682016040523d82523d6000602084013e6135c8565b606091505b50915091506135d88282866139ef565b979650505050505050565b80516060908067ffffffffffffffff811115613601576136016143e5565b60405190808252806020026020018201604052801561364657816020015b604080518082019091526060808252602082015281526020019060019003908161361f5790505b50915060005b818110156136c857604051806040016040528085838151811061367157613671615005565b602002602001015181526020016136a086848151811061369357613693615005565b6020026020010151613a42565b8152508382815181106136b5576136b5615005565b602090810291909101015260010161364c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613727578060011b82018184015160001a8060041c8253600f8116600183015350506001016136f9565b509295945050505050565b6060600080600061374285613a55565b91945092509050600081600181111561375d5761375d615095565b14613794576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61379e8284614947565b8551146137d7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c685602001518484613ef3565b60606020826000015110613802576137fd82613732565b6113dd565b6113dd82613f87565b60606113dd61382a83602001516000815181106128fe576128fe615005565b6136cf565b60608251821061384e57506040805160208101909152600081526113dd565b6122c583838486516138609190614b04565b613f9d565b600080825184511061387857825161387b565b83515b90505b8082108015613902575082828151811061389a5761389a615005565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106138d9576138d9615005565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156139125781600101915061387e565b5092915050565b6000808211613984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610a6d565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156139fe5750816122c5565b825115613a0e5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d9190614777565b60606113dd613a5083614175565b6141e2565b60008060008360000151600003613a98576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111613abd576000600160009450945094505050613eec565b60b78111613bd3576000613ad2608083614b04565b905080876000015111613b11576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015613b8957507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15613bc0576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250613eec915050565b60bf8111613d31576000613be860b783614b04565b905080876000015111613c27576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613c89576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613cd1576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cdb8184614947565b895111613d14576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d1f836001614947565b9750955060009450613eec9350505050565b60f78111613d96576000613d4660c083614b04565b905080876000015111613d85576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250613eec915050565b6000613da360f783614b04565b905080876000015111613de2576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613e44576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613e8c576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e968184614947565b895111613ecf576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eda836001614947565b9750955060019450613eec9350505050565b9193909250565b60608167ffffffffffffffff811115613f0e57613f0e6143e5565b6040519080825280601f01601f191660200182016040528015613f38576020820181803683370190505b50905081156122c5576000613f4d8486614947565b90506020820160005b84811015613f6e578281015182820152602001613f56565b84811115613f7d576000858301525b5050509392505050565b60606113dd826020015160008460000151613ef3565b60608182601f01101561400c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610a6d565b828284011015614078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610a6d565b818301845110156140e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610a6d565b606082158015614104576040519150600082526020820160405261416c565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561413d578051835260209283019201614125565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015281516000036141c4576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006141f285613a55565b91945092509050600181600181111561420d5761420d615095565b14614244576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516142508385614947565b14614287576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161429e5790505093506000835b865181101561438c576000806143116040518060400160405280858c600001516142f59190614b04565b8152602001858c6020015161430a9190614947565b9052613a55565b50915091506040518060400160405280838361432d9190614947565b8152602001848b602001516143429190614947565b81525088858151811061435757614357615005565b602090810291909101015261436d600185614947565b93506143798183614947565b6143839084614947565b925050506142cb565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146115e457600080fd5b803567ffffffffffffffff811681146143d257600080fd5b919050565b80151581146115e457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561445b5761445b6143e5565b604052919050565b600082601f83011261447457600080fd5b813567ffffffffffffffff81111561448e5761448e6143e5565b6144bf60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614414565b8181528460208386010111156144d457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561450a57600080fd5b863561451581614398565b95506020870135945060408701359350614531606088016143ba565b92506080870135614541816143d7565b915060a087013567ffffffffffffffff81111561455d57600080fd5b61456989828a01614463565b9150509295509295509295565b600060c0828403121561458857600080fd5b60405160c0810167ffffffffffffffff82821081831117156145ac576145ac6143e5565b8160405282935084358352602085013591506145c782614398565b816020840152604085013591506145dd82614398565b816040840152606085013560608401526080850135608084015260a085013591508082111561460b57600080fd5b5061461885828601614463565b60a0830152505092915050565b600080600080600085870360e081121561463e57600080fd5b863567ffffffffffffffff8082111561465657600080fd5b6146628a838b01614576565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561469b57600080fd5b60408901955060c08901359250808311156146b557600080fd5b828901925089601f8401126146c957600080fd5b82359150808211156146da57600080fd5b508860208260051b84010111156146f057600080fd5b959894975092955050506020019190565b60005b8381101561471c578181015183820152602001614704565b8381111561187e5750506000910152565b60008151808452614745816020860160208601614701565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c5602083018461472d565b60006020828403121561479c57600080fd5b5035919050565b60ff811681146115e457600080fd5b600080600080608085870312156147c857600080fd5b84356147d381614398565b935060208501356147e3816147a3565b93969395505050506040820135916060013590565b60006020828403121561480a57600080fd5b813567ffffffffffffffff81111561482157600080fd5b61482d84828501614576565b949350505050565b60006020828403121561484757600080fd5b6122c5826143ba565b60008060006060848603121561486557600080fd5b833561487081614398565b9250602084013561488081614398565b9150604084013561489081614398565b809150509250925092565b600080600080600060a086880312156148b357600080fd5b85356148be81614398565b9450602086013593506148d3604087016143ba565b925060608601356148e3816143d7565b9150608086013567ffffffffffffffff8111156148ff57600080fd5b61490b88828901614463565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561495a5761495a614918565b500190565b60006020828403121561497157600080fd5b5051919050565b60006020828403121561498a57600080fd5b81516122c581614398565b80516fffffffffffffffffffffffffffffffff811681146143d257600080fd5b6000606082840312156149c757600080fd5b6040516060810181811067ffffffffffffffff821117156149ea576149ea6143e5565b604052825181526149fd60208401614995565b6020820152614a0e60408401614995565b60408201529392505050565b600060808284031215614a2c57600080fd5b6040516080810181811067ffffffffffffffff82111715614a4f57614a4f6143e5565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614a9b57614a9b6143e5565b8360051b6020614aac818301614414565b868152918501918181019036841115614ac457600080fd5b865b84811015614af857803586811115614ade5760008081fd5b614aea36828b01614463565b845250918301918301614ac6565b50979650505050505050565b600082821015614b1657614b16614918565b500390565b600060208284031215614b2d57600080fd5b81516122c5816143d7565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614b8c816049850160208701614701565b919091016049019695505050505050565b600067ffffffffffffffff80831681851681830481118215151615614bc457614bc4614918565b02949350505050565b600067ffffffffffffffff808316818516808303821115614bf057614bf0614918565b01949350505050565b60008060408385031215614c0c57600080fd5b8251614c1781614398565b6020840151909250614c28816147a3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614c7157614c71614c33565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614cc557614cc5614918565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d0457614d04614918565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614d3857614d38614918565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614d7f57614d7f614918565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614dba57614dba614918565b60008712925087820587128484161615614dd657614dd6614918565b87850587128184161615614dec57614dec614918565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e3457614e34614918565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614e6857614e68614918565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea657614ea6614918565b500290565b600082614eba57614eba614c33565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f0a60c083018461472d565b98975050505050505050565b805163ffffffff811681146143d257600080fd5b600060c08284031215614f3c57600080fd5b60405160c0810181811067ffffffffffffffff82111715614f5f57614f5f6143e5565b604052614f6b83614f16565b81526020830151614f7b816147a3565b60208201526040830151614f8e816147a3565b6040820152614f9f60608401614f16565b6060820152614fb060808401614f16565b6080820152614fc160a08401614995565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ffe57614ffe614918565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff83168061504757615047614c33565b8060ff84160691505092915050565b600060ff821660ff84168082101561507057615070614918565b90039392505050565b6000825161508b818460208701614701565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b62000282565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001b460201b620017361760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603580546001600160a01b038087166001600160a01b03199283161790925560368054868416908316179055603480548584169216919091179055603254166200015d57603280546001600160a01b03191661dead1790555b62000167620001c3565b8015620001ae576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff16620002305760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b0316600003620002805760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b614f8380620002926000396000f3fe6080604052600436106101635760003560e01c80638b4c40b0116100c0578063a35d99df11610074578063c0c53b8b11610059578063c0c53b8b1461043f578063cff0ab961461045f578063e9e05c421461050057600080fd5b8063a35d99df146103e3578063b69ef8a81461041c57600080fd5b80639b5f694a116100a55780639b5f694a146103595780639bf62d8214610386578063a14238e7146103b357600080fd5b80638b4c40b0146101885780638c3152e91461033957600080fd5b80634870496f116101175780635c975abb116100fc5780635c975abb146102d45780636dbffb78146102f957806371cfaa3f1461031957600080fd5b80634870496f1461026857806354fd4d501461028857600080fd5b806335e80ab31161014857806335e80ab314610206578063452a93201461023357806347f55db51461024857600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a060006040518060200160405280600081525061050e565b005b600080fd5b34801561019b57600080fd5b506101886101aa3660046143a3565b6105b3565b3480156101bb57600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506034546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561023f57600080fd5b506101dc6107f4565b34801561025457600080fd5b506101886102633660046144d7565b61088d565b34801561027457600080fd5b506101886102833660046144d7565b611132565b34801561029457600080fd5b50604080518082018252600581527f312e302e30000000000000000000000000000000000000000000000000000000602082015290516101fd9190614629565b3480156102e057600080fd5b506102e9611146565b60405190151581526020016101fd565b34801561030557600080fd5b506102e961031436600461463c565b6111da565b34801561032557600080fd5b50610188610334366004614664565b611295565b34801561034557600080fd5b506101886103543660046146aa565b611457565b34801561036557600080fd5b506035546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039257600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506102e96103ce36600461463c565b60336020526000908152604090205460ff1681565b3480156103ef57600080fd5b506104036103fe3660046146e7565b611499565b60405167ffffffffffffffff90911681526020016101fd565b34801561042857600080fd5b506104316114b2565b6040519081526020016101fd565b34801561044b57600080fd5b5061018861045a366004614702565b61150c565b34801561046b57600080fd5b506001546104c7906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b61018861050e36600461474d565b8260005a9050600061051e611752565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061055a57503415155b15610591576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059f8834898989896117ef565b506105aa828261199b565b50505050505050565b8260005a905060006105c3611752565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601610635576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876037600082825461064791906147f9565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd9190614811565b905061070173ffffffffffffffffffffffffffffffffffffffff831633308c611c68565b61070b89826147f9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107999190614811565b146107d0576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107de8a8a8a8a8a8a6117ef565b50506107ea828261199b565b5050505050505050565b603454604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610888919061482a565b905090565b610895611146565b156108cc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610935576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190614867565b5190506109e36109de368690038601866148cc565b611d44565b8114610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610a8187611da0565b90506000816000604051602001610aa2929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610b559101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610b4b8789614932565b8960400135611dd0565b610be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610a6d565b876040015173ffffffffffffffffffffffffffffffffffffffff16886020015173ffffffffffffffffffffffffffffffffffffffff16837f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6260405160405180910390a460325473ffffffffffffffffffffffffffffffffffffffff1661dead14610c97576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526033602052604090205460ff1615610d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610a6d565b6000828152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558901516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580610dc1611752565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601610e2457610e1d8a604001518b608001518c606001518d60a00151611df4565b9150611077565b8073ffffffffffffffffffffffffffffffffffffffff168a6040015173ffffffffffffffffffffffffffffffffffffffff1603610e8d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608a01511561104e57896060015160376000828254610ead91906149b6565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f439190614811565b9050610f788b604001518c606001518473ffffffffffffffffffffffffffffffffffffffff16611e529092919063ffffffff16565b60608b0151610f8790826149b6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110159190614811565b1461104c576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08a0151511561107257610e1d8a604001518b6080015160008d60a00151611df4565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405184907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906110d990851515815260200190565b60405180910390a2811580156110ef5750326001145b15611126576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b61113f858585858561088d565b5050505050565b603454604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088891906149cd565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161128f9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015611250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112749190614867565b602001516fffffffffffffffffffffffffffffffff16421190565b92915050565b60365473ffffffffffffffffffffffffffffffffffffffff1633146112e6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f262030d40611ead565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32908490819062030d4090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161140f969594939291016149ea565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261144791614629565b60405180910390a450505050565b565b61145f611146565b15611496576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60006114a6826010614a4f565b61128f90615208614a7f565b6000806114bd611752565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611504574791505090565b505060375490565b600054610100900460ff161580801561152c5750600054600160ff909116105b806115465750303b158015611546575060005460ff166001145b6115d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a6d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561163057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6035805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560368054868416908316179055603480548584169216919091179055603254166116c557603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6116cd611f0f565b801561173057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603654604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e69190614aab565b90939092509050565b818015611811575073ffffffffffffffffffffffffffffffffffffffff861615155b15611848576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118528151611499565b67ffffffffffffffff168367ffffffffffffffff16101561189f576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156118dd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146118fe575033731111000000000000000000000000000000001111015b600086868686866040516020016119199594939291906149ea565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516119899190614629565b60405180910390a45050505050505050565b6001546000906119d1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436149b6565b905060006119dd612022565b90506000816020015160ff16826000015163ffffffff166119fe9190614b14565b90508215611b3557600154600090611a35908390700100000000000000000000000000000000900467ffffffffffffffff16614b7c565b90506000836040015160ff1683611a4c9190614bf0565b600154611a6c9084906fffffffffffffffffffffffffffffffff16614bf0565b611a769190614b14565b600154909150600090611ac790611aa09084906fffffffffffffffffffffffffffffffff16614cac565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff1661215f565b90506001861115611af657611af3611aa082876040015160ff1660018a611aee91906149b6565b61217e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b68908490700100000000000000000000000000000000900467ffffffffffffffff16614a7f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611bf5576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611c21906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614d20565b90506000611c3348633b9aca006121d3565b611c3d9083614d5d565b905060005a611c4c90886149b6565b9050808211156107ea576107ea611c6382846149b6565b6121ea565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526117309085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612213565b60008160000151826020015183604001518460600151604051602001611d83949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611d83979096959101614d71565b600080611ddc8661231f565b9050611dea81868686612351565b9695505050505050565b6000806000611e04866000612381565b905080611e3a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611ea89084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611cc2565b505050565b6001805463ffffffff83169190601090611ee6908490700100000000000000000000000000000000900467ffffffffffffffff16614a7f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600054610100900460ff16611fa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a6d565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036114555760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152603654604080517fcc731b02000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cc731b029160048083019260c09291908290030181865afa1580156120c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e89190614ddc565b90506040518060c00160405280826000015163ffffffff168152602001826020015160ff168152602001826040015160ff168152602001826060015163ffffffff168152602001826080015163ffffffff1681526020018260a001516fffffffffffffffffffffffffffffffff1681525091505090565b600061217461216e858561239f565b836123af565b90505b9392505050565b6000670de0b6b3a76400006121bf6121968583614b14565b6121a890670de0b6b3a7640000614b7c565b6121ba85670de0b6b3a7640000614bf0565b6123be565b6121c99086614bf0565b6121749190614b14565b6000818310156121e35781612177565b5090919050565b6000805a90505b825a6121fd90836149b6565b1015611ea85761220c82614e7f565b91506121f1565b6000612275826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123ef9092919063ffffffff16565b805190915015611ea8578080602001905181019061229391906149cd565b611ea8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a6d565b6060818051906020012060405160200161233b91815260200190565b6040516020818303038152906040529050919050565b6000612378846123628786866123fe565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156121e35781612177565b60008183126121e35781612177565b6000612177670de0b6b3a7640000836123d686612e7c565b6123e09190614bf0565b6123ea9190614b14565b6130c0565b606061217484846000856132ff565b6060600084511161246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610a6d565b600061247684613495565b9050600061248386613581565b905060008460405160200161249a91815260200190565b60405160208183030381529060405290506000805b8451811015612df35760008582815181106124cc576124cc614eb7565b602002602001015190508451831115612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610a6d565b8260000361262057805180516020918201206040516125b59261258f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610a6d565b612777565b8051516020116126d6578051805160209182012060405161264a9261258f92910190815260200190565b61261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610a6d565b805184516020808701919091208251919092012014612777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610a6d565b612783601060016147f9565b8160200151510361295f57845183036128f7576127bd81602001516010815181106127b0576127b0614eb7565b60200260200101516135e4565b96506000875111612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610a6d565b6001865161285e91906149b6565b82146128ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610a6d565b505050505050612177565b600085848151811061290b5761290b614eb7565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061293657612936614eb7565b6020026020010151905061294981613698565b95506129566001866147f9565b94505050612de0565b600281602001515103612d58576000612977826136bd565b905060008160008151811061298e5761298e614eb7565b016020015160f81c905060006129a5600283614ee6565b6129b0906002614f08565b905060006129c1848360ff166136e1565b905060006129cf8a896136e1565b905060006129dd8383613717565b905080835114612a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610a6d565b60ff851660021480612a84575060ff85166003145b15612c735780825114612b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610a6d565b612b3387602001516001815181106127b0576127b0614eb7565b9c5060008d5111612bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610a6d565b60018c51612bd491906149b6565b8814612c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610a6d565b505050505050505050505050612177565b60ff85161580612c86575060ff85166001145b15612cc557612cb28760200151600181518110612ca557612ca5614eb7565b6020026020010151613698565b9950612cbe818a6147f9565b9850612d4d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610a6d565b505050505050612de0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610a6d565b5080612deb81614e7f565b9150506124af565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610a6d565b6000808213612ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610a6d565b60006060612ef4846137cb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136130f157506000919050565b680755bf798b4a1bf1e58212613163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610a6d565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a6d565b73ffffffffffffffffffffffffffffffffffffffff85163b61340f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6d565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516134389190614f2b565b60006040518083038185875af1925050503d8060008114613475576040519150601f19603f3d011682016040523d82523d6000602084013e61347a565b606091505b509150915061348a8282866138a1565b979650505050505050565b80516060908067ffffffffffffffff8111156134b3576134b3614297565b6040519080825280602002602001820160405280156134f857816020015b60408051808201909152606080825260208201528152602001906001900390816134d15790505b50915060005b8181101561357a57604051806040016040528085838151811061352357613523614eb7565b6020026020010151815260200161355286848151811061354557613545614eb7565b60200260200101516138f4565b81525083828151811061356757613567614eb7565b60209081029190910101526001016134fe565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156135d9578060011b82018184015160001a8060041c8253600f8116600183015350506001016135ab565b509295945050505050565b606060008060006135f485613907565b91945092509050600081600181111561360f5761360f614f47565b14613646576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61365082846147f9565b855114613689576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237885602001518484613da5565b606060208260000151106136b4576136af826135e4565b61128f565b61128f82613e39565b606061128f6136dc83602001516000815181106127b0576127b0614eb7565b613581565b606082518210613700575060408051602081019091526000815261128f565b612177838384865161371291906149b6565b613e4f565b600080825184511061372a57825161372d565b83515b90505b80821080156137b4575082828151811061374c5761374c614eb7565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061378b5761378b614eb7565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156137c457816001019150613730565b5092915050565b6000808211613836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610a6d565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156138b0575081612177565b8251156138c05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6d9190614629565b606061128f61390283614027565b614094565b6000806000836000015160000361394a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f811161396f576000600160009450945094505050613d9e565b60b78111613a855760006139846080836149b6565b9050808760000151116139c3576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015613a3b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15613a72576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250613d9e915050565b60bf8111613be3576000613a9a60b7836149b6565b905080876000015111613ad9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613b3b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613b83576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b8d81846147f9565b895111613bc6576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613bd18360016147f9565b9750955060009450613d9e9350505050565b60f78111613c48576000613bf860c0836149b6565b905080876000015111613c37576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250613d9e915050565b6000613c5560f7836149b6565b905080876000015111613c94576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613cf6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111613d3e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d4881846147f9565b895111613d81576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d8c8360016147f9565b9750955060019450613d9e9350505050565b9193909250565b60608167ffffffffffffffff811115613dc057613dc0614297565b6040519080825280601f01601f191660200182016040528015613dea576020820181803683370190505b5090508115612177576000613dff84866147f9565b90506020820160005b84811015613e20578281015182820152602001613e08565b84811115613e2f576000858301525b5050509392505050565b606061128f826020015160008460000151613da5565b60608182601f011015613ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610a6d565b828284011015613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610a6d565b81830184511015613f97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610a6d565b606082158015613fb6576040519150600082526020820160405261401e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613fef578051835260209283019201613fd7565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201528151600003614076576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006140a485613907565b9194509250905060018160018111156140bf576140bf614f47565b146140f6576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161410283856147f9565b14614139576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816141505790505093506000835b865181101561423e576000806141c36040518060400160405280858c600001516141a791906149b6565b8152602001858c602001516141bc91906147f9565b9052613907565b5091509150604051806040016040528083836141df91906147f9565b8152602001848b602001516141f491906147f9565b81525088858151811061420957614209614eb7565b602090810291909101015261421f6001856147f9565b935061422b81836147f9565b61423590846147f9565b9250505061417d565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461149657600080fd5b803567ffffffffffffffff8116811461428457600080fd5b919050565b801515811461149657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561430d5761430d614297565b604052919050565b600082601f83011261432657600080fd5b813567ffffffffffffffff81111561434057614340614297565b61437160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016142c6565b81815284602083860101111561438657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156143bc57600080fd5b86356143c78161424a565b955060208701359450604087013593506143e36060880161426c565b925060808701356143f381614289565b915060a087013567ffffffffffffffff81111561440f57600080fd5b61441b89828a01614315565b9150509295509295509295565b600060c0828403121561443a57600080fd5b60405160c0810167ffffffffffffffff828210818311171561445e5761445e614297565b8160405282935084358352602085013591506144798261424a565b8160208401526040850135915061448f8261424a565b816040840152606085013560608401526080850135608084015260a08501359150808211156144bd57600080fd5b506144ca85828601614315565b60a0830152505092915050565b600080600080600085870360e08112156144f057600080fd5b863567ffffffffffffffff8082111561450857600080fd5b6145148a838b01614428565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561454d57600080fd5b60408901955060c089013592508083111561456757600080fd5b828901925089601f84011261457b57600080fd5b823591508082111561458c57600080fd5b508860208260051b84010111156145a257600080fd5b959894975092955050506020019190565b60005b838110156145ce5781810151838201526020016145b6565b838111156117305750506000910152565b600081518084526145f78160208601602086016145b3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061217760208301846145df565b60006020828403121561464e57600080fd5b5035919050565b60ff8116811461149657600080fd5b6000806000806080858703121561467a57600080fd5b84356146858161424a565b9350602085013561469581614655565b93969395505050506040820135916060013590565b6000602082840312156146bc57600080fd5b813567ffffffffffffffff8111156146d357600080fd5b6146df84828501614428565b949350505050565b6000602082840312156146f957600080fd5b6121778261426c565b60008060006060848603121561471757600080fd5b83356147228161424a565b925060208401356147328161424a565b915060408401356147428161424a565b809150509250925092565b600080600080600060a0868803121561476557600080fd5b85356147708161424a565b9450602086013593506147856040870161426c565b9250606086013561479581614289565b9150608086013567ffffffffffffffff8111156147b157600080fd5b6147bd88828901614315565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561480c5761480c6147ca565b500190565b60006020828403121561482357600080fd5b5051919050565b60006020828403121561483c57600080fd5b81516121778161424a565b80516fffffffffffffffffffffffffffffffff8116811461428457600080fd5b60006060828403121561487957600080fd5b6040516060810181811067ffffffffffffffff8211171561489c5761489c614297565b604052825181526148af60208401614847565b60208201526148c060408401614847565b60408201529392505050565b6000608082840312156148de57600080fd5b6040516080810181811067ffffffffffffffff8211171561490157614901614297565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561494d5761494d614297565b8360051b602061495e8183016142c6565b86815291850191818101903684111561497657600080fd5b865b848110156149aa578035868111156149905760008081fd5b61499c36828b01614315565b845250918301918301614978565b50979650505050505050565b6000828210156149c8576149c86147ca565b500390565b6000602082840312156149df57600080fd5b815161217781614289565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a3e8160498501602087016145b3565b919091016049019695505050505050565b600067ffffffffffffffff80831681851681830481118215151615614a7657614a766147ca565b02949350505050565b600067ffffffffffffffff808316818516808303821115614aa257614aa26147ca565b01949350505050565b60008060408385031215614abe57600080fd5b8251614ac98161424a565b6020840151909250614ada81614655565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614b2357614b23614ae5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614b7757614b776147ca565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614bb657614bb66147ca565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614bea57614bea6147ca565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614c3157614c316147ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614c6c57614c6c6147ca565b60008712925087820587128484161615614c8857614c886147ca565b87850587128184161615614c9e57614c9e6147ca565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614ce657614ce66147ca565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614d1a57614d1a6147ca565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d5857614d586147ca565b500290565b600082614d6c57614d6c614ae5565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614dbc60c08301846145df565b98975050505050505050565b805163ffffffff8116811461428457600080fd5b600060c08284031215614dee57600080fd5b60405160c0810181811067ffffffffffffffff82111715614e1157614e11614297565b604052614e1d83614dc8565b81526020830151614e2d81614655565b60208201526040830151614e4081614655565b6040820152614e5160608401614dc8565b6060820152614e6260808401614dc8565b6080820152614e7360a08401614847565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614eb057614eb06147ca565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614ef957614ef9614ae5565b8060ff84160691505092915050565b600060ff821660ff841680821015614f2257614f226147ca565b90039392505050565b60008251614f3d8184602087016145b3565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", } // PortalABI is the input ABI used to generate the binding from. diff --git a/bindings/system_config_global.go b/bindings/system_config_global.go index 3492bb4..6b3387c 100644 --- a/bindings/system_config_global.go +++ b/bindings/system_config_global.go @@ -45,7 +45,7 @@ type NitroValidatorPtrs struct { // SystemConfigGlobalMetaData contains all meta data concerning the SystemConfigGlobal contract. var SystemConfigGlobalMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"certManager\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ATTESTATION_DIGEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ATTESTATION_TBS_PREFIX\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CABUNDLE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERTIFICATE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DIGEST_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_AGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MODULE_ID_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NONCE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PCRS_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBLIC_KEY_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TIMESTAMP_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"USER_DATA_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"certManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decodeAttestationTbs\",\"inputs\":[{\"name\":\"attestation\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deregisterPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterSigner\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProposer\",\"inputs\":[{\"name\":\"_proposer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validPCR0s\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validSigners\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validateAttestation\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structNitroValidator.Ptrs\",\"components\":[{\"name\":\"moduleID\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"digest\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"pcrs\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"cert\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"cabundle\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"publicKey\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"userData\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"CborElement\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162005f7038038062005f7083398101604081905262000034916200039e565b6001600160a01b0381166080526200004e61dead62000055565b50620003d0565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200019360201b620017471760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b6200013d620001a2565b62000148826200020a565b80156200018f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001fe5760405162461bcd60e51b815260206004820152602b602482015260008051602062005f5083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b6200020862000289565b565b62000214620002f0565b6001600160a01b0381166200027b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000106565b62000286816200034c565b50565b600054610100900460ff16620002e55760405162461bcd60e51b815260206004820152602b602482015260008051602062005f5083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b62000208336200034c565b6033546001600160a01b03163314620002085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000106565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620003b157600080fd5b81516001600160a01b0381168114620003c957600080fd5b9392505050565b608051615b5d620003f3600039600081816103ff0152610ec60152615b5d6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063739e8484116100f9578063b22bed7e11610097578063cebf08d711610071578063cebf08d71461063b578063e0a655ff14610697578063e8b6d3fe146106f3578063f2fde38b1461074f57600080fd5b8063b22bed7e146105b9578063ba58e82a14610615578063c4d66de81461062857600080fd5b80639cc3eb48116100d35780639cc3eb48146104c0578063a8e4fb901461051c578063a903a2771461053c578063ae9511491461055d57600080fd5b8063739e8484146103fa5780638da5cb5b146104465780639adb2d681461046457600080fd5b80633893af6d116101665780636378aad5116101405780636378aad5146103175780636a73b00b146103735780636be1e68b14610396578063715018a6146103f257600080fd5b80633893af6d1461029e57806350697a3f146102c557806354fd4d50146102d857600080fd5b80631fb4a228116101a25780631fb4a2281461021e578063295840d9146102315780632c68fa02146102645780632d4bad8a1461027757600080fd5b806305f7aead146101c95780630ba24fe0146101f25780630dcaeaf214610207575b600080fd5b6101dc6101d7366004615181565b610762565b6040516101e99190615220565b60405180910390f35b6102056102003660046152e0565b610f92565b005b610210610e1081565b6040519081526020016101e9565b61020561022c3660046152e0565b610fe6565b61025461023f366004615316565b60666020526000908152604090205460ff1681565b60405190151581526020016101e9565b610205610272366004615378565b611035565b6102107f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c81565b6102107f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef81565b6102056102d3366004615378565b611084565b604080518082018252600581527f302e302e31000000000000000000000000000000000000000000000000000000602082015290516101e99190615430565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101526102107f7ab1577440dd7bedf920cb6de2f9fc6bf7ba98c78c85a3fa1f8311aac95e175981565b6102546103813660046152e0565b60676020526000908152604090205460ff1681565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101526102107f682a7e258d80bd2421d3103cbe71e3e3b82138116756b97b8256f061dc2f11fb81565b6102056110e3565b6104217f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b60335473ffffffffffffffffffffffffffffffffffffffff16610421565b60408051808201909152600981527f6d6f64756c655f696400000000000000000000000000000000000000000000006020909101526102107f8ce577cf664c36ba5130242bf5790c2675e9f4e6986a842b607821bee25372ee81565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101526102107f8a8cb7aa1da17ada103546ae6b4e13ccc2fafa17adf5f93925e0a0a4e5681a6a81565b6065546104219073ffffffffffffffffffffffffffffffffffffffff1681565b61054f61054a366004615443565b6110f7565b6040516101e9929190615478565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101526102107f925cec779426f44d8d555e01d2683a3a765ce2fa7562ca7352aeb09dfc57ea6a81565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101526102107f61585f8bc67a4b6d5891a4639a074964ac66fc2241dc0b36c157dc101325367a81565b6102056106233660046154a6565b61123e565b6102056106363660046152e0565b6114f4565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101526102107f5e4ea5393e4327b3014bc32f2264336b0d1ee84a4cfd197c8ad7e1e16829a16a81565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101526102107f4ebf727c48eac2c66272456b06a885c5cc03e54d140f63b63b6fd10c1227958e81565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101526102107fc7b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a481565b61020561075d3660046152e0565b611690565b6107bb60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006107c684611763565b905060006107d78260000151611ffb565b11610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f206d6f64756c65206964000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000816020015167ffffffffffffffff16116108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f2074696d657374616d700000000000000000000000000000000000000000604482015260640161083a565b60008160a00151511161092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f20636162756e646c65000000000000000000000000000000000000000000604482015260640161083a565b7f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef61096282604001518661203c90919063ffffffff16565b146109c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c696420646967657374000000000000000000000000000000000000604482015260640161083a565b8060600151516001111580156109e55750602081606001515111155b610a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c696420706372730000000000000000000000000000000000000000604482015260640161083a565b60c081015160ff1660f61480610a875750610a698160c00151611ffb565b600111158015610a875750610400610a848260c00151611ffb565b11155b610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420707562206b65790000000000000000000000000000000000604482015260640161083a565b60e081015160ff1660f61480610b115750610200610b0e8260e00151611ffb565b11155b610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c696420757365722064617461000000000000000000000000000000604482015260640161083a565b61010081015160ff1660f61480610b9d5750610200610b9a826101000151611ffb565b11155b610c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206e6f6e636500000000000000000000000000000000000000604482015260640161083a565b60005b816060015151811015610cfa57610c3982606001518281518110610c2c57610c2c615512565b6020026020010151611ffb565b60201480610c5f5750610c5b82606001518281518110610c2c57610c2c615512565b6030145b80610c825750610c7e82606001518281518110610c2c57610c2c615512565b6040145b610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420706372000000000000000000000000000000000000000000604482015260640161083a565b80610cf281615570565b915050610c06565b506000610d1482608001518661206e90919063ffffffff16565b905060008260a001515167ffffffffffffffff811115610d3657610d3661503e565b604051908082528060200260200182016040528015610d6957816020015b6060815260200190600190039081610d545790505b50905060005b8360a0015151811015610e8557610d958460a001518281518110610c2c57610c2c615512565b600111158015610dbf5750610400610dbc8560a001518381518110610c2c57610c2c615512565b11155b610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636162756e646c6520636572740000000000000000000000604482015260640161083a565b610e558460a001518281518110610e3e57610e3e615512565b60200260200101518861206e90919063ffffffff16565b828281518110610e6757610e67615512565b60200260200101819052508080610e7d90615570565b915050610d6f565b506040517f5b608e2a00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635b608e2a90610efd90869086906004016155a8565b6000604051808303816000875af1158015610f1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f629190810190615694565b90506000610f738860008a51612095565b9050610f84826080015182896121bc565b509293505050505b92915050565b610f9a61223a565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b610fee61223a565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61103d61223a565b600160666000848460405161105392919061574c565b6040518091039020815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61108c61223a565b6066600083836040516110a092919061574c565b6040805191829003909120825260208201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b6110eb61223a565b6110f560006122bb565b565b6060806000600190508360008151811061111357611113615512565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167fd20000000000000000000000000000000000000000000000000000000000000003611164575060025b60006111708583612332565b9050600061117e8683612342565b9050600061118c8783612356565b9050600061119a8883612356565b90506000856111a88661236e565b6111b2919061575c565b905060006111bf8561236e565b6111c88561236e565b6111d2919061575c565b905060006111e18b8985612393565b905060006111f96111f18861236e565b8d9085612393565b90506112078285838661246e565b9a5061122e605086901c69ffffffffffffffffffff1661122687611ffb565b8e9190612393565b9950505050505050505050915091565b61124661223a565b60006112bb85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201919091525061076292505050565b9050600061132082606001516000815181106112d9576112d9615512565b602002602001015187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061203c9050565b60008181526066602052604090205490915060ff1661139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964207063723020696e206174746573746174696f6e0000000000604482015260640161083a565b42610e10836020015167ffffffffffffffff166113b89190615773565b1161141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6174746573746174696f6e20746f6f206f6c6400000000000000000000000000604482015260640161083a565b60c082015160009061149e9060501c69ffffffffffffffffffff16611445906001615773565b60016114548660c00151611ffb565b61145e919061575c565b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061265f9050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050505050565b600054610100900460ff16158080156115145750600054600160ff909116105b8061152e5750303b15801561152e575060005460ff166001145b6115ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161083a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561161857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611620612668565b61162982611690565b801561168c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61169861223a565b73ffffffffffffffffffffffffffffffffffffffff811661173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161083a565b611744816122bb565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6117bc60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b601260208301207f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c1461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c6964206174746573746174696f6e20707265666978000000000000604482015260640161083a565b6000611858836012612332565b905060006118768469ffffffffffffffffffff605085901c16612707565b90506118d160405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006118dc8461236e565b90505b806118e98461236e565b1015611ff2576118f98684612717565b92506000611907878561203c565b60408051808201909152600981527f6d6f64756c655f6964000000000000000000000000000000000000000000000060209091015290507f731a883099b3c945aecfdbd40a86f3d98a160b1967957bd49f87de411dac8d1281016119795761196f8785612717565b8084529350611fec565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101527f97d581da727f42dbde2cefc3418e1c1c47dec7ee98a946847da90f9e23d0ee0581016119ed576119df8785612717565b604084018190529350611fec565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101527f6da313886bd90bb272aaa1fe2d97c5c589a31d058a9d358cad514f6203a815968101611a6157611a538785612356565b608084018190529350611fec565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101527f384d7fe6330242cf0039a6ae26b447a361d47bcbeee5fff4a502acc319a0a85c8101611ad557611ac7878561272f565b60c084018190529350611fec565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101527fa1b15ac6c1bcd84cfeb43cd0dd9bcc94f2e117b5b302e68375281e1e97d65e968101611b4957611b3b878561272f565b60e084018190529350611fec565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101527f854ea88bbf22841206df34921d06039408456738737a5c05e07cee5536a1e8a78101611bbe57611baf878561272f565b61010084018190529350611fec565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101527fb1408d83b7153d399d8dba94f9577a3a33fc1ab2ebf09c49c4902ef3edd86a728101611c4457611c248785612747565b9350611c308460a01c90565b67ffffffffffffffff166020840152611fec565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101527f75734855e25e8525efcab95194b1ec333d0505e8520a06c6da1f5f5b1a97e5968101611d5d57611caa878561275f565b9350611cb68460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611cd857611cd861503e565b604051908082528060200260200182016040528015611d01578160200160208202803683370190505b5060a084015260005b8360a0015151811015611d5757611d218886612356565b9450848460a001518281518110611d3a57611d3a615512565b602090810291909101015280611d4f81615570565b915050611d0a565b50611fec565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101527f9ea7a0743985b492a76e5b9c65f8b69b539903ddbe23f4c93ea823efecdac9868101611f8a57611dc38785612342565b9350611dcf8460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611df157611df161503e565b604051908082528060200260200182016040528015611e1a578160200160208202803683370190505b50606084015260005b836060015151811015611d5757611e3a8886612747565b94506000611e488660a01c90565b67ffffffffffffffff1690508460600151518110611ec2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420706372206b65792076616c75650000000000000000000000604482015260640161083a565b84606001518181518110611ed857611ed8615512565b6020026020010151600014611f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6475706c696361746520706372206b6579000000000000000000000000000000604482015260640161083a565b611f538987612356565b95508585606001518281518110611f6c57611f6c615512565b60209081029190910101525080611f8281615570565b915050611e23565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206174746573746174696f6e206b6579000000000000000000604482015260640161083a565b506118df565b50949350505050565b600081604060ff8216148061201357508060ff166060145b15612033576120228360a01c90565b67ffffffffffffffff169392505050565b50600092915050565b6000612067605083901c69ffffffffffffffffffff1661205b84611ffb565b85919091016020012090565b9392505050565b6060612067605083901c69ffffffffffffffffffff1661208d84611ffb565b859190612393565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e08301529061212085858584612777565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b6121cf6121c7612fe5565b838386613100565b612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420736967000000000000000000000000000000000000000000604482015260640161083a565b505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161083a565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006120678383604060016133b1565b6000612067836123518461236e565b612707565b6000612067836123658461236e565b604060016133b1565b600061237982611ffb565b610f8c9069ffffffffffffffffffff605085901c16615773565b82516060906123a28385615773565b111561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b8167ffffffffffffffff8111156124235761242361503e565b6040519080825280601f01601f19166020018201604052801561244d576020820181803683370190505b50905060208082019085850101612465828286613683565b50509392505050565b60608161247c85600d615773565b6124869190615773565b67ffffffffffffffff81111561249e5761249e61503e565b6040519080825280601f01601f1916602001820160405280156124c8576020820181803683370190505b509050608460f81b816000815181106124e3576124e3615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350606a60f81b8160018151811061252a5761252a615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f40000000000000000000000000000000000000000000000000000000000000008161258686600c615773565b8151811061259657612596615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060408051808201909152600a81527f5369676e617475726531000000000000000000000000000000000000000000006020808301918252838101919088810190870161261d612615856002615773565b84600a613683565b61263261262b85600c615773565b838b613683565b6126528961264186600d615773565b61264b9190615773565b8289613683565b5050505050949350505050565b91016020012090565b600054610100900460ff166126ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f56136f8565b6000612067838360a060016133b1565b6000612067836127268461236e565b606060016133b1565b60006120678361273e8461236e565b604060006133b1565b6000612067836127568461236e565b600060016133b1565b60006120678361276e8461236e565b608060016133b1565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201526000612c36868686613798565b905060808151612c4691906157ba565b15612cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f5200000000000000000000000000000000000000604482015260640161083a565b612cb5614f95565b612cbd614fb4565b612cc5614fd3565b6000612cd26080896157ce565b612cdd9060806157e2565b905060005b85518201811015612fd85781811015612d0757612d028b84838d016138a7565b612d14565b612d1486848484036138a7565b60005b6010811015612d6557838160108110612d3257612d32615512565b6020020151868260508110612d4957612d49615512565b67ffffffffffffffff9092166020929092020152600101612d17565b5060105b6050811015612e1b57856010820360508110612d8757612d87615512565b6020020151612dae87600f840360508110612da457612da4615512565b602002015161390e565b876007840360508110612dc357612dc3615512565b6020020151612dea896002860360508110612de057612de0615512565b602002015161393d565b010101868260508110612dff57612dff615512565b67ffffffffffffffff9092166020929092020152600101612d69565b5060005b6008811015612e6d57888160088110612e3a57612e3a615512565b6020020151858260088110612e5157612e51615512565b67ffffffffffffffff9092166020929092020152600101612e1f565b5060005b6050811015612f7b576000868260508110612e8e57612e8e615512565b6020020151898360508110612ea557612ea5615512565b6020020151608088015160a089015160c08a01518219169116186080890151612ecd90613964565b89600760200201510101010190506000612f06878260200201518860016020020151896002602002015180821690831691909216181890565b8751612f1190613987565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612e71565b5060005b6008811015612fcf57848160088110612f9a57612f9a615512565b6020020151898260088110612fb157612fb1615512565b6020020180519190910167ffffffffffffffff169052600101612f7f565b50608001612ce2565b5050505050505050505050565b6130256040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615ac16101008401398152602001604051806060016040528060308152602001615a01603091398152602001604051806060016040528060308152602001615a91603091398152602001604051806060016040528060308152602001615a31603091398152602001604051806060016040528060308152602001615b21603091398152602001604051806060016040528060308152602001615af1603091398152602001604051806060016040528060308152602001615a61603091399052919050565b600061312d6040518060800160405280600081526020016000815260200160008152602001600081525090565b613136846139aa565b60208301528152613146836139aa565b6060830152604080830191909152805160e08101909152865160009190819061316e90613a5d565b81526020016131808960200151613a5d565b81526020016131928960400151613a5d565b81526020016131a48960600151613a5d565b81526020016131b68960800151613a5d565b81526020016131c88960a00151613a5d565b81526020016131da8960c00151613a5d565b815250905060006131ee8260800151613af3565b835160208101519051919250159015168061321b5750600061321884600001518460a00151613b69565b12155b80613239575061323983602001516000602082015191511591141690565b806132555750600061325384602001518460c00151613b69565b135b1561326657600093505050506133a9565b6132888183608001518460000151856020015187604001518860600151613c0f565b61329857600093505050506133a9565b865160308110156132dc5760408051603080825260608201909252600091602082018180368337509192506132d991505060208a0183830360500184613cf3565b97505b5060006132fb826132ec8a613a5d565b86602001518660a00151613d01565b9050600061331783866000015187602001518760a00151613d01565b905060006133256003613e12565b905060006133518587608001518489600001518a604001518b606001518d604001518e60600151613e34565b905061336a85876080015184896000015185898961421b565b9050809450819550505050506133a16133898484848860800151613d01565b86516020808201519083015191519251911491141690565b955050505050505b949350505050565b6000808585815181106133c6576133c6615512565b602001015160f81c60f81b60e060f81b1660f81c905060008686815181106133f0576133f0615512565b60209101015160f81c601f16905060ff821660e0036134a45783158061341a57508060ff16601614155b613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e756c6c2076616c756520666f7220726571756972656420656c656d656e7400604482015260640161083a565b61349b60ff83831716613494886001615773565b60501b1790565b925050506133a9565b8460ff168260ff1614613513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e657870656374656420747970650000000000000000000000000000000000604482015260640161083a565b8060ff166018036135655761349b60ff8316613530886002615773565b8961353c8a6001615773565b8151811061354c5761354c615512565b016020015160f81c60a01b60509190911b919091171790565b8060ff166019036135ac5761349b60ff8316613582886003615773565b6135976135908a6001615773565b8b906143a5565b61ffff1660a01b60509190911b919091171790565b8060ff16601a036135f55761349b60ff83166135c9886005615773565b6135de6135d78a6001615773565b8b90614428565b63ffffffff1660a01b60509190911b919091171790565b8060ff16601b036136425761349b60ff8316613612886009615773565b6136276136208a6001615773565b8b906144ab565b67ffffffffffffffff1660a01b60509190911b919091171790565b61367860ff8316613654886001615773565b60501b1774ff000000000000000000000000000000000000000060a084901b161790565b979650505050505050565b602081106136bb578151835261369a602084615773565b92506136a7602083615773565b91506136b460208261575c565b9050613683565b801561223557600060016136d083602061575c565b6136dc9061010061593f565b6136e6919061575c565b83518551821691191617845250505050565b600054610100900460ff1661378f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f5336122bb565b606060006137a78360086157e2565b60c01b905060006137b96080856157ba565b9050600060708210156137d8576137d182607761575c565b90506137e6565b6137e38260f761575c565b90505b60008167ffffffffffffffff8111156138015761380161503e565b6040519080825280601f01601f19166020018201604052801561382b576020820181803683370190505b50905060006138508461383e898b615773565b613848919061575c565b8a9086612393565b60405190915061388a9082907f8000000000000000000000000000000000000000000000000000000000000000908590899060200161594b565b604051602081830303815290604052955050505050509392505050565b60005b6010811015613908576138d26138c18260086157e2565b6138cb9084615773565b85906144ab565b8382601081106138e4576138e4615512565b67ffffffffffffffff909216602092909202015261390181615570565b90506138aa565b50505050565b600060078267ffffffffffffffff16901c61392a83600861452e565b61393584600161452e565b181892915050565b600060068267ffffffffffffffff16901c61395983603d61452e565b61393584601361452e565b600061397182602961452e565b61397c83601261452e565b61393584600e61452e565b600061399482602761452e565b61399f83602261452e565b61393584601c61452e565b6000808251606014613a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742037363800000000000000000000000000000000000000604482015260640161083a565b60408051608081018252925082019050600082526020830151601083015260308301516020830152600081526050830151601082015260608301516020820152915091565b60008151603014613aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742033383400000000000000000000000000000000000000604482015260640161083a565b604080518082019091529050600081526020820151601082015260308201516020820152919050565b6000613b0761036060408051918201905290565b6060610120820152602061014082018190526040610160830181905260016101e0840152845161020084015284820180516102208501526102408401829052610260840192909252610280830152925161030082015291516103208301525090565b815181516000919080821115613b8457600192505050610f8c565b80821015613bb6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b50506020838101519083015180821115613bd557600192505050610f8c565b80821015613c07577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b505092915050565b602082015182516000911590151680613c3657506020868101519084015187518551149114165b80613c48575060208201518251159015165b80613c6157506020868101519083015187518451149114165b15613c6e57506000613ce9565b6000613c7c8884600261456b565b90506000613c8c8986600361456b565b6020880151885191925015901516613cb657613cb381613cad8b888b6145b0565b8a6146a2565b90505b6020860151865115901516613cd357613cd081878a6146a2565b90505b6020818101519083015191519251911491141690505b9695505050505050565b8082828560045afa50505050565b6000613d0e858484614706565b9050613dd38482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b6000613e246040808051918201905290565b6000815260208101929092525090565b613e3c614ff2565b613e4585614794565b613e4e85614794565b613e586001613e12565b608084018051604081019290925260208281019390935292905290518051910151613e98918b918b918b918b91908760045b6020020151604001516147bb565b61010084018051604080820193909352602081810194909452939093526080840151805181840151919092015193518051930151613ef0948e948e948e948e949193909290918a60085b602002015160400151614978565b6101808401516040810191909152602081019190915252613f1083614794565b613f1983614794565b613f236001613e12565b60208085018051604081019390935282820193909352929052518051910151613f57918b918b918b918b9190876001613e8a565b6040808501519081019190915260208181019290925291909152808201518051910151613faf918b918b918b918b91908760015b60209081029190910151604090810151908a015180519201519091908a6002613ee2565b606084015160408101919091526020818101929092529190915260808201518051910151614006918b918b918b918b91908760045b60209081029190910151604001518982015180519201519091908a6001613ee2565b60a08401516040810191909152602081810192909252919091526080820151805191015161403f918b918b918b918b9190876004613f8b565b60c084015160408101919091526020818101929092529190915260808201518051910151614097918b918b918b918b91908760045b602090810291909101516040015160608a015180519201519091908a6003613ee2565b60e084015160408101919091526020818101929092529190915261010082015180519101516140d1918b918b918b918b9190876008613fe4565b610120840151604081019190915260208181019290925291909152610100820151805191015161410c918b918b918b918b9190876008613f8b565b6101408401516040810191909152602081810192909252919091526101008201518051910151614147918b918b918b918b9190876008614074565b6101608401516040810191909152602081810192909252919091526101808201518051910151614182918b918b918b918b919087600c613fe4565b6101a084015160408101919091526020818101929092529190915261018082015180519101516141bd918b918b918b918b919087600c613f8b565b6101c084015160408101919091526020818101929092529190915261018082015180519101516141f8918b918b918b918b919087600c614074565b6101e0840151604081019190915260208101919091525298975050505050505050565b8151815160009182918291829161423183613e12565b955061423d6000613e12565b94506142496001613e12565b935060025b60b881116142f4576142658e8e8e8e8b8b8b6147bb565b9198509650945061427b8e8e8e8e8b8b8b6147bb565b9198509650945060b881900382811c6003169084901c60021b600c1617935083156142ec5760008a85601081106142b4576142b4615512565b602002015190506142e38f8f8f8f8560005b6020020151866001602002015187600260200201518f8f8f614978565b91995097509550505b60020161424e565b5050506020868101519086015160025b61010081116143935761431c8e8e8e8e8b8b8b6147bb565b919850965094506143328e8e8e8e8b8b8b6147bb565b9198509650945061010081900382811c6003169084901c60021b600c16179350831561438b5760008a856010811061436c5761436c615512565b602002015190506143828f8f8f8f8560006142c6565b91995097509550505b600201614304565b505050505b9750975097945050505050565b60006143b2826002615773565b8351101561441c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160f01c90565b6000614435826004615773565b8351101561449f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160e01c90565b60006144b8826008615773565b83511015614522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160c01c90565b600067ffffffffffffffff8381169083161c61454b8360406159d7565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b600061457d6040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b60006145c26040808051918201905290565b9050614688838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b60006146b46040808051918201905290565b60208581015185820151810191830182905285518751019110018152905060006146de8284613b69565b1261206757602080820180519184015182039081905283518351929091119103038152612067565b60006147186040808051918201905290565b905061474c826147286002613e12565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b60006147a66040808051918201905290565b90508151815260208201516020820152919050565b60008060006147d4866000602082015191511591141690565b80156147e7575060208501518551159015165b15614815576147f66000613e12565b6148006000613e12565b61480a6001613e12565b925092509250614398565b60006148228b87876145b0565b905061482e818b614ad1565b6148398b82896145b0565b93506148468b8588614b1b565b614850848b614ad1565b61485c8b88600261456b565b96506148698b888b6145b0565b92506148778b86600261456b565b94506148848b868a614b1b565b61488f83868c614bf7565b61489b8b84600261456b565b91506148a887858c614c4d565b60006148b48b89614c6c565b90506148c183828d614bf7565b6020808c015181850151810391830182905284518d519290911091030381526148ec8886838e614ca4565b6148f78c8986614b1b565b6149028c88846145b0565b96506149108c886002614cf4565b61491a878c614ad1565b6020808c015181890151810391830182905288518d519290911091030381526149458489838e614ca4565b6149518c868486614d23565b61495e8c84846002614e00565b6149698c8484614b1b565b50509750975097945050505050565b6000806000614991896000602082015191511591141690565b80156149a4575060208801518851159015165b156149cf576149b286614794565b6149bb86614794565b6149c486614794565b925092509250614ac1565b602086015186511590151680156149ed575060208501518551159015165b15614a0d576149fb89614794565b614a0489614794565b6149c489614794565b614a188d89866145b0565b9250614a258d86896145b0565b9150614a328d8a866145b0565b9050614a3f8d87896145b0565b6020808201519083015182518451939850911491141615614a9e5760208281015190840151835185511491141615614a80576149c48d8d8d8d8d8d8d6147bb565b614a8a6000613e12565b614a946000613e12565b6149c46001613e12565b614aa98d88866145b0565b9950614aba8d8b838f898789614e30565b9250925092505b9a509a509a975050505050505050565b6020820180518351600190811b60ff83901c1785521b90526000614af58383613b69565b1261168c5760208281018051918301518203908190529151835191909211919003039052565b614bdf828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614c198383602082810180519183015182019081905291518351019110019052565b6000614c258483613b69565b1261223557602080840180519183015182039081905282518551929091119103038352505050565b6020808301518351600190811b60ff83901c1786521b90840152614c19565b6000614c7e6040808051918201905290565b602080850151818501518103918301829052845186519290911091030381529050610f8c565b602083810151838201518101918601829052835185510191100184526000614ccc8583613b69565b1261390857602080850180519183015182039081905282518651929091119103038452613908565b610240830192508151836060015260208201518360800152808360a001526040826101008560055afa50505050565b614de7828261018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040836101208660055afa5050505050565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b600080600080614e408887614c6c565b9050614e4d85828a6146a2565b6020808a0151818a0151810391840182905289518b519290911091030382529250614e7989828a6146a2565b93506000614e898c86600261456b565b9050614e978c85600261456b565b9250614ea48c848d614b1b565b614eaf888b8b6146a2565b9750614ebc8c8983614b1b565b6020808a0151818a0151810391840182905289518b51929091109103038252614ee683838b614bf7565b6000614ef38d83886145b0565b9050614f008d8786614b1b565b614f0b8d8c846145b0565b6020808c015181870151810391860182905286518d519290911091030384529a50614f378b848c614bf7565b614f428d868d614b1b565b614f4d8d88836145b0565b6020808c015181830151810391860182905282518d519290911091030384529650614f7985848c614bf7565b614f858d85838f614d23565b5050509750975097945050505050565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061020001604052806010905b61500a615020565b8152602001906001900390816150025790505090565b60405180606001604052806003906020820280368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156150905761509061503e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150dd576150dd61503e565b604052919050565b600067ffffffffffffffff8211156150ff576150ff61503e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261513c57600080fd5b813561514f61514a826150e5565b615096565b81815284602083860101111561516457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561519457600080fd5b823567ffffffffffffffff808211156151ac57600080fd5b6151b88683870161512b565b935060208501359150808211156151ce57600080fd5b506151db8582860161512b565b9150509250929050565b600081518084526020808501945080840160005b83811015615215578151875295820195908201906001016151f9565b509495945050505050565b602081528151602082015260006020830151615248604084018267ffffffffffffffff169052565b5060408301516060830152606083015161012080608085015261526f6101408501836151e5565b9150608085015160a085015260a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160c08601526152b483826151e5565b60c087015160e08781019190915287015161010080880191909152909601519190940152509192915050565b6000602082840312156152f257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461206757600080fd5b60006020828403121561532857600080fd5b5035919050565b60008083601f84011261534157600080fd5b50813567ffffffffffffffff81111561535957600080fd5b60208301915083602082850101111561537157600080fd5b9250929050565b6000806020838503121561538b57600080fd5b823567ffffffffffffffff8111156153a257600080fd5b6153ae8582860161532f565b90969095509350505050565b60005b838110156153d55781810151838201526020016153bd565b838111156139085750506000910152565b600081518084526153fe8160208601602086016153ba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061206760208301846153e6565b60006020828403121561545557600080fd5b813567ffffffffffffffff81111561546c57600080fd5b6133a98482850161512b565b60408152600061548b60408301856153e6565b828103602084015261549d81856153e6565b95945050505050565b600080600080604085870312156154bc57600080fd5b843567ffffffffffffffff808211156154d457600080fd5b6154e08883890161532f565b909650945060208701359150808211156154f957600080fd5b506155068782880161532f565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155a1576155a1615541565b5060010190565b6040815260006155bb60408301856153e6565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015615629577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526156178383516153e6565b948601949250908501906001016155dd565b50909998505050505050505050565b8051600781900b811461564a57600080fd5b919050565b600082601f83011261566057600080fd5b815161566e61514a826150e5565b81815284602083860101111561568357600080fd5b6133a98260208301602087016153ba565b6000602082840312156156a657600080fd5b815167ffffffffffffffff808211156156be57600080fd5b9083019060a082860312156156d257600080fd5b6156da61506d565b825180151581146156ea57600080fd5b8152602083015182811681146156ff57600080fd5b602082015261571060408401615638565b60408201526060830151606082015260808301518281111561573157600080fd5b61573d8782860161564f565b60808301525095945050505050565b8183823760009101908152919050565b60008282101561576e5761576e615541565b500390565b6000821982111561578657615786615541565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826157c9576157c961578b565b500690565b6000826157dd576157dd61578b565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561581a5761581a615541565b500290565b600181815b8085111561587857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561585e5761585e615541565b8085161561586b57918102915b93841c9390800290615824565b509250929050565b60008261588f57506001610f8c565b8161589c57506000610f8c565b81600181146158b257600281146158bc576158d8565b6001915050610f8c565b60ff8411156158cd576158cd615541565b50506001821b610f8c565b5060208310610133831016604e8410600b84101617156158fb575081810a610f8c565b615905838361581f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561593757615937615541565b029392505050565b60006120678383615880565b6000855161595d818460208a016153ba565b7fff00000000000000000000000000000000000000000000000000000000000000861690830190815284516159998160018401602089016153ba565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b600067ffffffffffffffff838116908316818110156159f8576159f8615541565b03939250505056feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5fffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x60a06040523480156200001157600080fd5b5060405162005d0538038062005d0583398101604081905262000034916200039e565b6001600160a01b0381166080526200004e61dead62000055565b50620003d0565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200019360201b6200149a1760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b6200013d620001a2565b62000148826200020a565b80156200018f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001fe5760405162461bcd60e51b815260206004820152602b602482015260008051602062005ce583398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b6200020862000289565b565b62000214620002f0565b6001600160a01b0381166200027b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000106565b62000286816200034c565b50565b600054610100900460ff16620002e55760405162461bcd60e51b815260206004820152602b602482015260008051602062005ce583398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b62000208336200034c565b6033546001600160a01b03163314620002085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000106565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620003b157600080fd5b81516001600160a01b0381168114620003c957600080fd5b9392505050565b6080516158eb620003fa6000396000818161039501528181611c620152611d6901526158eb6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063739e8484116100f9578063b22bed7e11610097578063cebf08d711610071578063cebf08d7146104fd578063e0a655ff14610524578063e8b6d3fe1461054b578063f2fde38b1461057257600080fd5b8063b22bed7e146104b0578063ba58e82a146104d7578063c4d66de8146104ea57600080fd5b80639cc3eb48116100d35780639cc3eb4814610421578063a8e4fb9014610448578063a903a27714610468578063ae9511491461048957600080fd5b8063739e8484146103905780638da5cb5b146103dc5780639adb2d68146103fa57600080fd5b80633893af6d116101665780636378aad5116101405780636378aad5146103175780636a73b00b1461033e5780636be1e68b14610361578063715018a61461038857600080fd5b80633893af6d1461029e57806350697a3f146102c557806354fd4d50146102d857600080fd5b80631fb4a228116101a25780631fb4a2281461021e578063295840d9146102315780632c68fa02146102645780632d4bad8a1461027757600080fd5b806305f7aead146101c95780630ba24fe0146101f25780630dcaeaf214610207575b600080fd5b6101dc6101d7366004614f64565b610585565b6040516101e99190615003565b60405180910390f35b6102056102003660046150c3565b610ce5565b005b610210610e1081565b6040519081526020016101e9565b61020561022c3660046150c3565b610d39565b61025461023f3660046150f9565b60666020526000908152604090205460ff1681565b60405190151581526020016101e9565b61020561027236600461515b565b610d88565b6102107f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c81565b6102107f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef81565b6102056102d336600461515b565b610dd7565b604080518082018252600581527f302e302e31000000000000000000000000000000000000000000000000000000602082015290516101e99190615213565b6102107f7ab1577440dd7bedf920cb6de2f9fc6bf7ba98c78c85a3fa1f8311aac95e175981565b61025461034c3660046150c3565b60676020526000908152604090205460ff1681565b6102107f682a7e258d80bd2421d3103cbe71e3e3b82138116756b97b8256f061dc2f11fb81565b610205610e36565b6103b77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b60335473ffffffffffffffffffffffffffffffffffffffff166103b7565b6102107f8ce577cf664c36ba5130242bf5790c2675e9f4e6986a842b607821bee25372ee81565b6102107f8a8cb7aa1da17ada103546ae6b4e13ccc2fafa17adf5f93925e0a0a4e5681a6a81565b6065546103b79073ffffffffffffffffffffffffffffffffffffffff1681565b61047b610476366004615226565b610e4a565b6040516101e992919061525b565b6102107f925cec779426f44d8d555e01d2683a3a765ce2fa7562ca7352aeb09dfc57ea6a81565b6102107f61585f8bc67a4b6d5891a4639a074964ac66fc2241dc0b36c157dc101325367a81565b6102056104e5366004615289565b610f91565b6102056104f83660046150c3565b611247565b6102107f5e4ea5393e4327b3014bc32f2264336b0d1ee84a4cfd197c8ad7e1e16829a16a81565b6102107f4ebf727c48eac2c66272456b06a885c5cc03e54d140f63b63b6fd10c1227958e81565b6102107fc7b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a481565b6102056105803660046150c3565b6113e3565b6105de60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006105e9846114b6565b905060006105fa8260000151611b77565b11610666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f206d6f64756c65206964000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000816020015167ffffffffffffffff16116106de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f2074696d657374616d700000000000000000000000000000000000000000604482015260640161065d565b60008160a00151511161074d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f20636162756e646c65000000000000000000000000000000000000000000604482015260640161065d565b60408101517f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef9061077f908690611bb8565b146107e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c696420646967657374000000000000000000000000000000000000604482015260640161065d565b8060600151516001111580156108025750602081606001515111155b610868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c696420706372730000000000000000000000000000000000000000604482015260640161065d565b6108758160c00151611be6565b806108a657506108888160c00151611b77565b6001111580156108a657506104006108a38260c00151611b77565b11155b61090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420707562206b65790000000000000000000000000000000000604482015260640161065d565b6109198160e00151611be6565b80610932575061020061092f8260e00151611b77565b11155b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c696420757365722064617461000000000000000000000000000000604482015260640161065d565b6109a6816101000151611be6565b806109c057506102006109bd826101000151611b77565b11155b610a26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206e6f6e636500000000000000000000000000000000000000604482015260640161065d565b60005b816060015151811015610b1d57610a5c82606001518281518110610a4f57610a4f6152f5565b6020026020010151611b77565b60201480610a825750610a7e82606001518281518110610a4f57610a4f6152f5565b6030145b80610aa55750610aa182606001518281518110610a4f57610a4f6152f5565b6040145b610b0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420706372000000000000000000000000000000000000000000604482015260640161065d565b80610b1581615353565b915050610a29565b506000610b37826080015186611c0490919063ffffffff16565b905060008260a001515167ffffffffffffffff811115610b5957610b59614e21565b604051908082528060200260200182016040528015610b8c57816020015b6060815260200190600190039081610b775790505b50905060005b8360a0015151811015610ca857610bb88460a001518281518110610a4f57610a4f6152f5565b600111158015610be25750610400610bdf8560a001518381518110610a4f57610a4f6152f5565b11155b610c48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636162756e646c6520636572740000000000000000000000604482015260640161065d565b610c788460a001518281518110610c6157610c616152f5565b602002602001015188611c0490919063ffffffff16565b828281518110610c8a57610c8a6152f5565b60200260200101819052508080610ca090615353565b915050610b92565b506000610cb58383611c2b565b90506000610cc68860008a51611e0d565b9050610cd782608001518289611f34565b509293505050505b92915050565b610ced611fb2565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b610d41611fb2565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d90611fb2565b6001606660008484604051610da692919061538b565b6040518091039020815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610ddf611fb2565b606660008383604051610df392919061538b565b6040805191829003909120825260208201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b610e3e611fb2565b610e486000612033565b565b60608060006001905083600081518110610e6657610e666152f5565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167fd20000000000000000000000000000000000000000000000000000000000000003610eb7575060025b6000610ec385836120aa565b90506000610ed186836120ba565b90506000610edf87836120ce565b90506000610eed88836120ce565b9050600085610efb866120e6565b610f05919061539b565b90506000610f12856120e6565b610f1b856120e6565b610f25919061539b565b90506000610f348b898561210b565b90506000610f4c610f44886120e6565b8d908561210b565b9050610f5a828583866121e6565b9a50610f81605086901c69ffffffffffffffffffff16610f7987611b77565b8e919061210b565b9950505050505050505050915091565b610f99611fb2565b600061100e85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201919091525061058592505050565b90506000611073826060015160008151811061102c5761102c6152f5565b602002602001015187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611bb89050565b60008181526066602052604090205490915060ff166110ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964207063723020696e206174746573746174696f6e0000000000604482015260640161065d565b42610e10836020015167ffffffffffffffff1661110b91906153b2565b11611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6174746573746174696f6e20746f6f206f6c6400000000000000000000000000604482015260640161065d565b60c08201516000906111f19060501c69ffffffffffffffffffff166111989060016153b2565b60016111a78660c00151611b77565b6111b1919061539b565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509294939250506123d79050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050505050565b600054610100900460ff16158080156112675750600054600160ff909116105b806112815750303b158015611281575060005460ff166001145b61130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161065d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561136b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611373612458565b61137c826113e3565b80156113df57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6113eb611fb2565b73ffffffffffffffffffffffffffffffffffffffff811661148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161065d565b61149781612033565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61150f60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b7f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c61153d83600060126123d7565b146115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c6964206174746573746174696f6e20707265666978000000000000604482015260640161065d565b60006115b18360126120aa565b905060006115cf8469ffffffffffffffffffff605085901c166124f7565b905061162a60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b6000611635846120e6565b90505b80611642846120e6565b1015611b6e576116528684612507565b925060006116608785611bb8565b90507f731a883099b3c945aecfdbd40a86f3d98a160b1967957bd49f87de411dac8d12810161169d576116938785612507565b8084529350611b68565b7f97d581da727f42dbde2cefc3418e1c1c47dec7ee98a946847da90f9e23d0ee0581016116dc576116ce8785612507565b604084018190529350611b68565b7f6da313886bd90bb272aaa1fe2d97c5c589a31d058a9d358cad514f6203a81596810161171b5761170d87856120ce565b608084018190529350611b68565b7f384d7fe6330242cf0039a6ae26b447a361d47bcbeee5fff4a502acc319a0a85c810161175a5761174c878561251f565b60c084018190529350611b68565b7fa1b15ac6c1bcd84cfeb43cd0dd9bcc94f2e117b5b302e68375281e1e97d65e9681016117995761178b878561251f565b60e084018190529350611b68565b7f854ea88bbf22841206df34921d06039408456738737a5c05e07cee5536a1e8a781016117d9576117ca878561251f565b61010084018190529350611b68565b7fb1408d83b7153d399d8dba94f9577a3a33fc1ab2ebf09c49c4902ef3edd86a72810161182a5761180a8785612537565b93506118168460a01c90565b67ffffffffffffffff166020840152611b68565b7f75734855e25e8525efcab95194b1ec333d0505e8520a06c6da1f5f5b1a97e596810161190e5761185b878561254f565b93506118678460a01c90565b67ffffffffffffffff1667ffffffffffffffff81111561188957611889614e21565b6040519080825280602002602001820160405280156118b2578160200160208202803683370190505b5060a084015260005b8360a0015151811015611908576118d288866120ce565b9450848460a0015182815181106118eb576118eb6152f5565b60209081029190910101528061190081615353565b9150506118bb565b50611b68565b7f9ea7a0743985b492a76e5b9c65f8b69b539903ddbe23f4c93ea823efecdac9868101611b065761193f87856120ba565b935061194b8460a01c90565b67ffffffffffffffff1667ffffffffffffffff81111561196d5761196d614e21565b604051908082528060200260200182016040528015611996578160200160208202803683370190505b50606084015260005b836060015151811015611908576119b68886612537565b945060006119c48660a01c90565b67ffffffffffffffff1690508460600151518110611a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420706372206b65792076616c75650000000000000000000000604482015260640161065d565b84606001518181518110611a5457611a546152f5565b6020026020010151600014611ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6475706c696361746520706372206b6579000000000000000000000000000000604482015260640161065d565b611acf89876120ce565b95508585606001518281518110611ae857611ae86152f5565b60209081029190910101525080611afe81615353565b91505061199f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206174746573746174696f6e206b6579000000000000000000604482015260640161065d565b50611638565b50949350505050565b600081604060ff82161480611b8f57508060ff166060145b15611baf57611b9e8360a01c90565b67ffffffffffffffff169392505050565b50600092915050565b6000611bdf605083901c69ffffffffffffffffffff16611bd784611b77565b8591906123d7565b9392505050565b60008160f660ff82161480611bdf57508060ff1660f7149392505050565b6060611bdf605083901c69ffffffffffffffffffff16611c2384611b77565b85919061210b565b6040805160a0810182526000808252602082018190529181018290526060808201839052608082015290805b8351811015611d2b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630890702c858381518110611cae57611cae6152f5565b6020026020010151846040518363ffffffff1660e01b8152600401611cd49291906153ca565b6020604051808303816000875af1158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1791906153ec565b915080611d2381615353565b915050611c57565b506040517f28c5463700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328c5463790611da090879085906004016153ca565b6000604051808303816000875af1158015611dbf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e059190810190615461565b949350505050565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e083015290611e9885858584612567565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b611f47611f3f612e49565b838386612f64565b611fad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420736967000000000000000000000000000000000000000000604482015260640161065d565b505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610e48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065d565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611bdf838360406001613207565b6000611bdf836120c9846120e6565b6124f7565b6000611bdf836120dd846120e6565b60406001613207565b60006120f182611b77565b610cdf9069ffffffffffffffffffff605085901c166153b2565b825160609061211a83856153b2565b1115612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161065d565b8167ffffffffffffffff81111561219b5761219b614e21565b6040519080825280601f01601f1916602001820160405280156121c5576020820181803683370190505b509050602080820190858501016121dd8282866135d8565b50509392505050565b6060816121f485600d6153b2565b6121fe91906153b2565b67ffffffffffffffff81111561221657612216614e21565b6040519080825280601f01601f191660200182016040528015612240576020820181803683370190505b509050608460f81b8160008151811061225b5761225b6152f5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350606a60f81b816001815181106122a2576122a26152f5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f4000000000000000000000000000000000000000000000000000000000000000816122fe86600c6153b2565b8151811061230e5761230e6152f5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060408051808201909152600a81527f5369676e617475726531000000000000000000000000000000000000000000006020808301918252838101919088810190870161239561238d8560026153b2565b84600a6135d8565b6123aa6123a385600c6153b2565b838b6135d8565b6123ca896123b986600d6153b2565b6123c391906153b2565b82896135d8565b5050505050949350505050565b82516000906123e683856153b2565b111561244e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161065d565b5091016020012090565b600054610100900460ff166124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161065d565b610e4861364d565b6000611bdf838360a06001613207565b6000611bdf83612516846120e6565b60606001613207565b6000611bdf8361252e846120e6565b60406000613207565b6000611bdf83612546846120e6565b60006001613207565b6000611bdf8361255e846120e6565b60806001613207565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201528451612a2584866153b2565b1115612a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4f55545f4f465f424f554e445300000000000000000000000000000000000000604482015260640161065d565b6000612a9a8686866136ed565b905060808151612aaa9190615548565b15612b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f5200000000000000000000000000000000000000604482015260640161065d565b612b19614d78565b612b21614d97565b612b29614db6565b6000612b3660808961555c565b612b41906080615570565b905060005b85518201811015612e3c5781811015612b6b57612b668b84838d016137fc565b612b78565b612b7886848484036137fc565b60005b6010811015612bc957838160108110612b9657612b966152f5565b6020020151868260508110612bad57612bad6152f5565b67ffffffffffffffff9092166020929092020152600101612b7b565b5060105b6050811015612c7f57856010820360508110612beb57612beb6152f5565b6020020151612c1287600f840360508110612c0857612c086152f5565b6020020151613863565b876007840360508110612c2757612c276152f5565b6020020151612c4e896002860360508110612c4457612c446152f5565b6020020151613892565b010101868260508110612c6357612c636152f5565b67ffffffffffffffff9092166020929092020152600101612bcd565b5060005b6008811015612cd157888160088110612c9e57612c9e6152f5565b6020020151858260088110612cb557612cb56152f5565b67ffffffffffffffff9092166020929092020152600101612c83565b5060005b6050811015612ddf576000868260508110612cf257612cf26152f5565b6020020151898360508110612d0957612d096152f5565b6020020151608088015160a089015160c08a01518219169116186080890151612d31906138b9565b89600760200201510101010190506000612d6a878260200201518860016020020151896002602002015180821690831691909216181890565b8751612d75906138dc565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612cd5565b5060005b6008811015612e3357848160088110612dfe57612dfe6152f5565b6020020151898260088110612e1557612e156152f5565b6020020180519190910167ffffffffffffffff169052600101612de3565b50608001612b46565b5050505050505050505050565b612e896040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e08201818152829161584f610100840139815260200160405180606001604052806030815260200161578f60309139815260200160405180606001604052806030815260200161581f6030913981526020016040518060600160405280603081526020016157bf6030913981526020016040518060600160405280603081526020016158af60309139815260200160405180606001604052806030815260200161587f6030913981526020016040518060600160405280603081526020016157ef603091399052919050565b6000612f916040518060800160405280600081526020016000815260200160008152602001600081525090565b612f9a846138ff565b60208301528152612faa836138ff565b6060830152604080830191909152805160e081019091528651600091908190612fd2906139b2565b8152602001612fe489602001516139b2565b8152602001612ff689604001516139b2565b815260200161300889606001516139b2565b815260200161301a89608001516139b2565b815260200161302c8960a001516139b2565b815260200161303e8960c001516139b2565b815250905060006130528260800151613a48565b835160208101519051919250159015168061307f5750600061307c84600001518460a00151613b1b565b12155b8061309d575061309d83602001516000602082015191511591141690565b806130b9575060006130b784602001518460c00151613b1b565b135b156130ca5760009350505050611e05565b6130ec8183608001518460000151856020015187604001518860600151613bc1565b6130fc5760009350505050611e05565b8651603081101561314057604080516030808252606082019092526000916020820181803683375091925061313d91505060208a0183830360500184613ca5565b97505b50600061315f826131508a6139b2565b86602001518660a00151613cb3565b9050600061317b83866000015187602001518760a00151613cb3565b905060006131896003613dc4565b905060006131b58587608001518489600001518a604001518b606001518d604001518e60600151613de6565b90506131ce858760800151848960000151858989613fd1565b508094505050506131e483838660a001516141c2565b845160208082015190840151915184511491141695505050505050949350505050565b60008085858151811061321c5761321c6152f5565b602001015160f81c60f81b60e060f81b1660f81c90506000868681518110613246576132466152f5565b60209101015160f81c601f16905060ff821660e00361338c578060ff166016148061327457508060ff166017145b613300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f6f6e6c79206e756c6c207072696d69746976652076616c75657320617265207360448201527f7570706f72746564000000000000000000000000000000000000000000000000606482015260840161065d565b8315613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e756c6c2076616c756520666f7220726571756972656420656c656d656e7400604482015260640161065d565b61338360ff8383171661337c8860016153b2565b60501b1790565b92505050611e05565b8460ff168260ff16146133fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e657870656374656420747970650000000000000000000000000000000000604482015260640161065d565b601c8160ff1610613468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f756e737570706f72746564207479706500000000000000000000000000000000604482015260640161065d565b8060ff166018036134ba5761338360ff83166134858860026153b2565b896134918a60016153b2565b815181106134a1576134a16152f5565b016020015160f81c60a01b60509190911b919091171790565b8060ff166019036135015761338360ff83166134d78860036153b2565b6134ec6134e58a60016153b2565b8b9061420e565b61ffff1660a01b60509190911b919091171790565b8060ff16601a0361354a5761338360ff831661351e8860056153b2565b61353361352c8a60016153b2565b8b90614291565b63ffffffff1660a01b60509190911b919091171790565b8060ff16601b036135975761338360ff83166135678860096153b2565b61357c6135758a60016153b2565b8b90614314565b67ffffffffffffffff1660a01b60509190911b919091171790565b6135cd60ff83166135a98860016153b2565b60501b1774ff000000000000000000000000000000000000000060a084901b161790565b979650505050505050565b6020811061361057815183526135ef6020846153b2565b92506135fc6020836153b2565b915061360960208261539b565b90506135d8565b8015611fad576000600161362583602061539b565b613631906101006156cd565b61363b919061539b565b83518551821691191617845250505050565b600054610100900460ff166136e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161065d565b610e4833612033565b606060006136fc836008615570565b60c01b9050600061370e608085615548565b90506000607082101561372d5761372682607761539b565b905061373b565b6137388260f761539b565b90505b60008167ffffffffffffffff81111561375657613756614e21565b6040519080825280601f01601f191660200182016040528015613780576020820181803683370190505b50905060006137a584613793898b6153b2565b61379d919061539b565b8a908661210b565b6040519091506137df9082907f800000000000000000000000000000000000000000000000000000000000000090859089906020016156d9565b604051602081830303815290604052955050505050509392505050565b60005b601081101561385d57613827613816826008615570565b61382090846153b2565b8590614314565b838260108110613839576138396152f5565b67ffffffffffffffff909216602092909202015261385681615353565b90506137ff565b50505050565b600060078267ffffffffffffffff16901c61387f836008614397565b61388a846001614397565b181892915050565b600060068267ffffffffffffffff16901c6138ae83603d614397565b61388a846013614397565b60006138c6826029614397565b6138d1836012614397565b61388a84600e614397565b60006138e9826027614397565b6138f4836022614397565b61388a84601c614397565b600080825160601461396d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742037363800000000000000000000000000000000000000604482015260640161065d565b60408051608081018252925082019050600082526020830151601083015260308301516020830152600081526050830151601082015260608301516020820152915091565b60008151603014613a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742033383400000000000000000000000000000000000000604482015260640161065d565b604080518082019091529050600081526020820151601082015260308201516020820152919050565b6000613a5c61048060408051918201905290565b9050613a9282613a6c6002613dc4565b602082810151908201518103610420860181905291519251911191900303610400830152565b6060610120820152602061014082018190526040610160830181905260016101e0840152835161020084015283820180516102208501526102408401829052610260840192909252610280830181905283516103008401528151610320840152610360830181905261038083018190526103a08301529151610440820152905161046082015290565b815181516000919080821115613b3657600192505050610cdf565b80821015613b68577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610cdf565b50506020838101519083015180821115613b8757600192505050610cdf565b80821015613bb9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610cdf565b505092915050565b602082015182516000911590151680613be857506020868101519084015187518551149114165b80613bfa575060208201518251159015165b80613c1357506020868101519083015187518451149114165b15613c2057506000613c9b565b6000613c2e888460026143d4565b90506000613c3e898660036143d4565b6020880151885191925015901516613c6857613c6581613c5f8b888b614419565b8a61450b565b90505b6020860151865115901516613c8557613c8281878a61450b565b90505b6020818101519083015191519251911491141690505b9695505050505050565b8082828560045afa50505050565b6000613cc085848461456f565b9050613d858482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b6000613dd66040808051918201905290565b6000815260208101929092525090565b613dee614dd5565b613df7836145fd565b613e00836145fd565b6020808401519081019190915252613e17856145fd565b613e20856145fd565b61010083015160208101919091525260005b6008811015613fc45760005b6008811015613fbb57600281830110613fb357600382901b81178215613f09577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830160031b8217613eca8d8d8d8d898660408110613e9f57613e9f6152f5565b6020020151518a8760408110613eb757613eb76152f5565b6020020151600160200201518f8f614624565b868460408110613edc57613edc6152f5565b6020020151878560408110613ef357613ef36152f5565b6020020151600160200201919091525250613fb1565b600383901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830117613f768d8d8d8d898660408110613f4b57613f4b6152f5565b6020020151518a8760408110613f6357613f636152f5565b6020020151600160200201518d8d614624565b868460408110613f8857613f886152f5565b6020020151878560408110613f9f57613f9f6152f5565b60200201516001602002019190915252505b505b600101613e3e565b50600101613e32565b5098975050505050505050565b815181516000918291829190613feb8c8c8c8c8780614752565b9095509350690ffffffffffffffffff860b483901c1660b782901c1792508215614059576140538c8c8c8c8c8860408110614028576140286152f5565b6020020151518d8960408110614040576140406152f5565b6020020151600160200201518b8b614624565b90955093505b60045b60b881116140ef576140728d8d8d8d8a8a614817565b80965081975050508060b80382901c60071660038260b80385901c600716901b179350836000146140e7576140e18d8d8d8d8d89604081106140b6576140b66152f5565b6020020151518e8a604081106140ce576140ce6152f5565b6020020151600160200201518c8c614624565b90965094505b60030161405c565b5050506020858101519085015161410a8c8c8c8c8989614752565b9095509350600860fc83901c1660ff82901c17925082156141445761413e8c8c8c8c8c8860408110614028576140286152f5565b90955093505b60045b61010081116141b25761415e8d8d8d8d8a8a614817565b8096508197505050806101000382901c6007166003826101000385901c600716901b179350836000146141aa576141a48d8d8d8d8d89604081106140b6576140b66152f5565b90965094505b600301614147565b5050505097509795505050505050565b604083526020836020015260408360400152815183606001526020820151836080015260018360a0015280518360c0015260208101518360e001526040826101008560055afa50505050565b600061421b8260026153b2565b83511015614285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161065d565b50016020015160f01c90565b600061429e8260046153b2565b83511015614308576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161065d565b50016020015160e01c90565b60006143218260086153b2565b8351101561438b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161065d565b50016020015160c01c90565b600067ffffffffffffffff8381169083161c6143b4836040615765565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b60006143e66040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b600061442b6040808051918201905290565b90506144f1838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b600061451d6040808051918201905290565b60208581015185820151810191830182905285518751019110018152905060006145478284613b1b565b12611bdf57602080820180519184015182039081905283518351929091119103038152611bdf565b60006145816040808051918201905290565b90506145b5826145916002613dc4565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b600061460f6040808051918201905290565b90508151815260208201516020820152919050565b600080851580614632575083155b1561468b5785158015614643575083155b1561465357506000905080614745565b851561467057614662866145fd565b61466b866145fd565b614682565b614679846145fd565b614682846145fd565b91509150614745565b602084810151908701518551885114911416156146d257602083810151908601518451875114911416156146c7576146828a8a8a8a8a8a614752565b506000905080614745565b60006146df86858c6149fb565b905060006146ee88878d6149fb565b90506146fb8c8383614a7d565b6147078c8360026143d4565b935061471484898d614ab0565b61471f84878d614ab0565b61472a88858d6149fb565b92506147378c8484614b27565b61474283888d614ab0565b50505b9850989650505050505050565b600080836000036147685750600090508061480c565b6020830151835115901516156147835750600090508061480c565b6000614791898660026143d4565b905061479e898289614b27565b6147a981878a614c03565b60006147b5858a614c59565b90506147c28a8383614a7d565b6147ce8a8360026143d4565b93506147db84878b614ab0565b6147e684878b614ab0565b6147f186858b6149fb565b92506147fe8a8484614b27565b61480983868b614ab0565b50505b965096945050505050565b6000808360000361482d5750600090508061480c565b6020830151835115901516156148485750600090508061480c565b6000614856898660026143d4565b9050614863898289614b27565b61486e81878a614c03565b600061487a858a614c59565b90506148878a8383614a7d565b6148938a8360026143d4565b93506148a084878b614ab0565b6148ab84878b614ab0565b6148b686858b6149fb565b92506148c38a8484614b27565b6148ce83868b614ab0565b6020830151835115901516156148ec5760008093509350505061480c565b6148f98a83866002614cbb565b6149048a838a614b27565b61490f82888b614c03565b61491a81848b614ceb565b6149258a8383614a7d565b6149328a87846002614cbb565b61493d86858b614ab0565b61494886858b614ab0565b6149548585888c614d0a565b61495f8a8684614b27565b61496a85848b614ab0565b6020850151855115901516156149885760008093509350505061480c565b6149958a83886002614cbb565b6149a08a838a614b27565b6149ab82888b614c03565b6149b681868b614ceb565b6149c18a8383614a7d565b6149ce8a85846002614cbb565b6149d984878b614ab0565b6149e484878b614ab0565b6149f08387868c614d0a565b6147fe8a8484614b27565b6000614a0d6040808051918201905290565b90506000614a1b8585613b1b565b12614a445760208085015181850151810391830182905284518651929091109103038152611bdf565b60208481015183820151810183830181815285518851019282109290920180855292860151810391829052855191119103038152611bdf565b6103608301925080518360600152602081015183608001526040816101208560055afa50611fad61036084038383614b27565b6000614abc8484613b1b565b12614ae3575060208281018051918301518203908190529151835191909211919003039052565b614b058382602082810180519183015182019081905291518351019110019052565b5060208281018051918301518203908190529151835191909211919003039052565b614beb828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614c258383602082810180519183015182019081905291518351019110019052565b6000614c318483613b1b565b12611fad57602080840180519183015182039081905282518551929091119103038352505050565b6000614c6b6040808051918201905290565b6020808501518551600190811b60ff83901c1784521b9082015290506000614c938284613b1b565b12610cdf57602080820180519184015182039081905283518351929091119103038152610cdf565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b6020808301518351600190811b60ff83901c1786521b90840152614c25565b6000614d168484613b1b565b12614d3f576020808401518184015181039186018290528351855192909110910303845261385d565b6020838101518282015181018683018181528451875101928210929092018088529285015181039182905284519111910303845261385d565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061080001604052806040905b614ded614e03565b815260200190600190039081614de55790505090565b60405180604001604052806002906020820280368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715614e7357614e73614e21565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614ec057614ec0614e21565b604052919050565b600067ffffffffffffffff821115614ee257614ee2614e21565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112614f1f57600080fd5b8135614f32614f2d82614ec8565b614e79565b818152846020838601011115614f4757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614f7757600080fd5b823567ffffffffffffffff80821115614f8f57600080fd5b614f9b86838701614f0e565b93506020850135915080821115614fb157600080fd5b50614fbe85828601614f0e565b9150509250929050565b600081518084526020808501945080840160005b83811015614ff857815187529582019590820190600101614fdc565b509495945050505050565b60208152815160208201526000602083015161502b604084018267ffffffffffffffff169052565b50604083015160608301526060830151610120806080850152615052610140850183614fc8565b9150608085015160a085015260a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160c08601526150978382614fc8565b60c087015160e08781019190915287015161010080880191909152909601519190940152509192915050565b6000602082840312156150d557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611bdf57600080fd5b60006020828403121561510b57600080fd5b5035919050565b60008083601f84011261512457600080fd5b50813567ffffffffffffffff81111561513c57600080fd5b60208301915083602082850101111561515457600080fd5b9250929050565b6000806020838503121561516e57600080fd5b823567ffffffffffffffff81111561518557600080fd5b61519185828601615112565b90969095509350505050565b60005b838110156151b85781810151838201526020016151a0565b8381111561385d5750506000910152565b600081518084526151e181602086016020860161519d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611bdf60208301846151c9565b60006020828403121561523857600080fd5b813567ffffffffffffffff81111561524f57600080fd5b611e0584828501614f0e565b60408152600061526e60408301856151c9565b828103602084015261528081856151c9565b95945050505050565b6000806000806040858703121561529f57600080fd5b843567ffffffffffffffff808211156152b757600080fd5b6152c388838901615112565b909650945060208701359150808211156152dc57600080fd5b506152e987828801615112565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361538457615384615324565b5060010190565b8183823760009101908152919050565b6000828210156153ad576153ad615324565b500390565b600082198211156153c5576153c5615324565b500190565b6040815260006153dd60408301856151c9565b90508260208301529392505050565b6000602082840312156153fe57600080fd5b5051919050565b8051600781900b811461541757600080fd5b919050565b600082601f83011261542d57600080fd5b815161543b614f2d82614ec8565b81815284602083860101111561545057600080fd5b611e0582602083016020870161519d565b60006020828403121561547357600080fd5b815167ffffffffffffffff8082111561548b57600080fd5b9083019060a0828603121561549f57600080fd5b6154a7614e50565b825180151581146154b757600080fd5b8152602083015182811681146154cc57600080fd5b60208201526154dd60408401615405565b6040820152606083015160608201526080830151828111156154fe57600080fd5b61550a8782860161541c565b60808301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261555757615557615519565b500690565b60008261556b5761556b615519565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156155a8576155a8615324565b500290565b600181815b8085111561560657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156155ec576155ec615324565b808516156155f957918102915b93841c93908002906155b2565b509250929050565b60008261561d57506001610cdf565b8161562a57506000610cdf565b8160018114615640576002811461564a57615666565b6001915050610cdf565b60ff84111561565b5761565b615324565b50506001821b610cdf565b5060208310610133831016604e8410600b8410161715615689575081810a610cdf565b61569383836155ad565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156156c5576156c5615324565b029392505050565b6000611bdf838361560e565b600085516156eb818460208a0161519d565b7fff000000000000000000000000000000000000000000000000000000000000008616908301908152845161572781600184016020890161519d565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b600067ffffffffffffffff8381169083168181101561578657615786615324565b03939250505056feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5fffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SystemConfigGlobalABI is the input ABI used to generate the binding from. diff --git a/contracts/lib/nitro-validator b/contracts/lib/nitro-validator index 7879d9b..977d4bd 160000 --- a/contracts/lib/nitro-validator +++ b/contracts/lib/nitro-validator @@ -1 +1 @@ -Subproject commit 7879d9b667e576e39edc9803e1660b4ddb89d934 +Subproject commit 977d4bd0383dcb5fd9816a62efa0a132fea7d8ff diff --git a/contracts/script/DeploySystem.s.sol b/contracts/script/DeploySystem.s.sol index fee81ad..272027c 100644 --- a/contracts/script/DeploySystem.s.sol +++ b/contracts/script/DeploySystem.s.sol @@ -133,7 +133,7 @@ contract DeploySystem is Deploy { uint256 timestamp = vm.getBlockTimestamp(); vm.warp(1732580000); - ICertManager(certManagerAddress).verifyCert(cert, true, keccak256(parent)); + ICertManager(certManagerAddress).verifyCACert(cert, keccak256(parent)); vm.warp(timestamp); } diff --git a/register-signer/main.go b/register-signer/main.go index 53c8f6c..abe7b26 100644 --- a/register-signer/main.go +++ b/register-signer/main.go @@ -109,7 +109,12 @@ func main() { panic(err) } if len(verified) == 0 { - tx, err := certManager.VerifyCert(auth, cert, ca, parentCertHash) + var tx *types.Transaction + if ca { + tx, err = certManager.VerifyCACert(auth, cert, parentCertHash) + } else { + tx, err = certManager.VerifyClientCert(auth, cert, parentCertHash) + } if err != nil { panic(err) }