60806040526000600560006101000a81548160ff02191690831515021790555073ef1c6e67703c7bd7107eed8303fbe6ec2554bf6b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b506040518060400160405280600481526020017f48414d50000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f48656c6c414d50000000000000000000000000000000000000000000000000008152506200016362000157620001d160201b60201c565b620001d960201b60201c565b816006908162000174919062000698565b50806007908162000186919062000698565b505050620001cb336200019e6200029d60201b60201c565b600a620001ac91906200090f565b6509184e72a000620001bf919062000960565b620002a660201b60201c565b62000a97565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000318576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030f9062000a0c565b60405180910390fd5b6200032c600083836200041460201b60201c565b806004600082825462000340919062000a2e565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003f4919062000a7a565b60405180910390a362000410600083836200041960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004a057607f821691505b602082108103620004b657620004b562000458565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004e1565b6200052c8683620004e1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000579620005736200056d8462000544565b6200054e565b62000544565b9050919050565b6000819050919050565b620005958362000558565b620005ad620005a48262000580565b848454620004ee565b825550505050565b600090565b620005c4620005b5565b620005d18184846200058a565b505050565b5b81811015620005f957620005ed600082620005ba565b600181019050620005d7565b5050565b601f82111562000648576200061281620004bc565b6200061d84620004d1565b810160208510156200062d578190505b620006456200063c85620004d1565b830182620005d6565b50505b505050565b600082821c905092915050565b60006200066d600019846008026200064d565b1980831691505092915050565b60006200068883836200065a565b9150826002028217905092915050565b620006a3826200041e565b67ffffffffffffffff811115620006bf57620006be62000429565b5b620006cb825462000487565b620006d8828285620005fd565b600060209050601f831160018114620007105760008415620006fb578287015190505b6200070785826200067a565b86555062000777565b601f1984166200072086620004bc565b60005b828110156200074a5784890151825560018201915060208501945060208101905062000723565b868310156200076a578489015162000766601f8916826200065a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200080d57808604811115620007e557620007e46200077f565b5b6001851615620007f55780820291505b80810290506200080585620007ae565b9450620007c5565b94509492505050565b600082620008285760019050620008fb565b81620008385760009050620008fb565b81600181146200085157600281146200085c5762000892565b6001915050620008fb565b60ff8411156200087157620008706200077f565b5b8360020a9150848211156200088b576200088a6200077f565b5b50620008fb565b5060208310610133831016604e8410600b8410161715620008cc5782820a905083811115620008c657620008c56200077f565b5b620008fb565b620008db8484846001620007bb565b92509050818404811115620008f557620008f46200077f565b5b81810290505b9392505050565b600060ff82169050919050565b60006200091c8262000544565b9150620009298362000902565b9250620009587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000816565b905092915050565b60006200096d8262000544565b91506200097a8362000544565b92508282026200098a8162000544565b91508282048414831517620009a457620009a36200077f565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620009f4601f83620009ab565b915062000a0182620009bc565b602082019050919050565b6000602082019050818103600083015262000a2781620009e5565b9050919050565b600062000a3b8262000544565b915062000a488362000544565b925082820190508082111562000a635762000a626200077f565b5b92915050565b62000a748162000544565b82525050565b600060208201905062000a91600083018462000a69565b92915050565b6120f28062000aa76000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610327578063a9059cbb14610357578063beabacc814610387578063dd62ed3e146103a3578063f2fde38b146103d3578063f6948cf2146103ef57610136565b8063715018a6146102a95780637aac697b146102b35780638da5cb5b146102cf57806395d89b41146102ed578063a1c617f51461030b57610136565b8063313ce567116100ff578063313ce567146101f3578063329de1531461021157806338bf3cfa1461022d578063395093511461024957806370a082311461027957610136565b80624b221e1461013b57806306fdde0314610157578063095ea7b31461017557806318160ddd146101a557806323b872dd146101c3575b600080fd5b610155600480360381019061015091906115cf565b61041f565b005b61015f6104cc565b60405161016c91906116ac565b60405180910390f35b61018f600480360381019061018a9190611762565b61055e565b60405161019c91906117bd565b60405180910390f35b6101ad610581565b6040516101ba91906117e7565b60405180910390f35b6101dd60048036038101906101d89190611802565b61058b565b6040516101ea91906117bd565b60405180910390f35b6101fb6105ba565b6040516102089190611871565b60405180910390f35b61022b600480360381019061022691906115cf565b6105c3565b005b6102476004803603810190610242919061188c565b61072b565b005b610263600480360381019061025e9190611762565b610777565b60405161027091906117bd565b60405180910390f35b610293600480360381019061028e919061188c565b6107ae565b6040516102a091906117e7565b60405180910390f35b6102b16107f7565b005b6102cd60048036038101906102c891906118b9565b61080b565b005b6102d7610997565b6040516102e4919061193c565b60405180910390f35b6102f56109c0565b60405161030291906116ac565b60405180910390f35b610325600480360381019061032091906118b9565b610a52565b005b610341600480360381019061033c9190611762565b610bdd565b60405161034e91906117bd565b60405180910390f35b610371600480360381019061036c9190611762565b610c54565b60405161037e91906117bd565b60405180910390f35b6103a1600480360381019061039c9190611802565b610c77565b005b6103bd60048036038101906103b89190611957565b610ce1565b6040516103ca91906117e7565b60405180910390f35b6103ed60048036038101906103e8919061188c565b610d68565b005b6104096004803603810190610404919061188c565b610deb565b60405161041691906117bd565b60405180910390f35b610427610e41565b60005b828290508110156104c75760006002600085858581811061044e5761044d611997565b5b9050602002016020810190610463919061188c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806104bf906119f5565b91505061042a565b505050565b6060600680546104db90611a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461050790611a6c565b80156105545780601f1061052957610100808354040283529160200191610554565b820191906000526020600020905b81548152906001019060200180831161053757829003601f168201915b5050505050905090565b600080610569610ebf565b9050610576818585610ec7565b600191505092915050565b6000600454905090565b600080610596610ebf565b90506105a3858285611090565b6105ae85858561111c565b60019150509392505050565b60006012905090565b6105cb610e41565b60005b82829050811015610726576001600260008585858181106105f2576105f1611997565b5b9050602002016020810190610607919061188c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1683838381811061068257610681611997565b5b9050602002016020810190610697919061188c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256106fe8686868181106106e4576106e3611997565b5b90506020020160208101906106f9919061188c565b6107ae565b60405161070b91906117e7565b60405180910390a3808061071e906119f5565b9150506105ce565b505050565b610733610e41565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610782610ebf565b90506107a38185856107948589610ce1565b61079e9190611a9d565b610ec7565b600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107ff610e41565b6108096000611492565b565b60005b848490508110156109905784848281811061082c5761082b611997565b5b9050602002016020810190610841919061188c565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8226000868660006040516108c79493929190611b16565b60405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685858381811061091b5761091a611997565b5b9050602002016020810190610930919061188c565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161097591906117e7565b60405180910390a38080610988906119f5565b91505061080e565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600780546109cf90611a6c565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90611a6c565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b60005b84849050811015610bd657848482818110610a7357610a72611997565b5b9050602002016020810190610a88919061188c565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051610b0d9493929190611b5b565b60405180910390a3848482818110610b2857610b27611997565b5b9050602002016020810190610b3d919061188c565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610bbb91906117e7565b60405180910390a38080610bce906119f5565b915050610a55565b5050505050565b600080610be8610ebf565b90506000610bf68286610ce1565b905083811015610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290611c12565b60405180910390fd5b610c488286868403610ec7565b60019250505092915050565b600080610c5f610ebf565b9050610c6c81858561111c565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cd491906117e7565b60405180910390a3505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d70610e41565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690611ca4565b60405180910390fd5b610de881611492565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e49610ebf565b73ffffffffffffffffffffffffffffffffffffffff16610e67610997565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490611d10565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90611da2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c90611e34565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161108391906117e7565b60405180910390a3505050565b600061109c8484610ce1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111165781811015611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90611ea0565b60405180910390fd5b6111158484848403610ec7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290611f32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190611fc4565b60405180910390fd5b611205838383611556565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128390612056565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113c05750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561141c5760011515600560009054906101000a900460ff1615151461141b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114129061209c565b60405180910390fd5b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161147991906117e7565b60405180910390a361148c84848461155b565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261158f5761158e61156a565b5b8235905067ffffffffffffffff8111156115ac576115ab61156f565b5b6020830191508360208202830111156115c8576115c7611574565b5b9250929050565b600080602083850312156115e6576115e5611560565b5b600083013567ffffffffffffffff81111561160457611603611565565b5b61161085828601611579565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561165657808201518184015260208101905061163b565b60008484015250505050565b6000601f19601f8301169050919050565b600061167e8261161c565b6116888185611627565b9350611698818560208601611638565b6116a181611662565b840191505092915050565b600060208201905081810360008301526116c68184611673565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116f9826116ce565b9050919050565b611709816116ee565b811461171457600080fd5b50565b60008135905061172681611700565b92915050565b6000819050919050565b61173f8161172c565b811461174a57600080fd5b50565b60008135905061175c81611736565b92915050565b6000806040838503121561177957611778611560565b5b600061178785828601611717565b92505060206117988582860161174d565b9150509250929050565b60008115159050919050565b6117b7816117a2565b82525050565b60006020820190506117d260008301846117ae565b92915050565b6117e18161172c565b82525050565b60006020820190506117fc60008301846117d8565b92915050565b60008060006060848603121561181b5761181a611560565b5b600061182986828701611717565b935050602061183a86828701611717565b925050604061184b8682870161174d565b9150509250925092565b600060ff82169050919050565b61186b81611855565b82525050565b60006020820190506118866000830184611862565b92915050565b6000602082840312156118a2576118a1611560565b5b60006118b084828501611717565b91505092915050565b600080600080606085870312156118d3576118d2611560565b5b600085013567ffffffffffffffff8111156118f1576118f0611565565b5b6118fd87828801611579565b945094505060206119108782880161174d565b92505060406119218782880161174d565b91505092959194509250565b611936816116ee565b82525050565b6000602082019050611951600083018461192d565b92915050565b6000806040838503121561196e5761196d611560565b5b600061197c85828601611717565b925050602061198d85828601611717565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a008261172c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a3257611a316119c6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a8457607f821691505b602082108103611a9757611a96611a3d565b5b50919050565b6000611aa88261172c565b9150611ab38361172c565b9250828201905080821115611acb57611aca6119c6565b5b92915050565b6000819050919050565b6000819050919050565b6000611b00611afb611af684611ad1565b611adb565b61172c565b9050919050565b611b1081611ae5565b82525050565b6000608082019050611b2b6000830187611b07565b611b3860208301866117d8565b611b4560408301856117d8565b611b526060830184611b07565b95945050505050565b6000608082019050611b7060008301876117d8565b611b7d6020830186611b07565b611b8a6040830185611b07565b611b9760608301846117d8565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611bfc602583611627565b9150611c0782611ba0565b604082019050919050565b60006020820190508181036000830152611c2b81611bef565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611c8e602683611627565b9150611c9982611c32565b604082019050919050565b60006020820190508181036000830152611cbd81611c81565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611cfa602083611627565b9150611d0582611cc4565b602082019050919050565b60006020820190508181036000830152611d2981611ced565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611d8c602483611627565b9150611d9782611d30565b604082019050919050565b60006020820190508181036000830152611dbb81611d7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e1e602283611627565b9150611e2982611dc2565b604082019050919050565b60006020820190508181036000830152611e4d81611e11565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611e8a601d83611627565b9150611e9582611e54565b602082019050919050565b60006020820190508181036000830152611eb981611e7d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f1c602583611627565b9150611f2782611ec0565b604082019050919050565b60006020820190508181036000830152611f4b81611f0f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611fae602383611627565b9150611fb982611f52565b604082019050919050565b60006020820190508181036000830152611fdd81611fa1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612040602683611627565b915061204b82611fe4565b604082019050919050565b6000602082019050818103600083015261206f81612033565b9050919050565b50565b6000612086600083611627565b915061209182612076565b600082019050919050565b600060208201905081810360008301526120b581612079565b905091905056fea2646970667358221220da22e49a7f6938693eb60c3b73a5825dc3f04b8afbf52bd24d215eeee61baa6664736f6c63430008120033