0x608060405234801561001057600080fd5b50612083806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80634a1ae3261461005c5780634f76c05814610085578063872ca7da146100a55780638fe458c6146100cf578063986cfba3146100f5575b600080fd5b61006f61006a366004611ca0565b610115565b60405161007c9190611f2c565b60405180910390f35b610098610093366004611c03565b61012e565b60405161007c9190611ec1565b6100b86100b3366004611ca0565b61013f565b60405161007c9b9a99989796959493929190611dd8565b6100e26100dd366004611b39565b610221565b60405161007c9796959493929190611e83565b610108610103366004611b1d565b61037e565b60405161007c9190611ff8565b61011d611a14565b6101278383610389565b9392505050565b6000610139826105b3565b92915050565b60008060008060008060008060008060008061015b8e8e610389565b9050610185730addd25a91563696d8567df78d5a01c9a991f9b882600001518361010001516108c2565b80945081965050506101b5730addd25a91563696d8567df78d5a01c9a991f9b882602001518361012001516108c2565b809350819550505080604001519b5080600001519a50806020015199506101e781604001518261010001516000610a28565b96506101fe81604001518261012001516001610a28565b955080610100015198508061012001519750509295989b509295989b9093969950565b600080600080600080600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b031689600001516001600160a01b03161461026457885161027a565b7382af49447d8a07e3bd95bd0d56f35241523fbab15b6001600160a01b039081168a5260208a01511673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146102b15788602001516102c7565b7382af49447d8a07e3bd95bd0d56f35241523fbab15b6001600160a01b031660208a01526102df8989610a77565b959c50939a5091985096509450925090506001600160a01b0387167382af49447d8a07e3bd95bd0d56f35241523fbab11461031a5786610330565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b506001600160a01b0386167382af49447d8a07e3bd95bd0d56f35241523fbab11461035b5785610371565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b5092959891949750929550565b600061013982610be0565b610391611a14565b60405163133f757160e31b81526001600160a01b038316906399fbab88906103bd90869060040161200c565b6101806040518083038186803b1580156103d657600080fd5b505afa1580156103ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190611ccf565b505050506001600160801b031660e0890152600290810b810b60a089015290810b900b608087015262ffffff16606086018190526001600160a01b0391821660208701819052929091168086526104689450925085610ef9565b6001600160a01b031660408083018290528051633850c7bd60e01b815290518291633850c7bd9160048083019260a0929190829003018186803b1580156104ae57600080fd5b505afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e69190611c1f565b505050600290810b900b60c08401525060e08201516105129085906001600160801b0316600086610ffa565b505061012084015261010083015281516001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab11461054c578151610562565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b5060208201516001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab1146105955781602001516105ab565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b505092915050565b60006401000276a36001600160a01b038316108015906105ef575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6106145760405162461bcd60e51b815260040161060b90611f11565b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106106a857607f810383901c91506106b2565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b146108b357886001600160a01b031661089782610be0565b6001600160a01b031611156108ac57816108ae565b805b6108b5565b815b9998505050505050505050565b600080600073833589fcd6edb6e08f4c7c32d4f71b54bda0291390506000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561091957600080fd5b505afa15801561092d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190611c88565b9050816001600160a01b0316866001600160a01b0316141561098957620f4240935080600a0a8585028161098157fe5b049250610a1e565b60405163802431fb60e01b81526001600160a01b0388169063802431fb906109ba9089908690600090600401611e37565b60206040518083038186803b1580156109d257600080fd5b505afa1580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611c88565b935080600a0a85850281610a1a57fe5b0492505b5050935093915050565b600080600080610a37876111de565b925092509250818560028110610a4957fe5b6020020151600a0a86848760028110610a5e57fe5b60200201510281610a6b57fe5b04979650505050505050565b600080600080600080600088602001516001600160a01b031689600001516001600160a01b031610610aaf5760208901518951610ab7565b885160208a01515b80975081985050506000610ad188888c604001518c610ef9565b90506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160a06040518083038186803b158015610b0e57600080fd5b505afa158015610b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b469190611c1f565b505050509050610b7981610b5d8d60600151610be0565b610b6a8e60800151610be0565b8e60a001518f60c001516114ba565b6001600160801b03169650610ba881610b958d60600151610be0565b610ba28e60800151610be0565b8a61157e565b80965081975050505050610bc187858b60e0015161161a565b9150610bd286848b60e0015161161a565b905092959891949750929550565b60008060008360020b12610bf7578260020b610bff565b8260020b6000035b9050620d89e8811115610c245760405162461bcd60e51b815260040161060b90611ef6565b600060018216610c3857600160801b610c4a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615610c7e576ffff97272373d413259a46990580e213a0260801c5b6004821615610c9d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615610cbc576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615610cdb576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615610cfa576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615610d19576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615610d38576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615610d58576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615610d78576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615610d98576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615610db8576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615610dd8576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615610df8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615610e18576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615610e38576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615610e59576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615610e79576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615610e98576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615610eb5576b048a170391f7dc42444e8fa20260801c5b60008460020b1315610ed0578060001981610ecc57fe5b0490505b640100000000810615610ee4576001610ee7565b60005b60ff16602082901c0192505050919050565b600080826001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3557600080fd5b505afa158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d9190611b01565b604051630b4c774160e11b81529091506001600160a01b03821690631698ee8290610fa090899089908990600401611e5b565b60206040518083038186803b158015610fb857600080fd5b505afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff09190611b01565b9695505050505050565b600080600080611008611a14565b60405163133f757160e31b81526001600160a01b038716906399fbab8890611034908c9060040161200c565b6101806040518083038186803b15801561104d57600080fd5b505afa158015611061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110859190611ccf565b505050506001600160801b031660e0890152600290810b810b60a089015290810b900b608087015262ffffff16606086018190526001600160a01b039182166020870181905292909116808652600094506110e3935091908a610ef9565b90506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561112057600080fd5b505afa158015611134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111589190611c1f565b5050505090506111ab8161116f8560800151610be0565b61117c8660a00151610be0565b8d8760e001516001600160801b03161115611197578d6111a6565b8660e001516001600160801b03165b61157e565b845191985096506111be9150878a61161a565b93506111cf8260200151868a61161a565b92505050945094509450949050565b6111e6611a78565b6111ee611a78565b6111f6611a78565b6000846001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561123157600080fd5b505afa158015611245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112699190611c1f565b5050505090506000856001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156112aa57600080fd5b505afa1580156112be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e29190611b01565b90506000866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561131f57600080fd5b505afa158015611333573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113579190611b01565b9050816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ca9190611c88565b85526040805163313ce56760e01b815290516001600160a01b0383169163313ce567916004808301926020929190829003018186803b15801561140c57600080fd5b505afa158015611420573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114449190611c88565b602086015284516001600160a01b03841680029061146b908290600a0a600160c01b611730565b8752602086015161148590600160c01b90600a0a83611730565b602080890191909152604080518082019091526001600160a01b03948516815292909316928201929092529496939550505050565b6000836001600160a01b0316856001600160a01b031611156114da579293925b846001600160a01b0316866001600160a01b031611611505576114fe8585856117da565b9050611575565b836001600160a01b0316866001600160a01b0316101561156757600061152c8786866117da565b9050600061153b87898661183d565b9050806001600160801b0316826001600160801b03161061155c578061155e565b815b92505050611575565b61157285858461183d565b90505b95945050505050565b600080836001600160a01b0316856001600160a01b0316111561159f579293925b846001600160a01b0316866001600160a01b0316116115ca576115c3858585611882565b9150611611565b836001600160a01b0316866001600160a01b03161015611603576115ef868585611882565b91506115fc8587856118eb565b9050611611565b61160e8585856118eb565b90505b94509492505050565b600080611697856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561165957600080fd5b505afa15801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190611c88565b8561192e565b90506116b4816116af670de0b6b3a764000086611940565b611959565b9150611575856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f257600080fd5b505afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190611c88565b8361198e565b6000808060001985870986860292508281109083900303905080611766576000841161175b57600080fd5b508290049050610127565b80841161177257600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000826001600160a01b0316846001600160a01b031611156117fa579192915b600061181d856001600160a01b0316856001600160a01b0316600160601b611730565b905061157561183884838888036001600160a01b0316611730565b61199f565b6000826001600160a01b0316846001600160a01b0316111561185d579192915b61187a61183883600160601b8787036001600160a01b0316611730565b949350505050565b6000826001600160a01b0316846001600160a01b031611156118a2579192915b836001600160a01b03166118db606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316611730565b816118e257fe5b04949350505050565b6000826001600160a01b0316846001600160a01b0316111561190b579192915b61187a826001600160801b03168585036001600160a01b0316600160601b611730565b60006101278284601203600a0a6119ba565b6000828284031115611953576000610127565b50900390565b6000670de0b6b3a764000061197f61197185856119ba565b6706f05b59d3b200006119f1565b8161198657fe5b049392505050565b600082601203600a0a828161198657fe5b806001600160801b03811681146119b557600080fd5b919050565b60008115806119d5575050808202828282816119d257fe5b04145b6101395760405162461bcd60e51b815260040161060b90611ecf565b808201828110156101395760405162461bcd60e51b815260040161060b90611ecf565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b60405180604001604052806002906020820280368337509192915050565b80356119b581612015565b80516119b581612015565b80356119b58161202d565b80516119b58161202d565b80516001600160801b03811681146119b557600080fd5b805161ffff811681146119b557600080fd5b80356119b58161203c565b80516119b58161203c565b600060208284031215611b12578081fd5b815161012781612015565b600060208284031215611b2e578081fd5b81356101278161202d565b600080828403610120811215611b4d578182fd5b61010080821215611b5c578283fd5b604051915080820182811067ffffffffffffffff82111715611b7a57fe5b604052611b8685611a96565b8252611b9460208601611a96565b6020830152611ba560408601611aeb565b6040830152611bb660608601611aac565b6060830152611bc760808601611aac565b608083015260a085013560a083015260c085013560c083015260e085013560e0830152819350611bf8818601611a96565b925050509250929050565b600060208284031215611c14578081fd5b813561012781612015565b600080600080600060a08688031215611c36578081fd5b8551611c4181612015565b6020870151909550611c528161202d565b9350611c6060408701611ad9565b9250611c6e60608701611ad9565b9150611c7c60808701611ad9565b90509295509295909350565b600060208284031215611c99578081fd5b5051919050565b60008060408385031215611cb2578182fd5b823591506020830135611cc481612015565b809150509250929050565b6000806000806000806000806000806000806101808d8f031215611cf1578687fd5b8c516bffffffffffffffffffffffff81168114611d0c578788fd5b9b50611d1a60208e01611aa1565b9a50611d2860408e01611aa1565b9950611d3660608e01611aa1565b9850611d4460808e01611af6565b9750611d5260a08e01611ab7565b9650611d6060c08e01611ab7565b9550611d6e60e08e01611ac2565b94506101008d015193506101208d01519250611d8d6101408e01611ac2565b9150611d9c6101608e01611ac2565b90509295989b509295989b509295989b565b6001600160a01b03169052565b60020b9052565b6001600160801b03169052565b62ffffff169052565b6001600160a01b039b8c168152998b1660208b01529790991660408901526060880195909552608087019390935260a086019190915260c085015260e08401526101008301526101208201929092526101408101919091526101600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03978816815295909616602086015260408501939093526060840191909152608083015260a082015260c081019190915260e00190565b60029190910b815260200190565b6020808252600d908201526c6d6174682d6e6f742d7361666560981b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b6020808252600190820152602960f91b604082015260600190565b600061018082019050611f40828451611dae565b6020830151611f526020840182611dae565b506040830151611f656040840182611dae565b506060830151611f786060840182611dcf565b506080830151611f8b6080840182611dbb565b5060a0830151611f9e60a0840182611dbb565b5060c0830151611fb160c0840182611dbb565b5060e0830151611fc460e0840182611dc2565b5061010083810151908301526101208084015190830152610140808401519083015261016092830151929091019190915290565b6001600160a01b0391909116815260200190565b90815260200190565b6001600160a01b038116811461202a57600080fd5b50565b8060020b811461202a57600080fd5b62ffffff8116811461202a57600080fdfea264697066735822122087196395dfff3ac12198e0650624d77a8da5cd6a57b1ab96bc8bdc97aa79160e64736f6c63430007060033