KysrKysrKysrKysKUHl0aG9uIE5ld3MKKysrKysrKysrKysKCihlZGl0b3JzOiBjaGVjayBORVdTLmhlbHAgZm9yIGluZm9ybWF0aW9uIGFib3V0IGVkaXRpbmcgTkVXUyB1c2luZyBSZVNULikKCldoYXQncyBOZXcgaW4gUHl0aG9uIDIuNSBhbHBoYSAyPwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCipSZWxlYXNlIGRhdGU6IFhYLVhYWC0yMDA2KgoKQ29yZSBhbmQgYnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0KCi0gUHl0aG9uIG9uIE9TIFggMTAuMyBhbmQgYWJvdmUgbm93IHVzZXMgZGxvcGVuKCkgKHZpYSBkeW5sb2FkX3NobGliLmMpIAogIHRvIGxvYWQgZXh0ZW5zaW9uIG1vZHVsZXMgYW5kIG5vdyBwcm92aWRlcyB0aGUgZGwgbW9kdWxlLiBBcyBhIHJlc3VsdCwKICBzeXMuc2V0ZGxvcGVuZmxhZ3MoKSBub3cgd29ya3MgY29ycmVjdGx5IG9uIHRoZXNlIHN5c3RlbXMuIChTRiBwYXRjaCAKICAjMTQ1NDg0NCkKCgpFeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLQoKLSBGaXggYnNkZGIuZGIuREJFcnJvciBkZXJpdmVkIGV4Y2VwdGlvbnMgc28gdGhleSBjYW4gYmUgdW5waWNrbGVkLgoKTGlicmFyeQotLS0tLS0tCgotIEZpeCBleGNlcHRpb24gd2hlbiBkb2luZyBnbG9iLmdsb2IoJ2FueXRoaW5nKi8nKQoKQnVpbGQKLS0tLS0KCkMgQVBJCi0tLS0tCgpUZXN0cwotLS0tLQoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgoKCldoYXQncyBOZXcgaW4gUHl0aG9uIDIuNSBhbHBoYSAxPwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCipSZWxlYXNlIGRhdGU6IDA1LUFQUi0yMDA2KgoKQ29yZSBhbmQgYnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0KCi0gQnVnICMxNDIxNjY0OiBzeXMuc3RkZXJyLmVuY29kaW5nIGlzIG5vdyBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMKICBzeXMuc3Rkb3V0LmVuY29kaW5nLgoKLSBfX2ltcG9ydF9fIGFjY2VwdHMga2V5d29yZCBhcmd1bWVudHMuCgotIFBhdGNoICMxNDYwNDk2OiByb3VuZCgpIG5vdyBhY2NlcHRzIGtleXdvcmQgYXJndW1lbnRzLgoKLSBGaXhlZCBidWcgIzE0NTkwMjkgLSB1bmljb2RlIHJlcHJzIHdlcmUgZG91YmxlLWVzY2FwZWQuCgotIFBhdGNoICMxMzk2OTE5OiBUaGUgc3lzdGVtIHNjb3BlIHRocmVhZHMgYXJlIHJlZW5hYmxlZCBvbiBGcmVlQlNECiAgNS40IGFuZCBsYXRlciB2ZXJzaW9ucy4KCi0gQnVnICMxMTE1Mzc5OiBDb21waWxpbmcgYSBVbmljb2RlIHN0cmluZyB3aXRoIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCiAgbm93IGdpdmVzIGEgU3ludGF4RXJyb3IuCgotIFByZXZpb3VzbHksIFB5dGhvbiBjb2RlIGhhZCBubyBlYXN5IHdheSB0byBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEKICBjZWxsIG9iamVjdC4gTm93LCBhIGBgY2VsbF9jb250ZW50c2BgIGF0dHJpYnV0ZSBoYXMgYmVlbiBhZGRlZAogIChjbG9zZXMgcGF0Y2ggIzExNzAzMjMpLgoKLSBQYXRjaCAjMTEyMzQzMDogUHl0aG9uJ3Mgc21hbGwtb2JqZWN0IGFsbG9jYXRvciBub3cgcmV0dXJucyBhbiBhcmVuYSB0bwogIHRoZSBzeXN0ZW0gYGBmcmVlKClgYCB3aGVuIGFsbCBtZW1vcnkgd2l0aGluIGFuIGFyZW5hIGJlY29tZXMgdW51c2VkCiAgYWdhaW4uICBQcmlvciB0byBQeXRob24gMi41LCBhcmVuYXMgKDI1NktCIGNodW5rcyBvZiBtZW1vcnkpIHdlcmUgbmV2ZXIKICBmcmVlZC4gIFNvbWUgYXBwbGljYXRpb25zIHdpbGwgc2VlIGEgZHJvcCBpbiB2aXJ0dWFsIG1lbW9yeSBzaXplIG5vdywKICBlc3BlY2lhbGx5IGxvbmctcnVubmluZyBhcHBsaWNhdGlvbnMgdGhhdCwgZnJvbSB0aW1lIHRvIHRpbWUsIHRlbXBvcmFyaWx5CiAgdXNlIGEgbGFyZ2UgbnVtYmVyIG9mIHNtYWxsIG9iamVjdHMuICBOb3RlIHRoYXQgd2hlbiBQeXRob24gcmV0dXJucyBhbgogIGFyZW5hIHRvIHRoZSBwbGF0Zm9ybSBDJ3MgYGBmcmVlKClgYCwgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGUKICBwbGF0Zm9ybSBDIHdpbGwgaW4gdHVybiByZXR1cm4gdGhhdCBtZW1vcnkgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBUaGUKICBlZmZlY3Qgb2YgdGhlIHBhdGNoIGlzIHRvIHN0b3AgbWFraW5nIHRoYXQgaW1wb3NzaWJsZSwgYW5kIGluIHRlc3RzIGl0CiAgYXBwZWFycyB0byBiZSBlZmZlY3RpdmUgYXQgbGVhc3Qgb24gTWljcm9zb2Z0IEMgYW5kIGdjYy1iYXNlZCBzeXN0ZW1zLgogIFRoYW5rcyB0byBFdmFuIEpvbmVzIGZvciBoYXJkIHdvcmsgYW5kIHBhdGllbmNlLgoKLSBQYXRjaCAjMTQzNDAzODogcHJvcGVydHkoKSBub3cgdXNlcyB0aGUgZ2V0dGVyJ3MgZG9jc3RyaW5nIGlmIHRoZXJlIGlzCiAgbm8gImRvYyIgYXJndW1lbnQgZ2l2ZW4uIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbGVnaXRpbWF0ZWx5IHVzZQogIHByb3BlcnR5KCkgYXMgYSBkZWNvcmF0b3IgdG8gcHJvZHVjZSBhIHJlYWQtb25seSBwcm9wZXJ0eS4KCi0gUEVQIDM1NywgcGF0Y2ggMTQzNjM2ODogYWRkIGFuIF9faW5kZXhfXyBtZXRob2QgdG8gaW50L2xvbmcgYW5kIGEgbWF0Y2hpbmcKICBuYl9pbmRleCBzbG90IHRvIHRoZSBQeU51bWJlck1ldGhvZHMgc3RydWN0LiAgVGhlIHNsb3QgaXMgY29uc3VsdGVkIGluc3RlYWQKICBvZiByZXF1aXJpbmcgYW4gaW50IG9yIGxvbmcgaW4gc2xpY2luZyBhbmQgYSBmZXcgb3RoZXIgY29udGV4dHMsIGVuYWJsaW5nCiAgb3RoZXIgb2JqZWN0cyAoZS5nLiBOdW1lcmljIFB5dGhvbidzIGludGVnZXJzKSB0byBiZSB1c2VkIGFzIHNsaWNlIGluZGljZXMuCgotIEZpeGVkIHZhcmlvdXMgYnVncyByZXBvcnRlZCBieSBDb3Zlcml0eSdzIFByZXZlbnQgdG9vbC4KCi0gUEVQIDM1MiwgcGF0Y2ggIzExMDQ2Njk6IE1ha2UgZXhjZXB0aW9ucyBuZXctc3R5bGUgb2JqZWN0cy4gIEludHJvZHVjZWQgdGhlCiAgbmV3IGV4Y2VwdGlvbiBiYXNlIGNsYXNzLCBCYXNlRXhjZXB0aW9uLCB3aGljaCBoYXMgYSBuZXcgbWVzc2FnZSBhdHRyaWJ1dGUuCiAgS2V5Ym9hcmRJbnRlcnJ1cHQgYW5kIFN5c3RlbUV4aXQgdG8gZGlyZWN0bHkgaW5oZXJpdCBmcm9tIEJhc2VFeGNlcHRpb24gbm93LgogIFJhaXNpbmcgYSBzdHJpbmcgZXhjZXB0aW9uIG5vdyByYWlzZXMgYSBEZXByZWNhdGlvbldhcm5pbmcuCgotIFBhdGNoICMxNDM4Mzg3LCBQRVAgMzI4OiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgaW1wb3J0cy4gSW1wb3J0cyBjYW4gbm93IGJlCiAgZXhwbGljaXRseSByZWxhdGl2ZSwgdXNpbmcgJ2Zyb20gLm1vZHVsZSBpbXBvcnQgbmFtZScgdG8gbWVhbiAnZnJvbSB0aGUgc2FtZQogIHBhY2thZ2UgYXMgdGhpcyBtb2R1bGUgaXMgaW4uIEltcG9ydHMgd2l0aG91dCBkb3RzIHN0aWxsIGRlZmF1bHQgdG8gdGhlCiAgb2xkIHJlbGF0aXZlLXRoZW4tYWJzb2x1dGUsIHVubGVzcyAnZnJvbSBfX2Z1dHVyZV9fIGltcG9ydAogIGFic29sdXRlX2ltcG9ydCcgaXMgdXNlZC4KCi0gUHJvcGVybHkgY2hlY2sgaWYgJ3dhcm5pbmdzJyByYWlzZXMgYW4gZXhjZXB0aW9uICh1c3VhbGx5IHdoZW4gYSBmaWx0ZXIgc2V0CiAgdG8gImVycm9yIiBpcyB0cmlnZ2VyZWQpIHdoZW4gcmFpc2luZyBhIHdhcm5pbmcgZm9yIHJhaXNpbmcgc3RyaW5nCiAgZXhjZXB0aW9ucy4KCi0gQ09fR0VORVJBVE9SX0FMTE9XRUQgaXMgbm8gbG9uZ2VyIGRlZmluZWQuIFRoaXMgYmVoYXZpb3IgaXMgdGhlIGRlZmF1bHQuCiAgVGhlIG5hbWUgd2FzIHJlbW92ZWQgZnJvbSBJbmNsdWRlL2NvZGUuaC4KCi0gUEVQIDMwODogY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgd2VyZSBhZGRlZDogKHggaWYgY29uZCBlbHNlIHkpLgoKLSBQYXRjaCAxNDMzOTI4OgogIC0gVGhlIGNvcHkgbW9kdWxlIG5vdyAiY29waWVzIiBmdW5jdGlvbiBvYmplY3RzIChhcyBhdG9taWMgb2JqZWN0cykuCiAgLSBkaWN0Ll9fZ2V0aXRlbV9fIG5vdyBsb29rcyBmb3IgYSBfX21pc3NpbmdfXyBob29rIGJlZm9yZSByYWlzaW5nCiAgICBLZXlFcnJvci4KCi0gUEVQIDM0Mzogd2l0aCBzdGF0ZW1lbnQgaW1wbGVtZW50ZWQuIE5lZWRzIGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydAogIHdpdGhfc3RhdGVtZW50YGAuIFVzZSBvZiAnd2l0aCcgYXMgYSB2YXJpYWJsZSB3aWxsIGdlbmVyYXRlIGEgd2FybmluZy4KICBVc2Ugb2YgJ2FzJyBhcyBhIHZhcmlhYmxlIHdpbGwgYWxzbyBnZW5lcmF0ZSBhIHdhcm5pbmcgKHVubGVzcyBpdCdzCiAgcGFydCBvZiBhbiBpbXBvcnQgc3RhdGVtZW50KS4KICBUaGUgZm9sbG93aW5nIG9iamVjdHMgaGF2ZSBfX2NvbnRleHRfXyBtZXRob2RzOgogIC0gVGhlIGJ1aWx0LWluIGZpbGUgdHlwZS4KICAtIFRoZSB0aHJlYWQuTG9ja1R5cGUgdHlwZS4KICAtIFRoZSBmb2xsb3dpbmcgdHlwZXMgZGVmaW5lZCBieSB0aGUgdGhyZWFkaW5nIG1vZHVsZToKICAgIExvY2ssIFJMb2NrLCBDb25kaXRpb24sIFNlbWFwaG9yZSwgQm91bmRlZFNlbWFwaG9yZS4KICAtIFRoZSBkZWNpbWFsLkNvbnRleHQgY2xhc3MuCgotIEZpeCB0aGUgZW5jb2RpbmdzIHBhY2thZ2UgY29kZWMgc2VhcmNoIGZ1bmN0aW9uIHRvIG9ubHkgc2VhcmNoCiAgaW5zaWRlIGl0cyBvd24gcGFja2FnZS4gRml4ZXMgcHJvYmxlbSByZXBvcnRlZCBpbiBwYXRjaCAjMTQzMzE5OC4KCiAgTm90ZTogQ29kZWMgcGFja2FnZXMgc2hvdWxkIGltcGxlbWVudCBhbmQgcmVnaXN0ZXIgdGhlaXIgb3duCiAgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLiBQRVAgMTAwIGhhcyB0aGUgZGV0YWlscy4KCi0gUEVQIDM1MzogVXNpbmcgc3NpemVfdCBhcyB0aGUgaW5kZXggdHlwZS4KCi0gUGF0Y2ggIzE0MDAxODEsIGZpeCB1bmljb2RlIHN0cmluZyBmb3JtYXR0aW5nIHRvIG5vdCB1c2UgdGhlIGxvY2FsZS4KICBUaGlzIGlzIGhvdyBzdHJpbmcgb2JqZWN0cyB3b3JrLiAgdSclZicgY291bGQgdXNlICwgaW5zdGVhZCBvZiAuCiAgZm9yIHRoZSBkZWNpbWFsIHBvaW50LiAgTm93IGJvdGggc3RyaW5ncyBhbmQgdW5pY29kZSBhbHdheXMgdXNlIHBlcmlvZHMuCgotIEJ1ZyAjMTI0NDYxMCwgIzEzOTI5MTUsIGZpeCBidWlsZCBwcm9ibGVtIG9uIE9wZW5CU0QgMy43IGFuZCAzLjguCiAgY29uZmlndXJlIHdvdWxkIGJyZWFrIGNoZWNraW5nIGN1cnNlcy5oLgoKLSBCdWcgIzk1OTU3NjogVGhlIHB3ZCBtb2R1bGUgaXMgbm93IGJ1aWx0aW4uIFRoaXMgYWxsb3dzIFB5dGhvbiB0byBiZQogIGJ1aWx0IG9uIFVOSVggcGxhdGZvcm1zIHdpdGhvdXQgJEhPTUUgc2V0LgoKLSBCdWcgIzEwNzIxODIsIGZpeCBzb21lIHBvdGVudGlhbCBwcm9ibGVtcyBpZiBjaGFyYWN0ZXJzIGFyZSBzaWduZWQuCgotIEJ1ZyAjODg5NTAwLCBmaXggbGluZSBudW1iZXIgb24gU3ludGF4V2FybmluZyBmb3IgZ2xvYmFsIGRlY2xhcmF0aW9ucy4KCi0gQnVnICMxMzc4MDIyLCBVVEYtOCBmaWxlcyB3aXRoIGEgbGVhZGluZyBCT00gY3Jhc2hlZCB0aGUgaW50ZXJwcmV0ZXIuCgotIFN1cHBvcnQgZm9yIGNvbnZlcnRpbmcgaGV4IHN0cmluZ3MgdG8gZmxvYXRzIG5vIGxvbmdlciB3b3Jrcy4KICBUaGlzIHdhcyBub3QgcG9ydGFibGUuICBmbG9hdCgnMHgzJykgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IuCgotIFBhdGNoICMxMzgyMTYzOiBFeHBvc2UgU3VidmVyc2lvbiByZXZpc2lvbiBudW1iZXIgdG8gUHl0aG9uLiAgTmV3IEMgQVBJCiAgZnVuY3Rpb24gUHlfR2V0QnVpbGROdW1iZXIoKS4gIE5ldyBhdHRyaWJ1dGUgc3lzLnN1YnZlcnNpb24uICBCdWlsZCBudW1iZXIKICBpcyBub3cgZGlzcGxheWVkIGluIGludGVyYWN0aXZlIHByb21wdCBiYW5uZXIuCgotIEltcGxlbWVudGF0aW9uIG9mIFBFUCAzNDEgLSBVbmlmaWNhdGlvbiBvZiB0cnkvZXhjZXB0IGFuZCB0cnkvZmluYWxseS4KICAiZXhjZXB0IiBjbGF1c2VzIGNhbiBub3cgYmUgd3JpdHRlbiB0b2dldGhlciB3aXRoIGEgImZpbmFsbHkiIGNsYXVzZSBpbgogIG9uZSB0cnkgc3RhdGVtZW50IGluc3RlYWQgb2YgdHdvIG5lc3RlZCBvbmVzLiAgUGF0Y2ggIzEzNTU5MTMuCgotIEJ1ZyAjMTM3OTk5NDogQnVpbHRpbiB1bmljb2RlX2VzY2FwZSBhbmQgcmF3X3VuaWNvZGVfZXNjYXBlIGNvZGVjCiAgbm93IGVuY29kZXMgYmFja3NsYXNoIGNvcnJlY3RseS4KCi0gUGF0Y2ggIzEzNTA0MDk6IFdvcmsgYXJvdW5kIHNpZ25hbCBoYW5kbGluZyBidWcgaW4gVmlzdWFsIFN0dWRpbyAyMDA1LgoKLSBCdWcgIzEyODE0MDg6IFB5X0J1aWxkVmFsdWUgbm93IHdvcmtzIGNvcnJlY3RseSBldmVuIHdpdGggdW5zaWduZWQgbG9uZ3MKICBhbmQgbG9uZyBsb25ncy4KCi0gU0YgQnVnICMxMzUwMTg4LCAic2V0ZGxvcGVuZmxhZ3MiIGxlYWRzIHRvIGNyYXNoIHVwb24gImltcG9ydCIKICBJdCB3YXMgcG9zc2libGUgZm9yIGRsZXJyb3IoKSB0byByZXR1cm4gYSBOVUxMIHBvaW50ZXIsIHNvIAogIGl0IHdpbGwgbm93IHVzZSBhIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBpbiB0aGlzIGNhc2UuCgotIFJlcGxhY2VkIG1vc3QgVW5pY29kZSBjaGFybWFwIGNvZGVjcyB3aXRoIG5ldyBvbmVzIHVzaW5nIHRoZQogIG5ldyBVbmljb2RlIHRyYW5zbGF0ZSBzdHJpbmcgZmVhdHVyZSBpbiB0aGUgYnVpbHRpbiBjaGFybWFwCiAgY29kZWM7IHRoZSBjb2RlY3Mgd2VyZSBjcmVhdGVkIGZyb20gdGhlIG1hcHBpbmcgdGFibGVzIGF2YWlsYWJsZQogIGF0IGZ0cC51bmljb2RlLm9yZyBhbmQgY29udGFpbiBhIGZldyB1cGRhdGVzIChlLmcuIHRoZSBNYWMgT1MKICBlbmNvZGluZ3Mgbm93IGluY2x1ZGUgYSBtYXBwaW5nIGZvciB0aGUgQXBwbGUgbG9nbykKCi0gQWRkZWQgYSBmZXcgbW9yZSBjb2RlY3MgZm9yIE1hYyBPUyBlbmNvZGluZ3MKCi0gU3BlZCB1cCBzb21lIFVuaWNvZGUgb3BlcmF0aW9ucy4KCi0gQSBuZXcgQVNUIHBhcnNlciBpbXBsZW1lbnRhdGlvbiB3YXMgY29tcGxldGVkLiBUaGUgYWJzdHJhY3QKICBzeW50YXggdHJlZSBpcyBhdmFpbGFibGUgZm9yIHJlYWQtb25seSAobm9uLWNvbXBpbGUpIGFjY2VzcwogIHRvIFB5dGhvbiBjb2RlOyBhbiBfYXN0IG1vZHVsZSB3YXMgYWRkZWQuCgotIFNGIGJ1ZyAjMTE2Nzc1MTogZml4IGluY29ycmVjdCBjb2RlIGJlaW5nIHByb2R1Y2VkIGZvciBnZW5lcmF0b3IgZXhwcmVzc2lvbnMuCiAgVGhlIGZvbGxvd2luZyBjb2RlIG5vdyByYWlzZXMgYSBTeW50YXhFcnJvcjogIGZvbyhhID0gaSBmb3IgaSBpbiByYW5nZSgxMCkpCgotIFNGIEJ1ZyAjOTc2NjA4OiBmaXggU3lzdGVtRXJyb3Igd2hlbiBtdGltZSBvZiBhbiBpbXBvcnRlZCBmaWxlIGlzIC0xLgoKLSBTRiBCdWcgIzg4Nzk0NjogZml4IHNlZ2ZhdWx0IHdoZW4gcmVkaXJlY3Rpbmcgc3RkaW4gZnJvbSBhIGRpcmVjdG9yeS4KICBQcm92aWRlIGEgd2FybmluZyB3aGVuIGEgZGlyZWN0b3J5IGlzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgoKLSBGaXggc2VnZmF1bHQgd2l0aCBpbnZhbGlkIGNvZGluZy4KCi0gU0YgYnVnICM3NzI4OTY6IHVua25vd24gZW5jb2RpbmcgcmVzdWx0cyBpbiBNZW1vcnlFcnJvci4KCi0gQWxsIGl0ZXJhdG9ycyBub3cgaGF2ZSBhIEJvb2xlYW4gdmFsdWUgb2YgVHJ1ZS4gIEZvcm1lcmx5LCBzb21lIGl0ZXJhdG9ycwogIHN1cHBvcnRlZCBhIF9fbGVuX18oKSBtZXRob2Qgd2hpY2ggZXZhbHVhdGVkIHRvIEZhbHNlIHdoZW4gdGhlIGl0ZXJhdG9yCiAgd2FzIGVtcHR5LgoKLSBPbiA2NC1iaXQgcGxhdGZvcm1zLCB3aGVuIF9fbGVuX18oKSByZXR1cm5zIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUKICByZXByZXNlbnRlZCBhcyBhIEMgaW50LCByYWlzZSBPdmVyZmxvd0Vycm9yLgoKLSB0ZXN0X19sb2NhbGUgaXMgc2tpcHBlZCBvbiBPUyBYIDwgMTAuNCAob25seSBwYXJ0aWFsIGxvY2FsZSBzdXBwb3J0IGlzCiAgcHJlc2VudCkuCgotIFNGIGJ1ZyAjODkzNTQ5OiBwYXJzaW5nIGtleXdvcmQgYXJndW1lbnRzIHdhcyBicm9rZW4gd2l0aCBhIGZldyBmb3JtYXQKICBjb2Rlcy4KCi0gQ2hhbmdlcyBkb25hdGVkIGJ5IEVsZW1lbnRhbCBTZWN1cml0eSB0byBtYWtlIGl0IHdvcmsgb24gQUlYIDUuMwogIHdpdGggSUJNJ3MgNjQtYml0IGNvbXBpbGVyIChTRiBwYXRjaCAjMTI4NDI4OSkuICBUaGlzIGFsc28gY2xvc2VzIFNGCiAgYnVnICMxMDU0NzA6IHRlc3RfcHdkIGZhaWxzIG9uIDY0Yml0IHN5c3RlbSAoT3B0ZXJvbikuCgotIENoYW5nZXMgZG9uYXRlZCBieSBFbGVtZW50YWwgU2VjdXJpdHkgdG8gbWFrZSBpdCB3b3JrIG9uIEhQLVVYIDExIG9uCiAgSXRhbml1bTIgd2l0aCBIUCdzIDY0LWJpdCBjb21waWxlciAoU0YgcGF0Y2ggIzEyMjUyMTIpLgoKLSBEaXNhbGxvdyBrZXl3b3JkIGFyZ3VtZW50cyBmb3IgdHlwZSBjb25zdHJ1Y3RvcnMgdGhhdCBkb24ndCB1c2UgdGhlbQogIChmaXhlcyBidWcgIzExMTk0MTgpLgoKLSBGb3J3YXJkIFVuaWNvZGVEZWNvZGVFcnJvciBpbnRvIFN5bnRheEVycm9yIGZvciBzb3VyY2UgZW5jb2RpbmcgZXJyb3JzLgoKLSBTRiBidWcgIzkwMDA5MjogV2hlbiB0cmFjaW5nIChlLmcuIGZvciBob3RzaG90KSwgcmVzdG9yZSAncmV0dXJuJyBldmVudHMgZm9yCiAgZXhjZXB0aW9ucyB0aGF0IGNhdXNlIGEgZnVuY3Rpb24gdG8gZXhpdC4KCi0gVGhlIGltcGxlbWVudGF0aW9uIG9mIHNldCgpIGFuZCBmcm96ZW5zZXQoKSB3YXMgcmV2aXNlZCB0byB1c2UgaXRzCiAgb3duIGludGVybmFsIGRhdGEgc3RydWN0dXJlLiAgTWVtb3J5IGNvbnN1bXB0aW9uIGlzIHJlZHVjZWQgYnkgMS8zCiAgYW5kIHRoZXJlIGFyZSBtb2Rlc3Qgc3BlZWQtdXBzIGFzIHdlbGwuICBUaGUgQVBJIGlzIHVuY2hhbmdlZC4KCi0gU0YgYnVnICMxMjM4NjgxOiAgZnJlZWQgcG9pbnRlciBpcyB1c2VkIGluIGxvbmdvYmplY3QuYzpsb25nX3BvdygpLgoKLSBTRiBidWcgIzEyMjk0Mjk6IFB5T2JqZWN0X0NhbGxNZXRob2QgZmFpbGVkIHRvIGRlY3JlbWVudCBzb21lCiAgcmVmZXJlbmNlIGNvdW50cyBpbiBzb21lIGVycm9yIGV4aXQgY2FzZXMuCgotIFNGIGJ1ZyAjMTE4NTg4MzogIFB5dGhvbidzIHNtYWxsLW9iamVjdCBtZW1vcnkgYWxsb2NhdG9yIHRvb2sgb3ZlcgogIGEgYmxvY2sgbWFuYWdlZCBieSB0aGUgcGxhdGZvcm0gQyBsaWJyYXJ5IHdoZW5ldmVyIGEgcmVhbGxvYyBzcGVjaWZpZWQKICBhIHNtYWxsIG5ldyBzaXplLiAgSG93ZXZlciwgdGhlcmUncyBubyBwb3J0YWJsZSB3YXkgdG8ga25vdyB0aGVuIGhvdwogIG11Y2ggb2YgdGhlIGFkZHJlc3Mgc3BhY2UgZm9sbG93aW5nIHRoZSBwb2ludGVyIGlzIHZhbGlkLCBzbyB0aGVyZSdzIG5vCiAgcG9ydGFibGUgd2F5IHRvIGNvcHkgZGF0YSBmcm9tIHRoZSBDLW1hbmFnZWQgYmxvY2sgaW50byBQeXRob24ncwogIHNtYWxsLW9iamVjdCBzcGFjZSB3aXRob3V0IHJpc2tpbmcgYSBtZW1vcnkgZmF1bHQuICBQeXRob24ncyBzbWFsbC1vYmplY3QKICByZWFsbG9jIG5vdyBsZWF2ZXMgc3VjaCBibG9ja3MgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHBsYXRmb3JtIEMKICByZWFsbG9jLgoKLSBTRiBidWcgIzEyMzI1MTc6IEFuIG92ZXJmbG93IGVycm9yIHdhcyBub3QgZGV0ZWN0ZWQgcHJvcGVybHkgd2hlbgogIGF0dGVtcHRpbmcgdG8gY29udmVydCBhIGxhcmdlIGZsb2F0IHRvIGFuIGludCBpbiBvcy51dGltZSgpLgoKLSBTRiBidWcgIzEyMjQzNDc6IGhleCBsb25ncyBub3cgcHJpbnQgd2l0aCBsb3dlcmNhc2UgbGV0dGVycyBqdXN0CiAgbGlrZSB0aGVpciBpbnQgY291bnRlcnBhcnRzLgoKLSBTRiBidWcgIzExNjM1NjM6IHRoZSBvcmlnaW5hbCBmaXggZm9yIGJ1ZyAjMTAxMDY3NyAoInRocmVhZCBNb2R1bGUKICBCcmVha3MgUHlHSUxTdGF0ZV9FbnN1cmUoKSIpIGJyb2tlIGJhZGx5IGluIHRoZSBjYXNlIG9mIG11bHRpcGxlCiAgaW50ZXJwcmV0ZXIgc3RhdGVzOyBiYWNrIG91dCB0aGF0IGZpeCBhbmQgZG8gYSBiZXR0ZXIgam9iIChzZWUKICBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDUtSnVuZS8wNTQyNTguaHRtbAogIGZvciBhIGxvbmdlciB3cml0ZS11cCBvZiB0aGUgcHJvYmxlbSkuCgotIFNGIHBhdGNoICMxMTgwOTk1OiBtYXJzaGFsIG5vdyB1c2VzIGEgYmluYXJ5IGZvcm1hdCBieSBkZWZhdWx0IHdoZW4KICBzZXJpYWxpemluZyBmbG9hdHMuCgotIFNGIHBhdGNoICMxMTgxMzAxOiBvbiBwbGF0Zm9ybXMgdGhhdCBhcHBlYXIgdG8gdXNlIElFRUUgNzU0IGZsb2F0cywKICB0aGUgcm91dGluZXMgdGhhdCBwcm9taXNlIHRvIHByb2R1Y2UgSUVFRSA3NTQgYmluYXJ5IHJlcHJlc2VudGF0aW9ucwogIG9mIGZsb2F0cyBub3cgc2ltcGx5IGNvcHkgYnl0ZXMgYXJvdW5kLgoKLSBidWcgIzk2NzE4MjogZGlzYWxsb3cgb3BlbmluZyBmaWxlcyB3aXRoICd3VScgb3IgJ2FVJyBhcyBzcGVjaWZpZWQgYnkgUEVQCiAgMjc4LgoKLSBwYXRjaCAjMTEwOTQyNDogaW50LCBsb25nLCBmbG9hdCwgY29tcGxleCwgYW5kIHVuaWNvZGUgbm93IGNoZWNrIGZvciB0aGUKICBwcm9wZXIgbWFnaWMgc2xvdCBmb3IgdHlwZSBjb252ZXJzaW9ucyB3aGVuIHN1YmNsYXNzZWQuICBQcmV2aW91c2x5IHRoZQogIG1hZ2ljIHNsb3Qgd2FzIGlnbm9yZWQgZHVyaW5nIGNvbnZlcnNpb24uICBTZW1hbnRpY3Mgbm93IG1hdGNoIHRoZSB3YXkKICBzdWJjbGFzc2VzIG9mIHN0ciBhbHdheXMgYmVoYXZlZC4gIGludC9sb25nL2Zsb2F0LCBjb252ZXJzaW9uIG9mIGFuIGluc3RhbmNlCiAgdG8gdGhlIGJhc2UgY2xhc3MgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIHByb3BlciBuYl8qIG1hZ2ljIHNsb3QgYW5kIG91dCBvZgogIFB5TnVtYmVyXyooKS4KICBUaGFua3MgV2FsdGVyIET2cndhbGQuCgotIERlc2NyaXB0b3JzIGRlZmluZWQgaW4gQyB3aXRoIGEgUHlHZXRTZXREZWYgc3RydWN0dXJlLCB3aGVyZSB0aGUgc2V0dGVyIGlzCiAgTlVMTCwgbm93IHJhaXNlIGFuIEF0dHJpYnV0ZUVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgb3IgZGVsZXRlIHRoZQogIGF0dHJpYnV0ZS4gIFByZXZpb3VzbHkgYSBUeXBlRXJyb3Igd2FzIHJhaXNlZCwgYnV0IHRoaXMgd2FzIGluY29uc2lzdGVudAogIHdpdGggdGhlIGVxdWl2YWxlbnQgcHVyZS1QeXRob24gaW1wbGVtZW50YXRpb24uCgotIEl0IGlzIG5vdyBzYWZlIHRvIGNhbGwgUHlHSUxTdGF0ZV9SZWxlYXNlKCkgYmVmb3JlCiAgUHlFdmFsX0luaXRUaHJlYWRzKCkgKG5vdGUgdGhhdCBpZiB0aGVyZSBpcyByZWFzb24gdG8gYmVsaWV2ZSB0aGVyZQogIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGFyb3VuZCB5b3Ugc3RpbGwgbXVzdCBjYWxsIFB5RXZhbF9Jbml0VGhyZWFkcygpCiAgYmVmb3JlIHVzaW5nIHRoZSBQeXRob24gQVBJOyB0aGlzIGZpeCBpcyBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdAogIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgUHl0aG9uIGlzIG11bHRpLXRocmVhZGVkIHlldCkuCgotIFR5cGluZyBDdHJsLUMgd2hpbHN0IHJhd19pbnB1dCgpIHdhcyB3YWl0aW5nIGluIGEgYnVpbGQgd2l0aCB0aHJlYWRzCiAgZGlzYWJsZWQgY2F1c2VkIGEgY3Jhc2guCgotIEJ1ZyAjMTE2NTMwNjogaW5zdGFuY2VtZXRob2RfbmV3IGFsbG93ZWQgdGhlIGNyZWF0aW9uIG9mIGEgbWV0aG9kCiAgd2l0aCBpbV9jbGFzcyA9PSBpbV9zZWxmID09IE5VTEwsIHdoaWNoIGNhdXNlZCBhIGNyYXNoIHdoZW4gY2FsbGVkLgoKLSBNb3ZlIGV4Y2VwdGlvbiBmaW5hbGlzYXRpb24gbGF0ZXIgaW4gdGhlIHNodXRkb3duIHByb2Nlc3MgLSB0aGlzCiAgZml4ZXMgdGhlIGNyYXNoIHNlZW4gaW4gYnVnICMxMTY1NzYxCgotIEFkZGVkIHR3byBuZXcgYnVpbHRpbnMsIGFueSgpIGFuZCBhbGwoKS4KCi0gRGVmaW5pbmcgYSBjbGFzcyB3aXRoIGVtcHR5IHBhcmVudGhlc2VzIGlzIG5vdyBhbGxvd2VkCiAgKGUuZy4sIGBgY2xhc3MgQygpOiBwYXNzYGAgaXMgbm8gbG9uZ2VyIGEgc3ludGF4IGVycm9yKS4KICBQYXRjaCAjMTE3NjAxMiBhZGRlZCBzdXBwb3J0IHRvIHRoZSAncGFyc2VyJyBtb2R1bGUgYW5kICdjb21waWxlcicgcGFja2FnZQogICh0aGFua3MgdG8gbG9naXN0aXggZm9yIHRoYXQgYWRkZWQgc3VwcG9ydCkuCgotIFBhdGNoICMxMTE1MDg2OiBTdXBwb3J0IFBZX0xPTkdMT05HIGluIHN0cnVjdG1lbWJlci4KCi0gQnVnICMxMTU1OTM4OiBuZXcgc3R5bGUgY2xhc3NlcyBkaWQgbm90IGNoZWNrIHRoYXQgX19pbml0X18oKSB3YXMKICByZXR1cm5pbmcgTm9uZS4KCi0gUGF0Y2ggIzgwMjE4ODogUmVwb3J0IGNoYXJhY3RlcnMgYWZ0ZXIgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyCiAgKCdcJykgd2l0aCBhIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UuCgotIEJ1ZyAjNzIzMjAxOiBSYWlzZSBhIFR5cGVFcnJvciBmb3IgcGFzc2luZyBiYWQgb2JqZWN0cyB0byAnTCcgZm9ybWF0LgoKLSBCdWcgIzExMjQyOTU6IHRoZSBfX25hbWVfXyBhdHRyaWJ1dGUgb2YgZmlsZSBvYmplY3RzIHdhcwogIGluYWR2ZXJ0ZW50bHkgbWFkZSBpbmFjY2Vzc2libGUgaW4gcmVzdHJpY3RlZCBtb2RlLgoKLSBCdWcgIzEwNzQwMTE6IGNsb3Npbmcgc3lzLnN0ZHtvdXQsZXJyfSBub3cgY2F1c2VzIGEgZmx1c2goKSBhbmQKICBhbiBmZXJyb3IoKSBjYWxsLgoKLSBtaW4oKSBhbmQgbWF4KCkgbm93IHN1cHBvcnQga2V5PSBhcmd1bWVudHMgd2l0aCB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCiAgbGlzdC5zb3J0KCkuCgotIFRoZSBwZWVwaG9sZSBvcHRpbWl6ZXIgbm93IHBlcmZvcm1zIHNpbXBsZSBjb25zdGFudCBmb2xkaW5nIGluIGV4cHJlc3Npb25zOgogICAgICAoMiszKSAtLT4gKDUpLgoKLSBzZXQgYW5kIGZyb3plbnNldCBvYmplY3RzIGNhbiBub3cgYmUgbWFyc2hhbGxlZC4gIFNGICMxMDk4OTg1LgoKLSBCdWcgIzEwNzcxMDY6IFBvb3IgYXJndW1lbnQgY2hlY2tpbmcgY291bGQgY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24KICBpbiBjYWxscyB0byBvcy5yZWFkKCkuCgotIFRoZSBwYXJzZXIgZGlkIG5vdCBjb21wbGFpbiBhYm91dCBmdXR1cmUgc3RhdGVtZW50cyBpbiBpbGxlZ2FsCiAgcG9zaXRpb25zLiAgSXQgb25jZSBhZ2FpbiByZXBvcnRzIGEgc3ludGF4IGVycm9yIGlmIGEgZnV0dXJlCiAgc3RhdGVtZW50IG9jY3VycyBhZnRlciBhbnl0aGluZyBvdGhlciB0aGFuIGEgZG9jIHN0cmluZy4KCi0gQ2hhbmdlIHRoZSAlcyBmb3JtYXQgc3BlY2lmaWVyIGZvciBzdHIgb2JqZWN0cyBzbyB0aGF0IGl0IHJldHVybnMgYQogIHVuaWNvZGUgaW5zdGFuY2UgaWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBiYXNlc3RyaW5nIGFuZAogIGNhbGxpbmcgX19zdHJfXyBvbiB0aGUgYXJndW1lbnQgcmV0dXJucyBhIHVuaWNvZGUgaW5zdGFuY2UuCgotIFBhdGNoICMxNDEzMTgxOiAgY2hhbmdlZCBgYFB5VGhyZWFkU3RhdGVfRGVsZXRlKClgYCB0byBmb3JnZXQgYWJvdXQgdGhlCiAgY3VycmVudCB0aHJlYWQgc3RhdGUgd2hlbiB0aGUgYXV0by1HSUwtc3RhdGUgbWFjaGluZXJ5IGtub3dzIGFib3V0CiAgaXQgKHNpbmNlIHRoZSB0aHJlYWQgc3RhdGUgaXMgYmVpbmcgZGVsZXRlZCwgY29udGludWluZyB0byByZW1lbWJlciBpdAogIGNhbid0IGhlbHAsIGJ1dCBjYW4gaHVydCBpZiBhbm90aGVyIHRocmVhZCBoYXBwZW5zIHRvIGdldCBjcmVhdGVkIHdpdGgKICB0aGUgc2FtZSB0aHJlYWQgaWQpLgoKRXh0ZW5zaW9uIE1vZHVsZXMKLS0tLS0tLS0tLS0tLS0tLS0KCi0gUGF0Y2ggIzEzODA5NTI6IGZpeCBTU0wgb2JqZWN0cyB0aW1pbmcgb3V0IG9uIGNvbnNlY3V0aXZlIHJlYWQoKXMKCi0gUGF0Y2ggIzEzMDk1Nzk6IHdhaXQzIGFuZCB3YWl0NCB3ZXJlIGFkZGVkIHRvIHRoZSBwb3NpeCBtb2R1bGUuCgotIFBhdGNoICMxMjMxMDUzOiBUaGUgYXVkaW9vcCBtb2R1bGUgbm93IHN1cHBvcnRzIGVuY29kaW5nL2RlY29kaW5nIG9mIGFsYXcuCiAgSW4gYWRkaXRpb24sIHRoZSBleGlzdGluZyB1bGF3IGNvZGUgd2FzIHVwZGF0ZWQuCgotIFJGRSAjNTY3OTcyOiBTb2NrZXQgb2JqZWN0cycgZmFtaWx5LCB0eXBlIGFuZCBwcm90byBwcm9wZXJ0aWVzIGFyZQogIG5vdyBleHBvc2VkIHZpYSBuZXcgYXR0cmlidXRlcy4KCi0gRXZlcnl0aGluZyB1bmRlciBsaWItb2xkIHdhcyByZW1vdmVkLiAgVGhpcyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6CiAgICBQYXJhLCBhZGRwYWNrLCBjbXAsIGNtcGNhY2hlLCBjb2RlaGFjaywgZGlyY21wLCBkdW1wLCBmaW5kLCBmbXQsIGdyZXAsCiAgICBsb2NrZmlsZSwgbmV3ZGlyLCBuaSwgcGFja21haWwsIHBvbHksIHJhbmQsIHN0YXRjYWNoZSwgdGIsIHR6cGFyc2UsCiAgICB1dGlsLCB3aGF0c291bmQsIHdocmFuZG9tLCB6bW9kCgotIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyB3ZXJlIHJlbW92ZWQ6ICByZWdzdWIsIHJlY29udmVydCwgcmVnZXgsIHJlZ2V4X3N5bnRheC4KCi0gcmUgYW5kIHNyZSB3ZXJlIHN3YXBwZWQsIHNvIGhlbHAocmUpIHByb3ZpZGVzIGZ1bGwgaGVscC4gIGltcG9ydGluZyBzcmUKICBpcyBkZXByZWNhdGVkLiAgVGhlIHVuZG9jdW1lbnRlZCByZS5lbmdpbmUgdmFyaWFibGUgbm8gbG9uZ2VyIGV4aXN0cy4KCi0gQnVnICMxNDQ4NDkwOiBGaXhlZCBhIGJ1ZyB0aGF0IElTTy0yMDIyIGNvZGVjcyBjb3VsZCBub3QgaGFuZGxlCiAgU1MyIChzaW5nbGUtc2hpZnQgMikgZXNjYXBlIHNlcXVlbmNlcyBjb3JyZWN0bHkuCgotIFRoZSB1bmljb2RlZGF0YSBtb2R1bGUgd2FzIHVwZGF0ZWQgdG8gdGhlIDQuMSB2ZXJzaW9uIG9mIHRoZSBVbmljb2RlCiAgZGF0YWJhc2UuIFRoZSAzLjIgdmVyc2lvbiBpcyBzdGlsbCBhdmFpbGFibGUgYXMgdW5pY29kZWRhdGEuZGJfM18yXzAKICBmb3IgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSB0aGlzIHNwZWNpZmljIHZlcnNpb24gKHN1Y2ggYXMgSUROQSkuCgotIFRoZSB0aW1pbmcgbW9kdWxlIGlzIG5vIGxvbmdlciBidWlsdCBieSBkZWZhdWx0LiAgSXQgd2FzIGRlcHJlY2F0ZWQKICBpbiBQRVAgNCBpbiBQeXRob24gMi4wIG9yIGVhcmxpZXIuCgotIFBhdGNoIDE0MzM5Mjg6IEFkZGVkIGEgbmV3IHR5cGUsIGRlZmF1bHRkaWN0LCB0byB0aGUgY29sbGVjdGlvbnMgbW9kdWxlLgogIFRoaXMgdXNlcyB0aGUgbmV3IF9fbWlzc2luZ19fIGhvb2sgYmVoYXZpb3IgYWRkZWQgdG8gZGljdCAoc2VlIGFib3ZlKS4KCi0gQnVnICM4NTQ4MjM6IHNvY2tldG1vZHVsZSBub3cgYnVpbGRzIG9uIFN1biBwbGF0Zm9ybXMgZXZlbiB3aGVuCiAgSU5FVF9BRERSU1RSTEVOIGlzIG5vdCBkZWZpbmVkLgoKLSBQYXRjaCAjMTM5MzE1Nzogb3Muc3RhcnRmaWxlKCkgbm93IGhhcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0byBzcGVjaWZ5CiAgYSAiY29tbWFuZCB2ZXJiIiB0byBpbnZva2Ugb24gdGhlIGZpbGUuCgotIEJ1ZyAjODc2NjM3LCBwcmV2ZW50IHN0YWNrIGNvcnJ1cHRpb24gd2hlbiBzb2NrZXQgZGVzY3JpcHRvcgogIGlzIGxhcmdlciB0aGFuIEZEX1NFVFNJWkUuCgotIFBhdGNoICMxNDA3MTM1LCBidWcgIzE0MjQwNDE6IGhhcm1vbml6ZSBtbWFwIGJlaGF2aW9yIG9mIGFub255bW91cyBtZW1vcnkuCiAgbW1hcC5tbWFwKC0xLCBzaXplKSBub3cgcmV0dXJucyBhbm9ueW1vdXMgbWVtb3J5IGluIGJvdGggVW5peCBhbmQgV2luZG93cy4KICBtbWFwLm1tYXAoMCwgc2l6ZSkgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIFdpbmRvd3MgZm9yIGFub255bW91cyBtZW1vcnkuCgotIFBhdGNoICMxNDIyMzg1OiBUaGUgbmlzIG1vZHVsZSBub3cgc3VwcG9ydHMgYWNjZXNzIHRvIGRvbWFpbnMgb3RoZXIKICB0aGFuIHRoZSBzeXN0ZW0gZGVmYXVsdCBkb21haW4uCgotIFVzZSBXaW4zMiBBUEkgdG8gaW1wbGVtZW50IG9zLnN0YXQvZnN0YXQuIEFzIGEgcmVzdWx0LCBzdWJzZWNvbmQgdGltZXN0YW1wcwogIGFyZSByZXBvcnRlZCwgdGhlIGxpbWl0IG9uIHBhdGggbmFtZSBsZW5ndGhzIGlzIHJlbW92ZWQsIGFuZCBzdGF0IHJlcG9ydHMKICBXaW5kb3dzRXJyb3Igbm93IChpbnN0ZWFkIG9mIE9TRXJyb3IpLgoKLSBBZGQgYnNkZGIuZGIuREJFbnYuc2V0X3R4X3RpbWVzdGFtcCBhbGxvd2luZyB0aW1lIGJhc2VkIGRhdGFiYXNlIHJlY292ZXJ5LgoKLSBCdWcgIzE0MTMxOTIsIGZpeCBzZWcgZmF1bHQgaW4gYnNkZGIgaWYgYSB0cmFuc2FjdGlvbiB3YXMgZGVsZXRlZAogIGJlZm9yZSB0aGUgZW52LgoKLSBQYXRjaCAjMTEwMzExNjogQmFzaWMgQUZfTkVUTElOSyBzdXBwb3J0LgoKLSBCdWcgIzE0MDIzMDgsIChwb3NzaWJsZSkgc2VnZmF1bHQgd2hlbiB1c2luZyBtbWFwLm1tYXAoLTEsIC4uLikKCi0gQnVnICMxNDAwODIyLCBfY3Vyc2VzIG92ZXJ7bGF5LHdyaXRlfSBkb2Vzbid0IHdvcmsgd2hlbiBwYXNzaW5nIDYgaW50cy4KICBBbHNvIGZpeCB1bmdldG1vdXNlKCkgd2hpY2ggZGlkIG5vdCBhY2NlcHQgYXJndW1lbnRzIHByb3Blcmx5LgogIFRoZSBjb2RlIG5vdyBjb25mb3JtcyB0byB0aGUgZG9jdW1lbnRlZCBzaWduYXR1cmUuCgotIEJ1ZyAjMTQwMDExNSwgRml4IHNlZ2ZhdWx0IHdoZW4gY2FsbGluZyBjdXJzZXMucGFuZWwudXNlcnB0cigpCiAgd2l0aG91dCBwcmlvciBzZXR0aW5nIG9mIHRoZSB1c2VycHRyLgoKLSBGaXggNjQtYml0IHByb2JsZW1zIGluIGJzZGRiLgoKLSBQYXRjaCAjMTM2NTkxNjogZml4IHNvbWUgdW5zYWZlIDY0LWJpdCBtbWFwIG1ldGhvZHMuCgotIEJ1ZyAjMTI5MDMzMzogQWRkZWQgYSB3b3JrYXJvdW5kIGZvciBjamtjb2RlY3MnIF9jb2RlY3NfY24gYnVpbGQKICBwcm9ibGVtIG9uIEFJWC4KCi0gQnVnICM4NjkxOTc6IG9zLnNldGdyb3VwcyByZWplY3RzIGxvbmcgaW50ZWdlciBhcmd1bWVudHMKCi0gQnVnICMxMzQ2NTMzLCBzZWxlY3QucG9sbCgpIGRvZXNuJ3QgcmFpc2UgYW4gZXJyb3IgaWYgdGltZW91dCA+IHN5cy5tYXhpbnQKCi0gQnVnICMxMzQ0NTA4LCBGaXggVU5JWCBtbWFwIGxlYWtpbmcgZmlsZSBkZXNjcmlwdG9ycwoKLSBQYXRjaCAjMTMzODMxNCwgQnVnICMxMzM2NjIzOiBmaXggdGFyZmlsZSBzbyBpdCBjYW4gZXh0cmFjdAogIFJFR1RZUEUgZGlyZWN0b3JpZXMgZnJvbSB0YXJmaWxlcyB3cml0dGVuIGJ5IG9sZCBwcm9ncmFtcy4KCi0gUGF0Y2ggIzE0MDc5OTIsIGZpeGVzIGJyb2tlbiBic2RkYiBtb2R1bGUgZGIgYXNzb2NpYXRlIHdoZW4gdXNpbmcKICBCZXJrZWxleURCIDMuMywgNC4wIG9yIDQuMS4KCi0gR2V0IGJzZGRiIG1vZHVsZSB0byBidWlsZCB3aXRoIEJlcmtlbGV5REIgdmVyc2lvbiA0LjQKCi0gR2V0IGJzZGRiIG1vZHVsZSB0byBidWlsZCB3aXRoIEJlcmtlbGV5REIgdmVyc2lvbiAzLjIKCi0gUGF0Y2ggIzEzMDkwMDksIEZpeCBzZWdmYXVsdCBpbiBweWV4cGF0IHdoZW4gdGhlIFhNTCBkb2N1bWVudCBpcyBpbiBsYXRpbl8xLAogIGJ1dCBQeXRob24gaW5jb3JyZWN0bHkgYXNzdW1lcyBpdCBpcyBpbiBVVEYtOCBmb3JtYXQKCi0gRml4IHBhcnNlIGVycm9ycyBpbiB0aGUgcmVhZGxpbmUgbW9kdWxlIHdoZW4gY29tcGlsaW5nIHdpdGhvdXQgdGhyZWFkcy4KCi0gUGF0Y2ggIzEyODg4MzM6IFJlbW92ZWQgdGhyZWFkIGxvY2sgZnJvbSBzb2NrZXQuZ2V0YWRkcmluZm8gb24KICBGcmVlQlNEIDUuMyBhbmQgbGF0ZXIgdmVyc2lvbnMgd2hpY2ggZ290IHRocmVhZC1zYWZlIGdldGFkZHJpbmZvKDMpLgoKLSBQYXRjaGVzICMxMjk4NDQ5IGFuZCAjMTI5ODQ5OTogQWRkIHNvbWUgbWlzc2luZyBjaGVja3MgZm9yIGVycm9yCiAgcmV0dXJucyBpbiBjU3RyaW5nSU8uYy4KCi0gUGF0Y2ggIzEyOTcwMjg6IGZpeCBzZWdmYXVsdCBpZiBjYWxsIHR5cGUgb24gTXVsdGlieXRlQ29kZWMsCiAgTXVsdGlieXRlU3RyZWFtUmVhZGVyLCBvciBNdWx0aWJ5dGVTdHJlYW1Xcml0ZXIKCi0gRml4IG1lbW9yeSBsZWFrIGluIHBvc2l4LmFjY2VzcygpLgoKLSBQYXRjaCAjMTIxMzgzMTogRml4IHR5cG8gaW4gdW5pY29kZWRhdGEuX2dldGNvZGUuCgotIEJ1ZyAjMTAwNzA0Njogb3Muc3RhcnRmaWxlKCkgZGlkIG5vdCBhY2NlcHQgdW5pY29kZSBzdHJpbmdzIGVuY29kZWQgaW4KICB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcuCgotIFBhdGNoICM3NTYwMjE6IFNwZWNpYWwtY2FzZSBzb2NrZXQuaW5ldF9hdG9uKCcyNTUuMjU1LjI1NS4yNTUnKSBmb3IKICBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIGluZXRfYXRvbigpLgoKLSBCdWcgIzEyMTU5Mjg6IEZpeCBiejIuQloyRmlsZS5zZWVrKCkgZm9yIDY0LWJpdCBmaWxlIG9mZnNldHMuCgotIEJ1ZyAjMTE5MTA0MzogRml4IGJ6Mi5CWjJGaWxlLih4KXJlYWRsaW5lcyBmb3IgZmlsZXMgY29udGFpbmluZyBvbmUKICBsaW5lIHdpdGhvdXQgbmV3bGluZXMuCgotIEJ1ZyAjNzI4NTE1OiBtbWFwLnJlc2l6ZSgpIG5vdyByZXNpemVzIHRoZSBmaWxlIG9uIFVuaXggYXMgaXQgZGlkCiAgb24gV2luZG93cy4KCi0gUGF0Y2ggIzExODA2OTU6IEFkZCBuYW5vc2Vjb25kIHN0YXQgcmVzb2x1dGlvbiwgYW5kIHN0X2dlbiwKICBzdF9iaXJ0aHRpbWUgZm9yIEZyZWVCU0QuCgotIFBhdGNoICMxMjMxMDY5OiBUaGUgZmNudGwuaW9jdGwgZnVuY3Rpb24gbm93IHVzZXMgdGhlICdJJyBjb2RlIGZvcgogIHRoZSByZXF1ZXN0IGNvZGUgYXJndW1lbnQsIHdoaWNoIHJlc3VsdHMgaW4gbW9yZSBDLWxpa2UgYmVoYXZpb3VyCiAgZm9yIGxhcmdlIG9yIG5lZ2F0aXZlIHZhbHVlcy4KCi0gQnVnICMxMjM0OTc5OiBGb3IgdGhlIGFyZ3VtZW50IG9mIHRocmVhZC5Mb2NrLmFjcXVpcmUsIHRoZSBXaW5kb3dzCiAgaW1wbGVtZW50YXRpb24gdHJlYXRlZCBhbGwgaW50ZWdlciB2YWx1ZXMgZXhjZXB0IDEgYXMgZmFsc2UuCgotIEJ1ZyAjMTE5NDE4MTogYnoyLkJaMkZpbGUgZGlkbid0IGhhbmRsZSBtb2RlICdVJyBjb3JyZWN0bHkuCgotIFBhdGNoICMxMjEyMTE3OiBvcy5zdGF0KCkuc3RfZmxhZ3MgaXMgbm93IGFjY2Vzc2libGUgYXMgYSBhdHRyaWJ1dGUKICBpZiBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtLgoKLSBQYXRjaCAjMTEwMzk1MTogRXhwb3NlIE9fU0hMT0NLIGFuZCBPX0VYTE9DSyBpbiB0aGUgcG9zaXggbW9kdWxlIGlmCiAgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KCi0gQnVnICMxMTY2NjYwOiBUaGUgcmVhZGxpbmUgbW9kdWxlIGNvdWxkIHNlZ2ZhdWx0IGlmIGhvb2sgZnVuY3Rpb25zCiAgd2VyZSBzZXQgaW4gYSBkaWZmZXJlbnQgdGhyZWFkIHRoYW4gdGhhdCB3aGljaCBjYWxsZWQgcmVhZGxpbmUuCgotIGNvbGxlY3Rpb25zLmRlcXVlIG9iamVjdHMgbm93IHN1cHBvcnQgYSByZW1vdmUoKSBtZXRob2QuCgotIG9wZXJhdG9yLml0ZW1nZXR0ZXIoKSBhbmQgb3BlcmF0b3IuYXR0cmdldHRlcigpIG5vdyBzdXBwb3J0IHJldHJpZXZpbmcKICBtdWx0aXBsZSBmaWVsZHMuICBUaGlzIHByb3ZpZGVzIGRpcmVjdCBzdXBwb3J0IGZvciBzb3J0aW5nIG9uIG11bHRpcGxlCiAga2V5cyAocHJpbWFyeSwgc2Vjb25kYXJ5LCBldGMpLgoKLSBvcy5hY2Nlc3Mgbm93IHN1cHBvcnRzIFVuaWNvZGUgcGF0aCBuYW1lcyBvbiBub24tV2luMzIgc3lzdGVtcy4KCi0gUGF0Y2hlcyAjOTI1MTUyLCAjMTExODYwMjogQXZvaWQgcmVhZGluZyBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIKICBpbiBweWV4cGF0LkdldElucHV0Q29udGV4dC4KCi0gUGF0Y2hlcyAjNzQ5ODMwLCAjMTE0NDU1NTogYWxsb3cgVU5JWCBtbWFwIHNpemUgdG8gZGVmYXVsdCB0byBjdXJyZW50CiAgZmlsZSBzaXplLgoKLSBBZGRlZCBmdW5jdGlvbmFsLnBhcnRpYWwoKS4gIFNlZSBQRVAzMDkuCgotIFBhdGNoICMxMDkzNTg1OiByYWlzZSBhIFZhbHVlRXJyb3IgZm9yIG5lZ2F0aXZlIGhpc3RvcnkgaXRlbXMgaW4gcmVhZGxpbmUuCiAge3JlbW92ZV9oaXN0b3J5LHJlcGxhY2VfaGlzdG9yeX0KCi0gVGhlIHNwd2QgbW9kdWxlIGhhcyBiZWVuIGFkZGVkLCBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIHNoYWRvdyBwYXNzd29yZAogIGRhdGFiYXNlLgoKLSBzdGF0X2Zsb2F0X3RpbWVzIGlzIG5vdyBUcnVlLgoKLSBhcnJheS5hcnJheSBvYmplY3RzIGFyZSBub3cgcGlja2xhYmxlLgoKLSB0aGUgY1BpY2tsZSBtb2R1bGUgbm8gbG9uZ2VyIGFjY2VwdHMgdGhlIGRlcHJlY2F0ZWQgTm9uZSBvcHRpb24gaW4gdGhlCiAgYXJncyB0dXBsZSByZXR1cm5lZCBieSBfX3JlZHVjZV9fKCkuCgotIGl0ZXJ0b29scy5pc2xpY2UoKSBub3cgYWNjZXB0cyBOb25lIGZvciB0aGUgc3RhcnQgYW5kIHN0ZXAgYXJndW1lbnRzLgogIFRoaXMgYWxsb3dzIGlzbGljZSgpIHRvIHdvcmsgbW9yZSByZWFkaWx5IHdpdGggc2xpY2VzOgogICAgICBpc2xpY2Uocy5zdGFydCwgcy5zdG9wLCBzLnN0ZXApCgotIGRhdGV0aW1lLmRhdGV0aW1lKCkgbm93IGhhcyBhIHN0cnB0aW1lIGNsYXNzIG1ldGhvZCB3aGljaCBjYW4gYmUgdXNlZCB0bwogIGNyZWF0ZSBkYXRldGltZSBvYmplY3QgdXNpbmcgYSBzdHJpbmcgYW5kIGZvcm1hdC4KCi0gUGF0Y2ggIzExMTc5NjE6IFJlcGxhY2UgdGhlIE1ENSBpbXBsZW1lbnRhdGlvbiBmcm9tIFJTQSBEYXRhIFNlY3VyaXR5IEluYwogIHdpdGggdGhlIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJtZDUtcmZjLy4KCkxpYnJhcnkKLS0tLS0tLQoKLSBUaGUgZW1haWwgbW9kdWxlJ3MgcGFyc2VkYXRlX3R6IGZ1bmN0aW9uIG5vdyBzZXRzIHRoZSBkYXlsaWdodCBzYXZpbmdzCiAgZmxhZyB0byAtMSAodW5rbm93bikgc2luY2UgaXQgY2FuJ3QgdGVsbCBmcm9tIHRoZSBkYXRlIHdoZXRoZXIgaXQgc2hvdWxkCiAgYmUgc2V0LgoKLSBQYXRjaCAjNjI0MzI1OiB1cmxwYXJzZS51cmxwYXJzZSgpIGFuZCB1cmxwYXJzZS51cmxzcGxpdCgpIHJlc3VsdHMKICBub3cgc3BvcnQgYXR0cmlidXRlcyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBwYXJ0cyBvZiB0aGUgcmVzdWx0LgoKLSBQYXRjaCAjMTQ2MjQ5ODogc2dtbGxpYiBub3cgaGFuZGxlcyBlbnRpdHkgYW5kIGNoYXJhY3RlciByZWZlcmVuY2VzCiAgaW4gYXR0cmlidXRlIHZhbHVlcy4KCi0gQWRkZWQgdGhlIHNxbGl0ZTMgcGFja2FnZS4gVGhpcyBpcyBiYXNlZCBvbiBweXNxbGl0ZTIuMS4zLCBhbmQgcHJvdmlkZXMKICBhIERCLUFQSSBpbnRlcmZhY2UgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuIFlvdSdsbCBuZWVkIHNxbGl0ZSAzLjAuOCBvcgogIGxhdGVyIHRvIGJ1aWxkIHRoaXMgLSBpZiB5b3UgaGF2ZSBhbiBlYXJsaWVyIHZlcnNpb24sIHRoZSBDIGV4dGVuc2lvbiAKICBtb2R1bGUgd2lsbCBub3QgYmUgYnVpbHQuCgotIEJ1ZyAjMTQ2MDM0MDogYGByYW5kb20uc2FtcGxlKGRpY3QpYGAgZmFpbGVkIGluIHZhcmlvdXMgd2F5cy4gIERpY3RzCiAgYXJlbid0IG9mZmljaWFsbHkgc3VwcG9ydGVkIGhlcmUsIGFuZCB0cnlpbmcgdG8gdXNlIHRoZW0gd2lsbCBwcm9iYWJseQogIHJhaXNlIGFuIGV4Y2VwdGlvbiBzb21lIGRheS4gIEJ1dCBkaWN0cyBoYXZlIGJlZW4gYWxsb3dlZCwgYW5kICJtb3N0bHkKICB3b3JrZWQiLCBzbyBzdXBwb3J0IGZvciB0aGVtIHdvbid0IGdvIGF3YXkgd2l0aG91dCB3YXJuaW5nLgoKLSBCdWcgIzE0NDUwNjg6IGdldHBhc3MuZ2V0cGFzcygpIGNhbiBub3cgYmUgZ2l2ZW4gYW4gZXhwbGljaXQgc3RyZWFtCiAgYXJndW1lbnQgdG8gc3BlY2lmeSB3aGVyZSB0byB3cml0ZSB0aGUgcHJvbXB0LgoKLSBQYXRjaCAjMTQ2MjMxMywgYnVnICMxNDQzMzI4OiB0aGUgcGlja2xlIG1vZHVsZXMgbm93IGNhbiBoYW5kbGUgY2xhc3NlcwogIHRoYXQgaGF2ZSBfX3ByaXZhdGUgbmFtZXMgaW4gdGhlaXIgX19zbG90c19fLgoKLSBCdWcgIzEyNTAxNzA6IG1pbWV0b29scyBub3cgZ3JhY2VmdWxseSBoYW5kbGVzIHNvY2tldC5nZXRob3N0bmFtZSgpCiAgZmFpbHVyZXMgZ3JhY2VmdWxseS4KCi0gcGF0Y2ggIzE0NTczMTY6ICJzZXR1cC5weSB1cGxvYWQiIG5vdyBzdXBwb3J0cyAtLWlkZW50aXR5IHRvIHNlbGVjdCB0aGUKICBrZXkgdG8gYmUgdXNlZCBmb3Igc2lnbmluZyB0aGUgdXBsb2FkZWQgY29kZS4KCi0gUXVldWUuUXVldWUgb2JqZWN0cyBub3cgc3VwcG9ydCAudGFza19kb25lKCkgYW5kIC5qb2luKCkgbWV0aG9kcwogIHRvIG1ha2UgaXQgZWFzaWVyIHRvIG1vbml0b3Igd2hlbiBkYWVtb24gdGhyZWFkcyBoYXZlIGNvbXBsZXRlZAogIHByb2Nlc3NpbmcgYWxsIGVucXVldWVkIHRhc2tzLiAgUGF0Y2ggIzE0NTU2NzYuCgotIHBvcGVuMi5Qb3BlbiBvYmplY3RzIG5vdyBwcmVzZXJ2ZSB0aGUgY29tbWFuZCBpbiBhIC5jbWQgYXR0cmlidXRlLgoKLSBBZGRlZCB0aGUgY3R5cGVzIGZmaSBwYWNrYWdlLgoKLSBlbWFpbCA0LjAgcGFja2FnZSBub3cgaW50ZWdyYXRlZC4gIFRoaXMgaXMgbGFyZ2VseSB0aGUgc2FtZSBhcyB0aGUgZW1haWwgMy4wCiAgcGFja2FnZSB0aGF0IHdhcyBpbmNsdWRlZCBpbiBQeXRob24gMi4zLCBleGNlcHQgdGhhdCBQRVAgOCBtb2R1bGUgbmFtZXMgYXJlCiAgbm93IHVzZWQgKGUuZy4gbWFpbC5tZXNzYWdlIGluc3RlYWQgb2YgZW1haWwuTWVzc2FnZSkuICBUaGUgTUlNRSBjbGFzc2VzCiAgaGF2ZSBiZWVuIG1vdmVkIHRvIGEgc3VicGFja2FnZSAoZS5nLiBlbWFpbC5taW1lLnRleHQgaW5zdGVhZCBvZgogIGVtYWlsLk1JTUVUZXh0KS4gIFRoZSBvbGQgbmFtZXMgYXJlIHN0aWxsIHN1cHBvcnRlZCBmb3Igbm93LiAgU2V2ZXJhbAogIGRlcHJlY2F0ZWQgTWVzc2FnZSBtZXRob2RzIGhhdmUgYmVlbiByZW1vdmVkIGFuZCBsb3RzIG9mIGJ1Z3MgaGF2ZSBiZWVuCiAgZml4ZWQuICBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBlbWFpbCBwYWNrYWdlIGRvY3VtZW50YXRpb24uCgotIFBhdGNoZXMgIzE0MzYxMzAvIzE0NDMxNTU6IGNvZGVjcy5sb29rdXAoKSBub3cgcmV0dXJucyBhIENvZGVjSW5mbyBvYmplY3QKICAoYSBzdWJjbGFzcyBvZiB0dXBsZSkgdGhhdCBwcm92aWRlcyBpbmNyZW1lbnRhbCBkZWNvZGVycyBhbmQgZW5jb2RlcnMKICAoYSB3YXkgdG8gdXNlIHN0YXRlZnVsIGNvZGVjcyB3aXRob3V0IHRoZSBzdHJlYW0gQVBJKS4gUHl0aG9uIGZ1bmN0aW9ucwogIGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoKSBhbmQgY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcigpIGFzIHdlbGwKICBhcyBDIGZ1bmN0aW9ucyBQeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlcigpIGFuZCBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlcigpCiAgaGF2ZSBiZWVuIGFkZGVkLgoKLSBQYXRjaCAjMTM1OTM2NTogQ2FsbGluZyBuZXh0KCkgb24gYSBjbG9zZWQgU3RyaW5nSU8uU3RyaW5nIG9iamVjdCByYWlzZXMKICBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhIFN0b3BJdGVyYXRpb24gbm93IChsaWtlIGZpbGUgYW5kIGNTdHJpbmcuU3RyaW5nIGRvKS4KICBjU3RyaW5nSU8uU3RyaW5nSU8uaXNhdHR5KCkgd2lsbCByYWlzZSBhIFZhbHVlRXJyb3Igbm93IGlmIGNsb3NlKCkgaGFzIGJlZW4KICBjYWxsZWQgYmVmb3JlIChsaWtlIGZpbGUgYW5kIFN0cmluZ0lPLlN0cmluZ0lPIGRvKS4KCi0gQSByZWdydGVzdCBvcHRpb24gLXcgd2FzIGFkZGVkIHRvIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlLgoKLSBQYXRjaCAjMTQ0NjM3MjogcXVpdCBhbmQgZXhpdCBjYW4gbm93IGJlIGNhbGxlZCBmcm9tIHRoZSBpbnRlcmFjdGl2ZQogIGludGVycHJldGVyIHRvIGV4aXQuCgotIFRoZSBmdW5jdGlvbiBnZXRfY291bnQoKSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZ2MgbW9kdWxlLCBhbmQgZ2MuY29sbGVjdCgpCiAgZ3JldyBhbiBvcHRpb25hbCAnZ2VuZXJhdGlvbicgYXJndW1lbnQuCgotIEEgbGlicmFyeSBtc2lsaWIgdG8gZ2VuZXJhdGUgV2luZG93cyBJbnN0YWxsZXIgZmlsZXMsIGFuZCBhIGRpc3R1dGlscwogIGNvbW1hbmQgYmRpc3RfbXNpIGhhdmUgYmVlbiBhZGRlZC4KCi0gUEVQIDM0MzogbmV3IG1vZHVsZSBjb250ZXh0bGliLnB5IGRlZmluZXMgZGVjb3JhdG9yIEBjb250ZXh0bWFuYWdlcgogIGFuZCBoZWxwZnVsIGNvbnRleHQgbWFuYWdlcnMgbmVzdGVkKCkgYW5kIGNsb3NpbmcoKS4KCi0gVGhlIGNvbXBpbGVyIHBhY2thZ2Ugbm93IHN1cHBvcnRzIGZ1dHVyZSBpbXBvcnRzIGFmdGVyIHRoZSBtb2R1bGUgZG9jc3RyaW5nLgoKLSBCdWcgIzE0MTM3OTA6IHppcGZpbGUgbm93IHNhbml0aXplcyBhYnNvbHV0ZSBhcmNoaXZlIG5hbWVzIHRoYXQgYXJlCiAgbm90IGFsbG93ZWQgYnkgdGhlIHNwZWNzLgoKLSBQYXRjaCAjMTIxNTE4NDogRmlsZUlucHV0IG5vdyBjYW4gYmUgZ2l2ZW4gYW4gb3BlbmluZyBob29rIHdoaWNoIGNhbgogIGJlIHVzZWQgdG8gY29udHJvbCBob3cgZmlsZXMgYXJlIG9wZW5lZC4KCi0gUGF0Y2ggIzEyMTIyODc6IGZpbGVpbnB1dC5pbnB1dCgpIG5vdyBoYXMgYSBtb2RlIHBhcmFtZXRlciBmb3IKICBzcGVjaWZ5aW5nIHRoZSBmaWxlIG1vZGUgaW5wdXQgZmlsZXMgc2hvdWxkIGJlIG9wZW5lZCB3aXRoLgoKLSBQYXRjaCAjMTIxNTE4NDogZmlsZWlucHV0IG5vdyBoYXMgYSBmaWxlbm8oKSBmdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUKICBjdXJyZW50IGZpbGUgbnVtYmVyLgoKLSBQYXRjaCAjMTM0OTI3NDogZ2V0dGV4dC5pbnN0YWxsKCkgbm93IG9wdGlvbmFsbHkgaW5zdGFsbHMgYWRkaXRpb25hbAogIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBvdGhlciB0aGFuIF8oKSBpbiB0aGUgYnVpbHRpbiBuYW1lc3BhY2UuCgotIFBhdGNoICMxMzM3NzU2OiBmaWxlaW5wdXQgbm93IGFjY2VwdHMgVW5pY29kZSBmaWxlbmFtZXMuCgotIFBhdGNoICMxMzczNjQzOiBUaGUgY2h1bmsgbW9kdWxlIGNhbiBub3cgcmVhZCBjaHVua3MgbGFyZ2VyIHRoYW4KICB0d28gZ2lnYWJ5dGVzLgoKLSBQYXRjaCAjMTQxNzU1NTogU2ltcGxlSFRUUFNlcnZlciBub3cgcmV0dXJucyBMYXN0LU1vZGlmaWVkIGhlYWRlcnMuCgotIEJ1ZyAjMTQzMDI5ODogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHNlbmQgYSBtYWlsIHdpdGggYW4gZW1wdHkKICByZXR1cm4gYWRkcmVzcyB1c2luZyBzbXRwbGliLgoKLSBCdWcgIzE0MzIyNjA6IFRoZSBuYW1lcyBvZiBsYW1iZGEgZnVuY3Rpb25zIGFyZSBub3cgcHJvcGVybHkgZGlzcGxheWVkCiAgaW4gcHlkb2MuCgotIFBhdGNoICMxNDEyODcyOiB6aXBmaWxlIG5vdyBzZXRzIHRoZSBjcmVhdG9yIHN5c3RlbSB0byAzIChVbml4KQogIHVubGVzcyB0aGUgc3lzdGVtIGlzIFdpbjMyLgoKLSBQYXRjaCAjMTM0OTExODogdXJsbGliIG5vdyBzdXBwb3J0cyB1c2VyOnBhc3NAIHN0eWxlIHByb3h5CiAgc3BlY2lmaWNhdGlvbnMsIHJhaXNlcyBJT0Vycm9ycyB3aGVuIHByb3hpZXMgZm9yIHVuc3VwcG9ydGVkIHByb3RvY29scwogIGFyZSBkZWZpbmVkLCBhbmQgdXNlcyB0aGUgaHR0cHMgcHJveHkgb24gaHR0cHMgcmVkaXJlY3Rpb25zLgoKLSBCdWcgIzkwMjA3NTogdXJsbGliMiBub3cgc3VwcG9ydHMgJ2hvc3Q6cG9ydCcgc3R5bGUgcHJveHkgc3BlY2lmaWNhdGlvbnMuCgotIEJ1ZyAjMTQwNzkwMjogQWRkIHN1cHBvcnQgZm9yIHNmdHA6Ly8gVVJJcyB0byB1cmxwYXJzZS4KCi0gQnVnICMxMzcxMjQ3OiBVcGRhdGUgV2luZG93cyBsb2NhbGUgaWRlbnRpZmllcnMgaW4gbG9jYWxlLnB5LgoKLSBCdWcgIzEzOTQ1NjU6IFNpbXBsZUhUVFBTZXJ2ZXIgbm93IGRvZXNuJ3QgY2hva2Ugb24gcXVlcnkgcGFyYW1ldGVycwogIGFueSBtb3JlLgoKLSBCdWcgIzE0MDM0MTA6IFRoZSB3YXJuaW5ncyBtb2R1bGUgbm93IGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkCiAgd2hlbiBpdCBjYW4ndCBmaW5kIG91dCB0aGUgbW9kdWxlIG5hbWUgaXQgZ2VuZXJhdGVzIGEgd2FybmluZyBmb3IuCgotIFBhdGNoICMxMTc3MzA3OiBBZGRlZCBhIG5ldyBjb2RlYyB1dGZfOF9zaWcgZm9yIFVURi04IHdpdGggYSBCT00gc2lnbmF0dXJlLgoKLSBQYXRjaCAjMTE1NzAyNzogY29va2llbGliIG1pc2hhbmRsZXMgUkZDIDIxMDkgY29va2llcyBpbiBOZXRzY2FwZSBtb2RlCgotIFBhdGNoICMxMTE3Mzk4OiBjb29raWVsaWIuTFdQQ29va2llSmFyIGFuZCAuTW96aWxsYUNvb2tpZUphciBub3cgcmFpc2UKICBMb2FkRXJyb3IgYXMgZG9jdW1lbnRlZCwgaW5zdGVhZCBvZiBJT0Vycm9yLiAgRm9yIGNvbXBhdGliaWxpdHksCiAgTG9hZEVycm9yIHN1YmNsYXNzZXMgSU9FcnJvci4KCi0gQWRkZWQgdGhlIGhhc2hsaWIgbW9kdWxlLiAgSXQgcHJvdmlkZXMgc2VjdXJlIGhhc2ggZnVuY3Rpb25zIGZvciBNRDUgYW5kCiAgU0hBMSwgMjI0LCAyNTYsIDM4NCwgYW5kIDUxMi4gIE5vdGUgdGhhdCByZWNlbnQgZGV2ZWxvcG1lbnRzIG1ha2UgdGhlCiAgaGlzdG9yaWMgTUQ1IGFuZCBTSEExIHVuc3VpdGFibGUgZm9yIGNyeXB0b2dyYXBoaWMtc3RyZW5ndGggYXBwbGljYXRpb25zLgogIEluIDxodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDUtRGVjZW1iZXIvMDU4ODUwLmh0bWw+CiAgUm9uYWxkIEwuIFJpdmVzdCBvZmZlcmVkIHRoaXMgYWR2aWNlIGZvciBQeXRob246CgogICAgICAiVGhlIGNvbnNlbnN1cyBvZiByZXNlYXJjaGVycyBpbiB0aGlzIGFyZWEgKGF0IGxlYXN0IGFzCiAgICAgIGV4cHJlc3NlZCBhdCB0aGUgTklTVCBIYXNoIEZ1bmN0aW9uIFdvcmtzaG9wIDEwLzMxLzA1KSwKICAgICAgaXMgdGhhdCBTSEEtMjU2IGlzIGEgZ29vZCBjaG9pY2UgZm9yIHRoZSB0aW1lIGJlaW5nLCBidXQKICAgICAgdGhhdCByZXNlYXJjaCBzaG91bGQgY29udGludWUsIGFuZCBvdGhlciBhbHRlcm5hdGl2ZXMgbWF5CiAgICAgIGFyaXNlIGZyb20gdGhpcyByZXNlYXJjaC4gIFRoZSBsYXJnZXIgU0hBJ3MgYWxzbyBzZWVtIE9LLiIKCi0gQWRkZWQgYSBzdWJzZXQgb2YgRnJlZHJpayBMdW5kaCdzIEVsZW1lbnRUcmVlIHBhY2thZ2UuICBBdmFpbGFibGUKICBtb2R1bGVzIGFyZSB4bWwuZXRyZWUuRWxlbWVudFRyZWUsIHhtbC5ldHJlZS5FbGVtZW50UGF0aCwgYW5kCiAgeG1sLmV0cmVlLkVsZW1lbnRJbmNsdWRlLCBmcm9tIEVsZW1lbnRUcmVlIDEuMi42LgoKLSBQYXRjaCAjMTE2MjgyNTogU3VwcG9ydCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBJRExFIHdpbmRvdyB0aXRsZXMuCgotIEJ1ZyAjMTM2NTk4NDogdXJsbGliIG5vdyBvcGVucyAiZGF0YToiIFVSTHMgYWdhaW4uCgotIFBhdGNoICMxMzE0Mzk2OiBwcmV2ZW50IGRlYWRsb2NrIGZvciB0aHJlYWRpbmcuVGhyZWFkLmpvaW4oKSB3aGVuIGFuIGV4Y2VwdGlvbgogIGlzIHJhaXNlZCB3aXRoaW4gdGhlIG1ldGhvZCBpdHNlbGYgb24gYSBwcmV2aW91cyBjYWxsIChlLmcuLCBwYXNzaW5nIGluIGFuCiAgaWxsZWdhbCBhcmd1bWVudCkKCi0gQnVnICMxMzQwMzM3OiBjaGFuZ2UgdGltZS5zdHJwdGltZSgpIHRvIGFsd2F5cyByZXR1cm4gVmFsdWVFcnJvciB3aGVuIHRoZXJlCiAgaXMgYW4gZXJyb3IgaW4gdGhlIGZvcm1hdCBzdHJpbmcuCgotIFBhdGNoICM3NTQwMjI6IEdyZWF0bHkgZW5oYW5jZWQgd2ViYnJvd3Nlci5weSAoYnkgT2xlZyBCcm95dG1hbm4pLgoKLSBCdWcgIzcyOTEwMzogcHlkb2MucHk6IEZpeCBkb2NvdGhlcigpIG1ldGhvZCB0byBhY2NlcHQgYWRkaXRpb25hbAogICJwYXJlbnQiIGFyZ3VtZW50LgoKLSBQYXRjaCAjMTMwMDUxNTogeGRybGliLnB5OiBGaXggcGFja19mc3RyaW5nKCkgdG8gcmVhbGx5IHVzZSBudWxsIGJ5dGVzCiAgZm9yIHBhZGRpbmcuCgotIEJ1ZyAjMTI5NjAwNDogaHR0cGxpYi5weTogTGltaXQgbWF4aW1hbCBhbW91bnQgb2YgZGF0YSByZWFkIGZyb20gdGhlCiAgc29ja2V0IHRvIGF2b2lkIGEgTWVtb3J5RXJyb3Igb24gV2luZG93cy4KCi0gUGF0Y2ggIzExNjY5NDg6IGxvY2FsZS5weTogUHJlZmVyIExDX0FMTCwgTENfQ1RZUEUgYW5kIExBTkcgb3ZlciBMQU5HVUFHRQogIHRvIGdldCB0aGUgY29ycmVjdCBlbmNvZGluZy4KCi0gUGF0Y2ggIzExNjY5Mzg6IGxvY2FsZS5weTogUGFyc2UgTEFOR1VBR0UgYXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZgogIGxhbmd1YWdlcy4KCi0gUGF0Y2ggIzEyNjgzMTQ6IENhY2hlIGxpbmVzIGluIFN0cmVhbVJlYWRlci5yZWFkbGluZXMgZm9yIHBlcmZvcm1hbmNlLgoKLSBCdWcgIzEyOTA1MDU6IEZpeCBjbGVhcmluZyB0aGUgcmVnZXggY2FjaGUgZm9yIHRpbWUuc3RycHRpbWUoKS4KCi0gQnVnICMxMTY3MTI4OiBGaXggc2l6ZSBvZiBhIHN5bWxpbmsgaW4gYSB0YXJmaWxlIHRvIGJlIDAuCgotIFBhdGNoICM4MTAwMjM6IEZpeCBvZmYtYnktb25lIGJ1ZyBpbiB1cmxsaWIudXJscmV0cmlldmUgcmVwb3J0aG9vawogIGZ1bmN0aW9uYWxpdHkuCgotIEJ1ZyAjMTE2MzE3ODogTWFrZSBJRE5BIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgaW5wdXQgaXMgZW1wdHkuCgotIFBhdGNoICM4NDgwMTc6IE1ha2UgQ29va2llIG1vcmUgUkZDLWNvbXBsaWFudC4gVXNlIENSTEYgYXMgZGVmYXVsdCBvdXRwdXQKICBzZXBhcmF0b3IgYW5kIGRvIG5vdCBvdXRwdXQgdHJhaWxpbmcgc2VtaWNvbG9uLgoKLSBQYXRjaCAjMTA2MjA2MDogdXJsbGliLnVybHJldHJpZXZlKCkgbm93IHJhaXNlcyBhIG5ldyBleGNlcHRpb24sIG5hbWVkCiAgQ29udGVudFRvb1Nob3J0RXhjZXB0aW9uLCB3aGVuIHRoZSBhY3R1YWxseSBkb3dubG9hZGVkIHNpemUgZG9lcyBub3QKICBtYXRjaCB0aGUgQ29udGVudC1MZW5ndGggaGVhZGVyLgoKLSBCdWcgIzExMjE0OTQ6IGRpc3R1dGlscy5kaXJfdXRpbHMubWtwYXRoIG5vdyBhY2NlcHRzIFVuaWNvZGUgc3RyaW5ncy4KCi0gQnVnICMxMTc4NDg0OiBSZXR1cm4gY29tcGxldGUgbGluZXMgZnJvbSBjb2RlYyBzdHJlYW0gcmVhZGVycwogIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uIGluIGxhdGVyIGxpbmVzLCByZXN1bHRpbmcgaW4KICBjb3JyZWN0IGxpbmUgbnVtYmVycyBmb3IgZGVjb2RpbmcgZXJyb3JzIGluIHNvdXJjZSBjb2RlLgoKLSBCdWcgIzExOTIzMTU6IERpc2FsbG93IG5lZ2F0aXZlIGFyZ3VtZW50cyB0byBjbGVhcigpIGluIHBkYi4KCi0gUGF0Y2ggIzgyNzM4NjogU3VwcG9ydCBhYnNvbHV0ZSBzb3VyY2UgcGF0aHMgaW4gbXN2Y2NvbXBpbGVyLnB5LgoKLSBQYXRjaCAjMTEwNTczMDogQXBwbHkgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBjb21tb25wcmVmaXggaW4gcG9zaXhwYXRoCiAgdG8gbnRwYXRoLCBtYWNwYXRoLCBvczJlbXhwYXRoIGFuZCByaXNjb3NwYXRoLgoKLSBGaXggYSBwcm9ibGVtIGluIFRraW50ZXIgaW50cm9kdWNlZCBieSBTRiBwYXRjaCAjODY5NDY4OiBkZWxldGUgYm9ndXMKICBfX2hhc2F0dHJfXyBhbmQgX19kZWxhdHRyX18gbWV0aG9kcyBvbiBjbGFzcyBUayB0aGF0IHdlcmUgYnJlYWtpbmcKICBUa2RuZC4KCi0gQnVnICMxMDE1MTQwOiBkaXNhbWJpZ3VhdGVkIHRoZSB0ZXJtICJhcnRpY2xlIGlkIiBpbiBubnRwbGliIGRvY3MgYW5kCiAgZG9jc3RyaW5ncyB0byBlaXRoZXIgImFydGljbGUgbnVtYmVyIiBvciAibWVzc2FnZSBpZCIuCgotIEJ1ZyAjMTIzODE3MDogdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyBubyBsb25nZXIgaGFzICJrd2FyZ3M9e30iIGFzIGEKICBwYXJhbWV0ZXIsIGJ1dCB1c2VzIHRoZSB1c3VhbCAia3dhcmdzPU5vbmUiLgoKLSB0ZXh0d3JhcCBub3cgcHJvY2Vzc2VzIHRleHQgY2h1bmtzIGF0IE8obikgc3BlZWQgaW5zdGVhZCBvZiBPKG4qKjIpLgogIFBhdGNoICMxMjA5NTI3IChDb250cmlidXRlZCBieSBDb25uZWxseSkuCgotIHVybGxpYjIgaGFzIG5vdyBhbiBhdHRyaWJ1dGUgJ2h0dHByZXNwb25zZXMnIG1hcHBpbmcgZnJvbSBIVFRQIHN0YXR1cyBjb2RlCiAgdG8gVzNDIG5hbWUgKDQwNCAtPiAnTm90IEZvdW5kJykuIFJGRSAjMTIxNjk0NC4KCi0gQnVnICMxMTc3NDY4OiBEb24ndCBjYWNoZSB0aGUgL2Rldi91cmFuZG9tIGZpbGUgZGVzY3JpcHRvciBmb3Igb3MudXJhbmRvbSwKICBhcyB0aGlzIGNhbiBjYXVzZSBwcm9ibGVtcyB3aXRoIGFwcHMgY2xvc2luZyBhbGwgZmlsZSBkZXNjcmlwdG9ycy4KCi0gQnVnICM4MzkxNTE6IEZpeCBhbiBhdHRlbXB0IHRvIGFjY2VzcyBzeXMuYXJndiBpbiB0aGUgd2FybmluZ3MgbW9kdWxlOwogIGl0IGNhbiBiZSBtaXNzaW5nIGluIGVtYmVkZGVkIGludGVycHJldGVycwoKLSBCdWcgIzExNTU2Mzg6IEZpeCBhIGJ1ZyB3aGljaCBhZmZlY3RlZCBIVFRQIDAuOSByZXNwb25zZXMgaW4gaHR0cGxpYi4KCi0gQnVnICMxMTAwMjAxOiBDcm9zcy1zaXRlIHNjcmlwdGluZyB3YXMgcG9zc2libGUgb24gQmFzZUhUVFBTZXJ2ZXIgdmlhCiAgZXJyb3IgbWVzc2FnZXMuCgotIEJ1ZyAjMTEwODk0ODogQ29va2llLnB5IHByb2R1Y2VkIGludmFsaWQgSmF2YVNjcmlwdCBjb2RlLgoKLSBUaGUgdG9rZW5pemUgbW9kdWxlIG5vdyBkZXRlY3RzIGFuZCByZXBvcnRzIGluZGVudGF0aW9uIGVycm9ycy4KICBCdWcgIzEyMjQ2MjEuCgotIFRoZSB0b2tlbml6ZSBtb2R1bGUgaGFzIGEgbmV3IHVudG9rZW5pemUoKSBmdW5jdGlvbiB0byBzdXBwb3J0IGEgZnVsbAogIHJvdW5kdHJpcCBmcm9tIGxleGVkIHRva2VucyBiYWNrIHRvIFB5dGhvbiBzb3VyY2UgY29kZS4gIEluIGFkZGl0aW9uLAogIHRoZSBnZW5lcmF0ZV90b2tlbnMoKSBmdW5jdGlvbiBub3cgYWNjZXB0cyBhIGNhbGxhYmxlIGFyZ3VtZW50IHRoYXQKICB0ZXJtaW5hdGVzIGJ5IHJhaXNpbmcgU3RvcEl0ZXJhdGlvbi4KCi0gQnVnICMxMTk2MzE1OiBmaXggd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5IGNvbnN0cnVjdG9yLgoKLSBCdWcgIzEyMTM4OTQ6IG9zLnBhdGgucmVhbHBhdGggZGlkbid0IHJlc29sdmUgc3ltbGlua3MgdGhhdCB3ZXJlIHRoZSBmaXJzdAogIGNvbXBvbmVudCBvZiB0aGUgcGF0aC4KCi0gUGF0Y2ggIzExMjAzNTM6IFRoZSB4bWxycGNsaWIgbW9kdWxlIHByb3ZpZGVzIGJldHRlciwgbW9yZSB0cmFuc3BhcmVudCwKICBzdXBwb3J0IGZvciBkYXRldGltZS57ZGF0ZXRpbWUsZGF0ZSx0aW1lfSBvYmplY3RzLiAgV2l0aCB1c2VfZGF0ZXRpbWUgc2V0CiAgdG8gVHJ1ZSwgYXBwbGljYXRpb25zIHNob3VsZG4ndCBoYXZlIHRvIGZpZGRsZSB3aXRoIHRoZSBEYXRlVGltZSB3cmFwcGVyCiAgY2xhc3MgYXQgYWxsLgoKLSBkaXN0dXRpbHMuY29tbWFuZHMudXBsb2FkIHdhcyBhZGRlZCB0byBzdXBwb3J0IHVwbG9hZGluZyBkaXN0cmlidXRpb24KICBmaWxlcyB0byBQeVBJLgoKLSBkaXN0dXRpbHMuY29tbWFuZHMucmVnaXN0ZXIgbm93IGVuY29kZXMgdGhlIGRhdGEgYXMgVVRGLTggYmVmb3JlIHBvc3RpbmcKICB0aGVtIHRvIFB5UEkuCgotIGRlY2ltYWwgb3BlcmF0b3IgYW5kIGNvbXBhcmlzb24gbWV0aG9kcyBub3cgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgaW5zdGVhZCBvZiByYWlzaW5nIGEgVHlwZUVycm9yIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBvdGhlciB0eXBlcy4gIFRoaXMKICBhbGxvd3Mgb3RoZXIgY2xhc3NlcyB0byBpbXBsZW1lbnQgX19yYWRkX18gc3R5bGUgbWV0aG9kcyBhbmQgaGF2ZSB0aGVtCiAgd29yayBhcyBleHBlY3RlZC4KCi0gQnVnICMxMTYzMzI1OiAgRGVjaW1hbCBpbmZpbml0aWVzIGZhaWxlZCB0byBoYXNoLiAgQXR0ZW1wdGluZyB0bwogIGhhc2ggYSBOYU4gcmFpc2VkIGFuIEludmFsaWRPcGVyYXRpb24gaW5zdGVhZCBvZiBhIFR5cGVFcnJvci4KCi0gUGF0Y2ggIzkxODEwMTogQWRkIHRhcmZpbGUgb3BlbiBtb2RlIHJ8KiBmb3IgYXV0by1kZXRlY3Rpb24gb2YgdGhlCiAgc3RyZWFtIGNvbXByZXNzaW9uOyBhZGQsIGZvciBzeW1tZXRyeSByZWFzb25zLCByOiogYXMgYSBzeW5vbnltIG9mIHIuCgotIFBhdGNoICMxMDQzODkwOiBBZGQgZXh0cmFjdGFsbCBtZXRob2QgdG8gdGFyZmlsZS4KCi0gUGF0Y2ggIzEwNzU4ODc6IERvbid0IHJlcXVpcmUgTVNWQyBpbiBkaXN0dXRpbHMgaWYgdGhlcmUgaXMgbm90aGluZwogIHRvIGJ1aWxkLgoKLSBQYXRjaCAjMTEwMzQwNzogUHJvcGVybHkgZGVhbCB3aXRoIHRhcmZpbGUgaXRlcmF0b3JzIHdoZW4gdW50YXJyaW5nCiAgc3ltYm9saWMgbGlua3Mgb24gV2luZG93cy4KCi0gUGF0Y2ggIzY0NTg5NDogVXNlIGdldHJ1c2FnZSBmb3IgY29tcHV0aW5nIHRoZSB0aW1lIGNvbnN1bXB0aW9uIGluCiAgcHJvZmlsZS5weSBpZiBhdmFpbGFibGUuCgotIFBhdGNoICMxMDQ2ODMxOiBVc2UgZ2V0X3B5dGhvbl92ZXJzaW9uIHdoZXJlIGFwcHJvcHJpYXRlIGluIHN5c2NvbmZpZy5weS4KCi0gUGF0Y2ggIzExMTc0NTQ6IFJlbW92ZSBjb2RlIHRvIHNwZWNpYWwtY2FzZSBjb29raWVzIHdpdGhvdXQgdmFsdWVzCiAgaW4gTFdQQ29va2llSmFyLgoKLSBQYXRjaCAjMTExNzMzOTogQWRkIGNvb2tpZWxpYiBzcGVjaWFsIG5hbWUgdGVzdHMuCgotIFBhdGNoICMxMTEyODEyOiBNYWtlIGJzZGRiL19faW5pdF9fLnB5IG1vcmUgZnJpZW5kbHkgZm9yIG1vZHVsZWZpbmRlci4KCi0gUGF0Y2ggIzExMTAyNDg6IFNZTkNfRkxVU0ggdGhlIHpsaWIgYnVmZmVyIGZvciBHWmlwRmlsZS5mbHVzaC4KCi0gUGF0Y2ggIzExMDc5NzM6IEFsbG93IHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGluZXMgb2YgYSB0YXJmaWxlLkV4RmlsZU9iamVjdC4KCi0gUGF0Y2ggIzExMDQxMTE6IEFsdGVyIHNldHVwLnB5IC0taGVscCBhbmQgLS1oZWxwLWNvbW1hbmRzLgoKLSBQYXRjaCAjMTEyMTIzNDogUHJvcGVybHkgY2xlYW51cCBfZXhpdCBhbmQgdGtlcnJvciBjb21tYW5kcy4KCi0gUGF0Y2ggIzEwNDkxNTE6IHhkcmxpYiBub3cgdW5wYWNrcyBib29sZWFucyBhcyBUcnVlIG9yIEZhbHNlLgoKLSBGaXhlZCBidWcgaW4gYSBOYW1lRXJyb3IgYnVnIGluIGNvb2tpZWxpYi4gIFBhdGNoICMxMTE2NTgzLgoKLSBBcHBsaWVkIGEgc2VjdXJpdHkgZml4IHRvIFNpbXBsZVhNTFJQQ3NlcnZlciAoUFNGLTIwMDUtMDAxKS4gIFRoaXMKICBkaXNhYmxlcyByZWN1cnNpdmUgdHJhdmVyc2FsIHRocm91Z2ggaW5zdGFuY2UgYXR0cmlidXRlcywgd2hpY2ggY2FuCiAgYmUgZXhwbG9pdGVkIGluIHZhcmlvdXMgd2F5cy4KCi0gQnVnICMxMjIyNzkwOiBpbiBTaW1wbGVYTUxSUENTZXJ2ZXIsIHNldCB0aGUgcmV1c2UtYWRkcmVzcyBhbmQgY2xvc2Utb24tZXhlYwogIGZsYWdzIG9uIHRoZSBIVFRQIGxpc3RlbmluZyBzb2NrZXQuCgotIEJ1ZyAjNzkyNTcwOiBTaW1wbGVYTUxSUENTZXJ2ZXIgaGFkIHByb2JsZW1zIGlmIHRoZSByZXF1ZXN0IGdyZXcgdG9vIGxhcmdlLgogIEZpeGVkIGJ5IHJlYWRpbmcgdGhlIEhUVFAgYm9keSBpbiBjaHVua3MgaW5zdGVhZCBvZiBvbmUgYmlnIHNvY2tldC5yZWFkKCkuCgotIFBhdGNoZXMgIzg5MzY0MiwgIzEwMzkwODM6IGFkZCBhbGxvd19ub25lLCBlbmNvZGluZyBhcmd1bWVudHMgdG8gY29uc3RydWN0b3JzIG9mCiAgU2ltcGxlWE1MUlBDU2VydmVyIGFuZCBDR0lYTUxSUENSZXF1ZXN0SGFuZGxlci4KCi0gQnVnICMxMTEwNDc4OiBSZXZlcnQgb3MuZW52aXJvbi51cGRhdGUgdG8gZG8gcHV0ZW52IGFnYWluLgoKLSBCdWcgIzExMDM4NDQ6IGZpeCBkaXN0dXRpbHMuaW5zdGFsbC5kdW1wX2RpcnMoKSB3aXRoIG5lZ2F0ZWQgb3B0aW9ucy4KCi0gb3Mue1NFRUtfU0VULCBTRUVLX0NVUiwgU0VFS19FTkR9IGhhdmUgYmVlbiBhZGRlZCBmb3IgY29udmVuaWVuY2UuCgotIEVuaGFuY2VtZW50cyB0byB0aGUgY3N2IG1vZHVsZToKCiAgKyBEaWFsZWN0cyBhcmUgbm93IHZhbGlkYXRlZCBieSB0aGUgdW5kZXJseWluZyBDIGNvZGUsIGJldHRlcgogICAgcmVmbGVjdGluZyBpdHMgY2FwYWJpbGl0aWVzLCBhbmQgaW1wcm92aW5nIGl0cyBjb21wbGlhbmNlIHdpdGgKICAgIFBFUCAzMDUuCiAgKyBEaWFsZWN0IHBhcmFtZXRlciBwYXJzaW5nIGhhcyBiZWVuIHJlLWltcGxlbWVudGVkIHRvIGltcHJvdmUgZXJyb3IKICAgIHJlcG9ydGluZy4KICArIHF1b3RlY2hhcj1Ob25lIGFuZCBxdW90aW5nPVFVT1RFX05PTkUgbm93IHdvcmsgdGhlIHdheSBQRVAgMzA1CiAgICBkaWN0YXRlcy4KICArIHRoZSBwYXJzZXIgbm93IHJlbW92ZXMgdGhlIGVzY2FwZWNoYXIgcHJlZml4IGZyb20gZXNjYXBlZCBjaGFyYWN0ZXJzLgogICsgd2hlbiBxdW90aW5nPVFVT1RFX05PTk5VTUVSSUMsIHRoZSB3cml0ZXIgbm93IHRlc3RzIGZvciBudW1lcmljCiAgICB0eXBlcywgcmF0aGVyIHRoYW4gYW55IG9iamVjdCB0aGFuIGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIG51bWVyaWMuCiAgKyB3aGVuIHF1b3Rpbmc9UVVPVEVfTk9OTlVNRVJJQywgdGhlIHJlYWRlciBub3cgY2FzdHMgdW5xdW90ZWQgZmllbGRzCiAgICB0byBmbG9hdHMuCiAgKyByZWFkZXIgbm93IGFsbG93cyBcciBjaGFyYWN0ZXJzIHRvIGJlIHF1b3RlZCAocHJldmlvdXNseSBpdCBvbmx5IGFsbG93ZWQKICAgIFxuIHRvIGJlIHF1b3RlZCkuCiAgKyB3cml0ZXIgZG91YmxlcXVvdGUgaGFuZGxpbmcgaW1wcm92ZWQuCiAgKyBEaWFsZWN0IGNsYXNzZXMgcGFzc2VkIHRvIHRoZSBtb2R1bGUgYXJlIG5vIGxvbmdlciBpbnN0YW50aWF0ZWQgYnkKICAgIHRoZSBtb2R1bGUgYmVmb3JlIGJlaW5nIHBhcnNlZCAodGhlIGZvcm1lciB2YWxpZGF0aW9uIHNjaGVtZSByZXF1aXJlZAogICAgdGhpcywgYnV0IHRoZSBtZWNoYW5pc20gd2FzIHVucmVsaWFibGUpLgogICsgVGhlIGRpYWxlY3QgcmVnaXN0cnkgbm93IGNvbnRhaW5zIGluc3RhbmNlcyBvZiB0aGUgaW50ZXJuYWwKICAgIEMtY29kZWQgZGlhbGVjdCB0eXBlLCByYXRoZXIgdGhhbiByZWZlcmVuY2VzIHRvIHB5dGhvbiBvYmplY3RzLgogICsgdGhlIGludGVybmFsIGMtY29kZWQgZGlhbGVjdCB0eXBlIGlzIG5vdyBpbW11dGFibGUuCiAgKyByZWdpc3Rlcl9kaWFsZWN0IG5vdyBhY2NlcHRzIHRoZSBzYW1lIGtleXdvcmQgZGlhbGVjdCBzcGVjaWZpY2F0aW9ucwogICAgYXMgdGhlIHJlYWRlciBhbmQgd3JpdGVyLCBhbGxvd2luZyB0aGUgdXNlciB0byByZWdpc3RlciBkaWFsZWN0cwogICAgd2l0aG91dCBmaXJzdCBjcmVhdGluZyBhIGRpYWxlY3QgY2xhc3MuCiAgKyBhIGNvbmZpZ3VyYWJsZSBsaW1pdCB0byB0aGUgc2l6ZSBvZiBwYXJzZWQgZmllbGRzIGhhcyBiZWVuIGFkZGVkIC0KICAgIHByZXZpb3VzbHksIGFuIHVubWF0Y2hlZCBxdW90ZSBjaGFyYWN0ZXIgY291bGQgcmVzdWx0IGluIHRoZSBlbnRpcmUKICAgIGZpbGUgYmVpbmcgcmVhZCBpbnRvIHRoZSBmaWVsZCBidWZmZXIgYmVmb3JlIGFuIGVycm9yIHdhcyByZXBvcnRlZC4KICArIEEgbmV3IG1vZHVsZSBtZXRob2QgY3N2LmZpZWxkX3NpemVfbGltaXQoKSBoYXMgYmVlbiBhZGRlZCB0aGF0IHNldHMKICAgIHRoZSBwYXJzZXIgZmllbGQgc2l6ZSBsaW1pdCAocmV0dXJuaW5nIHRoZSBmb3JtZXIgbGltaXQpLiBUaGUgaW5pdGlhbAogICAgbGltaXQgaXMgMTI4a0IuCiAgKyBBIGxpbmVfbnVtIGF0dHJpYnV0ZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcmVhZGVyIG9iamVjdCwgd2hpY2ggdHJhY2tzCiAgICB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQgZnJvbSB0aGUgc291cmNlIGl0ZXJhdG9yLiBUaGlzIGlzIG5vdAogICAgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiByZWNvcmRzIHJldHVybmVkLCBhcyByZWNvcmRzIGNhbiBzcGFuCiAgICBtdWx0aXBsZSBsaW5lcy4KICArIHJlYWRlciBhbmQgd3JpdGVyIG9iamVjdHMgd2VyZSBub3QgYmVpbmcgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjeWNsaWMtR0MuCiAgICBUaGlzIGhhcyBiZWVuIGZpeGVkLgoKLSBfRHVtbXlUaHJlYWQgb2JqZWN0cyBpbiB0aGUgdGhyZWFkaW5nIG1vZHVsZSBub3cgZGVsZXRlIHNlbGYuX19ibG9jayB0aGF0IGlzCiAgaW5oZXJpdGVkIGZyb20gX1RocmVhZCBzaW5jZSBpdCB1c2VzIHVwIGEgbG9jayBhbGxvY2F0ZWQgYnkgJ3RocmVhZCcuICBUaGUKICBsb2NrIHByaW1pdGl2ZXMgdGVuZCB0byBiZSBsaW1pdGVkIGluIG51bWJlciBhbmQgdGh1cyBzaG91bGQgbm90IGJlIHdhc3RlZCBvbgogIGEgX0R1bW15VGhyZWFkIG9iamVjdC4gIEZpeGVzIGJ1ZyAjMTA4OTYzMi4KCi0gVGhlIGltZ2hkciBtb2R1bGUgbm93IGRldGVjdHMgRXhpZiBmaWxlcy4KCi0gU3RyaW5nSU8udHJ1bmNhdGUoKSBub3cgY29ycmVjdGx5IGFkanVzdHMgdGhlIHNpemUgYXR0cmlidXRlLgogIChCdWcgIzk1MTkxNSkuCgotIGxvY2FsZS5weSBub3cgdXNlcyBhbiB1cGRhdGVkIGxvY2FsZSBhbGlhcyB0YWJsZSAoYnVpbHQgdXNpbmcKICBUb29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weSwgYSB0b29sIHRvIHBhcnNlIHRoZSBYMTEgbG9jYWxlCiAgYWxpYXMgZmlsZSk7IHRoZSBlbmNvZGluZyBsb29rdXAgd2FzIGVuaGFuY2VkIHRvIHVzZSBQeXRob24ncwogIGVuY29kaW5nIGFsaWFzIHRhYmxlLgoKLSBtb3ZlZCBkZXByZWNhdGVkIG1vZHVsZXMgdG8gTGliL2xpYi1vbGQ6ICB3aHJhbmRvbSwgdHpwYXJzZSwgc3RhdGNhY2hlLgoKLSB0aGUgcGlja2xlIG1vZHVsZSBubyBsb25nZXIgYWNjZXB0cyB0aGUgZGVwcmVjYXRlZCBOb25lIG9wdGlvbiBpbiB0aGUKICBhcmdzIHR1cGxlIHJldHVybmVkIGJ5IF9fcmVkdWNlX18oKS4KCi0gb3B0cGFyc2Ugbm93IG9wdGlvbmFsbHkgaW1wb3J0cyBnZXR0ZXh0LiAgVGhpcyBhbGxvd3MgaXRzIHVzZSBpbiBzZXR1cC5weS4KCi0gdGhlIHBpY2tsZSBtb2R1bGUgbm8gbG9uZ2VyIHVzZXMgdGhlIGRlcHJlY2F0ZWQgYmluIHBhcmFtZXRlci4KCi0gdGhlIHNoZWx2ZSBtb2R1bGUgbm8gbG9uZ2VyIHVzZXMgdGhlIGRlcHJlY2F0ZWQgYmluYXJ5IHBhcmFtZXRlci4KCi0gdGhlIHBzdGF0cyBtb2R1bGUgbm8gbG9uZ2VyIHVzZXMgdGhlIGRlcHJlY2F0ZWQgaWdub3JlKCkgbWV0aG9kLgoKLSB0aGUgZmlsZWNtcCBtb2R1bGUgbm8gbG9uZ2VyIHVzZXMgdGhlIGRlcHJlY2F0ZWQgdXNlX3N0YXRjYWNoZSBhcmd1bWVudC4KCi0gdW5pdHRlc3QuVGVzdENhc2UucnVuKCkgYW5kIHVuaXR0ZXN0LlRlc3RTdWl0ZS5ydW4oKSBjYW4gbm93IGJlIHN1Y2Nlc3NmdWxseQogIGV4dGVuZGVkIG9yIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4gIEZvcm1lcmx5LCB0aGUgc3ViY2xhc3NlZCBtZXRob2Qgd291bGQKICBiZSBpZ25vcmVkIGJ5IHRoZSByZXN0IG9mIHRoZSBtb2R1bGUuICAoQnVnICMxMDc4OTA1KS4KCi0gaGVhcHEubnNtYWxsZXN0KCkgYW5kIGhlYXBxLm5sYXJnZXN0KCkgbm93IHN1cHBvcnQga2V5PSBhcmd1bWVudHMgd2l0aAogIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gbGlzdC5zb3J0KCkuCgotIEJ1ZyAjMTA3Njk4NTogYGBjb2RlY3MuU3RyZWFtUmVhZGVyLnJlYWRsaW5lKClgYCBub3cgY2FsbHMgYGByZWFkKClgYCBvbmx5CiAgb25jZSB3aGVuIGEgc2l6ZSBhcmd1bWVudCBpcyBnaXZlbi4gVGhpcyBwcmV2ZW50cyBhIGJ1ZmZlciBvdmVyZmxvdyBpbiB0aGUKICB0b2tlbml6ZXIgd2l0aCB2ZXJ5IGxvbmcgc291cmNlIGxpbmVzLgoKLSBCdWcgIzEwODMxMTA6IGBgemxpYi5kZWNvbXByZXNzLmZsdXNoKClgYCB3b3VsZCBzZWdmYXVsdCBpZiBjYWxsZWQKICBpbW1lZGlhdGVseSBhZnRlciBjcmVhdGluZyB0aGUgb2JqZWN0LCB3aXRob3V0IGFueSBpbnRlcnZlbmluZwogIGBgLmRlY29tcHJlc3MoKWBgIGNhbGxzLgoKLSBUaGUgcmVjb252ZXJ0LnF1b3RlIGZ1bmN0aW9uIGNhbiBub3cgZW1pdCB0cmlwbGUtcXVvdGVkIHN0cmluZ3MuICBUaGUKICByZWNvbnZlcnQgbW9kdWxlIG5vdyBoYXMgc29tZSBzaW1wbGUgZG9jdW1lbnRhdGlvbi4KCi0gYGBVc2VyU3RyaW5nLk11dGFibGVTdHJpbmdgYCBub3cgc3VwcG9ydHMgbmVnYXRpdmUgaW5kaWNlcyBpbgogIGBgX19zZXRpdGVtX19gYCBhbmQgYGBfX2RlbGl0ZW1fX2BgCgotIEJ1ZyAjMTE0OTUwODogYGB0ZXh0d3JhcGBgIG5vdyBoYW5kbGVzIGh5cGhlbmF0ZWQgbnVtYmVycyAoZWcuICIyMDA0LTAzLTA1IikKICBjb3JyZWN0bHkuCgotIFBhcnRpYWwgZml4ZXMgZm9yIFNGIGJ1Z3MgIzExNjMyNDQgYW5kICMxMTc1Mzk2OiBJZiBhIGNodW5rIHJlYWQgYnkKICBgYGNvZGVjcy5TdHJlYW1SZWFkZXIucmVhZGxpbmUoKWBgIGhhcyBhIHRyYWlsaW5nICJcciIsIHJlYWQgb25lIG1vcmUKICBjaGFyYWN0ZXIgZXZlbiBpZiB0aGUgdXNlciBoYXMgcGFzc2VkIGEgc2l6ZSBwYXJhbWV0ZXIgdG8gZ2V0IGEgcHJvcGVyCiAgbGluZSBlbmRpbmcuIFJlbW92ZSB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiBhICJcclxuIiB0aGF0IGhhcyBiZWVuIHNwbGl0CiAgYmV0d2VlbiB0d28gbGluZXMuCgotIEJ1ZyAjMTI1MTMwMDogT24gVUNTLTQgYnVpbGRzIHRoZSAidW5pY29kZS1pbnRlcm5hbCIgY29kZWMgd2lsbCBub3cgY29tcGxhaW4KICBhYm91dCBpbGxlZ2FsIGNvZGUgcG9pbnRzLiBUaGUgY29kZWMgbm93IHN1cHBvcnRzIFBFUCAyOTMgc3R5bGUgZXJyb3IKICBoYW5kbGVycy4KCi0gQnVnICMxMjM1NjQ2OiBgYGNvZGVjcy5TdHJlYW1SZWNvZGVyLm5leHQoKWBgIG5vdyByZWVuY29kZXMgdGhlIGRhdGEgaXQgcmVhZHMKICBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHNvIHRoYXQgdGhlIG91dHB1dCBpcyBhIGJ5dGUgc3RyaW5nIGluIHRoZSBjb3JyZWN0CiAgZW5jb2RpbmcgaW5zdGVhZCBvZiBhIHVuaWNvZGUgc3RyaW5nLgoKLSBCdWcgIzEyMDI0OTM6IEZpeGluZyBTUkUgcGFyc2VyIHRvIGhhbmRsZSAne30nIGFzIHBlcmwgZG9lcywgcmF0aGVyIHRoYW4KICBjb25zaWRlcmluZyBpdCBleGFjdGx5IGxpa2UgYSAnKicuCgotIEJ1ZyAjMTI0NTM3OTogQWRkICJ1bmljb2RlLTEtMS11dGYtNyIgYXMgYW4gYWxpYXMgZm9yICJ1dGYtNyIgdG8KICBgYGVuY29kaW5ncy5hbGlhc2VzYGAuCgotIGAgdXUuZW5jb2RlKClgYCBhbmQgYGB1dS5kZWNvZGUoKWBgIG5vdyBzdXBwb3J0IHVuaWNvZGUgZmlsZW5hbWVzLgoKLSBQYXRjaCAjMTQxMzcxMTogQ2VydGFpbiBwYXR0ZXJucyBvZiBkaWZmZXJlbmNlcyB3ZXJlIG1ha2luZyBkaWZmbGliCiAgdG91Y2ggdGhlIHJlY3Vyc2lvbiBsaW1pdC4KCi0gQnVnICM5NDc5MDY6IEFuIG9iamVjdCBvcmllbnRlZCBpbnRlcmZhY2UgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGNhbGVuZGFyCiAgbW9kdWxlLiBJdCdzIHBvc3NpYmxlIHRvIGdlbmVyYXRlIEhUTUwgY2FsZW5kYXIgbm93IGFuZCB0aGUgbW9kdWxlIGNhbiBiZQogIGNhbGxlZCBhcyBhIHNjcmlwdCAoZS5nLiB2aWEgYGBweXRob24gLW1jYWxlbmRhcmBgKS4gTG9jYWxpemVkIG1vbnRoIGFuZAogIHdlZWtkYXkgbmFtZXMgY2FuIGJlIG91cHV0IChldmVuIGlmIGFuIGV4b3RpYyBlbmNvZGluZyBpcyB1c2VkKSB1c2luZwogIHNwZWNpYWwgY2xhc3NlcyB0aGF0IHVzZSB1bmljb2RlLgoKQnVpbGQKLS0tLS0KCi0gRml4IHRlc3RfZmxvYXQsIHRlc3RfbG9uZywgYW5kIHRlc3Rfc3RydWN0IGZhaWx1cmVzIG9uIFRydTY0IHdpdGggZ2NjCiAgYnkgdXNpbmcgLW1pZWVlIGdjYyBvcHRpb24uCgotIFBhdGNoICMxNDMyMzQ1OiBNYWtlIHB5dGhvbiBjb21waWxlIG9uIERyYWdvbkZseS4KCi0gQnVpbGQgc3VwcG9ydCBmb3IgV2luNjQtQU1ENjQgd2FzIGFkZGVkLgoKLSBQYXRjaCAjMTQyODQ5NDogUHJlZmVyIGxpbmtpbmcgYWdhaW5zdCBuY3Vyc2VzdyBvdmVyIG5jdXJzZXMgbGlicmFyeS4KCi0gUGF0Y2ggIzg4MTgyMDogbG9vayBmb3Igb3BlbnB0eSBhbmQgZm9ya3B0eSBhbHNvIGluIGxpYmJzZC4KCi0gVGhlIHNvdXJjZXMgb2YgemxpYiBhcmUgbm93IHBhcnQgb2YgdGhlIFB5dGhvbiBkaXN0cmlidXRpb24gKHpsaWIgMS4yLjMpLgogIFRoZSB6bGliIG1vZHVsZSBpcyBub3cgYnVpbHRpbiBvbiBXaW5kb3dzLgoKLSBVc2UgLXhjb2RlPXBpYzMyIGZvciBDQ1NIQVJFRCBvbiBTb2xhcmlzIHdpdGggU3VuUHJvLgoKLSBCdWcgIzExODkzMzA6IGNvbmZpZ3VyZSBkaWQgbm90IGNvcnJlY3RseSBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeQogIHZhbHVlIG9mIExJTktDQyBpZiBweXRob24gd2FzIGJ1aWx0IHdpdGggR0NDIDQuMC4KCi0gVXBncmFkZSBXaW5kb3dzIGJ1aWxkIHRvIHpsaWIgMS4yLjMgd2hpY2ggZWxpbWluYXRlcyBhIHBvdGVudGlhbCBzZWN1cml0eQogIHZ1bG5lcmFiaWxpdHkgaW4gemxpYiAxLjIuMSBhbmQgMS4yLjIuCgotIEVYVFJBX0NGTEFHUyBoYXMgYmVlbiBpbnRyb2R1Y2VkIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGhvbGQgY29tcGlsZXIKICBmbGFncyB0aGF0IGNoYW5nZSBiaW5hcnkgY29tcGF0aWJpbGl0eS4gIENoYW5nZXMgd2VyZSBhbHNvIG1hZGUgdG8KICBkaXN0dXRpbHMuc3lzY29uZmlnIHRvIGFsc28gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHVzZWQgZHVyaW5nCiAgY29tcGlsYXRpb24gb2YgdGhlIGludGVycHJldGVyIGFuZCBvZiBDIGV4dGVuc2lvbnMgdGhyb3VnaCBkaXN0dXRpbHMuCgotIFNGIHBhdGNoIDExNzE3MzU6IERhcndpbiA4J3MgaGVhZGVycyBhcmUgYW5hbCBhYm91dCBQT1NJWCBjb21wbGlhbmNlLAogIGFuZCBsaW5raW5nIGhhcyBjaGFuZ2VkIChwcmViaW5kaW5nIGlzIG5vdyBkZXByZWNhdGVkLCBhbmQgbGliY2NfZHluYW1pYwogIG5vIGxvbmdlciBleGlzdHMpLiBUaGlzIGNvbmZpZ3VyZSBwYXRjaCBtYWtlcyB0aGluZ3MgcmlnaHQuCgotIEJ1ZyAjMTE1ODYwNzogQnVpbGQgd2l0aCAtLWRpc2FibGUtdW5pY29kZSBhZ2Fpbi4KCi0gc3B3ZG1vZHVsZS5jIGlzIGJ1aWx0IG9ubHkgaWYgZWl0aGVyIEhBVkVfR0VUU1BOQU0gb3IgSEFWRV9IQVZFX0dFVFNQRU5UIGlzCiAgZGVmaW5lZC4gIERpc2NvdmVyZWQgYXMgYSByZXN1bHQgb2Ygbm90IGJlaW5nIGFibGUgdG8gYnVpbGQgb24gT1MgWC4KCi0gc2V0dXAucHkgbm93IHVzZXMgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiBMREZMQUdTIHVzaW5nIHRoZSAtTCBvcHRpb24KICBhbmQgaW4gQ1BQRkxBR1MgdXNpbmcgdGhlIC1JIG9wdGlvbiBmb3IgYWRkaW5nIGxpYnJhcnkgYW5kIGluY2x1ZGUKICBkaXJlY3RvcmllcywgcmVzcGVjdGl2ZWx5LCBmb3IgY29tcGlsaW5nIGV4dGVuc2lvbiBtb2R1bGVzIGFnYWluc3QuICBUaGlzIGhhcwogIGxlZCB0byB0aGUgY29yZSBiZWluZyBjb21waWxlZCB1c2luZyB0aGUgdmFsdWVzIGluIENQUEZMQUdTLiAgSXQgYWxzbyByZW1vdmVzCiAgdGhlIG5lZWQgZm9yIHRoZSBzcGVjaWFsLWNhc2luZyBvZiBib3RoIERhcndpblBvcnRzIGFuZCBGaW5rIGZvciBkYXJ3aW4gc2luY2UKICB0aGUgcHJvcGVyIGRpcmVjdG9yaWVzIGNhbiBiZSBzcGVjaWZpZWQgaW4gTERGTEFHUyAoYGAtTC9zdy9saWJgYCBmb3IgRmluaywKICBgYC1ML29wdC9sb2NhbC9saWJgYCBmb3IgRGFyd2luUG9ydHMpIGFuZCBDUFBGTEFHUyAoYGAtSS9zdy9pbmNsdWRlYGAgZm9yCiAgRmluaywgYGAtSS9vcHQvbG9jYWwvaW5jbHVkZWBgIGZvciBEYXJ3aW5Qb3J0cykuCgotIFRlc3QgaW4gY29uZmlndXJlLmluIHRoYXQgY2hlY2tzIGZvciB0enNldCBubyBsb25nZXIgZGVwZW5kZW50IG9uIHRtLT50bV96b25lCiAgdG8gZXhpc3QgaW4gdGhlIHN0cnVjdCAobm90IHJlcXVpcmVkIGJ5IGVpdGhlciBJU08gQyBub3IgdGhlIFVOSVggMiBzcGVjKS4KICBUZXN0cyBmb3Igc2FuaXR5IGluIHR6bmFtZSB3aGVuIEhBVkVfVFpOQU1FIGRlZmluZWQgd2VyZSBhbHNvIGRlZmluZWQuCiAgQ2xvc2VzIGJ1ZyAjMTA5NjI0NC4gIFRoYW5rcyBHcmVnb3J5IEJvbmQuCgpDIEFQSQotLS0tLQoKLSBgYFB5TWVtX3tEZWwsIERFTH1gYCBhbmQgYGBQeU1lbV97RnJlZSwgRlJFRX1gYCBubyBsb25nZXIgbWFwIHRvCiAgYGBQeU9iamVjdF97RnJlZSwgRlJFRX1gYC4gIFRoZXkgbWFwIHRvIHRoZSBzeXN0ZW0gYGBmcmVlKClgYCBub3cuICBJZiBtZW1vcnkKICBpcyBvYnRhaW5lZCB2aWEgdGhlIGBgUHlPYmplY3RfYGAgZmFtaWx5LCBpdCBtdXN0IGJlIHJlbGVhc2VkIHZpYSB0aGUKICBgYFB5T2JqZWN0X2BgIGZhbWlseSwgYW5kIGxpa2V3aXNlIGZvciB0aGUgYGBQeU1lbV9gYCBmYW1pbHkuICBUaGlzIGhhcwogIGFsd2F5cyBiZWVuIG9mZmljaWFsbHkgdHJ1ZSwgYnV0IHdoZW4gUHl0aG9uJ3Mgc21hbGwtb2JqZWN0IGFsbG9jYXRvciB3YXMKICBpbnRyb2R1Y2VkLCBhbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGNhdGVyIHRvIGEgZmV3IGV4dGVuc2lvbiBtb2R1bGVzCiAgZGlzY292ZXJlZCBhdCB0aGUgdGltZSB0aGF0IG9idGFpbmVkIG1lbW9yeSB2aWEgYGBQeU9iamVjdF9OZXdgYCBidXQKICByZWxlYXNlZCBpdCB2aWEgYGBQeU1lbV9ERUxgYC4gIEl0J3MgeWVhcnMgbGF0ZXIsIGFuZCBpZiBzdWNoIGNvZGUgc3RpbGwKICBleGlzdHMgaXQgd2lsbCBmYWlsIG5vdyAocHJvYmFibHkgd2l0aCBzZWdmYXVsdHMsIGJ1dCBjYWxsaW5nIHdyb25nCiAgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBjYW4geWllbGQgbWFueSBzeW1wdG9tcykuCgotIEFkZGVkIGEgQyBBUEkgZm9yIHNldCBhbmQgZnJvemVuc2V0IG9iamVjdHMuCgotIFJlbW92ZWQgUHlSYW5nZV9OZXcoKS4KCi0gUGF0Y2ggIzEzMTM5Mzk6IFB5VW5pY29kZV9EZWNvZGVDaGFybWFwKCkgYWNjZXB0cyBhIHVuaWNvZGUgc3RyaW5nIGFzIHRoZQogIG1hcHBpbmcgYXJndW1lbnQgbm93LiBUaGlzIHN0cmluZyBpcyB1c2VkIGFzIGEgbWFwcGluZyB0YWJsZS4gQnl0ZSB2YWx1ZXMKICBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFuZCAweEZGRkUgYXJlIHRyZWF0ZWQgYXMgdW5kZWZpbmVkCiAgbWFwcGluZ3MuCgoKVGVzdHMKLS0tLS0KCi0gSW4gdGVzdF9vcywgc3RfP3RpbWUgaXMgbm93IHRydW5jYXRlZCBiZWZvcmUgY29tcGFyaW5nIGl0IHdpdGggU1RfP1RJTUUuCgotIFBhdGNoICMxMjc2MzU2OiBOZXcgcmVzb3VyY2UgInVybGZldGNoIiBpcyBpbXBsZW1lbnRlZC4gIFRoaXMgZW5hYmxlcwogIGV2ZW4gaW1wYXRpZW50IHBlb3BsZSB0byBydW4gdGVzdHMgdGhhdCByZXF1aXJlIHJlbW90ZSBmaWxlcy4KCgpEb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0KCi0gQnVnICMxNDAyMjI0OiBBZGQgd2FybmluZyB0byBkbCBkb2NzIGFib3V0IGNyYXNoZXMuCgotIEJ1ZyAjMTM5NjQ3MTogRG9jdW1lbnQgdGhhdCBXaW5kb3dzJyBmdGVsbCgpIGNhbiByZXR1cm4gaW52YWxpZAogIHZhbHVlcyBmb3IgdGV4dCBmaWxlcyB3aXRoIFVOSVgtc3R5bGUgbGluZSBlbmRpbmdzLgoKLSBCdWcgIzEyNzQ4Mjg6IERvY3VtZW50IG9zLnBhdGguc3BsaXR1bmMoKS4KCi0gQnVnICMxMTkwMjA0OiBDbGFyaWZ5IHdoaWNoIGRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBieSBzaXRlLnB5LgoKLSBCdWcgIzExOTM4NDk6IENsYXJpZnkgb3MucGF0aC5leHBhbmR1c2VyKCkgZG9jdW1lbnRhdGlvbi4KCi0gQnVnICMxMjQzMTkyOiByZS5VTklDT0RFIGFuZCByZS5MT0NBTEUgYWZmZWN0IFxkLCBcRCwgXHMgYW5kIFxTLgoKLSBCdWcgIzc1NTYxNzogRG9jdW1lbnQgdGhlIGVmZmVjdHMgb2Ygb3MuY2hvd24oKSBvbiBXaW5kb3dzLgoKLSBQYXRjaCAjMTE4MDAxMjogVGhlIGRvY3VtZW50YXRpb24gZm9yIG1vZHVsZWZpbmRlciBpcyBub3cgaW4gdGhlIGxpYnJhcnkgcmVmZXJlbmNlLgoKLSBQYXRjaCAjMTIxMzAzMTogRG9jdW1lbnQgdGhhdCBvcy5jaG93bigpIGFjY2VwdHMgYXJndW1lbnQgdmFsdWVzIG9mIC0xLgoKLSBCdWcgIzExOTA1NjM6IERvY3VtZW50IG9zLndhaXRwaWQoKSByZXR1cm4gdmFsdWUgd2l0aCBXTk9IQU5HIGZsYWcuCgotIEJ1ZyAjMTE3NTAyMjogQ29ycmVjdCB0aGUgZXhhbXBsZSBjb2RlIGZvciBwcm9wZXJ0eSgpLgoKLSBEb2N1bWVudCB0aGUgSXRlcmFibGVVc2VyRGljdCBjbGFzcyBpbiB0aGUgVXNlckRpY3QgbW9kdWxlLgogIENsb3NlcyBidWcgIzExNjY1ODIuCgotIFJlbW92ZSBhbGwgbGF0ZW50IHJlZmVyZW5jZXMgZm9yICJNYWNpbnRvc2giIHRoYXQgcmVmZXJyZWQgdG8gc2VtYW50aWNzIGZvcgogIE1hYyBPUyA5IGFuZCBjaGFuZ2UgdG8gcmVmbGVjdCB0aGUgc3RhdGUgZm9yIE9TIFguCiAgQ2xvc2VzIHBhdGNoICMxMDk1ODAyLiAgVGhhbmtzIEphY2sgSmFuc2VuLgoKTWFjCi0tLQoKCk5ldyBwbGF0Zm9ybXMKLS0tLS0tLS0tLS0tLQoKLSBGcmVlQlNEIDcgc3VwcG9ydCBpcyBhZGRlZC4KCgpUb29scy9EZW1vcwotLS0tLS0tLS0tLQoKLSBDcmVhdGVkIE1pc2MvVmltL3ZpbV9zeW50YXgucHkgdG8gYXV0by1nZW5lcmF0ZSBhIHB5dGhvbi52aW0gZmlsZSBpbiB0aGF0CiAgZGlyZWN0b3J5IGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIGluIFZpbS4gIFZpbSBkaXJlY3Rvcnkgd2FzIGFkZGVkIGFuZCBwbGFjZWQKICB2aW1yYyB0byBpdCAod2FzIHByZXZpb3VzIHVwIGEgbGV2ZWwpLgoKLSBBZGRlZCB0d28gbmV3IGZpbGVzIHRvIFRvb2xzL3NjcmlwdHM6IHB5c291cmNlLnB5LCB3aGljaCByZWN1cnNpdmVseQogIGZpbmRzIFB5dGhvbiBzb3VyY2UgZmlsZXMsIGFuZCBmaW5kbm9jb2RpbmcucHksIHdoaWNoIGZpbmRzIFB5dGhvbgogIHNvdXJjZSBmaWxlcyB0aGF0IG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24uCiAgUGF0Y2ggIzc4NDA4OSwgY3JlZGl0cyB0byBPbGVnIEJyb3l0bWFubi4KCi0gQnVnICMxMDcyODUzOiBwaW5kZW50LnB5IHVzZWQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCi0gUGF0Y2ggIzExNzc1OTc6IENvcnJlY3QgQ29tcGxleC5fX2luaXRfXy4KCi0gRml4ZWQgYSBkaXNwbGF5IGdsaXRjaCBpbiBQeW5jaGUsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSByaWdodCBhcnJvdyB0bwogIHdpZ2dsZSBvdmVyIGJ5IGEgcGl4ZWwuCgotLS0tCgoqKihGb3IgaW5mb3JtYXRpb24gYWJvdXQgb2xkZXIgdmVyc2lvbnMsIGNvbnN1bHQgdGhlIEhJU1RPUlkgZmlsZS4pKioK