60806040526605543df729c0006009553480156200001b575f80fd5b50604051620029a2380380620029a28339810160408190526200003e9162000138565b81815f6200004d83826200022a565b5060016200005c82826200022a565b5050600b80546001600160a01b0319163317905550620002f2915050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200009e575f80fd5b81516001600160401b0380821115620000bb57620000bb6200007a565b604051601f8301601f19908116603f01168101908282118183101715620000e657620000e66200007a565b8160405283815260209250868385880101111562000102575f80fd5b5f91505b8382101562000125578582018301518183018401529082019062000106565b5f93810190920192909252949350505050565b5f80604083850312156200014a575f80fd5b82516001600160401b038082111562000161575f80fd5b6200016f868387016200008e565b9350602085015191508082111562000185575f80fd5b5062000194858286016200008e565b9150509250929050565b600181811c90821680620001b357607f821691505b602082108103620001d257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000225575f81815260208120601f850160051c81016020861015620002005750805b601f850160051c820191505b8181101562000221578281556001016200020c565b5050505b505050565b81516001600160401b038111156200024657620002466200007a565b6200025e816200025784546200019e565b84620001d8565b602080601f83116001811462000294575f84156200027c5750858301515b5f19600386901b1c1916600185901b17855562000221565b5f85815260208120601f198616915b82811015620002c457888601518255948401946001909101908401620002a3565b5085821015620002e257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6126a280620003005f395ff3fe608060405260043610610195575f3560e01c806370a08231116100e7578063b88d4fde11610087578063c38c581311610062578063c38c581314610466578063c87b56dd14610485578063db68cae6146104a4578063e985e9c5146104db575f80fd5b8063b88d4fde14610417578063be9af53614610436578063c0b776d514610449575f80fd5b80638e264590116100c25780638e264590146103a557806395d89b41146103d1578063a22cb465146103e5578063ae677aa314610404575f80fd5b806370a082311461036057806372b3b6201461037f57806385535b2514610392575f80fd5b8063202e37401161015257806342842e0e1161012d57806342842e0e146102ef57806345f8fa801461030e5780634cb33d5b146103225780636352211e14610341575f80fd5b8063202e37401461028557806323b872dd14610299578063316ee9fb146102b8575f80fd5b806301ffc9a71461019957806306fdde03146101cd578063081812fc146101ee578063095ea7b3146102255780630f08efe01461024657806312e8558514610267575b5f80fd5b3480156101a4575f80fd5b506101b86101b3366004611fbe565b610522565b60405190151581526020015b60405180910390f35b3480156101d8575f80fd5b506101e161054c565b6040516101c49190612026565b3480156101f9575f80fd5b5061020d610208366004612038565b6105db565b6040516001600160a01b0390911681526020016101c4565b348015610230575f80fd5b5061024461023f36600461206a565b610600565b005b348015610251575f80fd5b5061025a610719565b6040516101c491906120d2565b348015610272575f80fd5b506009545b6040519081526020016101c4565b348015610290575f80fd5b5061025a610888565b3480156102a4575f80fd5b506102446102b336600461211f565b610a31565b3480156102c3575f80fd5b506101b86102d2366004612158565b6001600160a01b03165f908152600d602052604090205460ff1690565b3480156102fa575f80fd5b5061024461030936600461211f565b610a62565b348015610319575f80fd5b5061025a610a7c565b34801561032d575f80fd5b5061024461033c366004612158565b610c25565b34801561034c575f80fd5b5061020d61035b366004612038565b610d3c565b34801561036b575f80fd5b5061027761037a366004612158565b610d9b565b61027761038d3660046121f8565b610e1f565b6102446103a036600461224d565b610e5f565b3480156103b0575f80fd5b506103c46103bf366004612038565b610f93565b6040516101c4919061226d565b3480156103dc575f80fd5b506101e1610ffc565b3480156103f0575f80fd5b506102446103ff36600461227b565b61100b565b610244610412366004612038565b611016565b348015610422575f80fd5b506102446104313660046122b4565b61109b565b610244610444366004612038565b6110d3565b348015610454575f80fd5b50600b546001600160a01b031661020d565b348015610471575f80fd5b50610244610480366004612158565b611231565b348015610490575f80fd5b506101e161049f366004612038565b61135e565b3480156104af575f80fd5b506101b86104be366004612158565b6001600160a01b03165f908152600c602052604090205460ff1690565b3480156104e6575f80fd5b506101b86104f536600461232b565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b03198216632483248360e11b1480610546575061054682611468565b92915050565b60605f805461055a9061235c565b80601f01602080910402602001604051908101604052809291908181526020018280546105869061235c565b80156105d15780601f106105a8576101008083540402835291602001916105d1565b820191905f5260205f20905b8154815290600101906020018083116105b457829003601f168201915b5050505050905090565b5f6105e5826114b7565b505f908152600460205260409020546001600160a01b031690565b5f61060a82610d3c565b9050806001600160a01b0316836001600160a01b03160361067c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610698575061069881336104f5565b61070a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610673565b6107148383611518565b505050565b60605f61072560075490565b90505f61073160085490565b60075461073e91906123a8565b90505f808267ffffffffffffffff81111561075b5761075b612171565b60405190808252806020026020018201604052801561079457816020015b610781611f7c565b8152602001906001900390816107795790505b5090505f5b8481101561087f5730600e5f6107b08460016123bb565b815260208101919091526040015f20600201546001600160a01b03160361086d575f6107dd8260016123bb565b5f818152600e6020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382019390935260028201549092169282019290925260038201546060820152600482015460ff161515608082015285519293509091859087908110610852576108526123ce565b60209081029190910101526108686001866123bb565b945050505b80610877816123e2565b915050610799565b50949350505050565b60605f61089460075490565b90505f805f5b838110156108f25733600e5f6108b18460016123bb565b815260208101919091526040015f20600201546001600160a01b0316036108e0576108dd6001846123bb565b92505b806108ea816123e2565b91505061089a565b505f8267ffffffffffffffff81111561090d5761090d612171565b60405190808252806020026020018201604052801561094657816020015b610933611f7c565b81526020019060019003908161092b5790505b5090505f5b8481101561087f5733600e5f6109628460016123bb565b815260208101919091526040015f20600201546001600160a01b031603610a1f575f61098f8260016123bb565b5f818152600e6020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382019390935260028201549092169282019290925260038201546060820152600482015460ff161515608082015285519293509091859087908110610a0457610a046123ce565b6020908102919091010152610a1a6001866123bb565b945050505b80610a29816123e2565b91505061094b565b610a3b3382611585565b610a575760405162461bcd60e51b8152600401610673906123fa565b610714838383611601565b61071483838360405180602001604052805f81525061109b565b60605f610a8860075490565b90505f805f5b83811015610ae65733600e5f610aa58460016123bb565b815260208101919091526040015f20600101546001600160a01b031603610ad457610ad16001846123bb565b92505b80610ade816123e2565b915050610a8e565b505f8267ffffffffffffffff811115610b0157610b01612171565b604051908082528060200260200182016040528015610b3a57816020015b610b27611f7c565b815260200190600190039081610b1f5790505b5090505f5b8481101561087f5733600e5f610b568460016123bb565b815260208101919091526040015f20600101546001600160a01b031603610c13575f610b838260016123bb565b5f818152600e6020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382019390935260028201549092169282019290925260038201546060820152600482015460ff161515608082015285519293509091859087908110610bf857610bf86123ce565b6020908102919091010152610c0e6001866123bb565b945050505b80610c1d816123e2565b915050610b3f565b335f908152600c602052604090205460ff16610c7a5760405162461bcd60e51b81526020600482015260146024820152732cb7ba9030b932903737ba1030b71030b236b4b760611b6044820152606401610673565b6001600160a01b0381165f908152600d602052604090205460ff1615610ce25760405162461bcd60e51b815260206004820152601a60248201527f41727469737420616c726561647920726567697374657265642e0000000000006044820152606401610673565b6001600160a01b0381165f818152600d6020908152604091829020805460ff1916600117905590519182527fa8476a100dfe10a5a1eaf141fb52ce03e930b3592d93f086ea603b0f9152649a91015b60405180910390a150565b5f818152600260205260408120546001600160a01b0316806105465760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610673565b5f6001600160a01b038216610e045760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610673565b506001600160a01b03165f9081526003602052604090205490565b5f610e2e600780546001019055565b5f610e3860075490565b9050610e443382611763565b610e4e81856118eb565b610e5881846119b4565b9392505050565b5f828152600e60205260409020600201546001600160a01b03163314610ed35760405162461bcd60e51b815260206004820152602360248201527f596f7520617265206e6f7420746865206f776e6572206f66207468697320746f60448201526235b2b760e91b6064820152608401610673565b6009543414610f355760405162461bcd60e51b815260206004820152602860248201527f5072696365206d75737420626520657175616c20746f2074686520646566696e604482015267656420707269636560c01b6064820152608401610673565b5f828152600e6020526040902060048101805460ff19169055600381018290556001810180546001600160a01b031990811633179091556002909101805490911630179055610f846008611b53565b610f8f333084611601565b5050565b610f9b611f7c565b505f908152600e6020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201939093526002820154909216928201929092526003820154606082015260049091015460ff161515608082015290565b60606001805461055a9061235c565b610f8f338383611ba9565b600a546001600160a01b031633146110965760405162461bcd60e51b815260206004820152603c60248201527f546865206c697374696e672070726963652063616e206f6e6c79206265206d6f60448201527f6469666965642062792074686520636f6e7472616374206f776e6572000000006064820152608401610673565b600955565b6110a53383611585565b6110c15760405162461bcd60e51b8152600401610673906123fa565b6110cd84848484611c76565b50505050565b5f818152600e60205260409020600301543481146111595760405162461bcd60e51b815260206004820152603b60248201527f506c656173652070726f7669646520746865207265717565737465642070726960448201527f636520746f2066696e616c697a652074686520707572636861736500000000006064820152608401610673565b5f828152600e602052604090206002810180546001600160a01b0319908116331790915560048201805460ff19166001908117909155909101805490911690556111a7600880546001019055565b6111b2303384611601565b600a546009546040516001600160a01b039092169181156108fc0291905f818181858888f193505050501580156111eb573d5f803e3d5ffd5b505f828152600e60205260408082206001015490516001600160a01b03909116913480156108fc02929091818181858888f19350505050158015610714573d5f803e3d5ffd5b600b546001600160a01b031633146112a35760405162461bcd60e51b815260206004820152602f60248201527f41646d696e732063616e206f6e6c79206265207265676973746572656420627960448201526e103a34329039bab832b920b236b4b760891b6064820152608401610673565b6001600160a01b0381165f908152600c602052604090205460ff161561130b5760405162461bcd60e51b815260206004820181905260248201527f5468697320706572736f6e20697320616c726561647920616e2061646d696e2e6044820152606401610673565b6001600160a01b0381165f818152600c6020908152604091829020805460ff1916600117905590519182527fac0f15283d37631c15b481bc07dc402bcfc030956bcd94b5585f71d92e84c3da9101610d31565b6060611369826114b7565b5f82815260066020526040812080546113819061235c565b80601f01602080910402602001604051908101604052809291908181526020018280546113ad9061235c565b80156113f85780601f106113cf576101008083540402835291602001916113f8565b820191905f5260205f20905b8154815290600101906020018083116113db57829003601f168201915b505050505090505f61141460408051602081019091525f815290565b905080515f03611425575092915050565b81511561145757808260405160200161143f929190612447565b60405160208183030381529060405292505050919050565b61146084611ca9565b949350505050565b5f6001600160e01b031982166380ac58cd60e01b148061149857506001600160e01b03198216635b5e139f60e01b145b8061054657506301ffc9a760e01b6001600160e01b0319831614610546565b5f818152600260205260409020546001600160a01b03166115155760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610673565b50565b5f81815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061154c82610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f8061159083610d3c565b9050806001600160a01b0316846001600160a01b031614806115d657506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff165b806114605750836001600160a01b03166115ef846105db565b6001600160a01b031614949350505050565b826001600160a01b031661161482610d3c565b6001600160a01b03161461163a5760405162461bcd60e51b815260040161067390612475565b6001600160a01b03821661169c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610673565b826001600160a01b03166116af82610d3c565b6001600160a01b0316146116d55760405162461bcd60e51b815260040161067390612475565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166117b95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610673565b5f818152600260205260409020546001600160a01b03161561181d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610673565b5f818152600260205260409020546001600160a01b0316156118815760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610673565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f828152600260205260409020546001600160a01b03166119655760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610673565b5f82815260066020526040902061197c8282612507565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b5f8111611a035760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e2030000000006044820152606401610673565b6009543414611a705760405162461bcd60e51b815260206004820152603360248201527f5072696365206d7573742062652067726561746572207468616e2074686520706044820152723630ba3337b9369031b7b6b6b4b9b9b4b7b71760691b6064820152608401610673565b6040805160a08101825283815233602080830182815230848601818152606086018881525f608088018181528b8252600e909652979097209551865591516001860180546001600160a01b03199081166001600160a01b0393841617909155925160028701805490941691161790915593516003840155516004909201805460ff191692151592909217909155611b079184611601565b604080513381523060208201529081018290525f606082015282907fb640004f1d14576d0c209e240cad0410e0d8c0c33a09375861fbadae2588a98d9060800160405180910390a25050565b805480611ba25760405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606401610673565b5f19019055565b816001600160a01b0316836001600160a01b031603611c0a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610673565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c81848484611601565b611c8d84848484611d18565b6110cd5760405162461bcd60e51b8152600401610673906125c3565b6060611cb4826114b7565b5f611cc960408051602081019091525f815290565b90505f815111611ce75760405180602001604052805f815250610e58565b80611cf184611e15565b604051602001611d02929190612447565b6040516020818303038152906040529392505050565b5f6001600160a01b0384163b15611e0a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d5b903390899088908890600401612615565b6020604051808303815f875af1925050508015611d95575060408051601f3d908101601f19168201909252611d9291810190612651565b60015b611df0573d808015611dc2576040519150601f19603f3d011682016040523d82523d5f602084013e611dc7565b606091505b5080515f03611de85760405162461bcd60e51b8152600401610673906125c3565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611460565b506001949350505050565b60605f611e2183611ea5565b60010190505f8167ffffffffffffffff811115611e4057611e40612171565b6040519080825280601f01601f191660200182016040528015611e6a576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611e7457509392505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611ee35772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611f0f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611f2d57662386f26fc10000830492506010015b6305f5e1008310611f45576305f5e100830492506008015b6127108310611f5957612710830492506004015b60648310611f6b576064830492506002015b600a83106105465760010192915050565b6040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915290565b6001600160e01b031981168114611515575f80fd5b5f60208284031215611fce575f80fd5b8135610e5881611fa9565b5f5b83811015611ff3578181015183820152602001611fdb565b50505f910152565b5f8151808452612012816020860160208601611fd9565b601f01601f19169290920160200192915050565b602081525f610e586020830184611ffb565b5f60208284031215612048575f80fd5b5035919050565b80356001600160a01b0381168114612065575f80fd5b919050565b5f806040838503121561207b575f80fd5b6120848361204f565b946020939093013593505050565b805182526020808201516001600160a01b039081169184019190915260408083015190911690830152606080820151908301526080908101511515910152565b602080825282518282018190525f9190848201906040850190845b8181101561211357612100838551612092565b9284019260a092909201916001016120ed565b50909695505050505050565b5f805f60608486031215612131575f80fd5b61213a8461204f565b92506121486020850161204f565b9150604084013590509250925092565b5f60208284031215612168575f80fd5b610e588261204f565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561219f5761219f612171565b604051601f8501601f19908116603f011681019082821181831017156121c7576121c7612171565b816040528093508581528686860111156121df575f80fd5b858560208301375f602087830101525050509392505050565b5f8060408385031215612209575f80fd5b823567ffffffffffffffff81111561221f575f80fd5b8301601f8101851361222f575f80fd5b61223e85823560208401612185565b95602094909401359450505050565b5f806040838503121561225e575f80fd5b50508035926020909101359150565b60a081016105468284612092565b5f806040838503121561228c575f80fd5b6122958361204f565b9150602083013580151581146122a9575f80fd5b809150509250929050565b5f805f80608085870312156122c7575f80fd5b6122d08561204f565b93506122de6020860161204f565b925060408501359150606085013567ffffffffffffffff811115612300575f80fd5b8501601f81018713612310575f80fd5b61231f87823560208401612185565b91505092959194509250565b5f806040838503121561233c575f80fd5b6123458361204f565b91506123536020840161204f565b90509250929050565b600181811c9082168061237057607f821691505b60208210810361238e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561054657610546612394565b8082018082111561054657610546612394565b634e487b7160e01b5f52603260045260245ffd5b5f600182016123f3576123f3612394565b5060010190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b5f8351612458818460208801611fd9565b83519083019061246c818360208801611fd9565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b601f821115610714575f81815260208120601f850160051c810160208610156124e05750805b601f850160051c820191505b818110156124ff578281556001016124ec565b505050505050565b815167ffffffffffffffff81111561252157612521612171565b6125358161252f845461235c565b846124ba565b602080601f831160018114612568575f84156125515750858301515b5f19600386901b1c1916600185901b1785556124ff565b5f85815260208120601f198616915b8281101561259657888601518255948401946001909101908401612577565b50858210156125b357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061264790830184611ffb565b9695505050505050565b5f60208284031215612661575f80fd5b8151610e5881611fa956fea26469706673582212209a79285c4326aaf2f521ca464b3a567b0b877dc4c040b471eb7a7f25dee3181864736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d486f6d65546f6b656e204e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000548544e4654000000000000000000000000000000000000000000000000000000