6101606040523480156200001257600080fd5b506040518060400160405280600b81526020017f43727970746f2057656233000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f43727970746f20576562330000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43573300000000000000000000000000000000000000000000000000000000008152508160039081620000fd919062001377565b5080600490816200010f919062001377565b505050620001286005836200020960201b90919060201c565b6101208181525050620001466006826200020960201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001856200026160201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050506200020333620001d8620002be60201b60201c565b600a620001e69190620015ee565b63034fb3d2620001f791906200163f565b620002c760201b60201c565b62001b77565b60006020835110156200022f5762000227836200035460201b60201c565b90506200025b565b826200024183620003c160201b60201c565b600001908162000252919062001377565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001620002a3959493929190620016fb565b60405160208183030381529060405280519060200120905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200033c5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000333919062001758565b60405180910390fd5b6200035060008383620003cb60201b60201c565b5050565b600080829050601f81511115620003a457826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016200039b919062001804565b60405180910390fd5b805181620003b2906200185a565b60001c1760001b915050919050565b6000819050919050565b620003de838383620003e360201b60201c565b505050565b620003f6838383620004b860201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620004a05760006200043d620006e860201b60201c565b9050600062000451620006f260201b60201c565b9050808211156200049d5781816040517f1cb15d2600000000000000000000000000000000000000000000000000000000815260040162000494929190620018ca565b60405180910390fd5b50505b620004b38383836200071660201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200050e578060026000828254620005019190620018f7565b92505081905550620005e4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200059d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620005949392919062001932565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200062f57806002600082825403925050819055506200067c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006db91906200196f565b60405180910390a3505050565b6000600254905090565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200077d576200077a600a6200081c60201b62000df4176200076e846200083460201b60201c565b620008a560201b60201c565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007e457620007e1600a620008f560201b62000e0a17620007d5846200083460201b60201c565b620008a560201b60201c565b50505b62000817620007f9846200090d60201b60201c565b6200080a846200090d60201b60201c565b836200097660201b60201c565b505050565b600081836200082c9190620019b2565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156200089d5760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016200089492919062001a4a565b60405180910390fd5b819050919050565b600080620008e9620008bc62000c2960201b60201c565b620008d8620008d18862000c4060201b60201c565b868860201c565b8762000cb460201b9092919060201c565b91509150935093915050565b6000818362000905919062001a77565b905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620009b35750600081115b1562000c2457600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000aee5760008062000a5d600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020620008f560201b62000e0a1762000a51866200083460201b60201c565b620008a560201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000ae3929190620018ca565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c235760008062000b92600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206200081c60201b62000df41762000b86866200083460201b60201c565b620008a560201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000c18929190620018ca565b60405180910390a250505b5b505050565b600062000c3b62000cd960201b60201c565b905090565b600080826000018054905090506000811462000ca95762000c798360000160018362000c6d919062001acc565b62000cf160201b60201c565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1662000cac565b60005b915050919050565b60008062000ccd85600001858562000d0660201b60201c565b91509150935093915050565b600062000cec43620010a060201b60201c565b905090565b60008260005281602060002001905092915050565b600080600085805490509050600081111562000fb057600062000d3e8760018462000d32919062001acc565b62000cf160201b60201c565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff16111562000e2e576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff160362000ebe578462000e6b8860018562000e5f919062001acc565b62000cf160201b60201c565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555062000f9e565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b80602001518593509350505062001098565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b600065ffffffffffff8016821115620010f5576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401620010ec92919062001b4a565b60405180910390fd5b819050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200117f57607f821691505b60208210810362001195576200119462001137565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620011ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620011c0565b6200120b8683620011c0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062001258620012526200124c8462001223565b6200122d565b62001223565b9050919050565b6000819050919050565b620012748362001237565b6200128c62001283826200125f565b848454620011cd565b825550505050565b600090565b620012a362001294565b620012b081848462001269565b505050565b5b81811015620012d857620012cc60008262001299565b600181019050620012b6565b5050565b601f8211156200132757620012f1816200119b565b620012fc84620011b0565b810160208510156200130c578190505b620013246200131b85620011b0565b830182620012b5565b50505b505050565b600082821c905092915050565b60006200134c600019846008026200132c565b1980831691505092915050565b600062001367838362001339565b9150826002028217905092915050565b6200138282620010fd565b67ffffffffffffffff8111156200139e576200139d62001108565b5b620013aa825462001166565b620013b7828285620012dc565b600060209050601f831160018114620013ef5760008415620013da578287015190505b620013e6858262001359565b86555062001456565b601f198416620013ff866200119b565b60005b82811015620014295784890151825560018201915060208501945060208101905062001402565b8683101562001449578489015162001445601f89168262001339565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620014ec57808604811115620014c457620014c36200145e565b5b6001851615620014d45780820291505b8081029050620014e4856200148d565b9450620014a4565b94509492505050565b600082620015075760019050620015da565b81620015175760009050620015da565b81600181146200153057600281146200153b5762001571565b6001915050620015da565b60ff84111562001550576200154f6200145e565b5b8360020a9150848211156200156a57620015696200145e565b5b50620015da565b5060208310610133831016604e8410600b8410161715620015ab5782820a905083811115620015a557620015a46200145e565b5b620015da565b620015ba84848460016200149a565b92509050818404811115620015d457620015d36200145e565b5b81810290505b9392505050565b600060ff82169050919050565b6000620015fb8262001223565b91506200160883620015e1565b9250620016377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620014f5565b905092915050565b60006200164c8262001223565b9150620016598362001223565b9250828202620016698162001223565b915082820484148315176200168357620016826200145e565b5b5092915050565b6000819050919050565b6200169f816200168a565b82525050565b620016b08162001223565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620016e382620016b6565b9050919050565b620016f581620016d6565b82525050565b600060a08201905062001712600083018862001694565b62001721602083018762001694565b62001730604083018662001694565b6200173f6060830185620016a5565b6200174e6080830184620016ea565b9695505050505050565b60006020820190506200176f6000830184620016ea565b92915050565b600082825260208201905092915050565b60005b83811015620017a657808201518184015260208101905062001789565b60008484015250505050565b6000601f19601f8301169050919050565b6000620017d082620010fd565b620017dc818562001775565b9350620017ee81856020860162001786565b620017f981620017b2565b840191505092915050565b60006020820190508181036000830152620018208184620017c3565b905092915050565b600081519050919050565b6000819050602082019050919050565b60006200185182516200168a565b80915050919050565b6000620018678262001828565b82620018738462001833565b9050620018808162001843565b92506020821015620018c357620018be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802620011c0565b831692505b5050919050565b6000604082019050620018e16000830185620016a5565b620018f06020830184620016a5565b9392505050565b6000620019048262001223565b9150620019118362001223565b92508282019050808211156200192c576200192b6200145e565b5b92915050565b6000606082019050620019496000830186620016ea565b620019586020830185620016a5565b620019676040830184620016a5565b949350505050565b6000602082019050620019866000830184620016a5565b92915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019bf826200198c565b9150620019cc836200198c565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111562001a015762001a006200145e565b5b92915050565b6000819050919050565b600062001a3262001a2c62001a268462001a07565b6200122d565b620015e1565b9050919050565b62001a448162001a11565b82525050565b600060408201905062001a61600083018562001a39565b62001a706020830184620016a5565b9392505050565b600062001a84826200198c565b915062001a91836200198c565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111562001ac65762001ac56200145e565b5b92915050565b600062001ad98262001223565b915062001ae68362001223565b925082820390508181111562001b015762001b006200145e565b5b92915050565b6000819050919050565b600062001b3262001b2c62001b268462001b07565b6200122d565b620015e1565b9050919050565b62001b448162001b11565b82525050565b600060408201905062001b61600083018562001b39565b62001b706020830184620016a5565b9392505050565b60805160a05160c05160e05161010051610120516101405161397c62001bd26000396000611421015260006113e6015260006118420152600061182101526000610fc60152600061101c01526000611045015261397c6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de57806395d89b4111610097578063c3cda52011610071578063c3cda520146104a2578063d505accf146104be578063dd62ed3e146104da578063f1127ed81461050a57610173565b806395d89b41146104245780639ab24eb014610442578063a9059cbb1461047257610173565b806370a082311461033657806379cc6790146103665780637ecebe001461038257806384b0196e146103b25780638e539e8c146103d657806391ddadf41461040657610173565b80633a46b1a8116101305780633a46b1a81461025057806342966c68146102805780634bf5d7e91461029c578063587cde1e146102ba5780635c19a95c146102ea5780636fcfff451461030657610173565b806306fdde0314610178578063095ea7b31461019657806318160ddd146101c657806323b872dd146101e4578063313ce567146102145780633644e51514610232575b600080fd5b61018061053a565b60405161018d9190612c26565b60405180910390f35b6101b060048036038101906101ab9190612ce1565b6105cc565b6040516101bd9190612d3c565b60405180910390f35b6101ce6105ef565b6040516101db9190612d66565b60405180910390f35b6101fe60048036038101906101f99190612d81565b6105f9565b60405161020b9190612d3c565b60405180910390f35b61021c610628565b6040516102299190612df0565b60405180910390f35b61023a610631565b6040516102479190612e24565b60405180910390f35b61026a60048036038101906102659190612ce1565b610640565b6040516102779190612d66565b60405180910390f35b61029a60048036038101906102959190612e3f565b610719565b005b6102a461072d565b6040516102b19190612c26565b60405180910390f35b6102d460048036038101906102cf9190612e6c565b6107c1565b6040516102e19190612ea8565b60405180910390f35b61030460048036038101906102ff9190612e6c565b61082a565b005b610320600480360381019061031b9190612e6c565b610844565b60405161032d9190612ee2565b60405180910390f35b610350600480360381019061034b9190612e6c565b610856565b60405161035d9190612d66565b60405180910390f35b610380600480360381019061037b9190612ce1565b61089e565b005b61039c60048036038101906103979190612e6c565b6108be565b6040516103a99190612d66565b60405180910390f35b6103ba6108d0565b6040516103cd9796959493929190612ff6565b60405180910390f35b6103f060048036038101906103eb9190612e3f565b61097a565b6040516103fd9190612d66565b60405180910390f35b61040e610a15565b60405161041b919061309b565b60405180910390f35b61042c610a24565b6040516104399190612c26565b60405180910390f35b61045c60048036038101906104579190612e6c565b610ab6565b6040516104699190612d66565b60405180910390f35b61048c60048036038101906104879190612ce1565b610b22565b6040516104999190612d3c565b60405180910390f35b6104bc60048036038101906104b7919061310e565b610b45565b005b6104d860048036038101906104d3919061319b565b610c0b565b005b6104f460048036038101906104ef919061323d565b610d53565b6040516105019190612d66565b60405180910390f35b610524600480360381019061051f91906132a9565b610dda565b604051610531919061335c565b60405180910390f35b606060038054610549906133a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906133a6565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b5050505050905090565b6000806105d7610e20565b90506105e4818585610e28565b600191505092915050565b6000600254905090565b600080610604610e20565b9050610611858285610e3a565b61061c858585610ece565b60019150509392505050565b60006012905090565b600061063b610fc2565b905090565b60008061064b610a15565b90508065ffffffffffff16831061069b5782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016106929291906133d7565b60405180910390fd5b6106f46106a784611079565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206110d390919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b61072a610724610e20565b826111cd565b50565b606061073761124f565b65ffffffffffff16610747610a15565b65ffffffffffff1614610786576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610834610e20565b9050610840818361125f565b5050565b600061084f82611373565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108b0826108aa610e20565b83610e3a565b6108ba82826111cd565b5050565b60006108c9826113cb565b9050919050565b6000606080600080600060606108e46113dd565b6108ec611418565b46306000801b600067ffffffffffffffff81111561090d5761090c613400565b5b60405190808252806020026020018201604052801561093b5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b600080610985610a15565b90508065ffffffffffff1683106109d55782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016109cc9291906133d7565b60405180910390fd5b6109f16109e184611079565b600a6110d390919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b6000610a1f61124f565b905090565b606060048054610a33906133a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f906133a6565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b5050505050905090565b6000610aff600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611453565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b600080610b2d610e20565b9050610b3a818585610ece565b600191505092915050565b83421115610b8a57836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610b819190612d66565b60405180910390fd5b6000610bec610be47fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610bc9949392919061342f565b604051602081830303815290604052805190602001206114bb565b8585856114d5565b9050610bf88187611505565b610c02818861125f565b50505050505050565b83421115610c5057836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610c479190612d66565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c7f8c61155d565b89604051602001610c9596959493929190613474565b6040516020818303038152906040528051906020012090506000610cb8826114bb565b90506000610cc8828787876114d5565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d3c57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610d339291906134d5565b60405180910390fd5b610d478a8a8a610e28565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610de2612b58565b610dec83836115b4565b905092915050565b60008183610e02919061352d565b905092915050565b60008183610e18919061357b565b905092915050565b600033905090565b610e358383836001611615565b505050565b6000610e468484610d53565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ec85781811015610eb8578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610eaf939291906135c9565b60405180910390fd5b610ec784848484036000611615565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f405760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610f379190612ea8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fb25760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610fa99190612ea8565b60405180910390fd5b610fbd8383836117ec565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561103e57507f000000000000000000000000000000000000000000000000000000000000000046145b1561106b577f00000000000000000000000000000000000000000000000000000000000000009050611076565b6110736117fc565b90505b90565b600065ffffffffffff80168211156110cb576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016110c2929190613645565b60405180910390fd5b819050919050565b60008083600001805490509050600080829050600583111561115b5760006110fa84611892565b84611105919061366e565b9050611114876000018261198b565b60000160009054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561114957809150611159565b60018161115691906136a2565b92505b505b600061116c876000018785856119a0565b9050600081146111be5761118f8760000160018361118a919061366e565b61198b565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166111c1565b60005b94505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361123f5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016112369190612ea8565b60405180910390fd5b61124b826000836117ec565b5050565b600061125a43611079565b905090565b600061126a836107c1565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461136e818361136986611a19565b611a2b565b505050565b60006113c46113bf600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611ca4565b611cb5565b9050919050565b60006113d682611d0d565b9050919050565b606061141360057f0000000000000000000000000000000000000000000000000000000000000000611d5690919063ffffffff16565b905090565b606061144e60067f0000000000000000000000000000000000000000000000000000000000000000611d5690919063ffffffff16565b905090565b60008082600001805490509050600081146114b0576114818360000160018361147c919061366e565b61198b565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166114b3565b60005b915050919050565b60006114ce6114c8610fc2565b83611e06565b9050919050565b6000806000806114e788888888611e47565b9250925092506114f78282611f3b565b829350505050949350505050565b60006115108361155d565b90508082146115585782816040517f752d88c000000000000000000000000000000000000000000000000000000000815260040161154f9291906136d6565b60405180910390fd5b505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b6115bc612b58565b61160d82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061209f90919063ffffffff16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036116875760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161167e9190612ea8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116f95760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016116f09190612ea8565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156117e6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516117dd9190612d66565b60405180910390a35b50505050565b6117f7838383612174565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016118779594939291906136ff565b60405160208183030381529060405280519060200120905090565b60008082036118a45760009050611986565b600060016118b184612225565b901c6001901b905060018184816118cb576118ca613752565b5b048201901c905060018184816118e4576118e3613752565b5b048201901c905060018184816118fd576118fc613752565b5b048201901c9050600181848161191657611915613752565b5b048201901c9050600181848161192f5761192e613752565b5b048201901c9050600181848161194857611947613752565b5b048201901c9050600181848161196157611960613752565b5b048201901c90506119828182858161197c5761197b613752565b5b04612306565b9150505b919050565b60008260005281602060002001905092915050565b60005b81831015611a0e5760006119b7848461231f565b90508465ffffffffffff166119cc878361198b565b60000160009054906101000a900465ffffffffffff1665ffffffffffff1611156119f857809250611a08565b600181611a0591906136a2565b93505b506119a3565b819050949350505050565b6000611a2482610856565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a675750600081115b15611c9f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b8557600080611af6600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610e0a611af186612345565b6123b3565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b7a929190613781565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c9e57600080611c0f600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610df4611c0a86612345565b6123b3565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611c93929190613781565b60405180910390a250505b5b505050565b600081600001805490509050919050565b600063ffffffff8016821115611d05576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611cfc9291906137e5565b60405180910390fd5b819050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060ff60001b8314611d7357611d6c836123f3565b9050611e00565b818054611d7f906133a6565b80601f0160208091040260200160405190810160405280929190818152602001828054611dab906133a6565b8015611df85780601f10611dcd57610100808354040283529160200191611df8565b820191906000526020600020905b815481529060010190602001808311611ddb57829003601f168201915b505050505090505b92915050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115611e87576000600385925092509250611f31565b600060018888888860405160008152602001604052604051611eac949392919061380e565b6020604051602081039080840390855afa158015611ece573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f2257600060016000801b93509350935050611f31565b8060008060001b935093509350505b9450945094915050565b60006003811115611f4f57611f4e613853565b5b826003811115611f6257611f61613853565b5b031561209b5760016003811115611f7c57611f7b613853565b5b826003811115611f8f57611f8e613853565b5b03611fc6576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611fda57611fd9613853565b5b826003811115611fed57611fec613853565b5b03612032578060001c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016120299190612d66565b60405180910390fd5b60038081111561204557612044613853565b5b82600381111561205857612057613853565b5b0361209a57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016120919190612e24565b60405180910390fd5b5b5050565b6120a7612b58565b826000018263ffffffff16815481106120c3576120c2613882565b5b906000526020600020016040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61217f838383612467565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122155760006121bd6105ef565b905060006121c961268c565b9050808211156122125781816040517f1cb15d26000000000000000000000000000000000000000000000000000000008152600401612209929190613781565b60405180910390fd5b50505b6122208383836126b0565b505050565b600080600090506000608084901c111561224757608083901c92506080810190505b6000604084901c111561226257604083901c92506040810190505b6000602084901c111561227d57602083901c92506020810190505b6000601084901c111561229857601083901c92506010810190505b6000600884901c11156122b357600883901c92506008810190505b6000600484901c11156122ce57600483901c92506004810190505b6000600284901c11156122e957600283901c92506002810190505b6000600184901c11156122fd576001810190505b80915050919050565b60008183106123155781612317565b825b905092915050565b6000600282841861233091906138b1565b82841661233d91906136a2565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156123ab5760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016123a292919061391d565b60405180910390fd5b819050919050565b6000806123e76123c1610a15565b6123d76123cd88611453565b868863ffffffff16565b8761276a9092919063ffffffff16565b91509150935093915050565b6060600061240083612787565b90506000602067ffffffffffffffff81111561241f5761241e613400565b5b6040519080825280601f01601f1916602001820160405280156124515781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b95780600260008282546124ad91906136a2565b9250508190555061258c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612545578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161253c939291906135c9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d55780600260008282540392505081905550612622565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161267f9190612d66565b60405180910390a3505050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126fd576126fa600a610df46126f584612345565b6123b3565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361274a57612747600a610e0a61274284612345565b6123b3565b50505b612765612756846107c1565b61275f846107c1565b83611a2b565b505050565b60008061277b8560000185856127d7565b91509150935093915050565b60008060ff8360001c169050601f8111156127ce576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6000806000858054905090506000811115612a68576000612804876001846127ff919061366e565b61198b565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff1611156128f3576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff1603612977578461292588600185612920919061366e565b61198b565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612a57565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612b50565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b6040518060400160405280600065ffffffffffff168152602001600079ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bd0578082015181840152602081019050612bb5565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bf882612b96565b612c028185612ba1565b9350612c12818560208601612bb2565b612c1b81612bdc565b840191505092915050565b60006020820190508181036000830152612c408184612bed565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c7882612c4d565b9050919050565b612c8881612c6d565b8114612c9357600080fd5b50565b600081359050612ca581612c7f565b92915050565b6000819050919050565b612cbe81612cab565b8114612cc957600080fd5b50565b600081359050612cdb81612cb5565b92915050565b60008060408385031215612cf857612cf7612c48565b5b6000612d0685828601612c96565b9250506020612d1785828601612ccc565b9150509250929050565b60008115159050919050565b612d3681612d21565b82525050565b6000602082019050612d516000830184612d2d565b92915050565b612d6081612cab565b82525050565b6000602082019050612d7b6000830184612d57565b92915050565b600080600060608486031215612d9a57612d99612c48565b5b6000612da886828701612c96565b9350506020612db986828701612c96565b9250506040612dca86828701612ccc565b9150509250925092565b600060ff82169050919050565b612dea81612dd4565b82525050565b6000602082019050612e056000830184612de1565b92915050565b6000819050919050565b612e1e81612e0b565b82525050565b6000602082019050612e396000830184612e15565b92915050565b600060208284031215612e5557612e54612c48565b5b6000612e6384828501612ccc565b91505092915050565b600060208284031215612e8257612e81612c48565b5b6000612e9084828501612c96565b91505092915050565b612ea281612c6d565b82525050565b6000602082019050612ebd6000830184612e99565b92915050565b600063ffffffff82169050919050565b612edc81612ec3565b82525050565b6000602082019050612ef76000830184612ed3565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612f3281612efd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f6d81612cab565b82525050565b6000612f7f8383612f64565b60208301905092915050565b6000602082019050919050565b6000612fa382612f38565b612fad8185612f43565b9350612fb883612f54565b8060005b83811015612fe9578151612fd08882612f73565b9750612fdb83612f8b565b925050600181019050612fbc565b5085935050505092915050565b600060e08201905061300b600083018a612f29565b818103602083015261301d8189612bed565b905081810360408301526130318188612bed565b90506130406060830187612d57565b61304d6080830186612e99565b61305a60a0830185612e15565b81810360c083015261306c8184612f98565b905098975050505050505050565b600065ffffffffffff82169050919050565b6130958161307a565b82525050565b60006020820190506130b0600083018461308c565b92915050565b6130bf81612dd4565b81146130ca57600080fd5b50565b6000813590506130dc816130b6565b92915050565b6130eb81612e0b565b81146130f657600080fd5b50565b600081359050613108816130e2565b92915050565b60008060008060008060c0878903121561312b5761312a612c48565b5b600061313989828a01612c96565b965050602061314a89828a01612ccc565b955050604061315b89828a01612ccc565b945050606061316c89828a016130cd565b935050608061317d89828a016130f9565b92505060a061318e89828a016130f9565b9150509295509295509295565b600080600080600080600060e0888a0312156131ba576131b9612c48565b5b60006131c88a828b01612c96565b97505060206131d98a828b01612c96565b96505060406131ea8a828b01612ccc565b95505060606131fb8a828b01612ccc565b945050608061320c8a828b016130cd565b93505060a061321d8a828b016130f9565b92505060c061322e8a828b016130f9565b91505092959891949750929550565b6000806040838503121561325457613253612c48565b5b600061326285828601612c96565b925050602061327385828601612c96565b9150509250929050565b61328681612ec3565b811461329157600080fd5b50565b6000813590506132a38161327d565b92915050565b600080604083850312156132c0576132bf612c48565b5b60006132ce85828601612c96565b92505060206132df85828601613294565b9150509250929050565b6132f28161307a565b82525050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b613327816132f8565b82525050565b60408201600082015161334360008501826132e9565b506020820151613356602085018261331e565b50505050565b6000604082019050613371600083018461332d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806133be57607f821691505b6020821081036133d1576133d0613377565b5b50919050565b60006040820190506133ec6000830185612d57565b6133f9602083018461308c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080820190506134446000830187612e15565b6134516020830186612e99565b61345e6040830185612d57565b61346b6060830184612d57565b95945050505050565b600060c0820190506134896000830189612e15565b6134966020830188612e99565b6134a36040830187612e99565b6134b06060830186612d57565b6134bd6080830185612d57565b6134ca60a0830184612d57565b979650505050505050565b60006040820190506134ea6000830185612e99565b6134f76020830184612e99565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613538826132f8565b9150613543836132f8565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613575576135746134fe565b5b92915050565b6000613586826132f8565b9150613591836132f8565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156135c3576135c26134fe565b5b92915050565b60006060820190506135de6000830186612e99565b6135eb6020830185612d57565b6135f86040830184612d57565b949350505050565b6000819050919050565b6000819050919050565b600061362f61362a61362584613600565b61360a565b612dd4565b9050919050565b61363f81613614565b82525050565b600060408201905061365a6000830185613636565b6136676020830184612d57565b9392505050565b600061367982612cab565b915061368483612cab565b925082820390508181111561369c5761369b6134fe565b5b92915050565b60006136ad82612cab565b91506136b883612cab565b92508282019050808211156136d0576136cf6134fe565b5b92915050565b60006040820190506136eb6000830185612e99565b6136f86020830184612d57565b9392505050565b600060a0820190506137146000830188612e15565b6137216020830187612e15565b61372e6040830186612e15565b61373b6060830185612d57565b6137486080830184612e99565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006040820190506137966000830185612d57565b6137a36020830184612d57565b9392505050565b6000819050919050565b60006137cf6137ca6137c5846137aa565b61360a565b612dd4565b9050919050565b6137df816137b4565b82525050565b60006040820190506137fa60008301856137d6565b6138076020830184612d57565b9392505050565b60006080820190506138236000830187612e15565b6138306020830186612de1565b61383d6040830185612e15565b61384a6060830184612e15565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006138bc82612cab565b91506138c783612cab565b9250826138d7576138d6613752565b5b828204905092915050565b6000819050919050565b60006139076139026138fd846138e2565b61360a565b612dd4565b9050919050565b613917816138ec565b82525050565b6000604082019050613932600083018561390e565b61393f6020830184612d57565b939250505056fea2646970667358221220e8cacb7d7f7e65b8410f3c8aad0e9f5712f0fa4c844c9f3ed4a5b881f4b9cb2664736f6c63430008180033