60806040526000601160146101000a81548160ff0219169083151502179055506000601160156101000a81548160ff0219169083151502179055506702c68af0bb1400006012556000601360006101000a81548160ff021916908360028111156200006f576200006e62000453565b5b02179055506000601360016101000a81548160ff021916908360038111156200009d576200009c62000453565b5b0217905550348015620000af57600080fd5b506040516200573e3803806200573e8339818101604052810190620000d591906200061f565b6040518060400160405280601081526020017f4d7963656c69756d466964656c697479000000000000000000000000000000008152506040518060400160405280600481526020017f4d59464900000000000000000000000000000000000000000000000000000000815250816000908051906020019062000159929190620003a3565b50806001908051906020019062000172929190620003a3565b5050506200019562000189620001ee60201b60201c565b620001f660201b60201c565b620001a681620002bc60201b60201c565b33600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000758565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002cc620002e860201b60201c565b80600c9080519060200190620002e4929190620003a3565b5050565b620002f8620001ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200031e6200037960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000377576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036e90620006d1565b60405180910390fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003b19062000722565b90600052602060002090601f016020900481019282620003d5576000855562000421565b82601f10620003f057805160ff191683800117855562000421565b8280016001018555821562000421579182015b828111156200042057825182559160200191906001019062000403565b5b50905062000430919062000434565b5090565b5b808211156200044f57600081600090555060010162000435565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004eb82620004a0565b810181811067ffffffffffffffff821117156200050d576200050c620004b1565b5b80604052505050565b60006200052262000482565b9050620005308282620004e0565b919050565b600067ffffffffffffffff821115620005535762000552620004b1565b5b6200055e82620004a0565b9050602081019050919050565b60005b838110156200058b5780820151818401526020810190506200056e565b838111156200059b576000848401525b50505050565b6000620005b8620005b28462000535565b62000516565b905082815260208101848484011115620005d757620005d66200049b565b5b620005e48482856200056b565b509392505050565b600082601f83011262000604576200060362000496565b5b815162000616848260208601620005a1565b91505092915050565b6000602082840312156200063857620006376200048c565b5b600082015167ffffffffffffffff81111562000659576200065862000491565b5b6200066784828501620005ec565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006b960208362000670565b9150620006c68262000681565b602082019050919050565b60006020820190508181036000830152620006ec81620006aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200073b57607f821691505b60208210811415620007525762000751620006f3565b5b50919050565b614fd680620007686000396000f3fe6080604052600436106102885760003560e01c80636c19f41c1161015a578063c19d93fb116100c1578063e985e9c51161007a578063e985e9c514610940578063ee8b61dc1461097d578063f2fde38b146109a8578063f7245c10146109d1578063fbfa77cf146109fc578063ff695dd514610a2757610288565b8063c19d93fb14610856578063c87b56dd14610881578063cd85cdb5146108be578063da0e8561146108d5578063e2d4252a146108fe578063e535e6a01461092957610288565b80638da5cb5b116101135780638da5cb5b1461075a57806391b7f5ed1461078557806395d89b41146107ae578063a035b1fe146107d9578063a22cb46514610804578063b88d4fde1461082d57610288565b80636c19f41c1461067b5780636d2deb14146106a657806370a08231146106d1578063715018a61461070e5780637fd71d4214610725578063853828b61461075057610288565b80632e1a7d4d116101fe5780634f6ccce7116101b75780634f6ccce71461056857806355f804b3146105a5578063573fb1ba146105ce5780636352211e146105ea5780636817031b146106275780636c0360eb1461065057610288565b80632e1a7d4d146104705780632f745c59146104995780633259c419146104d657806332e23b62146104ed57806342842e0e1461051657806342966c681461053f57610288565b806313211e061161025057806313211e06146103865780631769528f146103b157806318160ddd146103c857806323b872dd146103f3578063256100b21461041c5780632a000d341461044557610288565b806301ffc9a71461028d57806302d05d3f146102ca57806306fdde03146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613663565b610a52565b6040516102c191906136ab565b60405180910390f35b3480156102d657600080fd5b506102df610a64565b6040516102ec9190613707565b60405180910390f35b34801561030157600080fd5b5061030a610a8a565b60405161031791906137bb565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613813565b610b1c565b6040516103549190613707565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f919061386c565b610b62565b005b34801561039257600080fd5b5061039b610c7a565b6040516103a89190613923565b60405180910390f35b3480156103bd57600080fd5b506103c6610c8d565b005b3480156103d457600080fd5b506103dd610e35565b6040516103ea919061394d565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190613968565b610e42565b005b34801561042857600080fd5b50610443600480360381019061043e91906139bb565b610ea2565b005b34801561045157600080fd5b5061045a610f2e565b60405161046791906137bb565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613813565b610fbc565b005b3480156104a557600080fd5b506104c060048036038101906104bb919061386c565b6110b9565b6040516104cd919061394d565b60405180910390f35b3480156104e257600080fd5b506104eb61115e565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613b1d565b611193565b005b34801561052257600080fd5b5061053d60048036038101906105389190613968565b6111b5565b005b34801561054b57600080fd5b5061056660048036038101906105619190613813565b6111d5565b005b34801561057457600080fd5b5061058f600480360381019061058a9190613813565b611231565b60405161059c919061394d565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c79190613b1d565b6112a2565b005b6105e860048036038101906105e39190613813565b6112c4565b005b3480156105f657600080fd5b50610611600480360381019061060c9190613813565b6114ca565b60405161061e9190613707565b60405180910390f35b34801561063357600080fd5b5061064e600480360381019061064991906139bb565b61157c565b005b34801561065c57600080fd5b506106656115c8565b60405161067291906137bb565b60405180910390f35b34801561068757600080fd5b50610690611656565b60405161069d9190613707565b60405180910390f35b3480156106b257600080fd5b506106bb61167c565b6040516106c891906136ab565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f391906139bb565b61168f565b604051610705919061394d565b60405180910390f35b34801561071a57600080fd5b50610723611747565b005b34801561073157600080fd5b5061073a61175b565b6040516107479190613707565b60405180910390f35b610758611781565b005b34801561076657600080fd5b5061076f61187d565b60405161077c9190613707565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190613813565b6118a7565b005b3480156107ba57600080fd5b506107c36118f9565b6040516107d091906137bb565b60405180910390f35b3480156107e557600080fd5b506107ee61198b565b6040516107fb919061394d565b60405180910390f35b34801561081057600080fd5b5061082b60048036038101906108269190613b92565b611991565b005b34801561083957600080fd5b50610854600480360381019061084f9190613c73565b6119a7565b005b34801561086257600080fd5b5061086b611a09565b6040516108789190613d3e565b60405180910390f35b34801561088d57600080fd5b506108a860048036038101906108a39190613813565b611a1c565b6040516108b591906137bb565b60405180910390f35b3480156108ca57600080fd5b506108d3611a6f565b005b3480156108e157600080fd5b506108fc60048036038101906108f791906139bb565b611ae4565b005b34801561090a57600080fd5b50610913611b70565b604051610920919061394d565b60405180910390f35b34801561093557600080fd5b5061093e611b76565b005b34801561094c57600080fd5b5061096760048036038101906109629190613d59565b611f36565b60405161097491906136ab565b60405180910390f35b34801561098957600080fd5b50610992611fca565b60405161099f919061394d565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca91906139bb565b611fcf565b005b3480156109dd57600080fd5b506109e6612053565b6040516109f391906136ab565b60405180910390f35b348015610a0857600080fd5b50610a11612066565b604051610a1e9190613707565b60405180910390f35b348015610a3357600080fd5b50610a3c61208c565b604051610a49919061394d565b60405180910390f35b6000610a5d82612092565b9050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008054610a9990613dc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590613dc8565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b5050505050905090565b6000610b278261210c565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6d826114ca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590613e6c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfd612157565b73ffffffffffffffffffffffffffffffffffffffff161480610c2c5750610c2b81610c26612157565b611f36565b5b610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290613efe565b60405180910390fd5b610c75838361215f565b505050565b601360019054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce757600080fd5b61296a610cf2610e35565b10610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613f90565b60405180910390fd5b61296a610d506064610d42610e35565b61221890919063ffffffff16565b1115610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890614022565b60405180910390fd5b601160159054906101000a900460ff1615610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd89061408e565b60405180910390fd5b6001601160156101000a81548160ff02191690831515021790555060005b6064811015610e32576000610e12610e35565b9050610e1e338261222e565b508080610e2a906140dd565b915050610dff565b50565b6000600880549050905090565b610e53610e4d612157565b8261224c565b610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990614198565b60405180910390fd5b610e9d8383836122e1565b505050565b610eaa612548565b60006002811115610ebe57610ebd6138ac565b5b601360009054906101000a900460ff166002811115610ee057610edf6138ac565b5b14610eea57600080fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d8054610f3b90613dc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6790613dc8565b8015610fb45780601f10610f8957610100808354040283529160200191610fb4565b820191906000526020600020905b815481529060010190602001808311610f9757829003601f168201915b505050505081565b610fc4612548565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d90614204565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110b657600080fd5b50565b60006110c48361168f565b8210611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90614296565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611166612548565b6001601360006101000a81548160ff0219169083600281111561118c5761118b6138ac565b5b0217905550565b61119b612548565b80600d90805190602001906111b1929190613514565b5050565b6111d0838383604051806020016040528060008152506119a7565b505050565b6111e66111e0612157565b8261224c565b611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90614198565b60405180910390fd5b61122e816125c6565b50565b600061123b610e35565b821061127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390614328565b60405180910390fd5b600882815481106112905761128f614348565b5b90600052602060002001549050919050565b6112aa612548565b80600c90805190602001906112c0929190613514565b5050565b600160028111156112d8576112d76138ac565b5b601360009054906101000a900460ff1660028111156112fa576112f96138ac565b5b1461130457600080fd5b61296a61130f610e35565b1061134f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611346906143c3565b60405180910390fd5b6000811180156113605750600d8111155b61139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690614455565b60405180910390fd5b61296a6113bc826113ae610e35565b61221890919063ffffffff16565b11156113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f49061450d565b60405180910390fd5b611412816012546125d290919063ffffffff16565b341015611454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144b9061459f565b60405180910390fd5b60005b81811015611489576000611469610e35565b9050611475338261222e565b508080611481906140dd565b915050611457565b5061296a611495610e35565b14156114c7576002601360006101000a81548160ff021916908360028111156114c1576114c06138ac565b5b02179055505b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a9061460b565b60405180910390fd5b80915050919050565b611584612548565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c80546115d590613dc8565b80601f016020809104026020016040519081016040528092919081815260200182805461160190613dc8565b801561164e5780601f106116235761010080835404028352916020019161164e565b820191906000526020600020905b81548152906001019060200180831161163157829003601f168201915b505050505081565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f79061469d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61174f612548565b61175960006125e8565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611789612548565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181290614204565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061187b57600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118af612548565b600060028111156118c3576118c26138ac565b5b601360009054906101000a900460ff1660028111156118e5576118e46138ac565b5b146118ef57600080fd5b8060128190555050565b60606001805461190890613dc8565b80601f016020809104026020016040519081016040528092919081815260200182805461193490613dc8565b80156119815780601f1061195657610100808354040283529160200191611981565b820191906000526020600020905b81548152906001019060200180831161196457829003601f168201915b5050505050905090565b60125481565b6119a361199c612157565b83836126ae565b5050565b6119b86119b2612157565b8361224c565b6119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90614198565b60405180910390fd5b611a038484848461281b565b50505050565b601360009054906101000a900460ff1681565b6060600c611a2983612877565b604051602001611a3a92919061478d565b604051602081830303815290604052604051602001611a5991906147d7565b6040516020818303038152906040529050919050565b611a77612548565b60016002811115611a8b57611a8a6138ac565b5b601360009054906101000a900460ff166002811115611aad57611aac6138ac565b5b14611ab757600080fd5b6000601360006101000a81548160ff02191690836002811115611add57611adc6138ac565b5b0217905550565b611aec612548565b60006002811115611b0057611aff6138ac565b5b601360009054906101000a900460ff166002811115611b2257611b216138ac565b5b14611b2c57600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61296a81565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bd057600080fd5b61296a611bdb610e35565b10611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c129061486f565b60405180910390fd5b6000806003811115611c3057611c2f6138ac565b5b601360019054906101000a900460ff166003811115611c5257611c516138ac565b5b1415611c6157604b9050611cf2565b60016003811115611c7557611c746138ac565b5b601360019054906101000a900460ff166003811115611c9757611c966138ac565b5b1415611ca65760649050611cf1565b60026003811115611cba57611cb96138ac565b5b601360019054906101000a900460ff166003811115611cdc57611cdb6138ac565b5b1415611ceb5760649050611cf0565b600080fd5b5b5b61296a611d0f82611d01610e35565b61221890919063ffffffff16565b1115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790614022565b60405180910390fd5b601160149054906101000a900460ff1615611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614901565b60405180910390fd5b60005b81811015611dd5576000611db5610e35565b9050611dc1338261222e565b508080611dcd906140dd565b915050611da3565b5060006003811115611dea57611de96138ac565b5b601360019054906101000a900460ff166003811115611e0c57611e0b6138ac565b5b1415611e42576001601360016101000a81548160ff02191690836003811115611e3857611e376138ac565b5b0217905550611f33565b60016003811115611e5657611e556138ac565b5b601360019054906101000a900460ff166003811115611e7857611e776138ac565b5b1415611eae576002601360016101000a81548160ff02191690836003811115611ea457611ea36138ac565b5b0217905550611f32565b60026003811115611ec257611ec16138ac565b5b601360019054906101000a900460ff166003811115611ee457611ee36138ac565b5b1415611f31576003601360016101000a81548160ff02191690836003811115611f1057611f0f6138ac565b5b02179055506001601160146101000a81548160ff0219169083151502179055505b5b5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606481565b611fd7612548565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90614993565b60405180910390fd5b612050816125e8565b50565b601160149054906101000a900460ff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61011381565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121055750612104826129d8565b5b9050919050565b61211581612aba565b612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b9061460b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121d2836114ca565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818361222691906149b3565b905092915050565b612248828260405180602001604052806000815250612b26565b5050565b600080612258836114ca565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061229a57506122998185611f36565b5b806122d857508373ffffffffffffffffffffffffffffffffffffffff166122c084610b1c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612301826114ca565b73ffffffffffffffffffffffffffffffffffffffff1614612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90614a7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614b0d565b60405180910390fd5b6123d2838383612b81565b6123dd60008261215f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461242d9190614b2d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461248491906149b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612543838383612b91565b505050565b612550612157565b73ffffffffffffffffffffffffffffffffffffffff1661256e61187d565b73ffffffffffffffffffffffffffffffffffffffff16146125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb90614bad565b60405180910390fd5b565b6125cf81612b96565b50565b600081836125e09190614bcd565b905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561271d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271490614c73565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161280e91906136ab565b60405180910390a3505050565b6128268484846122e1565b61283284848484612be9565b612871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286890614d05565b60405180910390fd5b50505050565b606060008214156128bf576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129d3565b600082905060005b600082146128f15780806128da906140dd565b915050600a826128ea9190614d54565b91506128c7565b60008167ffffffffffffffff81111561290d5761290c6139f2565b5b6040519080825280601f01601f19166020018201604052801561293f5781602001600182028036833780820191505090505b5090505b600085146129cc576001826129589190614b2d565b9150600a856129679190614d85565b603061297391906149b3565b60f81b81838151811061298957612988614348565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129c59190614d54565b9450612943565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612aa357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612ab35750612ab282612d71565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b612b308383612ddb565b612b3d6000848484612be9565b612b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7390614d05565b60405180910390fd5b505050565b612b8c838383612fb5565b505050565b505050565b612b9f816130c9565b6000600a60008381526020019081526020016000208054612bbf90613dc8565b905014612be657600a60008281526020019081526020016000206000612be5919061359a565b5b50565b6000612c0a8473ffffffffffffffffffffffffffffffffffffffff166131e6565b15612d64578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c33612157565b8786866040518563ffffffff1660e01b8152600401612c559493929190614e0b565b6020604051808303816000875af1925050508015612c9157506040513d601f19601f82011682018060405250810190612c8e9190614e6c565b60015b612d14573d8060008114612cc1576040519150601f19603f3d011682016040523d82523d6000602084013e612cc6565b606091505b50600081511415612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390614d05565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d69565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4290614ee5565b60405180910390fd5b612e5481612aba565b15612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90614f51565b60405180910390fd5b612ea060008383612b81565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef091906149b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fb160008383612b91565b5050565b612fc0838383613209565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561300357612ffe8161320e565b613042565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613041576130408382613257565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561308557613080816133c4565b6130c4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130c3576130c28282613495565b5b5b505050565b60006130d4826114ca565b90506130e281600084612b81565b6130ed60008361215f565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461313d9190614b2d565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131e281600084612b91565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132648461168f565b61326e9190614b2d565b9050600060076000848152602001908152602001600020549050818114613353576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133d89190614b2d565b905060006009600084815260200190815260200160002054905060006008838154811061340857613407614348565b5b90600052602060002001549050806008838154811061342a57613429614348565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061347957613478614f71565b5b6001900381819060005260206000200160009055905550505050565b60006134a08361168f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461352090613dc8565b90600052602060002090601f0160209004810192826135425760008555613589565b82601f1061355b57805160ff1916838001178555613589565b82800160010185558215613589579182015b8281111561358857825182559160200191906001019061356d565b5b50905061359691906135da565b5090565b5080546135a690613dc8565b6000825580601f106135b857506135d7565b601f0160209004906000526020600020908101906135d691906135da565b5b50565b5b808211156135f35760008160009055506001016135db565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136408161360b565b811461364b57600080fd5b50565b60008135905061365d81613637565b92915050565b60006020828403121561367957613678613601565b5b60006136878482850161364e565b91505092915050565b60008115159050919050565b6136a581613690565b82525050565b60006020820190506136c0600083018461369c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136f1826136c6565b9050919050565b613701816136e6565b82525050565b600060208201905061371c60008301846136f8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561375c578082015181840152602081019050613741565b8381111561376b576000848401525b50505050565b6000601f19601f8301169050919050565b600061378d82613722565b613797818561372d565b93506137a781856020860161373e565b6137b081613771565b840191505092915050565b600060208201905081810360008301526137d58184613782565b905092915050565b6000819050919050565b6137f0816137dd565b81146137fb57600080fd5b50565b60008135905061380d816137e7565b92915050565b60006020828403121561382957613828613601565b5b6000613837848285016137fe565b91505092915050565b613849816136e6565b811461385457600080fd5b50565b60008135905061386681613840565b92915050565b6000806040838503121561388357613882613601565b5b600061389185828601613857565b92505060206138a2858286016137fe565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106138ec576138eb6138ac565b5b50565b60008190506138fd826138db565b919050565b600061390d826138ef565b9050919050565b61391d81613902565b82525050565b60006020820190506139386000830184613914565b92915050565b613947816137dd565b82525050565b6000602082019050613962600083018461393e565b92915050565b60008060006060848603121561398157613980613601565b5b600061398f86828701613857565b93505060206139a086828701613857565b92505060406139b1868287016137fe565b9150509250925092565b6000602082840312156139d1576139d0613601565b5b60006139df84828501613857565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a2a82613771565b810181811067ffffffffffffffff82111715613a4957613a486139f2565b5b80604052505050565b6000613a5c6135f7565b9050613a688282613a21565b919050565b600067ffffffffffffffff821115613a8857613a876139f2565b5b613a9182613771565b9050602081019050919050565b82818337600083830152505050565b6000613ac0613abb84613a6d565b613a52565b905082815260208101848484011115613adc57613adb6139ed565b5b613ae7848285613a9e565b509392505050565b600082601f830112613b0457613b036139e8565b5b8135613b14848260208601613aad565b91505092915050565b600060208284031215613b3357613b32613601565b5b600082013567ffffffffffffffff811115613b5157613b50613606565b5b613b5d84828501613aef565b91505092915050565b613b6f81613690565b8114613b7a57600080fd5b50565b600081359050613b8c81613b66565b92915050565b60008060408385031215613ba957613ba8613601565b5b6000613bb785828601613857565b9250506020613bc885828601613b7d565b9150509250929050565b600067ffffffffffffffff821115613bed57613bec6139f2565b5b613bf682613771565b9050602081019050919050565b6000613c16613c1184613bd2565b613a52565b905082815260208101848484011115613c3257613c316139ed565b5b613c3d848285613a9e565b509392505050565b600082601f830112613c5a57613c596139e8565b5b8135613c6a848260208601613c03565b91505092915050565b60008060008060808587031215613c8d57613c8c613601565b5b6000613c9b87828801613857565b9450506020613cac87828801613857565b9350506040613cbd878288016137fe565b925050606085013567ffffffffffffffff811115613cde57613cdd613606565b5b613cea87828801613c45565b91505092959194509250565b60038110613d0757613d066138ac565b5b50565b6000819050613d1882613cf6565b919050565b6000613d2882613d0a565b9050919050565b613d3881613d1d565b82525050565b6000602082019050613d536000830184613d2f565b92915050565b60008060408385031215613d7057613d6f613601565b5b6000613d7e85828601613857565b9250506020613d8f85828601613857565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613de057607f821691505b60208210811415613df457613df3613d99565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e5660218361372d565b9150613e6182613dfa565b604082019050919050565b60006020820190508181036000830152613e8581613e49565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613ee8603e8361372d565b9150613ef382613e8c565b604082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b7f6e6f7420656e6f756768207069656365732072656d61696e696e6720666f722060008201527f656475786174696f6e20616c6c6f636174696f6e000000000000000000000000602082015250565b6000613f7a60348361372d565b9150613f8582613f1e565b604082019050919050565b60006020820190508181036000830152613fa981613f6d565b9050919050565b7f6e6f7420656e6f75676e204d7946692070696563657320617661696c61626c6560008201527f20666f7220636f6e6e656374696f6e0000000000000000000000000000000000602082015250565b600061400c602f8361372d565b915061401782613fb0565b604082019050919050565b6000602082019050818103600083015261403b81613fff565b9050919050565b7f656475636174696f6e20616c7265616479206d696e746564203a700000000000600082015250565b6000614078601b8361372d565b915061408382614042565b602082019050919050565b600060208201905081810360008301526140a78161406b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140e8826137dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561411b5761411a6140ae565b5b600182019050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000614182602e8361372d565b915061418d82614126565b604082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f6e6f207661756c74000000000000000000000000000000000000000000000000600082015250565b60006141ee60088361372d565b91506141f9826141b8565b602082019050919050565b6000602082019050818103600083015261421d816141e1565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614280602b8361372d565b915061428b82614224565b604082019050919050565b600060208201905081810360008301526142af81614273565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614312602c8361372d565b915061431d826142b6565b604082019050919050565b6000602082019050818103600083015261434181614305565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c6c204d7946692070696563657320636f6e6e656374656400000000000000600082015250565b60006143ad60198361372d565b91506143b882614377565b602082019050919050565b600060208201905081810360008301526143dc816143a0565b9050919050565b7f596f752063616e20636f6e6e65637420746f206265747765656e203120616e6460008201527f203133204d7946692070696563657320617420612074696d6500000000000000602082015250565b600061443f60398361372d565b915061444a826143e3565b604082019050919050565b6000602082019050818103600083015261446e81614432565b9050919050565b7f6e6f7420656e6f75676e204d7946692070696563657320617661696c61626c6560008201527f20666f7220636f6e6e656374696f6e2c20706c656173652063686f736520612060208201527f736d616c6c657220616d6d6f756e742e2e2e0000000000000000000000000000604082015250565b60006144f760528361372d565b915061450282614475565b606082019050919050565b60006020820190508181036000830152614526816144ea565b9050919050565b7f636865636b20796f7572206d6174683a206e6f7420656e6f756768206574682060008201527f73656e7400000000000000000000000000000000000000000000000000000000602082015250565b600061458960248361372d565b91506145948261452d565b604082019050919050565b600060208201905081810360008301526145b88161457c565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006145f560188361372d565b9150614600826145bf565b602082019050919050565b60006020820190508181036000830152614624816145e8565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061468760298361372d565b91506146928261462b565b604082019050919050565b600060208201905081810360008301526146b68161467a565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546146ea81613dc8565b6146f481866146bd565b9450600182166000811461470f576001811461472057614753565b60ff19831686528186019350614753565b614729856146c8565b60005b8381101561474b5781548189015260018201915060208101905061472c565b838801955050505b50505092915050565b600061476782613722565b61477181856146bd565b935061478181856020860161373e565b80840191505092915050565b600061479982856146dd565b91506147a5828461475c565b91508190509392505050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b60006147e3828461475c565b91506147ee826147b1565b60058201915081905092915050565b7f6e6f7420656e6f756768207069656365732072656d61696e696e6720666f722060008201527f667269656e647320616e642066616d696c7920616c6c6f636174696f6e000000602082015250565b6000614859603d8361372d565b9150614864826147fd565b604082019050919050565b600060208201905081810360008301526148888161484c565b9050919050565b7f667269656e647320616e642066616d696c7920616c7265616479206d696e746560008201527f64203a7000000000000000000000000000000000000000000000000000000000602082015250565b60006148eb60248361372d565b91506148f68261488f565b604082019050919050565b6000602082019050818103600083015261491a816148de565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061497d60268361372d565b915061498882614921565b604082019050919050565b600060208201905081810360008301526149ac81614970565b9050919050565b60006149be826137dd565b91506149c9836137dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149fe576149fd6140ae565b5b828201905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614a6560258361372d565b9150614a7082614a09565b604082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614af760248361372d565b9150614b0282614a9b565b604082019050919050565b60006020820190508181036000830152614b2681614aea565b9050919050565b6000614b38826137dd565b9150614b43836137dd565b925082821015614b5657614b556140ae565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b9760208361372d565b9150614ba282614b61565b602082019050919050565b60006020820190508181036000830152614bc681614b8a565b9050919050565b6000614bd8826137dd565b9150614be3836137dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c1c57614c1b6140ae565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614c5d60198361372d565b9150614c6882614c27565b602082019050919050565b60006020820190508181036000830152614c8c81614c50565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614cef60328361372d565b9150614cfa82614c93565b604082019050919050565b60006020820190508181036000830152614d1e81614ce2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d5f826137dd565b9150614d6a836137dd565b925082614d7a57614d79614d25565b5b828204905092915050565b6000614d90826137dd565b9150614d9b836137dd565b925082614dab57614daa614d25565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614ddd82614db6565b614de78185614dc1565b9350614df781856020860161373e565b614e0081613771565b840191505092915050565b6000608082019050614e2060008301876136f8565b614e2d60208301866136f8565b614e3a604083018561393e565b8181036060830152614e4c8184614dd2565b905095945050505050565b600081519050614e6681613637565b92915050565b600060208284031215614e8257614e81613601565b5b6000614e9084828501614e57565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ecf60208361372d565b9150614eda82614e99565b602082019050919050565b60006020820190508181036000830152614efe81614ec2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f3b601c8361372d565b9150614f4682614f05565b602082019050919050565b60006020820190508181036000830152614f6a81614f2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122024c7d4558005acee65f2e54568ad853dcb428b336171e0c0d7bc48096612fd1b64736f6c634300080c00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7777772e6d7966692e66756e2f697066732f516d656e5a4c707356556843527769725655465763624a61536f6a76546b784c564331434b6771344c37636f76482f0000000000000000000000000000000000000000000000