60c060405234801561000f575f80fd5b506040518060400160405280600781526020017f65476f4d696e65000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f65476f000000000000000000000000000000000000000000000000000000000081525060096305f5e100335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100f4575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100eb9190610440565b60405180910390fd5b6101038161025a60201b60201c565b5083600390816101139190610693565b5082600490816101239190610693565b508160ff1660a08160ff168152505060a051600a61014191906108ca565b8161014c9190610914565b6080818152505060805160015f61016761031b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546101ae9190610955565b925050819055506101c361031b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6080516040516102219190610997565b60405180910390a3600160055f6101000a81548160ff02191690831515021790555061025161034260201b60201c565b505050506109b0565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61035061036160201b60201c565b61035f5f61025a60201b60201c565b565b61036f6103fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661039361031b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146103f8576103bc6103fa60201b60201c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ef9190610440565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61042a82610401565b9050919050565b61043a81610420565b82525050565b5f6020820190506104535f830184610431565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806104d457607f821691505b6020821081036104e7576104e6610490565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261050e565b610553868361050e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61059761059261058d8461056b565b610574565b61056b565b9050919050565b5f819050919050565b6105b08361057d565b6105c46105bc8261059e565b84845461051a565b825550505050565b5f90565b6105d86105cc565b6105e38184846105a7565b505050565b5b81811015610606576105fb5f826105d0565b6001810190506105e9565b5050565b601f82111561064b5761061c816104ed565b610625846104ff565b81016020851015610634578190505b610648610640856104ff565b8301826105e8565b50505b505050565b5f82821c905092915050565b5f61066b5f1984600802610650565b1980831691505092915050565b5f610683838361065c565b9150826002028217905092915050565b61069c82610459565b67ffffffffffffffff8111156106b5576106b4610463565b5b6106bf82546104bd565b6106ca82828561060a565b5f60209050601f8311600181146106fb575f84156106e9578287015190505b6106f38582610678565b86555061075a565b601f198416610709866104ed565b5f5b828110156107305784890151825560018201915060208501945060208101905061070b565b8683101561074d5784890151610749601f89168261065c565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156107e4578086048111156107c0576107bf610762565b5b60018516156107cf5780820291505b80810290506107dd8561078f565b94506107a4565b94509492505050565b5f826107fc57600190506108b7565b81610809575f90506108b7565b816001811461081f576002811461082957610858565b60019150506108b7565b60ff84111561083b5761083a610762565b5b8360020a91508482111561085257610851610762565b5b506108b7565b5060208310610133831016604e8410600b841016171561088d5782820a90508381111561088857610887610762565b5b6108b7565b61089a848484600161079b565b925090508184048111156108b1576108b0610762565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6108d48261056b565b91506108df836108be565b925061090c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846107ed565b905092915050565b5f61091e8261056b565b91506109298361056b565b92508282026109378161056b565b9150828204841483151761094e5761094d610762565b5b5092915050565b5f61095f8261056b565b915061096a8361056b565b925082820190508082111561098257610981610762565b5b92915050565b6109918161056b565b82525050565b5f6020820190506109aa5f830184610988565b92915050565b60805160a05161150b6109d15f395f61082401525f6104bb015261150b5ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c8063715018a61161008a57806395d89b411161006457806395d89b4114610238578063a9059cbb14610256578063dd62ed3e14610286578063f2fde38b146102b6576100e8565b8063715018a6146101f25780638091f3bf146101fc5780638da5cb5b1461021a576100e8565b8063214013ca116100c6578063214013ca1461015857806323b872dd14610174578063313ce567146101a457806370a08231146101c2576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f46102d2565b6040516101019190610fc0565b60405180910390f35b610124600480360381019061011f9190611071565b61035e565b60405161013191906110c9565b60405180910390f35b6101426104b9565b60405161014f91906110f1565b60405180910390f35b610172600480360381019061016d919061110a565b6104dd565b005b61018e60048036038101906101899190611135565b610583565b60405161019b91906110c9565b60405180910390f35b6101ac610822565b6040516101b991906111a0565b60405180910390f35b6101dc60048036038101906101d7919061110a565b610846565b6040516101e991906110f1565b60405180910390f35b6101fa61088c565b005b61020461089f565b60405161021191906110c9565b60405180910390f35b6102226108b1565b60405161022f91906111c8565b60405180910390f35b6102406108d8565b60405161024d9190610fc0565b60405180910390f35b610270600480360381019061026b9190611071565b610964565b60405161027d91906110c9565b60405180910390f35b6102a0600480360381019061029b91906111e1565b61097a565b6040516102ad91906110f1565b60405180910390f35b6102d060048036038101906102cb919061110a565b6109fc565b005b600480546102df9061124c565b80601f016020809104026020016040519081016040528092919081815260200182805461030b9061124c565b80156103565780601f1061032d57610100808354040283529160200191610356565b820191905f5260205f20905b81548152906001019060200180831161033957829003601f168201915b505050505081565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c4906112c6565b60405180910390fd5b8160025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104a791906110f1565b60405180910390a36001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f151560055f9054906101000a900460ff1615150361051157600160055f6101000a81548160ff0219169083151502179055505b6105303373ffffffffffffffffffffffffffffffffffffffff16610a80565b156105805761057f8161dead60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610acb565b5b50565b5f80151560055f9054906101000a900460ff1615151480156105d757506105a86108b1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b801561061557506105e66108b1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1561062e57610625848484610acb565b6001905061081b565b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546106b29190611311565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610739848484610acb565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560025f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460405161080e91906110f1565b60405180910390a3600190505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610894610d00565b61089d5f610d87565b565b60055f9054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600380546108e59061124c565b80601f01602080910402602001604051908101604052809291908181526020018280546109119061124c565b801561095c5780601f106109335761010080835404028352916020019161095c565b820191905f5260205f20905b81548152906001019060200180831161093f57829003601f168201915b505050505081565b5f610970338484610acb565b6001905092915050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610a04610d00565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a74575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a6b91906111c8565b60405180910390fd5b610a7d81610d87565b50565b5f73957f2f6493aa9061b80324bfb4e84de74d37050173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b309061138e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e906113f6565b60405180910390fd5b610bb18383610e48565b610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be790611484565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c3c9190611311565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c8f91906114a2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cf391906110f1565b60405180910390a3505050565b610d08610f49565b73ffffffffffffffffffffffffffffffffffffffff16610d266108b1565b73ffffffffffffffffffffffffffffffffffffffff1614610d8557610d49610f49565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d7c91906111c8565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610ea0575f9050610f43565b60055f9054906101000a900460ff1615610ebd5760019050610f43565b610ec56108b1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f305750610f016108b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610f3e5760019050610f43565b600190505b92915050565b5f33905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f9282610f50565b610f9c8185610f5a565b9350610fac818560208601610f6a565b610fb581610f78565b840191505092915050565b5f6020820190508181035f830152610fd88184610f88565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61100d82610fe4565b9050919050565b61101d81611003565b8114611027575f80fd5b50565b5f8135905061103881611014565b92915050565b5f819050919050565b6110508161103e565b811461105a575f80fd5b50565b5f8135905061106b81611047565b92915050565b5f806040838503121561108757611086610fe0565b5b5f6110948582860161102a565b92505060206110a58582860161105d565b9150509250929050565b5f8115159050919050565b6110c3816110af565b82525050565b5f6020820190506110dc5f8301846110ba565b92915050565b6110eb8161103e565b82525050565b5f6020820190506111045f8301846110e2565b92915050565b5f6020828403121561111f5761111e610fe0565b5b5f61112c8482850161102a565b91505092915050565b5f805f6060848603121561114c5761114b610fe0565b5b5f6111598682870161102a565b935050602061116a8682870161102a565b925050604061117b8682870161105d565b9150509250925092565b5f60ff82169050919050565b61119a81611185565b82525050565b5f6020820190506111b35f830184611191565b92915050565b6111c281611003565b82525050565b5f6020820190506111db5f8301846111b9565b92915050565b5f80604083850312156111f7576111f6610fe0565b5b5f6112048582860161102a565b92505060206112158582860161102a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061126357607f821691505b6020821081036112765761127561121f565b5b50919050565b7f63616e6e6f7420617070726f76652074686520302061646472657373000000005f82015250565b5f6112b0601c83610f5a565b91506112bb8261127c565b602082019050919050565b5f6020820190508181035f8301526112dd816112a4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61131b8261103e565b91506113268361103e565b925082820390508181111561133e5761133d6112e4565b5b92915050565b7f63616e6e6f74206265207a65726f2061646472657373000000000000000000005f82015250565b5f611378601683610f5a565b915061138382611344565b602082019050919050565b5f6020820190508181035f8301526113a58161136c565b9050919050565b7f796f752063616e6e6f74207472616e7366657220746f20796f757273656c66005f82015250565b5f6113e0601f83610f5a565b91506113eb826113ac565b602082019050919050565b5f6020820190508181035f83015261140d816113d4565b9050919050565b7f5468697320746f6b656e206973206e6f74206c61756e6368656420616e6420635f8201527f616e6e6f74206265206c6973746564206f6e206465786573207965742e000000602082015250565b5f61146e603d83610f5a565b915061147982611414565b604082019050919050565b5f6020820190508181035f83015261149b81611462565b9050919050565b5f6114ac8261103e565b91506114b78361103e565b92508282019050808211156114cf576114ce6112e4565b5b9291505056fea2646970667358221220f28d31676a0485f73690cdc96b5e4ef66eed01c9a32db03535259fd91a56fddf64736f6c634300081a0033