0x608060405234801561001057600080fd5b50600160965561001f33610031565b6097805460ff60a01b19169055610083565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611ac2806100926000396000f3fe6080604052600436106101665760003560e01c8063a12b73c0116100d1578063c38bb5371161008a578063e2bbb15811610064578063e2bbb1581461049d578063f2fde38b146104bd578063f8f8628d146104dd578063ff6af635146104f057600080fd5b8063c38bb537146103ed578063c948a87c1461040d578063d5bc33641461048757600080fd5b8063a12b73c01461030e578063a794eac21461032e578063af1cebe114610374578063b5c5f672146103a1578063b6d0f3d8146103c1578063c0bd97a3146103d757600080fd5b80635cd9205f116101235780635cd9205f1461025157806370b7518c14610271578063715018a61461029157806375daad9d146102a65780638da5cb5b146102c657806393bc9469146102ee57600080fd5b806311e50d371461016b57806315bd00911461018d57806320ff430b146101d25780633d13f874146101f257806353497e57146102125780635c975abb14610232575b600080fd5b34801561017757600080fd5b5061018b610186366004611470565b610506565b005b34801561019957600080fd5b506101bd6101a8366004611470565b60396020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101de57600080fd5b5061018b6101ed3660046114a5565b61054a565b3480156101fe57600080fd5b5061018b61020d3660046114e1565b61061e565b34801561021e57600080fd5b5061018b61022d366004611470565b6107b7565b34801561023e57600080fd5b50609754600160a01b900460ff166101bd565b34801561025d57600080fd5b5061018b61026c36600461156b565b6107f4565b34801561027d57600080fd5b5061018b61028c366004611586565b61083a565b34801561029d57600080fd5b5061018b61089a565b3480156102b257600080fd5b5061018b6102c1366004611661565b6108ae565b3480156102d257600080fd5b506097546040516001600160a01b0390911681526020016101c9565b3480156102fa57600080fd5b5061018b610309366004611470565b6109a3565b34801561031a57600080fd5b5061018b6103293660046116c5565b6109e0565b34801561033a57600080fd5b50610366610349366004611586565b603760209081526000928352604080842090915290825290205481565b6040519081526020016101c9565b34801561038057600080fd5b5061036661038f36600461156b565b60386020526000908152604090205481565b3480156103ad57600080fd5b5061018b6103bc3660046116e7565b610a85565b3480156103cd57600080fd5b5061036660355481565b3480156103e357600080fd5b5061036660345481565b3480156103f957600080fd5b5061018b61040836600461171a565b610c03565b34801561041957600080fd5b5061045c610428366004611470565b60366020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919092169184565b604080516001600160a01b0395861681529490931660208501529183015260608201526080016101c9565b34801561049357600080fd5b5061036660325481565b3480156104a957600080fd5b5061018b6104b83660046116c5565b610c58565b3480156104c957600080fd5b5061018b6104d836600461156b565b610d75565b61018b6104eb366004611785565b610de2565b3480156104fc57600080fd5b5061036660335481565b61050e611013565b60348190556040518181527fe668fac330c72a13d302962db93266cb486371e5433fd1c2f878889ba0dab717906020015b60405180910390a150565b610552611013565b6001600160a01b038316610579576040516301a9b66b60e11b815260040160405180910390fd5b6001600160a01b0382166105c3576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156105bd573d6000803e3d6000fd5b506105ce565b6105ce82848361106d565b604080516001600160a01b038086168252841660208201529081018290527fe01920728668d89f092ef9cb92036bad90964bb622eec508d2c3ffe1d582efb29060600160405180910390a1505050565b604080513360208201526001600160a01b038616918101919091526060810184905260009060800160408051601f1981840301815291815281516020928301206000818152603990935291205490915060ff16156106a5576040516305b695bd60e51b81523360048201526001600160a01b03861660248201526044015b60405180910390fd5b6001600160a01b038516600090815260386020526040902054801580159061070857506107088484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508592508691506111309050565b6107445760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b4b63210383937b7b360991b604482015260640161069c565b61074f86338761106d565b60008281526039602052604090819020805460ff19166001179055516001600160a01b0387169033907fd3c95eebfa75fa734cc34f701d6370b344094dcdcc11871062bd1422363b8615906107a79089815260200190565b60405180910390a3505050505050565b6107bf611013565b60358190556040518181527ff3215c1df1d0f1de323e9933313476bf7f11d47328ac88abdaf397dbd93f2c839060200161053f565b60006108086097546001600160a01b031690565b6001600160a01b03161461082e5760405162dc149f60e41b815260040160405180910390fd5b61083781611146565b50565b610842611013565b6001600160a01b038216600081815260386020908152604091829020849055815192835282018390527f24d7a869d02d8e4a3837a523b892ca4608cc16a57e11fe734ddea7d8ab2f17ca910160405180910390a15050565b6108a2611013565b6108ac6000611146565b565b6108b6611013565b815181518082146108fd5760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103830b930b6b2ba32b960791b604482015260640161069c565b60005b8281101561099c57600085828151811061091c5761091c611839565b60200260200101519050600085838151811061093a5761093a611839565b6020026020010151905080603660008481526020019081526020016000206003018190555081600080516020611a6d8339815191528260405161097f91815260200190565b60405180910390a25050808061099490611865565b915050610900565b5050505050565b6109ab611013565b60328190556040518181527f67411dd0877950210cededfe820301f278440018f43540f7670e2d4378bc9f4a9060200161053f565b6109e8611013565b600082815260366020526040902080546001600160a01b0316610a2157604051632840611160e21b81526004810184905260240161069c565b8181600301541115610a56576003810154604051630f909cd360e41b815261069c918491600401918252602082015260400190565b600381018290556040518281528390600080516020611a6d8339815191529060200160405180910390a2505050565b336000908152603760209081526040808320858452909152902054811115610ae65760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161069c565b600082815260366020526040902080546001600160a01b0316610b1f57604051632840611160e21b81526004810184905260240161069c565b33600090815260376020908152604080832086845290915281208054849290610b4990849061187e565b9250508190555081816003016000828254610b64919061187e565b909155505060038101546040519081528390600080516020611a6d8339815191529060200160405180910390a26001810154610baa906001600160a01b0316858461106d565b336000818152603760209081526040808320878452825291829020548251868152918201528592917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94910160405180910390a350505050565b610c0b611013565b8015610c1e57610c19611198565b610c26565b610c266111f8565b60405181151581527f6c82eb8f861cdde5f2fdbdc7c547ba478de85dd25a1697ec176cec341e5158979060200161053f565b600082815260366020526040902080546001600160a01b0316610c9157604051632840611160e21b81526004810184905260240161069c565b6001810154610cab906001600160a01b0316333085611234565b33600090815260376020908152604080832086845290915281208054849290610cd5908490611891565b9250508190555081816003016000828254610cf09190611891565b909155505060038101546040519081528390600080516020611a6d8339815191529060200160405180910390a2336000818152603760209081526040808320878452825291829020548251868152918201528592917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e910160405180910390a3505050565b610d7d611013565b6001600160a01b03811661082e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161069c565b610dea6112f9565b610df2611346565b6035543414610e1657604051639733981760e01b815234600482015260240161069c565b603354610e24906001611891565b603355600087610e3657506000610f0b565b6000888152603660205260409020600101546001600160a01b03908116908a168114610e88576040516328d2dca960e01b81526001600160a01b0380831660048301528b16602482015260440161069c565b60008a6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eec91906118a4565b9050610ef981600a6119a1565b603254610f0691906119ad565b925050505b604080516080810182523381526001600160a01b038b811660208084019182528385018d81526060850187815260338054600090815260368552889020965187549087166001600160a01b0319918216178855945160018801805491909716951694909417909455516002850155915160039093019290925590549151838152600080516020611a6d833981519152910160405180910390a2603354336001600160a01b03168a6001600160a01b03167fd9762f4d3f6950909d627f89c7d7c3e2fa76990fde40e7a676c1d0672c47a41c8b8b8b89898d8d604051610ff697969594939291906119ed565b60405180910390a4506110096001609655565b5050505050505050565b6097546001600160a01b031633146108ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161069c565b6040516001600160a01b038381166024830152604482018390526000919085169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516110c69190611a3d565b6000604051808303816000865af19150503d8060008114611103576040519150601f19603f3d011682016040523d82523d6000602084013e611108565b606091505b505090508061112a576040516312171d8360e31b815260040160405180910390fd5b50505050565b60008261113d858461139f565b14949350505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6111a06112f9565b6097805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111db3390565b6040516001600160a01b03909116815260200160405180910390a1565b6112006113ee565b6097805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336111db565b6040516001600160a01b0384811660248301528381166044830152606482018390526000919086169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516112959190611a3d565b6000604051808303816000865af19150503d80600081146112d2576040519150601f19603f3d011682016040523d82523d6000602084013e6112d7565b606091505b505090508061099c576040516312171d8360e31b815260040160405180910390fd5b609754600160a01b900460ff16156108ac5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161069c565b6002609654036113985760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161069c565b6002609655565b600081815b84518110156113e4576113d0828683815181106113c3576113c3611839565b602002602001015161143e565b9150806113dc81611865565b9150506113a4565b5090505b92915050565b609754600160a01b900460ff166108ac5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161069c565b600081831061145a576000828152602084905260409020611469565b60008381526020839052604090205b9392505050565b60006020828403121561148257600080fd5b5035919050565b80356001600160a01b03811681146114a057600080fd5b919050565b6000806000606084860312156114ba57600080fd5b6114c384611489565b92506114d160208501611489565b9150604084013590509250925092565b600080600080606085870312156114f757600080fd5b61150085611489565b935060208501359250604085013567ffffffffffffffff8082111561152457600080fd5b818701915087601f83011261153857600080fd5b81358181111561154757600080fd5b8860208260051b850101111561155c57600080fd5b95989497505060200194505050565b60006020828403121561157d57600080fd5b61146982611489565b6000806040838503121561159957600080fd5b6115a283611489565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126115d757600080fd5b8135602067ffffffffffffffff808311156115f4576115f46115b0565b8260051b604051601f19603f83011681018181108482111715611619576116196115b0565b60405293845285810183019383810192508785111561163757600080fd5b83870191505b848210156116565781358352918301919083019061163d565b979650505050505050565b6000806040838503121561167457600080fd5b823567ffffffffffffffff8082111561168c57600080fd5b611698868387016115c6565b935060208501359150808211156116ae57600080fd5b506116bb858286016115c6565b9150509250929050565b600080604083850312156116d857600080fd5b50508035926020909101359150565b6000806000606084860312156116fc57600080fd5b61170584611489565b95602085013595506040909401359392505050565b60006020828403121561172c57600080fd5b8135801515811461146957600080fd5b60008083601f84011261174e57600080fd5b50813567ffffffffffffffff81111561176657600080fd5b60208301915083602082850101111561177e57600080fd5b9250929050565b60008060008060008060008060a0898b0312156117a157600080fd5b6117aa89611489565b975060208901359650604089013567ffffffffffffffff808211156117ce57600080fd5b6117da8c838d0161173c565b909850965060608b01359150808211156117f357600080fd5b6117ff8c838d0161173c565b909650945060808b013591508082111561181857600080fd5b506118258b828c0161173c565b999c989b5096995094979396929594505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016118775761187761184f565b5060010190565b818103818111156113e8576113e861184f565b808201808211156113e8576113e861184f565b6000602082840312156118b657600080fd5b5051919050565b600181815b808511156118f85781600019048211156118de576118de61184f565b808516156118eb57918102915b93841c93908002906118c2565b509250929050565b60008261190f575060016113e8565b8161191c575060006113e8565b8160018114611932576002811461193c57611958565b60019150506113e8565b60ff84111561194d5761194d61184f565b50506001821b6113e8565b5060208310610133831016604e8410600b841016171561197b575081810a6113e8565b61198583836118bd565b80600019048211156119995761199961184f565b029392505050565b60006114698383611900565b80820281158282048414176113e8576113e861184f565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b878152608060208201526000611a0760808301888a6119c4565b8281036040840152611a1a8187896119c4565b90508281036060840152611a2f8185876119c4565b9a9950505050505050505050565b6000825160005b81811015611a5e5760208186018101518583015201611a44565b50600092019182525091905056fee866ea7b82374f02b45bd22602115e9f8819bcf9ede087335bd08e1b45e327e3a2646970667358221220248f8e8850f1d755b7b350177d4870ae457aa77c3e0d5947b2189fb6b00ec72264736f6c63430008130033