0x60a06040523480156200001157600080fd5b506200001c620000b2565b6200002733620000ff565b62000032816200014f565b50604051620000446020820162000204565b601f19828203810183526000601f9092011690815260208101604090815262000071913091810162000253565b60408051601f198184030181529082905262000091929160200162000297565b60408051601f198184030181529190528051602090910120608052620002ca565b6000806000604051620000c59062000212565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620000f9573d6000803e3d6000fd5b50905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200016581620001fe60201b620008f71760201c565b620001dc5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610a848062001b4483390190565b614a9680620025c883390190565b60005b838110156200023d57818101518382015260200162000223565b838111156200024d576000848401525b50505050565b60018060a01b038316815260406020820152600082518060408401526200028281606085016020870162000220565b601f01601f1916919091016060019392505050565b60008351620002ab81846020880162000220565b835190830190620002c181836020880162000220565b01949350505050565b60805161185e620002e66000396000610698015261185e6000f3fe60806040523480156200001157600080fd5b5060043610620000d95760003560e01c80635c60da1b116200008b578063bec595821162000062578063bec5958214620001ea578063e74b981b1462000201578063f2fde38b146200021857600080fd5b80635c60da1b14620001a2578063715018a614620001c15780638da5cb5b14620001cb57600080fd5b806331f8a7f311620000c057806331f8a7f3146200012d5780633659cfe6146200016a57806346904840146200018157600080fd5b80630e986d7f14620000de5780632ccc552e1462000114575b600080fd5b62000101620000ef36600462000ae1565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6200012b6200012536600462000b25565b6200022f565b005b620001446200013e36600462000bea565b6200037f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016200010b565b6200012b6200017b36600462000c26565b620004ed565b600254620001449073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1662000144565b6200012b620005bf565b60005473ffffffffffffffffffffffffffffffffffffffff1662000144565b62000144620001fb36600462000c46565b62000650565b6200012b6200021236600462000c26565b620006c5565b6200012b6200022936600462000c26565b620007c1565b60005473ffffffffffffffffffffffffffffffffffffffff163314620002b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b8281101562000379576000848483818110620002d957620002d962000c80565b9050602002016020810190620002f0919062000ae1565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000818152600360205260409081902086905551919250907f42cefd6e3811b091d9fd2b2afcc062bae53bc3290e79b6ee03fa8f2f0c1ac49f906200035b9086815260200190565b60405180910390a25080620003708162000caf565b915050620002b9565b50505050565b604080516000808252602082019092523360a085901b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179081903090604051620003cb9062000ad3565b620003d892919062000d10565b8190604051809103906000f5905080158015620003f9573d6000803e3d6000fd5b506040517f485cc95500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301529193509083169063485cc95590604401600060405180830381600087803b1580156200046e57600080fd5b505af115801562000483573d6000803e3d6000fd5b50506040516bffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff80871693508516915033907f59da2778b791ed5f2be380282959631fc07669426505cc411dce116af076d56e9060200160405180910390a45092915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b6200057b81620008fd565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b6200064e6000620009d4565b565b60007fffffffffffffffffffffffff000000000000000000000000000000000000000060a083901b1673ffffffffffffffffffffffffffffffffffffffff841617620006bd817f000000000000000000000000000000000000000000000000000000000000000062000a49565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f6632de8ab33c46549f7bb29f647ea0d751157b25fe6a14b1bcc7527cdfbeb79c9060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002ad565b73ffffffffffffffffffffffffffffffffffffffff8116620008e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620002ad565b620008f481620009d4565b50565b3b151590565b803b6200098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e7472616374000000000000000000000000006064820152608401620002ad565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000905b9392505050565b610a848062000da583390190565b60006020828403121562000af457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811462000acc57600080fd5b60008060006040848603121562000b3b57600080fd5b833567ffffffffffffffff8082111562000b5457600080fd5b818601915086601f83011262000b6957600080fd5b81358181111562000b7957600080fd5b8760208260051b850101111562000b8f57600080fd5b6020928301989097509590910135949350505050565b80356bffffffffffffffffffffffff8116811462000bc257600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114620008f457600080fd5b6000806040838503121562000bfe57600080fd5b62000c098362000ba5565b9150602083013562000c1b8162000bc7565b809150509250929050565b60006020828403121562000c3957600080fd5b813562000acc8162000bc7565b6000806040838503121562000c5a57600080fd5b823562000c678162000bc7565b915062000c776020840162000ba5565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000d09577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b8181101562000d5c5785810183015185820160600152820162000d3e565b8181111562000d6f576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fe608060405260405162000a8438038062000a848339810160408190526200002691620004d4565b6200005360017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d51620005a2565b60008051602062000a3d83398151915214620000735762000073620005c8565b620000818282600062000089565b50506200064f565b62000094836200016e565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a2600082511180620000d65750805b15620001695762000167836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200011a57600080fd5b505afa1580156200012f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001559190620005de565b836200031f60201b620000291760201c565b505b505050565b62000184816200034e60201b620000551760201c565b620001e45760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6200026e816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022257600080fd5b505afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005de565b6200034e60201b620000551760201c565b620002d55760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401620001db565b80620002fe60008051602062000a3d83398151915260001b6200035460201b6200005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b606062000347838360405180606001604052806027815260200162000a5d6027913962000357565b9392505050565b3b151590565b90565b6060833b620003b85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001db565b600080856001600160a01b031685604051620003d59190620005fc565b600060405180830381855af49150503d806000811462000412576040519150601f19603f3d011682016040523d82523d6000602084013e62000417565b606091505b5090925090506200042a82828662000434565b9695505050505050565b606083156200044557508162000347565b825115620004565782518084602001fd5b8160405162461bcd60e51b8152600401620001db91906200061a565b80516001600160a01b03811681146200048a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004c2578181015183820152602001620004a8565b83811115620001675750506000910152565b60008060408385031215620004e857600080fd5b620004f38362000472565b60208401519092506001600160401b03808211156200051157600080fd5b818501915085601f8301126200052657600080fd5b8151818111156200053b576200053b6200048f565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200048f565b816040528281528860208487010111156200058057600080fd5b62000593836020830160208801620004a5565b80955050505050509250929050565b600082821015620005c357634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620005f157600080fd5b620003478262000472565b6000825162000610818460208701620004a5565b9190910192915050565b60208152600082518060208401526200063b816040850160208701620004a5565b601f01601f19169190910160400192915050565b6103de806200065f6000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610120565b565b606061004e838360405180606001604052806027815260200161038260279139610144565b9392505050565b3b151590565b90565b600061009e7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100e357600080fd5b505afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906102ae565b905090565b3660008037600080366000845af43d6000803e80801561013f573d6000f35b3d6000fd5b6060833b6101d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516102019190610314565b600060405180830381855af49150503d806000811461023c576040519150601f19603f3d011682016040523d82523d6000602084013e610241565b606091505b509150915061025182828661025b565b9695505050505050565b6060831561026a57508161004e565b82511561027a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d09190610330565b6000602082840312156102c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461004e57600080fd5b60005b838110156102ff5781810151838201526020016102e7565b8381111561030e576000848401525b50505050565b600082516103268184602087016102e4565b9190910192915050565b602081526000825180602084015261034f8160408501602087016102e4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220cc40463d762d54130ecace4a06e8dae4a0d1c925a882d9104aa13a995affe78c64736f6c63430008090033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208d2eb867ac30809584302d85dbaf8478c6bd7aef2a39145d17354d82568d534d64736f6c63430008090033608060405260405162000a8438038062000a848339810160408190526200002691620004d4565b6200005360017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d51620005a2565b60008051602062000a3d83398151915214620000735762000073620005c8565b620000818282600062000089565b50506200064f565b62000094836200016e565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a2600082511180620000d65750805b15620001695762000167836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200011a57600080fd5b505afa1580156200012f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001559190620005de565b836200031f60201b620000291760201c565b505b505050565b62000184816200034e60201b620000551760201c565b620001e45760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6200026e816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022257600080fd5b505afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005de565b6200034e60201b620000551760201c565b620002d55760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401620001db565b80620002fe60008051602062000a3d83398151915260001b6200035460201b6200005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b606062000347838360405180606001604052806027815260200162000a5d6027913962000357565b9392505050565b3b151590565b90565b6060833b620003b85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001db565b600080856001600160a01b031685604051620003d59190620005fc565b600060405180830381855af49150503d806000811462000412576040519150601f19603f3d011682016040523d82523d6000602084013e62000417565b606091505b5090925090506200042a82828662000434565b9695505050505050565b606083156200044557508162000347565b825115620004565782518084602001fd5b8160405162461bcd60e51b8152600401620001db91906200061a565b80516001600160a01b03811681146200048a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004c2578181015183820152602001620004a8565b83811115620001675750506000910152565b60008060408385031215620004e857600080fd5b620004f38362000472565b60208401519092506001600160401b03808211156200051157600080fd5b818501915085601f8301126200052657600080fd5b8151818111156200053b576200053b6200048f565b604051601f8201601f19908116603f011681019083821181831017156200056657620005666200048f565b816040528281528860208487010111156200058057600080fd5b62000593836020830160208801620004a5565b80955050505050509250929050565b600082821015620005c357634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620005f157600080fd5b620003478262000472565b6000825162000610818460208701620004a5565b9190910192915050565b60208152600082518060208401526200063b816040850160208701620004a5565b601f01601f19169190910160400192915050565b6103de806200065f6000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610120565b565b606061004e838360405180606001604052806027815260200161038260279139610144565b9392505050565b3b151590565b90565b600061009e7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100e357600080fd5b505afa1580156100f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011b91906102ae565b905090565b3660008037600080366000845af43d6000803e80801561013f573d6000f35b3d6000fd5b6060833b6101d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516102019190610314565b600060405180830381855af49150503d806000811461023c576040519150601f19603f3d011682016040523d82523d6000602084013e610241565b606091505b509150915061025182828661025b565b9695505050505050565b6060831561026a57508161004e565b82511561027a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d09190610330565b6000602082840312156102c057600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461004e57600080fd5b60005b838110156102ff5781810151838201526020016102e7565b8381111561030e576000848401525b50505050565b600082516103268184602087016102e4565b9190910192915050565b602081526000825180602084015261034f8160408501602087016102e4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220cc40463d762d54130ecace4a06e8dae4a0d1c925a882d9104aa13a995affe78c64736f6c63430008090033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656460806040523480156200001157600080fd5b5060405162004a9638038062004a968339810160408190526200003491620002e8565b6200003f3362000058565b6001600255620000508282620000aa565b505062000489565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600354610100900460ff1680620000c4575060035460ff16155b6200012d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600354610100900460ff1615801562000150576003805461ffff19166101011790555b60006001600160a01b03831615620001dd57826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019c57600080fd5b505afa158015620001b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d7919062000320565b620001e0565b60125b60ff1690506012811115620002285760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b2103a37b5b2b760991b604482015260640162000124565b62000233846200028a565b600b80546001600160a01b0319166001600160a01b038516179055600019600e556200026181601262000362565b6200026e90600a6200047b565b600f5550801562000285576003805461ff00191690555b505050565b620002958162000058565b506003805462010000600160b01b031916336201000002179055426005556009805460ff19169055670de0b6b3a7640000600a55565b80516001600160a01b0381168114620002e357600080fd5b919050565b60008060408385031215620002fc57600080fd5b6200030783620002cb565b91506200031760208401620002cb565b90509250929050565b6000602082840312156200033357600080fd5b815160ff811681146200034557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156200037757620003776200034c565b500390565b600181815b80851115620003bd578160001904821115620003a157620003a16200034c565b80851615620003af57918102915b93841c939080029062000381565b509250929050565b600082620003d65750600162000475565b81620003e55750600062000475565b8160018114620003fe5760028114620004095762000429565b600191505062000475565b60ff8411156200041d576200041d6200034c565b50506001821b62000475565b5060208310610133831016604e8410600b84101617156200044e575081810a62000475565b6200045a83836200037c565b80600019048211156200047157620004716200034c565b0290505b92915050565b6000620003458383620003c5565b6145fd80620004996000396000f3fe6080604052600436106102ba5760003560e01c806388e271b61161016e578063cc7a262e116100cb578063e72f6e301161007f578063f2fde38b11610064578063f2fde38b146107ac578063f51e181a146107cc578063f8077fae146107e257600080fd5b8063e72f6e3014610784578063e9fad8ee146107a457600080fd5b8063dd467064116100b0578063dd46706414610724578063dfe138a614610744578063e6ab48541461076e57600080fd5b8063cc7a262e146106ef578063db2e21bc1461071c57600080fd5b80639ced7e7611610122578063c3bfeb5311610107578063c3bfeb531461062d578063c45a01551461065a578063cbecf6b51461068d57600080fd5b80639ced7e76146105f8578063abb06b951461061857600080fd5b80638ed955b9116101535780638ed955b9146105bd57806395b881de146105c55780639a408321146105e557600080fd5b806388e271b6146105725780638da5cb5b1461059257600080fd5b8063485cc9551161021c57806366993646116101d05780636eef7a78116101b55780636eef7a78146105275780636f2c590a14610547578063715018a61461055d57600080fd5b806366993646146104955780636bd3b87c146104d057600080fd5b80635b9f0016116102015780635b9f00161461044e5780635d0cde97146104645780635f3b443a1461047957600080fd5b8063485cc955146103e9578063509b6c3f1461040957600080fd5b80633355ffac116102735780633a98ef39116102585780633a98ef39146103865780633d509c971461039c57806343dcbe69146103bc57600080fd5b80633355ffac1461035357806338d074361461037357600080fd5b806307c4e48b116102a457806307c4e48b1461030a5780630e5c011e146103205780631c03e6cc1461033357600080fd5b806206c617146102bf578063043063bc146102e1575b600080fd5b3480156102cb57600080fd5b506102df6102da3660046140ae565b6107f8565b005b3480156102ed57600080fd5b506102f761016d81565b6040519081526020015b60405180910390f35b34801561031657600080fd5b506102f7600d5481565b6102df61032e3660046140da565b61096a565b34801561033f57600080fd5b506102df61034e3660046140da565b610c04565b34801561035f57600080fd5b506102df61036e3660046140f7565b610e4c565b6102df610381366004614127565b611000565b34801561039257600080fd5b506102f760045481565b3480156103a857600080fd5b506102df6103b73660046140da565b611425565b3480156103c857600080fd5b506102f76103d73660046140da565b60086020526000908152604090205481565b3480156103f557600080fd5b506102df610404366004614157565b611731565b34801561041557600080fd5b50610429610424366004614185565b6119e4565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b34801561045a57600080fd5b506102f7600c5481565b34801561047057600080fd5b506102f7600a81565b34801561048557600080fd5b506102f7670de0b6b3a764000081565b3480156104a157600080fd5b506104b56104b0366004614157565b611a1b565b60408051825181526020928301519281019290925201610301565b3480156104dc57600080fd5b5061050c6104eb3660046140da565b60006020819052908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610301565b34801561053357600080fd5b506102df61054236600461419e565b611a7b565b34801561055357600080fd5b506102f7600a5481565b34801561056957600080fd5b506102df611b82565b34801561057e57600080fd5b506102df61058d3660046140ae565b611c0f565b34801561059e57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff16610429565b6102df611e11565b3480156105d157600080fd5b506102f76105e03660046140da565b612055565b6102df6105f3366004614127565b61209b565b34801561060457600080fd5b506102f7610613366004614157565b612446565b34801561062457600080fd5b506006546102f7565b34801561063957600080fd5b506102f76106483660046140da565b60106020526000908152604090205481565b34801561066657600080fd5b506003546104299062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561069957600080fd5b506106cf6106a83660046140da565b60076020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610301565b3480156106fb57600080fd5b50600b546104299073ffffffffffffffffffffffffffffffffffffffff1681565b6102df612591565b34801561073057600080fd5b506102df61073f366004614185565b61286d565b34801561075057600080fd5b5060095461075e9060ff1681565b6040519015158152602001610301565b34801561077a57600080fd5b506102f7600e5481565b34801561079057600080fd5b506102f761079f3660046140da565b6129b6565b6102df612b38565b3480156107b857600080fd5b506102df6107c73660046140da565b612e0a565b3480156107d857600080fd5b506102f7600f5481565b3480156107ee57600080fd5b506102f760055481565b60015473ffffffffffffffffffffffffffffffffffffffff16331461087e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610886612f3a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604090208054610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f756e6b6e6f776e20746f6b656e000000000000000000000000000000000000006044820152606401610875565b6002810182905560405182815273ffffffffffffffffffffffffffffffffffffffff8416907f1db4bb723cb902ca89ee9de44648632638ceb6623dcfa7366a851881852300d49060200160405180910390a2505050565b6002805414156109d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b600280556000806109e736826141bb565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b158015610a7d57600080fd5b505afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab59190614203565b9050610ac1818461424b565b3414610b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610875565b8015610bef57610bef81600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b505afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190614263565b73ffffffffffffffffffffffffffffffffffffffff169061307c565b5050610bfb33836131d6565b50506001600255565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b610c8d612f3a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600760205260409020805415610d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6475706c696361746520746f6b656e00000000000000000000000000000000006044820152606401610875565b600654600a8110610d88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6c696d69742072656163686564000000000000000000000000000000000000006044820152606401610875565b60068054600180820183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055610e0490829061424b565b825560405173ffffffffffffffffffffffffffffffffffffffff8416907f851bbb4304bf0768ed98b97e429b5bd1dcc1f194b36cd1650f40293e951ae39390600090a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ecd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b80821115610f37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c6964206c696d6974730000000000000000000000000000000000006044820152606401610875565b600c5415610fb957600d548211158015610f53575080600e5411155b610fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e657870616e646564206c696d6974730000000000000000000000000000006044820152606401610875565b600d829055600e81905560408051838152602081018390527f7b0e4f7d04c9ce35dcb1e1370d62110185eb169c88452622c70f96d78a3cad3f910160405180910390a15050565b60028054141561106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b6002805560008061107d36826141bb565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b15801561111357600080fd5b505afa158015611127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114b9190614203565b9050611157818461424b565b34146111bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610875565b80156112315761123181600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b505081156112425761124233613227565b600061124d336132b7565b336000908152601060205260409020805491925090808611156112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610875565b60006112d88783614280565b9050801561135a5780600d54111580156112f45750600e548111155b61135a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642062616c616e636500000000000000000000000000000000006044820152606401610875565b861561139f57808355600b546113879073ffffffffffffffffffffffffffffffffffffffff163389613391565b86600c60008282546113999190614280565b90915550505b60405187815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a26000600f54886113e49190614297565b905061141633670de0b6b3a76400006113fd8885614297565b6114079190614303565b611411908461424b565b613465565b50506001600255505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b6114ae612f3a565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260076020526040902080548061153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f756e6b6e6f776e20746f6b656e000000000000000000000000000000000000006044820152606401610875565b6001820154156115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f70656e64696e67207265776172640000000000000000000000000000000000006044820152606401610875565b60008083556002830181905560038301556006548082101561168157600060066115d3600184614280565b815481106115e3576115e3614317565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600790915260409091208490559050806006611627600186614280565b8154811061163757611637614317565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b600680548061169257611692614346565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560405173ffffffffffffffffffffffffffffffffffffffff8616917f36bd04094fa067bb9471a8fbdb0a6e8a43424a2566ad3a740c88973fa40a311891a250505050565b600354610100900460ff168061174a575060035460ff16155b6117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610875565b600354610100900460ff1615801561181557600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600073ffffffffffffffffffffffffffffffffffffffff8316156118b6578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561187957600080fd5b505afa15801561188d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b19190614375565b6118b9565b60125b60ff1690506012811115611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610875565b611932846134ea565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e556119a1816012614280565b6119ac90600a6144b8565b600f555080156119df57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050565b600681815481106119f457600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040805180820182526000808252602091820181905273ffffffffffffffffffffffffffffffffffffffff858116825260088352838220908516825260019081018352908390208351808501909452805484520154908201525b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b611b04612f3a565b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682151517905580611b4357670de0b6b3a7640000611b47565b6004545b600a5560405181151581527f3070602ec40a9344ebb1e5efa4731dc84be5f7b23bbe1ee962a966176e696bbf9060200160405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b611c0d600061355d565b565b60015473ffffffffffffffffffffffffffffffffffffffff163314611c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b600280541415611cfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b60028055611d08612f3a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526007602052604090208054611d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f756e6b6e6f776e20746f6b656e000000000000000000000000000000000000006044820152606401610875565b611db773ffffffffffffffffffffffffffffffffffffffff84163330856135d4565b8273ffffffffffffffffffffffffffffffffffffffff167f2386108be9237e6cebb631ec77ea4474231e519e0b4963993a76350110b0117383604051611dff91815260200190565b60405180910390a25050600160025550565b600280541415611e7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b60028055600080611e8e36826141bb565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b158015611f2457600080fd5b505afa158015611f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5c9190614203565b9050611f68818461424b565b3414611fd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610875565b80156120425761204281600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b505061204d33613227565b506001600255565b600061206082613632565b600b5490915073ffffffffffffffffffffffffffffffffffffffff8381169116141561209657600c546120939082614280565b90505b919050565b600280541415612107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b6002805560008061211836826141bb565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b1580156121ae57600080fd5b505afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e69190614203565b90506121f2818461424b565b341461225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610875565b80156122cc576122cc81600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b505081156122dd576122dd33613227565b336000908152601060205260408120805490916122fa868361424b565b9050801561237c5780600d54111580156123165750600e548111155b61237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642062616c616e636500000000000000000000000000000000006044820152606401610875565b85156123c257808355600b546123aa9073ffffffffffffffffffffffffffffffffffffffff163330896135d4565b85600c60008282546123bc919061424b565b90915550505b60405186815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2600061240233613708565b90506000600f54886124149190614297565b905061141633670de0b6b3a764000061242d8585614297565b6124379190614303565b612441908461424b565b61374a565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260076020526040812060038101546005544211156125115760045415612511576000670de0b6b3a7640000600a548460020154600554426124a39190614280565b6124ad9190614297565b6124b79190614297565b6124c19190614303565b905060006124ce86612055565b9050808211156124dc578091505b811561250e576004546124f783670de0b6b3a7640000614297565b6125019190614303565b61250b908461424b565b92505b50505b73ffffffffffffffffffffffffffffffffffffffff808616600090815260086020908152604080832093881683526001808501909252909120908101548254670de0b6b3a76400009190612566908690614297565b6125709190614280565b61257a9190614303565b8154612586919061424b565b979650505050505050565b6002805414156125fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b6002805560008061260e36826141bb565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b1580156126a457600080fd5b505afa1580156126b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dc9190614203565b90506126e8818461424b565b3414612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610875565b80156127c2576127c281600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b50506127cd336132b7565b50336000908152601060205260409020805480156128255760008255600b5461280d9073ffffffffffffffffffffffffffffffffffffffff163383613391565b80600c600082825461281f9190614280565b90915550505b60405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96959060200160405180910390a2612863336137b0565b5050600160025550565b6002805414156128d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b600280556000806128ea3384613818565b33600081815260086020908152604091829020805483518a81529283018690529597509395509293927f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b910160405180910390a260008111801561294e5750828414155b156129aa576129aa33670de0b6b3a764000061296a8785614297565b6129749190614303565b61297e908461424b565b670de0b6b3a76400006129918786614297565b61299b9190614303565b6129a5908561424b565b6139f1565b50506001600255505050565b60015460009073ffffffffffffffffffffffffffffffffffffffff163314612a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b600280541415612aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b60028055612ab2612f3a565b612abb82612055565b9050612ade73ffffffffffffffffffffffffffffffffffffffff83163383613391565b8173ffffffffffffffffffffffffffffffffffffffff167f4ba2f3b044735356db52c2c595cfedd05fa9d53ba8ae3c34bbe10a7096e1888d82604051612b2691815260200190565b60405180910390a26001600255919050565b600280541415612ba4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610875565b60028055600080612bb536826141bb565b6003546040517f0e986d7f0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000831660048201529192506000916201000090910473ffffffffffffffffffffffffffffffffffffffff1690630e986d7f9060240160206040518083038186803b158015612c4b57600080fd5b505afa158015612c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c839190614203565b9050612c8f818461424b565b3414612cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c69642076616c7565000000000000000000000000000000000000006044820152606401610875565b8015612d6957612d6981600360029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9b57600080fd5b5050612d74336132b7565b5033600090815260106020526040902080548015612dcc5760008255600b54612db49073ffffffffffffffffffffffffffffffffffffffff163383613391565b80600c6000828254612dc69190614280565b90915550505b60405181815233907f22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b2996319060200160405180910390a261286333613a85565b60015473ffffffffffffffffffffffffffffffffffffffff163314612e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610875565b73ffffffffffffffffffffffffffffffffffffffff8116612f2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610875565b612f378161355d565b50565b600554421115611c0d576004541561307657600060055442612f5c9190614280565b60065490915060005b8181101561307257600060068281548110612f8257612f82614317565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600790915260408220600a546002820154929450909291670de0b6b3a76400009190612fd59089614297565b612fdf9190614297565b612fe99190614303565b90506000612ff684612055565b905080821115613004578091505b811561305b578183600101600082825461301e919061424b565b909155505060045461303883670de0b6b3a7640000614297565b6130429190614303565b836003016000828254613055919061424b565b90915550505b50505050808061306a906144c4565b915050612f65565b5050505b42600555565b804710156130e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610875565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613140576040519150601f19603f3d011682016040523d82523d6000602084013e613145565b606091505b50509050806119df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610875565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600860205260409020805480156132165761320b612f3a565b613216828283613afe565b613221848385613bd4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020805480156132675761325c612f3a565b613267828283613afe565b6132718383613cd5565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f951da9d56bc4c88666815902e196576135a88dc5bdbcc4e8511e2054f61a152490600090a2505050565b6000806132c76201518042614303565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090206001810154919250908015613385578154808411801561331d575061331182826144fd565b61331b83866144fd565b145b613383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6e6f7420617661696c61626c65000000000000000000000000000000000000006044820152606401610875565b505b50600201549392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526119df9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613d34565b80156134e65773ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604081208054909161349e8483614280565b90506134a8612f3a565b6134b3838383613afe565b808355600480548591906000906134cb908490614280565b909155505060095460ff16156134e257600454600a555b5050505b5050565b6134f38161355d565b50600380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1633620100000217905542600555600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055670de0b6b3a7640000600a55565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526132219085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016133e3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a082319060240160206040518083038186803b15801561369a57600080fd5b505afa1580156136ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d29190614203565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600760205260409020600101549091506120939082614280565b6000806137186201518042614303565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092835550506002015490565b80156134e65773ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040812080549091613783848361424b565b905061378d612f3a565b613798838383613afe565b808355600480548591906000906134cb90849061424b565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020805480156119df576137e682613e40565b6000808355600480548392906137fd908490614280565b909155505060095460ff16156119df57600454600a55505050565b600080806138296201518042614303565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902060018101549192509080861015613945578154600061386d83836144fd565b9050600061387b84876144fd565b905060008282116138bb578282106138a15786841061389b5760006138c5565b846138c5565b826138ac868461424b565b6138b69190614280565b6138c5565b6138c58383614280565b905060006138d38287614280565b9050808b101561393f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f62656c6f77206d696e696d756d000000000000000000000000000000000000006044820152606401610875565b50505050505b61016d8611156139b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f61626f7665206d6178696d756d000000000000000000000000000000000000006044820152606401610875565b6002820154945061016d6139cd87670de0b6b3a7640000614297565b6139d79190614303565b928255506001810185905560020181905590509250929050565b8082146119df5773ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081208054909183613a2c8684614280565b613a36919061424b565b9050613a40612f3a565b613a4b838383613afe565b8083556004548490613a5e908790614280565b613a68919061424b565b60045560095460ff1615613a7d57600454600a555b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020526040902080548015613af457613aba612f3a565b613ac682826000613afe565b600080835560048054839290613add908490614280565b909155505060095460ff1615613af457600454600a555b6119df8383613cd5565b60065460005b818110156134e257600060068281548110613b2157613b21614317565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168083526007825260408084206003015460018b01909352909220919250908615613baf576001810154670de0b6b3a764000090613b82848a614297565b613b8c9190614280565b613b969190614303565b816000016000828254613ba9919061424b565b90915550505b613bb98287614297565b60019091015550819050613bcc816144c4565b915050613b04565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260409020805480156134e25760008255613c2873ffffffffffffffffffffffffffffffffffffffff84168683613391565b73ffffffffffffffffffffffffffffffffffffffff831660009081526007602052604081206001018054839290613c60908490614280565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fa0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec2679783604051613cc691815260200190565b60405180910390a35050505050565b60065460005b8181101561322157613d22848460068481548110613cfb57613cfb614317565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16613bd4565b80613d2c816144c4565b915050613cdb565b6000613d96826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613eb09092919063ffffffff16565b8051909150156119df5780806020019051810190613db49190614511565b6119df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610875565b60065460005b818110156119df57600083600101600060068481548110613e6957613e69614317565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190206001015580613ea8816144c4565b915050613e46565b6060613ebf8484600085613ec9565b90505b9392505050565b606082471015613f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610875565b843b613fc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610875565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613fec919061455a565b60006040518083038185875af1925050503d8060008114614029576040519150601f19603f3d011682016040523d82523d6000602084013e61402e565b606091505b509150915061258682828660608315614048575081613ec2565b8251156140585782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108759190614576565b73ffffffffffffffffffffffffffffffffffffffff81168114612f3757600080fd5b600080604083850312156140c157600080fd5b82356140cc8161408c565b946020939093013593505050565b6000602082840312156140ec57600080fd5b8135613ec28161408c565b6000806040838503121561410a57600080fd5b50508035926020909101359150565b8015158114612f3757600080fd5b6000806040838503121561413a57600080fd5b82359150602083013561414c81614119565b809150509250929050565b6000806040838503121561416a57600080fd5b82356141758161408c565b9150602083013561414c8161408c565b60006020828403121561419757600080fd5b5035919050565b6000602082840312156141b057600080fd5b8135613ec281614119565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156141fb5780818660040360031b1b83161692505b505092915050565b60006020828403121561421557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561425e5761425e61421c565b500190565b60006020828403121561427557600080fd5b8151613ec28161408c565b6000828210156142925761429261421c565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142cf576142cf61421c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614312576143126142d4565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006020828403121561438757600080fd5b815160ff81168114613ec257600080fd5b600181815b808511156143f157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156143d7576143d761421c565b808516156143e457918102915b93841c939080029061439d565b509250929050565b60008261440857506001611a75565b8161441557506000611a75565b816001811461442b576002811461443557614451565b6001915050611a75565b60ff8411156144465761444661421c565b50506001821b611a75565b5060208310610133831016604e8410600b8410161715614474575081810a611a75565b61447e8383614398565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156144b0576144b061421c565b029392505050565b6000613ec283836143f9565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144f6576144f661421c565b5060010190565b60008261450c5761450c6142d4565b500690565b60006020828403121561452357600080fd5b8151613ec281614119565b60005b83811015614549578181015183820152602001614531565b838111156132215750506000910152565b6000825161456c81846020870161452e565b9190910192915050565b602081526000825180602084015261459581604085016020870161452e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a5470bacac2d6a7636c327c4d6b6697bbf3fa24927a2ebb1404ee25a41516a0664736f6c63430008090033