60806040526040518060400160405280600881526020017f4d656c6f6e446f67000000000000000000000000000000000000000000000000815250600190816200004a919062000591565b506040518060400160405280600581526020017f4d454c4f4e0000000000000000000000000000000000000000000000000000008152506002908162000091919062000591565b50600960035f6101000a81548160ff021916908360ff16021790555060035f9054906101000a900460ff1660ff166001620000cd9190620007f2565b670de0b6b3a7640000620000e2919062000842565b600455664a9b6384488000600755600160085f6101000a81548160ff02191690831515021790555034801562000116575f80fd5b505f620001286200032660201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f620001d56200032660201b60201c565b905080600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360045460055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200031791906200089d565b60405180910390a350620008b8565b5f33905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003a957607f821691505b602082108103620003bf57620003be62000364565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003e6565b6200042f8683620003e6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000479620004736200046d8462000447565b62000450565b62000447565b9050919050565b5f819050919050565b620004948362000459565b620004ac620004a38262000480565b848454620003f2565b825550505050565b5f90565b620004c2620004b4565b620004cf81848462000489565b505050565b5b81811015620004f657620004ea5f82620004b8565b600181019050620004d5565b5050565b601f82111562000545576200050f81620003c5565b6200051a84620003d7565b810160208510156200052a578190505b620005426200053985620003d7565b830182620004d4565b50505b505050565b5f82821c905092915050565b5f620005675f19846008026200054a565b1980831691505092915050565b5f62000581838362000556565b9150826002028217905092915050565b6200059c826200032d565b67ffffffffffffffff811115620005b857620005b762000337565b5b620005c4825462000391565b620005d1828285620004fa565b5f60209050601f83116001811462000607575f8415620005f2578287015190505b620005fe858262000574565b8655506200066d565b601f1984166200061786620003c5565b5f5b82811015620006405784890151825560018201915060208501945060208101905062000619565b868310156200066057848901516200065c601f89168262000556565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620006ff57808604811115620006d757620006d662000675565b5b6001851615620006e75780820291505b8081029050620006f785620006a2565b9450620006b7565b94509492505050565b5f82620007195760019050620007eb565b8162000728575f9050620007eb565b81600181146200074157600281146200074c5762000782565b6001915050620007eb565b60ff84111562000761576200076062000675565b5b8360020a9150848211156200077b576200077a62000675565b5b50620007eb565b5060208310610133831016604e8410600b8410161715620007bc5782820a905083811115620007b657620007b562000675565b5b620007eb565b620007cb8484846001620006ae565b92509050818404811115620007e557620007e462000675565b5b81810290505b9392505050565b5f620007fe8262000447565b91506200080b8362000447565b92506200083a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000708565b905092915050565b5f6200084e8262000447565b91506200085b8362000447565b92508282026200086b8162000447565b9150828204841483151762000885576200088462000675565b5b5092915050565b620008978162000447565b82525050565b5f602082019050620008b25f8301846200088c565b92915050565b6118e080620008c65f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c80638da5cb5b116100ab578063dd62ed3e1161006f578063dd62ed3e14610309578063e990129914610339578063eb5244e514610343578063ef3854341461034d578063f83e6f5b146103575761011f565b80638da5cb5b14610251578063942ba2df1461026f57806395d89b411461028b578063a457c2d7146102a9578063a9059cbb146102d95761011f565b80632d53e1bd116100f25780632d53e1bd146101bf578063313ce567146101c957806339509351146101e757806370a0823114610217578063715018a6146102475761011f565b806306fdde0314610123578063095ea7b31461014157806318160ddd1461017157806323b872dd1461018f575b5f80fd5b61012b610361565b604051610138919061112c565b60405180910390f35b61015b600480360381019061015691906111dd565b6103f1565b6040516101689190611235565b60405180910390f35b610179610407565b604051610186919061125d565b60405180910390f35b6101a960048036038101906101a49190611276565b610410565b6040516101b69190611235565b60405180910390f35b6101c76104fe565b005b6101d16105ad565b6040516101de91906112e1565b60405180910390f35b61020160048036038101906101fc91906111dd565b6105c2565b60405161020e9190611235565b60405180910390f35b610231600480360381019061022c91906112fa565b610662565b60405161023e919061125d565b60405180910390f35b61024f6106a8565b005b6102596107f6565b6040516102669190611334565b60405180910390f35b6102896004803603810190610284919061134d565b61081d565b005b6102936108fd565b6040516102a0919061112c565b60405180910390f35b6102c360048036038101906102be91906111dd565b61098d565b6040516102d09190611235565b60405180910390f35b6102f360048036038101906102ee91906111dd565b610a2d565b6040516103009190611235565b60405180910390f35b610323600480360381019061031e9190611378565b610a85565b604051610330919061125d565b60405180910390f35b610341610b07565b005b61034b610b09565b005b610355610b0b565b005b61035f610b0d565b005b606060018054610370906113e3565b80601f016020809104026020016040519081016040528092919081815260200182805461039c906113e3565b80156103e75780601f106103be576101008083540402835291602001916103e7565b820191905f5260205f20905b8154815290600101906020018083116103ca57829003601f168201915b5050505050905090565b5f6103fd338484610bbd565b6001905092915050565b5f600454905090565b5f808211610453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044a9061145d565b60405180910390fd5b61045e848484610ca4565b6104f384336104ee8560065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f0e90919063ffffffff16565b610bbd565b600190509392505050565b610506610f6b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610592576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610589906114c5565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b5f60035f9054906101000a900460ff16905090565b5f61065833846106538560065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f7290919063ffffffff16565b610bbd565b6001905092915050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106b0610f6b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461073c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610733906114c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610825610f6b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a8906114c5565b60405180910390fd5b5f81116108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea9061152d565b60405180910390fd5b8060078190555050565b60606002805461090c906113e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610938906113e3565b80156109835780601f1061095a57610100808354040283529160200191610983565b820191905f5260205f20905b81548152906001019060200180831161096657829003601f168201915b5050505050905090565b5f610a233384610a1e8560065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f0e90919063ffffffff16565b610bbd565b6001905092915050565b5f808211610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a679061145d565b60405180910390fd5b610a7b338484610ca4565b6001905092915050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b565b565b565b610b15610f6b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b98906114c5565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610c97919061125d565b60405180910390a3505050565b828160085f9054906101000a900460ff161580610d00575060075481111580610cff5750610cd06107f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690611595565b60405180910390fd5b5f610d666064610d585f87610fcf90919063ffffffff16565b61104690919063ffffffff16565b90505f610d7c8286610f0e90919063ffffffff16565b9050610dce8560055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f0e90919063ffffffff16565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610e5f8160055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f7290919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610efd919061125d565b60405180910390a350505050505050565b5f82821115610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f49906115fd565b60405180910390fd5b5f8284610f5f9190611648565b90508091505092915050565b5f33905090565b5f808284610f80919061167b565b905083811015610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc906116f8565b60405180910390fd5b8091505092915050565b5f808303610fdf575f9050611040565b5f8284610fec9190611716565b9050828482610ffb9190611784565b1461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290611824565b60405180910390fd5b809150505b92915050565b5f808211611089576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110809061188c565b60405180910390fd5b5f82846110969190611784565b90508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156110d95780820151818401526020810190506110be565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6110fe826110a2565b61110881856110ac565b93506111188185602086016110bc565b611121816110e4565b840191505092915050565b5f6020820190508181035f83015261114481846110f4565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61117982611150565b9050919050565b6111898161116f565b8114611193575f80fd5b50565b5f813590506111a481611180565b92915050565b5f819050919050565b6111bc816111aa565b81146111c6575f80fd5b50565b5f813590506111d7816111b3565b92915050565b5f80604083850312156111f3576111f261114c565b5b5f61120085828601611196565b9250506020611211858286016111c9565b9150509250929050565b5f8115159050919050565b61122f8161121b565b82525050565b5f6020820190506112485f830184611226565b92915050565b611257816111aa565b82525050565b5f6020820190506112705f83018461124e565b92915050565b5f805f6060848603121561128d5761128c61114c565b5b5f61129a86828701611196565b93505060206112ab86828701611196565b92505060406112bc868287016111c9565b9150509250925092565b5f60ff82169050919050565b6112db816112c6565b82525050565b5f6020820190506112f45f8301846112d2565b92915050565b5f6020828403121561130f5761130e61114c565b5b5f61131c84828501611196565b91505092915050565b61132e8161116f565b82525050565b5f6020820190506113475f830184611325565b92915050565b5f602082840312156113625761136161114c565b5b5f61136f848285016111c9565b91505092915050565b5f806040838503121561138e5761138d61114c565b5b5f61139b85828601611196565b92505060206113ac85828601611196565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806113fa57607f821691505b60208210810361140d5761140c6113b6565b5b50919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6114476020836110ac565b915061145282611413565b602082019050919050565b5f6020820190508181035f8301526114748161143b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6114af6020836110ac565b91506114ba8261147b565b602082019050919050565b5f6020820190508181035f8301526114dc816114a3565b9050919050565b7f4c696d6974206d7573742062652067726561746572207468616e207a65726f005f82015250565b5f611517601f836110ac565b9150611522826114e3565b602082019050919050565b5f6020820190508181035f8301526115448161150b565b9050919050565b7f427579206c696d697420657863656564656400000000000000000000000000005f82015250565b5f61157f6012836110ac565b915061158a8261154b565b602082019050919050565b5f6020820190508181035f8301526115ac81611573565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f7700005f82015250565b5f6115e7601e836110ac565b91506115f2826115b3565b602082019050919050565b5f6020820190508181035f830152611614816115db565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611652826111aa565b915061165d836111aa565b92508282039050818111156116755761167461161b565b5b92915050565b5f611685826111aa565b9150611690836111aa565b92508282019050808211156116a8576116a761161b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6116e2601b836110ac565b91506116ed826116ae565b602082019050919050565b5f6020820190508181035f83015261170f816116d6565b9050919050565b5f611720826111aa565b915061172b836111aa565b9250828202611739816111aa565b915082820484148315176117505761174f61161b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61178e826111aa565b9150611799836111aa565b9250826117a9576117a8611757565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61180e6021836110ac565b9150611819826117b4565b604082019050919050565b5f6020820190508181035f83015261183b81611802565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f611876601a836110ac565b915061188182611842565b602082019050919050565b5f6020820190508181035f8301526118a38161186a565b905091905056fea2646970667358221220254895c8c787b5a3401d80d657b8eb330ade95cb9386713f623b4925d3e210ff64736f6c63430008140033