0x60806040523480156200001157600080fd5b50604051620027cb380380620027cb833981016040819052620000349162000408565b6200004f6000805160206200274b833981519152806200022d565b620000796000805160206200276b8339815191526000805160206200274b8339815191526200022d565b620000a36000805160206200278b8339815191526000805160206200274b8339815191526200022d565b620000cd600080516020620027ab8339815191526000805160206200274b8339815191526200022d565b620000e86000805160206200274b8339815191523062000278565b6001600160a01b038116156200011357620001136000805160206200274b8339815191528262000278565b60005b835181101562000199576200015d6000805160206200276b8339815191528583815181106200014957620001496200048f565b60200260200101516200027860201b60201c565b62000186600080516020620027ab8339815191528583815181106200014957620001496200048f565b6200019181620004a5565b905062000116565b5060005b8251811015620001e357620001d06000805160206200278b8339815191528483815181106200014957620001496200048f565b620001db81620004a5565b90506200019d565b5060028490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050620004cf565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b62000284828262000288565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000284576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002e43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200035657600080fd5b919050565b600082601f8301126200036d57600080fd5b815160206001600160401b03808311156200038c576200038c62000328565b8260051b604051601f19603f83011681018181108482111715620003b457620003b462000328565b604052938452858101830193838101925087851115620003d357600080fd5b83870191505b84821015620003fd57620003ed826200033e565b83529183019190830190620003d9565b979650505050505050565b600080600080608085870312156200041f57600080fd5b845160208601519094506001600160401b03808211156200043f57600080fd5b6200044d888389016200035b565b945060408701519150808211156200046457600080fd5b5062000473878288016200035b565b92505062000484606086016200033e565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620004c857634e487b7160e01b600052601160045260246000fd5b5060010190565b61226c80620004df6000396000f3fe6080604052600436106101bb5760003560e01c80638065657f116100ec578063bc197c811161008a578063d547741f11610064578063d547741f146105f0578063e38335e514610610578063f23a6e6114610623578063f27a0c921461066857600080fd5b8063bc197c811461055e578063c4d252f5146105a3578063d45c4435146105c357600080fd5b806391d14854116100c657806391d14854146104b1578063a217fddf146104f5578063b08e51c01461050a578063b1c5f4271461053e57600080fd5b80638065657f1461043d5780638f2a0bb01461045d5780638f61f4f51461047d57600080fd5b8063248a9ca31161015957806331d507501161013357806331d50750146103bd57806336568abe146103dd578063584b153e146103fd57806364d623531461041d57600080fd5b8063248a9ca31461033c5780632ab0f5291461036c5780632f2ff15d1461039d57600080fd5b80630d3cf6fc116101955780630d3cf6fc14610260578063134008d31461029457806313bc9f20146102a7578063150b7a02146102c757600080fd5b806301d5062a146101c757806301ffc9a7146101e957806307bd02651461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e23660046118a4565b61067d565b005b3480156101f557600080fd5b50610209610204366004611919565b610753565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b506102527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610215565b34801561026c57600080fd5b506102527f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101e76102a236600461195b565b6107af565b3480156102b357600080fd5b506102096102c23660046119c7565b6108a7565b3480156102d357600080fd5b5061030b6102e2366004611a97565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610215565b34801561034857600080fd5b506102526103573660046119c7565b60009081526020819052604090206001015490565b34801561037857600080fd5b506102096103873660046119c7565b6000908152600160208190526040909120541490565b3480156103a957600080fd5b506101e76103b8366004611aff565b6108cd565b3480156103c957600080fd5b506102096103d83660046119c7565b6108f7565b3480156103e957600080fd5b506101e76103f8366004611aff565b610910565b34801561040957600080fd5b506102096104183660046119c7565b6109a1565b34801561042957600080fd5b506101e76104383660046119c7565b6109b7565b34801561044957600080fd5b5061025261045836600461195b565b610a6d565b34801561046957600080fd5b506101e7610478366004611b70565b610aac565b34801561048957600080fd5b506102527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b3480156104bd57600080fd5b506102096104cc366004611aff565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561050157600080fd5b50610252600081565b34801561051657600080fd5b506102527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b34801561054a57600080fd5b50610252610559366004611c22565b610cb7565b34801561056a57600080fd5b5061030b610579366004611d4b565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b3480156105af57600080fd5b506101e76105be3660046119c7565b610cfc565b3480156105cf57600080fd5b506102526105de3660046119c7565b60009081526001602052604090205490565b3480156105fc57600080fd5b506101e761060b366004611aff565b610ddd565b6101e761061e366004611c22565b610e02565b34801561062f57600080fd5b5061030b61063e366004611df5565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b34801561067457600080fd5b50600254610252565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc16106a781611047565b60006106b7898989898989610a6d565b90506106c38184611054565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516106ff96959493929190611e85565b60405180910390a3831561074857807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161073f91815260200190565b60405180910390a25b505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806107a957506107a982611168565b92915050565b600080527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea157951547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff1661082c5761082c81336111ff565b600061083c888888888888610a6d565b90506108488185611272565b6108548888888861137b565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161088c9493929190611ec3565b60405180910390a361089d81611458565b5050505050505050565b6000818152600160205260408120546001811180156108c65750428111155b9392505050565b6000828152602081905260409020600101546108e881611047565b6108f283836114e7565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146109935760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61099d8282611585565b5050565b6000818152600160208190526040822054610909565b333014610a2c5760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201527f62652074696d656c6f636b000000000000000000000000000000000000000000606482015260840161098a565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b6000868686868686604051602001610a8a96959493929190611e85565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610ad681611047565b888714610b315760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616044820152620e8c6d60eb1b606482015260840161098a565b888514610b8c5760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616044820152620e8c6d60eb1b606482015260840161098a565b6000610b9e8b8b8b8b8b8b8b8b610cb7565b9050610baa8184611054565b60005b8a811015610c685780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610bea57610bea611ef6565b9050602002016020810190610bff9190611f0c565b8d8d86818110610c1157610c11611ef6565b905060200201358c8c87818110610c2a57610c2a611ef6565b9050602002810190610c3c9190611f27565b8c8b604051610c5096959493929190611e85565b60405180910390a3610c6181611f84565b9050610bad565b508315610caa57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610ca191815260200190565b60405180910390a25b5050505050505050505050565b60008888888888888888604051602001610cd8989796959493929190612030565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610d2681611047565b610d2f826109a1565b610da15760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160448201527f6e6e6f742062652063616e63656c6c6564000000000000000000000000000000606482015260840161098a565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610df881611047565b6108f28383611585565b600080527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea157951547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff16610e7f57610e7f81336111ff565b878614610eda5760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616044820152620e8c6d60eb1b606482015260840161098a565b878414610f355760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616044820152620e8c6d60eb1b606482015260840161098a565b6000610f478a8a8a8a8a8a8a8a610cb7565b9050610f538185611272565b60005b898110156110315760008b8b83818110610f7257610f72611ef6565b9050602002016020810190610f879190611f0c565b905060008a8a84818110610f9d57610f9d611ef6565b9050602002013590503660008a8a86818110610fbb57610fbb611ef6565b9050602002810190610fcd9190611f27565b91509150610fdd8484848461137b565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58868686866040516110149493929190611ec3565b60405180910390a3505050508061102a90611f84565b9050610f56565b5061103b81611458565b50505050505050505050565b61105181336111ff565b50565b61105d826108f7565b156110d05760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201527f7265616479207363686564756c65640000000000000000000000000000000000606482015260840161098a565b6002548110156111485760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460448201527f2064656c61790000000000000000000000000000000000000000000000000000606482015260840161098a565b61115281426120f4565b6000928352600160205260409092209190915550565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107a9565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661099d5761123081611604565b61123b836020611616565b60405160200161124c92919061213c565b60408051601f198184030181529082905262461bcd60e51b825261098a916004016121bd565b61127b826108a7565b6112ed5760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f7420726561647900000000000000000000000000000000000000000000606482015260840161098a565b8015806113095750600081815260016020819052604090912054145b61099d5760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560448201527f6e64656e63790000000000000000000000000000000000000000000000000000606482015260840161098a565b6000846001600160a01b03168484846040516113989291906121f0565b60006040518083038185875af1925050503d80600081146113d5576040519150601f19603f3d011682016040523d82523d6000602084013e6113da565b606091505b50509050806114515760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460448201527f72616e73616374696f6e20726576657274656400000000000000000000000000606482015260840161098a565b5050505050565b611461816108a7565b6114d35760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f7420726561647900000000000000000000000000000000000000000000606482015260840161098a565b600090815260016020819052604090912055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661099d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556115413390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff161561099d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606107a96001600160a01b03831660145b60606000611625836002612200565b6116309060026120f4565b67ffffffffffffffff811115611648576116486119e0565b6040519080825280601f01601f191660200182016040528015611672576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106116a9576116a9611ef6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061170c5761170c611ef6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611748846002612200565b6117539060016120f4565b90505b60018111156117f0577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061179457611794611ef6565b1a60f81b8282815181106117aa576117aa611ef6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936117e98161221f565b9050611756565b5083156108c65760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161098a565b80356001600160a01b038116811461185657600080fd5b919050565b60008083601f84011261186d57600080fd5b50813567ffffffffffffffff81111561188557600080fd5b60208301915083602082850101111561189d57600080fd5b9250929050565b600080600080600080600060c0888a0312156118bf57600080fd5b6118c88861183f565b965060208801359550604088013567ffffffffffffffff8111156118eb57600080fd5b6118f78a828b0161185b565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561192b57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108c657600080fd5b60008060008060008060a0878903121561197457600080fd5b61197d8761183f565b955060208701359450604087013567ffffffffffffffff8111156119a057600080fd5b6119ac89828a0161185b565b979a9699509760608101359660809091013595509350505050565b6000602082840312156119d957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a1f57611a1f6119e0565b604052919050565b600082601f830112611a3857600080fd5b813567ffffffffffffffff811115611a5257611a526119e0565b611a656020601f19601f840116016119f6565b818152846020838601011115611a7a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215611aad57600080fd5b611ab68561183f565b9350611ac46020860161183f565b925060408501359150606085013567ffffffffffffffff811115611ae757600080fd5b611af387828801611a27565b91505092959194509250565b60008060408385031215611b1257600080fd5b82359150611b226020840161183f565b90509250929050565b60008083601f840112611b3d57600080fd5b50813567ffffffffffffffff811115611b5557600080fd5b6020830191508360208260051b850101111561189d57600080fd5b600080600080600080600080600060c08a8c031215611b8e57600080fd5b893567ffffffffffffffff80821115611ba657600080fd5b611bb28d838e01611b2b565b909b50995060208c0135915080821115611bcb57600080fd5b611bd78d838e01611b2b565b909950975060408c0135915080821115611bf057600080fd5b50611bfd8c828d01611b2b565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b031215611c3e57600080fd5b883567ffffffffffffffff80821115611c5657600080fd5b611c628c838d01611b2b565b909a50985060208b0135915080821115611c7b57600080fd5b611c878c838d01611b2b565b909850965060408b0135915080821115611ca057600080fd5b50611cad8b828c01611b2b565b999c989b509699959896976060870135966080013595509350505050565b600082601f830112611cdc57600080fd5b8135602067ffffffffffffffff821115611cf857611cf86119e0565b8160051b611d078282016119f6565b9283528481018201928281019087851115611d2157600080fd5b83870192505b84831015611d4057823582529183019190830190611d27565b979650505050505050565b600080600080600060a08688031215611d6357600080fd5b611d6c8661183f565b9450611d7a6020870161183f565b9350604086013567ffffffffffffffff80821115611d9757600080fd5b611da389838a01611ccb565b94506060880135915080821115611db957600080fd5b611dc589838a01611ccb565b93506080880135915080821115611ddb57600080fd5b50611de888828901611a27565b9150509295509295909350565b600080600080600060a08688031215611e0d57600080fd5b611e168661183f565b9450611e246020870161183f565b93506040860135925060608601359150608086013567ffffffffffffffff811115611e4e57600080fd5b611de888828901611a27565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b038716815285602082015260a060408201526000611eae60a083018688611e5a565b60608301949094525060800152949350505050565b6001600160a01b0385168152836020820152606060408201526000611eec606083018486611e5a565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611f1e57600080fd5b6108c68261183f565b6000808335601e19843603018112611f3e57600080fd5b83018035915067ffffffffffffffff821115611f5957600080fd5b60200191503681900382131561189d57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611f9857611f98611f6e565b5060010190565b81835260006020808501808196508560051b810191508460005b878110156120235782840389528135601e19883603018112611fda57600080fd5b8701803567ffffffffffffffff811115611ff357600080fd5b80360389131561200257600080fd5b61200f8682898501611e5a565b9a87019a9550505090840190600101611fb9565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015612071576001600160a01b0361205c8461183f565b16825260209283019290910190600101612043565b5083810360208501528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8911156120aa57600080fd5b8860051b9150818a6020830137818101915050602081016000815260208483030160408501526120db81888a611f9f565b6060850196909652505050608001529695505050505050565b6000821982111561210757612107611f6e565b500190565b60005b8381101561212757818101518382015260200161210f565b83811115612136576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161217481601785016020880161210c565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516121b181602884016020880161210c565b01602801949350505050565b60208152600082518060208401526121dc81604085016020870161210c565b601f01601f19169190910160400192915050565b8183823760009101908152919050565b600081600019048311821515161561221a5761221a611f6e565b500290565b60008161222e5761222e611f6e565b50600019019056fea26469706673582212209de20e776fa5ec921c01d73e63c70618c9bfc4af7f949115659cef18dc6b10b664736f6c634300080a00335f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63fd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000083e3f3dbaf49c93d7c3294481f1d66c91055b36b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000083e3f3dbaf49c93d7c3294481f1d66c91055b36b