0x608060405234801561001057600080fd5b50604051611c52380380611c5283398101604081905261002f9161014a565b338061005657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61005f816100fa565b50600180556002805460ff191690556001600160a01b0381166100c45760405162461bcd60e51b815260206004820152601c60248201527f536179474d3a20496e76616c69642066656520726563697069656e7400000000604482015260640161004d565b600980546001600160a01b0319166001600160a01b0392909216919091179055651a6016b2d000600a5562015180600b5561017a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561015c57600080fd5b81516001600160a01b038116811461017357600080fd5b9392505050565b611ac9806101896000396000f3fe60806040526004361061016a5760003560e01c80638cb09282116100d1578063db8771421161008a578063e2889c8211610064578063e2889c82146104af578063e74b981b146104cf578063ecb77269146104ef578063f2fde38b1461050557600080fd5b8063db87714214610440578063de75aa6c14610455578063de96303b1461048257600080fd5b80638cb092821461037c5780638da5cb5b1461038f578063b2d1573f146103ad578063ba92abc0146103cd578063bf368399146103e0578063c08d1fe51461042a57600080fd5b80635c975abb116101235780635c975abb146102c2578063615479f3146102e5578063715018a61461031257806381eddd51146103275780638456cb59146103545780638b7afe2e1461036957600080fd5b80632bd02938146101d15780633f4ba83a146101f35780634690484014610208578063476343ee146102455780634e43603a1461025a5780635c45f7391461028757600080fd5b366101cc5760405162461bcd60e51b815260206004820152602760248201527f536179474d3a2044697265637420455448207472616e7366657273206e6f7420604482015266185b1b1bddd95960ca1b60648201526084015b60405180910390fd5b600080fd5b3480156101dd57600080fd5b506101f16101ec366004611794565b610525565b005b3480156101ff57600080fd5b506101f161056e565b34801561021457600080fd5b50600954610228906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561025157600080fd5b506101f1610580565b34801561026657600080fd5b5061027a6102753660046117c9565b610640565b60405161023c91906117eb565b34801561029357600080fd5b506102b46102a23660046117c9565b60066020526000908152604090205481565b60405190815260200161023c565b3480156102ce57600080fd5b5060025460ff16604051901515815260200161023c565b3480156102f157600080fd5b506102b46103003660046117c9565b60036020526000908152604090205481565b34801561031e57600080fd5b506101f16106c2565b34801561033357600080fd5b506102b46103423660046117c9565b60046020526000908152604090205481565b34801561036057600080fd5b506101f16106d4565b34801561037557600080fd5b50476102b4565b6101f161038a366004611868565b6106e4565b34801561039b57600080fd5b506000546001600160a01b0316610228565b3480156103b957600080fd5b506102b46103c83660046117c9565b610795565b6101f16103db3660046118aa565b610801565b3480156103ec57600080fd5b506104006103fb366004611794565b610914565b604080516001600160a01b039095168552602085019390935291830152606082015260800161023c565b34801561043657600080fd5b506102b4600b5481565b34801561044c57600080fd5b506102b4606481565b34801561046157600080fd5b50610475610470366004611794565b610958565b60405161023c91906118fd565b34801561048e57600080fd5b506102b461049d3660046117c9565b60056020526000908152604090205481565b3480156104bb57600080fd5b506101f16104ca366004611794565b610ae2565b3480156104db57600080fd5b506101f16104ea3660046117c9565b610b8c565b3480156104fb57600080fd5b506102b4600a5481565b34801561051157600080fd5b506101f16105203660046117c9565b610c46565b61052d610c84565b600a5460408051918252602082018390527f02a51b3dbb137f00eb6143dee908eae83016eb603ab97494829039664873701f910160405180910390a1600a55565b610576610c84565b61057e610cb1565b565b610588610c84565b610590610d03565b47806105de5760405162461bcd60e51b815260206004820152601a60248201527f536179474d3a204e6f206665657320746f20776974686472617700000000000060448201526064016101c3565b6009546105f4906001600160a01b031682610d5c565b6009546040518281526001600160a01b03909116907fc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a9060200160405180910390a25061057e60018055565b610674604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b50604080516080810182526001600160a01b03909216808352600081815260066020908152838220548186015282825260058152838220548585015291815260049091522054606082015290565b6106ca610c84565b61057e6000610df2565b6106dc610c84565b61057e610e42565b6106ec610d03565b6106f4610e7f565b600a5434146107405760405162461bcd60e51b8152602060048201526018602482015277536179474d3a20496e636f7272656374204554482066656560401b60448201526064016101c3565b600b543360009081526003602052604090205461075d9190611988565b42101561077c5760405162461bcd60e51b81526004016101c39061199b565b61078833338484610ec5565b61079160018055565b5050565b6001600160a01b038116600090815260086020526040812054806107fb5760405162461bcd60e51b815260206004820152601e60248201527f536179474d3a2055736572206e6f7420696e206c6561646572626f617264000060448201526064016101c3565b92915050565b610809610d03565b610811610e7f565b600a54341461085d5760405162461bcd60e51b8152602060048201526018602482015277536179474d3a20496e636f7272656374204554482066656560401b60448201526064016101c3565b6001600160a01b0383166108be5760405162461bcd60e51b815260206004820152602260248201527f536179474d3a2043616e6e6f742073656e6420746f207a65726f206164647265604482015261737360f01b60648201526084016101c3565b600b54336000908152600360205260409020546108db9190611988565b4210156108fa5760405162461bcd60e51b81526004016101c39061199b565b61090633848484610ec5565b61090f60018055565b505050565b6007818154811061092457600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b606060008211801561096c57506007548211155b6109c95760405162461bcd60e51b815260206004820152602860248201527f536179474d3a20496e76616c6964206e756d626572206f662075736572732072604482015267195c5d595cdd195960c21b60648201526084016101c3565b60008267ffffffffffffffff8111156109e4576109e46119e0565b604051908082528060200260200182016040528015610a4957816020015b610a36604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081610a025790505b50905060005b83811015610adb5760078181548110610a6a57610a6a6119f6565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460608201528251839083908110610ac857610ac86119f6565b6020908102919091010152600101610a4f565b5092915050565b610aea610c84565b60008111610b4b5760405162461bcd60e51b815260206004820152602860248201527f536179474d3a2054696d65206c696d6974206d75737420626520677265617465604482015267072207468616e20360c41b60648201526084016101c3565b600b5460408051918252602082018390527ff80d1fa1cd2e7958f8bb480c27f4517d14d8986cb81f9095b5a6857c50074a7d910160405180910390a1600b55565b610b94610c84565b6001600160a01b038116610bea5760405162461bcd60e51b815260206004820152601c60248201527f536179474d3a20496e76616c69642066656520726563697069656e740000000060448201526064016101c3565b6009546040516001600160a01b038084169216907faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d390600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b610c4e610c84565b6001600160a01b038116610c7857604051631e4fbdf760e01b8152600060048201526024016101c3565b610c8181610df2565b50565b6000546001600160a01b0316331461057e5760405163118cdaa760e01b81523360048201526024016101c3565b610cb9610f62565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600260015403610d555760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c3565b6002600155565b80471015610d865760405163cf47918160e01b8152476004820152602481018290526044016101c3565b600080836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610dd4576040519150601f19603f3d011682016040523d82523d6000602084013e610dd9565b606091505b509150915081610dec57610dec81610fab565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610e4a610e7f565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ce63390565b60025460ff161561057e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016101c3565b6001600160a01b038416600090815260036020526040902054610ee88582610fd4565b6001600160a01b0385166000908152600360205260409020429055610f0c85611191565b836001600160a01b0316856001600160a01b03167fda043fce173fd83244f0723bbbc82f9aeef5e97a6c77bb3499fec346b0ae995c858542604051610f5393929190611a0c565b60405180910390a35050505050565b60025460ff1661057e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016101c3565b805115610fbb5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6001600160a01b038216600090815260046020526040812054429103611023576001600160a01b0383166000908152600660209081526040808320600190819055600590925290912055611116565b6000620151806110338484611a45565b61103d9190611a58565b9050600181116110f7576001600160a01b038416600090815260066020526040812080549161106b83611a7a565b90915550506001600160a01b03841660009081526005602090815260408083205460069092529091205411156110f2576001600160a01b0384166000818152600660209081526040808320546005835292819020839055519182527f3c7b1cf05069f10d513817704790c65638faad0a06049e7fa5e2e90e0ad3819f910160405180910390a25b611114565b6001600160a01b0384166000908152600660205260409020600190555b505b6001600160a01b038316600090815260046020526040812080549161113a83611a7a565b90915550506001600160a01b0383166000818152600660209081526040918290205491519182527f46f6fe577ecfefe55b0f14f0b42ddb4c22db1fb9bade43aa02c5ef4e5439512e910160405180910390a2505050565b604080516080810182526001600160a01b03831680825260008181526006602090815284822054818501528282526005815284822054848601528282526004815284822054606085015291815260089091529182205490910361140057600754606411156112e95760078054600181018255600082815283517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600490930292830180546001600160a01b0319166001600160a01b039283161790556020808601517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6898501556040808701517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a86015560608701517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b9095019490945593549086168252600890935220556112e46114e6565b611495565b600780546112f990600190611a45565b81548110611309576113096119f6565b906000526020600020906004020160010154816020015111156112e457600780546000919061133a90600190611a45565b8154811061134a5761134a6119f6565b6000918252602090912060049091020154600780546001600160a01b039092169250839161137a90600190611a45565b8154811061138a5761138a6119f6565b6000918252602080832084516004939093020180546001600160a01b0319166001600160a01b0393841617815584820151600182015560408086015160028301556060909501516003909101558482168352600890528282208290556007549086168252919020556113fa6114e6565b50611495565b6001600160a01b03821660009081526008602052604081205461142590600190611a45565b9050816007828154811061143b5761143b6119f6565b600091825260209182902083516004929092020180546001600160a01b0319166001600160a01b03909216919091178155908201516001820155604082015160028201556060909101516003909101556114936114e6565b505b6001600160a01b0382166000818152600860209081526040918290205491519182527f24e225604268d6416871b32db1be8e49f497caf8360393b31d71a34a4ce26693910160405180910390a25050565b60075460005b6114f7600183611a45565b8110156107915760005b600161150d8385611a45565b6115179190611a45565b81101561178b57600761152b826001611988565b8154811061153b5761153b6119f6565b90600052602060002090600402016001015460078281548110611560576115606119f6565b90600052602060002090600402016001015410156117835760006007828154811061158d5761158d6119f6565b600091825260209182902060408051608081018252600490930290910180546001600160a01b031683526001808201549484019490945260028101549183019190915260030154606082015291506007906115e9908490611988565b815481106115f9576115f96119f6565b90600052602060002090600402016007838154811061161a5761161a6119f6565b60009182526020909120825460049092020180546001600160a01b0319166001600160a01b0390921691909117815560018083015481830155600280840154908301556003928301549290910191909155819060079061167b908590611988565b8154811061168b5761168b6119f6565b600091825260209182902083516004929092020180546001600160a01b0319166001600160a01b0390921691909117815590820151600180830191909155604083015160028301556060909201516003909101556116ea908390611988565b6008600060078581548110611701576117016119f6565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001902055611736826002611988565b600860006007611747866001611988565b81548110611757576117576119f6565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001902055505b600101611501565b506001016114ec565b6000602082840312156117a657600080fd5b5035919050565b80356001600160a01b03811681146117c457600080fd5b919050565b6000602082840312156117db57600080fd5b6117e4826117ad565b9392505050565b81516001600160a01b03168152602080830151908201526040808301519082015260608083015190820152608081016107fb565b60008083601f84011261183157600080fd5b50813567ffffffffffffffff81111561184957600080fd5b60208301915083602082850101111561186157600080fd5b9250929050565b6000806020838503121561187b57600080fd5b823567ffffffffffffffff81111561189257600080fd5b61189e8582860161181f565b90969095509350505050565b6000806000604084860312156118bf57600080fd5b6118c8846117ad565b9250602084013567ffffffffffffffff8111156118e457600080fd5b6118f08682870161181f565b9497909650939450505050565b602080825282518282018190526000918401906040840190835b818110156119675761195183855180516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6020939093019260809290920191600101611917565b509095945050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107fb576107fb611972565b60208082526025908201527f536179474d3a2057616974206265666f72652073656e64696e6720616e6f7468604082015264657220474d60d81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b818103818111156107fb576107fb611972565b600082611a7557634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611a8c57611a8c611972565b506001019056fea2646970667358221220f26241eabc855e4b3276772d675f43e0e5c7d3b5d2d450e7de82ab4ed1aab56064736f6c634300081a003300000000000000000000000038cb0184b802629c8a93235cc6c058f5a6cc8f84