60806040526107d0600a553480156200001757600080fd5b50604051806040016040528060128152602001714e656b6b696420416363657373205061737360701b81525060405180604001604052806006815260200165139152d2d25160d21b8152506200007c62000076620000ba60201b60201c565b620000be565b8151620000919060039060208501906200010e565b508051620000a79060049060208401906200010e565b50506000600190815560095550620001f0565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200011c90620001b4565b90600052602060002090601f0160209004810192826200014057600085556200018b565b82601f106200015b57805160ff19168380011785556200018b565b828001600101855582156200018b579182015b828111156200018b5782518255916020019190600101906200016e565b50620001999291506200019d565b5090565b5b808211156200019957600081556001016200019e565b600181811c90821680620001c957607f821691505b602082108103620001ea57634e487b7160e01b600052602260045260246000fd5b50919050565b612a6380620002006000396000f3fe60806040526004361061025c5760003560e01c806370a0823111610144578063a22cb465116100b6578063cb91d8b31161007a578063cb91d8b3146107b2578063d8929c8b146107c5578063dc33e681146107e5578063e0e3f5ef14610805578063e985e9c514610832578063f2fde38b1461087b57600080fd5b8063a22cb4651461071d578063ac4460021461073d578063b88d4fde14610752578063bb3f683314610772578063c87b56dd1461079257600080fd5b80638da5cb5b116101085780638da5cb5b146105c957806390028083146105e757806390aa0b0f146106075780639231ab2a1461069257806395d89b41146106e85780639da1a34d146106fd57600080fd5b806370a08231146105215780637138f80d14610541578063715018a61461056e57806371d782d014610583578063899e6003146105b357600080fd5b80632bf59ba5116101dd57806355f804b3116101a157806355f804b31461046157806359cd09bb146104815780635fd84c28146104a15780636352211e146104c157806368010d6e146104e15780636f8b44b01461050157600080fd5b80632bf59ba5146103c85780633b438ad1146103db578063422030ba1461040b57806342842e0e1461042b57806352c4cbaf1461044b57600080fd5b8063101f027911610224578063101f027914610332578063163e1e611461035257806318160ddd1461037257806322c3f7af1461039557806323b872dd146103a857600080fd5b806301ffc9a71461026157806306fdde0314610296578063081812fc146102b8578063095ea7b3146102f05780630c29dbae14610312575b600080fd5b34801561026d57600080fd5b5061028161027c3660046122d5565b61089b565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102ab6108ed565b60405161028d919061234a565b3480156102c457600080fd5b506102d86102d336600461235d565b61097f565b6040516001600160a01b03909116815260200161028d565b3480156102fc57600080fd5b5061031061030b366004612392565b6109c3565b005b34801561031e57600080fd5b5061031061032d3660046123d3565b610a50565b34801561033e57600080fd5b5061031061034d3660046123d3565b610ab0565b34801561035e57600080fd5b5061031061036d366004612439565b610b07565b34801561037e57600080fd5b50600254600154035b60405190815260200161028d565b6103106103a336600461247a565b610bd3565b3480156103b457600080fd5b506103106103c33660046124c5565b610dc5565b6103106103d636600461247a565b610dd0565b3480156103e757600080fd5b506102816103f6366004612501565b600d6020526000908152604090205460ff1681565b34801561041757600080fd5b5061028161042636600461251c565b610f63565b34801561043757600080fd5b506103106104463660046124c5565b610f87565b34801561045757600080fd5b50610387600b5481565b34801561046d57600080fd5b5061031061047c366004612548565b610fa2565b34801561048d57600080fd5b5061031061049c3660046125cd565b610fd8565b3480156104ad57600080fd5b506103106104bc366004612621565b6110bc565b3480156104cd57600080fd5b506102d86104dc36600461235d565b611102565b3480156104ed57600080fd5b506103106104fc36600461263c565b611114565b34801561050d57600080fd5b5061031061051c36600461235d565b6111ac565b34801561052d57600080fd5b5061038761053c366004612501565b6111db565b34801561054d57600080fd5b5061038761055c366004612501565b600f6020526000908152604090205481565b34801561057a57600080fd5b50610310611229565b34801561058f57600080fd5b5061028161059e366004612501565b60106020526000908152604090205460ff1681565b3480156105bf57600080fd5b50610387600e5481565b3480156105d557600080fd5b506000546001600160a01b03166102d8565b3480156105f357600080fd5b50610310610602366004612621565b61125f565b34801561061357600080fd5b506011546106579063ffffffff808216916001600160401b036401000000008204811692600160601b8304821692600160a01b810490921691600160e01b90041685565b6040805163ffffffff96871681526001600160401b03958616602082015293851690840152921660608201529116608082015260a00161028d565b34801561069e57600080fd5b506106b26106ad36600461235d565b6112ae565b6040805182516001600160a01b031681526020808401516001600160401b0316908201529181015115159082015260600161028d565b3480156106f457600080fd5b506102ab6112d4565b34801561070957600080fd5b5061031061071836600461235d565b6112e3565b34801561072957600080fd5b50610310610738366004612668565b611312565b34801561074957600080fd5b506103106113a7565b34801561075e57600080fd5b5061031061076d3660046126ba565b6114b7565b34801561077e57600080fd5b5061031061078d3660046123d3565b611508565b34801561079e57600080fd5b506102ab6107ad36600461235d565b611561565b6103106107c0366004612795565b6115e5565b3480156107d157600080fd5b506103106107e036600461235d565b6117fb565b3480156107f157600080fd5b50610387610800366004612501565b61182a565b34801561081157600080fd5b50610387610820366004612501565b600c6020526000908152604090205481565b34801561083e57600080fd5b5061028161084d3660046127b7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561088757600080fd5b50610310610896366004612501565b611835565b60006001600160e01b031982166380ac58cd60e01b14806108cc57506001600160e01b03198216635b5e139f60e01b145b806108e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546108fc906127e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610928906127e1565b80156109755780601f1061094a57610100808354040283529160200191610975565b820191906000526020600020905b81548152906001019060200180831161095857829003601f168201915b5050505050905090565b600061098a826118d0565b6109a7576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b60006109ce82611102565b9050806001600160a01b0316836001600160a01b031603610a025760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a225750610a20813361084d565b155b15610a40576040516367d9dca160e11b815260040160405180910390fd5b610a4b8383836118fc565b505050565b6000546001600160a01b03163314610a835760405162461bcd60e51b8152600401610a7a9061281b565b60405180910390fd5b601180546001600160401b03909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b6000546001600160a01b03163314610ada5760405162461bcd60e51b8152600401610a7a9061281b565b601180546001600160401b03909216600160601b0267ffffffffffffffff60601b19909216919091179055565b6000546001600160a01b03163314610b315760405162461bcd60e51b8152600401610a7a9061281b565b600a5481610b426002546001540390565b610b4c9190612866565b1115610b855760405162461bcd60e51b815260206004820152600860248201526713505617d352539560c21b6044820152606401610a7a565b60005b81811015610a4b57610bc1838383818110610ba557610ba561287e565b9050602002016020810190610bba9190612501565b6001611958565b80610bcb81612894565b915050610b88565b323314610bf25760405162461bcd60e51b8152600401610a7a906128ad565b6040516001600160601b03193360601b166020820152600090603401604051602081830303815290604052805190602001209050610c6784848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600e549150849050611972565b610cab5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21026b2b935b63290283937b7b31760591b6044820152606401610a7a565b601154600160601b90046001600160401b03166000819003610d085760405162461bcd60e51b81526020600482015260166024820152751cd85b19481a185cc81b9bdd08189959dd5b881e595d60521b6044820152606401610a7a565b3360009081526010602052604090205460ff16610d4857336000908152601060209081526040808320805460ff19166001179055600f9091529020600590555b336000908152600f6020526040902054610d745760405162461bcd60e51b8152600401610a7a906128e4565b336000908152600f6020526040902054610d8f908490612930565b336000818152600f6020526040902091909155610dac9084611958565b610dbe610db98483612947565b611988565b5050505050565b610a4b838383611a0f565b323314610def5760405162461bcd60e51b8152600401610a7a906128ad565b6040516001600160601b03193360601b166020820152600090603401604051602081830303815290604052805190602001209050610e6484848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600b549150849050611972565b610ea85760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21026b2b935b63290283937b7b31760591b6044820152606401610a7a565b601154336000908152600d60205260409020546401000000009091046001600160401b03169060ff16610eff57336000908152600d60209081526040808320805460ff19166001908117909155600c909252909120555b336000908152600c6020526040902054610f2b5760405162461bcd60e51b8152600401610a7a906128e4565b336000908152600c6020526040902054610f46908490612930565b336000818152600c6020526040902091909155610dac9084611958565b60008315801590610f7357508215155b8015610f7f5750814210155b949350505050565b610a4b838383604051806020016040528060008152506114b7565b6000546001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610a7a9061281b565b610a4b60128383612226565b6000546001600160a01b031633146110025760405162461bcd60e51b8152600401610a7a9061281b565b6040805160a08101825263ffffffff9283168082526001600160401b0396871660208301819052958716928201839052939095166060860181905260118054600160e01b80820490951660809098018890526001600160601b031916909417640100000000909502949094176fffffffffffffffffffffffffffffffff60601b1916600160601b90910267ffffffffffffffff60a01b191617600160a01b909302929092176001600160e01b031692909102919091179055565b6000546001600160a01b031633146110e65760405162461bcd60e51b8152600401610a7a9061281b565b6011805463ffffffff191663ffffffff92909216919091179055565b600061110d82611c20565b5192915050565b6000546001600160a01b0316331461113e5760405162461bcd60e51b8152600401610a7a9061281b565b600a548261114f6002546001540390565b6111599190612866565b111561119e5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c20737570706c7960601b6044820152606401610a7a565b6111a88183611958565b5050565b6000546001600160a01b031633146111d65760405162461bcd60e51b8152600401610a7a9061281b565b600a55565b60006001600160a01b038216611204576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600660205260409020546001600160401b031690565b6000546001600160a01b031633146112535760405162461bcd60e51b8152600401610a7a9061281b565b61125d6000611d3a565b565b6000546001600160a01b031633146112895760405162461bcd60e51b8152600401610a7a9061281b565b6011805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b60408051606081018252600080825260208201819052918101919091526108e782611c20565b6060600480546108fc906127e1565b6000546001600160a01b0316331461130d5760405162461bcd60e51b8152600401610a7a9061281b565b600e55565b336001600160a01b0383160361133b5760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002600954036113f95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a7a565b600260095547739e4a358854fe92d9bf17af6672503c38c52561d56108fc6064611424846014612947565b61142e919061297c565b6040518115909202916000818181858888f19350505050158015611456573d6000803e3d6000fd5b5073136b152606143f5069e1c9cddf1b023403c8445d6108fc606461147c846050612947565b611486919061297c565b6040518115909202916000818181858888f193505050501580156114ae573d6000803e3d6000fd5b50506001600955565b6114c2848484611a0f565b6001600160a01b0383163b151580156114e457506114e284848484611d8a565b155b15611502576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610a7a9061281b565b601180546001600160401b03909216640100000000026bffffffffffffffff0000000019909216919091179055565b606061156c826118d0565b61158957604051630a14c4b560e41b815260040160405180910390fd5b6000611593611e75565b905080516000036115b357604051806020016040528060008152506115de565b806115bd84611e84565b6040516020016115ce929190612990565b6040516020818303038152906040525b9392505050565b3233146116045760405162461bcd60e51b8152600401610a7a906128ad565b6040805160a08101825260115463ffffffff8082168084526001600160401b03640100000000840481166020860152600160601b8404811695850195909552600160a01b830490941660608401819052600160e01b909204166080830181905291928483146116c35760405162461bcd60e51b815260206004820152602560248201527f63616c6c6564207769746820696e636f7272656374207075626c69632073616c60448201526465206b657960d81b6064820152608401610a7a565b6116ce828483610f63565b61171a5760405162461bcd60e51b815260206004820152601d60248201527f7075626c69632073616c6520686173206e6f7420626567756e207965740000006044820152606401610a7a565b600a548661172b6002546001540390565b6117359190612866565b11156117785760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b6044820152606401610a7a565b6014866117843361182a565b61178e9190612866565b11156117dc5760405162461bcd60e51b815260206004820181905260248201527f746869732077616c6c65742063616e6e6f74206d696e7420616e79206d6f72656044820152606401610a7a565b6117e63387611958565b6117f3610db98784612947565b505050505050565b6000546001600160a01b031633146118255760405162461bcd60e51b8152600401610a7a9061281b565b600b55565b60006108e782611f84565b6000546001600160a01b0316331461185f5760405162461bcd60e51b8152600401610a7a9061281b565b6001600160a01b0381166118c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7a565b6118cd81611d3a565b50565b6000600154821080156108e7575050600090815260056020526040902054600160e01b900460ff161590565b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6111a8828260405180602001604052806000815250611fd9565b60008261197f8584611fe6565b14949350505050565b803410156119d15760405162461bcd60e51b81526020600482015260166024820152752732b2b2103a379039b2b7321036b7b9329022aa241760511b6044820152606401610a7a565b803411156118cd57336108fc6119e78334612930565b6040518115909202916000818181858888f193505050501580156111a8573d6000803e3d6000fd5b6000611a1a82611c20565b80519091506000906001600160a01b0316336001600160a01b03161480611a4857508151611a48903361084d565b80611a63575033611a588461097f565b6001600160a01b0316145b905080611a8357604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614611ab85760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416611adf57604051633a954ecd60e21b815260040160405180910390fd5b611aef60008484600001516118fc565b6001600160a01b038581166000908152600660209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600590945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116611bd957600154811015611bd957825160008281526005602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610dbe565b604080516060810182526000808252602082018190529181019190915281600154811015611d2157600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290611d1f5780516001600160a01b031615611cb6579392505050565b5060001901600081815260056020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611d1a579392505050565b611cb6565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611dbf9033908990889088906004016129bf565b6020604051808303816000875af1925050508015611dfa575060408051601f3d908101601f19168201909252611df7918101906129fc565b60015b611e58573d808015611e28576040519150601f19603f3d011682016040523d82523d6000602084013e611e2d565b606091505b508051600003611e50576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060601280546108fc906127e1565b606081600003611eab5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ed55780611ebf81612894565b9150611ece9050600a8361297c565b9150611eaf565b6000816001600160401b03811115611eef57611eef6126a4565b6040519080825280601f01601f191660200182016040528015611f19576020820181803683370190505b5090505b8415610f7f57611f2e600183612930565b9150611f3b600a86612a19565b611f46906030612866565b60f81b818381518110611f5b57611f5b61287e565b60200101906001600160f81b031916908160001a905350611f7d600a8661297c565b9450611f1d565b60006001600160a01b038216611fad576040516335ebb31960e01b815260040160405180910390fd5b506001600160a01b0316600090815260066020526040902054600160401b90046001600160401b031690565b610a4b838383600161205a565b600081815b84518110156120525760008582815181106120085761200861287e565b6020026020010151905080831161202e576000838152602082905260409020925061203f565b600081815260208490526040902092505b508061204a81612894565b915050611feb565b509392505050565b6001546001600160a01b03851661208357604051622e076360e81b815260040160405180910390fd5b836000036120a45760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260066020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600590925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561215057506001600160a01b0387163b15155b156121d8575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46121a16000888480600101955088611d8a565b6121be576040516368d2bf6b60e11b815260040160405180910390fd5b8082036121565782600154146121d357600080fd5b61221d565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082036121d9575b50600155610dbe565b828054612232906127e1565b90600052602060002090601f016020900481019282612254576000855561229a565b82601f1061226d5782800160ff1982351617855561229a565b8280016001018555821561229a579182015b8281111561229a57823582559160200191906001019061227f565b506122a69291506122aa565b5090565b5b808211156122a657600081556001016122ab565b6001600160e01b0319811681146118cd57600080fd5b6000602082840312156122e757600080fd5b81356115de816122bf565b60005b8381101561230d5781810151838201526020016122f5565b838111156115025750506000910152565b600081518084526123368160208601602086016122f2565b601f01601f19169290920160200192915050565b6020815260006115de602083018461231e565b60006020828403121561236f57600080fd5b5035919050565b80356001600160a01b038116811461238d57600080fd5b919050565b600080604083850312156123a557600080fd5b6123ae83612376565b946020939093013593505050565b80356001600160401b038116811461238d57600080fd5b6000602082840312156123e557600080fd5b6115de826123bc565b60008083601f84011261240057600080fd5b5081356001600160401b0381111561241757600080fd5b6020830191508360208260051b850101111561243257600080fd5b9250929050565b6000806020838503121561244c57600080fd5b82356001600160401b0381111561246257600080fd5b61246e858286016123ee565b90969095509350505050565b60008060006040848603121561248f57600080fd5b83356001600160401b038111156124a557600080fd5b6124b1868287016123ee565b909790965060209590950135949350505050565b6000806000606084860312156124da57600080fd5b6124e384612376565b92506124f160208501612376565b9150604084013590509250925092565b60006020828403121561251357600080fd5b6115de82612376565b60008060006060848603121561253157600080fd5b505081359360208301359350604090920135919050565b6000806020838503121561255b57600080fd5b82356001600160401b038082111561257257600080fd5b818501915085601f83011261258657600080fd5b81358181111561259557600080fd5b8660208285010111156125a757600080fd5b60209290920196919550909350505050565b803563ffffffff8116811461238d57600080fd5b600080600080608085870312156125e357600080fd5b6125ec856123bc565b93506125fa602086016123bc565b9250612608604086016123bc565b9150612616606086016125b9565b905092959194509250565b60006020828403121561263357600080fd5b6115de826125b9565b6000806040838503121561264f57600080fd5b8235915061265f60208401612376565b90509250929050565b6000806040838503121561267b57600080fd5b61268483612376565b91506020830135801515811461269957600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156126d057600080fd5b6126d985612376565b93506126e760208601612376565b92506040850135915060608501356001600160401b038082111561270a57600080fd5b818701915087601f83011261271e57600080fd5b813581811115612730576127306126a4565b604051601f8201601f19908116603f01168101908382118183101715612758576127586126a4565b816040528281528a602084870101111561277157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156127a857600080fd5b50508035926020909101359150565b600080604083850312156127ca57600080fd5b6127d383612376565b915061265f60208401612376565b600181811c908216806127f557607f821691505b60208210810361281557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561287957612879612850565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016128a6576128a6612850565b5060010190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b6020808252602c908201527f4164647265737320616c7265616479206d696e746564206e756d206f6620746f60408201526b1ad95b9cc8185b1b1bddd95960a21b606082015260800190565b60008282101561294257612942612850565b500390565b600081600019048311821515161561296157612961612850565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261298b5761298b612966565b500490565b600083516129a28184602088016122f2565b8351908301906129b68183602088016122f2565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129f29083018461231e565b9695505050505050565b600060208284031215612a0e57600080fd5b81516115de816122bf565b600082612a2857612a28612966565b50069056fea26469706673582212201da58039a1dcb30a2648ae8802e792c5c9586bb810d1c045e45838afee7e204b64736f6c634300080d0033