0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61220680620000ee6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638081be911161011a578063b1d1196f116100ad578063d877ee1d1161007c578063d877ee1d14610537578063deb61c1514610540578063e5df8b84146105b9578063e8575a7f146105cc578063f2fde38b146105df57600080fd5b8063b1d1196f146104bb578063bf7e2c7f146104ce578063c0dce37f146104d7578063c909c3b1146104ea57600080fd5b8063a09c4f68116100e9578063a09c4f6814610462578063a4f9edbf14610475578063a77a81d014610488578063ab2f3ad41461049b57600080fd5b80638081be91146104215780638da5cb5b1461042b578063918f84bf1461043c57806397e39fef1461044f57600080fd5b806353a8b3201161019d5780636d4ae6801161016c5780636d4ae680146103d3578063715018a6146103e857806372d75d76146103f057806374ec29a0146104055780637b7a91dd1461041857600080fd5b806353a8b320146102e0578063544ffc9c1461030357806355a9dbd91461037857806366b62955146103a857600080fd5b806333f48a5e116101d957806333f48a5e1461029457806337938ab3146102a75780633a622c52146102ba5780634e2addad146102cd57600080fd5b806302a251a31461020b5780631dc4894714610235578063210a5e871461024a578063250aa6831461025d575b600080fd5b606c5461021b9063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b610248610243366004611891565b6105f2565b005b610248610258366004611891565b610606565b61028661026b3660046118bf565b6001600160a01b03166000908152606b602052604090205490565b60405190815260200161022c565b6102486102a23660046118f5565b610617565b6102486102b53660046118bf565b610628565b6102486102c8366004611891565b61067a565b6102486102db3660046119e8565b610797565b6102f36102ee3660046118f5565b6107cc565b604051901515815260200161022c565b610348610311366004611891565b606960205260009081526040902080546001820154600283015460039093015463ffffffff80841694600160201b90940416929085565b6040805163ffffffff9687168152959094166020860152928401919091526060830152608082015260a00161022c565b61021b6103863660046118f5565b63ffffffff908116600090815260696020526040902054600160201b90041690565b6067546103bb906001600160a01b031681565b6040516001600160a01b03909116815260200161022c565b6103db61085e565b60405161022c9190611b1b565b6102486108c0565b6103f86108d4565b60405161022c9190611b5e565b6102f36104133660046118bf565b61092b565b610286606d5481565b610286620f424081565b6033546001600160a01b03166103bb565b6102f361044a366004611b71565b610936565b6065546103bb906001600160a01b031681565b610248610470366004611891565b610968565b610248610483366004611b93565b610979565b610248610496366004611b93565b610a1a565b6102866104a93660046118bf565b606b6020526000908152604090205481565b6102486104c9366004611c28565b610af9565b61028660685481565b6102486104e53660046118bf565b610b0f565b6102f36104f8366004611c54565b63ffffffff831660009081526069602090815260408083206001600160a01b0386168452600401825280832084845290915290205460ff169392505050565b610286606e5481565b61058861054e3660046118f5565b63ffffffff908116600090815260696020526040902060018101546002820154600383015492549194909382811692600160201b90041690565b6040805195865260208601949094529284019190915263ffffffff908116606084015216608082015260a00161022c565b6103bb6105c7366004611891565b610c99565b6102486105da366004611891565b610cc3565b6102486105ed3660046118bf565b610cd4565b6105fa610d4f565b61060381610da9565b50565b61060e610d4f565b61060381610de5565b61061f610d4f565b61060381610e1a565b610630610d4f565b606780546001600160a01b0319166001600160a01b0383169081179091556040517fac8d831a6ed53a98387842e08d9e0893c1d478f4a3710b254e22bd58c06b269090600090a250565b610682610d4f565b6000805b6066548110156107405782606682815481106106a4576106a4611c95565b90600052602060002001540361072e57606680546106c490600190611cc1565b815481106106d4576106d4611c95565b9060005260206000200154606682815481106106f2576106f2611c95565b600091825260209091200155606680548061070f5761070f611cd4565b6001900381819060005260206000200160009055905560019150610740565b8061073881611cea565b915050610686565b508061075f57604051634b8d041f60e01b815260040160405180910390fd5b6040518281527f50544666722f5a4554f2716b5efb2ce814101451643c8856221fef06b5e9803b906020015b60405180910390a15050565b80518251146107b957604051635435b28960e11b815260040160405180910390fd5b6107c68433858585610e62565b50505050565b63ffffffff8082166000908152606960205260408120549091600160201b9091041643118015610827575063ffffffff8216600090815260696020526040902060038101546002909101546108219190611d03565b606d5411155b8015610858575063ffffffff8216600090815260696020526040902060028101546001909101546108589190610936565b92915050565b6060606a8054806020026020016040519081016040528092919081815260200182805480156108b657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610898575b5050505050905090565b6108c8610d4f565b6108d26000611179565b565b606060668054806020026020016040519081016040528092919081815260200182805480156108b657602002820191906000526020600020905b81548152602001906001019080831161090e575050505050905090565b6000610858826111cb565b6000620f4240606854838561094b9190611d03565b6109559190611d16565b61095f9190611d2d565b90921192915050565b610970610d4f565b610603816112a6565b60008060008060008060008060008980602001905181019061099b9190611e29565b9850985098509850985098509850985098506109e489898989898960008a6040516020016109d0989796959493929190611f08565b604051602081830303815290604052611368565b610a0e82826040516020016109fa929190611f76565b604051602081830303815290604052611593565b50505050505050505050565b6067546001600160a01b03163314610a45576040516358c30ce160e01b815260040160405180910390fd5b600081806020019051810190610a5b9190611fa2565b606c54909150600090610a749063ffffffff1643611fbf565b63ffffffff838116600081815260696020908152604091829020805467ffffffffffffffff1916600160201b87871690810263ffffffff1916919091174390961695909517905581519283528201929092529192507f80d0ad93bba25e53bf67fa9f2d13df59f04795ec2f91b9b3c1f607666daf9d64910160405180910390a1505050565b610b01610d4f565b610b0b8282611653565b5050565b610b17610d4f565b6001600160a01b0381166000908152606b60205260408120549003610b4f57604051634b62f01360e01b815260040160405180910390fd5b6001600160a01b0381166000908152606b60205260408120819055606a54905b81811015610c5f57606a8181548110610b8a57610b8a611c95565b6000918252602090912001546001600160a01b0390811690841603610c57576000610bb6600184611cc1565b9050606a8181548110610bcb57610bcb611c95565b600091825260209091200154606a80546001600160a01b039092169184908110610bf757610bf7611c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606a8181548110610c3857610c38611c95565b600091825260209091200180546001600160a01b031916905550610c5f565b600101610b6f565b506040516001600160a01b03831681527f14236c39816f331325d02993fa15113b739aff01c21ab8f38cc5253205299fb19060200161078b565b606a8181548110610ca957600080fd5b6000918252602090912001546001600160a01b0316905081565b610ccb610d4f565b610603816117c7565b610cdc610d4f565b6001600160a01b038116610d465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61060381611179565b6033546001600160a01b031633146108d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d3d565b606e8190556040518181527f48f79e03d92b3595f74bc3c64746cf148e464673dd036633d34f8afb029482c9906020015b60405180910390a150565b606d8190556040518181527fbc589fccf641d342b7853c2c6faca39631d4d19efbe77e71e5611e31678c220e90602001610dda565b606c805463ffffffff191663ffffffff83169081179091556040519081527f70770ce479f70673c3ed8fff63cfb758a6ffdddc30cab7c63d54c8d825e3948890602001610dda565b6000805b835181101561101e576000848281518110610e8357610e83611c95565b602002602001015190506000848381518110610ea157610ea1611c95565b60200260200101519050816001600160a01b0316636352211e826040518263ffffffff1660e01b8152600401610ed991815260200190565b602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a9190611fe3565b6001600160a01b0316886001600160a01b031614610f4e57604051639b936ae960e01b815260048101829052602401610d3d565b63ffffffff891660009081526069602090815260408083206001600160a01b0386168452600401825280832084845290915290205460ff161515600103610fab57604051639602f71160e01b815260048101829052602401610d3d565b6001600160a01b0382166000908152606b6020526040902054610fce9085611d03565b63ffffffff8a1660009081526069602090815260408083206001600160a01b0390961683526004909501815284822093825292909252919020805460ff1916600190811790915590925001610e66565b50806000036110405760405163923d21f560e01b815260040160405180910390fd5b63ffffffff808716600090815260696020526040812080549092600160201b90910416900361108257604051631dc0650160e31b815260040160405180910390fd5b8054600160201b900463ffffffff164311156110b157604051637a19ed0560e01b815260040160405180910390fd5b60ff85166110d857818160010160008282546110cd9190611d03565b909155506111319050565b60001960ff8616016110f857818160020160008282546110cd9190611d03565b60011960ff86160161111857818160030160008282546110cd9190611d03565b604051636aee863360e11b815260040160405180910390fd5b7f08b8dec2438455807ba4dae88b27939d599858b97389310c0af8f42acd58d6208688878787604051611168959493929190612000565b60405180910390a150505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000805b60665481101561129d57606554606680546001600160a01b0390921691634352409a9186918590811061120457611204611c95565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127d9190612057565b1561128b5750600192915050565b8061129581611cea565b9150506111cf565b50600092915050565b60005b6066548110156113025781606682815481106112c7576112c7611c95565b9060005260206000200154036112f05760405163634a456360e01b815260040160405180910390fd5b806112fa81611cea565b9150506112a9565b50606680546001810182556000919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190556040518181527f30590a8684cec4e5a2b48765f391c996b9a004652478a8f41dc46658ccb699ed90602001610dda565b600054610100900460ff16158080156113885750600054600160ff909116105b806113a25750303b1580156113a2575060005460ff166001145b6114055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610d3d565b6000805460ff191660011790558015611428576000805461ff0019166101001790555b600080600080600080600080898060200190518101906114489190612079565b97509750975097509750975097509750855187511461147a57604051635435b28960e11b815260040160405180910390fd5b60005b87518110156114ca576114c288828151811061149b5761149b611c95565b60200260200101518883815181106114b5576114b5611c95565b6020026020010151611653565b60010161147d565b506114d3611837565b6114dc88610cd4565b6114e585610630565b6114ee83610de5565b6114f782610da9565b611500816117c7565b61150984610e1a565b876001600160a01b0316856001600160a01b03167fca32f512f02914f6bc16a49e786443029061b9adc5a987fd2f6efa56c0116a1660405160405180910390a350505050505050508015610b0b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200161078b565b600080828060200190518101906115aa9190612134565b90925090506001600160a01b0382166115d6576040516350e80d4360e11b815260040160405180910390fd5b606580546001600160a01b0319166001600160a01b038416179055805160000361161357604051632a2b50e760e01b815260040160405180910390fd5b60005b81518110156107c65761164182828151811061163457611634611c95565b60200260200101516112a6565b8061164b81611cea565b915050611616565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa15801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c29190612057565b6116df57604051630f58058360e11b815260040160405180910390fd5b806000036117005760405163923d21f560e01b815260040160405180910390fd5b6001600160a01b0382166000908152606b602052604090205415611737576040516371168e4f60e11b815260040160405180910390fd5b606a8054600181019091557f116fea137db6e131133e7f2bab296045d8f41cc5607279db17b218cab0929a510180546001600160a01b0319166001600160a01b0384169081179091556000818152606b6020908152604091829020849055815192835282018390527fbf2b7f9fc6e849fdef9ff7366d8b63b608bc69ca778200c53d77372d953dc6b6910161078b565b620f42408111806117e457506117e16002620f4240611d2d565b81105b15611802576040516302396b6b60e61b815260040160405180910390fd5b60688190556040518181527f406c076eac4d3dde1c5d55793e80239daa8c60ee971390ce3d9f90ca4206295390602001610dda565b600054610100900460ff1661185e5760405162461bcd60e51b8152600401610d3d90612185565b6108d2600054610100900460ff166118885760405162461bcd60e51b8152600401610d3d90612185565b6108d233611179565b6000602082840312156118a357600080fd5b5035919050565b6001600160a01b038116811461060357600080fd5b6000602082840312156118d157600080fd5b81356118dc816118aa565b9392505050565b63ffffffff8116811461060357600080fd5b60006020828403121561190757600080fd5b81356118dc816118e3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561195157611951611912565b604052919050565b600067ffffffffffffffff82111561197357611973611912565b5060051b60200190565b600082601f83011261198e57600080fd5b813560206119a361199e83611959565b611928565b82815260059290921b840181019181810190868411156119c257600080fd5b8286015b848110156119dd57803583529183019183016119c6565b509695505050505050565b600080600080608085870312156119fe57600080fd5b8435611a09816118e3565b935060208581013560ff81168114611a2057600080fd5b9350604086013567ffffffffffffffff80821115611a3d57600080fd5b818801915088601f830112611a5157600080fd5b8135611a5f61199e82611959565b81815260059190911b8301840190848101908b831115611a7e57600080fd5b938501935b82851015611aa5578435611a96816118aa565b82529385019390850190611a83565b965050506060880135925080831115611abd57600080fd5b5050611acb8782880161197d565b91505092959194509250565b600081518084526020808501945080840160005b83811015611b105781516001600160a01b031687529582019590820190600101611aeb565b509495945050505050565b6020815260006118dc6020830184611ad7565b600081518084526020808501945080840160005b83811015611b1057815187529582019590820190600101611b42565b6020815260006118dc6020830184611b2e565b60008060408385031215611b8457600080fd5b50508035926020909101359150565b60006020808385031215611ba657600080fd5b823567ffffffffffffffff80821115611bbe57600080fd5b818501915085601f830112611bd257600080fd5b813581811115611be457611be4611912565b611bf6601f8201601f19168501611928565b91508082528684828501011115611c0c57600080fd5b8084840185840137600090820190930192909252509392505050565b60008060408385031215611c3b57600080fd5b8235611c46816118aa565b946020939093013593505050565b600080600060608486031215611c6957600080fd5b8335611c74816118e3565b92506020840135611c84816118aa565b929592945050506040919091013590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561085857610858611cab565b634e487b7160e01b600052603160045260246000fd5b600060018201611cfc57611cfc611cab565b5060010190565b8082018082111561085857610858611cab565b808202811582820484141761085857610858611cab565b600082611d4a57634e487b7160e01b600052601260045260246000fd5b500490565b8051611d5a816118aa565b919050565b600082601f830112611d7057600080fd5b81516020611d8061199e83611959565b82815260059290921b84018101918181019086841115611d9f57600080fd5b8286015b848110156119dd578051611db6816118aa565b8352918301918301611da3565b600082601f830112611dd457600080fd5b81516020611de461199e83611959565b82815260059290921b84018101918181019086841115611e0357600080fd5b8286015b848110156119dd5780518352918301918301611e07565b8051611d5a816118e3565b60008060008060008060008060006101208a8c031215611e4857600080fd5b611e518a611d4f565b985060208a015167ffffffffffffffff80821115611e6e57600080fd5b611e7a8d838e01611d5f565b995060408c0151915080821115611e9057600080fd5b611e9c8d838e01611dc3565b9850611eaa60608d01611d4f565b9750611eb860808d01611e1e565b965060a08c0151955060c08c01519450611ed460e08d01611d4f565b93506101008c0151915080821115611eeb57600080fd5b50611ef88c828d01611dc3565b9150509295985092959850929598565b6001600160a01b03898116825261010060208301819052600091611f2e8483018c611ad7565b91508382036040850152611f42828b611b2e565b98166060840152505063ffffffff94909416608085015260a084019290925260ff1660c083015260e0909101529392505050565b6001600160a01b0383168152604060208201819052600090611f9a90830184611b2e565b949350505050565b600060208284031215611fb457600080fd5b81516118dc816118e3565b63ffffffff818116838216019080821115611fdc57611fdc611cab565b5092915050565b600060208284031215611ff557600080fd5b81516118dc816118aa565b6001600160a01b038616815263ffffffff8516602082015260ff8416604082015260a06060820181905260009061203990830185611ad7565b828103608084015261204b8185611b2e565b98975050505050505050565b60006020828403121561206957600080fd5b815180151581146118dc57600080fd5b600080600080600080600080610100898b03121561209657600080fd5b88516120a1816118aa565b60208a015190985067ffffffffffffffff808211156120bf57600080fd5b6120cb8c838d01611d5f565b985060408b01519150808211156120e157600080fd5b506120ee8b828c01611dc3565b96505060608901516120ff816118aa565b60808a0151909550612110816118e3565b60a08a015160c08b015160e0909b0151999c989b5096999598909790945092505050565b6000806040838503121561214757600080fd5b8251612152816118aa565b602084015190925067ffffffffffffffff81111561216f57600080fd5b61217b85828601611dc3565b9150509250929050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea26469706673582212203fe7d7d70da87315089a4e4d61815cc5a6b9b0a117c3c6558ce259443ec5f05664736f6c63430008130033