60806040525f80555f60015534801562000017575f80fd5b506012600a6200002891906200034a565b6305f5e1006200003991906200039a565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a6200018a91906200034a565b6305f5e1006200019b91906200039a565b604051620001aa9190620003f5565b60405180910390a362000410565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000242578086048111156200021a5762000219620001b8565b5b60018516156200022a5780820291505b80810290506200023a85620001e5565b9450620001fa565b94509492505050565b5f826200025c57600190506200032e565b816200026b575f90506200032e565b81600181146200028457600281146200028f57620002c5565b60019150506200032e565b60ff841115620002a457620002a3620001b8565b5b8360020a915084821115620002be57620002bd620001b8565b5b506200032e565b5060208310610133831016604e8410600b8410161715620002ff5782820a905083811115620002f957620002f8620001b8565b5b6200032e565b6200030e8484846001620001f1565b92509050818404811115620003285762000327620001b8565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620003568262000335565b915062000363836200033e565b9250620003927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200024b565b905092915050565b5f620003a68262000335565b9150620003b38362000335565b9250828202620003c38162000335565b91508282048414831517620003dd57620003dc620001b8565b5b5092915050565b620003ef8162000335565b82525050565b5f6020820190506200040a5f830184620003e4565b92915050565b611444806200041e5f395ff3fe60806040526004361061009f575f3560e01c806370a082311161006357806370a08231146101a057806395d89b41146101dc578063a9059cbb14610206578063c9567bf914610242578063dd62ed3e14610258578063fa66f11c14610294576100a6565b806306fdde03146100aa578063095ea7b3146100d457806318160ddd1461011057806323b872dd1461013a578063313ce56714610176576100a6565b366100a657005b5f80fd5b3480156100b5575f80fd5b506100be6102bc565b6040516100cb9190610d35565b60405180910390f35b3480156100df575f80fd5b506100fa60048036038101906100f59190610de6565b6102f5565b6040516101079190610e3e565b60405180910390f35b34801561011b575f80fd5b506101246103e2565b6040516101319190610e66565b60405180910390f35b348015610145575f80fd5b50610160600480360381019061015b9190610e7f565b610402565b60405161016d9190610e3e565b60405180910390f35b348015610181575f80fd5b5061018a6104a5565b6040516101979190610eea565b60405180910390f35b3480156101ab575f80fd5b506101c660048036038101906101c19190610f03565b6104aa565b6040516101d39190610e66565b60405180910390f35b3480156101e7575f80fd5b506101f06104bf565b6040516101fd9190610d35565b60405180910390f35b348015610211575f80fd5b5061022c60048036038101906102279190610de6565b6104f8565b6040516102399190610e3e565b60405180910390f35b34801561024d575f80fd5b5061025661050c565b005b348015610263575f80fd5b5061027e60048036038101906102799190610f2e565b61058d565b60405161028b9190610e66565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190610f6c565b6105ad565b005b6040518060400160405280600481526020017f50454e470000000000000000000000000000000000000000000000000000000081525081565b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103d09190610e66565b60405180910390a36001905092915050565b6012600a6103f09190611106565b6305f5e1006103ff9190611150565b81565b5f8160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461048a9190611191565b9250508190555061049c848484610609565b90509392505050565b601281565b6002602052805f5260405f205f915090505481565b6040518060400160405280600481526020017f50454e470000000000000000000000000000000000000000000000000000000081525081565b5f610504338484610609565b905092915050565b73610d6a61b8331601461c52c68ef234bee3c99dcd73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610557575f80fd5b600460159054906101000a900460ff1615610570575f80fd5b6001600460156101000a81548160ff021916908315150217905550565b6003602052815f5260405f20602052805f5260405f205f91509150505481565b73610d6a61b8331601461c52c68ef234bee3c99dcd73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f8575f80fd5b815f81905550806001819055505050565b5f600460159054906101000a900460ff1680610664575073610d6a61b8331601461c52c68ef234bee3c99dcd73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806106ae575073610d6a61b8331601461c52c68ef234bee3c99dcd73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6106b6575f80fd5b600460159054906101000a900460ff1615801561071f57505f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561072a57505f82115b15610770578260045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107bc9190611191565b9250508190555060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561082c5750600460149054906101000a900460ff16155b801561089d575060646012600a6108439190611106565b6305f5e1006108529190611150565b61085c91906111f1565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b15610ad9576001600460146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156108d9576108d8611221565b5b6040519080825280602002602001820160405280156109075781602001602082028036833780820191505090505b50905030815f8151811061091e5761091d61124e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106109815761098061124e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94760646012600a6109fb9190611106565b6305f5e100610a0a9190611150565b610a1491906111f1565b5f8430426040518663ffffffff1660e01b8152600401610a38959493929190611383565b5f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b5050505073610d6a61b8331601461c52c68ef234bee3c99dcd73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610abc573d5f803e3d5ffd5b505f600460146101000a81548160ff021916908315150217905550505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610be8575f605f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610b6b57600154610b6e565b5f545b84610b799190611150565b610b8391906111f1565b90508083610b919190611191565b92508060025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610bdf91906113db565b92505081905550505b8160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c3491906113db565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c989190610e66565b60405180910390a3600190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610ce2578082015181840152602081019050610cc7565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610d0782610cab565b610d118185610cb5565b9350610d21818560208601610cc5565b610d2a81610ced565b840191505092915050565b5f6020820190508181035f830152610d4d8184610cfd565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d8282610d59565b9050919050565b610d9281610d78565b8114610d9c575f80fd5b50565b5f81359050610dad81610d89565b92915050565b5f819050919050565b610dc581610db3565b8114610dcf575f80fd5b50565b5f81359050610de081610dbc565b92915050565b5f8060408385031215610dfc57610dfb610d55565b5b5f610e0985828601610d9f565b9250506020610e1a85828601610dd2565b9150509250929050565b5f8115159050919050565b610e3881610e24565b82525050565b5f602082019050610e515f830184610e2f565b92915050565b610e6081610db3565b82525050565b5f602082019050610e795f830184610e57565b92915050565b5f805f60608486031215610e9657610e95610d55565b5b5f610ea386828701610d9f565b9350506020610eb486828701610d9f565b9250506040610ec586828701610dd2565b9150509250925092565b5f60ff82169050919050565b610ee481610ecf565b82525050565b5f602082019050610efd5f830184610edb565b92915050565b5f60208284031215610f1857610f17610d55565b5b5f610f2584828501610d9f565b91505092915050565b5f8060408385031215610f4457610f43610d55565b5b5f610f5185828601610d9f565b9250506020610f6285828601610d9f565b9150509250929050565b5f8060408385031215610f8257610f81610d55565b5b5f610f8f85828601610dd2565b9250506020610fa085828601610dd2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561102c5780860481111561100857611007610faa565b5b60018516156110175780820291505b808102905061102585610fd7565b9450610fec565b94509492505050565b5f8261104457600190506110ff565b81611051575f90506110ff565b81600181146110675760028114611071576110a0565b60019150506110ff565b60ff84111561108357611082610faa565b5b8360020a91508482111561109a57611099610faa565b5b506110ff565b5060208310610133831016604e8410600b84101617156110d55782820a9050838111156110d0576110cf610faa565b5b6110ff565b6110e28484846001610fe3565b925090508184048111156110f9576110f8610faa565b5b81810290505b9392505050565b5f61111082610db3565b915061111b83610ecf565b92506111487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611035565b905092915050565b5f61115a82610db3565b915061116583610db3565b925082820261117381610db3565b9150828204841483151761118a57611189610faa565b5b5092915050565b5f61119b82610db3565b91506111a683610db3565b92508282039050818111156111be576111bd610faa565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6111fb82610db3565b915061120683610db3565b925082611216576112156111c4565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6112a76112a261129d8461127b565b611284565b610db3565b9050919050565b6112b78161128d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6112ef81610d78565b82525050565b5f61130083836112e6565b60208301905092915050565b5f602082019050919050565b5f611322826112bd565b61132c81856112c7565b9350611337836112d7565b805f5b8381101561136757815161134e88826112f5565b97506113598361130c565b92505060018101905061133a565b5085935050505092915050565b61137d81610d78565b82525050565b5f60a0820190506113965f830188610e57565b6113a360208301876112ae565b81810360408301526113b58186611318565b90506113c46060830185611374565b6113d16080830184610e57565b9695505050505050565b5f6113e582610db3565b91506113f083610db3565b925082820190508082111561140857611407610faa565b5b9291505056fea2646970667358221220a7f291eb029d6360f64854df38ab435e98dd8cffa144805438da5d19a0b4ec4564736f6c63430008140033