LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDI4IDE5OjM2OjM2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglEZXN0cm95IHRoZSBsaXN0Ym94IGFuZCBlZGl0IGNvbnRyb2wgd2hlbiBkZXN0cm95aW5nIHRoZQoJY29tYm8uIFRoaXMgc2hvdWxkIHByZXZlbnQgY3Jhc2hlcyBvbiBhcHBsaWNhdGlvbiBleGl0LgoKCSogW21pc2Mvc3lzdGVtLmNdIFtpZjE2MzIvc3lzdGVtLnNwZWNdCglJbXBsZW1lbnRlZCBJbnF1aXJlU3lzdGVtKCkuCgoJKiBbbG9hZGVyL3Rhc2suY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXQoJRmlyc3QgYXR0ZW1wdCBhdCBpbnRlci10YXNrIFNlbmRNZXNzYWdlKCkuIFN0aWxsIGhhcyBhIGxvdCBvZgoJcHJvYmxlbXMuCgpUdWUgTWF5IDI4IDE0OjI2OjA0IDE5OTYgIFBldGVyIEJhanVzeiAgPGh5cC14QGluZi5ibWUuaHU+CgoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIE1ESVRpbGUgd2l0aCBpY29uaWMgY2hpbGRyZW4uCgpNb24gTWF5IDI3IDIwOjI4OjE4IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglDaG9vc2VGb250IGRpYWxvZzoKCS0gY29tcGxldGUgcmV3cml0ZSBvZiBGb250RmFtaWx5RW51bVByb2MoKSBhbmQgRm9udFN0eWxlRW51bVByb2MoKQoJICBub3QgcmVhbCBhdmFpbGFibGUgZm9udCB0eXBlcyAoZS5nLiAiQm9sZCIpIGNhbiBub3Qgc2VsZWN0ZWQKCS0gc3VwcG9ydGluZyBtb3JlIENGX0xJTUlUU0laRS0gYW5kIENGXy4uLk9OTFktIGZsYWdzCgoJKiBbb2JqZWN0cy9mb250LmNdCglJbiBGT05UX01hdGNoRm9udCBwZXJmb3JtIGNoZWNrIGlmICJsZkZhY2VOYW1lIiBpcyBmYW1pbHkgZnJvbSBYMTEKCW9ubHkgaWYgImxmRmFjZU5hbWUiIGlzIGEgd2luZG93cyBmb250IGZhbWlseSB0aGVuIGRvIGEgY2FsbCBvZgoJRk9OVF9UcmFuc2xhdGVOYW1lKCkgOiB0aGlzIHJlc3VsdHMgaW4gYmV0dGVyIGZvbnQgc2VsZWN0aW9ucyBpbiAKCUNob29zZUZvbnQoKSBvciBhcHBsaWNhdGlvbnMgbGlrZSBjaGFybWFwLmV4ZSBvciB3cml0ZS5leGUuCglBZGRlZCBhIFBhcnNlRm9udFBhcm1zKCkgY2FsbCBpZiBuZWNlc3NhcnkgaW4gZnVuY3Rpb24gCglGT05UX01hdGNoRm9udCgpOiB3ZSBuZWVkIGEgZm9udCBuYW1lIGFzIGJhc2lzIGZvciBHZXRUZXh0RmFjZSgpIAoJZXZlbiBpZiB0aGVyZSBpc24ndCBvbmUuLi4KCgkqIFtyZXNvdXJjZXMvVE9ET10KCUludmVudG9yeSBvZiByZXNvdXJjZSB0cmFuc2xhdGlvbnMgaW4gc3lzcmVzXz8/LnJjCgpGcmkgTWF5IDI0IDE2OjMzOjI4IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10KCV93OTVfbG9hZHJlZzogdXNlIG9mZnNldCB0byBkZXRlcm1pbmUgbmV4dCBSR0RCIHBvc2l0aW9uIHRvby4KClRodSBNYXkgMjMgMTk6MzU6MzggMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4ZWQgc2l6ZSBvZiBjb21ibywgbGJveCwgYW5kIGJ1dHRvbiAobGIgc29tZXRpbWVzIG9mZiBieSAyIHBpeGVscykuCgoJKiBbbWlzYy9tYWluLmNdCglSZXN1bHQgb2Ygb3B0aW9uICItZml4ZWRtYXAiIGlzIHRvIHR1cm4gZmxhZyBvbi4KClRodSBNYXkgMjMgMTk6MTU6NDEgMTk5NiAgV2FpZGVyICA8cm9vdEB3YWlkZXIuaWU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxFeGVjdXRlIGFuZCBGaW5kRXhlY3V0YWJsZSBub3cgYm90aCB1c2UgY29tbW9uIGNvZGUgdG8KCWRldGVybWluZSB0aGUgcmVxdWlyZWQgZXhlY3V0YWJsZSBmaWxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDIxIDE0OjA2OjA3IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJTWFkZSBCdXR0b25XbmRQcm9jIGEgMzItYml0IHdpbmRvdyBwcm9jZWR1cmUuCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJTWFkZSBEZXNrdG9wV25kUHJvYyBhIDMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlLgoJQWRkZWQgaGFuZGxpbmcgb2YgV01fU0VUQ1VSU09SLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUFsbG9jYXRlIG1lbnUgaXRlbXMgYW5kIHN0cmluZ3Mgb24gdGhlIDMyLWJpdCBzeXN0ZW0gaGVhcC4KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb25zIGZvciBDaGFuZ2VNZW51LCBJbnNlcnRNZW51LCBNb2RpZnlNZW51LAoJQXBwZW5kTWVudSBhbmQgTG9hZE1lbnVJbmRpcmVjdC4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglBZGRlZCBwb3NzaWJpbGl0eSB0byBoYXZlIDMyLWJpdCBidWlsdC1pbiBjbGFzc2VzLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglJbXBsZW1lbnRlZCBHZXRMb2dpY2FsRHJpdmUoKSBhbmQgR2V0TG9naWNhbERyaXZlU3RyaW5ncygpLgoKCSogW21pc2Mvc3B5LmNdIFtpbmNsdWRlL3NweS5oXQoJQWRkZWQgc3VwcG9ydCBmb3Igc3B5aW5nIFdpbjMyIG1lc3NhZ2VzLgoKCSogW2xvYWRlci9idWlsdGluLmNdCglGaXhlZCBidWcgaW4gLWRsbCBvcHRpb24gcGFyc2luZy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUFkZGVkIGJhY2sgdGhlIGNoYW5nZSBieSBIdXcgRC4gTS4gRGF2aWVzIHRvIGZyZWUgdGhlIGJsb2NrIGluCglMb2NhbFJlYWxsb2MoKSBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV3IG9uZS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9jdXJzb3JpY29uLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJRml4ZWQgYnVnIGluIGJpdG1hcCBzaXplIHRoYXQgY2F1c2VkIG1lbW9yeSBjb3JydXB0aW9uIGZvciAyNGJwcC4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEZWZXaW5kb3dQcm9jKCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgU2VuZERsZ0l0ZW1NZXNzYWdlLAoJR2V0L1NldERsZ0l0ZW1UZXh0IGFuZCBHZXQvU2V0RGxnSXRlbUludC4KCgkqIFt3aW5kb3dzL21kaS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEZWZGcmFtZVByb2MoKSBhbmQgRGVmTURJQ2hpbGRQcm9jKCkuCglEb24ndCBtYWtlIGEgY29weSBvZiB0aGUgT0JNIGJpdG1hcHMgZm9yIGV2ZXJ5IE1ESSB3aW5kb3cuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIFNlbmRNZXNzYWdlKCkuCgkKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy93aW4uY10KCU5ldyBzY2hlbWUgZm9yIDMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlcyB0byByZXBsYWNlIGFsaWFzZXMuIEFsbAoJMzItYml0IHdpbmRvdyBwcm9jZWR1cmUgZ2V0IGEgMTYtYml0IGFkZHJlc3MgcG9pbnRpbmcgdG8gYQoJV0lORE9XUFJPQyBzdHJ1Y3R1cmUuCglJbXBsZW1lbnRlZCBBbnNpPC0+VW5pY29kZSB0cmFuc2xhdGlvbiBmb3IgQ2FsbFdpbmRvd1Byb2MoKS4KCUFkZGVkIHRyYW5zbGF0aW9uIG9mIFdNX0RSQVdJVEVNIGJldHdlZW4gV2luMTYgYW5kIFdpbjMyLgoKCSogW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCB1Z2x5IGhhY2sgdG8gYnVpbGQgQ1JFQVRFU1RSVUNUIG9uIHRoZSBzdGFjayB3aGVuIHNlbmRpbmcKCVdNX05DQ1JFQVRFLgoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBHZXQvU2V0V2luZG93V29yZC9Mb25nIGFuZAoJR2V0L1NldFdpbmRvd1RleHQuCgkKRnJpIE1heSAxNyAxMDoyMDoxNiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQXZvaWQgZ3JheSB0ZXh0IG9uIGdyYXkgYmFja2dyb3VuZCBpbiBkaXNhYmxlZCBwdXNoIGJ1dHRvbnMKCXVzaW5nIGEgYi93IHJhc3RlciBhbmQgc29tZSByYXN0ZXIgb3BlcmF0aW9ucyAoUGF0Qmx0LEJpdEJsdCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglEcmF3VGV4dCgpOiBkb24ndCBkcmF3IGFuIHVuZGVyYmFyIGFueW1vcmUgaWYgRFRfQ0FMQ1JFQ1QgaXMgc2V0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgTWF5IDE2IDEzOjM1OjMxIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogWyovKi5jXQoJUmVuYW1lZCBSRUNULCBQT0lOVCBhbmQgU0laRSBzdHJ1Y3R1cmVzIHRvIFJFQ1QxNiwgUE9JTlQxNiBhbmQKCVNJWkUxNi4gSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBtb3N0IGZ1bmN0aW9ucyB0aGF0IHRha2UKCXRoZXNlIHR5cGVzIGFzIHBhcmFtZXRlcnMuCgoJKiBbY29uZmlndXJlXQoJUGF0Y2hlZCBhdXRvY29uZiB0byBhdHRlbXB0IHRvIGNvcnJlY3RseSBkZXRlY3QgLWxuc2wgYW5kCgktbHNvY2tldC4gUGxlYXNlIGNoZWNrIHRoaXMgb3V0LgoJCgkqIFtjb250cm9scy9idXR0b24uY10KCUFkZGVkIHN1cHBvcnQgZm9yIFdpbjMyIEJNXyogbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQXZvaWQgc2VuZGluZyBleHRyYSBXTV9NRU5VU0VMRUNUIG1lc3NhZ2VzLiBUaGlzIGF2b2lkcyBjcmFzaGVzCgl3aXRoIEV4Y2VsLgoKCSogW21lbW9yeS5oZWFwLmNdIFtpbmNsdWRlL2hlYXAuaF0KCUFkZGVkIHN1cHBvcnQgZm9yIFNFR1BUUnMgaW4gV2luMzIgaGVhcHMuIEFkZGVkIGEgZmV3IG1hY3JvcyB0bwogCW1ha2UgdXNpbmcgU0VHUFRScyBlYXNpZXIuIFRoZXkgYXJlIGEgYml0IHNsb3dlciB0aGFuIE1BS0VfU0VHUFRSLAogCWJ1dCB0aGV5IHdvcmsgd2l0aCBXaW4zMi4KCgkqIFttZW1vcnkvYXRvbS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgYXRvbSBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCBMb2NhbFJlQWxsb2MoKSBjaGFuZ2VzIHRvIGF2b2lkIGNvcHlpbmcgdGhlIHdob2xlIGJsb2NrIHR3aWNlLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJVXNlIC9kZXYvemVybyBpbnN0ZWFkIG9mIE1BUF9BTk9OIGZvciBWaXJ0dWFsQWxsb2MoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglQcm9wZXJseSBpbXBsZW1lbnRlZCB0aGUgV2luMzIgY2xhc3MgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSAoTmV3IGZpbGUpCglOZXcgZmlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIFdpbjE2IGFuZCBXaW4zMi4KCk1vbiBNYXkgMTMgMTg6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL21kaS5jXSBbd2luZG93cy9tZW51LmNdCglJbXByb3ZlZCBXTV9NRElDUkVBVEUgYW5kIFdNX01ESUNBU0NBREUgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbb2JqZWN0cy9iaXRibHQuY10KCUhhbmRsZSBHcmFwaGljc0V4cG9zZSBldmVudCBmb3IgQml0Qmx0IGZyb20gc2NyZWVuIHRvIHNjcmVlbi4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1bmNoIG9mIGZpeGVzIGZvciBwcm9ibGVtcyB3aXRoIC1tYW5hZ2VkLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQ2hhbmdlZCBjb25kaXRpb25zIGZvciBXTV9TSVpFLCBXTV9NT1ZFLCBhbmQgV01fR0VUTUlOTUFYSU5GTwoJaW4gQ3JlYXRlV2luZG93LgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3F1ZXVlLmNdIFttaXNjL3VzZXIuY10KCURvIG5vdCBzZW5kIFdNX1BBUkVOVE5PVElGWSB3aGVuIGluIEFwcEV4aXQgYW5kIGNhbGwgV0hfU0hFTEwKCW9uIHdpbmRvdyBjcmVhdGlvbi9kZXN0cnVjdGlvbi4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUNydWRlIFJlYWxpemVQYWxldHRlKCkuIEF0IGxlYXN0IHNvbWV0aGluZyBpcyB2aXNpYmxlIGluIEx2aWV3UHJvLgoKU3VuIE1heSAxMiAwMjowNTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJQWRkZWQgUmVjdGFuZ2xlICh1c2Ugd2luMTYgdmVyc2lvbikuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBHZXRXaW5kb3dzRGlyZWN0b3J5QSAodXNlIHdpbjE2IEdldFdpbmRvd3NEaXJlY3RvcnkpLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIEdldFN1Yk1lbnUsIE1vdmVXaW5kb3csIFNldFNjcm9sbFBvcywgU2V0U2Nyb2xsUmFuZ2UgKHVzZSB3aW4xNgoJdmVyc2lvbnMpLgoJQWRkZWQgU2V0V2luZG93c0hvb2tFeEEgKGVtcHR5IHN0dWIgZm9yIG5vdykuCgoJKiBbaW5jbHVkZS9oYW5kbGUzMi5oXQoJQ2hhbmdlZCAjaW5jbHVkZSA8bWFsbG9jLmg+IHRvICNpbmNsdWRlIDxzdGRsaWIuaD4gdG8gcHJldmVudAoJaGF0ZSBtZXNzYWdlIGZyb20gRnJlZUJTRCBjb21waWxlci4KCgkqIFt3aW4zMi9uZXdmbnMuY10KCUFkZGVkIG5ldyBmdW5jdGlvbiBTZXRXaW5kb3dzSG9va0V4MzJBIChlbXB0eSBzdHViIGZvciBub3cpLgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJUmVtb3ZlZCByZWR1bmRhbnQgZGVidWdnaW5nIHByaW50ZiBzdGF0ZW1lbnQuCgpTdW4gTWF5IDEyIDAxOjI0OjU3IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUF2b2lkIGNyZWF0aW5nIGFkamFjZW50IGZyZWUgYmxvY2tzLgoJRnJlZSB0aGUgYmxvY2sgaW4gTG9jYWxSZUFsbG9jKCkgYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcgb25lLgoJRml4ZWQgTG9jYWxSZUFsbG9jKCkgZm9yIGRpc2NhcmRlZCBibG9ja3MuCgkKRnJpIE1heSAxMCAyMzowNToxMiAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRmkucmNdCglDaG9vc2VGb250IGFuZCBDaG9vc2VDb2xvciBkaWFsb2dzIHVwZGF0ZWQuCgpGcmkgTWF5IDEwIDE3OjE5OjMzIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RyaXZlLmMsaWYxNjMyL2tlcm5lbC5zcGVjXQoJR2V0Q3VycmVudERpcmVjdG9yeSgpLFNldEN1cnJlbnREaXJlY3RvcnkoKSBpbXBsZW1lbnRlZC4KCgkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXQoJICBbaW5jbHVkZS93aW5kb3dzLmhdIFtpbmNsdWRlL3dpbnJlZy5oXSBbbG9hZGVyL21haW4uY10KCSAgW21pc2MvbWFpbi5jXSBbbWlzYy9zaGVsbC5jXSBbbWlzYy9yZWdpc3RyeS5jXQoJUmVnaXN0cnkgZml4ZXM6CgktIGxvYWRzIHdpbjk1IHJlZ2lzdHJ5IGRhdGFiYXNlcywKCS0gc2F2ZSBvbmx5IHVwZGF0ZWQga2V5cyBvbiBkZWZhdWx0LAoJLSBub3cgYWRoZXJzIHRvIHRoZSBuZXcgZnVuY3Rpb24gbmFtaW5nIHN0YW5kYXJkLAoJLSBtaW5vciBjbGVhbnVwcy4KClR1ZSBNYXkgNyAyMjozNjoxMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbWJvLmNdCglBZGRlZCBXTV9DT01NQU5ELWhhbmRsaW5nIGZvciBpbnRlcmFjdGlvbiBiZXR3ZWVuIEVESVQgYW5kIENPTUJPTEJPWAogICAgICAgIGFuZCBzeW5jaHJvbml6ZWQgbWluZSB3aXRoIEdyZWcgS3JlaWRlcidzIHdvcmtzLgoKCSogW2NvbW1kbGcuY10KCUJ1Z2ZpeCBpbiBDaG9vc2VGb250OiBmb250IHNpemUgaGFuZGxpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBNYXkgIDYgMTI6NTY6MjYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbREVWRUxPUEVSUy1ISU5UU10KCUFkZGVkIHBhcmFncmFwaCBvbiBuYW1pbmcgY29udmVudGlvbnMgZm9yIFdpbjE2L1dpbjMyL1dpbmVsaWIuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ3JlYXRlIGEgZGVmYXVsdCBzeXN0ZW0gbWVudSB0aGF0IGlzIHRoZSBzYW1lIGZvciBhbGwgd2luZG93cwoJaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGV2ZXJ5IHRpbWUuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgV0lORUxJQl9OQU1FIGFuZCBERUNMX1dJTkVMSUJfVFlQRSBtYWNyb3MuCglBZGRlZCB4eDE2IGFuZCB4eDMyIGRlZmluaXRpb25zIGZvciBtb3N0IHR5cGVzLiBHZW5lcmFsIGNsZWFuLXVwLgoKCSogW21lbW9yeS9nbG9iYWwuY10gW21lbW9yeS9sb2NhbC5jXSBbKi8qXQoJUmVuYW1lZCBHbG9iYWwgYW5kIExvY2FsIGhlYXAgZnVuY3Rpb25zIHRvIHh4eDE2LiBBZGRlZCBhbGwgeHh4MzIKCXZlcnNpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCU1hc2sgb3V0IGxvd2VyIGJpdHMgb2Ygc2VsZWN0b3IgaW4gRnJlZVNlbGVjdG9yKCkuCgoJKiBbbWlzYy9sc3RyLmNdCglGaXhlZCB3dnNwcmludGYoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglDaGFuZ2VkIHRoZSBjbGFzcyBzdHJ1Y3R1cmUgdG8gbWFrZSBXaW4zMiBzdXBwb3J0IGVhc2llci4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgV01fSU5JVE1FTlVQT1BVUCBmb3Igc3lzdGVtIG1lbnUgdG8gZ3JheSBvdXQKCWludmFsaWQgb3B0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeDogdGhlIFdJTkRPU1BPUyBzdHJ1Y3R1cmUgcG9pbnRlciBpbiBXTV9OQ0NBTENTSVpFIG11c3QgYmUKCWEgU0VHUFRSLgoKU3VuIE1heSAgNSAwMzo1MToyNiAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglJbXBsZW1lbnRhdGlvbiBvZiBtb3ZlYWJsZSBhbmQgKHJ1ZGltZW50YXJ5KSBzdXBwb3J0IGZvcgogCWRpc2NhcmRhYmxlIGxvY2FsIG1lbW9yeSwgcGx1cyBzZXZlcmFsIGJ1ZyBmaXhlcy4KClNhdCBNYXkgIDQgMTg6MzM6MzUgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL3dpbi5jXSBbaWYxNjMyL3VzZXIuc3BlY10gCglGaW5kV2luZG93RXgoKSBpbXBsZW1lbnRlZCAoc29tZW9uZSByZXBvcnRlZCBpdCB3YXMgbWlzc2luZwoJZm9yIEZyYW1lTWFrZXIgNC4xKS4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10gW3dpbjMyL21lbW9yeS5jXQoJICBbd2luMzIvcmVzb3VyY2UuY10KCU1pc2Mgc21hbGwgc3R1YnMvc21hbGwgZnVuY3Rpb25zIHdoaWNoIGJyaW5nIHdpbjk1IGJpbmFyaWVzCglmdXJ0aGVyIGRvd24gdGhlIHJvYWQuIChJc0JhZENvZGVQdHIsIExvY2FsUmVBbGxvYyxHZXRDdXJzb3JQb3MpCglTbWFsbCBmaXggaW4gV0lOMzJfTG9hZEFjY2VsZXJhdG9yc0EuCgpGcmkgTWF5ICAzIDE5OjQzOjEyIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5MZWlkZW5Vbml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KCUNoYW5nZWQgLyBmaXhlZCBzb21lIHR5cGVzIGFuZCB0eXBlY2FzdHMuCglGaXhlZCB0aGUgc2Nyb2xsYmFyIHJlc2V0IGFmdGVyIFdNX1NFVEhBTkRMRSAvIFdNX1NFVFRFWFQuCglBZGRlZCBoZWFwIGluaXRpYWxpemF0aW9uIGluIFdNX0NSRUFURS4KCkZyaSBNYXkgIDMgMTk6MzA6MDIgMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvbGlzdGJveC5jXQoJUGFzcyBXTV9bSFZdU0NST0xMIHRvIGxpc3Rib3gsIGJ1dCBub3QgY29tYm8uCglEb24ndCB0cnkgdG8gcmVkcmF3IG5vbi1leGlzdGFudCBzY3JvbGwgYmFycyAoY2hhbmdlcyBkd1N0eWxlIGZsYWdzKS4KCUNvbWJvIGJveCBnZXRzIGJvcmRlci4KCUNvbWJvIGJveCBpbmNsdWRlcyBidXR0b24gKG90aGVyd2lzZSBidXR0b24gd29uJ3QgdHJpZ2dlciBkcm9wZG93bikuCglQcm9wZXIgYm9yZGVyIGFyb3VuZCBSZWN0QnV0dG9uLgoJQ2hlY2sgc2l6ZSBjb25zaXN0YW5jeSBvZiBjb21ibywgbGlzdGJveCwgYW5kIGJ1dHRvbiBhZnRlciByZXNpemluZyAKCW9yIGJlZm9yZSBwYWludGluZy4gIFRoZXNlIHJvdXRpbmVzIHN0aWxsIGFyZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QuCglMb2NhbGl6ZSBzaXplIGNoZWNrcyBpbiBzZXBhcmF0ZSByb3V0aW5lcy4KCUxpc3Rib3hlcyBhcmUgd2hpdGUuCgpUaHUgTWF5ICAyIDE5OjIxOjIzIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29udHJvbHMvY29tYm8uY11baW5jbHVkZS9jb21tZGxnLmhdW2luY2x1ZGUvY29tbWRsZy5jXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY11bcmVzb3VyY2VzL3N5c3Jlc19Fbi5yY10KCUludHJvZHVjZWQgQ2hvb3NlRm9udCBkaWFsb2csIGJ1dCBuZWVkZWQgc29tZSBwYXRjaGVzIGluIAoJaGFuZGxpbmcgb2YgY29tYm9ib3hlcyB3aXRoIGVkaXQgY29udHJvbHMuCgpUdWUgQXByIDMwIDAwOjMzOjI3IDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbcHJvZ3JhbXMvd2luaGVscC8qXQoJQWRkZWQgYSBoZWxwIHZpZXdlciBhbmQgYSBzaW1wbGUgYC5obHAnIHRvIGAuc2dtbCcgY29udmVydGVyLgoKTW9uIEFwciAyOSAxNDoxNzo1NyAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBzdGhpbmMuZGVtb24uY28udWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc18qLnJjXSBbbWlzYy9zaGVsbC5jXQoJTW9kaWZpZWQgc2l6ZSBvZiAiQWJvdXQiIGRpYWxvZyBib3hlcy4KClNhdCBBcHIgMjcgMTg6MTA6MTEgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dW2xvYWRlci9idWlsdGluLmNdCgljcnRkbGwuc3BlYywgbnRkbGwuc3BlYywgd3NvY2szMi5zcGVjOiBuZXcgZmlsZXMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXggZXJyb3IgbWVzc2FnZSBpZiBpbXBvcnQgYnkgb3JkaW5hbCBmYWlsZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBcHIgMjggMTQ6MzI6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbTWFrZWZpbGUuaW5dCglTdWJkaXIgbWVtb3J5IGlzIG5vdyBhbHNvIGNvbXBpbGVkIGZvciBXaW5lbGliLCBpbiBvcmRlciB0byBnZXQKCXRoZSBXaW4zMiBoZWFwIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dCglSZW5hbWVkIHdpbnByb2NzIGFuZCB3aW5wcm9jczMyIHRvIHdwcm9jcyBhbmQgd3Byb2NzMzIgdG8gYXZvaWQKCURMTCBuYW1lcyA+IDggY2hhcmFjdGVycy4KCgkqIFtsb2FkZXIvYnVpbHRpbi5jXSAoTmV3IGZpbGUpCglHcm91cGVkIGFsbCBidWlsdC1pbiBETExzIGNvZGUgaW4gYSBzaW5nbGUgZmlsZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglVc2UgdGhlIFdpbjMyIGhlYXAgY29kZSBpbnN0ZWFkIG9mIG1hbGxvYygpIHRvIGFsbG9jYXRlIGxpbmVhcgoJbWVtb3J5LiBUaGlzIHdpbGwgaGVscCB0ZXN0IHRoZSBoZWFwIGNvZGUuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCBGcmVlU2VsZWN0b3IoKSB0byBjbGVhciBEUyBhbmQgRVMgY29ycmVjdGx5IGZvciBodWdlIGJsb2Nrcy4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL3JlbGF5LmNdCglSZW1vdmVkICdpZCcgZGlyZWN0aXZlIGluIHNwZWMgZmlsZXMuIEZvciByZWxheSBkZWJ1Z2dpbmcsIHRoZSBETEwKCWVudHJ5IHBvaW50IGlzIG5vdyBjb21wdXRlZCBmcm9tIHRoZSBDUzpJUCBlbnRyeSBwb2ludCBhZGRyZXNzLgoJQWRkZWQgJ2hlYXAnIGRpcmVjdGl2ZSB0byBzcGVjaWZpeSBhIGxvY2FsIGhlYXAgZm9yIHRoZSBETEwuIFVTRVIKCWFuZCBHREkgaGVhcCBhcmUgbm93IGNyZWF0ZWQgdGhpcyB3YXkuCgoJKiBbd2luZG93cy9jbGFzcy5jXSBbaW5jbHVkZS9jbGFzcy5oXQoJQ2hhbmdlZCB0aGUgY2xhc3Mgc3RydWN0dXJlIHRvIHVzZSBwb2ludGVycyBpbnN0ZWFkIG9mIGhhbmRsZXMuCglDaGFuZ2VkIEdldC9TZXRDbGFzc1dvcmQvTG9uZyB0byB1c2UgYSBzd2l0Y2ggc3RhdGVtZW50OyB0aGlzCglhbGxvd3MgY2hhbmdpbmcgdGhlIGxheW91dCBvZiB0aGUgQ0xBU1Mgc3RydWN0dXJlLgoKCSogW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL3dpbi5oXQoJVXNlIGEgQ0xBU1MgKiBpbnN0ZWFkIG9mIGEgaGFuZGxlIGZvciB0aGUgd2luZG93IGNsYXNzLgoKU2F0IEFwciAyNyAxODoxMDoxMSBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbbWVtb3J5L2dsb2JhbC5jXQoJICBbd2luMzIvbWVtb3J5LmNdIFt3aW4zMi9wcm9jZXNzLmNdCglHZXRQcm9jZXNzQWZmaW5pdHlNYXNrLEdsb2JhbExvY2ssSXNCYWRSZWFkUHRyLElzQmFkV3JpdGVQdHIsCglMb2NhbExvY2ssU2V0VGhyZWFkQWZmaW5pdHlNYXNrOiBuZXcgcmVsYXlzLgoKCSogW3dpbjMyL2N1cnNvcmljb24zMi5jXQoJUmV0dXJuIHNhbWUgaGFuZGxlIGlmIGEgY3Vyc29yIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lcy4KClNhdCBBcHIgMjcgMTU6MTM6MzcgMTk5NiAgQmFuZyBKdW4gWW91bmcgPGJhbmdqeUBub3dudXJpLm5vd2NvbS5jby5rcj4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0tvLnJjXQogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIEtvcmVhbiBbS29dIGxhbmd1YWdlLgoKRnJpIEFwciAyNiAwMDo0OTowNSAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9kYy5jXSBbb2JqZWN0cy9mb250LmNdCglGaXhlZCBwcm9ibGVtIHdpdGggU2F2ZURDKCkvUmVzdG9yZURDKCkgYW5kIGZvbnQgY2FjaGUgJ3VzZWQnIGNvdW50LgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZGN2YWx1ZXMuY10KCUZpeGVkIGJyb2tlbiBTZXRUZXh0QWxpZ24oKSBvbiBtZXRhZmlsZXMuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRGVsZXRlIG9iamVjdHMgaW4gaGFuZGxlIHRhYmxlIGF0IGVuZCBvZiBQbGF5TWV0YUZpbGUoKS4KCldlZCBBcHIgMjQgMTk6MjE6MDEgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi92ZXIuc3BlY10gW21pc2MvdmVyLmNdIFtpbmNsdWRlL3Zlci5oXSAoTmV3IGZpbGVzKQoJVkVSLkRMTCAocGFydGlhbGx5KSBpbXBsZW1lbnRlZCAoVmVyRmluZEZpbGUsVmVySW5zdGFsbEZpbGUpCglbSWYgaXQgZG9lc24ndCB3b3JrIGZvciB5b3UsIHVzZSAtZGxsIC12ZXIgYW5kIHJlcG9ydCBpdCB0byBtZV0KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXQoJICBbaWYxNjMyL3NoZWxsMzIuc3BlY10gW21pc2Mvb2xlMm5scy5jXSBbd2luZG93cy9tZXNzYWdlLmNdCgkgIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglTaW1wbGUgd2luMzIgZnVuY3Rpb25zLCB3aGVyZSB3ZSBjYW4ganVzdCB1c2UgdGhlIHdpbjE2IGNvdW50ZXJwYXJ0LgoJTWlzYy4gc3R1YnMuIAoKCSogW21pc2MvbHN0ci5jXQoJU29tZW9uZSByZXBvcnRlZCBhIF9sc3RybGVuKE5VTEwpLiBOVUxMIGlzIGEgdmFsaWQgYXJndW1lbnQuIEZpeGVkLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNvbWUgYWxsb2NsZW5zIHdlcmUgb2ZmIGJ5IDEsIG9uZSBkb3VibGUgZmNsb3NlKCkgZml4ZWQuCglSZXF1ZXN0aW5nIHZhbHVlIDAgb2YgYSBrZXkgd2l0aCBubyB2YWx1ZXMgcmV0dXJucyBhbiBlcnJvciAKCShzaG91bGQgd2UgYWx3YXlzIHJldHVybiBhIG1hZGUgdXAgdmFsdWUgTlVMTD8gd2hhdCBkb2VzIHdpbjMuMT8pCgpUdWUgQXByIDIzIDE3OjAwOjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJSW1wbGVtZW50ZWQgRmluZEVudmlyb25tZW50U3RyaW5nKCksIERvRW52aXJvbm1lbnRTdWJzdCgpLAoJRXh0cmFjdEljb24oKSwgSW50ZXJuYWxFeHRyYWN0SWNvbigpIGFuZCBFeHRyYWN0QXNzb2NpYXRlZEljb24oKS4KCgkqIFttaXNjL3VzZXIuY10KCURvIGV4dGVuc2l2ZSBjbGVhbnVwIG9uIGFwcGxpY2F0aW9uIGV4aXQuCgoJKiBbd2luZG93cy9ob29rLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgbWlzY2VsbGFuZW91cyBjbGVhbnVwIHJvdXRpbmVzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1vcmUgZWZmaWNpZW50IHBvcHVwIG1lbnUgd2luZG93IGhhbmRsaW5nLgoKTW9uIEFwciAyMiAyMTozNToyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXVtvYmplY3RzL29lbWJpdG1hcC5jXVtpbmNsdWRlL2JpdG1hcHMvb2JtX3RydHlwZV0KCUFkZGVkICJUVC1iaXRtYXAiIGZvciBsYXRlciB1c2FnZSBpbiBhIENob29zZUZvbnQoKSBvd25lcmRyYXcgY29tYm9ib3guCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBBcHIgMjAgMjM6MjM6MTYgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BxYmMuY2xpYy5uZXQ+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Gci5yY10gW3Jlc291cmNlcy9UT0RPXQoJTWFkZSBjaGFuZ2VzIGZvciBDaG9vc2VfQ29sb3IgZGlhbG9nLgoKU2F0IEFwciAyMCAxNTo0Mzo0OSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUZpeGVkIHRlc3QgdGhhdCBnb3QgbWlzY29tcGlsZWQgYnkgc29tZSBvbGQgZ2NjIHZlcnNpb25zLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgdGhlIGxheW91dCBvZiBoYW5kbGUgdGFibGVzIHNvIHRoYXQgbW92ZWFibGUgaGFuZGxlIGVudHJpZXMKCWNhbiBiZSBmcmVlZCBvbiBMb2NhbEZyZWUoKS4KCUltcGxlbWVudGVkIExvY2FsRmxhZ3MoKSwgTG9jYWxDb3VudEZyZWUoKSwgTG9jYWxIYW5kbGVEZWx0YSgpIGFuZAoJR2V0SGVhcFNwYWNlcygpLgoKCSogW21pc2MvbWFpbi5jXSBbQU5OT1VOQ0VdCglVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKCXNvbWVvbmUuCgpGcmkgQXByIDE5IDIwOjA3OjIwIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyICA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCglGaXhlZCBFTV9TRVRIQU5ETEUgLyBXTV9DUkVBVEUgLyBFRElUX01ha2VGaXIoKSBidWZmZXIgYWxsb2NhdGlvbi4KCUZpeGVkIEVTX05PSElERVNFTCAvIFdNX01PVVNFTU9WRSAvIFdNX0xCVVRUT05ET1dOIGltcGxlbWVudGF0aW9uLgoJQWRkZWQgV01fRU5BQkxFIGltcGxlbWVudGF0aW9uIChncmF5IHRleHQpLgoJRml4ZWQgYnVmZmVyID4gMzI3NjcgYnVnLgoJRml4ZWQgYXJndW1lbnQgdHlwZXMgLyB0eXBlY2FzdGluZy4KCUZhc3RlciBzZWxlY3Rpb24gKHJlKWRyYXdpbmcuCgpUaHUgQXByIDE4IDEzOjM4OjI2IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10gW2luY2x1ZGUvd2lucmVnLmhdCglDaGFuZ2VkIHNhdmVmaWxlIGZvcm1hdCBhZ2FpbiB0byBodW1hbiByZWFkYWJsZS9lZGl0YWJsZQoJKFVOSUNPREUgY2hhcnMgPjB4ZmYgYXJlIHNwZWNpZmllZCBieSBcdVhYWFgsIGRhdGEgYnkgWFgpLgoJSGFzIG5vdyBnbG9iYWwgLyBsb2NhbCByZWdpc3RyeSBkYXRhYmFzZXMgKGluY2x1ZGluZyBtZXJnaW5nIHRoZW0pLgoJSEtFWV9DTEFTU0VTX1JPT1QgPT0gSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcQ2xhc3Nlcy4KCUhLRVlfQ1VSUkVOVF9VU0VSID09IEhLRVlfVVNFUlNcXDxsb2dpbm5hbWU+LgoKCSogW21pc2MvY29tbS5jXQoJQWxsb3cgIiAiIGFzIENPTXg6IC4uLiBzcGVjIGRlbGltaXRlciB0b28uCgkoQU9MLUNEIHNldHVwLmV4ZSB0cmllcyB0byBpbml0aWFsaXplIG1vZGVtMiBhcyAiOTYwMCx4LHggeCIgKGNhbid0IAoJcmVtZW1iZXIgdGhlIHgpLgoKVGh1IEFwciAxOCAwOTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL21kaS5jXQoJTWlzY2VsbGFuZW91cyBjaGFuZ2VzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIAoJVXNlIEJpdEJsdCB3aGVuZXZlciBwb3NzaWJsZSBpbiBTZXRXaW5kb3dQb3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJRml4IGluY29tcGF0aWJpbGl0aWVzIHdpdGggaHJnblVwZGF0ZSBiZWluZyAxLgoKV2VkIEFwciAxNyAxOToxOToyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW21pc2MvY29tbWRsZy5jXQoJTWFueSBidWdmaXhlcyBpbiBDaG9vc2VDb2xvciBkaWFsb2cuCglBZGRlZCBhIHVzZXIgZGVmaW5lZCBkaWFsb2cgdGl0bGUgaW4gRmlsZU9wZW4tL0ZpbGVTYXZlLSBkaWFsb2cuCgoJKiBbbWlzYy9jb21tZGxnLmNdW2luY2x1ZGUvY29tbWRsZy5oXQoJICBbaWYxNjMyL2NvbW1kbGcuc3BlY11baWYxNjMyL3dpbnByb2NzLnNwZWNdCglJbnRyb2R1Y2VkIGRpYWxvZy0sIGNhbGxiYWNrLSBhbmQgZW51bS0gc3R1YiBmdW5jdGlvbnMKCWZvciBDaG9vc2VGb250IGRpYWxvZwoKV2VkIEFwciAxNyAxOTowODozOCAxOTk2ICBOaWVscyBkZSBDYXJwZW50aWVyICA8bmllbHNAY2luZHkuZXQudHVkZWxmdC5ubD4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtpZjE2MzIvZ2RpLnNwZWNdCglJbXBsZW1lbnRlZCBFbnVtTWV0YUZpbGUgYW5kIENvcHlNZXRhRmlsZS4gUmVtb3ZlZCBNRVRBRklMRSBzdHJ1Y3QuCglJbXBsZW1lbnRlZCBNRVRBX1NUUkVUQ0hESUIgaW4gUGxheU1ldGFGaWxlUmVjb3JkLCBzZXZlcmFsIGJ1ZyAKCWZpeGVzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglEb24ndCB0cnkgdG8gaGlkZSB0aGUgd2luZG93IGlmIGl0J3MgYWxyZWFkeSBoaWRkZW4uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglMZXQgTVNHX1BlZWtIYXJkd2FyZU1zZyBmaWxsIHRoZSBtZXNzYWdlIHF1ZXVlIHdpdGggZXZlbnRzIGlmCglpdCdzIGVtcHR5LgoKV2VkIEFwciAxNyAxNzo1NDowNCAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBzdGhpbmMuZGVtb24uY28udWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KCVVwZGF0ZWQgdG8gc3VwcG9ydCB0aGUgbmV3IENIT09TRV9DT0xPUl9ESUFMT0cuCgpUdWUgQXByIDE2IDExOjUwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFtpZjE2MzIvTWFrZWZpbGVdIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMS93MzJzeXMuc3BlY10KCSAgW2luY2x1ZGUvdzMyc3lzLmhdIFtpbmNsdWRlL2RsbHMuaF0KCSAgW21pc2MvTWFrZWZpbGVdIFttaXNjL3czMnN5cy5jXQoJVzMyU1lTLkRMTCBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBcHIgMTQgMTI6NTE6MjcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglNYWRlIHRoZSByZXNvdXJjZSBsb2FkaW5nIGNvZGUgYWx3YXlzIHVzZSB0aGUgY29ycmVjdCBXaW5kb3dzCglsYXlvdXQgZm9yIFdpbmVsaWIgb24gb3RoZXIgQ1BVcy4KCgkqIFtpbmNsdWRlL21vZHVsZS5oXSBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgc2VsZiBoYW5kbGUgaW4gTkVfTU9EVUxFIHN0cnVjdHVyZSwgc28gd2UgY2FuIHVzZSBhIHBvaW50ZXIKCWluc3RlYWQgb2YgYSBoYW5kbGUuCglBZGRlZCBmdW5jdGlvbiBNT0RVTEVfR2V0UHRyKCkgdG8gdmFsaWRhdGUgYSBITU9EVUxFLgoKCSogW21lbW9yeS9oZWFwLmNdCglJbXBsZW1lbnRlZCBXaW4zMiBoZWFwIG1hbmFnZW1lbnQuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglGaXggc2VsZWN0b3IgbGltaXQgZm9yIGh1Z2UgYmxvY2tzLgoKU2F0IEFwciAxMyAwMDoxOToxMiAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRml4ZWQgbWVtY3B5IGJ1ZyB0byBhbGxvdyBtZW1vcnkgYmFzZWQgbWV0YWZpbGVzIHRvIHdvcmsuCgpGcmkgQXByIDEyIDE5OjI1OjQxIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyICA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCglDb21wbGV0ZSByZXdyaXRlLiAgRXZlcnl0aGluZyBjaGFuZ2VkOiBuZXcgZmVhdHVyZXMsIG5ldyBidWdzLgoJTWFpbiBhZGRpdGlvbjogV29yZFdyYXAuCgpGcmkgQXByIDEyIDIwOjI5OjU1IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QGRjcy5lZC5hYy51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0l0LnJjXQoJRml4ZWQgYSBmZXcgbWlzdGFrZXMgaW4gdGhlIGZpbGUgYW5kIHJlc2l6ZWQgc29tZSBvZiB0aGUgY29udHJvbHMuCgpGcmkgQXByIDEyIDA5OjU1OjEzIDE5OTYgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglGaXhlZCBicm9rZW4gI2lmIGRlZmluZWQgdGhhdCBzdG9wcGVkIHVuaXh3YXJlIGNvbXBpbGluZy4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXQogICAgICAgIEFkZGVkIG1pc3NpbmcgcmV0dXJuIHRvIGVuZCBvZiBGaW5kUmVzb3VyY2UzMi4KClRodSBBcHIgMTEgMTg6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJRml4ZWQgR2V0S2V5U3RhdGUgZm9yIG1vdXNlIGJ1dHRvbnMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglXTV9NT1VTRUFDVElWQVRFIHdhc24ndCBzZW50IGluIHNvbWUgY2FzZXMuCgpXZWQgQXByIDEwIDE4OjU5OjUzIDE5OTYgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgoKCSogW29iamVjdHMvZm9udC5jXQoJTWF0Y2ggc2xpZ2h0bHkgYmlnZ2VyIGZvbnQgaWYgaGVpZ2h0IG5lZ2F0aXZlLgoKTW9uIEFwciAgOCAxMzo0NjoxNSAxOTk2ICBEZWFubyBDYWx2ZXIgPGRlYW5vQHJhdHRpZS5kZW1vbi5jby51az4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglDaGFuZ2VkIHJlYWQncyB0byBGSUxFX3JlYWQncyBpbiBtbXN5c3RlbSB0byBmaXggbW1pbyBidWcuCgpTdW4gQXByICA3IDIxOjQwOjI5IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdIFtyZXNvdXJjZXMvc3lzcmVzX0VuLnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY10KCUludHJvZHVjZWQgQ29sb3JEbGdQcm9jKCkgZm9yIENob29zZUNvbG9yKCkgYW5kIHJlcGxhY2VkIGZpdHRpbmcKCUVuLSxEZS0gcmVzb3VyY2VzLiAKCUFzIHdyaXR0ZW4gaW4gVE9ETzogc29tZSBuYXRpb25hbCBsYW5ndWFnZSBzdXBwb3J0IGlzIG5lZWRlZCBoZXJlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgQXByICA1IDE1OjIyOjU1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvc3RhdGljLmNdCglDaGFuZ2VzIHRvIHVzZSBXTkQgKiB3aGVyZXZlciBwb3NzaWJsZS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL2RlYnVnLmxdCglBZGRlZCAnaW5mbyBtb2R1bGUnIGFuZCAnd2FsayBtb2R1bGUnIGNvbW1hbmRzLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9yZWxheS5jXSBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGFzc2VtYmx5IGNvZGUgZ2VuZXJhdGlvbiB0byBjYWxsIGZyb20gV2luZSBpbnRvIDMyLWJpdCBjb2RlLgoJQ2hhbmdlZCBhbGwgJ2NhbGwzMicgcmVmZXJlbmNlcyBpbiAnY2FsbGZyb20xNicgdG8gYXZvaWQgY29uZnVzaW9uCgl3aXRoIFdpbjMyIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHByb3RvdHlwZXMgZm9yIDMyLWJpdCBjYWxsYmFja3MuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbaWYxNjMyL3JlbGF5MzIuY10gW3Rvb2xzL2J1aWxkLmNdCglVbmlmaWVkIDE2LSBhbmQgMzItYml0IG1vZHVsZXMuIFRoZSBmYWtlIG1vZHVsZSBmb3IgMzItYml0IERMTHMgaXMKCW5vdyBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHByb2dyYW0uCgoJKiBbaW5jbHVkZS9tb2R1bGUuaF0KCUFkZGVkIGV4dHJhIGluZm8gdG8gTkVfTU9EVUxFIGZvciBXaW4zMiBtb2R1bGVzIHRvIHBvaW50IHRvIHRoZSBQRQoJbW9kdWxlIGRhdGEuCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXSBbbG9hZGVyL3BlX2ltYWdlLmNdIFt3aW4zMi9yZXNvdXJjZS5jXQoJUmVtb3ZlZCB0aGUgd2luZV9maWxlcyBsaXN0LiBUaGUgUEUgZGF0YSBmb3IgYSBtb2R1bGUgY2FuIG5vdyBiZQoJYWNjZXNzZWQgd2l0aCB0aGUgTkVfV0lOMzJfTU9EVUxFIG1hY3JvLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW5zdHIuY10KCURvbid0IHN0YXJ0IHRoZSBCSU9TIHRpbWVyIGF0IHN0YXJ0dXAsIGJ1dCBvbmx5IGFmdGVyIGFuIGFjY2VzcyB0bwoJdGhlIDB4NDAgc2VnbWVudC4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUNoYW5nZWQgTE9DQUxfTG9jaygpIHRvIHJldHVybiBhIDMyLWJpdCBwb2ludGVyLgoKCSogW21pc2MvbWFpbi5jXSBbaW5jbHVkZS9kbGxzLmhdCglTb21lIGJ1aWx0LWluIERMTHMgKGxpa2UgS0VSTkVMKSBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIGZyb20KIAl0aGUgY29tbWFuZC1saW5lLgoJClRodSBBcHIgIDQgMTk6NTQ6MzkgMTk5NiAgS2VpdGggUmV5bm9sZHMgPGtlaXRockBzY28uQ09NPgoKCSogWyovKl0KCUEgbG90IG9mIHNtYWxsIGNoYW5nZXMgdG8gc3VwcG9ydCBTQ08gT3BlblNlcnZlciA1LgoKVGh1IEFwciAgNCAxNTozODoxMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCBHZXRLZXlTdGF0ZSgpIGNhbGwgdG8gdXNlIDB4ODAwMCBjb252ZW50aW9uLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgdW5kb2N1bWVudGVkIG1lc3NhZ2VzIEVNX1NDUk9MTCBhbmQgRU1fR0VUVEhVTUIuCgpUaHUgQXByICA0IDA5OjUyOjUyIDE5OTYgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2lmMTYzMi9leGNlcHQuU10KCU1vZGlmaWVkIGNvZGUgdG8gYXNzZW1ibGUgb24gdW5peHdhcmUuCgpXZWQgQXByICAzIDA5OjM4OjI2IDE5OTYgIEp1ZXJnZW4gTWFycXVhcmR0IDxtYXJxdUBsdW5hci5hZHZhbnRlc3QuZGU+CgoJKiBbb2JqZWN0cy9mb250LmNdCglJbXBsZW1lbnRhdGlvbiBvZiBhIHNlY29uZCBmb250IGNhY2hlIHdoaWNoIHdpbGwgYmUgdXBkYXRlZAoJZHluYW1pY2FsbHkuCgpNb24gQXByICAxIDE2OjQ3OjQwIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfQ3oucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0RhLnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY10gW3Jlc291cmNlcy9zeXNyZXNfRW8ucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0VzLnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19GaS5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfTm8ucmNdIFtyZXNvdXJjZXMvVE9ET10KCVVwZGF0ZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgdG8gd29yayBsaWtlIHRoZSBFbmdsaXNoIHZlcnNpb24uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMzEgMTM6NTQ6NDYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZWQgQnVpbGRTcGVjMzJGaWxlcygpIHRvIGdlbmVyYXRlIGFzc2VtYmx5IGluc3RlYWQgb2YgQyBjb2RlLgoJVW5pZmllZCAtc3BlYzE2IGFuZCAtc3BlYzMyIG9wdGlvbnM7IERMTCB0eXBlIGlzIG5vdyBkZXRlcm1pbmVkIGJ5Cgl0aGUgJ3R5cGUnIGRlY2xhcmF0aW9uIGluIHRoZSAuc3BlYyBmaWxlLgoJTmV3IC1zdGRjYWxsIG9wdGlvbiB0byBidWlsZCBhbGwgc3RkY2FsbCBhc3NlbWJseSByZWxheXMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvcmVsYXkzMi5jXSBbaW5jbHVkZS9kbGxzLmhdCglTdGFydGVkIHRvIHVuaWZ5IDE2LSBhbmQgMzItYml0IGJ1aWx0aW4gRExMcy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MzIoKSB0byBtaXJyb3IgTU9EVUxFX0dldFduZFByb2NFbnRyeTE2KCkuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFsbCBtb2R1bGVzIG5vdyBoYXZlIGEgTkUgc2lnbmF0dXJlLCBhbmQgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkKCXRoZSBORV9GRkxBR1NfV0lOMzIgZmxhZy4KCgkqIFt3aW5kb3dzL2FsaWFzLmNdCglBbGlhc2VzIGZvciBidWlsdC1pbiB3aW5kb3cgcHJvY2VkdXJlcyBhcmUgbm93IGFsbCBjcmVhdGVkIGF0CglzdGFydHVwIGluIEFMSUFTX0luaXQoKS4KCkZyaSBNYXIgMjkgMTQ6NTY6MzkgMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJTGltaXQgcmVjdGFuZ2xlIHRvIGNsZWFyIHRvIHNpemUgb2YgaXRlbSB3aGVuIHBhaW50aW5nIGNvbWJvLCBub3QKIAlkZWZhdWx0LiAgT25seSBkcmF3IGl0ZW1zIGluIGxpc3Qgd2hlbiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgdGhlbS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglHZXQgdGhlIG1lYXN1cmUgb2YgZXZlcnkgaXRlbSB0aGF0J3MgYWRkZWQgYW5kIHN0b3JlIGluIHRoZSBpdGVtJ3MKIAlkYXRhIHN0cnVjdHVyZS4gIFNjcm9sbCBsaXN0Ym94IGlmIG1vdXNlIG5lYXIgZWRnZSBvZiBib3guICBPbmx5CiAJZHJhdyBpdGVtcyBpbiBsaXN0IHdoZW4gdGhlcmUgaXMgZW5vdWdoIHJvb20uCgpGcmkgTWFyIDI5IDEyOjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9tZGkuY10KCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdIAoJVmFyaW91cyBjaGFuZ2VzIGZvciBiZXR0ZXIga2V5Ym9hcmQgaGFuZGxpbmcuIAoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbbWlzYy9rZXlib2FyZC5jXQoJUHJvcGVyIGtleWJvYXJkIG1lc3NhZ2Ugb3JkZXJpbmcsIHdvcmtpbmcgR2V0S2V5U3RhdGUoKSAoZmluYWxseSEpLCAKCWltcHJvdmVtZW50cyBpbiBUb0FzY2lpKCkuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJU21hbGwgaW1wcm92ZW1lbnRzIGluIFdJTl9GaW5kV2luVG9SZXBhaW50LgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJUHV0IHVwZGF0ZSByZWdpb24gaW4gV01fTkNQQUlOVCB3UGFyYW0uCgoJKiBbbG9hZGVyL3Rhc2suY10KCUtpbGwgdGFzayB0aW1lcnMgd2hlbiB0YXNrIGlzIGRlbGV0ZWQsIHN3aXRjaCB0aW1lcnMgdG8gdGhlCgluZXcgcXVldWUgaW4gU2V0VGFza1F1ZXVlKCkuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9kb3NtZW0uY10KCUFkZGVkIFNJR0FMUk0gc2lnbmFsIGhhbmRsZXIgdG8gaW5jcmVtZW50IEJJT1MgY2xvY2suIAoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9tZGkuY10KCUZpeGVkIENoaWxkV2luZG93RnJvbVBvaW50KCksIFdNX1BBUkVOVE5PVElGWSBhbmQgaXRzIGhhbmRsaW5nIGJ5CglNREkgY2xpZW50LgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXByb3ZlbWVudHMgaW4gaGFuZGxpbmcgb2Ygb3duZWQgcG9wdXBzLiAiRmxvYXRpbmciIHRvb2xib3hlcyAKCXdvcmsgYmV0dGVyIG5vdy4gCgpUaHUgTWFyIDI4IDEyOjM4OjI5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10KCU5ldyBmaWxlLCByZWdpc3RyeSByZXdyaXRlIGluY2x1ZGluZyB3aW4zMiBleHRlbnNpb25zCgktIFVuaWNvZGUKCS0gbXVsdGlwbGUgdmFsdXMgcGVyIGtleQoJLSBkaWZmZXJlbnQgZGF0YXR5cGVzIGZvciB2YWx1ZXMKCS0gbXVsdGlwbGUgcm9vdGtleXMKCS0gc2F2aW5nIGFuZCBsb2FkaW5nIGluIGRpZmZlcmVudCByZWdpc3RyaWVzLgoKCSogW2luY2x1ZGUvd2lucmVnLmhdCglOZXcgZmlsZSwgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHMgZm9yIHJlZ2lzdHJ5LgoKCSogW2luY2x1ZGUvd2luZXJyb3IuaF0KCVNvbWUgbmV3IGVycm9yIGRlZmluZXMgYWRkZWQuLi4gdGhlcmUgYXJlIG1vcmUsIHNvbWVvbmUgcGxlYXNlCiAJY2hlY2sgYSAocmVhbC0pd2luZG93cyB3aW5lcnJvci5oLgoJCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW2lmMTYzMi9hZHZhcGkzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJUmVnaXN0cnkgc3BlY3MgYWRkZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglTd2l0Y2ggaW50ZXJuYWwgU0hFTEwuRExMIHRvIGRlZmF1bHQgJ3VzZWQnLgoKCSogW3dpbjMyL3N0cmluZzMyLmNdIFtpbmNsdWRlL3N0cmluZzMyLmhdCglTb21lIG5ldyBmdW5jdGlvbnMgYWRkZWQuCgljaGFyIHNob3VsZCBiZSB1bnNpZ25lZCBjaGFyIHdoZW4gY29udmVydGluZyB0byAxNmJpdCBpbnRzLgoKCSogW21pc2Mvc2hlbGwuY10gW2luY2x1ZGUvc2hlbGwuaF0gW3dpbjMyL2FkdmFwaS5jXQoJUmVtb3ZlZCBvbGQgcmVnaXN0cnkgZnVuY3Rpb25zLgoKVHVlIE1hciAyNiAxNTowMTo0NiAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2NyX2liZWFtXQoJRml4ZWQgdGhlIHBvc2l0aW9uIG9mIHRoZSBob3RzcG90LgoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4ZWQgYSBmZXcgYnVncyBpbiBURVhUX1RhYmJlZFRleHRPdXQoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglGaXhlZCB0aGUgb3JkZXIgb2YgdGhlIGJpdHMgaW4gdGhlIEtleVN0YXRlVGFibGUuCgkweDgwIGlzIHRoZSB1cC9kb3duLWJpdC4gIDB4MDEgaXMgdGhlIHRvZ2dsZSBiaXQuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFt3aW5kb3dzL21kaS5jXSBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgdGhlIGNhbGxzIHRvIEdldEtleVN0YXRlKCkuCgpUdWUgTWFyIDI2IDA4OjQzOjE1IDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KCVVwZGF0ZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgdG8gd29yayBsaWtlIHRoZSBFbmdsaXNoIHZlcnNpb24uCgpNb24gTWFyIDI1IDE3OjM4OjU5IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QGRjcy5lZC5hYy51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX2l0LnJjXQoJQWRkZWQgc3VwcG9ydCBmb3IgSXRhbGlhbiBbSXRdIGxhbmd1YWdlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDI0IDEzOjEzOjExIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2luY2x1ZGUvd2luLmhdIFt3aW5kb3dzLyouY10KCVJlcGxhY2VkIG5leHQsIHBhcmVudCwgY2hpbGQgYW5kIG93bmVyIGhhbmRsZXMgYnkgcG9pbnRlcnMgaW4gV05ECglzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UsIGFuZCBzaG91bGQgYmUKCXJlYXNvbmFibHkgc2FmZSBzaW5jZSBNaWNyb3NvZnQgZGlkIHRoZSBzYW1lIGluIFdpbjk1LgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gWyovKl0KCVJlZGVmaW5lZCBIQU5ETEUgdG8gYmUgVUlOVCBpbnN0ZWFkIG9mIGEgcG9pbnRlciBmb3IgV2luZWxpYi4gVGhpcwoJYWxsb3dzIHJlbW92aW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IGNhc3RzIGFuZCBOUEZNVHMuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ3JlYXRlIHRoZSBjYXJldCBicnVzaCB1cG9uIENyZWF0ZUNhcmV0KCk7IHVzZSB0aGUgYml0bWFwCglkaW1lbnNpb25zIGZvciB0aGUgY2FyZXQuCglGaXhlZCBDQVJFVF9EaXNwbGF5Q2FyZXQoKSB0byB1c2UgUGF0Qmx0KCkuCgpGcmkgTWFyIDIyIDE2OjAwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJTW9yZSBzYW5pdHkgY2hlY2tzLCBmaXh1cCBzb21lIGVycm9uZW91cyByZXR1cm4gY29kZXMuCgoJKiBbZG9jdW1lbnRhdGlvbi93aW5zb2NrXQoJRGVzY3JpcHRpb24gb2YgaG93IGNvbXBhdGlibGUgdGhlIHdpbnNvY2sgaXMgY3VycmVudGx5LgoKRnJpIE1hciAyMiAxMzowNTozNCAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW2xpYnJhcnkvd2lubWFpbi5jXQoJU2V0IGBscHN6Q21kUGFyYW0nIGJ5IGNvbmNhdGVuYXRpbmcgYXJndW1lbnRzLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCVdpbkV4ZWM6IGFjY2VwdCBVbml4IGNvbW1hbmRzLCB1c2UgV2luZSBlbXVsYXRvci4KCk1vbiBNYXIgMTggMTI6MTY6MjcgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvdGhyZWFkLmNdW2luY2x1ZGUva2VybmVsMzIuaF0KCURlbGV0ZUNyaXRpY2FsU2VjdGlvbiwgRW50ZXJDcml0aWNhbFNlY3Rpb24sCiAJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiwgTGVhdmVDcml0aWNhbFNlY3Rpb24sIFRsc0FsbG9jLAogCVRsc0ZyZWUsIFRsc0dldFZhbHVlLCBUbHNTZXRWYWx1ZTogbmV3IGZ1bmN0aW9ucy4KCUNSSVRJQ0FMX1NFQ1RJT046IG5ldyBzdHJ1Y3R1cmUuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL2NvZGVfcGFnZS5jXQoJV2lkZUNoYXJUb011bHRpQnl0ZTogbmV3IGZ1bmN0aW9uLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9maWxlLmNdCglHZXRGaWxlQXR0cmlidXRlc0E6IG5ldyBmdW5jdGlvbi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bbWlzYy9tYWluLmNdCglHZXRFbnZpcm9ubWVudFN0cmluZ3NXLCBGcmVlRW52aXJvbm1lbnRTdHJpbmdzQSwKIAlGcmVlRW52aXJvbm1lbnRTdHJpbmdzVzogbmV3IGZ1bmN0aW9ucy4KCQoJKiBbaWYxNjMyL3VzZXIuc3BlY11bd2luMzIvY3Vyc29yaWNvbjMyLmNdW3dpbjMyL01ha2VmaWxlLmluXQoJY3Vyc29yaWNvbjMyLmM6IG5ldyBmaWxlLgoJTG9hZEN1cnNvckEsIExvYWRDdXJzb3JXOiBtb2RpZmllZCBpbXBsZW1lbnRhdGlvbiBmcm9tIExvYWRDdXJzb3IKIAl0byBXSU4zMl8qLgoJTG9hZEljb25BLCBMb2FkSWNvblc6IG1vZGlmaWVkIGltcGxlbWVudGF0aW9uIGZyb20gTG9hZEljb25BMzIKCXRvIFdJTjMyXyouCgoJKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQoJcHJhZ21hIHBhY2sgaW5zZXJ0ZWQuCglDVVJTT1JJQ09OMzIgc3RydWN0dXJlcyBhZGRlZC4KCgkqIFtpbmNsdWRlL3dpbm5scy5oXQoJQ29uc3RhbnRzIENQXyogYW5kIFdDXyogYWRkZWQuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglQRV9Mb2FkTW9kdWxlOiBjYWxsIFBFX0luaXRETEwgd2l0aCBoTW9kdWxlIHJhdGhlciB0aGFuIHdwbnQuCgpTdW4gTWFyIDE3IDE2OjU5OjEyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglJbnRyb2R1Y2VkIGhvb2sgZnVuY3Rpb24gaGFuZGxpbmcgaW4gZmlsZSBkaWFsb2cuCglSZW1vdmVkIGFuIHVubmVjZXNzYXJ5IFNob3dXaW5kb3cgY2FsbCBpbiBGSUxFRExHX1dNQ29tbWFuZCgpLgoKVGh1IE1hciAxNCAxMDo1MDowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJQWRkZWQgR2V0TmVhcmVzdENvbG9yLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgR2xvYmFsQWRkQXRvbUEuCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJQWRkZWQgc3RhY2tmcmFtZS5oIHRvIGluY2x1ZGVzLgoJV0lOMzJfR2xvYmFsQWRkQXRvbUEoKSAtIG5ldyBmdW5jdGlvbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIE1hciAxMyAxOTo0Njo1MCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglSZW1vdmVkIGNhbGxzIHRvIG1lbW1vdmUgKG5vdCBwb3J0YWJsZSkuCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJUHJlZml4ZWQgYWxsIHRva2VuIHdpdGggJ3QnIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHR5cGUKCWRlZmluaXRpb25zLgoJQWRkZWQgJ3dhbGsgcXVldWUnLCAnd2FsayBjbGFzcycgYW5kICdpbmZvIGNsYXNzJyBjb21tYW5kcy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglNb3ZlZCBxdWV1ZSBhbmQgd2luZG93IGluZm9ybWF0aW9uIGZ1bmN0aW9ucyB0byB3aW5kb3dzL3F1ZXVlLmMKCWFuZCB3aW5kb3dzL3dpbi5jIHJlc3BlY3RpdmVseS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRlZCBTSUdIVVAgaGFuZGxpbmcgdG8gZm9yY2UgZW50cnkgaW50byBidWlsdC1pbiBkZWJ1Z2dlci4KCUNsZWFuZWQgdXAgYSBiaXQuCgoJKiBbbWlzYy9zcHkuY10KCUdlbmVyYWwgY2xlYW51cCBhbmQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIENMQVNTX0R1bXBDbGFzcygpIGFuZCBDTEFTU19XYWxrQ2xhc3NlcygpIGZ1bmN0aW9ucyBmb3IKCWRlYnVnZ2VyLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVByZXNzaW5nIEN0cmwtQWx0LVJldHVybiBmb3JjZXMgYW4gZW50cnkgaW50byB0aGUgZGVidWdnZXIuIE5vdAoJc3VyZSBpZiB0aGlzIGtleSBjb21iaW5hdGlvbiBpcyBhIGdvb2QgY2hvaWNlLi4uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3F1ZXVlLmNdIChOZXcgZmlsZSkKCU1vdmVkIG1lc3NhZ2UgcXVldWUgaGFuZGxpbmcgZnVuY3Rpb25zIHRvIHdpbmRvd3MvcXVldWUuYy4KClR1ZSBNYXIgMTIgMTQ6NTU6MTYgMTk5NiAgT25ubyBIb3ZlcnMgIDxvbm5vQHN0YWNrLnVyYy50dWUubmw+CgoJKiBbaWYxNjMyL2V4Y2VwdC5TXSBbaW5jbHVkZS9leGNlcHQuaF0gW3dpbjMyL2V4Y2VwdC5jXSAoTmV3IGZpbGVzKQoJSW1wbGVtZW50ZWQgV2luMzIgZXhjZXB0aW9uIGZ1bmN0aW9uczogUmFpc2VFeGNlcHRpb24oKSwKIAlSdGxVbndpbmQoKSwgU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKCkgYW5kCglVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKS4KCk1vbiBNYXIgMTEgMTk6MjM6MjkgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdIFtpbmNsdWRlL2xpc3Rib3guaF0KCVNwZWNpYWwgaGFuZGxpbmcgZm9yIENPTUJPTEJPWCBzdHlsZXMgaW50cm9kdWNlZCB2aWEgZXh0ZW5zaW9uIG9mCiAJSEVBRExJU1Qgc3RydWN0dXJlOiBscGhsLT5kd1N0eWxlLgoKTW9uIE1hciAxMSAxMzozMTowNiAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBbnkgbW91c2UgbW92ZW1lbnQgd2l0aGluIGEgc21hbGwgZGlzdGFuY2UgKGRlZmluZWQgYnkgQ0JMTU1fRURHRSkKCW9mIHRoZSB0b3Agb3IgYm90dG9tIGVkZ2UgY2F1c2VzIHRoZSB3aW5kb3cgdG8gc2Nyb2xsLiAgQWxzbyBtb3ZlZCAKCXNvbWUgYXNzaWdubWVudHMgc28gdGhlIHJvdXRpbmUgd29ya3MgY29ycmVjdGx5LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNoYW5naW5nIHNlbGVjdGlvbiBpbiBMaXN0Qm94U2V0Q3VyU2VsIG5vdyB1cGRhdGVzIFByZXZGb2N1c2VkLgoJQWRkZWQgdG8gTEJTZXRGb250IGFuZCBDcmVhdGVMaXN0Qm94U3RydWN0IGEgZmFrZSBoZGMgdGhhdCB0ZXN0cyAKCWFuZCBzZXRzIHRoZSBzdGFuZGFyZCB0ZXh0IGhlaWdodC4KClN1biBNYXIgMTAgMDg6Mzk6MjMgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kY2UuY10KCUZpeGVkIG1lbW9yeSBsZWFrIGluIERDRV9DbGlwV2luZG93cygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgTWFyICA4IDE5OjA3OjE4IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbmZpZ3VyZS5pbl0KCVF1b3RlICdbJyBhbmQgJ10nIGluIHRoZSB0ZXN0IHByb2dyYW0gZm9yIHRoZSBzdHJlbmd0aC1yZWR1Y2UKCWJ1Zy4gVGhpcyBzaG91bGQgd29yayBtdWNoIGJldHRlci4uLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUF1Z21lbnRlZCBET1NfRklMRSBzdHJ1Y3R1cmUuIE1vc3QgaW50ZXJuYWwgZnVuY3Rpb25zIG5vdyByZXR1cm4gYQoJRE9TX0ZJTEUqIGluc3RlYWQgb2YgYSBVbml4IGhhbmRsZS4KCUFkZGVkIGEgbG9jYWwgZmlsZSBhcnJheSB0byByZXBsYWNlIHRoZSBQREIgbGlzdCB1cG9uIHN0YXJ0dXAsIHRvCglhbGxvdyB1c2luZyBmaWxlIEkvTyBmdW5jdGlvbnMgYmVmb3JlIHRoZSBmaXJzdCB0YXNrIGlzIGNyZWF0ZWQuCglBZGRlZCBGSUxFX1NldERhdGVUaW1lKCkgYW5kIEZJTEVfU3luYygpIGZ1bmN0aW9ucy4KCQoJKiBbbG9hZGVyL21vZHVsZS5jXQoJVXNlIHRoZSBET1MgZmlsZSBJL08gZnVuY3Rpb25zIGluIE1PRFVMRV9Mb2FkRXhlSGVhZGVyKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCVVzZSB2aXNpYmxlIHJlZ2lvbiBpbnN0ZWFkIG9mIEdDIGNsaXAgcmVnaW9uIHRvIGNsaXAgc291cmNlCglhcmVhLiBUaGlzIGZpeGVzIHRoZSBjYXJkIGRyYXdpbmcgYnVnIGluIGZyZWVjZWxsLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglGaXhlZCBDb21iaW5lUmduKCkgdG8gYWxsb3cgc3JjIGFuZCBkZXN0IHJlZ2lvbnMgdG8gYmUgdGhlIHNhbWUuCgpGcmkgTWFyICA4IDE2OjMyOjIzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL0VESVQuVE9ET10KCVVwZGF0ZWQgc28gaXQgcmVmbGVjdHMgdGhlIGN1cnJlbnQgc3RhdHVzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIGludGVybmFsIEVESVRfV29yZEJyZWFrUHJvYygpLgoJSW1wbGVtZW50ZWQgRVNfUkVBRE9OTFkuCglJbXBsZW1lbnRlZCBXTV9MQlVUVE9OREJMQ0xLIHRvIHNlbGVjdCB3aG9sZSB3b3Jkcy4KCUZpeGVkIGEgbG90IG9mIHR5cGVzIGluIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KCldlZCBNYXIgIDYgMTk6NTU6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbZGVidWdnZXIvaW5mby5jXQoJQWRkZWQgIndhbGsgd2luZG93IiBjb21tYW5kIHRvIHdhbGsgd2luZG93IGxpc3QuIAoKCSogW3dpbmRvd3MvbWRpLmNdCglBZGRlZCBwcm9wZXIoPykgV01fTURJU0VUTUVOVSBtZXNzYWdlIGhhbmRsaW5nLgoKV2VkIE1hciAgNiAwOToyNzoxMiAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXVtpZjE2MzIvcmVsYXkzMi5jXQoJUkVMQVkzMl9DYWxsV2luZG93UHJvY0NvbnZTdHJ1Y3Q6IG5ldyBmdW5jdGlvbi4KCgkqIFt3aW4zMi9zdHJ1Y3QzMi5jXVt3aW4zMi9NYWtlZmlsZS5pbl1bd2luMzIvcGFyYW0uY11bd2luMzIvdXNlcjMyLmNdCglzdHJ1Y3QzMi5jOiBuZXcgZmlsZS4gTW92ZWQgYWxsIHN0cnVjdHVyZSBjb252ZXJzaW9ucyBpbnRvIHRoYXQgZmlsZQoJUEFSQU0zMl9QT0lOVDMydG8xNixNU0cxNnRvMzIsVVNFUjMyX1JFQ1QzMnRvMTY6IAoJcmVuYW1lZCB0byBTVFJVQ1QzMl9QT0lOVDMydG8xNiwgLi4uCglXSU4zMl9QT0lOVCxXSU4zMl9NU0csV0lOMzJfUkVDVCxXSU4zMl9QQUlOVFNUUlVDVDogcmVuYW1lZCB0bwoJUE9JTlQzMiwgLi4uCglOZXcgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIE5DQ0FMQ1NJWkVfUEFSQU1TLCBXSU5ET1dQT1MsCiAJQ1JFQVRFU1RSVUNULgoKCSogW2luY2x1ZGUvd2luZG93cy5oXVttaXNjL2V4ZWMuY10KCVdJTkhFTFAsIE1VTFRJS0VZSEVMUCwgSEVMUFdJTklORk86IG5ldyBzdHJ1Y3R1cmVzCglXaW5IZWxwOiBSZWltcGxlbWVudGVkLiBUaGFua3MgdG8gUGV0ZXIgQmFsY2gKIAkoMTAwNzEwLjI1NjZAY29tcHVzZXJ2ZS5jb20pIGZvciBoaXMgdmFsdWFibGUgcmVzZWFyY2guCgoJKiBbd2luMzIvd2lucHJvY3MuY10KCVdJTjMyX0NhbGxXaW5kb3dQcm9jVG8xNjogbmV3IGZ1bmN0aW9uLCBjYWxsIGluCiAJVVNFUjMyX0RlZldpbmRvd1Byb2NBLC4uLgoKTW9uIE1hciAgNCAyMzoyMjo0MCAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICIjZGVmaW5lIF9fZXhwb3J0Ii4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJUHV0IGluIGEgZmV3IGhhY2tzIHRvIG1ha2UgYml0Ymx0LWluZyB3b3JrIHdoZW4gdXBzaWRlLWRvd24gYW5kL29yCgltaXJyb3JlZC4gIEJJVEJMVF9TdHJldGNoSW1hZ2Ugc2hvdWxkIHJlYWxseSBiZSBjaGVja2VkIG92ZXIKCXRob3JvdWdobHkuCgoJKiBbcHJvZ3JhbXMvcHJvZ21hbi9tYWluLmNdCglBZGRlZCAiI2luY2x1ZGUgPHJlc291cmNlLmg+IiBmb3IgZGVmaW5pdGlvbiBvZiBIQVZFX1dJTkVfQ09OU1RSVUNUT1IuCgoJKiBbcmMvcGFyc2VyLmhdIFtyYy9wYXJzZXIubF0gW3JjL3BhcnNlci55XSBbcmMvd2luZXJjLmNdCglFbGltaW5hdGVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBpbiBzdHlsZSBkZWZpbml0aW9uLgoJQWRkZWQgY3J1ZGUgZXJyb3IgbWVzc2FnZSBzdXBwb3J0OiAic3RkaW46JWQ6IHBhcnNlIGVycm9yIGJlZm9yZSAnJXMnIi4KCUltcGxlbWVudGVkIHN0cmluZyB0YWJsZSBzdXBwb3J0IHRvIHRoZSBiZXN0IG9mIG15IGFiaWxpdHkgKGl0IHdvcmtzCgl3aXRoIExvYWRTdHJpbmcoKSBjYWxscykuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUZpeGVkIGJ1ZyBpbiBOQ19Eb1NpemVNb3ZlKCkgdGhhdCBtYWRlIHN5c3RlbSBtZW51IHBvcCB1cCB3aGVuIHRpdGxlCgliYXIgb2Ygbm9uLWljb25pemVkIHdpbmRvdyB3YXMgY2xpY2tlZCAoY2hlY2tlZCBmb3IgaWNvbml6YXRpb24pLgoKTW9uIE1hciAwNCAyMDo1NToxOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvbHpleHBhbmQuc3BlY10gW2lmMTYzMi9yZWxheS5jXQoJICBbaW5jbHVkZS9semV4cGFuZC5oXVttaXNjL2x6ZXhwYW5kLmNdCglMWkVYUEFORC5ETEwgYWRkZWQuCgpTdW4gTWFyIDAzIDE4OjEwOjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy93aW4uY10KCVByZXZlbnQgdXNhZ2Ugb2YgaW52YWxpZCBIV05EcyBpbiBXSU5fRW51bUNoaWxkV2luKCksCgl0aGlzIHByZXZlbnRzIHRvbyBlYXJseSB0ZXJtaW5hdGlvbiBvZiBFbnVtQ2hpbGRXaW5kb3dzKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBNYXIgIDIgMTg6MTk6MDYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBTQ1JPTExfVEhVTUIgcGFpbnRpbmcgZml4ZXMgZnJvbSBBbGV4IEtvcm9ia2EgdG8gc3RvcmUgdGhlCiAJY3VycmVudCB0cmFja2luZyB3aW5kb3cuCgoJKiBbZmlsZXMvZmlsZS5jXQoJRml4ZWQgdHdvIGZpbGUgZGVzY3JpcHRvciBsZWFrcyBpbiBGSUxFX09wZW5GaWxlKCkuCgoJKiBbaWYxNjMyL3JlbGF5MzIuY10gW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9wZV9pbWFnZS5jXQoJICBbdG9vbHMvYnVpbGQuY10KCVJlcGxhY2VkIExPQURFREZJTEVJTkZPIHN0cnVjdHVyZSBieSBPRlNUUlVDVC4KCgkqIFttZW1vcnkvYXRvbS5jXQoJUmVsb2FkIHRoZSBwb2ludGVyIHRvIHRoZSBhdG9tIHRhYmxlIGluIEFUT01fR2V0VGFibGUoKSBhbmQKIAlBVE9NX0FkZEF0b20oKSBpbiBjYXNlIHRoZSBMT0NBTF9BbGxvYygpIGNhbGxzIGNhdXNlZCB0aGUgdGFibGUgdG8KIAltb3ZlIGluIGxpbmVhciBtZW1vcnkuCgpGcmkgTWFyICAxIDExOjU3OjEzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHN1cHBvcnQgZm9yIENhbGxXb3JkQnJlYWtQcm9jKCkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTmV3IGNhcmV0IGhhbmRsaW5nIChyZWFsbHkgZWZmaWNpZW50IC8gZmFzdCkuCglJbXBsZW1lbnRlZCBFTV9TRVRXT1JEQlJFQUtQUk9DIGFuZCBFTV9HRVRXT1JEQlJFQUtQUk9DLgoJRml4ZWQgRU1fU0VURk9OVCBzbyBpdCBub3cgYWxzbyBjcmVhdGVzIGEgcHJvcGVyIG5ldyBjYXJldC4KCldlZCBGZWIgMjggMjI6MDM6MzQgMTk5NiAgRGFuaWVsIFNjaGVwbGVyICA8ZGFuaWVsQGZyb2JuaXR6Lnd1c3RsLmVkdT4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdIFttaXNjL21haW4uY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBXTV9ERUxFVEUgcHJvdG9jb2wgdG8gdG9wLWxldmVsIHdpbmRvd3MuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBhIHByb2JsZW0gd2hpY2ggY2F1c2VkIHNsb3cgc2Nyb2xsaW5nIHRvIGNvbnRpbnVlCXVuY29udHJvbGxhYmx5LgoKCSogW21pc2MvZXhlYy5jXQoJSW1wbGVtZW50ZWQgRXhpdFdpbmRvd3MoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2V0IHRvcC1sZXZlbCBvd25lZCB3aW5kb3dzIHRvIGJlIHRyYW5zaWVudC4KCldlZCBGZWIgMjggMTk6MTM6MjIgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFtwcm9ncmFtcy9wcm9nbWFuLypdCglBZGRlZCBhIHByb2dyYW0gbWFuYWdlci4KCldlZCBGZWIgMjggMTg6Mzg6MDEgMTk5NiAgRHVuY2FuIEMgVGhvbXNvbiA8ZHVuY2FuQHNwZC5lZWUuc3RyYXRoLmFjLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRW8uY10KCUFkZGVkIHN1cHBvcnQgZm9yIEVzcGVyYW50byBbRW9dIGxhbmd1YWdlLgoKV2VkIEZlYiAyOCAwMDoyMzowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIEVuZERpYWxvZywgR2V0RGxnSXRlbSwgR2V0RGxnSXRlbUludCwgU2V0RGxnSXRlbUludCwKCgkqIFt3aW4zMi9pbml0LmNdCglBZGRlZCB0YXNrLmggdG8gaW5jbHVkZXMuIEdldE1vZHVsZUhhbmRsZUEoKSAtIHJldHVybiBoSW5zdGFuY2UKCWlmIGNhbGxlZCB3aXRoIE5VTEwgcGFyYW1ldGVyLiBGcmVlY2VsbCBuZWVkcyB0aGlzLiBOT1RFIHRoaXMKCW1heSBpbmRpY2F0ZSBhIHByb2JsZW0gd2l0aCBkaWZmZXJlbnRpYXRpb24gYmV0d2VlbiBoTW9kdWxlIGFuZAoJaEluc3RhbmNlIHdpdGhpbiBXaW5lLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdCglGaW5kUmVzb3VyY2UzMigpIGFuZCBMb2FkUmVzb3VyY2UzMigpIC0gUmVtb3ZlZCAjaWYgMCdzIGFyb3VuZAoJY29udmVyc2lvbiBmcm9tIGhJbnN0YW5jZSB0byBoTW9kdWxlLiBTZWUgcmVtYXJrcyBhYm92ZS4KCgkqIFt3aW4zMi9zdHJpbmczMi5jXQoJV0lOMzJfVW5pTGVuKCkgLSByZW1vdmVkIHN0cmF5IHNlbWljb2xvbi4KClR1ZSBGZWIgMjcgMjE6MDU6MTggMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCQoJKiBbd2luZG93cy9jYXJldC5jXQoJU2V0IGJsaW5rIHJhdGUgd2l0aCBjYWxsIHRvIEdldFByb2ZpbGVJbnQoKS4KCgkqIFtyYy93aW5lcmMuY10KCUluIG5ld19zdHlsZSgpLCBtYWRlIGluaXRpYWwgZmxhZyBzZXR0aW5ncyBXU19DSElMRCB8IFdTX1ZJU0lCTEUKIAlpbnN0ZWFkIG9mIDAuICBUaGlzIHNlZW1zIHRvIGNvcnJlc3BvbmQgdG8gQm9ybGFuZCdzIGRlZmF1bHRzLCBhbmQKIAl0aGUgZmxhZ3MgY2FuIGJlIHVuc2V0IGJ5IHVzaW5nIHRoZSAocmF0aGVyIG9idHVzZSkgInwgTk9UIFdTX0NISUxEIgoJb3IgInwgTk9UIFdTX1ZJU0lCTEUiIHRlY2huaXF1ZSBpbiB0aGUgKi5yYyBmaWxlLgoKCSogW3dpbjMyL3RpbWUuY10KCUluIEdldExvY2FsVGltZSgpIGFuZCBHZXRTeXN0ZW1UaW1lKCksIHVzZWQgdHZfc2VjIGZpZWxkIG9mIHJlc3VsdAogCXJldHVybmVkIGJ5IGdldHRpbWVvZmRheSgpIGluc3RlYWQgb2YgbWFraW5nIHNlY29uZCBjYWxsIHRvCiAJdGltZSgpLiAgVGhpcyBlbGltaW5hdGVzIGNsb2NrIGppdHRlciBpZiB0aGUgc2Vjb25kcyBjaGFuZ2UKIAliZXR3ZWVuIHRoZSB0d28gY2FsbHMgKHJhcmUsIGJ1dCBwb3NzaWJsZSkuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgIiNkZWZpbmUgX2ZhciIgYW5kICIjZGVmaW5lIF9wYXNjYWwiLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBmdW5jdGlvbiBHZXREZXNrdG9wSHduZCgpLgoKCSogW2luY2x1ZGUveG1hbGxvYy5oXQoJUmVtb3ZlZCB0aGUgJyNpZmRlZiBIQVZFX1NURExJQl9IJyBzdHJ1Y3R1cmUsIHNpbmNlIGl0IHNlZW1lZCB0bwogCWhhdmUgYmVlbiByZW1vdmVkIGZyb20gJ2NvbmZpZ3VyZScsIGFuZCB3YXMgY2F1c2luZyByZWRlZmluaXRpb24KIAl3YXJuaW5ncy4KClR1ZSBGZWIgMjcgMTk6MzE6MTEgMTk5NiAgQWxicmVjaHQgS2xlaW5lIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIAoJQWRkZWQgUkRXX0FMTENISUxEUkVOIGZsYWcgaW4gU2V0V2luZG93UG9zIChoYW5kbGluZyBTV1BfRlJBTUVDSEFOR0VEKQoJdG8gZm9yY2UgYSByZXBhaW50IHdoZW4gc2V0dGluZyBtZW51IGJhcnMgd2l0aCBkaWZmZXJlbnQgcm93cy4KClN1biBGZWIgMjUgMjE6MTU6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3N5c2NvbG9ycy5jXSBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBEcmF3Rm9jdXNSZWN0IHBlbiBhbmQgU0NST0xMX1RIVU1CIHBhaW50aW5nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgRmViIDI0IDE2OjE3OjA1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUFkZGVkIFxyIHdoZW4gd3JpdGluZyBwcm9maWxlIGZpbGVzLCBmb3IgRE9TIGNvbXBhdGliaWxpdHkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgYnVnIGluIEdsb2JhbFJlQWxsb2MoKSB0aGF0IGNhdXNlZCBhIGRpc2NhcmRlZCBibG9jayBub3QgdG8KIAliZSByZWFsbG9jYXRlZCBpZiBpdHMgc2l6ZSB3YXMgbm90IGNoYW5nZWQuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglBdm9pZCBzZXR0aW5nIGEgdmFsaWQgTERUIGVudHJ5IHdpdGggYmFzZSBhbmQgbGltaXQgc2V0IHRvIDAsIGFzCiAJdGhpcyBjYXVzZXMgdGhlIGtlcm5lbCB0byBjbGVhciB0aGUgZW50cnkuIFRoaXMgZml4ZXMgYSBjcmFzaCB3aGVuCiAJZXhpdGluZyBXaW5kb3dzIHByb2dyYW0gbWFuYWdlci4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglSZW1vdmVkIGNhbGwgdG8gY3JlYXQoKSBpbnN0ZWFkIG9mIF9sY3JlYXQoKSBmb3IgV0lORUxJQi4KCkZyaSBGZWIgMjMgMDA6MzU6NTQgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0ZGdzYW5kZkBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUdldFRleHRFeHRlbnRQb2ludEEgbm93IGhhcyB3aW4zMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdCglEZWZpbmUgbmV3IHN0cnVjdHVyZSB0YWdTSVpFMzIgYW5kIHR5cGVkZWYgU0laRTMyIHRvIGl0LgoJRGVmaW5lIHByb3RvdHlwZSBmb3IgZnVuY3Rpb24gUEFSQU0zMl9TSVpFMTZ0bzMyCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJTmV3IGZ1bmN0aW9ucyBQQVJBTTMyX1NJWkUxNnRvMzIgYW5kIFdJTjMyX0dldFRleHRFeHRlbnRQb2ludEEKCgkqIFt3aW4zMi9tZW1vcnkuY10KCUFkZGVkIG1pc3NpbmcgZmlsZSBwb2ludGVyIHBhcmFtZXRlciB0byBmcHJpbnRmLgoKVGh1IEZlYiAyMiAwMToxNDoyMSAxOTk2ICBFcmljIFdhcm5rZSA8ZXcyMTkzQGNzYy5hbGJhbnkuZWR1PgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCBtb3JlIGZhbWlsaWFyIGljb24gYWN0aXZpdHksIGllIHNpbmdsZSBjbGljayBicmluZ3MgdXAKIAlzeXN0ZW0gbWVudS4KCldlZCBGZWIgMjEgMTM6MDc6MDQgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWRkZWQgY2FsbHMgdG8gSGlkZUNhcmV0KCkgYW5kIFNob3dDYXJldCgpIGZyb20gd2l0aGluCiAJVHJhY2tQb3B1cE1lbnUoKSwgTUVOVV9UcmFja01vdXNlTWVudUJhcigpIGFuZAogCU1FTlVfVHJhY2tLYmRNZW51QmFyKCkuICBBcmUgdGhlcmUgYW55IG1vcmUgcGxhY2VzIHdoZXJlIHRoaXMKIAlzaG91bGQgYmUgZG9uZT8KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUZpeGVkIGEgRklYTUUgaW4gU1RBVElDX1NldEljb24oKSwgd2hpY2ggbm93IHJldHVybnMgYSBoYW5kbGUgdG8KIAl0aGUgcHJldmlvdXMgaWNvbi4gIEFkZGVkIGEgbmV3IEZJWE1FIGF0IHRoZSBwb2ludCB3aGVyZQogCVdNX1NFVFRFWFQgaXMgaGFuZGxlZCBmb3IgYSBTU19JQ09OIHN0YXRpYyBjb250cm9sLgoKCSogW21pc2MvY29tbWRsZy5jXQoJSW1wbGVtZW50ZWQgRmluZFRleHQoKSBhbmQgUmVwbGFjZVRleHQoKQoJU3RpbGwgbWlzc2luZyA6IFRlbXBsYXRlcyBhbmQgSG9va3MgaGFuZGxpbmcgLyBlcnJvciBjaGVja2luZwoKCSogW3Jlc291cmNlcy9zeXNyZXNfRW4uY10KCVJlZGVzaWduZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgZGlhbG9ncywgc28gdGhleSBub3cgd29yay4KCUxhbmd1YWdlcyBvdGhlciB0aGFuIEVuIHNob3VsZCB1cGRhdGUgdGhlc2UgdG9vLCB0aG91Z2gsIGFzIHdlbGwKIAlhcyByZWRpbWVuc2lvbiB0aGUgY29udHJvbHMgYmVjYXVzZSBzb21lIG9mIHRoZSB0ZXh0IGRvZXNuJ3QgZml0LgogIAlDcmVhdGVkIGZpbGUgcmVzb3VyY2VzL1RPRE8gdG8gZXhwbGFpbiB0aGlzLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCVJlLXdyaXR0ZW4uICBJdCBub3cgdXNlcyB0aGUgY29ycmVjdCBSMl9YT1JQRU4uICBJdCByZXNldHMgdGhlCiAJYmxpbmsgdGltZXIgb24gU2V0Q2FyZXRQb3MoKS4gIEl0IGRvZXMgaXRzIG93biBoaWRlL3Nob3cgc2NoZW1lCiAJd2hlbiBTZXRDYXJldFBvcygpIGlzIGNhbGxlZCAoc2hvdWxkIGJlIGZhc3RlcikuCgpNb24gRmViIDE5IDIxOjUwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1pc2NlbGxhbmVvdXMgY2hhbmdlcyBmb3IgYmV0dGVyIExCU19FWFRFTkRFRFNFTCBzdXBwb3J0LgoJUmVtb3ZlZCBzZXZlcmFsIHN1cGVyZmx1b3VzIHJlZHJhd2FscyBvZiBpdGVtIGxpc3QuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglXTV9HRVRETEdDT0RFIHJldHVybiB2YWx1ZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRmxhc2hXaW5kb3cgZnVuY3Rpb24uCgoJKiBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy9zY3JvbGwuY10KCUFkZGVkIEhpZGVDYXJldC9TaG93Q2FyZXQgY2FsbHMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglBZGRlZCBHZXRDaGFyQUJDV2lkdGhzIHN0dWIuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCgkiI2RlZmluZSJzIG5lZWRlZCBmb3IgY2hhbmdlcyBtZW50aW9uZWQgYWJvdmUuCgpNb24gRmViIDE5IDIwOjEyOjAzIDE5OTYgIEhhbnMgZGUgR3JhYWZmICA8SGFucy5kZUdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCUNoYW5nZSBvcmRlciBvZiBpbmNsdWRlcyB0byBnZXQgaW5fYWRkciBzdHJ1Y3QgZGVmaW5lZCBpbiB0aW1lLgoJKE5vdGU6IExpbnV4IDEuMy42NiwgbGliYyA1LjIuMTgpCgoJKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2NlbXUvaW50MmYuY10KCUNoYW5nZWQgdGhlIC1lbmhhbmNlZCBvcHRpb24gaW50byBhIC1tb2RlIG9wdGlvbiwgd2hpY2ggY2FuIGJlCgllaXRoZXIgJ3N0YW5kYXJkJyBvciAnZW5oYW5jZWQnLiAnZW5oYW5jZWQnIGlzIHRoZSBkZWZhdWx0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViIDE4IDE2OjM1OjU0IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCUxvb2sgZm9yIHRoZSB3YWxscGFwZXIgZmlsZSBpbiB0aGUgV2luZG93cyBkaXJlY3RvcnkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgc3dhcHBlZCBwYXJhbWV0ZXJzIGluIFNldE1lbnVJdGVtQml0bWFwcygpLgoJQ3JlYXRlIGEgc2VwYXJhdG9yIGluIE1FTlVfU2V0SXRlbURhdGEoKSB3aGVuIHRoZSBzdHJpbmcgaXMgTlVMTC4KCgkqIFtmaWxlL2Rvc2ZzLmNdCglET1NGU19GaW5kTmV4dDogZG9uJ3QgcmV0dXJuICcuJyBhbmQgJy4uJyBpbiBhIGRyaXZlIHJvb3QgZGlyLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUFkZGVkIGEgRE9TX0ZJTEUgc3RydWN0dXJlIHRvIHN0b3JlIHBlci1maWxlIGluZm9ybWF0aW9uIChub3QKCXJlYWxseSB1c2VkIHlldCkuCglGaXhlZCBfbHJlYWQgYW5kIF9ocmVhZCB0byBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGJlZm9yZQoJY2FsbGluZyBVbml4IHJlYWQoKSB0byBhdm9pZCBFRkFVTFQgZXJyb3IuCgoJKiBbbWlzYy9leGVjLmNdCglSZXR1cm4gVFJVRSBpbiBXaW5IZWxwKCkgZm9yIEhFTFBfUVVJVCB0byBxdWlldCBOb3RlcGFkIG9uIGV4aXQuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJQ2FsbCBET1NNRU1fQWxhcm0oKSBpbiBJTlNUUl9SZXBsYWNlU2VsZWN0b3IoKS4gVGhpcyBzaG91bGQgZml4CiAJcHJvZ3JhbXMgdGhhdCBwb2xsIHRoZSBCSU9TIGNvdW50ZXIsIHByb3ZpZGVkIHRoZXkgcmVsb2FkIHRoZQogCXNlbGVjdG9yIG9uIGV2ZXJ5IHJlYWQuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJUmUtaW1wbGVtZW50ZWQgRmluZEZpcnN0L0ZpbmROZXh0IGZvciBGQ0IgY2FsbHMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJTWVyZ2VkIE1TR19HZXRXaW5kb3dGb3JFdmVudCgpIGFuZCBXSU5QT1NfV2luZG93RnJvbVBvaW50KCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGEgcGVyLXdpbmRvdyBXSU5fTUFOQUdFRCBmbGFnOyBvbmx5IHdpbmRvd3MgdGhhdCBoYXZlIGEKCWRpYWxvZyBmcmFtZSBvciBhIHNpemluZyBib3JkZXIgYXJlIG1hbmFnZWQuCgpTYXQgRmViIDE3IDE4OjI1OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dGRnc2FuZGZAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXQoJQWRkZWQgLWcgZmxhZyB0byBjb21waWxhdGlvbiBvZiAuYyBmaWxlcyBnZW5lcmF0ZWQgZnJvbSAqMzIuc3BlYy4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCU51bWVyb3VzIGFkZGl0aW9uYWwgZnVuY3Rpb25zIGltcGxlbWVudGVkLgoKCSogaWYxNjMyL3VzZXIzMi5zcGVjXQoJd3NwcmludGZBIG1hcHMgdG8gdnNwcmludGYgbm90IHdzcHJpbnRmCglOdW1lcm91cyBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZC4KCgkqIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9nZGlvYmouY10KCU5ldyAjZGVmaW5lIE1BR0lDX0RPTlRDQVJFIGFkZGVkLiBUaGlzIGlzIHVzZWQgaW4KCUdESV9HZXRPYmpQdHIgdG8gZW5hYmxlIGdldHRpbmcgYSBwb2ludGVyIHRvIGEgR0RJIG9iamVjdCBvZgoJdW5rbm93IHR5cGUuCgoJKiBbd2luMzIvZ2RpMzIuY10KCU5ldyBmaWxlLgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCVdJTjMyX01vdmVUb0V4KCkgLSBoYW5kbGUgTlVMTCBwb2ludGVyIGFyZ3VtZW50LgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJVVNFUjMyX0ludmFsaWRhdGVSZWN0IC0gaGFuZGxlIHBhc3Npbmcgb2YgYSBOVUxMIHBvaW50ZXIuCglVU0VSMzJfU2V0VGltZXIgLSBOZXcgZnVuY3Rpb24uCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglGaXhlZCBESVJfSW5pdCgpIChvZmYgYnkgb25lIGluIGFsbG9jYXRpb24gb2Ygc3BhY2UgZm9yCgllbnZpcm9ubWVudCB2YXJpYWJsZXMpLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglBZGRlZCA8c3lzL3R5cGVzLmg+IHRvICNpbmNsdWRlcyAocHJlcmVxdWlzaXRlIGZvciA8c3lzL3N0YXQuaD4KCW9uIEZyZWVCU0QpLgoKRnJpIEZlYiAxNiAxMDoyNjo1NiAxOTk2ICBBbmRyZWFzIEtpcnNjaGJhdW0gPGFua0ByYmcuaW5mb3JtYXRpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTWVtb3J5IGxlYWsgcGx1Z2dlZC4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFcmFzZSBzcGFjZSB3aXRoIGZ1bmN0aW9uIEV4dFRleHRPdXQoKS4gVGhpcyBlbGltaW5hdGVzIHRoZSB1c2Ugb2YKIAl4bWFsbG9jKCkuICBNZW1vcnkgbGVhayBpbiBFRElUX1dyaXRlVGV4dCBwbHVnZ2VkLgoKCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQoJT3BlcmFuZCBmb3Igc2NhcyBub3cgaXMgZGkuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJUFJPRklMRV9HZXRTZWN0aW9uIHdhcyBjb3B5aW5nIHRvbyBtdWNoIGRhdGEuCglQUk9GSUxFX0dldFNlY3Rpb24gbm93IHJldHVybnMgdGhlIGNvcnJlY3QgdmFsdWUuIEl0IHdhcyByZXR1cm5pbmcKIAl0aGUgbnVtYmVyIG9mIHVudXNlZCBpbnN0ZWFkIG9mIHVzZWQgYnl0ZXMuCgoJKiBbb2JqZWN0cy9kYy5jXQoJQ29ycmVjdGVkIHR3byB0eXBvcyBpbiBjb21tZW50cy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfTWF0Y2hGb250IGRpZG4ndCByZXR1cm4gaWYgaXQgY291bGRuJ3QgZmluZCBhbnkgZm9udC4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJRnJlZSBvYmplY3Qgb25seSBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCU1lbW9yeSBsZWFrIGluIFNjcm9sbERDIHBsdWdnZWQuCgpUdWUgRmViIDEzIDExOjE3OjAwIDE5OTYgV2lsbGlhbSBNYWdybyAgPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBFU19OT0hJREVTRUwgc3R5bGUsIHNoaWZ0K2NsaWNrIHNlbGVjdGlvbiwKIAlzaGlmdCt7YXJyb3csaG9tZSxlbmQscGd1cCxwZ2RufSBzZWxlY3Rpb24uICBPcHRpbWl6ZWQKCShkZSlzZWxlY3Rpb24gZHJhd2luZy4gIENoYW5nZWQgc2VsZWN0aW9uIGRyYXdpbmcgdG8gdXNlIGNvcnJlY3QKIAlzeXN0ZW0gY29sb3JzIGluc3RlYWQgb2YgaW52ZXJ0aW5nLiAgRml4ZWQgZGVsZXRpbmcgb3IgYmFja3NwYWNpbmcKIAlhY3Jvc3MgYSAnXHJcbicgZW5kIG9mIGxpbmUgcGFpci4gIFNlbGVjdGlvbiBub3cgYW5jaG9ycwogCWNvcnJlY3RseS4gRml4ZWQgdGV4dCBsZWFraW5nIGFuZCBleHRyYSBnYXJiYWdlIHByb2JsZW0gYnVnCiAJdW5jb3ZlcmVkIGJ5IGNoYW5nZSBpbiBjbGFzcyBzdHlsZSBpbiB3aW5lOTYwMTMxLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUNsYXNzIGZsYWdzIG5vdyBtYXRjaCB0aG9zZSBvZiBXaW5kb3dzLgoKTW9uIEZlYiAxMiAyMToyODoxOSAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCVdJREdFVFNfSW5pdDogUkVMQVkzMl9HZXRFbnRyeVBvaW50IGRvZXMgbm90IHRha2UgYSBzdHJpbmcgYW55bW9yZS4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dW2lmMTYzMi9yZWxheTMyLmNdW2luY2x1ZGUvcmVsYXkzMi5oXQoJY29tY3RsMzIuc3BlYyBvbGUzMi5zcGVjIHdpbnNwb29sLnNwZWM6IG5ldyBmaWxlcy4KCVJFTEFZMzJfSW5pdDogY2FsbCBpbml0aWFsaXphdGlvbiBvZiBuZXcgRExMcy4KCVJFTEFZMzJfR2V0RW50cnlQb2ludDogZXhwZWN0cyBXSU4zMl9idWlsdGluKiBub3cuCglSRUxBWTMyX01ha2VGYWtlTW9kdWxlOiBuZXcgZnVuY3Rpb24uCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBXaW45NSBmdW5jdGlvbnMuIE9yZGluYWxzIG5vdyBkaWZmZXIgZnJvbSBib3RoIE5UIGFuZCBXaW45NQoJSGVhcENyZWF0ZSwgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbUEsIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1XLAoJQ3JlYXRlRGlhbG9nUGFyYW1BLCBDcmVhdGVEaWFsb2dQYXJhbVcsIERpYWxvZ0JveEluZGlyZWN0UGFyYW1BCglEaWFsb2dCb3hJbmRpcmVjdFBhcmFtVywgRGlhbG9nQm94UGFyYW1BLCBEaWFsb2dCb3hQYXJhbVc6CgluZXcgcmVsYXlzLgoKCSogW2lmMTYzMi9zaGVsbDMyLnNwZWNdCglzaGVsbDMyLnNwZWM6IHJlbnVtYmVyZWQgYWxsIGZ1bmN0aW9ucyB0byB0YWtlIGludG8gYWNjb3VudCBvcmRpbmFscy4KCVRoZXNlIHNlZW0gdG8gYmUgaWRlbnRpY2FsIGJldHdlZW4gTlQgYW5kIFdpbjk1LgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdW3dpbmRvd3MvZGlhbG9nLmNdCgl4QmFzZVVuaXQseUJhc2VVbml0LERJQUxPR19Eb0RpYWxvZ0JveDogbWFkZSBub24tc3RhdGljLgoKCSogW2luY2x1ZGUvaGFuZGxlMzIuaF0KCU5ldyBoYW5kbGUgdHlwZXMgVlJBTkdFLCBIRUFQLCBIRUFQSVRFTS4KCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdW2xvYWRlci9wZV9pbWFnZS5jXQoJc3RydWN0IHdfZmlsZXM6IG5ldyBmaWVsZCBidWlsdGluLgoJUEVfRmluZEV4cG9ydGVkRnVuY3Rpb246IHN1cHBvcnQgb3JkaW5hbHMuCglQRV9HZXRQcm9jQWRkcmVzczogY2FsbCBSRUxBWTMyX0dldEVudHJ5UG9pbnQgZm9yIGJ1aWx0aW5zLgoJZml4dXBfaW1wb3J0czogc3VwcG9ydCBvcmRpbmFscy4KCVBFX0xvYWRJbWFnZTogcHJlZmVyIGRpcmVjdG9yaWVzIG92ZXIgc2VnbWVudHMuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXVt3aW4zMi9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlMzI6IGNoYW5nZWQgcGFyYW1ldGVyIGZyb20gTFBDVFNUUiB0byBMUENXU1RSCgkJY2hlY2sgTEFOR19ORVVUUkFMIGlmIExBTkdfRU5HTElTSCBmYWlscy4KCUxvYWRBY2NlbGVyYXRvcnNXLFNpemVvZlJlc291cmNlMzIsQWNjZXNzUmVzb3VyY2UzMjogCgkJZGlzYWJsZWQgYmVjYXVzZSBpdCdzIGJyb2tlbi4KCUNhc3RlZCB0byBhbmQgZnJvbSBMUFdTVFIgYXQgdmFyaW91cyBwbGFjZXMuCgoJKiBbaW5jbHVkZS9zdHJpbmczMi5oXVt3aW4zMi9zdHJpbmczMi5jXQoJQ2hhbmdlZCBwcm90b3R5cGVzIHRvIHRha2UgY29uc3QgYXJndW1lbnRzIHdoZXJlIGFwcHJvcHJpYXRlLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF0KCU5ldyBzdHJ1Y3R1cmVzIERMR1RFTVBMQVRFMzIsIERMR0lURU1URU1QTEFURTMyLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglCdWlsZFNwZWMzMkZpbGVzOiBnZW5lcmF0ZSBCYXNlIHZhbHVlIGludG8gY29kZSwgZ2VuZXJhdGUgY2FsbCB0bwoJUkVMQVkzMl9NYWtlRmFrZU1vZHVsZS4KCQoJKiBbd2luMzIvaGVhcC5jXQoJVGhpcyBpcyBzdGlsbCBub3QgZmluaXNoZWQgYW5kIG5lZWRzIHJld29yay4KCUhlYXBBbGxvYzogcmVuYW1lZCB0byBTSU1QTEVfSGVhcEFsbG9jLCBpbXBsZW1lbnRlZCBIZWFwQWxsb2MuCglIZWFwQ3JlYXRlOiBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgVmlydHVhbEFsbG9jLCB3aGljaCBkb2VzIG5vdCB3b3JrIHlldAoJSGVhcERlc3Ryb3ksIEhFQVBfR3Jvd0hlYXAsIEhlYXBGcmVlOiBuZXcgZnVuY3Rpb25zLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJU3VwcG9ydCBmb3IgVlJBTkdFX09CSkVDVC4gVGhpcyBpcyBub3QgeWV0IGNhbGxlZCBmcm9tIGFueSBwbGFjZSwKCWFuZCBuZWVkcyBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIHN1cHBvcnQKCU1FTU9SWV9GaW5kVnJhbmdlLCBNRU1PUllfSXNWcmFuZ2VGcmVlLCBNRU1PUllfSW5zZXJ0VnJhbmdlLAoJTUVNT1JZX0FsbG9jVnJhbmdlLCBNRU1PUllfUmVsZWFzZVZyYW5nZTogbmV3IGZ1bmN0aW9ucy4KCgkqIFt3aW4zMi91c2VyMzIuY10KCVdJTjMyX0NyZWF0ZVdpbmRvd0V4QTogZG9uJ3QgR2xvYmFsQWxsb2MgZm9yIGludGVnZXIgY2xhc3MgYW5kIHdpbmRvdwoJbmFtZXMsIGFzIGluIGRpYWxvZ3MuCglJbXBsZW1lbnRlZCBkaWFsb2cgZnVuY3Rpb25zIChzZWUgdXNlcjMyLnNwZWMpLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNBUkVUX0luaXRpYWxpemU6IGNhbGwgUkVMQVkzMl9HZXRCdWlsdGluRExMLgoKTW9uIEZlYiAxMiAxODo1Mjo0MCAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVJlbW92ZWQgY29tbWVudGVkIG91dCAjaWZkZWZzIGZvciBXSU5FTElCLgoKCSogW3Rvb2xzL21ha2VodG1sLnBsXQoJUHV0IGluIGVycm9yIGNoZWNraW5nIHdoZW4gdHJ5aW5nIHRvIG9wZW4gYSBmaWxlLgoKCSogW2xpYnRlc3QvTWFrZWZpbGUuaW5dIFtsaWJ0ZXN0L25ldy5jXSBbbGlidGVzdC9oZWxsbzQuY10KCUFkZGVkIHR3byBuZXcgdGFyZ2V0czogaGVsbG80IGFuZCBuZXcuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBkZWZpbml0aW9uIG9mIERFVk1PREUgc3RydWN0dXJlLCBhbHRob3VnaCBpdCdzIG5vdCB5ZXQgdXNlZC4KICAJTW9kaWZpZWQgdmFyaW91cyBBUEkgZnVuY3Rpb25zIGZyb20gQ3JlYXRlREMoKSB0byBFc2NhcGUoKSwgaW4KIAlvcmRlciB0byBtYWtlIHRoZW0gbW9yZSBjb21wbGlhbnQgd2l0aCB0aGUgc3RyaWN0IEFQSSBkZWZpbml0aW9ucy4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAndHlwZWRlZiBjaGFyIFRDSEFSJy4gIEl0IHByb2JhYmx5IHNob3VsZCBiZSBkZWZpbmVkIGFzCgknc2hvcnQnLCBidXQgdGhlbiB3ZSB3b3VsZCBoYXZlIHRvIHN1cHBvcnQgc3VjaCBjaGFyYWN0ZXJzLiAgQWxzbyBkaWQKCSd0eXBlZGVmIGNvbnN0IFRDSEFSKiBMUENUU1RSJyBhbmQgJ3R5cGVkZWYgVENIQVIqIExQVFNUUicuCglBbHNvIGRlZmluZWQgV05ERU5VTVBST0MsIEZPTlRFTlVNUFJPQywgR09CSkVOVU1QUk9DLCBQUk9QRU5VTVBST0MKCU1GRU5VTVBST0MsIGFuZCBIR0RJT0JKLgoKTW9uIEZlYiAgNSAxNjo0MjowNyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFttaXNjL2NvbW1kbGcuY10KCVBhdGNoZWQgYSBidWcgdGhhdCBvY2N1cnJlZCBpbiB0aGUgaW50ZXJuYWwgQ09NTURMRyBtb2R1bGUgZm9yIHRoZQogCUZpbGVPcGVuKCksIEZpbGVTYXZlKCkgYW5kIEZpbGVTYXZlQXMoKSBmdW5jdGlvbnMuICBUaGUgZmlsZS10eXBlCiAJY29tYm9ib3ggaXMgbm93IGhhbmRsZWQgY29ycmVjdGx5LgoKRnJpIEZlYiAgMiAyMjo1Mjo1OCAxOTk2ICBSb21hbiBEb2xlanNpICA8cm9tYW5Ac29ycnkudnNlLmN6PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfQ3oucmNdCglBZGRlZCBzdXBwb3J0IGZvciBDemVjaCBbQ3pdIGxhbmd1YWdlLgoKVGh1IEZlYiAgMSAwMDozNTowNCAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9tYXRjaGZvbnQgOiBmb3IgZml4ZWQtc3BhY2luZyBmb250cywgYWxsb3cgJ2MnIGlmICdtJyBmYWlsczsKCWZvciB2YXJpYWJsZS1zcGFjaW5nIGZvbnRzIDogYWxsb3cgJyonIGlmICdwJyBmYWlsczsgaWYgYXNrZWQgbGZIZWlnaHQKCWlzIC0xLCBhc3N1bWUgMC4KCUNyZWF0ZUZvbnRJbmRpcmVjdCA6IGlmIGZvbnQgcGFyYW1ldGVyIGlzIE5VTEwsIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UuCglDcmVhdGVGb250IDogbnVsbC10ZXJtaW5hdGUgbGZGYWNlTmFtZS4KCVBhcnNlRm9udFBhcm1zIDogZGVidWcgY29kZSB0dXJuZWQgb2ZmIDogdG9vIHZlcmJvc2UuCglJbml0Rm9udHNMaXN0IDogcmVjb2duaXplICotYy0qIGZvbnRzIGFzIGZpeGVkLXNwYWNpbmcgZm9udHMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQ29sb3JUb1BoeXNpY2FsIDogYWRtaXQgMHhmZi4uLi4uLiBDT0xPUlJFRidzIGFzIDB4MDAuLi4uLi4gb25lcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKYW4gMzEgMTA6NTg6MDAgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIC0td2l0aC1kbGwgb3B0aW9uIHRvIGJ1aWxkIGxpYndpbmUuc28uCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgTGlzdEJveERpcmVjdG9yeSgpLCBEbGdEaXJTZWxlY3QoKSBhbmQKCURsZ0Rpckxpc3QoKS4gSG9wZWZ1bGx5IHRoZWlyIGJlaGF2aW9yIGlzIGNvcnJlY3Qgbm93LgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVVzZSBTRUdQVFJzIGluIENoYW5nZU1lbnUoKSwgSW5zZXJ0TWVudSgpLCBBcHBlbmRNZW51KCkgYW5kCiAJTW9kaWZ5TWVudSgpIGZvciB0aGUgaXRlbSBkYXRhLCB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBwb2ludGVyCiAJZm9yIG93bmVyLWRyYXduIGl0ZW1zLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJQXR0ZW1wdCB0byBsb2FkIE9FTSBpY29ucyBmb3IgU1NfSUNPTiBjb250cm9scy4gUHJvYmFibHkgbm90CgllbnRpcmVseSBjb3JyZWN0LgoJRG9uJ3QgY2xpcCB0aGUgdGV4dCBvdXRwdXQuCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglBZGQgdGVtcCBkaXIgYW5kIFdpbmRvd3MgZGlyIHRvIGVudmlyb25tZW50LgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJRml4ZWQgYSBmZXcgcGF0aCBoYW5kbGluZyBidWdzIGluIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpLgoJQ2FjaGUgbGFzdCB1c2VkIGRpcmVjdG9yeSBpbiBET1NGU19GaW5kTmV4dCgpIHRvIGF2b2lkIHF1YWRyYXRpYwoJc2VhcmNoIHRpbWUuCgoJKiBbZmlsZXMvZHJpdmUuY10KCU5ldyBmb3JtYXQgZm9yIGRyaXZlcyBjb25maWd1cmF0aW9uIGluIHdpbmUuY29uZjsgYWxsb3dzCglzcGVjaWZ5aW5nIHRoZSB0eXBlLCBsYWJlbCBhbmQgc2VyaWFsIG51bWJlciBvZiBhIGRyaXZlLgoKCSogW2ZpbGVzL2ZpbGUuY10KCU5ldyBmdW5jdGlvbiBGSUxFX09wZW5Vbml4RmlsZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3BlbiBhCglkaXJlY3RvcnkgaW5zdGVhZCBvZiBhIGZpbGUuCglGaXhlZCBET1NGU19HZXRVbml4RmlsZU5hbWUoKSBjaGVja19sYXN0IGZsYWcgaW4gRklMRV9NYWtlRGlyKCkuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJUmV3cm90ZSBwcm9maWxlIGhhbmRsaW5nLiBTaG91bGQgYmUgY2xvc2VyIHRvIFdpbmRvd3MgYmVoYXZpb3Igbm93LgoJTmV3IGZ1bmN0aW9uIFBST0ZJTEVfR2V0V2luZUluaVN0cmluZygpIHRvIGdldCBhIHN0cmluZyBmcm9tIHdpbmUuY29uZi4KCVN1cHBvcnQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHdpbmUuY29uZi4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgdGhlIG9yZGVyIG9mIGRlbGV0aW9uIGluIFRBU0tfRGVsZXRlVGFzaygpIHRvIGF2b2lkIG1lbW9yeQoJY29ycnVwdGlvbi4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglDcmVhdGUgYSBkaXNjYXJkZWQgYmxvY2sgb24gR2xvYmFsQWxsb2MoKSBpZiB0aGUgc2l6ZSBpcyAwOyB0aGFua3MKCXRvIEpvaG4gSGFydmV5IGZvciBub3RpY2luZyB0aGlzLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJTE9DQUxfR2V0SGVhcDogbWFrZSBzdXJlIHRoZSBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSBjaGVja2luZwoJbWFnaWMgbnVtYmVyLgoKCSogW21pc2MvbWFpbi5jXQoJTW92ZWQgcHJvZmlsZSBhbmQgcmVnaXN0cnkgc2F2aW5nIHRvIEV4aXRXaW5kb3dzKCksIHNvIHdlIGRvbid0Cgl0cnkgdG8gc2F2ZSB0aGVtIGluIGNhc2Ugb2YgYSBjcmFzaC4KCgkqIFttaXNjZW11L2ludDIxLmNdCglJTlQyMV9HZXRGcmVlRGlza1NwYWNlOiB0cnkgdG8gY29tcHV0ZSB0aGUgY2x1c3RlciBzaXplIGZyb20gdGhlCglmaWxlc3lzdGVtIHNpemUgaW5zdGVhZCBvZiBoYXJkLWNvZGluZyBpdCB0byA2NC4KCUZpeGVkIGZ1bmN0aW9ucyAweDNmIGFuZCAweDQwIHRvIHVzZSBfaHJlYWQgYW5kIF9od3JpdGUgdG8gYWxsb3cKCXJlYWRpbmcgb3Igd3JpdGluZyA2NTUzNSBieXRlcyAodGhhbmtzIHRvIEJydWNlIE1pbG5lciBmb3IgdGhpcwlvbmUpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgYnVnIGluIGxpbmtlZC1saXN0IGhhbmRsaW5nIGluIE1TR19EZWxldGVRdWV1ZSgpLgoJU2ltcGxpZmllZCBTZXRNZXNzYWdlUXVldWUoKS4KCgkqIFt3aW5lLmluaV0gW3dpbmUubWFuXQoJVXBkYXRlZCBmb3IgbmV3IGRyaXZlcyBjb25maWd1cmF0aW9uIGZvcm1hdC4KClR1ZSBKYW4gMzAgMTE6MjQ6NDYgMTk5NiAgV2lsbGlhbSBNYWdybyAgPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBFU19QQVNTV09SRCBzdHlsZSwgRU1fU0VUUEFTU1dPUkRDSEFSIGFuZAogCUVNX0dFVFBBU1NXT1JEQ0hBUiBtZXNzYWdlcy4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglBZGp1c3RlZCBjbGFzcyBjcmVhdGlvbiBmbGFncyB0byBiZXR0ZXIgbWF0Y2ggdmFsdWVzIFdpbmRvd3MgdXNlcy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIEVTX05PSElERVNFTCB0eXBvLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJQWRkZWQgZGV0ZWN0aW9uIGZvciB6ZXJvIG9mZnNldCBpbiBSQUREUiBmaXh1cHMuIFF1aWNrZW4KCXdhcyBpbiBhbiBpbmZpbml0ZSBsb29wIGhlcmUuCgpNb24gSmFuIDI5IDIwOjEyOjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglCdWdmaXg6IHJhbmdlIGVycm9yIGluIG1vbnRoIHZhbHVlICgwLi4xMSBzZXQgdG8gMS4uMTIpLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNoYW5nZWQgUk9QMi1tb2RlIHRvIFIyX05PVFhPUlBFTiBpbiBDQVJFVF9DYWxsYmFjayBmb3IgcHVsc2VkCiAJYXBwZWFyYW5jZSBvZiB0aGUgY2FyZXQuCgoJKiBbd2luZG93cy9tZGkuY10gW2luY2x1ZGUvbWRpLmhdCglDaGFuZ2VkIE1ESVRpbGUoKTogYWRkZWQgYSBuZXcgcGFyYW1ldGVyIFdPUkQgd1BhcmFtIGZvcgogCVdNX01ESVRJTEUgc2Vjb25kIHRpbGluZyBtZXRob2QgKE1ESVRJTEVfSE9SSVpPTlRBTCBpbiB3UGFyYW0pIGFzCiAJdXNlZCBpbiBXaW4zLjEKClN1biBKYW4gMjggMTQ6MjA6MDAgMTk5NiAgQ2FtZXJvbiBIZWlkZSAgPGhlaWRlQGVlLnVhbGJlcnRhLmNhPgoKCSogW21pc2NlbXUvaW50MmYuY10KCUFkZGVkIGEgc21hbGwgYml0IG9mIE1TQ0RFWCBlbXVsYXRpb24uCgoJKiBbd2luZG93cy9hbGlhcy5jXQoJQUxJQVNfUmVnaXN0ZXJBbGlhcyB3YXMgcmV0dXJuaW5nIHRoZSBoYXNoIHZhbHVlIHdoZW4gaXQgc2hvdWxkCiAJaGF2ZSBiZWVuIHJldHVybmluZyB0aGUgcmVjb3JkIG51bWJlci4KCQpTYXQgSmFuIDI3IDEwOjUzOjUxIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS9zaGVsbC5oXSBbaW5jbHVkZS93aW50eXBlcy5oXQoJTW92ZWQgZGVmaW5pdGlvbiBvZiBIS0VZIGFuZCBMUEhLRVkgdHlwZXMgdG8gaW5jbHVkZS93aW50eXBlcy5oLgoJRGVjbGFyZWQgRk9OVEVOVU1QUk9DIGluIHdpbnR5cGVzLmguCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBkZWZpbml0aW9uIG9mIEtFUk5JTkdQQUlSIGFuZCBMUEtFUk5JTkdQQUlSIHR5cGVzLiAgQWRkZWQKCWRlY2xhcmF0aW9ucyBmb3IgQ29weUN1cnNvcigpLCBDb3B5SWNvbigpLCBFbnVtRm9udEZhbWlsaWVzKCksCglFeHRyYWN0SWNvbigpLCBGYXRhbEFwcEV4aXQoKSwgRmluZEV4ZWN1dGFibGUoKSwgR2V0Q2xpcEN1cnNvcigpLAoJR2V0S2VybmluZ1BhaXJzKCksIEdldFF1ZXVlU3RhdHVzKCksIEdldFJhc3Rlcml6ZXJDYXBzKCksCglJc0dESU9iamVjdCgpLCBJc01lbnUoKSwgSXNUYXNrKCksIFJlZ0Nsb3NlS2V5KCksIFJlZ0NyZWF0ZUtleSgpLAoJUmVnRGVsZXRlS2V5KCksIFJlZ0VudW1LZXkoKSwgUmVnT3BlbktleSgpLCBSZWdRdWVyeVZhbHVlKCksCglSZWdTZXRWYWx1ZSgpLCBSZXNldERDKCksIFNoZWxsRXhlY3V0ZSgpLCBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpLAoJYW5kIHdzcHJpbnRmKCkuCgoJKiBbdG9vbHMvbWFrZWh0bWwucGxdIFtkb2N1bWVudGF0aW9uL2FwaXcuaW5kZXhdCglOZXcgZmlsZXMgdGhhdCBzY2FuIHdpbmRvd3MuaCwgY29tbWRsZy5oLCBhbmQgdG9vbGhlbHAuaCBhbmQgb3V0cHV0CglhbiBIVE1MIHNvcnRlZCBsaXN0IHdpdGggb3B0aW9uYWwgbGlua3MgdG8gd3d3LndpbGxvd3MuY29tIGFuZCBhCgl0YWxseSBvZiB1bmltcGxlbWVudGVkIEFQSVcgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJQWRkZWQgV2luMzIgdmVyc2lvbnMgb2YgQ29weUljb24oKSBhbmQgQ29weUN1cnNvcigpIGZvciB1c2UgaW4KCWxpYndpbmUuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10gW3dpbjMyL3dpbnByb2NzLmNdCglBZGRlZCAnI2luY2x1ZGUgImxpYnJlcy5oIicgYW5kIGV4cGxpY2l0IGRlY2xhcmF0aW9ucyBvZiB3aW5kb3dzCglwcm9jcyBpbiBvcmRlciB0byBhdm9pZCB3YXJuaW5ncy4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUFkZGVkIFdpbjMyIHZlcnNpb24gb2YgTXVsRGl2KCkgZm9yIGxpYndpbmUuCgoJKiBbKi8qXSBbaW5jbHVkZS93aW5kb3dzLmhdCglDaGFuZ2VkIHNldmVyYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIGNvbXBseSBtb3JlIHN0cmljdGx5IHRvCgl0aGUgd2luZG93cyBBUEkgKHdpdGhvdXQsIGhvcGVmdWxseSwgYWx0ZXJpbmcgdGhlaXIgZnVuY3Rpb25hbGl0eSkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTWFkZSB0aGUgcmV0dXJuIHZhbHVlIG9mIENoZWNrTWVudUl0ZW0gYmUgdGhlIHByZXZpb3VzIHN0YXRlIG9mCiAJdGhlIG1lbnUgaXRlbSBpZiBpdCB3YXMgZm91bmQsIG90aGVyd2lzZSAtMSBhcyBzcGVjaWZpZWQgaW4gdGhlCiAJU0RLLiBUaGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBBUElXIHNwZWNpZmljYXRpb24sIHdoaWNoIHNheXMgaXQKIAlzaG91bGQgcmV0dXJuIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIEZBTFNFLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgb2Jzb2xldGUgV01fU0laRSBtZXNzYWdlIHdQYXJhbSBuYW1lcyBmb3IgY29tcGF0aWJpbGl0eS4KICAJQWRkZWQgV2luSGVscCgpIGNvbW1hbmQgY29uc3RhbnRzLCBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgeWV0CiAJc3VwcG9ydGVkLgoKCSogW3JjL3dpbmVyYy5jXQoJVGlkaWVkIHVwIHRyYW5zZm9ybV9iaW5hcnlfZmlsZSgpLiAgSW4gYXJndW1lbnQgY2hlY2tpbmcsIGZsYXR0ZW5lZAoJYW55IGludmFsaWQgY2hhcmFjdGVycyBzcGVjaWZpZWQgd2l0aCB0aGUgcHJlZml4IGFyZ3VtZW50LgoKCSogW2xpYnJhcnkvbGlicmVzLmNdCglNYWRlIEZpbmRSZXNvdXJjZSgpIGNhc2UtaW5zZW5zaXRpdmUgd2hlbiBwYXJhbWV0ZXIgJ25hbWUnIGlzIGEgc3RyaW5nLgoKU2F0IEphbiAyNyAwMjozMCAxOTk2ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGUKCgkqIFtmaWxlcy9kcml2ZS5jXQoJSWYgcm9vdCAiLyIgaXMgZ2l2ZW4gaW4gd2luZS5jb25mLCB1c2UgaXQgYXMgbGFzdCByZXNvcnQuCgoJKiBbZmlsZXMvZmlsZS5jXQoJUmVwb3J0IEVSX0FjY2Vzc0RlbmllZCBpdCBkaXNrIGlzdCBub3Qgd3JpdGFibGUKCU1vcmUgRGVidWcgT3V0cHV0CgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJU3F1ZWV6ZWQgc29tZSBidWdzIGluIEV4dGVuZGVkT3BlbkNyZWF0ZUZpbGUKCQoJKiBbd2luZG93cy93aW5wb3MuY10KCVNvbWUgd2luZG93cyBtYXkgbm90IGJlIG1vdmVkIG9yIHJlc2l6ZWQuIFdlIGFyZSBtaXNzaW5nIHNvbWUKCXN0cnVjdHVyZXMgdG8gYmUgZXhhY3QsIGJ1dCB0aGUgYXBwcm9hY2ggc2hvdWxkIGhlbHAgaW4gc29tZSBjYXNlcwoJYW5kIG1ha2UgdGhpbmdzIHdvcnNlIGluIG11Y2ggZmV3ZXIuCgpGcmkgSmFuIDI2IDEwOjI0OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglmaXh1cF9pbXBvcnRzOiBGaW5kIGJ1aWx0aW5zIGZvciBCb3JsYW5kIHN0eWxlIGVudHJpZXMsIHRvbwoKRnJpIEphbiAyNiAxMDoyNDowMCAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUxvYWRNZW51OiBicmFuY2ggdG8gV2luMzIgZm9yIFBFIG1vZHVsZXMKCgkqIFtpZjE2MzIvZ2RpLnNwZWNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVtpZjE2MzIvdXNlcjMyLnNwZWNdCglEZWxldGVPYmplY3QsIEdldFBpeGVsLCBTZXRQaXhlbCxXcml0ZVByaXZhdGVQcm9maWxlU3RyaW5nQSwKCVdyaXRlUHJvZmlsZVN0cmluZ0EsIEVtcHR5Q2xpcGJvYXJkLCBFbmFibGVNZW51SXRlbSwgRW5hYmxlU2Nyb2xsQmFyLAoJRW5hYmxlV2luZG93LCBJbnZhbGlkYXRlUmVjdCwgU2V0V2luZG93VGV4dEEsIFdpbkhlbHBBOiBuZXcgcmVsYXlzCglEcmF3VGV4dEEsIE1vdmVUb0V4LCBHZXRDbGllbnRSZWN0LCBJbnZhbGlkYXRlUmVjdCwgTG9hZEJpdG1hcEEvVywKCUxvYWRBY2NlbGVyYXRvcnNBL1csIExvYWRNZW51W0luZGlyZWN0XUEvVywgTG9hZFN0cmluZ0EvVzogY2hhbmdlZAoJdG8gY29udmVydCBwYXJhbWV0ZXJzIG9yIG5hbWluZyBjb252ZW50aW9uCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXVtpbmNsdWRlL3dpbnR5cGVzLmhdCgltb3ZlZCBXQ0hBUiwgZGVmaW5lZCBMUFdTVFIKCgkqIFtpbmNsdWRlL3N0cmluZzMyLmhdW3dpbjMyL3N0cmluZzMyLmNdW2luY2x1ZGUvc3RydWN0MzIuaF0KCU5ldyBmaWxlcwoKCSogW2xvYWRlci9tb2R1bGUuaF0KCUxvYWRNb2R1bGU6IGV4aXQgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gUEVfTG9hZE1vZHVsZQoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJbXlfd2NzdG9tYnM6IGlzYXNjaWkgZG9lcyBub3Qgd29yayBvbiBMaW51eCBmb3IgVW5pY29kZQoJUEVfTG9hZEltYWdlOiBIYW5kbGUgZGlyZWN0b3JpZXMKCgkqIFttaXNjL3VzZXIzMi5jXQoJVVNFUjMyX1JFQ1QzMnRvMTYsIFVTRVIzMl9SRUNUMTZ0bzMyOiBuZXcgZnVuY3Rpb25zCglpbXBsZW1lbnRlZCBuZXcgdXNlcjMyIHJlbGF5cwoKCSogW21pc2MvbmV3Zm5zLmNdCglXSU4zMl9XaW5IZWxwQTogbmV3IGZ1bmN0aW9uCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJTmV3IGZpbGUKCgkqIFt3aW4zMi9yZXNvdXJjZS5jXQoJR2V0UmVzRGlyRW50cnk6IGFkZGVkIHN1cHBvcnQgZm9yIG5hbWVkIGVudHJpZXMKCVdJTjMyX0xvYWRBY2NlbGVyYXRvcnNXOiBpbnZva2UgKjMyIHJlc291cmNlIGZ1bmN0aW9ucwoJV0lOMzJfTG9hZEJpdG1hcEE6IGNvbnZlcnQgbmFtZSB0byB1bmljb2RlIGlmIGFwcHJvcHJpYXRlCglXSU4zMl9QYXJzZU1lbnU6IG5ldyBmdW5jdGlvbgoJaW1wbGVtZW50ZWQgbmV3IHJlc291cmNlIGZ1bmN0aW9ucyBmcm9tIHVzZXIzMi5zcGVjCgpXZWQgSmFuIDI0IDE4OjA5OjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglHZXRJY29uSWQoKSBhbmQgTG9hZEljb25IYW5kbGVyKCkgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3MvbWRpLmNdCglCZXR0ZXIgbWF4aW1pemF0aW9uIHN1cHBvcnQsIFRyYW5zbGF0ZU1ESVN5c0FjY2VsKCkgZnVuY3Rpb24sIAoJbWlzYyBpbXByb3ZlbWVudHMuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUZpeCBmb3IgV01fV0lORE9XUE9TQ0hBTkdFRCBtZXNzYWdlIGhhbmRsZXIuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJld3JvdGUgV2luZG93RnJvbVBvaW50KCkgZnVuY3Rpb24uCgpTdW4gSmFuIDIxIDE5OTYgMTc6MDU6MDkgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2luY2x1ZGUvdG9vbGhlbHAuaF0gW21pc2MvdG9vbGhlbHAuY10KCUFkZGVkIE5vdGlmeShVbilSZWdpc3RlciwgYnV0IG5vIGNhbGxiYWNrcyB5ZXQuCgpGcmkgSmFuIDE5IDAxOjQzOjM3IDE5OTYgVmljdG9yIFNjaG5laWRlciA8cm9vdEB0YWlsb3Iucm9tYW4ub3JnPgoKCSogW01ha2VmaWxlLmluXQoJQWRkZWQgdGFyZ2V0IGZvciBsaWJ3aW5lLnNvLjEuMC4KCgkqIFtsaWJyYXJ5L3dpbm1haW4uY10KCUZvciBXSU5FTElCRExMLCBfV2luTWFpbiBqdXN0IHJldHVybnMgaEluc3RhbmNlIGluc3RlYWQgb2YgY2FsbGluZwoJV2luTWFpbigpLgoKCSogW21pc2MvbWFpbi5jXQoJRm9yIFdJTkVMSUJETEwsIHJlbmFtZWQgbWFpbigpIHRvIF93aW5lX21haW4oKSBmb3IgY2FsbGluZyBmcm9tIHRoZQoJc3R1YiBtYWluIGZ1bmN0aW9uLgoKCSogW2xpYnJhcnkvd2luZXN0dWIuY10gKG5ldyBmaWxlKQoJUHJvdmlkZXMgYSBzdHViIG1haW4oKSBmdW5jdGlvbiBmb3IgdXNpbmcgbGlid2luZS5zby4KClR1ZSBKYW4gMTYgMTE6MDQ6MzQgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW3dpbnNvY2tldC5jXQoJRml4IEVQRVJNIHByb2JsZW0uCgoJKiBbZ2xvYmFsLmNdCglBdHRlbXB0IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNraW5nIGluIE1lbU1hbkluZm8oKS4KCgkqIFtDaGFuZ2Vsb2ddCglGaXggY2hhbmdlbG9nIG92ZXJzaWdodCBmb3IgcHJldmlvdXMgZW50cnkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAxNCAxMzo0NToyMiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgY2hlY2sgZm9yIGdjYyBzdHJlbmd0aC1yZWR1Y2UgYnVnLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNoYW5nZWQgTGlzdEJveERpcmVjdG9yeSgpIHRvIHVzZSB0aGUgbmV3IERPUyBmaWxlIGZ1bmN0aW9ucy4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBwYXJhbWV0ZXJzIGZvciBEZWxldGVNZW51KCkgY2FsbCBpbiBDaGFuZ2VNZW51KCkuCgoJKiBbZGVidWdnZXIvc3RhY2suY10KCUFsc28gZGlzcGxheSBjdXJyZW50IGZyYW1lIGluIGJhY2stdHJhY2UuCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdIFtmaWxlcy9kb3NfZnMuY10gW2ZpbGVzL2RyaXZlLmNdIFtmaWxlcy9maWxlLmNdCglDb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBET1MgZmlsZSBoYW5kbGluZy4KCUltcGxlbWVudGVkIHBlci10YXNrIGZpbGUgaGFuZGxlcy4KCVJlbW92ZWQgZGVmYXVsdCBaOiBkcml2ZTsgbmVlZHMgdG8gYmUgcHV0IGV4cGxpY2l0ZWx5IGluIHdpbmUuaW5pCglpZiBkZXNpcmVkLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIExvYWRNb2R1bGUoKS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJSW5pdGlhbGlzZSBQREIgZmlsZSBoYW5kbGUgdGFibGUgaW4gVEFTS19DcmVhdGVUYXNrKCkuCglDbG9zZSBmaWxlIGhhbmRsZXMgb24gdGFzayB0ZXJtaW5hdGlvbi4KCUltcGxlbWVudGVkIFNldEVycm9yTW9kZSgpLgoKCSogW21pc2MvbmV0d29yay5jXQoJRml4ZWQgV05ldEdldENvbm5lY3Rpb24oKSB0byB1c2UgR2V0RHJpdmVUeXBlKCkuCgoJKiBbbWlzYy94bWFsbG9jLmNdCglBZGRlZCBmdW5jdGlvbiB4c3RyZHVwKCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJTWFueSBjaGFuZ2VzIGZvciBuZXcgRE9TIGZpbGUgZnVuY3Rpb25zLgoKCSogW21pc2NlbXUvaW50ZXJydXB0cy5jXQoJTW92ZWQgRE9TX0dldEVxdWlwbWVudCgpIGZ1bmN0aW9uIGludG8gSU5UX0ludDExSGFuZGxlcigpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4OiBjcmVhdGUgc3lzdGVtIG1lbnUgYmVmb3JlIHNlbmRpbmcgV01fTkNDUkVBVEUuCgoJKiBbKi8qLmNdCglSZXBsYWNlZCBzdHJjYXNlY21wIGFuZCBzdHJuY2FzZWNtcCBieSBsc3RyY21waSBhbmQgbHN0cm5jbXBpIGZvcgoJYmV0dGVyIHBvcnRhYmlsaXR5LgoKU2F0IEphbiAxMyAxNjoxMzowMiAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICd0eXBlZGVmIEhHTE9CQUwgR09CQUxIQU5ETEU7Jy4gIFRoaXMgaXMgbm90IHByZWNpc2VseSBpbiBsaW5lCgl3aXRoIHRoZSB0cnVlIHdpbmRvd3MgJ3R5cGVkZWYgSEFORExFIEdMT0JBTEhBTkRMRTsnLCBidXQgSSBiZWxpZXZlCglpdCBzaG91bGQgc3VmZmljZS4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCUFkZGVkICcjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+JyBmb3IgdmFyaW91cyBkZWNsYXJhdGlvbnMuICAnI2lmZGVmJy1lZAoJb3V0IHNvbWUgb2xkIHN0eWxlIGludGVybmV0IGFkZHJlc3MgI2RlZmluZSdzLgoKCSogW2xvYWRlci90YXNrLmNdCglNYWRlIE1ha2VQcm9jSW5zdGFuY2UoKSByZXR1cm4gZmlyc3QgcGFyYW1ldGVyICNpZmRlZiBXSU5FTElCMzIuCglNYWRlIEZyZWVQcm9jSW5zdGFuY2UoKSBkbyBub3RoaW5nICNpZmRlZiBXSU5FTElCMzIuCgknI2lmZGVmJy1lZCBvdXQgVEFTS19BbGxvY1RodW5rKCksIGFzIGl0IHdhcyB1bnVzZWQgaW4gV0lORUxJQjMyLgoKCSogW2xpYnJhcnkvbWlzY3N0dWJzLmNdCglNYWRlIEdldFduZFByb2NFbnRyeTE2KCkgcmV0dXJuIEFDVElWQVRFQVBQX2NhbGxiYWNrKCkgd2hlbiBjYWxsZWQKCXdpdGggbmFtZT0iQWN0aXZhdGVBcHBQcm9jIi4gIFRoaXMgaGFyZGx5IHNlZW1zIGNvcnJlY3QsIGJ1dCBpdCdzIG15CgliZXN0IGd1ZXNzIGFzIHRvIGhvdyB0aGUgZW11bGF0b3IgcmVzcG9uZHMuCgpTYXQgSmFuICA2IDE3OjU3OjQ1IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL3Byb2Nlc3MuY10KCVdJTjMyX0dldFByb2NBZGRyZXNzLCBMb2FkTGlicmFyeUE6IG5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIvcmVsYXkzMi5jXQoJUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBSZW1vdmVkIGNvZGUgdG8gbG9hZCBQRSBETExzCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXVtpbmNsdWRlL3BlX2V4ZS5oXQoJc3RydWN0IHBlX2RhdGE6IG5ldyBmaWVsZHMgYmFzZV9hZGRyLGxvYWRfYWRkcix2bWFfc2l6ZSxwZV9yZWxvYwoJc3RydWN0IFBFX1JlbG9jX0Jsb2NrOiBuZXcgc3RydWN0dXJlCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJTU9EVUxFX1JlZ2lzdGVyTW9kdWxlOiBuZXcgZnVuY3Rpb24KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVBFX0ZpbmRFeHBvcnRlZEZ1bmN0aW9uLFBFX0dldFByb2NBZGRyZXNzOiBuZXcgZnVuY3Rpb25zCglmaXh1cF9pbXBvcnRzOiBleHBlY3Qgc3RydWN0IHdfZmlsZXMqIG5vdywgZmlsbCBkbGxzX3RvX2luaXQsCgkgICAgICAgICAgICAgICBsb2FkIFBFIERMTHMKCWRvX3JlbG9jYXRpb25zOiBuZXcgZnVuY3Rpb25zCgljYWxjX3ZtYV9zaXplOiByZW5hbWVkIGZyb20gZHVtcF90YWJsZQoJUEVfTG9hZEltYWdlOiB1c2UgbWFsbG9jIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW1hZ2UKCVBFX0luaXRETEw6IGV4cGVjdCBITU9EVUxFCglQRV9Jbml0aWFsaXplRExMczogbmV3IGZ1bmN0aW9uCgoJKiBbbG9hZGVyL3Rhc2suY10KCU5FX0luaXRpYWxpemVETExzOiBicmFuY2ggdG8gUEVfSW5pdGlhbGl6ZURMTHMgZm9yIFBFIG1vZHVsZXMKCUdldEV4ZVB0cjogQWNjZXB0IFBFIG1vZHVsZXMKCgkqIFttaXNjL2NvbW1kbGcuY10KCUZJTEVETEdfV01Db21tYW5kOiB1bnBhY2sgV0lOMzIgV01fQ09NTUFORCBhcHByb3ByaWF0ZWx5IGZvciBXaW5lTGliCgpUaHUgSmFuICA0IDExOjM2OjIxIDE5OTYgIE1hbmZyZWQgV2VpY2hlbCA8TWFuZnJlZC5XZWljaGVsQG1jaC5zbmkuZGU+CgoJKiBbbWlzYy9wb3J0LmNdCglOZXcgZmlsZSB3aXRoIHVzbGVlcCgpIGZ1bmN0aW9uIGZvciBTVlI0LgoKCSogW2NvbmZpZ3VyZS5pbl0KCUNoZWNrIGZvciB1c2xlZXAoKSBmdW5jdGlvbi4KClR1ZSBKYW4gMDIgMTQ6MDA6MDAgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW2lmMTYzMi90b29saGVscC5zcGVjXSBbaW5jbHVkZS90b29saGVscC5oXQoJICBbbWlzYy91c2VyLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudCBUT09MSEVMUC44MCBUaW1lckNvdW50LiBGaXggR2V0VGlja0NvdW50LgoKCSogW3dpbnNvY2tldC5jXQoJRml4ZWQgRU5PRU5UIGVycm9yLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJSW1wbGVtZW50IERQTUkgR2V0IFBhZ2UgU2l6ZSAoQVg9MDYwNCwgSU5UIDMxKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudCBUT09MSEVMUC43MiBHZXRNZW1NYW5JbmZvLgoKTW9uIEphbiAgMiAxMDozMzowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ2FsbFdpbmRvd1Byb2MoKSAtIFdoZW4gY2FsbGluZyBSRUxBWTMyX0NhbGxXaW5kb3dQcm9jLCBjaGVjawoJd2hldGhlciBsUGFyYW0gc2hvdWxkIGJlIGEgU0VHUFRSLCBhbmQgaWYgc28gY29udmVydCBpdCB0byBvbmUuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglOdW1lcm91cyBmdW5jdGlvbnMgYWRkZWQsIG1vc3RseSBjYWxscyB0byBvcmlnaW5hbCAod2luMTYpCiAJZnVuY3Rpb25zLiAgTm90ZSB0aGF0IHNvbWUgKG1hbnkpIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBub3QKIAlzdHJpY3RseSBjb3JyZWN0LCBidXQgd2l0aCB0aGVzZSBhZGRpdGlvbnMgZnJlZWNlbGwgd2lsbCBhdCBsZWFzdAogCWRpc3BsYXkgaXRzIG1haW4gd2luZG93IHRob3VnaCBpdCBpcyBnYXJibGVkLgoKCSogW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJQ29tcGxldGVseSByZXdyaXR0ZW4gLSBhbGwgV25kUHJvY3Mgbm93IGhhdmUgd2luMzIgdmVyc2lvbnMgdG8KCWhlbHAgd2l0aCB0aGUgbHBhcmFtIFNFR1BUUiBmaXggaW4gY2FsbGJhY2suYwoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0KCUxQVENTVFIgZGVmaW5lZC4KCgkqIFtpbmNsdWRlL3BlZXhlLmhdCglEZWZpbml0aW9uIG9mIFBFX0V4cG9ydF9EaXJlY3RvcnkgYW1lbmRlZC4KCgkqIFtpbmNsdWRlL3Jlc291cmNlMzIuaF0KCU5ldyBmaWxlLgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJRGVmaW5pdGlvbiBvZiBNQUtFX1NFR1BUUiBtYWNybyAjaWZkZWYnZCBvdXQgYW5kIHJlcGxhY2VkIHdpdGgKCXByb3RvdHlwZSBmb3IgcmVwbGFjZW1lbnQgZnVuY3Rpb24gaW4gbWVtb3J5L3NlbGVjdG9yLmMgd2hpY2gKCWNhbiBvcGVyYXRlIG9uIGFueSBnaXZlbiBtZW1vcnkgYWRkcmVzcy4gVGhpcyBpcyBjdXJyZW50bHkKCXJlcXVpcmVkIGZvciB3aW4zMiBzdXBwb3J0LiBJdCBpcyBhIGRyZWFkZnVsIGNsdWRnZSwgYW5kIHdpbGwKCWNlcnRhaW5seSBzbG93IGRvd24gb3RoZXIgcHJvZ3JhbXMuIElmIHlvdSBhcmUgbm90IGludGVyZXN0ZWQKCWluIHdpbjMyIGRldmVsb3BtZW50IHlvdSBtYXkgd2lzaCB0byByZXZlcnNlIHRoaXMgcGF0Y2guCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglEZWZpbml0aW9uIG9mIFNXX1NIT1dERUZBVUxUIGFkZGVkLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRXh0ZW5zaXZlIHJld3JpdGVzIG9mIHhtbWFwKCkgZml4dXBfaW1wb3J0cygpLgoJUEVfTG9hZEltYWdlKCkgLSBpbml0aWFsaXNhdGlvbiBvZiBic3MgYWRkZWQsIGV4dHJhY3Rpb24gb2YKCW1vZHVsZSBuYW1lIGZpeGVkLCBpbml0aWFsaXNhdGlvbiBvZiBETEwgYWRkZWQuCglQRV9Jbml0RExMKCkgLSBub3cgZG9lcyBzb21ldGhpbmcuCglQRV9XaW4zMkNhbGxUb1N0YXJ0KCkgLSBpbml0aWFsaXNhdGlvbiBvZiBURUIgcG9pbnRlZCB0byBieQoJZnMgYWRkZWQuCglQRV9Jbml0VEVCKCkgY3JlYXRlZCB0byBwZXJmb3JtIFRFQiBpbml0aWFsaXNhdGlvbi4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10gCglOZXcgZnVuY3Rpb24gTUFLRV9TRUdQVFIoKSAtIHNlZSBpbmNsdWRlL3N0YWNrZnJhbWUuaCBhYm92ZS4KCgkqIFttaXNjL3VzZXIzMi5jXQoJVVNFUjMyX1JlZ2lzdGVyQ2xhc3NBKCksIENyZWF0ZVdpbmRvd0V4QSgpIG1lbW9yeSBhbGxvY2F0aW9uCgltZXRob2QgY2hhbmdlZC4gVGhpcyBpcyBwcm9iYWJseSBub3cgdW5uZWNlc3Nhcnkgd2l0aCB0aGUKCW5ldyBNQUtFX1NFR1BUUiBoYW5kbGluZyBjb2RlLgoJVVNFUjMyX0RlZlduZFByb2NBKCkgcmVtb3ZlZCB0byB3aW4zMi93aW5wcm9jcy5jCglVU0VSMzJfVHJhbnNsYXRlTWVzc2FnZSBhZGRlZC4KCgkqIFt0b29scy9idWlsZC5jXQoJaGFuZGxpbmcgb2Ygd2luMzIgc3BlYyBmaWxlcyBjaGFuZ2VkIHRvIHN1cHBvcnQgZ2NjMi42LlgKCXRoaXMgcmVxdWlyZXMgb3B0aW1pc2F0aW9ucyB0byBiZSBkaXNhYmxlZC4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXSBbd2luMzIvbmV3Zm5zLmNdIFt3aW4zMi9oZWFwLmNdIFt3aW4zMi93aW5wcm9jcy5jXQoJTmV3IGZpbGVzLgoKCSogW3dpbjMyL01ha2VmaWxlLmluXQoJTmV3IGZpbGVzIGhlYXAuYywgbmV3Zm5zLmMsIHJlc291cmNlLmMgYW5kIHdpbnByb2NzLmMgYWRkZWQgdG8gYnVpbGQuCgoJKiBbd2luMzIvZmlsZS5jXQoJTmV3IGZ1bmN0aW9uIFczMl9TZXRIYW5kbGVDb3VudC4KCgkqIFt3aW4zMi9pbml0LmNdCglXSU4zMl9HZXRNb2R1bGVIYW5kbGUoKSAtIG5vdyByZXR1cm5zIGhhbmRsZSBvZiBydW5uaW5nIHByb2Nlc3MKCWlmIGNhbGxlZCB3aXRoIE5VTEwuCglHZXRTdGFydHVwSW5mb0EoKSAtIHNldCBjYlJlc2VydmVkMiB0byAwLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJVmlydHVhbEFsbG9jKCkgLSBzZXQgbW1hcCgpIGZpbGUgcGFyYW1ldGVyIHRvIC0xIGluc3RlYWQgb2YgMCB0byBtYWtlCglpdCB3b3JrIHdpdGggRnJlZUJTRC4gQWxzbyBjaGVjayBmb3IgcmV0dXJuIHZhbHVlLiBSZW1vdmVkIGV4dHJhCglyZXR1cm4uCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVNob3dXaW5kb3coKSAtIFNXX1NIT1dERUZBVUxUIGhhbmRsaW5nIGtsdWRnZWQgaW4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBEZWMgMjMgMTg6MTU6NTkgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0gW01ha2VmaWxlLmluXSBbdG9vbHMvaW5zdGFsbC1zaF0KCU5ldyAnaW5zdGFsbCcgdGFyZ2V0IGluc3RhbGxzIFdpbmUgYmluYXJ5LCBsaWJyYXJ5IGFuZCBtYW4gcGFnZS4KCUxpYnJhcnkgaXMgbm93IG1vcmUgbG9naWNhbGx5IG5hbWVkIGxpYndpbmUuYS4KCVNwbGl0IHRvb2xraXQvIGRpcmVjdG9yeSBpbnRvIGxpYnJhcnkgKGZvciBsaWJyYXJ5IGNvZGUpIGFuZAoJbGlidGVzdCAoZm9yIHRlc3QgcHJvZ3JhbXMpLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVF1aWNrIGhhY2sgdG8gcGFydGlhbGx5IHN1cHBvcnQgRU1fUEFTU1dPUkQgc3R5bGUgKGF2b2lkcwoJZGlzcGxheWluZyB5b3VyIHBhc3N3b3JkcyBvbiB0aGUgc2NyZWVuIHdoZW4gdGVzdGluZyBwcm9ncmFtcy4uLikKCgkqIFtjb25maWd1cmUuaW5dIFtjb250cm9scy9tZW51LmNdIFtpbmNsdWRlL3Jlc291cmNlLmhdCgkgIFttaXNjL2NvbW1kbGcuY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9zaGVsbC5jXSBbd2luZG93cy9tc2dib3guY10KCUxhbmd1YWdlIGlzIG5vdyBhIHJ1bi10aW1lIG9wdGlvbiAod2luZSAtbGFuZ3VhZ2UgeHgpLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJRHVtcCBzb21lIG1vcmUgZGVidWdnaW5nIGluZm8gb24gY3Jhc2guCgoJKiBbbWlzYy9wcm9maWxlLmNdCglPbmx5IGNvbnNpZGVyICc7JyBhcyBhIGNvbW1lbnQgaWYgaXQncyB0aGUgZmlyc3Qgbm9uLWJsYW5rCgljaGFyYWN0ZXIgb24gdGhlIGxpbmUuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglNb3JlIGRlYnVnZ2luZyBpbmZvIGZvciByZWFsLW1vZGUgY2FsbGJhY2suCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCVJld3JvdGUgRW51bU9iamVjdHMoKSB0byBkbyB0aGUgUmlnaHQgVGhpbmcuCgoJKiBbcmVzb3VyY2VzL3N5c3JlcypdCglOZXcgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc3lzdGVtIHJlc291cmNlcy4KCkZyaSBEZWMgMjIgMTE6MjQ6MzkgR01UIDE5OTUgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW3dpbjMyL2ZpbGUuY10gW3dpbjMyL21lbW9yeS5jXQogICAgICAgIFVuaXh3YXJlIGRvZXNuJ3QgaGF2ZSBNQVBfQU5PTiBpZmRlZmVkIG91dCBmb3Igbm93LgoKCSogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAgRE9TX0dldERvc0ZpbGVOYW1lIGRpZG4ndCB0cnVuY2F0ZSBwYXRocyBzdGFydGluZyAuLyBwcm9wZXJseS4KCgkqIFt0b29scy9idWlsZC5jXQoJUHJvZHVjZXMgYXNzZW1ibHkgY29kZSB0aGF0IHdvcmtzIHdpdGggdGhlIHVuaXh3YXJlIGFzc2VtYmxlci4KCldlZCBEZWMgMjAgMjI6MjI6MjkgKzAxMDAgMTk5NSAgTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBkaWt1LmRrPgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUlOU1RSX0dldE9wZXJhbmRBZGRyOiAxNi1iaXQgYWRkcmVzc2VzIHNob3VsZCBiZSBtYXNrZWQgdG8gMTYgYml0cy4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX3JlYWRkaXIgc2hvdWxkIGFsd2F5cyByZXR1cm4gZGlyZWN0b3JpZXMsIGV2ZW4gaWYgdGhleSBkb24ndAogCW1hdGNoIHRoZSBmaWxlIG5hbWUgbWFzay4KClR1ZSBEZWMgMTkgMTg6MDA6MDAgMTk5NSAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoJCgkqIFttaXNjL2V4ZWMuY10KCUdpdmUgYXJndW1lbnRzIHRvIHdpbmhlbHAuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJSW1wbGVtZW50ZWQgSW50ZXJydXB0IDIxIEFYPTZDMDAgRVhURU5ERUQgT1BFTi9DUkVBVEUuCglDcmVhdGVkIGZ1bmN0aW9uIEV4dGVuZGVkT3BlbkNyZWF0ZUZpbGUuCglHaXZlIGZvciBzb21lIFdpbmRvd3M5NSBpbnRlcnJ1cHRzIHRoZSByZXR1cm4gdmFsdWUgJ25vdAoJaW1wbGVtZW50ZWQnLgoKU3VuIERlYyAxNyAxNjo1MTo1NiBFU1QgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU1vdmVkIHRoZSB0eXBlZGVmcyBmb3IgU1lTVEVNVElNRSBhbmQgTFBTWVNURU1USU1FIGZyb20KIAlpbmNsdWRlL2tlcm5lbDMyLmggdG8gaW5jbHVkZS93aW5kb3dzLmggYW5kIGRlY2xhcmVkIHRoZSBuZXcgV2luMzIKIAlBUEkgZnVuY3Rpb25zIFNsZWVwKCksIEdldExvY2FsVGltZSgpLCBhbmQgR2V0U3lzdGVtVGltZSgpLgogIAlSZWRlZmluZWQgSU5GSU5JVEUgYXMgMHhGRkZGRkZGRiBpZiBXSU5FTElCMzIuCgoJKiBbcmMvcmMgKG5ldyBmaWxlKV0KCUNyZWF0ZWQgdGhlIHNoZWxsIHNjcmlwdCAncmMnLCB3aGljaCBzaG91bGQgc2ltcGxpZnkgcmVzb3VyY2UKIAljb21waWxhdGlvbi4KCgkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXQoJS2x1ZGdlZCBhcm91bmQgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZSB0byB3aW5lX2ZpbGVzLiAgVGhpcyBjaGFuZ2UKIAlzaG91bGQgYmUgZml4ZWQgc29tZSB0aW1lLgoKCSogW3dpbjMyL3RpbWUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgdGhlIGZ1bmN0aW9ucyBHZXRTeXN0ZW1UaW1lKCksIGFuZCBTbGVlcCgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVJlbmFtZWQgc3RhdGljIGZ1bmN0aW9uIEdldFN5c3RlbVRpbWUgdG8gSU5UMjFfR2V0U3lzdGVtVGltZSB0bwogCWF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBBUEkgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCB0aGUgU1BGTVQgZGVmaW5pdGlvbiBmb3IgcHJpbnRmIHN0YXRlbWVudHMuCgoJKiBbbWlzYy9zaGVsbC5jXSBbaW5jbHVkZS9zaGVsbC5oXQoJQ2hhbmdlZCBFUlJPUl8qIGRlZmluZXMgdG8gU0hFTExfRVJST1JfKiwgYXMgdGhleSB3ZXJlIGNvbmZsaWN0aW5nCiAJd2l0aCB0aGUgb25lcyBpbiBpbmNsdWRlL3dpbmVycm9yLmguICBUaGV5IHNob3VsZCBwcm9iYWJseSB1c2UgdGhlCiAJdmVyc2lvbnMgaW4gd2luZXJyb3IuaCwgYnV0IEknbSBub3QgY2VydGFpbiwgYW5kIHRoYXQgY2FuIGJlIGRvbmUKIAlsYXRlci4KCgkqIFt3aW5kb3dzL21kaS5jXQoJVHJhbnNsYXRlZCBXTV9NRElBQ1RJVkFURSg/LChMT2h3bmQsSElod25kKSkgbWVzc2FnZXMgdG8KIAlXTV9NRElBQ1RJVkFURShISWh3bmQsTE9od25kKSBmb3IgV0lORUxJQjMyLiAgVGhlID8gcGFyYW1ldGVyCiAJKGJvb2xlYW4pIHdhcyBkaXNjYXJkZWQgd2l0aCB0aGlzIHRyYW5zbGF0aW9uLiAgVHJhbnNsYXRlZCBoYW5kbGVyCiAJb2YgV01fTURJU0VUTUVOVShyZWYsKGxvSE1FTlUsaGlITUVOVSkpIHRvIGhhbmRsZQogCVdNX01ESVNFVE1FTlUobG9ITUVOVSwgaGlITUVOVSkgbWVzc2FnZXMgaW4gV0lORUxJQjMyIChyZWYgYXNzdW1lZAogCWZhbHNlLCBjYWxsIERyYXdNZW51QmFyKCkgaWYgZGVzaXJlZCkuCgoJKiBbKi8qXQoJR2VuZXJhbCBleHBsaWNpdCBjYXN0cyBhbmQgbW9yZSByaWdpZCB0eXBpbmcgdG8gcmVtb3ZlIHdhcm5pbmdzLgoKCSogW2luY2x1ZGUvd2lucG9zLmhdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQ2hhbmdlZCByZXR1cm4gdHlwZSBvZiBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93IHRvIEJPT0wuCgoJKiBbaW5jbHVkZS9jb21tZGxnLmhdIFttaXNjL2NvbW1kbGcuY10KCUFkZGVkIHByb3RvdHlwZXMgZm9yIENob29zZUNvbG9yKCksIENvbW1EbGdFeHRlbmRlZEVycm9yKCksCiAJRmluZFRleHQoKSBHZXRGaWxlVGl0bGUoKSwgR2V0T3BlbkZpbGVOYW1lKCksIEdldFNhdmVGaWxlTmFtZSgpLAogCVByaW50RGxnLCBhbmQgUmVwbGFjZVRleHQoKS4KCVJlbmFtZWQgdGhlIENvbW1EbGdFeHRlbmRFcnJvcigpIGZ1bmN0aW9uIHRvIENvbW1EbGdFeHRlbmRlZEVycm9yKCkuCglNYWRlIEdldEZpbGVUaXRsZSByZXR1cm4gYSBzaG9ydCwgYXMgcGVyIHRoZSBBUEkgZGVmaW5pdGlvbi4KCgkqIFtNYWtlZmlsZS5pbl0KCUFkZGVkIGxpbmUgdG8gY2xlYW4gYW5kIGRpc3RjbGVhbiB0aGF0IHJlbW92ZXMgdGVtcG9yYXJpZXMgZnJvbQogCXRoZSBpbmNsdWRlIGRpcmVjdG9yeS4KClNhdCBEZWMgMTYgMTk6Mzk6MTQgTUVUIDE5OTUgIFN0ZWZmZW4gTW9lbGxlciA8c21vZTAwMjRAcnoudW5pLWhpbGRlc2hlaW0uZGU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQWxtb3N0IHJld3JvdGUgRURJVF9HZXRMaW5lTXNnLgoKU2F0IERlYyAxNiAxMzo1MTo0OCBNU1QgMTk5NSAgQW5kcmV3IFRheWxvciA8YW5kcmV3QHJpc2Nhbi5jb20+CgoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIE1ESVRpbGUoKSBidWcgdGhhdCBvY2N1cnMgd2hlbiAwIHdpbmRvd3MgYXJlIHByZXNlbnQgb3IgYWxsCgl3aW5kb3dzIGFyZSBtaW5pbWl6ZWQuCgpXZWQgRGVjIDEyIDIzOjMwOjAwIDE5OTUgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFttaXNjL3Byb2ZpbGUuY10KICAgICAgICBUcnkgaGFyZGVyIHRvIGZpbmQgZmlsZXMsIGVzcGVjaWFsbHkgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgoJTG9vayBpbiAkSE9NRS8ud2luZSB0b28gYW5kIGNyZWF0ZSBpdCB0aGVyZSBpZiBpdCBpc24ndCBmb3VuZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIERlYyAxMSAxOTowODo1NSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbbWlzYy9sc3RyLmNdCglSZXBsYWNlZCB3aW5lX3N0cm5jcHkoKSBieSBhIDMyLWJpdCB2ZXJzaW9uIG9mIGxzdHJjcHluKCksIHNpbmNlCiAJdGhleSBkbyB0aGUgc2FtZSBqb2IuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKSB0byBtYWtlIGl0IGNvbXBpbGUgd2l0aCBnY2MKCXZlcnNpb25zIHVuZGVyIDIuNy4gRG9lc24ndCBtZWFuIGl0IHdpbGwgcnVuIE9LIHRob3VnaC4uLgoKU2F0IERlYyAwOSAxMzoyMjo1OCAxOTk1ICBDYW1lcm9uIEhlaWRlICA8aGVpZGVAZWUudWFsYmVydGEuY2E+CgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXSBbaW5jbHVkZS93aW5lcnJvci5oXQoJQWRkZWQgZmlsZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgYW5kIG1vcmUgZXJyb3IgY29kZXMuCgoJKiBbd2luMzIvZXJyb3IuY10KCUFkZGVkIHNvbWUgcnVkaW1lbnRhcnkgZXJybm8tdG8tV2luMzIgZXJyb3IgY29udmVyc2lvbgoJY29kZS4KCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCB0byBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSwgZmlsbGVkIGluIHNvbWUga25vd24KCWVycm9yIGNvZGVzLCBhbmQgc3dpdGNoZWQgdG8gZHByaW50Zl93aW4zMi4KCgkqIFt3aW4zMi90aW1lLmNdCglBZGRlZCBHZXRMb2NhbFRpbWUuCgpGcmkgRGVjICA4IDE0OjM3OjM5IDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbnZlcnRlZCBmdW5jdGlvbnMgb2YgdGhlIHR5cGUgTE9ORyBfKEhXTkQsV09SRCxMT05HKSB0byB0aGUgdHlwZQoJTFJFU1VMVCBfKEhXTkQsV1BBUkFNLExQQVJBTSkgd2hlcmUgbmVlZGVkLgoKCSogW2luY2x1ZGUvbGlicmVzLmhdCglSZXN0cnVjdHVyZWQgbGlicmVzIHByb3RvdHlwZXMgdG8gY2xvc2VyIG1hdGNoIHRoZSB3aW5kb3dzIEFQSS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNoYW5nZWQgc2V2ZXJhbCBBUEkgcHJvdG90eXBlcycgcGFyYW1ldGVyIHR5cGVzIGZyb20gJ3Nob3J0JyB0byBJTlQsCgl3aGljaCBpcyAjZGVmaW5lZCBhcyBzaG9ydCBpbiB0aGUgZW11bGF0b3IsIGJ1dCBpcyBhIG5vcm1hbCBpbnQgaW4KCVdJTkVMSUIzMi4gIEFsc28gY2hhbmdlZCBTRUdQVFIgZnJvbSBEV09SRCB0byB2b2lkKiB3aGVuIFdJTkVMSUIzMi4KCShUaGlzIGNyZWF0ZXMgYSBsb3Qgb2Ygd2FybmluZ3MgYXQgbGlicmFyeS1jb21waWxlIHRpbWUsIGJ1dCBsZXNzCgl3YXJuaW5ncyBhdCBhcHAtY29tcGlsZSB0aW1lLiAgSSdsbCByZW1vdmUgdGhlIHdhcm5pbmdzIHNvb24uKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgcGFyYW1ldGVyIG1pc21hdGNoIGluIGNhbGwgdG8gTElCUkVTX0ZpbmRSZXNvdXJjZSgpLiAgQ2hhbmdlZAoJdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIExJQlJFU18qIEFQSSBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJRGVsZXRlZCBsb2NhbCAnaScgZnJvbSB3aW5fZmF1bHQoKSwgc2luY2UgaXQgd2FzIHVudXNlZC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJTWlycm9yZWQgY2hhbmdlcyB0byBpbmNsdWRlL3dpbmRvd3MuaCBtZW50aW9uZWQgYWJvdmUuCgoJKiBbdG9vbGtpdC9oZWxsbzMuY10KCUNoYW5nZWQgTG9hZE1lbnVJbmRpcmVjdCgpIGNhbGwgdG8gTG9hZE1lbnUoKSB0byB0ZXN0IHRoZSBuZXcKCXJlc291cmNlIHJlZ2lzdHJhdGlvbiB0ZWNobmlxdWUuCgoJKiBbdG9vbGtpdC9saWJyZXMuY10KCVJlbW92ZWQgZGVmaW5pdGlvbiBvZiAnc3RydWN0IHJlc291cmNlJyBhbmQgZml4ZWQgYnVncyBpbiB0aGUgcmVzb3VyY2UKCWltcGxlbWVudGF0aW9uLiAgSW1wbGVtZW50ZWQgTElCUkVTX0ZpbmRSZXNvdXJjZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglNaXJyb3JlZCBjaGFuZ2VzIHRvIGluY2x1ZGUvd2luZG93cy5oIG1lbnRpb25lZCBhYm92ZS4KClRodSBEZWMgIDcgMjM6MTU6NTYgMTk5NSAgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglMT0NBTF9IZWFwRXhpc3RzOiBDaGFuZ2VkIHBhcmFtZXRlciB0byBIQU5ETEUuIEZvciBXaW5lTGliLCByZXR1cm4gdHJ1ZQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNyZWF0ZUxpc3RCb3hTdHJ1Y3Q6IEluaXRpYWxpemUgSGVhcFNlbCB0byAwIGZvciBXaW5lTGliCgoJKiBbaW5jbHVkZS9saXN0Ym94LmhdCgljaGFuZ2UgSGVhcFNlbCBmcm9tIFdPUkQgdG8gSEFORExFCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXVtyYy93aW5lcmMuY10KCXN0cnVjdCBSZXNvdXJjZVRhYmxlOiByZW1vdmVkCglzdHJ1Y3QgcmVzb3VyY2U6IG1vdmVkIHRvIGhlYWRlciBmaWxlCglhdXRvcmVnaXN0ZXIgcmVzb3VyY2VzIGlmIHN1cHBvcnRlZCBieSBjb21waWxlcgoKCSogW21lbW9yeS9sb2NhbC5oXQoJTE9DQUxfR2V0SGVhcDogZXhwZWN0IEhBTkRMRSByYXRoZXIgdGhhbiBXT1JECgkKCSogW3Rvb2xraXQvTWFrZWZpbGUuaW5dCglBZGQgQUxMQ0ZMQUdTIHRvIG1ha2UgaGVsbG8zCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglMb2NhbEZyZWUsIEhFQVBfRnJlZTogaGFuZGxlIDAgcGFyYW1ldGVyIGdyYWNlZnVsbHkKCldlZCBEZWMgMDYgMTU6MzQ6MjMgMTk5NSAgR3JlZyBDb29wZXIgPGNvb3BlckBpbWEtaW5jLmNvbT4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJRml4ZWQgdGhlIG1zZ3NuZCBhbmQgbXNncmN2IGVycm9ycyB0aGF0IHdpbnNvY2sgcHJvZ3JhbXMgZ2V0LgoKV2VkIERlYyAwNiAxMjo0NzoyMyBNRVQgMTk5NSBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BkbnMudWZzaWEuYWMuYmU+CgkKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUZpeGVkIF9ocmVhZCBhbmQgX2h3cml0ZSByZXR1cm4gdHlwZQoKCSogW2lmMTYzMi9yZWxheTMyLmNdIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUhhY2tlZCBsb2FkaW5nIG9mIFBFLWRsbCdzIGluCgoJKiBbd2luMzIvYWR2YXBpLmNdCglBZGRlZCBzdHVicyBmb3IgUmVnQ3JlYXRlS2V5RXgsIFJlZ1NldFZhbHVlRXgsIFJlZ1F1ZXJ5VmFsdWVFeAoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIHN0dWJzIGZvciBPcGVuRmlsZU1hcHBpbmcsIENyZWF0ZUZpbGVNYXBwaW5nLCBNYXBWaWV3T2ZGaWxlRXgKCgkqIFt3aW4zMi9wcm9jZXNzLmNdCglBZGRlZCBzdHVicyBmb3IgQ3JlYXRlTXV0ZXhBLCBSZWxlYXNlTXV0ZXgsIENyZWF0ZUV2ZW50QSwKCVdhaXRGb3JTaW5nbGVPYmplY3QsIER1cGxpY2F0ZUhhbmRsZSwgR2V0Q3VycmVudFByb2Nlc3MKCQpNb24gRGVjIDA0IDEzOjA2OjM3IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmUuaF0gW21pc2MvbHN0ci5jXQoJRGVmaW5lIHdpbmVfc3RybmNweSgpLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBhZCB0aGUgYnVmZmVyIHdpdGggCgl6ZXJvZXMgbGlrZSBHTlUgc3RybmNweSgpLCB3aGljaCBtaWdodCBicmVhayBzb21lIFdpbmRvd3MgcHJvZ3JhbXMKCXRoYXQgcGFzcyBib2d1cyBzaXplIGFyZ3VtZW50cy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdOiBHZXRNb2R1bGVGaWxlTmFtZSgpLAoJW21pc2MvY29tbWRsZy5jXTogR2V0RmlsZVRpdGxlKCksCglbbWlzYy9rZXlib2FyZC5jXSwgW21pc2MvbHN0ci5jXTogbHN0cmNweW4oKSwKCVttaXNjL29sZTJubHMuY10sIFttaXNjL3Byb2ZpbGUuY10sIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXSwKCVttdWx0aW1lZGlhL21tc3lzdGVtLmNdLCBbb2JqZWN0cy9mb250LmNdOgoJVXNlIHdpbmVfc3RybmNweSgpIHdoZXJlIHN0cmluZ3MgYXJlIHJldHVybmVkIHRvIFdpbmRvd3MgcHJvZ3JhbXMuCgkKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCVBsYXlNZXRhZmlsZSgpOiBDbGVhciB0aGUgaGFuZGxlIHRhYmxlIGJlZm9yZSB1c2luZyBpdC4KCgkqIFttaXNjL3NoZWxsLmNdIFttaXNjL21haW4uY10KCVJlbmFtZSBTSEVMTF9SZWdDaGVja0ZvclJvb3QoKSB0byBTSEVMTF9Jbml0KCkgYW5kIGNhbGwgaXQgZnJvbSBtYWluKCkuCgkKCSogW21pc2MvcHJvZmlsZS5jXQoJbG9hZCgpOiBOZWVkIHRvIGhhbmRsZSBjb21tZW50cy4KCQoJKiBbdG9vbGtpdC9saWJyZXMuY10KCU1ha2UgaXQgY29tcGlsZS4KCQoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBNQUtFX1NFR1BUUiBtYWNybyBpbiB0d28gcGxhY2VzIHdoZXJlIGEgdXNlciBoZWFwIGJsb2NrIHVzZWQKCXRvIGJlIGFsbG9jYXRlZCBpbnN0ZWFkLgoKU2F0IERlYyAwMiAxNjo0Mzo0MyAxOTk1IFJhbW9uIEdhcmNpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW4gZnVuY3Rpb24gU2V0V2luZG93UG9zOiBkbyBub3QgcmVkcmF3IHRoZSBwYXJlbnQgb2YKCWEgd2luZG93IGlmIHRoZSBzcGVjaWZpZWQgd2luZG93IGlzIHBsYWNlZCBvbiB0aGUgdG9wLgoJVGhpcyBhdm9pZHMgdGhhdCBTaG93V2luZG93KGh3bmQsMSkgaGlkZXMgaHduZCBpbnN0ZWFkCglvZiBzaG93aW5nIGl0LgoKU2F0IERlYyAwMiAxMTowMDowMCAxOTk1IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglOb3cgaXQgY2FuIHNjcm9sbCBjaGlsZHJlbiBhbG9uZyB3aXRoIHRoZSBjbGllbnQgcmVnaW9uIG9mIHBhcmVudCAKICAgICAgICB3aW5kb3cuIFRyaWVkIHRvIG9wdGltaXplIHVwZGF0ZSByZWdpb24gY2FsY3VsYXRpb24uIAoKCSogW3dpbmRvd3MvbWRpLmNdCglTY3JvbGxDaGlsZHJlbiBmdW5jdGlvbiwgbW9yZSBvdGhlciBmZWF0dXJlcyBhZGRlZC4gQmFzaWNhbGx5CglhIHJld3JpdGUuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvZm9jdXMuY10KCVJlaW1wbGVtZW50ZWQgd2luZG93IGFjdGl2YXRpb24gYW5kIGZvY3VzIGhhbmRsaW5nLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCBuZXcgZmxhZyBXSU5fTkNBQ1RJVkFURUQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFtsb2FkZXIvdGFzay5jXQoJU21hbGwgY2hhbmdlcyAodG8gbWFpbnRhaW4gbGlua2VkIGxpc3Qgb2YgbWVzc2FnZSBxdWV1ZXMpLgoKV2VkIE5vdiAyOSAxNTo1MTo0OCAxOTk1ICBEYW5pZWwgU2NoZXBsZXIgIDxkYW5pZWxAc2hlcDEzLnd1c3RsLmVkdT4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXSBbd2luZG93cy9kZWZ3bmQuY10KCSAgW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbV2luZS5tYW5dCglJbXBsZW1lbnRlZCBhIC1tYW5hZ2VkIG9wdGlvbiB0byByZXBsYWNlIHRoZSBzdGFuZGFyZCBXaW5kb3dzCglmcmFtZSBvZiB0b3AtbGV2ZWwgd2luZG93cyB3aXRoIHRoZSB3aW5kb3cgbWFuYWdlcidzIGRlY29yYXRpb25zLgoJSWYgYSB0b3AtbGV2ZWwgd2luZG93IG1ha2VzIGl0cyBvd24gZnJhbWUsIHRoaXMgd2lsbCBzdGlsbCBzaG93Cgl1cCwgaW5zaWRlIHRoZSB3aW5kb3cgbWFuYWdlciBkZWNvcmF0aW9ucyAoSSBiZWxpZXZlIGN0bDNkdjIuZGxsCgl3b3VsZCBkbyB0aGlzLCBhbHRob3VnaCBJIGNhbid0IHRlc3QgdGhpcykuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBOb3YgMjEgMTg6NDk6MTAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0gW01ha2VmaWxlXSBbbWlzYy9kb3NfZnMuY10KCUdvdCByaWQgb2YgYXV0b2NvbmYuaCBmaWxlLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJTW9yZSBsb2dpY2FsIGJlaGF2aW9yIHVwb24gc3ludGF4IGVycm9ycy4KCgkqIFtpbmNsdWRlL2hvb2suaF0gW3dpbmRvd3MvaG9vay5jXQoJQ2hhbmdlZCBob29rIHN0cnVjdHVyZSBhbmQgcmV3cm90ZSBtb3N0IG9mIHRoZSBob29rIGZ1bmN0aW9ucyBmb3IKCWJldHRlciBjb21wYXRpYmlsaXR5LCBiYXNlZCBvbiBpbnZlc3RpZ2F0aW9ucyBieSBBbGV4IEtvcm9ia2EuCgoJKiBbaW5jbHVkZS9tZXNzYWdlLmhdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGhvb2tzIHRvIG1lc3NhZ2UgcXVldWUgc3RydWN0dXJlIGFuZCBtYWRlIHRoZSBzdHJ1Y3R1cmUKCWxheW91dCBXaW5kb3dzLWNvbXBhdGlibGUuCglBZGRlZCBzdXBwb3J0IGZvciBXSF9NT1VTRSwgV0hfS0VZQk9BUkQsIFdIX0hBUkRXQVJFIGFuZAoJV0hfSk9VUk5BTFJFQ09SRCBob29rcy4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gZm9yIGNoYW5naW5nIHRoZSBsYW5ndWFnZSBhdCBydW4tdGltZQogCShub3QgaW1wbGVtZW50ZWQgeWV0KSwgYmFzZWQgb24gYSBzdWdnZXN0aW9uIGZyb20gTWljaGFlbCBQYXRyYS4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUZpeGVkIHNpbGx5IFNFR1BUUiBidWcgaW4gRHVtcEljb24oKS4KCk1vbiBOb3YgMjAgMjI6MjI6MjIgMTk5NSAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXSBbY29udHJvbHMvY29tYm8uY10gW2luY2x1ZGUvbGlzdGJveC5oXQoJUGFydGlhbCBpbXBsZW1lbnRhaW9uIG9mIExCU19FWFRFTkRFRFNFTCBzdHlsZSwKCXlldCBtb3JlIHVwZGF0ZXMgZm9yIGRyYWcgJiBkcm9wIHN1cHBvcnQuIE5vdyB3b3Jrcy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJTW9yZSBtZXNzYWdlIGhhbmRsZXJzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglEcmFnT2JqZWN0LCBEcmFnRGV0ZWN0LCBBbnlQb3B1cCBmdW5jdGlvbnMuIAoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1vcmUga2x1ZGd5IGZpeGVzIChXTV8uLi5UT0lURU0sIGV0Yy4pLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUljb25Ub0N1cnNvciBza2VsZXRvbiwgcGF0Y2ggZm9yIE9CTV9Mb2FkQ3Vyc29ySWNvbiB0byBoYW5kbGUgbmV3CgljdXJzb3IuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29jcipdCglOZXcgT0VNIGN1cnNvcnMuCgpNb24gTm92IDIwIDExOjA1OjIwIEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJU3dhcHBlZCBmbGFncyBhbmQgc2l6ZSBhcmd1bWVudHMgdG8gTG9jYWxSZWFsbG9jIGFzIHBlciBjaGFuZ2VzIGluCgltZW1vcnkvbG9jYWwuYyBieSBXaWxsaWFtIE1hZ3JvIGluIHByZXZpb3VzIHJlbGVhc2UuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJUmVpbnN0YXRlZCB0aGUgI2RlZmluZSdzIGZvciAnbWluJyBhbmQgJ21heCcsIHNpbmNlIHRoZXkncmUgcGFydCBvZgoJdGhlIFdpbmRvd3MgQVBJLiAgSSByZWFsbHkgZG9uJ3QgdGhpbmsgaXQncyBhIHdpc2UgaWRlYSwgc28gSSBwdXQKCWEgJyNpZm5kZWYgRE9OVF9ERUZJTkVfbWluX0FORF9tYXgnIGFyb3VuZCB0aGVtLiAgSSB0aGluayB0aGUgYWN0dWFsCglXSU5FIGNvZGUgc2hvdWxkIG5ldmVyIHVzZSB0aGVzZSAoaXQgc2hvdWxkIHVzZSAnTUlOJyBhbmQgJ01BWCcKCWluc3RlYWQpLgoKCSogW2xvYWRlci8qXQoJUHV0ICcjaWZuZGVmIFdJTkVMSUInIGFyb3VuZCBtYW55IHRoaW5ncyB0aGF0IFdJTkVsaWIgc2hvdWxkIG5vdCBuZWVkLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVRvb2sgb3V0IG1hbnkgJyNpZiBkZWZpbmVkKFdJTkVMSUIpJyBzZWN0aW9ucyB3aXRoIHRoZSBhc3NvY2lhdGVkCgljb21tZW50ICd0ZW1wb3JhcnkgZml4LCB1bnRpbCBMb2NhbCBtZW1vcnkgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkIGluCglXSU5FTElCJywgc2luY2UgdGhlIGVmZmVjdGl2ZSB0cmFuc2xhdGlvbnMgYXJlIG5vdyBpbiAKCXRvb2xraXQvbWlzY3N0dWJzLmMuCglUb29rIG91dCB0aGUgI2lmbmRlZidzIEkgcHV0IGluIEVESVRfQ2xlYXJUZXh0LiAgV2hvZXZlciBtb2RpZmllZCB0aGlzCglmaWxlIGZpeGVkIChvciBhdCBsZWFzdCBwb3N0cG9uZWQpIHRoZSBidWcgSSBoYWQgZW5jb3VudGVyZWQuCgoJKiBbbG9hZGVyL3Rhc2suY10KCVB1dCBhbiAjaWZkZWYgaW4gVEFTS19DcmVhdGVUYXNrKCkgdGhhdCBoYXJkd2lyZXMgdGhlIGN1cnJlbnQgZHJpdmUgdG8KCUM6ICBUaGlzIHdpbGwgcHJvYmFibHkgY2F1c2UgYSBsb3Qgb2YgdHJvdWJsZSBpZiB0aGlzIGNoYW5nZSBpcwoJZm9yZ290dGVuIGluIHRoZSBmdXR1cmUsIGJ1dCBpdCB3aWxsIGxldCB0aGluZ3MgbGlrZSB0aGUgT3BlbkZpbGVOYW1lCglkaWFsb2cgd29yayBmb3Igbm93LgoKCSogW3Rvb2xraXQvbGlicmVzLmNdIFt0b29sa2l0L01ha2VmaWxlLmluXSBbdG9vbGtpdC9NYWtlZmlsZV0KCSAgW2luY2x1ZGUvbGlicmVzLmhdCglNYWRlIG5ldyBsaWJyZXMuYyBmaWxlLCB3aGljaCB3aWxsIGNvbnRhaW4gZnVuY3Rpb25zIGZvciBzdXBwb3J0aW5nCglhY2Nlc3NpbmcgcmVzb3VyY2VzIGJ5IG5hbWUgaW4gV0lORWxpYi4gICd3aW5lcmMnIHdpbGwgbmVlZCB0byBiZQoJY2hhbmdlZC4KCgkqIFt0b29sa2l0L2hlYXAuY10KCVJlZmluZWQgbWVtb3J5IHJvdXRpbmVzIHRvIGFsbG93IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIExvY2FsQWxsb2MKCWFuZCBHbG9iYWxBbGxvYyBhbmQgYmV0d2VlbiBMb2NhbFNpemUgYW5kIEdsb2JhbFNpemUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCURlZmluZWQgdGhlIEdldEN1cnJlbnRUaW1lIHJvdXRpbmUgaW4gd2luZG93cy9tZXNzYWdlLmMsIGFuZCByZW1vdmVkCgl0aGUgI2RlZmluZSBpbiB3aW5kb3dzLmguCgpNb24gTm92IDIwIDAwOjM2OjQyIE1FVCAxOTk1IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGRucy51ZnNpYS5hYy5iZT4KCgkqIFsqLypdCglBZGRlZCBuZXcgZGVidWdnaW5nIHR5cGUgREVCVUdfV0lOMzIgYW5kIERFQlVHX0VOVi4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCB1bmRvY3VtZW50ZWQgR2V0RXhwV2luVmVyLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglQcmV2aW91cyBjb2RlIGRpZG4ndCBwb3AgcG9zc2libHkgY2hhbmdlZCAlZXNpLCAlZWRpIGFuZCAlZWR4Cglmcm9tIHRoZSBzdGFjay4KCQoJKiBbd2luMzIvYWR2YXBpLmNdCglBZGRlZCBHZXRVc2VyTmFtZUEuCgoJKiBbd2luMzIvY29kZV9wYWdlLmNdCglBZGRlZCBzdHViIGZvciBNdWx0aUJ5dGVUb1dpZGVDaGFyLgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUFkZGVkIFNldENvbnNvbGVDdHJsSGFuZGxlciBzdHViLgoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIFJlYWRGaWxlIENyZWF0ZUZpbGVBIEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlIHN0dWJzLgoJQWRkZWQgQ2xvc2VIYW5kbGUuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglDaGFuZ2VkIFZpcnR1YWxBbGxvYyBhbmQgVmlydHVhbEZyZWUuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXQoJQWRkZWQgRXhpdFByb2Nlc3MuCgpTdW4gTm92IDE5IDE3OjU0OjQyIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIGEgZmV3IGJyb2tlbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaW5kUmVzb3VyY2UoKTogTmVlZCB0byBjaGVjayBmb3IgJyN4eHgnIHN0cmluZ3MgaGVyZS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglGaW5kTmV4dCgpOiBSZXR1cm4gTVMtRE9TIGZpbGVuYW1lcyB1cHBlcmNhc2UuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglDcmVhdGVJY29uKCksIENyZWF0ZUN1cnNvcigpOiBBZGRlZCBtaXNzaW5nIGVsZW1lbnQgdG8gQ1VSU09SSUNPTklORk8KCWluaXRpYWxpemVycy4KCQoJKiBbbWlzYy9maWxlLmNdCglfbG9wZW4oKTogRmlsZXMgb3BlbmVkIGluIE9GX1dSSVRFIG1vZGUgYXJlIHRydW5jYXRlZC4KCU9wZW5GaWxlKCk6IElnbm9yZSBPRl9SRUFEL09GX1dSSVRFL09GX1JFQURXUklURSB3aGVuIGZpbGVzIGFyZQoJY3JlYXRlZDsgdXNlIHJlYWQvd3JpdGUgbW9kZS4KCQoJKiBbbWlzYy9wcm9maWxlLmNdCglsb2FkKCk6IFJld3JpdHRlbi4KCQoJKiBbbWlzYy9jb21tZGxnLmNdCglGaXhlZCBiYWQgY2FsbCB0byBzdHJuY3B5KCkgdGhhdCBzbWFzaGVkIHRoZSBzdGFjay4KCgkqIFtjb250cm9scy9jb21iby5jXSBbd2luZG93cy93aW5wb3MuY10gW21lbW9yeS9zZWxlY3Rvci5jXQoJT3BlcmF0b3IgcHJlY2VkZW5jZSBmaXhlcy4gUGVvcGxlIHdobyB1c2UgZ2NjIDIuNy4xIGRvbid0IG5lZWQgYQoJZGVidWdnZXIgOi0pCgkKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJQWRkIFJlc2l6ZVBhbGV0dGUoKSBhbmQgQW5pbWF0ZVBhbGV0dGUoKSBzdHVicy4gVGhleSBkb24ndCBkbyBhbnl0aGluZywKCWJ1dCBzb21ldGltZXMgdGhhdCdzIGdvb2QgZW5vdWdoLgoKRnJpIE5vdiAxNyAwOToxMDozNSBHTVQgMTk5NSAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbaW5jbHVkZS93aW5lLmhdIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbaW5jbHVkZS93aW5zb2NrLmhdCiAgICAgICAgQWRkZWQgZGVmaW5pdGlvbnMgZm9yIFVuaXh3YXJlLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2MvY29tbS5jXSBbbWlzYy93aW5zb2NrZXQuY10KCU1pc2MuIGZpeGVzIGZvciBVbml4d2FyZS4KCgkqIFtsb2FkZXIvdGFzay5jXQogICAgICAgIE1hZGUgYXNzaWduZW10cyB0byBjb250ZXh0IGluIEluaXRUYXNrIGZvciByZWdpc3RlcnMgdXNlIHRoZSBtYWNyb3MKICAgICAgICBmcm9tIHJlZ2lzdGVycy5oIHRvIG1ha2UgdGhlbSBtb3JlIHBvcnRhYmxlLiAoTmVlZGVkIGZvciBVbml4d2FyZSkKCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgcmVnaXN0ZXIgYWNjZXMgcm91dGluZXMgdG8gd29yayBvbiBVbml4d2FyZS4gQml0IGdydWJieSBidXQKIAlpdCBzZWVtcyB0byB3b3JrLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfV01fTkNDcmVhdGUgYWxsb2NhdGVzIGxvY2FsIGhlYXAgaWYgaGFzbid0IGJlZW4gcHJldmlvdXNseQoJYWxsb2NhdGVkLgoJCgkqIFttaXNjZW11L2ludDIxLmNdCglta2RpciBub3cgY3JlYXRlcyBkaXJlY3Rvcnkgd2l0aCBwZXJtaXNzaW9uIHRvIGFjY2VzcyBpdC4KCgkqIFttaXNjL2Rvc19mcy5jXQoJbWtkaXIgbm93IGNyZWF0ZXMgZGlyZWN0b3J5IHdpdGggcGVybWlzc2lvbiB0byBhY2Nlc3MgaXQuCglET1Nfb3BlbmRpciBub3cgdXNlcyBsaW5rZWQgbGlzdCBvZiBkaXJlbnRzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggCglyZWFsbG9jIGNoYW5naW5nIGFkZHJlc3Mgb2YgbWFsbG9jZWQgbWVtb3J5LgoKVGh1IE5vdiAxNiAxMjo0NzoxMyAxOTk1ICBNaWNoYWVsIFBhdHJhICA8cGF0cmFAaXRwMS5QaHlzaWsuVFUtQmVybGluLkRFPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1FTlVfQ2FsY0l0ZW1TaXplKCk6IEZpeGVkIGhhbmRsaW5nIG9mIGVtcHR5IG1lbnUgaXRlbXMuCgpTYXQgTm92IDExIDIxOjQ2OjU0IDE5OTUgIEhhbnMgZGUgR3JhYWZmICA8Z3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW21pc2MvZmlsZS5jXQoJSW4gT3BlbkZpbGUsIHVubGluayBzaG91bGQgYmUgZG9uZSBvbiB0aGUgdW5peCBmaWxlbmFtZS4KClNhdCBOb3YgMTEgMTY6NDM6MjkgMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFtpbmNsdWRlL2hhbmRsZTMyLmhdCiAgICAgICAgTmV3IGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgaW50ZXJuYWwgV2luMzIga2VybmVsIGhhbmRsZQogICAgICAgIGluZm9ybWF0aW9uLgoKICAgICAgICAqIFt3aW4zMi9maWxlLmNdCiAgICAgICAgQWRkZWQgUmVhZEZpbGUsIENyZWF0ZUZpbGUsIGFuZCBDbG9zZUZpbGVIYW5kbGUsIGFuZCBkaWQKICAgICAgICBzb21lIHJlb3JnYW5pemluZyB0byBtYXRjaCB0aGUgbmV3IGhhbmRsZSBhbGxvY2F0aW9uIHNjaGVtZS4KCiAgICAgICAgKiBbd2luMzIvaW5pdC5jXQogICAgICAgIEFkZGVkIENsb3NlSGFuZGxlIGFuZCB0aGUgY3JlYXRpb24gb2Ygc3RhbmRhcmQgSS9PIGhhbmRsZXMuCgogICAgICAgICogW3dpbjMyL29iamVjdF9tZ3QuY10KICAgICAgICBOZXcgbW9kdWxlIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIFdpbjMyIGtlcm5lbCBoYW5kbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgTm92ICAzIDIwOjA4OjE3IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dCglBdHRlbXB0IHRvIGNoZWNrIGZvciAtbGkzODYgb24gTmV0QlNELiBQbGVhc2UgdGVzdCB0aGlzLgoKTW9uIE9jdCAzMCAxMjo0MDozMiBFU1QgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFsqLypdCglFbGltaW5hdGVkIHZhcmlvdXMgd2FybmluZ3Mgd2l0aCBlaXRoZXIgZXhwbGljaXQgY2FzdHMgb3IgbW9yZQoJYWNjdXJhdGUgdmFyaWFibGUvcGFyYW1ldGVyIGRlY2xhcmF0aW9ucyAoZS5nLiBJTlQgaW5zdGVhZCBvZiBzaG9ydAoJb3IgV09SRCkuCglDaGFuZ2VkIG1hY3JvcyAnbWluJyBhbmQgJ21heCcgdG8gJ01JTicgYW5kICdNQVgnLCBzaW5jZSB0aGV5J3JlCgltYWNyb3MuCgoJKiBbY29udHJvbHMvZWRpdC5jXSBbd2luZG93cy9kZWZkbGcuY10KCUFkZGVkICcjaWZkZWYgU1VQRVJGTFVPVVNfRlVOQ1RJT05TJyB3cmFwcGVycyBhcm91bmQgZnVuY3Rpb24KCWRlZmluaXRpb24gb2YgRURJVF9LZXlWU2Nyb2xsRG9jLCBFRElUX1RleHRMaW5lTnVtYmVyLCBhbmQKCURFRkRMR19GaW5kRGVmQnV0dG9uIHRvIGF2b2lkIHdhcm5pbmdzLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvc2Nyb2xsLmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJICBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ29udmVydGVkIE1BS0VQT0lOVCBtYWNybyBjYWxsIHRvIG1hbnVhbCBjb252ZXJzaW9uLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRm9yIFdJTkVMSUIzMiwgc3RydWN0dXJlcyBQT0lOVCwgU0laRSwgYW5kIFJFQ1QgaGF2ZSBMT05HIG1lbWJlcnMKCWluc3RlYWQgb2YgSU5ULiAgVGhpcyBhbHNvIGludmFsaWRhdGVzIHRoZSBtYWNybyBNQUtFUE9JTlQoKSwgd2hpY2gKCWlzIG5vdCBzdXBwb3J0ZWQgaW4gV2luMzIuICBBbHNvIGRlZmluZWQgdGhlIFBPSU5UUyBzdHJ1Y3R1cmUgKFNIT1JUCgltZW1iZXJzKSBhbmQgdGhlIE1BS0VQT0lOVFMgbWFjcm8uCgoJKiBbbWlzYy9jb21tZGxnLmNdCglDaGFuZ2VkIGEgbG90IG9mICdzdHJjcHknIGNhbGxzIHRvICdzdHJuY3B5JyBjYWxscy4gIEknbSBkZXNwZXJhdGUgdG8KCWZpbmQgdGhpcyBtZW1vcnkgYnVnLCBhbmQgdGhpcyBzaG91bGQgYmUgZG9uZSBhbnl3YXkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJV2VsbCwgdGhlIGFsdGVyYXRpb24gbWVudGlvbmVkIGFib3ZlIGRpZG4ndCBkbyBpdCwgYnV0ICNpZmRlZidpbmcgb3V0CglhIGZldyBsaW5lcyBpbiBFRElUX0NsZWFyVGV4dCBkaWQuICBUaGlzIGxlYWRzIHRvIGJ1Z3MsIGJ1dCBmb3Igbm93LAoJaXQncyBiZXR0ZXIgdGhhbiBiaXp6YXJlIG1lbW9yeSB0cm91Ymxlcy4KCgkqIFt0b29sa2l0L21pc2NzdHVicy5jXQoJUmVtb3ZlZCB3YXJuaW5nIG1lc3NhZ2VzIGluIEdMT0JBTF9DcmVhdGVCbG9jaygpLCBHTE9CQUxfRnJlZUJsb2NrKCksCglhbmQgUkVMQVkzMl9HZXRFbnRyeVBvaW50KCkuICBUaGVzZSBhcmUgdGhlIG1vc3QgcG9wdWxhciB3YXJuaW5ncywgYW5kCgl0aGVpciBjdXJyZW50IGltcGxlbWVudGF0aW9uIHNlZW1zIGZpbmUuCgpTYXQgT2N0IDI4IDA5OjM5OjE4IDE5OTUgIEpvY2hlbiBLYXJyZXIgPGNpcDMwN0B3cGF4MDEuUGh5c2lrLlVuaS1XdWVyemJ1cmcuREU+CgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglGaXggZm9yICJicm9rZW4iIFggc2VydmVycyB0aGF0IGludmVydCBtYXNrZWQgY3Vyc29yIGNvbG9ycy4KCkZyaSBPY3QgMjcgMTk6Mjc6MjEgMTk5NSAgQWxleCBLb3JvYmthICA8YWxleEBwaG02LnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglSZW1vdmUgdW5uZWNlc3NhcnkgaXRlbXMgZnJvbSB0aGUgc3lzdGVtIG1lbnUuCgpUaHUgT2N0IDI2IDA1OjAzOjAzIE1FVCAxOTk1ICBQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdCglNYWtlIEdldE5lYXJlc3RDb2xvciByZXR1cm4gYSBSR0IgdmFsdWUgaW5zdGVhZCBvZiBhIHBpeGVsIHZhbHVlLgoKV2VkIE9jdCAyNSAyMzozMzozOSAxOTk1ICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXVtjb250cm9scy9tZW51LmNdW2luY2x1ZGUvbWVudS5oXQoJQ2hhbmdlZCBXT1JEIHBhcmFtZXRlcnMgdG8gVUlOVCBwYXJhbWV0ZXJzLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCU1hZGUgVUlOVCAzMmJpdCBmb3IgV0lORUxJQi4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJRGlzYWJsZWQgUkVMQVkzMl9Jbml0IGFuZCBNT0RVTEVfSW5pdCBmb3IgV0lORUxJQi4KCgkqIFttaXNjL21haW4uY10KCUFzc3VtZSBDUFUzODYgZm9yIFdJTkVMSUIuCgoJKiBbcmMvd2luZXJjXQoJYWRkX3BvcHVwOiBzZXQgTUZfUE9QVVAgZmxhZyBvbiBtZW51IGl0ZW0uCgoJKiBbdG9vbGtpdC9NYWtlZmlsZS5pbl1bdG9vbGtpdC9oZWxsbzMuY11bdG9vbGtpdC9oZWxsbzNyZXMuY10KCUFkZCByZXNvdXJjZSBkZW1vIGhlbGxvMyBmb3IgV0lORUxJQi4KCU5ldyBmaWxlIFJFQURNRS5yZXNvdXJjZXMuCgoJKiBbdG9vbGtpdC9taXNjc3R1YnMuY10KCUFkZCBhIGNhc2UgZm9yIDE3LgoKVHVlIE9jdCAxNyAxNToxMzoxMCBJU1QgMTk5NSAgSXRhaSBOYWhzaG9uIDxuYWhzaG9uQHZuZXQuaWJtLmNvbT4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglEbyBub3QgYXBwZW5kIC5leGUgaWYgdGhlIGZpbGUgbmFtZSBhbHJlYWR5IGhhcyBhbiBleHRlbnNpb24uCgoJKiBbbWlzYy9wcm9maWxlLmNdCglBdm9pZCBjcmVhdGluZyBhIGZpbGUgd2l0aCBhIGp1bmsgbmFtZSBpZiBhIC5pbmkgZmlsZSBkb2VzIG5vdAoJZXhpc3QuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi9kdW1teS5jXQoJQWRkZWQgYSBsb3Qgb2YgZHVtbXkgc3R1YnMgZm9yIFdpbmRvd3MgSGVicmV3IHZlcnNpb24uCgpUdWUgT2N0IDE3IDAxOjAzOjI0IDE5OTUgV2lsbGlhbSBNYWdybyA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4IGZvciBidXR0b25zIHdpdGggbm8gbGFiZWwuCgoJKiBbY29udHJvbHMvY29tYm8uY11bY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZXMgZm9yIHNjcm9sbGJhciBwb3NpdGlvbmluZy4gIE5vdyBkaXNhcHBlYXJzIGNvcnJlY3RseQoJZm9yIHNob3J0IGxpc3RzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBkaWZmZXJlbnRseSB3aGVuIGJ1aWxkaW5nIGFzIGxpYnJhcnkuCgoJKiBbY29udHJvbHMvc3RhdGljXQoJRG9uJ3QgZGVzdHJveSBvbGQgaWNvbiBiZWZvcmUgZHJhd2luZyBuZXcgaWNvbi4gKEZpeGVzIGxhbmRzY2FwZS8KCXBvcnRyYWl0IHRvZ2dsZSBpY29uIGluIHByaW50IGRpYWxvZy4pCgoJKiBbaWYxNjMyL2dkaS5zcGVjXQoJTmV3IGZ1bmN0aW9ucyBTZXRNZXRhRmlsZUJpdHMgYW5kIEdldE1ldGFGaWxlQml0cwoKCSogW2luY2x1ZGUvc3lzbWV0cmljcy5oXSBbd2luZG93cy9zeXNtZXRyaWNzLmNdCglBZGQgc3VwcG9ydCBmb3IgR2V0U3lzdGVtTWV0cmljcyhTTV9DTUVUUklDUykgPT0gU01fQ01FVFJJQ1MKCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU1FVEFfRVhUVEVYVE9VVCwgbm90IE1FVEFfU0VUVEVYVE9VVAoJZGVmaW5lIEdldEN1cnJlbnRUaW1lIGFzIEdldFRpY2tDb3VudCAoZm9yIHdpbmUgbGlicmFyeSkKCgkqIFtsb2FkZXIvbWFpbi5jXQoJRG9uJ3QgaW5pdGlhbGl6ZSBidWlsdC1pbiBtb2R1bGVzIGluIHdpbmUgbGlicmFyeQoKCSogW21lbW9yeS9sb2NhbC5jXQoJTG9jYWxSZUFsbG9jIHdhcyBkZWZpbmVkIGluY29ycmVjdGx5LiBTd2FwIGZsYWdzIGFuZCBzaXplIGFyZ3VtZW50cy4KCgkqIFttaXNjL21haW4uY10KCUFsd2F5cyByZXBvcnQgQ1BVVFlQRT00IHRvIHdpbmUgbGlicmFyeS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJUkxFOCBpbWFnZXMgd2VyZSBtaXNzaW5nIHRvcCBsaW5lIHdoZW4gZGVjb21wcmVzc2VkLgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCVNldE1ldGFGaWxlQml0cyBhbmQgR2V0TWV0YUZpbGVCaXRzIGltcGxlbWVudGVkLiAgV29ya3Mgd2hlbiBjYWxsZWQKCWZyb20gd2luaGVscC4gIE1vcmUgdGVzdGluZyBuZWVkZWQuICBWYXJpb3VzIG1lbW9yeSBsZWFrcyBwbHVnZ2VkLgoJVmFyaW91cyBvdGhlciBidWcgZml4ZXMuICBOZXcgbWV0YWZpbGUgb3BlcmF0aW9ucyBhZGRlZCBpbgoJUGxheU1ldGFGaWxlUmVjb3JkOiBDcmVhdGVQYWxldHRlLCBTZXRUZXh0QWxpZ24sIFNlbGVjdFBhbGV0dGUsCglTZXRNYXBwZXJGbGFncywgUmVhbGl6ZVBhbGV0dGUsIEV4dFRleHRPdXQsIEVzY2FwZS4gIFRlc3RpbmcgbmVlZGVkLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJTG9jYWxVbkxvY2sgY2hhbmdlZCB0byBMb2NhbFVubG9jawoKU3VuIE9jdCAxNSAyMTo1NTozMyAxOTk1ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgkKCSogW21pc2Mvd2luc29jay5jXSAKCVJldHVybiB0aGUgY29ycmVjdCBlcnJvciBudW1iZXIsIGZvciBob3N0IGxvb2t1cCBvcGVyYXRpb25zLgoJQWxzbywgY29ycmVjdCB0aGUgcHJvYmxlbSB3aXRoIHNlbmRfbWVzc2FnZS4KCkZyaSBPY3QgMTMgMTk6MDQ6MzUgMTk5NSAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtNYWtlZmlsZS5pbl0KCVVzaW5nIG5tJ3MgYnVpbHQtaW4gc29ydGluZy4KCgkqIFsqLyouY10KCVVzZSB4bWFsbG9jIGZvciBtYWxsb2MgYW5kIHhyZWFsbG9jIGZvciByZWFsbG9jIGluIGFsbCB1bmdhcmRlZAoJY2FzZXMuCgoJKiBbZGVidWdnZXIvZGJnLnldCglIYW5kbGUgQy1saWtlIGV4cHJlc3Npb25zLiAgQ2xlYW4tdXAuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCUxvdHMgb2YgbmV3IHRva2VucyBmb3IgZXhwcmVzc2lvbnMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJSW1wbGVtZW50ICJsaXN0IiBjb21tYW5kIGZvciBkaXNhc3NlbWJsaW5nLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJSW1wbGVtZW50IG1vcmUgRGFuaXNoIHN0dWZmLgoKRnJpIE9jdCAgNiAxMDozOTozOSAxOTk1IFJhbSdvbiBHYXJjJ2lhIDxyYW1vbkBpZTMuY2x1YnMuZXRzaXQudXBtLmVzPgoKCSogW2xvYWRlci9tb2R1bGUuY10KCVVwZGF0ZWQgc2VsZi1sb2FkaW5nIG1vZHVsZXMgdG8gc3VwcG9ydCBmb3IgbmV3IDMyIGJpdCAKCXN0YWNrIGZyYW1lcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAgMSAxNTo0ODozNCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYz4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBHZXRNZW51U3RyaW5nKCkgZm9yIG5vbi1zdHJpbmcgaXRlbXMuCgoJKiBbZGVidWdnZXIvKi5jXQoJRmlyc3QgYXR0ZW1wdCB0byBjaGVjayB2YWxpZGl0eSBvZiBwb2ludGVycyBiZWZvcmUgbWVtb3J5CglhY2Nlc3Nlcy4gRm9yIG5vdyBvbmx5IHNlZ21lbnRlZCBwb2ludGVycyBhcmUgY2hlY2tlZC4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW21lbW9yeS9sZHQuY10KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGR1bXAgb25seSBvbmUgc2VnbWVudCB3aXRoICdpbmZvIHNlZ21lbnQnLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vY3JfKl0KCUFkZGVkIGFsbCBPRU0gY3Vyc29ycyBhcyBYUE0gYml0bWFwcy4KCgkqIFtpbmNsdWRlL2N1cnNvcmljb24uaF0gW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJUmV3cm90ZSBhbGwgY3Vyc29yIGFuZCBpY29uIG1hbmFnZW1lbnQgdG8gdXNlIHRoZSBzYW1lIG1lbW9yeQogCWxheW91dCBhcyBXaW5kb3dzLCBhbmQgdG8gZmFjdG9yIGNvbW1vbiBjb2RlIGJldHdlZW4gaWNvbnMgYW5kCgljdXJzb3JzLiBJbXBsZW1lbnRlZCBpY29uIGRpcmVjdG9yeSBsb29rdXAgdG8gZmluZCB0aGUgYmVzdAoJbWF0Y2hpbmcgaWNvbiAoaS5lLiB0aGUgY29sb3Igb25lKS4KICAJSW1wbGVtZW50ZWQgQ29weUN1cnNvcigpIGFuZCBEdW1wSWNvbigpLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZvciBkaXNhYmxlZCBidWlsdC1pbiBtb2R1bGVzLCB3ZSBub3cgdHJ5IHRvIGxvYWQgdGhlIFdpbmRvd3MgRExMCglmaXJzdCwgYW5kIGlmIHRoaXMgZmFpbHMgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBidWlsdC1pbiBtb2R1bGUKCWFueXdheS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBHbG9iYWxIYW5kbGUoKSB0byByZXR1cm4gdGhlIGNvcnJlY3Qgc2VsZWN0b3IgaW4gdGhlIGhpZ2gKCXdvcmQgZXZlbiBpZiB3ZSBhcmUgcGFzc2VkIGEgaGFuZGxlIGluIHRoZSBmaXJzdCBwbGFjZS4KCgkqIFttaXNjZW11L2luc3RyLmNdCglUYWtlIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiB0aGUgb3BlcmFuZCBhbmQgb2YgdGhlIHN0YWNrIHNlZ21lbnQKCXdoZW4gaW5jcmVtZW50aW5nIHRoZSBzdGFjayBwb2ludGVyLgoJQXZvaWQgcmVmZXJlbmNpbmcgRlNfcmVnIGFuZCBHU19yZWcgb24gKkJTRC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWxsIERJQiBmdW5jdGlvbnMgbm93IGFjY2VwdCBhIEJJVE1BUENPUkVIRUFERVIgZm9ybWF0IGJpdG1hcC4KCU1vbm9jaHJvbWUgRElCcyBhcmUgY3JlYXRlZCBhcyBtb25vY2hyb21lIGJpdG1hcCBpZmYgdGhleSBhcmUKCWJsYWNrIGFuZCB3aGl0ZS4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgT0VNIGN1cnNvcnMsIGNoYW5nZWQgT0JNX0xvYWRJY29uIHRvIHVzZSB0aGUgbmV3CglpY29uIG1lbW9yeSBsYXlvdXQuCgoJKiBbcmMvc3lzcmVzX0ZyLnJjXQoJQWRkZWQgRnJlbmNoIFtGcl0gbGFuZ3VhZ2Ugc3VwcG9ydC4KCgkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXQoJRml4ZWQgR2V0Q29tbWFuZExpbmVBKCkgdG8gdXNlIGN1cnJlbnQgUERCLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglTaW11bGF0ZSBhIG1vdXNlIG1vdGlvbiBldmVudCB1cG9uIFNldFdpbmRvd1BvcygpIHRvIGZvcmNlIHRoZQoJY3Vyc29yIHRvIGJlIHNldCBjb3JyZWN0bHkuCgpTYXQgU2VwIDMwIDE3OjQ5OjMyICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgoJKiBbd2luMzIvKl0KICAgICAgICBOZXcgV2luMzIga2VybmVsIGZ1bmN0aW9uczogR2V0QUNQLCBHZXRDUEluZm8sCiAJR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEsIEdldEZpbGVUeXBlLCBHZXRMYXN0RXJyb3IsIEdldE9FTUNQLAogCUdldFN0YXJ0dXBJbmZvQSwgR2V0VGltZVpvbmVJbmZvcm1hdGlvbiwgU2V0RW52aXJvbm1lbnRWYXJpYWJsZSwKIAlTZXRGaWxlUG9pbnRlciwgU2V0TGFzdEVycm9yLCBWaXJ0dWFsQWxsb2MsIFZpcnR1YWxGcmVlLAogCVdyaXRlRmlsZS4gIENvbXBsZXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgR2V0Q29tbWFuZExpbmVBLgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0KICAgICAgICBOZXcgZmlsZS4KCgkqIFtsb2FkZXIvbWFpbi5jXQogICAgICAgIENhbGwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIFdpbjMyIGRhdGEgKGRvZXNuJ3QgY3VycmVudGx5IGRvCiAJYW55dGhpbmcpLgoKCSogW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50ZWQgR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEsIFNldEVudmlyb25tZW50VmFyaWFibGVBLgoKU2F0IFNlcCAzMCAwMDoyNjo1NiAxOTk1ICBOaWVscyBkZSBDYXJwZW50aWVyICA8bmllbHNAY2luZHkuZXQudHVkZWxmdC5ubD4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXVttaXNjZW11L2VtdWxhdGUuY11bbG9hZGVyL21vZHVsZS5jXQoJICBbbWlzYy9jb21tZGxnLmNdCglNaXNjLiBidWcgZml4ZXMKCkZyaSBTZXAgMjkgMTY6MTY6MTMgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFsqLypdCglGb3IgV2luZWxpYiwgZXhwbGljaXQgY2FzdHMgaGF2ZSBiZWVuIHBsYWNlZCB3aGVyZSB3YXJuaW5ncyB3ZXJlCiAJdXN1YWxseSBnZW5lcmF0ZWQuCglwcmludGYgZm9ybWF0cyB3aGljaCBnaXZlIHRoZSBmb3JtYXQgZm9yIHByaW50aW5nIGEgaGFuZGxlIGFzCiAJIiUwNHgiIG9yIHNvbWV0aGluZyBzaW1pbGFyIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIHVzZSB0aGUgTlBGTVQKIAltYWNybyBkZWZpbmVkIGluIGluY2x1ZGUvd2ludHlwZXMuaC4gIFNvbWUgdGltZXMsIGV4cGxpY2l0IGNhc3RzCiAJd2VyZSBhbHNvIG5lY2Vzc2FyeS4KICAgICAJUGFyYW1ldGVyLCBmaWVsZCwgYW5kIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gbWFkZSBtb3JlCiAJZXhhY3QsIHN1Y2ggYXMgY29udmVydGluZyAnV09SRCB3UGFyYW0nIHRvICdXUEFSQU0gd1BhcmFtJyBvcgogCSdXT1JEIGhGb250JyB0byAnSEZPTlQgaEZvbnQnLgogICAgIAlBbnkgY2FsbCBvZiB0aGUgZm9ybSBHZXRXaW5kb3dXb3JkKGh3bmQsR1dXX0hJTlNUQU5DRSkgaGFzIGJlZW4KIAlyZXBsYWNlZCB3aXRoIGEgY2FsbCB0byBXSU5fR2V0V2luZG93SW5zdGFuY2UoaHduZCkuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFkZGVkIFdJTkVMSUIzMiBzdXBwb3J0IGluIENMQm94R2V0Q29tYm8oKS4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXQoJQ29tbWVudGVkIG91dCB0aGUgJyNpZm5kZWYgV0lORUxJQicgYXJvdW5kIHRoZSAnI3ByYWdtYSBwYWNrKDEpJy4KCXdpbmVsaWIgbmVlZHMgdGhlIHBhY2tpbmcgYXMgd2VsbCAoZS5nLiB3aGVuIGFjY2Vzc2luZyByZXNvdXJjZXMKCWxpa2Ugc3lzcmVzX0RJQUxPR19TSEVMTF9BQk9VVF9NU0dCT1gpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJR290IHJpZCBvZiB0aGUgRlthLWtdIG1hY3Jvcywgd2hpY2ggd2VyZSBjbHV0dGVyaW5nIHVwIHRoZSBnbG9iYWwKCW5hbWVzcGFjZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBXaW4zMiBtZXNzYWdlcyBXTV9DVExDT0xPUiouCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJUHV0IGluIHByZXByb2Nlc3NvciAnI2RlZmluZSBXSU5FTElCMzInIGlmIGFwcHJvcHJpYXRlIGFuZCBjaGFuZ2VkCgl0aGUgdHlwZXMgb2Ygc29tZSB0eXBlZGVmcyAoV1BBUkFNLCBIQU5ETEUpIGJhc2VkIG9uIHRoaXMuCgkKCSogW2xvYWRlci9tb2R1bGUuY10gW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglBZGRlZCAjaWZkZWYnZCBwb3J0aW9uIGluIExvYWRNb2R1bGUgdG8gaGFuZGxlIGxvYWRpbmcgYSBXSU5FbGliCgltb2R1bGUgKGFscmVhZHkgbG9hZGVkLCBqdXN0IGluaXQgdmFsdWVzKS4gICcjaWZkZWYnZWQgb3V0IHRoZQoJZGVmaW5pdGlvbiBmb3IgR2V0V25kUHJvY0VudHJ5MTYgYW5kIGFkZGVkIGEgbmV3IHZlcnNpb24gdG8KCXRvb2xraXQvbWlzY3N0dWJzLmMuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRqdXN0ZWQgdGhlIGxlbmd0aHMgb2YgQXBwTmFtZSBhbmQgQXBwTWlzYyBmcm9tIDUxMiw1MTIgdG8gMTI4LDkwNi4KCVNhbWUgYW1vdW50IG9mIHRvdGFsIHN0b3JhZ2UsIGJ1dCBtdWNoIG1vcmUgcmVhc29uYWJsZS4gIEFsc28sIGNoYW5nZWQKCWNhbGxzIHRvIHN0cmNweSgpIGluIFNoZWxsQWJvdXQoKSB0byBjYWxscyB0byBzdHJuY3B5KCkgaW5zdGVhZC4KCVRoaXMgd2FzIGEgZGlmZmljdWx0IGJ1ZyB0byB0cmFjayBkb3duLCBidXQgdGhlIEFwcE1pc2MgZmllbGQgd2FzCgliZWluZyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250cmlidXRlcnMgdGV4dCwgd2hpY2ggd2FzIG11Y2ggbGFyZ2VyCgl0aGFuIDUxMiBjaGFyYWN0ZXJzLgoKCSogW3Rvb2xraXQvYXRvbS5jXQoJTmV3IGZpbGUgZm9yIGF0b20taGFuZGxpbmcgZnVuY3Rpb25zLiAgQ29waWVkIGZyb20gbWVtb3J5L2F0b20uYyBhbmQKCXRoZW4gaGVhdmlseSBtb2RpZmllZC4gIFJpZ2h0IG5vdywgaXQncyBqdXN0IGEgbGlua2VkIGxpc3Qgb2YgYXRvbXMuCglDb25zaWRlciBpdCBhcyBhIGhhc2ggdGFibGUgd2l0aCBqdXN0IG9uZSBlbnRyeS4gIEl0J3MgZWFzaWx5IGNoYW5nZWQKCWxhdGVyLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJQ29tbWVudGVkIG91dCB0aGUgaGVhcCBmdW5jdGlvbnMgd2l0aCBhICIjaWZkZWYgV0lORUxJQjE2IiBhbmQgcHV0IGluCglhIFdpbjMyIHZlcnNpb24gKHdoaWNoIGlzIGJhc2ljYWxseSBhIG1vZGlmaWVkIGNvcHkpLgoKCSogW3Rvb2xraXQvc3VwLmNdIFt0b29sa2l0L21pc2NzdHVicy5jXQoJTW92ZWQgdGhlIHN0dWZmIEkgcHV0IGluIHRvb2xraXQvc3VwLmMgaW50byB0b29sa2l0L21pc2NzdHVicy5jIGFuZAoJYWRkZWQgcXVpdGUgYSBmZXcgbW9yZSBzdHVicy4KCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCVJlYXJyYW5nZWQgc3RhcnR1cCBjb2RlIGluIF9XaW5NYWluLiAgSSB0aGluayB0aGlzIHdpbGwgd29yay4KCgkqIFt0b29sa2l0L01ha2VmaWxlLmluXQoJQWRkZWQgdGFyZ2V0cyBmb3IgJ2hlbGxvJyBhbmQgJ2hlbGxvMicgaW4gY2FzZSBhbnlvbmUgY2FyZXMgdG8gdHJ5CglvdXQgdGhlIHNhbXBsZSBwcm9ncmFtcy4KCldlZCBTZXAgMjcgMjM6MTM6NDMgMTk5NSAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoJCgkqIFttaXNjZW11L2ludDJmLmNdIFttaXNjZW11L3Z4ZC5jXSBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCglGaXJzdCBhdHRlbXB0IGF0IHN1cHBvcnQgZm9yIHNvbWUgVnhEcy4gQ29tbSwgU2hlbGwgYW5kIFBhZ2VmaWxlLgoKVHVlIFNlcCAyNiAyMTozNDo0NSAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgPGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX1NpbXBsaWZ5UGF0aDogQWxzbyByZW1vdmUgIi8uLyIgZnJvbSBwYXRoLiAoSGFwcGVucyB3aGVuCiAJc3RhcnRpbmcgYXBwbGljYXRpb25zIGxpa2UgJ3dpbmUgLi9leGNlbC5leGUnKQoKU2F0IFNlcCAyMyAyMzozMjo0MCAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUF2b2lkIHJlbGF0aXZlIHBhdGggZm9yIHdpbmUuaW5pLgoKCSogW3JjL3N5c3Jlc19EYS5yY10KCVN1cHBvcnQgZm9yIERhbmlzaCBbRGFdIGxhbmd1YWdlLgoKCSogW21pc2MvbWFpbi5jXSBbbWlzY2VtdS9jcHUuY10KCVJldHVybiB0aGUgcHJvY2Vzc29yIHdlJ3JlIHJ1bm5pbmcgb24gY29ycmVjdGx5LgoKCSogW21pc2NlbXUvaW50MmYuY10KCU1pbm9yIHN0dWZmIGluIGludCAweDJmLCBmdW5jdGlvbiAweDE2LgoKU2F0IFNlcCAyMyAxOTk1IDE3OjU4OjA0ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9zaGVsbC5jXSBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnQgc2F2aW5nIGFuZCBsb2FkaW5nIG9mIHRoZSByZWdpc3RyeSBkYXRhYmFzZSAobmVlZGVkIGZvcgoJT0xFKS4gVmVyeSBleHBlcmltZW50YWwuIEZpeGVkIFNoZWxsRXhlY3V0ZSgpLgoJCgkqIFttaXNjZW11L2ludDIxLmNdCglFRVhJU1QgaXMgbm90IGEgY3JpdGljYWwgZXJyb3IgY29uZGl0aW9uIGZvciBta2RpcigpLgoKRnJpIFNlcCAyMiAwMTozMzozNCAxOTk1ICBBbGV4IEtvcm9ia2EgIDxhbGV4QHBobTYucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtpbmNsdWRlL3NoZWxsLmhdIFttaXNjL3NoZWxsLmNdCglJbXBsZW1lbnRlZCA0IGRyYWcvZHJvcCBmdW5jdGlvbnMgd2l0aCBkb2N1bWVudGVkIGZ1bmN0aW9uYWxpdHkuCgogICAgICAgICogW211bHRpbWVkaWEvdGltZS5jXQogICAgICAgICJGaXhlZCIgTU1TeXNUaW1lQ2FsbGJhY2sga2x1ZGdlIHNvIEV4Y2VsNSBsb2FkcyB1cCB3aXRob3V0IGNyYXNoaW5nLgoKCSogWyovKl0gCiAgICAgICAgQWRkZWQgbmV3IGZpbGVzLCBtb3JlIG1lc3NhZ2UgZGVmaW5pdGlvbnMsIHN0cnVjdHVyZXMsIGRlYnVnIGluZm8sCiAJZXRjLiAgUmV3cm90ZSBtZXNzYWdlIGxvZ2dpbmcgZnVuY3Rpb25zIHRvIHByb2R1Y2Ugb3V0cHV0IHNpbWlsYXIKIAl0byBXaW5TaWdodC4gIENoZWNrIG91dCAtZGVidWdtc2cgK21lc3NhZ2Ugb3B0aW9uLgoKCSogW21pc2MvZmlsZS5jXQogICAgICAgIEZpeGVkIEdldERyaXZlVHlwZSByZXR1cm4gdmFsdWUuICAKCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdIAogICAgICAgIEhvb2tzIGFyZSBpbnZva2VkIGluIG5vcm1hbCBvcmRlci4KCiAgICAgICAgKiBbbWlzY2VtdS8qXQogICAgICAgIEFkZGVkIHNvbWUgZnVuY3Rpb25zIGFuZCBpbnRlcnJ1cHRzLgoKICAgICAgICAqIFttaXNjL3NoZWxsLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgRHJhZy4uLiBmdW5jdGlvbnMuCgpUaHUgU2VwIDIxIDIzOjUwOjEyIDE5OTUgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbcmMvc3lzcmVzX0ZpLnJjXSBbcmMvc3lzcmVzLnJjXQoJRmlyc3QgYXR0ZW1wdCBhdCBGaW5uaXNoIFtGaV0gbGFuZ3VhZ2Ugc3VwcG9ydC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIFNlcCAxNyAxNjo0Nzo0OSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXSBbKi9NYWtlZmlsZS5pbl0gW01ha2UucnVsZXMuaW5dCglDbGVhbmVkIHVwIG1ha2VmaWxlcywgYWRkZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFdpbmVsaWIsCglncm91cGVkIGNvbW1vbiBtYWtlIHJ1bGVzIGluIE1ha2UucnVsZXMuaW4uCgoJKiBbQ29uZmlndXJlXQoJUmVuYW1lZCB0byAnQ29uZmlndXJlLm9sZCc7IHBsZWFzZSB1c2UgJ2NvbmZpZ3VyZScgaW5zdGVhZC4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBEZXN0cm95TWVudSgpIHRvIGF2b2lkIGRlbGV0aW5nIHRoZSBzYW1lIG1lbnUgdHdpY2UuCglNb3JlIGZpeGVzIHRvIFdNX01FTlVTRUxFQ1QsIGFuZCBhZGRlZCBXTV9JTklUTUVOVS4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUZpeGVkIHdyb25nIHJlZ2lzdGVyIHZhbHVlcyBkaXNwbGF5ZWQgYnkgUkVMQVlfRGVidWdDYWxsMzIoKS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIExvY2FsTG9jaygpIGFuZCBMb2NhbFVubG9jaygpIHRvIGluY3JlbWVudC9kZWNyZW1lbnQgdGhlCglsb2NrIGNvdW50IGZvciBtb3ZlYWJsZSBibG9ja3MuCgoJKiBbbWlzYy9jb21tZGxnLmNdIFttaXNjL3NoZWxsLmNdIFtyYy93aW5lcmMuY10KCU1vZGlmaWVkIHRoZSBnZW5lcmF0ZWQgQyBmaWxlIHNvIHRoYXQgdGhlIHJlc291cmNlIGluZm9ybWF0aW9uCgkoc2l6ZSwgZXRjLikgaXMgYWxzbyBleHBvcnRlZC4KCU1vZGlmaWVkIGNvbW1vbiBkaWFsb2dzIHRvIHVzZSB0aGUgbmV3IGluZm9ybWF0aW9ucy4KCgkqIFttaXNjL21haW4uY10gW0FOTk9VTkNFXQoJVXBkYXRlIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZm9yZ290Cglzb21lb25lLgoKCSogW3JjL3N5c3Jlcy5yY10gW3JjL3N5c3Jlc19Fbi5yY10KCU1vdmVkIEVuZ2xpc2ggcmVzb3VyY2VzIHRvIHN5c3Jlc19Fbi5yYy4KCUNoYW5nZWQgaWRzIGZyb20gbnVtZXJpYyB0byBzeW1ib2xpYyBmb3IgZGlhbG9ncy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTW9kaWZpZWQgdGVtcGxhdGUgcGFyc2luZyB0byBiZSBhYmxlIHRvIHBhc3Mgc2VnbWVudGVkIHBvaW50ZXJzIHRvCglDcmVhdGVXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ3JlYXRlV2luZG93KCkgbm93IHRha2VzIHNlZ21lbnRlZCBwb2ludGVycyBmb3IgY2xhc3MgYW5kIHdpbmRvdwoJbmFtZXMuCglNYXhtaW1pemUgb3IgbWluaW1pemUgdGhlIHdpbmRvdyB1cG9uIGNyZWF0aW9uIGlmIHRoZSBXU19NQVhJTUlaRQoJb3IgV1NfTUlOSU1JWkUgYml0cyBhcmUgc2V0LgoKVGh1IFNlcCAxNCAxNzoxOTo1NyAxOTk1ICBQYXVsIFdpbGhlbG0gIDxwYXVsQHBhdWwuYWNjZXNzb25lLmNvbT4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIHNjcm9sbC1iYXIgYnVncyBmb3Igbm9uLWNsaWVudCB3aW5kb3dzLgoKVGh1IFNlcCAxNCAxNDowNDoxNCBNRVQgRFNUIDE5OTUgSm9jaGVuIEhvZW5pY2tlIDxKb2NoZW4uSG9lbmlja2VAYXJiaS5JbmZvcm1hdGlrLlVuaS1PbGRlbmJ1cmcuZGU+CgoJKiBbaW5jbHVkZS9jdXJzb3IuaF0gW3dpbmRvd3MvY3Vyc29yLmNdCglDdXJzb3IgaXMgbm90IG1pcnJvcmVkIGFueSBtb3JlIGFuZCB0aGUgaG90c3BvdCBpcyBzZXQgcmlnaHQuCgpXZWQgU2VwIDEzIDE0OjIyOjMxIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtvbGUuaF0KCU1pc2Mgc21hbGwgZml4ZXMuCgpNb24gU2VwICA0IDAwOjAxOjIzIDE5OTUgIEpvbiBUb21icyA8am9uQGd0ZS5lc2kudXMuZXM+CgoJKiBbcmMvc3lzcmVzX0VzLnJjXQoJRmlyc3QgYXR0ZW1wdCBhdCBTcGFuaXNoIFtFc10gbGFuZ3VhZ2Ugc3VwcG9ydC4KClN1biBTZXAgIDMgMTM6MjI6MzMgMTk5NSAgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpbmNsdWRlL2FsaWFzLmhdW3dpbmRvd3MvYWxpYXMuY11baW5jbHVkZS9yZWxheTMyLmhdCglOZXcgZmlsZXMKCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglXSURHRVRTX0luaXQ6IHJlZ2lzdGVyIGFsaWFzIHdpbmRvdyBwcm9jZWR1cmVzCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDYWxsV25kUHJvYzogQ2FsbCBhbGlhcyBmdW5jdGlvbnMgaWYgbmVjZXNzYXJ5CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglHZXRTdG9ja09iamVjdCwgVGV4dE91dEE6IG5ldyByZWxheXMKCgkqIFttaXNjL3VzZXIzMi5jXVtpZjE2MzIvdXNlcjMyLnNwZWNdW21pc2MvTWFrZWZpbGUuaW5dW21pc2MvSW1ha2VmaWxlXQoJdXNlcjMyLmM6IG5ldyBmaWxlCglCZWdpblBhaW50LENyZWF0ZVdpbmRvd0V4QSxEZWZXaW5kb3dQcm9jQSxEaXNwYXRjaE1lc3NhZ2UsRW5kUGFpbnQsCglHZXRNZXNzYWdlQSxSZWdpc3RlckNsYXNzQSxTaG93V2luZG93LFVwZGF0ZVdpbmRvdzogbmV3IHJlbGF5cwoKCSogW2lmMTYzMi93aW5wcm9jczMyLnNwZWNdW2xvYWRlci9wZV9pbWFnZS5jXVtsb2FkZXIvbW9kdWxlLmNdCglQRV9XaW4zMkNhbGxUb1N0YXJ0OiBuZXcgZnVuY3Rpb24KCU1PRFVMRV9DcmVhdGVJbnN0YW5jZTogcmVtb3ZlZCBzdGF0aWMgYXR0cmlidXRlCglMb2FkTW9kdWxlOiBUcnkgbG9hZGluZyBQRSBpbWFnZSBvbiBlcnJvciAyMQoJUEVfTG9hZE1vZHVsZTogbmV3IGZ1bmN0aW9uCglQRV9Mb2FkSW1hZ2U6IGluaXRpYWxpemUgcGVfZGF0YSB3aXRoIDAKCQoJKiBbaW5jbHVkZS9kbGxzLmhdW2luY2x1ZGUvcGVleGUuaF0KCW1vdmVkIHBlX2RhdGEgYW5kIHdfZmlsZXMgdG8gcGVleGUuaAoJCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEFib3V0OiBSZWdpc3RlciBBYm91dFduZFByb2MgYWxpYXNlcwoKCSogW21pc2NlbXUvaW50MjEuY10KCWhhbmRsZSAweDQ0MEEgYW5kIDB4REMKCgkqIFttaXNjZW11L2ludDJmLmNdCgloYW5kbGUgMHg4NAoKCSogW29iamVjdHMvZGliLmNdCglDcmVhdGVESUJpdG1hcDogY29tcGxhaW4gaWYgQklUTUFQSU5GT0hFQURFUiBpcyBvZiB3cm9uZyBzaXplCgoJKiBbdG9vbHMvYnVpbGQuY10KCWluY2x1ZGUgd2luZG93cy5oIGFuZCByZWxheTMyLmggaW50byBnZW5lcmF0ZWQgV2luMzIgcmVsYXlzLAoJZG9uJ3QgZGVjbGFyZSB0aGUgaW1wbGVtZW50YXRpb24gYXMgaW50ICgqKSgpOwoJbGltaXQgaW4gV0lOMzJfYnVpbHRpbiB3YXMgb2ZmIGJ5IG9uZQoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNBUkVUX0luaXRpYWxpemU6IG5ldyBmdW5jdGlvbiwgY2FsbCBvbiBzdHJhdGVnaWMgcGxhY2VzCgoJKiBbd2luZG93cy9tZXNzYWdlYm94LmNdCglNZXNzYWdlQm94OiByZWdpc3RlciBtZXNzYWdlIGJveCBwcm9jIGFsaWFzZXMKCgkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY11baWYxNjMyL2NvbWRsZzMyLnNwZWNdCglOZXcgZmlsZXMKCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dW2lmMTYzMi9JbWFrZWZpbGVdW2lmMTYzMi9yZWxheTMyLmNdCglhZGRlZCBuZXcgc3BlYyBmaWxlcwoJUkVMQVkzMl9HZXRCdWlsdGluRExMOiBwZXJmb3JtIGxvb2t1cCBjYXNlIGluc2Vuc2l0aXZlCglSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IHN0YXJ0IG5hbWUgc2VhcmNoIGF0IDAKCgkqIFtpZjE2MzIvdXNlci5zcGVjXVtpZjE2MzIva2VybmVsLnNwZWNdW2lmMTYzMi9nZGkuc3BlY10KCUFkZGVkIHN0dWJzIGZvciBuZXcgV2luOTUgQVBJCgpTYXQgU2VwIDIgMTk5NSAgTWFydGluIFJveQoKCSogW21pc2MvY29tbWRsZy5jXQoJSW4gV01fSU5JVERJQUxPRywgY3VycmVudCBmaWx0ZXIgbXVzdCByZWZsZWN0IGxwb2ZuLT5uRmlsdGVySW5kZXguCiAgCVdoZW4gcHJvY2VzcyBJRE9LIGJ1dHRvbiBpbiBGSUxFRExHX1dNQ29tbWFuZCgpLAogCWxwb2ZuLT5uRmlsdGVySW5kZXggc2hvdWxkIGJlIHVwZGF0ZWQgdG8gY3VycmVudCBzZWxlY3Rpb24uCgpUaHUgQXVnIDMxIDE1OjAwOjAwIDE5OTUgUmFtJ29uIEdhcmMnaWEgPHJhbW9uQGllMy5jbHVicy5ldHNpdC51cG0uZXM+CgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCglBZGRlZCBzdXBwb3J0IG9mIHNlbGYtbG9hZGluZyBtb2R1bGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgMzEgMTc6MTk6NTcgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW0NvbmZpZ3VyZV0KCUFkZGVkIGNvbXBpbGUtdGltZSBvcHRpb24gZm9yIElQQy4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgbGFuZ3VhZ2UsIElQQyBhbmQgbWFsbG9jCglkZWJ1Z2dpbmcuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJV01fTUVOVVNFTEVDVCB3YXMgc29tZXRpbWVzIHNlbnQgdG8gdGhlIHdyb25nIHdpbmRvdy4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXQoJRm9yIHRoZSAnbmV4dCcgY29tbWFuZCwgb25seSBzdGVwIG92ZXIgaW5zdHJ1Y3Rpb24gdGhhdCByZXF1aXJlCglpdC4gVGhpcyBhbGxvd3MgJ25leHQnIHRvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIGptcCBhbmQgcmV0CglpbnN0cnVjdGlvbnMuCgoJKiBbaXBjLyouY10gW21lbW9yeS9hdG9tLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglJUEMgY2FuIG5vdyBiZSBjb25maWd1cmVkIG91dCBhdCBjb21waWxlLXRpbWUuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUJ1ZyBmaXggaW4gVEFTS19SZXNjaGVkdWxlKCkgdGhhdCBjb3VsZCBjYXVzZSBhIHRhc2sgdG8gYmUgZGVsZXRlZAoJdHdpY2UuCgoJKiBbbWlzY2VtdS9kb3NtZW0uY10gKE5ldyBmaWxlKQoJUGFydGlhbCBlbXVsYXRpb24gb2YgdGhlIEJJT1MgZGF0YSBzZWdtZW50LgoKCSogW21pc2NlbXUvaW5zdHIuY10KCVRyYXAgYXR0ZW1wdHMgdG8gYWNjZXNzIHNlbGVjdG9yIDB4NDAgYW5kIHJlbWFwIHRoZSBhY2Nlc3MgdG8KCXNlZ21lbnQgX18wMDQwSC4KCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgYnVnIGluIENhbGxUbzMyX0xhcmdlU3RhY2soKSB0aGF0IGNhdXNlZCBwcm9ibGVtcyB3aGVuCgljb21waWxpbmcgV2luZSB3aXRoIHRoZSAtZm9taXQtZnJhbWUtcG9pbnRlciBvcHRpb24uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBidWcgaW4gaGFyZHdhcmUgZXZlbnQgaGFuZGxpbmcgdGhhdCBjb3VsZCBjYXVzZSBzb21lIGV2ZW50cwoJdG8gZ2V0IGlnbm9yZWQuCgpTYXQgQXVnIDI2IDEzOjEyOjU5IElTVCAxOTk1IE1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdm5ldC5pYm0uY29tPgoKCSogW2lwYy9SRUFETUVdIFtpcGMvZGRlLnRleF0KCUxhVGVYIGRvY3VtZW50YXRpb24gZm9yIHRoZSBpcGMgYW5kIERERSBzdHVmZi4KCldlZCBBdWcgMjMgMjI6MDE6MjMgR01UIDE5OTUgTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB2bmV0LmlibS5jb20+CgoJKiBbaXBjL0ltYWtlZmlsZV0gW2lwYy93aW5lX3Rlc3Rfc3R1Yi5jXQoJRml4ZWQgSVBDIHRlc3RpbmcuIE5vdyBpdCBjYW4gYmUgY29tcGlsZWQgd2l0aCAibWFrZSB0ZXN0cyIKCldlZCBBdWcgMjMgMjE6MDQ6MTQgMTk5NSAgRm9ucyBCb3RtYW4gIDxib3RtYW5Ad2FiLXRpcy5yYWJvYmFuay5ubD4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21pc2MvbWFpbi5jXQoJQWRkZWQgR2V0V2luRGVidWdJbmZvL1NldFdpbkRlYnVnSW5mbyBzdHViIGZvciBwbGF5ZXIuZXhlCgpTdW4gQXVnICAyMCAxMzo0OTo0MiAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJTWlzYyBmaXggdG8gaW50MjEsYWg9NDAgKHdyaXRlKSB0byBtYXRjaCBfbHdyaXRlKCkuCglBWD0weDQ0MEEgKGNoZWNrIGlmIGhhbmRsZSBpcyByZW1vdGUpIGFkZGVkLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCU1vdmVkIG1jaVNlbmRTdHJpbmcgdG8gbWNpc3RyaW5nLmMuCgoJKiBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCU5ldyBmaWxlLCBzdHJpbmcgaW50ZXJmYWNlIGZvciBNQ0kgKG5vdCBjb21wbGV0ZSwgbm90IHRob3JvdWdobHkKCXRlc3RlZCkuCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJSU9DVEwgcHJpbnRzIGVycm9yczsgb25lIHBhcmFub2lkIGNoZWNrIGRpc2FibGVkLgoKCSogW21pc2MvZmlsZS5jXQoJTWlzYyBvcGVyYXRvciBwcmVjZWRlbmNlIGZpeGVzLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvYml0Ymx0LmNdCglTdHViIGZvciBGYXN0V2luZG93RnJhbWUgKHBhcmFtZXRlcnMgbm90IGNvcnJlY3QpLgoKU2F0IEF1ZyAxOSAwMTozMToyMyAxOTk1ICBHcmFoYW0gTWVuaGVubml0dCA8Z2ZtQHdlcnBsZS5taXJhLm5ldC5hdT4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIGl0ZXJhdGVkIHNlZ21lbnRzLgoKU2F0IEF1ZyAxOSAwMDo0MzowNCAxOTk1ICBBbmRyZXcgVGF5bG9yICAoYW5kcmV3QHJpc2Nhbi5jb20pCgoJKiBbd2luZG93cy9tYXBwaW5nLmNdCglJbiBmdW5jdGlvbiBNQVBQSU5HX0ZpeElzb3Ryb3BpYygpLCBWcG9ydEV4dFtYWV0gaXMgbXVsdGlwbGllZCBieQogCXRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAoeWRpbSAvIHhkaW0pIG9yICh4ZGltIC8geWRpbSkuCgpUaHUgQXVnIDE1IDIzOjAwOjE2ICBHcmVnb3J5IFRydWJldHNrb3kgIDxncmlzaGFAbWlyYS5jb20+CgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUFkZGVkIHNvbWUgaW5jbHVkZXMgZm9yIFdpbmRvd3MgOTUuCgoJKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdCglBZGRlZCBzb21lIHN5c21ldHJpY3MgZm9yIFdpbmRvd3MgOTUuCgoJKiBbaW5jbHVkZS9iaXRtYXBzLyo5NV0KCU5ldyBmaWxlczogb2JtX2Nsb3NlXzk1LCBvYm1fY2xvc2VkXzk1LCBvYm1fcmVkdWNlXzk1LCBvYm1fcmVkdWNlZF85NQoJb2JtX3pvb21fOTUsIG9ibV96b29tZF85NSAtIHRoZXNlIGFyZSBzb21lIHBpeG1hcHMgZm9yIFdpbmRvd3MgOTUuCgpUaHUgQXVnIDEwIDEyOjAwOjAwIDE5OTUgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaG5ldC5vcmcpCgoJKiBbbWlzYy9zaGVsbC5jXSBbcmMvc3lzcmVzKi5yY10KCVRoZSBjYXB0aW9uIG9mIHRoZSBTaGVsbEFib3V0IGRpYWxvZyBib3ggaXMgbGFuZ3VhZ2Ugc3BlY2lmaWMgYW5kCiAJc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlIHJlc291cmNlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAxNyAxOTozMDoxNCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbKi9NYWtlZmlsZS5pbl0KCVJlbW92ZWQgd2luZWxpYmNsZWFuIHRhcmdldCwgYXMgaXQgZG9lc24ndCB3b3JrIGFueXdheS4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUF2b2lkIGRyYXdpbmcgdGhlIGZvY3VzIHJlY3RhbmdsZSBvdXRzaWRlIG9mIHRoZSBidXR0b24uCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJRml4ZWQgYnVnIHdpdGggdGhlIHNpemUgb2YgdGhlIHJlc2VydmVkIGJ5dGVzIGZvciB0aGUgRWRpdAoJY29udHJvbCAoY2F1c2VkIEV1ZG9yYSB0byBjcmFzaCkuCgoJKiBbZGVidWdnZXIvKl0gW2luY2x1ZGUvZGVidWdnZXIuaF0KCVVuaWZpZWQgZGVidWdnZXIgYWRkcmVzcyBoYW5kbGluZy4gU2VnbWVudGVkIGFuZCBsaW5lYXIgYWRkcmVzc2VzCglhcmUgbm8gZ3JvdXBlZCBpbiBhIHNpbmdsZSB0eXBlIERCR19BRERSLgoJQWxsIGNvbW1hbmRzIG5vdyBhY2NlcHQgc2VnOm9mZiBhZGRyZXNzZXMuCglNb2R1bGUgZW50cnkgcG9pbnRzIGFyZSBub3cgbG9hZGVkIHVwb24gZmlyc3QgZW50cnkgdG8gdGhlCglkZWJ1Z2dlciwgc28gdGhhdCBlbnRyeSBwb2ludHMgb2YgdGhlIGxvYWRlZCBleGVjdXRhYmxlIGFsc28KCWFwcGVhciBpbiB0aGUgc3ltYm9sIHRhYmxlLgoKCSogW2luY2x1ZGUvcmVnaXN0ZXJzLmhdIFttaXNjZW11LyouY10KCVJlZ2lzdGVyIG1hY3JvcyBhcmUgbm93IG9mIHRoZSBmb3JtICdBWF9yZWcoY29udGV4dCknIGluc3RlYWQgb2YgJ0FYJy4KCVRoaXMgbWFrZXMgY29kZSBsZXNzIHJlYWRhYmxlLCBidXQgd2lsbCBwcmV2ZW50IGEgbG90IG9mIG5hbWUKCWNsYXNoZXMgd2l0aCBvdGhlciBkZWZpbml0aW9ucy4gSXQgYWxzbyBhdm9pZHMgYSBoaWRkZW4gcmVmZXJlbmNlCgl0byB0aGUgJ2NvbnRleHQnIHZhcmlhYmxlLgoKCSogW2lwYy9kZGVfYXRvbS5jXSBbbWlzYy9hdG9tLmNdCglBbGwgKkFkZEF0b20gYW5kICpGaW5kQXRvbSBmdW5jdGlvbnMgbm93IHRha2UgYSBTRUdQVFIgcGFyYW1ldGVyLAoJdG8gYWxsb3cgc3VwcG9ydGluZyBpbnRlZ2VyIGF0b21zLgoJTW92ZWQgYXRvbS5jIHRvIG1lbW9yeS8gZGlyZWN0b3J5LgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCBlbnZpcm9ubWVudCBhbGxvY2F0aW9uIHRvIGNvbXB1dGUgdGhlIHNpemUgZHluYW1pY2FsbHkuCglBZGRlZCAnd2luZGlyJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCUZpeGVkIEdldERPU0Vudmlyb25tZW50KCkgdG8gcmV0dXJuIHRoZSBjdXJyZW50IHRhc2sgZW52aXJvbm1lbnQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBidWcgaW4gTVNHX0dldFdpbmRvd0ZvckV2ZW50KCkuCgpXZWQgQXVnICA5IDExOjQwOjQzIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL29sZS5oXQoJQWRkZWQgYSBsb3Qgb2Ygc3RydWN0dXJlcyAgZnJvbSBteSBCb3JsYW5kIE1hbnVhbC4gTmVpdGhlciBjb21wbGV0ZSwKCW5vciAxMDAlIHJpZ2h0IChjaGVjayBwbGVhc2UpCgkKCSogW21pc2Mvc2hlbGwuY10KCUZpeGVkIHNvbWUgb2YgdGhlIFJlZyogZnVuY3Rpb25zLgoJRW5oYW5jZWQgU2hlbGxFeGVjdXRlLgoJUGxlYXNlIHRlc3Q6IHdpbmUgInJlZ2VkaXQuZXhlIC92IiBtcGxheWVyLmV4ZSBzb3VuZHJlYy5leGUKCURvIFlPVSBrbm93IHRoZSBmb3JtYXQgb2YgXFdJTkRPV1NcUkVHLkRBVD8gTWFpbCBtZSBwbGVhc2UgOikKCgkqIFttaXNjL2Rvc19mcy5jXQoJTWFrZSB1bXNkb3MgbW91bnRlZCB3aW5kb3dzIGRpcnMgd29yayBhZ2Fpbi4KCgkqIFttaXNjZW11L2VtdWxhdGUuY10KCUFkZGVkIHNvbWUgY29tbWVudHMsIHByZWltcGxlbWVudGF0aW9uIG9mIHN1YmZ1bmN0aW9uIDcuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJSW1wbGVtZW50ZWQgbWNpU2VuZFN0cmluZy4gbm90IGNvbXBsZXRlLCBub3QgY2xlYW4sIG5vdAoJbmVjZXNzYXJpbHkgd29ya2luZyAob25seSBjaGVja2VkIHdpdGggYSBwcm9ncmFtIHdoaWNoIHVzZXMKIAknY2RhdWRpbycgKG9uZSB3b3JraW5nIHByb2dyYW0gaXMgY29vbC5leGUsIGEgc2hhcmV3YXJlIHdhdmVkaXRvcgogCXdpdGggY2RhdWRpbyBwbGF5IGZhY2lsaXRpZXMuKQoKCSogW211bHRpbWVkaWEvbWNpY2RhLmNdCglTZWdwdHIgZml4ZXMgaW4gRHJpdmVyUHJvYwoJRGVmYXVsdCBjZHJvbSBkcml2ZSBpbiBMaW51eCBpcyAvZGV2L2Nkcm9tIC4uLiB1c3VhbGx5IGEgc3ltYm9saWMKIAlsaW5rIHRvIHlvdXIgcmVhbCBjZHJvbSBkZXZpY2UuCgpUdWUgQXVnICA4IDE5OjQxOjUwIENEVCAxOTk1IERhbmllbCBTY2hlcGxlciA8ZGtzMkBjZWMud3VzdGwuZWR1PgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRG9uJ3QgY3Jhc2ggaW4gYSBMb2FkU3RyaW5nIHRvIE5VTEwKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIGFjY2VsZXJhdG9ycyB0byB3b3JrIHdpdGggbW9kaWZpZXJzLiAgKEFMVC14IG1vZGlmaWVycyBzdGlsbAogCXdvbid0IHdvcmsgdW5sZXNzIHRoZSBBTFQga2V5cHJlc3MgZXhpdGVkIHRoZSBtZW51LikKCgkqIFttaXNjL2ZpbGUuY10KCUV4cGFuZCBhIGZpbGUgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0IHdpdGggYW4gX2x3cml0ZSBvZiBzaXplIHplcm8uCgoJKiBbbWlzYy9maWxlLmNdCglTZXQgYSBuZXdseSBjcmVhdGVkIGZpbGUgdG8gcmVhZC13cml0ZSBpbnN0ZWFkIG9mIHdyaXRlLW9ubHkuCgkKU3VuIEF1ZyAgNiAyMDoyODozNSAxOTk1ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL21zZG9zLmhdCglGaXhlZCB0byByZXR1cm4gRE9TIHZlcnNpb24gNi4yMiwgYW5kIHRoZSBjb3JyZWN0IGJ5dGUgb3JkZXIKCWZvciBXaW5kb3dzIHByb2dyYW1zLgoKV2VkIEF1ZyAgMiAxMjozNjozMyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttZW1vcnkvZ2xvYmFsLmNdIFttaXNjL21haW4uY10KCU1ha2UgdGhlIG5ldyBJUEMgcnVuLXRpbWUgc2VsZWN0aWJsZSwgZGlzYWJsaW5nIGl0IGJ5IGRlZmF1bHQuCgkoSSB0aGluayBpdCdzIG9ubHkgdXNlZnVsIGZvciBsaWJ3aW5lLCBhbnl3YXkuKQoKCSogW2xvYWRlci90YXNrLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KCUluIEZyZWVTZWxlY3RvcigpLCB3YWxrIHVwIHRoZSBzdGFjayBhbmQgZml4IHRoZSBmcmFtZXMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCU1pc3NpbmcgYnJlYWsgc3RhdGVtZW50IGluIERJQl9TZXRJbWFnZUJpdHNfUkxFOCgpLgoJSW4gR2V0RElCaXRzKCksIHNldCB0aGUgY29tcHJlc3Npb24gZmxhZyBpbiB0aGUgYml0bWFwIGluZm8gdG8gemVyby4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJR2V0TmV4dERsZ0dyb3VwSXRlbSgpIG5lZWRzIHRvIHRyZWF0IHRoZSBmaXJzdCBjaGlsZCBhcyBpZiBpdCBoYWQKCWFuIGltcGxpY2l0IFdTX0dST1VQIGJpdCBzZXQuCgpNb24gSnVsIDMxIDE1OjQ0OjQ3IEVEVCAxOTk1IExvdWlzLUQuIER1YmVhdSA8bGRkQHN0ZXAucG9seW10bC5jYT4KCgkqIFttaXNjL2Rvc19mcy5jXQoJUXVpY2snbiBkaXJ0eSBmaXggZm9yIHRoZSBpbml0aWFsaXNhdGlvbiBvZiB0aGUgWjogaW5mb3JtYXRpb24KCXN0cnVjdHVyZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEp1bCAyMiAyMjozOTowOSBJRFQgMTk5NSBNaWNoYWVsIFZla3NsZXIgPGUxNjc4MjIzQHRvY2huYXBjMi50ZWNobmlvbi5hYy5pbD4KCgkqIFtpcGMvKl0KCU5ldyBkaXJlY3RvcnkuIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBuZXcgaW50ZXItd2luZQogCWNvbW11bmljYXRpb25zIHN1cHBvcnQuIEl0IGVuYWJsZXMgRERFIHByb3RvY29scyBiZXR3ZWVuIHR3byB3aW5lCiAJaW5zdGFuY2VzLiAgQ3VycmVudGx5IGl0IGlzIGxpbWl0ZWQgdG8gRERFLCBidXQgY2FuIGJlIGVuaGFuY2VkIHRvCiAJc3VwcG9ydCBPTEUgYmV0d2VlbiAyIGRpZmZlcmVudCB3aW5lIGluc3RhbmNlcy4gIFRoaXMgaXMgdmVyeQogCWltcG9ydGFudCBmb3IgbGlid2luZS5hIERERS9PTEUgc3VwcG9ydC4KCgkqIFt0b29scy9pcGNsXQogICAgCUEgc2NyaXB0IHRvIGRlbGV0ZSBnYXJiYWdlIElQQyBoYW5kbGVzIChzaGFyZWQgbWVtb3J5LCBzZW1hcGhvcmVzCiAJYW5kIG1lc3NhZ2UgcXVldWVzKS4gIFRoZSBjdXJyZW50IGludGVyLXdpbmUgY29tbXVuaWNhdGlvbiBpcyBub3QKIAlwZXJmZWN0LCBhbmQgc29tZXRpbWVzIGxlYXZlcyBnYXJiYWdlIGJlaGluZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvYXRvbS5oXSBbaW5jbHVkZS9nbG9iYWwuaF0KIAlbbG9hZGVyL3NlbGVjdG9yLmNdIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL21vZHVsZS5jXQogCVtsb2FkZXIvc2lnbmFsLmNdIFttZW1vcnkvZ2xvYmFsLmNdIFttaXNjL2F0b20uY10KIAlbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3dpbi5jXQoJW0ltYWtlZmlsZV0KICAgIAlIb29rcyBmb3IgaW50ZXItd2luZSBEREUgc3VwcG9ydCwgY3VycmVudCBHbG9iYWwuKkF0b20gZnVuY3Rpb25zCiAJcmVuYW1lZCB0byBMb2NhbC4qQXRvbSBzaW5jZSBHbG9iYWwuKkF0b20gYXJlIHVzZWQgZm9yIEludGVyLVdpbmUKIAlEREUgY29tbXVuaWNhdGlvbi4gKFRoZSBmaXJzdCBjYWxsIHRvIHRoZXNlIGZ1bmN0aW9ucyBzZXRzIHVwIHRoZQogCUlQQyBzdHJ1Y3R1cmVzIC0gd2hpY2ggb3RoZXJ3aXNlIGNhdXNlIHVubmVlZGVkIG92ZXJoZWFkLgoKTW9uIEp1bCAxNyAxOTo1NToyMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJRG9uJ3QgY3Jhc2ggaWYgYSBOVUxMIHN0cmluZyBpcyBwYXNzZWQgdG8gbWVudSBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglXZSBub3cgdXNlIGEgYml0IGluIGxkdF9mbGFnc19jb3B5IHRvIGluZGljYXRlIGZyZWUgTERUIGVudHJpZXMuCglGaXhlZCBhIGJ1ZyBpbiBTRUxFQ1RPUl9SZWFsbG9jQmxvY2sgdGhhdCBjb3VsZCBjYXVzZSBpdCB0bwoJb3ZlcndyaXRlIHZhbGlkIExEVCBlbnRyaWVzIHdoZW4gZ3Jvd2luZyBhIGJsb2NrLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUVtdWxhdGUgaW50IHh4IGluc3RydWN0aW9uIGJ5IHN0b3JpbmcgdGhlIGludGVycnVwdCB2ZWN0b3IgaW4KCUNTOklQIGFuZCByZXR1cm5pbmcgZGlyZWN0bHkuIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbSB0byBpbnN0YWxsIGFuCglpbnRlcnJ1cHQgdmVjdG9yLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBmdW5jdGlvbiBXSU5fR2V0VG9wUGFyZW50IHRvIGdldCB0aGUgdG9wLWxldmVsIHBhcmVudCBvZiBhCgl3aW5kb3cuCgpTdW4gSnVsICAxNiAxODoxNzoxNyAxOTk1ICBHcmVnb3J5IFRydWJldHNrb3kgPGdyaXNoYUBtaXJhLmNvbT4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgQWRkZWQgTG9hZEljb25IYW5kbGVyLiBJdCBkb2Vzbid0IGRvIGFueXRoaW5nIHlldCwgYnV0IG5vdyB5b3UKICAgICAgICBjYW4gdXNlIGJvcmxhbmQgaGVscCBmaWxlcyB3aXRoIHdpbmhlbHAuZXhlLgoKU3VuIEp1bCAxNiAxMTo1ODo0NSAxOTk1IEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFttaXNjL21haW4uY10KCUZpeGVkIHRvIHJldHVybiAzODYgRW5oYW5jZWQgbW9kZSBjb3JyZWN0bHkuIEFsc28gcmV0dXJuIHRoZSBzYW1lCiAJdHlwZSBvZiBDUFUsIGZvciBib3RoIEVuaGFuY2VkIGFuZCBTdGFuZGFyZCBtb2RlLCBuYW1lbHkgYSAzODYuCgpTdW4gSnVsIDE2IDAwOjAyOjA0IDE5OTUgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtDb25maWd1cmVdIFtpbmNsdWRlL29wdGlvbnMuaF0gW2luY2x1ZGUvd2luZW9wdHMuaF0KCSAgW21pc2MvbWFpbi5jXVttaXNjL3NweS5jXQoJICBSZW1vdmVkIHN1cHBvcnQgb2Ygc3B5IGZpbGUuIFJlZGlyZWN0ZWQgc3B5IG1lc3NhZ2VzIHRvIHN0ZGRlYi4KCSAgUmVtb3ZlZCAtc3B5IG9wdGlvbi4gQWRkZWQgLWRlYnVnbXNnICtzcHkgb3B0aW9uLgoKCSogW2RlYnVnZ2VyL2RiZy55XVtkZWJ1Z2dlci9kZWJ1Zy5sXQoJRW5hYmxlZCBzZWdtZW50ZWQgYWRkcmVzc2VzIChzZWc6b2ZmcykgZm9yIGJyZWFrIGFuZCB4IGNvbW1hbmRzLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvcmVnaW9uLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCgkgIFtpbmNsdWRlL3JlZ2lvbi5oXQoJRnJhbWVSZ24sIFJFR0lPTl9GcmFtZVJnbjogTmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUlzV2luT2xkQXBUYXNrOiBSZXR1cm4gZmFsc2UKCgkqIFtpZjE2MzIvbW91c2Uuc3BlY10KCUNwbEFwcGxldDogUmVtb3ZlZAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL3dpbi5jXQoJU2hvd093bmVkUG9wdXBzOiBOZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbbWlzYy93aW5zb2NrZXQuY10KCWluZXRfYWRkciwgc2VsZWN0OiBOZXcgcHJvdG90eXBlcyBpbiByZWxheSBjb2RlCglGaXhlZCBtZW1vcnkgbGF5b3V0IGZvciBuZXRkYiBmdW5jdGlvbnMgKGdldFhieVkpLgoJV0lOU09DS19pb2N0bHNvY2tldDogVHJhbnNsYXRlZCBGSU9OUkVBRCwgRklPTkJJTywgYW5kIEZJT0FTWU5DCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJUmVjdFZpc2libGU6IEZpeGVkIGNhbGwgdG8gTFBUb0RQCgoJKiBbcmMvd2luZXJjLmNdCgltYWluOiBSZW1vdmVkIGV4dHJhIGFyZ3VtZW50IHRvIGdldG9wdCBmb3IgTGludXguCgpUdWUgSnVsIDExIDAwOjE0OjQxIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJWWV0IGFub3RoZXIgZml4IGZvciBMaXN0Qm94RGlyZWN0b3J5KCkuCgkKCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCU1ha2UgR2V0TW9kdWxlSGFuZGxlKCkgYWNjZXB0IGluc3RhbmNlIGhhbmRsZXMgYXMgcGFyYW1ldGVyLgoKICAgICAgICAqIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci90YXNrLmNdCglQdXQgYSBtYWdpYyBjb29raWUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgMzIgYml0IHN0YWNrLCBhbmQgY2hlY2sgb24KCWVhY2ggcmV0dXJuIGZyb20gYSAzMiBiaXQgZnVuY3Rpb24gd2hldGhlciBpdCdzIHN0aWxsIHRoZXJlLiBDb21wbGFpbgoJaWYgaXQncyBub3QuCgogICAgICAgICogW2lmMTYzMi91c2VyLnNwZWNdCglXcm9uZyBlbnRyeSBmb3IgQ2xvc2VEcml2ZXIoKS4KCgkqIFttaXNjL2Rvc19mcy5jXSBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvZG9zX2ZzLmhdIFttaXNjL2ZpbGUuY10KCVttaXNjZW11L2ludDIxLmNdCglMYXJnZSBwYXJ0cyBvZiBkb3NfZnMuYyBzaW1wbGlmaWVkLiBDaGFuZ2VkIGl0IHRvIHVzZSBvbmUKCWN1cnJlbnQgZHJpdmUvZGlyZWN0b3J5IHBlciB0YXNrLCB3aGljaCBpcyBzZXQgdG8gdGhlIG1vZHVsZSBwYXRoIG9uCgl0YXNrIGNyZWF0aW9uLgoJUHJldmVudCBDb3JlbFBhaW50IGZyb20gY2xvc2luZyBzdGRpbi4KCW9wZW4oKSB3aXRoIE9fQ1JFQVQgc2V0IG11c3QgYmUgcGFzc2VkIHRocmVlIHBhcmFtZXRlcnMuCglET1MgRmluZEZpcnN0KCkvRmluZE5leHQoKSBjb3VsZCBjcmFzaCB3aGVuIEZBX0xBQkVMIHdhcyBzZXQuIEZpeGVkLAoJaXQncyBpbiBET1NfcmVhZGRpcigpIG5vdy4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCVNvbWUgYmFkbHkgd3JpdHRlbiBzb2Z0d2FyZSAoTG90dXMgRnJlZWxhbmNlIEdyYXBoaWNzKSBwYXNzZXMgYSBib2d1cwoJc2l6ZSBwYXJhbWV0ZXIgdGhhdCBjYXVzZWQgV2luZSB0byB3cml0ZSBvZmYgdGhlIGVuZCBvZiBhIHNlZ21lbnQuCglGaXhlZC4gKEl0J3MgcHJvYmFibHkgdG9vIHBhcmFub2lkIG5vdy4pCgkKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvdGltZS5jXSBbbXVsdGltZWRpYS9qb3lzdGljay5jXQoJW211bHRpbWVkaWEvSW1ha2VmaWxlXSBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCgkxNiBiaXQgZW50cnkgcG9pbnQgZm9yIE1NU3lzVGltZUNhbGxiYWNrLgoJU3BsaXQgb2ZmIHRpbWUuYyBhbmQgam95c3RpY2suYyBmcm9tIG1tc3lzdGVtLmMuCgkKCSogW29iamVjdHMvZGliLmNdCglHZXRESUJpdHMoKTogY2FsbCBYR2V0SW1hZ2UoKSB2aWEgQ2FsbFRvMzJfTGFyZ2VTdGFjay4KCiAgICAgICAgKiBbd2luZG93cy9jdXJzb3IuY10KCURlc3Ryb3lDdXJzb3IoKTogZG8gbm90aGluZyBmb3IgYnVpbHRpbiBjdXJzb3JzLgoJCgkqIFt3aW5kb3dzL21kaS5jXQoJSGFsZiBvZiBXTV9NRElTRVRNRU5VIGltcGxlbWVudGVkLgoJCgkqIFt3aW5kb3dzL3dpbi5jXQoJRW51bVdpbmRvd3MoKSBhbmQgRW51bVRhc2tXaW5kb3dzKCkgbmV2ZXIgZW51bWVyYXRlZCBhbnkgd2luZG93cy4KCUZpeGVkLgoKCSogW3dpbmRvd3MvKi5jXQoJRml4ZWQgR2V0UGFyZW50KCkgdG8gcmV0dXJuIGNvcnJlY3QgdmFsdWVzIGZvciBvd25lZCB3aW5kb3dzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRG9uJ3QgdHJ5IHRvIGFjdGl2YXRlIGRpc2FibGVkIHRvcC1sZXZlbCB3aW5kb3dzLgoKICAgICAgICAqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJV29yayBhcm91bmQgYSBidWcgaW4gZ2NjLTIuNy4wLgoJCgkqIFt0b29scy9idWlsZC5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdIFttZW1vcnkvZ2xvYmFsLmNdIAoJW2xvYWRlci90YXNrLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KCVNvbWUgVmlzdWFsIEJhc2ljIHByb2dyYW1zIChhbmQgcG9zc2libHkgb3RoZXJzLCB0b28pIGV4cGVjdCBFUyB0byBiZSAKCXByZXNlcnZlZCBieSBhIGNhbGwgdG8gYW4gQVBJIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvIHNhdmUgaXQuCglJbiBHbG9iYWxGcmVlKCkgYW5kIEZyZWVTZWxlY3RvcigpLCB3ZSBtdXN0IGNsZWFyIENVUlJFTlRfU1RBQ0sxNi0+ZXMgCgl0byBwcmV2ZW50IHNlZ2ZhdWx0cyBpZiBFUyBjb250YWluZWQgdGhlIHNlbGVjdG9yIHRvIGJlIGZyZWVkLgoKU3VuIEp1bCAgOSAyMDoyMToyMCAxOTk1ICBKb24gVG9tYnMgIDxqb25AZ3RleDAyLnVzLmVzPgoKCSogWyovKl0KCUFkZGVkIG1pc3NpbmcgcHJvdG90eXBlcyB0byBoZWFkZXIgZmlsZXMgYW5kIHJlbGV2YW50IGluY2x1ZGVzCgl0byByZWR1Y2UgY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoKU3VuIEp1bCAgOSAxODozMjo1NiAxOTk1ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2NvbmZpZy5oXSBbKi9NYWtlZmlsZS5pbl0KCU5ldyBjb25maWd1cmF0aW9uIHNjaGVtZSBiYXNlZCBvbiBhdXRvY29uZi4KClNhdCBKdWwgIDggMTQ6MTI6NDUgMTk5NSAgTW9ydGVuIFdlbGluZGVyICA8dGVycmErQGNzLmNtdS5lZHU+CgoJKiBbbWlzY2VtdS9pb3BvcnRzLmNdCglSZXZhbXAgdG8gaGF2ZSBvbmx5IG9uZSBpbi0gYW5kIG9uZSBvdXQtIHZhcmlhbnQsIGJvdGggcmVhbGx5CiAJaW1wbGVtZW50ZWQuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uOiBVc2UgbmV3IGlvcG9ydCBpbnRlcmZhY2UuICBJbXBsZW1lbnQKIAlzdHJpbmcgaW8uICBDb3JyZWN0IGluc3RydWN0aW9uIHBvaW50ZXIgZm9yIDMyLWJpdCBjb2RlLgoKCSogW2luY2x1ZGUvbWlzY2VtdS5oXQoJVXBkYXRlIHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcy4KCgkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXQoJRGVmaW5lZCBGUyBhbmQgR1MuCgpTYXQgSnVsICA4IDEzOjM4OjU0IDE5OTUgIEhhbnMgZGUgR3JhYWZmICA8Z3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW21pc2MvZG9zX2ZzLmNdCglDaG9wT2ZmU2xhc2goKTogQSBwYXRoIGNvbnNpc3Rpbmcgb2ZmIGEgc2luZ2xlIHNsYXNoIGlzIGxlZnQKIAlpbnRhY3QsIGFuZCBtdWx0aXBsZSBzbGFzaGVzIGFyZSBhbGwgcmVtb3ZlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEp1bCAgNSAxOTowNjozNSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBkcmF3aW5nIGJ1ZyB0aGF0IGNhdXNlZCBwYXJ0IG9mIGEgbm9uLWNsaWVudCBzY3JvbGwgYmFyCgl0byBiZSBwYWludGVkIGV2ZW4gd2hlbiB0aGUgc2Nyb2xsLWJhciB3YXMgaGlkZGVuLgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdIFtkZWJ1Z2dlci9kYmcueV0KCVJld3JvdGUgYnJlYWtwb2ludCBoYW5kbGluZyB0byB3b3JrIGluIDE2LWJpdCBtb2RlLgoJSW1wbGVtZW50ZWQgc2luZ2xlLXN0ZXBwaW5nICgnc3RlcCcgYW5kICduZXh0JyBpbnN0cnVjdGlvbnMpLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglGb3JtYXQgc3BlY2lmaWVyIGlzIG5vdyBhIHNlcGFyYXRlIHRva2VuLgoJRW50ZXJpbmcgYW4gZW1wdHkgbGluZSBhdCB0aGUgZGVidWdnZXIgcHJvbXB0IGNhdXNlcyB0aGUgcHJldmlvdXMKCWNvbW1hbmQgdG8gYmUgcmVwZWF0ZWQsIGxpa2UgdW5kZXIgZ2RiLgoJCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXSBbZGVidWdnZXIvcmVnaXN0ZXJzLmNdCglEaWZmZXJlbnRpYXRlIDE2LWJpdCBhbmQgMzItYml0IHJlZ2lzdGVycyB3aXRob3V0IHRha2luZyBjdXJyZW50Cgltb2RlIGludG8gYWNjb3VudCAoJGVheCBpcyBhbHdheXMgMzItYml0LCAkYXggYWx3YXlzIDE2LWJpdCkuCgoJKiBbZGVidWdnZXIvc3RhY2suY10KCUZpeGVkIHN0YWNrIGluZm9ybWF0aW9uIHJvdXRpbmVzIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAxNi1iaXQKCWFuZCAzMi1iaXQgc3RhY2tzLgoKCSogW2xvYWRlci90YXNrLmNdCglPcHRpb24gLWRlYnVnIG5vdyBzZXRzIGEgYnJlYWtwb2ludCBhdCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YKCWV2ZXJ5IGxvYWRlZCB0YXNrLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUFkZGVkIGhhbmRsaW5nIG9mIGxvY2ssIHJlcGUgYW5kIHJlcG5lIHByZWZpeGVzLgoKCSogW29iamVjdHMvZGliLmNdCglDaGFuZ2VkIFN0cmV0Y2hESUJpdHMoKSB0byBkbyB0aGUgY29ycmVjdCB0aGluZywgZXZlbiBpZiBpdCdzIHN0aWxsCglub3QgcmVhbGx5IG9wdGltYWwuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZXMgaW4gUm91bmRSZWN0KCksIHRoYW5rcyB0byBCYWJhayBNYXNhbGVoZGFuLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJVHJpZWQgdG8gZml4IG1vdXNlIGV2ZW50IGhhbmRsaW5nIHdpdGggcmVzcGVjdCB0byBkaXNhYmxlZAoJd2luZG93cy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglDbGVhciBXSU5fTkVFRFNfTkNQQUlOVCBmbGFnIGJlZm9yZSBzZW5kaW5nIFdNX05DUEFJTlQgdG8gYXZvaWQKCWluZmluaXRlIGxvb3BzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBJc1dpbmRvd1Zpc2libGUoKSB0byByZXR1cm4gRkFMU0Ugd2hlbiBvbmUgb2YgdGhlIHBhcmVudAoJd2luZG93cyBpcyBoaWRkZW4uCgpTYXQgSnVsICAxIDIyOjA4OjIxIDE5OTUgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9jb21wb2JqLnNwZWNdW21pc2MvY29tcG9iai5jXQoJQ29HZXRNYWxsb2M6IE5ldyBmdW5jdGlvbgoJQWRkZWQgcmVsYXkgZW50cmllcyBmb3IgQ09NUE9CSiBvcmRpbmFscyBhYm92ZSAxMDAKCUNvSW5pdGlhbGl6ZTogQ2hhbmdlZCBwYXJhbWV0ZXIgdG8gRFdPUkQKCgkqIFtpZjE2MzIvb2xlMi5zcGVjXQoJRXhwb3J0ZWQgaW1wbGVtZW50YXRpb24gb2YgT2xlQnVpbGRWZXJzaW9uCgoJKiBbaWYxNjMyL29sZTJkaXNwLnNwZWNdW21pc2Mvb2xlMmRpc3AuY11bbWlzYy9JbWFrZWZpbGVdCglvbGUyZGlzcC5jOiBOZXcgZmlsZQoJU3lzQWxsb2NTdHJpbmcsIFN5c1JlYWxsb2NTdHJpbmcsIFN5c0FsbG9jU3RyaW5nTGVuLAoJU3lzUmVBbGxvY1N0cmluZ0xlbiwgU3lzRnJlZVN0cmluZywgU3lzU3RyaW5nTGVuOiBuZXcgZnVuY3Rpb25zCgoJKiBbaWYxNjMyL29sZTJubHMuc3BlY11baW5jbHVkZS93aW5ubHMuaF1bbWlzYy9vbGUybmxzLmNdCglDb21wYXJlU3RyaW5nQTogTmV3IGZ1bmN0aW9uCgpUaHUgSnVuIDI5IDE5OjQyOjAyIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJTmV3IHN0dWJzIGZvciBDcmVhdGVTY2FsYWJsZUZvbnRSZXNvdXJjZSwgR2V0R2x5cGhPdXRsaW5lLgoKVGh1IEp1biAyOSAxMzo0NzowOCBHTVQgMTk5NSAgR/ZyYW4gVGh5bmkgIChnb3JhbkBub3Jyc2tlbi5iaWxkYmFzZW4uc2UpCgoJKiBbbWlzYy9jb21tZGxnLmNdCglFeHRlbnNpdmUgY2hhbmdlcyBhbmQgYnVnIGZpeGVzIHRvIEZpbGVEaWFsb2cgaGFuZGxpbmcsCiAgICAgICAgYmVoYXZlcyBtb3JlIGxpa2UgbmF0aXZlIFdpbmRvd3MuCgpXZWQgSnVuIDI4IDEzOjA0OjQ0IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXSBbY29udHJvbHMvY29tYm8uY10KCVNvbWUgbWlub3Igb3B0aW1pemF0aW9ucy4KCQoJKiBbbWVtb3J5L2xvY2FsLmNdCglMT0NBTF9GaW5kRnJlZUJsb2NrKCk6IE5ldmVyIHVzZSB0aGUgbGFzdCBvbmUuCgkKCSogW21lbW9yeS9nbG9iYWwuY10KCUdsb2JhbFJlQWxsb2MoKTogR01FTV9NT0RJRlkgbXVzdCBub3QgYmUgaWdub3JlZCB3aGVuIHNpemU9PTAuCgkKCSogW21pc2MvZmlsZS5jXQoJcmVhZCgpIHJldHVybnMgYW4gZXJyb3Igd2hlbiBsZW5ndGg9PTAuIFRoaXMgaXMgbm90IHdoYXQgV2luZG93cwoJcHJvZ3JhbXMgZXhwZWN0LCBzbyBwYXkgYXR0ZW50aW9uIHRvIHRoaXMgaW4gX2xyZWFkKCkuIENoYW5nZWQgdGhpcwoJaW4gX2x3cml0ZSgpLCBfaHJlYWQoKSwgX2h3cml0ZSgpLCB0b28uCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglMb2FkSWNvbigpOiBJZ25vcmUgYmloLT5iaVNpemVJbWFnZSwgc29tZSBpY29ucyBoYXZlIHdyb25nIHZhbHVlcyBpbgoJdGhlcmUuCgkKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbbWlzYy9zaGVsbC5jXQoJV3Jvbmcgc3BlYyBmaWxlIGVudHJpZXMgY2F1c2VkIGhhdm9jOiBIS0VZIGhhcyAzMiBiaXQsIG5vdCAxNi4KCUFjY2VwdCBzb21lIG1vcmUgY29tYmluYXRpb25zIG9mIHBhcmFtZXRlcnMgaW4gdGhlIFJlZy4uKCkgZnVuY3Rpb25zLgoJCgkqIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KCU1ha2UgSW50ZXJydXB0UmVnaXN0ZXIoKSBhbmQgSW50ZXJydXB0VW5yZWdpc3RlcigpIHJldHVybiBmYWxzZS4KCgkqIFt3aW5kb3dzL2hvb2suY10KCUNhbGxOZXh0SG9va0V4KCkgdXNlZCB0byBjcmFzaCB3aGVuIGNhbGxlZCB3aXRoIGEgbnVsbCBoaG9vay4gRml4ZWQuCgpXZWQgSnVuIDI4IDEwOjE0OjM0IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bWFydGluQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2luY2x1ZGUvbmVleGUuaF1bbG9hZGVyL25lX2ltYWdlLmNdCglORV9Mb2FkU2VnbWVudDogRGV0ZWN0IGl0ZXJhdGVkIHNlZ21lbnRzCgoJKiBbbWlzYy9vbGUybmxzLmNdCglMT0NBTEVfU0xPTkdEQVRFOiBmaXhlZCB0eXBvCgoJKiBbbWlzY2VtdS9pbnQ1Yy5jXQoJUmVvcmRlcmVkIGluY2x1ZGUgZmlsZXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggTGludXggbGliYy41LjEKCgkqIFtyYy93aW5lcmMuY10KCUFkZGVkIC1iIG9wdGlvbiB0byBwcm9jZXNzIGJpbmFyeSByZXNvdXJjZSBmaWxlcyBpbnRvIEMgYXJyYXlzCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQ2FsbFduZFByb2M6IEFkZGVkIGR1bW15IGRzIHBhcmFtZXRlciBmb3IgbGlid2luZQoKCSogW2luY2x1ZGUvZ2RpLmhdW2luY2x1ZGUvdXNlci5oXQoJVVNFUl9IRUFQX0FMTE9DLCBHRElfSEVBUF9BTExPQzogZHJvcHBlZCBmbGFncyBwYXJhbWV0ZXIKCgkqIFtpbmNsdWRlL2xkdC5oXVtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCWRlZmluZWQgc2VnbWVudCBjb252ZXJzaW9uIG1hY3JvcyBmb3IgbGlid2luZQoKCSogW21pc2MvYXRvbS5jXQoJRGVmaW5lZCBVU0VSX0hlYXBTZWwgZm9yIGxpYndpbmUKCgkqIFttaXNjL21haW4uY10KCURpc2FibGUgLWRsbCBvcHRpb24gZm9yIGxpYndpbmUKCgkqIFttaXNjL3VzZXIuY10KCXJlbW92ZWQgR2V0RnJlZVN5c3RlbVJlc291cmNlcywgU3lzdGVtSGVhcEluZm8gZnJvbSBsaWJ3aW5lIGZvciBub3cKCgkqIFt0b29sa2l0L2hlYXAuY10KCWZpeGVkIExvY2FsTG9jayBwcm90b3R5cGUKCgkqIFt0b29sa2l0L3N1cC5jXQoJc3luYydlZCBsb2FkX216X2hlYWRlciwgbG9hZF9uZV9oZWFkZXIgd2l0aCBzdHJ1Y3R1cmVzCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglEaXNhYmxlZCByZXNvdXJjZSBETExzIGZvciBsaWJ3aW5lIGZvciBub3cKCk1vbiBKdW4gMjYgMTk6MzA6MjQgMTk5NSAgSGFucyBkZSBHcmFhZmYgIChncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmwpCgoJKiBbbWlzYy9tYWluLmNdCglGaXhlZCAtZW5oYW5jZWQgb3B0aW9uIHRvIHJlcG9ydCBhIDM4NiBDUFUgaW5zdGVhZCBvZiBhIDI4Ni4KCkZyaSBKdW4gMjMgMjM6MTg6MjUgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvZG9zX2ZzLmNdCglSZW1vdmUgbWF4aW11bSBvcGVuIGRvc2RpcmVudCBsaW1pdCAoZml4aW5nIHRoZSB3aW5maWxlLmV4ZQogCXByb2JsZW0pIGJ5IHVzaW5nIHRlbGxkaXIoKS9zZWVrZGlyKCkuCgkKRnJpIEp1biAyMyAxMzo0MjoyNSAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgKGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubCkKCgkqIFttaXNjL3Byb2ZpbGUuY10KCUZpeGVkIHByb2JsZW0gcGFyc2luZyBlbXB0eSBsaW5lcyB3aXRoaW4gc2VjdGlvbnMgaW4gLmluaSBmaWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEp1biAxOSAyMDoyOTo1MCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbZGVidWdnZXIvKi5jXQoJTW9kaWZpZWQgZGVidWdnZXIgdG8gdXNlIHNlZ21lbnRlZCBwb2ludGVycyBldmVyeXdoZXJlLgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbaWYxNjMyL3NvdW5kLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJRGVjbGFyZWQgYWxsIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBvbmx5IDE2LWJpdCBhcyAncGFzY2FsMTYnLgoKCSogW2luY2x1ZGUvbGR0LmhdIFttZW1vcnkvbGR0LmNdCglFeHBvcnQgTERUX0VudHJ5VG9CeXRlcyAobmV3KSBhbmQgTERUX0J5dGVzVG9FbnRyeSBmb3IgRFBNSS4KCU1haW50YWluIGEgY29weSBvZiB0aGUgc2VsZWN0b3IgZmxhZ3MsIHJlbW92aW5nIHRoZSBuZWVkIHRvIG1ha2UgYQoJc3lzdGVtIGNhbGwgdG8gcmV0cmlldmUgYW4gTERUIGVudHJ5LgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIGJ1ZyB3aXRoIG1vZHVsZSBmaWxlIGhhbmRsZSBjYWNoZS4KCgkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10KCUZpeGVkIGZpbGUgbmFtZSBidWcgaW4gTkVfQWNjZXNzUmVzb3VyY2UoKS4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIGJ1ZyBpbiBMb2FkSWNvbigpIHRoYXQgY2F1c2VkIHdyb25nIGNvbG9ycyB0byBiZSB1c2VkIGZvcgoJdGhlIGljb24gbWFzay4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglNb3ZlZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gdG8gbWlzY2VtdS9pbnN0ci5jLgoKCSogW21pc2MvZG9zX2ZzLmNdIFttaXNjZW11L2ludDIxLmNdCglMb3RzIG9mIHNtYWxsIGZpeGVzLCB0aGFua3MgdG8gTW9ydGVuIFdlbGluZGVyLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJTW9yZSBjb21wbGV0ZSBEUE1JIGVtdWxhdGlvbi4KCgkqIFttaXNjZW11L2luc3RyLmNdCglBZGRlZCBzdXBwb3J0IGZvciBwcmVmaXhlcyBpbiBpbnN0cnVjdGlvbnMgdG8gZW11bGF0ZS4KCgkqIFttaXNjZW11L2ludDJmLmNdCglVc2UgcmVnaXN0ZXIgbWFjcm9zIGluc3RlYWQgb2YgZGVzdHJveWluZyB0aGUgaGlnaCBwYXJ0IG9mIDMyLWJpdAoJcmVnaXN0ZXJzLgoKCSogW29iamVjdHMvZGMuY10KCUZpeGVkIGJ1ZyBpbiBHZXREQ1N0YXRlKCkgdGhhdCBmYWlsZWQgdG8gY2xlYXIgdGhlIG5ldyBEQy4KCgkqIFtyYy9zeXNyZXMucmNdCglSZW1vdmVkIGRpYWxvZ3MgMTEgYW5kIDEyIHRoYXQgd2VyZSBuZXZlciB1c2VkLgoKCSogW3Rvb2xzL2J1aWxkLmNdCgkncGFzY2FsMTYnIGdlbmVyYXRlZCBmdW5jdGlvbnMgZGlkIG5vdCBzYXZlICVkeC4KCVJlbW92ZWQgdXNlIG9mICVmcyB0byBhY2Nlc3MgdGhlIHN0YWNrLgoJJWRzIGlzIG5vIGxvbmdlciBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyBhIDE2LWJpdCByb3V0aW5lLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBY2NlcHQgYSBOVUxMIHBvaW50ZXIgYXMgd2luZG93IHRpdGxlLgoKCSogW3dpbmRvd3MvbWRpLmNdCglNRElDYXNjYWRlOiBza2lwIGljb25pYyB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgQ2FsY0NoaWxkU2Nyb2xsKCkuCgkKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJRml4ZWQgTXVsRGl2KCkgZm9yIGlsbGVnYWwgdmFsdWVzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBYIGVycm9yIGluIENyZWF0ZVdpbmRvd0V4KCkgd2hlbiBXTV9OQ0NBTENTSVpFIHJldHVybmVkCglhIHplcm8gd2lkdGggb3IgaGVpZ2h0LgoKU3VuIEp1biAxOCAyMjoyMjozMCBNRVQgRFNUIDE5OTUgIEZvbnMgQm90bWFuICAoYm90bWFuQGludGVyLm5sLm5ldCkKCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCAidW5pbml0YWxpemVkIiBtZXNzYWdlIHdoaWNoIC1XYWxsIGNvdWxkbnQgc2VlIHRvIGJlIG9rCglpbiBFRElUX1dyaXRlVGV4dC4KCgkqIFtpbmNsdWRlL2RlYnVnLmhdCglBZGRlZCBkZWZpbmUgZm9yIGV4dHJhIGNoZWNrcyBpbiBBUEkgZGVmaW5pdGlvbnMgZHVyaW5nIGRlYnVnZ2luZy4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUFkZGVkIG5ld2xpbmUgaW4gTkVfRml4dXBQcm9sb2dzIHRvIGF2b2lkIGxvbmcgbGluZXMuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUFkZGVkIGV4dHJhIHNhZmV0eSBjaGVjayBpbiBET1NfVmFsaWREcml2ZS4KCgkqIFttaXNjL2V4ZWMuY10KCUZpeGVkIGRlZmluaXRpb24gb2YgRXhpdFdpbmRvd3MuCgkKU3VuIEp1biAxOCAyMToxNjowOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJU29tZSBmaXhlcywgbW9zdGx5IGZvciBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IGFsc28gZm9yIHRleHQgc2VsZWN0aW9uCglhbmQgdGFiIHBvc3RpdGlvbnMuIEdlbmVyYWwgY2xlYW51cC4gTm90ZXBhZC5leGUgbm93IHdvcmtzLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglGaXg6IHRoZSBod25kIGZpZWxkIG9mIHRoZSBEUkFXSVRFTVNUUlVDVCBzaG91bGQgYWx3YXlzIGJlIHRoYXQgb2YKCXRoZSBjb21ibyBib3gsIG5vdCB0aGUgQ29tYm9MQm94IHRoYXQgYmVsb25ncyB0byBpdC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglIYW5kbGUgaXRlbUlEIGZpZWxkIGNvcnJlY3RseSB0aHJvdWdob3V0LgoKCSogW21lbW9yeS9sb2NhbC5jXQoJSW1wbGVtZW50ZWQgZmxhZyBMTUVNX1pFUk9JTklULgoJTG9jYWxSZUFsbG9jKCkgY291bGQgdHJhc2ggdGhlIGhlYXAuIEZpeGVkLgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9NYXRjaEZvbnQoKTogZG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IG5lZ2F0aXZlIHdpZHRocy4KCUZpeGVkIGEgc2VnZmF1bHQgaW4gRW51bUZvbnRzKCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglEcmF3VGV4dCgpOiBEVF9DQUxDUkVDVCBpbXBsaWVzIERUX05PQ0xJUC4KCgkqIFtvYmplY3RzL2RjdmFsdWVzLmNdCglNQUtFTE9ORyB3YXMgdXNlZCB3aXRoIGJhZCBwYXJhbWV0ZXJzIGluIERDX0dFVF9YX1kuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCURvbid0IHNob3cgdGhlIGRpYWxvZyBpZiBXU19WSVNJQkxFIGlzbid0IHNldCBpbiB0aGUgdGVtcGxhdGUuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglVVElMSVRZX2NvbnZlcnRBcmdzKCk6IE5ldmVyIHBhc3MgYW4gZXhwcmVzc2lvbiBjb250YWluaW5nICsrIGludG8gYQoJbWFjcm8uLi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2V0UGFyZW50KCkgc2hvdWxkIHVubGluayB0aGUgd2luZG93IGJlZm9yZSBjaGFuZ2luZyB0aGUgcGFyZW50LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRG9uJ3QgY2FsbCB0aW1lciBmdW5jdGlvbnMgdmlhIENhbGxXaW5kb3dQcm9jKCksIHNpbmNlIGl0IGNoZWNrcwoJd2hldGhlciBod25kPT0wIGFuZCBkb2VzIG5vdCBjYWxsIHRoZSBmdW5jdGlvbiBpbiB0aGF0IGNhc2UuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJSWdub3JlIGludGVycnVwdCAweDNELCBmb3IgVkJSVU4zMDAuRExMLgoKCSogW21pc2MvY29tbWRsZy5jXQoJRG9uJ3QgcmVseSBvbiB0aGUgaXRlbURhdGEgZmllbGQgb2YgdGhlIERSQVdJVEVNU1RSVUNUIHRvIGNvbnRhaW4gYQoJcG9pbnRlciB0byB0aGUgaXRlbSB0ZXh0LgoKCSogW2lmMTYzMi9yZWxheS5jXQoJRGlzYWJsZSBPTEUgYW5kIERERU1MIERMTHMgYnkgZGVmYXVsdCwgc2luY2UgdGhleSBjb250YWluIG5vdGhpbmcgYnV0CglzdHVicyBhbnl3YXkuIFNIRUxMLCBDT01NRExHIGFuZCBXSU44N0VNIGFyZSBsZWZ0IGVuYWJsZWQsIGFsdGhvdWdoCglzb21lIHByb2dyYW1zIG1heSB3b3JrIGJldHRlciB3aXRob3V0IHRoZW0uCgkKCSogW211bHRpbWVkaWEvKi5jXSBbaW5jbHVkZS9tdWx0aW1lZGlhLmhdIFtpbmNsdWRlL2RyaXZlci5oXQoJQmVndW4gY2xlYW5pbmcgdGhpbmdzIHVwIGEgbGl0dGxlLiBSZXBsYWNlZCBwcmludGZzIHdpdGggZHByaW50Zl8KCW1hY3JvcywgbWFkZSBmdW5jdGlvbnMgc3RhdGljIHdoZXJlIHBvc3NpYmxlLCBhbmQgc29tZSBvdGhlciBtaW5vcgoJY2hhbmdlcy4KClN1biBKdW4gMTEgMjM6MTk6MTAgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbZGVidWdnZXIvZGJnLnldW2RlYnVnZ2VyL2RiZy5sXQoJUmVtb3ZlZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBGSUxFX0lERU5USUZFUiwgYmVjYXVzZSBpdCBjYXVzZWQKCXByb2JsZW1zIHdpdGggeC88Zm9ybWF0PiBzdGF0ZW1lbnRzLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCVVzZSBTQ19FU1AgaW5zdGVhZCBvZiBTQ19FSVAgZm9yIHN0YWNrIGR1bXAuCgoJKiBbbWlzYy9jb21wb2JqLmNdW2lmMTYzMi9jb21wb2JqLnNwZWNdCglDb0J1aWxkVmVyc2lvbiwgQ29Jbml0aWFsaXplLCBDb1VuaW5pdGlhbGl6ZTogbmV3IGZ1bmN0aW9ucwoKCSogW21pc2Mvb2xlMi5jXVtpZjE2MzIvb2xlMi5zcGVjXVttaXNjL0ltYWtlZmlsZV1baW5jbHVkZS9vbGUyLmhdCglOZXcgZmlsZXMgb2xlMi5jLCBvbGUyLmgKCU9sZUJ1aWxkVmVyc2lvbiwgT2xlSW5pdGlhbGl6ZSwgT2xlVW5pbml0aWFsaXplOiBuZXcgZnVuY3Rpb25zCgoJKiBbaWYxNjMyL29sZTJkaXNwLnNwZWNdCglBZGRlZCBtaXNzaW5nIG9yZGluYWxzIGFib3ZlIDEwOQoKCSogW21pc2Mvb2xlMm5scy5jXVtpZjE2MzIvb2xlMm5scy5zcGVjXVtpbmNsdWRlL3dpbm5scy5oXQoJTmV3IGZpbGUgd2lubmxzLmgKCUdldExvY2FsZUluZm9BOiBuZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10KCUFkZGVkIEZpbmRFbnZpcm9ubWVudFN0cmluZyBhcyBzdHViCgoJKiBbbWlzYy9vbGVjbGkuY11baWYxNjMyL29sZWNsaS5zcGVjXQoJT2xlSXNEY01ldGE6IE5ldyBmdW5jdGlvbgoKCSogW29iamVjdHMvZm9udF1bbWlzYy9nZGkuc3BlY10KCUdldEtlcm5pbmdQYWlyczogbmV3IGZ1bmN0aW9uCgoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxFeGVjdXRlOiBJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBzdGFydGluZyBwcm9ncmFtcwoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglJbnNlcnRlZCBtaXNzaW5nIHJlbGF5IHRvIEdldENsaXBDdXJzb3IKClN1biBKdW4gMTEgMjA6MzQ6NDcgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4IGEgcHJvYmxlbSB3aXRoIHRoZSBsb2NhbCBoZWFwLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUZpeGVkIHdyb25nIGRlY2xhcmF0aW9ucyBvZiBDQVRDSEJVRiBhbmQgTFBDQVRDSEJVRi4KCQoJKiBbaW5jbHVkZS9tZGkuaF0gW3dpbmRvd3MvbWRpLmNdCglUaGlzIGNvZGUgc3RpbGwgYXNzdW1lZCBzZWdtZW50ZWQgYWRkcmVzcz09bGluZWFyIGFkZHJlc3MuIEZpeGVkLgoKCSogW2luY2x1ZGUvbXNkb3MuaF0gW21pc2MvZG9zX2ZzLmNdCglUaGUgZmlsZW1hc2sgZmllbGQgb2YgdGhlIGRvc2RpcmVudCBzdHJ1Y3R1cmUgY291bGQgYmUgb3ZlcnJ1bi4gRml4ZWQuCglJZiB5b3UgaGFkIGEgZmlsZSBjYWxsZWQgZm9vYmFyIGFuZCBhIGZpbGUgY2FsbGVkIGZvbywgdHJ5aW5nIHRvIAoJRmluZEZpbGUoZm9vKSBjb3VsZCBhY2NpZGVudGFsbHkgZmluZCBmaWxlIGZvb2JhciBpbnN0ZWFkLiBGaXhlZC4KCQoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBBbHdheXMgcmV0dXJuIHRoZSBmdWxsIHBhdGhuYW1lIGluIG9mcy0+c3pQYXRoTmFtZS4gVGhpcyAKCWFsc28gZml4ZXMgR2V0TW9kdWxlRmlsZW5hbWUoKS4KCVByZXZlbnQgX2xjbG9zZSgpIGZyb20gY2xvc2luZyBzdGRlcnIgb3Igc3Rkb3V0LgoKCSogW21pc2MvcHJvZmlsZS5jXQoJU2VhcmNoIGZvciAuaW5pIGZpbGVzIGluIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IG1vZHVsZSBhcyB3ZWxsLgoJKE5lZWRlZCBieSBMb3R1cyBPcmdhbml6ZXIuKQoKCSogW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9tb2R1bGUuY10KCVttZW1vcnkvbG9jYWwuY10KCUxvY2FsIGhlYXBzIGFyZSBub3cgaW5pdGlhbGl6ZWQgYnkgSW5pdFRhc2soKSBmb3IgZXhlY3V0YWJsZXMuIERMTHMKCWhhdmUgdG8gY2FsbCBMb2NhbEluaXQoKSB0aGVtc2VsdmVzLCBMb2NhbEluaXQoKSBoYXMgdG8gcHV0IHRoZQoJaGVhcCBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50IHdoZW4gY2FsbGVkIHdpdGggc3RhcnQ9PTAuIFdlIG5vIGxvbmdlcgoJYWxsb2NhdGUgdGhlIERHUk9VUCB3aXRoIDY0ayBvbiBzdGFydHVwLCBidXQgZ3JvdyB0aGUgbG9jYWwgaGVhcAoJaW4gTE9DQUxfR2V0QmxvY2soKSB3aGVuIG5lY2Vzc2FyeS4KCiAgICAgICAgKiBbbG9hZGVyL21vZHVsZS5jXQoJTG9hZExpYnJhcnkoKSBzaG91bGQgY2FsbCBMb2FkTW9kdWxlKCkgaW4gYWxsIGNhc2VzLCBldmVuIGlmIHRoZQoJRExMIGlzIGFscmVhZHkgbG9hZGVkLCB0byBlbnN1cmUgdGhhdCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGNvcnJlY3QuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglTb21lIGNoYW5nZXMgdG8gZnVuY3Rpb24gcHJvbG9nIGZpeHVwLiBEb2VzIGFueW9uZSBrbm93IGV4YWN0bHkgaG93Cgl0aGlzIGlzIHN1cHBvc2VkIHRvIHdvcms/IEkgYW0gb25seSBndWVzc2luZyBoZXJlLgoJSW4gTkVfSW5pdGlhbGl6ZURMTHMoKSwgaW5pdGlhbGl6ZSB0aGUgRExMcyBhIG1vZHVsZSByZWZlcnMgdG8gYmVmb3JlCgl0aGUgbW9kdWxlIGl0c2VsZi4KCQogICAgICAgICogW2xvYWRlci90YXNrLmNdCglJbml0aWFsaXplIGluc3RhbmNlIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgREdST1VQIGluIEluaXRUYXNrKCkuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglTb21lIGZpeGVzIGZvciBtb3ZlYWJsZSBibG9ja3MuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglBbGwgdGhlIElzQmFkKlBvaW50ZXIoKSBmdW5jdGlvbnMgcmV0dXJuZWQgZXhhY3RseSB0aGUgd3JvbmcgYm9vbGVhbgoJdmFsdWUgaW4gYWxsIGNhc2VzIQoJCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYW5vdGhlciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gZGVidWdnaW5nIG91dHB1dC4KCQoJKiBbb2JqZWN0cy9mb250LmNdCglTb21lIG1vcmUgcmVjb3ZlcnkgcG9zc2liaWxpdGllcyBmb3IgRk9OVF9NYXRjaEZvbnQoKSBpZiBhIHNwZWNpZmllZAoJZm9udCBkb2VzIG5vdCBleGlzdC4KCQoJKiBbd2luZG93cy93aW4uY10KCVRoZSBkaWFsb2cgY29kZSBtYXkgY2FsbCBDcmVhdGVXaW5kb3dFeCB3aXRoIGFuIGludGVnZXIgaW4gd2luZG93TmFtZS4KCVRoaXMgaGFwcGVucyBmb3Igc3RhdGljIGljb24gY29udHJvbHMgdGhhdCBleHBlY3QgYSByZXNvdXJjZSBJRCBhcwoJdGhlIHdpbmRvdyBuYW1lLiBDcmVhdGVXaW5kb3dFeCgpIHVzZWQgdG8gY3Jhc2guIEZpeGVkLgoJCgkqIFt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL3dpbi5jXQoJV2luZG93IGNsYXNzZXMgYXJlIG93bmVkIGJ5IG1vZHVsZXMsIG5vdCBpbnN0YW5jZXMuIENoYW5nZWQKCVJlZ2lzdGVyQ2xhc3MoKSwgVW5yZWdpc3RlckNsYXNzKCksIEdldENsYXNzSW5mbygpIGFuZCBDcmVhdGVXaW5kb3dFeCgpCglhY2NvcmRpbmdseS4KClNhdCBKdW4gMTAgMTY6MTA6NTMgMTk5NSAgT2xhZiBGbGViYmUgPG8uZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+CgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJICBjbG9jay5leGUgd2FzIGRpc3BsYXlpbmcgaW5jb3JyZWN0IHllYXIuCgpGcmkgSnVuIDkgMjA6MzY6NTYgMTk5NSAgVmljdG9yIFNjaG5laWRlciA8dGFpbG9yQGNybC5jb20+CgoJKiBbaW5jbHVkZS9jdXJzb3IuaF0gW3dpbmRvd3MvY3Vyc29yLmNdCglJbXBsZW1lbnRlZCBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3QoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEp1biAgNiAxMjoxMTo0MSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgYnVnIHdpdGggZHJhd2luZyBtdWx0aS1jb2x1bW4gbWVudXMgd2l0aCB2ZXJ0aWNhbCBzZXBhcmF0b3IuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCUZpeGVkIE5VTEwtcG9pbnRlciByZWZlcmVuY2UgYWZ0ZXIgcmVhZGxpbmUoKS4KCgkqIFtpZjE2MzIvd2lucHJvY3Muc3BlY10gW21pc2NlbXUvaW50MjEuY10gW21pc2NlbXUvaW50ZXJydXB0cy5jXQoJQWRkZWQgaW50ZXJydXB0IHZlY3RvciBlbXVsYXRpb24uIEFsbG93cyB0byByZXRyaWV2ZSBhbiBpbnRlcnJ1cHQKCXZlY3RvciBhbmQganVtcCB0byBpdCB3aXRob3V0IGNyYXNoaW5nLgoKCSogW2xvYWRlci9sZHQuY10KCU1vdmVkIGxkdC5jIHRvIG1lbW9yeSBkaXJlY3RvcnkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUltcGxlbWVudGVkIExvY2tDdXJyZW50VGFzaygpIGFuZCBHZXRJbnN0YW5jZURhdGEoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgU3RyZXRjaEJsdCgpIHRvIHVzZSB3cm9uZyBjb2xvcnMgd2hlbgoJc3RyZXRjaGluZyBhIG1vbm9jaHJvbWUgYml0bWFwIHRvIGEgY29sb3IgZGlzcGxheS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJRml4ZWQgYSBzZWdtZW50ZWQgcG9pbnRlciBidWcgaW4gQ3JlYXRlQml0bWFwSW5kaXJlY3QoKS4KCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gaGF2ZSBhcmd1bWVudHMgZm9yIHJlZ2lzdGVyIGZ1bmN0aW9uczsgdXNlZAoJYnkgaW50ZXJydXB0IHZlY3RvcnMgdG8gcmVtb3ZlIHRoZSBmbGFncyBmcm9tIHRoZSBzdGFjay4KCUdlbmVyYXRlIGEgbmV3IGZ1bmN0aW9uIENhbGxUbzMyX0xhcmdlU3RhY2soKSwgdGhhdCBhbGxvd3MgY2FsbGluZwoJYSAzMi1iaXQgZnVuY3Rpb24gdXNpbmcgdGhlIG9yaWdpbmFsIDMyLWJpdCBzdGFjaywgZm9yIGZ1bmN0aW9ucwoJdGhhdCBuZWVkIG1vcmUgdGhhdCA2NGsgb2Ygc3RhY2suCgpUdWUgTWF5IDMwIDEwOjI5OjU2IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bWFydGluQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbbWlzYy9zaGVsbC5jXQoJRG9FbnZpcm9ubWVudFN1YnN0OiBmaXhlZCBwcm90b3R5cGUKCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3BhbGV0dGUuY10KCVNldFN5c3RlbVBhbGV0dGVVc2U6IG5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2xvYWRlci9yZXNvdXJjZS5jXQoJRGlyZWN0UmVzQWxsb2M6IG5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCglTZXRLZXlib2FyZFN0YXRlOiBuZXcgZnVuY3Rpb24KCk1vbiBNYXkgMjkgMTI6NTg6MjggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbdG9vbHMvYnVpbGQuY10KICAgICAgICBQcmV2ZW50IGludGVycnVwdHMgZnJvbSBkZXN0cm95aW5nIHRoZSBhcmdzIGZvciBhIDMyIGJpdCBmdW5jdGlvbgogICAgICAgIGJ5IGxvYWRpbmcgdGhlIGNvcnJlY3QgdmFsdWUgaW50byAlZXNwIGRpcmVjdGx5IGFmdGVyICVzcy4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9tb2R1bGUuY10KCVRoZSBuZXcgaW5zdGFuY2UgbXVzdCBiZSBjcmVhdGVkIGVhcmxpZXIgaW4gTG9hZE1vZHVsZSgpLCBzbyB0aGF0CglmaXh1cHMgcmVmZXJlbmNpbmcgaXQgd2lsbCBiZSBoYW5kbGVkIGNvcnJlY3RseS4KICAgICAgICBJbml0aWFsaXplIHRoZSBsb2NhbCBoZWFwIGZvciBhIERHUk9VUCBpbiBORV9Mb2FkU2VnbWVudCgpLgoJCgkqIFtvYmplY3RzL2RpYi5jXQoJTGlrZSBSTEU4IGJpdG1hcHMsIFJMRTQgYml0bWFwcyBkb24ndCBhbHdheXMgZW5kIHdpdGggYSBwcm9wZXIgY29kZS4KCVRoaXMgdXNlZCB0byBjcmFzaCBXaW5lLiBGaXhlZC4KCiAgICAgICAgKiBbb2JqZWN0cy90ZXh0LmNdCglGaXggcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGRlYnVnZ2luZyBvdXRwdXQuCgkKCSogW21pc2MvY29tbWRsZy5jXQoJSGFuZGxlIHVzZXIgaW5wdXQgaW4gdGhlIGVkaXQgY29udHJvbCBiZXR0ZXIuIFNvbWUgYnVncyBmaXhlZC4KCQoJKiBbbWVtb3J5L2xvY2FsLmNdCglTdGFydGVkIGltcGxlbWVudGluZyBtb3ZlYWJsZSBibG9ja3MuIFRoaXMgaXMgdW5maW5pc2hlZCAoISksIGJ1dAoJYXQgbGVhc3QgaXQgZG9lcyBub3Qgc2VlbSB0byBicmVhayB0aGluZ3MuCgpXZWQgTWF5IDI0IDEzOjI2OjM2IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW2xvYWRlci9tb2R1bGUuY10KCUxvYWRNb2R1bGUoKTogRExMcyBvY2Nhc2lvbmFsbHkgaGF2ZSBhIGRhdGEgc2VnbWVudCwgYW5kIHRoZXkgd29yawoJbXVjaCBiZXR0ZXIgaWYgaXQgaXMgbG9hZGVkIDotKQoJTG9hZExpYnJhcnkoKTogcGFzcyBITU9EVUxFIGluc3RlYWQgb2YgSElOU1RBTkNFIHRvIE5FX0luaXRpYWxpemVETExzLgoJRmluZE1vZHVsZSgpOiBhbHNvIHN0cmlwIG9mZiB0aGUgbGFzdCBiYWNrc2xhc2ggb2YgdGhlIHBhdGhuYW1lcwoJKFdpbmhlbHAgdHJpZWQgdG8gbG9hZCBDOlxXSU5ET1dTXFNZU1RFTVxDT01NRExHLkRMTCkuCglHZXRNb2R1bGVIYW5kbGUoKToganVzdCBjYWxsIE1PRFVMRV9GaW5kTW9kdWxlLCBpdCBkb2VzIHRoZSBzYW1lIGpvYiwKCW9ubHkgYmV0dGVyLgoJCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUxvY2FsSW5pdCgpIHRoZSBoZWFwIG9mIGEgRExMIGluIE5FX0luaXRETEwuIChUaGlzIGlzIHByb2JhYmx5Cglub3QgcmVhbGx5IGNvcnJlY3QsIGl0IHNlZW1zIHRoYXQgYWxsIHByb2dyYW1zIGFuZCBETExzIHRyeSB0byBkbwoJdGhpcyB0aGVtc2VsdmVzLiBCdXQgdGhleSBwYXNzIHdlaXJkIHBhcmFtZXRlcnMuKQoJTkVfSW5pdGlhbGl6ZURMTHMgc2hvdWxkIGFsc28gY2FsbCBORV9Jbml0RExMIGZvciB0aGUgcGFzc2VkIGhNb2R1bGUuCgkKCSogW2xvYWRlci90YXNrLmNdIFttaXNjL3VzZXIuY10KCUZpbmlzaCBnbG9iYWwgaW5pdGlhbGl6YXRpb25zIGluIEluaXRUYXNrIGluc3RlYWQgb2YgSW5pdEFwcCwgb3IKCWFsbCB0aGUgRExMcyB3aWxsIGJlIGluaXRpYWxpemVkIGluIEluaXRUYXNrIHdpdGhvdXQgYW55IGF2YWlsYWJsZQoJd2luZG93IGNsYXNzZXMhCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXkgMjEgMTI6MzA6MzAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2RlYnVnZ2VyL2hhc2guY10gW2RlYnVnZ2VyL2luZm8uY10KCUFkZGVkIHN1cHBvcnQgZm9yIHN5bWJvbGljIHNlZ21lbnRlZCBhZGRyZXNzZXMuIEFkZCBzeW1ib2xzIGZvciBhbGwKCWJ1aWx0LWluIEFQSSBlbnRyeSBwb2ludHMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2RsbHMuaF0KCVJlbW92ZWQgZGxsX3RhYmxlIHN0cnVjdHVyZSwgYXMgd2Ugbm93IHVzZSB0aGUgYnVpbHQtaW4gbW9kdWxlCglzdHJ1Y3R1cmVzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbbG9hZGVyL21haW4uY10KCVJlbW92ZWQgd2luZXN0YXQgb3B0aW9uLCBhcyBpdCB3YXMgbm8gbG9uZ2VyIHZlcnkgbWVhbmluZ2Z1bC4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCU5ldyBtYWNybyBNQUtFX1NFR1BUUiB0aGF0IGNyZWF0ZXMgYSBzZWdtZW50ZWQgcG9pbnRlciB0byBhIGxvY2FsCgl2YXJpYWJsZSBvbiB0aGUgMzItYml0IHN0YWNrLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiBhbiBhcHBsaWNhdGlvbi4KCUltcGxlbWVudGVkIExvYWRNb2R1bGUoKSBhbmQgRnJlZU1vZHVsZSgpLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL3Rhc2suY10KCU1vdmVkIGluaXRpYWxpc2F0aW9uIG9mIGJ1aWx0LWluIERMTHMgdG8gSW5pdFRhc2soKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBkaXNjYXJkYWJsZSBibG9ja3MuCgoJKiBbbWlzYy9maWxlLmNdCglTZWFyY2ggcGF0aCBvZiBjdXJyZW50IGV4ZWN1dGFibGUgaW4gT3BlbkZpbGUoKS4KCUZpeGVkIGJ1ZyB3aXRoIHNlYXJjaGluZyBpbiBXaW5kb3dzIHBhdGguCgoJKiBbbWlzYy9sc3RyLmNdCglIYXJkLWNvZGVkIHRyYW5zbGF0aW9uIHRhYmxlcyBmb3IgQW5zaTwtPk9lbS4KCgkqIFttaXNjL3VzZXIuY10KCU1vdmVkIHNvbWUgZ2xvYmFsIGluaXRpYWxpemF0aW9ucyB0byBJbml0QXBwKCksIGJlY2F1c2UgdGhleSBuZWVkCglhIHRhc2sgY29udGV4dCB0byBiZSBwZXJmb3JtZWQuCgoJKiBbb2JqZWN0cy9kYy5jXQoJSGFuZGxlIFIyX0JMQUNLIGFuZCBSMl9XSElURSBzcGVjaWFsbHkgc28gdGhhdCB0aGV5IHdvcmsgY29ycmVjdGx5Cgl3aXRoIHBhbGV0dGUgZGlzcGxheXMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVN1cHByZXNzZWQgZ2VuZXJhdGlvbiBvZiB0aGUgQyBmaWxlIGZvciBETEwgc3BlY3MsIGJlY2F1c2UgaXQncyBubwoJbG9uZ2VyIG5lZWRlZC4gT3V0cHV0IGFsbCB0aGUgYXNzZW1ibHkgY29kZSBkaXJlY3RseSB0byBzdGRvdXQuCglTb21lIGNoYW5nZXMgdG8gaW50ZWdyYXRlIFdpbjMyIHN1cHBvcnQgZnJvbSBNYXJ0aW4gdm9uCUxvZXdpcy4gCgoJKiBbd2luZG93cy9tc2dib3guY10KCU1vdmVkIG1lc3NhZ2UgYm94IGNvZGUgZnJvbSBtaXNjLyB0byB3aW5kb3dzLy4KCk1vbiBNYXkgMTUgMjM6NDA6MDQgMTk5NSAgTWFydGluIEF5b3R0ZSAod2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EpCgoJKiBbbWlzYy9hdWRpby5jXSBbbWlzYy9tY2ljZGEuY10gW21pc2MvbWNpYW5pbS5jXSBbbWlzYy9taWRpLmNdCgkgIFttaXNjL21tYXV4LmNdIFttaXNjL21tc3lzdGVtLmNdCglNb2RpZnkgY29kZSAmIHVzZSBwb2ludGVycyBjb252ZXJzaW9uIG1hY3Jvcy4KCU1ha2UgY2RhdWRpbyAmIHdhdmUgZGV2aWNlcyB3b3JrIGFnYWluIChvbmx5IHVzaW5nIHNvbWUgYXBwbGV0cykuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglDaGFuZ2UgZ2V0YygpIHRvIGZnZXRjKCkgd2hlcmUgbmVlZGVkLgoKTW9uIE1heSAxNSAyMjoxMDo1NiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvSW1ha2VmaWxlXQoJYWRkZWQgZW50cmllcyBmb3IgdGhlIG5ldyBmaWxlcyBnZGkzMi5zcGVjLCBrZXJuZWwzMi5zcGVjLAoJdXNlcjMyLnNwZWMsIHNoZWxsMzIuc3BlYyBhbmQgd2lucHJvY3MzMi5zcGVjLgoKCSogW2lmMTYzMi9jb21tZGxnLnNwZWNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL3NoZWxsLnNwZWNdCgkgIFtpZjE2MzIvc3RvcmFnZS5zcGVjXVtpZjE2MzIvc3lzdGVtLnNwZWNdW2lmMTYzMi91c2VyLnNwZWNdCglDaG9vc2VGb250LCBSRVNFUlZFRDUsIEludGVybmFsRXh0cmFjdEljb246IE1hcmtlZCBhcyBzdHVicwoJRXh0cmFjdEFzc29jaWF0ZWRJY29uLCBEb0Vudmlyb25tZW50U3Vic3QsIER1bXBJY29uOgoJCXN0dWIgaW1wbGVtZW50YXRpb25zIHByb3ZpZGVkIAoJbWFya2VkIHN0b3JhZ2UuZGxsLHN0b3JlZ2Uuc3lzIGZ1bmN0aW9ucyBhcyBzdHVicwoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF0KCUFkZGVkIHN0cnVjdHVyZXMgV0lOMzJfYnVpbHRpbiBhbmQgIFdJTjMyX2Z1bmN0aW9uCgoJKiBbaW5jbHVkZS9wZWV4ZS5oXQoJUEVfSW1wb3J0X0RpcmVjdG9yeTogcmVuYW1lZCByZXNlcnZlZCBmaWVsZHMgdG8gCgkJVGltZURhdGUsIEZvcndhcmRlciwgVGh1bmtfTGlzdAoKCSogW2luY2x1ZGUvd2luZXJyb3IuaF0KCU5ldyBmaWxlLgoKCSogW2xvYWRlci9tYWluLmNdCgljYWxsZWQgUkVMQVkzMl9Jbml0CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCgl4bW1hcDogbWFwIEJTUyBhbm9ueW1vdXMKCWR1bXBfaW1wb3J0czogcmVuYW1lZCB0byBmaXh1cF9pbXBvcnRzLCBkbyB0aGUgZml4dXAgb2YgaW1wb3J0ZWQKCSAgICAgICAgICAgICAgc3ltYm9scwoJUEVfTG9hZEltYWdlOiBwYXNzIHJhdyBkYXRhIHNpemUgdG8geG1tYXAKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUR1bXBJY29uOiBuZXcgZnVuY3Rpb24KCgkqIFttaXNjL2tlcm5lbDMyLmNdCglOZXcgZmlsZS4KCgkqIFttaXNjL21haW4uY10KCW1ha2Ugc3Rkb3V0IGFuZCBzdGRlcnIgdW5idWZmZXJlZAoKCSogW21pc2Mvc2hlbGwuY10KCURvRW52aXJvbm1lbnRTdWJzdDogbmV3IGZ1bmN0aW9uCgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX01hdGNoRm9udDogdHJ5IG9ibGlxdWUgaWYgdGhlcmUgaXMgbm8gaXRhbGljCgoJKiBbcmMvSW1ha2VmaWxlXVtyYy9wYXJzZXIubF0KCXl5d3JhcDogbmV3IGZ1bmN0aW9uCglEb24ndCBsaW5rIHdpdGggbGliZmwuYSBvbiBMaW51eAoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBrZXl3b3JkcyBzdGRjYWxsLCBzdWJzeXN0ZW0sIGJhc2UKCUdlbmVyYXRlRm9yV2luMzI6IG5ldyBmdW5jdGlvbgoJQnVpbGRTcGVjRmlsZXM6IGNhbGwgR2VuZXJhdGVGb3JXaW4zMiBpZiBzdWJzeXN0ZW0gaXMgd2luMzIKCk1vbiBNYXkgMTUgMTA6Mzg6MTQgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL2NvbWJvLmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJTWlub3IgZml4ZXMuCgkKCSogW21pc2MvbWVzc2FnZS5jXSBbbWlzYy9tYWluLmNdIFtyYy9zeXNyZXMqLnJjXSBbaW5jbHVkZS90ZXh0cy5oXQoJUmV3cm90ZSBtZXNzYWdlIGJveCBoYW5kbGluZy4KCQoJKiBbd2luZG93cy9kaWFsb2cuY10KCURpYWxvZ3Mgc2hvdWxkIGJlIGludmlzaWJsZSB1bnRpbCBhZnRlciBXTV9JTklURElBTE9HIGlzIHNlZW50LgoJRG9uJ3Qgc3dpdGNoIHRvIGludmlzaWJsZSBkaWFsb2cgaXRlbXMgb24gYSBUQUIga2V5cHJlc3MuCgkKCSogW3dpbmRvd3MvbWRpLmNdCglTZW5kIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBNRElSZXN0b3JlQ2hpbGQoKS4KCQoJKiBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZWQgdHlwbyAoJiYgLT4gJikuCgkKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbaWYxNjMyL3VzZXIuc3BlY10KCUltcGxlbWVudGVkIFBvc3RBcHBNZXNzYWdlKCkuCgkKCSogW3dpbmRvd3MvZXZlbnQuY10KCVNldENhcHR1cmUoMCkgc2hvdWxkIGFjdCBsaWtlIFJlbGVhc2VDYXB0dXJlKCkuCgpUdWUgTWF5ICA5IDExOjU1OjUyIDE5OTUgICAgIEVkZGllIEMuIERvc3QgICAgICAgICAgICAgKGVjZEBkcmVzc2xlci5kZSkKCgkqIFtJbWFrZWZpbGVdCglDaGFuZ2VkIENERUJVR0ZMQUdTIGZvciBzeXN0ZW1zIHJ1bm5pbmcgX19FTEZfXyAodGVtcG9yYXJpbHkpCglBZGRlZCBBU0ZMQUdTIHRvIGV4cG9ydGVkIHZhcmlhYmxlcy4KCgkqIFtkZWJ1Z2dlci9yZWFkbGluZS9JbWFrZWZpbGVdCglNb3ZlZCBkZWZpbmVzIGZvciBsaWJyZWFkbGluZSBmcm9tIERFRklORVMgdG8gRVhUUkFfREVGSU5FUwoKCSogW21lbW9yeS9sb2NhbC5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJQWRkZWQgc29tZSBtb3JlIGRlYnVnZ2luZyBvdXRwdXRzLgoKTW9uIE1heSAgOCAwMDo1NToyNyBNRVQgRFNUIDE5OTUJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglGaXhlZCBhICJGSVhNRSIgY29uY2VybmluZyBub3J3ZWdpYW4gdHJhbnNsYXRpb24uCgpTdW4gTWF5ICA3IDIzOjI1OjIzIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogWyovKl0KICAgICAgICBSZW1vdmVkIHdhcm5pbmdzIGluIGEgY291cGxlIG9mIGZpbGVzIGFuZCBkZWxldGVkIHNvbWUgb2Jzb2xldGUgY29kZS4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQogICAgICAgIENsZWFudXAsIHNwZWVkIGltcHJvdmVtZW50cyAmIGxvdHMgb2YgYnVnIGZpeGVzLgoKICAgICAgICAqIFtjb250cm9scy9jb21iby5jXQoJTW9zdGx5IHJld3JpdHRlbi4gVGhpcyBpcyBzdGlsbCB2ZXJ5IGJ1Z2d5LCBidXQgbm90IHF1aXRlIGFzIGJhZCBhcyAKCWJlZm9yZS4KCiAgICAgICAgKiBbaW5jbHVkZS9jb21tZGxnLmhdIFttaXNjL2NvbW1kbGcuY10KICAgICAgICBSZW1vdmVkIHRoZSBuZWVkIGZvciBzeXNyZXMuZGxsLiBTbWFsbCBidWcgZml4ZXMuCgkKICAgICAgICAqIFtvYmplY3RzL29lbWJpdG1hcC5jXSBbaW5jbHVkZS9iaXRtYXBzLzxtYW55Pl0gW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgICAgW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvbWFpbi5jXSBbcmMvc3lzcmVzKi5yY10KICAgICAgICBSZW1vdmVkIHN5c3Jlcy5kbGwgYW5kIHJlcGxhY2VkIHRoZSByZW1haW5pbmcgYml0bWFwcy9pY29ucyB3aXRoCiAgICAgICAgWFBNIGVxdWl2YWxlbnRzLgoKICAgICAgICAqIFttaXNjL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFttaXNjL21haW4uY10KICAgICAgICAgIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KICAgICAgICAiQWJvdXQgV2luZS4uLiIgbm93IGJyaW5ncyB1cCBhIHN0YW5kYXJkIFNoZWxsQWJvdXQoKSB3aW5kb3cgd2l0aAogICAgICAgIHRoZSBXaW5lIGljb24gYW5kIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4KCQoJKiBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgU2hlbGxBYm91dCgpL0Fib3V0RGlhbG9nUHJvYygpIHRvIHNob3cgdGhlIHJpZ2h0IGljb24uCgoJKiBbd2luZG93cy9ldmVudC5jXQoJU21hbGwgaGFjayBmb3Igbm9uLWFscGhhbnVtZXJpYyBrZXlzOiBEb250J3Qgc2VuZCB0aGUgYXNjaWkgdmFsdWUgaW4KCXRoZSBXTV9LRVlET1dOIG1lc3NhZ2UsIGJ1dCBzb21lIHVudXNlZCBjb2RlIGluc3RlYWQuIFNob3VsZCBiZSBkb25lCglwcm9wZXJseSBieSBzZW5kaW5nIGRpZmZlcmVudCBjb2RlcyBmb3IgZWFjaCBrZXkuIFRoZSBlZGl0IGNvbnRyb2wKCXVzZWQgdG8gZ2V0IGEgVktfREVMRVRFIG1lc3NhZ2UgZWFjaCB0aW1lIHRoZSB1c2VyIHR5cGVkICcuJy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglSZW1vdmVkIGEgY2hlY2sgZm9yIENTX0dMT0JBTENMQVNTIGluIENMQVNTX0ZpbmRDbGFzc0J5TmFtZSgpLgoJVGhpcyB1c2VkIHRvIGJlIG5vIHByb2JsZW0sIGJ1dCBicmVha3MgUmVzb3VyY2UgV29ya3Nob3AgaW4gOTUwNDAzLgoJCgkqIFtvYmplY3RzL2RpYi5jXQoJTmV3IGRpYWdub3N0aWMgZm9yIGEgYnVnIEkndmUgYmVlbiBlbmNvdW50ZXJpbmcuIElmIGl0IHNob3dzIHVwLAoJcGxlYXNlIHJlcG9ydCBpdC4KClN1biBNYXkgIDcgMjM6MTE6MTggRURUIDE5OTUgIFdpbGxpYW0gTWFncm8gKHdtYWdyb0B0Yy5jb3JuZWxsLmVkdSkKCgkqIFtvYmplY3RzL2NvbG9yLmNdCglIYW5kbGUgc2l0dWF0aW9uIHdoZW4gJ2RjJyBleGlzdHMsIGJ1dCBwYWxldHRlIG1hcHBpbmcKCWRvZXMgbm90LiAgKEZpeGVzIGtpZHBpeDIgZGVtby4pCgpTdW4gTWF5ICA3IDAzOjMyOjAwIDE5OTUgIENoYXJsZXMgTS4gSGFubnVtICAobXljcm9mdEBtaXQuZWR1KQoKCSogW2xvYWRlci9sZHQuY10KCUxEVF9QcmludDogT25seSBzaG93IHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IHRoZSBrZXJuZWwKCXJldHVybmVkLiBNYWtlIHRoaXMgd29yayBmb3IgTmV0QlNELgoKRnJpIE1heSAgNSAwMjo1MzoyNiAxOTk1ICBDaGFybGVzIE0uIEhhbm51bSAgKG15Y3JvZnRAbWl0LmVkdSkKCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2luY2x1ZGUvd2luZS5oXSBbbG9hZGVyL3NpZ25hbC5jXQoJTW9kaWZ5IGNzIGFuZCBkcyBzZWxlY3RvciB2YWx1ZXMgZm9yIE5ldEJTRC1jdXJyZW50LgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCgkkc3AsICRlc3A6IFVzZSBSTl9FU1BfQVRfU0lHTkFMIHJhdGhlciB0aGFuIFJOX0VTUC4KCgkqIFtkZWJ1Z2dlci9yZWdwb3MuaF0KCU1vZGlmeSBzaWdjb250ZXh0IGZvcm1hdCBmb3IgTmV0QlNELWN1cnJlbnQuCglTQ19FU1A6IFVzZSBSTl9FU1BfQVRfU0lHTkFMIHJhdGhlciB0aGFuIFJOX0VTUC4KCgkqIFtpbmNsdWRlL2xkdC5oXQoJU0VMRUNUT1JfVE9fRU5UUlk6IEV4cGxpY2l0bHkgY2xlYXIgdGhlIHRvcCBoYWxmIG9mIHRoZSBzZWxlY3RvcgoJdmFsdWUsIHNpbmNlIG9ubHkgMTYgYml0cyBvZiBpdCBtYXkgaGF2ZSBiZWVuIHNhdmVkLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglTZXQgc3RydWN0dXJlIHBhY2tpbmcgd2l0aCBgI3ByYWdtYSBwYWNrJyB0byBhY2NvbW9kYXRlCglvdGhlci9vbGRlciBjb21waWxlcnMuCgpUdWUgTWF5ICAyIDE4OjE1OjAxIDE5OTUgUGFhbCBCZXllciAoYmV5ZXJAaWR0LnVuaXQubm8pCgkKCSogW21pc2MvY29tbWRsZy5jXQoJRml4ZWQgcGF0aC1uYW1lcyBzbyB3aGVuIGNoYW5naW5nIGRpcmVjdG9yeSB0aGUgbGlzdGJveGVzCgljaGFuZ2VzIHRvby4KCQoJKiBbZGVidWdnZXIvZGJnLnkgZGVidWdnZXIvZGVidWcubCB3aW5lLmluaV0KCUFkZGVkIFN5bWJvbFRhYmxlRmlsZSB0byB3aW5lLmluaSBzbyBzeW1ib2xzIGNhbiBiZSByZWFkCgl3aXRob3V0IHN0YW5kaW5nIGluIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB3aW5lLnN5bS4KCUFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byBzcGVjaWZ5IGZ1bGwgbmFtZSBvZiB3aW5lLnN5bSBmcm9tCgl0aGUgZGVidWdnZXIgcHJvbXB0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgQXByIDI5IDIwOjQyOjAxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUZpeGVkIHBhaW50aW5nIG9mIFNTXypGUkFNRSBjb250cm9scy4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVBhc3MgdGhlIHdpbmRvdyBpbnN0YW5jZSBhcyBEUyB0byB0aGUgMTYtYml0IHdpbmRvdyBwcm9jZWR1cmUuCglSZXdyb3RlIENhdGNoKCkgYW5kIFRocm93KCkgdG8gbWFrZSB0aGVtIHdvcmsgd2l0aCBtdWx0aXBsZSB0YXNrcy4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJTmV3IGZ1bmN0aW9uIE1BSU5fSW5pdCgpIHRvIHBlcmZvcm0gaW5pdGlhbGl6YXRpb25zIGJlZm9yZSB0aGUKCWZpcnN0IHRhc2sgaXMgc3RhcnRlZCBpbnN0ZWFkIG9mIGRvaW5nIHRoZW0gaW4gSW5pdEFwcCgpLgoJVGVtcG9yYXJ5IGhhY2sgdG8gY29tbWFuZC1saW5lIHBhcnNpbmcgdG8gbG9hZCBvbmUgcHJvZ3JhbSBwZXIKCWNvbW1hbmQtbGluZSBhcmd1bWVudCwgdG8gbWFrZSB0ZXN0aW5nIHRhc2stc3dpdGNoaW5nIGVhc2llci4KCgkqIFtsb2FkZXIvKi5jXQoJUmVpbXBsZW1lbnRlZCBtb2R1bGVzIHRvIHVzZSBhIFdpbmRvd3MtY29tcGF0aWJsZSBsYXlvdXQgYW5kIHRvCglhbGxvdyBtdWx0aXBsZSB0YXNrcyBhbmQgbXVsdGlwbGUgbW9kdWxlIGluc3RhbmNlcy4gTm90IHJlYWxseQoJZmluaXNoZWQgeWV0LgoKCSogW2xvYWRlci90YXNrLmNdIFttaXNjL2V4ZWMuY10KCVJlaW1wbGVtZW50ZWQgdGFza3MgdG8gdXNlIGEgY29tbW9uIGFkZHJlc3Mgc3BhY2UsIGFuZCBpbXBsZW1lbnRlZAoJcHJlbGltaW5hcnkgdGFzay1zd2l0Y2hpbmcgY2FwYWJpbGl0aWVzLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIGJ1ZyBpbiBHbG9iYWxOZXh0KCkuCgoJKiBbbWlzYy9tYWluLmNdCglVcGRhdGVkIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gTGV0IG1lIGtub3cgaWYgSSBmb3Jnb3Qgc29tZW9uZS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglVc2Ugb25lIERUQSBwZXIgdGFzayBpbnN0ZWFkIG9mIGEgZ2xvYmFsIG9uZS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYnVnIGluIEJpdEJsdCgpIHRoYXQgY291bGQgY2F1c2UgQmFkTWF0Y2ggZXJyb3JzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBuZXcgZnVuY3Rpb24gdHlwZSAnc3R1YicsIHRoYXQgbWFrZXMgcG9zc2libGUgdG8gZXhwb3J0IGFuCgl1bmltcGxlbWVudGVkIGZ1bmN0aW9uIGJ5IG5hbWUgYXMgd2VsbCBhcyBieSBvcmRpbmFsLiBUaGlzIHdpbGwKCWF2b2lkIGxvYWRpbmcgZXJyb3JzIGZvciB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucy4KCUdlbmVyYXRlIGFuIGluLW1lbW9yeSBtb2R1bGUgbGF5b3V0IGZvciBidWlsdC1pbiBETExzIHNvIHRoYXQgdGhlCglzYW1lIGNvZGUgY2FuIGJlIHVzZWQgZm9yIGJ1aWx0LWluIGFuZCBsb2FkZWQgbW9kdWxlcy4KCUNoYW5nZWQgcmVsYXkgY29kZSB0byBtYWtlIGl0IHVubmVjZXNzYXJ5IHRvIHNhdmUgdGhlIHZhbHVlIG9mIHRoZQoJQlAgcmVnaXN0ZXIuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBtdWx0aXBsZSBtZXNzYWdlIHF1ZXVlcyBhbmQgcHJlbGltaW5hcnkgdGFzay1zd2l0Y2hpbmcKCWNhcGFiaWxpdGllcy4gSW50ZXItdGFzayBTZW5kTWVzc2FnZSgpIGNhbGxzIGFyZSBub3QgaW1wbGVtZW50ZWQKCXlldCBhbmQgd2lsbCBwcm9iYWJseSBjYXVzZSBjcmFzaGVzIGlmIHVzZWQuCgoJKiBbd2luZG93cy9wcm9wZXJ0eS5jXQoJUmVpbXBsZW1lbnRlZCBwcm9wZXJ0aWVzIGFuZCBhbGxvY2F0ZSB0aGVtIG9uIHRoZSBVU0VSIGhlYXAuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIGJ1ZyBpbiBTZXRXaW5kb3dXb3JkKCkuCglSZWltcGxlbWVudGVkIEVudW1XaW5kb3dzKCkgYW5kIEVudW1UYXNrV2luZG93cygpLgoKVHVlIEFwciAxOCAwOTo0ODozOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFttaXNjL21haW4uY10KCUdldFN5c3RlbVBhcmFtZXRlcnNJbmZvKCk6IEFkZGl0aW9uYWwgYWN0aW9uIFNQSV9HRVRJQ09OVElUTEVGT05ULgoJCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJlbW92ZWQgdGhlIGNoZWNrIGZvciBORV9TRUdGTEFHU19FWEVDVVRFT05MWSwgc2luY2UgaXQgYnJva2UKCWNvbnRyb2wuZXhlLgoJRml4ZWQgaWNvbiBsb2FkaW5nLgoJCgkqIFtvYmplY3RzL2ZvbnQuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgYSBidWcgaW4gSW5pdEZvbnRzTGlzdCgpIGFuZCB3b3JrZWQgb24gdGhlIEVudW1Gb250cygpCglmdW5jdGlvbnMgdG8gbWFrZSB0aGVtIGNvbXByZWhlbnNpYmxlLgoKICAgICAgICAqIFtjb250cm9scy9idXR0b24uY10KCUZpeGVkIG15IHByZXZpb3VzIHBhdGNoIHRvIGhhbmRsZSBMQlVUVE9OVVAgbWVzc2FnZXMuCgpGcmkgQXByIDE0IDExOjQxOjI4IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbbWlzYy9uZXR3b3JrLmMsIG1pc2MvZG9zX2ZzLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgV05ldEdldENvbm5lY3Rpb24uICBBbGwgdGhhdCBpcyBjdXJyZW50bHkKICAgICAgICBzdXBwb3J0ZWQgYXJlIGRyaXZlcywgZm9yIHdoaWNoIHRoZSByZW1vdGUgbmFtZSBpcyBzaW1wbHkKICAgICAgICB0aGUgcmVkaXJlY3RlZCBVTklYIGRpcmVjdG9yeSBuYW1lLgoKICAgICAgICAqIFttaXNjZW11L2ludDI/LmNdCiAgICAgICAgTW9yZSBkcml2ZSBudW1iZXIgdmFsaWRpdHkgY2hlY2tpbmcuCgpXZWQgQXByIDEyIDExOjI4OjM3IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCglPb3BzLCBteSBwcmV2aW91cyBjaGFuZ2UgdG8gTGlzdEJveERpcmVjdG9yeSBicm9rZSB0aGUgQm9ybGFuZAoJZmlsZSBvcGVuIGRpYWxvZy4gRml4ZWQuCgpNb24gQXByIDEwIDIzOjE3OjEyIDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9vbGUybmxzLnNwZWNdIFttaXNjL29sZTJubHMuY10gW21pc2MvSW1ha2VmaWxlXQoJTmV3IGZpbGUgb2xlMm5scy5jLiBBZGRlZCBzdHVicyBmb3IgR2V0VXNlckRlZmF1bHRMQ0lELCAKCUdldFN5c3RlbURlZmF1bHRMQ0lELCBHZXRVc2VyRGVmYXVsdExhbmdJRCwgR2V0U3lzdGVtRGVmYXVsdExhbmdJRC4KCk1vbiBBcHIgMTAgMTA6MDU6MTggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2xvY2FsLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdsb2JhbFJlQWxsb2MoKTogSWYgR01FTV9NT0RJRlkgaXMgc2V0LCBkb24ndCByZXNpemUgdGhlIGJsb2NrLgoJTG9jYWxSZUFsbG9jKCk6IFNhbWUgZm9yIExNRU1fTU9ESUZZLgoJCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgYSBidWcgaW4gTGlzdEJveERpcmVjdG9yeSB0aGF0IHByZXZlbnRlZCBjb21tZGxnIGZyb20gd29ya2luZy4KCUNoZWNrIGZvciBlcnJvcnMgaW4gc29tZSBtb3JlIHBsYWNlcy4KCiAgICAgICAgKiBbaWYxNjMyL2dkaS5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10KCTE2IGJpdCBjYWxsYmFjayBmdW5jdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCBhcyBzZWdwdHJzLgoJCgkqIFtpbmNsdWRlL2RsbHMuaF0gW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL3NlbGVjdG9yLmNdCglbbG9hZGVyL2xpYnJhcnkuY10KCVByZXZlbnQgYSBETEwgZnJvbSBiZWluZyBpbml0aWFsaXplZCB0d2ljZSAoQm9ybGFuZHMgUmVzb3VyY2UKCVdvcmtzaG9wIHVzZWQgdG8gZG8gdGhpcykuCglQcm92aWRlIGFuIGFkZGl0aW9uYWwgZmxhZyBmb3IgZWFjaCB3X2ZpbGUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlcgoJaXQncyBhbiBFWEUgb3IgYSBETEwsIGZvciBjb21iaW5hdGlvbnMgbGlrZSBwYnJ1c2guZXhlLy5kbGwuCgkKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSGFuZGxlIExCVVRUT05VUCBtZXNzYWdlcyBldmVuIGlmIHRoZSBidXR0b24gbm8gbG9uZ2VyIGhhcyB0aGUKCWNhcHR1cmUgKGZvciBXaW5IZWxwKS4KCQoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJRkFSUFJPQyBpcyBub3cgYSBzZWdwdHIgZm9yIHRoZSBlbXVsYXRvciBhbmQgYSBmdW5jdGlvbgoJcG9pbnRlciBmb3IgdGhlIGxpYnJhcnkuCgkKCSogW21pc2MvY29tbWRsZy5jXSBbbWlzYy9jb21tZGxnLmhdCglDbGVhbmVkIHRoZSBmaWxlIGRpYWxvZ3MgdXAgYSBsaXR0bGUuIFRoZXkgbm93IHdvcmsgcmVhc29uYWJseSB3ZWxsLAoJYWx0aG91Z2ggdGhlcmUgYXJlIHN0aWxsIHNvbWUgcHJvYmxlbXMgKGUuZy4gZmlsZXMgYXJlIGluaXRpYWxseQogICAgICAgIGludmlzaWJsZSkuCgoJKiBbd2luZG93cy9jbGFzcy5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2V0Q2xhc3NJbmZvKCkgbXVzdCB0YWtlIGEgc2VncHRyLCBhcyBpdCBjaGVja3Mgd2hldGhlciB0aGUKCWhpZ2h3b3JkIGlzIHplcm8uCglHZXRDbGFzc05hbWUoKSBjYWxsZWQgdGhlIHdyb25nIGF0b20gZnVuY3Rpb24uIE5vIHN1cnByaXNlIGl0IGRpZG4ndAogICAgICAgIGZpbmQgYW55dGhpbmcuCgoJKiBbbWlzYy9sc3RyLmNdCglBbnNpVG9PZW0oKSBhbmQgT2VtVG9BbnNpKCkgZGlkbid0IHRlcm1pbmF0ZSB0aGUgc3RyaW5ncy4gRml4ZWQuCiAgICAgICAgUmVtb3ZlZCBzb21lIHdhcm5pbmdzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL2RkZW1sLnNwZWNdIFtpbmNsdWRlL2RsbHMuaF0KCU5ldyBzcGVjIGZpbGUgZm9yIHRoZSAzLjEgRERFTUwgRERMLiAKCgkqIFtjb250cm9scy9tZW51LmNdCglTbWFsbCBmaXggdG8gQ2hhbmdlTWVudSAtIG1hc2sgb3V0IHRoZSBvYnNvbGV0ZSBmbGFncwoJKE1GX0FQUEVORCA9PSBNRl9PV05FUkRSQVcsIHRoaXMgbGVkIHRvIHByb2JsZW1zKS4gSXQgYWxzbyBoYWQKCXByb2JsZW1zIHdpdGggdGhlIE1GX0JZUE9TSVRJT04gZmxhZy4KCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCiAgICAgICAgU2VuZE1lc3NhZ2UoKTogY2FsbCB0aGUgV0hfQ0FMTFdORFBST0MgaG9vayBmdW5jdGlvbi4gVGhpcyBpcyByYXRoZXIKICAgICAgICB1Z2x5LCBJJ20gYWZyYWlkLiBXaW5kb3dzIHByb2JhYmx5IHBhc3NlcyBhIHBvaW50ZXIgdG8gdGhlIDE2IGJpdAogICAgICAgIHN0YWNrIGZvciBzcGVlZCByZWFzb25zLgoJCiAgICAgICAgKiBbd2luZG93cy9ob29rLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICBTZXQvSG9va1dpbmRvd3NIb29rKCkgc2hvdWxkbid0IGp1c3QgY2FsbCB0aGVpciAqRXggY291bnRlcnBhcnRzLCBhcwogICAgICAgIHRoZXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWNzLgogICAgICAgIE1TIEhlYXJ0cyBub3cgd29ya3Mgc29tZXdoYXQsIGlmIHlvdSBkaXNhYmxlIHRoZSBuZXcgYnVpbHRpbiBEREVNTC4KICAgICAgICBUaGUgZ3JhcGhpY3MgYXJlIGNvbXBsZXRlbHkgbWVzc2VkIHVwLCB0aG91Z2guCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBcHIgIDIgMTg6MzE6MTIgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW0NvbmZpZ3VyZV0gW2lmMTYzMi9JbWFrZWZpbGVdCglSZW1vdmVkIG5ldyBidWlsZCBhbmQgc2hvcnQgbmFtZXMgb3B0aW9ucy4KCgkqIFtpZjE2MzIvKi5jXSBbdG9vbHMvYnVpbGQuY10KCUltcGxlbWVudGVkIGNvbXBpbGVkIGNhbGwtYmFjayBmdW5jdGlvbnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZTsKCWFsbCB0aGUgcmVsYXkgY29kZSBpcyBub3cgZG9uZSBpbiBhc3NlbWJseSBjb2RlIGdlbmVyYXRlZCBieSB0aGUKCWJ1aWxkIHByb2dyYW0uCglSZWxheSBjb2RlIGlzIG5vIGxvbmdlciBkZXBlbmRlbnQgb24gYmVpbmcgbG9hZGVkIGJlbG93IDY0Sy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIG1lbW9yeSBsZWFrIGluIExvYWRTdHJpbmcoKS4gQSBmaXggd2lsbCBhbHNvIGJlIG5lZWRlZCBmb3IKCW90aGVyIHJlc291cmNlcy4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBnbG9iYWwgaGVhcCBhcmVuYXMsIHNvIHdlIGNhbiBzdG9yZSBpbmZvcm1hdGlvbnMgYWJvdXQKCWdsb2JhbCBibG9ja3MsIGxpa2UgbG9jayBjb3VudHMgb3Igb3duZXIgaGFuZGxlLgoJSW1wbGVtZW50ZWQgRmFyR2V0T3duZXIoKSBhbmQgRmFyU2V0T3duZXIoKS4KCUltcGxlbWVudGVkIGdsb2JhbCBoZWFwIFRPT0xIRUxQIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUJ1ZyBmaXg6IGl0IHdhcyBub3QgcG9zc2libGUgdG8gcmUtdXNlIGEgZnJlZSBzZWxlY3Rvci4KClN1biBBcHIgMiAwMTozNDo1MiAxOTk1IENvbnN0YW50aW5lIFNhcHVudHpha2lzICAoY3NhcHVudHpAbWl0LmVkdSkKCgkqICBbY29udHJvbHMvbGlzdGJveC5jXQoJTWFqb3Igd29yayBvbiBsaXN0Ym94IGNvZGUKICAgICAgICAgLSBNYW55IGJ1Z3MgZml4ZWQgKHN0aWxsIG1hbnkgYnVncykKICAgICAgICAgLSBNb3JlIG1lc3NhZ2VzIHN1cHBvcnRlZAogICAgICAgICAtIENvZGUgc2ltcGxpZmllZAoKRnJpIE1hciAzMSAwMzoyNzoxNiBFU1QgMTk5NSBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTG90cyBvZiBidWcgZml4ZXMgcmVsYXRlZCB0byBkaWFwcGVhcmluZyB0ZXh0LCBsb3N0IGNhcmV0cywKCWhpZ2hsaWdodGluZywgc2VnbWVudGF0aW9uIGZhdWx0cywgb2NjdXJhbmNlIG9mIHJhbmRvbQoJY2hhcmFjdGVycywgaW5zZXJ0aW9uIG9mIGNoYXJhY3RlcnMgb3ZlciBzZWxlY3Rpb24sIG1pc3BsYWNlZAoJY2FyZXQgbG9jYXRpb24sIGRpc3BsYXkgY29ycnVwdGlvbiwgZW5kIG9mIGxpbmUgYmVoYXZpb3IsIGV0Yy4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglFRElUIGNsYXNzIGRvZXNuJ3Qgd2FudCB0byB1c2UgQ1NfUEFSRU5UREMgZmxhZy4KClRodSBNYXIgMzAgMjA6NTg6MjUgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCgkgIEZpeHVwRnVuY3Rpb25Qcm9sb2dzKCkgc2hvdWxkIGFsc28gaGFuZGxlIG11bHRpcGxlIGRhdGEgbW9kdWxlcy4KCSAgKHRoaXMgYnVnIG9ubHkgYmVjYW1lIHZpc2libGUgYmVjYXVzZSBNYWtlUHJvY0luc3RhbmNlKCkgd2FzIGZpeGVkCgkgIGluIDk1MDMxOSkKCQoJKiBbbWlzYy9kb3Nmcy5jXQoJICBTaW1wbGlmaWVkIERPU19TaW1wbGlmeVBhdGguCgkgIFNtYWxsIGZpeCB0byBET1Nfb3BlbmRpciB0byByZXVzZSBhbiBlbnRyeSBpZiBhbiBvcGVuIGRpcmVjdG9yeQoJICBpcyBvcGVuZWQgYWdhaW4sIHRvIHByZXZlbnQgInRvbyBtYW55IG9wZW4gZGlyZWN0b3JpZXMiIG1lc3NhZ2VzLgoKVGh1IE1hciAzMCAxMjowNTowNSAxOTk1IE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9jb21wb2JqLnNwZWNdW2luY2x1ZGUvY29tcG9iai5oXVttaXNjL2NvbXBvYmouY10KCUNvRGlzY29ubmVjdE9iamVjdDogbmV3IHN0dWIgZnVuY3Rpb24KCgkqIFtpbmNsdWRlL21zZG9zLmhdCglmaXggRE9TVkVSU0lPTgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTkVfRml4dXBTZWdtZW50OiBCZSBtb3JlIGdlbmVyb3VzIG9uIGFkZGl0aXZlIGZpeHVwcwoKCSogW2lmMTYzMi91c2VyLnNwZWNdW21pc2MvbmV0d29yay5jXQoJQWRkIG1vcmUgV05ldCogc3R1YnMKCldlZCBNYXIgMjkgMTE6NDc6MjIgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCgkgIERsZ0Rpckxpc3QoKTogc2VuZCBzZWdwdHIgaW5zdGVhZCBvZiBsaW5lYXIgcG9pbnRlciAKCSAgaW4gbWVzc2FnZSB0byBzdGF0aWMgY29udHJvbAoJKiBbY29udHJvbHMvbWVudS5jXQoJICBUcmllZCB0byBpbXBsZW1lbnQgb3duZXJkcmF3biBtZW51aXRlbXMuIERvZXNuJ3Qgd29yay4KCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9mb250LmNdCgkgIFByb3ZpZGUgYSBzdHViIGZvciBHZXRSYXN0ZXJpemVyQ2FwcygpCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCSAgUGFzcyBlbmQgYWRkcmVzcyBpbnN0ZWFkIG9mIGxlbmd0aCB0byBMb2NhbEluaXQoKSBpbiAKCSAgQ3JlYXRlU2VsZWN0b3JzKCkKCSogW21lbW9yeS9sb2NhbC5jXQoJICBMb2NhbEluaXQoKTogSWYgdGhlcmUncyBhbHJlYWR5IGEgbG9jYWwgaGVhcCBpbiB0aGUgc2VnbWVudCwgZG8KCSAgbm90aGluZyBhbmQgcmV0dXJuIFRSVUUKCSogW29iamVjdHMvbGluZWRkYS5jXQoJICBSZXBsYWNlZCBidWdneSBMaW5lRERBKCkgd2l0aCBhIEJyZXNlbmhhbSBhbGdvcml0aG0uIFNob3VsZCB3b3JrCgkgIG5vdy4KCSogW3dpbmRvd3MvY3Vyc29yLmNdCgkgIExvYWRDdXJzb3IoKS9DcmVhdGVDdXJzb3IoKTogQ2xlYW5lZCB1cCB0aGUgbWVzcy4gTmVlZHMgc29tZQoJICBtb3JlIHdvcmsgc3RpbGwuCgpUdWUgTWFyIDIxIDE3OjU0OjQzIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvY2FsbGJhY2suY10gW2luY2x1ZGUvZGxscy5oXQoJICBbaWYxNjMyL3dpbnByb2NzLnNwZWNdIFtpZjE2MzIvd2lucHJvY3MuY10gW2luY2x1ZGUvd2lucHJvY3MuaF0KCSAgW2NvbnRyb2xzL3dpZGdldHMuY10gW21pc2Mvc2hlbGwuY10gW21pc2MvY29tbWRsZy5jXQoJICBbd2luZG93cy9ub25jbGllbnQuY10gW21pc2MvbWVzc2FnZS5jXQoJICBBZGRlZCBhIG5ldyBidWlsdGluIERMTCB0aGF0IHByb3ZpZGVzIDE2IGJpdCBlbnRyeSBwb2ludHMgZm9yIGFsbAoJICB0aGUgRGVmKlByb2NzIChEZWZEbGdQcm9jLCBCdXR0b25Qcm9jIGV0Yy4pLiBPV0wgcHJvZ3JhbXMgd29yawoJICBhZ2Fpbi4KCSogW21pc2Mvc2hlbGwuY10KCSAgUmVnT3BlbktleSgpL1JlZ0NyZWF0ZUtleSgpIGJ1Z3MgZml4ZWQuCiAgICAgICAgKiBbbG9hZGVyL25lX2ltYWdlLmNdCgkgIFNraXBwaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIERMTCB3aGVuIENTID09IDAgd2FzIGJyb2tlbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAxOSAxNjozMDoyMCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbKi8qXQoJSW1wbGVtZW50ZWQgYSBuZXcgbWVtb3J5IG1hcHBpbmcgc2NoZW1lLiBUaGVyZSdzIG5vIGxvbmdlciBhCglvbmUtdG8tb25lIG1hcHBpbmcgYmV0d2VlbiAxNi1iaXQgYW5kIDMyLWJpdCBwb2ludGVycy4gUGxlYXNlIHNlZQoJZmlsZSBERVZFTE9QRVJTLUhJTlRTIGZvciB0ZWNobmljYWwgZGV0YWlscy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIGJ1ZyB3aGVuIGRyYWdnaW5nIG1vdXNlIGluIGhvcml6b250YWwgc2Nyb2xsYmFycy4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyLyouc3BlY10KCVJlbW92ZWQgc3VwcG9ydCBmb3IgQyBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIGZvciByZS1vcmRlcmluZwoJb2YgdGhlIDMyLWJpdCBhcmd1bWVudHMsIGFzIHRoZXNlIHdlcmUgbmV2ZXIgdXNlZC4gVGhpcyBzaG91bGQKCWFsbG93IGEgbW9yZSBlZmZpY2llbnQgY2FsbGJhY2sgc2NoZW1lIHRvIGJlIGltcGxlbWVudGVkLgoKCSogW2lmMTYzMi9vbGVjbGkuc3BlY10KCVJlZHVjZWQgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIG1ha2UgdGhlIDE2LWJpdCBjb2RlIGZpdCBpbiA2NGsuCglUaGlzIGxpbWl0YXRpb24gd2lsbCBzb29uIGJlIHJlbW92ZWQuCgoJKiBbbG9hZGVyL2xkdC5jXQoJUmV3cm90ZSBMRFQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBhbmQgaW1wbGVtZW50ZWQgTERUX0dldEVudHJ5KCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJUmV3cm90ZSBHbG9iYWwqKCkgcm91dGluZXMgdG8gdXNlIHRoZSBuZXcgc2VsZWN0b3IgYWxsb2NhdGlvbgoJbWVjaGFuaXNtLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJUmV3cm90ZSBsb2NhbCBoZWFwIGhhbmRsaW5nIHRvIHVzZSBhIFdpbmRvd3MtY29tcGF0aWJsZSBsYXlvdXQKCShub3QgcmVhbGx5IGZpbmlzaGVkIHlldCkuCglJbXBsZW1lbnRlZCBUT09MSEVMUCBoZWFwLXdhbGtpbmcgcm91dGluZXMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglJbXBsZW1lbnRlZCBMRFQgbWFuaXB1bGF0aW9uIEFQSSBmdW5jdGlvbnMuCgpUdWUgTWFyIDE0IDE5OjUwOjI4IEVTVCAxOTk1IFdpbGxpYW0gTWFncm8gKHdtYWdyb0B0Yy5jb3JuZWxsLmVkdSkKCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJRml4ZWQgcHJvYmxlbSB3aGVyZSBkaWFsb2dzIGNsb3NlZCB1c2luZyB0aGUgU3lzdGVtIG1lbnUgCiAgICAgICAgKCdDbG9zZScgaXRlbSBvciBkb3VibGUgY2xpY2sgb24gY2xvc2UgYm94KSB3b3VsZAoJaGFuZyBXaW5lLgoKU3VuIE1hciAxMiAxNDoyODoxMyAxOTk1ICBNaWNoYWVsIFBhdHJhIDxtaWNreUBtYXJpZS5waHlzaWsuVFUtQmVybGluLkRFPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVJlbW92ZWQgbW9zdCBvZiB0aGUgc3RhdGVtZW50cyBmb3Igc2VuZGluZyBhIG5vdGlmaWNhdGlvbiBtZXNzYWdlCglMaXN0Qm94RGlyZWN0b3J5KCksIERsZ0RpclNlbGVjdCgpLCBEbGdEaXJMaXN0KCk6IEltcHJvdmVkIHRoZQoJY29kZTsgQm9ybGFuZCdzIHN0YW5kYXJkIGZpbGUgb3BlbiBkaWFsb2cgd2lsbCB3b3JrIG5vdy4KCQoJKiBbbWlzYy9tYWluLmNdLCBbbWlzYy9maWxlLmNdLCBbbWlzY2VtdS9pbnQyMS5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24gIi1hbGxvd3JlYWRvbmx5Ii4gSWYgc2V0CglhbiBhdHRlbXB0IHRvIG9wZW4gYSByZWFkIG9ubHkgZmlsZSBpbiB3cml0ZSBtb2RlIHdpbGwgYmUgY29udmVydGVkIAoJdG8gb3BlbmluZyBpdCByZWFkIG9ubHkgKG1hbnkgcHJvZ3JhbXMgdHJ5IHRvIG9wZW4gYWxsIGZpbGVzIGluIAoJcmVhZC93cml0ZSBtb2RlIGV2ZW4gaWYgdGhleSBvbmx5IGludGVuZCB0byByZWFkIGl0IC0gdGhpcyBtaWdodCAKCWNhdXNlIGEgZmV3IHVuZGVyIHByb2JsZW1zIHVuZGVyIGFuIHVuaXgtbGlrZSBlbnZpcm9ubWVudCB3aGVyZSBtb3N0IAoJZmlsZXMgYXJlIHJlYWQgb25seSBmb3IgYSAibm9ybWFsIiB1c2VyKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJR2V0TWVtb3J5UmVmZXJlbmNlKCk6IEFkZGVkIHN1cHBvcnQgZm9yIF9fQUhJbmNyIGFuZCBfX0FIU2hpZnQKCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX1NpbXBsaWZ5UGF0aCgpOiBUaGlzIHJvdXRpbmUgc2ltcGxpZmllcyBwYXRoIG5hbWVzICggZS5nLiwgaXQKCXdpbGwgY2hhbmdlICIvdXNyLy8vbG9jYWwvYmluLy4uL2xpYi8vYSIgdG8gIi91c3IvbG9jYWwvbGliL2EiICkKCW1hdGNoKCk6IHJld3JpdHRlbgoJCgkqIFtvYmplY3RzL3RleHQuY10KCVRFWFRfTmV4dExpbmUoKTogUmVtb3ZlZCBhIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTEYncwoKCSogW21pc2NlbXUvaW50MjEuY10KCUdldEZpbGVEYXRlVGltZSgpOiBGaXhlZC4gU2V0RmlsZURhdGVUaW1lKCkgaXMgc3RpbGwgYnJva2VuLgoKU2F0IE1hciAxMSAxOTo0NjoxOSAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdCglDaGFuZ2VNZW51OiBkZWZhdWx0cyB0byBNRl9JTlNFUlQKCUluc2VydE1lbnU6IGFsbG93IGluc2VydGlvbiBldmVuIGlmIHBvc2l0aW9uIGlzIG9uZSBhZnRlciBsYXN0IGl0ZW0KCgkqIFtpZjE2MzIvSW1ha2VmaWxlXSBbaWYxNjMyL2NvbXBvYmouc3BlY10gW2lmMTYzMi9yZWxheS5jXQoJICBbaWYxNjMyL3N0b3JhZ2Uuc3BlY10gW2luY2x1ZGUvZGxscy5oXQoJQWRkZWQgc3R1YnMgZm9yIFNUT1JBR0UuRExMIGFuZCBDT01QT0JKLkRMTAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUluU2VuZE1lc3NhZ2U6IG5ldyBmdW5jdGlvbgoKCSogW2luY2x1ZGUvbmVleGUuaF1baW5jbHVkZS9uZV9pbWFnZS5jXQoJTkVfRml4dXBTZWdtZW50OiBmaXhlZCBoYW5kbGluZyBvZiBhZGRpdGl2ZSByZWNvcmRzCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglHZXRFbnRyeURMTE5hbWU6IHJldHVybiBOVUxMIGluc3RlYWQgb2YgcG9pbnRlciB0byBETEwuMCBpZiBub3QgZm91bmQKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCgl3aW5fZmF1bHQ6IEVudGVyIGRlYnVnZ2VyIG9uIFNJR0ZQRSwgdG9vCgpXZWQgTWFyICAxIDIxOjQ3OjQyIDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQqLmNdCiAgICAgICAgVmFyaW91cyBtaW5vciBtb2RpZmljYXRpb25zIHRvIHRoZSBjbG9jayB0aWNrIGNvdW50ZXIsCiAgICAgICAgRmluZEZpcnN0L0ZpbmROZXh0IGZ1bmNzLCBhbmQgRFBCIGhhbmRsaW5nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgTWFyICAyIDE3OjQ0OjMyIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvb2VtYml0bWFwLmNdCglSZW1vdmVkIHN5c3JlcyBiaXRtYXAgY29kZTsgeW91IG5lZWQgbGliWHBtIHRvIGNvbXBpbGUgbm93LgoJSW1wbGVtZW50ZWQgTG9hZEljb24oKSBmb3IgT0VNIGljb25zLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vaWNfKl0KCUFkZGVkIE9FTSBpY29ucyBpbiBYUE0gZm9ybWF0LgoKCSogW29iamVjdHMvZGliLmNdCglCdWcgZml4IGluIERyYXdJY29uKCkuCgoJKiBbcmMvc3lzcmVzYm0ucmNdCglSZW1vdmVkOyBhbGwgYml0bWFwcyBhcmUgc3RvcmVkIGluIFhQTSBmb3JtYXQgbm93LgoKVHVlIEZlYiAyOCAxODo1NDoyOCAxOTk1ICBUb21pIExlcHBpa2FuZ2FzICAodG9taWxlcHBAcGFqdS5vdWx1LmZpKQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVNtYWxsIHBhdGNoIHRvIGZpeCBlZGl0LWNvbnRyb2wgd2hlbiBpdCdzIGNyZWF0ZWQgd2l0aCB0ZXh0LgoKU3VuIEZlYiAyNiAyMDoyMjoxNSAxOTk1ICBNaWNoYWVsIFZla3NsZXIgIChlMTY3ODIyM0B0b2NobmFwYzIudGVjaG5pb24uYWMuaWwpCgoJKiBbdG9vbHMvbWFrZV9kZWJ1Z10KCVRoZSBjcmVhdGVkIG1hY3JvcyB3b24ndCBoYXZlIHNpZGUgZWZmZWN0cyBhbnltb3JlIHdoZW4gdXNlZCBpbgoJYW4gImlmLWVsc2UiIHN0cnVjdHVyZS4gTm8gbW9yZSB3YXJuaW5ncyBmcm9tIHRoZSBjb21waWxlciB3aGVuCgljb21waWxlZCB3aXRob3V0IGRlZmluaW5nIERFQlVHX1JVTlRJTUUuCiAKU3VuIEZlYiAyNiAyMDoyMDo0OSAxOTk1ICBNaWNoYWVsIFBhdHJhIDxtaWNreUBtYXJpZS5waHlzaWsuVFUtQmVybGluLkRFPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hEZWxldGVTdHJpbmcoKTogRml4ZWQKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUdldE1lbW9yeVJlZmVyZW5jZSgpOiBXaGVuIHNwZWNpYWwgc2VnbWVudHMgYXJlIHJlZmVyZW5jZWQgYnkKCXBzZXVkby1mdW5jdGlvbnMgbGlrZSBfXzAwNDBILCBhIHJlZmVyZW5jZSB0byBhICJub3JtYWwiIHNlZ21lbnQKCXdpbGwgYmUgcmV0dXJuZWQgcHJldmVudGluZyB0aGUgcHJvZ3JhbSBmcm9tIGNyYXNoaW5nIGFzIHNvb24KCWFzIHRoZSByZWZlcmVuY2VkIHNlZ21lbnQgaXMgYWN0dWFsbHkgYWNjZXNzZWQuCgpTdW4gRmViIDI2IDE1OjU1OjE0IE1FVCAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAobG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlKQoKCSogW0NvbmZpZ3VyZV0KCUFzayBmb3IgT0xFIHN0dWJzIGFuZCBtYWxsb2MgZGVidWdnaW5nCgoJKiBbSW1ha2VmaWxlXQoJbGluayB3aXRoIGxpYm1jaGVjay5hIGlmIG5lY2Vzc2FyeQoKCSogW2lmMTYzMi9yZWxheS5jXVtpbmNsdWRlL2RsbC5oXVtpZjE2MzIvSW1ha2VmaWxlXQoJQWRkIE9MRSBzdHVicywgaW5jcmVhc2UgbnVtYmVyIG9mIGJ1aWx0aW5zCglkbGxfbmFtZV90YWJsZV9lbnRyeV9zOiBuZXcgZmllbGQgZGxsX2lzX3VzZWQKCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJR2V0TW9kdWxlSGFuZGxlLE1vZHVsZU5leHQ6IENoZWNrIGRsbF9pc191c2VkCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglCYXJrIG9uIHVuc3VwcG9ydGVkIE5FX1JBRERSX0xPV0JZVEUgZmxhZyAod2hhdCBpcyBpdCBzdXBwb3NlZAoJdG8gbWVhbiwgYW55d2F5PykKCgkqIFttaXNjL29sZWNsaS5jXVttaXNjL29sZXN2ci5jXQoJTmV3IGZpbGVzLiBBZGQgdG8gbWlzYy9JbWFrZWZpbGUKCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX0dldFVuaXhGaWxlTmFtZTogbWFrZSBhIGNvcHkgb2YgdGhlIGlucHV0IHBhcmFtZXRlciB0byAKCXByZXZlbnQgb3ZlcndyaXRpbmcKCgkqIFttaXNjL21haW4uY10KCU1BSU5fUGFyc2VETExPcHRpb25zOiBuZXcgZnVuY3Rpb24KCU1BSU5fUGFyc2VPcHRpb25zOiB0cmVhdCAtZGxsIGNvbW1hbmQgbGluZSBmbGFnCgltYWluOiBhZGQgc3VwcG9ydCBmb3IgbWFsbG9jIGRlYnVnZ2luZwoKRnJpIEZlYiAyNCAxMjo0MzoyNyAxOTk1ICBFcmlrIFN2ZW5kc2VuICA8ejNlc3ZAa21kLWFjLmRrPgoKCSogW2xvYWRlci9zaWduYWwuY10KCVNtYWxsIHBhdGNoIGZvciBwZW9wbGUgdXNpbmcgRnJlZUJTRC0yLjEuMC4KCkZyaSBGZWIgMTcgMjI6NDk6MTggMTk5NSAgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgoJKiBbdG9vbGtpdC9zdXAuY10KCUFkZGVkIHJldHVybiB2YWx1ZXMgdG8gdGhlIENhbGwqIHJvdXRpbmVzCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglMb2FkIHRoZSByZXNvdXJjZSBmaWxlIHByb3Blcmx5IGZvciBXaW5lTGliIGFwcGxpY2F0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEZlYiAxNiAxODo1NzozMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbaWYxNjMyL2NhbGwuU10KCU9ubHkgc2F2ZSB0aGUgbG93ZXIgMTYtYml0cyBvZiBTUCBhbmQgQlAuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglXaGVuIGNhbGxpbmcgdG8gMTYtYml0IGNvZGUsIHJlc3RvcmUgRFMgZnJvbSBpdHMgcHJldmlvdXMgdmFsdWUgb24KCWVudHJ5IHRvIHRoZSAzMi1iaXQgY29kZSwgaW5zdGVhZCBvZiBmcm9tIHRoZSBjb2RlIHNlZ21lbnQgb3duZXIuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCVVzZSBhIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhlIDE2LWJpdCBzdGFjayBmcmFtZSBsYXlvdXQKCWluc3RlYWQgb2YgaGFyZC1jb2RlZCBvZmZzZXRzLgoJCgkqIFtyYy9JbWFrZWZpbGVdCglVc2UgeS50YWIuYyBmb3IgYmlzb24gb3V0cHV0IGZpbGUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB5YWNjLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglTbWFsbCBvcHRpbWl6YXRpb24gZm9yIGNhbGxzIHRvIDMyLWJpdCBjb2RlLgoKU3VuIEZlYiAxMiAwMzoxOTo0NyAxOTk1ICBNaWNoYWVsIFZla3NsZXIgKHMxNjc4MjIzQHQyLnRlY2huaW9uLmFjLmlsKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBidWcgKGluZmxpY3RlZCBieSBwcmV2aW91cyBjaGFuZ2UpIC0gU0VHViBvbiBaTUFHSUMgZmlsZSBmb3JtYXQuCgpTdW4gRmViIDExIDIwOjAwOjAwIDE5OTUgIEf2cmFuIFRoeW5pICAoZ29yYW5Abm9ycnNrZW4uYmlsZGJhc2VuLnNlKQoKCSogW2RlYnVnZ2VyL2RiZy55XQoJUmVtb3ZlIHVubmVjZXNzYXJ5IHN5bS10YWJsZSBsb2FkaW5nIHdoZW4gc3RvcHBlZCBpbiAxNi1iaXQgbW9kZS4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAgQWRkZWQgZHluYW1pYyBhbGxvY3Rpb24gb2Ygc2VsZWN0b3JzLgogICAgICAgIEZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCBsYXJnZSBwcm9ncmFtcyBTSUdTRUdWLWluZyB3aGlsZQogICAgICAgIHJ1bm5pbmcgb3V0IG9mIHNlbGVjdG9ycy4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdIFtpZjE2MzIvY2FsbGJhY2suY10gCiAgICAgICAgICBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2hlYXAuY10gW21lbW9yeS9saW5lYXIuY10KCVVzZSBfX0FIU0hJRlQgYW5kIF9fQUhJTkNSIGluc3RlYWQgb2YgMyBhbmQgOC4KCk1vbiBGZWIgIDYgMTg6MDc6MzggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIEJldHRlciByZWxhdGl2ZSBwYXRoIGhhbmRsaW5nIHdoZW4gY29udmVydGluZyBmaWxlbmFtZXMgYmV0d2VlbgogICAgICAgIGRvcyBhbmQgdW5peCwgYWxsb3dpbmcgJy4nIHRvIGJlIHVzZWQgaW4gdGhlIFdpbmRvd3MgcGF0aC4KICAgICAgICBTdGFydHVwIHdvcmtpbmcgZGlyIGlzIG5vdyBiYXNlZCBvbiBjdXJyZW50IHdvcmtpbmcgZGlyLgoKU2F0IEZlYiAgNCAyMToyMToxMyAxOTk1ICBNaWNoYWVsIFZla3NsZXIgKHMxNjc4MjIzQHQyLnRlY2huaW9uLmFjLmlsKQoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFt0b29scy9idWlsZC5jXQoJU3F1ZWV6ZWQgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZWZlcmVuY2VzIGludGVybmFsIGRsbCdzIChtb3N0bHkKCSJzdHJ1Y3QgZGxsX3RhYmxlX2VudHJ5X3MiKS4gQ2F1c2VkIDIwJSByZWR1Y3Rpb24gaW4gZXhlY3V0YWJsZQoJY29kZSBzaXplLgoKRnJpIEZlYiAgMyAxODo1MzoxNSAxOTk1ICBNYXJ0aW4gdi4gTG9ld2lzICAobG9ld2lzQG1hcmllKQoKCSogW0ltYWtlZmlsZV0KCW1ha2Ugd2luZS5zeW0gb25seSB3aGVuIG1ha2luZyBlbXVsYXRvcgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogcmVwb3J0IGFzIG5vdCBpbXBsZW1lbnRlZCBmb3IgV0lORUxJQgoKCSogW21pc2Mvd2luc29jay5jXQoJRml4IENPTlZFUlRfSE9TVEVOVCBhbmQgZnJpZW5kcyBmb3IgdXNlIHdpdGggV0lORUxJQgoKCSogW3JjL0ltYWtlZmlsZV1bcmMvcmMueV1bcmMvcGFyc2VyLmNdCglSZW5hbWUgcmMueSB0byBwYXJzZXIueQoJVXNlIGZsZXggYW5kIGJpc29uIG9uIFN1bgoKCSogW3Rvb2xraXQvc3VwLmNdCglDYWxsV2luZG93UHJvYzogZml4IHBhcmFtZXRlciB0eXBlCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ29tbWVudGVkICNpZmRlZiBzcGFyYwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgRmViICAxIDE5OjI3OjU1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIG1heGltaXplZCB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgaWNvbiBwb3NpdGlvbmluZyBhbmQgQXJyYW5nZUljb25pY1dpbmRvd3MoKS4KCUJ1ZyBmaXhlcyBpbiBTZXRXaW5kb3dQb3MoKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBHZXRDb250cm9sQnJ1c2goKS4KCVdpbmRvdyBmcmFtZSBpcyBubyBsb25nZXIgY29udGFpbmVkIGluIHRoZSB1cGRhdGUgcmVnaW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglEZXN0cm95IG93bmVkIHdpbmRvd3MgdXBvbiBEZXN0cm95V2luZG93KCkuCgpTdW4gSmFuIDI5IDE2OjE3OjIyIDE5OTUgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglDaGFuZ2VkIGxpbmUgdGVybWluYXRvciB0byBcclxuIHRvIGJlIGNvbXBhdGlibGUgd2l0aAoJV2luZG93cy4gIEZpeGVkIGJ1ZyBpbiB0ZXh0IHNlbGVjdGlvbi4KClN1biBKYW4gMjkgMTQ6MTA6MjIgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICogW21pc2Mvc2hlbGwuY10KICAgICAgIFJld3JvdGUgUmVnQ3JlYXRlS2V5IGFuZCBSZWdPcGVuS2V5LCBzaW5jZSB0aGV5IHdlcmUgY29tcGxldGVseSBicm9rZW4uCiAgICAgICBGaXhlZCBhIGJ1ZyBpbiBSZWdRdWVyeUtleVZhbHVlLiBJbXBsZW1lbnRlZCBSZWdFbnVtS2V5CiAgICAgICBUaGVzZSBmdW5jdGlvbnMgbm93IHdvcmsgc29tZXdoYXQgbW9yZSB0aGUgd2F5IFdpbmRvd3MgcHJvZ3JhbXMgZXhwZWN0CiAgICAgICB0aGVtIHRvIHdvcmsuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMjIgMTg6NTU6MzMgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9kaWIuY10KCUZpeGVkIGljb24gbG9hZGluZyBhbmQgZHJhd2luZywgbm93IHRoYXQgQml0Qmx0KCkgd29ya3MgY29ycmVjdGx5LgoJCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL3JlZ2lvbi5jXQoJSW1wbGVtZW50ZWQgZWxsaXB0aWMgcmVnaW9ucyB3aXRoIGEgc2V0IG9mIHJlY3RhbmdsZS4gVGhpcyBncmVhdGx5CglzaW1wbGlmaWVzIHRoZSByZWdpb24gY29kZSBhbmQgc2hvdWxkIGJvb3N0IGNsaXBwaW5nIHBlcmZvcm1hbmNlLgoKCSogW29iamVjdHMvY29sb3IuY10KCUZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBzZWctZmF1bHQgb24gMjRicHAgZGlzcGxheXMuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGJ1ZyB3aGVuIHNocmlua2luZyBhIGJpdG1hcCB0byBtb3JlIHRoYW4gaGFsZiBpdHMgc2l6ZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCBidWdzIGluIFBhaW50UmduKCkgYW5kIFBvbHlsaW5lKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggd2luZG93IGJhY2tncm91bmQgcGFpbnRpbmcuCgpUaHUgSmFuIDEyIDEyOjIwOjI1IFBTVCAxOTk1IFJvc3MgQmlybyAoYmlyb0B5Z2dkcmFzaWwuY29tKQoKICAgICAgICogW3Rvb2xzL2J1aWxkLmNdCiAgICAgICAqIFt0b29scy9uZXdidWlsZC5jXQogICAgICAgKiBbSW1ha2VmaWxlXQogICAgICAgKiBbaW5jbHVkZS93aW5lLmhdCiAgICAgICAqIFtsb2FkZXIvY2FsbC5TXQogICAgICAgKiBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAqIFtpbmNsdWRlL3NlZ21lbS5oXQogICAgICAgKiBbbWlzYy9tYWluLmNdCiAgICAgICBDaGFuZ2VkIHNlbGVjdG9yIGNvZGUgYW5kIDE2LzMyIGJpdCB4ZmVyIGNvZGUgc28gdGhhdCB3aW5lCiAgICAgICBubyBsb25nZXIgaGFzIHRvIGJlIGxvYWRlZCBsb3cgaW4gbWVtb3J5LiAgQ2hhbmdlZCB3aW5lCiAgICAgICB0byB3b3JrIHdpdGggRUxGIGJpbmFyeSBmb3JtYXRzIHVuZGVyIExpbnV4LgogICAgICAgClNhdCBTZXAgMTcgMTE6MDg6NDkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQoKCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQoJTmV3IGluc3RydWN0aW9uIGRpc2Fzc2VtYmxlciAtIGJvcnJvd2VkIGZyb20gTWFjaCBrZXJuZWwuICBIYXMgYQoJQlNEIHN0eWxlIG9mIGxpY2Vuc2UgYXMgb3Bwb3NlZCB0byB0aGUgZ2RiIGNvZGUgd2Ugd2VyZSBwcmV2aW91c2x5Cgl1c2luZyB3aGljaCB3YXMgdW5kZXIgdGhlIEdQTC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEphbiAgOSAxODoyNzoxMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbSW1ha2VmaWxlXQoJQ29tcGlsaW5nIHdpdGggLVdhbGwgZmxhZy4KCgkqIFsqLypdCglGaXhlcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBCaXRCbHQoKSBhbmQgdXNlZCB0aGUgc2FtZSBjb2RlIHRvIHJld3JpdGUgUGF0Qmx0KCkgYW5kCglTdHJldGNoQmx0KCkuIFRoZSB0aHJlZSAqQmx0KCkgZnVuY3Rpb25zIHNob3VsZCBub3cgYmUgY29ycmVjdCBpbgoJZXZlcnkgY2FzZSAoZmFtb3VzIGxhc3Qgd29yZHMpLgoKCSogW29iamVjdHMvYnJ1c2guY10gW29iamVjdHMvZGl0aGVyLmNdCglNZXJnZWQgdGhlIHR3byBmaWxlcyBpbnRvIGJydXNoLmMKCgkqIFtvYmplY3RzL2RjLmNdCglGaXhlZCBidWcgd2hlbiB0aGUgV2luZG93cyBwcm9ncmFtcyBmb3JnZXQgdG8gcmUtc2VsZWN0IHRoZQoJb3JpZ2luYWwgYml0bWFwIGluIGEgbWVtb3J5IERDLgoKCSogW29iamVjdHMvZm9udC5jXQoJVHR5IHRvIHVzZSAnZml4ZWQnIGZvbnQgd2hlbiB0aGUgc3lzdGVtIGZvbnQgY2FuJ3QgYmUgZm91bmQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVRlbnRhdGl2ZSBmaXggdG8gbWFrZSBkaWFsb2dzIGxvb2sgYmV0dGVyIHdoZW4gdXNpbmcgZml4ZWQtd2lkdGgKCWZvbnRzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVBhcnRpYWxseSBpbXBsZW1lbnRlZCB0aGUgUFNfSU5TSURFRlJBTUUgcGVuIHN0eWxlLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglGaXggZm9yIHdpbmRvd3MgdGhhdCBoYXZlIHRoZSBXU19FWF9ETEdNT0RBTEZSQU1FIHN0eWxlIGJpdAoJd2l0aG91dCB0aGUgV1NfRExHRlJBTUUgc3R5bGUuCgpUaHUgSmFuICA1IDEzOjM3OjQyIDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglHbG9iYWxDb21wYWN0IHNob3VsZCBub3cgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gdGhlCglsYXJnZXN0IHJ1biBvZiBmcmVlIGJsb2NrcyBpbmNsdWRlcyB0aGUgbGFzdCBibG9jay4KCgkqIFt3aW5kb3dzL21kaS5jXQoJVGlsaW5nIGFuZCBjYXNjYWRpbmcgd2luZG93cyB3aXRob3V0IGFueSBNREkgY2hpbGRyZW4gc2hvdWxkCglubyBsb25nZXIgY3Jhc2ggKGFzc3VtaW5nIG5vLW9wIGlzIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvKS4KClN1biBKYW4gIDEgMjM6MzA6MjUgMTk5NSAgRm9ucyBCb3RtYW4gIDxib3RtYW5AcmFiby5ubD4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUdldFRleHRFeHRlbnRQb2ludDogZml4ZWQgZGVidWcgb3V0cHV0LCBzdHIgaXMgY291bnRlZCBzdHJpbmcsIG5vdAogICAgICAgIHplcm8gdGVybWluYXRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCURMTFJlbGF5OiB3aGVuIGRlYnVnZ2luZ19zdGFjayBnb3Qgc2VndiwgYWRkZWQgdXBwZXIgYm91bmQgZm9yCiAgICAgICAgc3RhY2sgZHVtcC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIERlYyAyNyAxMzozNToxNiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbKi9JbWFrZWZpbGVdCglBbGwgb2JqZWN0cyBmaWxlcyBhcmUgbm93IGtlcHQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBkaXJlY3RvcnkuCgoJKiBbUkVBRE1FXQoJUmV3cm90ZSBtb3N0IG9mIGl0LgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglSZXdyb3RlIEJpdEJsdCgpIHRvIGxvb2sgcmlnaHQgaW4gZXZlcnkgY2FzZSwgd2hpbGUgbWluaW1pemluZwoJdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gTm90IHJlYWxseSBmaW5pc2hlZCB5ZXQuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGMuY10KCUZpeGVkIGJ1ZyB3aXRoIHBhdHRlcm4gYnJ1c2hlcy4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlcyBmb3IgbG9naWNhbCBjb29yZGluYXRlcy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCBHZXRQaXhlbCgpIHRvIHJldHVybiB0aGUgY29ycmVjdCBjb2xvciwgYW5kIG1hZGUgaXQgZmFzdGVyLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglGaXhlZCBidWcgaW4gQ29tYmluZVJnbigpIHdoZW4gb25lIG9mIHRoZSByZWdpb24gaXMgZW1wdHkuCgpGcmkgRGVjIDIyIDAxOjQyOjU3IE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtDb25maWd1cmVdCglEb24ndCBhc3N1bWUgdGhhdCBleHByIGhhbmRsZXMgJz09JywgdXNlICc9JyBpbnN0ZWFkLgoJR2l2ZSBhIChob3BlZnVsbHkgaW5mb3JtYXRpdmUpIG1lc3NhZ2UgaWYgaW1ha2UgZmFpbHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBEZWMgIDcgMTQ6NTI6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIHByb2JsZW1zIGR1ZSB0byBuZXcgc2Nyb2xsLWJhciBjb2RlLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW9wb3J0cy5jXQoJSGFuZGxlIEkvTyBvcGNvZGVzIHRoYXQgdXNlIGFuIGFic29sdXRlIGFkZHJlc3MuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbXBsZW1lbnRlZCBUYWJiZWRUZXh0T3V0KCkuCgpTYXQgRGVjICAzIDE4OjUzOjA4IDE5OTQgIEtlbm5ldGggTWFjRG9uYWxkICA8Sy5NYWNEb25hbGRAZWQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJSW1wbGVtZW50ZWQgR2V0TWV0YWZpbGUoKS4KCUZpeGVkIGJ1ZyBpbiBQbGF5TWV0YUZpbGUoKSB3aGVuIHJlYWRpbmcgZGlzYyBiYXNlZCBtZXRhZmlsZSByZWNvcmRzLgoJQWRkZWQgTUVUQV9QT0xZUE9MWUdPTiwgTUVUQV9ERUxFVEVPQkpFQ1QgYW5kIE1FVEFfRU9GIHRvIAoJUGxheU1ldGFGaWxlUmVjb3JkKCkuCgkKV2VkIE5vdiAzMCAwNjozMjoyNSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW0ltYWtlZmlsZV0KCXdpbmUuc3ltOiBSZW1vdmUgZ2NjMl9jb21waWxlZCBhbmQgZnJpZW5kcwoKCSogW2NvbnRyb2xzL2xpc3Rib3guY11baWYxNjMyL3JlbGF5LmNdW2lmMTYzMi9yZWxheS5jXQoJICBbbG9hZGVyL3Jlc291cmNlLmNdW21lbW9yeS9oZWFwLmNdW29iamVjdHMvZGliLmNdW3dpbmRvd3MvZGlhbG9nLmNdCglSZXBsYWNlICNpZmRlZiBERUJVR19YWFggd2l0aCBpZihkZWJ1Z2dpbmdfeHh4KXsKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvTGliTWFpbjogTmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3JlbGF5LmNdW2luY2x1ZGUvb3B0aW9ucy5oXVttaXNjL21haW4uY10KCSAgW21pc2NlbXUvaW50MWEuY11bbWlzY2VtdS9pbnQyMS5jXVttaXNjZW11L2tlcm5lbC5jXQoJcmVtb3ZlZCBPcHRpb25zLnJlbGF5X2RlYnVnCgoJKiBbaW5jbHVkZS9oZWFwLmhdCglIRUFQX09XTkVSOiBVc2UgZHMgaW5zdGVhZCBvZiBjczppcAoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTG9hZE5FSW1hZ2U6IFJlbWVtYmVyIGN1cnJlbnQgZXhlLCBoYW5kbGUgbm9kYXRhIGRsbHMKCUluaXRORURMTDogaGFuZGxlIG5vZGF0YSBkbGxzLCBjYWxsIENhbGxUb0xpYk1haW4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUNyZWF0ZVNlbGVjdG9yczogSW5pdGlhbGl6ZSBhdXRvX2RhdGFfc2VsIHdpdGggMAoKCSogW21lbW9yeS9oZWFwLmNdCglIRUFQX0NoZWNrSGVhcDogQ2hlY2sgcHJldgoJSEVBUF9DaGVja0xvY2FsSGVhcHM6IG5ldyBmdW5jdGlvbgoKCSogW21pc2MvcHJvZmlsZV0KCVJlbWVtYmVyIGFuZCBkdW1wIG9ubHkgY2hhbmdlZCBwcm9maWxlcwoKCSogW3Rvb2xzL21ha2VkZWJ1Z10KCUludHJvZHVjZSBkZWJ1Z2dpbmdfeHh4IGZsYWdzCgpTdW4gTm92IDI3IDIzOjEzOjIyIE1FVCAxOTk0CTxlcmlrQHhzNGFsbC5ubD4KCgkqIFtjbGlwYm9hcmQuaCBjb2xvci5oIGRjLmggZG9zX2ZzLmggZXZlbnQuaCBmb250LmggZ3JhcGhpY3MuaAoJaWYxNjMyLmgga2VybmVsLmggbGlicmFyeS5oIG1pc2NlbXUuaCBuZV9pbWFnZS5oIG5vbmNsaWVudC5oIAoJcGVfaW1hZ2UuaCBzZWxlY3RvcnMuaCB3aW50eXBlcy5oXQoJQWRkZWQuCgoJKiBbKi8qXQoJLSBDb21tZW50ZWQgYWxsICdzdGF0aWMgY2hhciBjb3B5cmlnaHQgc3RhdGVtZW50cycsIHNlZSBtaXNjL21haW4uYwoJLSBtb3ZlZCBwcm90b3R5cGVzIHRvIGhlYWRlcnMgZmlsZXMsIGZpeGVkIHdyb25nIHByb3RvdHlwZXMuCgktICpwbGVhc2UqIGFkZCBhIGhlYWRlciBmaWxlIGZvciBlYWNoIC5jIGlmIHlvdSBuZWVkIHRvIGV4cG9ydAoJICB0aGluZ3MuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBvbmUgc3RhdGljIHN0cmluZyB3aGljaCBsaXN0IHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzLgoKRnJpIE5vdiAyNSAxNjoyNDoyNyBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbQ29uZmlndXJlXQoJTWFkZSB0aGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzIG1vcmUgYXV0b21hdGljLiAgQWRkZWQKCWEgW2ZvbnRzXSBzZWN0aW9uIHRvIHRoZSB3aW5lLmNvbmYgZmlsZS4gIE1hZGUgdGhlIGRlZmF1bHRzCgliZXR0ZXIuICBHZW5lcmFsbHkgY2xlYW5lZCBpdCB1cC4KCgkqIFtyYy9zeXNyZXNfTm8ucmNdIFtyYy9zeXNyZXNfRGUucmNdIFtyYy9zeXNyZXMuY10KCU5vcndlZ2lhbiByZXNvdXJjZXMgYW5kIHNtYWxsIGZpeGVzIHRvIHRoZSBnZXJtYW4gcmVzb3VyY2VzLgoKV2VkIE5vdiAyMyAyMDoyODo1OSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdCgliYXJrKCksIHRvZ2dsZV9uZXh0KCksIHNob3VsZF9jb250aW51ZSgpOiBOZXcgZnVuY3Rpb25zCglpbnNlcnRfYnJlYWsoKTogRml4ZWQsIGFkZHMgd3JpdGUgYWNjZXNzIHRvIHBhZ2UgYmVmb3JlIHdyaXRpbmcKCXdpbmVfYnAubmV4dF9hZGRyOiBuZXcgc3RydWN0dXJlIGZpZWxkCgoJKiBbZGVidWdnZXIvZGJnLnldCglDaGFuZ2VkIHN5bWJvbCdzIHZhbHVlIHRvIGJlIGl0J3MgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdmFsdWUKCXBvaW50ZWQgdG8gYnkgdGhlIHN5bWJvbC4KCUNoYW5nZWQgU0lHVFJBUCBoYW5kbGluZyB0byBhbGxvdyBjb250aW51YXRpb24gYWZ0ZXIgYnJlYWsgcG9pbnQKCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEFib3V0KCk6IExvYWQgcmVzb3VyY2UgZnJvbSBtZW1vcnkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAyMCAxODozMDowNiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdIFtpbmNsdWRlL3Njcm9sbC5oXQoJUmV3cml0dGVuIG1vc3Qgb2Ygc2Nyb2xsLWJhciBjb2RlIGZvciBiZXR0ZXIgV2luZG93cyBsb29rICYgZmVlbC4KCUltcGxlbWVudGVkIEVuYWJsZVNjcm9sbEJhcigpLgoJUHJlbGltaW5hcnkga2V5Ym9hcmQgc3VwcG9ydC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgQmFkTWF0Y2ggZXJyb3IgZm9yIEJpdEJsdCgpIGFuZCBTdHJldGNoQmx0KCkgd2hlbiByZWFkaW5nCgliaXRzIGZyb20gb3V0c2lkZSB0aGUgdmlzaWJsZSByZWdpb24uCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gW2luY2x1ZGUvYml0bWFwcy9vYm1fKl0KCVVzZSBYUE0gc3ltYm9saWMgY29sb3JzIHRvIGxvYWQgYml0bWFwcy4gVGhpcyBhbGxvd3MgdGhlIGNvbG9ycwoJb2YgdGhlIGJpdG1hcHMgdG8gZGVwZW5kIG9uIHRoZSBzeXN0ZW0gY29sb3JzLgoKCSogW3Rvb2xzL21ha2VfZGVidWddCglNYWRlIHRoZSBtYWtlX2RlYnVnIHNjcmlwdCBtb3JlIHJvYnVzdC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgQ2hlY2tSYWRpb0J1dHRvbigpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGZldyBjaGFuZ2VzIHRvIHNjcm9sbC1iYXIgZHJhd2luZyBhbmQgdHJhY2tpbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJlbmFtZWQgTmV4dFdpbmRvd0Zyb21Qb2ludCgpIHRvIFdJTlBPU19OZXh0V2luZG93RnJvbVBvaW50KCkgdG8KCWF2b2lkIGNvbmZ1c2lvbiwgYW5kIG9wdGltaXplZCBpdCBzb21ld2hhdC4KCk5vdiAxOSwgOTQgTWFydGluIEF5b3R0ZSAod2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EpCgoJKiBbbWlzYy9hdWRpby5jXQoJKiBbbWlzYy9tY2lhbmltLmNdCgltb3JlIGNvZGluZyBidXQgbm90aGluZyBzcGVjdGFjdWxhci4KCgkqIFttaXNjL21tYXV4LmNdCglzb21lIGNvZGluZyB0byBhY2Nlc3MgJy9kZXYvbWl4ZXInLgoKCSogW21pc2MvbWlkaS5jXQoJc29tZSBjb2RpbmcgdG8gcmVhZCAuTUlEIGZpbGVzLCBidXQgaXQncyBub3QgcGxheWluZyB5ZXQuCgpTdW4gTm92IDEzIDE5OjMxOjAzIDE5OTQgICAgSmFtZXMgWW91bmdtYW4gKG1iY3N0anlAYWZzLm1hbi5hYy51aykKCgkqIFtvYmplY3RzL2RpYi5jXQoJUmVpbXBsZW1lbnRlZCBESUJfU2V0SW1hZ2VCaXRzX1JMRTgoKSBzbyB0aGF0IGl0IHdvdWxkIGNvcGUgd2l0aAoJYml0bWFwcyB3aGljaCBkb24ndCBlbmQgMHgwMCwgMHgwMiAocHJldmlvdXNseSBpdCBibGV3IHVwKS4gIFRoaXMKCWluY2x1ZGVzIHNvbWUgYml0bWFwcyBvdXRwdXQgYnkgUGFpbnQgU2hvcCBQcm8uICBJbXBsZW1lbnRhdGlvbiBpcwoJcG9zc2libHkgbm93IHRvbyBsYXguICBQbGVhc2Ugc2VlIHRoZSBub3RlcyBvbiB0aGUgZnVuY3Rpb24gYWJvdXQKCXdoeS4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglUaGUgZGVza3RvcCBwYXR0ZXJuIHNob3VsZCBiZSBwYWludGVkIGlmIHRoZSB3YWxscGFwZXIgZG9lc24ndAoJY292ZXIgdGhlIHdob2xlIHNjcmVlbiB3aWR0aCBPUiB0aGUgd2hvbGUgc2NyZWVuIGhlaWdodC4KClN1biBOb3YgMTMgMDA6MDc6MTEgTUVUIDE5OTQJRXJpayBCb3MJPGVyaWtAeHM0YWxsLm5sPgoKCSogW29iamVjdHMvZGliLmNdCglTbWFsbCBidWcgaW4gRElCX1NldEltYWdlQml0cygpIGZpeGVkLCBiaXRtYXBzIGluIDE2LDI0IGJwcAoJbm93IHdvcmsuCgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdIFtpbmNsdWRlL3Jlc291cmNlLmhdCglTb21lIGNsZWFudXAuCgpUaHUgTm92IDEwIDIwOjQ0OjU4IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgoJKiBbQ29uZmlndXJlXQoJICBbcmMvc3lzcmVzLnJjXQoJUHJpbWl0aXZlIGNvbXBpbGUtdGltZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMKCgkqIFtyYy9zeXNyZXNfRGUucmNdCglOZXcgZmlsZQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTG9hZEJpdG1hcDogUmVjb2duaXplIGVuZCBvZiBzeXNyZXNibSBwcm9wZXJseQoKCSogW3JjL0ltYWtlZmlsZV0KCVJ1bGVzIHRvIGNvbXBpbGUgcmVzb3VyY2VzIHNpbXBsaWZpZWQsIGRlcGVuZGVuY2llcyBjaGFuZ2VkCgoJKiBbcmMvc3lzcmVzYm0ucmNdCglEb24ndCB1c2Ugc3lzcmVzYm0gaWYgdXNpbmcgWFBNCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUNyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW06IFJldmVyc2UgWi1vcmRlciBvZiBjb250cm9scwoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTVNHX1RyYW5zbGF0ZU1vdXNlTXNnOiBGaXggSFRUUkFOU1BBUkVOVCBoYW5kbGluZwoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglOZXh0V2luZG93RnJvbVBvaW50OiBOZXcgZnVuY3Rpb24KCgkqIFtjb250cm9scy9idXR0b24uY10KCVdNX05DSElUVEVTVDogR3JvdXAgQm94IGlzIEhUVFJBTlNQQVJFTlQKCUJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbjogTmV3IGZ1bmN0aW9uCglCTV9TRVRDSEVDSzogQWRkZWQgY2FsbCB0byBCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24KCk1vbiBOb3YgIDcgMTE6MjA6MjYgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZi5jdHMuY29tKQoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4IGhhbmcgd2hlbiB1c2luZyBEcmF3VGV4dCguLi4sIERUX1dPUkRCUkVBSykgd2l0aCBhIHdvcmQgdGhhdAoJaXMgdG9vIGxvbmcgdG8gYnJlYWsuCgoJKiBbb2JqZWN0cy9mb250LmNdCglEb24ndCBhc3N1bWUgaGVsdmV0aWNhIGlmIHRoZXJlIGlzIG5vIGZvbnQgZmFtaWx5OyBsZXQgdGhlIG90aGVyCglmb250IGF0dHJpYnV0ZXMgZGVjaWRlIHdoYXQgZm9udCB0byB1c2UuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJTGlzdGJveGVzIGFuZCBjb21ibyBib3hlcyBuZWVkIHRvIGJlIG5vdGlmaWVkIG9mIGRvdWJsZS1jbGlja3MuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJICBbaW5jbHVkZS9saXN0Ym94LmhdCgoJc2Nyb2xsaW5nIHRvIGJvdHRvbSBvZiBsaXN0IGJveCBzaG91bGQgZGlzcGxheSBsYXN0IGl0ZW0gYXQgdGhlCglib3R0b20sIG5vdCBhdCB0aGUgdG9wLgoJCglsaXN0IGJveGVzIG5lZWQgdG8gYWxsb2NhdGUgYSBzZXBhcmF0ZSBoZWFwIGZvciB0aGVpciBpdGVtIGRhdGEsCglyYXRoZXIgdGhhbiB1c2luZyB0aGUgdXNlciBoZWFwLiAgT3RoZXJ3aXNlLCBpdCdzIHZlcnkgZWFzeSB0byBydW4KCW91dCBvZiBtZW1vcnkgZm9yIGxpc3QgYm94IGl0ZW1zLgoKCXJlbW92ZWQgcmVkdW5kYW50IGNvZGUgaW4gTGlzdEJveEFkZFN0cmluZygpLiAgSW1wbGVtZW50ZWQgc2ltcGxlCgl2ZXJzaW9uIG9mIExCU19TT1JULgoKCURvbid0IHB1dCBbLl0gaW4gdGhlIGxpc3QgYm94IHdoZW4gdXNpbmcgRERMX0RJUkVDVE9SWS4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm9zIHNob3VsZCBwYXNzIENCU19TT1JUIG9udG8gdGhlaXIgbGlzdCBib3guCgoJKiBbd2luZG93cy93aW4uY10KCUlmIHdpbmRvdyBjcmVhdGlvbiBpcyBhYm9ydGVkLCByZW1vdmUgdGhlIHdpbmRvdyBmcm9tIHRoZQoJbGlua2VkIGxpc3RzLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJc3RhdGljIGNvbnRyb2xzIHdpdGggU1NfSUNPTiB3ZXJlIGFsd2F5cyByZXR1cm5pbmcgMCBmcm9tCglXTV9OQ0NSRUFURS4KCglNYWtlIHN1cmUgc3RhdGljIGNvbnRyb2xzIGhhdmUgdGV4dCB0byBkcmF3IGJlZm9yZSBkcmF3aW5nIGl0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92ICA2IDE4OjUyOjA0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXSAgKE5ldyBmaWxlKQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gdXNlIC54cG0gZmlsZXMgZm9yIE9FTSBiaXRtYXBzLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vYm0qXSAgKE5ldyBmaWxlcykKCVJlZHJhd24gYWxsIE9FTSBiaXRtYXBzIGluIHhwbSBmb3JtYXQuCgoJKiBbb2JqZWN0cy9mb250LmNdCglBZGQgc3BhY2UgZm9yIGludGVybmFsIGxlYWRpbmcgd2hlbiB1c2luZyBhIG5lZ2F0aXZlIGZvbnQgaGVpZ2h0LgoJU3R1YnMgZm9yIEFkZEZvbnRSZXNvdXJjZSgpIGFuZCBSZW1vdmVGb250UmVzb3VyY2UoKS4KCUZpeCBpbiBGT05UX0luaXQoKSBmb3IgdW5pbml0aWFsaXNlZCBkZWZhdWx0IGZvbnQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1ha2UgZm9udCBoZWlnaHQgbmVnYXRpdmUgYXMgaXQgaXMgcmVhbGx5IGEgcG9pbnQgc2l6ZSBhbmQgbm90IGEKCXBpeGVsIHNpemU7IGRpYWxvZ3MgdXNpbmcgOC1wb2ludCBmb250cyBsb29rIGJldHRlciBub3cuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZWQgdGhlIGZpeCA6LSkgZm9yIFBpZSgpIHRvIG1ha2UgaXQgd29yayBmb3IgQXJjKCkgYW5kIENob3JkKCkgYWxzby4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQSBmZXcgY2hhbmdlcyBmb3IgbmV3IE9FTSBiaXRtYXBzLgoKU3VuIE5vdiAgNiAxODoyMjoxOCAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglUaGUgbmFtZXMgb2YgbG9jYWwgY2xhc3NlcyBoYXZlIHRvIGJlIHN0b3JlZCB1c2luZyBHbG9iYWxBdG9tKi4KCU90aGVyd2lzZSB0aGV5IGNvdWxkbid0IGJlIGFjY2Vzc2VkIGZyb20gb3RoZXIgbW9kdWxlcyAoZS5nLiBCV0NDKSAKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvMTYoY3gpOiBJdCdzIHBvc3NpYmxlIHRvIHNldCB0aGUgY29udGVudHMgb2YgdGhlIGN4LXJlZ2lzdGVyLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJSW5pdE5FRExMKCk6IFRoZSBzaXplIG9mIHRoZSBsb2NhbCBoZWFwIGlzIG5vdyBwYXNzZWQgaW4gdGhlIGN4LQoJcmVnaXN0ZXIgd2hlbiBpbml0aWFsaXppbmcgYSBETEwuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUxvY2FsSW5pdCgpOiBUaGUgY2FzZSBzdGFydD09MCBpcyBub3cgaGFuZGxlZCBpbiB0aGUgd2F5IGl0IHNob3VsZC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJR2V0V2luZG93TG9uZygpOiBJZiB0aGUgYWRyZXNzIG9mIHRoZSB3aW5kb3dzIGZ1bmN0aW9uIGlzIHJlcXVlc3RlZAoJaXQncyBubyBsb25nZXIgcmV0dXJuZWQgaWYgaXQncyB3aXRoaW4gdGhlIFdpbmUgY29kZSAoYW5kIHRoZXJlZm9yZQoJdW5yZWFjaGFibGUgYnkgYSB3aW5kb3dzIHByb2dyYW0pLiBUaGlzIG1ha2VzIEJvcmxhbmQncyBPV0wgaGFwcHkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9HZXRTdHIoKTogQWRkZWQgaGFuZGxpbmcgZm9yIG9mZjwwLgoKU3VuIE5vdiAgNiAxNzozNzoxNCAxOTk0ICBDaHJpcyBKb25lcyAgPGNocmlzakBpY2hpcHMuaW50ZWwuY29tPgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglGaXhlZCBpbmZpbml0ZSBsb29wIGJ1ZyB3aGVuIHR3byBETExzIHJlZmVyIHRvIGVhY2ggb3RoZXIgKGZpeGVzCgloYW5ndXAgb2YgUXVpY2tlbiBkdXJpbmcgbG9hZGluZykuCgpUaHUgTm92IDA0IDEyOjAwOjAwIDE5OTQgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaC5zdWIuZGUpCgoJKiBbbWlzYy9kb3NfZnMuY10KCUJ1ZyBmaXg6IFRoZSBzaXplIG9mIGEgZGlzayBhbiB0aGUgYXZhaWxhYmxlIHNwYWNlCglpcyBub3cgcmV0dXJuZWQgaW4gYnl0ZXMgaW5zdGVhZCBvZiAoaW5jb3JyZWN0bHkpCglLQnl0ZXMuCgpUaHUgTm92IDAzIDEyOjAwOjAwIDE5OTQgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaC5zdWIuZGUpCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeDogUGllIHNlZ21lbnRzIGFyZSBub3cgZmlsbGVkIHdpdGggY29ycmVjdCBicnVzaC4KClRodSBOb3YgIDMgMTA6NDA6MDkgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCiAgICAgICAgKiBbSW1ha2VmaWxlXQogICAgICAgIGdlbmVyYXRlIHJjLm8gYmVmb3JlIGxvYWRlci5vCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBDb3B5U3lzTWVudTogZ2VuZXJhdGUgU1lTTUVOVSBvbiB0aGUgZmx5LCBlbGltaW5hdGUgaFN5c01lbnUKCiAgICAgICAgKiBbaW5jbHVkZS9yZXNvdXJjZS5oXQogICAgICAgIEFkZCBzdHJ1Y3QgUmVzb3VyY2VUYWJsZQoKICAgICAgICAqIFtsb2FkZXIvYml0bWFwLmhdCiAgICAgICAgTG9hZCBzeXN0ZW0gYml0bWFwcyBmcm9tIHN5c3Jlc2JtVGFibGUKCiAgICAgICAgKiBbbWlzYy9jbGlwYm9hcmQuY10KICAgICAgICAgIFt3aW5kb3dzL2V2ZW50LmNdCiAgICAgICAgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUsRVZFTlRfU2VsZWN0aW9uUmVxdWVzdDogYnVnIGZpeGVzCiAgICAgICAgCiAgICAgICAgKiBbcmMvSW1ha2VmaWxlXQogICAgICAgIGdlbmVyYXRlIHJjLm8gZnJvbSBzeXNyZXMubyBhbmQgc3lzcmVzYm0uby4gQWRkZWQgLWxmbAoKICAgICAgICAqIFtyYy9yYy55XQogICAgICAgIGNoYW5nZSBzdHlsZSBoYW5kbGluZyB0byBhbGxvdyAoIFMxIHwgUzIgKSB8IFMzCgogICAgICAgICogW3JjL3N5c3Jlcy5yY10KICAgICAgICAgIFtyYy9zeXNyZXNibS5yY10KICAgICAgICBQdXQgYml0bWFwcyBhbmQgaWNvbnMgdG8gc3lzcmVzYm0sIGV2ZXJ5dGhpbmcgZWxzZSB0byBzeXNyZXMKCiAgICAgICAgKiBbcmMvd2luZXJjLmNdCiAgICAgICAgICBbcmMvd2luZXJjLmhdCiAgICAgICAgQWRkZWQgLW8sIC1jIGZsYWdzLiBOZXcgZnVuY3Rpb24gc2V0X291dF9maWxlLiBPdXRwdXQgdG8gZmlsZXMuCgogICAgICAgICogW3dpbmRvd3MvZGlhbG9nLmNdCiAgICAgICAgRGlhbG9nQm94SW5kaXJlY3RQdHIsIERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHI6IE5ldyBmdW5jdGlvbnMgCgogICAgICAgICogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCiAgICAgICAgQ3JlYXRlIEFib3V0V2luZSBkaWFsb2cgZnJvbSB0ZW1wbGF0ZSBwb2ludGVyCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMzAgMTM6MDE6MTggMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJQnVnIGZpeCBmb3IgU1NfSUNPTiBjb250cm9scy4KCgkqIFtpZjE2MzIvSW1ha2VmaWxlXQoJRml4ZWQgY2FsbC5vIGRlcGVuZGVuY2llcy4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2RjLmNdCglGaXhlZCB2aXNpYmxlIHJlZ2lvbiBoYW5kbGluZy4gaFZpc1JnbiBpcyBhbHdheXMgbm9uLW51bGwgbm93LgoKCSogW3dpbmRvd3MvZGNlLmNdCglCdWcgZml4IGluIEdldERDRXggZm9yIENTX09XTkRDIHdpbmRvd3MuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVzIHRvIGljb24gd2luZG93IGRyYXdpbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUEgZmV3IGZpeGVzIGluIFNldFdpbmRvd1BvcygpLgoKU3VuIE9jdCAzMCAxMjo1MDoyNCAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJQml0Qmx0KCk6IEJpdEJsdCBpcyBub3cgYWJsZSB0byBoYW5kbGUgYW55IHJhc3RlciBvcGVyYXRpb24uIElmCgl0aGUgcmVxdWVzdCBjYW4ndCBiZSBwYXNzZWQgdG8gWFdpbmRvd3MgZGlyZWN0bHksIGl0J3MgcXVpdGUKCXNsb3csIHRob3VnaC4KCgkqIFsqLyouY10KCSAgW21pc2MvbWFpbi5jXQoJSW1wcm92ZW1lbnRzIG9mIHRoZSBzeXN0ZW0gZm9yIGhhbmRsaW5nIGRlYnVnIG1lc3NhZ2VzLiBPcHRpb25zIGFyZQoJbm93IGFsc28gbG9hZGVkIGZyb20gL3Vzci9saWIvWDExL2FwcC1kZWZhdWx0cy9XaW5lIChpbnNlcnQKCSpkZWJ1Z29wdGlvbnM6ICt4eHggdGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSB0dXJuIG1lc3NhZ2VzIHh4eCBvbikuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRGVzdHJveU1lbnUoKTogVGhlIHdob2xlIHdpbmRvdyB3b24ndCBiZSBkZXN0cm95ZWQgYXMgYSBzaWRlZWZmZWN0CglhbnkgbG9uZ2VyLgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogRml4ZWQgYnVnIGluIHNlYXJjaGluZyBpbiBzeXN0ZW0vd2luZG93LWRpcmVjdG9yeS4KClN1biBPY3QgMzAgMTI6MjU6NTMgMTk5NCAgSmltbXkgVGlydGF3YW5nc2EgPGowdDI1MjdAdGFtMjAwMC50YW11LmVkdT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUJ1ZyBmaXggZm9yIHdpbmRvdyByZWxhdGVkIHN0cnVjdHVyZXMuCglEQ0IgYW5kIENPTVNUQVQgYXJlIGFmZmVjdGVkLiBUaGV5IG11c3QgYmUgcGFja2VkLgoKCSogW21pc2MvY29tbS5jXQoJQnVnIGZpeCBmb3IgQ09NIHBvcnRzOgoJRGlhbCBhbmQgZGlhbG9nIHdpbmRvdyBpbiB0ZXJtaW5hbC5leGUgbm93IHdvcmtzLgoJTm9uIHNlcXVlbnRpYWwgQ09NIGFzc2lnbm1lbnRzIGluIHdpbmUuY29uZiBzaG91bGQgbm90IGJyZWFrIG5vdy4KCUJhdWRyYXRlIGNhbiBiZSBzcGVjaWZpZWQgaW4gd2luZS5jb25mIHRvIG92ZXJjb21lIGJhdWRyYXRlIGxpbWl0YXRpb24KCWluIG1zd2luZG93LiBTZWUgc2FtcGxlIHdpbmUuaW5pCgoJKiBbaW5jbHVkZS9jb21tLmhdCglhZGQgYmF1ZHJhdGUgZmllbGQgdG8gRG9zRGV2aWNlU3RydWN0cmUKCgkqIFtvYmplY3QvZm9udC5jXQoJQnVnIGZpeCBmb3IgZm9udCBhc3NpZ25tZW50LgoJVXNlIHBhaXJzIG9mIGZvdW5kcnkgYW5kIGZhbWlseSBmb250bmFtZXMgaW4gWDExIHRvIGNvcnJlc3BvbmQgd2l0aAoJd2luZG93J3MgZm9udHMuCglQdXQgZm9udCBhc3NpZ25tZW50IGluaSB3aW5lLmluaS4KCgkqIFt3aW5lLmluaV0KCUFkZGluZyBvcHRpb25hbCBiYXVkcmF0ZSBhZnRlciBwb3J0IG5hbWUgaW4gInNlcmlhbHBvcnRzIiBzZWN0aW9uCglBZGQgbmV3IHNlY3Rpb24sICJmb250cyIuCgkiZGVmYXVsdCIgaXMgc3BlY2lhbCBrZXkgaW4gImZvbnRzIiB0byBtYXRjaCBhbnkgdW5tYXRjaCB3aW5kb3cgZm9udC4KCk9jdCAyOSwgOTQgKG5ldyBhZGRyZXNzKSB3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtpZjE2MzIvcmVsYXkuY10KCSogW2lmMTYzMi9jb21tZGxnLnNwZWNdIAlOZXcgZmlsZS4KCSogW21pc2MvY29tbWRsZy5jXSAJCQlOZXcgZmlsZS4KCSogW2luY2x1ZGUvY29tbWRsZy5oXSAJCU5ldyBmaWxlLgoJQmVnaW4gb2YgYW4gZW11bGF0ZWQgQ09NTURMRyBETEwsIGJ1aWx0LWluIGZvciBub3cuCgkoQlRXLCBpZiB5b3Ugd2FudCB0byBzd2l0Y2ggYmV0d2VlbiBidWlsdC1pbiAmIDE2Yml0cyBDb21tRGxnLCBvbmx5IAoJdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgdG8gcHV0IHRoZSByZWFsL2R1bW15IG5hbWUgaW4gZmlsZSByZWxheS5jKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJKiBbY29udHJvbHMvY29tYm8uY10KCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZldyBidWcgZml4ZXMgYW5kL29yIGNvc21ldGljLgoKCSogW21pc2MvYXVkaW8uY10KCSogW21pc2MvbW1hdXguY10KCWJ1ZyBmaXhlcyBhbmQgZmxhZ3MgcmV0dXJuZWQgdG8gZW11bGF0ZSBTQjE2LgoKCSogW21pc2MvbWlkaS5jXSAJCQlOZXcgZmlsZS4KCXNrZWxldG9uIGZvciAnTWlkaScgTU1TWVNURU0gJiBNQ0kgZHJpdmVyLgoKCSogW21pc2MvbWNpYW5pbS5jXSAJCQlOZXcgZmlsZS4KCXNrZWxldG9uIGZvciAnQW5pbWF0aW9uMScgTUNJIGRyaXZlci4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkIG5ldyBzdHViIGZvciBHZXRMYXN0QWN0aXZlV2luZG93KCkuCgpUdWUgT2N0IDI1IDA5OjE3OjI1IDE5OTQgIE9sYWYgRmxlYmJlICAoZmxlYmJlQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCgkqIFtpZjE2MzIvY2FsbC5TXSBbdG9vbHMvYnVpbGQuY10KICAgICAgICAgICBTdXBwb3J0IGZvciBFTEYgZm9ybWF0LiAoTm90IGNvbXBsZXRlKQoKU3VuIE9jdCAyMyAwMDo1MTo1MCAxOTk0ICBQYXVsIEZhbHN0YWQgIChwZkB6b29mKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGQgc3R1YnMgZm9yIEFycmFuZ2VJY29uaWNXaW5kb3dzKCksIGV0Yy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGQgSXNCYWQqUHRyKCkgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZCB0ZXN0X21lbW9yeSgpLCBmb3IgdXNlIHdpdGggSXNCYWQqUHRyKCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZCBzdHVicyBmb3IgVGlsZUNoaWxkV2luZG93cygpLCBldGMuCgoJKiBbd2luZG93cy93aW4uY10KCUlzV2luZG93KCkgc2hvdWxkbid0IGNyYXNoIGlmIGl0J3MgZ2l2ZW4gYSBiYWQgaGFuZGxlLgoJQWRkIHN0dWIgZm9yIEdldExhc3RBY3RpdmVQb3B1cCgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudCB0aGUgSXNCYWQqUHRyKCkgZnVuY3Rpb25zLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVJldHVybiB0aGUgZnVsbCBsb25nd29yZCBvZiB0aGUgaXRlbSBkYXRhIGluIExCX0dFVElURU1EQVRBLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCURvbid0IGxldCB0aGUgdXNlciBzZWxlY3QgYW4gYXJlYSBwYXN0IHRoZSBlbmQgb2YgdGhlIHRleHQuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbiBEcmF3VGV4dCgpLCB0aGUgY29kZSB0byBkZWxldGUgY3JsZnMgYWxzbyByZW1vdmVkIG11bHRpcGxlCgljb25zZWN1dGl2ZSBuZXdsaW5lcy4gIEFsc28sIHVzaW5nIERUX0NBTENSRUNUIGRpZG4ndCByZXR1cm4KCXRoZSByaWdodCBoZWlnaHQsIGFuZCB0aGUgd2lkdGggd2Fzbid0IHJldHVybmVkIGF0IGFsbC4KCVRoaXMgY2F1c2VkIE1lc3NhZ2VCb3hlcyB0byBiZSBtaXNzaW5nIG11Y2ggb2YgdGhlaXIgdGV4dC4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJU2Nyb2xsV2luZG93W0V4XSBkaWRuJ3Qgd29yayByaWdodCB3aXRoIG51bGwgTFBSRUNUIGFyZ3VtZW50cy4KCkZyaSBPY3QgMjEgMjE6NDc6MTkgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZi5jdHMuY29tKQoKCSogW21pc2NlbXUvaW50MjEuY10KCUZpeGVkIGludDIxIDB4NDIgaGFuZGxlciB0byBwcm9wZXJseSBhc3NlbWJsZSAzMi1iaXQgc2VlayBwdHIuCgoJKiBbbWlzYy9wcm9wZXJ0eS5jXQoJRml4ZWQgaW52ZXJ0ZWQgbG9naWMgaW4gRW51bVByb3BzKCksIGFuZCBjaGFuZ2VkIENhbGxCYWNrMTYoKQoJY2FsbCB0byB1c2UgbmV3IGFyZyBmb3JtYXQuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIENhbGxCYWNrMTYoKSBjYWxsIGluIEVudW1bQ2hpbGRdV2luZG93cyB0byB1c2UgbmV3IGFyZwoJZm9ybWF0OyB0aGlzIGZpeGVzIGNyYXNoZXMgaW4gZW51bSBwcm9jZWR1cmVzLgoKV2VkIE9jdCAxOSAyMTozMDowMCBQRFQgMTk5NAkJbWFydGluQGNzLmNzdWZyZXNuby5lZHUKCgkqIFttaXNjL2NsaXBib2FyZC5jXQoJICBbd2luZG93cy9ldmVudC5jXQoJICBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBjdXQgYW5kIHBhc3RlIGJldHdlZW4gV2luZSBhbmQgb3RoZXIgWCBjbGllbnRzIHZpYQoJdGhlIFBSSU1BUlkgc2VsZWN0aW9uLiBUZXh0IG9ubHkgdGhpcyB0aW1lLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfTGluZUxlbmd0aCwgRURJVF9UZXh0TGluZSByZXR1cm4gMCBmb3IgbGluZXMgYWZ0ZXIgbGFzdCBvbmUuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVNlbmQgV01fU1lTQ09NTUFORCB0byBvdmVybGFwcGVkIGFuY2VzdG9yIHdpbmRvdywgCglub3QgdGhlIHJlY2VpdmVyIG9mIFdNX1NZU0tFWURPV04KClNhdCBPY3QgMjIgMTU6MDE6MDIgMTk5NCAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBicmFkZm9yZC5hYy51az4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQoJQ2xpZW50V2lkdGgoKS9DbGllbnRIZWlnaHQoKSBtYWNyb3M6IHJldHVybiAwIGlmIHNpemUgd291bGQKCWJlIG5lZ2F0aXZlCglFRElUX1N0ckxlbmd0aCgpOiB0YWtlcyB1bnNpZ25lZCBjaGFyKiBpbnN0ZWFkIG9mIGNoYXIqCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdEJveFduZFByb2MoKTogaW4gImNhc2UgV01fTU9VU0VNT1ZFIiAtIHNldCBscGhsIGF0IHN0YXJ0IG9mCgljYXNlIGluc3RlYWQgb2YgaW4gZWFjaCBwbGFjZSByZXF1aXJlZCAoaXQgd2FzIG9taXR0ZWQgaW4KCXNvbWUgcGxhY2VzIGNhdXNpbmcgcHJvYmxlbXMhKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1FTlVfQ2FsY0l0ZW1TaXplKCk6IGRvbid0IHRyeSB0byBmaW5kIHNpemUgb2YgYSB0ZXh0IGl0ZW0KCWlmIHRoZSBwb2ludGVyIGlzIE5VTEwKCgkqIFtpbmNsdWRlL2hlYXAuaF0KCWFkZGVkIGRlZmluaXRpb24gb2YgSEVBUF9Mb2NhbEluaXQoKQoKCSogW2luY2x1ZGUvbXNkb3MuaF0KCXJlbW92ZWQgYnVnZ3kgcG9pbnRlcigpIG1hY3JvICh1c2UgU0FGRU1BS0VQVFIoKSBmcm9tIHNlZ21lbS5oCglpbnN0ZWFkKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJSVBDQ29weVNlbGVjdG9yKCk6IGFkZGVkIG1pc3NpbmcgZmxhZ3MgdG8gc2htZ2V0KCkgY2FsbAoJPyBkb2VzIHRoaXMgYnJlYWsgbGludXggLSBJIGFkZGVkIHRoZXNlIGZsYWdzIGluIGEgcHJldmlvdXMKCXBhdGNoIGJ1dCB0aGV5IHdlcmUgbWlzc2luZyBpbiB0aGUgY29ycmVzcG9uZGluZyByZWxlYXNlID8KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCgl3aW5fZmF1bHQoKTogYWRkZWQgbWlzc2luZyBkZWZpbml0aW9ucyBvZiBpLCBkdW1wIGZvciB0aG9zZQoJbm90IHJ1bm5pbmcgTmV0QlNEIG9yIGxpbnV4CgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19HZXRDdXJyZW50RGlyKCk6IG1hZGUgdGVtcFtdIHN0YXRpYyBzbyBpdCBjYW4gYmUgc2FmZWx5CglyZXR1cm5lZAoKCSogW21pc2NlbXUvaW50MjEuYyxpbnQyNS5jLGludDI2LmNdCglDaGFuZ2VkIGFsbCBpbnZvY2F0aW9ucyBvZiBwb2ludGVyKCkgdG8gU0FGRU1BS0VQVFIoKS4gSW5jbHVkZWQKCXNlZ21lbS5oIHdoZXJlIG5lY2Vzc2FyeS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbSgpOiBDaGFuZ2VkIEhFQVBfSW5pdCgpIGNhbGwgdG8gCglIRUFQX0xvY2FsSW5pdCgpLCByZW1vdmVkIHJlZHVuZGFudCB2YXJpYWJsZXMKClNhdCBPY3QgMjIgMDA6Mjk6NDEgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvbWFpbi5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCgkgIFttaXNjL2V4ZWMuY10gW21pc2NlbXUvaW50MTAuY10gW21pc2NlbXUvaW50MjEuY10KCSAgW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL21ldGFmaWxlLmNdCglSZXdyaXR0ZW4gbW9yZSBwcmludGYncyB0byB1c2UgdGhlIG5ldyBkZWJ1Z2dpbmcgc3lzdGVtLCBhbmQKCW1hZGUgd2luZSBsZXNzIHZlcmJvc2UgcGVyIGRlZmF1bHQuIFVzZSAiLWRlYnVnbXNnICttb2R1bGUiCgl0byBnZXQgKGFsbW9zdCkgdGhlIHNhbWUgYmVoYXZpb3IgYXMgYmVmb3JlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDE2IDEzOjI5OjA3IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9idXR0b24uY10KCUltcGxlbWVudGVkIFdNX0dFVERMR0NPREUsIFdNX1NFVEZPTlQsIEJNX1NFVFNUWUxFLCBCTV9TRVRDSEVDSywKCUJNX1NFVFNUQVRFLgoJSW1wbGVtZW50ZWQgZGVmYXVsdCBidXR0b24gcGFpbnRpbmcuCglPcHRpbWlzZWQgcmVkcmF3aW5nLgoJRml4ZWQgb3duZXItZHJhdyBidXR0b25zLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJSW1wbGVtZW50ZWQgV01fU0VURk9OVC4KCUEgZmV3IG9wdGltaXNhdGlvbnMgaW4gcGFpbnRpbmcgY29kZS4KCUJ1ZyBmaXggZm9yIFNTX1NJTVBMRSBjb250cm9scy4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVByZWxpbWluYXJ5IEdldENvZGVIYW5kbGUoKS4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdCglDaGFuZ2VkICdwYXNjYWwnIHRvICdwYXNjYWwxNicgZXZlcnl3aGVyZSBpdCdzIG5lZWRlZC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIGEgZmV3IGRhdGEgc3RydWN0dXJlcy4KCgkqIFttZW1vcnkvaGVhcC5jXQoJQnVnIGZpeCBpbiBIRUFQX1JlQWxsb2MoKS4KCgkqIFttaXNjL2N1cnNvci5jXQoJRml4ZWQgU2V0Q3Vyc29yKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIFBhdEJsdCgpIHdoZW4gdXNpbmcgQkxBQ0tORVNTIG9yIFdISVRFTkVTUyBjb2Rlcy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUJldHRlciBmb250IG1hcHBpbmcgY29kZS4KCUltcGxlbWVudGVkIEdldFRleHRGYWNlKCkuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUJ1ZyBmaXggaW4gUkVHSU9OX01ha2VQaXhtYXAoKS4KCUZhc3RlciByZWdpb24gY29weWluZy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUltcGxlbWVudGVkIEV4dFRleHRPdXQoKS4KCUltcGxlbWVudGVkIERUX05PQ0xJUCBzdHlsZSBmb3IgRHJhd1RleHQoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglGcmVlIHRoZSBiaXRtYXAgd2hlbiBkZWxldGluZyBhIG1lbW9yeSBEQy4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igd2luZG93cyB0aGF0IGhhdmUgbm8gYXNzb2NpYXRlZCBYIHdpbmRvdy4KCUltcGxlbWVudGVkIERDWF9DTElQU0lCTElOR1MgYW5kIERDWF9QQVJFTlRDTElQIGluIEdldERDRXgoKS4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJSW1wbGVtZW50ZWQgZGVmYXVsdCBwdXNoIGJ1dHRvbiBoYW5kbGluZyBhbmQgRE1fU0VUREVGSUQuCglJbXBsZW1lbnRlZCBXTV9ORVhURExHQ1RMLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBkZWZhdWx0IHB1c2ggYnV0dG9uIGhhbmRsaW5nLgoJQmVnaW5uaW5nIG9mIGEga2V5Ym9hcmQgaW50ZXJmYWNlIGluIGRpYWxvZ3MKCShkb2VzIG5vdCByZWFsbHkgd29yayB5ZXQpLgoJRml4ZWQgZGlhbG9ncyB0aGF0IHVzZSBhIHNwZWNpYWwgZm9udC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2ZvY3VzLmNdCglBZGRlZCBzdXBwb3J0IGZvciBub24tWCB3aW5kb3dzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJld3JpdHRlbiBGbG9vZEZpbGwoKSBhbmQgaW1wbGVtZW50ZWQgRXh0Rmxvb2RGaWxsKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglDbGVhbmVyIGhhcmR3YXJlIG1lc3NhZ2VzIGFuZCBYIGV2ZW50cyBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9wYWludGluZy5jXQoJSW1wbGVtZW50ZWQgV01fU0VUUkVEUkFXLgoKCSogW3dpbmRvd3Mvd2luLmNdCglPbmx5IGNyZWF0ZSBhbiBYIHdpbmRvdyBmb3IgdG9wLWxldmVsIHdpbmRvd3MsIG9yIGZvciB0aGUgZGVza3RvcC4KCUNoaWxkIHdpbmRvd3Mgbm93IHVzZSB0aGVpciBwYXJlbnQncyBkcmF3YWJsZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQmVnaW5uaW5nIG9mIHN1cHBvcnQgZm9yIG5vbi1YIHdpbmRvd3MgKHN0aWxsIHNvbWV3aGF0IGJyb2tlbikuCglJbXBsZW1lbnRlZCAqRGVmZXJXaW5kb3dQb3MoKS4KCgkqIFsqL0ltYWtlZmlsZV0KCUNsZWFuZWQgdXAgc29tZSBJbWFrZWZpbGVzLgoJTW92ZWQgZGMuYyBmcm9tIHdpbmRvd3MvIHRvIG9iamVjdHMvLgoJTW92ZWQgY3Vyc29yLmMgZnJvbSBtaXNjLyB0byB3aW5kb3dzLy4KClN1biBPY3QgMTYgMTI6MjE6NTIgMTk5NCAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kNDAwLmRlPgoKCSogW2luY2x1ZGUvZGVidWcuaF0KCSAgW2luY2x1ZGUvc3RkZGVidWcuaF0KCSAgWyovKi5jXQogICAgICAgIFJld3JpdHRlbiBhbGwgdGhlIGNhbGxzIHRvIHByaW50ZiBmb3IgZGlzcGxheWluZyBkZWJ1Zy1pbmZvcm1hdGlvbgogICAgICAgIChtZXNzYWdlcyBsaWtlICJMb2FkSW1hZ2U6IGxvYWRpbmcgU09MIChTT0wuRVhFKSIgZXRjLikgCiAgICAgICAgQWRkZWQgb3B0aW9uICItZGVidWdtc2ciIHRvIFdpbmUuIEV4YW1wbGU6ICItZGVidWdtc2cgK2FsbCIgd2lsbCB0dXJuCiAgICAgICAgYWxsIHRoZXNlIG1lc3NhZ2VzIG9uLCAiLWRlYnVnbXNnIC1kbGwiIHdpbGwgdHVybiBhbGwgbWVzc2FnZXMgCgljb25jZXJuaW5nIERMTHMgb2ZmLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGRlZCBzb21lIGhhbmRsaW5nIGZvciBjb21ibyBjb250cm9scyB3aXRoIG93bmVyZHJhdy1zdHlsZXMKICAgICAgICAoanVzdCBjcmVhdGluZyBhbmQgcGFzc2luZyB0aGUgbmVjZXNzYXJ5IG1lc3NhZ2VzIHRvIHRoZSAKCWNvcnJlc3BvbmRpbmcgbGlzdGJveCBjb250cm9sOyB0aGUgZWRpdC1jb250cm9sIG5lZWRzIHRvIGJlCglyZXBsYWNlZCB3aXRoIHNvbWV0aGluZyBlbHNlKS4KCgkqIFtjb250cm9scy9lZGl0LmNdCgkgIFt3aW5kb3dzL2RpYWxvZy5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgdXNlIG9mIGdsb2JhbCBoZWFwIG1lbW9yeSBpbiBkaWFsb2dzIHdpdGggCgllZGl0IGNvbnRyb2xzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUFkZGVkIHN1cHBvcnQgZm9yIGl0ZW0gZGF0YS4KCUxpc3RCb3hJbnNlcnRTdHJpbmcoKTogRml4ZWQgYnVnIGZvciBlbGVtZW50cyB3aGljaCBhcmUgbm90IGluc2VydGVkCglhZnRlciB0aGUgY3VycmVudGx5IGxhc3QgZWxlbWVudC4KCQoJKiBbbWlzYy9kb3NfZnMuY10KCSAgW21pc2NlbXUvaW50MjEuY10KCURPU19WYWxpZERpcmVjdG9yeSgpOiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHN0cmluZyBpcyBpbiBmYWN0IHRoZQoJdmFsaWQgbmFtZSBvZiBhIGRpcmVjdG9yeS4KClNhdCBPY3QgMTUgMTc6MzU6MDAgUERUIDE5OTQJCTxtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdT4KCgkqIFtJbWFrZWZpbGVdCglnZW5lcmF0ZSB3aW5lLnN5bSBhZnRlciBjcmVhdGluZyB3aW5lCgoJKiBbZGVidWdnZXIvZGJnLnldCglsb2FkICJ3aW5lLnN5bSIgd2hlbiBlbnRlcmluZyBkZWJ1Z2dlcgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCXN5bWJvbGljIGJhY2t0cmFjZSBmb3IgMzItYml0IHN0YWNrLiBCcmVha3MgMTYtYml0IGJ0LgoKU3VuIFNlcCAgMjUgMTI6MDA6MDAgUERUIDE5OTQgICA8bWFydGluQG9zaXJpcy5jcy5jc3VmcmVzbm8uZWR1PgoKCSogW3JjL3JjLnldIFtyYy9yYy5oXSBbcmMvcmMubF0gW3JjL3dpbmVyYy5jXQoJRmlsZXMgY3JlYXRlZAoKU3VuIFNlcCAxOCAxMTowNDo0NSBNRVQgRFNUIDE5OTQgICAgICAgICAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW21pc2Mvc3B5LmNdCglFeGNsdWRlIGFuZCBJbmNsdWRlIG5vIGxvbmdlciByZXF1aXJlcyBhIHRlcm1pbmF0aW5nICc7JyB0bwoJcmVnaXN0ZXIgdGhlIGxhc3QgY29tcG9uZW50LgoKVGh1IFNlcCAxNSAyMzoxMDowOSBNRVQgRFNUIDE5OTQgICAgICAgICAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW0NvbmZpZ3VyZV0KCVJld3JvdGUgbXVjaCBvZiBpdC4gIEFkZGVkIGNhcGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSB3aW5lLmluaQoJZmlsZS4gIENvbW1lbnRlZCBvdXQgdGhlIHByb2Nlc3NvciBlbXVsYXRvciBvcHRpb25zIHVudGlsIHRoYXQKCWJlY29tZXMgaW50ZXJlc3RpbmcuICBHaXZlcyBhIHdhcm5pbmcgaWYgaXQgc2VlcyBhbnkgKi5yZWoKCWZpbGVzLiAgSSBob3BlIEkgaGF2ZW4ndCBhc3N1bWVkIHRvIG11Y2ggYWJvdXQgdGhlIHNoZWxsL09TIHNvCgl0aGF0IGl0IGJyZWFrcyB1bmRlciAqQlNELgoKCSogW21pc2MvZG9zX2ZzLmNdCglSZW1vdmVkL2NoYW5nZWQgY2FsbHMgdG8gVG9Vbml4KCkgKHdoaWNoIGNhbGxzIHRvbG93ZXIoKSkgc28KCXRoYXQgdGhlIHBhcnQgb2YgdGhlIHBhdGhuYW1lIHdoaWNoIGNvcnJlc3BvbmQgd2l0aCB0aGUgZHJpdmUKCWxldHRlciBvbiBET1Mgbm8gbG9uZ2VyIHdpbGwgYmUgbWFwcGVkIHRvIGxvd2VyY2FzZS4gIFRoaXMKCW1lYW5zIHRoYXQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGhhdmUgdXBwZXJjYXNlIGxldHRlcnMgaW4KCXRoZSBbZHJpdmVzXSBzZWN0aW9uIG9mIHdpbmUuaW5pLgoKCSogW0xJQ0VOU0VdCglDb3NtZXRpYyBjaGFuZ2VzIHNvIHRoYXQgaXQgZGlzcGxheXMgYmV0dGVyIGluIHRoZSB3aW5kb3cgeW91CglnZXQgZnJvbSBwcmVzc2luZyAiQ3JlZGl0X0xpY2Vuc2UiIGluIHRoZSAiQWJvdXQgV0lORSIgd2luZG93LgoKU3VuIEF1ZyAyMSAyMToxMjowNiBNRVQgRFNUIDE5OTQJPGVyaWtAeHM0YWxsLm5sPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUxvYWRNZW51KCkgbW92ZWQgdG8gbG9hZGVyL3Jlc291cmNlLmMuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBzdHViIGZvciBGaWxlQ0RSKCkuCgoJKiBbaW5jbHVkZS9wZWV4ZS5oXQoJQWRkZWQsIGZyb20gRXJpYydzIHBlLXRlc3QuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJQWRkZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlcy5jXQoJUmVtb3ZlZCBkdXBsaWNhdGVkIGNvZGUgaW4gKlJlc291cmNlKCkgZnVuY3Rpb25zLgoJTW92ZWQgTkUtcHJvZ3JhbSBzcGVjaWZpYyBmdW5jdGlvbnMgaW50byBuZV9pbWFnZS5jLgoJTW92ZWQgTkUtZmlsZWZvcm1hdCBmdW5jdGlvbnMgdG8gbmVfcmVzb3VyY2UuYy4KCgkqIFtwZV9pbWFnZS5jXSBbcGVfcmVzb3VyY2UuY10KCUFkZGVkLiBOb3RoaW5nIGltcGxlbWVudGVkIHRvIHJ1biBQRS1leGVjdXRhYmxlcywgcmVzb3VyY2UKCWxvYWRpbmcgb25seS4KCgkqIFttaXNjL2ZpbGUuY10KCUNoYW5nZWQgT3BlbkZpbGUoKSB0byB1c2UgbWFjcm9zLgoKCSogW21pc2Mvc2hlbGwuY10KCUFkZGVkIE5VTEwtcHRyIGNoZWNrcyB0byBTaGVsbEFib3V0KCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRml4ZWQgYSBmZXcgdHlwb3MuCgoJKiBbbWlzY2VtdS9rZXJuZWwuY10KCUFkZGVkIF9ESSA9IF9EUywgdG8gcHV0IHRoZSBjYWxsZXIncyBpbnN0YW5jZSBpbiBESS4gRG9lc24ndAoJd29yayBwcm9wZXJseSBpZiBjYWxsZXIgY2hhbmdlZCBEUyA6LSgKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAyNSAxNToyNDozNiBFRFQgMTk5NCAgICAgICAgICAgIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKICAgICAgICAqIFtpbmNsdWRlL3dpbi5oXQogICAgICAgIFJlbW92ZWQgc2VwZXJhdGUgWCB3aW5kb3cgZm9yIGljb24sIGFkZGVkIGljb24gd2lkdGgsaGVpZ2h0LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ29tbWVudGVkIG91dCB0aGUgb2xkIFNXX3h4eCBlbXVtIGFuZCBhZGRlZCBkZWZpbmVzIHNpbmNlCgl0aGV5IGFyZW4ndCBlbnVtZXJhdGVkLgoKCSogW3dpbmRvd3MvZGNlLmNdCiAgICAgICAgUmVtb3ZlZCBzb21lIG9sZGVyIElzSWNvbmljIGNoZWNrcyBmcm9tIEdldERDRXgoKSwgZnVuY3Rpb25hbGl0eQogICAgICAgIGlzIG5vdyBpbiBub25jbGllbnQgYW5kIGdlbmVyaWMgd2luZSB3aW5kb3cgaGFuZGxpbmcgY29kZS4KICAgICAgICBMb3RzIG9mIHRoYW5rcyB0byBBbGV4YW5kcmUgSnVsbGlhcmQgYWxsIHRoZSBoaW50cyBhbmQKICAgICAgICBoZWxwLi4uCgogICAgICAgICogW3dpbmRvd3MvZGVmd25kLmNdCiAgICAgICAgUmVtb3ZlZCBjYWxsIHRvIE5DX0hhbmRsZU5DUGFpbnRJY29uKCkgdW5kZXIgY2FzZSBXTV9QQUlOVElDT04sCiAgICAgICAgV01fUEFJTlRJQ09OIG5vdyBjYWxscyBOQ19IYW5kbGVOQ1BhaW50LiAgCgogICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10KICAgICAgICBSZW1vdmVkIElzSWNvbmljIGNoZWNrcy4KCiAgICAgICAgKiBbd2luZG93cy9pY29uLmNdCiAgICAgICAgUmVtb3ZlZCBldmVyeXRoaW5nIGluIHRoaXMgZmlsZSBmb3Igbm93Li4uIGNvdWxkIGJlIHVzZWQgbGF0ZXIuCiAgICAgICAgSWNvbiBmdW5jdGlvbmFsaXR5IGlzIG5vdyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIHdpbmUgd2luZG93cwogICAgICAgIGhhbmRsaW5nIGZ1bmN0aW9ucy4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL21kaS5jXQogICAgICAgIEFkZGVkIGEgU2hvd1dpbmRvdyBpbiBNRElSZXN0b3JlQ2hpbGQoKS4gIE1ESSBjaGlsZCB3aW5kb3dzIG5vdwogICAgICAgIHNob3cgdXAgd2hlbiBkZWljb25pZmllZC4gIFJlbW92ZWQgSXNJY29uaWMgY2hlY2tzLgoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KICAgICAgICBSZW1vdmVkIG9sZCBpY29uIHJvdXRpbmVzIGZyb20gaGFyZHdhcmVfZXZlbnQoKS4KCiAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KICAgICAgICBDaGFuZ2VkIE5DX0hhbmRsZU5DQ2FsY1NpemUoKSBzbyBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc2l6ZQogICAgICAgIG9mIGFuIGljb24gd2luZG93LiAgTWFkZSBOQ19JbnRlcm5hbE5DSGl0VGVzdCgpIG9uIGFuIEljb25pYwogICAgICAgIHdpbmRvdyBhbHdheXMgcmV0dXJuIEhUQ0FQVElPTi4gIE1hZGUgTkNfSGFuZGxlTkNMQnV0dG9uRGJsQ2xrKCkKICAgICAgICBvbiBhbiBJY29uaWMgd2luZG93IGFsd2F5cyBzZW5kIGEgU0NfUkVTVE9SRSBtZXNzYWdlLgoKICAgICAgICAqIFt3aW5kb3dzL3BhaW50aW5nLmNdCiAgICAgICAgQ2hhbmdlZCBSZWRyYXdXaW5kb3coKSBzbyBpdCBkb2Vzbid0IHJlZHJhdyBhbiBpY29uaWMgd2luZG93CiAgICAgICAgdW5sZXNzIGl0IGhhcyB0byAobm8gaWNvbiBmb3IgdGhpcyBjbGFzcykuCiAgICAgICAgCiAgICAgICAgKiBbd2luZG93cy93aW4uY10KICAgICAgICBSZW1vdmVkIGNyZWF0aW9uIG9mIHNlcGVyYXRlIGljb24gd2luZG93IGZyb20gQ3JlYXRlV2luZG93RXgoKS4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL3dpbnBvcy5jXQogICAgICAgIEFkZGVkIHNhdmluZyBhbmQgcmVzdG9yaW5nIG9mIHdpbmRvdyByZWN0YW5nbGUgZHVyaW5nCiAgICAgICAgaWNvbmlmaWNhdGlvbi9kZWljb25pZmljYXRpb24gdG8gU2hvd1dpbmRvdygpLiAgQWRkZWQKCWZ1bmN0aW9ucyB0byByZWN1cnNpdmVseSBoaWRlIGFuZCBzaG93IGNoaWxkcmVuLi4uIGNhbGxlZAoJYnkgU2hvd1dpbmRvdyBkdXJpbmcgaWNvbmlmaWNhdGlvbi9kZWljb25pZmljYXRpb24uCgpTYXQsIDI3IEF1ZyAxOTk0IDE4OjQ3OjM0ICswMTAwIChNRVQgRFNUKSAgbWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZSAoTWljaGFlbCBQYXRyYSkKCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCiAgICAgICAgV2FpdE1lc3NhZ2UoKTogRml4ZWQgaGFuZGxpbmcgb2Ygd21fdGltZXItbWVzc2FnZXMKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyMS5jXQogICAgICAgIEZpbmROZXh0RkNCKCk6IFJld3JpdHRlbiB0byBzdXBwb3J0IG90aGVyIGZ1bmN0aW9ucyB0aGFuIGp1c3QKICAgICAgICByZXR1cm5pbmcgdGhlIHZvbHVtZSBsYWJlbAoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogRml4IGluIGhhbmRsaW5nIG9mIE9GX0NSRUFURQoKV2VkIEF1ZyAyNCAxOTo0MDo0MiBQRFQgMTk5NCAgQW5kcmV3IExhZ29kemluc2tpICAoYW5kcmV3QG5ldGNvbS5jb20pCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIFNldFBhcmVudC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgU2V0UGFyZW50LgoKRnJpIEF1ZyAxOSAxNjozNzowMCAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJTWFueSBjaGFuZ2VzIHRocm91Z2hvdXQgZmlsZSB0byBjb3JyZWN0IGhhbmRsaW5nIG9mIHNoYXJlZCBtZW1vcnkKCWZ1bmN0aW9uIHJldHVybiBjb2Rlcy4gRnJlZUJTRCBhbmQgU3VuT1Mgc2htIGZ1bmN0aW9ucyByZXR1cm4KCS0xIG5vdCAwIG9uIGVycm9yLiBJZiBMaW51eCBpcyBkaWZmZXJlbnQsIHRoZXNlIGNoYW5nZXMKCXdpbGwgaGF2ZSB0byBiZSBiYWNrZWQgb3V0LgoJQ2xlYW51cFNlbGVjdG9ycygpOiB0aGlzIGlzIGEgbmV3IChpbnRlcm5hbCkgY2FsbCB0byBmcmVlCgl1cCBhbGwgc2VsZWN0b3JzIChhbmQgc2htIGhhbmRsZXMvbWVtb3J5KSBmb3IgdXNlIG9uIGV4aXQuCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0KCUNoYW5nZSBjb21tZW50IHRvIHJlZmxlY3QgbmV3IHVzZSBvZiBzaG1fa2V5CgoJKiBbbWlzYy9tYWluLmNdCgljYWxsZWRfYXRfZXhpdCgpOiBhZGQgY2FsbCB0byBDbGVhbnVwU2VsZWN0b3JzKCkKCk1vbiBBdWcgMjIgMTg6MTk6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJVXNlIE9CTV9DSEVDS0JPWEVTIHRvIGRyYXcgY2hlY2sgYm94ZXMgd2l0aCBjb3JyZWN0IGNvbG9ycy4KCUZpeGVkIGJ1ZyB3aXRoIFdNX1NFVFRFWFQgaGFuZGxpbmcuCglBIGZldyBkcmF3aW5nIG9wdGltaXNhdGlvbnMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJSW1wbGVtZW50ZWQgY29ycmVjdCBcdCBhbmQgXGEgaGFuZGxpbmcgaW4gbWVudSBpdGVtcy4KCUltcGxlbWVudGVkIGhlbHAgaXRlbXMgKGZsdXNoIHJpZ2h0KSBvbiBtZW51IGJhci4KCUFkZGVkIFdNX0VOVEVSTUVOVUxPT1AgYW5kIFdNX0VYSVRNRU5VTE9PUCBtZXNzYWdlcy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUZpeGVkIFNTX0lDT04gY29udHJvbHMgYW5kIGltcGxlbWVudGVkIFNUTV9TRVRJQ09OIG1lc3NhZ2UKCWhhbmRsaW5nLgoKCSogW2NvbnRyb2xzL3dpZGdldC5jXQoJU2V0IGN1cnNvciB0byBJRENfQVJST1cgZm9yIGJ1aWx0LWluIGNsYXNzZXMuCgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10KCUJhY2tpbmcgc3RvcmUgaXMgbm93IG9mZiBieSBkZWZhdWx0LgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglVc2UgWCByZWdpb25zIGZvciByZWN0YW5nbGUgYW5kIHBvbHlnb24gcmVnaW9uczogKm1ham9yKiBzcGVlZAoJaW1wcm92ZW1lbnQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIHRoZSBmaXggZm9yIGludGVnZXIgaWRzIGluIGNvbnRyb2xzLiBTU19JQ09OIGNvbnRyb2xzIGluCglkaWFsb2dzIHNob3VsZCB3b3JrIG5vdy4KCUltcGxlbWVudGVkIERTX0FCU0FMSUdOIHN0eWxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEludmVydFJnbigpLgoJTmV3IGludGVybmFsIGZ1bmN0aW9uIEdSQVBIX0RyYXdCaXRtYXAoKSB0byBkcmF3IGJpdG1hcHMgZmFzdGVyCgl0aGFuIHdpdGggQ3JlYXRlQ29tcGF0aWJsZURDKCkgKyBCaXRCbHQoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURldGVybWluaW5nIHRoZSB3aW5kb3cgZm9yIGEgbW91c2UgbWVzc2FnZSBpcyBub3cgZG9uZSBhdAoJR2V0TWVzc2FnZSgpIHRpbWUuCglNb2RpZmllZCBQZWVrTWVzc2FnZSgpIGhhbmRsaW5nIHRvIGF2b2lkIG5lZWRsZXNzbHkgZmx1c2hpbmcgdGhlCglvdXRwdXQgcXVldWUuCgoJKiBbd2luZG93cy90aW1lci5jXQoJQ2hlY2sgZm9yIHJlc3RhcnQgb2YgYSB0aW1lciAoU2V0VGltZXIgY2FsbCB3aXRoIHRoZSBzYW1lIGh3bmQgYW5kCglpZCB0aGFuIGFuIGV4aXN0aW5nIHRpbWVyKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEF1ZyAgOSAyMzo1ODoyOSBNRVQgRFNUIDE5OTQJPGVyaWtAaGFja3RpYy5ubD4KCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IENvbXBsZXRseSByZXdyaXR0ZW4uCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJQ3JlYXRlRmlsZSgpOiBGaXhlZCB3cm9uZyBtb2RlIGluIGNhbGwgdG8gb3Blbi4KCU9wZW5FeGlzdGluZ0ZpbGUoKTogSW1wbGVtZW50ZWQgZmlsZSBzaGFyaW5nLgoJRmluZE5leHQoKTogRml4ZWQuCglDcmVhdGVOZXdGaWxlKCk6IEZpeGVkIHdyb25nIG1vZGUgaW4gY2FsbCB0byBvcGVuLgoJZkxvY2soKTogQWRkZWQgdG8gaGFuZGxlIHJlY29yZCBsb2NraW5nLgoJR2V0RmlsZUF0dHJpYnV0ZSgpOiBBZGRlZC4KCUFzIGEgcmVzdWx0LCBBSCA9IDB4NWMsIDB4MDksIGFuZCAweDBiIHdlcmUgY2hhbmdlZC4KCgkqIFttaXNjZW11L2ludDJmLmNdCglBSCA9IDB4MTA6IFNIQVJFIGluc3RhbGxhdGlvbiBjaGVjawogCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFjY2Vzc1Jlc291cmNlKCk6IEZpeGVkLiBBIG5ldyBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSByZXR1cm5lZCBieQoJZXZlcnkgY2FsbCB0byBBY2Nlc3NSZXNvdXJjZSgpLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJd3ZzcHJpbnRmKCk6IEZpeGVkLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpbmRNZW51SXRlbSgpOiBGaXhlZCAoaGFuZGxpbmcgZm9yIG5Qb3MgPT0gLTEgYWRkZWQpLgkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ3JlYXRlV2luZG93RXgoKTogQWRkZWQgY2FsbCB0byBXSU5QT1NfR2V0TWluTWF4SW5mby4KCgkqIFtDb25maWd1cmVdCglBZGRlZCB0d28gb3B0aW9ucyBmb3IgYSBwcm9jZXNzb3IgZW11bGF0b3IgdGhhdCBtaWdodCBiZQoJcGx1Z2dlZCBpbiBsYXRlci4uCgoJKiBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvdG9vbGhlbHAuaF0gW2lmMTYzMi90b29saGVscC5zcGVjXQoJQ3JlYXRlTmV3VGFzaygpIHN0b3JlcyByZWFsIG1vZHVsZW5hbWUgaW5zdGVhZCBvZiAnVEFTS3h4eHgnLgoJQWRkZWQgVGFza0ZpcnN0KCksIFRhc2tOZXh0KCksIFRhc2tGaW5kSGFuZGxlKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJQWRkZWQgc3R1YiBmb3IgTWVtTWFuSW5mbygpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgc3R1YiBmb3IgR2V0VGFiYmVkVGV4dEV4dCgpLgoKCSogW21pc2NlbXUvKl0KCUNoYW5nZWQgYWxsIHJlZmVyZW5jZXMgdG8gcmVnaXN0ZXJzLiBQbGVhc2UgZG9uJ3QgYWNjZXNzCiAJdGhlIGNvbnRleHQgc3RydWN0dXJlLgoJZml4IGZvciBHZXRTeXN0ZW1UaW1lKCkgYnkgPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PiBhZGRlZC4KCgkqIFttaXNjL2xzdHIuY10KCUZpeGVkIGJ1ZyBpbiBBbnNpVXBwZXIoKSAmIEFuc2lMb3dlcigpLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglidWdmaXggaW4gZ2V0c29ja29wdCgpL3NldHNvY2tvcHQoKTogd2luc29jayB1c2VzIGRpZmZlcmVudCB2YWx1ZXMKCXRoYW4gdW5peC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWRkZWQgRElCX1NldEltYWdlQml0c19STEVbNDhdIHRvIHN1cHBvcnQgY29tcHJlc3NlZCBiaXRtYXBzLgoKTW9uIEF1ZyAgOCAyMToxMjozMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgV01fQ09QWSwgV01fQ1VUIGFuZCBXTV9QQVNURSBtZXNzYWdlcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10gW2luY2x1ZGUvZGlhbG9nLmhdCglNb2RpZmllZCBkaWFsb2cgY29kZSB0byBjcmVhdGUgbmV3IGhlYXAgZm9yIGVkaXQgY29udHJvbHMKCXVubGVzcyBEU19MT0NBTEVESVQgc3R5bGUgaXMgc2V0LgoKVGh1IEF1ZyAgNCAxODo1MDo1NiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9zdGF0aWMuY10KCVJlbW92ZWQgdW5uZWVkZWQgR2xvYmFsVW5sb2NrKCkgY2FsbHMuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9tZW51LmhdCglMb3RzIG9mIGNoYW5nZXMsIGZpeGVkIGEgbG90IG9mIG9sZCBidWdzIGFuZCBpbnRyb2R1Y2VkIGEgbG90IG9mCgluZXcgb25lcyA6LSkKCS0gQ2hhbmdlZCBtZXNzYWdlIGxvb3AgdG8gdXNlIE1TR19HZXRJbnRlcm5hbE1lc3NhZ2UoKS4KCS0gRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIG1haW4gd2luZG93IHRvIGxvc2UgYWN0aXZhdGlvbiB3aGVuCgkgIGRpc3BsYXlpbmcgYSBtZW51LgoJLSBDb3JyZWN0bHkgc2VuZCBpbml0aWFsaXNhdGlvbiBtZXNzYWdlcyAoV01fSU5JVE1FTlVQT1BVUCkuCgktIEltcGxlbWVudGVkIEVuZE1lbnUoKSBhbmQgTG9va3VwTWVudUhhbmRsZSgpLgoJLSBDaGFuZ2VkIGludGVybmFsIHN0cnVjdHVyZXMgdG8gYmUgYXMgY29tcGF0aWJsZSBhcyBwb3NzaWJsZSB3aXRoCgkgIE1TLVdpbmRvd3MuCgktIEFsbG9jYXRlZCBldmVyeXRoaW5nIG9uIHRoZSBVU0VSIGhlYXAgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIGhlYXAuCgktIFByZWZpeGVkIGFsbCBpbnRlcm5hbCBmdW5jdGlvbiBuYW1lcyB3aXRoIE1FTlVfIGFuZCBkZWNsYXJlZAoJICB0aGVtIHN0YXRpYy4KCS0gTW92ZWQgIkFib3V0IFdpbmUuLi4iIGhhbmRsaW5nIHRvIE5DX0hhbmRsZVN5c0NvbW1hbmQoKS4KCS0gTXVsdGktbGluZSBtZW51cyBzaG91bGQgbm93IHdvcmsgY29ycmVjdGx5LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9iaXRtYXAuY10KCUFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byBjcmVhdGUgT0VNIGJpdG1hcHMgZGlyZWN0bHkgYXMgWCBiaXRtYXBzLgoKCSogW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZGMuY10KCUZpeGVkIEdldERDT3JnKCkgdG8gcmV0dXJuIHNjcmVlbiBjb29yZGluYXRlcy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGRvdWJsZS1jbGljayBjaGVja3Mgd2hlbiB0aGUgbWVzc2FnZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZQoJcXVldWUuCglGaXhlZCBNU0dfR2V0SW50ZXJuYWxNZXNzYWdlKCkgdG8gc2VuZCBXTV9FTlRFUklETEUgbWVzc2FnZXMuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1ZyBmaXggaW4gc3lzdGVtIG1lbnUgaGl0LXRlc3QgY2FsY3VsYXRpb24uCglBIGZldyBjaGFuZ2VzIGZvciBuZXcgbWVudSBmdW5jdGlvbnMuCgpUaHUgQXVnIDExIDE3OjUxOjAyIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+CgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KICAgICAgICBCdWcgZml4IGluIEVkaXRfTkNDcmVhdGVNZXNzYWdlCiAgICAgICAgZXMtPnRleHRsZW4gd2FzIGJlaW5nIHVzZWQgYmVmb3JlIGJlaW5nIHNldAoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgQnVnIGZpeCBpbiBNRU5VX0RyYXdNZW51SXRlbQogICAgICAgIGRvbid0IHRyeSB0byB3cml0ZSB0ZXh0IGlmIE5VTEwgcG9pbnRlciBwYXNzZWQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAgNCAwNzoxODowMiAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXYWl0TWVzc2FnZSgpIChVU0VSLjExMikuCgogICAgICAgICogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBXYWl0TWVzc2FnZS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJV01fRVJBU0VCS0dORDogQWRkZWQgc3VwcG9ydCBmb3IgaGJyQmFja2dyb3VuZD1DT0xPUl94eHguCgogICAJKiBbbWlzY2VtdS9pbnR7MTMsMjEsMmF9LmNdCiAgICAgICAgKiBbbWlzY2VtdS9JbWFrZWZpbGVdCgkqIFtzaWduYWwvbG9hZGVyLmNdCglBZGRlZCBhIGZldyBiYXNpYyBkaXNrIGluZm9ybWF0aW9uIGFuZCBkaWFnbm9zdGljIGZ1bmN0aW9ucyB0bwoJcHJldmVudCBwcm9ncmFtcyB1c2luZyB0aGlzIGZ1bmN0aW9uIGZyb20gY3Jhc2hpbmcuIEFsbCBkcml2ZXMKCWFyZSBjbGFpbWVkIHRvIGJlIHJlbW90ZSBvbmVzLCBzbyBkaXJlY3QgSS9PIGlzbid0IGFsbG93ZWQuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9Xcml0ZVRleHQoKTogQWRkZWQgY29kZSB0byBjb3JyZWN0bHkgZXJhc2UgdGhlIHJlbWFpbmluZyBzcGFjZQoJb2YgdGhlIGVkaXQtY29udHJvbCBpZiB0aGUgc2l6ZSBvZiB0aGUgY29udHJvbCBoYXMgY2hhbmdlZCBzaW5jZWQgaXQncwoJY3JlYXRpb24uCgpUdWUgSnVsIDI2IDIyOjA1OjU0IE1FVCBEU1QgMTk5NCBFcmlrIEJvcyA8ZXJpa0BoYWNrdGljLm5sPgoKCSogW2lmMTYzMi9tb3VzZS5zcGVjXQoJQWRkZWQgbW91c2UuZGxsIGVudHJ5LCBubyBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCdWcgZml4IGluIEFjY2Vzc1Jlc291cmNlKCkuIAoKCSogW21pc2Mva2V5Ym9hcmQuY10sIGFkZGVkIFtpbmNsdWRlL2tleWJvYXJkLmhdCglDaGFuZ2VkIGZ1bmN0aW9ucyB0byByZXR1cm4gbW9yZSB1c2VmdWwgdmFsdWVzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglIYWNrZWQgRElBTE9HX0dldENvbnRyb2woKSB0byBzdXBwb3J0IHJlc291cmNlcyB3aGljaAoJaGF2ZSAweGZmMDAgLSAweGZmZmYgYXMgaWQuICoqIE5lZWRzIHRvIGJlIGRvbmUgcHJvcGVybHkgYnkKCXNvbWVvbmUgd2hvIGtub3dzIHRoZSBORSBmaWxlZm9ybWF0ICoqCgpKdWwgMjksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGQgbmV3IHN0dWIgZm9yIEVuYWJsZUhHYXJkd2FyZUlucHV0KCkgZnVuY3Rpb24uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGQgY29kaW5nIGZvciBIV05EX0JST0FEQ0FTVCBpbiBQb3N0TWVzc2FnZSgpLgoKCSogW21pc2MvZmlsZS5jXQoJQWRkIGNvZGluZyBmb3IgT3BlbkZpbGUoKSBhbHNvIHNlYXJjaCBpbiBXaW5kb3dQYXRocy4KCgkqIFttaXNjL21tc3lzdGVtLmNdCgkqIFttaXNjL2F1ZGlvLmNdCgkqIFttaXNjL21tYXV4LmNdCgkqIFttaXNjL21jaWNkYS5jXQoJQ2hhbmdlICNpbmNsdWRlICJsaW51eC9zb3VuZGNhcmQuaCIgYnkgI2luY2x1ZGUgInN5cy9zb3VuZGNhcmQuaCIKCUFkZCBjb2RpbmcgaW4gTU1JTyBmdW5jdGlvbnMuIE5vdywgbW1pb0Rlc2NlbmQoKSBjYW4gZmluZCBXQVYgY2h1bmtzLgoJU25kUGxheVNvdW5kICYgTUNJX0VMRU1FTlQgbm93IHVzZSBNTUlPIGFuZCBhZGp1c3QgdG8gcHJvcGVyIGZvcm1hdHMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEp1bCAxOCAyMzo1NToxMyBNRVQgRFNUIDE5OTQKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvMTYoKTogYWRkZWQgYG1vdiAlZWF4LCVlZHgnIGp1c3QgYmVmb3JlIGxjYWxsLAoJdG8gbWFrZSBzdXJlIHRoYXQgRFggY29udGFpbiB0aGUgRExMJ3MgaGluc3RhbmNlIHdoZW4KCWluaXRpYWxpc2VkLgoKCUNhbGxUbzMyXzE2KCkgYWRkZWQsIGVxdWFsIHRvIENhbGxUbzMyKCkgZXhjZXB0IGZvcgoJb25lIHRoaW5nOiBpdCBzYXZlcyBEWCBhbmQgCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIHNvbWUgY29kZSB0byBzdXBwb3J0IDE2IGFuZCAzMiBiaXQgcmV0dXJuIHZhbHVlcy4KCgkqIFsxNjMyL3trZXJuZWwsdXNlcn0uc3BlY10KCUNoYW5nZWQgbW9zdCBvZiB0aGUgYHBhc2NhbCcgc3R5bGUgdG8gcGFzY2FsXzE2IHdoZW4KCWZ1bmN0aW9uIHJldHVybmVkIGEgMTZiaXQgdmFsdWUuCgpUdWUgSnVsIDE5IDE4OjQwOjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9tZW51LmNdCglSZW9yZ2FuaXplZCBzaXppbmcgYW5kIGRyYXdpbmcgY29kZSB0byBpbXBsZW1lbnQgbXVsdGktbGluZSBtZW51cy4KCUltcGxlbWVudGVkIE1FTlVCUkVBSyBzdHlsZS4KCVVzZSBzeXN0ZW0gY29sb3JzIHRvIGRyYXcgbWVudXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQnVnIGZpeCBpbiBDT0xPUl9Jc1NvbGlkKCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglCdWcgZml4IGluIEZPTlRfR2V0TWV0cmljcygpOiBjYWxjdWxhdGUgYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGgKCW9ubHkgb24gZXhpc3RpbmcgY2hhcnMgKGRpYWxvZ3MgbG9vayBtdWNoIGJldHRlcikuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglCdWcgZml4IGluIERyYXdUZXh0KCk6IHVzZSB0ZXh0IGNvbG9yIHRvIHVuZGVybGluZSBtbmVtb25pYy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2hhbmdlZCBXTV9OQ0hJVFRFU1QgaGFuZGxpbmcgdG8gY29wZSB3aXRoIG11bHRpLWxpbmUgbWVudSBiYXJzLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUFkZGVkIHN5c3RlbSBvYmplY3RzIGZvciBtZW51IGNvbG9ycy4KCk1vbiBKdWwgMTggMTk6MzI6MDggUERUIDE5OTQgIEFuZHJldyBMYWdvZHppbnNraSAgKGFuZHJld0BuZXRjb20uY29tKQoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgRml4ZWQgYnVnIGluIFNlbGVjdFByZXZJdGVtIHRoYXQgY2F1c2VkIHNlcGVyYXRvcnMgdG8gbm90IGJlCglza2lwcGVkIHdoZW4gdXNpbmcgdGhlIHVwIGFycm93IGtleS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEp1bCAxNCAxNzo1MDo0NSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW0NvbmZpZ3VyZV0KCUF1dG9kZXRlY3RzIExpbnV4IHZlcnNpb24gKGlmIHJ1bm5pbmcgTGludXgpLgoKCSogW2xvYWRlci9zaWduYWwuY10KCU5ldyBzaWduYWxzIGZvciBMaW51eC4KCgkqIFtsb2FkZXIvbGR0bGliLmNdCglOZXcgc3RydWN0dXJlIGZpZWxkIGluIHN5cyBjYWxsLgoKU3VuIEp1bCAxMCAxOTozMTozNCAxOTk0ICBPbGFmIEZsZWJiZSAgKG9sYWZAZHJhZ29uKQoKICAgICAgICAqIFtsb2FkL3Jlc291cmNlLmNdIAogICAgICAgICAgZml4ZWQgTWVtb3J5IChSZXNvdXJjZSkgTGVhay4KCiAgICAgICAgKiBbbG9hZC9tYWluLmNdIAogICAgICAgICAgZml4ZWQgYSBwcmludGYuCgpUdWUgSnVsIDEyIDE4OjUwOjM0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglJbXBsZW1lbnRlZCBkZXNrdG9wIHdhbGxwYXBlciAob25seSAxNiBjb2xvcnMgZm9yIG5vdykuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVByZWxpbWluYXJ5IHdvcmsgdG8gYWxsb3cgbXVsdGktbGluZSBtZW51cy4KCgkqIFttaXNjL21haW4uY10KCU5vIGJhY2tpbmcgc3RvcmUgb24gZGVza3RvcCB3aW5kb3cgKG5vdCB1c2VmdWwpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQSBmZXcgZml4ZXMgdG8gRHJhd1RleHQoKSB0byBtYWtlIHVuZGVybGluZXMgdW5kZXIgbW5lbW9uaWMKCWxldHRlcnMgdG8gbG9vayBiZXR0ZXIuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJTW9yZSBmaXhlcyB0byBHUkFQSF9EcmF3QXJjKCksIGFuZCBzb21lIGZpeGVzIHRvIFBvbHlnb24oKS4KCUltcGxlbWVudGVkIFBvbHlQb2x5Z29uKCkgKHBhcnRpYWxseSB3b3JraW5nKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJTmV3IGZ1bmN0aW9uIFdJTlBPU19TZW5kTkNDYWxjU2l6ZSgpLgoJQ2xlYW5lZCB1cCBTZXRXaW5kb3dQb3MoKSBhbmQgYWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IKCW11bHRpLWxpbmUgbWVudXMuCgpNb24gSnVsIDExIDE5OjE1OjUxIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEBzcGhpbngpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQ2hhbmdlcyB0byB3b3JrIGFzIGEgbGlicmFyeS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10gCglJZmRlZmVkIG1vZHVsZS4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUNoYW5nZXMgdG8gYWxsb3cgbGlua2luZyB3aXRoIFdpbmVMaWIuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBtYWNybyBXSU5FTElCX1VOSU1QCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIsIEdldFByb2NBZGRyZXNzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCgoJKiBbbG9hZGVyL21haW4uY10KCUFkZGVkIGVtcHR5IEluaXRETEwgd2hlbiB1c2luZyBXaW5lTGliLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJU29tZSBwYXJ0cyBvZiB0aGUgbG9hZGVyIGFyZSBuZWVkZWQgZm9yIFdpbmVMaWIsIGlmZGVmZWQgY29ycmVjdGx5CgoJKiBbbWlzYy97YXVkaW8uYyxtY2ljZGEuYyxtbWF1eC5jLG1tc3lzdGVtLmNdCglEaXNhYmxlIGNvbXBpbGF0aW9uIG9mIG1vZHVsZSB3aGVuIGNvbXBpbGluZyBXaW5lTGliLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJRml4ZWQgc21hbGwgYnVnLiAgV2hlbiBwYXNzZWQgYW4gaW52YWxpZCBoYW5kbGUgV2luZUxpYiB3b3VsZAoJY3Jhc2gsIG5vdyByZXR1cm4gTlVMTC4KCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCUNhbGwgQ3JlYXRlTmV3VGFzayBpbiBfV2luTWFpbi4KClN1biBKdWwgMTAgMDk6MDg6MDIgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3dpZGdldC5jXQoJTW9yZSBjaGFuZ2VzIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIFdpbmRvd3MnIGVkaXQKCWNvbnRyb2wuICBGaW5pc2hlZCBvZmYgdGFiIHN0b3Agc3VwcG9ydC4KCk1vbiBKdWwgMTEgMjE6MDU6MDIgTUVUIERTVCAxOTk0ICBFcmlrIEJvcyA8ZXJpa0BoYWNrdGljLm5sPgoKCSogW2lmMTYzMi9yZWxheS5jXQoJIyBvZiBvcmRpbmFscyBpbiBzaGVsbC5kbGwgY2hhbmdlZCB0byAxMDMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJc3RpLCBjbGkgd2lsbCBub3cgYmUgaWdub3JlZC4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglBZGRlZCBzdHViIGZvciBHZXRTeXNDb2xvckJydXNoKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biwgMyBKdWwgMTk5NCAyMDoxNTo1NiArMDEwMCAoQlNUKSAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUJ1ZyBmaXhlcyBhbmQgdGlkeWluZyB1cC4gIFByZWxpbWluYXJ5IHRhYiBzdG9wIHN1cHBvcnQKCShkb2Vzbid0IHdvcmsgeWV0KS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJUmV2ZXJzZWQgb3JkZXIgb2YgYnV0dG9ucyBpbiBDaGVja1JhZGlvQnV0dG9ucyBzbyB0aGF0IGFsbAoJYnV0dG9ucyBhcmUgbm93IGRpc3BsYXllZC4KClR1ZSBKdWwgIDUgMTg6MzA6MjQgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlZCBub3NhdmV1bmRlcnMgb3B0aW9uLCByZXBsYWNlZCBieSBoYW5kbGluZwoJdGhlIENTX1NBVkVCSVRTIGZsYWcuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTW9kaWZpZWQgdGhlIGZpeCBmb3IgbmVnYXRpdmUgc2l6ZSBpbiBjbGFzcyBleHRyYSBieXRlcyB0bwoJYXZvaWQgbW9kaWZ5aW5nIHRoZSBjYWxsZXIncyBkYXRhLgoKCSogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXg6IHN5c3RlbSBmb250IG11c3QgYmUgYSBwcm9wb3J0aW9uYWwgZm9udC4KCUZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBkZWZhdWx0IHBlbiB0byBub3QgYmUgc2VsZWN0ZWQKCWNvcnJlY3RseSBpbiBhIERDLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXggaW4gR1JBUEhfRHJhd0FyYygpLiBUaGFua3MgdG8gQWRyaWFubyBBemV2ZWRvIGZvcgoJbm90aWNpbmcgaXQuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJUmVtb3ZlZCBpbmNvcnJlY3Qgc2VsZWN0aW5nIG9mIGRlZmF1bHQgb2JqZWN0cyBpbiBCZWdpblBhaW50KCkKCShubyBsb25nZXIgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIGZpeCBpbiBkYy5jKS4KCkp1bCA0LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJKiBbbWlzYy9hdWRpby5jXQoJQWRkIG1vcmUgY29kZSB0byBpbnRlcmZhY2UgJy9kZXYvZHNwJy4KCgkqIE5ldyBmaWxlIFttaXNjL21jaWNkYS5jXQoJQ3JlYXRlIGFuIE1DSV9ERVZUWVBFX0NEX0FVRElPIGRyaXZlciBjb25uZWN0ZWQgdG8gJy9kZXYvc2JwY2QnLgoKCSogTmV3IGZpbGUgW21pc2MvbW1hdXguY10KCVN0dWJzIHRvIG1ha2UgYSBmdXR1cmUgZHJpdmVyIGNvbm5lY3RlZCB0byAnL2Rldi9taXhlcicuCgoJKiBbd2luZG93cy93aW4uY10KCVRlbXBvcmFyeSBwYXRjaCB0byBDcmVhdGVXaW5kb3dFeCgpIGZvciByZXNldGluZyBuZWdhdGl2ZQoJY29vcmRpbmF0ZXMgdG8gMCwwIDsgYmVjYXVzZSAnc291bmRyZWMuZXhlJyBnaXZlIG5lZ2F0aXZlIHZhbHVlcwoJYW5kIEkgbmVlZCBpdCB0byB3b3JrIG9uIE1NU1lTVEVNIC4uLiA6LSkKCgkqIFttaXNjZW11L2ludDJmLmNdCglhZGQgYSBzdHViICdkb19pbnQyZl8xNicgKGZ1bmN0aW9uIDB4MTYpIGZvciBETVBJIHNlcnZlci4KCk1vbiBKdW4gMjAgMTA6MDg6NDAgQlNUIDE5OTQgIFdpbGxpYW0gU21pdGggKHdvc0BkY3Mud2Fyd2ljay5hYy51aykKCgkqIGluY2x1ZGUvY29tbS5oCglOZXcgZmlsZSAtLSBzb21lIGRlZmluaXRpb25zIHRoYXQgd2VyZSBpbiBjb21tLmMgbm93IG5lZWQgdG8KCWJlIHNoYXJlZCB3aXRoIG1pc2MvZG9zX2ZzLmMKCgkqIG1pc2MvY29tbS5jCglTb21lIGRlZmluaXRpb25zIG1vdmVkIGludG8gaW5jbHVkZS9jb21tLmgKCgkqIG1pc2MvZG9zX2ZzLmMgKERPU19HZXRFcXVpcG1lbnQpOgoJRml4ZWQgZXJyb3IgaW4gZXF1aXBtZW50IC0tIGJpdHdpc2Ugb3Igb2YgdHdvIHZhbHVlcyBzaG91bGQKCWJlIHVzZWQgaW5zdGVhZCBvZiBsb2dpY2FsIG9yLiAgQWxzbyBhZGRlZCBjb2RlIHRvIGNvcnJlY3RseQoJcmVwb3J0IHRoZSBudW1iZXIgb2Ygc2VyaWFsIGFuZCBwYXJhbGxlbCBkZXZpY2VzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSnVuIDIwIDE0OjI2OjQxIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUFsbG93IG5lZ2F0aXZlIGJpdG1hcCBzaXplcy4KClN1biBKdW4gMTkgMTI6MDA6MDQgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgSW1wcm92ZWQgc2VsZWN0aW9uIGRpc3BsYXkuICBBZGRlZCBwcm9jZXNzaW5nIGZvciBXTV9TRVRGT05ULAogICAgICAgIEVNX1JFUExBQ0VTRUwsIEVNX0xJTkVMRU5HVEgsIEVNX1VORE8sIEVNX0VNUFRZVU5ET0JVRkZFUiwKICAgICAgICBFTV9HRVRIQU5ETEUsIEVNX1NFVEhBTkRMRSBtZXNzYWdlcy4gIFRleHQgYnVmZmVyIG5vdyBzdG9yZWQgb24gCiAgICAgICAgYXBwbGljYXRpb24ncyBsb2NhbCBoZWFwLgoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgQ29ycmVjdGVkIGJ1ZyBpbiBSZWN0YW5nbGUoKS4gIFhGaWxsUmVjdGFuZ2xlIGhhcyB0aGUgc2FtZQogICAgICAgIHdpZHRoIGFzIFJlY3RhbmdsZSwgYnV0IFhEcmF3UmVjdGFuZ2xlIGlzIG9uZSBwaXhlbCB3aWRlcgogICAgICAgIGZvciB0aGUgc2FtZSBjby1vcmRpbmF0ZXMuCgogICAgICAgICogW21lbW9yeS9oZWFwLmNdIFtpbmNsdWRlL2hlYXAuaF0KICAgICAgICBBZGRlZCBIRUFQX0xvY2FsU2l6ZSBmdW5jdGlvbi4KCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9rZXlib2FyZC5jXQogICAgICAgIEltcHJvdmVtZW50cyB0byBLZXlTdGF0ZVRhYmxlIGFuZCBhZGRpdGlvbiBvZiBBc3luY0tleVN0YXRlVGFibGUuCiAgICAgICAgQWRkZWQgc3VwcG9ydGluZyBjb2RlIHRvIEdldEtleVN0YXRlIGFuZCBHZXRBc3luY0tleVN0YXRlIGFuZAogICAgICAgIG1lcmdlZCBtb3VzZSBidXR0b24gc3RhdGVzIGludG8gR2V0S2V5Ym9hcmRTdGF0ZS4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtpbmNsdWRlL2FjY2VsLmhdCiAgICAgICAgQWRkZWQgcmVjb2duaXRpb24gb2YgU0hJRlQsIENPTlRST0wgYW5kIEFMVCBrZXlzIHRvCiAgICAgICAgVHJhbnNsYXRlQWNjZWxlcmF0b3IuCgogICAgICAgICogW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZm9udC5jXSBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBBIGJpdCBtb3JlIG1ldGFmaWxlIHN1cHBvcnQuCgpTdW4gSnVuIDE5IDE3OjI5OjAwIE1FVCBEU1QgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgU2l6ZW9mUmVzb3VyY2UoKSBhbmQgQWxsb2NSZXNvdXJjZSgpIGFkZGVkLCBBY2Nlc3NSZXNvdXJjZSgpIHVwZGF0ZWQuCgogICAgICAgICogW2lmMTYzMi9rZXJuZWwuc3BlY10KICAgICAgICBGcmVlTGlicmFyeSgpIHVzZWQgZm9yIEZyZWVNb2R1bGUoKS4KCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIFJlY3RhbmdsZSgpOiBzd2FwIGxlZnQgJiByaWdodCBjb3JuZXJzIHdoZW4gcmlnaHQgPCBsZWZ0LAogICAgICAgIHN3YXAgdG9wICYgYm90dG9tIHdoZW4gYm90dG9uIDwgdG9wLgoKSnVuIDE5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUZpeCBidWcgaW4gd2luZG93IHN0eWxlIG9mIHRoZSBhc3NvY2lhdGVkIGxpc3Rib3guCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU2tpcCBzZXBhcmF0b3JzIGluIGtleWJvYXJkIG5hdmlnYXRpb24gYnkgdXNpbmcgbmV3IGludGVybmFsIAoJCWZ1bmN0aW9ucyBTZWxlY3RQcmV2SXRlbSgpICYgU2VsZWN0TmV4dEl0ZW0oKSwKCgkqIFttaXNjL3Byb2ZpbGUuY10KCUJ1ZyBmaXggaW4gR2V0UHJpdmF0ZVByb2ZpbGVJbnQoKSwgd2FzIGxpbWl0ZWQgdG8gNCBkaWdpdCwKCQlJbnRCdWYgbXVzdCBiZSBhbGxvYyB0byAoNSsxKT02LiBjaGFyIGluc3RlYWQgb2YgNS4KCgkqIFttaXNjL21haW4uY10KCVB1dCBjb2RlIGluIGZ1bmN0aW9ucyBTZXRFbnZpcm9ubWVudCgpICYgR2V0RW52aXJvbm1lbnQoKS4KCgkqIFttaXNjL3NoZWxsLmNdCglTdGFydCBwdXR0aW5nIHNvbWUgY29kZSBpbiBFeHRyYWN0SWNvbigpIGZ1bmN0aW9uLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCVNvbWUgY29kZSBmb3IgTU1UaW1lciBmdW5jdGlvbnMgJiB0aW1lcnMgbGlzdC4KCgkqIFttaXNjZW11L2ludDMxLmNdCglGZXcgc3R1YnMgZm9yIERQTUkgaW50ZXJydXB0IGNhbGxzLiBOb3RoaW5nIHdvcmsgeWV0LgoKTW9uIEp1biAyMCAwNzozNzo0MyBFRFQgMTk5NAlKb2huIFJpY2hhcmRzb24gKGpyaWNoYXJkQGNzLnVtbC5lZHUpCgoJKiBpbmNsdWRlL3dpbi5oICh0YWdXTkQpOgoJQWRkZWQgaWNvbiBmaWVsZHMgaWNvbiwgaEljb24gYW5kIHJlY3RDbGllbnRTYXZlIHRvIAoJdGhlIHRhZ1dORCBzdHJ1Y3QuCgoJKiB3aW5kb3dzL0ltYWtlZmlsZQoJQWRkZWQgaWNvbi5jIHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGNvbXBpbGUKCgkqIHdpbmRvd3MvZGNlLmMgKEdldERDRXgpOgoJQWRkZWQgc29tZSBjaGVja3MgZm9yIGljb25pYyBtb2RlIGFuZCBwYXNzIGljb24gd2luZG93IGFzIGRyYXdhYmxlLAoJbm90IHRoZSByZWFsIHdpbmRvdy4KCgkqIHdpbmRvd3MvZGVmd25kLmMgKERlZldpbmRvd1Byb2MpCglBZGRlZCBQQUlOVElDT04gZGVmYXVsdCB3aW5kb3dzIHByb2NlZHVyZS4KCgkqIHdpbmRvd3MvZXZlbnQuYyAoRVZFTlRfRXhwb3NlKQoJQWRkZWQgY2hlY2sgZm9yIGljb25pYyB3aW5kb3cgZXhwb3NlLiBJZiBpY29uaWMgd2luZG93IGlzIGV4cG9zZWQKCXNlbmQgYSBXTV9QQUlOVElDT04gbWVzc2FnZQoKCSogd2luZG93cy9pY29uLmMgCglOZXcgZmlsZS4gIElDT05fSWNvbmlmeSwgSUNPTl9maW5kSWNvbkZyb21Qb2ludCwgSUNPTl9EZWljb25pZnkuCgoJKiB3aW5kb3dzL21kaS5jIChEZWZNRElDaGlsZFByb2MpCglUZXN0IGZvciBJc0ljb25pYyBkdXJpbmcgYSBTQ19SRVNUT1JFLCB0aGlzIGRvZXNuJ3Qgd29yayB5ZXQuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYyAoaGFyZHdhcmVfZXZlbnQpCglMb29rcyBmb3IgaWNvbiBhcyB3ZWxsIGFzIHdpbmRvdyBub3cuCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jIChOQ19IYW5kbGVTeXNDb21tYW5kLCBOQ19Eb05DUGFpbnRJY29uKQoJQWRkZWQgaWNvbmlmeS9kZWljb25pZnkgaW4gTkNfSGFuZGxlU3lzQ29tbWFuZCwgbmV3IGZ1bmN0aW9uCglOQ19Eb05DUGFpbnRJY29uIHdoaWNoIHBhaW50cyBhbiBpY29uLgoKCSogd2luZG93cy9wYWludGluZy5jIChCZWdpblBhaW50KQoJTWFkZSBhIEJlZ2luUGFpbnQgc2VsZWN0IHRoZSBTVE9DS19CTEFDS19QRU4sIFNUT0NLX1dISVRFX0JSVVNILAoJYW5kIFNUT0NLX1NZU1RFTV9GT05UIG9iamVjdHMgc2luY2UgdGhpcyBpcyAoaG9wZWZ1bGx5KSBkZWZhdWx0Cgl3aW5kb3dzIGJlaGF2aW9yLgoKCSogd2luZG93cy93aW4uaCAoQ3JlYXRlV2luZG93RXgpCglTZXQgdGhlIGRlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhIHdpbmRvdyB0byBiZSB3aGl0ZS4KCUNyZWF0ZSBpY29uIHdpbmRvdywgdHVybiBvZmYgTUlOSU1JWkUgaWYgaXQgaXMgb24sIHNpbmNlCglJIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGl0IGFzIG9mIHlldC4uLiByZWdpc3RlcgoJdGhlIGljb24gd2l0aCB0aGUgaHduZCBvZiBpdHMgd2luZG93IHNvIHdlIGNhbiBpZGVudGlmeSB3aGVyZQoJaWNvbiBtZXNzYWdlcyBhcmUgY29taW5nIGZyb20uCgpNb24gSnVuIDIwIDEwOjE1OjU5IDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEBzcGhpbngpCgoJKiB3aW5kb3dzL2V2ZW50LmM6IEFkZGVkIGEgaGFjayB0byBkZWZpbmUgWFBvaW50ZXIgd2hlbiB1c2luZwoJWDExUjQuIAoKCSogdG9vbGtpdC9oZWxsby5jOiBUZXN0IGFwcGxpY2F0aW9uIGZvciBXaW5lTGliLiBUbyBjb21waWxlIHlvdSdsbAoJbmVlZDogZ2NjIC1JaW5jbHVkZSAtRFdJTkVMSUIgLWcgaGVsbG8uYyAtYywgYW5kIHRvIGxpbmsgeW91J2xsCgluZWVkOiBnY2MgaGVsbG8ubyBsaWJ3aW5lLmEgLWxYMTEgLUwvdXNyL29wZW53aW4vbGliIC1sbSAKCgkqIHRvb2xraXQvaGVhcC5jOiBFeHRlbmRlZCB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgc2l6ZSBwZXIgY2h1bmsuCgoJKiBtaXNjL3N0cmVzcy5jIChHZXRGcmVlRmlsZUhhbmRsZXMpOiBGaXhlZCB0eXBvLgoKCSogbWlzYy9tYWluLmMgKG1haW4pOiBDaGFuZ2VzIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TLiAKCgkqIGxvYWRlci9saWJyYXJ5LmM6IENoYW5nZWQgc29tZSBpZmRlZnMgdG8gY29tcGlsZSBXaW5lTGliLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuIDE0IDA4OjA5OjE0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvc2VsZWN0b3IuYyAoR2V0Q3VycmVudFBEQik6IAoJQWRkZWQgdHJpdmlhbCBmdW5jdGlvbiBHZXRDdXJyZW50UERCKCkgd2hpY2ggcmV0dXJucyB0aGUgcHJvZ3JhbQoJc2VnbWVudCBwcmVmaXggc2VsZWN0b3IuCgoJKiBtZW1vcnkvaGVhcC5jIChIRUFQX0ZyZWUpOiAKCUlmIGZyZWUgbGlzdCBpcyBlbXB0eSwgbWFrZSB0aGUgZnJlZWQgYmxvY2sgdGhlIGZyZWUgbGlzdC4KCkZyaSBKdW4gMTAgMDc6NTY6NDkgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL2VkaXQuYyAoRURJVF9TZXRUZXh0TXNnKTogCglEbyBub3QgYXBwZW5kIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGxpbmUuCgoJKiB3aW5kb3dzL2V2ZW50LmMgKFNldENhcHR1cmUpOiAKCVNldCB3aW5IYXNDdXJzb3IgaWYgbW91c2UgY2FwdHVyZSBzdWNjZWVkcy4KCkp1biAxMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeCBidWcgaW4gbGlzdGJveCA6IEluc2VydFN0cmluZyBzaG91bGQgY2FsbCBBZGRTdHJpbmcgaWYgLTEuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uIEdldE1lbnVTdGF0ZSgpLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVRyeSB0byBtYWtlIFNob3dTY3JvbGxCYXIoKSByZWNhbGMgTkNfIHJlZ2lvbnMuIE5vdCBmaW5pc2hlZCAhCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGQgU3R1YiBmb3IgVGFiYmVkVGV4dE91dCgpLCB3aGljaCB0ZW1wb3JhcmVseSBjYWxsIFRleHRvdXQoKS4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglOZXcgZnVuY3Rpb24gR2V0S2V5Qm9hcmRTdGF0ZSgpIHdpdGggYW4gS2V5U3RhdGVUYWJsZSBhcnJheQoJCSYgYXNzb2NpYXRlZCBoYW5kbGluZyBpbiBmdW5jdGlvbiBFVkVOVF9rZXkoKS4KCk1vbiBKdW4gMTMgMTY6NDU6MjQgTUVUIERTVCAxOTk0IChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBJc01lbnUoKSBhZGRlZC4KCiAgICAgICAgKiBbbG9hZGVyL2xpYnJhcnkuY10KICAgICAgICBNb2R1bGVGaXJzdCgpLCBNb2R1bGVOZXh0KCksIE1vZHVsZUZpbmROYW1lKCksIE1vZHVsZUZpbmRIYW5kbGUoKQogICAgICAgIGFkZGVkLgoKICAgICAgICAqIFtvYmplY3QvZ2Rpb2JqLmNdCiAgICAgICAgSXNHRElPYmplY3QoKSBhZGRlZC4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyWzU2XS5jXQogICAgICAgIGJ1Z2ZpeDogYm90aCBkaWRuJ3QgbGVhdmUgZmxhZ3MgcHVzaGVkIG9uIDE2Yml0LXN0YWNrLgogICAgICAgICh3aW5maWxlIGdldHMgYSBiaXQgZnVydGhlcikKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQxNi5jXQogICAgICAgIEFkZGVkIChlbXB0eSkuCgpTYXQgSnVuIDExIDIyOjU2OjQ4IDE5OTQgSm9uIFRvbWJzIChqb25AZXNpeDIudXMuZXMpCgkqIHdpbmRvd3MvZXZlbnQuYzoKCUFkZGVkIGNvZGUgdG8gZHJvcCByZWR1bmRhbnQgbW90aW9uIEV2ZW50cyBpbiB0aGUgWEV2ZW50IHF1ZXVlLgoKVGh1IEp1biAgOSAxMDo1NTo1NSBNRVQgRFNUIDE5OTQgIEpvY2hlbiBIZWluICggSGVpbkBTdHVkZW50LlRVLUNsYXVzdGhhbC5kZSApCgoJKiBbbWlzYy9tYWluLmMgbWlzYy9tZXNzYWdlLmMgaW5jbHVkZS90ZXh0cy5oXQoJUmVtb3ZlZCB0aGUgdGV4dC1jb25zdGFudHMgZnJvbSBtZXNzYWdlLmMgaW50byB2YXJpYWJsZXMKCXdoaWNoIG1heSBiZSBjaGFuZ2VkIGZyb20gWC1yZXNvdXJjZXMuCgoJKiBbbWlzYy9tYWluLmMgbWlzYy9tZXNzYWdlLmNdCglhZGRlZCA8bG9jYWxlLmg+IGFuZCBzZXRsb2NhbGUoKSB0byBtYWluLmMsIHVzZWQgdG91cHBlcigpIGluIG1lc3NhZ2UuYwoKTW9uLCAxMyBKdW4gOTQgMDk6NDE6MTYgLTA1MDAgUGF1bCBCcmFtZWwgPHBhdWxickBjb21tLm1vdC5jb20+CgogICAgICAgICogY29udHJvbHMvYnV0dG9uLmMgKCBbQ1JdQl9MQnV0dG9uKiApIAogICAgICAgIGxlZnQgcmMucmlnaHQgYXQgZnVsbCB3aW5kb3cgd2lkdGggc28gY2xpY2sgb24gbGFiZWwgYWxzbyAKICAgICAgICBhY3RpdmF0ZXMgdGhlIGNvbnRyb2wgKE1TV2luIGJlaGF2aW9yKQoKU2F0IEp1biAxMSAxOTowNTo0MCAxOTk0ICBPbGFmIEZsZWJiZSAgKGZsZWJiZUB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCgogICAgICAgICogaW5jbHVkZS93aW5kb3dzLmg6CiAgICAgICAgICBmdW5jdGlvbnMgcG9pbnRlcnMgY2FuIG5vdCBiZSBwYWNrZWQuCiAgICAgICAgICAoYW5ub3lpbmcgd2FybmluZ3Mgd2l0aCBmb3J0aGNvbW1pbmcgZ2NjLTIuNi54KQogICAgICAgIAogICAgICAgICogbG9hZGVyL21haW4uYyAoSW5pdERMTCk6IAogICAgICAgICAgRml4ZWQgYSBwcmludGYgc3RhdGVtZW50LiAoZm9yIGNvbnRyb2wuZXhlKSAKCiAgICAgICAgICAoSW5pdGlhbGl6ZUxvYWRlZERMTHMpOiAKICAgICAgICAgIGRlbGV0ZWQgc2hhZG93IGRlZmluaXRpb24gb2YgICp3cG50LgogICAgICAgICAgKEJyZWFrcyBtYW55IHByb2dyYW1zLCBiZWNhdXNlIG5vdyBDT01NRExHIHdpbGwgYmUKICAgICAgICAgICBpbml0aWFsaXplZCA6LSgKCiAgICAgICAgKiB3aW5kb3dzL3dpbi5jIChTZXRXaW5kb3dUZXh0KTogCiAgICAgICAgICBhZGRlZCBtaXNzaW5nIGJyZWFrczsgKFBFTlNBVEUgc3RhcnRzKSAKCiAgICAgICAgKiB3aW5kb3dzL2dyYXBoaWNzLmMgKEZsb29kRmlsbCk6IAogICAgICAgICAgUHJvcGVyIGJvdW5kYXJ5cy4gKEJBTkdCQU5HIHN0YXJ0cykgRmxvb2RGaWxlX3JlYyBzaG91bGQKICAgICAgICAgIGJlIHJld3JpdHRlbi4KCiAgICAgICAgKiBvYmplY3RzL2ZvbnQuYyAoRk9OVF9HZXRNZXRyaWNzKTogCiAgICAgICAgICBUWVBPOiB1c2UgZm9udC0+cGVyY2hhciBvbmx5IGlmIGl0IGlzIGRlZmluZWQuIChXUklURSBzdGFydHMpCgpTdW4gSnVuZSAxMiwgUGV0ZXIgQnJvYWRodXJzdCAocGJyQHVhLm53bC5hYy51aykKICAgICAgICBjb250cm9scy9zY3JvbGwuYzoKICAgICAgICBGaXhlcyBmb3IgaW1wcm92ZWQgYmVoYXZpb3VyIHdoZW4gZHJhZ2dpbmcgdGh1bWI7CiAgICAgICAgQWRkZWQgU0JfVEhVTUJQT1NJVElPTiBtZXNzYWdlIHdoZW4gdGh1bWIgaXMgcmVsZWFzZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gIDcgMDg6NDE6MjcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGxvYWRlci9zZWxlY3Rvci5jIChGaXh1cEZ1bmN0aW9uUHJvbG9ncyk6IAoJTmV3IGZ1bmN0aW9uIHRvIGZpeHVwIGxvYWRlZCBETEwgZnVuY3Rpb24gcHJvbG9ncy4gIEl0IHJlcGxhY2VzIHRoZQoJZG8gbm90aGluZyBjb2RlIHdpdGggY29kZSB0aGF0IGxvYWRzIERTIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGEKCXNlZ21lbnQgZm9yIHRoZSBETEwuCgoJKiBtaXNjL2N1cnNvci5jIChMb2FkQ3Vyc29yKTogCglEaXNhYmxlZCBjdXJzb3IgbG9hZGluZyBmcm9tIC5FWEUgb3IgLkRMTC4gIFRoZSBjb2RlIG5lZWRzIHRvIGhhbmRsZQoJdGhlIHBvc3NpYmlsaXR5IG9mIG11bHRpcGxlIGN1cnNvcnMgaW4gYSBzaW5nbGUgZGlyZWN0b3J5LiAgQWxzbywKCWl0IHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlIGN1cnNvciBpcyB0aGUgcmlnaHQgc2l6ZS4KCgkqIG9iamVjdHMvZm9udC5jIChFbnVtRm9udHMpOiAKCUNoZWNrZWQgZm9yIGxwTG9nRm9udExpc3RbaV0gPT0gTlVMTAoKCSogb2JqZWN0cy9nZGlvYmouYyAoU2V0T2JqZWN0T3duZXIpOiAKCVJlbW92ZWQgc3R1Yi4gIFJlcGxhY2VkIHdpdGggc2ltcGxlIHJldHVybiBpbiBnZGkuc3BlYy4gIFRoaXMKCWZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgcmV0YWlsIHZlcnNpb24gb2YgV2luZG93cy4KCgkqIG1lbW9yeS9oZWFwLmMgKFdJTjE2X0xvY2FsSGFuZGxlRGVsdGEpOiAKCU5ldyBmdW5jdGlvbi4gIFRoaXMgaXMgcmVhbGx5IGEgZHVtbXkgdGhhdCBpbWl0YXRlcyB0aGUgcHJvcGVyCglyZXR1cm4gdmFsdWVzLgoKCSogbG9hZGVyL2xpYnJhcnkuYyAoR2V0UHJvY0FkZHJlc3MpOiAKCUZpeGVkIGRlZmluaXRpb24gb2YgSVNfQlVJTFRJTl9ETEwoKSBtYWNyby4KCk1vbiBKdW4gIDYgMTg6MTU6NDAgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIG1pc2NlbXUvaW50MjEuYyAoU2Vla0ZpbGUpOiAKCU5lZWRlZCB0byByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpbiBEWDpBWC4KCgkqIHdpbmRvd3MvdXRpbGl0eS5jICh3aW5kb3dzX3dzcHJpbnRmKTogCglBZGRlZCBzdXBwb3J0IGZvciAnIycgaW4gZm9ybWF0LCBhbmQgZml4ZWQgYnVnIHdpdGggInB0ciIgYmVpbmcKCWluY3JlbWVudGVkIHRvbyBtYW55IHRpbWVzLgoKCSogbWlzY2VtdS9pbnQyMS5jIChPcGVuRXhpc3RpbmdGaWxlKTogCglBZGQgY29kZSB0byBoYW5kbGUgb3BlbmluZyBmaWxlcyByZWFkLW9ubHkgYW5kIHdyaXRlLW9ubHkuCgoJKiBsb2FkZXIvd2luZS5jOgoJU2VnbWVudCBmaXh1cHMgbm93IGRvbmUgaW4gTG9hZEltYWdlIGluc3RlYWQgb2YgX1dpbk1haW4uICBUaGlzCglpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBMb2FkTGlicmFyeSgpLgoKU3VuIEp1biAgNSAxNzozNDoyNCAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKCSogW2xvYWRlci8qXQoJCS0gZml4ZWQ6IEdldE1vZHVsZUhhbmRsZSgpIHNvbWV0aW1lcyByZXR1cm5lZAoJCSAgYSB3cm9uZyBoYW5kbGUuCgkJLSBkb24ndCBpbml0IGRsbHMgd2hlbiBjcyA9PSAwIChsemV4cGFuZCwgZG9lc24ndAoJCSAgc2VlbSB0byBoYXZlIGEgaW5pdCBmdW5jdGlvbikKCQktIExvYWRMaWJyYXJ5ICYgTG9hZEltYWdlIG5vdyByZXR1cm4gZXJyb3IgaW5zdGVhZAoJCSAgb2Ygc3RvcHBpbmcgd2luZS4KCQktIG1vdmVkIG1vc3Qgb2YgTkUtZnVuY3Rpb25zIGludG8gb25lIGZpbGUuCgkJLSBMb2FkTGlicmFyeSgpIHVzZXMgd19maWxlcyBsaXN0IGluc3RlYWQgb2YgaXRzCgkJICBvd24gbGlzdC4KCQktIE5FIGV4ZWN0YWJsZXMgYXJlIG5vdyBmaXhlZC11cCBhbmQgaW5pdGlhbGlzZWQgd2hlbgoJCSAgbG9hZGVkIGluc3RlYWQgb2Ygb25seSBvbmNlIGJlZm9yZSBjYWxsaW5nIEluaXRUYXNrLgoKCSogW21pc2NlbXUvaW50MTUuY10gW21pc2NlbXUvaW50MzEuY10KCUFkZGVkLgkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVN0dWJzIGFkZGVkIGZvciB7R2V0fFNldH1TZWxlY3RvckxpbWl0KCksIHtHZXR8U2V0fVNlbGVjdG9yQmFzZSgpLgoKCSogW21pc2MvbWFpbi5jXQoJU3R1YiBhZGRlZCBmb3IgSXNSb21Nb2R1bGUoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglTb21lIGNsZWFudXAsIGFkZGVkIGhlYXAgZm9yIHJldHVybmluZyBkYXRhLgoKSnVuIDYsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlIE1BWF9PUkRJTkFMUwlkZWZpbmUgdG8gaGlnaGVyIHZhbHVlLCAxMjk5IGVudHJpZXMuCgkoTU1TWVNURU0gZG9lc24ndCBoYXZlIHN1Y2Nlc2l2ZSBudW1iZXJzLCBzb21lIGFyZSBhcm91bmQgMTIwMCkuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglCdWcgZml4IGluIHdpbmRvd3Nfd3NwcmludGYoKSwgKHR3aWNlIGluY3JlbWVudHMgLi4uKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeCBpbiBTZXRXaW5kb3dQb3MoKSwgcmVkcmF3IHdhcyBkb25lIGlmIGZsYWcKCQl3YXMgc2V0IHRvIFNXUF9OT1JFRFJBVyB3aGlsZSBTV1BfU0hPV1dJTkRPVykuCgoJKiBbbWlzYy9tZXNzYWdlLmNdIFtjb250cm9scy9jb21iby5jXQoJQWRkIGFuIEludmFsaWRhdGVSZWN0KCkgaW4gV01fU0hPV1dJTkRPVyB0byBzdGF0aXNmeSB0aGUgbmV3ICdzYXZldW5kZXInLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbiBDcmVhdGVXaW5kb3dFeCgpLCBkbyBTZXRNZW51KCkgY2FsbHMgYWZ0ZXIgd2luZG93IGNyZWF0aW9uLAoJCWp1c3QgYmVmb3JlIHNlbmRpbmcgdG8gV01fTkNDQUxDU0laRS4KCgkqIFtjb250cm9scy9tZW51LmNdCglJbiBmdW5jdGlvbiBTZXRNZW51KCksIG5vdyB1c2UgU2V0V2luZG93UG9zKCkgd2l0aCAKCQlmbGFncyBTV1BfRlJBTUVDSEFOR0VEIHRvIHJlYWRqdXN0IG1lbnUgYXJlYS4KCUZ1bmN0aW9uIE1lbnVCYXJDYWxjU2l6ZSgpIHJlZG9uZS4KClN1biBNYXkgMjkgMTE6MDg6MjQgMTk5NCAgRGF2aWQgQi4gVGhvbWFzICAoZHRAeWVudGEuYWJxLm5tLnVzKQoKICAgICAgICAqIFtvYmplY3RzL3RleHQuY10KICAgICAgICBGaXhlZCBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggRFRfV09SREJSRUFLIGZsYWcuICBTdHJpbmcgbGVuZ3RoCiAgICAgICAgd2FzIG5vdCBiZWluZyBwcm9wZXJseSBkZWNyZW1lbnRlZCB3aGVuIGxpbmVzIHdlcmUgZm9sZGVkLCBhbmQKICAgICAgICB3cmFwcGluZyB3YXMgbm90IHBlcmZvcm1lZCB3aGVuIERUX05PQ0xJUCBhbmQgRFRfTk9QUkVGSVggd2VyZQogICAgICAgIGJvdGggb24gaW4gYWRkaXRpb24gdG8gRFRfV09SREJSRUFLLiAgV2luZG93cyBkb2VzIHdyYXBwaW5nIGluCiAgICAgICAgdGhpcyBjYXNlLCBhbmQgbm93IHNvIGRvZXMgd2luZS4KClN1biBKdW4gIDUgMTk6MTc6NDkgMTk5NCAgT2xhZiBGbGViYmUgIChvbGFmQGRyYWdvbikKCiAgICAgICAgKiBbZWRpdC5jXQogICAgICAgIGNwMSB3YXMgdW5pbml0aWFsaXplZCBpZmYgbGluZW5vID09IDAKCiAgICAgICAgKiAgRmluZEZpbGUgdGVzdHMgZm9yIGV4aXN0YW5jZSBvZiBmaWxlIGV2ZW4gaWYgYSBmdWxsCiAgICAgICAgICAgZmlsZW5hbWUgd2FzIHN1cHBsaWVkLiBXaGF0IGFib3V0IHVuaXggZmlsZSBuYW1lcz8KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveCBdCiAgICAgICAgd25kUHRyIHdhcyB1bmluaXRpYWxpemVkIGZvciBMQl9TRVRUT1BJTkRFWAoKICAgICAgICAqIFttaXNjL3Byb3BlcnR5LmNdICAgICAKICAgICAgICBEbyBub3QgZnJlZSBscFByb3AuIElzIGl0IHJlYWxseSBhbGxvY2F0ZWQgYnkgbWFsbG9jPwoJe2VkaXRlZCBieSBCb2IgQW1zdGFkdDogY2hhbmdlZCBmcmVlKCkgdG8gR2xvYmFsRnJlZSgpfQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTWF5IDI4IDEyOjAzOjIzIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBtaXNjZW11L2ludDIxLmMgKE9wZW5FeGlzdGluZ0ZpbGUpOiAKCU9wZW5FeGlzdGluZ0ZpbGUgbmVlZGVkIHRvIHJldHVybiBoYW5kbGUgaW4gQVggcmVnaXN0ZXIgaW5zdGVhZAoJb2YgdGhlIEJYIHJlZ2lzdGVyLgoKCSogbWlzY2VtdS9pbnQyMS5jIChpb2N0bEdldERldmljZUluZm8pOiAKCUFkZGVkIGEgbGl0dGxlIGNvZGUgdG8gZ2l2ZSBhIGZha2UgcmVzdWx0IGZvciBub3JtYWwgZmlsZXMuCgpXZWQgTWF5IDI1IDIxOjU1OjM4IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJcmV0dXJuIHZhbHVlIGZyb20gR2xvYmFsU2l6ZSB3YXMgY29tcGxldGVseSB3cm9uZy4KCgkqIFttaXNjZW11L2ludDIxLmhdCglmaXhlZCBidWcgaW4gRmluZEZpcnN0LiAgRGlyZWN0b3J5IHBvaW50ZXIgKGRwKSB3YXMgbm90IHBsYWNlZCBpbgoJZHRhIGNvcnJlY3RseS4KCgkqIFt0b29scy9idWlsZC5jXQoJZml4ZWQgY3JlYXRpb24gb2YgcG9wLmggdG8gZ3VhcmFudGVlIHRoYXQgZmxhZ3MgYXJlIHJlc3RvcmVkIGNvcnJlY3RseS4KCgkqIFttaXNjL2NvbW0uY10KCWNoYW5nZWQgYWxsIG9jY3VyYW5jZSBvZiBzdHJuY21wKCkgdG8gc3RybmNhc2VjbXAoKS4KCUJ1aWxkQ29tbURDQigpIHNob3VsZCBub3QgcmVxdWlyZSB0aGF0IE9wZW5Db21tKCkgYmUgY2FsbGVkIGZpcnN0LgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJSGVhcCBpbml0aWFsaXplZCB0byBzaXplIG9mIGZ1bGwgc2VnbWVudCBsZXNzIHN0YWNrIHNpemUgYW5kIAoJYXV0b21hdGljIGRhdGEgc2l6ZS4KClNhdCBNYXkgMjggMDk6MTQ6MzMgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ29ycmVjdCB0eXBvcyBpbiBMaXN0Qm94UmVzZXRDb250ZW50IHdoZXJlIGxwbHMgdmFyaWFibGUgaXMKCXVzZWQgd2hlcmUgbHNsczIgdmFyaWFibGUgaXMgbWVhbnQuICBEb24ndCBjYWxsIFVTRVJfSEVBUF9GUkVFCgl0d2ljZSBvbiB0aGUgc2FtZSBoYW5kbGUgaWYgaERhdGEgYW5kIGhNZW0gYXJlIHRoZSBzYW1lLgoKCSogW2RlYnVnZ2VyL29wY29kZXMvaTM4Ni1kaXMuY10KCUFkZCBuZXcgbmFtZSBhcnJheSBuYW1lc19ybXcgZm9yIHRhYmxlIGRyaXZlbiBkZWNvZGluZyBvZiB0aGUKCTE2LWJpdCBtb2Qvcm0gZmllbGQuICBPbWl0IGxhcmdlIGNhc2Ugc3RhdGVtZW50IGluIE9QX0UgYW5kCglyZXBsYWNlIHdpdGggYXJyYXkgcmVmZXJlbmNlIHRvIG1hdGNoIGV4aXN0aW5nIGNvZGluZyBzdHlsZS4KCUFkZCBuZXcgc3RhdGljIHZhcmlhYmxlIG1hY2hpbmUgd2l0aCB2YWx1ZSAyODYgb3IgMzg2IHRvCgljb3JyZWN0bHkgZGVjb2RlIG1vZC9ybSBmaWVsZCBpbiBlaXRoZXIgMTYgb3IgMzIgYml0IG1vZGVzLgoJU2V0IGl0IGluIHByaW50X2luc25faXsyLDN9ODYuICBJbiBPUF9FIHVzZSBpdCB0byBkZWNpZGUgaG93Cgl0byBkZWNvZGUgbW9kL3JtLiAgV2hpbGUgdGhlIGNvZGUgd2FzIGNvcnJlY3QgZm9yIDE2IGJpdCBjb2RlLAoJaXQgd2FzIGltcHJvcGVybHkgZGVjb2RpbmcgbW9kL3JtIGZpZWxkcyBvbiB3b3JkIHByZWZpeGVkCgkzMiBiaXQgaW5zdHJ1Y3Rpb25zLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglSZWNvZ25pemUgbmV3IHRva2VuIEFCT1JULiAgIFJlY29nbml6ZSBzaW5nbGUgbGV0dGVycyAncCcKCWFuZCAncScgYXMgdG9rZW5zLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJQWRkIG5ldyB0b2tlbiBBQk9SVC4gIEFsbG93IHByaW50IGNvbW1hbmQgdG8gYmUgaW52b2tlZCBieQoJJ3AnIGFuZCBxdWl0IGNvbW1hbmQgYnkgJ3EnLCBhbGEgR0RCLiAgQ2hhbmdlIGxvdHMgb2YgJ307JwoJdG8ganVzdCAnfScuICBBZGQgc3RhdGljIGR1bW15X3JlZ3MgdG8gd2luZV9kZWJ1ZyBzbyB0aGF0Cgl3aW5lX2RlYnVnKDAsIE5VTEwpIGRvZXNuJ3QgY29yZSBkdW1wIHdpdGggcW1hZ2ljLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUNvcnJlY3Qgc3ludGF4IG9mIGJyZWFrIGNvbW1hbmQgaW4gaGVscHRleHQgYW5kIG9taXQgZm9ybWVyCgljb21tZW50IGFib3V0IHByb2JhYmxlIGJ1Z2dpbmVzcyBvZiB0aGUgZGlzYXNzZW1ibHkgc2luY2UgaXQKCWlzIG5vdyBjb3JyZWN0LiAgQ2hhbmdlIGZwcmludGYgb2YgZmlyc3QgYmFja3RyYWNlIHN0YWNrCglmcmFtZSB0byBtYXRjaCB0aGF0IG9mIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgZnJhbWVzLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQ2hhbmdlIGNvbnN0cnVjdGlvbiBvZiBjb21tYW5kIGxpbmUgaW4gQ3JlYXRlUFNQIGZyb20gY3JlYXRpbmcKCWEgc3RyaW5nIHRoYXQgbG9va3MgbGlrZSAiYXJnMSBhcmcyIFxyIiB0byAiYXJnMSBhcmcyIi4gIEEgRE9TCglQU1AgY29tbWFuZCBsaW5lIGxvb2tzIGxpa2UgIiBhcmcxIGFyZzJcciIgd2l0aCB0aGUgbGVuZ3RoIG5vdAoJaW5jbHVkaW5nIHRoZSB0cmFpbGluZyAiXHIiIGJ1dCB0aGF0IGlzIG5vdCBob3cgV2luZG93cyBkb2VzIGl0LgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglDaGFuZ2UgdXNlcyBvZiAlcyB0byBwcmludCBzdHJpbmdzIGluIEdldE1vZHVsZUhhbmRsZSB0byAleCBzbwoJdGhhdCBzdHJpbmcgSURzIGRvbid0IGNhdXNlIGEgY29yZSBkdW1wIHdpdGggcW1hZ2ljLiAgSGFuZGxlCgljb252ZXJ0aW5nIGEgc3RyaW5nIGlkIHRvIGEgbGl0ZXJhbCBtb2R1bGUgaGFuZGxlLiAgRm9yCglleGFtcGxlLCBHZXRNb2R1bGVIYW5kbGUoKExQU1RSKSAweDU3KSBub3cgcmV0dXJucyAweDU3IGlmCglpdCBpcyBhIHJlYWwgbW9kdWxlIGhhbmRsZS4KCgkqIFttaXNjL21lc3NhZ2UuY10KCUluIE1lc3NhZ2VCb3gsIHRyYW5zbGF0ZSBhIE5VTEwgdGl0bGUgYXJndW1lbnQgdG8gdGhlIHN0cmluZyAiRXJyb3IiLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJSW4gR2V0U2V0UHJvZmlsZSB0cmFuc2xhdGUgYSBOVUxMIERlZmF1bHQgYXJndW1lbnQgdG8gIiIuICBBbnkKCWNhbGxlciB3aG9zZSBEZWZhdWx0IGFyZ3VtZW50IGlzIE5VTEwgaXMgYnVnZ3ksIGJ1dCBDSEFSTUFQIGRvZXMgaXQKCWFueXdheS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUFkZCBOVUxMIHBvaW50ZXIgY2hlY2tzIGluIEVudW1Gb250RmFtaWxpZXMgdG8gcHJldmVudCBjb3JlIGR1bXBzLgoKU2F0IE1heSAyOCAyMDowMTo1MSAxOTk0IEpvbiBUb21icyAoam9uQGd0ZXgwMi51cy5lcykgCgoJKiBOZXcgb3B0aW9ucy9yZXNvdXJzZXMgbm9zYXZldW5kZXJzIGFuZCBub2JhY2tpbmdzdG9yZS4gIEJ5IAoJZGVmYXVsdCBiYWNraW5nc3RvcmUgYW5kIHNhdmV1bmRlcnMgYXJlIG5vdyBlbmFibGVkLCB0aGVzZSB1c2UgCgltb3JlIG1lbW9yeSBidXQgYXZvaWRzIHRob3NlIHNsb3cgKHNvbWV0aW1lcyBtdWx0aXBsZSkgcmVkcmF3cyAKCWNhdXNlZCBiZSBleHBvc3VyZSBldmVudHMuCgpNYXkgMzAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL2RyaXZlci5jXSBOZXcgZmlsZQoJU2tlbGV0b24gZm9yICdJbnN0YWxsYWJsZSBXaW5lIERyaXZlcnMnIGZ1bmN0aW9ucy4gOi0pCgkqIFttaXNjL2F1ZGlvLmNdIE5ldyBmaWxlCglTa2VsZXRvbiBmb3IgYmFzaWMgJ0F1ZGlvIERyaXZlcicgZnVuY3Rpb25zLgoJKiBbbWlzYy9uZXR3b3JrLmNdIE5ldyBmaWxlCglTdHVicyBmb3IgZmV3IG5ldHdvcmtpbmcgZnVuY3Rpb25zLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCU1vcmUgY29kaW5nIC4uLiBhIGR1c3QgaW4gYSBnYWxheHkgLi4uCgkqIFttaXNjL3NoZWxsLmNdCglTb21lIGNvZGluZyBmb3IgJ1JlZ1hYWCcgZnVuY3Rpb25zIC4uLiBhIGR1c3QgaW4gdGhlIHdpbmQgLi4uCgoJKiBbbWlzYy9wcm9maWxlLmNdCglCdWcgZml4IGluIEdldFNldFByb2ZpbGUoKSwgYmFkIGVudW1lcmF0aW9uIGlmIEtleU5hbWUgPT0gTlVMTC4KCgkqIFtvYmplY3RzL2dkaS5jXQoJTmV3IGZ1bmN0aW9uIENyZWF0ZURpc2NhcmRhYmxlQml0bWFwKCksIGl0IGp1c3QgY2FsbGluZyAKCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoKSBmb3Igbm93LiBJdCdzIGdldCAnY2xvY2suZXhlJyBydW5uaW5nICEgOi0pCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJKiBbY29udHJvbHMvY29tYm8uY10KCU5ldyBmb250IG1lbWJlciBhc3NpZ25lZCB0byBTWVNURU1fRk9OVCBhcyBkZWZhdWx0LgoJQWRkZWQgcHJvY2Vzc2luZyBmb3IgV01fU0VURk9OVCBtZXNzYWdlOwoKClR1ZSBNYXkgMzEgMjA6MzQ6MjUgRURUIDE5OTQgIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAY3MudW1sLmVkdT4KCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXQogICAgICAgIEFkZGVkIEFzeW5jTW91c2VCdXR0b25zU3RhdGVzIGFycmF5IGZvciBHZXRBc3luY0tleVN0YXRlLgoKICAgICAgICAqIFt3aW5kb3dzL2tleWJvYXJkLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgYmVnaW5uaW5nIG9mIEdldEFzeW5jS2V5U3RhdGUuCgpXZWQgTWF5IDI1IDIzOjM1OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXQogICAgICAgICAgW3dpbmRvd3MvbWFwcGluZy5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICAgIFt3aW5kb3dzL2RjLmNdCiAgICAgICAgRnVydGhlciBtZXRhZmlsZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWF5IDIzIDE1OjA3OjM2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglBbGxvY2F0ZSBoZWFwIGFuZCBzdGFjayBzZWdtZW50cyBhcyA2NGsuCgpTYXQgTWF5IDIxIDAxOjE1OjQ5IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFtsb2FkZXIvc2VsZWN0b3IuY10KICAgICAgICBDb3JyZWN0IHR5cG9zIHdoZXJlIG1lbWNweSBpcyB1c2VkIGluc3RlYWQgb2YgbWVtc2V0LgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBBbGxvdyBmb3IgbGVnaXRpbWF0ZSBjYXNlcyB3aGVyZSBiaVNpemVJbWFnZSBpcyAwIGluIExvYWRJY29uCiAgICAgICAgYnkgY2FsY3VsYXRpbmcgdGhlIHZhbHVlIHdoZW4gdGhlIGJpdG1hcCBpcyBub3QgY29tcHJlc3NlZC4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyMS5jXQogICAgICAgIEZpeCBOVUxMIGRlcmVmZXJlbmNlIGNhdXNlZCBieSBzdXBlcmZsdW91cyBET1NfY2xvc2VkaXIgaW4gRmluZE5leHQuCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIE5ldyBmdW5jdGlvbiB0eXBlX21hdGNoIHRvIGhhbmRsZSBzdHJpbmcgcmVzb3VyY2UgdHlwZXMgYXMKICAgICAgICB3ZWxsIGFzIElEcy4gIEluIGFkZGl0aW9uLCBjb21wYXJlIG9ubHkgbG93IDQgYml0cyBvZiB0eXBlX2lkCiAgICAgICAgd2hlbiBib3RoIG51bWJlcnMgYXJlIElEcyBzbyB0aGF0IDB4MDAwMiBtYXRjaGVzIDB4ODAwMi4KICAgICAgICBJbiBGaW5kUmVzb3VyY2VCeU51bWJlciBhbmQgRmluZFJlc291cmNlQnlOYW1lIHVzZSB0eXBlX21hdGNoCiAgICAgICAgaW5zdGVhZCBvZiBjb21wYXJpbmcgbnVtYmVycy4gIEluIEZpbmRSZXNvdXJjZSBoYW5kbGUgdGhlCiAgICAgICAgIiNudW1iZXIiIHN5bnRheCBhbmQgZW1wdHkgc3RyaW5ncyBpbiBib3RoIHRoZSByZXNvdXJjZSBhbmQKICAgICAgICB0eXBlIG5hbWVzLgoKTW9uIE1heSAyMyAwMDo0ODoyNSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbd2luZG93cy9kaWFsb2cuY10KICAgICAgICBGaXggaW5hZHZlcnRlbnQgcHJpbnRpbmcgb2Ygc3RyaW5nIElEcyBhcyBzdHJpbmdzLgoKTWF5IDIzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9ucyBHZXRNZW51SXRlbUNvdW50KCksIEdldE1lbnVJdGVtSUQoKS4KCQlHZXRNZW51U3RyaW5nKCkgJiBIaWxpdGVNZW51SXRlbSgpLgoJQnVnIGZpeCBpbiBDaGVja01lbnVJdGVtKCkuCglGdW5jdGlvbiBTZXRNZW51KCkgbm93IG1ha2UgY2xpZW50IGFyZWEgcmVjYWxjIGlmIG1lbnUgcmVtb3ZlZC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeCBpbiBTZXRXaW5kb3dQb3MoKSwgbm8gbW9yZSBYTWFwcGluZyBvciBYQ29uZmlndXJpbmcJb2YKCQl3aW5kb3dzIHdpdGggaW5pdGlhbCB3aWR0aCBvciBoZWlnaHQgZXF1YWwgemVyby4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJTmV3IGZ1bmN0aW9uIEVudW1PYmplY3RzKCksIHVzaW5nIG5ldyBscFBlbkJydXNoTGlzdCBidWlsZHVwCgkJZnJvbSBjYWxscyB0byBuZXcgZnVuY3Rpb24gR0RJX0FwcGVuZFRvUGVuQnJ1c2hMaXN0KCkuCgkJKCdwYnJ1c2guZXhlJyBkb24ndCBzaG93IGl0cyBmYWNlIHlldCAhIC4uLiA6LSggKQoJTmV3IEVNUFRZIFNUVUIgZm9yIGZ1bmN0aW9uIFNldE9iamVjdE93bmVyKCksCgkJKCdtcGxheWVyLmV4ZScgY2FsbCBpdCB2aWEgR2V0UHJvY0FkZHJlc3MoKSAuLi4pCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgaW50ZXJuYWwgZnVuY3Rpb25zIFBhcnNlRm9udFBhcm1zKCkgJiBJbml0Rm9udHNMaXN0KCkuCglFbnVtRm9udHMoKSAmIEVudW1Gb250RmFtaWxpZXMoKSBlbnVtZXJhdGVzIGZvbnRzIChubyBtb3JlIGR1bW1pZXMpLgoJRk9OVF9NYXRjaEZvbnQgbm93IG1ha2UgcmV0cmllcyB0byBmaW5kIGNsb3Nlc3Qtc21hbGxlc3QgZm9udC4KCQkoJ2NoYXJtYXAuZXhlJyBjYW4gbm93IHNob3cgdGhlIGRpZmZlcmVudHMgZm9udHMgYXZhaWxhYmxlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2Ugc21hbGwgZG9zIE9CTV9PTERfQ0xPU0UgYnV0dG9uIGZvciBNREkgd2luZG93cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtvYmplY3RzL2JpdG1hcC5jXQoJU3RhcnQgdG8gcmVtb3ZlIG9ic29sZXRlIGdsb2JhbHMgc3VjaCBYVF9zY3JlZW4gLi4uCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCU1ha2UgZnVuY3Rpb24gR2V0UHJvY0FkZHJlc3MoKSB3b3JraW5nIGFsc28gd2l0aCBidWlsdGluIERMTHMuCgpUdWUgTWF5IDI0IDIwOjE4OjAyIDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2lmMTYzMi9zeXN0ZW0uc3BlY10gW2lmMTYzMi90b29saGVscC5zcGVjXQogICAgICAgIHN5c3RlbS5kbGwgJiB0b29saGVscC5kbGwgYWRkZWQuCgogICAgICAgICogW2xvYWRlci9saWJyYXJ5LmNdCiAgICAgICAgTW9kaWZpZWQgR2V0TW9kdWxlRmlsZU5hbWUoKSB0byByZXR1cm4gdGhlIGZ1bGwKICAgICAgICBmaWxlbmFtZS4KICAgICAgICBBZGRlZCBhIGNoZWNrIHRvIExvYWRMaWJyYXJ5KCkgdG8gcHJldmVudCBsb2FkaW5nCiAgICAgICAgYnVpbHQgaW4gZGxscy4gKGVnLiB1c2VyLmV4ZSkKICAgICAgICBBZGRlZCBhIGNoZWNrIHRvIEZyZWVMaWJyYXJ5KCkgdG8gcHJldmVudCBidWlsdC1pbgogICAgICAgIGRsbHMgZnJvbSBiZWluZyBmcmVlZC4KICAgICAgICBNb2RpZmllZCBHZXRQcm9jQWRkcmVzcygpIHRvIHN1cHBvcnQgYnVpbHRpbiBkbGxzLgoKICAgICAgICAqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2ludDJmLmNdCiAgICAgICAgQWRkZWQgPT4gcGlmZWRpdCBydW5zLgoKICAgICAgICAqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIEFkZGVkIGEgTlVMTC1wdHIgY2hlY2sgdG8gRE9TX2Nsb3NlZGlyKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMTcgMjM6MDM6MTYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL2RjZS5jXQoJRml4ZWQgYnVnIHdpdGggZGNlIGluaXRpYWxpemF0aW9uIHRoYXQgd2FzIGNhdXNpbmcgZGlhbG9nIGJveGVzIHRvIG5vdAoJYmUgZGlzcGxheWVkLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQmV0dGVyIGZpeCBmb3IgYnVnIGZvdW5kIGJ5IE1hcnRpbi4KClNhdCBNYXkgMTQgMTk6NDg6MzkgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogWyBtZW1vcnkvaGVhcC5jIF0KICAgICAgICBSZWRpcmVjdCBIRUFQX1JlQWxsb2MgY2FsbHMgd2l0aCBOVUxMIGFyZ3VtZW50IHRvIEhFQVBfQWxsb2MuCgpNYXkgMTYsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtvYmplY3RzL2ZvbnQuY10KCU1ha2UgRW51bUZvbnRzKCkgY2FsbGluZyBhIGNhbGxiYWNrIHdpdGggZHVtbXkgZm9udHMgLi4uIDotKQoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkIEVtcHR5IFN0dWIgZm9yIEV4dFRleHRPdXQoKSwgd2hpY2ggdGVtcG9yYXJlbHkgY2FsbCBUZXh0b3V0KCkuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglUZW1wb3JhcmVseSBnbyBhcm91bmQgYnVnIGluIENhbGxXaW5kb3dQcm9jKCksIHlvdSB3aWxsIHNlZSBwcmludGZzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCU1ha2UgRURJVCBjb250cm9scyBmb2N1c2VkIGJ5IGEgbW91c2UgY2xpY2suCgoJKiBbbWlzYy9wcm9wZXJ0eS5jXQoJQnVnIEZpeCBpbiBmdW5jdGlvbiBFbnVtUHJvcHMoKSwgYmV0dGVyIHVzZSBvZiBDYWxsQmFjazE2KCkuCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJQmFzaWMgU2tlbHRvbidzIGZvciBNQ0kgbWVzc2FnZXMgZGlzcGF0Y2hpbmcgZnVuY3Rpb24uCgpTdW4gTWF5IDE1IDE2OjE1OjE3IDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW3dpbmRvd3MvdXRpbGl0eS5jXQogICAgICAgIEFkZGVkIHdpbmRvd3Nfd3NwcmludGYoKSBmb3IgdGhlIGVtdWxhdG9yLCB3c3ByaW50ZigpIGlzCiAgICAgICAgZm9yIGxpYndpbmUuCgpTYXQgTWF5IDE0IDIyOjE2OjQwIDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFttaXNjL2N1cnNvci5jXQogICAgICAgIEZpeCBwb2ludGVyIHByb2JsZW1zIGluIExvYWRDdXJzb3IgbGVhZGluZyB0byBoZWFwIGNvcnJ1cHRpb24uCgogICAgICAgICogIFsgY29udHJvbHMvbWVudS5jIF0KICAgICAgICBGaXggdHdvIE5VTEwgZGVyZWZlcmVuY2luZyBidWdzLgoKU3VuIE1heSAxNSAyMDowNzo0OCAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbb2JqZWN0cy9mb250LmNdCiAgICAgICAgRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jaW5nIGJ1ZyBpbiBHZXRDaGFyV2lkdGguCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIEZpeCB1bmRlci1hbGxvY2F0aW9uIG9mIG1lbW9yeSBpbiBMb2FkQWNjZWxlcmF0b3JzLgoKICAgICAgICAqIFt3aW5kb3dzL2NsYXNzLmNdCiAgICAgICAgSWdub3JlIG5lZ2F0aXZlIHNpemVzIGZvciBleHRyYSBmaWVsZHMgaW4gUmVnaXN0ZXJDbGFzcy4KClN1biBNYXkgMTUgMDY6MzU6MDMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICAgIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9wZW4uY10KICAgICAgICAgIFtvYmplY3RzL3RleHQuY10gW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICAgIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL21hcHBpbmcuY10KICAgICAgICBCZWdpbm5pbmdzIG9mIG1ldGFmaWxlIHN1cHBvcnQuCgogICAgICAgICogW21pc2MvZmlsZS5jXQogICAgICAgIENvcnJlY3RlZCBzcGVsbGluZyBvZiBfbGNyZWF0LgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgTWlub3IgYnVnIGZpeGVzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1heSA5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglNYWtlIHRodW1idHJhY2sgYnV0dG9uIGRpc2FwcGVhciBpZiBzY3JvbGwgYm94IHJhdGlvIDwgMzoxLgoJTWFrZSBhcnJvdyBidXR0b25zIHJlY3Rhbmd1bGFyIGlmIHNjcm9sbCBib3ggcmF0aW8gPCAyOjEuCglBZGQgY29kZSBmb3IgU0JTX1RPUEFMSUdOLCBTQlNfQk9UVE9NQUxJR04sIAoJCQkJU0JTX0xFRlRBTElHTiAmIFNCU19SSUdIVEFMSUdOLgoJQnVnIGZpeCBpbiBOQ19DcmVhdGVTY3JvbGxCYXJzKCksIG5vIG1vcmUgYmlnYnV0dCBpbiBjYWxlbmRhci5leGUuLi4gOi0pCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci90YXNrLmNdIFttaXNjL2V4ZWMuY10KCUNvbnRpbnVlIHBsYXlpbmcgYXJvdW5kIHRyeWluZyB0byBnZXQgYSBzZWNvbmQgdGFzayBydW5uaW5nLgoKCSogW3dpbmRvd3MvbWRpLmNdCglDaGFuZ2UgT0JNX0NMT1NFIGZvciBPQk1fT0xEX0NMT1NFLCBhIHNtYWxsZXIgZG90IGJ1dHRvbiB3aGVuIG1heGltaXplZC4KCgkqIFtldmVyeXdoZXJlXQoJQWRkaW5nIHByZXZpb3VzIHdvcmtzIG9mIHRoZSBBcHIgMjUsIDk0LgoKVHVlIE1heSAxMCAxODowOToxNCAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbaWYxNjMyL21tc3lzdGVtLnNwZWNdIFttaXNjL21tc3lzdGVtLmNdIFtpbmNsdWRlL21tc3lzdGVtLmhdCglBZGRlZCBNYXJ0aW4ncyBtbXN5c3RlbS5kbGwgc3R1YnMuCgoJKiBbbWlzYy9zb3VuZC5jXQoJQWRkZWQgcmVtYWluaW5nIHN0dWJzIGZvciBzb3VuZC5kbGwuCgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCglGaXhlZCBwcm90b3R5cGVzIChJIGZvdW5kIHRoZW0gaW4gQkMgNCkgYW5kIGFkZGVkIFNoZWxsQWJvdXQoKQoJYW5kIEFib3V0RGxnUHJvYygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNYXkgMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZCBYVW5ncmFiUG9pbnRlcigpICYgWFVuZ3JhYlNlcnZlcigpIGluIHdpbmVfZmF1bHQoKS4KCkZyaSBBcHIgMjIgMTk6MzA6MDggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJY29sb3Jfc3RyZXRjaCgpIHJld3JpdHRlbiB0byB1c2UgaW50cyBvbmx5LiAqZmFzdCEqCglCTEFDS09OV0hJVEUgJiBXSElURU9OQkxBQ0sgc3RyZXRjaG1vZGVzIHJlZGlyZWN0ZWQgdG8KCXVzZSBjb2xvcl9zdHJldGNoKCkuCgpNb24gTWF5ICAyIDIxOjM5OjQzIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU2V0U3lzTWVudSgpIGFkZGVkLgoKCSogW21pc2MvY3Vyc29yLmNdCglHZXRDdXJzb3IoKSBhZGRlZC4KCgkqIFttaXNjL21haW4uY10KCVN3YXBNb3VzZUJ1dHRvbigpIGFkZGVkLCAoTk9QKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJR2V0RGVza3RvcEh3bmQoKSBhZGRlZC4KCgkqIFtpZjE2MzIvKnNwZWNdCglBZGRlZCBub3QgaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGRlZnMgYXMgY29tbWVudC4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQ2hhbmdlIFdTQUdldFhieVkoKSBmdW5jdGlvbnMgdG8gbm9uLWJsb2NraW5nIG9uZXMsCglBZGRlZCBXU0FBc3luY1NlbGVjdCgpLiAKCShXU0EgZnVuY3Rpb25zIGNhbid0IGJlIGNhbmNlbGVkIHlldCkuCgpXZWQgQXByIDIwIDIzOjU4OjU4IDE5OTQgIFNjb3R0IEEuIExhaXJkICAoc2NvdHRAY3VybHkpCgoJKiBtaXNjL3Byb2ZpbGUuYzogRml4ZWQgYnVnIHdpdGggR2V0SW5pRmlsZU5hbWUgcmV0dXJuaW5nIHdyb25nCglwYXRoIHdoZW4gZ2l2ZW4gYSBzaW1wbGUgZmlsZSBuYW1lLiAgRml4ZWQgR2V0U2V0UHJvZmlsZSB0byBhbGxvdwoJZW51bWVyYXRpbmcgYWxsIGtleSBuYW1lcyB3aGVuIEtleU5hbWUgaXMgbnVsbC4KCkFwciAyNSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW29iamVjdHMvYml0Ymx0LmNdCglBZGQgcHJvdGVjdGlvbiB0byBCaXRCbHQoKSAmIFN0cmV0Y2hCbHQoKSBmb3Igd2lkdGggb3IgaGVpZ2h0ID0gMC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQXZvaWQgcGFpbnRpbmcgaW4gTkNfRG9OQ1BhaW50KCkgaWYgSXNXaW5kb3dWaXNpYmxlKCkuCglTaW1wbGlmeSBOQ19UcmFja01vdXNlTWVudUJhcigpIGJlY2F1c2UgY29kZSBtb3ZlZCB0byBNZW51Rm9jdXNMb29wKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUNyZWF0ZVdpbmRvd0V4KCkgJiBEZXN0cm95V2luZG93KCkgbm93IGNhbGwgcmVzcGVjdGl2ZWx5CgkJQWRkV2luZG93VG9UYXNrKCkgJiBSZW1vdmVXaW5kb3dGcm9tVGFzaygpLgoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEFueVBvcHVwKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUJ1ZyBGaXggOiBHZXRNb2R1bGVGaWxlTmFtZSgpIG5vdyByZXR1cm4gZnVsbCBwYXRoIGZpbGVuYW1lLgoKCSogW2luY2x1ZGUvbWVudS5oXSBbY29udHJvbHMvbWVudS5jXQoJQWRkIGhUZXh0IGhhbmRsZSBhbmQgcmVtb3ZlIG9ic29sZXRlIE1FTlVJVEVNIHN0cnVjdCBtZW1iZXJzLgoJQWRkIGEgUmVsZWFzZUNhcHR1cmUoKSBpbiBTZXRNZW51KCkgd2hlbiBtZW51YmFyIGNoYW5nZWQgd2hpbGUgY2FwdHVyZWQuCglBZGQgTWVudU1vdXNlTW92ZSgpIE1lbnVCdXR0b25VcCgpIGluIGZ1bmN0aW9uIE1lbnVGb2N1c0xvb3AoKS4KCgkqIFttaXNjL2ZpbGUuY10KCUdldFRlbXBGaWxlbmFtZSgpIG5vdyBjcmVhdGUgYSBmaWxlLgoJX2xjcmVhdGUoKSB1c2UgdW5peCBvcGVuIChuYW1lLCBtb2RlLCBwZXJtKSwgd2l0aCBwZXJtPU82NjYuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglSZW1vdmUgdGVtcG9yYXJseSBidWlsdGluIFNIRUxMLkRMTCwgQWRkIE1NU1lTVEVNLkRMTCBpbiBidWlsdGluIGxpc3QuCgoJKiBOZXcgZmlsZSBbbWlzYy9tbXN5c3RlbS5jXQoJKiBOZXcgZmlsZSBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJKiBOZXcgZmlsZSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCglNYW55LCBtYW55IGVtcHR5IHN0dWJzIC4uLiA6LSkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldlZCBBcHIgMjAgMTQ6NTM6MzUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NhbGwuU10gW2lmMTYzMi9JbWFrZWZpbGVdCglGaXhlZCBidWcgZm9yIG5vbi1MaW51eCBzeXN0ZW1zLgoKQXByIDE4LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXhlZCBpbiBDcmVhdGVXaW5kb3dFeCgpIDogTm93IHVzZSBTZXRNZW51KCkgZm9yIG1lbnViYXIgc2V0dXAuCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gU2V0U3lzTW9kYWxXaW5kb3coKS4KCgkqIFttaXNjL2V4ZWMuY10KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBFeGl0V2luZG93cygpLgoKCSogW29iamVjdHMvZm9udC5jXQoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEVudW1Gb250cygpLgoKCSogTmV3IGZpbGUgW21pc2MvcHJvcGVydHkuY10KCU5ldyBmdW5jdGlvbnMgUmVtb3ZlUHJvcCgpLCBHZXRQcm9wKCksIFNldFByb3AoKSAmIEVudW1Qcm9wcygpLgoKCSogTmV3IGZpbGUgW21pc2Mvc2hlbGwuY10KCU5ldyBlbXB0eSBzdHVicyBmb3IgZnVuY3Rpb24gUmVnaXN0ZXJTaGVsbFByb2MoKSwgCgkJCVNoZWxsRXhlY3V0ZSgpICYgU2hlbGxQcm9jKCkuCgoJKiBOZXcgZmlsZXMgW2xvYWRlci90YXNrLmNdICYgW2luY2x1ZGUvdGFzay5oXQoJTW92ZSBmdW5jdGlvbnMgR2V0V2luZG93VGFzaygpLCBHZXROdW1UYXNrKCksIEVudW1UYXNrV2luZG93cygpCgkJZnJvbSAnbG9hZGVyL2xpYnJhcnkuYycuCgoJKiBbaWYxNjMyL3VzZXIuY10gW2lmMTYzMi9rZXJuZWwuY10KCVB1dCBBdG9tcyBmdW5jdGlvbnMgZW50cmllcy4KCgkqIFtjb250cm9scy9jb21iby5jXQoJTmV3IGZ1bmN0aW9ucyBEaXJEbGdTZWxlY3RDb21ib0JveCgpICYgRGlyRGxnTGlzdENvbWJvQm94KCkuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTmV3IGZ1bmN0aW9ucyBEaXJEbGdTZWxlY3QoKSAmIERpckRsZ0xpc3QoKS4KClN1biBBcHIgMTcgMjA6NTc6NTkgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtvYmplY3RzL3Rlc3QuY10KCUdyYXlTdHJpbmcoKSBhZGRlZC4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNhbGxHcmF5U3RyaW5nUHJvYygpIGFkZGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCglBZGRlZC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgZm9yZ290dGVuIHNwZWNzIGZvciBhdG9tIGZ1bmN0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEFwciAxMiAwMDowNTozMSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbWlzYy9zcHkuYyAoU3B5SW5pdCk6IEFkZGVkIG1vcmUgbWVzc2FnZSB0eXBlcwoKCSogW3dpbmRvd3MvbWRpLmNdIFtpbmNsdWRlL21kaS5oXQoJTWF4aW1pemluZyBhbmQgcmVzdG9yaW5nIGNoaWxkIHdpbmRvd3MuCglUaWxpbmcgb2YgY2hpbGQgd2luZG93cy4KCk1vbiBBcHIgMTEgMjA6NDg6MjggMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXZlcnQgZm9jdXMgYW5kIGFjdGl2YXRpb24gdG8gcHJldmlvdXMgd2luZG93IHdoZW4gaGlkaW5nIGEgd2luZG93LgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUltcGxlbWVudGVkIHN5c3RlbSBjb2xvciBvYmplY3RzIChicnVzaGVzIGFuZCBwZW5zIGNyZWF0ZWQgYXQKCVNldFN5c0NvbG9yKCkgdGltZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlKS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvYnV0dG9uLmNdCglDaGFuZ2VkIHBhaW50aW5nIGNvZGUgdG8gdXNlIHN5c3RlbSBjb2xvciBvYmplY3RzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTmV3IGZ1bmN0aW9uIE1TR19JbnRlcm5hbEdldE1lc3NhZ2UoKSBmb3IgaW50ZXJuYWwgbWVzc2FnZXMKCWxvb3BzIChlLmcuIGZvciBkaWFsb2dzIG9yIG1lbnVzKS4KCgkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXSAgKE5ldyBmaWxlcykKCUJlZ2lubmluZyBvZiB0aGUgd2luZG93IGhvb2tzIGltcGxlbWVudGF0aW9uLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglVc2UgbmV3IGZ1bmN0aW9uIE1TR19JbnRlcm5hbEdldE1lc3NhZ2UoKSBpbiBEaWFsb2dCb3goKS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUFkZGVkIGZ1bmN0aW9uIENhbGxIb29rUHJvYygpLgoKQXByIDExLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQnVnIGZpeCA6IFdNX0NIQVJzIGFyZSBzZW50IHRvIGZvY3VzZWQgd2luZG93IGxpa2UgV01fS0VZPz8/LgoKCSogW21pc2MvZXhlYy5jXQoJTm90aGluZyBtdWNoIG1vcmUgdGhhbiBhIHN0dWIgZm9yIExvYWRNb2R1bGUoKSwgSSBzYXcgdGhlcmUgYSBsb3QKCQl0byBiZSBkb25lIGluIHRoYXQgY29ybmVyLCBJIHdpbGwgY29tZSBiYWNrIGxhdGVyIC4uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglOZXcgZnVuY3Rpb25zIEdldFdpbmRvd1Rhc2soKSwgR2V0TnVtVGFzaygpLCBFbnVtVGFza1dpbmRvd3MoKSAKCQkJYW5kIGFzc29jaWF0ZWQgbW9kdWxlcyAmIHRhc2tzIGxpbmtlZC1saXN0cy4KCShpdCdzIG9ubHkgYW4gJ2VtZXJnaW5nIGJ1ZCcsIG1vcmUgdG8gY29tZSBuZXh0IHdlZWtzKS4KCgkqIFtsb2FkZXIvd2luZS5jXQoJVXNlIExvYWRMaWJyYXJ5KCkgaW5zdGVhZCBvZiBMb2FkSW1hZ2UoKSBmb3IgJ3N5c3Jlcy5kbGwnLgoKCSogW2NvbnRyb2wvbWVudS5jXQoJWW91IGNhbiBub3cgY2xpY2sgb3V0c2lkZSBtZW51IHJlZ2lvbiB3aXRob3V0IHByb2JsZW0uCglLZXlib2FyZCBuYXZpZyBtb3JlIHNtb290bHksIGV2ZW4gaWYgYSBjaGlsZCBoYXMgdGhlIGZvY3VzLgoJQnVnIGZpeCBpbiBJbnNlcnRJdGVtKCksIChiYWQgbGlua2xpc3Qgd2hlbiBpbnNlcnQgcG9pbnQgbm90IGZvdW5kKS4KCWNoYW5nZSBSZWFsbG9jIGZvciBGcmVlICYgQWxsb2MgaW4gTW9kaWZ5SXRlbSgpLgoJTUZfU1RSSU5HIG5vdyBzZXQgQkxBQ0tfUEVOIHRvIGZpeCBidWcgb2YgYmFkIGNvbG9yIG9mIHRoZSB1bmRlcnNjb3JlcyAKCQlkb25lIGJ5IERyYXdUZXh0KCksIChtYXliZSBpdCBzaG91bGQgZG9uZSBpbiBEcmF3VGV4dCgpIGl0c2VsZiA/KS4KClN1biBBcHIgMTAgMTQ6MDY6MDggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL3Byb2ZpbGUuY10KCS5JTkkgZmlsZXMgd2lsbCBub3cgYmUgc3RvcmVkIGluIC8gbG9hZGVkIGZyb20gdGhlIHdpbmRvd3MgZGlyCglpZiBubyBwYXRoIGlzIHN1cHBsaWVkLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUZpeGVkIEdldERyaXZlVHlwZSdzIHByb3RvdHlwZS4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbaW5jbHVkZS93aW5zb2NrLmhdIFttaXNjL3dpbnNvY2tldC5jXQoJRml4ZWQgcHJvdG90eXBlczogd2luc29jayB1c2VzIGEgd29yZCBhcyBzb2NrZXQgaGFuZGxlIG5vdCBhbiBpbnQuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIGhlYXAgYWxsb2NhdGlvbiBmb3IgcmV0dXJuZWQgc3RydWN0dXJlcy4KCUFkZGVkIG5vbi1ibG9ja2luZyBXU0FBc3luY0dldFhieVkoKSBmdW5jdGlvbnMgYXMgYmxvY2tpbmcgb25lcy4KCgkqIFtsb2FkZXIvd2luZS5jXQoJQWRkZWQgSXNETExMb2FkZWQoKSwgdXNlZCBpbiBMb2FkSW1hZ2UoKSB0byBwcmV2ZW50IGxvYWRpbmcKCWEgZGxsIG11bHRpcGxlIHRpbWVzLgoJRGlyZWN0b3J5IGlzIGFkZGVkIHRvIHdpbmUncyBwYXRoIHdoZW4gYSBmdWxscGF0aCBpcyBzdXBwbGllZCB3aGVuCglzdGFydGluZyB3aW5lLgoJTG9hZEltYWdlKCk6IERMTCBmaWxlbmFtZSB1c2VkIGluc3RlYWQgRExMJ3Mgb3duIGludGVybmFsIG5hbWUsCglmaXhlcyAnQmFkIERMTCBuYW1lJyBlcnJvcnMuCgpTYXQgQXByICA5IDA4OjI2OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy93aWRnZXRzLmNdCglGaXJzdCByZWxlYXNlIG9mIGVkaXQgY29udHJvbC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEFwciAgNSAxNDozNjo1OSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2luY2x1ZGUvbWRpLmhdIFt3aW5kb3dzL21kaS5jXQoJVXNlIFdNX1BBUkVOVE5PVElGWSBtZXNzYWdlcyB0byBhY3RpdmF0ZSBjaGlsZHJlbi4KCUdlbmVyYXRlIFdNX0NISUxEQUNUSVZBVEUgbWVzc2FnZXMuCglCZWdpbm5pbmdzIGhhbmRsZXIgZm9yIG1heG1pemVkIGNoaWxkIHdpbmRvdy4KCUNsZWFuIHVwIHdoZW4gY2hpbGRyZW4gYXJlIGRlc3Ryb3llZC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmVtb3ZlZCBjb2RlIGFkZCA5NC8wMy8yNi4KCkFwciA0LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbC9tZW51LmNdCglNYWtlIG1vdXNlIG1lbnUgbmF2aWdhdGlvbiB3b3JraW5nIGFnYWluLiA6LSkpCgkoYmUgY2FyZWZ1bGwsIGNsaWNraW5nIG91dHNpZGUgbWVudXMgKGllLjogY2xpZW50cmVjdCkgCglub3QgcmVzb2x2ZWQgeWV0KQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdICBbY29udHJvbHMvc2Nyb2xsLmNdCglCdWdzIGZpeCBpbiBOQ1RyYWNrU2Nyb2xsQmFycygpLgoKCSogW21pc2MvZG9zX2ZzLmNdCglCdWcgZml4IGluICdUb0RvcygpJyBpbiBjb252ZXJzaW9uIGZvciAnLycsCgkJKGV4YW1wbGU6ICcvd2luZG93Lycgd2FzIHRyYW5zbGF0ZWQgdG8gJ1dJTkRPV3MnKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglGdW5jdGlvbiBDaGFuZ2VEaXIoKSBleHRyYWN0IHBvc3NpYmxlIGRyaXZlIGJlZm9yZSBET1NfQ2hhbmdlRGlyKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gIFtsb2FkZXIvd2luZS5jXQoJUGxheWluZyBhcm91bmQgbW92aW5nIGZ1bmN0aW9uIEdldFByb2NBZGRyZXNzKCkgYW5kIHB1dCBzb21lIGNvZGUgaW4uCgpNb24gQXByICA0IDIxOjM5OjA3IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW21pc2MvbWFpbi5jXQoJQmV0dGVyIGV4cGxhbmF0aW9uIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zLgoKCSogW29iamVjdHMvZGliLmNdCglJbXBsZW1lbnRlZCBTZXRESUJpdHNUb0RldmljZSgpLgoKCSogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXggaW4gU2V0RENTdGF0ZSgpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVJlbW92ZWQgV1NfRElTQUJMRUQgaGFuZGxpbmcgKG5vdyBkb25lIGluIG1lc3NhZ2UuYykuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBzZW5kaW5nIGEgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2UgaW4gTVNHX1RyYW5zbGF0ZU1vdXNlTXNnKCkuCglVc2UgV2luZG93RnJvbVBvaW50KCkgdG8gZmluZCB0aGUgd2luZG93IGZvciBtb3VzZSBldmVudHMsIHRha2luZwoJaW50byBhY2NvdW50IGRpc2FibGVkIHdpbmRvd3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBCZWdpblBhaW50KCkgdG8gYWxsb3cgY2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB0aGFuCglvbiBXTV9QQUlOVCAoU29saXRhaXJlIG5lZWRzIGl0Li4uKQoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBGaW5kV2luZG93KCkuCglSZXdyaXR0ZW4gRW5hYmxlV2luZG93KCkgdG8gYmVoYXZlIG1vcmUgbGlrZSBXaW5kb3dzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXdyaXR0ZW4gV2luZG93RnJvbVBvaW50KCkgdG8gYWxzbyBzZWFyY2ggY2hpbGQgd2luZG93cy4KCk1vbiBBcHIgIDQgMTc6MzY6MzIgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtpbmNsdWRlL2ludDIxLmhdIC0+IFttc2Rvcy5oXQoJcmVuYW1lZC4KCgkqIFttaXNjZW11L2ludDEwLmhdIFttaXNjZW11L2ludDI1LmhdIFttaXNjZW11L2ludDI2LmhdIAoJbmV3LCBhZGRlZCBmb3IgaW50IDEwLCAyNSBhbmQgMjYuCgoJKiBbbWlzY2VtdS9pb3BvcnRzLmNdCgluZXcsIGFkZGVkIHRvIGFsbG93IHdpbiBhcHBzIHRvIHVzZSBpb3BvcnRzLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGluLCBpbmIsIG91dCwgb3V0YiBpbnN0cnVjdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMjcgMTM6NDA6MjUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL21lbnUuYyAoSW5zZXJ0TWVudSk6IENoYW5nZWQgdG8gdXNlIEZpbmRNZW51SXRlbSgpLgoKU2F0IE1hciAyNiAyMToyMzo1NSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3dpbmRvd3MvbWRpLmNdCglXaW5kb3cgbGlzdCBwcm9wZXJseSB1cGRhdGVkLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQ2FsbCBXSU5QT1NfQ2hpbGRBY3RpdmF0ZSgpIHdoZW4gbW91c2UgcHJlc3NlZC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIFdJTlBPU19Jc0FuQWN0aXZlV2luZG93KCkgaW5zdGVhZCBvZiBHZXRBY3RpdmVXaW5kb3coKSBpbgoJTkNfSGFuZGxlTkNQYWludCgpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglDcmVhdGVkIGZ1bmN0aW9ucyBXSU5QT1NfSXNBbkFjdGl2ZVdpbmRvdygpIGFuZCBXSU5QT1NfQWN0aXZhdGVDaGlsZCgpCgpUaHUgTWFyIDI0IDE0OjQ5OjE3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKERlbGV0ZU1lbnUpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kTWVudUl0ZW0KCShEZWxldGVNZW51KTogTWFueSBidWcgZml4ZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ3JlYXRlZCBmdW5jdGlvbiBGaW5kTWVudUl0ZW0oKS4KClRodSBNYXIgMjQgMTQ6MTc6MjQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlZCBpbmNvcnJlY3QgTURJIGhhbmRsaW5nIGNvZGUgZnJvbSBDcmVhdGVXaW5kb3dFeCgpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1GX1NUUklORyBpdGVtcyBuZWVkZWQgdG8gYWxsb2NhdGUgYSBwcml2YXRlIGNvcHkgb2Ygc3RyaW5nLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIGJ1Z2d5IGNhbGxzIHRvIEdsb2JhbEZyZWUoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglFbGltaW5hdGVkIHNvbWUgcmVkdW5kYW50IGNvZGUgd2l0aCBmdW5jdGlvbiBjYWxsLgoKV2VkIE1hciAyMyAxOTk0IFBlbnR0aSBNb2lsYW5lbiAocGVudHRpLm1vaWxhbmVuQG50Yy5ub2tpYS5jb20pCgoJKiBbd2luZG93cy90aW1lci5jXQoJdGltZXIgbGlzdCBwb2ludGVycyBsb29wZWQgaW4gSW5zZXJ0VGltZXIKClR1ZSBNYXIgMjkgMTM6MzI6MDggTUVUIERTVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbWlzYy9jdXJzb3IuY10KCUEgZmV3IGNoYW5nZXMgZm9yIGRlc2t0b3Agd2luZG93IHN1cHBvcnQuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCAtZGVwdGggb3B0aW9uLgoKCSogW21pc2MvcmVjdC5jXQoJWWV0IGFub3RoZXIgYnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJQ2hhbmdlcyB0byB1c2Ugb25seSBvbmUgZGVwdGggKHNwZWNpZmllZCB3aXRoIC1kZXB0aCkKCWZvciBjb2xvciBiaXRtYXBzLgoKCSogW29iamVjdHMvYnJ1c2guY10KCUFkZGVkIHN1cHBvcnQgZm9yIGRpdGhlcmVkIHNvbGlkIGJydXNoZXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJVXNlIHRoZSBzYW1lIDIwIHN5c3RlbSBjb2xvcnMgYXMgaW4gV2luZG93cy4KCVN5c3RlbSBwYWxldHRlIGluaXRpYWxpc2F0aW9uIG5vdyBkb25lIGluIENPTE9SX0luaXRQYWxldHRlKCkuCglBZGRlZCBzdXBwb3J0IGZvciBhIGNvbG9yIG1hcHBpbmcgdGFibGUgdG8gbWFwIGxvZ2ljYWwgY29sb3IKCWluZGV4ZXMgdG8gWCBjb2xvcm1hcCBlbnRyaWVzLgoJSW1wbGVtZW50ZWQgR2V0TmVhcmVzdENvbG9yKCkgYW5kIFJlYWxpemVEZWZhdWx0UGFsZXR0ZSgpLgoKCSogW29iamVjdHMvZGliLmNdCglBZGRlZCBzdXBwb3J0IGZvciBjb2xvciBtYXBwaW5nIHRhYmxlLgoKCSogW29iamVjdHMvZGl0aGVyLmNdICAoTmV3IGZpbGUpCglJbXBsZW1lbnRlZCBzb2xpZCBjb2xvciBkaXRoZXJpbmcuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglJbXBsZW1lbnRlZCBHZXRTeXN0ZW1QYWxldHRlRW50cmllcygpIGFuZCBTZWxlY3RQYWxldHRlKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTWFrZSBhIGNvcHkgb2YgdGhlIG1lbnUgbmFtZSBpbiBSZWdpc3RlckNsYXNzKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJRml4ZWQgZGV2aWNlIGNhcHMgd2hlbiB1c2luZyBhIGRlc2t0b3Agd2luZG93LgoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbG9yIG1hcHBpbmcgdGFibGUgaW4gRENzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZGVkIENvbmZpZ3VyZU5vdGlmeSBoYW5kbGVyIG9uIGRlc2t0b3Agd2luZG93LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBjYWxsIHRvIFhUcmFuc2xhdGVDb29yZGluYXRlcygpIG9uIGV2ZXJ5IG1vdXNlIG1vdGlvbgoJTmV3IGZ1bmN0aW9uIE1TR19TeW5jaHJvbml6ZSgpIHRvIHN5bmNocm9uaXplIHdpdGggdGhlIFggc2VydmVyLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCVJld3JpdHRlbiBTWVNDT0xPUl9Jbml0KCkgdG8gcmVhZCB0aGUgc3lzdGVtIGNvbG9ycyBmcm9tIFdJTi5JTkkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHN5bmNocm9uaXphdGlvbiBvbiB3aW5kb3cgbWFwcGluZy4gU29sdmVzIHRoZSBkb3VibGUgcmVkcmF3Cglwcm9ibGVtIHdoZW4gc3RhcnRpbmcgU29saXRhaXJlLgoKTWFyIDI3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbC9tZW51LmNdCSogW3dpbmRvd3MvZGVmd25kLmNdCglNYWtlIGtleWJvYXJkIG5hdmlnYXRpb24gd29ya2luZyB3aXRoIG1lbnViYXIsCglidXQgdGVtcG9yYXJlbHkgaW5zZXJ0ZWQgYSBidWcgaW4gbWVudWJhciBtb3VzZSBoYW5kbGluZyAuLi4gOi0oKAoJKGl0IHdpbGwgYmUgZml4IG5leHQgd2VlayAhKQoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglDb25uZWN0IFZLX01FTlUgdG8gbWVudWJhciBuYXZpZ2F0aW9uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglHZXRNb2R1bGVIYW5kbGUoKSByZXR1cm4gJ2ZpY3RpdmUgMHhGMDAwKyBoYW5kbGVzJyBmb3IgYnVpbHQtaW4gRExMcy4KClN1biBNYXIgMjAgMjI6MzI6MTMgMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgQ29weSgpLiBBZGRlZCBhIGNoZWNrIGZvciBgLWgnIHRvIHNob3cgdXNhZ2UuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUZpeGVkIGJ1ZyBpbiBGaW5kRmlsZSgpLCB0byBsb2FkIGRpcmVjdG9yaWVzIGFzIGRsbHMuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUZpeGVkIFRvVW5peCgpIGFuZCBUb0RvcygpIGFnYWluLCBhcyBteSBwcmV2aW91cyBwYXRjaAoJZGlkbid0IG1ha2UgaXQuCgoJKiBbbWlzYy9kb3NfZnMuY10gW21pc2NlbXUvaW50MjEuY10KCUJ1ZyBmaXhlcywgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFsbCB3aW5maWxlIGFuZCBwcm9nbWFuIGludDIxCglyZXF1ZXN0cyBub3cgZXhjZXB0IGZvciBhIGZldyBzbWFsbCB0aGluZ3MuCgpUdWUgTWFyIDI5IDA2OjI1OjU0IDE5OTQgIGNyd0BoYXJyaXMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKCgkqIFttZW1vcnkvaGVhcC5jXQoJSW1wbGVtZW50ZWQgR2V0RnJlZVN5c3RlbVJlc291cmNlcygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWFyIDIxIDE3OjMyOjI1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKEdldFN1Yk1lbnUpOiBGdW5jdGlvbiBkaWQgbm90IHJldHVybiBjb3JyZWN0IHZhbHVlCgoJKiBbd2luZG93cy9tZGkuY10KCUJlZ2lubmluZ3Mgb2YgbWVudSBoYW5kbGluZy4KClRodSBNYXIgMTAgMTE6MzI6MDYgMTk5NCAgU3RlZmFuIChTQU0pIE11ZW56ZWwgIChtdWVuemVsQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCgkqIFtvYmplY3RzL2ZvbnQuY10KCWlmIGZvbnQud2lkdGggZXF1YWxzIHplcm8gdXNlIGFzdGVyaXggaW5zdGVhZC4KCk1vbiBNYXIgMjEgMTc6MjM6MzcgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJUmV3cml0dGVuIGJpdG1hcCBjb2RlIHRvIHVzZSBleGNsdXNpdmVseSBYIHBpeG1hcHM7ICptdWNoKiBmYXN0ZXIuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJU29tZSBjaGFuZ2VzIHdpdGggcGF0dGVybiBicnVzaGVzIGJlY2F1c2Ugb2YgdGhlIG5ldyBiaXRtYXAgY29kZS4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglBZGRlZCBmdW5jdGlvbiBDT0xPUl9Ub1BoeXNpY2FsIGZvciBiZXR0ZXIgY29sb3IgbWFwcGluZy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJSGVhdmlseSBvcHRpbWl6ZWQgU2V0RElCaXRzKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJT3BpbWl6ZWQgU2V0RENTdGF0ZSgpIGFuZCBEQ19TZXR1cEdDKigpIGZ1bmN0aW9ucy4KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZUlDKCkuCgpNYXIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21lc3NhZ2UuY10KCUNhbGwgU2V0Rm9jdXMoKSBhZnRlciBjbG9zaW5nIGJveCB0byBnaXZlIGJhY2sgZm9jdXMgdG8gcHJldmlvdXMgb3duZXIuCgoJKiBbbWlzYy9maWxlcy5jXQoJU21hbGwgYnVnIGZpeCBpbiBHZXRUZW1wRmlsZW5hbWUoKSA6IHJlcGxhY2UgYSAnXCcgdG8gJ1xcJy4KCgkqIFtjb250cm9sL3Njcm9sbC5jXQoJQ2FsbHMgdG8gQml0Qmx0KCkgcmVwbGFjZSBieSBTdHJldGNoQmx0KCkuCgoJKiBbY29udHJvbC9tZW51LmNdCglDYWxsIFNldEZvY3VzKCkgdG8gcHJldmlvdXMgb3duZXIgYWZ0ZXIgY2xvc2luZyBQb3B1cHMuCQoJRmlsbCBzdHViIERlbGV0ZU1lbnUoKS4KCgkqIFtjb250cm9sL2xpc3Rib3guY10KCSogW2NvbnRyb2wvY29tYm8uY10KCVVzZSBTZXRGb2N1cygpIGluIFdNX0xCVVRUT05ET1dOLgoJQ2xvc2UgQ29tYm9Cb3ggTGlzdCB1cG9uIFdNX0tJTExGT0NVUy4KCUVhcmx5IGRldmVsb3BtZW50IG9mIFdNX01FQVNVUkVJVEVNIG1lY2FuaXNtLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglFYXJseSBkZXZlbG9wbWVudCBvZiBXTV9NRUFTVVJFSVRFTSBtZWNhbmlzbS4KClR1ZSBNYXIgMjIgMTA6NDQ6NTcgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwpCgoJKiBbbWlzYy9hdG9tLmNdCglGaXhlZCBzaW50YXhpcyBwcm9ibGVtIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgMTUgMTM6MTE6NTYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG1lc3NhZ2UgdHlwZXMgYW5kIHN0cnVjdHVyZXMgZm9yIE1ESQoKCSogW2luY2x1ZGUvbWRpLmhdCglDcmVhdGVkIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIE1ESQoKCSogW3dpbmRvd3MvbWRpLmNdCglCZWdhbiBjcmVhdGluZyBNREkgc3VwcG9ydAoKVGh1IE1hciAxMCAxNjo1MTo0NiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2xvYWRlci93aW5lLmNdIFtpbmNsdWRlL3dpbmUuaF0KCUFkZGVkIG5ldyBmaWVsZCB0byAic3RydWN0IHdfZmlsZXMiIHRvIGhvbGQgdGhlICJuYW1lIHRhYmxlIgoJcmVzb3VyY2UgZm9yIFdpbmRvd3MgMy4wIHByb2dyYW1zCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBZGRlZCBjb2RlIHRvIGhhbmRsZSBwcm9ncmFtcyB3aXRoIGEgIm5hbWUgdGFibGUiIHJlc291cmNlLgoJTG9hZFJlc291cmNlQnlOYW1lKCkgbW9kaWZpZWQgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YKCXRoaXMgcmVzb3VyY2UuCgpNb24gTWFyIDE0IDIyOjMxOjQyIE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQWRkZWQgaW5zdGFsbGluZyB0aGUgcHJpdmF0ZSBjb2xvcm1hcCBvbiB0aGUgZGVza3RvcCB3aW5kb3cuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ2xlYW5lZCB1cCBmb2N1cyBldmVudCBoYW5kbGluZyAoc2VlIGZvY3VzLmMpLgoJVXNlIEdldEZvY3VzKCkgdG8gZGlyZWN0IGtleSBldmVudHMgdG8gdGhlIGNvcnJlY3Qgd2luZG93LgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCVJld3JpdHRlbiBTZXRGb2N1cygpIHRvOgoJLSBvbmx5IHNldCBYIGZvY3VzIG9uIHRvcC1sZXZlbCB3aW5kb3dzCgktIHNlbmQgV01fU0VURk9DVVMgYW5kIFdNX0tJTExGT0NVUyBtZXNzYWdlcyAod2FzIGRvbmUgaW4gZXZlbnQuYykKCS0gcHJldmVudCBzZXR0aW5nIGZvY3VzIHRvIGRpc2FibGVkIHdpbmRvd3MKCS0gaW5zdGFsbCBwcml2YXRlIGNvbG9ybWFwIHNvIC1wcml2YXRlbWFwIG9wdGlvbiB3b3JrcyBhZ2FpbgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy90aW1lci5jXQoJQ2hhbmdlZCB0aW1lciBtYW5hZ2VtZW50IHRvIG5vIGxvbmdlciB1c2UgUG9zdE1lc3NhZ2UoKSwgYnV0Cgl0byBnZW5lcmF0ZSB0aW1lciBtZXNzYWdlcyBvbiB0aGUgZmx5LiBBbHNvIGZpeGVkIGEgcmVsYXRlZCBidWcKCWluIEdldE1lc3NhZ2UoKSB3aGljaCBjb3VsZCBjYXVzZSBidXN5LXdhaXRpbmcuCgoJKiBbd2luZG93cy93aW4uY10KCU9ubHkgc2VsZWN0IGZvY3VzIGV2ZW50cyBvbiB0b3AtbGV2ZWwgd2luZG93cy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc29tZSBzYW5pdHkgY2hlY2tzIGZvciBkZXNrdG9wIHdpbmRvdy4KCkZyaSBNYXIgIDQgMjA6NDI6MDEgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL2Rvc19mcy5jXQoJYnVnIGZpeGVzIGluIFRvVW5peCgpLCBXaW5JbmlGaWxlTmFtZSgpLCBHZXRVbml4RmlsZU5hbWUoKS4gCglTdXBwb3J0IGZvciB0aWxkZSBzeW1ib2wgYWRkZWQgZm9yIHJvb3RkaXJlY3RvcmllcyBpbiBbZHJpdmVzXQoJc2VjdGlvbiBvZiB3aW5lJ3MgY29uZmlnZmlsZS4KCgkqIFttaXNjL2ZpbGUuY10KCWhyZWFkKCksIGh3cml0ZSgpIGFkZGVkLgoKCSogW21pc2MvbWFpbi5jXQoJaG1lbWNweSgpIGFkZGVkLgoKCSogW2lmMTYzMi9zdHJlc3Muc3BlY10gW2luY2x1ZGUvc3RyZXNzLmhdIFttaXNjL3N0cmVzcy5jXQoJQWRkZWQgU1RSRVNTLkRMTCwgYW4gdXNlbGVzcyBkbGwgdXNlZCB0byBzdHJlc3MgYSB3aW5kb3dzIHN5c3RlbS4KCgkqIFsqLypdCglBZGRlZCBtaXNzaW5nICNpbmNsdWRlcywgZml4ZWQgcHJvdG90eXBlcyBmb3IgcHJvdG90eXBlIGNoZWNraW5nLgoKCSogW2luY2x1ZGUvcHJvdG90eXBlcy5oXQoKCUFkZGVkIHByb3RvdHlwZXMgZm9yIGxvYWRlci8qYywgaWYxNjMyLypjLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWFyICA4IDA5OjU0OjM0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbQ29uZmlndXJlXQoJQWRkZWQgcmVtaW5kZXIgdG8gc2V0IFdJTkVQQVRILCBpZiBpdCBpcyBub3Qgc2V0LgoKCSogW0ltYWtlZmlsZV0KCVJlbW92ZWQgI2VsaWYncwoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQWRkZWQgQk5fQ0xJQ0tFRCBub3RpZmljYXRpb24gZm9yIG93bmVyLWRyYXcgYnV0dG9ucy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFttZW1vcnkvaGVhcC5jXQoJQ2hhbmdlZCBMb2NhbCogZnVuY3Rpb25zIHRvIFdJTjE2X0xvY2FsKiB0byBwcmV2ZW50IHVuY29uY2lvdXMgdXNlCglvZiB0aGVzZSBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglQdXNoIG9sZCBTdGFjazE2RnJhbWUgb24gc3RhY2sgYmVmb3JlIHNldHRpbmcuCgoJKiBbaW5jbHVkZS9hdG9tLmhdIFttaXNjL2F0b20uY10gW2luY2x1ZGUvaGVhcC5oXSBbbWVtb3J5L2xvY2FsLmNdCglBZGRlZCBtdWx0aXBsZSBsb2NhbCBoZWFwIGhhbmRsaW5nIGluIEF0b20qIGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3JlZ2Z1bmMuaF0gW21pc2NlbXUvaW50MjEuY10KCVJld3JvdGUgRE9TM0NhbGwoKSB1c2UgY29udGV4dCBmcmFtZSB0aGF0IGlzIGFscmVhZHkgb24gdGhlIHN0YWNrLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJRml4ZWQgdG8gYWxsb3cgbGVhZGluZyAiOyIgdG8gbWFyayBjb21tZW50cy4KCgkqIFttaXNjL3NweS5jXQoJRml4ZWQgYnVncyBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgImluY2x1ZGUiIGFuZCAiZXhjbHVkZSIgZmlsdGVycy4KCgkqIFttaXNjL3VzZXIuY10KCVJlYXJyYW5nZWQgY2FsbHMgaW4gSW5pdEFwcCgpLgoKCSogW21pc2MvZm9udC5jXQoJRml4ZWQgZm9udCBoYW5kbGluZyB0byBjcmVhdGUgc3lzdGVtIGZvbnRzLCBpZiB0aGV5IGFyZSB1c2VkLgoKCSogW3dpbmRvd3MvZGMuY10KCUlmIHRleHQgZHJhd24gb24gd2luZG93IHdpdGggbm8gZm9udCBzcGVjaWZpZWQsIHRoZW4gZGVmYXVsdCB0aGUKCWZvbnQgdG8gdGhlIHN5c3RlbSBmb250LgoKTW9uIE1hciAgNyAyMDozMjowOSBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX05DQ1JFQVRFIGFuZCBXTV9FUkFTRUJLR05EIGZ1bmN0aW9ucy4KCUltcGxlbWVudGVkIFNldERlc2tQYXR0ZXJuKCkuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCAtZGVza3RvcCBvcHRpb24gdG8gZ2V0IGEgbGFyZ2UgZGVza3RvcCB3aW5kb3cgd2l0aAoJZXZlcnl0aGluZyBpbnNpZGUgaXQuCglBZGRlZCAtbmFtZSBvcHRpb24uCgoJKiBbbWlzYy9yZWN0LmNdCglCdWcgZml4IGluIFN1YnRyYWN0UmVjdCgpLgoKCSogW29iamVjdHMvKi5jXQoJUmVwbGFjZWQgdGhlIERlZmF1bHRSb290V2luZG93KCkgbWFjcm8gYnkgdGhlIHJvb3RXaW5kb3cgdmFyaWFibGUuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10KCUEgZmV3IGNoYW5nZXMgdG8gYWNjb21vZGF0ZSB0aGUgbmV3IGRlc2t0b3Agd2luZG93LgoKIFR1ZSBNYXIgIDggMTE6MTM6MDMgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwubnVjbGVjdS51bmFtLm14KQogCiAJKiBbdG9vbGtpdC9hcmNoLmNdIC0tTmV3IGZpbGUtLSAKIAlSb3V0aW5lcyBmb3IgY29udmVydGluZyBsaXR0bGUgZW5kaWFuIGRhdGEgc3RydWN0dXJlcyB0bwogCWJpZy1lbmRpYW4gZGF0YSBzdHJ1Y3R1cmVzLCBjdXJyZW50bHkgb25seSBCSVRNQVAgc3RydWN0dXJlcyBhcmUgCiAJY29udmVydGVkLgogCiAJKiBbbWlzYy9hdG9tLmNdCiAJV2hlbiB1c2VkIGFzIHBhcnQgb2YgdGhlIFdpbmVMaWIsIHRoZSBjb2RlIGlzIG11Y2ggc2ltcGxlci4KIAlEb2Vzbid0IGRlcGVuZCBvbiBhbGlnbmVtZW50LgogCiAJKiBbbG9hZGVyL3dpbmUuY10KIAlJZmRlZmVkIEVtdWxhdG9yIGRlcGVuZGVudCBjb2RlIGlmIGNvbXBpbGluZyBXaW5lTGliLgogCiAJKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAJTW92ZWQgbWlzYy9yZXNvdXJjZS5jIHRvIGxvYWRlci9yZXNvdXJjZS5jLgogCiAJKiBbbG9hZGVyL2R1bXAuYyxsZHQuYyxsZHRsaWIuYyxsaWJyYXJ5LGMsc2VsZWN0b3IuYyxzaWduYWwuY10KIAlJZmRlZmVkIHdob2xlIGNvZGUgaWYgY29tcGlsaW5nIFdJTkVMSUIuCiAKIAkqIFtpbmNsdWRlL3dpbnNvY2suaF0KIAlBZGRlZCBjb21waWxhdGlvbiBkZWZpbmUgdG8gYWxsb3cgY29tcGlsYXRpb24gb24gU3VuT1MuCiAKIAkqIFtpbmNsdWRlL3dpbmUuaF0KIAlSZW1vdmVkIGxvYWRfdHlwZWluZm8gYW5kIGxvYWRfbmFtZWluZm8gcHJvdG90eXBlcywgdGhleSBiZWxvbmcKIAl0byBuZWV4ZS5oCiAKIAkqIFtpbmNsdWRlL25lZXhlLmhdCiAJQWRkZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyBwcm90b3R5cGVzLgogCiAJKiBbaW5jbHVkZS9hcmNoLmhdCiAJRml4ZWQgc29tZSBidWdzIGluIHRoZSBjb252ZXJzaW9uIHJvdXRpbmVzLgogCUFkZGVkIG1hY3JvcyBmb3IgQml0bWFwIGxvYWRpbmcuCgpUdWUgTWFyICA4IDEyOjUyOjA1IDE5OTQgIGNyd0BtYW5pYWMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKIAkKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIEdldEZyZWVTcGFjZSgpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW2xvYWRlci9yZXNvdXJjZS5jXQoJSW1wbGVtZW50ZWQgQ3JlYXRlSWNvbigpCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgIDEgMTE6MzA6MjEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtDb25maWd1cmVdIFsqL0ltYWtlZmlsZV0KCUNyZWF0ZWQgY29uZmlndXJlIHNjcmlwdCB0byBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFdpbmUgYnVpbGRzLgoKCSogW0NvbmZpZ3VyZV0gW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvSW1ha2VmaWxlXSBbV2luZS50bXBsXQoJQWRkZWQgYWJpbGl0eSB0byBjb21waWxlIFdpbmUgb24gc3lzdGVtcyB3aXRoIDE0LWNoYXIgZmlsZW5hbWUgbGltaXQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXQoJQWRkZWQgLXJlbGF5ZGJnIG9wdGlvbiB0byBjb21tYW5kIGxpbmUgaWYgREVCVUdfUkVMQVkgaXMgZGVmaW5lZC4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUZpeGVkIGJ1ZyBpbiBHZXRFbnRyeURMTE5hbWUoKSB0aGF0IGNhdXNlZCBXaW5lIHRvIHNlZyBmYXVsdC4KCgkqIFttZW1vcnkvaGVhcC5jXQoJRml4ZWQgTG9jYWxJbml0KCkgdG8gd29yayBjb3JyZWN0bHkuCgoJKiBbbWlzYy91c2VyLmNdCglBZGRlZCBjb2RlIHRvIGNhbGwgbG9hZGVkIERMTHMnIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgoKVHVlIE1hciAgMSAwMTowMToxNyBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvZGNlLmNdCglBZGRlZCBjbGlwcGluZyBvZiBjaGlsZCB3aW5kb3dzIGJ5IHRoZWlyIHBhcmVudCdzIGNsaWVudCBhcmVhLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdWcgZml4IGluIE5DX0RvTkNQYWludCgpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gUmVkcmF3V2luZG93KCkuCgpGZWIgMjcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW0vYXRvbS5jXQoJQnVnIGZpeCBhZ2FpbiBpbiBBVE9NX0RlbGV0ZUF0b20oKSA6IAoJCWNoYW5nZSBMb2NhbEZyZWUoKSBieSBVU0VSX0hFQVBfRlJFRSgpLgoJKFByZXZpb3VzIHBhdGNoIGRvbmUgRmViIDEzdGggaGFkIGJlZW4gbG9zdCkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU1vdmUgYml0bWFwcyBsb2FkaW5nIGluIEFsbG9jU2Nyb2xsQmFyKCkgaW5zdGVhZCBvZiBpbiBXTV9DUkVBVEUuCgoJKiBbd2luZG93cy9jbGFzcy5jXSAoc29ycnkgQWxleCAuLi4pCglUaGVyZSB3YXMgbm8gYnVnIHRoZXJlICJpbiBSZWdpc3RlckNsYXNzKCkgOiAKICAgICAgICAgICAgICAgIFdORENMQVNTLT5scHN6Q2xhc3NOYW1lIHdhcyByZXNldCB0byBOVUxMLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl4KCgkqIFttaXNjL2NsaXBib2FyZC5jXQktLS0gTmV3IEZpbGUgLS0tCglOZXcgZnVuY3Rpb24gRW51bUNsaXBib2FyZEZvcm1hdHMoKS4KCU5ldyBmdW5jdGlvbiBPcGVuQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gQ2xvc2VDbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBFbXB0eUNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZE93bmVyKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkVmlld2VyKCkuCglOZXcgZnVuY3Rpb24gQ291bnRDbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoKS4KCU5ldyBmdW5jdGlvbiBPcGVuQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkRGF0YSgpLgoJTmV3IGZ1bmN0aW9uIFNldENsaXBib2FyZFZpZXdlcigpLgoJTmV3IGZ1bmN0aW9uIEVudW1DbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoKS4KCU5ldyBmdW5jdGlvbiBDaGFuZ2VDbGlwYm9hcmRDaGFpbigpLgoJTmV3IGZ1bmN0aW9uIFNldENsaXBib2FyZERhdGEoKS4KCU5ldyBmdW5jdGlvbiBHZXRPcGVuQ2xpcGJvYXJkV2luZG93KCkuCglOZXcgZnVuY3Rpb24gR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmRGb3JtYXROYW1lKCkuCgpUdWUgTWFyICAxIDIwOjE1OjQ1IDE5OTQgIEVyaWsgQm9zIDxlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmw+CgoJKiBbbWlzYy9jb21tLmNdCglidWdmaXggaW4gT3BlbkNvbW0oKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEZlYiAyMiAxODowNDowMiAxOTk0ICBKZWZmcmV5IEhzdSA8aHN1QGZyZWVmYWxsLmNkcm9tLmNvbT4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCVRoZSBzb2NrcHJvdG8gc3RydWN0IGlzIGFscmVhZHkgZGVmaW5lZCBpbiA8c3lzL3NvY2tldC5oPgoKCSogW21pc2Mvd2luc29jay5jXQoJTmVlZCB0byBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBzdHJ1Y3QgaW4tYWRkci4KCVVzZSBzeXNfZXJybGlzdFtdIGluc3RlYWQgb2Ygc3RyZXJyb3JbXS4KCgkqW3Rvb2xraXQvaGVhcC5jXQoJQU5TSSBDIHNwZWNpZmllcyB0aGF0IHRoZSBtYWxsb2MgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHN0ZGxpYi5oLAoJICBzbyB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgbWFsbG9jLmguCgoJKltsb2FkZXIvbGR0bGliLmNdCglQcmludCBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGFib3V0IHByb2JhYmxlIGNhdXNlIG9mIGkzODZfc2V0X2xkdCgpCgkgIGZhaWx1cmUgYW5kIHRoZW4gZXhpdC4KCgkqW0ltYWtlZmlsZV0KCUZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgdXNlIGdtYWtlIGJ5IGRlZmF1bHQsIHNldCB0aGUgTUFLRSB2YXJpYWJsZQoJICB0byBnbWFrZSBhbmQgcHJvcGFnYXRlIGl0IG9uIHJlY3Vyc2l2ZSBtYWtlcy4KCVRha2Ugb3V0IC1saTM4NiBmb3IgRnJlZUJTRCBzeXN0ZW1zIGFuZCBkZWZpbmUgX19GcmVlQlNEX18gc28gV2luZQoJICBjYW4gYmUgYnVpbHQgd2l0aCB0aGUgRnJlZUJTRCAxLjAuMiBjb21waWxlci4KClR1ZSBGZWIgMjIgMDI6NTI6MTkgRVNUIDE5OTQgICAganJpY2hhcmRAY3MudW1sLmVkdSAoSm9obiBSaWNoYXJkc29uKQoKICAgICAgICAqIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgIEFkZGVkIGluIHRocmVlIGZ1bmN0aW9ucyB0byBkbyBzdHJldGNoaW5nIGFuZCBjb21wcmVzc2lvbgogICAgICAgIGZvciBXSElURU9OQkxBQ0ssIEJMQUNLT05XSElURSwgYW5kIGNvbG9yIGNvcGllcy4KClR1ZSBGZWIgMjIgMTU6MDE6MzEgRVNUIDE5OTQgICAganJpY2hhcmRAY3MudW1sLmVkdSAoSm9obiBSaWNoYXJkc29uKQoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgQWRkZWQgRmxvb2RGaWxsIGFuZCBGbG9vZEZpbGxfcmVjLiAgRmxvb2RGaWxsX3JlYyBpcyBwcmV0dHkKICAgICAgICBpbmVmZmljZW50LCBidXQgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KCiAgICAgICAgKiBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgQ2hhbmdlZCB0aGUgeCx5IHBhcmFtYXRlcnMgZm9yIHRoZSBGbG9vZEZpbGwgcHJvdG90eXBlIAogICAgICAgIGZyb20gaW50cyB0byBzaG9ydHMKClR1ZSBGZWIgMjIgMDA6NTg6MjggTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL3dpZGdldHMuY10KCUFkZGVkIGRlc2t0b3Agd2luZG93IGNsYXNzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gUmVkcmF3V2luZG93KCkuCglJbXBsZW1lbnRlZCBFeGNsdWRlVXBkYXRlUmduKCkuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBkZXNrdG9wIHdpbmRvdy4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglQcmVsaW1pbmFyeSBkZXNrdG9wIHdpbmRvdyBwcm9jZWR1cmUuCgpGZWIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb24gTG9hZE1lbnVJbmRpcmVjdCgpLgoJTmV3IGZ1bmN0aW9uIEdldE1lbnVDaGVja01hcmtEaW1lbnNpb25zKCkuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUVudHJ5IGZvciBEZWZEbGdQcm9jKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJRml4IGJ1ZyBpbiBSZWdpc3RlckNsYXNzKCkgOiAKCQlXTkRDTEFTUy0+bHBzek1lbnVOYW1lIHdhcyByZXNldCB0byBOVUxMLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbiBDcmVhdGVXaW5kb3dFeCgpLCBpZiBoTWVudSA9PSAwIHRoZW4gdXNlIAoJCXduZGNsYXNzLT5scHN6TWVudU5hbWUgdG8gbG9hZCBNZW51IGZyb20gcmVzb3VyY2U7CgpNb24gRmViIDIxIDIyOjM4OjI4IDE5OTQgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL3dpbmUuY10KCUZpeGVkIHJ1bmluZyBETEwncyBhcyBtYWluIGV4ZWN1dGFibGUgcHJvYmxlbS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQWRkZWQgd2lsZGNhcmQgc3VwcG9ydCBpbiBET1NfcmVhZGRpcigpLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgb2YgQlNEIHdpbnNvY2tldCBmdW5jdGlvbnMuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJS0VSTkVMX0RPUzNDYWxsIHJlbmFtZWQgdG8gRE9TM0NhbGwgYW5kIG1vZGlmaWVkIHRvIHVzZSBkb19pbnQyMSgpLgoKCSogW21haW4vbWFpbi5jXQoJQWRkZWQgZnVuY3Rpb25zIGZvciBHZXRWZXJzaW9uLCBHZXRXaW5GbGFncyBhbmQgR2V0VGltZXJSZXNvbHV0aW9uCglmb3IgbGlid2luZS5hLCBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIHBhcnRseSBpbXBsZW1lbnRlZC4KClR1ZSBGZWIgMjIgMTk6MDA6MDIgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwubnVjbGVjdS51bmFtLm14KQoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJQWRkZWQgX1dpbk1haW4gZnVuY3Rpb24uIFNldHVwcyB0aGUgbGlicmFyeSAoY2FsbHMgVVNFUl9Jbml0QXBwKS4KCgkqIFt0b29sa2l0L3N1cC5jXQoJQWRkZWQgbG9hZF9tel9oZWFkZXIsIGxvYWRfbmVfaGVhZGVyLCBsb2FkX3R5cGVfaW5mbyBhbmQKCWxvYWRfbmFtZV9pbmZvIGZ1bmN0aW9ucy4KCgkqIFt0b29sa2l0L2hlYXAuY10gCglDb2RlIGNsZWFudXAuIAoKCSogW21pc2MvdXNlci5jXQoJTW92ZWQgZnJvbSBsb2FkZXIvbWlzYy5jLiBJIGhvcGUgdG8gcHV0IGJhY2sgYWxsIHRoZSBsb2FkZXIKCWZ1bmN0aW9ucyBpbiB0aGUgfmxvYWRlciBzdWJkaXJlY3RvcnkgaW4gdGhlIGZ1dHVyZS4gQ1VycmVudGx5IGlzCgluZWVkZWQgc2luY2UgaXQgaGFzIFVTRVJfSW5pdEFwcC4KCgkqIFttaXNjL3Jlc291cmNlLmNdCglTaW5jZSBXaW5lTGliIHdpbGwgcHJvYmFibHkgbmVlZCBETExzIChjdXJyZW50bHkgaXQgbmVlZHMKCVN5c3Jlcy5kbGwpLiBXaW5lTGliIHdpbGwgYmUgdXNpbmcgbXVjaCBjb2RlIG9mIHRoZSBsb2FkZXIgYWdhaW4uCglTbyBJIHJlbW92ZWQgc29tZSBpZmRlZnMgdGhhdCB3ZXJlIHVzZWQgYnkgV2luZUxpYi4KCglBZGRlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcKCWZ1bmN0aW9ucyBpbiBbdG9vbGtpdC9zdXAuY10KCglBZGRlZCBpbnRlZ2VyIGNvbnZlcnRpb24gZnVuY3Rpb25zIGluIHRoZSBuZWVkZWQgcGxhY2VzLgoKCUFkZGVkIHZlcnkgdWdseSBwYXRjaCAoaW5jbHVkZXMgd2luZS5jKS4gSW4gdGhlIG5leHQgcmVsZWFzZSBJCglwbGFuIHRvIG1vdmUgYmFjayBhbGwgdGhlIGxvYWRlciByb3V0aW5lcyB0byB+L2xvYWRlci4gSW4gdGhlCgltZWFudGltZSBJIG5lZWRlZCB0aGlzIHBhdGNoLiBJdCBkb2Vzbid0IGFmZmVjdCBhbnkgb2YgdGhlCgllbXVsYXRvciBjb2RlIChpdHMgaWZkZWZlZCBmb3IgV2luZUxpYikuCgoJKiBbbWlzYy9tYWluLmNdCglDbGVhbmVkIHVwIGNhbGwgdG8gV2luTWFpbiAobm93IHVzZXMgW3Rvb2xraXQvd2lubWFpbi5jXQoJSWZkZWZlZCBhcmd1bWVudCBudW1iZXIgY2hlY2tpbmcgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkuCgoJKiBbbG9hZGVyL3dpbmUuY10KCU1vZGlmaWVkIHRvIHVzZSBsb2FkXyhtenxuZSlfaGVhZGVyIGluc3RlYWQgb2YgZG9pbmcgYSBkaXJlY3QKCXJlYWQuICBXaGVuIGNvbXBpbGluZyB0aGUgZW11bGF0b3IgaXQgc3RpbGwgdXNlcyB0aGUgZGlyZWN0IHJlYWQKCWZvciBwZXJmb3JtYW5jZS4gCgoJKiBbaW5jbHVkZS93aW5lLmhdCglQcm90b3R5cGVzIGZvciBsb2FkaW5nIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvY2xhc3MuaF0KCUFkZGVkIFdJTkVfUEFDS0VEIG1hY3JvIGluc3RlYWQgb2YgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCgoJKiBbaW5jbHVkZS9hcmNoLmhdCglNYWNyb3MgZm9yIGNvbnZlcnRpbmcgaW50ZWdlcnMgKExpdHRsZSBlbmRpYW4gdG8gYmlnLWVuZGlhbikuCglOZWVkZWQgaW4gdGhlIFN1biB0byBhbGxvdyBsb2FkaW5nIG9mIERMTCBmaWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEZlYiAxNCAyMzo0ODowOSBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCU1vdmVkIGV2ZXJ5dGhpbmcgaW50byB3aW5kb3dzL3BhaW50aW5nLmMgYW5kIHJlbW92ZWQgdGhpcyBmaWxlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBjYWxscyB0byBtZW1tb3ZlKCkgaW4gTVNHX1JlbW92ZU1zZygpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCBXTV9HRVRNSU5NQVhJTkZPIHN1cHBvcnQgZm9yIHdpbmRvdyByZXNpemluZy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBSZWRyYXdXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJQnVnIGZpeCBpbiBTY3JvbGxXaW5kb3dFeCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglNb3ZlZCBVcGRhdGVXaW5kb3coKSB0byB3aW5kb3dzL3BhaW50aW5nLmMuCgpGcmkgRmViIDExIDEyOjQxOjI4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgkKCSogW2xvYWRlci93aW5lLmNdIFttaXNjL2Rvc19mcy5jXQoJZ2V0ZW52KCkgZXEgTlVMTCBidWdmaXhlcy4KCgkqIFttaXNjL2NvbW0uY10KCWNmbWFrZXJhdyBjaGFuZ2VkIGZvciBTdW5PUy4KCkZlYiAxMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21lbS9hdG9tLmNdCglCdWcgZml4IGluIEFUT01fRGVsZXRlQXRvbSgpIDogCgkJY2hhbmdlIExvY2FsRnJlZSgpIGJ5IFVTRVJfSEVBUF9GUkVFKCkuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gRmF0YWxBcHBFeGl0KCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgZW1wdHkgc3R1YiBTZXRNYXBwZXJGbGFncygpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUJldHRlciBDaGVja01hcmsgJiBvdGhlciBiaXRtYXBzIHBsYWNlbWVudC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglOZXcgZnVuY3Rpb24gUm91bmRSZWN0KCkgOiBjYWxjLmV4ZSBub3cgd29ya2luZy4uLgoKVHVlIEZlYiAxNSAxNDoyOTozNyAxOTk0ICBKb2huIFJpY2hhcmRzb24KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBGaXhlZCBTdHJldGNoQmx0IHNvIGl0IHdvcmtzIHF1aWNrZXIgYW5kIGZhc3Rlci4gIEl0IHN0aWxsIGRvZXNuJ3QKICAgICAgICB1c2UgdGhlIFN0cmV0Y2hNb2RlIGJpdHMgZm9yIGJpdG1hcCBjb21wcmVzc2lvbiwgYnV0IHRoYXQgd2lsbAogICAgICAgIGNvbWUgc29vbi4KCk1vbiBGZWIgMTQgMTM6MjE6MDQgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQoKCSogW2luY2x1ZGUvd2luZG93cy5oLGRpYWxvZy5oLGdkaS5oXQoJQ2hhbmdlZCBfX2F0cmlidXRlX18gKChwYWNrZWQpKSBmb3IgV0lORV9QQUNLRUQuIAoJV2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkgdGhpcyBpcyBkZWZpbmVkIGFzIG5vdGhpbmcuIFRoaXMgZ2V0cwoJcmlkIHdpdGggYWxsIHRoZSBwcm9ibGVtcyBjb21waWxpbmcgdW5kZXIgU3VuT1MuIEFsc28gCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglBZGRlZCBEZWJ1Z1ByaW50U3RyaW5nLgoKCSogW3Rvb2xraXQvc3VwLmNdCglBZGRlZCBoU3lzUmVzID0gMSBkZWZpbml0aW9uIHRvIHJlc29sdmUgZXh0ZXJuYWxzLgoJQWRkZWQgQ2FsbExpbmVEREFQcm9jIGZ1bmN0aW9uICh0b29sa2l0IHZlcnNpb24pLgoJQWRkZWQgdG95LCBhbmQgaGkgaW5lZmljaWVudCBtZW1tb3ZlIHVudGlsIGNvZGUgaW4gbWVzc2FnZS5jIGdldAoJcmV3cml0dGVuLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglJZmRlZmVkIGxpbnV4L2VtdWxhdG9yLWRlcGVuZGVudCBjb2RlIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9mCglXaW5lTGliLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBpZmRlZiB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUy4KCgkqIFttaXNjL3Jlc291cmNlLmNdCglXaGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeSwgdGhlIHJlc291cmNlIGZpbGUgaXMgZXhwZWN0ZWQgdG8gYmUgaW4KCWEgZmlsZSBjYWxsZWQgJGFyZ3ZbMF0uUmVzLiBBbHNvIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgcmVzb3VyY2UKCWlzIGV4cGVjdGVkIHRvIGJlIGF0IG9mZnNldCAwIG9mIHRoZSAuUmVzIGZpbGUuCgoJKiBbbWlzYy9tYWluLmNdCglDYWxsIFdpbk1haW4gd2l0aCBhcmd1bWVudHMgaWYgY29tcGlsaW5nIFdpbmVMaWIuCglDYWxsIHNodXRkb3duIGZ1bmN0aW9ucyAoQ29tbV9EZUluaXQsIERPU19EZUluaXRGUykuCglDYWxsIHN5bmNfcHJvZmlsZXMgdG8gcHJlc2VydmUgY2hhbmdlcyB0byAuSU5JIGZpbGVzLgoKCSogW21pc2MvY29tbS5jLGRvc19mcy5jXQoJcmVtb3ZlZCBjYWxsIHRvIGF0ZXhpdChDb21tX0RlSW5pdCkKCXJlbW92ZWQgY2FsbCB0byBhdGV4aXQoRE9TX0RlSW5pdEZTKQoJU2h1dGRvd24gZnVuY3Rpb25zIGFyZSBub3cgY2FsbGVkIGZyb20gdGhlIHJldHVybiBvZiBXaW5NYWluCgoJKiByZW1vdmVkIG1lbW9yeWxpYiBzdWJkaXJlY3RvcnkKCgkqIG1vdmVkIG1lbW9yeS9hdG9tLmMgICAgdG8gbWlzYy9hdG9tLmMKCSAgbW92ZWQgbWVtb3J5bGliL2hlYXAuYyB0byB0b29sa2l0L2hlYXAuYwoKCSogW2xvYWRlci93aW5lLmNdCglNb3ZlZCBEZWJ1Z1ByaW50U3RyaW5nIHRvIHdpbmRvd3MvdXRpbGl0eS5jCgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglEZWZpbmUgU09fRE9OVExJTkdFUiBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRlZmluZWQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglhZGRlZCBkZWZpbml0aW9uIGZvciBETEdQUk9DLgoJYWRkZWQgZGVmaW5pdGlvbiBmb3IgTE1FTV9XSU5FX0FMSUdOIGFuZCBvdGhlciBMTUVNXyogY29uc3RhbnRzLgoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBXTkRQUk9DIGlzIGRlZmluZWQgd2l0aCBhbGwgdGhlIHBhcmFtZXRlcnMKCXRvIGF2b2lkIGNvbXBpbGF0aW9uIHByb2JsZW1zLgoKCSogW2luY2x1ZGUvdXNlci5oXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBVU0VSX0hFQVBfKEFMTE9DfFJFQUxMT0N8QUREUnxGUkVFKSB0aGUKCWNhbGxzIGFyZSB0cmFuc2xhdGVkIHRvIHRoZSBsaWJyYXJ5IGFsbG9jYXRpb24gcm91dGluZXMuCgoJKiBbaW5jbHVkZS9nZGkuaCx1c2VyLmhdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliIEdESV9IRUFQXyhBTExPQ3xBRERSfEZSRUUpIHRoZSBjYWxscyBhcmUKCXRyYW5zbGF0ZWQgdG8gdGhlIGxpYnJhcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2F0b20uaF0KCURlZmluZWQgTG9jYWxBbGlnbi4gV2hlbiBjb21waWxpbmcgdGhlIGVtdWxhdG9yIGl0J3MgdHJhbnNsYXRlZCBhcwoJYSBjYWxsIHRvIExvY2FsQWxsb2MgKHRoZSBvcmlnaW5hbCBjb2RlKSwgd2hlbiBjb21waWxpbmcgV2luZUxpYgoJYXMgYSBjYWxsIHRvIExvY2FsQWxsb2Mgd2l0aCBhIFdJTkUtZmxhZyBjYWxsZWQgTE1FTV9XSU5FX0FMSUdOCgkoYXRvbS5jIG5lZWRzIGFsaWduZWQgZGF0YSBvbiBhIDQgYnl0ZSBib3VuZGFyeSkuCgoJKiBbbWlzYy9maWxlLmNdCglSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBhbmQgZml4ZWQgcHJvdG90eXBlcy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucwoJdXNpbmcgV2luZSBhcyBhIGxpYnJhcnkgKE9wZUZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xjcmVhdGUsCglfbGxzZWVrLCBfbG9wZW4sIF9sd3JpdGUpLgoKCSogW01ha2VmaWxlXQoJQ3JlYXRlIGxpYnJhcnkgaW5zdGVhZCBvZiBleGVjdXRhYmxlIHdoZW4gYnVpbGRpbmcgdGFyZ2V0CglsaWJ3aW5lLmEgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgIDggMTM6NTI6MTEgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUpCgoJKiBbTWFrZWZpbGVzXQoJVXNlICQoQ0MpIGluc3RlYWQgb2YgY2MuCglBZGRlZCBsaWJ3aW5lIHRhcmdldC4KCgkqIFtpbmNsdWRlL3Byb3RvdHlwZXNdCgkjaWZkZWZlZCBzZWN0aW9uIGZvciBXaW5lTGliCgoJKiBtb3ZlZCBsb2FkZXIvY3Vyc29yLmMgICB0byBtaXNjL2N1cnNvci5jCgkgIG1vdmVkIGxvYWRlci9yZXNvdXJjZS5jIHRvIG1pc2MvcmVzb3VyY2UuYwoJICBtb3ZlZCBtaXNjL2VtdWxhdGUuYyAgICB0byBtaXNjZW11L2VtdWxhdGUuYwoJICBtb3ZlZCBtaXNjL2ludDFhLmMgICAgICB0byBtaXNjZW11L2ludDFhLmMKCSAgbW92ZWQgbWlzYy9pbnQyMS5jCSAgdG8gbWlzY2VtdS9pbnQyMS5jCgkgIG1vdmVkCW1pc2Mva2VybmVsLmMJICB0byBtaXNjZW11L2tlcm5lbC5jCgkgIG1vdmVkIG1pc2MvdXNlci5jICAgICAgIHRvIG1pc2NlbXUvdXNlci5jCgoJKiBbbWVtb3J5bGliL2hlYXAuY10KCUhlYXAgbWFuYWdlbWVudCBmb3IgV2luZUxpYgoKCSogW21pc2MvY29tbS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIGVycm5vLCBTdW5PUwoJZG9lc24ndCBoYXZlIGF0ZXhpdCAoKSkuCgoJKiBbbWlzYy9kb3NfZnMuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TICgjaW5jbHVkZSB2ZnMuaCkKCgkqIFttaXNjL2ZpbGUuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TIChPUEVOX01BWCBjb25zdGFudCwKCSNpbmNsdWRlIHVuaXN0ZC5oKQoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIGxpbWl0cykKCgkqIFt0b29sa2l0L3N1cC5jXQoJV2luZUxpYiB2ZXJzaW9uIG9mIENhbGxXaW5kb3dQcm9jLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVR5cGVkZWYgWFBvaW50ZXIgdW5kZXIgWDExUjQgKE9wZW5XaW5kb3dzKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiwgdXNlIGRpcmVjdCBjYWxsYmFja3MgaW5zdGVhZCBvZiB0aGUKCXdpbmRvd3Mgc3VwcGxpZWQgY2FsbGJhY2tzLgoKTW9uIEZlYiAgNyAyMjozNzozNCBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci9jdXJzb3IuY10KCU5ldyBmdW5jdGlvbiBDVVJTT1JfU2V0V2luQ3Vyc29yKCksIGZvciBpbnRlcm5hbCB1c2UsIHRvIHNldAoJdGhlIGN1cnNvciBvZiBhIHNwZWNpZmljIHdpbmRvdyBtb3JlIHJlbGlhYmx5IHRoYW4gd2l0aCBTZXRDdXJzb3IoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQmV0dGVyIHdpbmRvdyBtYW5hZ2VtZW50LiBNb3ZpbmcgYW5kIHJlc2l6aW5nIGZyb20gdGhlIHN5c3RlbQoJbWVudSBzaG91bGQgd29yayBub3cuCglBZGRlZCBzY3JvbGwtYmFyIG1vdXNlIHRyYWNraW5nLgoKCSogW3dpbmRvd3Mvd2luLmNdCglNb3ZlZCBzY3JvbGwtYmFyIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiB0byBkZWZ3bmQuYy4KCkZlYiA1LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNhbGwgdG8gU3RkRHJhd01lbnVCYXIoKSBkdXJpbmcgTkMncyBkcmF3aW5nLgoJTmV3IE5DX1RyYWNrTW91c2VNZW51QmFyKCkgZnVuY3Rpb24gd2hpY2ggY2FsbCAKCQlNZW51QnV0dG9uRG93bigpLCBNZW51QnV0dG9uVXAoKSAmIE1lbnVNb3VzZU1vdmUoKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgQ2hhbmdlTWVudSgpIGZ1bmN0aW9uLgoJUmVtb3ZlIHBlcm1hbmVudGx5IG9sZCBYdCBtZW51IGNvZGUuCglNYWtlIGNvbW1vbiBmdW5jdGlvbnMgTWVudUJ1dHRvbkRvd24oKSwgTWVudUJ1dHRvblVwKCkKCQkmIE1lbnVNb3VzZU1vdmUoKSBmb3IgYm90aCBwb3B1cHMgJiBtZW51YmFyLgoJCgkqIFtjb250cm9scy9jb21iby5jXQoJUGFpbnQgT0JNX0NPTUJPIGRpcmVjdGx5IGluIGNvbWJvIGNsaWVudC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXggYnVnIGluIG11bHRpY29sdW1ucyBjYWxjdWxhdGlvbnMuCgoJKiBbY29udHJvbHMvTWFrZWZpbGVdCglSZW1vdmUgcnVsZXMgZm9yIG9sZCBmaWxlICdjYXB0aW9uLmMnLgoKCSogW21pc2Mva2VybmVsLmNdCglSZW1vdmUgZW1wdHkgc3R1YiBHZXRNb2R1bGVGaWxlTmFtZSgpLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglOZXcgR2V0TW9kdWxlSGFuZGxlKCkgZnVuY3Rpb24uCglOZXcgR2V0TW9kdWxlVXNhZ2UoKSBmdW5jdGlvbi4KCU5ldyBHZXRNb2R1bGVGaWxlTmFtZSgpIGZ1bmN0aW9uLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJVHJ5IHRvIGZpbmQgdGhlIGJ1ZyBhIG1pc3NpbmcgbWVudSBsb2FkaW5nIC4uLiBOb3QgZm91bmQgeWV0ICEKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlIG9sZCBtZW51YmFyIGNyZWF0aW9uLgoKVGh1IEZlYiAgMyAyMjozMDoxMSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2Mvd2luc29ja2V0LmNdCglNb3JlIGZ1bmN0aW9ucyBhZGRlZC4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIEpvaG4gQnJlemFrJ3Mgd2luc29jay5kbGwgc3R1ZmYuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgIDEgMjE6MTQ6NDcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIGZ1bmN0aW9uIENyZWF0ZU5ld1NlZ21lbnRzKCkuICBNb2RpZmllZCBJUENDb3B5U2VsZWN0b3IKCXRvIGFsbG93IGFsaWFzaW5nIHRvIGFueSBhcmJpdHJhcnkgbWVtb3J5IHNwYWNlLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIHBvdGVudGlhbCBidWcgaW4gR2xvYmFsR2V0RnJlZVNlZ21lbnRzKCkuCgoJKiBbbWVtb3J5L2xpbmVhci5jXQoJQ3JlYXRlZCBmdW5jdGlvbnMgR2xvYmFsTGluZWFyTG9jaygpIGFuZCBHbG9iYWxMaW5lYXJVbmxvY2soKS4KClR1ZSBGZWIgIDEgMDU6NTE6NDMgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCVJlbW92ZWQgQ0FQVElPTiB3aW5kb3cgY2xhc3MuCgoJKiBbbG9hZGVyL2N1cnNvci5jXQoJQnVnIGZpeCBpbiBMb2FkQ3Vyc29yKCk6IGRvbid0IGFsbG9jYXRlIG1lbW9yeSBldmVyeSB0aW1lIGZvcgoJYnVpbHQtaW4gY3Vyc29ycy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglJbnZhbGlkYXRlIGNoaWxkIHdpbmRvd3MgaW4gSW52YWxpZGF0ZVJnbigpLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCByZXBhaW50IG9mIHRoZSBjYXB0aW9uIHdoZW4gY2hhbmdpbmcgd2luZG93IHRleHQuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW9kaWZpZWQgU2V0Q2FwdHVyZSgpIHRvIGFsbG93IGtleWJvYXJkIGV2ZW50cyB3aGlsZSBjYXB0dXJpbmcuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gTVNHX0dldEhhcmR3YXJlTWVzc2FnZSgpLCB0byBkbyBtb3VzZSB0cmFja2luZwoJd2l0aG91dCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgV2luZG93cyBwcm9ncmFtLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGNvdXBsZSBvZiBjaGFuZ2VzIGluIGZyYW1lIGRyYXdpbmcgZm9yIERMR01PREFMRlJBTUUgd2luZG93cy4KCVJld3JpdHRlbiB3aW5kb3cgbW92aW5nIGNvZGUsIHRvIHVzZSBNU0dfR2V0SGFyZHdhcmVNZXNzYWdlKCkKCWluc3RlYWQgb2Ygbm9uLWNsaWVudCBtb3VzZSBldmVudHMgKHRoaXMgaXMgdGhlIHdheSBXaW5kb3dzCglkb2VzIGl0KSwgYW5kIHRvIHNlbmQgV01fRU5URVJTSVpFTU9WRSBtZXNzYWdlcy4KCVJlbW92ZWQgV01fTkNCVVRUT05VUCBhbmQgV01fTkNNT1VTRU1PVkUgaGFuZGxlcnMuCgoJKiBbd2luZG93cy93aW4uY10KCUFsbG9jYXRlIHRlbXBvcmFyeSBzdHJ1Y3R1cmVzIG9uIHRoZSBVU0VSIGhlYXAgaW5zdGVhZCBvZgoJdXNpbmcgR2xvYmFsQWxsb2MoKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgZnVuY3Rpb24gV0lOUE9TX0dldE1pbk1heEluZm8oKSB0byBnZXQgc2l6aW5nIGluZm9ybWF0aW9ucy4KCkphbiAzMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDYWxsIHRvIFN0ZERyYXdTY3JvbGxCYXIoKSBkdXJpbmcgTkMncyBkcmF3aW5nLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJCdXR0b25Eb3duKCkgb24gTkMgbW91c2UgZXZlbnRzIFdNX0xCVVRUT05ET1dOLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJCdXR0b25VcCgpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9MQlVUVE9OVVAuCglDYWxsIHRvIE5DX1Njcm9sbEJhck1vdXNlTW92ZSgpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9NT1VTRU1PVkUuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IEdldFN1Yk1lbnUoKSBmdW5jdGlvbi4KCU1vdmUgR2V0TWVudSgpICYgU2V0TWVudSgpIGZ1bmN0aW9ucyBmcm9tICd3aW5kb3dzL3dpbi5jJy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglTdGFydCBjaGFuZ2VzIHRvIHNhdGlzZnkgcmVjZW50IGNoYW5nZXMgaW4gc2Nyb2xsYmFycy93aW5kb3dzLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUHV0IHNvbWUgY29kZSBpbiBMb2FkQWNjZWxlcmF0b3JzKCkgc3R1Yi4KCU5ldyBUcmFuc2xhdGVBY2NlbGVyYXRvcigpIGZ1bmN0aW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglSZW1vdmUgR2V0TWVudSgpICYgU2V0TWVudSgpIGZ1bmN0aW9ucy4KCUNhbGwgdG8gTkNfQ3JlYXRlU2Nyb2xsQmFycygpIGlmIHJlcXVpcmVkIGJ5IENyZWF0ZVdpbmRvdygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSmFuIDI0IDEwOjQwOjEwIEVTVCAxOTk0IEpvaG4gUmljaGFyZHNvbiAoanJpY2hhcmRAY3MudW1sLmVkdSkKCiAgICAgICAgKiBbd2luZG93L3dpbi5jXQogICAgICAgIEFkZGVkIGZ1bmN0aW9ucyBFbnVtV2luZG93cywgRW51bUNoaWxkV2luZG93cywgYW5kIGhlbHBlcgogICAgICAgIFdJTl9FbnVtQ2hpbGRXaW4uICBFbnVtV2luZG93cyB3b24ndCBsaXN0IGFsbCB3aW5lIHdpbmRvd3MKICAgICAgICBiZWNhdXNlIEdldERlc2t0b3BXaW5kb3cgaXNuJ3QgY29tcGxldGUuICBIb3dldmVyLCB0aGUgY29kZQogICAgICAgIGlzIGluIHBsYWNlIGZvciBpdCB0byB3b3JrIGNvcnJlY3RseSBhbmQgb25seSBuZWVkcyAKICAgICAgICBHZXREZXNrdG9wV2luZG93IHRvIGRvIHNvLiAgCgpUdWUgSmFuIDI1IDA1OjUxOjQ3IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgYWN0aXZhdGlvbiBtZXNzYWdlcyAoV01fQUNUSVZBVEUsCglXTV9OQ0FDVElWQVRFLCBXTV9NT1VTRUFDVElWQVRFKQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCURlLWFjdGl2YXRlIHRoZSB3aW5kb3cgd2hlbiBsb3NpbmcgaW5wdXQgZm9jdXMuCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJQnVnIGZpeCBpbiBTZXRGb2N1cygpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgYWN0aXZhdGlvbiBvZiB0aGUgd2luZG93IG9uIG1vdXNlLWNsaWNrcy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2hhbmdlZCBub24tY2xpZW50IGFyZWEgcGFpbnRpbmcgdG8gdXNlIHRoZSBjb3JyZWN0IGNvbG9ycwoJZGVwZW5kaW5nIHVwb24gdGhlIGFjdGl2YXRpb24gc3RhdGUuCglBZGRlZCBXTV9OQ0FDVElWQVRFIG1lc3NhZ2UgaGFuZGxpbmcuCglGaXhlZCBhIGNvdXBsZSBvZiBidWdzIGluIHdpbmRvdyBtb3ZpbmcgYW5kIHJlc2l6aW5nLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBHZXQvU2V0QWN0aXZlV2luZG93KCkuCglJbXBsZW1lbnRlZCBTV1BfTk9BQ1RJVkFURSBmbGFnIGluIFNldFdpbmRvd1BvcygpLgoKSmFuIDE3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglNZXNzYWdlQm94IGhhcyBhIENhcHRpb25CYXIgZm9yIGhpcyB0aXRsZSBleGNlcHQgZm9yCgkJTUJfU1lTVEVNTU9EQUwgd2l0aCBNQl9JQ09OSEFORC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2FsbCB0byBOQ19UcmFja1N5c01lbnUgb24gU3lzTWVudSBidXR0b24gbW91c2UgY2xpY2suCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUNhbGwgdG8gTkNfVHJhY2tTeXNNZW51IG9uIEFsdCBrZXkgKFZLX01FTlUpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBHZXRTeXN0ZW1NZW51KCkgZnVuY3Rpb24uCglOZXcgQ29weVN5c3RlbU1lbnUoKSBpbnRlcm5hbCBmdW5jdGlvbi4KCU5ldyBOQ19UcmFja1N5c01lbnUoKSBpbnRlcm5hbCBmdW5jdGlvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU5ldyBXTV9JTklUTUVOVSwgV01fSU5JVE1FTlVQT1BVUCwgV01fTUVOVVNFTEVDVCAmIFdNX01FTlVDSEFSIGRlZmluZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBKYW4gMTMgMTE6NDU6MTMgMTk5NCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKCSogW3dpbmRvdy93aW4uY10KCUFkZGVkIGZ1bmN0aW9ucyBFbmFibGVXaW5kb3csIElzV2luZG93RW5hYmxlZCwgYW5kIGhlbHBlciAKCVdJTl9TZXRTZW5zaXRpdmUuCgkKCSogW3dpbmRvdy9ldmVudC5jXQoJQWRkZWQgY2hlY2tzIGZvciBXU19ESVNBQkxFRCB3aW5kb3dzIGluIEVWRU5UX2tleSwgRVZFTlRfTW90aW9uTm90aWZ5LAoJRVZFTlRfQnV0dG9uUHJlc3MsIEVWRU5UX0J1dHRvblJlbGVhc2UsIEVWRU5UX0NvbmZpZ3VyZU5vdGlmeSwKCUVWRU5UX0ZvY3VzSW4sIEVWRU5UX0ZvY3VzT3V0LCBhbmQgRVZFTlRfRW50ZXJOb3RpZnkuICBLZXkgYW5kIAoJYnV0dG9uIHByZXNzZXMgYmVlcCBmb3IgYSBkaXNhYmxlZCB3aW5kb3cuICAKCUlmIGFueW9uZSBmaW5kcyBiZXR0ZXIgcGxhY2VzIGZvciB0aGVzZSBjaGVja3MsIHBsZWFzZSB0ZWxsIG1lLgoKSmFuIDE3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglDbGVhbnVwIG9uIGJ1dHRvbnMgYW5zd2VyIHZhbHVlIHJldHVybmVkLgoKCSogW2NvbnRyb2wvY29tYm8uY10KCU5vdyB1c2UgT0JNX0NPTUJPIGJpdG1hcCBkcm9wZG93biBidXR0b24uCgpNb24gSmFuIDE3IDIxOjU2OjQ1IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9jb21tL2NdCglBIGZldyBidWdmaXhlcy4KClR1ZSBKYW4gMTggMDY6MzY6NDggMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci9jdXJzb3IuY10KCUFkZGVkIFggY3Vyc29yIGZvciBJRENfU0laRU5TIGFuZCBJRENfU0laRVdFLgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdICAoTmV3IGZpbGVzKQoJUmV3cm90ZSBtYWluKCkgZnVuY3Rpb24gdG8gZ2V0IHJpZCBvZiBYdCBhcHBsaWNhdGlvbiBjb250ZXh0LAoJYW5kIGFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gcGFyc2luZy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglVc2Ugb2YgYSBwcml2YXRlIG1hcCBub3cgY29uZmlndXJhYmxlIHdpdGggY29tbWFuZC1saW5lIG9wdGlvbi4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgV01fU1lTQ09NTUFORCBoYW5kbGluZywgYW5kIGJldHRlciBXTV9TRVRDVVJTT1IgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUmVtb3ZlZCBDb25maWd1cmVOb3RpZnkgZXZlbnQgaGFuZGxlciAobm8gbG9uZ2VyIG5lZWRlZCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglTZW5kIFdNX1NFVENVUlNPUiBtZXNzYWdlIG9uIG1vdXNlIGV2ZW50cy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIE9FTSBiaXRtYXBzIGZvciB0aGUgZHJhd2luZyBvZiB0aGUgbm9uLWNsaWVudCBhcmVhLgoJQWRkZWQgY2FwdGlvbiBiYXIgYnV0dG9ucyBoYW5kbGluZywgYW5kIG1vdmluZyBhbmQgcmVzaXppbmcgb2YKCXRoZSB3aW5kb3cgdmlhIHRoZSB3aW5kb3cgZnJhbWUgKGJ5cGFzc2luZyB0aGUgd2luZG93IG1hbmFnZXIpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gQmVnaW5QYWludCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXQgdGhlIG92ZXJyaWRlX3JlZGlyZWN0IGZsYWcgZm9yIHdpbmRvd3MgKHRvIGJ5cGFzcyB3aW5kb3cKCW1hbmFnZXIpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBXaW5kb3dGcm9tUG9pbnQoKSwgQ2hpbGRXaW5kb3dGcm9tUG9pbnQoKSwKCUJyaW5nV2luZG93VG9Ub3AoKSwgR2V0L1NldEludGVybmFsV2luZG93UG9zKCksCglHZXQvU2V0V2luZG93UGxhY2VtZW50KCkuCgpNb24gSmFuIDE3IDIwOjQ4OjI0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbWVtb3J5L2hlYXAuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxvY2FsIGhlYXBzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSmFuICA0IDEzOjAxOjMzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbd2luZG93L2NhcmV0LmNdCiAgICAgICAgTW9kaWZpZWQgY29kZSB0byB1c2Ugc3lzdGVtIHRpbWVyLgoKSmFuIDksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJV2luZG93cyBjcmVhdGUgaWYgcmVxdWlyZWQgbmV3IFhMSUIgTWVudUJhciAmIENhcHRpb25CYXIuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVdNX0NBTENTSVpFIE1vdmUgJiBSZXNpemUgY2FwdGlvbiwgbWVudWJhciAmIHNjcm9sbGJhcnMuCgkoSSdtIG5vdCBzdXJlIGl0J3MgdGhlIGdvb2QgcGxhY2UgZm9yIGl0LCBidXQgaXQgd29yay4uLikKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCW9wdGltaXplIGluIEZpbmRSZXNvdXJjZUJ5TnVtYmVyLCBtYWtlIGxzZWVrKCkgaWYgbmV4dCB0eXBlIC4uLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJc2Nyb2xsYmFyIGJ1dHRvbnMgYXJlIG5vdyB1c2luZyBzeXN0ZW0gcmVzb3VyY2VzIGJpdG1hcHMuCgoJKiBbY29udHJvbHMvY2FwdGlvbi5jXSAtIG5ldyBmaWxlIC4uLgoJY2FwdGlvbmJhciBzaG93aW5nIHRpdGxlLCBjbG9zZSBidXR0b24gd2l0aCBTeXNNZW51LAoJYW5kIG90aGVyIGJ1dHRvbnMgdXNpbmcgc3lzdGVtIHJlc291cmNlcyBiaXRtYXBzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbnM6IFNldE1lbnVJdGVtQml0bWFwcygpIHdpdGggJ2dsdWVzJywKCU1ha2UgbmV3IHZlcnNpb24gb2YgTG9hZE1lbnUoKSAmIFBhcnNlTWVudSgpLAoJKCBwdXQgI2RlZmluZSBVU0VfUE9QVVBNRU5VICkuCglJbXBsZW1lbnRhdGlvbiBvZiBNZW51QmFyIGZ1bmN0aW9ucy4KCQoJKiBbc3lzcmVzLmRsbF0KCU5ldyBiaXRtYXBzIGZvciBzeXN0ZW0gc3VjaCBPQk1fQ0xPU0UsIE9CTV9NSU5JTUlaRSwgT0JNX1VQQVJST1dJLgoJTmV3IFNZU01FTlUgbWVudSwgaXQgZG9uJ3Qgd29yayB5ZXQgISA6LSgoCgpUdWUgSmFuIDExIDA1OjI3OjQ1IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW21lbW9yeS9hdG9tLmNdCglGaXhlZCBhIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIGF0b21zIHRvIGJlIGNhc2Utc2Vuc2l0aXZlLgoKCSogW21pc2MvcmVjdC5jXQoJQnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdCglCdWcgZml4IHdoZW4gc2V0dGluZyB0aGUgY2xpcCBtYXNrIHRvIGFuIGVtcHR5IHJlZ2lvbi4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQnVnIGZpeCBpbiBSZWxlYXNlREMoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ2FsbCBBZGp1c3RXaW5kb3dSZWN0RXgoKSBiZWZvcmUgY3JlYXRpbmcgdGhlIGRpYWxvZyB3aW5kb3cuCglBZGRlZCBzdXBwb3J0IGZvciBEU19NT0RBTEZSQU1FIHN0eWxlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNsZWFuZWQgdXAgZXZlbnQgaGFuZGxpbmcgYW5kIHJlbW92ZWQgb2xkIFh0IHN0dWZmLgoJTW92ZWQgZG91YmxlLWNsaWNrIGhhbmRsaW5nIHRvIHdpbmRvd3MvbWVzc2FnZS5jCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJQnVnIGZpeDogb25seSBzZXQgdGhlIFggZm9jdXMgd2hlbiB0aGUgd2luZG93IGlzIHZpZXdhYmxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJld3JpdHRlbiBEcmF3UmVsaWVmUmVjdCgpIHRvIHVzZSBicnVzaCBpbnN0ZWFkIG9mIHBlbiwgYW5kCgl0byB1c2UgdGhlIHN5c3RlbSBjb2xvcnMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXTV9OQ0hJVFRFU1QgbWVzc2FnZSBzZW5kaW5nLCBhbmQgbm9uLWNsaWVudAoJbW91c2UgbWVzc2FnZXMuCglDbGVhbmVkIHVwIGRvdWJsZS1jbGljayBoYW5kbGluZywgYW5kIHJlbW92ZWQgdGhlIFh0IGNvZGUuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gIChOZXcgZmlsZSkKCUltcGxlbWVudGVkIEFkanVzdFdpbmRvd1JlY3QoKS4KCUltcGxlbWVudGVkIFdNX05DQ0FMQ1NJWkUsIFdNX05DSElUVEVTVCBhbmQgV01fTkNQQUlOVCBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglBZGRlZCBzZW5kaW5nIG9mIHRoZSBXTV9OQ1BBSU5UIG1lc3NhZ2UgaW4gQmVnaW5QYWludCgpLgoKCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXSBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdICAoTmV3IGZpbGVzKQoJSW1wbGVtZW50ZWQgc3lzdGVtIG1ldHJpY3MuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXggaW4gc2V0dGluZyB0aGUgcGFyZW50IGFuZCBvd25lciBpbiBDcmVhdGVXaW5kb3coKS4KCVJlbW92ZWQgdGhlIFh0IGNvZGUuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHNlbmRpbmcgb2YgdGhlIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBTZXRXaW5kb3dQb3MoKS4KCVJlbW92ZWQgdGhlIFh0IGNvZGUuCgpTdW4gSmFuICAyIDEyOjM4OjUzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglJbXBsZW1lbnRlZCBHZXRDbGFzc05hbWUgYW5kIEdldENsYXNzSW5mby4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglWYXJpb3VzIGltcHJvdmVtZW50cyB0byB0ZXh0IGNhcmV0IGNvZGUuCgpGcmkgRGVjIDMxIDE1OjIyOjIyIDE5OTMgIEpvaG4gQnJlemFrIDxicmV6YWtAYXBvbGxvLmhwLmNvbT4KCgkqIFttaXNjL2NvbW0uY10KCVBhdGNoZXMgdG8gd29yayB3aXRoIE5ldEJTRC4KClRodSBEZWMgMzAgMTI6MTE6NTUgMTk5MyAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKCSogW29iamVjdHMvYml0Ymx0LmNdIEFkZGVkIFN0cmV0Y2hCbHQoKS4KClR1ZSBKYW4gIDQgMDU6MjI6MDcgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW21pc2MvdXNlci5jXQoJQWRkZWQgY3JlYXRpb24gb2Ygc3lzdGVtIG1lc3NhZ2UgcXVldWUuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZGMuY10KCUFkZGVkIERDIHNpemUgZmllbGRzIGludG8gREMgc3RydWN0dXJlLgkJCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJQnVnIGZpeCBpbiBDTElQUElOR19JbnRlcnNlY3RSZWN0KCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQWxsb2NhdGUgYSBEQ0UgaW5zdGVhZCBvZiBhIERDIGZvciBDU19DTEFTU0RDIGNsYXNzZXMuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJRml4ZWQgR2V0VXBkYXRlUmVjdCgpIGFuZCBHZXRVcGRhdGVSZ24oKSB0byBjbGlwIHRvIHRoZSBjbGllbnQgYXJlYS4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJSW1wbGVtZW50ZWQgR2V0RENFeCgpIGFuZCBHZXRXaW5kb3dEQygpLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglJbXBsZW1lbnRlZCBXTV9XSU5ET1dQT1NDSEFOR0VEIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFhsaWIgZXZlbnQgaGFuZGxpbmcgaW5zdGVhZCBvZiBYdCBjYWxsYmFja3MuCglDaGFuZ2VkIE1TR19BZGRNc2coKSBjYWxscyB0byBoYXJkd2FyZV9ldmVudCgpIG9yIFBvc3RNZXNzYWdlKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBtdWx0aXBsZSBtZXNzYWdlIHF1ZXVlcy4KCUltcGxlbWVudGVkIGhhcmR3YXJlX2V2ZW50KCkgdG8gc3RvcmUgbWVzc2FnZXMgaW50byB0aGUgc3lzdGVtIHF1ZXVlLgoJSW1wbGVtZW50ZWQgR2V0L1NldFRhc2tRdWV1ZSgpLgoJQmV0dGVyIFdNX1BBSU5UIGFuZCBXTV9USU1FUiBoYW5kbGluZy4KCUNoYW5nZXMgdG8gdXNlIFhsaWIgaW5zdGVhZCBvZiBYdCBmb3IgZXZlbnRzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCVVzZSBHZXREQ0V4KCkgdG8gcmV0cmlldmUgdGhlIERDLCB0byBnZXQgYSBjb3JyZWN0IHZpc2libGUgcmVnaW9uLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCU1vdmVkIHRoZSB0aW1lciBwcm9jZWR1cmUgY2FsbGJhY2sgaW50byBEaXNwYXRjaE1lc3NhZ2UoKS4KCUNoYW5nZWQgaW1wbGVtZW50YXRpb24gdG8gZ2V0IHJpZCBvZiBYdCB0aW1lb3V0cy4gIFRpbWVyIGNoZWNraW5nCglpcyBub3cgZG9uZSBpbnNpZGUgR2V0TWVzc2FnZSgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBbGxvY2F0ZSBhIERDRSBpbnN0ZWFkIG9mIGEgREMgZm9yIENTX09XTkRDIHdpbmRvd3MuCglSZXBsYWNlZCBYdCBjYWxscyB3aXRoIFhsaWIgY2FsbHMuCglNb3ZlZCB3aW5kb3cgcG9zaXRpb25pbmcgZnVuY3Rpb25zIGludG8gd2luZG93cy93aW5wb3MuYwoKCSogW3dpbmRvd3Mvd2lucG9zLmNdICAoTmV3IGZpbGUpCglSZXdyaXR0ZW4gbW9zdCBvZiB0aGUgd2luZG93IHBvc2l0aW9uaW5nIGZ1bmN0aW9ucy4KCUltcGxlbWVudGVkIFNldFdpbmRvd1BvcygpIGFuZCBNYXBXaW5kb3dQb2ludHMoKS4KCkphbiAzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUJhZCBhcmd1bWVudHMgZGVzY3JpcHRpb24gZm9yIGZ1bmN0aW9uIFNldERsZ0l0ZW1UZXh0LgoKCSogW29iamVjdHMvdGV4dC5jXQoJRnVuY3Rpb24gRHJhd1RleHQgbm93IGhhbmRsZSBEVF9DQUxDUkVDVCByZXF1ZXN0LgoKCSogW21pc2MvbWVzc2FnZS5jXQoJTWVzc2FnZSBib3hlcyBub3cgdXNlIERyYXdUZXh0IHdpdGggRFRfQ0FMQ1JFQ1QuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeCBpbiBmdW5jdGlvbiBGcmFtZVJlY3QsIChpdCB3YXMgdXNpbmcgUEVOIGluc3RlYWQgb2YgQlJVU0gpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4IGZvciBmbGFncyBpbiBmdW5jdGlvbiBTaG93V2luZG93LgoJTW9yZSBhY2N1cmF0ZSBXTV9TSVpFIGdlbmVyYXRlZCBieSBmdW5jdGlvbiBTaG93V2luZG93LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1vcmUgY29kZSBmb3IgTEJTX01VTFRJUExFU0VMLgoJTW9yZSBjb2RlIGZvciBMQlNfTVVMVElDT0xVTU4uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglCYWQgZGVmaW5lIGZvciBNRl9TRVBBUkFUT1IuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uczogUG9wTWVudVduZFByb2MoKSB3aXRoICdnbHVlcycsCglDcmVhdGVQb3B1cE1lbnUoKSwgQXBwZW5kTWVudSgpLCBJbnNlcnRNZW51KCksIFJlbW92ZU1lbnUoKSwgCglEZWxldGVNZW51KCksIE1vZGlmeU1lbnUoKSwgVHJhY2tQb3B1cE1lbnUoKS4KCUNvZGUgaW4gc3R1YnM6IENyZWF0ZU1lbnUoKSwgRGVzdHJveU1lbnUoKS4gCgpTYXQgSmFuICAxIDEwOjIyOjQzIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvd2luZS5jOiBBZGRlZCBzdXBwb3J0IGZvciByZWxvY2F0aW9uIHR5cGVzIDUgYW5kIDYuCgpNb24gRGVjIDI3IDExOjA2OjAzIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9jb21tLmNdCgluZXcgZnVuY3Rpb25zOiBCdWlsZENvbW1EQ0IoKSwgT3BlbkNvbW0oKSwgQ2xvc2VDb21tKCksCglTZXRDb21tQnJlYWsoKSwgQ2xlYXJDb21tQnJlYWsoKSwgRXNjYXBlQ29tbUZ1bmN0aW9uKCksIEZsdXNoQ29tbSgpLAoJR2V0Q29tbUVycm9yKCksIFNldENvbW1FdmVudE1hc2soKSwgR2V0Q29tbUV2ZW50TWFzaygpLAoJU2V0Q29tbVN0YXRlKCksIEdldENvbW1TdGF0ZSgpLCBUcmFuc21pdENvbW1DaGFyKCksIFJlYWRDb21tKCksIAoJV3JpdGVDb21tKCkuCgpXZWQgRGVjIDIyIDEzOjAwOjE1IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglJbXBsZW1lbnRlZCB0ZXh0IGNhcmV0IGZ1bmN0aW9ucy4KClR1ZSBEZWMgMjEgMDY6MTM6NTggMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci93aW5lLmNdCglCdWcgZml4IGluIExvYWRJbWFnZSgpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL3RleHQuY10KCSAgW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglNb2RpZmllZCBncmFwaGljcyBjYWxscyB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgREMgb3JpZ2luLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBwcmVsaW1pbmFyeSBXTV9OQ0NBTENTSVpFIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVNlbmQgV01fTkNDQUxDU0laRSBtZXNzYWdlIG9uIHJlc2l6ZSBldmVudC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2VuZCBXTV9OQ0NBTENTSVpFIG1lc3NhZ2UgaW4gQ3JlYXRlV2luZG93KCkuCglSZWFsaXplIHdpZGdldHMgYXQgY3JlYXRpb24gdGltZSAoc2hvdWxkIHByZXZlbnQgcHJvYmxlbXMgd2l0aAoJdW5yZWFsaXplZCB3aWRnZXRzKS4KCkRlYyAxOSwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJU2VuZCBtb3VzZSAmIGtleWJvYXJkIG1lc3NhZ2UgcmVjZWl2ZWQgdG8gaXRzIHBhcmVudC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNlbmQga2V5Ym9hcmQgbWVzc2FnZSByZWNlaXZlZCB0byBpdHMgcGFyZW50LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUFkZCBOYXZpZ2F0aW9uIGtleXMgLgoJTGlzdEJveCBub3cgdXNlIFZTQ1JPTEwgJiBIU0NST0xMIGluc3RlYWQgb2YgY2hpbGRyZW4uCglBbHBoYSB2ZXJzaW9uIG9mIExCU19NVUxUSVBMRVNFTC4KCUFscGhhIHZlcnNpb24gb2YgTEJTX01VTFRJQ09MVU1OLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGQgTmF2aWdhdGlvbiBrZXlzIG9uIGNsb3NlZCBDb21ib0JveC4KCVJlbW92ZSB1c2VsZXNzICdDT01CT0JPWF9DcmVhdGVDb21ib0JveCcgZnVuY3Rpb24uCgpNb24gRGVjIDE5IDIwOjM5OjM0IDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbG9hZGVyL3dpbmUuCglMb2FkSW1hZ2UoKSBtb2RpZmllZCB0byB1c2UgRmluZEZpbGUoKS4KCgkqIFttaXNjL2ZpbGUuY10KCVNldEVycm9yTW9kZSBhZGRlZAoKCSogW21pc2MvZG9zX2ZzLmNdCglidWcgZml4ZXMuCgpEZWMgMTMsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglidWcgZml4IGluIEdsb2JhbEdldEZyZWVTZWdtZW50IDogZ29vZCBwdHIgaW4gJ2dfcHJldicuCgoJKiBbc3lzcmVzLmRsbF0KCXByZWxpbWluYXJ5IHZlcnNpb24gb2YgYSAnZ2xhc3Mgb2Ygd2luZScgYml0bWFwCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uICdHZXRDYXB0dXJlJy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVJlbW92ZSB1c2VsZXNzICdTQ1JPTExCQVJfQ3JlYXRlU2Nyb2xsQmFyJyBmdW5jdGlvbi4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglSZW1vdmUgdXNlbGVzcyAnTElTVEJPWF9DcmVhdGVMaXN0Qm94JyBmdW5jdGlvbi4KCk1vbiBEZWMgMTMgMTM6NTE6MDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW29iamVjdHMvZm9udC5jXQoJQ29ycmVjdGVkIGJ1Z3MgaW4gR2V0Q2hhcldpZHRoKCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW9kaWZpZWQgRVZFTlRfa2V5IHRvIHNlbmQgV2luZG93cyB2aXJ0dWFsIGtleSBjb2RlcyBmb3IKCVdNX0tFWURPV04gYW5kIFdNX0tFWVVQIG1lc3NhZ2VzLCBhbmQgYSBXTV9DSEFSIG1lc3NhZ2UKCWZvciBwcmludGFibGUgY2hhcmFjdGVycy4KCldlZCBEZWMgMDggMTk6MjA6MDAgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGhuMzI0d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBQb2x5bGluZSBhbmQgUG9seWdvbgoKTW9uIERlYyAxMyAxNDo1MTo1NCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hEaXJlY3RvcnkoKSBtb2RpZmllZCB0byB1c2UgZG9zX2ZzLmMncyBmdW5jdGlvbnMgdG8KCWFjY2VzcyBmaWxlcyZ8ZHJpdmVzLgoKU2F0IERlYyAwNCAxNzowNDoyMyAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKICAgICAgIAkqIFttaXNjL2Rvc19mcy5jXQogICAgICAgCUFkZGVkIEZpbmRGaWxlKCkgdG8gc2VhcmNoIGEgZmlsZSBpbiBhIGRvcy91bml4IHN0eWxlIHBhdGguCgkKCSogW21pc2MvZmlsZS5jXQoJTmV3IFdpbjMxIGZ1bmN0aW9uczogT3BlbkZpbGUsIF9sY3JlYXRlLCBfbGxzZWVrLCBHZXRUZW1wRHJpdmUsCglHZXRUZW1wRmlsZU5hbWUsIEdldFdpbmRvd3NEaXJlY3RvcnksIEdldFN5c3RlbURpcmVjdG9yeSwKCUdldERyaXZlVHlwZS4JCQkgICAKCiAgICAgICAJKiBbbWlzYy9pbnQyMS5jXQogICAgICAgCU1vZGlmaWVkLgoKV2VkIERlYyAgMSAxNjoyMDo0NSAxOTkzICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgogICAgICAgICogW21pc2MvcHJvZmlsZS5jXQogICAgICAgIFRoZSBQcm9maWxlIGZ1bmN0aW9ucyBub3cgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlcy4gVGhleSBub3cKICAgICAgICBpbXBsZW1lbnQgYWxsIHRoZSBmZWF0dXJlcyBkZXNjcmliZWQgaW4gdGhlIFNESy4KClR1ZSBOb3YgMzAgMTM6NTU6MjcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVJld3JvdGUgc2VsZWN0b3IgYWxpYXNpbmcgcm91dGluZXMgdG8gdXNlIFN5c3RlbSBWIElQQwoJcm91dGluZSB0byBhbGlhcyBtZW1vcnkgc2VnbWVudHMuCgpOb3YgMjgsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNb3JlIGNvbnNpc3RlbmN5IGluIGZ1bmN0aW9ucyB1c2luZyB3SW5kZXhlcwoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJTmV3IGZ1bmN0aW9uIDogU2hvd1Njcm9sbEJhcigpLgoKCSogW2xvYWRlci9jdXJzb3IuY10gLi4uIE5ldyBmaWxlCglNb3ZlIGN1cnNvciBmdW5jdGlvbnMgZnJvbSBbbG9hZGVyL3Jlc291cmNlLmNdLgoJTmV3IGZ1bmN0aW9uIDogQ2xpcEN1cnNvcigpLgoJTmV3IGZ1bmN0aW9uIDogR2V0Q2xpcEN1cnNvcigpLgoJTmV3IGZ1bmN0aW9uIDogQ3JlYXRlQ3Vyc29yKCkuCglTZXRDdXJzb3IoKSBub3cgd29ya2luZyB1c2luZyBnbG9hYmFsIHZhcmlhYmxlICd3aW5IYXNDdXJzb3InLgoKCSpbb2JqZWN0L3BhbGV0dGUuY10KCU5ldyBzdHViIG9ubHkgOiBTZWxlY3RQYWxldHRlKCkuCglOZXcgc3R1YiBvbmx5IDogUmVhbGl6ZVBhbGV0dGUoKS4KCgkqW3dpbi9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uIDogRVZFTlRfZW50ZXJfbm90aWZ5KCksCgkJdXBkYXRlICd3aW5IYXNDdXJzb3InIGFuZCBzZW5kIFdNX1NFVENVUlNPUi4KCgkqW3dpbi9kZWZ3bmQuY10KCUFkZCBwcm9jZXNzaW5nIG9mIFdNX1NFVENVUlNPUiBtZXNzYWdlLgoKCSpbd2luL3dpbi5jXQoJTmV3IG1lbWJlcnMgaW4gV05EIHN0cnVjdHVyZSA6IGhDdXJzb3IsIGhXbmRWU2Nyb2xsICYgaFduZEhTY3JvbGwuIAoJQ3JlYXRlV2luZG93RXgoKSBub3cgY3JlYXRlIGNoaWxkcmVuIGZvciBXTV9IU0NST0xMICYgV01fVlNDUk9MTC4KCU5ldyBmdW5jdGlvbiBDbGllbnRUb1NjcmVlbigpLgoJTmV3IGZ1bmN0aW9uIFNjcmVlblRvQ2xpZW50KCkuCgpNb24gTm92IDI1IDE4OjI1OjQwIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgogICAgICAgCSogW2ZpbGVzLmggLyByZWdmdW5jLmggLyBtaXNjL2Rvcy5jXQogICAgICAgCVJlbW92ZWQuCgogICAgICAgCSogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAJQWRkZWQgc3VwcG9ydCBmb3IgbG9hZGluZyBkb3Nkcml2ZSBjZmcgZnJvbSB3aW5lLmluaS4KCiAgICAgICAJKiBbbWlzYy9pbnQyMS5jXQogICAgICAgCU1vZGlmaWVkLgoKCldlZCBOb3YgMjQgMTE6Mzc6MzMgMTk5MyAganVsbGlhcmRAZGlzdW5zMi5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaW5jbHVkZS9hdG9tLmhdIFttZW1vcnkvYXRvbS5jXQoJSW1wbGVtZW50ZWQgYXRvbXMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTW9kaWZpZWQgUmVnaXN0ZXJDbGFzcygpIHRvIHVzZSBhdG9tcy4KCUltcGxlbWVudGVkIENTX0dMT0JBTENMQVNTIHN0eWxlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKCkuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCdWcgZml4IGluIExvYWRSZXNvdXJjZSgpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNb2RpZmllZCBDcmVhdGVEaWFsb2dQYXJhbSgpIHRvIHVzZSBGaW5kL0xvYWRSZXNvdXJjZSgpLgoKTW9uIE5vdiAyMiAxMzo1ODo1NiAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW3dpbmRvd3Mvc2Nyb2xsLmNdCglQcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbnMgb2YgU2Nyb2xsV2luZG93LCBTY3JvbGxEQyBhbmQKICAgICAgICBTY3JvbGxXaW5kb3dFeC4KCk5vdiAyMSwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU9wdGltaXphdGlvbiBvZiByZWRyYXcgZHVyaW5nICdBZGQnIG9yICdJbnNlcnQnLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJT3B0aW1pemF0aW9uIG9mIFdNX1BBSU5UIGR1cmluZyAndGh1bWJ0cmFja2luZycuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBZGQgb2YgYmV0YSBpbXBsZW1lbnQgb2YgJ0JTX09XTkVSRFJBVycKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCVN0eWxlICdTU19JQ09OJyBuZXcgc3VwcG9ydGVkLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJQmVnaW4gb2YgaW1wbGVtYW50YXRpb24gb2YgTUJfWFhYIHN0eWxlcy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZ1bmN0aW9uIExvYWRJY29uKCkgOiBub3cgcHJlcGFyZSB0cmFuc3BhcmVuY3kgQml0bWFwIG1hc2suCglGdW5jdGlvbiBMb2FkQ3Vyc29yKCkgOiBub3cgcHJlcGFyZSBhICdYIHBpeG1hcGN1cnNvcicuCglOZXcgZnVuY3Rpb24gU2V0Q3Vyc29yKCkgOiBub3QgZmluaXNoZWQuCglOZXcgZnVuY3Rpb24gU2hvd0N1cnNvcigpIDogbm90IGZpbmlzaGVkLgoJTmV3IGZ1bmN0aW9uIEFjY2Vzc1Jlc291cmNlKCkgOiBzdHViLgoKCSogW29iai9kaWIuY10KCUZ1bmN0aW9uIERyYXdJY29uKCk6IGRldWdnaW5nIHBoYXNlIG9mIGljb24gdHJhbnNwYXJlbmN5IG1hc2suCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCW5ldyBmaWxlIGZvciBuZXdzIGZ1bmN0aW9ucyBMb2FkTGlicmFyeSgpICYgRnJlZUxpYnJhcnkoKS4KCgkqIFtzeXNyZXMuZGxsXQoJUmVzb3VyY2VzIG9ubHkgMTZiaXRzIERMTCBmb3IgU3lzdGVtIFJlc291cmNlcywgaWNvbnMsIGV0Yy4uLgoKU3VuIE5vdiAxNCAxNDozOTowNiAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglTaW1wbGlmaWVkIGRpYWxvZyB0ZW1wbGF0ZSBwYXJzaW5nLgoJSW1wbGVtZW50ZWQgRGlhbG9nQm94SW5kaXJlY3QoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgYnVnIGluIENyZWF0ZVdpbmRvdygpIHdoZW4gYWJvcnRpbmcgd2luZG93IGNyZWF0aW9uLgoJTW9kaWZpZWQgVXBkYXRlV2luZG93KCkgdG8gb25seSB1cGRhdGUgdmlzaWJsZSB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgSXNXaW5kb3coKS4KCk5vdiAxNCwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cgOiBuZXcgbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdyA6IG5ldyBtZXNzYWdlcy4KCgkqIFttaXNjL21lc3NhZ2UuY10KCU1vdmVkIHN0dWIgTWVzc2FnZUJveCgpIHRvIHRoaXMgbmV3IGZpbGUuCglJbXBsZW1lbnRlZCBvZiBhIGNhbGxiYWNrLCBub3cgTWVzc2FnZUJveCBzaG93IGEgd2luZG93LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTmV3IGZ1bmN0aW9uIERlc3Ryb3lJY29uKCkKCU5ldyBmdW5jdGlvbiBEZXN0cm95Q3Vyc29yKCkKCUZpbGxlZCBzdHViIExvYWRJY29uKCkKCUZpbGxlZCBzdHViIExvYWRDdXJzb3IoKQoJQnVnIGZpeGVkIGluIEZpbmRSZXNvdXJjZUJ5TmFtZSgpIDogbWlzc2luZyBsc2VlaygpLgoKCSogW29iai9kaWIuY10KCU5ldyBmdW5jdGlvbiBEcmF3SWNvbigpCgoJKiBbd2luZG93cy93aW4uY10KCU5ldyBmdW5jdGlvbiBDbG9zZVdpbmRvdygpCglOZXcgZnVuY3Rpb24gT3Blbkljb24oKQoJTmV3IGZ1bmN0aW9uIElzSWNvbmljKCkKCU5ldyBGdW5jdGlvbiBGaW5kV2luZG93KCkKClN1biBOb3YgMTQgMDg6Mjc6MTkgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGh6MjI1d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVdyb3RlIEFsbG9jQ1N0b0RTQWxpYXMoKSBhbmQgQWxsb2NEU3RvQ1NBbGlhcygpCgpTdW4gTm92IDE0IDA4OjI3OjE5IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglXcm90ZSBBbGxvY1NlbGVjdG9yKCkgYW5kIFByZXN0b0NoYW5nb1NlbGVjdG9yKCkuICBZVUshCgpTYXQgTm92IDEzIDEzOjU2OjQyIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglXcm90ZSBGaW5kUmVzb3VyY2UoKSwgTG9hZFJlc291cmNlKCksIExvY2tSZXNvdXJjZSgpLAoJYW5kIEZyZWVSZXNvdXJjZSgpCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXSBbbG9hZGVyL3NpZ25hbC5oXQoJQ2hhbmdlZCBzZWxlY3RvciBhbGxvY2F0aW9uIG1ldGhvZC4KClN1biBOb3YgMTAgMDg6Mjc6MTkgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGh6MjI1d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFtpZjE2MzIvY2FsbGJhY2suYyBpZjE2MzIvY2FsbC5TIGlmMTYzMi91c2VyLnNwZWNdIAoJYWRkZWQgQ2F0Y2ggKEtFUk5FTC41NSkgYW5kIFRocm93IChLRVJORUwuNTYpCgkKTm92IDcsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCQlCdWcgcmVzb2x2ZWQgOiBQYWludGluZyBtZXNzYWdlIGJlZm9yZSBzY3JvbGwgdmlzaWJsZS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgkJRGVzdHJveSBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCQlEZXN0cm95IGNsZWFudXAuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCgkJR2V0Q2hlY2sgTWVzc2FnZSBub3cgcmV0dXJuIGlzIHN0YXRlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglOZXcgZnVuY3Rpb24gSXNXaW5kb3dWaXNpYmxlKCkKCk1vbiBOb3YgIDEgMTQ6NDA6MjEgMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglSZW1vdmVkIHNvbWUgZHVwbGljYXRlIGVudHJpZXMuCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBkaWFsb2cgdW5pdHMgYW5kIGZvbnRzLgoJQWRkZWQgcHJlbGltaW5hcnkgbG9hZGluZyBvZiBkaWFsb2cgcmVzb3VyY2VzLgoJUHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb24gb2YgRGlhbG9nQm94KCkuCglJbXBsZW1lbnRlZCBHZXQvU2V0RGxnSXRlbSogZnVuY3Rpb25zLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZS4KCUltcGxlbWVudGVkIENyZWF0ZVdpbmRvd0V4KCkgYW5kIEdldFdpbmRvdygpLgoJQ29tcGxldGVkIERlc3Ryb3lXaW5kb3coKS4KCk1vbiBOb3YgIDEgMTg6MTk6MzQgMTk5MyAgRXJpayBCb3MKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRlZCBzdXBwb3J0IGZvciBpbnQgMHgxMSAmIDB4MTIuCgogICAgICAgICogW2xvYWRlci9pbnQyMS5jXQoJSW1wcm92ZWQgZnVuY3Rpb24gaGFuZGxpbmcuCgpTdW4gT2N0IDMxIDEyOjM4OjA5IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUltcGxlbWVudGVkIEdldENoYXJXaWR0aCgpLgoKV2VkIE9jdCAyNyAwOTo1NjowNiAxOTkzICBKb2huIEJyZXphayA8YnJlemFrQGNoLmhwLmNvbT4KCgkqIFtNYWtlZmlsZV0KICAgICAgICBVc2UgR05VIG1hbGxvYy4KCgkqIFtpbmNsdWRlL2ludDIxLmggaW5jbHVkZS93aW5lLmhdCiAgICAgICAgQ2hhbmdlIHNjX2VmbGFncyB0byBzY19lZmwgLgoKCSogW2luY2x1ZGUvd2luZS5oXQogICAgICAgIEZpeCBtaXNwbGFjZWQgI2VuZGlmCiAgICAgICAgSW5jbHVkZSA8c2lnbmFsLmg+IGZvciBOZXRCU0QKCgkqIFtsb2FkZXIvaW50MjEuY10KICAgICAgICBEb24ndCBpbmNsdWRlIDxzeXMvdmZzLmg+IGluIE5ldEJTRAogICAgICAgIERvIGluY2x1ZGUgPHN5cy9tb3VudC5oPiBpbiBOZXRCU0QKICAgICAgICBDbGVhbnVwIHNvbWUgbGludC4KCk1vbiBPY3QgMjYgMTc6NTk6MDEgMTk5MyAgRXJpayBCb3MKCiAgICAgICAgKiBbaW5jbHVkZS9pbnQyMS5oXQogICAgICAgIEFkZGVkLgoKICAgICAgICAqIFtsb2FkZXIvaW50MjEuY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBtYW55IGRvcyBpbnRzLgoKICAgICAgICAqIFttaXNjL2ZpbGUuY10gW2luY2x1ZGUvZmlsZXMuaF0KICAgICAgICBNb3ZlZCBPUEVOX01BWCBhbmQgRG9zRHJpdmVTdHJ1Y3QgdG8gZmlsZXMuaC4KClN1biBPY3QgMjQgMTM6MzY6NTAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSW1wbGVtZW50ZWQgQ0hFQ0tCT1gsIEFVVE9DSEVDS0JPWCwgM1NUQVRFLCBBVVRPM1NUQVRFLAoJUkFESU9CVVRUT04sIEFVVE9SQURJT0JVVFRPTiwgR1JPVVBCT1ggY29udHJvbHMsIHRvZ2V0aGVyIHdpdGgKCWEgcHJlbGltaW5hcnkgVVNFUkJVVFRPTiBjb250cm9sLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQ29ycmVjdGVkIGJ1Z3MgaW4gVEVYVF9OZXh0TGluZSgpIGFuZCBhZGRlZCBoYW5kbGluZyBvZiBwcmVmaXgKCWNoYXJhY3Rlci4KCgkqIFtjb250cm9scy9idXR0b24uY10KCURpc2FibGVkIGZvY3VzIGhhbmRsaW5nIGJ5IGNvbW1lbnRpbmcgb3V0IFNldEZvY3VzKCkgY2FsbHMgdW50aWwKCXNlcmlvdXMgYnVnIGNhbiBiZSBmb3VuZC4KCk9jdCAgMjAsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgkJUGFpbnRpbmcgY2xlYW51cCwgbmV3IG1lc3NhZ2VzIHByb2Nlc3NlZC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLgoKVHVlIE9jdCAxMiAxNzo1MDoxMSAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglCZXR0ZXIgc3VwcG9ydCBmb3IgdGhlIHByaXZhdGUgY29sb3IgbWFwLgoJVXNpbmcgYSBwcml2YXRlIG1hcCBpcyBub3cgdGhlIGRlZmF1bHQuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXguCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBDcmVhdGVEaWFsb2cqKCkgYW5kIElzRGlhbG9nTWVzc2FnZSgpLgoKCSogW21pc2MveHQuY10gW3dpbmRvd3MvZGVmd25kLmNdCglNb3ZlZCBEZWZXaW5kb3dQcm9jKCkgdG8gZGVmd25kLmMuCglBZGRlZCBXTV9OQ0NSRUFURSwgV01fTkNERVNUUk9ZIGFuZCBXTV9DVExDT0xPUiBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgRGVmRGxnUHJvYygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBXTV9OQ0NSRUFURSBhbmQgV01fTkNERVNUUk9ZIG1lc3NhZ2VzLgoJSW1wbGVtZW50ZWQgSXNDaGlsZCgpLgoKVHVlIE9jdCAxMiAxNzo1MDoyMCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbd2luZG93cy9mb2N1cy5jXQoJSW1wbGVtZW50ZWQgR2V0Rm9jdXMoKSBhbmQgU2V0Rm9jdXMoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCBwcm9jZXNzaW5nIG9mIEZvY3VzSW4gYW5kIEZvY3VzT3V0IGV2ZW50cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBEcmF3Rm9jdXNSZWN0KCkuCgpTYXQgT2N0ICA5IDE0OjM2OjU3IDE5OTMgIEVyaWsgQm9zCgoJKiBbbG9hZGVyL2ludDFhLmNdCglBZGRlZCBtb3JlIGZ1bmN0aW9uIGhhbmRsaW5nLgoKV2VkIE9jdCAgNiAxMjoyMToyMiAxOTkzICBFcmlrIEJvcwoKCSogW2xvYWRlci9zaWduYWwuY10KCVNwbGl0IHNpZ25hbC5jIGludG8gaW50MWEuYywgaW50MjEuYyBhbmQgc2lnbmFsLmMuCgpUdWUgT2N0ICA1IDIyOjEyOjQwIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbY29udHJvbHMvc3RhdGljLmNdIFtjb250cm9sL3dpZGdldHMuY10KCVN0YXRpYyBjb250cm9sIGNsYXNzLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgcHJvY2Vzc2luZyBvZiBhZGRpdGlvbmFsIERUXyBmbGFncyB0byBEcmF3VGV4dCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdIFttaXNjL3h0LmNdCglBZGRlZCBTZXRXaW5kb3dUZXh0KCkgYW5kIFdNX1NFVFRFWFQgcHJvY2Vzc2luZy4KClR1ZSBPY3QgIDUgMjI6MTI6NDAgMTk5MyAgTWFydGluIEF5b3R0ZQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93CgoJKiBbaW5jbHVkZS9jb21iby5oXQoJQ29tYm8gYm94IGRlZmluaXRpb25zCgoJKiBbaW5jbHVkZS9saXN0Ym94LmhdCglMaXN0Ym94IGRlZmluaXRpb25zCgoJKiBbaW5jbHVkZS9zY3JvbGwuaF0KCVNjcm9sbCBiYXIgZGVmaW5pdGlvbnMKClNhdCBPY3QgIDIgMDk6MzU6NTQgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUZpeGVkIGJ1ZyBpbiBNYWtlUHJvY0luc3RhbmNlKCkuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJQ2hhbmdlZCB4L3cgYW5kIHgvYiB0byBkaXNwbGF5IGluIGhleC4KCgkqIFtkZWJ1Z2dlci9pMzg2LXBpbnNuLmNdCglBZGRlZCBjb2RlIHRvIHByb3Blcmx5IHVuYXNzZW1ibGUgMTYtYml0IGluZGV4aW5nLgoKRnJpIE9jdCAgMSAwODoyOTowNSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2xvYWRlci9maWxlcy5jXSBbbWlzYy9wcm9maWxlLmNdCglTeXN0ZW0gaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBub3cgY2FsbGVkICJ3aW5lLmluaSIgYW5kIGNhbgoJYmUgbG9jYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksCglvciBhbnkgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHRoZSBXSU5FUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NhbGwuU10gW2luY2x1ZGUvcmVnZnVuYy5oXQoJQ2hhbmdlZCByZWdpc3RlciBmdW5jdGlvbiBzdGFjayB0byBtYXRjaCBzaWdjb250ZXh0IHN0cnVjdHVyZS4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtsb2FkZXIvZmlsZXMuY10KCUNyZWF0ZWQgZnVuY3Rpb24gdG8gc2VhcmNoIGEgcGF0aCBmb3IgZmlsZXMgdG8gbG9hZC4KCgkqIFtsb2FkZXIvd2luZS5jXQoJTW9kaWZpZWQgZXhlIGFuZCBkbGwgZmlsZSBsb2FkaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHBhdGgKCXNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgV0lORVBBVEguCgpUaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQnVnIGZpeC4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL2RlYnVnLmxdIFtkZWJ1Z2dlci9kdGVzdC5jXSAKCSAgW2RlYnVnZ2VyL29ic3RhY2suaF0KCVVwZGF0ZXMgdG8gYWxsb3cgZGVidWdnZXIgdG8gZnVuY3Rpb24gdW5kZXIgTmV0QlNELgoKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciB3aW5kb3dzIHdpdGggbm8gYm9yZGVycy4gIEFkZGVkCiAJR2V0UGFyZW50KCksIEdldERsZ0N0cmxJRCgpLCBHZXRXaW5kb3dUZXh0KCkgYW5kCglHZXRXaW5kb3dUZXh0TGVuZ3RoKCkgZnVuY3Rpb25zLgoKCSogW21pc2MveHQuY10KCUFkZGVkIHByb2Nlc3Npbmcgb2YgV01fR0VUVEVYVCBhbmQgV01fR0VUVEVYVExFTkdUSCBtZXNzYWdlcwoJdG8gRGVmV2luZG93UHJvYyBhbmQgSW1wbGVtZW50ZWQgTWVzc2FnZUJlZXAoKS4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglBZGRlZCBwcmVsaW1pbmFyeSBzeXN0ZW0gY29sb3Igc3VwcG9ydC4KCgkqIFtjb250cm9scy9idXR0b24xLmNdCglNb2RzIHRvIG5ldyBidXR0b24gY29udHJvbCBhbmQgaW50ZWdyYXRpb24gd2l0aCBXaW5lLgoKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBKb2hhbm5lcyBSdXNjaGVpbnNraQoKCSogW2NvbnRyb2xzL2J1dHRvbjEuY10KCU5ldyBidXR0b24gY29udHJvbCB1c2luZyBHREkgZnVuY3Rpb25zLgoJClR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtkZWJ1Z2dlci8qXQoJQWRkZWQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyB0byBXaW5lCgpTYXQgU2VwIDI1IDEzOjIyOjUwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGRpLmVwZmwuY2gpCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUJ1ZyBmaXgKCkZyaSBTZXAgMjQgMDc6MzU6MTEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlZCB0aGUgZW50cnkgcG9pbnQgY29kZSB0byByZWR1Y2UgdGhlIHN0YW5kYXJkIGVudHJ5Cglwb2ludCBzaXplIGZyb20gMjIgYnl0ZXMgdG8gMTAgYnl0ZXMuICBUaGlzIGxlYXZlcyBhYm91dAoJNDAwMCBmcmVlIGVudHJ5IHBvaW50cyBpbnN0ZWFkIG9mIHRoZSA4MDAgaW4gdmVyc2lvbiAwLjQuMi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJld3JvdGUgZnVuY3Rpb25zIHRvIGFsbG93IGxvYWRpbmcgb2YgcmVzb3VyY2VzIGZyb20gYW55CglETEwuCgoJKiBbbG9hZGVyL3dpbmUuY10gW2luY2x1ZGUvd2luZS5oXQoJQWRkZWQgZnVuY3Rpb25zIEdldEZpbGVuYW1lRnJvbUluc3RhbmNlKCkgYW5kIEdldEZpbGVJbmZvKCkKCXRvIHNlYXJjaCBmb3IgYSBsb2FkZWQgZmlsZSBiYXNlZCBvbiBpdHMgaW5zdGFuY2UgaGFuZGxlLgoJQWRkZWQgYSBmaWVsZCBpbiBzdHJ1Y3Qgd19maWxlcyB0byBtYWtlIHNlYXJjaGluZyBieSBhbiBpbnN0YW5jZQoJaGFuZGxlIGZhc3Rlci4KClR1ZSBTZXAgMjEgMDk6NTc6MDEgMTk5MyAgbWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14IChNaWd1ZWwgZGUgSWNhemEpCgoJKiBbbWlzYy9wcm9maWxlLmNdCglJbXBsZW1lbnRhdGlvbiBvZiAuSU5JIGZpbGUgaGFuZGxpbmcKCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFttaXNjL3Byb2ZpbGUuYy5vbGRdCglJbXBsZW1lbnRhdGlvbiBvZiAuSU5JIGZpbGUgaGFuZGxpbmcKCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtjb250cm9scy9XaW5CdXR0b24uY10KCUJ1ZyBmaXggd2l0aCBjYWxsIHRvIFh0VmFTZXRWYWx1ZXMuCgpNb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW3dpbmRvd3Mvd2luLmNdCglRdWljayBwYXRjaCB0byBnZXQgY29sb3JtYXBzIHRvIHdvcmsgd2l0aCBidXR0b24gd2lkZ2V0LgoKTW9uIFNlcCAyMCAwMjo0Mjo1NCAxOTkzICAgICh5bmd2aUBoYWZyby5pcykKCgkqIG1pc2Mva2V5Ym9hcmQuYzogCglJZmRlZmVkIG91dCBzb21lIGJvZ3VzIEFuc2k8LT5PZW0gY29udmVyc2lvbiBmdW5jdGlvbnMKCgkqIG1pc2MvbHN0ci5jOiAKCU5ldyBmaWxlIHdpdGggc3RyaW5nIGZ1bmN0aW9ucyBsaWtlIGxzdHIqIElzQ2hhciogKkFuc2kqIAoKV2VkIFNlcCAxNSAyMDozNToxMCAxOTkzICBKb2huIEJyZXphawoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGl0aW9uYWwgY2hhbmdlcyB0byBzdXBwb3J0IE5ldEJTRC4KCldlZCBTZXAgMTUgMjI6MTk6MjIgMTk5MyAgTWFydGluIEF5b3R0ZQoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIEZyYW1lUmVjdCBmdW5jdGlvbgoKVHVlIFNlcCAxNCAxMzo1NDo0NSAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHByaXZhdGUgY29sb3IgbWFwLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUltcGxlbWVudGVkIENTX0NMQVNTREMgc3R5bGUuCgoJKiBbd2luZG93cy9kY2UuY10KCU1vdmVkIERDRXMgdG8gVVNFUiBoZWFwLgoJSW1wbGVtZW50ZWQgY2xhc3MgYW5kIHdpbmRvdyBEQ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJSW1wbGVtZW50ZWQgQ1NfREJMQ0xLUyBzdHlsZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4IGluIFNldFBpeGVsKCkuCgoJKiBbd2luZG93cy93aW4uY10JCglJbXBsZW1lbnRlZCBDU19PV05EQyBzdHlsZS4KCUltcGxlbWVudGVkIEdldC9TZXRXaW5kb3dMb25nKCkuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9jbGlwcGluZy5jXSAKCSAgW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvd2luLmNdCQoJTW92ZWQgd2luZG93cyBmcm9tIGdsb2JhbCBoZWFwIHRvIFVTRVIgaGVhcC4KCk1vbiBTZXAgMTMgMDU6MDA6MTEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtNYWtlZmlsZV0gW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFtzZWxlY3Rvci5jXQoJICBbbG9hZGVyL3dpbmUuY10gW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBhYmlsaXR5IHRvIGdlbmVyYXRlIG1pc3NpbmcgZnVuY3Rpb25zIHN0YXRpc3RpY3MuCgpNb24gU2VwIDEzIDEyOjA5OjQ3IDE5OTMgIFNjb3R0IEEuIExhaXJkICAoc2NvdHRAY3VybHkpCgoJKiBbV0lOMzEtQVBQTEVUU10KCUFkZGVkIG5ldyBmaWxlLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZGVkIGRlZmluaXRpb25zIGZvciBHZXRQcm9maWxle0ludCxTdHJpbmd9IGFuZCBTZXRIYW5kbGVDb3VudC4KCgkqIFtpZjE2MzIva2V5Ym9hcmQuc3BlY10KCUNyZWF0ZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIEtleWJvYXJkIGRyaXZlciBETEwuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglBZGRlZCBrZXlib2FyZC5kbGwgdG8gbGlzdCBvZiBpbmNsdWRlZCBETExzLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBMb2FkQWNjZWxlcmF0b3JzIGRlZmluaXRpb24uCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBZGRlZCBMb2FkQWNjZWxlcmF0b3JzIHN0dWIuCgoJKiBbbWlzYy9maWxlLmNdCglDaGFuZ2VkIE9wZW5GaWxlLCBhbmQgYWRkZWQgU2V0SGFuZGxlQ291bnQgKGZvciB3aW5maWxlLmV4ZSkKCgkqIFttaXNjL2tleWJvYXJkLmNdCglBZGRlZCBrZXlib2FyZCBjb2RlLgoKCSogW21pc2MvcHJvZmlsZS5jXSBbbWlzYy94dC5jXQoJTW92ZWQgR2V0UHJpdmF0ZVByb2ZpbGUqIGNvbW1hbmRzIGhlcmUsIGFuZCBhZGRlZCBHZXRQcm9maWxlKgoJY29tbWFuZHMuCgpNb24gU2VwIDEzIDEwOjI0OjM3IDE5OTMgIEFuZHJldyBCdWxoYWsKCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUltcGxlbWVudGVkIE11bERpdigpLCBPdXRwdXREZWJ1Z1N0cmluZygpIGFuZCB3dnNwcmludGYoKQoKRnJpIFNlcCAxMCAwOToxMzozMCAxOTkzICBKb2huIEJyZXphawoKCSogWyovTWFrZWZpbGVdCglDcmVhdGVkIHBhdGNoIHRvIGFsbG93IEJTRCBtYWtlIHRvIGJ1aWxkIHdpbmUuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIE5VTEwgcG9pbnRlciByZWZlcmVuY2UuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFttaXNjL3h0LmNdCglEZWZpbmVkIEhaIHRvIGhhbmRsZSBzeXN0ZW0gc3BlY2lmaWMgdGltaW5nLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVVzZSBNX1BJIGlzIFBJCgoJKiBbb2JqZWN0cy9wYWxsZXRlLmNdCglOZXRCU0QgZG9lcyBub3QgaGF2ZSAvdXNyL2luY2x1ZGUvdmFsdWVzLmggYW5kIE1BWElOVCBpcyBJTlRfTUFYLgoKCSogW2R1bXAuY10gW2xkdC5jXSBbd2luZS5jXQoJaWZkZWYnZWQgbGludXggaGVhZGVycyBmb3IgbGludXggY29tcGlsZS4KCgkqIFtsb2FkZXIvbGR0bGliLmNdCglBZGQgTmV0QlNEIHN5c3RlbSBjYWxscyB3aGVuIGNvbXBpbGVkIG9uIHRoYXQgc3lzdGVtLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJVXNlIG1tYXAoTUFQX0FOT04sIC4uLikgZm9yIE5ldEJTRC4KCgkqIFtpZjE2MzIvY2FsbC5TXQoJRml4ZWQgc2VsZWN0b3IgYXNzdW1wdGlvbnMuCgpUaHUgU2VwIDkgMjA6MDE6MzcgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFtjb250cm9scy9XaW5CdXR0b24qXSBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy93aWRnZXQuY10KICAJICBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIDNEIGJ1dHRvbiBjb250cm9sIGFuZCB0aWVkIGludG8gQ3JlYXRlV2luZG93KCkKClRodSBTZXAgIDkgMDc6MzU6MjQgMTk5MyAgU2NvdHQgTGFpcmQKCgkqIFtpZjE2MzIvc291bmQuc3BlY10KCUNyZWF0ZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIFNPVU5EIERMTC4KCgkqIFtpZjE2MzIvd2luODdlbS5zcGVjXQoJQWRkZWQgbW9yZSBmdW5jdGlvbnMgdG8gdGhlIFdJTjg3RU0gRExMIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uCgoJKiBbbWlzYy9lbXVsYXRlLmNdCglDcmVhdGVkIHN0dWJzIGZvciB0aGUgbmV3IG1hdGggZW11bGF0aW9uIGZ1bmN0aW9ucy4KCgkqIFttaXNjL3NvdW5kLmNdCglDcmVhdGVkIHN0dWJzIGZvciB0aGUgU09VTkQgRExMLgoKU3VuIFNlcCAgNSAyMTowMjoxMCAxOTkzICBKb2huIEJ1cnRvbgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9ucyBmb3IgT3BlbkZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xvcGVuLAoJYW5kIF9sd3JpdGUuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBPRl8gbWFjcm9zCgoJKiBbbWlzYy9maWxlLmNdCglJbXBsZW1lbnRlZCBPcGVuRmlsZSwgX2xjbG9zZSwgX2xyZWFkLCBfbG9wZW4gYW5kIF9sd3JpdGUuCgpGcmkgU2VwICAzIDE4OjQ3OjAzIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFt3aW5kb3dzL2RjLmNdCglCdWcgZml4CgoJKiBbb2JqZWN0cy90ZXh0LmNdCglCdWcgZml4CgpGcmkgU2VwICAzIDE4OjQ3OjAzIDE5OTMgIEJvYiBBbXN0YWR0CgogICAgICAgICogW29iamVjdHMvbGluZWRkYS5jXQogICAgICAgIEZpbmlzaGVkIExpbmVEREEoKS4KCkZyaSBTZXAgIDMgMTE6NTI6MTggMTk5MyAgQm9iIEFtc3RhZHQKCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglDaGFuZ2VkIHRvIHVzZSBDYWxsV2luZG93UHJvYygpIHJhdGhlciBkaXJlY3RseSBjYWxsaW5nIGNhbGxiYWNrLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUltcGxlbWVudGVkIFNldENhcHR1cmUoKSBhbmQgUmVsZWFzZUNhcHR1cmUoKQoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUNyZWF0ZWQgc3R1YiBmb3IgR2V0S2V5U3RhdGUoKQoKCSogW29iamVjdHMvbGluZWRkYS5jXQoJQ3JlYXRlZCBzdHViIGZvciBMaW5lRERBKCkKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNyZWF0ZWQgY2FsbGJhY2sgaGFuZGxlciBmb3IgTGluZUREQSBjYWxsYmFjayBwcm9jZWR1cmUuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDcmVhdGVkIEZyZWVQcm9jSW5zdGFuY2UoKQoKRnJpIFNlcCAgMyAwODozNjo1MiAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW2xvYWRlci9zaWduYWwuY10KCVBhdGNoIHRvIGFuZCBjb2RlIGZvciBJTlQgMUEKClRodSBTZXAgIDIgMDA6MzE6NTQgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbb2JqZWN0cy9mb250LmNdIFtvYmplY3RzL3RleHQuY10KCU1vcmUgdGV4dCBzdXBwb3J0OiBpbXBsZW1lbnRlZCBqdXN0aWZpY2F0aW9uIGFuZCB1bmRlcmxpbmluZy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdCglNb3ZlZCBsb3ctbGV2ZWwgY2xpcHBpbmcgZnVuY3Rpb25zIHRvIG9iamVjdHMvY2xpcHBpbmcuYy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIHdpbmRvdyB1cGRhdGUgcmVnaW9ucy4KCgkqIFt3aW5kb3dzL2RjLmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdCglNb3ZlZCBzb21lIGRldmljZS1pbmRlcGVuZGVudCBEQyBmdW5jdGlvbnMgdG8gb2JqZWN0cy9kY3ZhbHVlcy5jLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEludmVydFJlY3QoKSBhbmQgR2V0UGl4ZWwoKS4KClNhdCBBdWcgMjggMDg6NDA6MjMgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtpbmNsdWRlL25lZXhlLmhdIFtsb2FkZXIvd2luZS5jXQoJQWRkZWQgY29kZSB0byBoYW5kbGUgcmVsb2NhdGlvbiB0eXBlIDQuCgoJKiBbbG9hZGVyL3NpZ25hbC5oXSBbbG9hZGVyL3dpbmUuY10gW2xvYWRlci9zZWxlY3Rvci5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZG9zIGludGVycnVwdHMuCgpUaHUgMjYgQXVnIDE5OjE1OjAwIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglGaXhlZCBidWcgZGVhbGluZyB3aXRoIGxvYWRpbmcgRExMcy4KClRodSBBdWcgMjYgMTk6MjI6NDAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2ZvbnQuY10gW3dpbmRvd3MvZGMuY10KICAgICAgICBCZWdpbm5pbmcgb2YgcmVhbCBmb250IHN1cHBvcnQuCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBJbXBsZW1lbnRlZCBQYXRCbHQoKS4KCiAgICAgICAgKiBbbWVtb3J5L2dsb2JhbC5jXQogICAgICAgIENvcnJlY3RlZCBhIGJ1ZyB3aXRoIGxpbmtlZCBsaXN0IGhhbmRsaW5nIGluIEdsb2JhbEFsbG9jKCkuCgogICAgICAgICogW29iamVjdHMvYml0bWFwLmNdCiAgICAgICAgQ29ycmVjdGVkIGEgYnVnIGluIEJJVE1BUF9TZWxlY3RPYmplY3QoKS4KClR1ZSBBdWcgMjQgMTk6MjI6NDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCiAgICAgICAgKiBbY29udHJvbHMvQ29tbWFuZCpdIFtjb250cm9scy9MYWJlbCpdIFtjb250cm9sc1tNZW51QnV0dG8qXQoJICBbY29udHJvbHMvU21lTWVudUJ1dHQqXQoJQ2hhbmdlIGNvZGUgdG8gc3VwcG9ydCAmIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgaW4gbWVudSBpdGVtIHRleHQuCgpUdWUgQXVnIDI0IDE5OjIyOjQwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2luY2x1ZGUvZ2RpLmhdIFt3aW5kb3dzL2RjLmNdCglIZWF2aWx5IG1vZGlmaWVkIHRoZSBEQyBzdHJ1Y3R1cmUgZm9yIGJldHRlciBkZXZpY2UtaW5kZXBlbmRlbmNlLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBiaXRtYXAgZGltZW5zaW9ucy4KCgkqIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2RjZS5jXQoJSW1wbGVtZW50ZWQgREMgc3RhdGUgc2F2aW5nIGFuZCByZXN0b3JpbmcuCgoJKiBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgUk9QIG1vZGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgRmlsbFJlY3QoKS4KCk1vbiBBdWcgMjMgMjI6MDg6MzQgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFttaXNjL3h0LmNdCglGaXhlZCBidWcgaW4gSW52YWxpZGF0ZVJlY3QoKS4gIFNvbGl0YWlyZSBhdHRlbXB0ZWQgdG8KCWNsZWFyIHdpbmRvdyBiZWZvcmUgaXQgd2FzIHJlYWxpemVkLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQmVnYW4gcmV3cml0ZSBvZiBMb2FkQml0bWFwKCkuCgoJKiBbbG9hZGVyL3dpbmUuY10KCUZpeGVkIGNvZGUgd2hpY2ggc2V0IEFyZ3YgYW5kIEFyZ2MgZ2xvYmFsIHZhcmlhYmxlcy4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIGNvZGUgdG8gc2V0IHVwIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXQoJRml4ZWQgZXJyb3IgaW4gUFNQIHN0cnVjdHVyZS4KClR1ZSBBdWcgMTcgMjA6NDE6MTIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaW5jbHVkZS9nZGkuaF0gW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIGRldmljZSBjYXBhYmlsaXRpZXMuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIEVxdWFsUmduKCkgYW5kIENvbWJpbmVSZ24oKS4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglJbXBsZW1lbnRlZCBTYXZlL1Jlc3RvcmVWaXNSZ24oKS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBQYWludFJnbigpIGFuZCBGaWxsUmduKCkuCgoJKiBbd2luZG93cy9tYXBwaW5nLmNdCglJbXBsZW1lbnRlZCBtYXBwaW5nIG1vZGVzLgoKVHVlIEF1ZyAxMCAxNDowNzozOCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbbWlzYy9yZWN0LmNdCglJbXBsZW1lbnRlZCByZWN0YW5nbGUgQVBJIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIHJlZ2lvbnMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQ29ycmVjdGVkIGEgdHlwbyBpbiBVbnJlZ2lzdGVyQ2xhc3MoKS4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBEQyBjbGlwcGluZyBhbmQgdmlzaWJsZSByZWdpb24uCgpUdWUgQXVnIDEwIDIwOjU3OjU2IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10KCVNldE1lbnUoKSwgR2V0TWVudSgpLCBDaGVja01lbnVJdGVtKCkgaW1wbGVtZW50ZWQKClRodSBBdWcgIDUgMjI6MzM6MjIgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXQoJTWFueSBpbXByb3ZlbWVudHMgbWVudXMuICBMb2FkTWVudSgpIHNob3VsZCB3b3JrLgoKV2VkIEF1ZyAgNCAxNDo1NTozNiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbb2JqZWN0cy9kaWIuY10KICAgICAgICBTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkZXZpY2UtaW5kZXBlbmRlbnQgYml0bWFwcy4KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRtYXAuY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBiaXRtYXAgZGVwdGhzLgoKICAgICAgICAqIFtvYmplY3RzL2JydXNoLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgcGF0dGVybiBicnVzaGVzLgoKICAgICAgICAqIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgc29tZSBHREkgZ3JhcGhpY3MgcHJpbWl0aXZlcy4KClR1ZSBBdWcgIDMgMjE6MTY6NDcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS9tZW51LmhdCglDb2RlIHRvIGxvYWQgY2xhc3MgbWVudXMgZnJvbSBleGVjdXRhYmxlIGZpbGUuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUZpeGVkIHNwZWNpZmljYXRpb24gb2YgU2VuZE1lc3NhZ2UoKSBhbmQgUG9zdE1lc3NhZ2UuCgpNb24gSnVsIDI2IDIxOjUzOjI0IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2lmMTYzMi9jYWxsLlNdCglDb3JyZWN0ZWQgYSBidWcgaW4gS0VSTkVMX0luaXRUYXNrKCkuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBhIGxvdCBvZiBjb25zdGFudHMuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglDb3JyZWN0ZWQgYSBidWcgaW4gc2VnbWVudCBhbGxvY2F0aW9uIGluIENyZWF0ZVNlbGVjdG9ycygpLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBTZWxlY3RPYmplY3QoKSBmb3IgYml0bWFwcy4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglJbXBsZW1lbnRlZCBoYXRjaGVkIGJydXNoZXMgYW5kIFNlbGVjdE9iamVjdCgpLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglSZW1vdmVkIGxpbmtlZCBsaXN0IChub3QgbmVlZGVkKS4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUltcGxlbWVudGVkIHN5c3RlbSBwYWxldHRlIGNyZWF0aW9uIGFuZCBtaXNjLiBwYWxldHRlIEFQSSBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy90aW1lci5jXQoJSW1wbGVtZW50ZWQgdGltZXJzLgoKCSogW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIG1lbW9yeSBkZXZpY2UgY29udGV4dHMuCgpUdWUgSnVsIDIwIDEwOjM4OjU5IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgogICAgICAgICogW2Rvcy5jXQoJU3BsaXQgRE9TM0NhbGwoKSBvdXQgb2Yga2VybmVsLmMuICBBZGRlZCBzdXBwb3J0IGZvciBnZXQgZGF0ZQoJYW5kIHRpbWUgZnVuY3Rpb25zLgoKCSogW2NhbGwuU10KCUFkZGVkIGZ1bmN0aW9uIFJldHVybkZyb21SZWdpc3RlckZ1bmMoKSB0byBhbGxvdyBET1MgY2FsbHMKCXRvIHJldHVybiB2YWx1ZXMgaW4gcmVnaXN0ZXJzLgoKCSogW3JlZ2Z1bmMuaF0KCU1hY3JvcyB0byBhY2Nlc3MgcmVnaXN0ZXJzIHNhdmVkIG9uIHN0YWNrLgoKVHVlIEp1bCAyMCAxMDozODo1OSAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbd2luLmNdCiAgICAgICAgQ29ycmVjdGVkIGFsbG9jYXRpb24gb2YgdGhlIFdNX0NSRUFURSBkYXRhIHN0cnVjdHVyZS4KCiAgICAgICAgKiBbZGNlLmNdIFtkY2UuaF0KICAgICAgICBJbXBsZW1lbnRlZCBEQ0UgaGFuZGxpbmcuCgogICAgICAgICogW2JpdG1hcC5jXSBbYnJ1c2guY10gW2RjLmNdIFtmb250LmNdIFtnZGkuaF0gW2dkaS5zcGVjXSAKICAgICAgICAgIFtnZGlvYmouY10gW3BhbGV0dGUuY10gW3Blbi5jXQogICAgICAgIEltcGxlbWVudGVkIHRoZSBHREkgb2JqZWN0cyBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsbG9jYXRpb24uCgogICAgICAgICogW3dpbmRvd3MuaF0KICAgICAgICBBZGRlZCBzZXZlcmFsIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyBmb3IgR0RJIG9iamVjdHMuCgpNb24gSnVsIDE5IDEyOjUxOjEwIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbGR0bGliLmNdCglNb2RpZmllZCBzeXN0ZW0gY2FsbHMgdG8gbWF0Y2ggTGludXMnIG5ldyBpbnRlcmZhY2UgZm9yCgl0aGUgTERUIG1vZGlmaWNhdGlvbi4KCgkqIFt3aW4uY10KCUZpeGVkIGJ1ZyB3aXRoIFdNX0NSRUFURSBtZXNzYWdlLgoKCSogW2hlYXAuY10gW2tlcm5lbC5zcGVjXQoJQ29tcGxldGVkIGxvY2FsIGhlYXAgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCgoJKiBbZ2xvYmFsLmNdCglDcmVhdGVkIGZ1bmN0aW9uIEdsb2JhbFF1aWNrQWxsb2MoKSBmb3IgZWFzeSBhbGxvY2F0aW9uIGZyb20gRExMcwoKVHVlIEp1bCAxMyAyMDozMTozMSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2dsb2JhbC5jXQoJQ29tcGxldGVkIGdsb2JhbCBtZW1vcnkgcG9vbCBBUEkKClN1biBKdWwgMTEgMTY6NTk6NTIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbbWVzc2FnZS5jXSBbdXNlci5jXSBbdXNlci5zcGVjXSBbd2luZG93cy5oXQoJQWRkZWQgZW11bGF0aW9uIG9mIFdpbmRvd3MgbWVzc2FnZSBxdWV1ZS4KClRodSBKdWwgIDggMTk6Mjk6MjcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtidWlsZC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbY2FsbGJhY2suY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2R1bXAuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2dsb2JhbC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaGVhcC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBba2VybmVsLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtsZHQuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2xkdGxpYi5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbcmVsYXkuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3Jlc291cmNlLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGlhcmQKCSogW3NlbGVjdG9yLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlCgkqIFt1c2VyLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt3aW5lLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlIGFuZAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFt3aW50Y2wuY10gT3JpZ2luYWwgYnkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAoJdXBkYXRlcyBieSBQZXRlciBNYWNEb25hbGQgYW5kIEFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbY2FsbGJhY2suaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2RsbHMuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2hlYXAuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW25lZXhlLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtwcm90b3R5cGVzLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJRXJpYyBZb3VuZ2RhbGUKCSogW3NlZ21lbS5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdGtJbnQuaF0gT3JpZ2luYWwgYnkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCgkqIFt3aW5kb3dzLmhdIE9yaWdpbmFsIGJ5IFBldGVyIE1hY0RvbmFsZCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZCBhbmQgQm9iIEFtc3RhZHQKCSogW3dpbmUuaF0gT3JpZ2luYWwgYnkgRXJpYyBZb3VuZ2RhbGUKCSogW2tlcm5lbC5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbZ2RpLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtzaGVsbC5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdW5peGxpYi5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdXNlci5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBBbGV4YW5kcmUgSnVsbGlhcmQKCSogW3dpbjg3ZW0uc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW1dpbmRvd3MudGNsXSBPcmlnaW5hbCBieSBQZXRlciBNYWNEb25hbGQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2J1aWxkLXNwZWMudHh0XSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaWYxNjMyLlNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlCg==