608060405234801562000010575f80fd5b5060405162001ab938038062001ab9833981016040819052620000339162000148565b336040518060400160405280600a81526020016942696c6c626f6172647360b01b81525060405180604001604052806009815260200168109253131093d0549160ba1b815250815f908162000089919062000200565b50600162000098828262000200565b5050506001600160a01b038116620000c957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d481620000f7565b50335f908152600b60205260409020805460ff19166001179055600755620002c8565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6020828403121562000159575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200018957607f821691505b602082108103620001a857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001fb575f81815260208120601f850160051c81016020861015620001d65750805b601f850160051c820191505b81811015620001f757828155600101620001e2565b5050505b505050565b81516001600160401b038111156200021c576200021c62000160565b62000234816200022d845462000174565b84620001ae565b602080601f8311600181146200026a575f8415620002525750858301515b5f19600386901b1c1916600185901b178555620001f7565b5f85815260208120601f198616915b828110156200029a5788860151825594840194600190910190840162000279565b5085821015620002b857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6117e380620002d65f395ff3fe608060405234801561000f575f80fd5b50600436106101d1575f3560e01c8063715018a6116100fe578063c87b56dd1161009e578063e83157421161006e578063e8315742146103de578063e985e9c5146103e7578063f2fde38b14610422578063ffef89c314610435575f80fd5b8063c87b56dd14610392578063d04ef285146103a5578063d4a01b02146103b8578063d8952a49146103cb575f80fd5b806398bdf6f5116100d957806398bdf6f514610350578063a22cb46514610359578063ac885c991461036c578063b88d4fde1461037f575f80fd5b8063715018a61461032f5780638da5cb5b1461033757806395d89b4114610348575f80fd5b80631e7269c51161017457806342842e0e1161014457806342842e0e146102d55780634b0bddd2146102e85780636352211e146102fb57806370a082311461030e575f80fd5b80631e7269c51461028057806321860a05146102a257806323b872dd146102b557806331f9c919146102c8575f80fd5b8063095ea7b3116101af578063095ea7b31461023d57806311e776fe146102525780631249c58b146102655780631be6dd641461026d575f80fd5b806301ffc9a7146101d557806306fdde03146101fd578063081812fc14610212575b5f80fd5b6101e86101e336600461138b565b610448565b60405190151581526020015b60405180910390f35b61020561052c565b6040516101f491906113fa565b61022561022036600461140c565b6105bb565b6040516001600160a01b0390911681526020016101f4565b61025061024b36600461143e565b6105e2565b005b61025061026036600461140c565b6105f1565b610250610625565b600c54610225906001600160a01b031681565b6101e861028e366004611466565b600a6020525f908152604090205460ff1681565b6102506102b0366004611466565b6106ce565b6102506102c336600461147f565b610709565b6009546101e89060ff1681565b6102506102e336600461147f565b6107b0565b6102506102f63660046114c7565b6107cf565b61022561030936600461140c565b610801565b61032161031c366004611466565b61080b565b6040519081526020016101f4565b610250610869565b6006546001600160a01b0316610225565b61020561087c565b61032160085481565b6102506103673660046114c7565b61088b565b61032161037a36600461140c565b610896565b61025061038d366004611564565b61091a565b6102056103a036600461140c565b610931565b6102506103b3366004611608565b6109c3565b6102506103c6366004611621565b610a05565b6102506103d936600461164a565b610af1565b61032160075481565b6101e86103f536600461164a565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b610250610430366004611466565b610b34565b600d54610225906001600160a01b031681565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104da57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061052657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60605f805461053a90611672565b80601f016020809104026020016040519081016040528092919081815260200182805461056690611672565b80156105b15780601f10610588576101008083540402835291602001916105b1565b820191905f5260205f20905b81548152906001019060200180831161059457829003601f168201915b5050505050905090565b5f6105c582610b87565b505f828152600460205260409020546001600160a01b0316610526565b6105ed828233610bd8565b5050565b335f908152600b602052604090205460ff166106205760405163e477624360e01b815260040160405180910390fd5b600755565b60095460ff16610661576040517fcd967e3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600a602052604090205460ff16156106aa576040517ff5f915f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b333610be5565b335f908152600a60205260409020805460ff19166001179055565b335f908152600b602052604090205460ff166106fd5760405163e477624360e01b815260040160405180910390fd5b61070681610be5565b50565b6001600160a01b03821661073757604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610743838333610cc0565b9050836001600160a01b0316816001600160a01b0316146107aa576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b038086166004830152602482018490528216604482015260640161072e565b50505050565b6107ca83838360405180602001604052805f81525061091a565b505050565b6107d7610dbf565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f61052682610b87565b5f6001600160a01b03821661084e576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f600482015260240161072e565b506001600160a01b03165f9081526003602052604090205490565b610871610dbf565b61087a5f610e05565b565b60606001805461053a90611672565b6105ed338383610e63565b600c546040517f1b0c5c8b000000000000000000000000000000000000000000000000000000008152600481018390525f916001600160a01b031690631b0c5c8b90602401602060405180830381865afa1580156108f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061052691906116aa565b610925848484610709565b6107aa84848484610f1a565b606061093c82610b87565b50600d546040517f3bb3a24d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690633bb3a24d906024015f60405180830381865afa15801561099c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261052691908101906116c1565b335f908152600b602052604090205460ff166109f25760405163e477624360e01b815260040160405180910390fd5b6009805460ff1916911515919091179055565b610a0e83610b87565b50610a1882610b87565b50610a2283610801565b6001600160a01b0316336001600160a01b031614610a6c576040517fb23b68b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c546040517fd4a01b020000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604481018390526001600160a01b039091169063d4a01b02906064015f604051808303815f87803b158015610ad6575f80fd5b505af1158015610ae8573d5f803e3d5ffd5b50505050505050565b610af9610dbf565b600c80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600d8054929093169116179055565b610b3c610dbf565b6001600160a01b038116610b7e576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f600482015260240161072e565b61070681610e05565b5f818152600260205260408120546001600160a01b031680610526576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810184905260240161072e565b6107ca8383836001611083565b60075460085410610c22576040517f4db085a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8154610c3090611733565b90915550600854610c429082906111cb565b600c546008546040517f09135dc60000000000000000000000000000000000000000000000000000000081526001600160a01b03909216916309135dc691610c909160040190815260200190565b5f604051808303815f87803b158015610ca7575f80fd5b505af1158015610cb9573d5f803e3d5ffd5b5050505050565b5f828152600260205260408120546001600160a01b0390811690831615610cec57610cec818486611245565b6001600160a01b03811615610d2657610d075f855f80611083565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610d54576001600160a01b0385165f908152600360205260409020805460010190555b5f84815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6006546001600160a01b0316331461087a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161072e565b600680546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610eae576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161072e565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156107aa576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a0290610f75903390889087908790600401611757565b6020604051808303815f875af1925050508015610faf575060408051601f3d908101601f19168201909252610fac91810190611792565b60015b611016573d808015610fdc576040519150601f19603f3d011682016040523d82523d5f602084013e610fe1565b606091505b5080515f0361100e57604051633250574960e11b81526001600160a01b038516600482015260240161072e565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014610cb957604051633250574960e11b81526001600160a01b038516600482015260240161072e565b808061109757506001600160a01b03821615155b1561118f575f6110a684610b87565b90506001600160a01b038316158015906110d25750826001600160a01b0316816001600160a01b031614155b801561110357506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b15611145576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161072e565b811561118d5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b0382166111f457604051633250574960e11b81525f600482015260240161072e565b5f61120083835f610cc0565b90506001600160a01b038116156107ca576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f600482015260240161072e565b6112508383836112db565b6107ca576001600160a01b038316611297576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810182905260240161072e565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024810182905260440161072e565b5f6001600160a01b038316158015906113565750826001600160a01b0316846001600160a01b0316148061133357506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b8061135657505f828152600460205260409020546001600160a01b038481169116145b949350505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610706575f80fd5b5f6020828403121561139b575f80fd5b81356113a68161135e565b9392505050565b5f5b838110156113c75781810151838201526020016113af565b50505f910152565b5f81518084526113e68160208601602086016113ad565b601f01601f19169290920160200192915050565b602081525f6113a660208301846113cf565b5f6020828403121561141c575f80fd5b5035919050565b80356001600160a01b0381168114611439575f80fd5b919050565b5f806040838503121561144f575f80fd5b61145883611423565b946020939093013593505050565b5f60208284031215611476575f80fd5b6113a682611423565b5f805f60608486031215611491575f80fd5b61149a84611423565b92506114a860208501611423565b9150604084013590509250925092565b80358015158114611439575f80fd5b5f80604083850312156114d8575f80fd5b6114e183611423565b91506114ef602084016114b8565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611535576115356114f8565b604052919050565b5f67ffffffffffffffff821115611556576115566114f8565b50601f01601f191660200190565b5f805f8060808587031215611577575f80fd5b61158085611423565b935061158e60208601611423565b925060408501359150606085013567ffffffffffffffff8111156115b0575f80fd5b8501601f810187136115c0575f80fd5b80356115d36115ce8261153d565b61150c565b8181528860208385010111156115e7575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f60208284031215611618575f80fd5b6113a6826114b8565b5f805f60608486031215611633575f80fd5b505081359360208301359350604090920135919050565b5f806040838503121561165b575f80fd5b61166483611423565b91506114ef60208401611423565b600181811c9082168061168657607f821691505b6020821081036116a457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156116ba575f80fd5b5051919050565b5f602082840312156116d1575f80fd5b815167ffffffffffffffff8111156116e7575f80fd5b8201601f810184136116f7575f80fd5b80516117056115ce8261153d565b818152856020838501011115611719575f80fd5b61172a8260208301602086016113ad565b95945050505050565b5f5f19820361175057634e487b7160e01b5f52601160045260245ffd5b5060010190565b5f6001600160a01b0380871683528086166020840152508360408301526080606083015261178860808301846113cf565b9695505050505050565b5f602082840312156117a2575f80fd5b81516113a68161135e56fea2646970667358221220e50ce21320d8f03937e38b10de60a624913237d20154e5152f8b73aa6e734ec564736f6c634300081500330000000000000000000000000000000000000000000000000000000000002710