608060405234801561000f575f80fd5b506040518060400160405280600a81526020017f5445535420544f4b454e000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f5454000000000000000000000000000000000000000000000000000000000000815250816003908161008b91906102dd565b50806004908161009b91906102dd565b5050506103ac565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061011e57607f821691505b602082108103610131576101306100da565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610158565b61019d8683610158565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101e16101dc6101d7846101b5565b6101be565b6101b5565b9050919050565b5f819050919050565b6101fa836101c7565b61020e610206826101e8565b848454610164565b825550505050565b5f90565b610222610216565b61022d8184846101f1565b505050565b5b81811015610250576102455f8261021a565b600181019050610233565b5050565b601f8211156102955761026681610137565b61026f84610149565b8101602085101561027e578190505b61029261028a85610149565b830182610232565b50505b505050565b5f82821c905092915050565b5f6102b55f198460080261029a565b1980831691505092915050565b5f6102cd83836102a6565b9150826002028217905092915050565b6102e6826100a3565b67ffffffffffffffff8111156102ff576102fe6100ad565b5b6103098254610107565b610314828285610254565b5f60209050601f831160018114610345575f8415610333578287015190505b61033d85826102c2565b8655506103a4565b601f19841661035386610137565b5f5b8281101561037a57848901518255600182019150602085019450602081019050610355565b868310156103975784890151610393601f8916826102a6565b8355505b6001600288020188555050505b505050505050565b610f6d806103b95f395ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c806370a082311161006457806370a082311461015a57806395d89b411461018a5780639c4412d1146101a8578063a9059cbb146101b2578063dd62ed3e146101e25761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f80fd5b6100a8610212565b6040516100b59190610b32565b60405180910390f35b6100d860048036038101906100d39190610be3565b6102a2565b6040516100e59190610c3b565b60405180910390f35b6100f66102c4565b6040516101039190610c63565b60405180910390f35b61012660048036038101906101219190610c7c565b6102cd565b6040516101339190610c3b565b60405180910390f35b6101446102fb565b6040516101519190610ce7565b60405180910390f35b610174600480360381019061016f9190610d00565b610303565b6040516101819190610c63565b60405180910390f35b610192610348565b60405161019f9190610b32565b60405180910390f35b6101b06103d8565b005b6101cc60048036038101906101c79190610be3565b61041c565b6040516101d99190610c3b565b60405180910390f35b6101fc60048036038101906101f79190610d2b565b61043e565b6040516102099190610c63565b60405180910390f35b60606003805461022190610d96565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610d96565b80156102985780601f1061026f57610100808354040283529160200191610298565b820191905f5260205f20905b81548152906001019060200180831161027b57829003601f168201915b5050505050905090565b5f806102ac6104c0565b90506102b98185856104c7565b600191505092915050565b5f600254905090565b5f806102d76104c0565b90506102e48582856104d9565b6102ef85858561056b565b60019150509392505050565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461035790610d96565b80601f016020809104026020016040519081016040528092919081815260200182805461038390610d96565b80156103ce5780601f106103a5576101008083540402835291602001916103ce565b820191905f5260205f20905b8154815290600101906020018083116103b157829003601f168201915b5050505050905090565b6103e533620186a061065b565b7fd877e92f301091a369b4138b310a4155456bf9f6df57a6c1b074d810d3b4ab2260405161041290610e5c565b60405180910390a1565b5f806104266104c0565b905061043381858561056b565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6104d483838360016106da565b505050565b5f6104e4848461043e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105655781811015610556578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161054d93929190610e89565b60405180910390fd5b61056484848484035f6106da565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105db575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105d29190610ebe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361064b575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106429190610ebe565b60405180910390fd5b6106568383836108a9565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106cb575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106c29190610ebe565b60405180910390fd5b6106d65f83836108a9565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361074a575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107419190610ebe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107ba575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107b19190610ebe565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156108a3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161089a9190610c63565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f9578060025f8282546108ed9190610f04565b925050819055506109c7565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610982578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161097993929190610e89565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a0e578060025f8282540392505081905550610a58565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ab59190610c63565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610b0482610ac2565b610b0e8185610acc565b9350610b1e818560208601610adc565b610b2781610aea565b840191505092915050565b5f6020820190508181035f830152610b4a8184610afa565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b7f82610b56565b9050919050565b610b8f81610b75565b8114610b99575f80fd5b50565b5f81359050610baa81610b86565b92915050565b5f819050919050565b610bc281610bb0565b8114610bcc575f80fd5b50565b5f81359050610bdd81610bb9565b92915050565b5f8060408385031215610bf957610bf8610b52565b5b5f610c0685828601610b9c565b9250506020610c1785828601610bcf565b9150509250929050565b5f8115159050919050565b610c3581610c21565b82525050565b5f602082019050610c4e5f830184610c2c565b92915050565b610c5d81610bb0565b82525050565b5f602082019050610c765f830184610c54565b92915050565b5f805f60608486031215610c9357610c92610b52565b5b5f610ca086828701610b9c565b9350506020610cb186828701610b9c565b9250506040610cc286828701610bcf565b9150509250925092565b5f60ff82169050919050565b610ce181610ccc565b82525050565b5f602082019050610cfa5f830184610cd8565b92915050565b5f60208284031215610d1557610d14610b52565b5b5f610d2284828501610b9c565b91505092915050565b5f8060408385031215610d4157610d40610b52565b5b5f610d4e85828601610b9c565b9250506020610d5f85828601610b9c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610dad57607f821691505b602082108103610dc057610dbf610d69565b5b50919050565b7f72656d656d62657220686f77206d75636820746f6b656e20796f7520676f742e5f8201527f2074686174277320746865206b65792068696e7420666f72206e65787420717560208201527f657374696f6e2e00000000000000000000000000000000000000000000000000604082015250565b5f610e46604783610acc565b9150610e5182610dc6565b606082019050919050565b5f6020820190508181035f830152610e7381610e3a565b9050919050565b610e8381610b75565b82525050565b5f606082019050610e9c5f830186610e7a565b610ea96020830185610c54565b610eb66040830184610c54565b949350505050565b5f602082019050610ed15f830184610e7a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f0e82610bb0565b9150610f1983610bb0565b9250828201905080821115610f3157610f30610ed7565b5b9291505056fea2646970667358221220d5767feeb9dc59caa9e46fe7beb3956a9880f9396b5df38cf5311db480a210ab64736f6c634300081a0033