60806040523480156200001157600080fd5b506040518060400160405280600681526020017f447846756e6400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f447846756e64000000000000000000000000000000000000000000000000000081525081600390816200008f919062000628565b508060049081620000a1919062000628565b5050506000620000b66200021b60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600160066000730e0e14fa9e3964ba6d87a4b6405e44dd4da275cb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000215730e0e14fa9e3964ba6d87a4b6405e44dd4da275cb620001ea6200022360201b60201c565b600a620001f891906200089f565b6319133850620002099190620008f0565b6200022c60201b60201c565b62000a27565b600033905090565b60006009905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200029e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000295906200099c565b60405180910390fd5b620002b260008383620003a460201b60201c565b8060026000828254620002c69190620009be565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200031d9190620009be565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000384919062000a0a565b60405180910390a3620003a060008383620003a960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043057607f821691505b602082108103620004465762000445620003e8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000471565b620004bc868362000471565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200050962000503620004fd84620004d4565b620004de565b620004d4565b9050919050565b6000819050919050565b6200052583620004e8565b6200053d620005348262000510565b8484546200047e565b825550505050565b600090565b6200055462000545565b620005618184846200051a565b505050565b5b8181101562000589576200057d6000826200054a565b60018101905062000567565b5050565b601f821115620005d857620005a2816200044c565b620005ad8462000461565b81016020851015620005bd578190505b620005d5620005cc8562000461565b83018262000566565b50505b505050565b600082821c905092915050565b6000620005fd60001984600802620005dd565b1980831691505092915050565b6000620006188383620005ea565b9150826002028217905092915050565b6200063382620003ae565b67ffffffffffffffff8111156200064f576200064e620003b9565b5b6200065b825462000417565b620006688282856200058d565b600060209050601f831160018114620006a057600084156200068b578287015190505b6200069785826200060a565b86555062000707565b601f198416620006b0866200044c565b60005b82811015620006da57848901518255600182019150602085019450602081019050620006b3565b86831015620006fa5784890151620006f6601f891682620005ea565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200079d578086048111156200077557620007746200070f565b5b6001851615620007855780820291505b808102905062000795856200073e565b945062000755565b94509492505050565b600082620007b857600190506200088b565b81620007c857600090506200088b565b8160018114620007e15760028114620007ec5762000822565b60019150506200088b565b60ff8411156200080157620008006200070f565b5b8360020a9150848211156200081b576200081a6200070f565b5b506200088b565b5060208310610133831016604e8410600b84101617156200085c5782820a9050838111156200085657620008556200070f565b5b6200088b565b6200086b84848460016200074b565b925090508184048111156200088557620008846200070f565b5b81810290505b9392505050565b600060ff82169050919050565b6000620008ac82620004d4565b9150620008b98362000892565b9250620008e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007a6565b905092915050565b6000620008fd82620004d4565b91506200090a83620004d4565b92508282026200091a81620004d4565b915082820484148315176200093457620009336200070f565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000984601f836200093b565b915062000991826200094c565b602082019050919050565b60006020820190508181036000830152620009b78162000975565b9050919050565b6000620009cb82620004d4565b9150620009d883620004d4565b9250828201905080821115620009f357620009f26200070f565b5b92915050565b62000a0481620004d4565b82525050565b600060208201905062000a216000830184620009f9565b92915050565b6120ec8062000a376000396000f3fe60806040526004361061010d5760003560e01c8063715018a61161009557806395d89b411161006457806395d89b4114610378578063a457c2d7146103a3578063a9059cbb146103e0578063dd62ed3e1461041d578063f2fde38b1461045a57610114565b8063715018a6146102e257806375d5e02c146102f95780638a8c523c146103365780638da5cb5b1461034d57610114565b8063313ce567116100dc578063313ce567146101e95780633950935114610214578063484d993f146102515780634ada218b1461027a57806370a08231146102a557610114565b806306fdde0314610119578063095ea7b31461014457806318160ddd1461018157806323b872dd146101ac57610114565b3661011457005b600080fd5b34801561012557600080fd5b5061012e610483565b60405161013b91906116a5565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611760565b610515565b60405161017891906117bb565b60405180910390f35b34801561018d57600080fd5b50610196610533565b6040516101a391906117e5565b60405180910390f35b3480156101b857600080fd5b506101d360048036038101906101ce9190611800565b61053d565b6040516101e091906117bb565b60405180910390f35b3480156101f557600080fd5b506101fe61065c565b60405161020b919061186f565b60405180910390f35b34801561022057600080fd5b5061023b60048036038101906102369190611760565b610665565b60405161024891906117bb565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906118b6565b610711565b005b34801561028657600080fd5b5061028f610895565b60405161029c91906117bb565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906118f6565b6108a8565b6040516102d991906117e5565b60405180910390f35b3480156102ee57600080fd5b506102f76108f0565b005b34801561030557600080fd5b50610320600480360381019061031b91906118f6565b610a48565b60405161032d91906117bb565b60405180910390f35b34801561034257600080fd5b5061034b610a9e565b005b34801561035957600080fd5b50610362610baa565b60405161036f9190611932565b60405180910390f35b34801561038457600080fd5b5061038d610bd4565b60405161039a91906116a5565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c59190611760565b610c66565b6040516103d791906117bb565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190611760565b610d51565b60405161041491906117bb565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f919061194d565b610d6f565b60405161045191906117e5565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c91906118f6565b610df6565b005b606060038054610492906119bc565b80601f01602080910402602001604051908101604052809291908181526020018280546104be906119bc565b801561050b5780601f106104e05761010080835404028352916020019161050b565b820191906000526020600020905b8154815290600101906020018083116104ee57829003601f168201915b5050505050905090565b6000610529610522610fbc565b8484610fc4565b6001905092915050565b6000600254905090565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610589610fbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106455782811015610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062790611a5f565b60405180910390fd5b6106448561063c610fbc565b858403610fc4565b5b61065085858561118d565b60019150509392505050565b60006009905090565b6000610707610672610fbc565b848460016000610680610fbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107029190611aae565b610fc4565b6001905092915050565b610719610fbc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079f90611b2e565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190611bc0565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108f8610fbc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e90611b2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610aa6610fbc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90611b2e565b60405180910390fd5b600760009054906101000a900460ff1615610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90611c2c565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550610ba86108f0565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610be3906119bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0f906119bc565b8015610c5c5780601f10610c3157610100808354040283529160200191610c5c565b820191906000526020600020905b815481529060010190602001808311610c3f57829003601f168201915b5050505050905090565b60008060016000610c75610fbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990611cbe565b60405180910390fd5b610d46610d3d610fbc565b85858403610fc4565b600191505092915050565b6000610d65610d5e610fbc565b848461118d565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610dfe610fbc565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490611b2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef390611d50565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90611de2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990611e74565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161118091906117e5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390611f06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290611f98565b60405180910390fd5b600760009054906101000a900460ff16806112cf5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806113235750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990612004565b60405180910390fd5b6000810361137b576113768383600061138c565b611387565b61138683838361138c565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290611f06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190611f98565b60405180910390fd5b61147583838361160b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290612096565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158e9190611aae565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115f291906117e5565b60405180910390a3611605848484611610565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561164f578082015181840152602081019050611634565b60008484015250505050565b6000601f19601f8301169050919050565b600061167782611615565b6116818185611620565b9350611691818560208601611631565b61169a8161165b565b840191505092915050565b600060208201905081810360008301526116bf818461166c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116f7826116cc565b9050919050565b611707816116ec565b811461171257600080fd5b50565b600081359050611724816116fe565b92915050565b6000819050919050565b61173d8161172a565b811461174857600080fd5b50565b60008135905061175a81611734565b92915050565b60008060408385031215611777576117766116c7565b5b600061178585828601611715565b92505060206117968582860161174b565b9150509250929050565b60008115159050919050565b6117b5816117a0565b82525050565b60006020820190506117d060008301846117ac565b92915050565b6117df8161172a565b82525050565b60006020820190506117fa60008301846117d6565b92915050565b600080600060608486031215611819576118186116c7565b5b600061182786828701611715565b935050602061183886828701611715565b92505060406118498682870161174b565b9150509250925092565b600060ff82169050919050565b61186981611853565b82525050565b60006020820190506118846000830184611860565b92915050565b611893816117a0565b811461189e57600080fd5b50565b6000813590506118b08161188a565b92915050565b600080604083850312156118cd576118cc6116c7565b5b60006118db85828601611715565b92505060206118ec858286016118a1565b9150509250929050565b60006020828403121561190c5761190b6116c7565b5b600061191a84828501611715565b91505092915050565b61192c816116ec565b82525050565b60006020820190506119476000830184611923565b92915050565b60008060408385031215611964576119636116c7565b5b600061197285828601611715565b925050602061198385828601611715565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806119d457607f821691505b6020821081036119e7576119e661198d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611a49602883611620565b9150611a54826119ed565b604082019050919050565b60006020820190508181036000830152611a7881611a3c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ab98261172a565b9150611ac48361172a565b9250828201905080821115611adc57611adb611a7f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611b18602083611620565b9150611b2382611ae2565b602082019050919050565b60006020820190508181036000830152611b4781611b0b565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000611baa602a83611620565b9150611bb582611b4e565b604082019050919050565b60006020820190508181036000830152611bd981611b9d565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000611c16601883611620565b9150611c2182611be0565b602082019050919050565b60006020820190508181036000830152611c4581611c09565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ca8602583611620565b9150611cb382611c4c565b604082019050919050565b60006020820190508181036000830152611cd781611c9b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d3a602683611620565b9150611d4582611cde565b604082019050919050565b60006020820190508181036000830152611d6981611d2d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611dcc602483611620565b9150611dd782611d70565b604082019050919050565b60006020820190508181036000830152611dfb81611dbf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e5e602283611620565b9150611e6982611e02565b604082019050919050565b60006020820190508181036000830152611e8d81611e51565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611ef0602583611620565b9150611efb82611e94565b604082019050919050565b60006020820190508181036000830152611f1f81611ee3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611f82602383611620565b9150611f8d82611f26565b604082019050919050565b60006020820190508181036000830152611fb181611f75565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000611fee601883611620565b9150611ff982611fb8565b602082019050919050565b6000602082019050818103600083015261201d81611fe1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612080602683611620565b915061208b82612024565b604082019050919050565b600060208201905081810360008301526120af81612073565b905091905056fea2646970667358221220c7e44f332470c43f488173e3a9aaeb50706bfd6289f2183ce9db0b526953a64264736f6c63430008110033