60a060405234801561000f575f80fd5b50604051611aff380380611aff8339818101604052810190610031919061038d565b8383833383838160039081610046919061062d565b508060049081610056919061062d565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c9575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c0919061073b565b60405180910390fd5b6100d8816100fa60201b60201c565b508060ff1660808160ff16815250505050508060078190555050505050610754565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61021c826101d6565b810181811067ffffffffffffffff8211171561023b5761023a6101e6565b5b80604052505050565b5f61024d6101bd565b90506102598282610213565b919050565b5f67ffffffffffffffff821115610278576102776101e6565b5b610281826101d6565b9050602081019050919050565b5f5b838110156102ab578082015181840152602081019050610290565b5f8484015250505050565b5f6102c86102c38461025e565b610244565b9050828152602081018484840111156102e4576102e36101d2565b5b6102ef84828561028e565b509392505050565b5f82601f83011261030b5761030a6101ce565b5b815161031b8482602086016102b6565b91505092915050565b5f60ff82169050919050565b61033981610324565b8114610343575f80fd5b50565b5f8151905061035481610330565b92915050565b5f819050919050565b61036c8161035a565b8114610376575f80fd5b50565b5f8151905061038781610363565b92915050565b5f805f80608085870312156103a5576103a46101c6565b5b5f85015167ffffffffffffffff8111156103c2576103c16101ca565b5b6103ce878288016102f7565b945050602085015167ffffffffffffffff8111156103ef576103ee6101ca565b5b6103fb878288016102f7565b935050604061040c87828801610346565b925050606061041d87828801610379565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061047757607f821691505b60208210810361048a57610489610433565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104b1565b6104f686836104b1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61053161052c6105278461035a565b61050e565b61035a565b9050919050565b5f819050919050565b61054a83610517565b61055e61055682610538565b8484546104bd565b825550505050565b5f90565b610572610566565b61057d818484610541565b505050565b5b818110156105a0576105955f8261056a565b600181019050610583565b5050565b601f8211156105e5576105b681610490565b6105bf846104a2565b810160208510156105ce578190505b6105e26105da856104a2565b830182610582565b50505b505050565b5f82821c905092915050565b5f6106055f19846008026105ea565b1980831691505092915050565b5f61061d83836105f6565b9150826002028217905092915050565b61063682610429565b67ffffffffffffffff81111561064f5761064e6101e6565b5b6106598254610460565b6106648282856105a4565b5f60209050601f831160018114610695575f8415610683578287015190505b61068d8582610612565b8655506106f4565b601f1984166106a386610490565b5f5b828110156106ca578489015182556001820191506020850194506020810190506106a5565b868310156106e757848901516106e3601f8916826105f6565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610725826106fc565b9050919050565b6107358161071b565b82525050565b5f60208201905061074e5f83018461072c565b92915050565b60805161139361076c5f395f61043b01526113935ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c8063576782b9116100a057806395d89b411161006f57806395d89b41146102a55780639f678cca146102c3578063a9059cbb146102cd578063dd62ed3e146102fd578063f2fde38b1461032d57610109565b8063576782b91461021d57806370a082311461024d578063715018a61461027d5780638da5cb5b1461028757610109565b80632a8f7603116100dc5780632a8f7603146101a9578063313ce567146101c757806340c10f19146101e557806347de11c21461020157610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b610115610349565b6040516101229190610f79565b60405180910390f35b6101456004803603810190610140919061102a565b6103d9565b6040516101529190611082565b60405180910390f35b6101636103fb565b60405161017091906110aa565b60405180910390f35b610193600480360381019061018e91906110c3565b610404565b6040516101a09190611082565b60405180910390f35b6101b1610432565b6040516101be91906110aa565b60405180910390f35b6101cf610438565b6040516101dc919061112e565b60405180910390f35b6101ff60048036038101906101fa919061102a565b61045f565b005b61021b60048036038101906102169190611147565b610475565b005b61023760048036038101906102329190611172565b610487565b60405161024491906110aa565b60405180910390f35b61026760048036038101906102629190611172565b61049c565b60405161027491906110aa565b60405180910390f35b6102856104e1565b005b61028f6104f4565b60405161029c91906111ac565b60405180910390f35b6102ad61051c565b6040516102ba9190610f79565b60405180910390f35b6102cb6105ac565b005b6102e760048036038101906102e2919061102a565b61067b565b6040516102f49190611082565b60405180910390f35b610317600480360381019061031291906111c5565b61069d565b60405161032491906110aa565b60405180910390f35b61034760048036038101906103429190611172565b61071f565b005b60606003805461035890611230565b80601f016020809104026020016040519081016040528092919081815260200182805461038490611230565b80156103cf5780601f106103a6576101008083540402835291602001916103cf565b820191905f5260205f20905b8154815290600101906020018083116103b257829003601f168201915b5050505050905090565b5f806103e36107a3565b90506103f08185856107aa565b600191505092915050565b5f600254905090565b5f8061040e6107a3565b905061041b8582856107bc565b61042685858561084e565b60019150509392505050565b60075481565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b61046761093e565b61047182826109c5565b5050565b61047d61093e565b8060078190555050565b6006602052805f5260405f205f915090505481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104e961093e565b6104f25f610a44565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461052b90611230565b80601f016020809104026020016040519081016040528092919081815260200182805461055790611230565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050905090565b4360065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361062b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610622906112aa565b60405180910390fd5b610637336007546109c5565b4360065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550565b5f806106856107a3565b905061069281858561084e565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61072761093e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610797575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161078e91906111ac565b60405180910390fd5b6107a081610a44565b50565b5f33905090565b6107b78383836001610b07565b505050565b5f6107c7848461069d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108485781811015610839578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610830939291906112c8565b60405180910390fd5b61084784848484035f610b07565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108be575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108b591906111ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361092e575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161092591906111ac565b60405180910390fd5b610939838383610cd6565b505050565b6109466107a3565b73ffffffffffffffffffffffffffffffffffffffff166109646104f4565b73ffffffffffffffffffffffffffffffffffffffff16146109c3576109876107a3565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109ba91906111ac565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a35575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a2c91906111ac565b60405180910390fd5b610a405f8383610cd6565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b77575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b6e91906111ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610be7575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610bde91906111ac565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610cd0578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610cc791906110aa565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d26578060025f828254610d1a919061132a565b92505081905550610df4565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610daf578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610da6939291906112c8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e3b578060025f8282540392505081905550610e85565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ee291906110aa565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610f26578082015181840152602081019050610f0b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610f4b82610eef565b610f558185610ef9565b9350610f65818560208601610f09565b610f6e81610f31565b840191505092915050565b5f6020820190508181035f830152610f918184610f41565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610fc682610f9d565b9050919050565b610fd681610fbc565b8114610fe0575f80fd5b50565b5f81359050610ff181610fcd565b92915050565b5f819050919050565b61100981610ff7565b8114611013575f80fd5b50565b5f8135905061102481611000565b92915050565b5f80604083850312156110405761103f610f99565b5b5f61104d85828601610fe3565b925050602061105e85828601611016565b9150509250929050565b5f8115159050919050565b61107c81611068565b82525050565b5f6020820190506110955f830184611073565b92915050565b6110a481610ff7565b82525050565b5f6020820190506110bd5f83018461109b565b92915050565b5f805f606084860312156110da576110d9610f99565b5b5f6110e786828701610fe3565b93505060206110f886828701610fe3565b925050604061110986828701611016565b9150509250925092565b5f60ff82169050919050565b61112881611113565b82525050565b5f6020820190506111415f83018461111f565b92915050565b5f6020828403121561115c5761115b610f99565b5b5f61116984828501611016565b91505092915050565b5f6020828403121561118757611186610f99565b5b5f61119484828501610fe3565b91505092915050565b6111a681610fbc565b82525050565b5f6020820190506111bf5f83018461119d565b92915050565b5f80604083850312156111db576111da610f99565b5b5f6111e885828601610fe3565b92505060206111f985828601610fe3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061124757607f821691505b60208210810361125a57611259611203565b5b50919050565b7f4d6f6e6579447269703a20616c726561647920647269707065640000000000005f82015250565b5f611294601a83610ef9565b915061129f82611260565b602082019050919050565b5f6020820190508181035f8301526112c181611288565b9050919050565b5f6060820190506112db5f83018661119d565b6112e8602083018561109b565b6112f5604083018461109b565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61133482610ff7565b915061133f83610ff7565b9250828201905080821115611357576113566112fd565b5b9291505056fea264697066735822122093480bf21e818ad1fd1c20adf1429371a66396921f556549ef8aac6c4eefd39464736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000846616b652057494600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035749460000000000000000000000000000000000000000000000000000000000