Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9wdXNoX2JhY2sKCnB1c2hfYmFjawo9PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICAsIHR5cGVuYW1lIFQKICAgICAgICA+CiAgICBzdHJ1Y3QgcHVzaF9iYWNrCiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKYGBwdXNoX2JhY2tgYCBwZXJmb3JtcyBhbiBpbnNlcnRpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBndWFyYW50ZWVkIHxPKDEpfApjb21wbGV4aXR5LgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL3B1c2hfYmFjay5ocHA+CgoKCk1vZGVsIG9mCi0tLS0tLS0tCgp8VGFnIERpc3BhdGNoZWQgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFNlcXVlbmNlYGAgIHwgfEJhY2sgRXh0ZW5zaWJsZSBTZXF1ZW5jZXwgICAgfCBBIHNlcXVlbmNlIHRvIGluc2VydCBpbnRvLiAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBUYGAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxCYWNrIEV4dGVuc2libGUgU2VxdWVuY2V8IGBgc2BgIGFuZCBhcmJpdHJhcnkgdHlwZSBgYHhgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBwdXNoX2JhY2s8cyx4Pjo6dHlwZSByOwoKOlJldHVybiB0eXBlOgogICAgfEJhY2sgRXh0ZW5zaWJsZSBTZXF1ZW5jZXwuCiAgICAKOlNlbWFudGljczoKICAgIEVxdWl2YWxlbnQgdG8gCgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICB0eXBlZGVmIGluc2VydDwgcyxlbmQ8cz46OnR5cGUseCA+Ojp0eXBlIHI7CgoKOlBvc3Rjb25kaXRpb246CiAgICBgYGJhY2s8cj46OnR5cGVgYCBpcyBpZGVudGljYWwgdG8gYGB4YGA7CgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICBzaXplPHI+Ojp2YWx1ZSA9PSBzaXplPHM+Ojp2YWx1ZSArIDEKCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KCkFtb3J0aXplZCBjb25zdGFudCB0aW1lLgoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0eXBlZGVmIHZlY3Rvcl9jPGJvb2wsZmFsc2UsZmFsc2UsZmFsc2UsCiAgICAgICAgdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2U+IGJvb2xzOwogICAgCiAgICB0eXBlZGVmIHB1c2hfYmFjazxib29scyxmYWxzZV8+Ojp0eXBlIG1lc3NhZ2U7CiAgICAKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIGJhY2s8bWVzc2FnZT46OnR5cGU6OnZhbHVlLCA9PSwgZmFsc2UgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIAogICAgICAgICAgKCBjb3VudF9pZjxtZXNzYWdlLCBlcXVhbF90bzxfMSxmYWxzZV8+ID46OnZhbHVlICksID09LCA2CiAgICAgICAgKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfEJhY2sgRXh0ZW5zaWJsZSBTZXF1ZW5jZXwsIHxpbnNlcnR8LCB8cG9wX2JhY2t8LCB8YmFja3wsIHxwdXNoX2Zyb250fAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK