608060405234801561000f575f80fd5b5061002c6100216100f660201b60201c565b6100fd60201b60201c565b6040518060400160405280600681526020017f4f4b6d61676100000000000000000000000000000000000000000000000000008152506004908161007091906104ef565b506040518060400160405280600681526020017f4f4b6d6167610000000000000000000000000000000000000000000000000000815250600590816100b591906104ef565b506100f1336100c861013f60201b60201c565b60ff16600a6100d7919061071a565b633b9aca006100e69190610764565b61014760201b60201c565b610878565b5f33905090565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ac906107ff565b60405180910390fd5b6101c65f83836102ab60201b60201c565b8060035f8282546101d7919061081d565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461022a919061081d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161028e919061085f565b60405180910390a36102a75f83836102b060201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061033057607f821691505b602082108103610343576103426102ec565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261036a565b6103af868361036a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103f36103ee6103e9846103c7565b6103d0565b6103c7565b9050919050565b5f819050919050565b61040c836103d9565b610420610418826103fa565b848454610376565b825550505050565b5f90565b610434610428565b61043f818484610403565b505050565b5b81811015610462576104575f8261042c565b600181019050610445565b5050565b601f8211156104a75761047881610349565b6104818461035b565b81016020851015610490578190505b6104a461049c8561035b565b830182610444565b50505b505050565b5f82821c905092915050565b5f6104c75f19846008026104ac565b1980831691505092915050565b5f6104df83836104b8565b9150826002028217905092915050565b6104f8826102b5565b67ffffffffffffffff811115610511576105106102bf565b5b61051b8254610319565b610526828285610466565b5f60209050601f831160018114610557575f8415610545578287015190505b61054f85826104d4565b8655506105b6565b601f19841661056586610349565b5f5b8281101561058c57848901518255600182019150602085019450602081019050610567565b868310156105a957848901516105a5601f8916826104b8565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156106405780860481111561061c5761061b6105be565b5b600185161561062b5780820291505b8081029050610639856105eb565b9450610600565b94509492505050565b5f826106585760019050610713565b81610665575f9050610713565b816001811461067b5760028114610685576106b4565b6001915050610713565b60ff841115610697576106966105be565b5b8360020a9150848211156106ae576106ad6105be565b5b50610713565b5060208310610133831016604e8410600b84101617156106e95782820a9050838111156106e4576106e36105be565b5b610713565b6106f684848460016105f7565b9250905081840481111561070d5761070c6105be565b5b81810290505b9392505050565b5f610724826103c7565b915061072f836103c7565b925061075c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610649565b905092915050565b5f61076e826103c7565b9150610779836103c7565b9250828202610787816103c7565b9150828204841483151761079e5761079d6105be565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6107e9601f836107a5565b91506107f4826107b5565b602082019050919050565b5f6020820190508181035f830152610816816107dd565b9050919050565b5f610827826103c7565b9150610832836103c7565b925082820190508082111561084a576108496105be565b5b92915050565b610859816103c7565b82525050565b5f6020820190506108725f830184610850565b92915050565b61160a806108855f395ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c8063715018a61161008a578063a457c2d711610064578063a457c2d71461024c578063a9059cbb1461027c578063dd62ed3e146102ac578063f2fde38b146102dc576100e8565b8063715018a6146102065780638da5cb5b1461021057806395d89b411461022e576100e8565b806323b872dd116100c657806323b872dd14610158578063313ce5671461018857806339509351146101a657806370a08231146101d6576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f46102f8565b6040516101019190610ec9565b60405180910390f35b610124600480360381019061011f9190610f7a565b610388565b6040516101319190610fd2565b60405180910390f35b6101426103a5565b60405161014f9190610ffa565b60405180910390f35b610172600480360381019061016d9190611013565b6103ae565b60405161017f9190610fd2565b60405180910390f35b610190610461565b60405161019d919061107e565b60405180910390f35b6101c060048036038101906101bb9190610f7a565b610469565b6040516101cd9190610fd2565b60405180910390f35b6101f060048036038101906101eb9190611097565b610510565b6040516101fd9190610ffa565b60405180910390f35b61020e610556565b005b610218610656565b60405161022591906110d1565b60405180910390f35b61023661067d565b6040516102439190610ec9565b60405180910390f35b61026660048036038101906102619190610f7a565b61070d565b6040516102739190610fd2565b60405180910390f35b61029660048036038101906102919190610f7a565b6107b4565b6040516102a39190610fd2565b60405180910390f35b6102c660048036038101906102c191906110ea565b6107d1565b6040516102d39190610ffa565b60405180910390f35b6102f660048036038101906102f19190611097565b610853565b005b60606004805461030790611155565b80601f016020809104026020016040519081016040528092919081815260200182805461033390611155565b801561037e5780601f106103555761010080835404028352916020019161037e565b820191905f5260205f20905b81548152906001019060200180831161036157829003601f168201915b5050505050905090565b5f61039b6103946109c2565b84846109c9565b6001905092915050565b5f600354905090565b5f6103ba848484610b8c565b610456846103c66109c2565b8460025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61040d6109c2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461045191906111b2565b6109c9565b600190509392505050565b5f6012905090565b5f6105066104756109c2565b848460025f6104826109c2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461050191906111e5565b6109c9565b6001905092915050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61055e6109c2565b73ffffffffffffffffffffffffffffffffffffffff1661057c610656565b73ffffffffffffffffffffffffffffffffffffffff16146105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990611262565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36106545f610e0d565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461068c90611155565b80601f01602080910402602001604051908101604052809291908181526020018280546106b890611155565b80156107035780601f106106da57610100808354040283529160200191610703565b820191905f5260205f20905b8154815290600101906020018083116106e657829003601f168201915b5050505050905090565b5f6107aa6107196109c2565b848460025f6107266109c2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546107a591906111b2565b6109c9565b6001905092915050565b5f6107c76107c06109c2565b8484610b8c565b6001905092915050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61085b6109c2565b73ffffffffffffffffffffffffffffffffffffffff16610879610656565b73ffffffffffffffffffffffffffffffffffffffff16146108cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c690611262565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361093d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610934906112f0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36109bf81610e0d565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e9061137e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c9061140c565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b7f9190610ffa565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf19061149a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90611528565b60405180910390fd5b610c73838383610e4f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee906115b6565b60405180910390fd5b8181610d0391906111b2565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d9091906111e5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610df49190610ffa565b60405180910390a3610e07848484610e54565b50505050565b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610e9b82610e59565b610ea58185610e63565b9350610eb5818560208601610e73565b610ebe81610e81565b840191505092915050565b5f6020820190508181035f830152610ee18184610e91565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f1682610eed565b9050919050565b610f2681610f0c565b8114610f30575f80fd5b50565b5f81359050610f4181610f1d565b92915050565b5f819050919050565b610f5981610f47565b8114610f63575f80fd5b50565b5f81359050610f7481610f50565b92915050565b5f8060408385031215610f9057610f8f610ee9565b5b5f610f9d85828601610f33565b9250506020610fae85828601610f66565b9150509250929050565b5f8115159050919050565b610fcc81610fb8565b82525050565b5f602082019050610fe55f830184610fc3565b92915050565b610ff481610f47565b82525050565b5f60208201905061100d5f830184610feb565b92915050565b5f805f6060848603121561102a57611029610ee9565b5b5f61103786828701610f33565b935050602061104886828701610f33565b925050604061105986828701610f66565b9150509250925092565b5f60ff82169050919050565b61107881611063565b82525050565b5f6020820190506110915f83018461106f565b92915050565b5f602082840312156110ac576110ab610ee9565b5b5f6110b984828501610f33565b91505092915050565b6110cb81610f0c565b82525050565b5f6020820190506110e45f8301846110c2565b92915050565b5f8060408385031215611100576110ff610ee9565b5b5f61110d85828601610f33565b925050602061111e85828601610f33565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061116c57607f821691505b60208210810361117f5761117e611128565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6111bc82610f47565b91506111c783610f47565b92508282039050818111156111df576111de611185565b5b92915050565b5f6111ef82610f47565b91506111fa83610f47565b925082820190508082111561121257611211611185565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61124c602083610e63565b915061125782611218565b602082019050919050565b5f6020820190508181035f83015261127981611240565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6112da602683610e63565b91506112e582611280565b604082019050919050565b5f6020820190508181035f830152611307816112ce565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611368602483610e63565b91506113738261130e565b604082019050919050565b5f6020820190508181035f8301526113958161135c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6113f6602283610e63565b91506114018261139c565b604082019050919050565b5f6020820190508181035f830152611423816113ea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611484602583610e63565b915061148f8261142a565b604082019050919050565b5f6020820190508181035f8301526114b181611478565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611512602383610e63565b915061151d826114b8565b604082019050919050565b5f6020820190508181035f83015261153f81611506565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6115a0602683610e63565b91506115ab82611546565b604082019050919050565b5f6020820190508181035f8301526115cd81611594565b905091905056fea2646970667358221220d0896eb626425dec3b07e99120b989b6339c659f5f7dd5dd5c5cfde5a1b53a5c64736f6c634300081a0033