60806040526000600c556003600d5560046010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff02191690831515021790555067013fbe85edc900006012556018601355734d224452801aced8b2f0aebe155379bb5d594381601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000bc57600080fd5b5060405162004cf738038062004cf78339818101604052810190620000e2919062000407565b6040518060400160405280600381526020017f42415a00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42415a000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200016692919062000329565b5080600390805190602001906200017f92919062000329565b50620001906200025260201b60201c565b6000819055505050620001b8620001ac6200025b60201b60201c565b6200026360201b60201c565b83600a819055508260098190555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050506200054a565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033790620004b1565b90600052602060002090601f0160209004810192826200035b5760008555620003a7565b82601f106200037657805160ff1916838001178555620003a7565b82800160010185558215620003a7579182015b82811115620003a657825182559160200191906001019062000389565b5b509050620003b69190620003ba565b5090565b5b80821115620003d5576000816000905550600101620003bb565b5090565b600081519050620003ea8162000516565b92915050565b600081519050620004018162000530565b92915050565b600080600080608085870312156200041e57600080fd5b60006200042e87828801620003f0565b94505060206200044187828801620003f0565b93505060406200045487828801620003d9565b92505060606200046787828801620003d9565b91505092959194509250565b6000620004808262000487565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620004ca57607f821691505b60208210811415620004e157620004e0620004e7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620005218162000473565b81146200052d57600080fd5b50565b6200053b81620004a7565b81146200054757600080fd5b50565b61479d806200055a6000396000f3fe60806040526004361061022f5760003560e01c8063715018a61161012e578063a22cb465116100ab578063d19473171161006f578063d1947317146107f5578063e83157421461080c578063e985e9c514610837578063eb8d244414610874578063f2fde38b1461089f5761022f565b8063a22cb46514610712578063a98534911461073b578063aee5d0ac14610766578063b88d4fde1461078f578063c87b56dd146107b85761022f565b806399db89b5116100f257806399db89b51461064a5780639b4bca6b146106755780639c9df017146106a0578063a0712d68146106cb578063a0c8e62a146106e75761022f565b8063715018a6146105895780637501f741146105a05780637eeab095146105cb5780638da5cb5b146105f457806395d89b411461061f5761022f565b806325bdb2a8116101bc5780634774f98c116101805780634774f98c1461047e57806350e31693146104bb5780636352211e146104e65780636cfec76a1461052357806370a082311461054c5761022f565b806325bdb2a8146103d357806334918dfd146103fe57806335377214146104155780633ccfd60b1461043e57806342842e0e146104555761022f565b8063095ea7b311610203578063095ea7b31461031657806318160ddd1461033f5780631dfa86391461036a57806321c8d6761461039357806323b872dd146103aa5761022f565b8062764f9e1461023457806301ffc9a71461027157806306fdde03146102ae578063081812fc146102d9575b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190613626565b6108c8565b6040516102689190613cf8565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061383b565b61099a565b6040516102a59190613cf8565b60405180910390f35b3480156102ba57600080fd5b506102c3610a7c565b6040516102d09190613d13565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb919061388d565b610b0e565b60405161030d9190613c31565b60405180910390f35b34801561032257600080fd5b5061033d60048036038101906103389190613791565b610b8a565b005b34801561034b57600080fd5b50610354610c95565b6040516103619190613f35565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c919061388d565b610cac565b005b34801561039f57600080fd5b506103a8610d32565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061368b565b610e1a565b005b3480156103df57600080fd5b506103e8610e2a565b6040516103f59190613cf8565b60405180910390f35b34801561040a57600080fd5b50610413610e41565b005b34801561042157600080fd5b5061043c600480360381019061043791906137cd565b610ee9565b005b34801561044a57600080fd5b50610453611048565b005b34801561046157600080fd5b5061047c6004803603810190610477919061368b565b61127d565b005b34801561048a57600080fd5b506104a560048036038101906104a0919061388d565b61129d565b6040516104b29190613f35565b60405180910390f35b3480156104c757600080fd5b506104d06112bb565b6040516104dd9190613f35565b60405180910390f35b3480156104f257600080fd5b5061050d6004803603810190610508919061388d565b6112c5565b60405161051a9190613c31565b60405180910390f35b34801561052f57600080fd5b5061054a6004803603810190610545919061388d565b6112db565b005b34801561055857600080fd5b50610573600480360381019061056e9190613626565b6116b1565b6040516105809190613f35565b60405180910390f35b34801561059557600080fd5b5061059e611781565b005b3480156105ac57600080fd5b506105b5611809565b6040516105c29190613f35565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed919061388d565b61180f565b005b34801561060057600080fd5b506106096118e9565b6040516106169190613c31565b60405180910390f35b34801561062b57600080fd5b50610634611913565b6040516106419190613d13565b60405180910390f35b34801561065657600080fd5b5061065f6119a5565b60405161066c9190613f35565b60405180910390f35b34801561068157600080fd5b5061068a611a2b565b6040516106979190613f35565b60405180910390f35b3480156106ac57600080fd5b506106b5611ae7565b6040516106c29190613f35565b60405180910390f35b6106e560048036038101906106e0919061388d565b611aed565b005b3480156106f357600080fd5b506106fc611d4a565b6040516107099190613cf8565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613755565b611ddd565b005b34801561074757600080fd5b50610750611f55565b60405161075d9190613f35565b60405180910390f35b34801561077257600080fd5b5061078d6004803603810190610788919061388d565b611f5b565b005b34801561079b57600080fd5b506107b660048036038101906107b191906136da565b612024565b005b3480156107c457600080fd5b506107df60048036038101906107da919061388d565b6120a0565b6040516107ec9190613d13565b60405180910390f35b34801561080157600080fd5b5061080a61213f565b005b34801561081857600080fd5b506108216121e7565b60405161082e9190613f35565b60405180910390f35b34801561084357600080fd5b5061085e6004803603810190610859919061364f565b6121ed565b60405161086b9190613cf8565b60405180910390f35b34801561088057600080fd5b50610889612281565b6040516108969190613cf8565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613626565b612294565b005b60006108d261238c565b73ffffffffffffffffffffffffffffffffffffffff166108f06118e9565b73ffffffffffffffffffffffffffffffffffffffff1614610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d90613e75565b60405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a755750610a7482612394565b5b9050919050565b606060028054610a8b906141b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab7906141b4565b8015610b045780601f10610ad957610100808354040283529160200191610b04565b820191906000526020600020905b815481529060010190602001808311610ae757829003601f168201915b5050505050905090565b6000610b19826123fe565b610b4f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b95826112c5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfd576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1c61238c565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c4e5750610c4c81610c4761238c565b6121ed565b155b15610c85576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c9083838361244c565b505050565b6000610c9f6124fe565b6001546000540303905090565b610cb461238c565b73ffffffffffffffffffffffffffffffffffffffff16610cd26118e9565b73ffffffffffffffffffffffffffffffffffffffff1614610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f90613e75565b60405180910390fd5b80600d8190555050565b610d3a61238c565b73ffffffffffffffffffffffffffffffffffffffff16610d586118e9565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590613e75565b60405180910390fd5b600a54610dcc6032610dbe610c95565b61250790919063ffffffff16565b1115610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613e55565b60405180910390fd5b610e1833603261251d565b565b610e2583838361253b565b505050565b6000601160019054906101000a900460ff16905090565b610e4961238c565b73ffffffffffffffffffffffffffffffffffffffff16610e676118e9565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490613e75565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b610ef161238c565b73ffffffffffffffffffffffffffffffffffffffff16610f0f6118e9565b73ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90613e75565b60405180910390fd5b60005b82829050811015611043576001600b6000858585818110610fb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610fc79190613626565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c600081548092919061102b90614217565b9190505550808061103b90614217565b915050610f68565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110f15750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110fa57600080fd5b60006015541161113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690613eb5565b60405180910390fd5b60004711611182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117990613d75565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6111e660646111d8601554476129f190919063ffffffff16565b612a0790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611211573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561127a573d6000803e3d6000fd5b50565b61129883838360405180602001604052806000815250612024565b505050565b60006112b4826013546129f190919063ffffffff16565b9050919050565b6000601354905090565b60006112d082612a1d565b600001519050919050565b601160019054906101000a900460ff168061133f5750600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590613f15565b60405180910390fd5b601160009054906101000a900460ff166113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490613ed5565b60405180910390fd5b60008111611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790613d95565b60405180910390fd5b600954811115611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90613e15565b60405180910390fd5b600a5461147282611464610c95565b61250790919063ffffffff16565b11156114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90613e55565b60405180910390fd5b60006114ca601354836129f190919063ffffffff16565b90506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611508601354846129f190919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611543929190613c4c565b60206040518083038186803b15801561155b57600080fd5b505afa15801561156f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159391906138b6565b10156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90613e35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161161193929190613c75565b602060405180830381600087803b15801561162b57600080fd5b505af115801561163f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116639190613812565b6116a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169990613dd5565b60405180910390fd5b6116ac338461251d565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611719576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61178961238c565b73ffffffffffffffffffffffffffffffffffffffff166117a76118e9565b73ffffffffffffffffffffffffffffffffffffffff16146117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f490613e75565b60405180910390fd5b6118076000612cac565b565b60095481565b61181761238c565b73ffffffffffffffffffffffffffffffffffffffff166118356118e9565b73ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613e75565b60405180910390fd5b6000601554101580156118a057506065601554105b6118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d690613e95565b60405180910390fd5b8060158190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611922906141b4565b80601f016020809104026020016040519081016040528092919081815260200182805461194e906141b4565b801561199b5780601f106119705761010080835404028352916020019161199b565b820191906000526020600020905b81548152906001019060200180831161197e57829003601f168201915b5050505050905090565b60006119af61238c565b73ffffffffffffffffffffffffffffffffffffffff166119cd6118e9565b73ffffffffffffffffffffffffffffffffffffffff1614611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90613e75565b60405180910390fd5b600c54905090565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ad65750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611adf57600080fd5b601554905090565b60125481565b601160019054906101000a900460ff1680611b515750600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790613f15565b60405180910390fd5b6000601160019054906101000a900460ff16611bfb5760039050600d54611bb6336116b1565b10611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed90613d35565b60405180910390fd5b611c01565b600a5490505b60008211611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b90613d95565b60405180910390fd5b80821115611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e90613db5565b60405180910390fd5b600a54611ca483611c96610c95565b61250790919063ffffffff16565b1115611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90613e55565b60405180910390fd5b34611cfb836012546129f190919063ffffffff16565b1115611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613df5565b60405180910390fd5b611d46338361251d565b5050565b6000611d5461238c565b73ffffffffffffffffffffffffffffffffffffffff16611d726118e9565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf90613e75565b60405180910390fd5b601160009054906101000a900460ff16905090565b611de561238c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e4a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611e5761238c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f0461238c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f499190613cf8565b60405180910390a35050565b60135481565b611f6361238c565b73ffffffffffffffffffffffffffffffffffffffff16611f816118e9565b73ffffffffffffffffffffffffffffffffffffffff1614611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90613e75565b60405180910390fd5b6000811161201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190613ef5565b60405180910390fd5b8060138190555050565b61202f84848461253b565b61204e8373ffffffffffffffffffffffffffffffffffffffff16612d72565b8015612063575061206184848484612d85565b155b1561209a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606120ab826123fe565b6120e1576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006120eb612ee5565b905060008151141561210c5760405180602001604052806000815250612137565b8061211684612f05565b604051602001612127929190613c02565b6040516020818303038152906040525b915050919050565b61214761238c565b73ffffffffffffffffffffffffffffffffffffffff166121656118e9565b73ffffffffffffffffffffffffffffffffffffffff16146121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290613e75565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600a5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160019054906101000a900460ff1681565b61229c61238c565b73ffffffffffffffffffffffffffffffffffffffff166122ba6118e9565b73ffffffffffffffffffffffffffffffffffffffff1614612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790613e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237790613d55565b60405180910390fd5b61238981612cac565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816124096124fe565b11158015612418575060005482105b8015612445575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600081836125159190613fe9565b905092915050565b6125378282604051806020016040528060008152506130b2565b5050565b600061254682612a1d565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125b1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166125d261238c565b73ffffffffffffffffffffffffffffffffffffffff1614806126015750612600856125fb61238c565b6121ed565b5b80612646575061260f61238c565b73ffffffffffffffffffffffffffffffffffffffff1661262e84610b0e565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061267f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126e6576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126f385858560016130c4565b6126ff6000848761244c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561297f57600054821461297e57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ea85858560016130ca565b5050505050565b600081836129ff9190614070565b905092915050565b60008183612a15919061403f565b905092915050565b612a2561349e565b600082905080612a336124fe565b11158015612a42575060005481105b15612c75576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612c7357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b57578092505050612ca7565b5b600115612c7257818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c6d578092505050612ca7565b612b58565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dab61238c565b8786866040518563ffffffff1660e01b8152600401612dcd9493929190613cac565b602060405180830381600087803b158015612de757600080fd5b505af1925050508015612e1857506040513d601f19601f82011682018060405250810190612e159190613864565b60015b612e92573d8060008114612e48576040519150601f19603f3d011682016040523d82523d6000602084013e612e4d565b606091505b50600081511415612e8a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180606001604052806036815260200161473260369139905090565b60606000821415612f4d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130ad565b600082905060005b60008214612f7f578080612f6890614217565b915050600a82612f78919061403f565b9150612f55565b60008167ffffffffffffffff811115612fc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ff35781602001600182028036833780820191505090505b5090505b600085146130a65760018261300c91906140ca565b9150600a8561301b9190614260565b60306130279190613fe9565b60f81b818381518110613063577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561309f919061403f565b9450612ff7565b8093505050505b919050565b6130bf83838360016130d0565b505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561313d576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613178576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61318560008683876130c4565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561334f575061334e8773ffffffffffffffffffffffffffffffffffffffff16612d72565b5b15613415575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133c46000888480600101955088612d85565b6133fa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561335557826000541461341057600080fd5b613481565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613416575b81600081905550505061349760008683876130ca565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b60006134f46134ef84613f75565b613f50565b90508281526020810184848401111561350c57600080fd5b613517848285614172565b509392505050565b60008135905061352e816146d5565b92915050565b60008083601f84011261354657600080fd5b8235905067ffffffffffffffff81111561355f57600080fd5b60208301915083602082028301111561357757600080fd5b9250929050565b60008135905061358d816146ec565b92915050565b6000815190506135a2816146ec565b92915050565b6000813590506135b781614703565b92915050565b6000815190506135cc81614703565b92915050565b600082601f8301126135e357600080fd5b81356135f38482602086016134e1565b91505092915050565b60008135905061360b8161471a565b92915050565b6000815190506136208161471a565b92915050565b60006020828403121561363857600080fd5b60006136468482850161351f565b91505092915050565b6000806040838503121561366257600080fd5b60006136708582860161351f565b92505060206136818582860161351f565b9150509250929050565b6000806000606084860312156136a057600080fd5b60006136ae8682870161351f565b93505060206136bf8682870161351f565b92505060406136d0868287016135fc565b9150509250925092565b600080600080608085870312156136f057600080fd5b60006136fe8782880161351f565b945050602061370f8782880161351f565b9350506040613720878288016135fc565b925050606085013567ffffffffffffffff81111561373d57600080fd5b613749878288016135d2565b91505092959194509250565b6000806040838503121561376857600080fd5b60006137768582860161351f565b92505060206137878582860161357e565b9150509250929050565b600080604083850312156137a457600080fd5b60006137b28582860161351f565b92505060206137c3858286016135fc565b9150509250929050565b600080602083850312156137e057600080fd5b600083013567ffffffffffffffff8111156137fa57600080fd5b61380685828601613534565b92509250509250929050565b60006020828403121561382457600080fd5b600061383284828501613593565b91505092915050565b60006020828403121561384d57600080fd5b600061385b848285016135a8565b91505092915050565b60006020828403121561387657600080fd5b6000613884848285016135bd565b91505092915050565b60006020828403121561389f57600080fd5b60006138ad848285016135fc565b91505092915050565b6000602082840312156138c857600080fd5b60006138d684828501613611565b91505092915050565b6138e8816140fe565b82525050565b6138f781614110565b82525050565b600061390882613fa6565b6139128185613fbc565b9350613922818560208601614181565b61392b8161434d565b840191505092915050565b600061394182613fb1565b61394b8185613fcd565b935061395b818560208601614181565b6139648161434d565b840191505092915050565b600061397a82613fb1565b6139848185613fde565b9350613994818560208601614181565b80840191505092915050565b60006139ad602383613fcd565b91506139b88261435e565b604082019050919050565b60006139d0602683613fcd565b91506139db826143ad565b604082019050919050565b60006139f3601c83613fcd565b91506139fe826143fc565b602082019050919050565b6000613a16601a83613fcd565b9150613a2182614425565b602082019050919050565b6000613a39602083613fcd565b9150613a448261444e565b602082019050919050565b6000613a5c600f83613fcd565b9150613a6782614477565b602082019050919050565b6000613a7f601f83613fcd565b9150613a8a826144a0565b602082019050919050565b6000613aa2602183613fcd565b9150613aad826144c9565b604082019050919050565b6000613ac5601583613fcd565b9150613ad082614518565b602082019050919050565b6000613ae8602a83613fcd565b9150613af382614541565b604082019050919050565b6000613b0b600583613fde565b9150613b1682614590565b600582019050919050565b6000613b2e602083613fcd565b9150613b39826145b9565b602082019050919050565b6000613b51601c83613fcd565b9150613b5c826145e2565b602082019050919050565b6000613b74601083613fcd565b9150613b7f8261460b565b602082019050919050565b6000613b97602383613fcd565b9150613ba282614634565b604082019050919050565b6000613bba601b83613fcd565b9150613bc582614683565b602082019050919050565b6000613bdd601c83613fcd565b9150613be8826146ac565b602082019050919050565b613bfc81614168565b82525050565b6000613c0e828561396f565b9150613c1a828461396f565b9150613c2582613afe565b91508190509392505050565b6000602082019050613c4660008301846138df565b92915050565b6000604082019050613c6160008301856138df565b613c6e60208301846138df565b9392505050565b6000606082019050613c8a60008301866138df565b613c9760208301856138df565b613ca46040830184613bf3565b949350505050565b6000608082019050613cc160008301876138df565b613cce60208301866138df565b613cdb6040830185613bf3565b8181036060830152613ced81846138fd565b905095945050505050565b6000602082019050613d0d60008301846138ee565b92915050565b60006020820190508181036000830152613d2d8184613936565b905092915050565b60006020820190508181036000830152613d4e816139a0565b9050919050565b60006020820190508181036000830152613d6e816139c3565b9050919050565b60006020820190508181036000830152613d8e816139e6565b9050919050565b60006020820190508181036000830152613dae81613a09565b9050919050565b60006020820190508181036000830152613dce81613a2c565b9050919050565b60006020820190508181036000830152613dee81613a4f565b9050919050565b60006020820190508181036000830152613e0e81613a72565b9050919050565b60006020820190508181036000830152613e2e81613a95565b9050919050565b60006020820190508181036000830152613e4e81613ab8565b9050919050565b60006020820190508181036000830152613e6e81613adb565b9050919050565b60006020820190508181036000830152613e8e81613b21565b9050919050565b60006020820190508181036000830152613eae81613b44565b9050919050565b60006020820190508181036000830152613ece81613b67565b9050919050565b60006020820190508181036000830152613eee81613b8a565b9050919050565b60006020820190508181036000830152613f0e81613bad565b9050919050565b60006020820190508181036000830152613f2e81613bd0565b9050919050565b6000602082019050613f4a6000830184613bf3565b92915050565b6000613f5a613f6b565b9050613f6682826141e6565b919050565b6000604051905090565b600067ffffffffffffffff821115613f9057613f8f61431e565b5b613f998261434d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ff482614168565b9150613fff83614168565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561403457614033614291565b5b828201905092915050565b600061404a82614168565b915061405583614168565b925082614065576140646142c0565b5b828204905092915050565b600061407b82614168565b915061408683614168565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140bf576140be614291565b5b828202905092915050565b60006140d582614168565b91506140e083614168565b9250828210156140f3576140f2614291565b5b828203905092915050565b600061410982614148565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561419f578082015181840152602081019050614184565b838111156141ae576000848401525b50505050565b600060028204905060018216806141cc57607f821691505b602082108114156141e0576141df6142ef565b5b50919050565b6141ef8261434d565b810181811067ffffffffffffffff8211171561420e5761420d61431e565b5b80604052505050565b600061422282614168565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561425557614254614291565b5b600182019050919050565b600061426b82614168565b915061427683614168565b925082614286576142856142c0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f596f7520657863656564656420796f75722077686974656c697374206d61786960008201527f6d756d0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5468697320636f6e747261637420686173206e6f2062616c616e636500000000600082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e000000000000600082015250565b7f596f752063616e6e6f74207468617420616d6f756e74206f6620746f6b656e73600082015250565b7f7472616e73666572204661696c65640000000000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e737566696369656e7420416c6c6f77616e63650000000000000000000000600082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f56616c7565206d757374206265747765656e203020616e642031303000000000600082015250565b7f5365742061727469737420736861726500000000000000000000000000000000600082015250565b7f596f752063616e6e6f742075736520417065436f696e2061742074686973207460008201527f696d650000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374207365742050726963652041626f7665203020244150450000000000600082015250565b7f596f752063616e6e6f74206d696e7420617420746869732074696d6500000000600082015250565b6146de816140fe565b81146146e957600080fd5b50565b6146f581614110565b811461470057600080fd5b50565b61470c8161411c565b811461471757600080fd5b50565b61472381614168565b811461472e57600080fd5b5056fe697066733a2f2f516d5544593568515253435a664c643366506d414232445267504e777775635473397a3744343448446f574d545a2fa264697066735822122043a30baaec95252ae5107bf8baa9a17b6efdbc75b82b0b19bdf03c118719dfa364736f6c634300080400330000000000000000000000000000000000000000000000000000000000001c20000000000000000000000000000000000000000000000000000000000000001400000000000000000000000069856c85518a656d801e3b4d93186247b1608640000000000000000000000000475bedae1fc15cd0d0fad57da1689b1b40faacd0