60806040526001600560146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff0219169083151502179055503480156200004757600080fd5b5060006200005a620002ba60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600281526020017f42420000000000000000000000000000000000000000000000000000000000008152506001908051906020019062000145929190620002eb565b506040518060400160405280600981526020017f426f756e636542697400000000000000000000000000000000000000000000008152506002908051906020019062000193929190620002eb565b506009600360006101000a81548160ff021916908360ff160217905550600360009054906101000a900460ff16600a620001ce919062000535565b64174876e800620001e0919062000586565b60048190555060045460066000620001fd620002c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200024b620002c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620002ac9190620005f8565b60405180910390a36200067a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002f99062000644565b90600052602060002090601f0160209004810192826200031d576000855562000369565b82601f106200033857805160ff191683800117855562000369565b8280016001018555821562000369579182015b82811115620003685782518255916020019190600101906200034b565b5b5090506200037891906200037c565b5090565b5b80821115620003975760008160009055506001016200037d565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000429578086048111156200040157620004006200039b565b5b6001851615620004115780820291505b80810290506200042185620003ca565b9450620003e1565b94509492505050565b60008262000444576001905062000517565b8162000454576000905062000517565b81600181146200046d57600281146200047857620004ae565b600191505062000517565b60ff8411156200048d576200048c6200039b565b5b8360020a915084821115620004a757620004a66200039b565b5b5062000517565b5060208310610133831016604e8410600b8410161715620004e85782820a905083811115620004e257620004e16200039b565b5b62000517565b620004f78484846001620003d7565b925090508184048111156200051157620005106200039b565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000542826200051e565b91506200054f8362000528565b92506200057e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000432565b905092915050565b600062000593826200051e565b9150620005a0836200051e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620005dc57620005db6200039b565b5b828202905092915050565b620005f2816200051e565b82525050565b60006020820190506200060f6000830184620005e7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200065d57607f821691505b6020821081141562000674576200067362000615565b5b50919050565b612553806200068a6000396000f3fe60806040526004361061010d5760003560e01c806370a0823111610095578063a9059cbb11610064578063a9059cbb1461039e578063d616221c146103db578063dd62ed3e14610406578063ededcc8514610443578063f08a8a3b1461046c57610114565b806370a08231146102e05780638da5cb5b1461031d578063927935e31461034857806395d89b411461037357610114565b806323b872dd116100dc57806323b872dd146101d557806327e235e314610212578063313ce5671461024f5780634875e5ce1461027a5780635c658165146102a357610114565b806306fdde0314610119578063093317aa14610144578063095ea7b31461016d57806318160ddd146101aa57610114565b3661011457005b600080fd5b34801561012557600080fd5b5061012e610497565b60405161013b9190611cb5565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611d14565b610525565b005b34801561017957600080fd5b50610194600480360381019061018f9190611dd5565b6105d7565b6040516101a19190611e24565b60405180910390f35b3480156101b657600080fd5b506101bf610800565b6040516101cc9190611e4e565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611e69565b61085b565b6040516102099190611e24565b60405180910390f35b34801561021e57600080fd5b5061023960048036038101906102349190611ebc565b610e25565b6040516102469190611e4e565b60405180910390f35b34801561025b57600080fd5b50610264610e3d565b6040516102719190611f05565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c9190611ebc565b610e50565b005b3480156102af57600080fd5b506102ca60048036038101906102c59190611f20565b610f29565b6040516102d79190611e4e565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190611ebc565b610f4e565b6040516103149190611e4e565b60405180910390f35b34801561032957600080fd5b50610332610f97565b60405161033f9190611f6f565b60405180910390f35b34801561035457600080fd5b5061035d610fc0565b60405161036a9190611e24565b60405180910390f35b34801561037f57600080fd5b50610388610fd3565b6040516103959190611cb5565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190611dd5565b611061565b6040516103d29190611e24565b60405180910390f35b3480156103e757600080fd5b506103f06113db565b6040516103fd9190611e24565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190611f20565b6113ee565b60405161043a9190611e4e565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190611d14565b611475565b005b34801561047857600080fd5b50610481611527565b60405161048e9190611f6f565b60405180910390f35b600280546104a490611fb9565b80601f01602080910402602001604051908101604052809291908181526020018280546104d090611fb9565b801561051d5780601f106104f25761010080835404028352916020019161051d565b820191906000526020600020905b81548152906001019060200180831161050057829003601f168201915b505050505081565b61052d61154d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b190612037565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff166105f8610f97565b73ffffffffffffffffffffffffffffffffffffffff16141561064f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610646906120a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b69061210f565b60405180910390fd5b6106c7610f97565b73ffffffffffffffffffffffffffffffffffffffff166106e561154d565b73ffffffffffffffffffffffffffffffffffffffff1614156107f657816007600061070e61154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff166107a861154d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107ed9190611e4e565b60405180910390a35b6001905092915050565b6000610856600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460045461155590919063ffffffff16565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c39061217b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610933906121e7565b60405180910390fd5b600560149054906101000a900460ff16156109a1576000151561095e84611578565b1515146109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790612253565b60405180910390fd5b5b600560159054906101000a900460ff1615610a0657600015156109c3846118cd565b151514610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc906122bf565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610a915750600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610adc5782600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610b6e565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b649061232b565b60405180910390fd5b5b610bc082600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155590919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c9982600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c5061154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155590919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ce261154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d7282600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf990919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e129190611e4e565b60405180910390a3600190509392505050565b60066020528060005260406000206000915090505481565b600360009054906101000a900460ff1681565b610e5861154d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90612037565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052816000526040600020602052806000526040600020600091509150505481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560149054906101000a900460ff1681565b60018054610fe090611fb9565b80601f016020809104026020016040519081016040528092919081815260200182805461100c90611fb9565b80156110595780601f1061102e57610100808354040283529160200191611059565b820191906000526020600020905b81548152906001019060200180831161103c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906121e7565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a9061232b565b60405180910390fd5b600560149054906101000a900460ff16156111c8576000151561118584611578565b1515146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90612253565b60405180910390fd5b5b600560159054906101000a900460ff161561122d57600015156111ea846118cd565b15151461122c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611223906122bf565b60405180910390fd5b5b611286826006600061123d61154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155590919063ffffffff16565b6006600061129261154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061132282600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf990919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1661138461154d565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113c99190611e4e565b60405180910390a36001905092915050565b600560159054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61147d61154d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190612037565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008282111561156457600080fd5b8183611570919061237a565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b14156115a257600090506118c8565b6000731f98431c8ad98523631ae4a59f267346ea31f9849050600083905060008060008373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561160b57600080fd5b505afa92505050801561163c57506040513d601f19601f8201168201806040525081019061163991906123c3565b60015b611681573d806000811461166c576040519150601f19603f3d011682016040523d82523d6000602084013e611671565b606091505b50600096505050505050506118c8565b809350508373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cb57600080fd5b505afa9250505080156116fc57506040513d601f19601f820116820180604052508101906116f991906123c3565b60015b611741573d806000811461172c576040519150601f19603f3d011682016040523d82523d6000602084013e611731565b606091505b50600096505050505050506118c8565b809250508373ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b15801561178b57600080fd5b505afa9250505080156117bc57506040513d601f19601f820116820180604052508101906117b9919061242b565b60015b611801573d80600081146117ec576040519150601f19603f3d011682016040523d82523d6000602084013e6117f1565b606091505b50600096505050505050506118c8565b809150508473ffffffffffffffffffffffffffffffffffffffff16631698ee828484846040518463ffffffff1660e01b815260040161184293929190612467565b60206040518083038186803b15801561185a57600080fd5b505afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189291906123c3565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614955050505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b14156118f75760009050611bf4565b6000735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f90506000839050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290506000808373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561197757600080fd5b505afa9250505080156119a857506040513d601f19601f820116820180604052508101906119a591906123c3565b60015b6119ed573d80600081146119d8576040519150601f19603f3d011682016040523d82523d6000602084013e6119dd565b606091505b5060009650505050505050611bf4565b809250508373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3757600080fd5b505afa925050508015611a6857506040513d601f19601f82011682018060405250810190611a6591906123c3565b60015b611aad573d8060008114611a98576040519150601f19603f3d011682016040523d82523d6000602084013e611a9d565b606091505b5060009650505050505050611bf4565b809150508473ffffffffffffffffffffffffffffffffffffffff1663e6a4390583836040518363ffffffff1660e01b8152600401611aec92919061249e565b60206040518083038186803b158015611b0457600080fd5b505afa158015611b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3c91906123c3565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611bd757508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480611bd657508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b5b15611bea57600095505050505050611bf4565b6001955050505050505b919050565b60008183611c0791906124c7565b905082811015611c1657600080fd5b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c56578082015181840152602081019050611c3b565b83811115611c65576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c8782611c1c565b611c918185611c27565b9350611ca1818560208601611c38565b611caa81611c6b565b840191505092915050565b60006020820190508181036000830152611ccf8184611c7c565b905092915050565b600080fd5b60008115159050919050565b611cf181611cdc565b8114611cfc57600080fd5b50565b600081359050611d0e81611ce8565b92915050565b600060208284031215611d2a57611d29611cd7565b5b6000611d3884828501611cff565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d6c82611d41565b9050919050565b611d7c81611d61565b8114611d8757600080fd5b50565b600081359050611d9981611d73565b92915050565b6000819050919050565b611db281611d9f565b8114611dbd57600080fd5b50565b600081359050611dcf81611da9565b92915050565b60008060408385031215611dec57611deb611cd7565b5b6000611dfa85828601611d8a565b9250506020611e0b85828601611dc0565b9150509250929050565b611e1e81611cdc565b82525050565b6000602082019050611e396000830184611e15565b92915050565b611e4881611d9f565b82525050565b6000602082019050611e636000830184611e3f565b92915050565b600080600060608486031215611e8257611e81611cd7565b5b6000611e9086828701611d8a565b9350506020611ea186828701611d8a565b9250506040611eb286828701611dc0565b9150509250925092565b600060208284031215611ed257611ed1611cd7565b5b6000611ee084828501611d8a565b91505092915050565b600060ff82169050919050565b611eff81611ee9565b82525050565b6000602082019050611f1a6000830184611ef6565b92915050565b60008060408385031215611f3757611f36611cd7565b5b6000611f4585828601611d8a565b9250506020611f5685828601611d8a565b9150509250929050565b611f6981611d61565b82525050565b6000602082019050611f846000830184611f60565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611fd157607f821691505b60208210811415611fe557611fe4611f8a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612021602083611c27565b915061202c82611feb565b602082019050919050565b6000602082019050818103600083015261205081612014565b9050919050565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b600061208d601d83611c27565b915061209882612057565b602082019050919050565b600060208201905081810360008301526120bc81612080565b9050919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b60006120f9601b83611c27565b9150612104826120c3565b602082019050919050565b60006020820190508181036000830152612128816120ec565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b6000612165601e83611c27565b91506121708261212f565b602082019050919050565b6000602082019050818103600083015261219481612158565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b60006121d1601c83611c27565b91506121dc8261219b565b602082019050919050565b60006020820190508181036000830152612200816121c4565b9050919050565b7f563320506f6f6c7320617265206e6f7420737570706f727465642e0000000000600082015250565b600061223d601b83611c27565b915061224882612207565b602082019050919050565b6000602082019050818103600083015261226c81612230565b9050919050565b7f5632205061697220616c72656164792065786973742e00000000000000000000600082015250565b60006122a9601683611c27565b91506122b482612273565b602082019050919050565b600060208201905081810360008301526122d88161229c565b9050919050565b7f706c656173652077616974000000000000000000000000000000000000000000600082015250565b6000612315600b83611c27565b9150612320826122df565b602082019050919050565b6000602082019050818103600083015261234481612308565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061238582611d9f565b915061239083611d9f565b9250828210156123a3576123a261234b565b5b828203905092915050565b6000815190506123bd81611d73565b92915050565b6000602082840312156123d9576123d8611cd7565b5b60006123e7848285016123ae565b91505092915050565b600062ffffff82169050919050565b612408816123f0565b811461241357600080fd5b50565b600081519050612425816123ff565b92915050565b60006020828403121561244157612440611cd7565b5b600061244f84828501612416565b91505092915050565b612461816123f0565b82525050565b600060608201905061247c6000830186611f60565b6124896020830185611f60565b6124966040830184612458565b949350505050565b60006040820190506124b36000830185611f60565b6124c06020830184611f60565b9392505050565b60006124d282611d9f565b91506124dd83611d9f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125125761251161234b565b5b82820190509291505056fea2646970667358221220fdc65daaa6deb58e0f8e8c1977f5aaa215e6eea23caed2538f903479d083ccda64736f6c63430008090033