60806040525f60065f6101000a81548160ff0219169083151502179055506040518060400160405280600c81526020017f46726f67646f6720436f696e0000000000000000000000000000000000000000815250600790816200006391906200055e565b506040518060400160405280600781526020017f46524f47444f470000000000000000000000000000000000000000000000000081525060089081620000aa91906200055e565b50601260095f6101000a81548160ff021916908360ff160217905550348015620000d2575f80fd5b505f620000e4620002f360201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f4390508060025f62000198620002f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254620001e191906200066f565b925050819055506b033b2e3c9fd0803ce800000060055f8282546200020791906200066f565b9250508190555060055460015f62000224620002f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200026d91906200066f565b9250508190555062000284620002f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620002e49190620006ba565b60405180910390a350620006d5565b5f33905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200037657607f821691505b6020821081036200038c576200038b62000331565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620003f07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003b3565b620003fc8683620003b3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000446620004406200043a8462000414565b6200041d565b62000414565b9050919050565b5f819050919050565b620004618362000426565b6200047962000470826200044d565b848454620003bf565b825550505050565b5f90565b6200048f62000481565b6200049c81848462000456565b505050565b5b81811015620004c357620004b75f8262000485565b600181019050620004a2565b5050565b601f8211156200051257620004dc8162000392565b620004e784620003a4565b81016020851015620004f7578190505b6200050f6200050685620003a4565b830182620004a1565b50505b505050565b5f82821c905092915050565b5f620005345f198460080262000517565b1980831691505092915050565b5f6200054e838362000523565b9150826002028217905092915050565b6200056982620002fa565b67ffffffffffffffff81111562000585576200058462000304565b5b6200059182546200035e565b6200059e828285620004c7565b5f60209050601f831160018114620005d4575f8415620005bf578287015190505b620005cb858262000541565b8655506200063a565b601f198416620005e48662000392565b5f5b828110156200060d57848901518255600182019150602085019450602081019050620005e6565b868310156200062d578489015162000629601f89168262000523565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200067b8262000414565b9150620006888362000414565b9250828201905080821115620006a357620006a262000642565b5b92915050565b620006b48162000414565b82525050565b5f602082019050620006cf5f830184620006a9565b92915050565b611bb680620006e35f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c806370a08231116100a0578063a9059cbb1161006f578063a9059cbb146102e2578063b09f126614610312578063d074dc2814610330578063d28d88521461034c578063dd62ed3e1461036a57610114565b806370a082311461026c578063715018a61461029c5780638da5cb5b146102a657806395d89b41146102c457610114565b806323b872dd116100e757806323b872dd146101b4578063313ce567146101e45780633eaaf86b146102025780635b19963b146102205780636ebcf6071461023c57610114565b806306fdde0314610118578063095ea7b31461013657806318160ddd146101665780631a4baf0b14610184575b5f80fd5b61012061039a565b60405161012d919061140e565b60405180910390f35b610150600480360381019061014b91906114bf565b61042a565b60405161015d9190611517565b60405180910390f35b61016e610447565b60405161017b919061153f565b60405180910390f35b61019e60048036038101906101999190611558565b610450565b6040516101ab919061153f565b60405180910390f35b6101ce60048036038101906101c99190611583565b610465565b6040516101db9190611517565b60405180910390f35b6101ec610560565b6040516101f991906115ee565b60405180910390f35b61020a610575565b604051610217919061153f565b60405180910390f35b61023a60048036038101906102359190611558565b61057b565b005b61025660048036038101906102519190611558565b610633565b604051610263919061153f565b60405180910390f35b61028660048036038101906102819190611558565b610648565b604051610293919061153f565b60405180910390f35b6102a461068e565b005b6102ae61079e565b6040516102bb9190611616565b60405180910390f35b6102cc6107c5565b6040516102d9919061140e565b60405180910390f35b6102fc60048036038101906102f791906114bf565b610855565b6040516103099190611517565b60405180910390f35b61031a610872565b604051610327919061140e565b60405180910390f35b61034a60048036038101906103459190611558565b6108fe565b005b6103546109b7565b604051610361919061140e565b60405180910390f35b610384600480360381019061037f919061162f565b610a43565b604051610391919061153f565b60405180910390f35b6060600780546103a99061169a565b80601f01602080910402602001604051908101604052809291908181526020018280546103d59061169a565b80156104205780601f106103f757610100808354040283529160200191610420565b820191905f5260205f20905b81548152906001019060200180831161040357829003601f168201915b5050505050905090565b5f61043d610436610ac5565b8484610acc565b6001905092915050565b5f600554905090565b6002602052805f5260405f205f915090505481565b5f610471848484610c8f565b5f60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6104b8610ac5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e9061173a565b60405180910390fd5b61055485610543610ac5565b858461054f9190611785565b610acc565b60019150509392505050565b5f60095f9054906101000a900460ff16905090565b60055481565b60095f9054906101000a900460ff1660ff1660025f610598610ac5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156105dc575f80fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6001602052805f5260405f205f915090505481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e4575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600880546107d49061169a565b80601f01602080910402602001604051908101604052809291908181526020018280546108009061169a565b801561084b5780601f106108225761010080835404028352916020019161084b565b820191905f5260205f20905b81548152906001019060200180831161082e57829003601f168201915b5050505050905090565b5f610868610861610ac5565b8484611032565b6001905092915050565b6008805461087f9061169a565b80601f01602080910402602001604051908101604052809291908181526020018280546108ab9061169a565b80156108f65780601f106108cd576101008083540402835291602001916108f6565b820191905f5260205f20905b8154815290600101906020018083116108d957829003601f168201915b505050505081565b60095f9054906101000a900460ff1660ff1660025f61091b610ac5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561095f575f80fd5b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b600780546109c49061169a565b80601f01602080910402602001604051908101604052809291908181526020018280546109f09061169a565b8015610a3b5780601f10610a1257610100808354040283529160200191610a3b565b820191905f5260205f20905b815481529060010190602001808311610a1e57829003601f168201915b505050505081565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190611828565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f906118b6565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c82919061153f565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf490611944565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d62906119d2565b60405180910390fd5b5f8111610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490611a60565b60405180910390fd5b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610e48575060035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15610ea3576001151560065f9054906101000a900460ff16151514610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990611aa1565b60405180910390fd5b5b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90611b2f565b60405180910390fd5b8181610f339190611785565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610fc09190611b4d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611024919061153f565b60405180910390a350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790611944565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611105906119d2565b60405180910390fd5b5f8111611150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114790611a60565b60405180910390fd5b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111f5576001151560065f9054906101000a900460ff161515146111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb90611aa1565b60405180910390fd5b5b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090611b2f565b60405180910390fd5b81816112859190611785565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113129190611b4d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611376919061153f565b60405180910390a350505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156113bb5780820151818401526020810190506113a0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6113e082611384565b6113ea818561138e565b93506113fa81856020860161139e565b611403816113c6565b840191505092915050565b5f6020820190508181035f83015261142681846113d6565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61145b82611432565b9050919050565b61146b81611451565b8114611475575f80fd5b50565b5f8135905061148681611462565b92915050565b5f819050919050565b61149e8161148c565b81146114a8575f80fd5b50565b5f813590506114b981611495565b92915050565b5f80604083850312156114d5576114d461142e565b5b5f6114e285828601611478565b92505060206114f3858286016114ab565b9150509250929050565b5f8115159050919050565b611511816114fd565b82525050565b5f60208201905061152a5f830184611508565b92915050565b6115398161148c565b82525050565b5f6020820190506115525f830184611530565b92915050565b5f6020828403121561156d5761156c61142e565b5b5f61157a84828501611478565b91505092915050565b5f805f6060848603121561159a5761159961142e565b5b5f6115a786828701611478565b93505060206115b886828701611478565b92505060406115c9868287016114ab565b9150509250925092565b5f60ff82169050919050565b6115e8816115d3565b82525050565b5f6020820190506116015f8301846115df565b92915050565b61161081611451565b82525050565b5f6020820190506116295f830184611607565b92915050565b5f80604083850312156116455761164461142e565b5b5f61165285828601611478565b925050602061166385828601611478565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806116b157607f821691505b6020821081036116c4576116c361166d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61172460288361138e565b915061172f826116ca565b604082019050919050565b5f6020820190508181035f83015261175181611718565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61178f8261148c565b915061179a8361148c565b92508282039050818111156117b2576117b1611758565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61181260248361138e565b915061181d826117b8565b604082019050919050565b5f6020820190508181035f83015261183f81611806565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6118a060228361138e565b91506118ab82611846565b604082019050919050565b5f6020820190508181035f8301526118cd81611894565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61192e60258361138e565b9150611939826118d4565b604082019050919050565b5f6020820190508181035f83015261195b81611922565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6119bc60238361138e565b91506119c782611962565b604082019050919050565b5f6020820190508181035f8301526119e9816119b0565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726174657220745f8201527f6861746e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f611a4a60298361138e565b9150611a55826119f0565b604082019050919050565b5f6020820190508181035f830152611a7781611a3e565b9050919050565b50565b5f611a8c5f8361138e565b9150611a9782611a7e565b5f82019050919050565b5f6020820190508181035f830152611ab881611a81565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611b1960268361138e565b9150611b2482611abf565b604082019050919050565b5f6020820190508181035f830152611b4681611b0d565b9050919050565b5f611b578261148c565b9150611b628361148c565b9250828201905080821115611b7a57611b79611758565b5b9291505056fea2646970667358221220b8862aa0a67a7557ad32c0c89a48160fe92a36e53980160053e87bd2738ca17164736f6c63430008170033