60a06040525f600655348015610013575f80fd5b5060405161295e38038061295e83398181016040528101906100359190610459565b33848481600390816100479190610702565b5080600490816100579190610702565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100ca575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c191906107e0565b60405180910390fd5b6100d98161019f60201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013f90610853565b60405180910390fd5b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060ff1660808160ff168152505050505050610871565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102c18261027b565b810181811067ffffffffffffffff821117156102e0576102df61028b565b5b80604052505050565b5f6102f2610262565b90506102fe82826102b8565b919050565b5f67ffffffffffffffff82111561031d5761031c61028b565b5b6103268261027b565b9050602081019050919050565b5f5b83811015610350578082015181840152602081019050610335565b5f8484015250505050565b5f61036d61036884610303565b6102e9565b90508281526020810184848401111561038957610388610277565b5b610394848285610333565b509392505050565b5f82601f8301126103b0576103af610273565b5b81516103c084826020860161035b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103f2826103c9565b9050919050565b610402816103e8565b811461040c575f80fd5b50565b5f8151905061041d816103f9565b92915050565b5f60ff82169050919050565b61043881610423565b8114610442575f80fd5b50565b5f815190506104538161042f565b92915050565b5f805f80608085870312156104715761047061026b565b5b5f85015167ffffffffffffffff81111561048e5761048d61026f565b5b61049a8782880161039c565b945050602085015167ffffffffffffffff8111156104bb576104ba61026f565b5b6104c78782880161039c565b93505060406104d88782880161040f565b92505060606104e987828801610445565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061054357607f821691505b602082108103610556576105556104ff565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261057d565b6105c2868361057d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106066106016105fc846105da565b6105e3565b6105da565b9050919050565b5f819050919050565b61061f836105ec565b61063361062b8261060d565b848454610589565b825550505050565b5f90565b61064761063b565b610652818484610616565b505050565b5b818110156106755761066a5f8261063f565b600181019050610658565b5050565b601f8211156106ba5761068b8161055c565b6106948461056e565b810160208510156106a3578190505b6106b76106af8561056e565b830182610657565b50505b505050565b5f82821c905092915050565b5f6106da5f19846008026106bf565b1980831691505092915050565b5f6106f283836106cb565b9150826002028217905092915050565b61070b826104f5565b67ffffffffffffffff8111156107245761072361028b565b5b61072e825461052c565b610739828285610679565b5f60209050601f83116001811461076a575f8415610758578287015190505b61076285826106e7565b8655506107c9565b601f1984166107788661055c565b5f5b8281101561079f5784890151825560018201915060208501945060208101905061077a565b868310156107bc57848901516107b8601f8916826106cb565b8355505b6001600288020188555050505b505050505050565b6107da816103e8565b82525050565b5f6020820190506107f35f8301846107d1565b92915050565b5f82825260208201905092915050565b7f43616e6e6f742063616c6c2066726f6d207a65726f20616464726573730000005f82015250565b5f61083d601d836107f9565b915061084882610809565b602082019050919050565b5f6020820190508181035f83015261086a81610831565b9050919050565b6080516120d56108895f395f61058101526120d55ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c80638da5cb5b116100ab578063ba86a10d1161006f578063ba86a10d146102f5578063db420fe314610325578063dd62ed3e14610343578063e557b9c214610373578063f2fde38b146103a35761011f565b80638da5cb5b1461024f578063910492d01461026d57806395d89b4114610289578063a9059cbb146102a7578063b77bf600146102d75761011f565b806323b872dd116100f257806323b872dd146101ab578063313ce567146101db57806370a08231146101f9578063715018a61461022957806380a5a371146102335761011f565b806306fdde031461012357806308dc9f4214610141578063095ea7b31461015d57806318160ddd1461018d575b5f80fd5b61012b6103bf565b6040516101389190611598565b60405180910390f35b61015b60048036038101906101569190611728565b61044f565b005b610177600480360381019061017291906117ee565b610525565b6040516101849190611846565b60405180910390f35b610195610547565b6040516101a2919061186e565b60405180910390f35b6101c560048036038101906101c09190611887565b610550565b6040516101d29190611846565b60405180910390f35b6101e361057e565b6040516101f091906118f2565b60405180910390f35b610213600480360381019061020e919061190b565b6105a5565b604051610220919061186e565b60405180910390f35b6102316105ea565b005b61024d60048036038101906102489190611728565b6105fd565b005b6102576106d3565b6040516102649190611945565b60405180910390f35b6102876004803603810190610282919061195e565b6106fb565b005b610291610807565b60405161029e9190611598565b60405180910390f35b6102c160048036038101906102bc91906117ee565b610897565b6040516102ce9190611846565b60405180910390f35b6102df6108b9565b6040516102ec919061186e565b60405180910390f35b61030f600480360381019061030a91906119ca565b6108c2565b60405161031c9190611a0d565b60405180910390f35b61032d6108f7565b60405161033a9190611945565b60405180910390f35b61035d60048036038101906103589190611a26565b61091f565b60405161036a919061186e565b60405180910390f35b61038d60048036038101906103889190611b16565b6109a1565b60405161039a9190611846565b60405180910390f35b6103bd60048036038101906103b8919061190b565b610b2a565b005b6060600380546103ce90611c02565b80601f01602080910402602001604051908101604052809291908181526020018280546103fa90611c02565b80156104455780601f1061041c57610100808354040283529160200191610445565b820191905f5260205f20905b81548152906001019060200180831161042857829003601f168201915b5050505050905090565b610457610bae565b5f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc90611c7c565b60405180910390fd5b6104cf8282610c35565b61050e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050590611ce4565b60405180910390fd5b610516610cb1565b6105203084610ccc565b505050565b5f8061052f610d4b565b905061053c818585610d52565b600191505092915050565b5f600254905090565b5f8061055a610d4b565b9050610567858285610d64565b610572858585610df6565b60019150509392505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6105f2610bae565b6105fb5f610ee6565b565b610605610bae565b5f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90611c7c565b60405180910390fd5b61067d8282610c35565b6106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390611ce4565b60405180910390fd5b6106c4610cb1565b6106ce3084610fa9565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610703610bae565b61070d8282610c35565b61074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390611ce4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b190611d72565b60405180910390fd5b6107c2610cb1565b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60606004805461081690611c02565b80601f016020809104026020016040519081016040528092919081815260200182805461084290611c02565b801561088d5780601f106108645761010080835404028352916020019161088d565b820191905f5260205f20905b81548152906001019060200180831161087057829003601f168201915b5050505050905090565b5f806108a1610d4b565b90506108ae818585610df6565b600191505092915050565b5f600654905090565b5f30826006546040516020016108da93929190611df5565b604051602081830303815290604052805190602001209050919050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f6109aa610bae565b5f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90611c7c565b60405180910390fd5b610a228383610c35565b610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890611ce4565b60405180910390fd5b848490508787905014610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090611e7b565b60405180910390fd5b5f3090505f5b88889050811015610b1257610b05828a8a84818110610ad157610ad0611e99565b5b9050602002016020810190610ae6919061190b565b898985818110610af957610af8611e99565b5b90506020020135610df6565b8080600101915050610aaf565b50610b1b610cb1565b60019150509695505050505050565b610b32610bae565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ba2575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b999190611945565b60405180910390fd5b610bab81610ee6565b50565b610bb6610d4b565b73ffffffffffffffffffffffffffffffffffffffff16610bd46106d3565b73ffffffffffffffffffffffffffffffffffffffff1614610c3357610bf7610d4b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c2a9190611945565b60405180910390fd5b565b5f80610c40846108c2565b90505f610c4c82611028565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c908286611057565b73ffffffffffffffffffffffffffffffffffffffff16149250505092915050565b600160065f828254610cc39190611ef3565b92505081905550565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d3c575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d339190611945565b60405180910390fd5b610d475f83836110c1565b5050565b5f33905090565b610d5f83838360016112da565b505050565b5f610d6f848461091f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610df05781811015610de1578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610dd893929190611f26565b60405180910390fd5b610def84848484035f6112da565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e66575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e5d9190611945565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ed6575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ecd9190611945565b60405180910390fd5b610ee18383836110c1565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611019575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016110109190611945565b60405180910390fd5b611024825f836110c1565b5050565b5f8160405160200161103a9190611fcf565b604051602081830303815290604052805190602001209050919050565b5f805f80611064856114a9565b9250925092506001868285856040515f815260200160405260405161108c9493929190611ff4565b6020604051602081039080840390855afa1580156110ac573d5f803e3d5ffd5b50505060206040510351935050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611111578060025f8282546111059190611ef3565b925050819055506111df565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561119a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161119193929190611f26565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611226578060025f8282540392505081905550611270565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112cd919061186e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361134a575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016113419190611945565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113ba575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016113b19190611945565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156114a3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161149a919061186e565b60405180910390a35b50505050565b5f805f60418451146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790612081565b60405180910390fd5b602084015192506040840151915060608401515f1a90509193909250565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561154557808201518184015260208101905061152a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61156a8261150e565b6115748185611518565b9350611584818560208601611528565b61158d81611550565b840191505092915050565b5f6020820190508181035f8301526115b08184611560565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6115db816115c9565b81146115e5575f80fd5b50565b5f813590506115f6816115d2565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61163a82611550565b810181811067ffffffffffffffff8211171561165957611658611604565b5b80604052505050565b5f61166b6115b8565b90506116778282611631565b919050565b5f67ffffffffffffffff82111561169657611695611604565b5b61169f82611550565b9050602081019050919050565b828183375f83830152505050565b5f6116cc6116c78461167c565b611662565b9050828152602081018484840111156116e8576116e7611600565b5b6116f38482856116ac565b509392505050565b5f82601f83011261170f5761170e6115fc565b5b813561171f8482602086016116ba565b91505092915050565b5f805f6060848603121561173f5761173e6115c1565b5b5f61174c868287016115e8565b935050602061175d868287016115e8565b925050604084013567ffffffffffffffff81111561177e5761177d6115c5565b5b61178a868287016116fb565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117bd82611794565b9050919050565b6117cd816117b3565b81146117d7575f80fd5b50565b5f813590506117e8816117c4565b92915050565b5f8060408385031215611804576118036115c1565b5b5f611811858286016117da565b9250506020611822858286016115e8565b9150509250929050565b5f8115159050919050565b6118408161182c565b82525050565b5f6020820190506118595f830184611837565b92915050565b611868816115c9565b82525050565b5f6020820190506118815f83018461185f565b92915050565b5f805f6060848603121561189e5761189d6115c1565b5b5f6118ab868287016117da565b93505060206118bc868287016117da565b92505060406118cd868287016115e8565b9150509250925092565b5f60ff82169050919050565b6118ec816118d7565b82525050565b5f6020820190506119055f8301846118e3565b92915050565b5f602082840312156119205761191f6115c1565b5b5f61192d848285016117da565b91505092915050565b61193f816117b3565b82525050565b5f6020820190506119585f830184611936565b92915050565b5f805f60608486031215611975576119746115c1565b5b5f611982868287016117da565b9350506020611993868287016115e8565b925050604084013567ffffffffffffffff8111156119b4576119b36115c5565b5b6119c0868287016116fb565b9150509250925092565b5f602082840312156119df576119de6115c1565b5b5f6119ec848285016115e8565b91505092915050565b5f819050919050565b611a07816119f5565b82525050565b5f602082019050611a205f8301846119fe565b92915050565b5f8060408385031215611a3c57611a3b6115c1565b5b5f611a49858286016117da565b9250506020611a5a858286016117da565b9150509250929050565b5f80fd5b5f80fd5b5f8083601f840112611a8157611a806115fc565b5b8235905067ffffffffffffffff811115611a9e57611a9d611a64565b5b602083019150836020820283011115611aba57611ab9611a68565b5b9250929050565b5f8083601f840112611ad657611ad56115fc565b5b8235905067ffffffffffffffff811115611af357611af2611a64565b5b602083019150836020820283011115611b0f57611b0e611a68565b5b9250929050565b5f805f805f8060808789031215611b3057611b2f6115c1565b5b5f87013567ffffffffffffffff811115611b4d57611b4c6115c5565b5b611b5989828a01611a6c565b9650965050602087013567ffffffffffffffff811115611b7c57611b7b6115c5565b5b611b8889828a01611ac1565b94509450506040611b9b89828a016115e8565b925050606087013567ffffffffffffffff811115611bbc57611bbb6115c5565b5b611bc889828a016116fb565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c1957607f821691505b602082108103611c2c57611c2b611bd5565b5b50919050565b7f43616e6e6f742063616c6c2066726f6d207a65726f20616464726573730000005f82015250565b5f611c66601d83611518565b9150611c7182611c32565b602082019050919050565b5f6020820190508181035f830152611c9381611c5a565b9050919050565b7f496e76616c6964205369676e61747572650000000000000000000000000000005f82015250565b5f611cce601183611518565b9150611cd982611c9a565b602082019050919050565b5f6020820190508181035f830152611cfb81611cc2565b9050919050565b7f4d6178537570706c79206d7573742062652067726561746572207468616e20745f8201527f6f74616c537570706c792e000000000000000000000000000000000000000000602082015250565b5f611d5c602b83611518565b9150611d6782611d02565b604082019050919050565b5f6020820190508181035f830152611d8981611d50565b9050919050565b5f8160601b9050919050565b5f611da682611d90565b9050919050565b5f611db782611d9c565b9050919050565b611dcf611dca826117b3565b611dad565b82525050565b5f819050919050565b611def611dea826115c9565b611dd5565b82525050565b5f611e008286611dbe565b601482019150611e108285611dde565b602082019150611e208284611dde565b602082019150819050949350505050565b7f496e76616c696420496e70757420706172616d657465727300000000000000005f82015250565b5f611e65601883611518565b9150611e7082611e31565b602082019050919050565b5f6020820190508181035f830152611e9281611e59565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611efd826115c9565b9150611f08836115c9565b9250828201905080821115611f2057611f1f611ec6565b5b92915050565b5f606082019050611f395f830186611936565b611f46602083018561185f565b611f53604083018461185f565b949350505050565b5f81905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f611f99601c83611f5b565b9150611fa482611f65565b601c82019050919050565b5f819050919050565b611fc9611fc4826119f5565b611faf565b82525050565b5f611fd982611f8d565b9150611fe58284611fb8565b60208201915081905092915050565b5f6080820190506120075f8301876119fe565b61201460208301866118e3565b61202160408301856119fe565b61202e60608301846119fe565b95945050505050565b7f696e76616c6964207369676e6174757265206c656e67746800000000000000005f82015250565b5f61206b601883611518565b915061207682612037565b602082019050919050565b5f6020820190508181035f8301526120988161205f565b905091905056fea2646970667358221220a088f410be49e961f57a7f334849a6844c7f488b6060e362e968e91b4574ca4564736f6c63430008190033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000e0e1d8e06ac676a5382a2ef08593f9fda2db144500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002747000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027470000000000000000000000000000000000000000000000000000000000000