Ly8geyBkZy1kbyBydW4gIH0KLy8gQ29weXJpZ2h0IChDKSAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgoKLy8gYnkgQWxleGFuZHJlIE9saXZhIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KLy8gYmFzZWQgb24gYnVnIHJlcG9ydCBieSBGcmVkcmlrINZocnN0cvZtIDxkOTItZm9oQG5hZGEua3RoLnNlPgoKI2luY2x1ZGUgPGNzdGRsaWI+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHZiYXNlIHsKICB2aXJ0dWFsIGludCBnZXRfYSgpIGNvbnN0ID0gMDsKfTsKCnN0cnVjdCBiYXNlOiB2aXJ0dWFsIHZiYXNlIHsKICBpbnQgYTsKICBiYXNlKGludCBhYSkgOiBhKGFhKSB7fQogIGludCBnZXRfYSgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KfTsKCnN0cnVjdCBtaWQ6IGJhc2UgewogIG1pZChpbnQgYmIpIDogYmFzZShiYikgewogICAgLy8gd2hlbiBtaWQgaXMgbm90IGluIGNoYXJnZSBvZiB2YmFzZSBpbml0aWFsaXphdGlvbiwKICAgIC8vIGEgZGVyaXZlZC1hd2FyZSB2dGFibGUgaXMgbmVlZGVkIGZvciB2YmFzZQogICAgaWYgKCgodmJhc2UqKXRoaXMpLT5nZXRfYSgpICE9IGJiKQogICAgICBhYm9ydCgpOwogIH0KfTsKCnN0cnVjdCBkZXJpdmVkOiB2aXJ0dWFsIG1pZCB7CiAgZGVyaXZlZChpbnQgY2MpIDogbWlkKGNjKSB7fQp9OwoKaW50IG1haW4gKCkgewogIGRlcml2ZWQoMSk7Cn0K