60806040523480156200001157600080fd5b5060405162004d3138038062004d318339818101604052810190620000379190620006ef565b6040518060400160405280600a81526020017f426c7565204368697073000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f424c55454348495053000000000000000000000000000000000000000000000081525084848484846daaeb6d7670e522a718067333cd4e733cc6cdda760b79bafa08df41ecfa224f810dceb66001828282620000f1620000e5620003f060201b60201c565b620003f860201b60201c565b600083905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff163b1115620002f4578115620001d6578073ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30856040518363ffffffff1660e01b81526004016200019c9291906200077b565b600060405180830381600087803b158015620001b757600080fd5b505af1158015620001cc573d6000803e3d6000fd5b50505050620002f3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000282578073ffffffffffffffffffffffffffffffffffffffff1663a0af290330856040518363ffffffff1660e01b8152600401620002489291906200077b565b600060405180830381600087803b1580156200026357600080fd5b505af115801562000278573d6000803e3d6000fd5b50505050620002f2565b8073ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620002bd9190620007a8565b600060405180830381600087803b158015620002d857600080fd5b505af1158015620002ed573d6000803e3d6000fd5b505050505b5b5b50505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200035f576040517fc49d17ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050816002908162000373919062000a06565b50806003908162000385919062000a06565b50505082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c8190555080600d9081620003e1919062000a06565b50505050505050505062000aed565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004fd82620004d0565b9050919050565b6200050f81620004f0565b81146200051b57600080fd5b50565b6000815190506200052f8162000504565b92915050565b6000819050919050565b6200054a8162000535565b81146200055657600080fd5b50565b6000815190506200056a816200053f565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005c5826200057a565b810181811067ffffffffffffffff82111715620005e757620005e66200058b565b5b80604052505050565b6000620005fc620004bc565b90506200060a8282620005ba565b919050565b600067ffffffffffffffff8211156200062d576200062c6200058b565b5b62000638826200057a565b9050602081019050919050565b60005b838110156200066557808201518184015260208101905062000648565b60008484015250505050565b60006200068862000682846200060f565b620005f0565b905082815260208101848484011115620006a757620006a662000575565b5b620006b484828562000645565b509392505050565b600082601f830112620006d457620006d362000570565b5b8151620006e684826020860162000671565b91505092915050565b6000806000606084860312156200070b576200070a620004c6565b5b60006200071b868287016200051e565b93505060206200072e8682870162000559565b925050604084015167ffffffffffffffff811115620007525762000751620004cb565b5b6200076086828701620006bc565b9150509250925092565b6200077581620004f0565b82525050565b60006040820190506200079260008301856200076a565b620007a160208301846200076a565b9392505050565b6000602082019050620007bf60008301846200076a565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081857607f821691505b6020821081036200082e576200082d620007d0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000859565b620008a4868362000859565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008e7620008e1620008db8462000535565b620008bc565b62000535565b9050919050565b6000819050919050565b6200090383620008c6565b6200091b6200091282620008ee565b84845462000866565b825550505050565b600090565b6200093262000923565b6200093f818484620008f8565b505050565b5b8181101562000967576200095b60008262000928565b60018101905062000945565b5050565b601f821115620009b657620009808162000834565b6200098b8462000849565b810160208510156200099b578190505b620009b3620009aa8562000849565b83018262000944565b50505b505050565b600082821c905092915050565b6000620009db60001984600802620009bb565b1980831691505092915050565b6000620009f68383620009c8565b9150826002028217905092915050565b62000a1182620007c5565b67ffffffffffffffff81111562000a2d5762000a2c6200058b565b5b62000a398254620007ff565b62000a468282856200096b565b600060209050601f83116001811462000a7e576000841562000a69578287015190505b62000a758582620009e8565b86555062000ae5565b601f19841662000a8e8662000834565b60005b8281101562000ab85784890151825560018201915060208501945060208101905062000a91565b8683101562000ad8578489015162000ad4601f891682620009c8565b8355505b6001600288020188555050505b505050505050565b6142348062000afd6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063b9181611116100ad578063d5abeb011161007c578063d5abeb011461059c578063e985e9c5146105ba578063ecba222a146105ea578063f2fde38b14610608578063fca3b5aa14610624576101fb565b8063b918161114610502578063c87b56dd14610532578063c963483c14610562578063ccf30b4014610580576101fb565b8063b0ccc31e116100e9578063b0ccc31e1461047c578063b53992831461049a578063b88d4fde146104ca578063b8d1e532146104e6576101fb565b8063715018a61461041a5780638da5cb5b1461042457806395d89b4114610442578063a22cb46514610460576101fb565b806342966c68116101925780636a627842116101615780636a627842146103805780636c0360eb146103b057806370a08231146103ce578063711bf9b2146103fe576101fb565b806342966c681461030e57806355f804b31461032a5780635ef9432a146103465780636352211e14610350576101fb565b8063095ea7b3116101ce578063095ea7b31461029c57806318160ddd146102b857806323b872dd146102d657806342842e0e146102f2576101fb565b806301ffc9a71461020057806306fdde0314610230578063075461721461024e578063081812fc1461026c575b600080fd5b61021a60048036038101906102159190612bfc565b610640565b6040516102279190612c44565b60405180910390f35b610238610722565b6040516102459190612cef565b60405180910390f35b6102566107b4565b6040516102639190612d52565b60405180910390f35b61028660048036038101906102819190612da3565b6107da565b6040516102939190612d52565b60405180910390f35b6102b660048036038101906102b19190612dfc565b610820565b005b6102c0610839565b6040516102cd9190612e4b565b60405180910390f35b6102f060048036038101906102eb9190612e66565b610843565b005b61030c60048036038101906103079190612e66565b610892565b005b61032860048036038101906103239190612da3565b6108e1565b005b610344600480360381019061033f9190612fee565b6109aa565b005b61034e610a81565b005b61036a60048036038101906103659190612da3565b610b92565b6040516103779190612d52565b60405180910390f35b61039a60048036038101906103959190613037565b610c18565b6040516103a79190612e4b565b60405180910390f35b6103b8610d17565b6040516103c59190612cef565b60405180910390f35b6103e860048036038101906103e39190613037565b610da5565b6040516103f59190612e4b565b60405180910390f35b61041860048036038101906104139190613090565b610e5c565b005b610422610f33565b005b61042c610fbb565b6040516104399190612d52565b60405180910390f35b61044a610fca565b6040516104579190612cef565b60405180910390f35b61047a60048036038101906104759190613090565b61105c565b005b610484611075565b604051610491919061312f565b60405180910390f35b6104b460048036038101906104af9190613037565b61109b565b6040516104c19190612c44565b60405180910390f35b6104e460048036038101906104df91906131eb565b6110bb565b005b61050060048036038101906104fb9190613037565b61110c565b005b61051c60048036038101906105179190613037565b611203565b6040516105299190612c44565b60405180910390f35b61054c60048036038101906105479190612da3565b611223565b6040516105599190612cef565b60405180910390f35b61056a61129f565b6040516105779190612e4b565b60405180910390f35b61059a60048036038101906105959190613090565b6112a5565b005b6105a461132f565b6040516105b19190612e4b565b60405180910390f35b6105d460048036038101906105cf919061326e565b611335565b6040516105e19190612c44565b60405180910390f35b6105f261143d565b6040516105ff9190612c44565b60405180910390f35b610622600480360381019061061d9190613037565b611450565b005b61063e60048036038101906106399190613037565b611547565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061071b575061071a82611607565b5b9050919050565b606060028054610731906132dd565b80601f016020809104026020016040519081016040528092919081815260200182805461075d906132dd565b80156107aa5780601f1061077f576101008083540402835291602001916107aa565b820191906000526020600020905b81548152906001019060200180831161078d57829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006107e582611671565b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8161082a816116bc565b610834838361171f565b505050565b6000600b54905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461088157610880336116bc565b5b61088c848484611836565b50505050565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108d0576108cf336116bc565b5b6108db848484611896565b50505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109689061335a565b60405180910390fd5b61097a816118b6565b807f0c526103b8f47af5516191d0c89a598755bd00faa211a3cb52e4c2cc782f7fe260405160405180910390a250565b6109b2611a04565b73ffffffffffffffffffffffffffffffffffffffff166109d0610fbb565b73ffffffffffffffffffffffffffffffffffffffff1614610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d906133c6565b60405180910390fd5b80600d9081610a359190613588565b507f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c60006001600c54610a689190613689565b604051610a769291906136f8565b60405180910390a150565b610a89610fbb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aed576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160149054906101000a900460ff1615610b34576040517f2aa3491e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060146101000a81548160ff021916908315150217905550565b600080610b9e83611a0c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c069061376d565b60405180910390fd5b80915050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca19061335a565b60405180910390fd5b600c54600b5410610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce7906137d9565b60405180910390fd5b610d1082600b6000815480929190610d07906137f9565b91905055611a49565b9050919050565b600d8054610d24906132dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d50906132dd565b8015610d9d5780601f10610d7257610100808354040283529160200191610d9d565b820191906000526020600020905b815481529060010190602001808311610d8057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c906138b3565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e64611a04565b73ffffffffffffffffffffffffffffffffffffffff16610e82610fbb565b73ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf906133c6565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f3b611a04565b73ffffffffffffffffffffffffffffffffffffffff16610f59610fbb565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa6906133c6565b60405180910390fd5b610fb96000611a96565b565b6000610fc5611b5a565b905090565b606060038054610fd9906132dd565b80601f0160208091040260200160405190810160405280929190818152602001828054611005906132dd565b80156110525780601f1061102757610100808354040283529160200191611052565b820191906000526020600020905b81548152906001019060200180831161103557829003601f168201915b5050505050905090565b81611066816116bc565b6110708383611b83565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146110f9576110f8336116bc565b5b61110585858585611b99565b5050505050565b611114610fbb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611178576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160149054906101000a900460ff16156111bf576040517f2aa3491e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b606061122e82611bfb565b61126d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112649061391f565b60405180910390fd5b600d61127883611c3c565b604051602001611289929190613a4a565b6040516020818303038152906040529050919050565b600b5481565b6112ad611a04565b73ffffffffffffffffffffffffffffffffffffffff166112cb610fbb565b73ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906133c6565b60405180910390fd5b61132b8282611d0a565b5050565b600c5481565b6000801515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613aeb565b60405180910390fd5b60011515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361142a5760019050611437565b6114348383611d65565b90505b92915050565b600160149054906101000a900460ff1681565b611458611a04565b73ffffffffffffffffffffffffffffffffffffffff16611476610fbb565b73ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c3906133c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290613b7d565b60405180910390fd5b61154481611a96565b50565b61154f611a04565b73ffffffffffffffffffffffffffffffffffffffff1661156d610fbb565b73ffffffffffffffffffffffffffffffffffffffff16146115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba906133c6565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61167a81611bfb565b6116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b09061376d565b60405180910390fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171c5761171b81611df9565b5b50565b600061172a82610b92565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613c0f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166117b9611a04565b73ffffffffffffffffffffffffffffffffffffffff1614806117e857506117e7816117e2611a04565b611335565b5b611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90613ca1565b60405180910390fd5b6118318383611f3b565b505050565b611847611841611a04565b82611ff4565b611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613d33565b60405180910390fd5b611891838383612089565b505050565b6118b1838383604051806020016040528060008152506110bb565b505050565b60006118c182610b92565b90506118d1816000846001612382565b6118da82610b92565b90506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a008160008460016124a8565b5050565b600033905090565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611a5583836124ae565b817fc331dc3e37e2ab4d6e65d42a119ffdfab8481b9be24d26704f9f4b4a331d4dd084604051611a859190612d52565b60405180910390a281905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b95611b8e611a04565b83836126cb565b5050565b611baa611ba4611a04565b83611ff4565b611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090613d33565b60405180910390fd5b611bf584848484612837565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611c1d83611a0c565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060006001611c4b84612893565b01905060008167ffffffffffffffff811115611c6a57611c69612ec3565b5b6040519080825280601f01601f191660200182016040528015611c9c5781602001600182028036833780820191505090505b509050600082602001820190505b600115611cff578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611cf357611cf2613d53565b5b04945060008503611caa575b819350505050919050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611e74575060008173ffffffffffffffffffffffffffffffffffffffff163b115b15611f37578073ffffffffffffffffffffffffffffffffffffffff1663c617113430846040518363ffffffff1660e01b8152600401611eb4929190613d82565b602060405180830381865afa158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef59190613dc0565b611f3657816040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611f2d9190612d52565b60405180910390fd5b5b5050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fae83610b92565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061200083610b92565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061204257506120418185611335565b5b8061208057508373ffffffffffffffffffffffffffffffffffffffff16612068846107da565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120a982610b92565b73ffffffffffffffffffffffffffffffffffffffff16146120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690613e5f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590613ef1565b60405180910390fd5b61217b8383836001612382565b8273ffffffffffffffffffffffffffffffffffffffff1661219b82610b92565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613e5f565b60405180910390fd5b6006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461237d83838360016124a8565b505050565b60018111156124a257600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146124165780600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461240e9190613689565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124a15780600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124999190613f11565b925050819055505b5b50505050565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490613f91565b60405180910390fd5b61252681611bfb565b15612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d90613ffd565b60405180910390fd5b612574600083836001612382565b61257d81611bfb565b156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b490613ffd565b60405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126c76000838360016124a8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273090614069565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161282a9190612c44565b60405180910390a3505050565b612842848484612089565b61284e848484846129e6565b61288d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612884906140fb565b60405180910390fd5b50505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106128f1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816128e7576128e6613d53565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061292e576d04ee2d6d415b85acef8100000000838161292457612923613d53565b5b0492506020810190505b662386f26fc10000831061295d57662386f26fc10000838161295357612952613d53565b5b0492506010810190505b6305f5e1008310612986576305f5e100838161297c5761297b613d53565b5b0492506008810190505b61271083106129ab5761271083816129a1576129a0613d53565b5b0492506004810190505b606483106129ce57606483816129c4576129c3613d53565b5b0492506002810190505b600a83106129dd576001810190505b80915050919050565b6000612a078473ffffffffffffffffffffffffffffffffffffffff16612b6d565b15612b60578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a30611a04565b8786866040518563ffffffff1660e01b8152600401612a529493929190614170565b6020604051808303816000875af1925050508015612a8e57506040513d601f19601f82011682018060405250810190612a8b91906141d1565b60015b612b10573d8060008114612abe576040519150601f19603f3d011682016040523d82523d6000602084013e612ac3565b606091505b506000815103612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff906140fb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b65565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bd981612ba4565b8114612be457600080fd5b50565b600081359050612bf681612bd0565b92915050565b600060208284031215612c1257612c11612b9a565b5b6000612c2084828501612be7565b91505092915050565b60008115159050919050565b612c3e81612c29565b82525050565b6000602082019050612c596000830184612c35565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c99578082015181840152602081019050612c7e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cc182612c5f565b612ccb8185612c6a565b9350612cdb818560208601612c7b565b612ce481612ca5565b840191505092915050565b60006020820190508181036000830152612d098184612cb6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3c82612d11565b9050919050565b612d4c81612d31565b82525050565b6000602082019050612d676000830184612d43565b92915050565b6000819050919050565b612d8081612d6d565b8114612d8b57600080fd5b50565b600081359050612d9d81612d77565b92915050565b600060208284031215612db957612db8612b9a565b5b6000612dc784828501612d8e565b91505092915050565b612dd981612d31565b8114612de457600080fd5b50565b600081359050612df681612dd0565b92915050565b60008060408385031215612e1357612e12612b9a565b5b6000612e2185828601612de7565b9250506020612e3285828601612d8e565b9150509250929050565b612e4581612d6d565b82525050565b6000602082019050612e606000830184612e3c565b92915050565b600080600060608486031215612e7f57612e7e612b9a565b5b6000612e8d86828701612de7565b9350506020612e9e86828701612de7565b9250506040612eaf86828701612d8e565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612efb82612ca5565b810181811067ffffffffffffffff82111715612f1a57612f19612ec3565b5b80604052505050565b6000612f2d612b90565b9050612f398282612ef2565b919050565b600067ffffffffffffffff821115612f5957612f58612ec3565b5b612f6282612ca5565b9050602081019050919050565b82818337600083830152505050565b6000612f91612f8c84612f3e565b612f23565b905082815260208101848484011115612fad57612fac612ebe565b5b612fb8848285612f6f565b509392505050565b600082601f830112612fd557612fd4612eb9565b5b8135612fe5848260208601612f7e565b91505092915050565b60006020828403121561300457613003612b9a565b5b600082013567ffffffffffffffff81111561302257613021612b9f565b5b61302e84828501612fc0565b91505092915050565b60006020828403121561304d5761304c612b9a565b5b600061305b84828501612de7565b91505092915050565b61306d81612c29565b811461307857600080fd5b50565b60008135905061308a81613064565b92915050565b600080604083850312156130a7576130a6612b9a565b5b60006130b585828601612de7565b92505060206130c68582860161307b565b9150509250929050565b6000819050919050565b60006130f56130f06130eb84612d11565b6130d0565b612d11565b9050919050565b6000613107826130da565b9050919050565b6000613119826130fc565b9050919050565b6131298161310e565b82525050565b60006020820190506131446000830184613120565b92915050565b600067ffffffffffffffff82111561316557613164612ec3565b5b61316e82612ca5565b9050602081019050919050565b600061318e6131898461314a565b612f23565b9050828152602081018484840111156131aa576131a9612ebe565b5b6131b5848285612f6f565b509392505050565b600082601f8301126131d2576131d1612eb9565b5b81356131e284826020860161317b565b91505092915050565b6000806000806080858703121561320557613204612b9a565b5b600061321387828801612de7565b945050602061322487828801612de7565b935050604061323587828801612d8e565b925050606085013567ffffffffffffffff81111561325657613255612b9f565b5b613262878288016131bd565b91505092959194509250565b6000806040838503121561328557613284612b9a565b5b600061329385828601612de7565b92505060206132a485828601612de7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132f557607f821691505b602082108103613308576133076132ae565b5b50919050565b7f53656e646572206973206e6f7420746865206d696e7465720000000000000000600082015250565b6000613344601883612c6a565b915061334f8261330e565b602082019050919050565b6000602082019050818103600083015261337381613337565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133b0602083612c6a565b91506133bb8261337a565b602082019050919050565b600060208201905081810360008301526133df816133a3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026134487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261340b565b613452868361340b565b95508019841693508086168417925050509392505050565b600061348561348061347b84612d6d565b6130d0565b612d6d565b9050919050565b6000819050919050565b61349f8361346a565b6134b36134ab8261348c565b848454613418565b825550505050565b600090565b6134c86134bb565b6134d3818484613496565b505050565b5b818110156134f7576134ec6000826134c0565b6001810190506134d9565b5050565b601f82111561353c5761350d816133e6565b613516846133fb565b81016020851015613525578190505b613539613531856133fb565b8301826134d8565b50505b505050565b600082821c905092915050565b600061355f60001984600802613541565b1980831691505092915050565b6000613578838361354e565b9150826002028217905092915050565b61359182612c5f565b67ffffffffffffffff8111156135aa576135a9612ec3565b5b6135b482546132dd565b6135bf8282856134fb565b600060209050601f8311600181146135f257600084156135e0578287015190505b6135ea858261356c565b865550613652565b601f198416613600866133e6565b60005b8281101561362857848901518255600182019150602085019450602081019050613603565b868310156136455784890151613641601f89168261354e565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061369482612d6d565b915061369f83612d6d565b92508282039050818111156136b7576136b661365a565b5b92915050565b6000819050919050565b60006136e26136dd6136d8846136bd565b6130d0565b612d6d565b9050919050565b6136f2816136c7565b82525050565b600060408201905061370d60008301856136e9565b61371a6020830184612e3c565b9392505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613757601883612c6a565b915061376282613721565b602082019050919050565b600060208201905081810360008301526137868161374a565b9050919050565b7f4d617820737570706c7920726561636865640000000000000000000000000000600082015250565b60006137c3601283612c6a565b91506137ce8261378d565b602082019050919050565b600060208201905081810360008301526137f2816137b6565b9050919050565b600061380482612d6d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138365761383561365a565b5b600182019050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061389d602983612c6a565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b6000613909601583612c6a565b9150613914826138d3565b602082019050919050565b60006020820190508181036000830152613938816138fc565b9050919050565b600081905092915050565b60008154613957816132dd565b613961818661393f565b9450600182166000811461397c5760018114613991576139c4565b60ff19831686528115158202860193506139c4565b61399a856133e6565b60005b838110156139bc5781548189015260018201915060208101905061399d565b838801955050505b50505092915050565b60006139d882612c5f565b6139e2818561393f565b93506139f2818560208601612c7b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613a3460058361393f565b9150613a3f826139fe565b600582019050919050565b6000613a56828561394a565b9150613a6282846139cd565b9150613a6d82613a27565b91508190509392505050565b7f4f70657261746f7220686173206265656e2064656e69656420627920636f6e7460008201527f72616374206f776e65722e000000000000000000000000000000000000000000602082015250565b6000613ad5602b83612c6a565b9150613ae082613a79565b604082019050919050565b60006020820190508181036000830152613b0481613ac8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b67602683612c6a565b9150613b7282613b0b565b604082019050919050565b60006020820190508181036000830152613b9681613b5a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf9602183612c6a565b9150613c0482613b9d565b604082019050919050565b60006020820190508181036000830152613c2881613bec565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613c8b603d83612c6a565b9150613c9682613c2f565b604082019050919050565b60006020820190508181036000830152613cba81613c7e565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613d1d602d83612c6a565b9150613d2882613cc1565b604082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000604082019050613d976000830185612d43565b613da46020830184612d43565b9392505050565b600081519050613dba81613064565b92915050565b600060208284031215613dd657613dd5612b9a565b5b6000613de484828501613dab565b91505092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613e49602583612c6a565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613edb602483612c6a565b9150613ee682613e7f565b604082019050919050565b60006020820190508181036000830152613f0a81613ece565b9050919050565b6000613f1c82612d6d565b9150613f2783612d6d565b9250828201905080821115613f3f57613f3e61365a565b5b92915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613f7b602083612c6a565b9150613f8682613f45565b602082019050919050565b60006020820190508181036000830152613faa81613f6e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613fe7601c83612c6a565b9150613ff282613fb1565b602082019050919050565b6000602082019050818103600083015261401681613fda565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614053601983612c6a565b915061405e8261401d565b602082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006140e5603283612c6a565b91506140f082614089565b604082019050919050565b60006020820190508181036000830152614114816140d8565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006141428261411b565b61414c8185614126565b935061415c818560208601612c7b565b61416581612ca5565b840191505092915050565b60006080820190506141856000830187612d43565b6141926020830186612d43565b61419f6040830185612e3c565b81810360608301526141b18184614137565b905095945050505050565b6000815190506141cb81612bd0565b92915050565b6000602082840312156141e7576141e6612b9a565b5b60006141f5848285016141bc565b9150509291505056fea2646970667358221220c5dd22c3dffa4512e3a865ef514b89df6ad6078c93c1dddd87c2e6b82d82058664736f6c63430008120033000000000000000000000000abc9943f4d40d1b0837a04483a9a0939b319cdb9000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f7374617469632e77696c642e78797a2f746f6b656e732f756e72657665616c65642f31313230000000000000000000000000000000000000