60806040523480156200001157600080fd5b506040516200220e3803806200220e833981016040819052620000349162000175565b6200003f3362000067565b6200004a3362000067565b80516200005f906004906020840190620000b9565b50506200028e565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000c79062000251565b90600052602060002090601f016020900481019282620000eb576000855562000136565b82601f106200010657805160ff191683800117855562000136565b8280016001018555821562000136579182015b828111156200013657825182559160200191906001019062000119565b506200014492915062000148565b5090565b5b8082111562000144576000815560010162000149565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200018957600080fd5b82516001600160401b0380821115620001a157600080fd5b818501915085601f830112620001b657600080fd5b815181811115620001cb57620001cb6200015f565b604051601f8201601f19908116603f01168101908382118183101715620001f657620001f66200015f565b8160405282815288868487010111156200020f57600080fd5b600093505b8284101562000233578484018601518185018701529285019262000214565b82841115620002455760008684830101525b98975050505050505050565b600181811c908216806200026657607f821691505b602082108114156200028857634e487b7160e01b600052602260045260246000fd5b50919050565b611f70806200029e6000396000f3fe608060405234801561001057600080fd5b506004361061011a5760003560e01c8063731133e9116100b2578063b48ab8b611610081578063f242432a11610066578063f242432a14610295578063f2fde38b146102a8578063f46eccc4146102bb57600080fd5b8063b48ab8b614610254578063e985e9c51461026757600080fd5b8063731133e9146102005780638da5cb5b14610213578063983b2d561461022e578063a22cb4651461024157600080fd5b80632eb2c2d6116100ee5780632eb2c2d6146101b25780633092afd5146101c55780634e1273f4146101d8578063715018a6146101f857600080fd5b8062fdd58e1461011f57806301ffc9a71461015a57806302fe53051461017d5780630e89341c14610192575b600080fd5b61014761012d366004611531565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b61016d610168366004611589565b6102de565b6040519015158152602001610151565b61019061018b3660046116a1565b6103c3565b005b6101a56101a03660046116f2565b610439565b6040516101519190611776565b6101906101c0366004611817565b6104cd565b6101906101d33660046118d2565b6107fd565b6101eb6101e63660046118ed565b6108be565b6040516101519190611994565b610190610a01565b61019061020e3660046119c7565b610a67565b6002546040516001600160a01b039091168152602001610151565b61019061023c3660046118d2565b610ad8565b61019061024f366004611a28565b610b9c565b610190610262366004611ae4565b610c26565b61016d610275366004611b71565b600160209081526000928352604080842090915290825290205460ff1681565b6101906102a3366004611ba4565b610c91565b6101906102b63660046118d2565b610f0a565b61016d6102c93660046118d2565b60036020526000908152604090205460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061037157507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806103bd57507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6002546001600160a01b031633146104225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805161043590600490602084019061147c565b5050565b60606004805461044890611c1c565b80601f016020809104026020016040519081016040528092919081815260200182805461047490611c1c565b80156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b50505050509050919050565b84831461051c5760405162461bcd60e51b815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610419565b336001600160a01b038916148061055657506001600160a01b038816600090815260016020908152604080832033845290915290205460ff165b6105a25760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610419565b60008060005b8781101561065d578888828181106105c2576105c2611c70565b9050602002013592508686828181106105dd576105dd611c70565b6001600160a01b038e166000908152602081815260408083208984528252822080549390910294909401359550859392509061061a908490611cce565b90915550506001600160a01b038a1660009081526020818152604080832086845290915281208054849290610650908490611ce5565b90915550506001016105a8565b50886001600160a01b03168a6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516106b19493929190611d4c565b60405180910390a46001600160a01b0389163b15610798576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b038b169063bc197c819061071e9033908f908e908e908e908e908e908e90600401611dbc565b602060405180830381600087803b15801561073857600080fd5b505af115801561074c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107709190611e20565b7fffffffff0000000000000000000000000000000000000000000000000000000016146107a5565b6001600160a01b03891615155b6107f15760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610419565b50505050505050505050565b6002546001600160a01b031633146108575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610419565b6001600160a01b03811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b606083821461090f5760405162461bcd60e51b815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610419565b8367ffffffffffffffff811115610928576109286115ad565b604051908082528060200260200182016040528015610951578160200160208202803683370190505b50905060005b848110156109f85760008087878481811061097457610974611c70565b905060200201602081019061098991906118d2565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008585848181106109bd576109bd611c70565b905060200201358152602001908152602001600020548282815181106109e5576109e5611c70565b6020908102919091010152600101610957565b50949350505050565b6002546001600160a01b03163314610a5b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610419565b610a656000610fec565b565b3360009081526003602052604090205460ff16610ac65760405162461bcd60e51b815260206004820152600c60248201527f4e6f742061206d696e74657200000000000000000000000000000000000000006044820152606401610419565b610ad284848484611056565b50505050565b6002546001600160a01b03163314610b325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610419565b6001600160a01b03811660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b3360008181526001602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526003602052604090205460ff16610c855760405162461bcd60e51b815260206004820152600c60248201527f4e6f742061206d696e74657200000000000000000000000000000000000000006044820152606401610419565b610ad284848484611208565b336001600160a01b0387161480610ccb57506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b610d175760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610419565b6001600160a01b03861660009081526020818152604080832087845290915281208054859290610d48908490611cce565b90915550506001600160a01b03851660009081526020818152604080832087845290915281208054859290610d7e908490611ce5565b909155505060408051858152602081018590526001600160a01b03808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0385163b15610ea9576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063f23a6e6190610e2f9033908b908a908a908a908a90600401611e3d565b602060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190611e20565b7fffffffff000000000000000000000000000000000000000000000000000000001614610eb6565b6001600160a01b03851615155b610f025760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610419565b505050505050565b6002546001600160a01b03163314610f645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610419565b6001600160a01b038116610fe05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610419565b610fe981610fec565b50565b600280546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841660009081526020818152604080832086845290915281208054849290611087908490611ce5565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156111af576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e6190611135903390600090899089908990600401611e82565b602060405180830381600087803b15801561114f57600080fd5b505af1158015611163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190611e20565b7fffffffff0000000000000000000000000000000000000000000000000000000016146111bc565b6001600160a01b03841615155b610ad25760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610419565b82518251811461125a5760405162461bcd60e51b815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610419565b60005b818110156112e95783818151811061127757611277611c70565b6020026020010151600080886001600160a01b03166001600160a01b0316815260200190815260200160002060008784815181106112b7576112b7611c70565b6020026020010151815260200190815260200160002060008282546112dc9190611ce5565b909155505060010161125d565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161133a929190611eba565b60405180910390a46001600160a01b0385163b1561141c576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063bc197c81906113a29033906000908a908a908a90600401611ee8565b602060405180830381600087803b1580156113bc57600080fd5b505af11580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190611e20565b7fffffffff000000000000000000000000000000000000000000000000000000001614611429565b6001600160a01b03851615155b6114755760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610419565b5050505050565b82805461148890611c1c565b90600052602060002090601f0160209004810192826114aa57600085556114f0565b82601f106114c357805160ff19168380011785556114f0565b828001600101855582156114f0579182015b828111156114f05782518255916020019190600101906114d5565b506114fc929150611500565b5090565b5b808211156114fc5760008155600101611501565b80356001600160a01b038116811461152c57600080fd5b919050565b6000806040838503121561154457600080fd5b61154d83611515565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610fe957600080fd5b60006020828403121561159b57600080fd5b81356115a68161155b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611623576116236115ad565b604052919050565b600067ffffffffffffffff831115611645576116456115ad565b61167660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016115dc565b905082815283838301111561168a57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156116b357600080fd5b813567ffffffffffffffff8111156116ca57600080fd5b8201601f810184136116db57600080fd5b6116ea8482356020840161162b565b949350505050565b60006020828403121561170457600080fd5b5035919050565b6000815180845260005b8181101561173157602081850181015186830182015201611715565b81811115611743576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006115a6602083018461170b565b60008083601f84011261179b57600080fd5b50813567ffffffffffffffff8111156117b357600080fd5b6020830191508360208260051b85010111156117ce57600080fd5b9250929050565b60008083601f8401126117e757600080fd5b50813567ffffffffffffffff8111156117ff57600080fd5b6020830191508360208285010111156117ce57600080fd5b60008060008060008060008060a0898b03121561183357600080fd5b61183c89611515565b975061184a60208a01611515565b9650604089013567ffffffffffffffff8082111561186757600080fd5b6118738c838d01611789565b909850965060608b013591508082111561188c57600080fd5b6118988c838d01611789565b909650945060808b01359150808211156118b157600080fd5b506118be8b828c016117d5565b999c989b5096995094979396929594505050565b6000602082840312156118e457600080fd5b6115a682611515565b6000806000806040858703121561190357600080fd5b843567ffffffffffffffff8082111561191b57600080fd5b61192788838901611789565b9096509450602087013591508082111561194057600080fd5b5061194d87828801611789565b95989497509550505050565b600081518084526020808501945080840160005b838110156119895781518752958201959082019060010161196d565b509495945050505050565b6020815260006115a66020830184611959565b600082601f8301126119b857600080fd5b6115a68383356020850161162b565b600080600080608085870312156119dd57600080fd5b6119e685611515565b93506020850135925060408501359150606085013567ffffffffffffffff811115611a1057600080fd5b611a1c878288016119a7565b91505092959194509250565b60008060408385031215611a3b57600080fd5b611a4483611515565b915060208301358015158114611a5957600080fd5b809150509250929050565b600082601f830112611a7557600080fd5b8135602067ffffffffffffffff821115611a9157611a916115ad565b8160051b611aa08282016115dc565b9283528481018201928281019087851115611aba57600080fd5b83870192505b84831015611ad957823582529183019190830190611ac0565b979650505050505050565b60008060008060808587031215611afa57600080fd5b611b0385611515565b9350602085013567ffffffffffffffff80821115611b2057600080fd5b611b2c88838901611a64565b94506040870135915080821115611b4257600080fd5b611b4e88838901611a64565b93506060870135915080821115611b6457600080fd5b50611a1c878288016119a7565b60008060408385031215611b8457600080fd5b611b8d83611515565b9150611b9b60208401611515565b90509250929050565b60008060008060008060a08789031215611bbd57600080fd5b611bc687611515565b9550611bd460208801611515565b94506040870135935060608701359250608087013567ffffffffffffffff811115611bfe57600080fd5b611c0a89828a016117d5565b979a9699509497509295939492505050565b600181811c90821680611c3057607f821691505b60208210811415611c6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ce057611ce0611c9f565b500390565b60008219821115611cf857611cf8611c9f565b500190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611d2f57600080fd5b8260051b8083602087013760009401602001938452509192915050565b604081526000611d60604083018688611cfd565b8281036020840152611ad9818587611cfd565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60006001600160a01b03808b168352808a1660208401525060a06040830152611de960a08301888a611cfd565b8281036060840152611dfc818789611cfd565b90508281036080840152611e11818587611d73565b9b9a5050505050505050505050565b600060208284031215611e3257600080fd5b81516115a68161155b565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a06080830152611e7660a083018486611d73565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152611ad960a083018461170b565b604081526000611ecd6040830185611959565b8281036020840152611edf8185611959565b95945050505050565b60006001600160a01b03808816835280871660208401525060a06040830152611f1460a0830186611959565b8281036060840152611f268186611959565b90508281036080840152611e76818561170b56fea2646970667358221220deacfae4fcca0ae838a1a3e39e12d1e2b024968102082b1eb1766b65b6beca6064736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003f697066733a2f2f516d634458514e44654b3447555a64795137373166796f4561434678426f4839754d75766b337147556a51636d382f7b69647d2e6a736f6e00