60806040523480156200001157600080fd5b506040516200289d3803806200289d83398181016040528101906200003791906200018f565b6040518060400160405280600a81526020017f446f67655374616b6573000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f44414773000000000000000000000000000000000000000000000000000000008152508160039081620000b491906200043b565b508060049081620000c691906200043b565b50505080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000522565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001438262000116565b9050919050565b6000620001578262000136565b9050919050565b62000169816200014a565b81146200017557600080fd5b50565b60008151905062000189816200015e565b92915050565b600060208284031215620001a857620001a762000111565b5b6000620001b88482850162000178565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200024357607f821691505b602082108103620002595762000258620001fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000284565b620002cf868362000284565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200031c620003166200031084620002e7565b620002f1565b620002e7565b9050919050565b6000819050919050565b6200033883620002fb565b62000350620003478262000323565b84845462000291565b825550505050565b600090565b6200036762000358565b620003748184846200032d565b505050565b5b818110156200039c57620003906000826200035d565b6001810190506200037a565b5050565b601f821115620003eb57620003b5816200025f565b620003c08462000274565b81016020851015620003d0578190505b620003e8620003df8562000274565b83018262000379565b50505b505050565b600082821c905092915050565b60006200041060001984600802620003f0565b1980831691505092915050565b60006200042b8383620003fd565b9150826002028217905092915050565b6200044682620001c1565b67ffffffffffffffff811115620004625762000461620001cc565b5b6200046e82546200022a565b6200047b828285620003a0565b600060209050601f831160018114620004b357600084156200049e578287015190505b620004aa85826200041d565b8655506200051a565b601f198416620004c3866200025f565b60005b82811015620004ed57848901518255600182019150602085019450602081019050620004c6565b868310156200050d578489015162000509601f891682620003fd565b8355505b6001600288020188555050505b505050505050565b61236b80620005326000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102e5578063a457c2d714610303578063a9059cbb14610333578063dd62ed3e14610363578063f6d6be621461039357610116565b806370a082311461025b5780638e527a031461028b578063919840ad146102a957806392f15771146102c757610116565b806323b872dd116100e957806323b872dd146101a3578063313ce567146101d357806339509351146101f1578063551597241461022157806367dfd4c91461023f57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd14610169578063227a473b14610187575b600080fd5b6101236103b1565b60405161013091906117fe565b60405180910390f35b610153600480360381019061014e91906118b9565b610443565b6040516101609190611914565b60405180910390f35b610171610466565b60405161017e919061193e565b60405180910390f35b6101a1600480360381019061019c9190611959565b610470565b005b6101bd60048036038101906101b89190611986565b610623565b6040516101ca9190611914565b60405180910390f35b6101db610652565b6040516101e891906119f5565b60405180910390f35b61020b600480360381019061020691906118b9565b61065b565b6040516102189190611914565b60405180910390f35b610229610692565b6040516102369190611a1f565b60405180910390f35b61025960048036038101906102549190611959565b6106b8565b005b61027560048036038101906102709190611a3a565b6107a4565b604051610282919061193e565b60405180910390f35b6102936107ec565b6040516102a0919061193e565b60405180910390f35b6102b16107f2565b6040516102be919061193e565b60405180910390f35b6102cf610d48565b6040516102dc9190611ac6565b60405180910390f35b6102ed610d6e565b6040516102fa91906117fe565b60405180910390f35b61031d600480360381019061031891906118b9565b610e00565b60405161032a9190611914565b60405180910390f35b61034d600480360381019061034891906118b9565b610e77565b60405161035a9190611914565b60405180910390f35b61037d60048036038101906103789190611ae1565b610e9a565b60405161038a919061193e565b60405180910390f35b61039b610f21565b6040516103a8919061193e565b60405180910390f35b6060600380546103c090611b50565b80601f01602080910402602001604051908101604052809291908181526020018280546103ec90611b50565b80156104395780601f1061040e57610100808354040283529160200191610439565b820191906000526020600020905b81548152906001019060200180831161041c57829003601f168201915b5050505050905090565b60008061044e610f27565b905061045b818585610f2f565b600191505092915050565b6000600254905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104cd9190611a1f565b602060405180830381865afa1580156104ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050e9190611b96565b9050600061051a610466565b9050600081148061052b5750600082145b1561053f5761053a33846110f8565b610574565b600061056683610558848761125790919063ffffffff16565b61126d90919063ffffffff16565b905061057233826110f8565b505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016105d393929190611bc3565b6020604051808303816000875af11580156105f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106169190611c26565b5042600781905550505050565b60008061062e610f27565b905061063b858285611283565b61064685858561130f565b60019150509392505050565b60006012905090565b600080610666610f27565b90506106878185856106788589610e9a565b6106829190611c82565b610f2f565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006106c2610466565b905060006106f2826106e46106d56107f2565b8661125790919063ffffffff16565b61126d90919063ffffffff16565b90506106fe338461158e565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161075b929190611cb6565b6020604051808303816000875af115801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079e9190611c26565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161084f9190611a1f565b602060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108909190611b96565b600881905550600062015180600754426108aa9190611cdf565b11156108dc576108d960646108cb605f60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b6203f480600754426108ee9190611cdf565b11156109205761091d606461090f605a60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b6207e900600754426109329190611cdf565b1115610964576109616064610953605560085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b620a8c00600754426109769190611cdf565b11156109a8576109a56064610997604b60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b621a5e00600754426109ba9190611cdf565b11156109ec576109e960646109db604160085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b62278d00600754426109fe9190611cdf565b1115610a3057610a2d6064610a1f601960085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b6241eb0060075442610a429190611cdf565b1115610a7457610a716064610a63602d60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b625c490060075442610a869190611cdf565b1115610ab857610ab56064610aa7603260085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b6283d60060075442610aca9190611cdf565b1115610afc57610af96064610aeb603c60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b62c5c10060075442610b0e9190611cdf565b1115610b4057610b3d6064610b2f604660085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b62ed4e0060075442610b529190611cdf565b1115610b8457610b816064610b73604b60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b630149970060075442610b979190611cdf565b1115610bc957610bc66064610bb8605560085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b63017e530060075442610bdc9190611cdf565b1115610c0e57610c0b6064610bfd605a60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b6301cd6d0060075442610c219190611cdf565b1115610c5357610c506064610c42605f60085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b630251430060075442610c669190611cdf565b1115610c9857610c956064610c87606060085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b6303c2670060075442610cab9190611cdf565b1115610cdd57610cda6064610ccc606160085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b630735b40060075442610cf09190611cdf565b1115610d2257610d1f6064610d11606260085461125790919063ffffffff16565b61126d90919063ffffffff16565b90505b630e6b680060075442610d359190611cdf565b1115610d415760085490505b8091505090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610d7d90611b50565b80601f0160208091040260200160405190810160405280929190818152602001828054610da990611b50565b8015610df65780601f10610dcb57610100808354040283529160200191610df6565b820191906000526020600020905b815481529060010190602001808311610dd957829003601f168201915b5050505050905090565b600080610e0b610f27565b90506000610e198286610e9a565b905083811015610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590611d85565b60405180910390fd5b610e6b8286868403610f2f565b60019250505092915050565b600080610e82610f27565b9050610e8f81858561130f565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9590611e17565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490611ea9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110eb919061193e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90611f15565b60405180910390fd5b61117360008383611764565b80600260008282546111859190611c82565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111da9190611c82565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161123f919061193e565b60405180910390a361125360008383611769565b5050565b600081836112659190611f35565b905092915050565b6000818361127b9190611fbe565b905092915050565b600061128f8484610e9a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461130957818110156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f29061203b565b60405180910390fd5b6113088484848403610f2f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361137e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611375906120cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e49061215f565b60405180910390fd5b6113f8838383611764565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561147e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611475906121f1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115119190611c82565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611575919061193e565b60405180910390a3611588848484611769565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490612283565b60405180910390fd5b61160982600083611764565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690612315565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546116e69190611cdf565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161174b919061193e565b60405180910390a361175f83600084611769565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117a857808201518184015260208101905061178d565b60008484015250505050565b6000601f19601f8301169050919050565b60006117d08261176e565b6117da8185611779565b93506117ea81856020860161178a565b6117f3816117b4565b840191505092915050565b6000602082019050818103600083015261181881846117c5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061185082611825565b9050919050565b61186081611845565b811461186b57600080fd5b50565b60008135905061187d81611857565b92915050565b6000819050919050565b61189681611883565b81146118a157600080fd5b50565b6000813590506118b38161188d565b92915050565b600080604083850312156118d0576118cf611820565b5b60006118de8582860161186e565b92505060206118ef858286016118a4565b9150509250929050565b60008115159050919050565b61190e816118f9565b82525050565b60006020820190506119296000830184611905565b92915050565b61193881611883565b82525050565b6000602082019050611953600083018461192f565b92915050565b60006020828403121561196f5761196e611820565b5b600061197d848285016118a4565b91505092915050565b60008060006060848603121561199f5761199e611820565b5b60006119ad8682870161186e565b93505060206119be8682870161186e565b92505060406119cf868287016118a4565b9150509250925092565b600060ff82169050919050565b6119ef816119d9565b82525050565b6000602082019050611a0a60008301846119e6565b92915050565b611a1981611845565b82525050565b6000602082019050611a346000830184611a10565b92915050565b600060208284031215611a5057611a4f611820565b5b6000611a5e8482850161186e565b91505092915050565b6000819050919050565b6000611a8c611a87611a8284611825565b611a67565b611825565b9050919050565b6000611a9e82611a71565b9050919050565b6000611ab082611a93565b9050919050565b611ac081611aa5565b82525050565b6000602082019050611adb6000830184611ab7565b92915050565b60008060408385031215611af857611af7611820565b5b6000611b068582860161186e565b9250506020611b178582860161186e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b6857607f821691505b602082108103611b7b57611b7a611b21565b5b50919050565b600081519050611b908161188d565b92915050565b600060208284031215611bac57611bab611820565b5b6000611bba84828501611b81565b91505092915050565b6000606082019050611bd86000830186611a10565b611be56020830185611a10565b611bf2604083018461192f565b949350505050565b611c03816118f9565b8114611c0e57600080fd5b50565b600081519050611c2081611bfa565b92915050565b600060208284031215611c3c57611c3b611820565b5b6000611c4a84828501611c11565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c8d82611883565b9150611c9883611883565b9250828201905080821115611cb057611caf611c53565b5b92915050565b6000604082019050611ccb6000830185611a10565b611cd8602083018461192f565b9392505050565b6000611cea82611883565b9150611cf583611883565b9250828203905081811115611d0d57611d0c611c53565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611d6f602583611779565b9150611d7a82611d13565b604082019050919050565b60006020820190508181036000830152611d9e81611d62565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e01602483611779565b9150611e0c82611da5565b604082019050919050565b60006020820190508181036000830152611e3081611df4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e93602283611779565b9150611e9e82611e37565b604082019050919050565b60006020820190508181036000830152611ec281611e86565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611eff601f83611779565b9150611f0a82611ec9565b602082019050919050565b60006020820190508181036000830152611f2e81611ef2565b9050919050565b6000611f4082611883565b9150611f4b83611883565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f8457611f83611c53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611fc982611883565b9150611fd483611883565b925082611fe457611fe3611f8f565b5b828204905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612025601d83611779565b915061203082611fef565b602082019050919050565b6000602082019050818103600083015261205481612018565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006120b7602583611779565b91506120c28261205b565b604082019050919050565b600060208201905081810360008301526120e6816120aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612149602383611779565b9150612154826120ed565b604082019050919050565b600060208201905081810360008301526121788161213c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006121db602683611779565b91506121e68261217f565b604082019050919050565b6000602082019050818103600083015261220a816121ce565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061226d602183611779565b915061227882612211565b604082019050919050565b6000602082019050818103600083015261229c81612260565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006122ff602283611779565b915061230a826122a3565b604082019050919050565b6000602082019050818103600083015261232e816122f2565b905091905056fea2646970667358221220e5835f07965e8ae17395b7a4b2ddfcf1cbf7b2faa763df5886822f3542e6ee0f64736f6c63430008100033000000000000000000000000f855fb30ee010d3db677185c7099f2481562755c