60806040526001600560146101000a81548160ff0219169083151502179055503480156200002b575f80fd5b50336040518060400160405280600981526020017f53756e44756d47616900000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f44756d47616900000000000000000000000000000000000000000000000000008152508160039081620000aa9190620007e7565b508060049081620000bc9190620007e7565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000132575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200012991906200090e565b60405180910390fd5b62000143816200021260201b60201c565b5062000162336b033b2e3c9fd0803ce8000000620002d560201b60201c565b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620009f7565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000348575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200033f91906200090e565b60405180910390fd5b6200035b5f83836200035f60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620003b3578060025f828254620003a6919062000956565b9250508190555062000484565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200043f578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200043693929190620009a1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004cd578060025f828254039250508190555062000517565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005769190620009dc565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620005ff57607f821691505b602082108103620006155762000614620005ba565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200063c565b6200068586836200063c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620006cf620006c9620006c3846200069d565b620006a6565b6200069d565b9050919050565b5f819050919050565b620006ea83620006af565b62000702620006f982620006d6565b84845462000648565b825550505050565b5f90565b620007186200070a565b62000725818484620006df565b505050565b5b818110156200074c57620007405f826200070e565b6001810190506200072b565b5050565b601f8211156200079b5762000765816200061b565b62000770846200062d565b8101602085101562000780578190505b620007986200078f856200062d565b8301826200072a565b50505b505050565b5f82821c905092915050565b5f620007bd5f1984600802620007a0565b1980831691505092915050565b5f620007d78383620007ac565b9150826002028217905092915050565b620007f28262000583565b67ffffffffffffffff8111156200080e576200080d6200058d565b5b6200081a8254620005e7565b6200082782828562000750565b5f60209050601f8311600181146200085d575f841562000848578287015190505b620008548582620007ca565b865550620008c3565b601f1984166200086d866200061b565b5f5b8281101562000896578489015182556001820191506020850194506020810190506200086f565b86831015620008b65784890151620008b2601f891682620007ac565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620008f682620008cb565b9050919050565b6200090881620008ea565b82525050565b5f602082019050620009235f830184620008fd565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000962826200069d565b91506200096f836200069d565b92508282019050808211156200098a576200098962000929565b5b92915050565b6200099b816200069d565b82525050565b5f606082019050620009b65f830186620008fd565b620009c5602083018562000990565b620009d4604083018462000990565b949350505050565b5f602082019050620009f15f83018462000990565b92915050565b61155b8062000a055f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c806370a08231116100a057806395d89b411161006f57806395d89b41146102bc578063a9059cbb146102da578063dd62ed3e1461030a578063f2fde38b1461033a578063f928364c1461035657610114565b806370a0823114610248578063715018a6146102785780637c587ed1146102825780638da5cb5b1461029e57610114565b806318160ddd116100e757806318160ddd146101a257806323b872dd146101c057806329c6b348146101f0578063313ce5671461020e578063412201041461022c57610114565b8063066471251461011857806306fdde0314610136578063095ea7b3146101545780631774f7c014610184575b5f80fd5b610120610360565b60405161012d9190611035565b60405180910390f35b61013e610365565b60405161014b91906110d8565b60405180910390f35b61016e60048036038101906101699190611180565b6103f5565b60405161017b91906111d8565b60405180910390f35b61018c610417565b6040516101999190611035565b60405180910390f35b6101aa61041c565b6040516101b79190611035565b60405180910390f35b6101da60048036038101906101d591906111f1565b610425565b6040516101e791906111d8565b60405180910390f35b6101f8610453565b60405161020591906111d8565b60405180910390f35b610216610466565b604051610223919061125c565b60405180910390f35b6102466004803603810190610241919061129f565b61046e565b005b610262600480360381019061025d91906112dd565b6104ce565b60405161026f9190611035565b60405180910390f35b610280610513565b005b61029c6004803603810190610297919061129f565b610526565b005b6102a6610586565b6040516102b39190611317565b60405180910390f35b6102c46105ae565b6040516102d191906110d8565b60405180910390f35b6102f460048036038101906102ef9190611180565b61063e565b60405161030191906111d8565b60405180910390f35b610324600480360381019061031f9190611330565b610660565b6040516103319190611035565b60405180910390f35b610354600480360381019061034f91906112dd565b6106e2565b005b61035e610766565b005b600381565b6060600380546103749061139b565b80601f01602080910402602001604051908101604052809291908181526020018280546103a09061139b565b80156103eb5780601f106103c2576101008083540402835291602001916103eb565b820191905f5260205f20905b8154815290600101906020018083116103ce57829003601f168201915b5050505050905090565b5f806103ff61078a565b905061040c818585610791565b600191505092915050565b600381565b5f600254905090565b5f8061042f61078a565b905061043c8582856107a3565b610447858585610835565b60019150509392505050565b600560149054906101000a900460ff1681565b5f6012905090565b6104766109fb565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61051b6109fb565b6105245f610a82565b565b61052e6109fb565b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105bd9061139b565b80601f01602080910402602001604051908101604052809291908181526020018280546105e99061139b565b80156106345780601f1061060b57610100808354040283529160200191610634565b820191905f5260205f20905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b5f8061064861078a565b9050610655818585610835565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6106ea6109fb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361075a575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016107519190611317565b60405180910390fd5b61076381610a82565b50565b61076e6109fb565b5f600560146101000a81548160ff021916908315150217905550565b5f33905090565b61079e8383836001610b45565b505050565b5f6107ae8484610660565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082f5781811015610820578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610817939291906113cb565b60405180910390fd5b61082e84848484035f610b45565b5b50505050565b600560149054906101000a900460ff16156109eb575f61085361041c565b90505f6064600383610865919061142d565b61086f919061149b565b90505f6064600384610881919061142d565b61088b919061149b565b905060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156108f6575081846108ea876104ce565b6108f491906114cb565b115b1561094d5783610905866104ce565b61090f91906114cb565b826040517f3a93861d0000000000000000000000000000000000000000000000000000000081526004016109449291906114fe565b60405180910390fd5b60075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156109a357508084115b156109e75783816040517fc3516a770000000000000000000000000000000000000000000000000000000081526004016109de9291906114fe565b60405180910390fd5b5050505b6109f6838383610d14565b505050565b610a0361078a565b73ffffffffffffffffffffffffffffffffffffffff16610a21610586565b73ffffffffffffffffffffffffffffffffffffffff1614610a8057610a4461078a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a779190611317565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bb5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610bac9190611317565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c25575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610c1c9190611317565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610d0e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d059190611035565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d84575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d7b9190611317565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610df4575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610deb9190611317565b60405180910390fd5b610dff838383610e04565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e54578060025f828254610e4891906114cb565b92505081905550610f22565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610edd578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ed4939291906113cb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f69578060025f8282540392505081905550610fb3565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110109190611035565b60405180910390a3505050565b5f819050919050565b61102f8161101d565b82525050565b5f6020820190506110485f830184611026565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561108557808201518184015260208101905061106a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6110aa8261104e565b6110b48185611058565b93506110c4818560208601611068565b6110cd81611090565b840191505092915050565b5f6020820190508181035f8301526110f081846110a0565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611125826110fc565b9050919050565b6111358161111b565b811461113f575f80fd5b50565b5f813590506111508161112c565b92915050565b61115f8161101d565b8114611169575f80fd5b50565b5f8135905061117a81611156565b92915050565b5f8060408385031215611196576111956110f8565b5b5f6111a385828601611142565b92505060206111b48582860161116c565b9150509250929050565b5f8115159050919050565b6111d2816111be565b82525050565b5f6020820190506111eb5f8301846111c9565b92915050565b5f805f60608486031215611208576112076110f8565b5b5f61121586828701611142565b935050602061122686828701611142565b92505060406112378682870161116c565b9150509250925092565b5f60ff82169050919050565b61125681611241565b82525050565b5f60208201905061126f5f83018461124d565b92915050565b61127e816111be565b8114611288575f80fd5b50565b5f8135905061129981611275565b92915050565b5f80604083850312156112b5576112b46110f8565b5b5f6112c285828601611142565b92505060206112d38582860161128b565b9150509250929050565b5f602082840312156112f2576112f16110f8565b5b5f6112ff84828501611142565b91505092915050565b6113118161111b565b82525050565b5f60208201905061132a5f830184611308565b92915050565b5f8060408385031215611346576113456110f8565b5b5f61135385828601611142565b925050602061136485828601611142565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806113b257607f821691505b6020821081036113c5576113c461136e565b5b50919050565b5f6060820190506113de5f830186611308565b6113eb6020830185611026565b6113f86040830184611026565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114378261101d565b91506114428361101d565b92508282026114508161101d565b9150828204841483151761146757611466611400565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6114a58261101d565b91506114b08361101d565b9250826114c0576114bf61146e565b5b828204905092915050565b5f6114d58261101d565b91506114e08361101d565b92508282019050808211156114f8576114f7611400565b5b92915050565b5f6040820190506115115f830185611026565b61151e6020830184611026565b939250505056fea2646970667358221220b67c4aa8c04aca186c786f697e5ff86afa10b2a7b005948ed4369c713cb901a364736f6c63430008140033