0x60c06040523480156200001157600080fd5b5060405162002324380380620023248339810160408190526200003491620000d4565b6200003f3362000067565b6200004a8462000067565b6001600160a01b03928316608052911660a0526001555062000126565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000cf57600080fd5b919050565b60008060008060808587031215620000eb57600080fd5b620000f685620000b7565b93506200010660208601620000b7565b92506200011660408601620000b7565b6060959095015193969295505050565b60805160a0516121a062000184600039600081816101ef01528181610550015261077f0152600081816102160152818161036a015281816105da01528181610626015281816106ac0152818161129d01526112d201526121a06000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80637c661949116100ad578063b8791ee211610071578063b8791ee2146102f0578063d45bd6b1146102f9578063ef25868b1461030c578063f2fde38b14610340578063feefb5631461035357600080fd5b80637c661949146102935780638da5cb5b146102a65780638f5dab9a146102b757806390a3ad8a146102ca578063a6fe34c6146102dd57600080fd5b80633fc8cef3116100f45780633fc8cef314610211578063524f38891461023857806357fa59eb1461024b5780636a3b312a1461025e578063715018a61461028b57600080fd5b806213b4fc1461013057806301276acf146101565780630d3652ec146101975780631f455922146101d55780633e413bee146101ea575b600080fd5b61014361013e366004611831565b610366565b6040519081526020015b60405180910390f35b61017f610164366004611869565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101c56101a53660046118c9565b805160208183018101805160038252928201919093012091525460ff1681565b604051901515815260200161014d565b6101e86101e33660046119a7565b6103b8565b005b61017f7f000000000000000000000000000000000000000000000000000000000000000081565b61017f7f000000000000000000000000000000000000000000000000000000000000000081565b6101436102463660046119a7565b6104a7565b610143610259366004611a0d565b61057f565b61027161026c366004611a7b565b610596565b60408051600293840b81529190920b60208201520161014d565b6101e86105c2565b6101436102a1366004611ab4565b6105d6565b6000546001600160a01b031661017f565b6101436102c5366004611afc565b610675565b61017f6102d8366004611b6d565b610697565b6101436102eb366004611b9b565b6106a8565b61014360015481565b6101e8610307366004611869565b6106e9565b61017f61031a3660046118c9565b80516020818301810180516002825292820191909301209152546001600160a01b031681565b6101e861034e366004611bd0565b6106f6565b6101e8610361366004611bed565b61076f565b60007f00000000000000000000000000000000000000000000000000000000000000008161039d6103988387846109be565b610a29565b90506103ac8287878488610a7c565b925050505b9392505050565b6103c0610b16565b600382826040516103d2929190611c4a565b9081526040519081900360200190205460ff1661042c5760405162461bcd60e51b8152602060048201526013602482015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b60448201526064015b60405180910390fd5b600060038383604051610440929190611c4a565b908152604051908190036020018120805492151560ff19909316929092179091556000906002906104749085908590611c4a565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050565b6000600383836040516104bb929190611c4a565b9081526040519081900360200190205460ff166105105760405162461bcd60e51b8152602060048201526013602482015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606401610423565b600060028484604051610524929190611c4a565b908152602001604051809103902060009054906101000a90046001600160a01b031690506105778160017f00000000000000000000000000000000000000000000000000000000000000006001546105d6565b949350505050565b600061058d82858786610b70565b95945050505050565b6000806000806105a586610c7e565b90945091506105b48686610f8a565b509396939550929350505050565b6105ca610b16565b6105d460006111d1565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614156106245761061d848484610366565b9050610577565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614156106695761061d8585846106a8565b61061d85858585611221565b600061068d86866001600160801b031686868661128a565b9695505050505050565b60006103b1610398848460006109be565b60007f0000000000000000000000000000000000000000000000000000000000000000816106da6103988784846109be565b90506103ac8686848488610a7c565b6106f1610b16565b600155565b6106fe610b16565b6001600160a01b0381166107635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610423565b61076c816111d1565b50565b610777610b16565b60006107a5857f000000000000000000000000000000000000000000000000000000000000000060006109be565b90506001600160a01b038216156108fe57816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190611c5a565b6001600160a01b031681600001516001600160a01b03161480156108b25750816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108999190611c5a565b6001600160a01b031681602001516001600160a01b0316145b6108fe5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e73206f7220706f6f6c206e6f7420636f72726563740000000000006044820152606401610423565b816004600061090c84611302565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508460028585604051610951929190611c4a565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160038585604051610997929190611c4a565b908152604051908190036020019020805491151560ff199092169190911790555050505050565b6040805160608101825260008082526020820181905291810191909152826001600160a01b0316846001600160a01b031611156109f9579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b6000610a348261134c565b90506001600160a01b038116610a775781516020830151604051634e8a64e960e01b81526001600160a01b03928316600482015291166024820152604401610423565b919050565b6000806000806000610a8d87610c7e565b9094509250610aa487610a9f8861137b565b610f8a565b909250905060006001600160a01b03808a16908c161015610adb578260020b8560020b12610ad25782610ad4565b845b9050610af3565b8260020b8560020b13610aee5782610af0565b845b90505b610b0781610b008c6113e0565b8d8c610b70565b9b9a5050505050505050505050565b6000546001600160a01b031633146105d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610423565b600080610b7c86611449565b90506001600160801b036001600160a01b03821611610c02576000610baa6001600160a01b03831680611c8d565b9050836001600160a01b0316856001600160a01b031610610be257610bdd600160c01b876001600160801b031683611769565b610bfa565b610bfa81876001600160801b0316600160c01b611769565b925050610c75565b6000610c216001600160a01b0383168068010000000000000000611769565b9050836001600160a01b0316856001600160a01b031610610c5957610c54600160801b876001600160801b031683611769565b610c71565b610c7181876001600160801b0316600160801b611769565b9250505b50949350505050565b6000806000806000856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190611cce565b5050509350935093505060018161ffff1611610d2c5760405162461bcd60e51b81526020600482015260036024820152624e454f60e81b6044820152606401610423565b60405163252c09d760e01b815261ffff83166004820152600090819081906001600160a01b038a169063252c09d790602401608060405180830381865afa158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f9190611d73565b509250925092504263ffffffff168363ffffffff1614610e2b5785896001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c9190611dcb565b97509750505050505050915091565b60008461ffff1660018661ffff168861ffff16610e489190611de8565b610e529190611e00565b610e5c9190611e2d565b90506000806000808d6001600160a01b031663252c09d7866040518263ffffffff1660e01b8152600401610e9291815260200190565b608060405180830381865afa158015610eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed39190611d73565b935093509350935080610f0e5760405162461bcd60e51b81526020600482015260036024820152624f4e4960e81b6044820152606401610423565b6000610f1a858a611e41565b905063ffffffff8116610f2d858a611e66565b610f379190611eb6565b9b5060006020610f47858a611ef4565b6001600160a01b0390811690911b90610f669063ffffffff8516611f14565b610f709190611f43565b90508c819e509e5050505050505050505050505050915091565b60008063ffffffff8316610fc55760405162461bcd60e51b8152602060048201526002602482015261042560f41b6044820152606401610423565b6040805160028082526060820183526000926020830190803683370190505090508381600081518110610ffa57610ffa611f69565b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061102957611029611f69565b602002602001019063ffffffff16908163ffffffff1681525050600080866001600160a01b031663883bdbfd846040518263ffffffff1660e01b81526004016110729190611f7f565b600060405180830381865afa15801561108f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110b79190810190612061565b915091506000826000815181106110d0576110d0611f69565b6020026020010151836001815181106110eb576110eb611f69565b60200260200101516110fd9190611e66565b905060008260008151811061111457611114611f69565b60200260200101518360018151811061112f5761112f611f69565b60200260200101516111419190611ef4565b905061115363ffffffff891683611eb6565b965060008260060b128015611179575061117363ffffffff891683612124565b60060b15155b1561118c578661118881612146565b9750505b60006111a56001600160a01b0363ffffffff8b16611f14565b90506111c2640100000000600160c01b03602084901b1682611f43565b96505050505050509250929050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080611238611233878660006109be565b61134c565b90506001600160a01b0381161561125e576112568686868487610a7c565b915050610577565b604051634e8a64e960e01b81526001600160a01b03808816600483015285166024820152604401610423565b6000806112c18461129a886113e0565b897f0000000000000000000000000000000000000000000000000000000000000000610b70565b90506112f7836112d0836113e0565b7f000000000000000000000000000000000000000000000000000000000000000088610b70565b979650505050505050565b8051602091820151604080516bffffffffffffffffffffffff19606094851b8116828701529290931b90911660348301528051808303602801815260489092019052805191012090565b60006004600061135b84611302565b81526020810191909152604001600020546001600160a01b031692915050565b8063ffffffff81168114610a775760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610423565b806001600160801b0381168114610a775760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610423565b60008060008360020b12611460578260020b611468565b8260020b6000035b9050620d89e881111561148e576040516315e4079d60e11b815260040160405180910390fd5b6000600182166114a257600160801b6114b4565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156114e8576ffff97272373d413259a46990580e213a0260801c5b6004821615611507576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611526576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611545576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611564576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611583576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156115a2576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156115c2576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156115e2576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611602576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611622576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611642576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611662576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611682576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156116a2576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156116c3576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156116e3576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611702576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561171f576b048a170391f7dc42444e8fa20260801c5b60008460020b131561174057806000198161173c5761173c611e17565b0490505b640100000000810615611754576001611757565b60005b60ff16602082901c0192505050919050565b6000808060001985870985870292508281108382030391505080600014156117a3576000841161179857600080fd5b5082900490506103b1565b8084116117af57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6001600160a01b038116811461076c57600080fd5b60008060006060848603121561184657600080fd5b8335925060208401356118588161181c565b929592945050506040919091013590565b60006020828403121561187b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156118c1576118c1611882565b604052919050565b600060208083850312156118dc57600080fd5b823567ffffffffffffffff808211156118f457600080fd5b818501915085601f83011261190857600080fd5b81358181111561191a5761191a611882565b61192c601f8201601f19168501611898565b9150808252868482850101111561194257600080fd5b8084840185840137600090820190930192909252509392505050565b60008083601f84011261197057600080fd5b50813567ffffffffffffffff81111561198857600080fd5b6020830191508360208285010111156119a057600080fd5b9250929050565b600080602083850312156119ba57600080fd5b823567ffffffffffffffff8111156119d157600080fd5b6119dd8582860161195e565b90969095509350505050565b6001600160801b038116811461076c57600080fd5b8060020b811461076c57600080fd5b60008060008060808587031215611a2357600080fd5b8435611a2e8161181c565b93506020850135611a3e816119e9565b92506040850135611a4e8161181c565b91506060850135611a5e816119fe565b939692955090935050565b63ffffffff8116811461076c57600080fd5b60008060408385031215611a8e57600080fd5b8235611a998161181c565b91506020830135611aa981611a69565b809150509250929050565b60008060008060808587031215611aca57600080fd5b8435611ad58161181c565b9350602085013592506040850135611aec8161181c565b9396929550929360600135925050565b600080600080600060a08688031215611b1457600080fd5b8535611b1f8161181c565b94506020860135611b2f816119e9565b93506040860135611b3f8161181c565b92506060860135611b4f816119fe565b91506080860135611b5f816119fe565b809150509295509295909350565b60008060408385031215611b8057600080fd5b8235611b8b8161181c565b91506020830135611aa98161181c565b600080600060608486031215611bb057600080fd5b8335611bbb8161181c565b95602085013595506040909401359392505050565b600060208284031215611be257600080fd5b81356103b18161181c565b60008060008060608587031215611c0357600080fd5b8435611c0e8161181c565b9350602085013567ffffffffffffffff811115611c2a57600080fd5b611c368782880161195e565b9094509250506040850135611a5e8161181c565b8183823760009101908152919050565b600060208284031215611c6c57600080fd5b81516103b18161181c565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611ca757611ca7611c77565b500290565b805161ffff81168114610a7757600080fd5b80518015158114610a7757600080fd5b600080600080600080600060e0888a031215611ce957600080fd5b8751611cf48161181c565b6020890151909750611d05816119fe565b9550611d1360408901611cac565b9450611d2160608901611cac565b9350611d2f60808901611cac565b925060a088015160ff81168114611d4557600080fd5b9150611d5360c08901611cbe565b905092959891949750929550565b8051600681900b8114610a7757600080fd5b60008060008060808587031215611d8957600080fd5b8451611d9481611a69565b9350611da260208601611d61565b92506040850151611db28161181c565b9150611dc060608601611cbe565b905092959194509250565b600060208284031215611ddd57600080fd5b81516103b1816119e9565b60008219821115611dfb57611dfb611c77565b500190565b600082821015611e1257611e12611c77565b500390565b634e487b7160e01b600052601260045260246000fd5b600082611e3c57611e3c611e17565b500690565b600063ffffffff83811690831681811015611e5e57611e5e611c77565b039392505050565b60008160060b8360060b6000811281667fffffffffffff1901831281151615611e9157611e91611c77565b81667fffffffffffff018313811615611eac57611eac611c77565b5090039392505050565b60008160060b8360060b80611ecd57611ecd611e17565b667fffffffffffff19821460001982141615611eeb57611eeb611c77565b90059392505050565b60006001600160a01b0383811690831681811015611e5e57611e5e611c77565b60006001600160c01b0382811684821681151582840482111615611f3a57611f3a611c77565b02949350505050565b60006001600160c01b0383811680611f5d57611f5d611e17565b92169190910492915050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015611fbd57835163ffffffff1683529284019291840191600101611f9b565b50909695505050505050565b600067ffffffffffffffff821115611fe357611fe3611882565b5060051b60200190565b600082601f830112611ffe57600080fd5b8151602061201361200e83611fc9565b611898565b82815260059290921b8401810191818101908684111561203257600080fd5b8286015b848110156120565780516120498161181c565b8352918301918301612036565b509695505050505050565b6000806040838503121561207457600080fd5b825167ffffffffffffffff8082111561208c57600080fd5b818501915085601f8301126120a057600080fd5b815160206120b061200e83611fc9565b82815260059290921b840181019181810190898411156120cf57600080fd5b948201945b838610156120f4576120e586611d61565b825294820194908201906120d4565b9188015191965090935050508082111561210d57600080fd5b5061211a85828601611fed565b9150509250929050565b60008260060b8061213757612137611e17565b808360060b0791505092915050565b60008160020b627fffff1981141561216057612160611c77565b600019019291505056fea2646970667358221220542456952b0a3e95c72e65b2503c933718a87f096f34f1ccc880084654a0462364736f6c634300080c003300000000000000000000000038f6001e8ac11240f903cba56aff72a1425ae371000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000000003