60806040526008805460ff60a01b1916600160a01b1790553480156200002457600080fd5b506040518060400160405280600981526020016814dd591bd4dc5d5a5960ba1b8152506040518060400160405280600981526020016814d55113d4d455525160ba1b81525081600290805190602001906200008192919062000163565b5080516200009790600390602084019062000163565b50506000805550620000a93362000111565b60405180608001604052806042815260200162001ca8604291398051620000d991600a9160209091019062000163565b5060405180608001604052806043815260200162001c656043913980516200010a9160099160209091019062000163565b5062000246565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001719062000209565b90600052602060002090601f016020900481019282620001955760008555620001e0565b82601f10620001b057805160ff1916838001178555620001e0565b82800160010185558215620001e0579182015b82811115620001e0578251825591602001919060010190620001c3565b50620001ee929150620001f2565b5090565b5b80821115620001ee5760008155600101620001f3565b600181811c908216806200021e57607f821691505b602082108114156200024057634e487b7160e01b600052602260045260246000fd5b50919050565b611a0f80620002566000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80637e5cd5c1116100f9578063ba7e60bd11610097578063e56b1c6811610071578063e56b1c6814610378578063e8a3d4851461038a578063e985e9c514610392578063f2fde38b146103ce57600080fd5b8063ba7e60bd14610340578063c87b56dd14610352578063ccb4807b1461036557600080fd5b806395d89b41116100d357806395d89b41146102ff578063a0eba25f14610307578063a22cb4651461031a578063b88d4fde1461032d57600080fd5b80637e5cd5c1146102d35780638980f11f146102db5780638da5cb5b146102ee57600080fd5b80632b96980c1161016657806355f804b31161014057806355f804b3146102925780636352211e146102a557806370a08231146102b8578063715018a6146102cb57600080fd5b80632b96980c146102645780633ccfd60b1461027757806342842e0e1461027f57600080fd5b8063095ea7b311610197578063095ea7b31461022657806318160ddd1461023b57806323b872dd1461025157600080fd5b806301ffc9a7146101be57806306fdde03146101e6578063081812fc146101fb575b600080fd5b6101d16101cc366004611594565b6103e1565b60405190151581526020015b60405180910390f35b6101ee61047e565b6040516101dd9190611609565b61020e61020936600461161c565b610510565b6040516001600160a01b0390911681526020016101dd565b610239610234366004611651565b61056d565b005b600154600054035b6040519081526020016101dd565b61023961025f36600461167b565b61063c565b6102396102723660046116c5565b610819565b6102396108b1565b61023961028d36600461167b565b610947565b6102396102a036600461176e565b610967565b61020e6102b336600461161c565b6109d8565b6102436102c63660046117b7565b6109e3565b610239610a4b565b610239610ab1565b6102396102e9366004611651565b610b35565b6008546001600160a01b031661020e565b6101ee610c30565b610239610315366004611651565b610c3f565b6102396103283660046117d2565b610d22565b61023961033b366004611809565b610dda565b600854600160a81b900460ff166101d1565b6101ee61036036600461161c565b610e24565b61023961037336600461176e565b610ee4565b600854600160a01b900460ff166101d1565b6101ee610f51565b6101d16103a0366004611885565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102396103dc3660046117b7565b610f60565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061044457507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061047857507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b60606002805461048d906118b8565b80601f01602080910402602001604051908101604052809291908181526020018280546104b9906118b8565b80156105065780601f106104db57610100808354040283529160200191610506565b820191906000526020600020905b8154815290600101906020018083116104e957829003601f168201915b5050505050905090565b600061051b8261103f565b610551576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610578826109d8565b9050336001600160a01b038216146105ca5761059481336103a0565b6105ca576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d383611066565b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061064782611112565b9050836001600160a01b0316816001600160a01b031614610694576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b038816909114176106fa576106c486336103a0565b6106fa576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661073a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801561074557600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b83166107d057600184016000818152600460205260409020546107ce5760005481146107ce5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b6008546001600160a01b031633146108785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60088054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6008546001600160a01b0316331461090b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610944573d6000803e3d6000fd5b50565b61096283838360405180602001604052806000815250610dda565b505050565b6008546001600160a01b031633146109c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b80516109d49060099060208401906114e5565b5050565b600061047882611112565b60006001600160a01b038216610a25576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610aa55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b610aaf600061118c565b565b6008546001600160a01b03163314610b0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6008546001600160a01b03163314610b8f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b816001600160a01b031663a9059cbb610bb06008546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610bf857600080fd5b505af1158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096291906118f3565b60606003805461048d906118b8565b6008546001600160a01b03163314610c995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b600854600160a01b900460ff16610d185760405162461bcd60e51b815260206004820152602560248201527f4d696e74696e6720686173206265656e2064697361626c6564207065726d616e60448201527f656e746c79000000000000000000000000000000000000000000000000000000606482015260840161086f565b6109d482826111eb565b6001600160a01b038216331415610d65576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6e82611066565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610de584848461063c565b6001600160a01b0383163b15610e1e57610e0184848484611205565b610e1e576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610e2f8261103f565b610e65576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e6f6112fd565b905080610e7b8461130c565b604051602001610e8c929190611910565b6040516020818303038152906040529050805160001415610ebc5760405180602001604052806000815250610edd565b80604051602001610ecd919061193f565b6040516020818303038152906040525b9392505050565b6008546001600160a01b03163314610f3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b80516109d490600a9060208401906114e5565b6060600a805461048d906118b8565b6008546001600160a01b03163314610fba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b6001600160a01b0381166110365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161086f565b6109448161118c565b6000805482108015610478575050600090815260046020526040902054600160e01b161590565b600854600160a81b900460ff16801561109c57506001600160a01b038116732b2e8cda09bba9660dca5cb6233787738ad6832914155b80156110c557506001600160a01b03811673b16c1342e617a5b6e4b631eb114483fdb289c0a414155b156109445760405162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207377617070656420766961205375646f73776170604482015260640161086f565b60008160005481101561115a57600081815260046020526040902054600160e01b8116611158575b80610edd57506000190160008181526004602052604090205461113a565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109d482826040518060200160405280600081525061134e565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061123a903390899088908890600401611980565b602060405180830381600087803b15801561125457600080fd5b505af1925050508015611284575060408051601f3d908101601f19168201909252611281918101906119bc565b60015b6112df573d8080156112b2576040519150601f19603f3d011682016040523d82523d6000602084013e6112b7565b606091505b5080516112d7576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60606009805461048d906118b8565b604080516080019081905280825b600183039250600a81066030018353600a9004806113375761133c565b61131a565b50819003601f19909101908152919050565b61135883836113bb565b6001600160a01b0383163b15610962576000548281035b6113826000868380600101945086611205565b61139f576040516368d2bf6b60e11b815260040160405180910390fd5b81811061136f5781600054146113b457600080fd5b5050505050565b600054816113f5576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146114a457808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161146c565b50816114dc576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b8280546114f1906118b8565b90600052602060002090601f0160209004810192826115135760008555611559565b82601f1061152c57805160ff1916838001178555611559565b82800160010185558215611559579182015b8281111561155957825182559160200191906001019061153e565b50611565929150611569565b5090565b5b80821115611565576000815560010161156a565b6001600160e01b03198116811461094457600080fd5b6000602082840312156115a657600080fd5b8135610edd8161157e565b60005b838110156115cc5781810151838201526020016115b4565b83811115610e1e5750506000910152565b600081518084526115f58160208601602086016115b1565b601f01601f19169290920160200192915050565b602081526000610edd60208301846115dd565b60006020828403121561162e57600080fd5b5035919050565b80356001600160a01b038116811461164c57600080fd5b919050565b6000806040838503121561166457600080fd5b61166d83611635565b946020939093013593505050565b60008060006060848603121561169057600080fd5b61169984611635565b92506116a760208501611635565b9150604084013590509250925092565b801515811461094457600080fd5b6000602082840312156116d757600080fd5b8135610edd816116b7565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611713576117136116e2565b604051601f8501601f19908116603f0116810190828211818310171561173b5761173b6116e2565b8160405280935085815286868601111561175457600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561178057600080fd5b813567ffffffffffffffff81111561179757600080fd5b8201601f810184136117a857600080fd5b6112f5848235602084016116f8565b6000602082840312156117c957600080fd5b610edd82611635565b600080604083850312156117e557600080fd5b6117ee83611635565b915060208301356117fe816116b7565b809150509250929050565b6000806000806080858703121561181f57600080fd5b61182885611635565b935061183660208601611635565b925060408501359150606085013567ffffffffffffffff81111561185957600080fd5b8501601f8101871361186a57600080fd5b611879878235602084016116f8565b91505092959194509250565b6000806040838503121561189857600080fd5b6118a183611635565b91506118af60208401611635565b90509250929050565b600181811c908216806118cc57607f821691505b602082108114156118ed57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561190557600080fd5b8151610edd816116b7565b600083516119228184602088016115b1565b8351908301906119368183602088016115b1565b01949350505050565b600082516119518184602087016115b1565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000920191825250600501919050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526119b260808301846115dd565b9695505050505050565b6000602082840312156119ce57600080fd5b8151610edd8161157e56fea264697066735822122095387e6c693708c7ffefb3a6c0335b62d57c9d82bc4bbbca539f48383c08dccc64736f6c63430008090033697066733a2f2f626166796265696666763571366f6478366f7979357736686833616472677978663534633732736d623669667870716e616d6362657874647879692f697066733a2f2f6261666b72656961736e783761737a76716f766c63637734616a6a34366a6d7173346b796778777036326764377634766163783762706d337a6469