Ly8gQ29weXJpZ2h0IEdvdHRmcmllZCBHYW7fYXVnZSAyMDA2LgovLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQojIGluY2x1ZGUgPGJvb3N0L3B5dGhvbi9yZXR1cm5fb3BhcXVlX3BvaW50ZXIuaHBwPgojIGluY2x1ZGUgPGJvb3N0L3B5dGhvbi9kZWYuaHBwPgojIGluY2x1ZGUgPGJvb3N0L3B5dGhvbi9tb2R1bGUuaHBwPgojIGluY2x1ZGUgPGJvb3N0L3B5dGhvbi9yZXR1cm5fdmFsdWVfcG9saWN5LmhwcD4KCnR5cGVkZWYgc3RydWN0IG9wYXF1ZV8gKm9wYXF1ZTsKCm9wYXF1ZSB0aGVfb3AgICA9ICgob3BhcXVlKSAweDQ3MTEwODE1KTsKCm9wYXF1ZSBnZXQoKSB7IHJldHVybiB0aGVfb3A7IH0KCkJPT1NUX1BZVEhPTl9PUEFRVUVfU1BFQ0lBTElaRURfVFlQRV9JRChvcGFxdWVfKQoKbmFtZXNwYWNlIGJwbCA9IGJvb3N0OjpweXRob247CgpCT09TVF9QWVRIT05fTU9EVUxFKGNyb3NzbW9kX29wYXF1ZV9hKQp7CiAgICBicGw6OmRlZiAoCiAgICAgICAgImdldCIsCiAgICAgICAgJjo6Z2V0LAogICAgICAgIGJwbDo6cmV0dXJuX3ZhbHVlX3BvbGljeTxicGw6OnJldHVybl9vcGFxdWVfcG9pbnRlcj4oKSk7Cn0K