0x608060405234801561001057600080fd5b50600080546001600160a01b031916331790556159fa80620000336000396000f3fe6080604052600436106102675760003560e01c8063893d20e811610144578063d638fdba116100b6578063ed29bffd1161007a578063ed29bffd14610768578063edbf96921461077d578063edc922a91461079d578063ee3ed64b146107bf578063f2fde38b146107df578063f633fdf3146107ff57610267565b8063d638fdba146106c8578063d913a157146106db578063de53b2e514610708578063e28a2a9414610728578063e6ae74c21461074857610267565b8063c46087ab11610108578063c46087ab1461060d578063c6df39861461062d578063c85325891461037e578063d246ecbc1461065b578063d44897101461067b578063d4b2464e146106a857610267565b8063893d20e8146105765780638da5cb5b14610598578063a52d9d01146105ad578063a716baf7146105cd578063b9dd0ddd146105ed57610267565b80633cffa233116101dd57806367f7079c116101a157806367f7079c146104c157806370a08231146104d6578063742e6969146104f657806378bea80b146105165780637e7366a614610536578063805b38241461055657610267565b80633cffa233146103f55780635367428814610423578063582e8c7a14610454578063628b1a3c1461047457806365dc58141461049457610267565b806327e235e31161022f57806327e235e3146103315780632843b78a1461035e5780632855d0d51461037e5780633345f6bd146103ab5780633976b5fb146103cb5780633ccfd60b146103e057610267565b806302f8542e1461026c57806307f731011461028e5780630bbb8c93146102c457806317a656c0146102e45780631b2eb61e14610304575b600080fd5b34801561027857600080fd5b5061028c610287366004614e28565b61081f565b005b34801561029a57600080fd5b506102ae6102a9366004615164565b610a33565b6040516102bb919061558f565b60405180910390f35b3480156102d057600080fd5b506102ae6102df366004614cc9565b610b25565b3480156102f057600080fd5b506102ae6102ff3660046151aa565b610b95565b34801561031057600080fd5b5061032461031f3660046149fe565b610cb1565b6040516102bb9190615828565b34801561033d57600080fd5b5061035161034c366004614963565b610df4565b6040516102bb919061559a565b34801561036a57600080fd5b50610351610379366004614963565b610e06565b34801561038a57600080fd5b5061039e610399366004614963565b610e25565b6040516102bb9190615551565b3480156103b757600080fd5b506102ae6103c63660046149d3565b610ebd565b3480156103d757600080fd5b50610351610fcf565b3480156103ec57600080fd5b5061028c610fd3565b34801561040157600080fd5b50610415610410366004614c79565b611060565b6040516102bb929190615917565b34801561042f57600080fd5b5061044361043e366004614b54565b6111e3565b6040516102bb959493929190615886565b34801561046057600080fd5b506102ae61046f366004614cc9565b611301565b34801561048057600080fd5b506102ae61048f366004614963565b61135a565b3480156104a057600080fd5b506104b46104af366004614963565b61137d565b6040516102bb9190615906565b3480156104cd57600080fd5b506102ae61141e565b3480156104e257600080fd5b506103516104f1366004614963565b611488565b34801561050257600080fd5b506103516105113660046149bf565b6114a3565b34801561052257600080fd5b5061028c610531366004614e28565b6114f9565b34801561054257600080fd5b506104b4610551366004614963565b61161c565b34801561056257600080fd5b506102ae610571366004614bbb565b61163d565b34801561058257600080fd5b5061058b6118b3565b6040516102bb91906154a1565b3480156105a457600080fd5b5061058b6118c2565b3480156105b957600080fd5b506102ae6105c8366004614a8c565b6118d1565b3480156105d957600080fd5b506102ae6105e836600461497f565b61198e565b3480156105f957600080fd5b506102ae6106083660046149d3565b611aa6565b34801561061957600080fd5b506102ae610628366004614963565b611b05565b34801561063957600080fd5b5061064d610648366004614c79565b611b32565b6040516102bb9291906158f5565b34801561066757600080fd5b5061039e6106763660046149d3565b611be3565b34801561068757600080fd5b5061069b610696366004614afe565b611c86565b6040516102bb91906158e7565b3480156106b457600080fd5b506102ae6106c3366004614d56565b611d76565b61028c6106d6366004614e5e565b611f1c565b3480156106e757600080fd5b506106fb6106f63660046149d3565b61246a565b6040516102bb9190615848565b34801561071457600080fd5b5061028c610723366004614cb1565b6124e9565b34801561073457600080fd5b50610351610743366004614a3f565b612534565b34801561075457600080fd5b506102ae610763366004615261565b6125a1565b34801561077457600080fd5b506102ae612799565b34801561078957600080fd5b506102ae610798366004614963565b6127dd565b3480156107a957600080fd5b506107b2612800565b6040516102bb9190615504565b3480156107cb57600080fd5b5061028c6107da366004614f29565b612862565b3480156107eb57600080fd5b5061028c6107fa366004614963565b61301c565b34801561080b57600080fd5b5061028c61081a36600461504d565b6130b4565b3360009081526003602052604090205463ffffffff1661083e57600080fd5b33600090815260036020818152604080842087855290920190529020805461086557600080fd5b63ffffffff8316610877578260010192505b6000816000018054806020026020016040519081016040528092919081815260200182805480156108f357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116108b65790505b5050505050905060008160018351038151811061090c57fe5b60200260200101519050438163ffffffff161115610967574360009081526001840160205260409020805463ffffffff868116600160201b0263ffffffff60201b1991891663ffffffff199093169290921716179055610a2b565b63ffffffff8082166000818152600186016020526040902054600160201b90049091169081014381116109b957818363ffffffff164303816109a557fe5b0460010190508181028363ffffffff160190505b60008181526001868101602090815260408320805463ffffffff191663ffffffff8c81169190911763ffffffff60201b1916600160201b8c831602179091558854928301895588845292206008820401805460046007909316929092026101000a808402199092169290931602179055505b505050505050565b336000908152600360205260408082209051829160050190610a56908790615482565b90815260200160405180910390208463ffffffff1681548110610a7557fe5b6000918252602080832063ffffffff871684526005600690930201919091019052604081209150815460ff166007811115610aac57fe5b14610ad25760405162461bcd60e51b8152600401610ac9906157a7565b60405180910390fd5b805460ff19166001908117825560405133917f1ed0dfeede93aca193505d2c4448bfa80fc53727e2e524f2596ae333d7f4977c91610b1591899189918991615743565b60405180910390a2509392505050565b3360009081526003602052604081205463ffffffff16610b4457600080fd5b84336001600160a01b03167fcdaff867abac2aaa830f0e81523d81ac4f5a32dbb867445a8be99d0e039e9d61868686604051610b82939291906155a3565b60405180910390a3506001949350505050565b60008163ffffffff1642811115610bab57600080fd5b336000908152600360205260408082209051600590910190610bce908990615482565b90815260200160405180910390208663ffffffff1681548110610bed57fe5b6000918252602080832063ffffffff8916845260056006909302019190910190526040902090506001815460ff166007811115610c2657fe5b1115610c445760405162461bcd60e51b8152600401610ac9906157a7565b8054600264ffffffff001990911661010063ffffffff8716021760ff19168117825560405133917f1ed0dfeede93aca193505d2c4448bfa80fc53727e2e524f2596ae333d7f4977c91610c9c918b918b918b91615743565b60405180910390a25060019695505050505050565b610cb9614572565b6001600160a01b03841660009081526003602081815260408084208785529092019052902063ffffffff8316610db157600081600001805480602002602001604051908101604052809291908181526020018280548015610d6557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610d285790505b5050505050905080600182510381518110610d7c57fe5b60200260200101519350438463ffffffff161115610daf5780600282510381518110610da457fe5b602002602001015193505b505b63ffffffff8084166000908152600190920160209081526040928390208351808501909452548083168452600160201b90049091169082015290505b9392505050565b60066020526000908152604090205481565b6001600160a01b0381166000908152600560205260409020545b919050565b6001600160a01b038116600090815260046020908152604091829020805483518184028101840190945280845260609392830182828015610eb157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610e745790505b50505050509050919050565b33600090815260036020526040812054600160201b900460ff16610ee057600080fd5b3360009081526003602090815260408083206001600160a01b038716845260048101835281842086855283528184206002820190935292208054600160481b900460ff168015610f54575080544390610f4c9063ffffffff80821691600160201b900481169061321c16565b63ffffffff16105b610f5d57600080fd5b81546000808455338152600660205260409020805482019055610f7f82613237565b336001600160a01b03167f4c1442ea070eeee496cf12e2027cb03261bc5f2a987cb4823d88b67207f46c2a82604051610fb8919061559a565b60405180910390a260019450505050505b92915050565b4790565b3360008181526006602052604080822080549083905590519092908390610ff99061549e565b60006040518083038185875af1925050503d8060008114611036576040519150601f19603f3d011682016040523d82523d6000602084013e61103b565b606091505b505090508061105c5760405162461bcd60e51b8152600401610ac99061577e565b5050565b600061106a614589565b6001600160a01b0384166000908152600460209081526040808320805482518185028101850190935280835291929091908301828280156110f657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116110b95790505b505050505090508363ffffffff166000141561114f578060018251038151811061111c57fe5b60200260200101519350438463ffffffff16111561114f578060028251038151811061114457fe5b602002602001015193505b5050506001600160a01b0391909116600090815260036020908152604080832063ffffffff85811685526001909101835292819020815160c08101835290548085168252600160201b8104851693820193909352600160401b8304841691810191909152600160601b820483166060820152600160801b820483166080820152600160a01b90910490911660a08201529091565b6111eb614572565b6000806000806000600360008b6001600160a01b03166001600160a01b03168152602001908152602001600020600501896040516112299190615482565b90815260200160405180910390208863ffffffff168154811061124857fe5b600091825260208083208a845260056006909302019182019052604091829020600182015460028301548354855180870190965283549496509294859492936001600160a01b039092169263ffffffff600160201b8404811693600160401b90041691908690829060ff1660078111156112be57fe5b60078111156112c957fe5b8152905463ffffffff6101009091048116602090920191909152909c50939a5091985082169650169350505050945094509450945094565b33600081815260026020526040808220805463ffffffff19164363ffffffff1617905551909186917fc98f6c9d476630f8e465540b0a790aa56ef97c26f7d59649b8e56da66e17630290610b82908890889088906155a3565b6001600160a01b031660009081526003602052604090205463ffffffff16151590565b6001600160a01b0381166000908152600360205260408082209051632ee5d53f60e11b815273339148ff1fa8de0b38880268aac2aebc61e6d48991635dcbaa7e916113ce916006019060040161559a565b60206040518083038186803b1580156113e657600080fd5b505af41580156113fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190615245565b3360009081526003602052604081205463ffffffff1661143d57600080fd5b33600090815260036020526040902054600160201b900460ff161561146157600080fd5b50336000908152600360205260409020805464ff000000001916600160201b179055600190565b6001600160a01b031660009081526006602052604090205490565b3360009081526003602052604081205463ffffffff166114c257600080fd5b506001600160a01b039283166000908152600360209081526040808320949095168252600490930183528381209181529152205490565b3360009081526003602052604090205463ffffffff1661151857600080fd5b33600090815260036020818152604080842087855290920190529020805415801561154b575061025863ffffffff831610155b61155457600080fd5b63ffffffff8316611566578260010192505b436000818152600183810160209081526040808420805463ffffffff191663ffffffff8a81169190911763ffffffff60201b1916600160201b8a8316021790915586549384018755868552919093206008830401805460046007909416939093026101000a808302199093169190941691909102179091555133907f63b34caa4654531c1ea1645263f2d28e8233fe72f5a0925d41f702edf5d92b8c9061160e90879061559a565b60405180910390a250505050565b6001600160a01b031660009081526002602052604090205463ffffffff1690565b6001600160a01b03861660009081526003602052604080822090518290600583019061166a908a90615482565b90815260200160405180910390208763ffffffff168154811061168957fe5b9060005260206000209060060201905084846040516020016116ac92919061546d565b604051602081830303815290604052805190602001208160040154146116d157600080fd5b63ffffffff86166000908152600582016020526040902060028201546001600160a01b031633148061170b5750336001600160a01b038b16145b801561172757506005815460ff16600781111561172457fe5b14155b801561174357506003815460ff16600781111561174057fe5b14155b801561175f57506004815460ff16600781111561175c57fe5b14155b61176857600080fd5b8254600090600160201b900460ff16158061179357506001825460ff16600781111561179057fe5b11155b806117f357506002825460ff1660078111156117ab57fe5b1480156117f35750858863ffffffff16815181106117c557fe5b6020026020010151603c02610e10018260000160019054906101000a900463ffffffff1663ffffffff164203115b156118355750805460ff1916600317815560018201805460009182905560028401546001600160a01b0316825260066020526040909120805482019055611859565b6002825460ff16600781111561184757fe5b141561026757815460ff191660041782555b8a6001600160a01b03167f84ee10d060221dce9423d13e552ceee10a21bf41bd5bedcc60dc203039cc61d28b8b8b856040516118989493929190615710565b60405180910390a260019450505050505b9695505050505050565b6000546001600160a01b031690565b6000546001600160a01b031681565b6001600160a01b03831660009081526003602052604080822090516005909101906118fd908590615482565b908152602001604051809103902060008154811061191757fe5b60009182526020909120600690910201600201546001600160a01b0316331461193f57600080fd5b836001600160a01b03167f3bd0feb5eb1eb62e58a57ceb991a8b7050e6780c0d2af4d424958c752827c13c33858560405161197c939291906154ce565b60405180910390a25060019392505050565b6001600160a01b03808416600090815260036020908152604080832093861683526004840182528083208584529091528120805482825591929180158015906119ef57506000858152600284016020526040902054600160481b900460ff16155b6119f857600080fd5b6000858152600284016020526040902080544390611a299063ffffffff80821691600160201b900481169061321c16565b63ffffffff1610611a3957600080fd5b611a4281613237565b6001600160a01b03871660008181526006602052604090819020805485019055517f4c1442ea070eeee496cf12e2027cb03261bc5f2a987cb4823d88b67207f46c2a90611a9090859061559a565b60405180910390a2506001979650505050505050565b600080546001600160a01b03163314611abe57600080fd5b6001600160a01b038316600090815260056020526040902054839015611ae357600080fd5b50506001600160a01b0391909116600090815260056020526040902055600190565b6001600160a01b038116600090815260056020526040812054611b2a57506000610e20565b506001919050565b6001600160a01b03821660009081526003602052604080822090516338e073f560e21b8152829173339148ff1fa8de0b38880268aac2aebc61e6d4899163e381cfd491611b899160069091019087906004016158d3565b604080518083038186803b158015611ba057600080fd5b505af4158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd8919061521c565b915091509250929050565b6001600160a01b03821660009081526003602081815260408084208585529092018152918190208054825181850281018501909352808352606093830182828015611c7957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611c3c5790505b5050505050905092915050565b611c8e614589565b6001600160a01b0384166000908152600360205260408082209051600590910190611cba908690615482565b90815260200160405180910390208381548110611cd357fe5b600091825260208083206001600160a01b038916845260038252604080852060069094029091015463ffffffff600160601b91829004811686526001909401835293819020815160c08101835290548085168252600160201b8104851693820193909352600160401b830484169181019190915292810482166060840152600160801b810482166080840152600160a01b90041660a08201529150509392505050565b3360009081526003602052604081205463ffffffff1615611d9657600080fd5b33600090815260036020526040902063ffffffff851615801590611dd45750600084600081518110611dc457fe5b602002602001015163ffffffff16115b8015611dfa5750600084600281518110611dea57fe5b602002602001015163ffffffff16115b8015611e0f57508054600160201b900460ff16155b8015611e23575061025863ffffffff841610155b611e2c57600080fd5b611e39814387878761324a565b503360009081526004602081815260408320805460018101825590845292206008830401805463ffffffff43811660079095169093026101000a9384029290930219909216179055611e8a816133bb565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b031916339081179091556040518a91907fcdaff867abac2aaa830f0e81523d81ac4f5a32dbb867445a8be99d0e039e9d6190611f05908c908c908c906155a3565b60405180910390a350600198975050505050505050565b82516001600160a01b031660009081526003602052604090208054600160201b900460ff168015611f4e575060008251115b8015611f5f57508360800151518351145b8015611f6c575081518351145b8015611f79575084518351145b8015611f8a57508360400151518351145b8015611f9b57508360600151518351145b8015611fc3575060048460400151600081518110611fb557fe5b602002602001015160ff1611155b8015611fd857508360c00151518460a0015151145b8015611fe85750611fe8336127dd565b8015611ff6575060ff865111155b8015612009575033600052600560205260015b8015612026575083516001600160a01b0316600052600560205260015b61202f57600080fd5b604084015151156120be5760015b8460400151518110156120bc578460400151818151811061205a57fe5b602002602001015160ff16856040015160008151811061207657fe5b602002602001015160ff1614806120ab5750600260ff168560400151828151811061209d57fe5b602002602001015160ff1611155b6120b457600080fd5b60010161203d565b505b83516001600160a01b031660009081526004602090815260408083208054825181850281018501909352808352919290919083018282801561214b57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161210e5790505b5050505050905060008160018351038151811061216457fe5b602002602001015163ffffffff1690504381111561219d578160028351038151811061218c57fe5b602002602001015163ffffffff1690505b80866020015163ffffffff16146121b357600080fd5b60008181526001840160209081526040808320815160c081018352905463ffffffff8082168352600160201b8204811694830194909452600160401b8104841692820192909252600160601b820483166060820152600160801b820483166080820152600160a01b90910490911660a08201529080612236868a898d8c886133f0565b8d60008151811061224357fe5b602002602001018c60008151811061225757fe5b63ffffffff9384166020918202929092010152921690915260a08b015160c08c01519294509092506122959161228e9186916138b4565b83906139b6565b9150813410156122a457600080fd5b6000866005018c6040516122b89190615482565b90815260405160209181900382019020805460018101825560009182529181208b5160069093020192508a916122ea57fe5b6020908102919091010151815463ffffffff191663ffffffff9091161781558a518b9060009061231657fe5b6020908102919091010151815460e08c015163ffffffff60201b19909116600160201b63ffffffff938416021763ffffffff60401b1916600160401b918316919091021763ffffffff60601b1916600160601b8783160217825561237e9084908490613a0416565b60018201556002810180546001600160a01b0319163317905560608a01516040516123ad918a916020016153ee565b60408051601f19818403018152908290528051602091820120600384015560a08c015160c08d01516123e3939192909101615450565b6040516020818303038152906040528051906020012081600401819055506001876005018d6040516124159190615482565b90815260405190819003602001902054039450600034841461244e57503360009081526006602052604090208054348590039081019091555b61245b8d878b8e85613a58565b50505050505050505050505050565b6124726145be565b506001600160a01b03821660009081526003602090815260408083208484526002018252918290208251608081018452905463ffffffff8082168352600160201b8204169282019290925260ff600160401b83048116151593820193909352600160481b9091049091161515606082015292915050565b3360009081526003602052604090205463ffffffff1661250857600080fd5b336000908152600360208181526040808420858552909201905281209061252f82826145e5565b505050565b3360009081526003602052604081205463ffffffff1661255357600080fd5b60036000846001600160a01b03166001600160a01b03168152602001908152602001600020600501826040516125899190615482565b90815260405190819003602001902054905092915050565b3360009081526003602052604081205463ffffffff166125c057600080fd5b60008463ffffffff161180156125f057506000826000815181106125e057fe5b602002602001015163ffffffff16115b8015612604575061025863ffffffff841610155b61260d57600080fd5b33600090815260036020908152604080832060048352818420805483518186028101860190945280845291949390919083018282801561269857602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161265b5790505b505050505090506000816001835103815181106126b157fe5b60200260200101519050438163ffffffff1611156126e2576126dc838263ffffffff1689888a61324a565b5061278c565b63ffffffff8082166000818152600186016020526040902054600160201b900490911690810143811161273457818363ffffffff1643038161272057fe5b0460010190508181028363ffffffff160190505b61274185828b8a8c61324a565b503360009081526004602081815260408320805460018101825590845292206008830401805463ffffffff94851660079094169092026101000a928302939092021916919091179055505b5060019695505050505050565b33600090815260036020526040812054600160201b900460ff166127bc57600080fd5b50336000908152600360205260409020805464ff0000000019169055600190565b6001600160a01b031660009081526002602052604090205463ffffffff16151590565b6060600180548060200260200160405190810160405280929190818152602001828054801561285857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161283a575b5050505050905090565b33600090815260036020526040902054600160201b900460ff1661288557600080fd5b42836040015163ffffffff1611156128af5760405162461bcd60e51b8152600401610ac990615805565b33600090815260036020526040808220905190919060058301906128d4908890615482565b9081526020016040518091039020856000015163ffffffff16815481106128f757fe5b906000526020600020906006020190508460a001518560c0015160405160200161292292919061546d565b6040516020818303038152906040528051906020012081600401541461294757600080fd5b60208086015163ffffffff16600090815260058084019092526040902090815460ff16600781111561297557fe5b1415801561299357506003815460ff16600781111561299057fe5b14155b80156129c657508560c00151866020015163ffffffff16815181106129b457fe5b60200260200101518563ffffffff1611155b80156129e857508154606087015163ffffffff600160201b9092048216911611155b8015612a0a57508154608087015163ffffffff600160401b9092048216911611155b8015612a36575060008563ffffffff16118015612a3657506002815460ff166007811115612a3457fe5b145b612a3f57600080fd5b815463ffffffff600160601b91829004811660009081526001860160209081526040808320815160c08101835290548086168252600160201b8104861682850152600160401b810486169282019290925294810484166060860152600160801b810484166080860152600160a01b9004831660a0808601919091528a0151908a0151815192938493849392909116908110612ad657fe5b6020026020010151905060008a60c001518b6020015163ffffffff1681518110612afc57fe5b6020026020010151905060008b6060015163ffffffff161115612c5f57865463ffffffff1615612bbf57612b478b606001518660a0015163ffffffff16613ac390919063ffffffff16565b60608c0151885463ffffffff9283169650612b8b92612b7292600160201b90920481169190613b0216565b8660a0015163ffffffff16613ac390919063ffffffff16565b875463ffffffff9182169450811690612ba890869086906139b616565b1115612bb357600080fd5b865463ffffffff191687555b8654600160201b900463ffffffff1615801590612bf25750865460608c015163ffffffff908116600160201b9092041614155b15612c5f5760608b01518754612c4e91612c3991612c209163ffffffff600160201b909204821691613b0216565b876060015163ffffffff16613ac390919063ffffffff16565b63ffffffff16846139b690919063ffffffff16565b875463ffffffff60201b1916885592505b8654600160401b900463ffffffff1615801590612c82575060e08b015115156001145b8015612ca45750865460808c015163ffffffff908116600160401b9092041614155b15612d835760808b01518754612cd291612c3991612c209163ffffffff600160401b909204821691613b0216565b875490935063ffffffff1615612d1157865460a0860151612d0391612c399163ffffffff90811691811690613ac316565b875463ffffffff1916885592505b8654600160201b900463ffffffff1615801590612d36575060608b015163ffffffff16155b15612d745786546060860151612d6391612c399163ffffffff90811691600160201b9004811690613ac316565b875463ffffffff60201b1916885592505b865463ffffffff60401b191687555b612e0e612e07612dc6612dad8e608001518f6060015163ffffffff1661321c90919063ffffffff16565b886060015163ffffffff16613ac390919063ffffffff16565b63ffffffff16612e01612de88e63ffffffff1687613b1d90919063ffffffff16565b896040015163ffffffff16613b1d90919063ffffffff16565b906139b6565b85906139b6565b9350612e59612e52612e39612e328d63ffffffff1685613a0490919063ffffffff16565b8590613b1d565b876040015163ffffffff16613b1d90919063ffffffff16565b84906139b6565b6001880154909350612e6b85856139b6565b1115612e7657600080fd5b612e7e6145be565b865463ffffffff610100909104811682526040808e0151821660208401528751600390810b606085015285810b900b90830152612ec29060068b01908390613b8c16565b612f68578654600390889060ff19166001830217905550876001015493506000886001018190555083600660008a60020160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008282540192505081905550612f5a8d8d8c8b60020160009054906101000a90046001600160a01b0316600089613e18565b505050505050505050613016565b6004875460ff166007811115612f7a57fe5b1415612f9057865460ff19166003178755612f9c565b865460ff191660051787555b612fb4612fa986866139b6565b60018a015490613a04565b60018901558315612fe25760028801546001600160a01b031660009081526006602052604090208054850190555b336000908152600660205260409020805486019055600288015461245b908e908e908d906001600160a01b03168989613e18565b50505050565b6000546001600160a01b0316331461303357600080fd5b6001600160a01b0381166130595760405162461bcd60e51b8152600401610ac9906157ce565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33600090815260036020526040808220905190919060058301906130d9908990615482565b90815260200160405180910390208663ffffffff16815481106130f857fe5b9060005260206000209060060201905084518351148015613144575084846040516020016131279291906153ee565b604051602081830303815290604052805190602001208160030154145b61314d57600080fd5b60005b855181101561321257600086828151811061316757fe5b6020908102919091018101516000818152600287019092526040909120805491925090600160481b900460ff16613208576131a28583613e87565b80156131be57508583815181106131b557fe5b60200260200101515b1561320857805469ff0000000000000000001916600160481b178155600060ff168784815181106131eb57fe5b602002602001015160ff16141561320857805460ff60401b191681555b5050600101613150565b5050505050505050565b600082820163ffffffff8085169082161015610ded57600080fd5b805469ffffffffffffffffffff19169055565b60006040518060c001604052808563ffffffff1681526020018363ffffffff1681526020018460008151811061327c57fe5b602002602001015163ffffffff1681526020018460018151811061329c57fe5b602002602001015163ffffffff168152602001846002815181106132bc57fe5b602002602001015163ffffffff168152602001846003815181106132dc57fe5b60209081029190910181015163ffffffff90811690925260008881526001808b0183526040918290208551815494870151938701516060880151608089015160a0909901518816600160a01b0263ffffffff60a01b19998916600160801b0263ffffffff60801b19928a16600160601b0263ffffffff60601b19948b16600160401b0263ffffffff60401b19998c16600160201b0263ffffffff60201b1997909c1663ffffffff19909b169a909a1795909516999099179690961696909617161793909316939093179390931692909217909155905095945050505050565b805463ffffffff431663ffffffff1964ff0000000019909216600160201b178216178255600690910180549091166001179055565b600080808080805b89518110156138435760008a828151811061340f57fe5b6020026020010151905060008d6002016000838152602001908152602001600020905060008e6004016000336001600160a01b03166001600160a01b03168152602001908152602001600020600084815260200190815260200160002090508060000154945060008511801561349e575081544363ffffffff808316600160201b909304811692909201909116105b156135165760008082558e516001600160a01b0381168252600660205260409091208054870190556134cf83613237565b8e600001516001600160a01b03167f4c1442ea070eeee496cf12e2027cb03261bc5f2a987cb4823d88b67207f46c2a8760405161350c919061559a565b60405180910390a2505b8054151580613567575081544363ffffffff808316600160201b9093048116929092019091161080159061355357508154600160401b900460ff16155b801561356757508154600160481b900460ff165b6138385760008f600301600085815260200190815260200160002090506135a68f60800151868151811061359757fe5b60200260200101518289613eee565b97509550856137f05782544363ffffffff808316600160201b90930481169290920190911610156137405760008c86815181106135df57fe5b602002602001015163ffffffff1611156136f557825463ffffffff19164363ffffffff161783558b5161363890610258908e908890811061361c57fe5b602002602001015163ffffffff16613ac390919063ffffffff16565b835463ffffffff91909116600160201b0263ffffffff60201b199091161783558b5161369b90613682908e908890811061366e57fe5b60200260200101518f888151811061361c57fe5b8c6080015163ffffffff16613ac390919063ffffffff16565b63ffffffff90811680845596506136b690899088906139b616565b9750600160ff168f6060015186815181106136cd57fe5b602002602001015160ff1614156136f057825460ff60401b1916600160401b1783555b61373b565b6137386137288e878151811061370757fe5b60200260200101518d60a0015163ffffffff16613ac390919063ffffffff16565b63ffffffff808a16919061321c16565b96505b613776565b815415801561375c57508254600160401b900460ff1615156001145b15613776576137736137288e878151811061370757fe5b96505b6137a28d868151811061378557fe5b60200260200101518a63ffffffff1661321c90919063ffffffff16565b98508e600001516001600160a01b03167f80dba27df5461a688671716d31fb3db878585175dd426accdcd2d7575355542d33866040516137e39291906154b5565b60405180910390a2613836565b8e600001516001600160a01b03167f258852d33ffd0dba761363df607e9bd50bf6f684b1f6a1e0dd6ff1222f9642d58560405161382d919061559a565b60405180910390a25b505b5050506001016133f8565b5061387c613867612dad8c60e001518763ffffffff1661321c90919063ffffffff16565b63ffffffff16866139b690919063ffffffff16565b945061389b8263ffffffff16612e0185886139b690919063ffffffff16565b94505063ffffffff909116909650965096509692505050565b60008060005b84518110156139ad5760006139226139098684815181106138d757fe5b602002602001015161ffff168885815181106138ef57fe5b602002602001015161ffff16613b1d90919063ffffffff16565b886040015163ffffffff16613b1d90919063ffffffff16565b905061394e85838151811061393357fe5b602002602001015161ffff16846139b690919063ffffffff16565b9250866000015163ffffffff1686838151811061396757fe5b602002602001015161ffff16111580156139815750600081115b801561398f57506105a08311155b61399857600080fd5b6139a284826139b6565b9350506001016138ba565b50509392505050565b600082820183811015610ded576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b600082821115613a52576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e206f766572666c6f7760601b604482015290519081900360640190fd5b50900390565b8151604080840151606085015160a086015160c0870151935133956001600160a01b0316947f70ef18f1e199e6d1dad787809fb510ee88159612964bdd4ba0aeb342a5c4442a94613ab4948d948d9492938d9334908d906155dc565b60405180910390a35050505050565b600063ffffffff8316613ad857506000610fc9565b82820263ffffffff8084169080861690831681613af157fe5b0463ffffffff1614610ded57600080fd5b60008263ffffffff168263ffffffff161115613a5257600080fd5b600082613b2c57506000610fc9565b82820282848281613b3957fe5b0414610ded576040805162461bcd60e51b815260206004820152601760248201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604482015290519081900360640190fd5b815463ffffffff600160201b909104811660008181526001850160209081526040822054908501519193849283928392839283928392600160401b9091048116911611613c1157869450849350613be58a86868c614027565b949c50929a5090975063ffffffff90911694509250905087613c11576000975050505050505050610fc9565b895463ffffffff1660018911613cb457613c368b898c602001518d6040015185614309565b60408a0151925060010188613c74578a5463ffffffff60201b1916600160201b600019830163ffffffff16908102919091178c558897509550613cb4565b600095865260018b0160205260409095208054600019870163ffffffff908116600160201b81810263ffffffff60201b1985161790945592909104169650945b6001891115613cde57600086815260018c016020526040902054600160201b900463ffffffff1696505b869450613cef8b868884878f61436d565b15613d36578860021415613d2557600088815260018c0160205260409020805463ffffffff191663ffffffff600385900b161790555b600198505050505050505050610fc9565b60018911613dd15763ffffffff60001982018116600090815260018d016020526040902080546bffffffffffffffffffffffff191690558b54600160201b900416861415613d9f578a5463ffffffff60201b1916600160201b63ffffffff891602178b55613dcc565b600086815260018c0160205260409020805463ffffffff60201b1916600160201b63ffffffff8a16021790555b613e07565b8860031415613e0757600086815260018c0160205260409020805463ffffffff60201b1916600160201b63ffffffff8716021790555b600098505050505050505050610fc9565b336001600160a01b03167f95e5c99356933ad208b912f18068374b9ffdee100412b9ec5cb8fa7b2bcc164487876000015188602001518787878c604001518c8e606001518f60800151604051613e779a9998979695949392919061569d565b60405180910390a2505050505050565b6000818152600283016020526040812080544390613eb89063ffffffff80821691600160201b900481169061321c16565b63ffffffff161015613ece576000915050610fc9565b805463ffffffff1916436000190163ffffffff1617905550600192915050565b60008063ffffffff8516156140185783541561401857600084600001805480602002602001604051908101604052809291908181526020018280548015613f8057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613f435790505b50505050509050600081600183510381518110613f9957fe5b60200260200101519050438163ffffffff161115613fcc5781600283510381518110613fc157fe5b602002602001015190505b63ffffffff80821660009081526001808901602052604090912054909116908111156140095761400663ffffffff80881690839061321c16565b95505b6001869450945050505061401f565b5060009050815b935093915050565b600083815260018581016020526040822054909190819081908190819063ffffffff600160401b8204811691600160201b81049091169060030b835b8363ffffffff168b6020015163ffffffff1610614239578a60400151870196508a606001518760030b13156140ac5750600098508896508695508594508493506142fc92505050565b8363ffffffff168b6020015163ffffffff161415614228578a604001518201905081870196508a606001518760030b13806140ed57508a606001518160030b135b1561410c5750600098508896508695508594508493506142fc92505050565b8060030b6000146141205760029950614228565b600399508d60010160008e815260200190815260200160002060000160049054906101000a900463ffffffff1695508d60010160008463ffffffff1681526020019081526020016000208e60010160008e81526020019081526020016000206000820160009054906101000a900460030b8160000160006101000a81548163ffffffff021916908360030b63ffffffff1602179055506000820160049054906101000a900463ffffffff168160000160046101000a81548163ffffffff021916908363ffffffff1602179055506000820160089054906101000a900463ffffffff168160000160086101000a81548163ffffffff021916908363ffffffff1602179055509050505b8b98508c975093506142fc92505050565b81870196508a606001518760030b13156142675750600098508896508695508594508493506142fc92505050565b8b9c508263ffffffff169b508d60010160008d815260200190815260200160002060000160089054906101000a900463ffffffff1693508d60010160008d815260200190815260200160002060000160049054906101000a900463ffffffff1692508d60010160008d815260200190815260200160002060000160009054906101000a900460030b9150600161406357505050505b9499939850945094509450565b63ffffffff9081166000908152600190950160205260409094208054938516600160201b0263ffffffff60201b1960039390930b861663ffffffff1996909416600160401b0263ffffffff60401b1990951694909417949094169190911716179055565b600085815260018701602052604081205463ffffffff600160401b8204811691600381900b91600160201b909104165b845163ffffffff16831161451657845163ffffffff1683141561448e5760408501516000038201600381900b61442e57600089815260018c016020526040808220805463ffffffff60201b1916600160201b63ffffffff87811691909102919091179091558c8352912080546bffffffffffffffffffffffff191690558b5463ffffffff1916908916178b55614481565b85606001518160030b131561444a5760009450505050506118a9565b60008a815260018c01602052604090208054600383900b63ffffffff90811663ffffffff19928316179092558c54918a169116178b555b60019450505050506118a9565b600088815260018b016020526040808220548751918801516144c4938e93600160201b90930463ffffffff16929190038b614309565b505050600085815260018881016020526040909120805463ffffffff60201b1916600160201b63ffffffff8881169190910291909117909155885463ffffffff191686830190911617885590506118a9565b818601955084606001518660030b131561453657600093505050506118a9565b63ffffffff908116600081815260018c01602052604090205490999850600160401b810482169350600381900b9250600160201b90041661439d565b604080518082019091526000808252602082015290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b50805460008255600701600890049060005260206000209081019061460a919061460d565b50565b5b80821115614622576000815560010161460e565b5090565b8035610e208161599d565b600082601f830112614641578081fd5b8135602061465661465183615954565b615931565b8281528181019085830183850287018401881015614672578586fd5b855b8581101561469057813584529284019290840190600101614674565b5090979650505050505050565b600082601f8301126146ad578081fd5b813560206146bd61465183615954565b82815281810190858301838502870184018810156146d9578586fd5b855b8581101561469057813561ffff811681146146f4578788fd5b845292840192908401906001016146db565b600082601f830112614716578081fd5b8135602061472661465183615954565b8281528181019085830183850287018401881015614742578586fd5b855b85811015614690578135614757816159b2565b84529284019290840190600101614744565b600082601f830112614779578081fd5b8135602061478961465183615954565b82815281810190858301838502870184018810156147a5578586fd5b855b8581101561469057813560ff811681146147bf578788fd5b845292840192908401906001016147a7565b80358015158114610e2057600080fd5b600082601f8301126147f1578081fd5b81356001600160401b0381111561480457fe5b614817601f8201601f1916602001615931565b81815284602083860101111561482b578283fd5b816020850160208301379081016020019190915292915050565b6000610100808385031215614858578182fd5b61486181615931565b91505061486d82614626565b815261487b60208301614958565b602082015260408201356001600160401b038082111561489a57600080fd5b6148a685838601614769565b604084015260608401359150808211156148bf57600080fd5b6148cb85838601614769565b606084015260808401359150808211156148e457600080fd5b6148f085838601614706565b608084015260a084013591508082111561490957600080fd5b6149158583860161469d565b60a084015260c084013591508082111561492e57600080fd5b5061493b8482850161469d565b60c08301525061494d60e08301614958565b60e082015292915050565b8035610e20816159b2565b600060208284031215614974578081fd5b8135610ded8161599d565b600080600060608486031215614993578182fd5b833561499e8161599d565b925060208401356149ae8161599d565b929592945050506040919091013590565b600080600060608486031215614993578081fd5b600080604083850312156149e5578182fd5b82356149f08161599d565b946020939093013593505050565b600080600060608486031215614a12578081fd5b8335614a1d8161599d565b9250602084013591506040840135614a34816159b2565b809150509250925092565b60008060408385031215614a51578182fd5b8235614a5c8161599d565b915060208301356001600160401b03811115614a76578182fd5b614a82858286016147e1565b9150509250929050565b600080600060608486031215614aa0578081fd5b8335614aab8161599d565b925060208401356001600160401b0380821115614ac6578283fd5b614ad2878388016147e1565b93506040860135915080821115614ae7578283fd5b50614af4868287016147e1565b9150509250925092565b600080600060608486031215614b12578081fd5b8335614b1d8161599d565b925060208401356001600160401b03811115614b37578182fd5b614b43868287016147e1565b925050604084013590509250925092565b60008060008060808587031215614b69578182fd5b8435614b748161599d565b935060208501356001600160401b03811115614b8e578283fd5b614b9a878288016147e1565b9350506040850135614bab816159b2565b9396929550929360600135925050565b60008060008060008060c08789031215614bd3578384fd5b8635614bde8161599d565b955060208701356001600160401b0380821115614bf9578586fd5b614c058a838b016147e1565b965060408901359150614c17826159b2565b909450606088013590614c29826159b2565b90935060808801359080821115614c3e578384fd5b614c4a8a838b01614631565b935060a0890135915080821115614c5f578283fd5b50614c6c89828a01614631565b9150509295509295509295565b60008060408385031215614c8b578182fd5b8235614c968161599d565b91506020830135614ca6816159b2565b809150509250929050565b600060208284031215614cc2578081fd5b5035919050565b60008060008060808587031215614cde578182fd5b8435935060208501356001600160401b0380821115614cfb578384fd5b614d07888389016147e1565b94506040870135915080821115614d1c578384fd5b614d28888389016147e1565b93506060870135915080821115614d3d578283fd5b50614d4a878288016147e1565b91505092959194509250565b600080600080600080600060e0888a031215614d70578485fd5b8735965060208801356001600160401b0380821115614d8d578687fd5b614d998b838c016147e1565b975060408a0135915080821115614dae578687fd5b614dba8b838c016147e1565b965060608a0135915080821115614dcf578283fd5b614ddb8b838c016147e1565b9550614de960808b01614958565b945060a08a0135915080821115614dfe578283fd5b50614e0b8a828b01614706565b925050614e1a60c08901614958565b905092959891949750929550565b600080600060608486031215614e3c578081fd5b833592506020840135614e4e816159b2565b91506040840135614a34816159b2565b600080600080600060a08688031215614e75578283fd5b85356001600160401b0380821115614e8b578485fd5b614e9789838a016147e1565b96506020880135915080821115614eac578485fd5b614eb889838a01614706565b95506040880135915080821115614ecd578485fd5b614ed989838a01614845565b94506060880135915080821115614eee578283fd5b614efa89838a01614706565b93506080880135915080821115614f0f578283fd5b50614f1c88828901614631565b9150509295509295909350565b60008060008060808587031215614f3e578182fd5b84356001600160401b0380821115614f54578384fd5b614f60888389016147e1565b95506020870135915080821115614f75578384fd5b818701915061010080838a031215614f8b578485fd5b614f9481615931565b9050614f9f83614958565b8152614fad60208401614958565b6020820152614fbe60408401614958565b6040820152614fcf60608401614958565b6060820152614fe060808401614958565b608082015260a083013582811115614ff6578586fd5b6150028a828601614631565b60a08301525060c083013582811115615019578586fd5b6150258a828601614631565b60c08301525061503760e084016147d1565b60e08201529450614bab91505060408601614958565b600080600080600060a08688031215615064578283fd5b85356001600160401b038082111561507a578485fd5b61508689838a016147e1565b96506020915081880135615099816159b2565b95506040880135818111156150ac578586fd5b6150b88a828b01614631565b9550506060880135818111156150cc578384fd5b6150d88a828b01614769565b9450506080880135818111156150ec578384fd5b88019050601f810189136150fe578283fd5b803561510c61465182615954565b81815283810190838501858402850186018d1015615128578687fd5b8694505b838510156151515761513d816147d1565b83526001949094019391850191850161512c565b5080955050505050509295509295909350565b600080600060608486031215615178578081fd5b83356001600160401b0381111561518d578182fd5b615199868287016147e1565b9350506020840135614e4e816159b2565b600080600080608085870312156151bf578182fd5b84356001600160401b038111156151d4578283fd5b6151e0878288016147e1565b94505060208501356151f1816159b2565b92506040850135615201816159b2565b91506060850135615211816159b2565b939692955090935050565b6000806040838503121561522e578182fd5b8251915060208301518060030b8114614ca6578182fd5b600060208284031215615256578081fd5b8151610ded816159b2565b600080600060608486031215615275578081fd5b8335615280816159b2565b92506020840135615290816159b2565b915060408401356001600160401b038111156152aa578182fd5b614af486828701614706565b6000815180845260208085019450808401835b838110156152e957815161ffff16875295820195908201906001016152c9565b509495945050505050565b805160009060208084018383156152e957815161ffff16875295820195908201906001016152c9565b600081516020808401835b838110156152e957815187529582019590820190600101615328565b6000815180845260208085019450808401835b838110156152e957815160ff1687529582019590820190600101615357565b6000815180845261538e816020860160208601615971565b601f01601f19169290920160200192915050565b63ffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b825160009082906020808701845b83811015615418578151855293820193908201906001016153fc565b50508551818701939250845b8181101561544357845160ff1684529382019392820192600101615424565b5091979650505050505050565b600061546561545f83866152f4565b846152f4565b949350505050565b600061546561547c838661531d565b8461531d565b60008251615494818460208701615971565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03841681526060602082018190526000906154f290830185615376565b82810360408401526118a98185615376565b6020808252825182820181905260009190848201906040850190845b818110156155455783516001600160a01b031683529284019291840191600101615520565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561554557835163ffffffff168352928401929184019160010161556d565b901515815260200190565b90815260200190565b6000606082526155b66060830186615376565b82810360208401526155c88186615376565b905082810360408401526118a98185615376565b60006101208083526155f08184018d615376565b9050602063ffffffff8c16818501528382036040850152615611828c615344565b84810360608601528a51808252828c01935090820190845b8181101561564557845183529383019391830191600101615629565b50508481036080860152615659818b615344565b9250505082810360a084015261566f81886152b6565b905082810360c084015261568381876152b6565b60e084019590955250506101000152979650505050505050565b60006101408083526156b18184018e615376565b63ffffffff9c8d1660208501529a8c16604084015250506001600160a01b03979097166060880152608087019590955260a086019390935290861660c085015260e0840152841661010083015290921661012090920191909152919050565b6000608082526157236080830187615376565b63ffffffff95861660208401529390941660408201526060015292915050565b6000608082526157566080830187615376565b63ffffffff958616602084015293909416604082015260ff9190911660609091015292915050565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b6020808252600d908201526c139bdd081c195c9b5a5d1d1959609a1b604082015260600190565b6020808252601d908201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604082015260600190565b6020808252600990820152684168656164206e6f7760b81b604082015260600190565b815163ffffffff9081168252602092830151169181019190915260400190565b600060808201905063ffffffff8084511683528060208501511660208401525060408301511515604083015260608301511515606083015292915050565b855160c08201906008811061589757fe5b825260209687015163ffffffff169682019690965260408101949094526001600160a01b03929092166060840152608083015260a09091015290565b91825263ffffffff16602082015260400190565b60c08101610fc982846153a2565b91825260030b602082015260400190565b63ffffffff91909116815260200190565b63ffffffff8316815260e08101610ded60208301846153a2565b6040518181016001600160401b038111828210171561594c57fe5b604052919050565b60006001600160401b0382111561596757fe5b5060209081020190565b60005b8381101561598c578181015183820152602001615974565b838111156130165750506000910152565b6001600160a01b038116811461460a57600080fd5b63ffffffff8116811461460a57600080fdfea2646970667358221220d900762552f0ba9e0ab00ac4ee571833af582dac03e98cf5b357e1674e98bcd864736f6c63430007060033
0x6080604052600436106102675760003560e01c8063893d20e811610144578063d638fdba116100b6578063ed29bffd1161007a578063ed29bffd14610768578063edbf96921461077d578063edc922a91461079d578063ee3ed64b146107bf578063f2fde38b146107df578063f633fdf3146107ff57610267565b8063d638fdba146106c8578063d913a157146106db578063de53b2e514610708578063e28a2a9414610728578063e6ae74c21461074857610267565b8063c46087ab11610108578063c46087ab1461060d578063c6df39861461062d578063c85325891461037e578063d246ecbc1461065b578063d44897101461067b578063d4b2464e146106a857610267565b8063893d20e8146105765780638da5cb5b14610598578063a52d9d01146105ad578063a716baf7146105cd578063b9dd0ddd146105ed57610267565b80633cffa233116101dd57806367f7079c116101a157806367f7079c146104c157806370a08231146104d6578063742e6969146104f657806378bea80b146105165780637e7366a614610536578063805b38241461055657610267565b80633cffa233146103f55780635367428814610423578063582e8c7a14610454578063628b1a3c1461047457806365dc58141461049457610267565b806327e235e31161022f57806327e235e3146103315780632843b78a1461035e5780632855d0d51461037e5780633345f6bd146103ab5780633976b5fb146103cb5780633ccfd60b146103e057610267565b806302f8542e1461026c57806307f731011461028e5780630bbb8c93146102c457806317a656c0146102e45780631b2eb61e14610304575b600080fd5b34801561027857600080fd5b5061028c610287366004614e28565b61081f565b005b34801561029a57600080fd5b506102ae6102a9366004615164565b610a33565b6040516102bb919061558f565b60405180910390f35b3480156102d057600080fd5b506102ae6102df366004614cc9565b610b25565b3480156102f057600080fd5b506102ae6102ff3660046151aa565b610b95565b34801561031057600080fd5b5061032461031f3660046149fe565b610cb1565b6040516102bb9190615828565b34801561033d57600080fd5b5061035161034c366004614963565b610df4565b6040516102bb919061559a565b34801561036a57600080fd5b50610351610379366004614963565b610e06565b34801561038a57600080fd5b5061039e610399366004614963565b610e25565b6040516102bb9190615551565b3480156103b757600080fd5b506102ae6103c63660046149d3565b610ebd565b3480156103d757600080fd5b50610351610fcf565b3480156103ec57600080fd5b5061028c610fd3565b34801561040157600080fd5b50610415610410366004614c79565b611060565b6040516102bb929190615917565b34801561042f57600080fd5b5061044361043e366004614b54565b6111e3565b6040516102bb959493929190615886565b34801561046057600080fd5b506102ae61046f366004614cc9565b611301565b34801561048057600080fd5b506102ae61048f366004614963565b61135a565b3480156104a057600080fd5b506104b46104af366004614963565b61137d565b6040516102bb9190615906565b3480156104cd57600080fd5b506102ae61141e565b3480156104e257600080fd5b506103516104f1366004614963565b611488565b34801561050257600080fd5b506103516105113660046149bf565b6114a3565b34801561052257600080fd5b5061028c610531366004614e28565b6114f9565b34801561054257600080fd5b506104b4610551366004614963565b61161c565b34801561056257600080fd5b506102ae610571366004614bbb565b61163d565b34801561058257600080fd5b5061058b6118b3565b6040516102bb91906154a1565b3480156105a457600080fd5b5061058b6118c2565b3480156105b957600080fd5b506102ae6105c8366004614a8c565b6118d1565b3480156105d957600080fd5b506102ae6105e836600461497f565b61198e565b3480156105f957600080fd5b506102ae6106083660046149d3565b611aa6565b34801561061957600080fd5b506102ae610628366004614963565b611b05565b34801561063957600080fd5b5061064d610648366004614c79565b611b32565b6040516102bb9291906158f5565b34801561066757600080fd5b5061039e6106763660046149d3565b611be3565b34801561068757600080fd5b5061069b610696366004614afe565b611c86565b6040516102bb91906158e7565b3480156106b457600080fd5b506102ae6106c3366004614d56565b611d76565b61028c6106d6366004614e5e565b611f1c565b3480156106e757600080fd5b506106fb6106f63660046149d3565b61246a565b6040516102bb9190615848565b34801561071457600080fd5b5061028c610723366004614cb1565b6124e9565b34801561073457600080fd5b50610351610743366004614a3f565b612534565b34801561075457600080fd5b506102ae610763366004615261565b6125a1565b34801561077457600080fd5b506102ae612799565b34801561078957600080fd5b506102ae610798366004614963565b6127dd565b3480156107a957600080fd5b506107b2612800565b6040516102bb9190615504565b3480156107cb57600080fd5b5061028c6107da366004614f29565b612862565b3480156107eb57600080fd5b5061028c6107fa366004614963565b61301c565b34801561080b57600080fd5b5061028c61081a36600461504d565b6130b4565b3360009081526003602052604090205463ffffffff1661083e57600080fd5b33600090815260036020818152604080842087855290920190529020805461086557600080fd5b63ffffffff8316610877578260010192505b6000816000018054806020026020016040519081016040528092919081815260200182805480156108f357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116108b65790505b5050505050905060008160018351038151811061090c57fe5b60200260200101519050438163ffffffff161115610967574360009081526001840160205260409020805463ffffffff868116600160201b0263ffffffff60201b1991891663ffffffff199093169290921716179055610a2b565b63ffffffff8082166000818152600186016020526040902054600160201b90049091169081014381116109b957818363ffffffff164303816109a557fe5b0460010190508181028363ffffffff160190505b60008181526001868101602090815260408320805463ffffffff191663ffffffff8c81169190911763ffffffff60201b1916600160201b8c831602179091558854928301895588845292206008820401805460046007909316929092026101000a808402199092169290931602179055505b505050505050565b336000908152600360205260408082209051829160050190610a56908790615482565b90815260200160405180910390208463ffffffff1681548110610a7557fe5b6000918252602080832063ffffffff871684526005600690930201919091019052604081209150815460ff166007811115610aac57fe5b14610ad25760405162461bcd60e51b8152600401610ac9906157a7565b60405180910390fd5b805460ff19166001908117825560405133917f1ed0dfeede93aca193505d2c4448bfa80fc53727e2e524f2596ae333d7f4977c91610b1591899189918991615743565b60405180910390a2509392505050565b3360009081526003602052604081205463ffffffff16610b4457600080fd5b84336001600160a01b03167fcdaff867abac2aaa830f0e81523d81ac4f5a32dbb867445a8be99d0e039e9d61868686604051610b82939291906155a3565b60405180910390a3506001949350505050565b60008163ffffffff1642811115610bab57600080fd5b336000908152600360205260408082209051600590910190610bce908990615482565b90815260200160405180910390208663ffffffff1681548110610bed57fe5b6000918252602080832063ffffffff8916845260056006909302019190910190526040902090506001815460ff166007811115610c2657fe5b1115610c445760405162461bcd60e51b8152600401610ac9906157a7565b8054600264ffffffff001990911661010063ffffffff8716021760ff19168117825560405133917f1ed0dfeede93aca193505d2c4448bfa80fc53727e2e524f2596ae333d7f4977c91610c9c918b918b918b91615743565b60405180910390a25060019695505050505050565b610cb9614572565b6001600160a01b03841660009081526003602081815260408084208785529092019052902063ffffffff8316610db157600081600001805480602002602001604051908101604052809291908181526020018280548015610d6557602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610d285790505b5050505050905080600182510381518110610d7c57fe5b60200260200101519350438463ffffffff161115610daf5780600282510381518110610da457fe5b602002602001015193505b505b63ffffffff8084166000908152600190920160209081526040928390208351808501909452548083168452600160201b90049091169082015290505b9392505050565b60066020526000908152604090205481565b6001600160a01b0381166000908152600560205260409020545b919050565b6001600160a01b038116600090815260046020908152604091829020805483518184028101840190945280845260609392830182828015610eb157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610e745790505b50505050509050919050565b33600090815260036020526040812054600160201b900460ff16610ee057600080fd5b3360009081526003602090815260408083206001600160a01b038716845260048101835281842086855283528184206002820190935292208054600160481b900460ff168015610f54575080544390610f4c9063ffffffff80821691600160201b900481169061321c16565b63ffffffff16105b610f5d57600080fd5b81546000808455338152600660205260409020805482019055610f7f82613237565b336001600160a01b03167f4c1442ea070eeee496cf12e2027cb03261bc5f2a987cb4823d88b67207f46c2a82604051610fb8919061559a565b60405180910390a260019450505050505b92915050565b4790565b3360008181526006602052604080822080549083905590519092908390610ff99061549e565b60006040518083038185875af1925050503d8060008114611036576040519150601f19603f3d011682016040523d82523d6000602084013e61103b565b606091505b505090508061105c5760405162461bcd60e51b8152600401610ac99061577e565b5050565b600061106a614589565b6001600160a01b0384166000908152600460209081526040808320805482518185028101850190935280835291929091908301828280156110f657602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116110b95790505b505050505090508363ffffffff166000141561114f578060018251038151811061111c57fe5b60200260200101519350438463ffffffff16111561114f578060028251038151811061114457fe5b602002602001015193505b5050506001600160a01b0391909116600090815260036020908152604080832063ffffffff85811685526001909101835292819020815160c08101835290548085168252600160201b8104851693820193909352600160401b8304841691810191909152600160601b820483166060820152600160801b820483166080820152600160a01b90910490911660a08201529091565b6111eb614572565b6000806000806000600360008b6001600160a01b03166001600160a01b03168152602001908152602001600020600501896040516112299190615482565b90815260200160405180910390208863ffffffff168154811061124857fe5b600091825260208083208a845260056006909302019182019052604091829020600182015460028301548354855180870190965283549496509294859492936001600160a01b039092169263ffffffff600160201b8404811693600160401b90041691908690829060ff1660078111156112be57fe5b60078111156112c957fe5b8152905463ffffffff6101009091048116602090920191909152909c50939a5091985082169650169350505050945094509450945094565b33600081815260026020526040808220805463ffffffff19164363ffffffff1617905551909186917fc98f6c9d476630f8e465540b0a790aa56ef97c26f7d59649b8e56da66e17630290610b82908890889088906155a3565b6001600160a01b031660009081526003602052604090205463ffffffff16151590565b6001600160a01b0381166000908152600360205260408082209051632ee5d53f60e11b815273339148ff1fa8de0b38880268aac2aebc61e6d48991635dcbaa7e916113ce916006019060040161559a565b60206040518083038186803b1580156113e657600080fd5b505af41580156113fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190615245565b3360009081526003602052604081205463ffffffff1661143d57600080fd5b33600090815260036020526040902054600160201b900460ff161561146157600080fd5b50336000908152600360205260409020805464ff000000001916600160201b179055600190565b6001600160a01b031660009081526006602052604090205490565b3360009081526003602052604081205463ffffffff166114c257600080fd5b506001600160a01b039283166000908152600360209081526040808320949095168252600490930183528381209181529152205490565b3360009081526003602052604090205463ffffffff1661151857600080fd5b33600090815260036020818152604080842087855290920190529020805415801561154b575061025863ffffffff831610155b61155457600080fd5b63ffffffff8316611566578260010192505b436000818152600183810160209081526040808420805463ffffffff191663ffffffff8a81169190911763ffffffff60201b1916600160201b8a8316021790915586549384018755868552919093206008830401805460046007909416939093026101000a808302199093169190941691909102179091555133907f63b34caa4654531c1ea1645263f2d28e8233fe72f5a0925d41f702edf5d92b8c9061160e90879061559a565b60405180910390a250505050565b6001600160a01b031660009081526002602052604090205463ffffffff1690565b6001600160a01b03861660009081526003602052604080822090518290600583019061166a908a90615482565b90815260200160405180910390208763ffffffff168154811061168957fe5b9060005260206000209060060201905084846040516020016116ac92919061546d565b604051602081830303815290604052805190602001208160040154146116d157600080fd5b63ffffffff86166000908152600582016020526040902060028201546001600160a01b031633148061170b5750336001600160a01b038b16145b801561172757506005815460ff16600781111561172457fe5b14155b801561174357506003815460ff16600781111561174057fe5b14155b801561175f57506004815460ff16600781111561175c57fe5b14155b61176857600080fd5b8254600090600160201b900460ff16158061179357506001825460ff16600781111561179057fe5b11155b806117f357506002825460ff1660078111156117ab57fe5b1480156117f35750858863ffffffff16815181106117c557fe5b6020026020010151603c02610e10018260000160019054906101000a900463ffffffff1663ffffffff164203115b156118355750805460ff1916600317815560018201805460009182905560028401546001600160a01b0316825260066020526040909120805482019055611859565b6002825460ff16600781111561184757fe5b141561026757815460ff191660041782555b8a6001600160a01b03167f84ee10d060221dce9423d13e552ceee10a21bf41bd5bedcc60dc203039cc61d28b8b8b856040516118989493929190615710565b60405180910390a260019450505050505b9695505050505050565b6000546001600160a01b031690565b6000546001600160a01b031681565b6001600160a01b03831660009081526003602052604080822090516005909101906118fd908590615482565b908152602001604051809103902060008154811061191757fe5b60009182526020909120600690910201600201546001600160a01b0316331461193f57600080fd5b836001600160a01b03167f3bd0feb5eb1eb62e58a57ceb991a8b7050e6780c0d2af4d424958c752827c13c33858560405161197c939291906154ce565b60405180910390a25060019392505050565b6001600160a01b03808416600090815260036020908152604080832093861683526004840182528083208584529091528120805482825591929180158015906119ef57506000858152600284016020526040902054600160481b900460ff16155b6119f857600080fd5b6000858152600284016020526040902080544390611a299063ffffffff80821691600160201b900481169061321c16565b63ffffffff1610611a3957600080fd5b611a4281613237565b6001600160a01b03871660008181526006602052604090819020805485019055517f4c1442ea070eeee496cf12e2027cb03261bc5f2a987cb4823d88b67207f46c2a90611a9090859061559a565b60405180910390a2506001979650505050505050565b600080546001600160a01b03163314611abe57600080fd5b6001600160a01b038316600090815260056020526040902054839015611ae357600080fd5b50506001600160a01b0391909116600090815260056020526040902055600190565b6001600160a01b038116600090815260056020526040812054611b2a57506000610e20565b506001919050565b6001600160a01b03821660009081526003602052604080822090516338e073f560e21b8152829173339148ff1fa8de0b38880268aac2aebc61e6d4899163e381cfd491611b899160069091019087906004016158d3565b604080518083038186803b158015611ba057600080fd5b505af4158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd8919061521c565b915091509250929050565b6001600160a01b03821660009081526003602081815260408084208585529092018152918190208054825181850281018501909352808352606093830182828015611c7957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611c3c5790505b5050505050905092915050565b611c8e614589565b6001600160a01b0384166000908152600360205260408082209051600590910190611cba908690615482565b90815260200160405180910390208381548110611cd357fe5b600091825260208083206001600160a01b038916845260038252604080852060069094029091015463ffffffff600160601b91829004811686526001909401835293819020815160c08101835290548085168252600160201b8104851693820193909352600160401b830484169181019190915292810482166060840152600160801b810482166080840152600160a01b90041660a08201529150509392505050565b3360009081526003602052604081205463ffffffff1615611d9657600080fd5b33600090815260036020526040902063ffffffff851615801590611dd45750600084600081518110611dc457fe5b602002602001015163ffffffff16115b8015611dfa5750600084600281518110611dea57fe5b602002602001015163ffffffff16115b8015611e0f57508054600160201b900460ff16155b8015611e23575061025863ffffffff841610155b611e2c57600080fd5b611e39814387878761324a565b503360009081526004602081815260408320805460018101825590845292206008830401805463ffffffff43811660079095169093026101000a9384029290930219909216179055611e8a816133bb565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b031916339081179091556040518a91907fcdaff867abac2aaa830f0e81523d81ac4f5a32dbb867445a8be99d0e039e9d6190611f05908c908c908c906155a3565b60405180910390a350600198975050505050505050565b82516001600160a01b031660009081526003602052604090208054600160201b900460ff168015611f4e575060008251115b8015611f5f57508360800151518351145b8015611f6c575081518351145b8015611f79575084518351145b8015611f8a57508360400151518351145b8015611f9b57508360600151518351145b8015611fc3575060048460400151600081518110611fb557fe5b602002602001015160ff1611155b8015611fd857508360c00151518460a0015151145b8015611fe85750611fe8336127dd565b8015611ff6575060ff865111155b8015612009575033600052600560205260015b8015612026575083516001600160a01b0316600052600560205260015b61202f57600080fd5b604084015151156120be5760015b8460400151518110156120bc578460400151818151811061205a57fe5b602002602001015160ff16856040015160008151811061207657fe5b602002602001015160ff1614806120ab5750600260ff168560400151828151811061209d57fe5b602002602001015160ff1611155b6120b457600080fd5b60010161203d565b505b83516001600160a01b031660009081526004602090815260408083208054825181850281018501909352808352919290919083018282801561214b57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161210e5790505b5050505050905060008160018351038151811061216457fe5b602002602001015163ffffffff1690504381111561219d578160028351038151811061218c57fe5b602002602001015163ffffffff1690505b80866020015163ffffffff16146121b357600080fd5b60008181526001840160209081526040808320815160c081018352905463ffffffff8082168352600160201b8204811694830194909452600160401b8104841692820192909252600160601b820483166060820152600160801b820483166080820152600160a01b90910490911660a08201529080612236868a898d8c886133f0565b8d60008151811061224357fe5b602002602001018c60008151811061225757fe5b63ffffffff9384166020918202929092010152921690915260a08b015160c08c01519294509092506122959161228e9186916138b4565b83906139b6565b9150813410156122a457600080fd5b6000866005018c6040516122b89190615482565b90815260405160209181900382019020805460018101825560009182529181208b5160069093020192508a916122ea57fe5b6020908102919091010151815463ffffffff191663ffffffff9091161781558a518b9060009061231657fe5b6020908102919091010151815460e08c015163ffffffff60201b19909116600160201b63ffffffff938416021763ffffffff60401b1916600160401b918316919091021763ffffffff60601b1916600160601b8783160217825561237e9084908490613a0416565b60018201556002810180546001600160a01b0319163317905560608a01516040516123ad918a916020016153ee565b60408051601f19818403018152908290528051602091820120600384015560a08c015160c08d01516123e3939192909101615450565b6040516020818303038152906040528051906020012081600401819055506001876005018d6040516124159190615482565b90815260405190819003602001902054039450600034841461244e57503360009081526006602052604090208054348590039081019091555b61245b8d878b8e85613a58565b50505050505050505050505050565b6124726145be565b506001600160a01b03821660009081526003602090815260408083208484526002018252918290208251608081018452905463ffffffff8082168352600160201b8204169282019290925260ff600160401b83048116151593820193909352600160481b9091049091161515606082015292915050565b3360009081526003602052604090205463ffffffff1661250857600080fd5b336000908152600360208181526040808420858552909201905281209061252f82826145e5565b505050565b3360009081526003602052604081205463ffffffff1661255357600080fd5b60036000846001600160a01b03166001600160a01b03168152602001908152602001600020600501826040516125899190615482565b90815260405190819003602001902054905092915050565b3360009081526003602052604081205463ffffffff166125c057600080fd5b60008463ffffffff161180156125f057506000826000815181106125e057fe5b602002602001015163ffffffff16115b8015612604575061025863ffffffff841610155b61260d57600080fd5b33600090815260036020908152604080832060048352818420805483518186028101860190945280845291949390919083018282801561269857602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161265b5790505b505050505090506000816001835103815181106126b157fe5b60200260200101519050438163ffffffff1611156126e2576126dc838263ffffffff1689888a61324a565b5061278c565b63ffffffff8082166000818152600186016020526040902054600160201b900490911690810143811161273457818363ffffffff1643038161272057fe5b0460010190508181028363ffffffff160190505b61274185828b8a8c61324a565b503360009081526004602081815260408320805460018101825590845292206008830401805463ffffffff94851660079094169092026101000a928302939092021916919091179055505b5060019695505050505050565b33600090815260036020526040812054600160201b900460ff166127bc57600080fd5b50336000908152600360205260409020805464ff0000000019169055600190565b6001600160a01b031660009081526002602052604090205463ffffffff16151590565b6060600180548060200260200160405190810160405280929190818152602001828054801561285857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161283a575b5050505050905090565b33600090815260036020526040902054600160201b900460ff1661288557600080fd5b42836040015163ffffffff1611156128af5760405162461bcd60e51b8152600401610ac990615805565b33600090815260036020526040808220905190919060058301906128d4908890615482565b9081526020016040518091039020856000015163ffffffff16815481106128f757fe5b906000526020600020906006020190508460a001518560c0015160405160200161292292919061546d565b6040516020818303038152906040528051906020012081600401541461294757600080fd5b60208086015163ffffffff16600090815260058084019092526040902090815460ff16600781111561297557fe5b1415801561299357506003815460ff16600781111561299057fe5b14155b80156129c657508560c00151866020015163ffffffff16815181106129b457fe5b60200260200101518563ffffffff1611155b80156129e857508154606087015163ffffffff600160201b9092048216911611155b8015612a0a57508154608087015163ffffffff600160401b9092048216911611155b8015612a36575060008563ffffffff16118015612a3657506002815460ff166007811115612a3457fe5b145b612a3f57600080fd5b815463ffffffff600160601b91829004811660009081526001860160209081526040808320815160c08101835290548086168252600160201b8104861682850152600160401b810486169282019290925294810484166060860152600160801b810484166080860152600160a01b9004831660a0808601919091528a0151908a0151815192938493849392909116908110612ad657fe5b6020026020010151905060008a60c001518b6020015163ffffffff1681518110612afc57fe5b6020026020010151905060008b6060015163ffffffff161115612c5f57865463ffffffff1615612bbf57612b478b606001518660a0015163ffffffff16613ac390919063ffffffff16565b60608c0151885463ffffffff9283169650612b8b92612b7292600160201b90920481169190613b0216565b8660a0015163ffffffff16613ac390919063ffffffff16565b875463ffffffff9182169450811690612ba890869086906139b616565b1115612bb357600080fd5b865463ffffffff191687555b8654600160201b900463ffffffff1615801590612bf25750865460608c015163ffffffff908116600160201b9092041614155b15612c5f5760608b01518754612c4e91612c3991612c209163ffffffff600160201b909204821691613b0216565b876060015163ffffffff16613ac390919063ffffffff16565b63ffffffff16846139b690919063ffffffff16565b875463ffffffff60201b1916885592505b8654600160401b900463ffffffff1615801590612c82575060e08b015115156001145b8015612ca45750865460808c015163ffffffff908116600160401b9092041614155b15612d835760808b01518754612cd291612c3991612c209163ffffffff600160401b909204821691613b0216565b875490935063ffffffff1615612d1157865460a0860151612d0391612c399163ffffffff90811691811690613ac316565b875463ffffffff1916885592505b8654600160201b900463ffffffff1615801590612d36575060608b015163ffffffff16155b15612d745786546060860151612d6391612c399163ffffffff90811691600160201b9004811690613ac316565b875463ffffffff60201b1916885592505b865463ffffffff60401b191687555b612e0e612e07612dc6612dad8e608001518f6060015163ffffffff1661321c90919063ffffffff16565b886060015163ffffffff16613ac390919063ffffffff16565b63ffffffff16612e01612de88e63ffffffff1687613b1d90919063ffffffff16565b896040015163ffffffff16613b1d90919063ffffffff16565b906139b6565b85906139b6565b9350612e59612e52612e39612e328d63ffffffff1685613a0490919063ffffffff16565b8590613b1d565b876040015163ffffffff16613b1d90919063ffffffff16565b84906139b6565b6001880154909350612e6b85856139b6565b1115612e7657600080fd5b612e7e6145be565b865463ffffffff610100909104811682526040808e0151821660208401528751600390810b606085015285810b900b90830152612ec29060068b01908390613b8c16565b612f68578654600390889060ff19166001830217905550876001015493506000886001018190555083600660008a60020160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060008282540192505081905550612f5a8d8d8c8b60020160009054906101000a90046001600160a01b0316600089613e18565b505050505050505050613016565b6004875460ff166007811115612f7a57fe5b1415612f9057865460ff19166003178755612f9c565b865460ff191660051787555b612fb4612fa986866139b6565b60018a015490613a04565b60018901558315612fe25760028801546001600160a01b031660009081526006602052604090208054850190555b336000908152600660205260409020805486019055600288015461245b908e908e908d906001600160a01b03168989613e18565b50505050565b6000546001600160a01b0316331461303357600080fd5b6001600160a01b0381166130595760405162461bcd60e51b8152600401610ac9906157ce565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33600090815260036020526040808220905190919060058301906130d9908990615482565b90815260200160405180910390208663ffffffff16815481106130f857fe5b9060005260206000209060060201905084518351148015613144575084846040516020016131279291906153ee565b604051602081830303815290604052805190602001208160030154145b61314d57600080fd5b60005b855181101561321257600086828151811061316757fe5b6020908102919091018101516000818152600287019092526040909120805491925090600160481b900460ff16613208576131a28583613e87565b80156131be57508583815181106131b557fe5b60200260200101515b1561320857805469ff0000000000000000001916600160481b178155600060ff168784815181106131eb57fe5b602002602001015160ff16141561320857805460ff60401b191681555b5050600101613150565b5050505050505050565b600082820163ffffffff8085169082161015610ded57600080fd5b805469ffffffffffffffffffff19169055565b60006040518060c001604052808563ffffffff1681526020018363ffffffff1681526020018460008151811061327c57fe5b602002602001015163ffffffff1681526020018460018151811061329c57fe5b602002602001015163ffffffff168152602001846002815181106132bc57fe5b602002602001015163ffffffff168152602001846003815181106132dc57fe5b60209081029190910181015163ffffffff90811690925260008881526001808b0183526040918290208551815494870151938701516060880151608089015160a0909901518816600160a01b0263ffffffff60a01b19998916600160801b0263ffffffff60801b19928a16600160601b0263ffffffff60601b19948b16600160401b0263ffffffff60401b19998c16600160201b0263ffffffff60201b1997909c1663ffffffff19909b169a909a1795909516999099179690961696909617161793909316939093179390931692909217909155905095945050505050565b805463ffffffff431663ffffffff1964ff0000000019909216600160201b178216178255600690910180549091166001179055565b600080808080805b89518110156138435760008a828151811061340f57fe5b6020026020010151905060008d6002016000838152602001908152602001600020905060008e6004016000336001600160a01b03166001600160a01b03168152602001908152602001600020600084815260200190815260200160002090508060000154945060008511801561349e575081544363ffffffff808316600160201b909304811692909201909116105b156135165760008082558e516001600160a01b0381168252600660205260409091208054870190556134cf83613237565b8e600001516001600160a01b03167f4c1442ea070eeee496cf12e2027cb03261bc5f2a987cb4823d88b67207f46c2a8760405161350c919061559a565b60405180910390a2505b8054151580613567575081544363ffffffff808316600160201b9093048116929092019091161080159061355357508154600160401b900460ff16155b801561356757508154600160481b900460ff165b6138385760008f600301600085815260200190815260200160002090506135a68f60800151868151811061359757fe5b60200260200101518289613eee565b97509550856137f05782544363ffffffff808316600160201b90930481169290920190911610156137405760008c86815181106135df57fe5b602002602001015163ffffffff1611156136f557825463ffffffff19164363ffffffff161783558b5161363890610258908e908890811061361c57fe5b602002602001015163ffffffff16613ac390919063ffffffff16565b835463ffffffff91909116600160201b0263ffffffff60201b199091161783558b5161369b90613682908e908890811061366e57fe5b60200260200101518f888151811061361c57fe5b8c6080015163ffffffff16613ac390919063ffffffff16565b63ffffffff90811680845596506136b690899088906139b616565b9750600160ff168f6060015186815181106136cd57fe5b602002602001015160ff1614156136f057825460ff60401b1916600160401b1783555b61373b565b6137386137288e878151811061370757fe5b60200260200101518d60a0015163ffffffff16613ac390919063ffffffff16565b63ffffffff808a16919061321c16565b96505b613776565b815415801561375c57508254600160401b900460ff1615156001145b15613776576137736137288e878151811061370757fe5b96505b6137a28d868151811061378557fe5b60200260200101518a63ffffffff1661321c90919063ffffffff16565b98508e600001516001600160a01b03167f80dba27df5461a688671716d31fb3db878585175dd426accdcd2d7575355542d33866040516137e39291906154b5565b60405180910390a2613836565b8e600001516001600160a01b03167f258852d33ffd0dba761363df607e9bd50bf6f684b1f6a1e0dd6ff1222f9642d58560405161382d919061559a565b60405180910390a25b505b5050506001016133f8565b5061387c613867612dad8c60e001518763ffffffff1661321c90919063ffffffff16565b63ffffffff16866139b690919063ffffffff16565b945061389b8263ffffffff16612e0185886139b690919063ffffffff16565b94505063ffffffff909116909650965096509692505050565b60008060005b84518110156139ad5760006139226139098684815181106138d757fe5b602002602001015161ffff168885815181106138ef57fe5b602002602001015161ffff16613b1d90919063ffffffff16565b886040015163ffffffff16613b1d90919063ffffffff16565b905061394e85838151811061393357fe5b602002602001015161ffff16846139b690919063ffffffff16565b9250866000015163ffffffff1686838151811061396757fe5b602002602001015161ffff16111580156139815750600081115b801561398f57506105a08311155b61399857600080fd5b6139a284826139b6565b9350506001016138ba565b50509392505050565b600082820183811015610ded576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b600082821115613a52576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e206f766572666c6f7760601b604482015290519081900360640190fd5b50900390565b8151604080840151606085015160a086015160c0870151935133956001600160a01b0316947f70ef18f1e199e6d1dad787809fb510ee88159612964bdd4ba0aeb342a5c4442a94613ab4948d948d9492938d9334908d906155dc565b60405180910390a35050505050565b600063ffffffff8316613ad857506000610fc9565b82820263ffffffff8084169080861690831681613af157fe5b0463ffffffff1614610ded57600080fd5b60008263ffffffff168263ffffffff161115613a5257600080fd5b600082613b2c57506000610fc9565b82820282848281613b3957fe5b0414610ded576040805162461bcd60e51b815260206004820152601760248201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604482015290519081900360640190fd5b815463ffffffff600160201b909104811660008181526001850160209081526040822054908501519193849283928392839283928392600160401b9091048116911611613c1157869450849350613be58a86868c614027565b949c50929a5090975063ffffffff90911694509250905087613c11576000975050505050505050610fc9565b895463ffffffff1660018911613cb457613c368b898c602001518d6040015185614309565b60408a0151925060010188613c74578a5463ffffffff60201b1916600160201b600019830163ffffffff16908102919091178c558897509550613cb4565b600095865260018b0160205260409095208054600019870163ffffffff908116600160201b81810263ffffffff60201b1985161790945592909104169650945b6001891115613cde57600086815260018c016020526040902054600160201b900463ffffffff1696505b869450613cef8b868884878f61436d565b15613d36578860021415613d2557600088815260018c0160205260409020805463ffffffff191663ffffffff600385900b161790555b600198505050505050505050610fc9565b60018911613dd15763ffffffff60001982018116600090815260018d016020526040902080546bffffffffffffffffffffffff191690558b54600160201b900416861415613d9f578a5463ffffffff60201b1916600160201b63ffffffff891602178b55613dcc565b600086815260018c0160205260409020805463ffffffff60201b1916600160201b63ffffffff8a16021790555b613e07565b8860031415613e0757600086815260018c0160205260409020805463ffffffff60201b1916600160201b63ffffffff8716021790555b600098505050505050505050610fc9565b336001600160a01b03167f95e5c99356933ad208b912f18068374b9ffdee100412b9ec5cb8fa7b2bcc164487876000015188602001518787878c604001518c8e606001518f60800151604051613e779a9998979695949392919061569d565b60405180910390a2505050505050565b6000818152600283016020526040812080544390613eb89063ffffffff80821691600160201b900481169061321c16565b63ffffffff161015613ece576000915050610fc9565b805463ffffffff1916436000190163ffffffff1617905550600192915050565b60008063ffffffff8516156140185783541561401857600084600001805480602002602001604051908101604052809291908181526020018280548015613f8057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411613f435790505b50505050509050600081600183510381518110613f9957fe5b60200260200101519050438163ffffffff161115613fcc5781600283510381518110613fc157fe5b602002602001015190505b63ffffffff80821660009081526001808901602052604090912054909116908111156140095761400663ffffffff80881690839061321c16565b95505b6001869450945050505061401f565b5060009050815b935093915050565b600083815260018581016020526040822054909190819081908190819063ffffffff600160401b8204811691600160201b81049091169060030b835b8363ffffffff168b6020015163ffffffff1610614239578a60400151870196508a606001518760030b13156140ac5750600098508896508695508594508493506142fc92505050565b8363ffffffff168b6020015163ffffffff161415614228578a604001518201905081870196508a606001518760030b13806140ed57508a606001518160030b135b1561410c5750600098508896508695508594508493506142fc92505050565b8060030b6000146141205760029950614228565b600399508d60010160008e815260200190815260200160002060000160049054906101000a900463ffffffff1695508d60010160008463ffffffff1681526020019081526020016000208e60010160008e81526020019081526020016000206000820160009054906101000a900460030b8160000160006101000a81548163ffffffff021916908360030b63ffffffff1602179055506000820160049054906101000a900463ffffffff168160000160046101000a81548163ffffffff021916908363ffffffff1602179055506000820160089054906101000a900463ffffffff168160000160086101000a81548163ffffffff021916908363ffffffff1602179055509050505b8b98508c975093506142fc92505050565b81870196508a606001518760030b13156142675750600098508896508695508594508493506142fc92505050565b8b9c508263ffffffff169b508d60010160008d815260200190815260200160002060000160089054906101000a900463ffffffff1693508d60010160008d815260200190815260200160002060000160049054906101000a900463ffffffff1692508d60010160008d815260200190815260200160002060000160009054906101000a900460030b9150600161406357505050505b9499939850945094509450565b63ffffffff9081166000908152600190950160205260409094208054938516600160201b0263ffffffff60201b1960039390930b861663ffffffff1996909416600160401b0263ffffffff60401b1990951694909417949094169190911716179055565b600085815260018701602052604081205463ffffffff600160401b8204811691600381900b91600160201b909104165b845163ffffffff16831161451657845163ffffffff1683141561448e5760408501516000038201600381900b61442e57600089815260018c016020526040808220805463ffffffff60201b1916600160201b63ffffffff87811691909102919091179091558c8352912080546bffffffffffffffffffffffff191690558b5463ffffffff1916908916178b55614481565b85606001518160030b131561444a5760009450505050506118a9565b60008a815260018c01602052604090208054600383900b63ffffffff90811663ffffffff19928316179092558c54918a169116178b555b60019450505050506118a9565b600088815260018b016020526040808220548751918801516144c4938e93600160201b90930463ffffffff16929190038b614309565b505050600085815260018881016020526040909120805463ffffffff60201b1916600160201b63ffffffff8881169190910291909117909155885463ffffffff191686830190911617885590506118a9565b818601955084606001518660030b131561453657600093505050506118a9565b63ffffffff908116600081815260018c01602052604090205490999850600160401b810482169350600381900b9250600160201b90041661439d565b604080518082019091526000808252602082015290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b50805460008255600701600890049060005260206000209081019061460a919061460d565b50565b5b80821115614622576000815560010161460e565b5090565b8035610e208161599d565b600082601f830112614641578081fd5b8135602061465661465183615954565b615931565b8281528181019085830183850287018401881015614672578586fd5b855b8581101561469057813584529284019290840190600101614674565b5090979650505050505050565b600082601f8301126146ad578081fd5b813560206146bd61465183615954565b82815281810190858301838502870184018810156146d9578586fd5b855b8581101561469057813561ffff811681146146f4578788fd5b845292840192908401906001016146db565b600082601f830112614716578081fd5b8135602061472661465183615954565b8281528181019085830183850287018401881015614742578586fd5b855b85811015614690578135614757816159b2565b84529284019290840190600101614744565b600082601f830112614779578081fd5b8135602061478961465183615954565b82815281810190858301838502870184018810156147a5578586fd5b855b8581101561469057813560ff811681146147bf578788fd5b845292840192908401906001016147a7565b80358015158114610e2057600080fd5b600082601f8301126147f1578081fd5b81356001600160401b0381111561480457fe5b614817601f8201601f1916602001615931565b81815284602083860101111561482b578283fd5b816020850160208301379081016020019190915292915050565b6000610100808385031215614858578182fd5b61486181615931565b91505061486d82614626565b815261487b60208301614958565b602082015260408201356001600160401b038082111561489a57600080fd5b6148a685838601614769565b604084015260608401359150808211156148bf57600080fd5b6148cb85838601614769565b606084015260808401359150808211156148e457600080fd5b6148f085838601614706565b608084015260a084013591508082111561490957600080fd5b6149158583860161469d565b60a084015260c084013591508082111561492e57600080fd5b5061493b8482850161469d565b60c08301525061494d60e08301614958565b60e082015292915050565b8035610e20816159b2565b600060208284031215614974578081fd5b8135610ded8161599d565b600080600060608486031215614993578182fd5b833561499e8161599d565b925060208401356149ae8161599d565b929592945050506040919091013590565b600080600060608486031215614993578081fd5b600080604083850312156149e5578182fd5b82356149f08161599d565b946020939093013593505050565b600080600060608486031215614a12578081fd5b8335614a1d8161599d565b9250602084013591506040840135614a34816159b2565b809150509250925092565b60008060408385031215614a51578182fd5b8235614a5c8161599d565b915060208301356001600160401b03811115614a76578182fd5b614a82858286016147e1565b9150509250929050565b600080600060608486031215614aa0578081fd5b8335614aab8161599d565b925060208401356001600160401b0380821115614ac6578283fd5b614ad2878388016147e1565b93506040860135915080821115614ae7578283fd5b50614af4868287016147e1565b9150509250925092565b600080600060608486031215614b12578081fd5b8335614b1d8161599d565b925060208401356001600160401b03811115614b37578182fd5b614b43868287016147e1565b925050604084013590509250925092565b60008060008060808587031215614b69578182fd5b8435614b748161599d565b935060208501356001600160401b03811115614b8e578283fd5b614b9a878288016147e1565b9350506040850135614bab816159b2565b9396929550929360600135925050565b60008060008060008060c08789031215614bd3578384fd5b8635614bde8161599d565b955060208701356001600160401b0380821115614bf9578586fd5b614c058a838b016147e1565b965060408901359150614c17826159b2565b909450606088013590614c29826159b2565b90935060808801359080821115614c3e578384fd5b614c4a8a838b01614631565b935060a0890135915080821115614c5f578283fd5b50614c6c89828a01614631565b9150509295509295509295565b60008060408385031215614c8b578182fd5b8235614c968161599d565b91506020830135614ca6816159b2565b809150509250929050565b600060208284031215614cc2578081fd5b5035919050565b60008060008060808587031215614cde578182fd5b8435935060208501356001600160401b0380821115614cfb578384fd5b614d07888389016147e1565b94506040870135915080821115614d1c578384fd5b614d28888389016147e1565b93506060870135915080821115614d3d578283fd5b50614d4a878288016147e1565b91505092959194509250565b600080600080600080600060e0888a031215614d70578485fd5b8735965060208801356001600160401b0380821115614d8d578687fd5b614d998b838c016147e1565b975060408a0135915080821115614dae578687fd5b614dba8b838c016147e1565b965060608a0135915080821115614dcf578283fd5b614ddb8b838c016147e1565b9550614de960808b01614958565b945060a08a0135915080821115614dfe578283fd5b50614e0b8a828b01614706565b925050614e1a60c08901614958565b905092959891949750929550565b600080600060608486031215614e3c578081fd5b833592506020840135614e4e816159b2565b91506040840135614a34816159b2565b600080600080600060a08688031215614e75578283fd5b85356001600160401b0380821115614e8b578485fd5b614e9789838a016147e1565b96506020880135915080821115614eac578485fd5b614eb889838a01614706565b95506040880135915080821115614ecd578485fd5b614ed989838a01614845565b94506060880135915080821115614eee578283fd5b614efa89838a01614706565b93506080880135915080821115614f0f578283fd5b50614f1c88828901614631565b9150509295509295909350565b60008060008060808587031215614f3e578182fd5b84356001600160401b0380821115614f54578384fd5b614f60888389016147e1565b95506020870135915080821115614f75578384fd5b818701915061010080838a031215614f8b578485fd5b614f9481615931565b9050614f9f83614958565b8152614fad60208401614958565b6020820152614fbe60408401614958565b6040820152614fcf60608401614958565b6060820152614fe060808401614958565b608082015260a083013582811115614ff6578586fd5b6150028a828601614631565b60a08301525060c083013582811115615019578586fd5b6150258a828601614631565b60c08301525061503760e084016147d1565b60e08201529450614bab91505060408601614958565b600080600080600060a08688031215615064578283fd5b85356001600160401b038082111561507a578485fd5b61508689838a016147e1565b96506020915081880135615099816159b2565b95506040880135818111156150ac578586fd5b6150b88a828b01614631565b9550506060880135818111156150cc578384fd5b6150d88a828b01614769565b9450506080880135818111156150ec578384fd5b88019050601f810189136150fe578283fd5b803561510c61465182615954565b81815283810190838501858402850186018d1015615128578687fd5b8694505b838510156151515761513d816147d1565b83526001949094019391850191850161512c565b5080955050505050509295509295909350565b600080600060608486031215615178578081fd5b83356001600160401b0381111561518d578182fd5b615199868287016147e1565b9350506020840135614e4e816159b2565b600080600080608085870312156151bf578182fd5b84356001600160401b038111156151d4578283fd5b6151e0878288016147e1565b94505060208501356151f1816159b2565b92506040850135615201816159b2565b91506060850135615211816159b2565b939692955090935050565b6000806040838503121561522e578182fd5b8251915060208301518060030b8114614ca6578182fd5b600060208284031215615256578081fd5b8151610ded816159b2565b600080600060608486031215615275578081fd5b8335615280816159b2565b92506020840135615290816159b2565b915060408401356001600160401b038111156152aa578182fd5b614af486828701614706565b6000815180845260208085019450808401835b838110156152e957815161ffff16875295820195908201906001016152c9565b509495945050505050565b805160009060208084018383156152e957815161ffff16875295820195908201906001016152c9565b600081516020808401835b838110156152e957815187529582019590820190600101615328565b6000815180845260208085019450808401835b838110156152e957815160ff1687529582019590820190600101615357565b6000815180845261538e816020860160208601615971565b601f01601f19169290920160200192915050565b63ffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b825160009082906020808701845b83811015615418578151855293820193908201906001016153fc565b50508551818701939250845b8181101561544357845160ff1684529382019392820192600101615424565b5091979650505050505050565b600061546561545f83866152f4565b846152f4565b949350505050565b600061546561547c838661531d565b8461531d565b60008251615494818460208701615971565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03841681526060602082018190526000906154f290830185615376565b82810360408401526118a98185615376565b6020808252825182820181905260009190848201906040850190845b818110156155455783516001600160a01b031683529284019291840191600101615520565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561554557835163ffffffff168352928401929184019160010161556d565b901515815260200190565b90815260200190565b6000606082526155b66060830186615376565b82810360208401526155c88186615376565b905082810360408401526118a98185615376565b60006101208083526155f08184018d615376565b9050602063ffffffff8c16818501528382036040850152615611828c615344565b84810360608601528a51808252828c01935090820190845b8181101561564557845183529383019391830191600101615629565b50508481036080860152615659818b615344565b9250505082810360a084015261566f81886152b6565b905082810360c084015261568381876152b6565b60e084019590955250506101000152979650505050505050565b60006101408083526156b18184018e615376565b63ffffffff9c8d1660208501529a8c16604084015250506001600160a01b03979097166060880152608087019590955260a086019390935290861660c085015260e0840152841661010083015290921661012090920191909152919050565b6000608082526157236080830187615376565b63ffffffff95861660208401529390941660408201526060015292915050565b6000608082526157566080830187615376565b63ffffffff958616602084015293909416604082015260ff9190911660609091015292915050565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b6020808252600d908201526c139bdd081c195c9b5a5d1d1959609a1b604082015260600190565b6020808252601d908201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604082015260600190565b6020808252600990820152684168656164206e6f7760b81b604082015260600190565b815163ffffffff9081168252602092830151169181019190915260400190565b600060808201905063ffffffff8084511683528060208501511660208401525060408301511515604083015260608301511515606083015292915050565b855160c08201906008811061589757fe5b825260209687015163ffffffff169682019690965260408101949094526001600160a01b03929092166060840152608083015260a09091015290565b91825263ffffffff16602082015260400190565b60c08101610fc982846153a2565b91825260030b602082015260400190565b63ffffffff91909116815260200190565b63ffffffff8316815260e08101610ded60208301846153a2565b6040518181016001600160401b038111828210171561594c57fe5b604052919050565b60006001600160401b0382111561596757fe5b5060209081020190565b60005b8381101561598c578181015183820152602001615974565b838111156130165750506000910152565b6001600160a01b038116811461460a57600080fd5b63ffffffff8116811461460a57600080fdfea2646970667358221220d900762552f0ba9e0ab00ac4ee571833af582dac03e98cf5b357e1674e98bcd864736f6c63430007060033