60806040523480156200001157600080fd5b506040516200231e3803806200231e83398101604081905262000034916200013f565b80604051806060016040528060268152602001620022f86026913960408051808201909152600681526519da10d48cd160d21b602082015260006200007a838262000218565b50600162000089828262000218565b5050506001600160a01b038116620000bb57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000c681620000ed565b50600e80546001600160a01b0319166001600160a01b0392909216919091179055620002e4565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200015257600080fd5b81516001600160a01b03811681146200016a57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019c57607f821691505b602082108103620001bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000213576000816000526020600020601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b0381111562000234576200023462000171565b6200024c8162000245845462000187565b84620001c3565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61200480620002f46000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80636352211e116100de5780639be1751a11610097578063b88d4fde11610071578063b88d4fde1461038c578063c87b56dd1461039f578063e985e9c5146103b2578063f2fde38b146103c557600080fd5b80639be1751a14610322578063a22cb46514610345578063aaee301f1461035857600080fd5b80636352211e146102c857806370a08231146102db578063715018a6146102ee57806374fc41f1146102f65780638da5cb5b1461030957806395d89b411461031a57600080fd5b8063223be59a1161014b57806342842e0e1161012557806342842e0e1461026e57806342966c68146102815780634f6ccce7146102945780635e5c06e2146102a757600080fd5b8063223be59a1461023557806323b872dd146102485780632f745c591461025b57600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb57806318160ddd146102105780632214c73e14610222575b600080fd5b6101a66101a13660046117a1565b6103d8565b60405190151581526020015b60405180910390f35b6101c3610403565b6040516101b29190611815565b6101e36101de366004611828565b610495565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611856565b6104be565b005b6008545b6040519081526020016101b2565b600e546101e3906001600160a01b031681565b61020e6102433660046118d9565b6104cd565b61020e610256366004611970565b610852565b610214610269366004611856565b6108dd565b61020e61027c366004611970565b610942565b61020e61028f366004611828565b610962565b6102146102a2366004611828565b6109a8565b6102ba6102b53660046119b1565b610a01565b6040516101b29291906119ce565b6101e36102d6366004611828565b610aa5565b6102146102e93660046119b1565b610ab0565b61020e610af8565b6102146103043660046119f0565b610b0c565b600a546001600160a01b03166101e3565b6101c3610cca565b6101a6610330366004611828565b600c6020526000908152604090205460ff1681565b61020e610353366004611a41565b610cd9565b6101e3610366366004611b06565b8051602081830181018051600d825292820191909301209152546001600160a01b031681565b61020e61039a366004611b4f565b610ce4565b6101c36103ad366004611828565b610cfb565b6101a66103c0366004611bcf565b610e19565b61020e6103d33660046119b1565b610e47565b60006001600160e01b0319821663780e9d6360e01b14806103fd57506103fd82610e82565b92915050565b60606000805461041290611bfd565b80601f016020809104026020016040519081016040528092919081815260200182805461043e90611bfd565b801561048b5780601f106104605761010080835404028352916020019161048b565b820191906000526020600020905b81548152906001019060200180831161046e57829003601f168201915b5050505050905090565b60006104a082610ed2565b506000828152600460205260409020546001600160a01b03166103fd565b6104c9828233610f0b565b5050565b336000818152600b602052604090206001015415610522576001600160a01b0381166000908152600b60205260409081902090516364c0d6c760e01b8152610519913391600401611c37565b60405180910390fd5b600e54604051634df0ba8d60e11b81526004810185905284916001600160a01b031690639be1751a90602401602060405180830381865afa15801561056b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058f9190611cd7565b6105af576040516308610c2d60e21b815260048101829052602401610519565b604080516001808252818301909252600091602080830190803683370190505090506105dd88888888610b0c565b816000815181106105f0576105f0611cf4565b60200260200101818152505060008461067f57600e60009054906101000a90046001600160a01b03166001600160a01b0316632e6959776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067a9190611d0a565b6106f6565b600e60009054906101000a90046001600160a01b03166001600160a01b031663b2a9f8046040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f69190611d0a565b90506000816001600160a01b031663ea50d0e48d8d866040518463ffffffff1660e01b815260040161072a93929190611d27565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190611cd7565b90508061078b57604051631052dd2560e21b815260040160405180910390fd5b6040805160606020601f8d01819004028201810183529181018b815290918291908d908d9081908501838280828437600092018290525093855250505060209182018b9052338152600b90915260409020815181906107ea9082611df2565b506020820151816001015590505033600d8b8b60405161080b929190611eb2565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790556108443380610f18565b505050505050505050505050565b6001600160a01b03821661087c57604051633250574960e11b815260006004820152602401610519565b6000610889838333610f7d565b9050836001600160a01b0316816001600160a01b0316146108d7576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610519565b50505050565b60006108e883610ab0565b82106109195760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610519565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61095d83838360405180602001604052806000815250610ce4565b505050565b3361096c82610aa5565b6001600160a01b03161461099c57604051630da7a30b60e31b815260048101829052336024820152604401610519565b6109a581610fde565b50565b60006109b360085490565b82106109dc5760405163295f44f760e21b81526000600482015260248101839052604401610519565b600882815481106109ef576109ef611cf4565b90600052602060002001549050919050565b600b60205260009081526040902080548190610a1c90611bfd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4890611bfd565b8015610a955780601f10610a6a57610100808354040283529160200191610a95565b820191906000526020600020905b815481529060010190602001808311610a7857829003601f168201915b5050505050908060010154905082565b60006103fd82610ed2565b60006001600160a01b038216610adc576040516322718ad960e21b815260006004820152602401610519565b506001600160a01b031660009081526003602052604090205490565b610b00611019565b610b0a6000611046565b565b600080600283858888604051602001610b289493929190611ec2565b60408051601f1981840301815290829052610b4291611ee3565b602060405180830381855afa158015610b5f573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b829190611eff565b905077ffffffff000000000000000000000000ffffffff000000007dff000000ff000000ff000000ff000000ff000000ff000000ff0000000000600883811b9182167cff000000ff000000ff000000ff000000ff000000ff000000ff000000ff9185901c91821617601090811b7fff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000939093167eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff00009290921691909117901c17602081811b92831673ffffffff000000000000000000000000ffffffff9290911c91821617604090811b7fffffffff000000000000000000000000ffffffff000000000000000000000000939093167bffffffff000000000000000000000000ffffffff00000000000000009290921691909117901c17608081811b91901c175b9695505050505050565b60606001805461041290611bfd565b6104c9338383611098565b610cef848484610852565b6108d784848484611137565b6060610d0682610ed2565b506000600b6000610d1685610aa5565b6001600160a01b0316815260208101919091526040016000208054610d3a90611bfd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6690611bfd565b8015610db35780601f10610d8857610100808354040283529160200191610db3565b820191906000526020600020905b815481529060010190602001808311610d9657829003601f168201915b505050505090506000610dec60408051808201909152601381527268747470733a2f2f6769746875622e636f6d2f60681b602082015290565b90508082604051602001610e01929190611f18565b60405160208183030381529060405292505050919050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610e4f611019565b6001600160a01b038116610e7957604051631e4fbdf760e01b815260006004820152602401610519565b6109a581611046565b60006001600160e01b031982166380ac58cd60e01b1480610eb357506001600160e01b03198216635b5e139f60e01b145b806103fd57506301ffc9a760e01b6001600160e01b03198316146103fd565b6000818152600260205260408120546001600160a01b0316806103fd57604051637e27328960e01b815260048101849052602401610519565b61095d8383836001611260565b6001600160a01b038216610f4257604051633250574960e11b815260006004820152602401610519565b6000610f5083836000610f7d565b90506001600160a01b0381161561095d576040516339e3563760e11b815260006004820152602401610519565b6000828152600260205260408120546001600160a01b03168015801590610fac57506001600160a01b03851615155b15610fca5760405163a4420a9560e01b815260040160405180910390fd5b610fd5858585611366565b95945050505050565b6000610fed6000836000610f7d565b90506001600160a01b0381166104c957604051637e27328960e01b815260048101839052602401610519565b600a546001600160a01b03163314610b0a5760405163118cdaa760e01b8152336004820152602401610519565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166110ca57604051630b61174360e31b81526001600160a01b0383166004820152602401610519565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156108d757604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290611179903390889087908790600401611f47565b6020604051808303816000875af19250505080156111b4575060408051601f3d908101601f191682019092526111b191810190611f7a565b60015b61121d573d8080156111e2576040519150601f19603f3d011682016040523d82523d6000602084013e6111e7565b606091505b50805160000361121557604051633250574960e11b81526001600160a01b0385166004820152602401610519565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461125957604051633250574960e11b81526001600160a01b0385166004820152602401610519565b5050505050565b808061127457506001600160a01b03821615155b1561133657600061128484610ed2565b90506001600160a01b038316158015906112b05750826001600160a01b0316816001600160a01b031614155b80156112c357506112c18184610e19565b155b156112ec5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610519565b81156113345783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061137485858561143b565b90506001600160a01b0381166113d1576113cc84600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6113f4565b846001600160a01b0316816001600160a01b0316146113f4576113f48185611534565b6001600160a01b0385166114105761140b846115c5565b611433565b846001600160a01b0316816001600160a01b031614611433576114338585611674565b949350505050565b6000828152600260205260408120546001600160a01b0390811690831615611468576114688184866116c4565b6001600160a01b038116156114a657611485600085600080611260565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b038516156114d5576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061153f83610ab0565b600083815260076020526040902054909150808214611592576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906115d790600190611f97565b600083815260096020526040812054600880549394509092849081106115ff576115ff611cf4565b90600052602060002001549050806008838154811061162057611620611cf4565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061165857611658611fb8565b6001900381819060005260206000200160009055905550505050565b6000600161168184610ab0565b61168b9190611f97565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6116cf838383611728565b61095d576001600160a01b0383166116fd57604051637e27328960e01b815260048101829052602401610519565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610519565b60006001600160a01b038316158015906114335750826001600160a01b0316846001600160a01b0316148061176257506117628484610e19565b806114335750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b0319811681146109a557600080fd5b6000602082840312156117b357600080fd5b81356117be8161178b565b9392505050565b60005b838110156117e05781810151838201526020016117c8565b50506000910152565b600081518084526118018160208601602086016117c5565b601f01601f19169290920160200192915050565b6020815260006117be60208301846117e9565b60006020828403121561183a57600080fd5b5035919050565b6001600160a01b03811681146109a557600080fd5b6000806040838503121561186957600080fd5b823561187481611841565b946020939093013593505050565b60008083601f84011261189457600080fd5b50813567ffffffffffffffff8111156118ac57600080fd5b6020830191508360208285010111156118c457600080fd5b9250929050565b80151581146109a557600080fd5b600080600080600080600060a0888a0312156118f457600080fd5b873567ffffffffffffffff8082111561190c57600080fd5b6119188b838c01611882565b909950975060208a013591508082111561193157600080fd5b5061193e8a828b01611882565b90965094505060408801359250606088013591506080880135611960816118cb565b8091505092959891949750929550565b60008060006060848603121561198557600080fd5b833561199081611841565b925060208401356119a081611841565b929592945050506040919091013590565b6000602082840312156119c357600080fd5b81356117be81611841565b6040815260006119e160408301856117e9565b90508260208301529392505050565b60008060008060608587031215611a0657600080fd5b843567ffffffffffffffff811115611a1d57600080fd5b611a2987828801611882565b90989097506020870135966040013595509350505050565b60008060408385031215611a5457600080fd5b8235611a5f81611841565b91506020830135611a6f816118cb565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611aab57611aab611a7a565b604051601f8501601f19908116603f01168101908282118183101715611ad357611ad3611a7a565b81604052809350858152868686011115611aec57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611b1857600080fd5b813567ffffffffffffffff811115611b2f57600080fd5b8201601f81018413611b4057600080fd5b61143384823560208401611a90565b60008060008060808587031215611b6557600080fd5b8435611b7081611841565b93506020850135611b8081611841565b925060408501359150606085013567ffffffffffffffff811115611ba357600080fd5b8501601f81018713611bb457600080fd5b611bc387823560208401611a90565b91505092959194509250565b60008060408385031215611be257600080fd5b8235611bed81611841565b91506020830135611a6f81611841565b600181811c90821680611c1157607f821691505b602082108103611c3157634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b0383168152600060206040602084015260008454611c5a81611bfd565b8060408701526060600180841660008114611c7c5760018114611c9857611cc8565b60ff19851660608a0152606084151560051b8a01019550611cc8565b89600052602060002060005b85811015611cbf5781548b8201860152908301908801611ca4565b8a016060019650505b50939998505050505050505050565b600060208284031215611ce957600080fd5b81516117be816118cb565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d1c57600080fd5b81516117be81611841565b60408152826040820152828460608301376000606084830101526000601f19601f85011682016060810160206060858403016020860152818651808452608085019150602088019450600093505b80841015611d955784518252938201936001939093019290820190611d75565b5098975050505050505050565b601f82111561095d576000816000526020600020601f850160051c81016020861015611dcb5750805b601f850160051c820191505b81811015611dea57828155600101611dd7565b505050505050565b815167ffffffffffffffff811115611e0c57611e0c611a7a565b611e2081611e1a8454611bfd565b84611da2565b602080601f831160018114611e555760008415611e3d5750858301515b600019600386901b1c1916600185901b178555611dea565b600085815260208120601f198616915b82811015611e8457888601518255948401946001909101908401611e65565b5085821015611ea25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b84815283602082015281836040830137600091016040019081529392505050565b60008251611ef58184602087016117c5565b9190910192915050565b600060208284031215611f1157600080fd5b5051919050565b60008351611f2a8184602088016117c5565b835190830190611f3e8183602088016117c5565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610cc0908301846117e9565b600060208284031215611f8c57600080fd5b81516117be8161178b565b818103818111156103fd57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122071d2093f5ac3ca854e07480627780b68b3514750dc46930b6bcb21154e73de4864736f6c6343000818003343723364656e7469616c7320476974687562204163636f756e742050726f6f6620546f6b656e000000000000000000000000b27fe65a1a84dda6705dfabdbcc154bcf6655bb1