0x608060405234801561000f575f80fd5b505f61001f61022460201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600c81526020017f426c6f6e6b436c616e6b65720000000000000000000000000000000000000000815250600790816100ff9190610465565b506040518060400160405280600581526020017f426c6f6e6b000000000000000000000000000000000000000000000000000000815250600690816101449190610465565b50601260055f6101000a81548160ff021916908360ff1602179055506c0c9f2c9cd04674edea4000000060048190555060045460025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516102179190610543565b60405180910390a361055c565b5f33905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102a657607f821691505b6020821081036102b9576102b8610262565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102e0565b61032586836102e0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61036961036461035f8461033d565b610346565b61033d565b9050919050565b5f819050919050565b6103828361034f565b61039661038e82610370565b8484546102ec565b825550505050565b5f90565b6103aa61039e565b6103b5818484610379565b505050565b5b818110156103d8576103cd5f826103a2565b6001810190506103bb565b5050565b601f82111561041d576103ee816102bf565b6103f7846102d1565b81016020851015610406578190505b61041a610412856102d1565b8301826103ba565b50505b505050565b5f82821c905092915050565b5f61043d5f1984600802610422565b1980831691505092915050565b5f610455838361042e565b9150826002028217905092915050565b61046e8261022b565b67ffffffffffffffff81111561048757610486610235565b5b610491825461028f565b61049c8282856103dc565b5f60209050601f8311600181146104cd575f84156104bb578287015190505b6104c5858261044a565b86555061052c565b601f1984166104db866102bf565b5f5b82811015610502578489015182556001820191506020850194506020810190506104dd565b8683101561051f578489015161051b601f89168261042e565b8355505b6001600288020188555050505b505050505050565b61053d8161033d565b82525050565b5f6020820190506105565f830184610534565b92915050565b61211b806105695f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c8063893d20e8116100b6578063b09f12661161007a578063b09f12661461038c578063d28d8852146103aa578063dd62ed3e146103c8578063e4997dc5146103f8578063f2fde38b14610414578063f3bdc2281461043057610140565b8063893d20e8146102d25780638da5cb5b146102f057806395d89b411461030e578063a457c2d71461032c578063a9059cbb1461035c57610140565b8063313ce56711610108578063313ce567146101fc57806332424aa31461021a578063395093511461023857806359bf1abe1461026857806370a0823114610298578063715018a6146102c857610140565b806306fdde0314610144578063095ea7b3146101625780630ecb93c01461019257806318160ddd146101ae57806323b872dd146101cc575b5f80fd5b61014c610460565b60405161015991906118d7565b60405180910390f35b61017c60048036038101906101779190611988565b6104f0565b60405161018991906119e0565b60405180910390f35b6101ac60048036038101906101a791906119f9565b610506565b005b6101b66105f1565b6040516101c39190611a33565b60405180910390f35b6101e660048036038101906101e19190611a4c565b6105fa565b6040516101f391906119e0565b60405180910390f35b6102046106c0565b6040516102119190611ab7565b60405180910390f35b6102226106d5565b60405161022f9190611ab7565b60405180910390f35b610252600480360381019061024d9190611988565b6106e7565b60405161025f91906119e0565b60405180910390f35b610282600480360381019061027d91906119f9565b610787565b60405161028f91906119e0565b60405180910390f35b6102b260048036038101906102ad91906119f9565b6107d9565b6040516102bf9190611a33565b60405180910390f35b6102d061081f565b005b6102da61096d565b6040516102e79190611adf565b60405180910390f35b6102f861097b565b6040516103059190611adf565b60405180910390f35b6103166109a2565b60405161032391906118d7565b60405180910390f35b61034660048036038101906103419190611988565b610a32565b60405161035391906119e0565b60405180910390f35b61037660048036038101906103719190611988565b610b09565b60405161038391906119e0565b60405180910390f35b610394610b1f565b6040516103a191906118d7565b60405180910390f35b6103b2610bab565b6040516103bf91906118d7565b60405180910390f35b6103e260048036038101906103dd9190611af8565b610c37565b6040516103ef9190611a33565b60405180910390f35b610412600480360381019061040d91906119f9565b610cb9565b005b61042e600480360381019061042991906119f9565b610da4565b005b61044a600480360381019061044591906119f9565b610e44565b60405161045791906119e0565b60405180910390f35b60606007805461046f90611b63565b80601f016020809104026020016040519081016040528092919081815260200182805461049b90611b63565b80156104e65780601f106104bd576101008083540402835291602001916104e6565b820191905f5260205f20905b8154815290600101906020018083116104c957829003601f168201915b5050505050905090565b5f6104fc338484610eeb565b6001905092915050565b61050e6110ae565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461059a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059190611bdd565b60405180910390fd5b6001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600454905090565b5f6106068484846110b5565b6106b584336106b0856040518060600160405280602181526020016120c56021913960035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114279092919063ffffffff16565b610eeb565b600190509392505050565b5f60055f9054906101000a900460ff16905090565b60055f9054906101000a900460ff1681565b5f61077d33846107788560035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461148990919063ffffffff16565b610eeb565b6001905092915050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108276110ae565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90611bdd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61097661097b565b905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546109b190611b63565b80601f01602080910402602001604051908101604052809291908181526020018280546109dd90611b63565b8015610a285780601f106109ff57610100808354040283529160200191610a28565b820191905f5260205f20905b815481529060010190602001808311610a0b57829003601f168201915b5050505050905090565b5f610aff3384610afa856040518060400160405280601e81526020017f44656372656173656420616c6c6f77616e63652062656c6f77207a65726f000081525060035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114279092919063ffffffff16565b610eeb565b6001905092915050565b5f610b153384846110b5565b6001905092915050565b60068054610b2c90611b63565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5890611b63565b8015610ba35780601f10610b7a57610100808354040283529160200191610ba3565b820191905f5260205f20905b815481529060010190602001808311610b8657829003601f168201915b505050505081565b60078054610bb890611b63565b80601f0160208091040260200160405190810160405280929190818152602001828054610be490611b63565b8015610c2f5780601f10610c0657610100808354040283529160200191610c2f565b820191905f5260205f20905b815481529060010190602001808311610c1257829003601f168201915b505050505081565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610cc16110ae565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490611bdd565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610dac6110ae565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90611bdd565b60405180910390fd5b610e41816114e6565b50565b5f610e4d6110ae565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090611bdd565b60405180910390fd5b610ee28261160f565b60019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090611c45565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe90611cad565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110a19190611a33565b60405180910390a3505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a90611d15565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890611d7d565b60405180910390fd5b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054811115611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890611de5565b60405180910390fd5b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290611e4d565b60405180910390fd5b6112eb8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461181e90919063ffffffff16565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061137c8160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461148990919063ffffffff16565b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161141a9190611a33565b60405180910390a3505050565b5f83831115829061146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146591906118d7565b60405180910390fd5b505f838561147c9190611e98565b9050809150509392505050565b5f8082846114979190611ecb565b9050838110156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390611f48565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90611fd6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061203e565b60405180910390fd5b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906120a6565b60405180910390fd5b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506117af8160045461181e90919063ffffffff16565b6004819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118129190611a33565b60405180910390a35050565b5f61185f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611427565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6118a982611867565b6118b38185611871565b93506118c3818560208601611881565b6118cc8161188f565b840191505092915050565b5f6020820190508181035f8301526118ef818461189f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611924826118fb565b9050919050565b6119348161191a565b811461193e575f80fd5b50565b5f8135905061194f8161192b565b92915050565b5f819050919050565b61196781611955565b8114611971575f80fd5b50565b5f813590506119828161195e565b92915050565b5f806040838503121561199e5761199d6118f7565b5b5f6119ab85828601611941565b92505060206119bc85828601611974565b9150509250929050565b5f8115159050919050565b6119da816119c6565b82525050565b5f6020820190506119f35f8301846119d1565b92915050565b5f60208284031215611a0e57611a0d6118f7565b5b5f611a1b84828501611941565b91505092915050565b611a2d81611955565b82525050565b5f602082019050611a465f830184611a24565b92915050565b5f805f60608486031215611a6357611a626118f7565b5b5f611a7086828701611941565b9350506020611a8186828701611941565b9250506040611a9286828701611974565b9150509250925092565b5f60ff82169050919050565b611ab181611a9c565b82525050565b5f602082019050611aca5f830184611aa8565b92915050565b611ad98161191a565b82525050565b5f602082019050611af25f830184611ad0565b92915050565b5f8060408385031215611b0e57611b0d6118f7565b5b5f611b1b85828601611941565b9250506020611b2c85828601611941565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b7a57607f821691505b602082108103611b8d57611b8c611b36565b5b50919050565b7f6f6e6c794f776e657200000000000000000000000000000000000000000000005f82015250565b5f611bc7600983611871565b9150611bd282611b93565b602082019050919050565b5f6020820190508181035f830152611bf481611bbb565b9050919050565b7f417070726f76652066726f6d20746865207a65726f20616464726573730000005f82015250565b5f611c2f601d83611871565b9150611c3a82611bfb565b602082019050919050565b5f6020820190508181035f830152611c5c81611c23565b9050919050565b7f417070726f766520746f20746865207a65726f206164647265737300000000005f82015250565b5f611c97601b83611871565b9150611ca282611c63565b602082019050919050565b5f6020820190508181035f830152611cc481611c8b565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f206164647265737300005f82015250565b5f611cff601e83611871565b9150611d0a82611ccb565b602082019050919050565b5f6020820190508181035f830152611d2c81611cf3565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373000000005f82015250565b5f611d67601c83611871565b9150611d7282611d33565b602082019050919050565b5f6020820190508181035f830152611d9481611d5b565b9050919050565b7f5472616e7366657220616d6f756e7420657863656564732062616c616e6365005f82015250565b5f611dcf601f83611871565b9150611dda82611d9b565b602082019050919050565b5f6020820190508181035f830152611dfc81611dc3565b9050919050565b7f6973426c61636b4c6973746564000000000000000000000000000000000000005f82015250565b5f611e37600d83611871565b9150611e4282611e03565b602082019050919050565b5f6020820190508181035f830152611e6481611e2b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611ea282611955565b9150611ead83611955565b9250828203905081811115611ec557611ec4611e6b565b5b92915050565b5f611ed582611955565b9150611ee083611955565b9250828201905080821115611ef857611ef7611e6b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f611f32601b83611871565b9150611f3d82611efe565b602082019050919050565b5f6020820190508181035f830152611f5f81611f26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611fc0602683611871565b9150611fcb82611f66565b604082019050919050565b5f6020820190508181035f830152611fed81611fb4565b9050919050565b7f686f6c64657241646472657373206973206e6f7420426c61636b4c69737465645f82015250565b5f612028602083611871565b915061203382611ff4565b602082019050919050565b5f6020820190508181035f8301526120558161201c565b9050919050565b7f686f6c6465724164647265737320686173206e6f2062616c616e6365000000005f82015250565b5f612090601c83611871565b915061209b8261205c565b602082019050919050565b5f6020820190508181035f8301526120bd81612084565b905091905056fe5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122077eabc78c4f89933ee908090a4014049c1c2a488deb0dc448df0ef4ee5ff175d64736f6c634300081a0033