60806040526001600a556002600b556000600d556000600e60006101000a81548160ff021916908315150217905550600060115560006012553480156200004557600080fd5b506040518060400160405280600c81526020017f5369737970687573204e465400000000000000000000000000000000000000008152506040518060400160405280600281526020017f534e000000000000000000000000000000000000000000000000000000000000815250620000d2620000c66200018e60201b60201c565b6200019660201b60201c565b8160039080519060200190620000ea92919062000263565b5080600490805190602001906200010392919062000263565b50620001146200025a60201b60201c565b600181905550505060016009819055506040518060800160405280605c815260200162004579605c9139601090805190602001906200015592919062000263565b506040518060800160405280605081526020016200452960509139600f90805190602001906200018792919062000263565b5062000378565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b828054620002719062000313565b90600052602060002090601f016020900481019282620002955760008555620002e1565b82601f10620002b057805160ff1916838001178555620002e1565b82800160010185558215620002e1579182015b82811115620002e0578251825591602001919060010190620002c3565b5b509050620002f09190620002f4565b5090565b5b808211156200030f576000816000905550600101620002f5565b5090565b600060028204905060018216806200032c57607f821691505b6020821081141562000343576200034262000349565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6141a180620003886000396000f3fe6080604052600436106102305760003560e01c806370a082311161012e578063a40ece7a116100ab578063cd3293de1161006f578063cd3293de14610804578063dc33e6811461082f578063e75722301461086c578063e985e9c5146108a9578063f2fde38b146108e657610230565b8063a40ece7a14610747578063ac44600214610770578063b88d4fde14610787578063bd0a8439146107b0578063c87b56dd146107c757610230565b80638da5cb5b116100f25780638da5cb5b1461066f5780639231ab2a1461069a57806395d89b41146106d7578063a0712d6814610702578063a22cb4651461071e57610230565b806370a082311461058a578063715018a6146105c757806375236143146105de5780638ba4cc3c1461061b5780638d859f3e1461064457610230565b80633fd17366116101bc5780635c37809d116101805780635c37809d146104a757806362c6f7b9146104d05780636352211e146104fb57806369ba1a75146105385780636a44e1731461056157610230565b80633fd17366146103d657806342842e0e146103ff5780634e69d5601461042857806351d7ff931461045357806355f804b31461047e57610230565b806317e04a711161020357806317e04a711461030357806318160ddd1461032e578063200d2ed21461035957806323b872dd14610384578063288bd8fd146103ad57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132f6565b61090f565b60405161026991906137c8565b60405180910390f35b34801561027e57600080fd5b506102876109f1565b60405161029491906137e3565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613399565b610a83565b6040516102d19190613761565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906132b6565b610aff565b005b34801561030f57600080fd5b50610318610c0a565b60405161032591906139a0565b60405180910390f35b34801561033a57600080fd5b50610343610c10565b60405161035091906139a0565b60405180910390f35b34801561036557600080fd5b5061036e610c27565b60405161037b91906139a0565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a691906131a0565b610c2d565b005b3480156103b957600080fd5b506103d460048036038101906103cf9190613399565b610c3d565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190613399565b610d24565b005b34801561040b57600080fd5b50610426600480360381019061042191906131a0565b610daa565b005b34801561043457600080fd5b5061043d610dca565b60405161044a91906139a0565b60405180910390f35b34801561045f57600080fd5b50610468610dd4565b60405161047591906139a0565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190613350565b610dda565b005b3480156104b357600080fd5b506104ce60048036038101906104c99190613350565b610e70565b005b3480156104dc57600080fd5b506104e5610f06565b6040516104f291906137c8565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190613399565b610f19565b60405161052f9190613761565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613399565b610f2f565b005b34801561056d57600080fd5b5061058860048036038101906105839190613399565b610fb5565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613133565b61103b565b6040516105be91906139a0565b60405180910390f35b3480156105d357600080fd5b506105dc61110b565b005b3480156105ea57600080fd5b5061060560048036038101906106009190613133565b611193565b60405161061291906139a0565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d91906132b6565b6111ab565b005b34801561065057600080fd5b5061065961128c565b60405161066691906139a0565b60405180910390f35b34801561067b57600080fd5b50610684611292565b6040516106919190613761565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190613399565b6112bb565b6040516106ce9190613985565b60405180910390f35b3480156106e357600080fd5b506106ec6112d3565b6040516106f991906137e3565b60405180910390f35b61071c60048036038101906107179190613399565b611365565b005b34801561072a57600080fd5b5061074560048036038101906107409190613276565b6115f8565b005b34801561075357600080fd5b5061076e60048036038101906107699190613399565b611770565b005b34801561077c57600080fd5b506107856117f6565b005b34801561079357600080fd5b506107ae60048036038101906107a991906131f3565b611977565b005b3480156107bc57600080fd5b506107c56119f3565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190613399565b611a9b565b6040516107fb91906137e3565b60405180910390f35b34801561081057600080fd5b50610819611bea565b60405161082691906139a0565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613133565b611bf0565b60405161086391906139a0565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190613399565b611c02565b6040516108a091906139a0565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190613160565b611c19565b6040516108dd91906137c8565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613133565b611cad565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ea57506109e982611da5565b5b9050919050565b606060038054610a0090613c6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2c90613c6f565b8015610a795780601f10610a4e57610100808354040283529160200191610a79565b820191906000526020600020905b815481529060010190602001808311610a5c57829003601f168201915b5050505050905090565b6000610a8e82611e0f565b610ac4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0a82610f19565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b72576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b91611e5d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610bc35750610bc181610bbc611e5d565b611c19565b155b15610bfa576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c05838383611e65565b505050565b600b5481565b6000610c1a611f17565b6002546001540303905090565b60125481565b610c38838383611f20565b505050565b610c45611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610c63611292565b73ffffffffffffffffffffffffffffffffffffffff1614610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb0906138a5565b60405180910390fd5b601154811115610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613825565b60405180910390fd5b8060116000828254610d109190613b71565b92505081905550610d2133826123d6565b50565b610d2c611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610d4a611292565b73ffffffffffffffffffffffffffffffffffffffff1614610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906138a5565b60405180910390fd5b80600d8190555050565b610dc583838360405180602001604052806000815250611977565b505050565b6000601254905090565b600a5481565b610de2611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610e00611292565b73ffffffffffffffffffffffffffffffffffffffff1614610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d906138a5565b60405180910390fd5b80600f9080519060200190610e6c929190612f04565b5050565b610e78611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610e96611292565b73ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee3906138a5565b60405180910390fd5b8060109080519060200190610f02929190612f04565b5050565b600e60009054906101000a900460ff1681565b6000610f24826123f4565b600001519050919050565b610f37611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610f55611292565b73ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906138a5565b60405180910390fd5b8060128190555050565b610fbd611e5d565b73ffffffffffffffffffffffffffffffffffffffff16610fdb611292565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906138a5565b60405180910390fd5b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611113611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611131611292565b73ffffffffffffffffffffffffffffffffffffffff1614611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e906138a5565b60405180910390fd5b6111916000612683565b565b600c6020528060005260406000206000915090505481565b6111b3611e5d565b73ffffffffffffffffffffffffffffffffffffffff166111d1611292565b73ffffffffffffffffffffffffffffffffffffffff1614611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e906138a5565b60405180910390fd5b61029a81611233610c10565b61123d9190613a90565b111561127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590613885565b60405180910390fd5b61128882826123d6565b5050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112c3612f8a565b6112cc826123f4565b9050919050565b6060600480546112e290613c6f565b80601f016020809104026020016040519081016040528092919081815260200182805461130e90613c6f565b801561135b5780601f106113305761010080835404028352916020019161135b565b820191906000526020600020905b81548152906001019060200180831161133e57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ca90613865565b60405180910390fd5b600160125414611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613845565b60405180910390fd5b60115461029a6114289190613b71565b81611431610c10565b61143b9190613a90565b111561147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390613885565b60405180910390fd5b600a548111156114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613925565b60405180910390fd5b80600d546114cf9190613b17565b341015611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613905565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115609190613a90565b92505081905550600b54600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290613945565b60405180910390fd5b6115f533826123d6565b50565b611600611e5d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611665576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611672611e5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661171f611e5d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161176491906137c8565b60405180910390a35050565b611778611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611796611292565b73ffffffffffffffffffffffffffffffffffffffff16146117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906138a5565b60405180910390fd5b80600a8190555050565b6117fe611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661181c611292565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611869906138a5565b60405180910390fd5b600260095414156118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90613965565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516118e69061374c565b60006040518083038185875af1925050503d8060008114611923576040519150601f19603f3d011682016040523d82523d6000602084013e611928565b606091505b505090508061196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611963906138e5565b60405180910390fd5b506001600981905550565b611982848484611f20565b6119a18373ffffffffffffffffffffffffffffffffffffffff16612747565b80156119b657506119b48484848461275a565b155b156119ed576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6119fb611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611a19611292565b73ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a66906138a5565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6060611aa682611e0f565b611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc906138c5565b60405180910390fd5b600e60009054906101000a900460ff1615611b57576000611b046128ba565b90506000815111611b245760405180602001604052806000815250611b4f565b80611b2e8461294c565b604051602001611b3f929190613712565b6040516020818303038152906040525b915050611be5565b60108054611b6490613c6f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9090613c6f565b8015611bdd5780601f10611bb257610100808354040283529160200191611bdd565b820191906000526020600020905b815481529060010190602001808311611bc057829003601f168201915b505050505090505b919050565b60115481565b6000611bfb82612aad565b9050919050565b6000600d5482611c129190613b17565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cb5611e5d565b73ffffffffffffffffffffffffffffffffffffffff16611cd3611292565b73ffffffffffffffffffffffffffffffffffffffff1614611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d20906138a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090613805565b60405180910390fd5b611da281612683565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611e1a611f17565b11158015611e29575060015482105b8015611e56575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611f2b826123f4565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f96576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611fb7611e5d565b73ffffffffffffffffffffffffffffffffffffffff161480611fe65750611fe585611fe0611e5d565b611c19565b5b8061202b5750611ff4611e5d565b73ffffffffffffffffffffffffffffffffffffffff1661201384610a83565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612064576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120cb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120d88585856001612b17565b6120e460008487611e65565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561236457600154821461236357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123cf8585856001612b1d565b5050505050565b6123f0828260405180602001604052806000815250612b23565b5050565b6123fc612f8a565b60008290508061240a611f17565b11158015612419575060015481105b1561264c576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161264a57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461252e57809250505061267e565b5b60011561264957818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461264457809250505061267e565b61252f565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612780611e5d565b8786866040518563ffffffff1660e01b81526004016127a2949392919061377c565b602060405180830381600087803b1580156127bc57600080fd5b505af19250505080156127ed57506040513d601f19601f820116820180604052508101906127ea9190613323565b60015b612867573d806000811461281d576040519150601f19603f3d011682016040523d82523d6000602084013e612822565b606091505b5060008151141561285f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f80546128c990613c6f565b80601f01602080910402602001604051908101604052809291908181526020018280546128f590613c6f565b80156129425780601f1061291757610100808354040283529160200191612942565b820191906000526020600020905b81548152906001019060200180831161292557829003601f168201915b5050505050905090565b60606000821415612994576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aa8565b600082905060005b600082146129c65780806129af90613cd2565b915050600a826129bf9190613ae6565b915061299c565b60008167ffffffffffffffff8111156129e2576129e1613e08565b5b6040519080825280601f01601f191660200182016040528015612a145781602001600182028036833780820191505090505b5090505b60008514612aa157600182612a2d9190613b71565b9150600a85612a3c9190613d1b565b6030612a489190613a90565b60f81b818381518110612a5e57612a5d613dd9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a9a9190613ae6565b9450612a18565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612b308383836001612b35565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ba3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612bde576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612beb6000868387612b17565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612db55750612db48773ffffffffffffffffffffffffffffffffffffffff16612747565b5b15612e7b575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e2a600088848060010195508861275a565b612e60576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612dbb578260015414612e7657600080fd5b612ee7565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612e7c575b816001819055505050612efd6000868387612b1d565b5050505050565b828054612f1090613c6f565b90600052602060002090601f016020900481019282612f325760008555612f79565b82601f10612f4b57805160ff1916838001178555612f79565b82800160010185558215612f79579182015b82811115612f78578251825591602001919060010190612f5d565b5b509050612f869190612fcd565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612fe6576000816000905550600101612fce565b5090565b6000612ffd612ff8846139e0565b6139bb565b90508281526020810184848401111561301957613018613e3c565b5b613024848285613c2d565b509392505050565b600061303f61303a84613a11565b6139bb565b90508281526020810184848401111561305b5761305a613e3c565b5b613066848285613c2d565b509392505050565b60008135905061307d8161410f565b92915050565b60008135905061309281614126565b92915050565b6000813590506130a78161413d565b92915050565b6000815190506130bc8161413d565b92915050565b600082601f8301126130d7576130d6613e37565b5b81356130e7848260208601612fea565b91505092915050565b600082601f83011261310557613104613e37565b5b813561311584826020860161302c565b91505092915050565b60008135905061312d81614154565b92915050565b60006020828403121561314957613148613e46565b5b60006131578482850161306e565b91505092915050565b6000806040838503121561317757613176613e46565b5b60006131858582860161306e565b92505060206131968582860161306e565b9150509250929050565b6000806000606084860312156131b9576131b8613e46565b5b60006131c78682870161306e565b93505060206131d88682870161306e565b92505060406131e98682870161311e565b9150509250925092565b6000806000806080858703121561320d5761320c613e46565b5b600061321b8782880161306e565b945050602061322c8782880161306e565b935050604061323d8782880161311e565b925050606085013567ffffffffffffffff81111561325e5761325d613e41565b5b61326a878288016130c2565b91505092959194509250565b6000806040838503121561328d5761328c613e46565b5b600061329b8582860161306e565b92505060206132ac85828601613083565b9150509250929050565b600080604083850312156132cd576132cc613e46565b5b60006132db8582860161306e565b92505060206132ec8582860161311e565b9150509250929050565b60006020828403121561330c5761330b613e46565b5b600061331a84828501613098565b91505092915050565b60006020828403121561333957613338613e46565b5b6000613347848285016130ad565b91505092915050565b60006020828403121561336657613365613e46565b5b600082013567ffffffffffffffff81111561338457613383613e41565b5b613390848285016130f0565b91505092915050565b6000602082840312156133af576133ae613e46565b5b60006133bd8482850161311e565b91505092915050565b6133cf81613ba5565b82525050565b6133de81613ba5565b82525050565b6133ed81613bb7565b82525050565b6133fc81613bb7565b82525050565b600061340d82613a42565b6134178185613a58565b9350613427818560208601613c3c565b61343081613e4b565b840191505092915050565b600061344682613a4d565b6134508185613a74565b9350613460818560208601613c3c565b61346981613e4b565b840191505092915050565b600061347f82613a4d565b6134898185613a85565b9350613499818560208601613c3c565b80840191505092915050565b60006134b2602683613a74565b91506134bd82613e5c565b604082019050919050565b60006134d5602183613a74565b91506134e082613eab565b604082019050919050565b60006134f8601283613a74565b915061350382613efa565b602082019050919050565b600061351b601e83613a74565b915061352682613f23565b602082019050919050565b600061353e601283613a74565b915061354982613f4c565b602082019050919050565b6000613561600583613a85565b915061356c82613f75565b600582019050919050565b6000613584602083613a74565b915061358f82613f9e565b602082019050919050565b60006135a7602f83613a74565b91506135b282613fc7565b604082019050919050565b60006135ca600083613a69565b91506135d582614016565b600082019050919050565b60006135ed601083613a74565b91506135f882614019565b602082019050919050565b6000613610601683613a74565b915061361b82614042565b602082019050919050565b6000613633601683613a74565b915061363e8261406b565b602082019050919050565b6000613656601c83613a74565b915061366182614094565b602082019050919050565b6000613679601f83613a74565b9150613684826140bd565b602082019050919050565b600061369c600183613a85565b91506136a7826140e6565b600182019050919050565b6060820160008201516136c860008501826133c6565b5060208201516136db6020850182613703565b5060408201516136ee60408501826133e4565b50505050565b6136fd81613c0f565b82525050565b61370c81613c19565b82525050565b600061371e8285613474565b91506137298261368f565b91506137358284613474565b915061374082613554565b91508190509392505050565b6000613757826135bd565b9150819050919050565b600060208201905061377660008301846133d5565b92915050565b600060808201905061379160008301876133d5565b61379e60208301866133d5565b6137ab60408301856136f4565b81810360608301526137bd8184613402565b905095945050505050565b60006020820190506137dd60008301846133f3565b92915050565b600060208201905081810360008301526137fd818461343b565b905092915050565b6000602082019050818103600083015261381e816134a5565b9050919050565b6000602082019050818103600083015261383e816134c8565b9050919050565b6000602082019050818103600083015261385e816134eb565b9050919050565b6000602082019050818103600083015261387e8161350e565b9050919050565b6000602082019050818103600083015261389e81613531565b9050919050565b600060208201905081810360008301526138be81613577565b9050919050565b600060208201905081810360008301526138de8161359a565b9050919050565b600060208201905081810360008301526138fe816135e0565b9050919050565b6000602082019050818103600083015261391e81613603565b9050919050565b6000602082019050818103600083015261393e81613626565b9050919050565b6000602082019050818103600083015261395e81613649565b9050919050565b6000602082019050818103600083015261397e8161366c565b9050919050565b600060608201905061399a60008301846136b2565b92915050565b60006020820190506139b560008301846136f4565b92915050565b60006139c56139d6565b90506139d18282613ca1565b919050565b6000604051905090565b600067ffffffffffffffff8211156139fb576139fa613e08565b5b613a0482613e4b565b9050602081019050919050565b600067ffffffffffffffff821115613a2c57613a2b613e08565b5b613a3582613e4b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a9b82613c0f565b9150613aa683613c0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613adb57613ada613d4c565b5b828201905092915050565b6000613af182613c0f565b9150613afc83613c0f565b925082613b0c57613b0b613d7b565b5b828204905092915050565b6000613b2282613c0f565b9150613b2d83613c0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6657613b65613d4c565b5b828202905092915050565b6000613b7c82613c0f565b9150613b8783613c0f565b925082821015613b9a57613b99613d4c565b5b828203905092915050565b6000613bb082613bef565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613c5a578082015181840152602081019050613c3f565b83811115613c69576000848401525b50505050565b60006002820490506001821680613c8757607f821691505b60208210811415613c9b57613c9a613daa565b5b50919050565b613caa82613e4b565b810181811067ffffffffffffffff82111715613cc957613cc8613e08565b5b80604052505050565b6000613cdd82613c0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d1057613d0f613d4c565b5b600182019050919050565b6000613d2682613c0f565b9150613d3183613c0f565b925082613d4157613d40613d7b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61411881613ba5565b811461412357600080fd5b50565b61412f81613bb7565b811461413a57600080fd5b50565b61414681613bc3565b811461415157600080fd5b50565b61415d81613c0f565b811461416857600080fd5b5056fea2646970667358221220da60fd74ec081177777598b90c1af6246bc2a3cc741a214d782ace8f8103633964736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5057713836614a6b5578684c6f314a4c546e5745393353486539327a584e7778645361687732576d504e324168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d557a4e59596368427479373343624a5436596d4d46734c3559487238336432387748503539734a34794569582f72657665616c2e6a736f6e