60a060405260016003556000600b55611e61600d5560c86012553480156200002657600080fd5b506040518060400160405280600e81526020017f476f626c696e446f6765204e46540000000000000000000000000000000000008152506040518060400160405280600581526020017f47444f474500000000000000000000000000000000000000000000000000000081525060c86001620000b7620000ab6200026160201b60201c565b6200026960201b60201c565b620000c76200026160201b60201c565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a360008211620001ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c19062000445565b60405180910390fd5b8360059080519060200190620001e29291906200032d565b508260069080519060200190620001fb9291906200032d565b5080600381905550806004819055508160808181525050505050506001600c81905550604051806060016040528060368152602001620053a260369139600e90805190602001906200024f9291906200032d565b506362ae8320601081905550620004dd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033b9062000478565b90600052602060002090601f0160209004810192826200035f5760008555620003ab565b82601f106200037a57805160ff1916838001178555620003ab565b82800160010185558215620003ab579182015b82811115620003aa5782518255916020019190600101906200038d565b5b509050620003ba9190620003be565b5090565b5b80821115620003d9576000816000905550600101620003bf565b5090565b6000620003ec60278362000467565b91507f4552433732314c3a206d61782062617463682073697a65206d7573742062652060008301527f6e6f6e7a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b600060208201905081810360008301526200046081620003dd565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200049157607f821691505b60208210811415620004a857620004a7620004ae565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b608051614e9b62000507600039600081816128c1015281816128ea0152612fd80152614e9b6000f3fe60806040526004361061021e5760003560e01c8063627804af11610123578063c87b56dd116100ab578063de908ab41161006f578063de908ab4146107f5578063e985e9c514610820578063f2fde38b1461085d578063f3982e5e14610886578063fbbd0736146108af57610225565b8063c87b56dd146106e8578063cc79221d14610725578063d46f75b814610762578063d5abeb011461079f578063d7224ba0146107ca57610225565b8063715018a6116100f2578063715018a6146106295780638da5cb5b1461064057806395d89b411461066b578063a22cb46514610696578063b88d4fde146106bf57610225565b8063627804af146105495780636352211e14610572578063648ec7b9146105af57806370a08231146105ec57610225565b80632db11544116101a65780634c7c71fe116101755780634c7c71fe146104765780634f6ccce7146104a157806355f804b3146104de578063570ca735146105075780636220aea81461053257610225565b80632db11544146103c95780632f745c59146103e557806342842e0e146104225780634456eda21461044b57610225565b806310242590116101ed57806310242590146102f857806318160ddd1461032157806323b872dd1461034c57806329605e77146103755780632974dc3b1461039e57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906137a8565b6108da565b60405161025e91906144de565b60405180910390f35b34801561027357600080fd5b5061027c610a24565b60405161028991906144f9565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061383f565b610ab6565b6040516102c69190614477565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061376c565b610b3b565b005b34801561030457600080fd5b5061031f600480360381019061031a9190613601565b610c54565b005b34801561032d57600080fd5b50610336610d2b565b604051610343919061493b565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190613666565b610d42565b005b34801561038157600080fd5b5061039c60048036038101906103979190613601565b610d52565b005b3480156103aa57600080fd5b506103b3610dda565b6040516103c0919061493b565b60405180910390f35b6103e360048036038101906103de919061383f565b610de0565b005b3480156103f157600080fd5b5061040c6004803603810190610407919061376c565b6111c2565b604051610419919061493b565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613666565b6113d1565b005b34801561045757600080fd5b506104606113f1565b60405161046d91906144de565b60405180910390f35b34801561048257600080fd5b5061048b611450565b604051610498919061493b565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c3919061383f565b611456565b6040516104d5919061493b565b60405180910390f35b3480156104ea57600080fd5b50610505600480360381019061050091906137fa565b6114b6565b005b34801561051357600080fd5b5061051c611548565b6040516105299190614477565b60405180910390f35b34801561053e57600080fd5b50610547611572565b005b34801561055557600080fd5b50610570600480360381019061056b919061376c565b61169d565b005b34801561057e57600080fd5b506105996004803603810190610594919061383f565b611873565b6040516105a69190614477565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190613601565b611889565b6040516105e391906144de565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190613601565b6118a9565b604051610620919061493b565b60405180910390f35b34801561063557600080fd5b5061063e611992565b005b34801561064c57600080fd5b50610655611a1a565b6040516106629190614477565b60405180910390f35b34801561067757600080fd5b50610680611a43565b60405161068d91906144f9565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613730565b611ad5565b005b3480156106cb57600080fd5b506106e660048036038101906106e191906136b5565b611c56565b005b3480156106f457600080fd5b5061070f600480360381019061070a919061383f565b611cb2565b60405161071c91906144f9565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190613601565b611d59565b604051610759919061493b565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613601565b611d71565b604051610796919061493b565b60405180910390f35b3480156107ab57600080fd5b506107b4611d89565b6040516107c1919061493b565b60405180910390f35b3480156107d657600080fd5b506107df611d8f565b6040516107ec919061493b565b60405180910390f35b34801561080157600080fd5b5061080a611d95565b604051610817919061493b565b60405180910390f35b34801561082c57600080fd5b506108476004803603810190610842919061362a565b611d9b565b60405161085491906144de565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f9190613601565b611e2f565b005b34801561089257600080fd5b506108ad60048036038101906108a89190613601565b611f27565b005b3480156108bb57600080fd5b506108c4611ffe565b6040516108d1919061493b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0d57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1d5750610a1c82612004565b5b9050919050565b606060058054610a3390614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f90614c90565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b5050505050905090565b6000610ac18261206e565b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906147fb565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4682611873565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906145db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd66120cd565b73ffffffffffffffffffffffffffffffffffffffff161480610c055750610c0481610bff6120cd565b611d9b565b5b610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b9061487b565b60405180910390fd5b610c4f8383836120d5565b505050565b610c5c6120cd565b73ffffffffffffffffffffffffffffffffffffffff16610c7a611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc7906146fb565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600454600354610d3d9190614b60565b905090565b610d4d838383612187565b505050565b610d5a6120cd565b73ffffffffffffffffffffffffffffffffffffffff16610d78611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc5906146fb565b60405180910390fd5b610dd781612740565b50565b60145481565b6002600c541415610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d9061489b565b60405180910390fd5b6002600c819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061477b565b60405180910390fd5b600080339050803b915060008214610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee09061471b565b60405180910390fd5b60008311610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f23906145bb565b60405180910390fd5b6010544211610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906146db565b60405180910390fd5b600d5483610f7c610d2b565b610f869190614a4b565b1115610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe9061459b565b60405180910390fd5b600283111561100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110029061457b565b60405180910390fd5b600283600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110589190614a4b565b1115611099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110909061475b565b60405180910390fd5b611388836110a5610d2b565b6110af9190614a4b565b111561111d5760006701118f178fb48000846110cb9190614ad2565b905080341480156110dc5750600081115b61111b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111129061467b565b60405180910390fd5b505b611127338461284f565b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111729190614a4b565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050506001600c8190555050565b60006111cd836118a9565b821061120e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611205906148bb565b60405180910390fd5b6000611218610d2b565b9050600080600060045490505b600454846112339190614a4b565b811161138f576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461132357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561137b578684141561136c5781955050505050506113cb565b838061137790614cc2565b9450505b50808061138790614cc2565b915050611225565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c29061453b565b60405180910390fd5b92915050565b6113ec83838360405180602001604052806000815250611c56565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114346120cd565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60105481565b6000611460610d2b565b82106114a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611498906147bb565b60405180910390fd5b600454826114af9190614a4b565b9050919050565b6114be6120cd565b73ffffffffffffffffffffffffffffffffffffffff166114dc611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611529906146fb565b60405180910390fd5b8181600e9190611543929190613409565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61157a6120cd565b73ffffffffffffffffffffffffffffffffffffffff16611598611a1a565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906146fb565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161161490614462565b60006040518083038185875af1925050503d8060008114611651576040519150601f19603f3d011682016040523d82523d6000602084013e611656565b606091505b505090508061169a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611691906147db565b60405180910390fd5b50565b6002600c5414156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da9061489b565b60405180910390fd5b6002600c81905550600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906146bb565b60405180910390fd5b600d5481611783610d2b565b61178d9190614a4b565b11156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c59061459b565b60405180910390fd5b60125481601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461181c9190614a4b565b111561185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061491b565b60405180910390fd5b611867828261284f565b6001600c819055505050565b600061187e8261286d565b600001519050919050565b60026020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119119061469b565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61199a6120cd565b73ffffffffffffffffffffffffffffffffffffffff166119b8611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906146fb565b60405180910390fd5b611a186000612a70565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054611a5290614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7e90614c90565b8015611acb5780601f10611aa057610100808354040283529160200191611acb565b820191906000526020600020905b815481529060010190602001808311611aae57829003601f168201915b5050505050905090565b611add6120cd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b429061481b565b60405180910390fd5b80600a6000611b586120cd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c056120cd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4a91906144de565b60405180910390a35050565b611c61848484612187565b611c6d84848484612b34565b611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca3906148db565b60405180910390fd5b50505050565b6060611cbd8261206e565b611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf39061473b565b60405180910390fd5b6000611d06612ccb565b90506000815111611d265760405180602001604052806000815250611d51565b80611d3084612d5d565b604051602001611d4192919061443e565b6040516020818303038152906040525b915050919050565b600f6020528060005260406000206000915090505481565b60136020528060005260406000206000915090505481565b600d5481565b600b5481565b60115481565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e376120cd565b73ffffffffffffffffffffffffffffffffffffffff16611e55611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea2906146fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f129061455b565b60405180910390fd5b611f2481612a70565b50565b611f2f6120cd565b73ffffffffffffffffffffffffffffffffffffffff16611f4d611a1a565b73ffffffffffffffffffffffffffffffffffffffff1614611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a906146fb565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808214156120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa906145fb565b60405180910390fd5b600354821080156120c657506004548210155b9050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121928261286d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121b96120cd565b73ffffffffffffffffffffffffffffffffffffffff16148061221557506121de6120cd565b73ffffffffffffffffffffffffffffffffffffffff166121fd84610ab6565b73ffffffffffffffffffffffffffffffffffffffff16145b806122315750612230826000015161222b6120cd565b611d9b565b5b905080612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a9061461b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc9061483b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c906148fb565b60405180910390fd5b6123628585856001612f0a565b61237260008484600001516120d5565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123e09190614b2c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124849190614a05565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461258a9190614a4b565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126d0576126008161206e565b156126cf576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127388686866001612f10565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a79061463b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612869828260405180602001604052806000815250612f16565b5050565b61287561348f565b61287e8261206e565b6128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b4906145fb565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106129215760017f0000000000000000000000000000000000000000000000000000000000000000846129149190614b60565b61291e9190614a4b565b90505b60008390505b818110612a2f576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a1b57809350505050612a6b565b508080612a2790614c66565b915050612927565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a629061485b565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612b558473ffffffffffffffffffffffffffffffffffffffff166133f6565b15612cbe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b7e6120cd565b8786866040518563ffffffff1660e01b8152600401612ba09493929190614492565b602060405180830381600087803b158015612bba57600080fd5b505af1925050508015612beb57506040513d601f19601f82011682018060405250810190612be891906137d1565b60015b612c6e573d8060008114612c1b576040519150601f19603f3d011682016040523d82523d6000602084013e612c20565b606091505b50600081511415612c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5d906148db565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc3565b600190505b949350505050565b6060600e8054612cda90614c90565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0690614c90565b8015612d535780601f10612d2857610100808354040283529160200191612d53565b820191906000526020600020905b815481529060010190602001808311612d3657829003601f168201915b5050505050905090565b60606000821415612da5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f05565b600082905060005b60008214612dd7578080612dc090614cc2565b915050600a82612dd09190614aa1565b9150612dad565b60008167ffffffffffffffff811115612e19577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e4b5781602001600182028036833780820191505090505b5090505b60008514612efe57600182612e649190614b60565b9150600a85612e739190614d0b565b6030612e7f9190614a4b565b60f81b818381518110612ebb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ef79190614aa1565b9450612e4f565b8093505050505b919050565b50505050565b50505050565b60006003549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f849061465b565b60405180910390fd5b612f968161206e565b15612fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcd9061479b565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130309061451b565b60405180910390fd5b6130466000858386612f0a565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516131439190614a05565b6fffffffffffffffffffffffffffffffff16815260200185836020015161316a9190614a05565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156133d957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133796000888488612b34565b6133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af906148db565b60405180910390fd5b81806133c390614cc2565b92505080806133d190614cc2565b915050613308565b50806003819055506133ee6000878588612f10565b505050505050565b600080823b905060008111915050919050565b82805461341590614c90565b90600052602060002090601f016020900481019282613437576000855561347e565b82601f1061345057803560ff191683800117855561347e565b8280016001018555821561347e579182015b8281111561347d578235825591602001919060010190613462565b5b50905061348b91906134c9565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156134e25760008160009055506001016134ca565b5090565b60006134f96134f484614987565b614956565b90508281526020810184848401111561351157600080fd5b61351c848285614c24565b509392505050565b60008135905061353381614e09565b92915050565b60008135905061354881614e20565b92915050565b60008135905061355d81614e37565b92915050565b60008151905061357281614e37565b92915050565b600082601f83011261358957600080fd5b81356135998482602086016134e6565b91505092915050565b60008083601f8401126135b457600080fd5b8235905067ffffffffffffffff8111156135cd57600080fd5b6020830191508360018202830111156135e557600080fd5b9250929050565b6000813590506135fb81614e4e565b92915050565b60006020828403121561361357600080fd5b600061362184828501613524565b91505092915050565b6000806040838503121561363d57600080fd5b600061364b85828601613524565b925050602061365c85828601613524565b9150509250929050565b60008060006060848603121561367b57600080fd5b600061368986828701613524565b935050602061369a86828701613524565b92505060406136ab868287016135ec565b9150509250925092565b600080600080608085870312156136cb57600080fd5b60006136d987828801613524565b94505060206136ea87828801613524565b93505060406136fb878288016135ec565b925050606085013567ffffffffffffffff81111561371857600080fd5b61372487828801613578565b91505092959194509250565b6000806040838503121561374357600080fd5b600061375185828601613524565b925050602061376285828601613539565b9150509250929050565b6000806040838503121561377f57600080fd5b600061378d85828601613524565b925050602061379e858286016135ec565b9150509250929050565b6000602082840312156137ba57600080fd5b60006137c88482850161354e565b91505092915050565b6000602082840312156137e357600080fd5b60006137f184828501613563565b91505092915050565b6000806020838503121561380d57600080fd5b600083013567ffffffffffffffff81111561382757600080fd5b613833858286016135a2565b92509250509250929050565b60006020828403121561385157600080fd5b600061385f848285016135ec565b91505092915050565b61387181614b94565b82525050565b61388081614ba6565b82525050565b6000613891826149b7565b61389b81856149cd565b93506138ab818560208601614c33565b6138b481614df8565b840191505092915050565b60006138ca826149c2565b6138d481856149e9565b93506138e4818560208601614c33565b6138ed81614df8565b840191505092915050565b6000613903826149c2565b61390d81856149fa565b935061391d818560208601614c33565b80840191505092915050565b60006139366022836149e9565b91507f4552433732314c3a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061399c602e836149e9565b91507f4552433732314c3a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613a026026836149e9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a686005836149e9565b91507f4d617820320000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613aa86012836149e9565b91507f45786365656420746f74616c20636f756e7400000000000000000000000000006000830152602082019050919050565b6000613ae8600b836149e9565b91507f436f756e74206572726f720000000000000000000000000000000000000000006000830152602082019050919050565b6000613b286022836149e9565b91507f4552433732314c3a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b8e602a836149e9565b91507f4552433732314c3a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bf46032836149e9565b91507f4552433732314c3a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613c5a602d836149e9565b91507f6f70657261746f723a207a65726f206164647265737320676976656e20666f7260008301527f206e6577206f70657261746f72000000000000000000000000000000000000006020830152604082019050919050565b6000613cc06021836149e9565b91507f4552433732314c3a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d26601d836149e9565b91507f506f7274696f6e20616d6f756e74206f72207072696365206572726f720000006000830152602082019050919050565b6000613d66602b836149e9565b91507f4552433732314c3a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000613dcc6009836149e9565b91507f4e6f74206d696e657200000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e0c6009836149e9565b91507f4e6f7420737461727400000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e4c6020836149e9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613e8c600c836149e9565b91507f4e6f7420636f6e747261637400000000000000000000000000000000000000006000830152602082019050919050565b6000613ecc602f836149e9565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613f326007836149e9565b91507f4c696d69742032000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f726013836149e9565b91507f43616c6c20697320636f6e7374727563746f72000000000000000000000000006000830152602082019050919050565b6000613fb2601d836149e9565b91507f4552433732314c3a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613ff26000836149de565b9150600082019050919050565b600061400c6023836149e9565b91507f4552433732314c3a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140726010836149e9565b91507f5472616e73666572206661696c65642e000000000000000000000000000000006000830152602082019050919050565b60006140b2602d836149e9565b91507f4552433732314c3a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000614118601a836149e9565b91507f4552433732314c3a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006141586026836149e9565b91507f4552433732314c3a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141be602f836149e9565b91507f4552433732314c3a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006142246039836149e9565b91507f4552433732314c3a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061428a601f836149e9565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006142ca6022836149e9565b91507f4552433732314c3a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143306033836149e9565b91507f4552433732314c3a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006143966025836149e9565b91507f4552433732314c3a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143fc600f836149e9565b91507f4f766572206d617820737570706c7900000000000000000000000000000000006000830152602082019050919050565b61443881614c1a565b82525050565b600061444a82856138f8565b915061445682846138f8565b91508190509392505050565b600061446d82613fe5565b9150819050919050565b600060208201905061448c6000830184613868565b92915050565b60006080820190506144a76000830187613868565b6144b46020830186613868565b6144c1604083018561442f565b81810360608301526144d38184613886565b905095945050505050565b60006020820190506144f36000830184613877565b92915050565b6000602082019050818103600083015261451381846138bf565b905092915050565b6000602082019050818103600083015261453481613929565b9050919050565b600060208201905081810360008301526145548161398f565b9050919050565b60006020820190508181036000830152614574816139f5565b9050919050565b6000602082019050818103600083015261459481613a5b565b9050919050565b600060208201905081810360008301526145b481613a9b565b9050919050565b600060208201905081810360008301526145d481613adb565b9050919050565b600060208201905081810360008301526145f481613b1b565b9050919050565b6000602082019050818103600083015261461481613b81565b9050919050565b6000602082019050818103600083015261463481613be7565b9050919050565b6000602082019050818103600083015261465481613c4d565b9050919050565b6000602082019050818103600083015261467481613cb3565b9050919050565b6000602082019050818103600083015261469481613d19565b9050919050565b600060208201905081810360008301526146b481613d59565b9050919050565b600060208201905081810360008301526146d481613dbf565b9050919050565b600060208201905081810360008301526146f481613dff565b9050919050565b6000602082019050818103600083015261471481613e3f565b9050919050565b6000602082019050818103600083015261473481613e7f565b9050919050565b6000602082019050818103600083015261475481613ebf565b9050919050565b6000602082019050818103600083015261477481613f25565b9050919050565b6000602082019050818103600083015261479481613f65565b9050919050565b600060208201905081810360008301526147b481613fa5565b9050919050565b600060208201905081810360008301526147d481613fff565b9050919050565b600060208201905081810360008301526147f481614065565b9050919050565b60006020820190508181036000830152614814816140a5565b9050919050565b600060208201905081810360008301526148348161410b565b9050919050565b600060208201905081810360008301526148548161414b565b9050919050565b60006020820190508181036000830152614874816141b1565b9050919050565b6000602082019050818103600083015261489481614217565b9050919050565b600060208201905081810360008301526148b48161427d565b9050919050565b600060208201905081810360008301526148d4816142bd565b9050919050565b600060208201905081810360008301526148f481614323565b9050919050565b6000602082019050818103600083015261491481614389565b9050919050565b60006020820190508181036000830152614934816143ef565b9050919050565b6000602082019050614950600083018461442f565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561497d5761497c614dc9565b5b8060405250919050565b600067ffffffffffffffff8211156149a2576149a1614dc9565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a1082614bde565b9150614a1b83614bde565b9250826fffffffffffffffffffffffffffffffff03821115614a4057614a3f614d3c565b5b828201905092915050565b6000614a5682614c1a565b9150614a6183614c1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a9657614a95614d3c565b5b828201905092915050565b6000614aac82614c1a565b9150614ab783614c1a565b925082614ac757614ac6614d6b565b5b828204905092915050565b6000614add82614c1a565b9150614ae883614c1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b2157614b20614d3c565b5b828202905092915050565b6000614b3782614bde565b9150614b4283614bde565b925082821015614b5557614b54614d3c565b5b828203905092915050565b6000614b6b82614c1a565b9150614b7683614c1a565b925082821015614b8957614b88614d3c565b5b828203905092915050565b6000614b9f82614bfa565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c51578082015181840152602081019050614c36565b83811115614c60576000848401525b50505050565b6000614c7182614c1a565b91506000821415614c8557614c84614d3c565b5b600182039050919050565b60006002820490506001821680614ca857607f821691505b60208210811415614cbc57614cbb614d9a565b5b50919050565b6000614ccd82614c1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0057614cff614d3c565b5b600182019050919050565b6000614d1682614c1a565b9150614d2183614c1a565b925082614d3157614d30614d6b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614e1281614b94565b8114614e1d57600080fd5b50565b614e2981614ba6565b8114614e3457600080fd5b50565b614e4081614bb2565b8114614e4b57600080fd5b50565b614e5781614c1a565b8114614e6257600080fd5b5056fea2646970667358221220e5ec101caf983c97a61441e9d9d91c6622608d494b2814a605b1512c64dcc9a264736f6c63430008000033697066733a2f2f516d50795633353777633363736231596d6f4662334a78445a5267484e4e623866326636436a6855557267354a312f