0x60806040523480156200001157600080fd5b5060405162002a2838038062002a288339810160408190526200003491620001b3565b83836000620000448382620002fb565b506001620000538282620002fb565b505050620000706200006a6200009860201b60201c565b6200009c565b600b6200007e8382620002fb565b50600c6200008d8282620002fb565b5050505050620003c7565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200011657600080fd5b81516001600160401b0380821115620001335762000133620000ee565b604051601f8301601f19908116603f011681019082821181831017156200015e576200015e620000ee565b816040528381526020925086838588010111156200017b57600080fd5b600091505b838210156200019f578582018301518183018401529082019062000180565b600093810190920192909252949350505050565b60008060008060808587031215620001ca57600080fd5b84516001600160401b0380821115620001e257600080fd5b620001f08883890162000104565b955060208701519150808211156200020757600080fd5b620002158883890162000104565b945060408701519150808211156200022c57600080fd5b6200023a8883890162000104565b935060608701519150808211156200025157600080fd5b50620002608782880162000104565b91505092959194509250565b600181811c908216806200028157607f821691505b602082108103620002a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f657600081815260208120601f850160051c81016020861015620002d15750805b601f850160051c820191505b81811015620002f257828155600101620002dd565b5050505b505050565b81516001600160401b03811115620003175762000317620000ee565b6200032f816200032884546200026c565b84620002a8565b602080601f8311600181146200036757600084156200034e5750858301515b600019600386901b1c1916600185901b178555620002f2565b600085815260208120601f198616915b82811015620003985788860151825594840194600190910190840162000377565b5085821015620003b75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61265180620003d76000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80636352211e116100e3578063a22cb4651161008c578063d547cfb711610066578063d547cfb714610353578063e985e9c51461035b578063f2fde38b146103a457600080fd5b8063a22cb4651461031a578063b88d4fde1461032d578063c87b56dd1461034057600080fd5b8063715018a6116100bd578063715018a6146102ec5780638da5cb5b146102f457806395d89b411461031257600080fd5b80636352211e146102b35780636a627842146102c657806370a08231146102d957600080fd5b80632f745c591161014557806343e48fa51161011f57806343e48fa5146102855780634f6ccce71461028d578063582f21eb146102a057600080fd5b80632f745c591461024c57806330176e131461025f57806342842e0e1461027257600080fd5b8063095ea7b311610176578063095ea7b31461021257806318160ddd1461022757806323b872dd1461023957600080fd5b806301ffc9a71461019d57806306fdde03146101c5578063081812fc146101da575b600080fd5b6101b06101ab366004611fc0565b6103b7565b60405190151581526020015b60405180910390f35b6101cd6103c8565b6040516101bc919061204b565b6101ed6101e836600461205e565b61045a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b6102256102203660046120a0565b61048e565b005b6008545b6040519081526020016101bc565b6102256102473660046120ca565b61061f565b61022b61025a3660046120a0565b6106c0565b61022561026d3660046121c9565b61078f565b6102256102803660046120ca565b6107a7565b6101cd6107c2565b61022b61029b36600461205e565b610850565b6102256102ae3660046121c9565b61090e565b6101ed6102c136600461205e565b610922565b6102256102d4366004612212565b6109ae565b61022b6102e7366004612212565b6109d6565b610225610aa4565b600a5473ffffffffffffffffffffffffffffffffffffffff166101ed565b6101cd610ab8565b61022561032836600461222d565b610ac7565b61022561033b366004612269565b610ad2565b6101cd61034e36600461205e565b610b7a565b6101cd610c3a565b6101b06103693660046122e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102256103b2366004612212565b610c47565b60006103c282610cfb565b92915050565b6060600080546103d790612318565b80601f016020809104026020016040519081016040528092919081815260200182805461040390612318565b80156104505780601f1061042557610100808354040283529160200191610450565b820191906000526020600020905b81548152906001019060200180831161043357829003601f168201915b5050505050905090565b600061046582610d51565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061049982610922565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361055b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061058457506105848133610369565b610610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610552565b61061a8383610ddc565b505050565b6106293382610e7c565b6106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610552565b61061a838383610f3c565b60006106cb836109d6565b8210610759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610552565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b610797611244565b600b6107a382826123b9565b5050565b61061a83838360405180602001604052806000815250610ad2565b600c80546107cf90612318565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90612318565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b505050505081565b600061085b60085490565b82106108e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610552565b600882815481106108fc576108fc6124d3565b90600052602060002001549050919050565b610916611244565b600c6107a382826123b9565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610552565b6109b6611244565b6109d3816109c360085490565b6109ce906001612531565b6112c5565b50565b600073ffffffffffffffffffffffffffffffffffffffff8216610a7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610552565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b610aac611244565b610ab660006114f8565b565b6060600180546103d790612318565b6107a333838361156f565b610adc3383610e7c565b610b68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610552565b610b748484848461169c565b50505050565b6060610b8582610d51565b6000600c8054610b9490612318565b905011610ba957610ba48261173f565b6103c2565b600c8054610bb690612318565b80601f0160208091040260200160405190810160405280929190818152602001828054610be290612318565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b505050505092915050565b600b80546107cf90612318565b610c4f611244565b73ffffffffffffffffffffffffffffffffffffffff8116610cf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610552565b6109d3816114f8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806103c257506103c2826117a6565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff166109d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610552565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610e3682610922565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610e8883610922565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610ef6575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b80610f3457508373ffffffffffffffffffffffffffffffffffffffff16610f1c8461045a565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610f5c82610922565b73ffffffffffffffffffffffffffffffffffffffff1614610fff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610552565b73ffffffffffffffffffffffffffffffffffffffff82166110a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610552565b6110ae8383836001611889565b8273ffffffffffffffffffffffffffffffffffffffff166110ce82610922565b73ffffffffffffffffffffffffffffffffffffffff1614611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610552565b600081815260046020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610552565b73ffffffffffffffffffffffffffffffffffffffff8216611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610552565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156113ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610552565b6113dc600083836001611889565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610552565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610552565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6116a7848484610f3c565b6116b384848484611895565b610b74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610552565b606061174a82610d51565b6000611754611a88565b90506000815111611774576040518060200160405280600081525061179f565b8061177e84611a97565b60405160200161178f929190612544565b6040516020818303038152906040525b9392505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061183957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806103c257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146103c2565b610b7484848484611b55565b600073ffffffffffffffffffffffffffffffffffffffff84163b15611a7d576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061190c903390899088908890600401612573565b6020604051808303816000875af1925050508015611965575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611962918101906125bc565b60015b611a32573d808015611993576040519150601f19603f3d011682016040523d82523d6000602084013e611998565b606091505b508051600003611a2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610552565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610f34565b506001949350505050565b6060600b80546103d790612318565b60606000611aa483611cf9565b600101905060008167ffffffffffffffff811115611ac457611ac4612106565b6040519080825280601f01601f191660200182016040528015611aee576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611af857509392505050565b6001811115611be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610552565b8173ffffffffffffffffffffffffffffffffffffffff8516611c4f57611c4a81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c8c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611c8c57611c8c8582611ddb565b73ffffffffffffffffffffffffffffffffffffffff8416611cb557611cb081611e92565b611cf2565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611cf257611cf28482611f41565b5050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d42577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611d6e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611d8c57662386f26fc10000830492506010015b6305f5e1008310611da4576305f5e100830492506008015b6127108310611db857612710830492506004015b60648310611dca576064830492506002015b600a83106103c25760010192915050565b60006001611de8846109d6565b611df291906125d9565b600083815260076020526040902054909150808214611e525773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b600854600090611ea4906001906125d9565b60008381526009602052604081205460088054939450909284908110611ecc57611ecc6124d3565b906000526020600020015490508060088381548110611eed57611eed6124d3565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f2557611f256125ec565b6001900381819060005260206000200160009055905550505050565b6000611f4c836109d6565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146109d357600080fd5b600060208284031215611fd257600080fd5b813561179f81611f92565b60005b83811015611ff8578181015183820152602001611fe0565b50506000910152565b60008151808452612019816020860160208601611fdd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061179f6020830184612001565b60006020828403121561207057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461209b57600080fd5b919050565b600080604083850312156120b357600080fd5b6120bc83612077565b946020939093013593505050565b6000806000606084860312156120df57600080fd5b6120e884612077565b92506120f660208501612077565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561215057612150612106565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561219657612196612106565b816040528093508581528686860111156121af57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156121db57600080fd5b813567ffffffffffffffff8111156121f257600080fd5b8201601f8101841361220357600080fd5b610f3484823560208401612135565b60006020828403121561222457600080fd5b61179f82612077565b6000806040838503121561224057600080fd5b61224983612077565b91506020830135801515811461225e57600080fd5b809150509250929050565b6000806000806080858703121561227f57600080fd5b61228885612077565b935061229660208601612077565b925060408501359150606085013567ffffffffffffffff8111156122b957600080fd5b8501601f810187136122ca57600080fd5b6122d987823560208401612135565b91505092959194509250565b600080604083850312156122f857600080fd5b61230183612077565b915061230f60208401612077565b90509250929050565b600181811c9082168061232c57607f821691505b602082108103612365577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561061a57600081815260208120601f850160051c810160208610156123925750805b601f850160051c820191505b818110156123b15782815560010161239e565b505050505050565b815167ffffffffffffffff8111156123d3576123d3612106565b6123e7816123e18454612318565b8461236b565b602080601f83116001811461243a57600084156124045750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556123b1565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561248757888601518255948401946001909101908401612468565b50858210156124c357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103c2576103c2612502565b60008351612556818460208801611fdd565b83519083019061256a818360208801611fdd565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526125b26080830184612001565b9695505050505050565b6000602082840312156125ce57600080fd5b815161179f81611f92565b818103818111156103c2576103c2612502565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220ce2637d8ca46dd35375f15f57691d5d615ea580d79708e6533cfb04ab0650d3964736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000f5a6b65766d446576656c6f706572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000645564d4465760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087465737474657374000000000000000000000000000000000000000000000000