Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9jb3VudF9pZiB8NTAKCmNvdW50X2lmCj09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBQcmVkCiAgICAgICAgPgogICAgc3RydWN0IGNvdW50X2lmCiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGBgU2VxdWVuY2VgYCB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBgYFByZWRgYC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvY291bnRfaWYuaHBwPgoKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBTZXF1ZW5jZWBgICB8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICAgICAgICAgIHwgQSBzZXF1ZW5jZSB0byBiZSBleGFtaW5lZC4gICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgUHJlZGBgICAgICAgfCBVbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258ICAgICB8IEEgY291bnQgY29uZGl0aW9uLiAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKCkZvciBhbnkgfEZvcndhcmQgU2VxdWVuY2V8IGBgc2BgIGFuZCB1bmFyeSB8TGFtYmRhIEV4cHJlc3Npb258IGBgcHJlZGBgOgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgY291bnRfaWY8cyxwcmVkPjo6dHlwZSBuOyAKCjpSZXR1cm4gdHlwZToKICAgIHxJbnRlZ3JhbCBDb25zdGFudHwuCgo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byAKICAgICAgICAKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgIHR5cGVkZWYgbGFtYmRhPHByZWQ+Ojp0eXBlIHA7CiAgICAgICAgdHlwZWRlZiBmb2xkPCAKICAgICAgICAgICAgICBzCiAgICAgICAgICAgICwgbG9uZ188MD4KICAgICAgICAgICAgLCBpZl88IGFwcGx5X3dyYXBcIGBgMWBgXDxwLF8yPiwgbmV4dDxfMT4sIF8xID4KICAgICAgICAgICAgPjo6dHlwZSBuOwoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKTGluZWFyLiBFeGFjdGx5IGBgc2l6ZTxzPjo6dmFsdWVgYCBhcHBsaWNhdGlvbnMgb2YgYGBwcmVkYGAuIAoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0eXBlZGVmIHZlY3RvcjxpbnQsY2hhcixsb25nLHNob3J0LGNoYXIsbG9uZyxkb3VibGUsbG9uZz4gdHlwZXM7CiAgICAgICAgCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCAoY291bnRfaWY8IHR5cGVzLCBpc19mbG9hdDxfPiA+Ojp2YWx1ZSksID09LCAxICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCAoY291bnRfaWY8IHR5cGVzLCBpc19zYW1lPF8sY2hhcj4gPjo6dmFsdWUpLCA9PSwgMiApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggKGNvdW50X2lmPCB0eXBlcywgaXNfc2FtZTxfLHZvaWQ+ID46OnZhbHVlKSwgPT0sIDAgKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfFF1ZXJ5aW5nIEFsZ29yaXRobXN8LCB8Y291bnR8LCB8ZmluZHwsIHxmaW5kX2lmfCwgfGNvbnRhaW5zfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK