0x608060405234801561001057600080fd5b5061432a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c80638abf607711610097578063c9d4623f11610066578063c9d4623f1461024a578063e0ff5b8b1461025d578063e6a4390514610270578063f2364e911461028357600080fd5b80638abf6077146101cf5780638f644051146101e2578063c1a3ddb814610202578063c4d66de81461023557600080fd5b80634516333a116100d35780634516333a1461016c57806354fd4d501461017f578063574f2ba3146101ab5780636e300b40146101bc57600080fd5b8062ae3676146100f95780631e3dd18b146101215780633213f7971461014c575b600080fd5b61010c610107366004611035565b610296565b60405190151581526020015b60405180910390f35b61013461012f366004611052565b6102b5565b6040516001600160a01b039091168152602001610118565b61015f61015a36600461106b565b6102df565b60405161011891906110b1565b61013461017a36600461112b565b6104aa565b60015461019690600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610118565b600054604051908152602001610118565b61015f6101ca3660046111ab565b6106a5565b600254610134906001600160a01b031681565b6101f56101f03660046111ab565b6108c5565b6040516101189190611251565b610215610210366004611035565b610a1b565b604080516001600160a01b03938416815292909116602083015201610118565b610248610243366004611035565b610a88565b005b600154610134906001600160a01b031681565b61013461026b366004611052565b610bb2565b61013461027e36600461112b565b610be1565b6101f561029136600461106b565b610c11565b6002546000906102af906001600160a01b031683610d90565b92915050565b600081815481106102c557600080fd5b6000918252602090912001546001600160a01b0316905081565b606060006102ed8484610c11565b9050805167ffffffffffffffff81111561030957610309611164565b60405190808252806020026020018201604052801561033c57816020015b60608152602001906001900390816103275790505b50915060005b81518110156104a257600082828151811061035f5761035f6112ad565b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103d091908101906112c3565b905060008383815181106103e6576103e66112ad565b6020026020010151602001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561042f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261045791908101906112c3565b9050818160405160200161046c92919061134e565b60405160208183030381529060405285848151811061048d5761048d6112ad565b60209081029190910101525050600101610342565b505092915050565b6001546000906001600160a01b031633146104f25760015460405163699838df60e11b81523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b816001600160a01b0316836001600160a01b0316036105375760405163429eb3df60e11b81526001600160a01b038085166004830152831660248201526044016104e9565b60006105438484610df1565b9050803b63ffffffff811615158061056c575060025461056c906001600160a01b031683610d90565b156105a5576040516348bfc2f360e11b81526001600160a01b0380871660048301528086166024830152831660448201526064016104e9565b6002546000906105c7906001600160a01b03166105c28888610eb3565b610efd565b9050806001600160a01b031663754d1d546105e160005490565b60015460405160e084901b6001600160e01b031916815260048101929092526001600160a01b03808b166024840152808a166044840152166064820152608401600060405180830381600087803b15801561063b57600080fd5b505af115801561064f573d6000803e3d6000fd5b5050600080546001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b03851617905550909695505050505050565b6060815167ffffffffffffffff8111156106c1576106c1611164565b6040519080825280602002602001820160405280156106f457816020015b60608152602001906001900390816106df5790505b50905060005b82518110156108bf5760008060008381548110610719576107196112ad565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166339f25d5c6040518163ffffffff1660e01b81526004016040805180830381865afa158015610773573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610797919061138a565b915091506000826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080391908101906112c3565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610845573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086d91908101906112c3565b9050818160405160200161088292919061134e565b6040516020818303038152906040528686815181106108a3576108a36112ad565b60200260200101819052505050505080806001019150506106fa565b50919050565b6060815167ffffffffffffffff8111156108e1576108e1611164565b60405190808252806020026020018201604052801561092657816020015b60408051808201909152600080825260208201528152602001906001900390816108ff5790505b50905060005b82518110156108bf576000806000838154811061094b5761094b6112ad565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166339f25d5c6040518163ffffffff1660e01b81526004016040805180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c9919061138a565b915091506040518060400160405280836001600160a01b03168152602001826001600160a01b0316815250848481518110610a0657610a066112ad565b6020908102919091010152505060010161092c565b600080826001600160a01b03166339f25d5c6040518163ffffffff1660e01b81526004016040805180830381865afa158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f919061138a565b91509150915091565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610ace5750825b905060008267ffffffffffffffff166001148015610aeb5750303b155b905081158015610af9575080155b15610b175760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b4157845460ff60401b1916600160401b1785555b600180546001600160a01b0319166001600160a01b038816179055610b64610f5d565b8315610baa57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000808281548110610bc657610bc66112ad565b6000918252602090912001546001600160a01b031692915050565b6000610bed8383610df1565b90506000816001600160a01b03163b11610c08576000610c0a565b805b9392505050565b60008054606091908311610c255782610c29565b6000545b90506000610c3785836113b9565b67ffffffffffffffff811115610c4f57610c4f611164565b604051908082528060200260200182016040528015610c9457816020015b6040805180820190915260008082526020820152815260200190600190039081610c6d5790505b509050845b82811015610d875760008060008381548110610cb757610cb76112ad565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166339f25d5c6040518163ffffffff1660e01b81526004016040805180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d35919061138a565b915091506040518060400160405280836001600160a01b03168152602001826001600160a01b0316815250848481518110610d7257610d726112ad565b60209081029190910101525050600101610c99565b50949350505050565b6000808360601b905060405169363d3d373d3d3d363d7360b01b815281600a8201526e5af43d82803e903d91602b57fd5bf360881b601e82015260408101602d600082873c600d810151600d83015114815183511416935050505092915050565b600080610dfe8484610eb3565b60025460408051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b6020808301919091526bffffffffffffffffffffffff19606094851b811660348401526e5af43d82803e903d91602b57fd5bf360881b6048840152835180840360370181526057840185528051908301206001600160f81b031960778501523090951b166078830152608c82019490945260ac808201939093528151808203909301835260cc0190528051910120949350505050565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b6000808360601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b6028820152836037826000f5925050813b610f5657600080fd5b5092915050565b60008060405180602001610f7090611010565b601f1982820381018352601f909101166040819052600154686f72646572626f6f6b60b81b60208301526001600160e01b0319600160a01b90910460e01b166029820152909150600090602d01604051602081830303815290604052805190602001209050808251602084016000f59250823b610fec57600080fd5b5050600280546001600160a01b0319166001600160a01b0392909216919091179055565b612f1a806113db83390190565b6001600160a01b038116811461103257600080fd5b50565b60006020828403121561104757600080fd5b8135610c0a8161101d565b60006020828403121561106457600080fd5b5035919050565b6000806040838503121561107e57600080fd5b50508035926020909101359150565b60005b838110156110a8578181015183820152602001611090565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561111e57878503603f19018452815180518087526110ff818989018a850161108d565b601f01601f1916959095018601945092850192908501906001016110d8565b5092979650505050505050565b6000806040838503121561113e57600080fd5b82356111498161101d565b915060208301356111598161101d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111a3576111a3611164565b604052919050565b600060208083850312156111be57600080fd5b823567ffffffffffffffff808211156111d657600080fd5b818501915085601f8301126111ea57600080fd5b8135818111156111fc576111fc611164565b8060051b915061120d84830161117a565b818152918301840191848101908884111561122757600080fd5b938501935b838510156112455784358252938501939085019061122c565b98975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156112a057815180516001600160a01b039081168652908701511686850152928401929085019060010161126e565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156112d557600080fd5b815167ffffffffffffffff808211156112ed57600080fd5b818401915084601f83011261130157600080fd5b81518181111561131357611313611164565b611326601f8201601f191660200161117a565b915080825285602082850101111561133d57600080fd5b610d8781602084016020860161108d565b6000835161136081846020880161108d565b602f60f81b908301908152835161137e81600184016020880161108d565b01600101949350505050565b6000806040838503121561139d57600080fd5b82516113a88161101d565b60208401519092506111598161101d565b818103818111156102af57634e487b7160e01b600052601160045260246000fdfe60806040526000805460ff1916905534801561001a57600080fd5b50612ef08061002a6000396000f3fe6080604052600436106101d15760003560e01c8063801d9bbd116100f7578063dec5e35a11610095578063f46760c211610064578063f46760c214610613578063f6b1d5b914610640578063fae7cfdc14610660578063fc8109041461068057600080fd5b8063dec5e35a1461059e578063eaa3c1c1146105b3578063ec957b82146105d3578063f3eb41a9146105f357600080fd5b8063b8b23831116100d1578063b8b2383114610509578063bb3cb9a614610531578063bd25b9c41461055e578063d0c48a831461057e57600080fd5b8063801d9bbd146104b45780639c0e0bf1146104c9578063a2ed19d5146104e957600080fd5b806360519c9d1161016f5780636cde36531161013e5780636cde36531461043f5780636e5b0f001461045f578063754d1d54146104745780637a67624f1461049457600080fd5b806360519c9d14610383578063633ab49b146103c757806366625868146103ff578063694867001461041f57600080fd5b806337632e3a116101ab57806337632e3a146102f457806339f25d5c1461030957806354c12a7114610336578063588d46481461036357600080fd5b806304717aca14610268578063158ef93e146102a25780631c045f87146102c657600080fd5b366102635760048054604080516315ab88c960e31b815290516001600160a01b039092169263ad5c46489282820192602092908290030181865afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102419190612748565b6001600160a01b0316336001600160a01b03161461026157610261612765565b005b600080fd5b34801561027457600080fd5b5061028861028336600461277b565b6106ad565b60405163ffffffff90911681526020015b60405180910390f35b3480156102ae57600080fd5b5060005460ff165b6040519015158152602001610299565b3480156102d257600080fd5b506102e66102e13660046127be565b610747565b604051908152602001610299565b34801561030057600080fd5b506102e661075e565b34801561031557600080fd5b50600254600354604051610299926001600160a01b039081169216906127ea565b34801561034257600080fd5b50610356610351366004612818565b61076f565b6040516102999190612867565b34801561036f57600080fd5b506102e661037e3660046128d2565b6107a0565b34801561038f57600080fd5b506103a361039e366004612902565b6107b6565b6040805163ffffffff90941684526020840192909252151590820152606001610299565b3480156103d357600080fd5b506103e76103e2366004612953565b61081e565b6040516001600160a01b039091168152602001610299565b34801561040b57600080fd5b506102e661041a3660046129b9565b610980565b34801561042b57600080fd5b506103a361043a3660046129d6565b610a45565b34801561044b57600080fd5b5061028861045a3660046127be565b610b71565b34801561046b57600080fd5b506009546102e6565b34801561048057600080fd5b5061026161048f3660046129f6565b610bb1565b3480156104a057600080fd5b506102886104af366004612a3e565b610ce2565b3480156104c057600080fd5b506008546102e6565b3480156104d557600080fd5b506102e66104e4366004612a7c565b610d3c565b3480156104f557600080fd5b506102e66105043660046128d2565b610e32565b34801561051557600080fd5b5060095460085460408051928352602083019190915201610299565b34801561053d57600080fd5b5061055161054c366004612ab5565b610e44565b6040516102999190612aea565b34801561056a57600080fd5b5061028861057936600461277b565b610e67565b34801561058a57600080fd5b50610261610599366004612b14565b610ef1565b3480156105aa57600080fd5b50600a546102e6565b3480156105bf57600080fd5b506102e66105ce366004612a3e565b610f56565b3480156105df57600080fd5b506102e66105ee366004612b2d565b610fa9565b3480156105ff57600080fd5b5061035661060e366004612a3e565b6110f3565b34801561061f57600080fd5b5061063361062e366004612b6b565b611112565b6040516102999190612ba7565b34801561064c57600080fd5b506102b661065b3660046127be565b61112d565b34801561066c57600080fd5b5061063361067b366004612ab5565b61116a565b34801561068c57600080fd5b506106a061069b366004612a3e565b611181565b6040516102999190612bdf565b6004546000906001600160a01b031633146106f2576004805460405163699838df60e11b81526106e99233926001600160a01b031691016127ea565b60405180910390fd5b6106fc6001610980565b5061070a600f8585856111a0565b60008481526011602052604090205490915063ffffffff1661073357610733600660018561129c565b610740600f848385611447565b9392505050565b600061075560068484611683565b90505b92915050565b600061076a60066116b7565b905090565b60608461078857610783600b8585856117b1565b610795565b610795600f8585856117b1565b90505b949350505050565b60006107556107af60066116b7565b8484610d3c565b6000806000836107d0576107cb878787610ce2565b6107d2565b845b92506000876107eb576107e6600b85611978565b6107f6565b6107f6600f85611978565b90506108088782604001518a15610d3c565b9250505063ffffffff8216159450945094915050565b6004546000906001600160a01b0316331461085a576004805460405163699838df60e11b81526106e99233926001600160a01b031691016127ea565b6000856108715761086c600b88611978565b61087c565b61087c600f88611978565b9050600061088f82602001518689610d3c565b905060006108a3836020015160018a610d3c565b90508715610911576000806108bc600f8c86868b6119c7565b60025487519294509092506108dd916001600160a01b03909116908a611a86565b506003546108f5906001600160a01b03168a84611a86565b50801561090a5761090860068b83611baa565b505b5050610973565b600080610922600b8c86868b6119c7565b6003548751929450909250610943916001600160a01b03909116908a611a86565b5060025461095b906001600160a01b03168a84611a86565b5080156109705761096e60068b83611baa565b505b50505b5050519695505050505050565b60008161098f57600854610993565b6009545b90506000826109b6576000828152600d602052604090205463ffffffff166109cc565b60008281526011602052604090205463ffffffff165b90505b63ffffffff81161580156109e257508115155b15610a3f5782610a06576000828152600d602052604090205463ffffffff16610a1c565b60008281526011602052604090205463ffffffff165b90508063ffffffff16600003610a3a57610a37600684611e68565b91505b6109cf565b50919050565b600454600090819081906001600160a01b03163314610a85576004805460405163699838df60e11b81526106e99233926001600160a01b031691016127ea565b85610aa4576000858152600d602052604090205463ffffffff16610aba565b60008581526011602052604090205463ffffffff165b9250600086610ad357610ace600b85611978565b610ade565b610ade600f85611978565b9050610af08682604001518915610d3c565b9250848311610b625786610b0e57610b09600b87611ebe565b610b19565b610b19600f87611ebe565b50610b24878761112d565b15610b585786610b4457610b3a60068888611683565b6008819055610b56565b610b5060068888611683565b60098190555b505b5060019050610b68565b50600090505b93509350939050565b600082610b97576000828152600d602052604090205463ffffffff16610755565b610755565b60008281526011602052604090205463ffffffff16610755565b60005460ff1615610bc157600080fd5b6000610bcc84611f3d565b90506000610bd984611f3d565b905060128260ff161180610bf0575060128160ff16115b15610c1b5760405163047e54d360e31b815260ff8084166004830152821660248201526044016106e9565b600080610c28848461200e565b9092509050610c3882600a612d17565b60058054921515600160401b0268ffffffffffffffffff1990931667ffffffffffffffff92909216919091179190911790555050604080516080810182528681526001600160a01b0395861660208201819052948616918101829052929094166060909201829052506001938455600280546001600160a01b031990811690931790556003805483169093179092556004805490911690911790556000805460ff19169091179055565b600083610d15576000838152600b6020908152604080832063ffffffff808716855292529091205416610798565b610798565b6000838152600f6020908152604080832063ffffffff808716855292529091205416610798565b60008115610dc157600554600160401b900460ff16610d8a5760055467ffffffffffffffff166305f5e100610d718686612d26565b610d7b9190612d3d565b610d859190612d26565b610dba565b60055467ffffffffffffffff166305f5e100610da68686612d26565b610db09190612d3d565b610dba9190612d3d565b9050610740565b600554600160401b900460ff16610e025760055467ffffffffffffffff1684610dee856305f5e100612d26565b610df89190612d3d565b610d859190612d3d565b60055467ffffffffffffffff1684610e1e856305f5e100612d26565b610e289190612d3d565b610dba9190612d26565b60006107556006600401548484610d3c565b610e4c612709565b82610e5c57610b92600b83611978565b610755600f83611978565b6004546000906001600160a01b03163314610ea3576004805460405163699838df60e11b81526106e99233926001600160a01b031691016127ea565b610ead6000610980565b50610ebb600b8585856111a0565b6000848152600d602052604090205490915063ffffffff16610ee457610ee4600660008561129c565b610740600b848385611447565b6004546001600160a01b03163314610f2a576004805460405163699838df60e11b81526106e99233926001600160a01b031691016127ea565b80600003610f4e5760405163d173d09f60e01b8152600481018290526024016106e9565b600a55565b50565b60008084610f6e57610f69600b84611978565b610f79565b610f79600f84611978565b90508060400151600003610f91576000915050610740565b610fa084826040015187610d3c565b95945050505050565b6004546000906001600160a01b03163314610fe5576004805460405163699838df60e11b81526106e99233926001600160a01b031691016127ea565b600084610ffc57610ff7600b85611978565b611007565b611007600f85611978565b9050600061101986836020015161112d565b9050836001600160a01b031682600001516001600160a01b03161461105557815160405163699838df60e11b81526106e99186916004016127ea565b60008661106c57611067600b8761204b565b611077565b611077600f8761204b565b9050866110a057600254604084015161109b916001600160a01b0316908790611a86565b6110bd565b60035460408401516110bd916001600160a01b0316908790611a86565b50811580156110cb57508015155b156110e55760208301516110e3906006908990611baa565b505b505060400151949350505050565b60608361110657610d10600b84846121c9565b610798600f84846121c9565b606061079860068563ffffffff808716908681169061230f16565b60008261114f576000828152600d602052604090205463ffffffff1615610755565b60008281526011602052604090205463ffffffff1615610755565b606061075560068463ffffffff8086169061245016565b60608361119457610d10600b8484612524565b610798600f8484612524565b6000826000036111c65760405163d173d09f60e01b8152600481018490526024016106e9565b604080516060810182526001600160a01b038616815260208101859052908101839052600386015463ffffffff16158061120a5750600386015463ffffffff908116145b6112295760038601546112249063ffffffff166001612d5f565b61122c565b60015b60038701805463ffffffff191663ffffffff9283169081178255600090815260019889016020908152604091829020855181546001600160a01b0319166001600160a01b039091161781559085015199810199909955929092015160029097019690965554909416949350505050565b81156113815760038301546000908015806112b657508083115b156112db57600385018390556000928352600190940160205250604090209190915550565b801561137a576000818152600186016020526040902054808410156113155760009182526001860160205260409091205490915081611374565b8084111561136c578060000361134857506000908152600190940160205250604080842082905590835282209190915550565b60009182526001909501602052604080822084905592815291909120929092555050565b505050505050565b506112db565b5050505050565b600283015460009080158061139557508083105b156113b85760028501839055600092835260209490945250604090209190915550565b801561137a576000818152602086905260409020548084111561141757806000036113fe5750600090815260209490945250604080842082905590835282209190915550565b6000918252602086905260409091205490915081611441565b8084101561136c576000918252602095909552604080822084905592815291909120929092555050565b506113b8565b600083815260028501602090815260408083205491879052822063ffffffff9091169060018701821580611494575063ffffffff8316600090815260018901602052604090206002015485115b156114e2575060008681526002880160209081526040808320805463ffffffff1990811663ffffffff8b8116918217909355855294909252909120805490921692169190911790555061167d565b63ffffffff8316156116785763ffffffff8084166000908152602084815260408083205490931680835290849052919020600201548610156115425763ffffffff9384166000908152602084905260409020549094509092169183611672565b63ffffffff81166000908152602083905260409020600201548611156116055763ffffffff811660009081526020839052604081206002015490036115bf57505063ffffffff91821660009081526020919091526040808220805493871663ffffffff19948516811790915582529020805490911690555061167d565b63ffffffff93841660009081526020939093526040808420805463ffffffff199081168a88169081179092559085529320805490931693169290921790555061167d9050565b63ffffffff811660009081526020839052604090206002015486036116725763ffffffff9081166000818152602094909452604080852080548a851680885292872080549190951663ffffffff19918216179094559190945280549091169092179091555061167d915050565b506114e2565b505050505b50505050565b600082156116a257506000818152600184016020526040902054610740565b50600081815260208490526040902054610740565b6000816003015460001480156116cf57506002820154155b1561172257816004015460000361171a576003820154600283015460048085015460405163123d379f60e11b81526106e9949392019283526020830191909152604082015260600190565b506004015490565b60038201541580159061173757506002820154155b156117665760048201541561175e5781600301548260040154101561171a57506003015490565b506003015490565b600382015415801561177b5750600282015415155b1561171a576004820154156117a45781600201548260040154111561171a578160020154610758565b506002015490565b919050565b600083815260028501602052604081205460609163ffffffff909116906117d88585612d83565b63ffffffff1667ffffffffffffffff8111156117f6576117f6612da0565b60405190808252806020026020018201604052801561182f57816020015b61181c612709565b8152602001906001900390816118145790505b50905060005b63ffffffff83161580159061185557508563ffffffff168163ffffffff16105b1561188f5760008781526020898152604080832063ffffffff9687168452909152902054909216918061188781612db6565b915050611835565b8263ffffffff166000036118a7575091506107989050565b63ffffffff8316158015906118c757508463ffffffff168163ffffffff16105b1561196d5763ffffffff80841660009081526001808b016020908152604092839020835160608101855281546001600160a01b031681529281015491830191909152600201549181019190915283519091849190841690811061192c5761192c612dd9565b6020908102919091018101919091526000888152898252604080822063ffffffff96871683529092522054909216918061196581612db6565b9150506118a7565b509695505050505050565b611980612709565b5063ffffffff16600090815260019182016020908152604091829020825160608101845281546001600160a01b031681529381015491840191909152600201549082015290565b63ffffffff84166000908152600186016020526040812060020154819081908611611a175763ffffffff87166000908152600189016020526040902060020154611a12908790612def565b611a1a565b60005b90508481111580611a285750835b15611a5d575063ffffffff86166000908152600188016020526040902060020154611a53888861204b565b9092509050611a7c565b63ffffffff871660009081526001890160205260409020600201558491505b9550959350505050565b60048054604080516315ab88c960e31b8152905160009384936001600160a01b03169263ad5c464892818301926020928290030181865afa158015611acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af39190612748565b9050806001600160a01b0316856001600160a01b031603611b9557604051632e1a7d4d60e01b8152600481018490526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015611b5057600080fd5b505af1158015611b64573d6000803e3d6000fd5b50506040516001600160a01b038716925085156108fc02915085906000818181858888f19350505050915050610740565b611ba0858585612610565b6001915050610740565b600081600003611bbc57506000610740565b8215611d1a576003840154600090801580611bd657508084115b15611be657600092505050610740565b8015801590611bf457508084115b15611d1357600081815260018701602052604090205480851015611c2d5760009182526001870160205260409091205490915081611d0d565b80851115611ce05780600003611c8a57848203611c7e5760008381526001880160205260408082208290558382528120556003870154859003611c7257600060038801555b60019350505050610740565b60009350505050610740565b848203611c7e578215611cbd57600092835260018088016020526040808520929092559183528220919091559050610740565b600387015560009081526001808701602052604082209190915591506107409050565b60008181526001808901602052604080832080549584529083209490945591815290915591506107409050565b50611be6565b5050611e5e565b6002840154600090801580611d2e57508084105b15611d3e57600092505050610740565b8015801590611d4c57508084105b15611e5b5760008181526020879052604090205480851115611dc75780600003611dae57848203611c7e576000838152602088905260408082208290558382528120556002870154859003611c72576000600288015560019350505050610740565b6000918252602087905260409091205490915081611e55565b80851015611e2b57848203611c7e578215611e0557600090815260208790526040808220549382528082209390935590815290812055506001610740565b600090815260208790526040808220546002890155918152908120555060019050610740565b60008181526020889052604080822080549483529082209390935590815290555060019050610740565b50611d3e565b50505b5060019392505050565b60008115611e8e5760038301805460009081526001850160205260409020549055611ea6565b60028301805460009081526020859052604090205490555b81611eb5578260020154610755565b50506003015490565b600081815260028301602052604081205463ffffffff16808203611ee6576000915050610758565b60008381526020858152604080832063ffffffff94851680855281845282852080549886526002909901845291842080549790951663ffffffff199788161790945591829052919091528354909216909255919050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b03861691611f839190612e02565b600060405180830381855afa9150503d8060008114611fbe576040519150601f19603f3d011682016040523d82523d6000602084013e611fc3565b606091505b509150915081611ffa5760405162461bcd60e51b8152602060048201526002602482015261222360f11b60448201526064016106e9565b808060200190518101906107989190612e31565b6000808260ff168460ff161161202d576120288484612e54565b612037565b6120378385612e54565b8360ff168560ff1611915091509250929050565b63ffffffff808216600081815260018086016020908152604080842090920154808452600288018252828420549188905291832092949193859391909216918391829184036120e05763ffffffff848116600090815260208381526040808320548a845260028e018352818420805491861663ffffffff19928316179055938c1683529084905290208054909116905561216a565b63ffffffff84161561216a5763ffffffff80851660009081526020839052604090205481169350881683036121535763ffffffff838116600090815260208390526040808220548784168352818320805491851663ffffffff19928316179055928b16825290208054909116905561216a565b8394508293508161216390612e6d565b91506120e0565b63ffffffff80891660009081526001808c016020908152604080842080546001600160a01b031916815592830184905560029283018490558a8452918d01905290205416156121ba5760006121bc565b855b9998505050505050505050565b600082815260028401602052604081205460609163ffffffff91821691841667ffffffffffffffff81111561220057612200612da0565b60405190808252806020026020018201604052801561223957816020015b612226612709565b81526020019060019003908161221e5790505b50905060005b63ffffffff83161580159061225f57508463ffffffff168163ffffffff16105b156123055763ffffffff80841660009081526001808a016020908152604092839020835160608101855281546001600160a01b03168152928101549183019190915260020154918101919091528351909184919084169081106122c4576122c4612dd9565b6020908102919091018101919091526000878152888252604080822063ffffffff9687168352909252205490921691806122fd81612db6565b91505061223f565b5095945050505050565b606060008061231e8585612def565b67ffffffffffffffff81111561233657612336612da0565b60405190808252806020026020018201604052801561235f578160200160208202803683370190505b509050600086612373578760020154612379565b87600301545b90505b801580159061238a57508583105b156123ce578261239981612e84565b935050866123b5576000818152602089905260409020546123c7565b60008181526001890160205260409020545b905061237c565b806000036123e0575091506107989050565b80158015906123ee57508483105b1561196d578082848151811061240657612406612dd9565b60209081029190910101528261241b81612e84565b9350508661243757600081815260208990526040902054612449565b60008181526001890160205260409020545b90506123e0565b60606000808367ffffffffffffffff81111561246e5761246e612da0565b604051908082528060200260200182016040528015612497578160200160208202803683370190505b5090506000856124ab5786600201546124b1565b86600301545b90505b80158015906124c257508483105b1561230557808284815181106124da576124da612dd9565b6020908102919091010152826124ef81612e84565b9350508561250b5760008181526020889052604090205461251d565b60008181526001880160205260409020545b90506124b4565b600082815260028401602052604081205460609163ffffffff91821691841667ffffffffffffffff81111561255b5761255b612da0565b604051908082528060200260200182016040528015612584578160200160208202803683370190505b50905060005b63ffffffff8316158015906125aa57508463ffffffff168163ffffffff16105b156123055782828263ffffffff16815181106125c8576125c8612dd9565b63ffffffff928316602091820292909201810191909152600088815289825260408082209684168252959091529390932054909216918061260881612db6565b91505061258a565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161266c9190612e02565b6000604051808303816000865af19150503d80600081146126a9576040519150601f19603f3d011682016040523d82523d6000602084013e6126ae565b606091505b50915091508180156126d85750805115806126d85750808060200190518101906126d89190612e9d565b61137a5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b60448201526064016106e9565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b0381168114610f5357600080fd5b60006020828403121561275a57600080fd5b815161074081612733565b634e487b7160e01b600052600160045260246000fd5b60008060006060848603121561279057600080fd5b833561279b81612733565b95602085013595506040909401359392505050565b8015158114610f5357600080fd5b600080604083850312156127d157600080fd5b82356127dc816127b0565b946020939093013593505050565b6001600160a01b0392831681529116602082015260400190565b803563ffffffff811681146117ac57600080fd5b6000806000806080858703121561282e57600080fd5b8435612839816127b0565b93506020850135925061284e60408601612804565b915061285c60608601612804565b905092959194509250565b6020808252825182820181905260009190848201906040850190845b818110156128c6576128b383855180516001600160a01b0316825260208082015190830152604090810151910152565b9284019260609290920191600101612883565b50909695505050505050565b600080604083850312156128e557600080fd5b8235915060208301356128f7816127b0565b809150509250929050565b6000806000806080858703121561291857600080fd5b8435612923816127b0565b93506020850135925061293860408601612804565b91506060850135612948816127b0565b939692955090935050565b600080600080600060a0868803121561296b57600080fd5b61297486612804565b94506020860135612984816127b0565b9350604086013561299481612733565b92506060860135915060808601356129ab816127b0565b809150509295509295909350565b6000602082840312156129cb57600080fd5b8135610740816127b0565b6000806000606084860312156129eb57600080fd5b833561279b816127b0565b60008060008060808587031215612a0c57600080fd5b843593506020850135612a1e81612733565b92506040850135612a2e81612733565b9150606085013561294881612733565b600080600060608486031215612a5357600080fd5b8335612a5e816127b0565b925060208401359150612a7360408501612804565b90509250925092565b600080600060608486031215612a9157600080fd5b83359250602084013591506040840135612aaa816127b0565b809150509250925092565b60008060408385031215612ac857600080fd5b8235612ad3816127b0565b9150612ae160208401612804565b90509250929050565b81516001600160a01b03168152602080830151908201526040808301519082015260608101610758565b600060208284031215612b2657600080fd5b5035919050565b600080600060608486031215612b4257600080fd5b8335612b4d816127b0565b9250612b5b60208501612804565b91506040840135612aaa81612733565b600080600060608486031215612b8057600080fd5b8335612b8b816127b0565b9250612b9960208501612804565b9150612a7360408501612804565b6020808252825182820181905260009190848201906040850190845b818110156128c657835183529284019291840191600101612bc3565b6020808252825182820181905260009190848201906040850190845b818110156128c657835163ffffffff1683529284019291840191600101612bfb565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612c6e578160001904821115612c5457612c54612c1d565b80851615612c6157918102915b93841c9390800290612c38565b509250929050565b600082612c8557506001610758565b81612c9257506000610758565b8160018114612ca85760028114612cb257612cce565b6001915050610758565b60ff841115612cc357612cc3612c1d565b50506001821b610758565b5060208310610133831016604e8410600b8410161715612cf1575081810a610758565b612cfb8383612c33565b8060001904821115612d0f57612d0f612c1d565b029392505050565b600061075560ff841683612c76565b808202811582820484141761075857610758612c1d565b600082612d5a57634e487b7160e01b600052601260045260246000fd5b500490565b63ffffffff818116838216019080821115612d7c57612d7c612c1d565b5092915050565b63ffffffff828116828216039080821115612d7c57612d7c612c1d565b634e487b7160e01b600052604160045260246000fd5b600063ffffffff808316818103612dcf57612dcf612c1d565b6001019392505050565b634e487b7160e01b600052603260045260246000fd5b8181038181111561075857610758612c1d565b6000825160005b81811015612e235760208186018101518583015201612e09565b506000920191825250919050565b600060208284031215612e4357600080fd5b815160ff8116811461074057600080fd5b60ff828116828216039081111561075857610758612c1d565b600061ffff808316818103612dcf57612dcf612c1d565b600060018201612e9657612e96612c1d565b5060010190565b600060208284031215612eaf57600080fd5b8151610740816127b056fea2646970667358221220be84918a38c2d9c2134c76dd0872fc155f097aa61eff4e1fb25752937464f19a64736f6c63430008180033a26469706673582212209eed33a9a0d70a416aea3735fe79212a44394d6784313580fd9398619b3f13f364736f6c63430008180033