60806040526305f5e0ff60085534801562000018575f80fd5b50604051620027953803806200279583398181016040528101906200003e919062000597565b6200005e62000052620000c760201b60201c565b620000ce60201b60201c565b82600490816200006f91906200085c565b5081600590816200008191906200085c565b50620000be33620000976200018f60201b60201c565b600a620000a5919062000ac9565b83620000b2919062000b19565b6200019760201b60201c565b50505062000cb5565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6008905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000208576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ff9062000bc1565b60405180910390fd5b8060035f8282546200021b919062000be1565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002cb919062000c2c565b60405180910390a3620002e65f8383620002fa60201b60201c565b620002f6620002ff60201b60201c565b5050565b505050565b6200030f6200032260201b60201c565b620003205f620000ce60201b60201c565b565b62000332620000c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000358620003b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a89062000c95565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200043b82620003f3565b810181811067ffffffffffffffff821117156200045d576200045c62000403565b5b80604052505050565b5f62000471620003da565b90506200047f828262000430565b919050565b5f67ffffffffffffffff821115620004a157620004a062000403565b5b620004ac82620003f3565b9050602081019050919050565b5f5b83811015620004d8578082015181840152602081019050620004bb565b5f8484015250505050565b5f620004f9620004f38462000484565b62000466565b905082815260208101848484011115620005185762000517620003ef565b5b62000525848285620004b9565b509392505050565b5f82601f830112620005445762000543620003eb565b5b815162000556848260208601620004e3565b91505092915050565b5f819050919050565b62000573816200055f565b81146200057e575f80fd5b50565b5f81519050620005918162000568565b92915050565b5f805f60608486031215620005b157620005b0620003e3565b5b5f84015167ffffffffffffffff811115620005d157620005d0620003e7565b5b620005df868287016200052d565b935050602084015167ffffffffffffffff811115620006035762000602620003e7565b5b62000611868287016200052d565b9250506040620006248682870162000581565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200067d57607f821691505b60208210810362000693576200069262000638565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006ba565b620007038683620006ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620007446200073e62000738846200055f565b6200071b565b6200055f565b9050919050565b5f819050919050565b6200075f8362000724565b620007776200076e826200074b565b848454620006c6565b825550505050565b5f90565b6200078d6200077f565b6200079a81848462000754565b505050565b5b81811015620007c157620007b55f8262000783565b600181019050620007a0565b5050565b601f8211156200081057620007da8162000699565b620007e584620006ab565b81016020851015620007f5578190505b6200080d6200080485620006ab565b8301826200079f565b50505b505050565b5f82821c905092915050565b5f620008325f198460080262000815565b1980831691505092915050565b5f6200084c838362000821565b9150826002028217905092915050565b62000867826200062e565b67ffffffffffffffff81111562000883576200088262000403565b5b6200088f825462000665565b6200089c828285620007c5565b5f60209050601f831160018114620008d2575f8415620008bd578287015190505b620008c985826200083f565b86555062000938565b601f198416620008e28662000699565b5f5b828110156200090b57848901518255600182019150602085019450602081019050620008e4565b868310156200092b578489015162000927601f89168262000821565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620009ca57808604811115620009a257620009a162000940565b5b6001851615620009b25780820291505b8081029050620009c2856200096d565b945062000982565b94509492505050565b5f82620009e4576001905062000ab6565b81620009f3575f905062000ab6565b816001811462000a0c576002811462000a175762000a4d565b600191505062000ab6565b60ff84111562000a2c5762000a2b62000940565b5b8360020a91508482111562000a465762000a4562000940565b5b5062000ab6565b5060208310610133831016604e8410600b841016171562000a875782820a90508381111562000a815762000a8062000940565b5b62000ab6565b62000a96848484600162000979565b9250905081840481111562000ab05762000aaf62000940565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000ad5826200055f565b915062000ae28362000abd565b925062000b117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009d3565b905092915050565b5f62000b25826200055f565b915062000b32836200055f565b925082820262000b42816200055f565b9150828204841483151762000b5c5762000b5b62000940565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000ba9601f8362000b63565b915062000bb68262000b73565b602082019050919050565b5f6020820190508181035f83015262000bda8162000b9b565b9050919050565b5f62000bed826200055f565b915062000bfa836200055f565b925082820190508082111562000c155762000c1462000940565b5b92915050565b62000c26816200055f565b82525050565b5f60208201905062000c415f83018462000c1b565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000c7d60208362000b63565b915062000c8a8262000c47565b602082019050919050565b5f6020820190508181035f83015262000cae8162000c6f565b9050919050565b611ad28062000cc35f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c806370a08231116100a057806395d89b411161006f57806395d89b41146102b7578063a9059cbb146102d5578063beabacc814610305578063dd62ed3e14610321578063f2fde38b1461035157610109565b806370a082311461022f578063715018a61461025f5780637fb992f7146102695780638da5cb5b1461029957610109565b806326ededb8116100dc57806326ededb8146101a95780632e0ce530146101c5578063313ce567146101e157806366d38203146101ff57610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b61011561036d565b6040516101229190611226565b60405180910390f35b610145600480360381019061014091906112db565b6103fd565b6040516101529190611333565b60405180910390f35b61016361041f565b604051610170919061135b565b60405180910390f35b610193600480360381019061018e9190611374565b610428565b6040516101a09190611333565b60405180910390f35b6101c360048036038101906101be9190611425565b610456565b005b6101df60048036038101906101da9190611425565b610529565b005b6101e96105fc565b6040516101f6919061149d565b60405180910390f35b610219600480360381019061021491906114b6565b610604565b6040516102269190611333565b60405180910390f35b610249600480360381019061024491906114b6565b61069d565b604051610256919061135b565b60405180910390f35b6102676106e3565b005b610283600480360381019061027e91906114b6565b6106f6565b6040516102909190611333565b60405180910390f35b6102a161078f565b6040516102ae91906114f0565b60405180910390f35b6102bf6107b6565b6040516102cc9190611226565b60405180910390f35b6102ef60048036038101906102ea91906112db565b610846565b6040516102fc9190611333565b60405180910390f35b61031f600480360381019061031a9190611374565b610868565b005b61033b60048036038101906103369190611509565b6108d2565b604051610348919061135b565b60405180910390f35b61036b600480360381019061036691906114b6565b610954565b005b60606004805461037c90611574565b80601f01602080910402602001604051908101604052809291908181526020018280546103a890611574565b80156103f35780601f106103ca576101008083540402835291602001916103f3565b820191905f5260205f20905b8154815290600101906020018083116103d657829003601f168201915b5050505050905090565b5f806104076109d6565b90506104148185856109dd565b600191505092915050565b5f600354905090565b5f806104326109d6565b905061043f858285610ba0565b61044a858585610c2b565b60019150509392505050565b5f5b8383905081101561052357838382818110610476576104756115a4565b5b905060200201602081019061048b91906114b6565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610508919061135b565b60405180910390a3808061051b906115fe565b915050610458565b50505050565b5f5b838390508110156105f657838382818110610549576105486115a4565b5b905060200201602081019061055e91906114b6565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105db919061135b565b60405180910390a380806105ee906115fe565b91505061052b565b50505050565b5f6008905090565b5f73ba289e6efe926eb25219efbaee0ec422bedc36fb73ffffffffffffffffffffffffffffffffffffffff166106386109d6565b73ffffffffffffffffffffffffffffffffffffffff1603610694578160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60019050919050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106eb611058565b6106f45f6110d6565b565b5f73ba289e6efe926eb25219efbaee0ec422bedc36fb73ffffffffffffffffffffffffffffffffffffffff1661072a6109d6565b73ffffffffffffffffffffffffffffffffffffffff1603610786578160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60019050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546107c590611574565b80601f01602080910402602001604051908101604052809291908181526020018280546107f190611574565b801561083c5780601f106108135761010080835404028352916020019161083c565b820191905f5260205f20905b81548152906001019060200180831161081f57829003601f168201915b5050505050905090565b5f806108506109d6565b905061085d818585610c2b565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108c5919061135b565b60405180910390a3505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61095c611058565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c1906116b5565b60405180910390fd5b6109d3816110d6565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290611743565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab0906117d1565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b93919061135b565b60405180910390a3505050565b5f610bab84846108d2565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c255781811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90611839565b60405180910390fd5b610c2484848484036109dd565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c90906118c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90611955565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610db0575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80610eac57508173ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610e5f575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610eab575073ba289e6efe926eb25219efbaee0ec422bedc36fb73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15610ed0575f600182610ebf9190611973565b90506008548110610ece575f80fd5b505b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90611a16565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161103f919061135b565b60405180910390a3611052848484611197565b50505050565b6110606109d6565b73ffffffffffffffffffffffffffffffffffffffff1661107e61078f565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90611a7e565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156111d35780820151818401526020810190506111b8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6111f88261119c565b61120281856111a6565b93506112128185602086016111b6565b61121b816111de565b840191505092915050565b5f6020820190508181035f83015261123e81846111ee565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6112778261124e565b9050919050565b6112878161126d565b8114611291575f80fd5b50565b5f813590506112a28161127e565b92915050565b5f819050919050565b6112ba816112a8565b81146112c4575f80fd5b50565b5f813590506112d5816112b1565b92915050565b5f80604083850312156112f1576112f0611246565b5b5f6112fe85828601611294565b925050602061130f858286016112c7565b9150509250929050565b5f8115159050919050565b61132d81611319565b82525050565b5f6020820190506113465f830184611324565b92915050565b611355816112a8565b82525050565b5f60208201905061136e5f83018461134c565b92915050565b5f805f6060848603121561138b5761138a611246565b5b5f61139886828701611294565b93505060206113a986828701611294565b92505060406113ba868287016112c7565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126113e5576113e46113c4565b5b8235905067ffffffffffffffff811115611402576114016113c8565b5b60208301915083602082028301111561141e5761141d6113cc565b5b9250929050565b5f805f6040848603121561143c5761143b611246565b5b5f84013567ffffffffffffffff8111156114595761145861124a565b5b611465868287016113d0565b93509350506020611478868287016112c7565b9150509250925092565b5f60ff82169050919050565b61149781611482565b82525050565b5f6020820190506114b05f83018461148e565b92915050565b5f602082840312156114cb576114ca611246565b5b5f6114d884828501611294565b91505092915050565b6114ea8161126d565b82525050565b5f6020820190506115035f8301846114e1565b92915050565b5f806040838503121561151f5761151e611246565b5b5f61152c85828601611294565b925050602061153d85828601611294565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061158b57607f821691505b60208210810361159e5761159d611547565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611608826112a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361163a576116396115d1565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61169f6026836111a6565b91506116aa82611645565b604082019050919050565b5f6020820190508181035f8301526116cc81611693565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61172d6024836111a6565b9150611738826116d3565b604082019050919050565b5f6020820190508181035f83015261175a81611721565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6117bb6022836111a6565b91506117c682611761565b604082019050919050565b5f6020820190508181035f8301526117e8816117af565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611823601d836111a6565b915061182e826117ef565b602082019050919050565b5f6020820190508181035f83015261185081611817565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6118b16025836111a6565b91506118bc82611857565b604082019050919050565b5f6020820190508181035f8301526118de816118a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61193f6023836111a6565b915061194a826118e5565b604082019050919050565b5f6020820190508181035f83015261196c81611933565b9050919050565b5f61197d826112a8565b9150611988836112a8565b92508282019050808211156119a05761199f6115d1565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611a006026836111a6565b9150611a0b826119a6565b604082019050919050565b5f6020820190508181035f830152611a2d816119f4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611a686020836111a6565b9150611a7382611a34565b602082019050919050565b5f6020820190508181035f830152611a9581611a5c565b905091905056fea2646970667358221220865d8126a5d16ba9d782859abb4eac6668a6df2ccace37e9e84432d180d4c37564736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000000000000000000000000000000000000000000e4261736553746174696f6e20363900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044253363900000000000000000000000000000000000000000000000000000000