solc-0.8.35 0x7d4e742018fb52e48b08be73d041c18b21de6fb5 optimized
19126 bytes
608060405234801561000f575f5ffd5b506004361061028c575f3560e01c80639a6fc8f511610161578063d09dc339116100ca578063e76d516811610084578063e76d51681461072f578063eb45716314610740578063eb5dcd6c14610753578063f2fde38b14610766578063fbffd2c114610779578063feaf968c1461078c575f5ffd5b8063d09dc33914610685578063daffc4b51461068d578063dc7f01241461069e578063e3d0e712146106ab578063e4902f82146106be578063e5fe4577146106e6575f5ffd5b8063b121e1471161011b578063b121e14714610615578063b1dc65a414610628578063b5ab58dc1461063b578063b633620c1461064e578063c107532914610661578063c4c92b3714610674575f5ffd5b80639a6fc8f5146105215780639bd2c0b11461056b5780639c849b30146105ac5780639e3ceeab146105bf578063a118f249146105d2578063afcb95d7146105e5575f5ffd5b8063668a0f021161020357806381ff7048116101bd57806381ff70481461047c5780638205bf6a146104ac5780638823da6c146104b45780638ac28d5a146104c75780638da5cb5b146104da57806398e5b12a146104fe575f5ffd5b8063668a0f02146104125780636b14daf81461041a57806370da2f671461043d5780637284e4161461046457806379ba50971461046c5780638038e4a114610474575f5ffd5b8063313ce56711610254578063313ce5671461038e5780634fb17470146103c757806350d25bcd146103da57806354fd4d50146103e2578063643dc105146103ea578063666cab8d146103fd575f5ffd5b80630a756983146102905780630eafb25b1461029a578063181f5a77146102c057806322adbc78146102d5578063299372681461030f575b5f5ffd5b610298610794565b005b6102ad6102a8366004613e93565b6107dc565b6040519081526020015b60405180910390f35b6102c86108de565b6040516102b79190613edc565b6102fc7f000000000000000000000000000000000000000000000000000000000000000081565b60405160179190910b81526020016102b7565b610352600b54600160501b810463ffffffff90811692600160701b8304821692600160901b8104831692600160b01b82041691600160d01b90910462ffffff1690565b6040805163ffffffff9687168152948616602086015292851692840192909252909216606082015262ffffff909116608082015260a0016102b7565b6103b57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102b7565b6102986103d5366004613eee565b6108fe565b6102ad610b12565b6102ad600681565b6102986103f8366004613f36565b610b99565b610405610d7b565b6040516102b79190613fed565b6102ad610ddb565b61042d6104283660046140ae565b610e4c565b60405190151581526020016102b7565b6102fc7f000000000000000000000000000000000000000000000000000000000000000081565b6102c8610e73565b610298610ed8565b610298610f81565b600d54600a546040805163ffffffff808516825264010000000090940490931660208401528201526060016102b7565b6102ad610fca565b6102986104c2366004613e93565b611052565b6102986104d5366004613e93565b6110d2565b5f546001600160a01b03165b6040516001600160a01b0390911681526020016102b7565b610506611143565b60405169ffffffffffffffffffff90911681526020016102b7565b61053461052f3660046140fa565b61129a565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016102b7565b604080518082018252600e546001600160a01b038116808352600160a01b90910463ffffffff166020928301819052835191825291810191909152016102b7565b6102986105ba36600461416a565b611317565b6102986105cd366004613e93565b6114dd565b6102986105e0366004613e93565b61155c565b600a54600b54604080515f8152602081019390935261010090910460081c63ffffffff16908201526060016102b7565b610298610623366004613e93565b6115d6565b6102986106363660046141d4565b6116b0565b6102ad6106493660046142b9565b611b67565b6102ad61065c3660046142b9565b611bd4565b61029861066f3660046142d0565b611c39565b6012546001600160a01b03166104e6565b6102ad611e7f565b600f546001600160a01b03166104e6565b60155461042d9060ff1681565b6102986106b93660046143b5565b611f0b565b6106d16106cc366004613e93565b612602565b60405163ffffffff90911681526020016102b7565b6106ee6126b6565b6040805195865263ffffffff909416602086015260ff9092169284019290925260179190910b60608301526001600160401b0316608082015260a0016102b7565b6011546001600160a01b03166104e6565b61029861074e366004614489565b612754565b610298610761366004613eee565b612837565b610298610774366004613e93565b61296c565b610298610787366004613e93565b61297d565b61053461298e565b61079c612a5c565b60155460ff16156107da576015805460ff191690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b6001600160a01b0381165f9081526002602090815260408083208151606081018352905460ff80821615158084526101008304909116948301949094526201000090046001600160601b0316918101919091529061083c57505f92915050565b600b5460208201515f91600160901b900463ffffffff169060069060ff16601f811061086a5761086a6144b5565b600881049190910154600b5461089d926007166004026101000a90910463ffffffff90811691600160301b9004166144dd565b63ffffffff166108ad91906144f9565b6108bb90633b9aca006144f9565b905081604001516001600160601b0316816108d69190614510565b949350505050565b6060604051806060016040528060248152602001614a9260249139905090565b610906612a5c565b6011546001600160a01b0390811690831681900361092357505050565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610965573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109899190614523565b50610992612aae565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156109d6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fa9190614523565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509083169063a9059cbb906044016020604051808303815f875af1158015610a4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6e919061453a565b610abf5760405162461bcd60e51b815260206004820152601f60248201527f7472616e736665722072656d61696e696e672066756e6473206661696c65640060448201526064015b60405180910390fd5b601180546001600160a01b0319166001600160a01b0386811691821790925560405190918416907f4966a50c93f855342ccf6c5c0d358b85b91335b2acedc7da0932f691f351711a905f90a350505b5050565b5f610b52335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b610b6e5760405162461bcd60e51b8152600401610ab690614559565b600b54600160301b900463ffffffff165f908152600c602052604090205460170b905090565b905090565b6012546001600160a01b0316610bb65f546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610c3f5750604051630d629b5f60e31b81526001600160a01b03821690636b14daf890610c009033905f90369060040161457c565b602060405180830381865afa158015610c1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3f919061453a565b610c8b5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722662696c6c696e6741646d696e2063616e2063616c6c6044820152606401610ab6565b610c93612aae565b600b805467ffffffffffffffff60501b1916600160501b63ffffffff89811691820263ffffffff60701b191692909217600160701b8984169081029190911767ffffffffffffffff60901b1916600160901b89851690810263ffffffff60b01b191691909117600160b01b9489169485021762ffffff60d01b1916600160d01b62ffffff89169081029190911790955560408051938452602084019290925290820152606081019190915260808101919091527f0bf184bf1bba9699114bdceddaf338a1b364252c5e497cc01918dde92031713f9060a00160405180910390a1505050505050565b60606005805480602002602001604051908101604052809291908181526020018280548015610dd157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610db3575b5050505050905090565b5f610e1b335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b610e375760405162461bcd60e51b8152600401610ab690614559565b600b54600160301b900463ffffffff16905090565b5f610e578383612e10565b80610e6a57506001600160a01b03831632145b90505b92915050565b6060610eb4335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b610ed05760405162461bcd60e51b8152600401610ab690614559565b610b94612e3f565b6001546001600160a01b03163314610f2b5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610ab6565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610f89612a5c565b60155460ff166107da576015805460ff191660011790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b5f61100a335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b6110265760405162461bcd60e51b8152600401610ab690614559565b50600b5463ffffffff600160301b90910481165f908152600c6020526040902054600160e01b90041690565b61105a612a5c565b6001600160a01b0381165f9081526016602052604090205460ff16156110cf576001600160a01b0381165f81815260166020908152604091829020805460ff1916905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a15b50565b6001600160a01b038181165f9081526013602052604090205416331461113a5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792070617965652063616e2077697468647261770000000000000000006044820152606401610ab6565b6110cf81612ec6565b5f80546001600160a01b03163314806111ca5750600f54604051630d629b5f60e31b81526001600160a01b0390911690636b14daf89061118b9033905f90369060040161457c565b602060405180830381865afa1580156111a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ca919061453a565b6112165760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206f776e6572267265717565737465722063616e2063616c6c0000006044820152606401610ab6565b600b54600a546040805191825263ffffffff6101008404600881901c8216602085015260ff811684840152915164ffffffffff90921693600160301b9004169133917f41e3990591fd372502daa15842da15bc7f41c75309ab3ff4f56f1848c178825c9181900360600190a261128d8160016145bb565b63ffffffff169250505090565b5f5f5f5f5f6112de335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b6112fa5760405162461bcd60e51b8152600401610ab690614559565b611303866130a6565b945094509450945094505b91939590929450565b61131f612a5c565b82811461136e5760405162461bcd60e51b815260206004820181905260248201527f7472616e736d6974746572732e73697a6520213d207061796565732e73697a656044820152606401610ab6565b5f5b838110156114d6575f85858381811061138b5761138b6144b5565b90506020020160208101906113a09190613e93565b90505f8484848181106113b5576113b56144b5565b90506020020160208101906113ca9190613e93565b6001600160a01b038084165f9081526013602052604090205491925016801580806114065750826001600160a01b0316826001600160a01b0316145b6114465760405162461bcd60e51b81526020600482015260116024820152701c185e595948185b1c9958591e481cd95d607a1b6044820152606401610ab6565b6001600160a01b038481165f90815260136020526040902080546001600160a01b031916858316908117909155908316146114c657826001600160a01b0316826001600160a01b0316856001600160a01b03167f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b360405160405180910390a45b5050600190920191506113709050565b5050505050565b6114e5612a5c565b600f546001600160a01b039081169082168114610b0e57600f80546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f27b89aede8b560578baaa25ee5ce3852c5eecad1e114b941bbd89e1eb4bae63491015b60405180910390a15050565b611564612a5c565b6001600160a01b0381165f9081526016602052604090205460ff166110cf576001600160a01b0381165f81815260166020908152604091829020805460ff1916600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db491016110c6565b6001600160a01b038181165f9081526014602052604090205416331461163e5760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792070726f706f736564207061796565732063616e20616363657074006044820152606401610ab6565b6001600160a01b038181165f8181526013602090815260408083208054336001600160a01b031980831682179093556014909452828520805490921690915590519416939092849290917f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b39190a45050565b5f5a604080516101008082018352600b5460ff8116835290810464ffffffffff9081166020808501829052600160301b840463ffffffff90811696860196909652600160501b840486166060860152600160701b840486166080860152600160901b8404861660a0860152600160b01b840490951660c0850152600160d01b90920462ffffff1660e08401529394509092918c0135918216116117845760405162461bcd60e51b815260206004820152600c60248201526b1cdd185b19481c995c1bdc9d60a21b6044820152606401610ab6565b335f9081526002602052604090205460ff166117e25760405162461bcd60e51b815260206004820152601860248201527f756e617574686f72697a6564207472616e736d697474657200000000000000006044820152606401610ab6565b600a548b351461182c5760405162461bcd60e51b81526020600482015260156024820152740c6dedcccd2ce88d2cecae6e840dad2e6dac2e8c6d605b1b6044820152606401610ab6565b61183a8a8a8a8a8a8a61312f565b81516118479060016145d7565b60ff1687146118985760405162461bcd60e51b815260206004820152601a60248201527f77726f6e67206e756d626572206f66207369676e6174757265730000000000006044820152606401610ab6565b8685146118e75760405162461bcd60e51b815260206004820152601e60248201527f7369676e617475726573206f7574206f6620726567697374726174696f6e00006044820152606401610ab6565b5f8a8a6040516118f89291906145f0565b60405190819003812061190f918e906020016145ff565b60408051601f1981840301815282825280516020918201208383019092525f808452908301819052909250905f5b8a811015611a9a575f6001858a846020811061195b5761195b6144b5565b61196891901a601b6145d7565b8f8f8681811061197a5761197a6144b5565b905060200201358e8e87818110611993576119936144b5565b905060200201356040515f81526020016040526040516119cf949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156119ef573d5f5f3e3d5ffd5b505060408051601f198101516001600160a01b0381165f9081526003602090815290849020838501909452925460ff8082161515808552610100909204169383019390935290955092509050611a795760405162461bcd60e51b815260206004820152600f60248201526e39b4b3b730ba3ab9329032b93937b960891b6044820152606401610ab6565b826020015160080260ff166001901b8401935050808060010191505061193d565b5081827e010101010101010101010101010101010101010101010101010101010101011614611afe5760405162461bcd60e51b815260206004820152601060248201526f323ab83634b1b0ba329039b4b3b732b960811b6044820152606401610ab6565b505f9150611b4b9050838d836020020135848e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506131ca92505050565b9050611b598382863361368f565b505050505050505050505050565b5f611ba7335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b611bc35760405162461bcd60e51b8152600401610ab690614559565b611bcc826137a2565b90505b919050565b5f611c14335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b611c305760405162461bcd60e51b8152600401610ab690614559565b611bcc826137d1565b5f546001600160a01b0316331480611cbf5750601254604051630d629b5f60e31b81526001600160a01b0390911690636b14daf890611c809033905f90369060040161457c565b602060405180830381865afa158015611c9b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbf919061453a565b611d0b5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722662696c6c696e6741646d696e2063616e2063616c6c6044820152606401610ab6565b5f611d14613807565b6011546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d839190614523565b905081811015611dcc5760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b6044820152606401610ab6565b6011546001600160a01b031663a9059cbb85611df1611deb8686614615565b876139b6565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611e39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5d919061453a565b611e795760405162461bcd60e51b8152600401610ab690614628565b50505050565b6011546040516370a0823160e01b81523060048201525f9182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ec9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eed9190614523565b90505f611ef8613807565b9050611f048183614654565b9250505090565b611f13612a5c565b601f86511115611f585760405162461bcd60e51b815260206004820152601060248201526f746f6f206d616e79206f7261636c657360801b6044820152606401610ab6565b8451865114611fa25760405162461bcd60e51b81526020600482015260166024820152750dee4c2c6d8ca40d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610ab6565b8551611faf85600361467a565b60ff1610611fff5760405162461bcd60e51b815260206004820152601860248201527f6661756c74792d6f7261636c65206620746f6f206869676800000000000000006044820152606401610ab6565b61200b8460ff166139cc565b60408051600160f81b60208201527f0000000000000000000000000000000000000000000000000000000000000000821b60218201527f000000000000000000000000000000000000000000000000000000000000000090911b6039820152605101604051602081830303815290604052805190602001208380519060200120146120d05760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206f6e636861696e436f6e66696760581b6044820152606401610ab6565b6040805160c0810182528781526020810187905260ff861691810191909152606081018490526001600160401b038316608082015260a08101829052600b805465ffffffffff0019169055612123612aae565b6004545f5b818110156121c6575f60048281548110612144576121446144b5565b5f918252602082200154600580546001600160a01b0390921693509084908110612170576121706144b5565b5f9182526020808320909101546001600160a01b039485168352600382526040808420805461ffff1916905594168252600290529190912080546dffffffffffffffffffffffffffff1916905550600101612128565b506121d260045f613e55565b6121dd60055f613e55565b5f5b8251518110156124425760035f845f01518381518110612201576122016144b5565b6020908102919091018101516001600160a01b031682528101919091526040015f205460ff16156122745760405162461bcd60e51b815260206004820152601760248201527f7265706561746564207369676e657220616464726573730000000000000000006044820152606401610ab6565b604080518082019091526001815260ff82166020820152835180516003915f91859081106122a4576122a46144b5565b6020908102919091018101516001600160a01b03168252818101929092526040015f908120835181549484015161ffff1990951690151561ff0019161761010060ff9095169490940293909317909255840151805160029291908490811061230e5761230e6144b5565b6020908102919091018101516001600160a01b031682528101919091526040015f205460ff16156123815760405162461bcd60e51b815260206004820152601c60248201527f7265706561746564207472616e736d69747465722061646472657373000000006044820152606401610ab6565b60405180606001604052806001151581526020018260ff1681526020015f6001600160601b031681525060025f856020015184815181106123c4576123c46144b5565b6020908102919091018101516001600160a01b031682528181019290925260409081015f20835181549385015194909201516001600160601b0316620100000262010000600160701b031960ff959095166101000261ff00199315159390931661ffff199094169390931791909117929092161790556001016121df565b5081516004906124529082614696565b5060208201516005906124659082614696565b506040820151600b805460ff191660ff909216919091179055600d805467ffffffff0000000019811664010000000063ffffffff4381168202928317855590830481169360019390925f926124c19286929082169116176145bb565b92506101000a81548163ffffffff021916908363ffffffff16021790555061251e4630600d5f9054906101000a900463ffffffff1663ffffffff16865f01518760200151886040015189606001518a608001518b60a00151613a10565b600a819055600d5484516020860151604080880151606089015160808a015160a08b015193517f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0598612587988b98919763ffffffff909116969195909490939092909190614737565b60405180910390a1600b54600160301b900463ffffffff165f5b8451518110156125f55781600682601f81106125bf576125bf6144b5565b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555080806001019150506125a1565b5050505050505050505050565b6001600160a01b0381165f9081526002602090815260408083208151606081018352905460ff80821615158084526101008304909116948301949094526201000090046001600160601b0316918101919091529061266257505f92915050565b6006816020015160ff16601f811061267c5761267c6144b5565b600881049190910154600b546126af926007166004026101000a90910463ffffffff90811691600160301b9004166144dd565b9392505050565b5f808080803332146127015760405162461bcd60e51b81526020600482015260146024820152734f6e6c792063616c6c61626c6520627920454f4160601b6044820152606401610ab6565b5050600a54600b5463ffffffff600160301b820481165f908152600c60205260409020549296610100909204600881901c8216965064ffffffffff169450601783900b9350600160e01b90920490911690565b61275c612a5c565b60408051808201909152600e546001600160a01b03808216808452600160a01b90920463ffffffff16602084015284161415806127a957508163ffffffff16816020015163ffffffff1614155b15612832576040805180820182526001600160a01b0385811680835263ffffffff8681166020948501819052600e80546001600160c01b0319168417600160a01b830217905586518786015187519316835294820152909392909116917fb04e3a37abe9c0fcdfebdeae019a8e2b12ddf53f5d55ffb0caccc1bedaca1541910160405180910390a35b505050565b6001600160a01b038281165f9081526013602052604090205416331461289f5760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c792063757272656e742070617965652063616e207570646174650000006044820152606401610ab6565b6001600160a01b03811633036128f75760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610ab6565b6001600160a01b038083165f90815260146020526040902080548383166001600160a01b031982168117909255909116908114612832576040516001600160a01b038084169133918616907f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e38367905f90a4505050565b612974612a5c565b6110cf81613a6b565b612985612a5c565b6110cf81613b13565b5f5f5f5f5f6129d2335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e4c92505050565b6129ee5760405162461bcd60e51b8152600401610ab690614559565b612a4b600b54600160301b900463ffffffff9081165f818152600c602090815260409182902082516060810184529054601781900b808352600160c01b82048716938301849052600160e01b909104909516920182905291938490565b945094509450945094509091929394565b5f546001600160a01b031633146107da5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610ab6565b601154600b54604080516103e08101918290526001600160a01b0390931692600160301b90920463ffffffff16915f91600690601f908285855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411612ae8579050505050505090505f6005805480602002602001604051908101604052809291908181526020018280548015612b8057602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612b62575b509394505f93505050505b8151811015612e03575f60025f848481518110612baa57612baa6144b5565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f0160029054906101000a90046001600160601b03166001600160601b031690505f60025f858581518110612c0857612c086144b5565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f0160026101000a8154816001600160601b0302191690836001600160601b031602179055505f8483601f8110612c6857612c686144b5565b6020020151600b5490870363ffffffff9081169250600160901b909104168102633b9aca000282018015612df8575f60135f878781518110612cac57612cac6144b5565b6020908102919091018101516001600160a01b0390811683529082019290925260409081015f2054905163a9059cbb60e01b815290821660048201819052602482018590529250908a169063a9059cbb906044016020604051808303815f875af1158015612d1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d40919061453a565b612d5c5760405162461bcd60e51b8152600401610ab690614628565b878786601f8110612d6f57612d6f6144b5565b602002019063ffffffff16908163ffffffff1681525050886001600160a01b0316816001600160a01b0316878781518110612dac57612dac6144b5565b60200260200101516001600160a01b03167fd0b1dac935d85bd54cf0a33b0d41d39f8cf53a968465fc7ea2377526b8ac712c85604051612dee91815260200190565b60405180910390a4505b505050600101612b8b565b5060066114d683826147cc565b6001600160a01b0382165f9081526016602052604081205460ff1680610e6a57505060155460ff161592915050565b606060108054612e4e90614869565b80601f0160208091040260200160405190810160405280929190818152602001828054612e7a90614869565b8015610dd15780601f10612e9c57610100808354040283529160200191610dd1565b820191905f5260205f20905b815481529060010190602001808311612ea857509395945050505050565b6001600160a01b0381165f908152600260209081526040918290208251606081018452905460ff80821615158084526101008304909116938301939093526201000090046001600160601b031692810192909252612f22575050565b5f612f2c836107dc565b90508015612832576001600160a01b038381165f908152601360205260409081902054601154915163a9059cbb60e01b8152908316600482018190526024820185905292919091169063a9059cbb906044016020604051808303815f875af1158015612f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbe919061453a565b612fda5760405162461bcd60e51b8152600401610ab690614628565b600b5f0160069054906101000a900463ffffffff166006846020015160ff16601f8110613009576130096144b5565b6008810491909101805460079092166004026101000a63ffffffff8181021990931693909216919091029190911790556001600160a01b038481165f81815260026020908152604091829020805462010000600160701b0319169055601154915186815291841693851692917fd0b1dac935d85bd54cf0a33b0d41d39f8cf53a968465fc7ea2377526b8ac712c910160405180910390a450505050565b5f8080808063ffffffff69ffffffffffffffffffff871611156130d657505f93508392508291508190508061130e565b5050505063ffffffff8281165f908152600c602090815260409182902082516060810184529054601781900b808352600160c01b82048616938301849052600160e01b9091049094169201829052939491939250908490565b5f61313b8260206144f9565b6131468560206144f9565b61315288610144614510565b61315c9190614510565b6131669190614510565b613170905f614510565b90503681146131c15760405162461bcd60e51b815260206004820152601860248201527f63616c6c64617461206c656e677468206d69736d6174636800000000000000006044820152606401610ab6565b50505050505050565b5f5f6131d583613b82565b9050601f816040015151111561322d5760405162461bcd60e51b815260206004820152601e60248201527f6e756d206f62736572766174696f6e73206f7574206f6620626f756e647300006044820152606401610ab6565b604081015151865160ff16106132855760405162461bcd60e51b815260206004820152601e60248201527f746f6f206665772076616c75657320746f207472757374206d656469616e00006044820152606401610ab6565b64ffffffffff84166020870152604081015180515f91906132a89060029061489b565b815181106132b8576132b86144b5565b602002602001015190508060170b7f000000000000000000000000000000000000000000000000000000000000000060170b1315801561331e57507f000000000000000000000000000000000000000000000000000000000000000060170b8160170b13155b61336a5760405162461bcd60e51b815260206004820152601e60248201527f6d656469616e206973206f7574206f66206d696e2d6d61782072616e676500006044820152606401610ab6565b6040870180519061337a826148ba565b63ffffffff1663ffffffff168152505060405180606001604052808260170b8152602001835f015163ffffffff1681526020014263ffffffff16815250600c5f896040015163ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a8154816001600160c01b03021916908360170b6001600160c01b031602179055506020820151815f0160186101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f01601c6101000a81548163ffffffff021916908363ffffffff16021790555090505086600b5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548164ffffffffff021916908364ffffffffff1602179055506040820151815f0160066101000a81548163ffffffff021916908363ffffffff1602179055506060820151815f01600a6101000a81548163ffffffff021916908363ffffffff1602179055506080820151815f01600e6101000a81548163ffffffff021916908363ffffffff16021790555060a0820151815f0160126101000a81548163ffffffff021916908363ffffffff16021790555060c0820151815f0160166101000a81548163ffffffff021916908363ffffffff16021790555060e0820151815f01601a6101000a81548162ffffff021916908362ffffff160217905550905050866040015163ffffffff167fc797025feeeaf2cd924c99e9205acb8ec04d5cad21c41ce637a38fb6dee6016a8233855f01518660400151876020015188606001518d8d6040516135d99897969594939291906148de565b60405180910390a26040808801518351915163ffffffff92831681525f92909116907f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac602719060200160405180910390a3866040015163ffffffff168160170b7f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f4260405161366891815260200190565b60405180910390a361368187604001518260170b613c23565b506060015195945050505050565b5f8360170b12611e79575f6136bf633b9aca003a04866080015163ffffffff16876060015163ffffffff16613d25565b9050601036025f5a90505f6136e68663ffffffff1685858b60e0015162ffffff1686613d4a565b90505f670de0b6b3a76400006001600160c01b03891683026001600160a01b0388165f9081526002602052604090205460c08c01519290910492506201000090046001600160601b039081169163ffffffff16633b9aca0002828401019081168211156137595750505050505050611e79565b6001600160a01b0388165f90815260026020526040902080546001600160601b03909216620100000262010000600160701b031990921691909117905550505050505050505050565b5f63ffffffff8211156137b657505f919050565b5063ffffffff165f908152600c602052604090205460170b90565b5f63ffffffff8211156137e557505f919050565b5063ffffffff9081165f908152600c6020526040902054600160e01b90041690565b5f5f600580548060200260200160405190810160405280929190818152602001828054801561385d57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161383f575b50508351600b54604080516103e08101918290529697509195600160301b90910463ffffffff1694505f93509150600690601f908285855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161389557509495505f9450505050505b8381101561391e578181601f81106138f5576138f56144b5565b602002015161390490846144dd565b6139149063ffffffff1687614510565b95506001016138db565b50600b5461393d90600160901b900463ffffffff16633b9aca006144f9565b61394790866144f9565b94505f5b838110156139ae5760025f868381518110613968576139686144b5565b6020908102919091018101516001600160a01b031682528101919091526040015f20546139a4906201000090046001600160601b031687614510565b955060010161394b565b505050505090565b5f818310156139c6575081610e6d565b50919050565b805f106110cf5760405162461bcd60e51b815260206004820152601260248201527166206d75737420626520706f73697469766560701b6044820152606401610ab6565b5f5f8a8a8a8a8a8a8a8a8a604051602001613a3399989796959493929190614982565b60408051601f1981840301815291905280516020909101206001600160f01b0316600160f01b179150505b9998505050505050505050565b336001600160a01b03821603613ac35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610ab6565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6012546001600160a01b039081169082168114610b0e57601280546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f793cb73064f3c8cde7e187ae515511e6e56d1ee89bf08b82fa60fb70f8d489129101611550565b613bb460405180608001604052805f63ffffffff16815260200160608152602001606081526020015f60170b81525090565b5f5f60605f85806020019051810190613bcd91906149cc565b92965090945092509050613be18683613dad565b81516040805160208082019690965281519082018252918252805160808101825263ffffffff969096168652938501529183015260170b606082015292915050565b60408051808201909152600e546001600160a01b038116808352600160a01b90910463ffffffff166020830152613c5957505050565b5f613c656001856144dd565b63ffffffff8181165f818152600c6020908152604091829020549087015187519251602481019490945260179190910b60448401819052898516606485015260848401899052949550613ce693169160a40160408051601f198184030181529190526020810180516001600160e01b031663beed9b5160e01b179052613e1c565b6114d65760405162461bcd60e51b815260206004820152601060248201526f696e73756666696369656e742067617360801b6044820152606401610ab6565b5f8383811015613d3757600285850304015b613d4181846139b6565b95945050505050565b5f81861015613d9b5760405162461bcd60e51b815260206004820181905260248201527f6c6566744761732063616e6e6f742065786365656420696e697469616c4761736044820152606401610ab6565b50633b9aca0094039190910101020290565b5f81516020613dbc91906144f9565b613dc79060a0614510565b613dd1905f614510565b9050808351146128325760405162461bcd60e51b81526020600482015260166024820152750e4cae0dee4e840d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610ab6565b5f5a6113888110613e4d5761138881039050846040820482031115613e4d575f5f8451602086015f888af150600191505b509392505050565b5080545f8255905f5260205f20906107da91905f5b80821115612832575f81840155600101613e6a565b6001600160a01b03811681146110cf575f5ffd5b5f60208284031215613ea3575f5ffd5b81356126af81613e7f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e6a6020830184613eae565b5f5f60408385031215613eff575f5ffd5b8235613f0a81613e7f565b91506020830135613f1a81613e7f565b809150509250929050565b63ffffffff811681146110cf575f5ffd5b5f5f5f5f5f60a08688031215613f4a575f5ffd5b8535613f5581613f25565b94506020860135613f6581613f25565b93506040860135613f7581613f25565b92506060860135613f8581613f25565b9150608086013562ffffff81168114613f9c575f5ffd5b809150509295509295909350565b5f8151808452602084019350602083015f5b82811015613fe35781516001600160a01b0316865260209586019590910190600101613fbc565b5093949350505050565b602081525f610e6a6020830184613faa565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561403b5761403b613fff565b604052919050565b5f82601f830112614052575f5ffd5b81356001600160401b0381111561406b5761406b613fff565b61407e601f8201601f1916602001614013565b818152846020838601011115614092575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156140bf575f5ffd5b82356140ca81613e7f565b915060208301356001600160401b038111156140e4575f5ffd5b6140f085828601614043565b9150509250929050565b5f6020828403121561410a575f5ffd5b813569ffffffffffffffffffff811681146126af575f5ffd5b5f5f83601f840112614133575f5ffd5b5081356001600160401b03811115614149575f5ffd5b6020830191508360208260051b8501011115614163575f5ffd5b9250929050565b5f5f5f5f6040858703121561417d575f5ffd5b84356001600160401b03811115614192575f5ffd5b61419e87828801614123565b90955093505060208501356001600160401b038111156141bc575f5ffd5b6141c887828801614123565b95989497509550505050565b5f5f5f5f5f5f5f5f60e0898b0312156141eb575f5ffd5b606089018a8111156141fb575f5ffd5b899850356001600160401b03811115614212575f5ffd5b8901601f81018b13614222575f5ffd5b80356001600160401b03811115614237575f5ffd5b8b6020828401011115614248575f5ffd5b6020919091019750955060808901356001600160401b0381111561426a575f5ffd5b6142768b828c01614123565b90965094505060a08901356001600160401b03811115614294575f5ffd5b6142a08b828c01614123565b999c989b50969995989497949560c00135949350505050565b5f602082840312156142c9575f5ffd5b5035919050565b5f5f604083850312156142e1575f5ffd5b82356142ec81613e7f565b946020939093013593505050565b5f6001600160401b0382111561431257614312613fff565b5060051b60200190565b5f82601f83011261432b575f5ffd5b813561433e614339826142fa565b614013565b8082825260208201915060208360051b86010192508583111561435f575f5ffd5b602085015b8381101561438557803561437781613e7f565b835260209283019201614364565b5095945050505050565b803560ff81168114611bcf575f5ffd5b80356001600160401b0381168114611bcf575f5ffd5b5f5f5f5f5f5f60c087890312156143ca575f5ffd5b86356001600160401b038111156143df575f5ffd5b6143eb89828a0161431c565b96505060208701356001600160401b03811115614406575f5ffd5b61441289828a0161431c565b9550506144216040880161438f565b935060608701356001600160401b0381111561443b575f5ffd5b61444789828a01614043565b9350506144566080880161439f565b915060a08701356001600160401b03811115614470575f5ffd5b61447c89828a01614043565b9150509295509295509295565b5f5f6040838503121561449a575f5ffd5b82356144a581613e7f565b91506020830135613f1a81613f25565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b63ffffffff8281168282160390811115610e6d57610e6d6144c9565b8082028115828204841417610e6d57610e6d6144c9565b80820180821115610e6d57610e6d6144c9565b5f60208284031215614533575f5ffd5b5051919050565b5f6020828403121561454a575f5ffd5b815180151581146126af575f5ffd5b6020808252600990820152684e6f2061636365737360b81b604082015260600190565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b63ffffffff8181168382160190811115610e6d57610e6d6144c9565b60ff8181168382160190811115610e6d57610e6d6144c9565b818382375f9101908152919050565b8281526080810160608360208401379392505050565b81810381811115610e6d57610e6d6144c9565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b8181035f831280158383131683831282161715614673576146736144c9565b5092915050565b60ff8181168382160290811690818114614673576146736144c9565b81516001600160401b038111156146af576146af613fff565b680100000000000000008111156146c8576146c8613fff565b8154818355808210156146fc57825f528160205f20018282035f5b818110156146f8575f838201556001016146e3565b5050505b5060208301825f5260205f205f5b8381101561472f5782516001600160a01b03168183015560209092019160010161470a565b505050505050565b63ffffffff8a16815288602082015263ffffffff8816604082015261012060608201525f614769610120830189613faa565b828103608084015261477b8189613faa565b905060ff871660a084015282810360c08401526147988187613eae565b90506001600160401b03851660e08401528281036101008401526147bc8185613eae565b9c9b505050505050505050505050565b815f5b600381101561482d575f5f5b60088110156148205761480f6147f5855163ffffffff1690565b63ffffffff908116600584901b90811b91901b1984161790565b6020949094019391506001016147db565b50838201556001016147cf565b505f5f5b600781101561485c5761484b6147f5845163ffffffff1690565b602093909301929150600101614831565b5080600384015550505050565b600181811c9082168061487d57607f821691505b6020821081036139c657634e487b7160e01b5f52602260045260245ffd5b5f826148b557634e487b7160e01b5f52601260045260245ffd5b500490565b5f63ffffffff821663ffffffff81036148d5576148d56144c9565b60010192915050565b5f61010082018a60170b835260018060a01b038a16602084015263ffffffff8916604084015261010060608401528088518083526101208501915060208a0192505f5b8181101561494257835160170b835260209384019390920191600101614921565b505083810360808501526149568189613eae565b9250505061496960a083018660170b9052565b8360c0830152613a5e60e083018464ffffffffff169052565b8981526001600160a01b03891660208201526001600160401b0388166040820152610120606082018190525f9061476990830189613faa565b8051601781900b8114611bcf575f5ffd5b5f5f5f5f608085870312156149df575f5ffd5b84516149ea81613f25565b6020860151604087015191955093506001600160401b03811115614a0c575f5ffd5b8501601f81018713614a1c575f5ffd5b8051614a2a614339826142fa565b8082825260208201915060208360051b850101925089831115614a4b575f5ffd5b6020840193505b82841015614a7457614a63846149bb565b825260209384019390910190614a52565b9450614a8692505050606086016149bb565b90509295919450925056fe416363657373436f6e74726f6c6c65644f43523241676772656761746f7220312e302e30