LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDMxIDEwOjEzOjQ0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL21vZHVsZS5oLCBsb2FkZXIvbmUvcmVzb3VyY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTW9kaWZ5IE5FX0ZpbmRUeXBlU2VjdGlvbiBhbmQgTkVfRmluZFJlc291cmNlRnJvbVR5cGUgc28gYXMgdG8gYmUKCXVzYWJsZSBieSB0aGUgVkVSU0lPTiBjb2RlLgoKCSogaW5jbHVkZS9wZV9pbWFnZS5oLCBsb2FkZXIvcGVfcmVzb3VyY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgR2V0UmVzRGlyRW50cnlBIGZvciB1c2UgYnkgdGhlIFZFUlNJT04gY29kZS4KCgkqIG1pc2MvQXR0aWMvdmVyLmMsIG1pc2MvTWFrZWZpbGUuaW46CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlbW92ZWQgb2xkIFZFUi5ETEwgY29kZS4KCgkqIGRsbHMvdmVyc2lvbi8uY3ZzaWdub3JlLCBkbGxzL3ZlcnNpb24vTWFrZWZpbGUuaW4sIGRsbHMvdmVyc2lvbi9pbmZvLmMsIGRsbHMvdmVyc2lvbi9pbnN0YWxsLmMsIGRsbHMvdmVyc2lvbi9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRhdGlvbiBvZiBWRVJTSU9OLkRMTC4gQmFzZWQgb24gb2xkIG1pc2MvdmVyLmMuCgktIEFjY2Vzc2luZyBQRSB2ZXJzaW9uIGluZm8gcmVzb3VyY2VzIHNob3VsZCB3b3JrIGNvcnJlY3RseSBub3cuCgktIEZpeGVkIG1lbW9yeSBsZWFrcy4KCS0gQ2xlYW4gc2VwYXJhdGlvbiBvZiAxNi0gYW5kIDMyLWJpdCBwYXJ0cy4KCS0gTWlub3IgYnVnZml4ZXMuCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvTWFrZWZpbGUuaW46CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZCBuZXcgc3ViZGlyZWN0b3JpZXMgZGxscy92ZXIgYW5kIGRsbHMvdmVyc2lvbi4KCgkqIGlmMTYzMi92ZXIuc3BlYywgZGxscy92ZXIvLmN2c2lnbm9yZSwgZGxscy92ZXIvTWFrZWZpbGUuaW4sIGRsbHMvdmVyL3ZlcjE2LmMsIGluY2x1ZGUvdmVyLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIFZFUi5ETEwuIFRodW5rcyB1cCB0byBWRVJTSU9OLkRMTC4KCgkqIG1pc2MvbHN0ci5jOiBQYXNjYWwgQ3VvcSA8Y3VvcUB2aXNhbi5pbnJpYS5mcj4KCUlzQ2hhckFscGhhMzJBOiB1c2UgbG9vay11cCB0YWJsZSBmcm9tIG9sZTJubHMuYy4KCgkqIG9sZS9vbGUybmxzLmM6IFBhc2NhbCBDdW9xIDxjdW9xQHZpc2FuLmlucmlhLmZyPgoJTENNYXBTdHJpbmczMkE6IEltcGxlbWVudGVkIGZsYWdzIE5PUk1fSUdOT1JFTk9OU1BBQ0UgYW5kCglOT1JNX0lHTk9SRVNZTUJPTFMgaW4gc3RyaW5nIG1hcHBpbmcgbW9kZS4KCgkqIHdpbmRvd3MveDExZHJ2L3duZC5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUNyZWF0ZSBYIHdpbmRvdyBmb3IgY2hpbGQgd2luZG93cyByZXBhcmVudGVkIHRvIGJlIHRvcCBsZXZlbCB3aW5kb3dzLgoKCSogZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBpbmNsdWRlL3NoZWxsLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIGZvciBQYXRoUXVhbGlmeTMyW0F8V10uCgoJKiBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kZHJhdy5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglCYWJyaWFuIFZpa3RvciA8dkB1bHlzc2VzLnNjaC5ibWUuaHU+CgktIGFkZGVkIHN1cHBvcnQgZm9yIENvbG9yS2V5aW5nIGR1cmluZyBibGl0cwoJLSBtaXNjZWxsYW5lb3VzIGZpeGVzCgoJKiBkbGxzL250ZGxsL3J0bC5jLCBpbmNsdWRlL250ZGxsLmgsIHJlbGF5MzIvbnRkbGwuc3BlYzoKCUFsZXggS29yb2JrYSA8a29yb2JrYUBnYWxheHkuYW1zLnN1bnlzYi5lZHU+CglBZGRlZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBNUlNXIGxvY2tzLgoKCSogbXNkb3MvaW50MjEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBtaXNzaW5nIGluY2x1ZGVzICh0aGUgUFNQIGhhbmRsaW5nIHdhcyBpbmNvcnJlY3QsIGFzIHRoZQoJTVpfU1VQUE9SVEVEIGRlZmluaXRpb24gd2FzIG1pc3NpbmcpLiBBZGRlZCBhIHNpbXBsZSBoYW5kbGVyIGZvcgoJZGlyZWN0IGNvbnNvbGUgaW5wdXQsIHdoaWNoIG5lZWRzIHRvIGJlIGltcHJvdmVkLgoKCSogY29uc29sZS90dHkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTbWFsbCBmaXguCgoJKiBzY2hlZHVsZXIvc3luY2hyby5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUxpc3QgaGFuZGxlcyBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGlzIHdhaXRpbmcgZm9yIHdoZW4gcnVubmluZyB3aXRoCgktZGVidWdtc2cgK3dpbjMyLgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgZm9yIEdldFNlY3VyaXR5RGVzY3JpcHRvckNvbnRyb2wuCgoJKiByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL3VzZXIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBmb3IgR2V0VXNlck9iamVjdFNlY3VyaXR5LgoKCSogbWlzYy9yZWdpc3RyeS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIGhhbmRsaW5nIG9mIFJFR19NVUxUSV9TWiBhbmQgZml4ZWQgc21hbGwgYnVnIGluCglSZWdTZXRWYWx1ZS4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUV2ZXJ5IEVNX0dFVExJTkUgc2VuZCBiZXR3ZWVuIGEgMzJXIHRvIGEgMzJBIHdpbmRvdyByZXR1cm5lZAoJaW5jb21wbGV0ZSB2YWx1ZXMgYmVmb3JlICh0aGUgZmlyc3QgMiBjaGFycyB3aGVyZSBjdXQgYXdheSkuCgoJKiB3aW5kb3dzL3dpbnBvcy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCB0eXBvIGluIFNldFdpbmRvd1BvczMyLgoKU2F0IEphbiAzMCAxNTo1NToyOCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9idWlsdGluMzIuaCwgbWlzYy9tYWluLmMsIHJlbGF5MzIvYnVpbHRpbjMyLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVuYWJsZS9kaXNhYmxlIHJlbGF5MzIgZGVidWdnaW5nIG9uIHRoZSBmbHkuIFN0YXJ0IGFwcCB3aXRoCgktZGVidWdtc2cgK3JlbGF5IG9yIHdhcm4rcmVsYXkuIFN1Z2dlc3RlZCBieSBKdWVyZ2VuIFNjaG1pZWQuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZ3JhcGhpY3MvZDNkX3ByaXZhdGUuaCwgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL3dpbmVfZ2wuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBNZXNhJ3MgaGVhZGVyIGZpbGVzLgoKCSogbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgZXJyb3IgbWVzc2FnZXMuCgoJKiBtaXNjL2NvbW1kbGcuYzogQmVybmQgSGVyZCA8aGVyZEBoZXJkc29mdC5jb20+CglVc2UgcHJvcGVyIDE2LT4zMiBtZXNzYWdlIGNvbnZlcnNpb24gaW4gRklMRURMR19DYWxsV2luZG93UHJvYy4KCgkqIHdpbmRvd3MveDExZHJ2L3duZC5jOiBCZXJuZCBIZXJkIDxoZXJkQGhlcmRzb2Z0LmNvbT4KCVNldFBhcmVudCBzaG91bGQgbGluayB0aGUgd2luZG93IGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdC4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJSW4gV2luZG93IFNldFdpbmRvd1BvcyB3aXRoIFNXUF9ISURFV0lORE9XIGRvZXMgbm90IHJlbW92ZQoJdGhlIGZvY3VzIGZyb20gdGhlIGZvY3VzIHdpbmRvdzsgU2hvd1dpbmRvdyB3aXRoIFNXX0hJREUgZG9lcy4KCVNvIG1vdmUgdGhlIGNvZGUgdGhhdCBkb2VzIHRoaXMgZnJvbSBTZXRXaW5kb3dQb3MgdG8gU2hvd1dpbmRvdy4KCgkqIG1lbW9yeS9zdHJpbmcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGVjayBmb3IgTlVMTCBpbiBsc3RyY3B5KiAoV2luZG93cyB1c2VzIHJlYWwgZXhjZXB0aW9uIGhhbmRsZXJzKS4KCgkqIE1ha2VmaWxlLmluOiBKYW1lcyBKdXJhbiA8anVyYW5AY3NlLnBzdS5lZHU+CglEb24ndCBpbnN0YWxsIGluY2x1ZGUgZmlsZXMgd2hlbiAtLWRpc2FibGUtbGliIGlzIHVzZWQuCgoJKiByZWxheTMyL3dpbm1tLnNwZWM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBXSU5NTSBqb3kqIC5zcGVjIGVudHJpZXMuCgoJKiBtc2Rvcy94bXMuYzogQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJWE1TIGZpeC4KCgkqIG1zZG9zL2Rvc21lbS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU3BlbGxpbmcgZml4LgoKCSogUkVBRE1FOiBBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglEb2MgdXBkYXRlLgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL2ludDEwLmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludGVycnVwdHMuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNvbWUgaW50ZXJydXB0IGVuaGFuY2VtZW50cy4KCgkqIG1zZG9zL2lvcG9ydHMuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCWltcGxlbWVudGVkIHRpbWVyIGxhdGNoaW5nCgl0cmFjZSBtZXNzYWdlIGZpeAoJdGVtcG9yYXJ5ICJmaXgiIGZvciBMaW51eCdzIGNvYXJzZSB0aW1lciByZXNvbHV0aW9uCgoJKiBpZjE2MzIvY29tcG9iai5zcGVjLCBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBvbGUvY29tcG9iai5jLCBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCB0aGUgc3RhcnR1cC1zaHV0ZG93biBtZWNoYW5pc20gZm9yIHRoZSBDT00gc3Vic3lzdGVtLgoJSW1wbGVtZW50ZWQgdGhlIENsYXNzIG9iamVjdCByZWdpc3RyYXRpb24gbWVjaGFuaXNtLgoKCSogcHJvZ3JhbXMvY2xvY2svLmN2c2lnbm9yZSwgcHJvZ3JhbXMvbm90ZXBhZC8uY3ZzaWdub3JlOiBBZGRlZCBGaS5zCgoJKiBpbmNsdWRlL3dpbmUvb2JqX3N0b3JhZ2UuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvc3RnX2JpZ2Jsb2NrZmlsZS5jLCBvbGUvc3RnX3N0cmVhbS5jLCBvbGUvc3RvcmFnZS5jLCBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaCwgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIE9MRSBzdHJ1Y3R1cmVkIHN0b3JhZ2UuIFRoZSBtYWluCglmZWF0dXJlcyBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGFyZToKCS0gQ2FuIG9wZW4gc3RvcmFnZXMgY3JlYXRlZCBpbiBXaW5kb3dzLgoJLSBDYW4gY3JlYXRlIG5ldyBzdG9yYWdlcyB0aGF0IHRoZSB3aW5kb3dzIGxpYnJhcmllcyBjYW4KCSAgcmVhZC4KCS0gUHJvdmlkZXMgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNyZWF0ZS9vcGVuL3JlbW92ZSBhbmQKCSAgcmVuYW1lIHN0cmVhbXMgYW5kIHN0b3JhZ2VzIGluc2lkZSB0aGUgbWFpbiBzdG9yYWdlIG9iamVjdC4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBtaXNjZW11L21haW4uYywgZ3JhcGhpY3MvZGRyYXcuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRGVmaW5lZCBSRVNUT1JFX1NJR05BTFMgYnkgZGVmYXVsdCBhbmQgY2FsbCBTSUdOQUxfRW11bGF0b3JJbml0Cgl0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBpbnN0ZWFkLiBBZGRlZCBhIGZldyB0cmFjZXMuIEZpeGVkIHRoZQoJIk1lbW9yeSBjb3JydXB0aW9uICEiIG1lc3NhZ2UgaW4gREdBIG1vZGUuIENvbW1lbnRlZCBvdXQgYW4KCXVubmVjZXNzYXJ5IFRTWEY4NlZpZE1vZGVTZXRWaWV3UG9ydCB0aGF0IGNhdXNlZCBteSBYIHNlcnZlciB0bwoJYWN0IHVwLCByZWx5aW5nIG9uIFRTWEY4NkRHQVNldFZpZXdQb3J0IGluc3RlYWQuCgoJKiBncmFwaGljcy9wc2Rydi90ZXh0LmMsIG1zZG9zL2ludDJmLmMsIHByb2dyYW1zL3dpbmhlbHAvaGxwMnNnbWwuYywgZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmMsIGZpbGVzL2ZpbGUuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBtb3JlIHdhcm5pbmdzIGFuZCBidWdzIGZpeGVkLgoKCSogZGxscy9jb21jdGwzMi90YWIuYywgaW5jbHVkZS90YWIuaDogQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCVNtYWxsIHVwZGF0ZS4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS90cmVldmlldy5oLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIGRsbHMvc2hlbGwzMi9icnNmb2xkZXIuYzoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CgktIFRoZSB1c3VhbCBidWdmaXhlcy4KCS0gQmV0dGVyIHVuaWNvZGUgc3VwcG9ydCAob25seSBkZWZpbmVzLCBjdXJyZW50bHkpCgktIERyYWcgJiBkcm9wIGltcGxlbWVudGVkLgoJLSBMUFNUUl9URVhUQ0FMTEJBQ0sgc2hvdWxkIHdvcmsgbm93LgoJLSBGaXJzdCBzdGFydCBhdCBjdXN0b20gZHJhdyBjb2RlLgoKCSogd2luZG93cy94MTFkcnYvZXZlbnQuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJTWFrZSBzdXJlIHRoYXQgdGhlIGtleXN0YXRlIHJlY2VpdmVkIGJ5IHRoZSBXTV9YQlVUVE9OVVAgYW5kCglXTV9YQlVUVE9ORE9XTiBtYXRjaGVzIHRoZSBtZXNzYWdlLiBJbiBYLCB0aGUga2V5c3RhdGUgaXMgY2hhbmdlZAoJYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcHJvY2Vzc2VkLiAgSW4gV2luZG93cywgaXQgaXMgY2hhbmdlZCBiZWZvcmUuCgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIGRsbHMvYWR2YXBpMzIvc2VydmljZS5jOgoJTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCURvYyB1cGRhdGVzLgoKCSogd2luMzIvZmlsZS5jOiBCZXJlbmQgUmVpdHNtYSA8YmVyZW5kIGF0IGFzc2V0LWNvbnRyb2wuY29tPgoJU2V0RmlsZUF0dHJpYnV0ZXMzMkEgY2hhbmdlZCB0byBtYWtlIGZpbGUgd3JpdGVhYmxlIHdoZW4KCUZJTEVfQVRUUklCVVRFX1JFQURPTkxZIGlzIG5vdCBzZXQuCgoJKiBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL25jdXJzZXMuYywgaW5jbHVkZS9jb25zb2xlLmgsIG1zZG9zL2ludDEwLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVByZWxpbWluYXJ5IGNvbG9yIGNvbnNvbGUgc3VwcG9ydC4KCgkqIGRvY3VtZW50YXRpb24vbGFuZ3VhZ2VzLCBwcm9ncmFtcy9jbG9jay9DaGFuZ2VMb2csIHByb2dyYW1zL2Nsb2NrL0ZpLnJjLCBwcm9ncmFtcy9jbG9jay9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvY2xvY2svbWFpbi5jLCBwcm9ncmFtcy9ub3RlcGFkL0NoYW5nZUxvZywgcHJvZ3JhbXMvbm90ZXBhZC9GaS5yYywgcHJvZ3JhbXMvbm90ZXBhZC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvbm90ZXBhZC9tYWluLmMsIHJlc291cmNlcy9zeXNyZXNfRmkucmM6CglKdWtrYS1QZWtrYSBJaXZvbmVuIDxqaWl2b25lbkBwb3NlaWRvbi5jcy5odXQuZmk+CglVcGRhdGVkIEZpbm5pc2ggbGFuZ3VhZ2Ugc3VwcG9ydC4KCkZyaSBKYW4gMjkgMTU6MTI6MTEgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvdmZ3LmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBtdWx0aW1lZGlhL21zdmlkZW8uYywgb2xlL2d1aWQuYywgcHJvZ3JhbXMvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2F2aXRvb2xzLy5jdnNpZ25vcmUsIHByb2dyYW1zL2F2aXRvb2xzL01ha2VmaWxlLmluLCBwcm9ncmFtcy9hdml0b29scy9pY2luZm8uYywgcmVsYXkzMi9tc3ZmdzMyLnNwZWMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvb2xlYXV0by5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVcGRhdGVkIG1zdmlkZW8uIE5ldyBwcm9ncmFtICdpY2luZm8gWy1hYm91dF0gWy1jb25maWd1cmVdJyB0bwoJcXVlcnkgaW5zdGFsbGVkICh3aW4zMikgY29tcHJlc3NvcnMuIFN0YXJ0ZWQgb24gQVZJRklMRSBzdXBwb3J0LgoKVGh1IEphbiAyOCAxNzo1NjoxNCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS93aW5lL29ial9taXNjLmgsIGluY2x1ZGUvd2luZS9vYmpfbW9uaWtlci5oLCBpbmNsdWRlL3dpbmUvb2JqX3N0b3JhZ2UuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvYmluZGN0eC5jLCBvbGUvZmlsZW1vbmlrZXIuYywgb2xlL2l0ZW1tb25pa2VyLmMsIG9sZS9tb25pa2VyLmMsIG9sZS9vbGUyLmM6CglOb29tZW4gSGFtemEgPG5vb21lbkBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBmb3IgRmlsZU1vbmlrZXIsIEl0ZW1Nb25pa2VyIGFuZCBCaW5kQ3R4CgljbGFzc2VzLgoKCSogZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL2RlYnVnLmw6CglORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUltcGxlbWVudGVkIHRoZSBzeW1ib2xmaWxlIGNvbW1hbmQgKGFzIG1lbnRpb25lZCBieSB0aGUgaGVscAoJY29tbWFuZCkuIFRoaXMgcmVhZHMgYSBzeW1ib2wgZmlsZSBpbiB0aGUgZm9ybWF0IGdlbmVyYXRlZCBieSBubS4KCgkqIG11bHRpbWVkaWEvZHBsYXkuYzogUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbG5ldHdvcmtzLmNvbT4KCS0gU21hbGwgYnVnIGZpeC4KCS0gQWRkZWQgZGlyZWN0IHBsYXkgYXNjaWkgaW50ZXJmYWNlcy4KCS0gRml4ZWQgdXAgdGhlIFF1ZXJ5SW50ZXJmYWNlIGZvciBkcGxheSBhbmQgZHBsYXlsb2JieSB0byBoYW5kbGUgYWxsIGNhc2VzLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBGSUxFX1ZJRVcgc3RydWN0IGluaXRpYWxpc2F0aW9uLgoKCSogaW5jbHVkZS9kb3NleGUuaDoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIG5vbi1pMzg2IGNvbXBpbGUuCgoJKiBncmFwaGljcy92Z2EuYywgbXNkb3MvZHBtaS5jLCBtdWx0aW1lZGlhL2RwbGF5LmMsIG11bHRpbWVkaWEvbW1pby5jLCBkbGxzL2NvbWN0bDMyL2FuaW1hdGUuYywgZGxscy9jb21jdGwzMi9jb21ib2V4LmMsIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jLCBkbGxzL2NvbWN0bDMyL2hvdGtleS5jLCBkbGxzL2NvbWN0bDMyL2lwYWRkcmVzcy5jLCBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmMsIGRsbHMvY29tY3RsMzIvcGFnZXIuYywgZGxscy9jb21jdGwzMi9wcm9wc2hlZXQuYywgZGxscy9jb21jdGwzMi9yZWJhci5jLCBkbGxzL2NvbWN0bDMyL3RhYi5jLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYywgZGxscy9jb21jdGwzMi90cmVldmlldy5jOgoJSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJQ29tbWVudGVkIG91dCB1bnVzZWQgdmFyaWFibGVzIHRvIHByZXZlbnQgbmVlZGxlc3MgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBpbmNsdWRlL2RkZW1sLmgsIG1pc2MvZGRlbWwuYzoKCUtlaXRoIE1hdHRoZXdzIDxrZWl0aF9tQHN3ZWVuZXkuZGVtb24uY28udWs+Cgkxc3QgY3V0IGltcGxlbWVudGF0aW9uIG9mIERkZUluaXRpYWxpemUzMlcgYW5kIHN1cHBvcnRpbmcgY29kZS4KCgkqIGRsbHMvYWR2YXBpMzIvYWR2YXBpLmMsIGRsbHMvYWR2YXBpMzIvZXZlbnRsb2cuYywgZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCBkbGxzL2FkdmFwaTMyL3NlcnZpY2UuYzoKCU1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CglEb2N1bWVudGF0aW9uIHN0YW5kYXJkaXphdGlvbnMuCgoJKiBpbmNsdWRlL3F1ZXVlLmgsIHdpbmRvd3MvaG9vay5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CgktIE1hZGUgdGhlIG1lc3NhZ2UgcXVldWUgYWNjZXNzIHRvIGJlIHRocmVhZCBzYWZlLiAoVXNpbmcgdHdvIG5ldwoJICBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBtZXNzYWdlIHF1ZXVlLCBRVUVVRV9Mb2NrKCksIFFVRVVFX1VubG9jaygpCgkgIGluc3RlYWQgb2YgR2xvYmFsTG9jazE2KCkpLgoJLSBGaXhlZCBRVUVVRV9EdW1wUXVldWUgKHVzZWQgYnkgImluZm8gcXVldWUgPGhhbmRsZT4iIHdpdGggdGhlCgkgIHdpbmUtZGVidWdnZXIpLgoKCSogbXVsdGltZWRpYS9kc291bmQuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBvYmplY3RzL3RleHQuYywgd2luZG93cy9kaWFsb2cuYywgd2luZG93cy9kaW5wdXQuYywgd2luZG93cy9tZGkuYywgd2luZG93cy9tc2dib3guYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wcm9jLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMsIGlmMTYzMi9yZWxheS5jLCBpbmNsdWRlL3dpbmNvbi5oLCBsb2FkZXIvcmVzb3VyY2UuYywgbWlzYy9pbW0uYywgbWlzYy9semV4cGFuZC5jLCBtc2Rvcy9pbnQyMS5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBkbGxzL250ZGxsL3J0bC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBhIGxvdCBvZiB3YXJuaW5ncyBmb3IgcG9zc2libGUgcHJvYmxlbXMuCgoJKiBtaXNjL2NvbW0uYzogSGVyYmVydCBSb3NtYW5pdGggPGhlcnBAd2lsZHNhdS5pZHYudW5pLWxpbnouYWMuYXQ+CglGaXhlZCB0eXBvLgoKCSogdG9vbHMvYnVnX3JlcG9ydC5wbDogQWRhbSB0aGUgSmF6eiBHdXkgPG1hZ2ljYm94QGJlc3R3ZWIubmV0PgoJRml4ZWQgdmFyaW91cyBidWdzLgoJTWFkZSBuZXdiaWUgbW9kZSBlYXNpZXIuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYywgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYywgaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBpbmNsdWRlL3dpbnVzZXIuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgR2V0SWNvbkluZm8xNiAoLnNwZWMsSUNPTklORk8gc3RydWN0IGlzIGRpZmZlcmVudCBmb3IgV2luMTYvV2luMzIpLgoKCSogY29uc29sZS9uY3Vyc2VzLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3dpdGNoIG5jdXJzZXMuaC9jdXJzZXMuaCBpbmNsdWRlICh3b3JrcyBiZXR0ZXIgZm9yIEZyZWVCU0QpLgoKCSogd2luZG93cy9kcml2ZXIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBsb2FkaW5nIG9mIHdpbjMyIGRyaXZlcnMuCgpUdWUgSmFuIDI2IDE3OjI5OjQ5IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBmaWxlcy9wcm9maWxlLmM6IERvbid0IGFib3J0IFBST0ZJTEVfR2V0U2VjdGlvbiBvbiBlbXB0eSBrZXlzLgoKCSogZGxscy9tc2FjbTMyL2ludGVybmFsLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJVGVtcG9yYXJ5ICNpZiAwJ2VkIHBhcnQgZm9yIGJ1aWx0aW4gbW9kdWxlcyBpbiBNU0FDTSB0byBtYWtlIGl0Cgljb21waWxlIHdpdGggdGhlIHBhdGNoIGZvciBsb2FkYWJsZSBkcml2ZXJzLgoKCSogaW5jbHVkZS9kcml2ZXIuaCwgcmVsYXkzMi93aW5tbS5zcGVjLCB3aW5kb3dzL2RyaXZlci5jOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzdXBwb3J0IGZvciBsb2FkaW5nIGRyaXZlcnMgaW4gV2luZS4KCgkqIHRvb2xzL2J1Z19yZXBvcnQucGw6IEFkYW0gdGhlIEphenogR3V5IDxtYWdpY2JveEBiZXN0d2ViLm5ldD4KCUEgcGVybCBzY3JpcHQgdG8gcHJvZHVjZSBhIGJ1ZyByZXBvcnQgd2l0aCBsaXR0bGUgaGFzc2xlLgoKCSogZ3JhcGhpY3MvZGlzcGRpYi5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIChkdW1teSkgRGVhdGgvUmVzdXJyZWN0aW9uIGNhbGxzIHRvIERpc3BsYXlEaWIuCgoJKiBtaXNjL2x6ZXhwYW5kLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWxsb2NhdGUgYSBET1MgaGFuZGxlIGlmIHdlIG9wZW4gYSBub3JtYWwgZmlsZSB3aXRoIExaT3BlbkZpbGUxNi4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBkZXB0aCBjb252ZXJzaW9uIHJvdXRpbmVzIChvbmx5IDhicHAgLT4gMTYgYnBwIGZvciBub3cpCgktIGFkZGVkIHN1cHBvcnQgb2YgREVQVEhfRklMTCBmb3IgQmxpdHMKCS0gYWRkZWQgc29tZSBmbGFncyBpbiBHZXRDYXBzIHRvIGdldCBzb21lIGdhbWVzIHdvcmtpbmcKCgkqIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgaW5jbHVkZS93aW51c2VyLmgsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCByZWxheTMyL3VzZXIzMi5zcGVjLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgR2V0SWNvbkluZm8xNiAtPiBjYWxsIHRvIEdldEljb25JbmZvMzIuCgoJKiBzY2hlZHVsZXIvY2xpZW50LmM6IENvbW1lbnRlZCBvdXQgRVhFQ19TRVJWRVIKCgkqIGRsbHMvY29tY3RsMzIvZHJhZ2xpc3QuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkzIG1pc3NpbmcgV0lOQVBJIGFkZGVkLgoKCSogZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NocmVzLnJjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBmaXhlcy4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgaW5jbHVkZS9jb21tY3RybC5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDaGFuZ2VkIHNvbWUgdHJlZXZpZXcgcmVsYXRlZCBkZWZpbml0aW9ucy4KCgkqIGRsbHMvc2hlbGwzMi9NYWtlZmlsZS5pbiwgZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBTSEJyb3dzZUZvckZvbGRlcigpIGRpYWxvZy4KCgkqIGRlYnVnZ2VyL21zYy5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIHR5cG8gaW4gdHlwZSAocmVtb3ZlZCBxdWl0ZSBhIGZldyB3YXJuaW5ncykuCgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgR2V0U2VjdXJpdHlEZXNjcmlwdG9yT3duZXIvR3JvdXAsIFJldmVydFRvU2VsZiBzdHVicy4KCVJldHVybiBOVUxMIGZyb20gT3BlblRocmVhZFRva2VuLgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvIG5vdCBlbmRsZXNzbHkgbG9vcCBpbiBDT05TT0xFX2dldF9pbnB1dCBhZnRlciBFT0YuCglDcmVhdGUgeHRlcm0gZXZlbiBpZiBzdGRpbiBpcyBub3QgYSB0ZXJtaW5hbGhhbmRsZS4KCVNldENvbnNvbGVDdXJzb3JQb3NpdGlvbjogT25seSBtYWtlIGNvbXBsZXggY29uc29sZSBvbiByb3cgY2hhbmdlLAoJaWdub3JlIGludGVybGluZSBwb3NpdGlvbmluZyAoc28gdGhlIGN5Z3dpbiBjbWRsaW5lIHRvb2xzIGRvIG5vdAoJY3JlYXRlIHh0ZXJtcyB1bm5lY2Vzc2FyeSkKCgkqIG1pc2MvcHJpbnRkcnYuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNYWtlIHN1cmUgRHJ2R2V0UHJpbnRlckRhdGEgcmV0dXJucyB0aGUgY29ycmVjdCBkYXRhIGlmIGNiRGF0YSA8PSAxCgoJKiBpbmNsdWRlL3F1ZXVlLmgsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3Mvd2luLmM6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCS0gQ2hhbmdpbmcgTUVTU0FHRVFVRVVFIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gVWxyaWNoIHByb3Bvc2l0aW9uLgoJLSBPbmUgbWVzc2FnZSBxdWV1ZSBmb3IgZXZlcnkgdGhyZWFkIG5lZWRpbmcgaXQuCgktIE1lc3NhZ2VzIGluIHRoZSBtZXNzYWdlIHF1ZXVlIGFyZSBub3cgc3RvcmVkIGluIGEgbGlua2VkIGxpc3QKCS0gTWVzc2FnZXMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgc3lzdGVtIGhlYXAuCgktIE1lc3NhZ2VzIGluIHRoZSBtZXNzYWdlIHF1ZXVlIGFyZSAzMiBiaXRzIChNU0czMikuCgktIEFsbCByZWFkL3dyaXRlIG9wZXJhdGlvbnMgcmVnYXJkaW5nIG1lc3NhZ2VzIGluIHRoZSBtZXNzYWdlIHF1ZXVlIGFyZQoJICB0aHJlYWQgc2FmZS4KClN1biBKYW4gMjQgMTk6MTQ6NTggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgZGxscy9jb21jdGwzMi9mbGF0c2IuYywgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYywgZGxscy9jb21jdGwzMi9saXN0dmlldy5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBkbGxzL2NvbWN0bDMyL3N0YXR1cy5jLCBpbmNsdWRlL2ZsYXRzYi5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHNldmVyYWwgYnVncyBhbmQgdHlwb3MuCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVVwZGF0ZXMgYW5kIGZpeGVzLgoKCSogZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9kcmFnbGlzdC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglOZXcgZHJhZyBsaXN0IGNvbnRyb2wuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHBvaW50ZXIgYnVncyBpbiBEUEFfSW5zZXJ0UHRyKCkgYW5kIERQQV9EZWxldGVQdHIoKS4KCgkqIGRsbHMvY29tY3RsMzIvcHJvZ3Jlc3MuYywgaW5jbHVkZS9wcm9ncmVzcy5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIFdNX1tHL1NdRVRGT05UIGhhbmRsaW5nLgoKCSogZGxscy9jb21jdGwzMi9wYWdlci5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgV01fQ09NTUFORCBhbmQgV01fTk9USUZZIGhhbmRsaW5nLgoKCSogZGxscy9jb21jdGwzMi90b29sdGlwcy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgcmVkcmF3IGJ1ZyBmb3IgdHJhY2tpbmcgdG9vbHRpcHMuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBzb21lIG1lc3NhZ2VzIHRvIHRoZSByZWJhciBjb250cm9sLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogR2VvZmYgQ2xhcmUgPGd3Y0Byb290LmNvLnVrPgoJU2V2ZXJhbCBpbnRlcm5hbCBmdW5jdGlvbnMgd29uJ3QgY29tcGlsZSB3aGVuIHRoZSBjb25kaXRpb25hbAoJI2lmIGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykKCWNvbWVzIG91dCBmYWxzZS4gIEkgbW92ZWQgdGhlIGNvbmRpdGlvbmFscyBhcm91bmQgc28gdGhhdAoJdGhlIGZpbGUgd291bGQgYXQgbGVhc3QgY29tcGlsZS4gIE5vdCBzdXJlIGlmIGl0IGRvZXMgdGhlCglyaWdodCB0aGluZyBvbiBub24tbGludXgvRnJlZUJTRC9OZXRCU0Qgc3lzdGVtcy4KCgkqIG1pc2MvdG9vbGhlbHAuYzogR2VvZmYgQ2xhcmUgPGd3Y0Byb290LmNvLnVrPgoJTW92ZWQgcHJvY2Vzcy5oIGhpZ2hlciB1cCB0aGUgaW5jbHVkZSBsaXN0LCB0byBhdm9pZCBhIHByb2JsZW0gd2l0aAoJIkVSUiIgYmVpbmcgcmVkZWZpbmVkIGluIHN5cy9yZWdzZXQuaC4KCgkqIG1pc2MvY29tbS5jOiBHZW9mZiBDbGFyZSA8Z3djQHJvb3QuY28udWs+CglUaGUgQjU3NjAwIGFuZCBCMTE1MjAwIHN5bWJvbHMgYXJlIG5vdCBkZWZpbmVkIGluIFVuaXh3YXJlLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUNoYW5nZSBTV18/Pz8gb3B0aW9ucyBvbiBsaXN0IGJveCBzY3JvbGxpbmcgc28gdGhhdCB0aGV5IG1hdGNoIHdoYXQKCVdpbmRvd3MgZG9lcy4KCgkqIGxvYWRlci9kb3MvZG9zdm0uYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNb3ZlZCBET1MgaGFuZGxlIGFsbG9jYXRpb24gc2xpZ2h0bHksIHRvIGZpeCBwb3RlbnRpYWwgbWVtb3J5CglsZWFrcyBhbmQgbG9zdCBoYW5kbGVzLiBBbHNvIHJlbW92ZWQgc29tZSB1c2VsZXNzIGluaXQgY29kZS4KCgkqIGdyYXBoaWNzL3BzZHJ2L2FmbS5jLCBncmFwaGljcy9wc2Rydi90ZXh0LmMsIGlmMTYzMi9kdW1teS5jLCBpZjE2MzIvZ2RpLnNwZWMsIG1pc2MvcHJpbnRkcnYuYzoKCU5pY2sgSG9sbG93YXkgPE5pY2suSG9sbG93YXlAYWxmaWUuZGVtb24uY28udWs+CglJbnRlcm5hbCBQb3N0U2NyaXB0IHByaW50ZXIgZHJpdmVyIGltcHJvdmVtZW50cy4KCgkqIGNvbnRyb2xzL2VkaXQuYzogR2VyYXJkIFBhdGVsIDxHLlBhdGVsQHdhbmFkb28uZnI+CglDaGFuZ2VkIEVESVRfRU1fQ2hhckZyb21Qb3MgdG8gcmV0dXJuIGxpbmUgbnVtYmVyLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRnJlZSB0aGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIsIFRIRU4gc2V0IGl0IHRvIE5VTEwuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNaXNzaW5nIFdJTkFQSS4KCgkqIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIG9sZS9NYWtlZmlsZS5pbiwgb2xlL3NhZmVhcnJheS5jLCByZWxheTMyL29sZWF1dDMyLnNwZWM6CglTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2FmZUFycmF5IGZhbWlseSBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaCwgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglHdXkgQWxiZXJ0ZWxsaSA8Z2FsYmVydGVAbmVvLmxydW4uY29tPgoJQWRkZWQgc3R1YiBmb3IgU2V0VGhyZWFkTG9jYWxlLgoKCSogb2JqZWN0cy90ZXh0LmM6IEd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CglGaW5pc2hlZCBHZXRUZXh0Q2hhcnNldEluZm8gcm91dGluZS4KCgkqIG9sZS9ubHMvZW51Lm5scywgb2xlL29sZTJubHMuYzoKCUd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CglGaXhlZCBGSVhNRSBpbiBFbnVtVGltZUZvcm1hdHMzMlcKCUFkZGVkIHN1cHBvcnQgZm9yIEZPTlRTSUdOQVRVUkUgaW4gR2V0TG9jYWxlSW5mbzMyQSBhbmQgdXBkYXRlZAoJR2V0TG9jYWxlSW5mbzMyVy4KCgkqIGRvY3VtZW50YXRpb24vaW50ZXJuYWwtZGxsLCBkb2N1bWVudGF0aW9uL3NoZWxsMzIsIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglQYXNjYWwgQ3VvcSA8UGFzY2FsLkN1b3FAaW5yaWEuZnI+CglGaXhlZCB0eXBvcy4KCgkqIGRlYnVnZ2VyL21zYy5jOiBTZXJnZXkgVHVyY2hhbm92IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIHNvdXJjZSBsaW5lIG1hdGNoaW5nIGZvciBmdW5jdGlvbnMgaW4gREVCVUdfUHJvY2Vzc0NvZmZEZWJ1ZzsKCXNlYXJjaGluZyBmb3IgREJHIGFuZCBQREIgZmlsZXMuCgoJKiBkZWJ1Z2dlci9oYXNoLmM6IFNlcmdleSBUdXJjaGFub3YgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4IGZvciBmaWxlcyB3aGljaCBkbyBub3QgY29udGFpbiBleHBvcnRzIChmZywgRVhFKSB0byBnZXQgcHJvY2Vzc2VkCglmb3IgZGVidWcgaW5mb3JtYXRpb24uCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi9yZWxheS5jLCBpZjE2MzIvdGh1bmsuYywgdG9vbHMvYnVpbGQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgS0VSTkVMLjYyMSAoQ0JDbGllbnRUaHVua1NMRXgpLgoKCSogZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL2RlYnVnLmwsIGRlYnVnZ2VyL2luZm8uYywgaW5jbHVkZS9tYWluLmgsIG1pc2MvbWFpbi5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBbGxvdyBzd2l0Y2hpbmcgb2ZmL29uIG9mIGRlYnVnbXNncyBpbiB0aGUgZGVidWdnZXIuCgoJKiBsb2FkZXIvbWFpbi5jLCBtaXNjZW11L2luc3RyLmMsIG1zZG9zL2Rvc21lbS5jLCBtc2Rvcy9pbnQxNS5jLCBpbmNsdWRlL21pc2NlbXUuaDoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUltcGxlbWVudGVkIEludCAweDE1LzB4YzA6IEJJT1MgLSBHRVQgQ09ORklHIGFuZCBzb21lIG90aGVyIEJJT1MKCWRhdGEuCgpTYXQgSmFuIDIzIDE0OjE1OjE3IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy9wYWludGluZy5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGxvYWRlci9wZV9pbWFnZS5jLCBtaXNjL2xzdHIuYywgd2luZG93cy9ob29rLmMsIHdpbmRvd3MvbWVzc2FnZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgV0lOMTZfQ2FsbE1zZ0ZpbHRlcjMyLCBXSU4xNl9EaXNwYXRjaE1lc3NhZ2UzMiwKCURyYXdBbmltYXRlZFJlY3RzMTYgKHN0dWIpLCBGb3JtYXRNZXNzYWdlMTYsIFdJTjE2X0dldE1lc3NhZ2UzMiwKCVdJTjE2X1BlZWtNZXNzYWdlMzIgYW5kIFdJTjE2X1RyYW5zbGF0ZU1lc3NhZ2UzMi4KCgkqIGRsbHMvc2hlbGwzMi9NYWtlZmlsZS5pbiwgZGxscy9zaGVsbDMyL2NsYXNzZXMuYywgZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9mb2xkZXJzLmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbGd1aWQuYywgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgaW5jbHVkZS9zaGxndWlkLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGluY2x1ZGUvd2luZG93cy5oLCBtaXNjL3NoZWxsLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gc29tZSBmaXhlcywgY2xlYW5lZCB1cCBpbmNsdWRlcywgZml4ZWQgbGVha3MKCS0gY2xlYW4gRGxsUmVmZXJlbmNlQ291bnQsIGJldHRlciBEbGxNYWluKCkKCS0gZHluYW1pY2FsbHkgbGlua2luZyBMb29rdXBJY29uSWRGcm9tRGlyZWN0b3J5RXgzMiBhbmQKCSAgQ3JlYXRlSWNvbkZyb21SZXNvdXJjZUV4MzIgdG8gVVNFUjMyCgktIG1vdmVkIGd1aWQncyBpbnN0YW5jZXMgdG8gbmV3IGZpbGUgc2hlbGxndWlkLmMKCS0gaW1wbGVtZW50ZWQgIFNoZWxsRXhlY3V0ZUV4MzJXCgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9jb21wb2JqLmMsIG9sZS9ndWlkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIHRoZSBpbnN0YW5jZSBjcmVhdGlvbiBvZiBHVUlEJ3MgdG8gYSBuZXcgZmlsZS4KCVNpemUgb2YgY29tcG9iai5vIGdvZXMgZG93biB0byAxLzM7IHNob3VsZCBwcmV2ZW50IG1vcmUgc2lnMTEncy4KCgkqIGluY2x1ZGUvaW5pdGd1aWQuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZmlsZSB0byBpbnN0YW50aWF0ZSBHVUlEJ3MgbXMtbGlrZS4KCgkqIHdpbmRvd3MveDExZHJ2L3duZC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNldCBwcml2YXRlIGRhdGEgc3RydWN0IHRvIE5VTEwgdG8gZXhwb3NlIHByb2JsZW1zIGluIG90aGVyIGNvZGUKCWJldHRlci4gRml4ZXMgdGhlIFhVbm1hcFdpbmRvdyBwcm9ibGVtcyByZXBvcnRlZCBieSByZXBsYWNpbmcgdGhlbQoJd2l0aCBOVUxMIHB0ciBkZXJlZmVyZW5jZXMuCgoJKiBkb2N1bWVudGF0aW9uL2RlYnVnLW1zZ3MsIGRvY3VtZW50YXRpb24vZGVidWdnaW5nLCBkb2N1bWVudGF0aW9uL2ludGVybmFsLWRsbCwgZG9jdW1lbnRhdGlvbi9pb3BvcnQtdHJhY2UtaGludHMsIGRvY3VtZW50YXRpb24vd2luZV9vczI6CglaeWdvIEJsYXhlbGwgPHVqMjJrZmJjQHVtYWlsLmZ1cnJ5dGVycm9yLm9yZz4KCUZpeGVkIHR5cG9zLgoKCSogZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2ZpbGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglET1MgcHJvZ3JhbXMgdXNlIGhhbmRsZXMgMC00IHdpdGhvdXQgb3BlbmluZy9jbG9zaW5nIGFueSBvZiB0aG9zZQoJaGFuZGxlcyBmaXJzdC4gU3BsaXQgdXAgSW5pdCBmcm9tIEFsbG9jRG9zSGFuZGxlIGFuZCBjYWxsIGl0IGZyb20KCXRoZSBET1NWTS4KCgkqIE1ha2VmaWxlLmluOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZSBjb25maWd1cmUuaW4tPmNvbmZpZ3VyZSBydWxlICh3ZSBtaWdodCBub3QgaGF2ZSBhdXRvY29uZikuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCAidXNlci1mcmllbmRseSIgd2FybmluZyBmb3IgbWlzc2luZyBYLgoKCSogaW5jbHVkZS9vbGUuaDogRml4ZWQgR2V0T2JqZWN0IG1hY3JvIHByb2JsZW0uCgoJKiBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3QzRDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSB1cGRhdGVkIGRvY3VtZW50YXRpb24gdG8gYmUgaW4gc3luYyB3aXRoIGN1cnJlbnQgY29kZQoKCSogZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdmlld3BvcnQuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSB2YXJpb3VzIHdhcm5pbmcgYW5kIGJ1ZyBmaXhlcwoKCSogZ3JhcGhpY3MvZDNkZGV2aWNlcy5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgbW9yZSB0ZXh0dXJlIGZvcm1hdHMgdXNpbmcgT3BlbkdMJ3MgcGFja2VkIHBpeGVsIGZvcm1hdHMKCgkqIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgaW5jbHVkZS9kM2QuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBiZXR0ZXIgc3VwcG9ydCBmb3IgRXhlY3V0ZUJ1ZmZlcnMKCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBjb3JyZWN0ZWQgYnVnIGluIFogQnVmZmVyIGFsbG9jYXRpb24KCS0gcHV0IFZJREVPTUVNT1JZIGZsYWcgZm9yIGFsbCBwcmltYXJ5IHN1cmZhY2VzCgktIHB1dCBzb21ldGhpbmcgaW4gYSBzdXJmYWNlIGFmdGVyIGEgUmVsZWFzZURDCgoJKiBtaXNjL3ByaW50ZHJ2LmM6IE1vcnRlbiBXZWxpbmRlciA8dGVycmFAZGlrdS5kaz4KCU1pc3NpbmcgV0lOQVBJLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE5pY2xhcyBLYXJsc3NvbiA8bmthcmxzc29AcmEuYWJvLmZpPgoJUmVtb3ZlZCBEVF9TSU5HTEVMSU5FIGFuZCBEVF9OT0NMSVAgc3R5bGVzIGZvciBTU19MRUZUTk9XT1JEV1JBUC4KCgkqIG9iamVjdHMvZW5obWV0YWZpbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGVjayBvcGVuZWQgZW5obWV0YWZpbGUgZm9yIG1hZ2ljIHZhbHVlcy4KCgkqIGluY2x1ZGUvZHNvdW5kLmgsIG11bHRpbWVkaWEvZHNvdW5kLmM6IFJvYiBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglGaXhlZCBkdXBsaWNhdGUgc291bmQgYnVmZmVyIGhhbmRsaW5nLiBVcGRhdGVkIHN0YXR1cy4KCgkqIG1pc2MvcmVnaXN0cnkuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZnVuY3Rpb25zICBsbWVtY3B5bkF0b1cgYW5kICBsbWVtY3B5bld0b0EgZm9yIGNvbnZlcnRpbmcKCVJFR19NVUxUSV9TWiAoaW5jbHVkaW5nIFwweDAwKQoJQmV0dGVyIGRlYnVnIG91dHB1dCBmb3IgUkVHX0JJTkFSWSBhbmQgUkVHX01VTFRJX1NaCglSZXdyaXR0ZW4gUmVnUXVlcnlWYWx1ZUV4MzJbQXxXXQoKCSogb2JqZWN0cy9wYWxldHRlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgQ3JlYXRlSGFsZnRvbmVQYWxldHRlLgoJRml4ZWQgMyBjcmFzaGVzICgxIHJlYWwsIDIgcG90ZW50aWFsKS4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgaWYxNjMyL3NoZWxsLnNwZWMsIGluY2x1ZGUvc2hlbGwuaCwgbWlzYy9zaGVsbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBFeHRyYWN0SWNvbkV4MTYsIGFkZGVkIHNvbWUgY29uc3RzIHRvIEV4dHJhY3RJY29uRXgqLgoKCSogb2xlL29sZTIuYywgb2xlL29sZWNsaS5jLCByZWxheTMyL29sZTMyLnNwZWMsIGluY2x1ZGUvd2luZXJyb3IuaDoKCVN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCURvRHJhZ0Ryb3AgYW5kIE9sZUlzQ3VycmVudENsaXBib2FyZCBzdHViIGltcGxlbWVudGF0aW9uLgoKCSogb2xlL3R5cGVsaWIuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJTWFrZSBMb2FkVHlwZUxpYiBzdHViIHJldHVybiBmYWlsdXJlIGluc3RlYWQgb2Ygc3VjY2Vzcy4KCkZyaSBKYW4gMjIgMTc6MDk6NDYgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRvY3VtZW50YXRpb24vYWNjZWxlcmF0b3JzLCBpbmNsdWRlL3dpbnVzZXIuaCwgbG9hZGVyL3Jlc291cmNlLmMsIHdpbmRvd3MvaW5wdXQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgYWNjZWxlcmF0b3IgaGFuZGxpbmcuIEFDQ0VMMTYgdXNlZCBpbnRlcm5hbCwgQUNDRUwzMiBmb3IgV2luMzIKCUFQSSwgUEVfQUNDRUwgZm9yIFBFIEFjY2VsZXJhdG9ycy4gU2VlIGRvY3VtZW50YXRpb24vYWNjZWxlcmF0b3JzLgoKVGh1IEphbiAyMSAxNDowNToxMSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9kZGVtbC5oLCBtaXNjL2RkZW1sLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglUaGVyZSB3ZXJlIHR3byBjb3BpZXMgb2YgdGhlIERkZUNtcFN0cmluZ0hhbmRsZXMgKEEgYW5kIFcpIGFuZCB0aGF0CglBUEkgZG9lcyBub3QgaGF2ZSAyIHZlcnNpb25zLiBSZW1vdmVkIHRoZSBleHRyYSB2ZXJzaW9uLgoKV2VkIEphbiAyMCAxNDo1NDowMSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6IFBhYmxvIFNhcmF0eGFnYSA8cGFibG8uc2FyYWNoYWdhQHBpbmcuYmU+CglTbWFsbCBwYXRjaC4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXaW4zMiBjb25zb2xlIG5lZWRzIFNZTkNIUk9OSVpFIGFjY2Vzcy4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBjb25zb2xlL25jdXJzZXMuYywgZGVidWdnZXIvc3RhYnMuYywgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9jb25zb2xlLmgsIG1pc2MvcG9ydC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglhdXRvY29uZjogYWRkZWQgY2hlY2tzIGZvciBsaWJpby5oLCBlbGYuaCwgY3Vyc2VzLmgsbmN1cnNlcy5oIGFuZAoJZml4ZWQgaW5jbHVkZXJzLgoKCSogb2xlL29sZTJubHMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglMQ01hcFN0cmluZ0E6IGlmIGRzdGxlbiBpcyBpbnN1ZmZpY2llbnQsIHJldHVybgoJRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUiAodmVyaWZpZWQpLgoKCSogb2JqZWN0cy9lbmhtZXRhZmlsZS5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgc21hbGwgZml4ZXMgdG8gZW5obWV0YWZpbGVzLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvIG5vdCBjYWxsIG93bmVyZHJhdyBmb3IgaW52YWxpZCBpdGVtcyAoZW1wdHkgZm9jdXNyZWN0cykuCglGaXhlcyBFdWRvcmEgMTZiaXQgZW1wdHkgSW5ib3ggcHJvYmxlbS4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmM6IE5vb21lbiBIYW16YSA8bm9vbWVuQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgdGhlIE5DX0RyYXdNYXhCdXR0b245NSBhbmQgTkNfRHJhd01pbkJ1dHRvbjk1IGZ1bmN0aW9ucy4gUmV3cm90ZQoJdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbG9naWMgYXMgdGhlIE5DX0RyYXdDbG9zZUJ1dHRvbiBmdW5jdGlvbi4KCgkqIHdpbmRvd3Mvd2luLmM6IE5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJUmVwYXJlbnRpbmcgYSB3aW5kb3cgd2l0aCBTZXRQYXJlbnQgaW4gV2luZG93cyBzaG91bGQgY2F1c2UgdGhlIGNoaWxkCgl3aW5kb3cgYmVpbmcgcmUtcGFyZW50ZWQgdG8gYmUgbW92ZWQgdXAgdG8gdGhlIHRvcG1vc3QgaW4gdGhlIHotb3JkZXIsCglhbmQgV01fV0lORE9XUE9TQ0hBTkdJTkcgYW5kIFdNX1dJTkRPV1BPU0NIQU5HRUQgbWVzc2FnZXMgdG8gYmUgc2VudC4KCgkqIHJlbGF5MzIvYnVpbHRpbjMyLmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglVc2UgZXh0ZXJuYWwgRGlyZWN0UGxheSBETExzIGJ5IGRlZmF1bHQuCgoJKiBsb2FkZXIvdGFzay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFsbG93IHBhc3NpbmcgdGFzayBoYW5kbGVzIHRvIEdldFRocmVhZFF1ZXVlKCkgYW5kIFNldEZhc3RRdWV1ZSgpLgoKCSogd2luZG93cy91c2VyLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSGFuZGxlIChjb25zb2xlKSBhcHBsaWNhdGlvbnMgdGhhdCBuZXZlciBjcmVhdGVkIGEgcXVldWUgY29ycmVjdGx5CglpbiBVU0VSX0FwcEV4aXQoKTsgY2FsbCBJbml0VGhyZWFkSW5wdXQoKSBpbiBJbml0QXBwKCkuCgoJKiB3aW5kb3dzL2hvb2suYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgktIEZpeGVkIGNyZWF0aW9uIG9mIG1lc3NhZ2UgcXVldWUgaW4gaG9vayBBUEkgcm91dGluZXMuCgktIFNvbWUgcHJlcGFyYXRpb25zIGZvciB0aHJlYWQtbG9jYWwgbWVzc2FnZSBxdWV1ZXMuCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNoZWNrIG1vZHVsZSBuYW1lIGxlbmd0aCBpbiBNb2R1bGVOZXh0KCkuCgoJKiB3aW5kb3dzL3gxMWRydi9ldmVudC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgQ2FsbG91dCB0byBjYWxsIFJlZHJhd1dpbmRvdzMyLgoKCSogbXNkb3MvaW50MjEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglDbGVhciBET1MgZXh0ZW5kZWQgZXJyb3Igb25seSBmb3IgZnVuY3MgPj0weDJmICh0aGFua3MgdG8gRGF2ZQoJUGlja2xlcykuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVuaWZpZWQgcGFsZXR0ZSBjcmVhdGUsIGRvIGFsbG9jYXRlIGNvbG9yY2VsbHMgb24gaW5pdCBmb3IgREdBLgoKVHVlIEphbiAxOSAxNzo0ODoyNSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogc2NoZWR1bGVyL3N5bmNocm8uYywgc2NoZWR1bGVyL3RocmVhZC5jLCBzZXJ2ZXIvY29uc29sZS5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jLCB3aW4zMi9jb25zb2xlLmMsIHdpbjMyL2RldmljZS5jLCB3aW4zMi9wcm9jZXNzLmMsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgaW5jbHVkZS9zZXJ2ZXIvdGhyZWFkLmgsIGluY2x1ZGUvdGhyZWFkLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBtZW1vcnkvdmlydHVhbC5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy92eGQuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNjaGVkdWxlci9oYW5kbGUuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9kZXZpY2UuaDoKCUhhY2tlZCBzZXJ2ZXItc2lkZSBkZXZpY2Ugc3VwcG9ydAoJQWRkZWQgdXNlciBBUENzIHN1cHBvcnQuCglNYW55IGNoYW5nZXMgdG8gdGhlIHh0ZXJtIGNvbnNvbGUgdG8gbWFrZSB1c2Ugb2YgdGhlIHNlcnZlciAobm90CglmaW5pc2hlZCB5ZXQpLgoJTW92ZWQgc29tZSBvdGhlciBzbWFsbCBzdHVmZiB0byB0aGUgc2VydmVyLgoKCSogdG9vbHMvbWFrZV9yZXF1ZXN0czogQWRkZWQgbG9uZyB0eXBlIGZvcm1hdC4KCgkqIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2RldmljZS5jOgoJQWRkZWQgc2VydmVyLXNpZGUgZGV2aWNlIHN1cHBvcnQgKG9ubHkgYSBoYWNrIGZvciBub3cpLgoKU3VuIEphbiAxNyAxNzo0ODo0OCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogQ2hhbmdlTG9nOgoJUmVjb3ZlcmVkIGxvZyBlbnRyaWVzIGZyb20gQ1ZTIG1haWxpbmcgbGlzdC4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYywgZGxscy9udGRsbC9ydGwuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSW1wbGVtZW50ZWQgX2FsbG9jYV9wcm9iZSBhbmQgX2Noa3N0ayAobW9zdGx5IGRvbmUgYnkgVWxyaWNoIFdlaWdhbmQpLgoKCSogZmlsZXMvZmlsZS5jCglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUhhbmRsZSBFUlJPUl9XUklURV9QUk9URUNUIHRvbyBpbiByZWFkb25seSBmYWxsYmFjayBvcGVuLgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIEdldFNlY3VyaXR5RGVzY3JpcHRvckxlbmd0aCBzdHViIGZvciByZWdlZHQzMi5leGUuCgoJKiBkZWJ1Z2dlci9NYWtlZmlsZS5pbiwgZmlsZXMvTWFrZWZpbGUuaW46CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZCAiIiBhcm91bmQgLUQgZGVmaW5lcyBmb3IgcGF0aHMgd2l0aCBzcGFjZXMgaW4gdGhlbS4KCgkqIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglDbGVhbmVkIHVwIENvbG9yS2V5IGhhbmRsaW5nLgoKCSogb2JqZWN0cy9tZXRhZmlsZS5jOgoJUGF1bCBRdWlubiA8cGF1bHFAQ09SRUwuQ0E+CglNRVRBUkVDT1JEIG1lbWJlciByZFBhcmFtIHNob3VsZCBiZSByZFBhcm0gKGluIHdpbjMyIHNkaykKCWxvdHMgb2YgY2hhbmdlcyBpbiB0aGlzIHNvdXJjZSBmaWxlIHRvIHJlZmxlY3QgdGhpcyBjaGFuZ2UuCgoJKiBncmFwaGljcy9lc2NhcGUuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvY29tbWRsZy5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3RjaGFyLmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIGluY2x1ZGUvd2ludXNlci5oLCBtaXNjL3Nwb29sZXIuYywgb2JqZWN0cy9nZGlvYmouYywKCXJlbGF5MzIvZ2RpMzIuc3BlYzoKCVBhdWwgUXVpbm4gPHBhdWxxQENPUkVMLkNBPgoJRml4ZWQgYmFkIGRlZmluZXMsIGFkZGVkIGEgZmV3IHR5cGVzICduIGRlZmluZXMuCgoJKiB3aW5kb3dzL2RpbnB1dC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEaXNhYmxlIGJyb2tlbiBjYWxsYmFja3Mgd2hpY2ggbGVhZCB0byBjcmFzaGVzLgoKCSogbXVsdGltZWRpYS9tY2lzdHJpbmcuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgSUQgdXNhZ2UgKGFuZCByZWx5IGxlc3MgaGVhdmlseSBvbiBtdWx0aW1lZGlhL21tc3lzdGVtLmMKCWludGVybmFsIHN0cnVjdHVyZXMpLgoKCSogbWlzYy90b29saGVscC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglkZWJ1Zy5oIG5lZWRzIHRvIGJlIGluY2x1ZGVkIGxhc3Qgc2luY2UgaXQgI3VuZGVmcyBFUlIgZm9yIFNvbGFyaXMuCgoJKiBkZWJ1Z2dlci9kZWJ1Zy5sLCBkZWJ1Z2dlci9tZW1vcnkuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgL3UgZm9ybWF0IHRvIGRlYnVnZ2VyIGRpc3BsYXkgZm9yIFVOSUNPREUgc3RyaW5ncy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmUgaXJyaXRhdGluZyBGSVhNRSBsaW5lIG5vIGxvbmdlciBuZWVkZWQuCgoJKiBtc2Rvcy9pbnQyZi5jOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBtaXNzaW5nICdcbicgaW4gRklYTUUgbWVzc2FnZS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6CglSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJb2JqYmFzZS5oIG5lZWRlZCBmb3IgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKSwgZml4IEMgZnVuY3Rpb24KCWRlY2xhcmF0aW9ucywgaW5zdGFsbCBhIGNvbG9ybWFwIGlmIHdlIGFyZSBub3QgbWFuYWdlZCwgcmVsZWFzZQoJYmFja2J1ZmZlcnMgaW4gREdBIG1vZGUsIGZpeCB2aWRlbyBtb2RlIHN3aXRjaGluZyBsb2dpYyB0byBhdm9pZAoJcG9zc2libGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLgoKCSogbXNkb3MvZHBtaS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU21hbGwgZml4LgoKCSogZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2ZpbGUuaCwgaW5jbHVkZS9wcm9jZXNzLmgsIGxvYWRlci9yZXNvdXJjZS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBsb2FkZXIvbmUvc2VnbWVudC5jLCBtaXNjL2x6ZXhwYW5kLmMsIG1zZG9zL2ludDIxLmMgdnhkLmMsIG11bHRpbWVkaWEvbW1pby5jLCB3aW4zMi9rZXJuZWwzMi5jOgoJQmV0dGVyIERPUyBmaWxlIGhhbmRsZSBtYW5hZ2VtZW50LgoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglUaGlzIHNob3VsZCBoZWxwIHByZXZlbnQgZHVwbGljYXRlIHdvcmsuCgoJKiBpZjE2MzIvZ2RpLnNwZWMsIGluY2x1ZGUvd2luZ2RpLmgsIG9iamVjdHMvZGMuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUltcGxlbWVudGVkIERlYXRoKCkgYW5kIFJlc3VycmVjdGlvbigpLCB0d28gZnVuY3Rpb25zIG5lZWRlZCBieSBzb21lCglUUFdpbiAoPykgY29tbWFuZCBsaW5lIHRvb2wuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgMzItPjE2IHRyYW5zbGF0aW9uIGZvciBXTV9BQ1RJVkFURUFQUC4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHViczogU2hlbGxNZXNzYWdlQm94VywgUnVuRExMX0NhbGxFbnRyeTE2LgoJSW1wbGVtZW50YXRpb24gZm9yIFNIR2V0U3BlY2lhbEZvbGRlclBhdGgzMltBfFddLgoJTWFueSBidWdmaXhlcy4KCgkqIGNvbnNvbGUveHRlcm0uYywgbWlzYy9wb3J0LmMsIHdpbjMyL2NvbnNvbGUuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQ2hhbmdlIGFsbCBXaW5lIG9wZW5wdHkoKSBpbXBsZW1lbnRhdGlvbnMgdG8gbWF0Y2ggdGhlICJzdGFuZGFyZCIgYW5kCgl0aGVuIG1ha2UgdGhlbSBib3RoIGNhbGwgdGhlIHNhbWUgY29kZSBsZWF2aW5nIHRoZSBvcHRpb24gdG8gY2hhbmdlCgl0aGF0IGNvZGUgdG8gY2FsbCB0aGUgInN0YW5kYXJkIiBvcGVucHR5KCkgYXQgYSBsYXRlciBkYXRlLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBTZXRQcm9jZXNzQWZmaW5pdHlNYXNrIHN0dWIuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIHRoZSBvdGhlciB1bmlvbiBtaXN1c2UgdG9vIChvbmUgbGVzcyBtZW0gY29ycnVwdGlvbikKCVJlLWFkZGVkIFhJbnN0YWxsQ29sb3JtYXAgKG9yIG5vbiBtYW5hZ2VkIGRvZXMgbm90IGNoYW5nZSBwYWxldHRlKQoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBzY2hlZHVsZXIvc3luY2hyby5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgS0VSTkVMLjQ5NS4KCgkqIGRvY3VtZW50YXRpb24vc3RhdHVzLCBkb2N1bWVudGF0aW9uL2RpcmVjdDNELCBncmFwaGljcy9kM2RfcHJpdmF0ZS5oLCBncmFwaGljcy9kM2Rjb21tb24uYywgZ3JhcGhpY3MvZDNkZGV2aWNlcy5jLCBncmFwaGljcy9kM2RleGVjdXRlYnVmZmVyLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgZ3JhcGhpY3MvZDNkdmlld3BvcnQuYywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS9kZHJhdy5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGJpdG1hc2sgdG8gc3RvcmUgd2hpY2ggQ29sb3JLZXkgc3RydWN0dXJlcyBhcmUgdmFsaWQKCS0gaGFuZGxlIG1hbnkgbmV3IHJlbmRlcmluZyBzdGF0ZXMsIHNvbWUgb3B0aW1pemF0aW9ucyBpbiBzdGF0ZSBjaGFuZ2VzCgktIDhiaXQgcGFsZXR0aXplZCB0ZXh0dXJlcyBub3cgc3VwcG9ydCBDb2xvcktleWluZwoJLSBzb21lIG1pc2NlbGxhbmVvdXMgYnVnIGZpeGVzIGFuZCBjb2RlIHJld3JpdGUKCgkqIGNvbnRyb2xzL21lbnUuYzoKCU5vb21lbiBIYW16YSA8bm9vbWVuQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgdGhlIGxvb2sgb2YgdGhlIG1lbnUgc28gaXQgd291bGQgYmUgY29tcGxpYW50IHdpdGggV2luOTU6IG1vZGlmaWVkCgl0aGUgbW91c2UgdHJhY2tpbmcgY29kZSBzbyBpdCB3b3VsZCBjaGFuZ2UgdGhlIHNlbGVjdGlvbiBldmVyeSB0aW1lIHRoZQoJbW91c2UgbW92ZWQgb3ZlciBhIG1lbnUgaXRlbS4KCgkqIGRvY3VtZW50YXRpb24vaG93LXRvLXBvcnQ6CglNaWtlIENhc3RsZSA8ZGFsZ29kYUBzaGVsbC5ydDY2LmNvbT4KCVNtYWxsIGZpeC4KCgkqIGRsbHMvY29tY3RsMzIvdXBkb3duLmM6CglOb2VsIEJvcnRod2ljayA8bm9lbEBtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIGJ1Z3M6CgktIFdoZW4gYW4gZWRpdCBjb250cm9sIGJ1ZGR5IHdhcyB1c2VkIHNpbmdsZSBkaWdpdCB2YWx1ZXMgd2VyZSBub3QKCWJlaW5nIGRpc3BsYXllZC4KCS0gQ29tbWEgdmFsdWVzIHdlcmUgbm90IGRpc3BsYXllZCBjb3JyZWN0bHkgd2hlbiB0aG91c2FuZHMgc2VwYXJhdGlvbgoJd2FzIHJlcXVlc3RlZC4KCgkqIHdpbjMyL25ld2Zucy5jOgoJVG9tIEJlY2ggPHRvbWJAaWkudWliLm5vPgoJV2hpbGUgdGhlIGRlYnVnIGV2ZW50IG1lc3NhZ2VzIGFyZSBub3QgaW1wbGVtZW50ZWQsIFdhaXRGb3JEZWJ1Z0V2ZW50CglzaG91bGQgcmV0dXJuIEZBTFNFLgoKCSogaWYxNjMyL3VzZXIuc3BlYywgb2JqZWN0cy9iaXRtYXAuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUltcGxlbWVudGVkIENvcHlJbWFnZTE2LgoKCSogZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzIAoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU21hbGwgZml4LgoKCSogY29uc29sZS9nZW5lcmljLmMsIG1zZG9zL2ludDIxLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoYW5nZWQgMHgwMSB0byB1c2UgZ2VuZXJpYyBjb25zb2xlLCBmaXhlZCAweDBiLgoJRml4ZWQgQ09OU09MRV9HZXRDaGFyYWN0ZXIgKHR3byBhcmdzIHN3YXBwZWQpLgoKCSogaW5jbHVkZS9tb2R1bGUuaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyBzcGVjaWZ5aW5nIG1vZHVsZSBuYW1lIGZvciBORSBkdW1teSBtb2R1bGUuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYyAKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU2V0IG1vZHVsZSBuYW1lIG9mIGR1bW15IG1vZHVsZSBlcXVhbCB0byBtb2R1bGUgbmFtZSBvZiBQRSBtb2R1bGUuCgoJKiBjb250cm9scy9zY3JvbGwuYywgY29udHJvbHMvdWl0b29scy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNaXNzaW5nIGluY2x1ZGUgd2luZS93aW51c2VyMTYuaCBhZGRlZC4KCgkqIGdyYXBoaWNzL3ZnYS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDcmVhdGUgYW4gYWN0dWFsIHByaW1hcnkgc3VyZmFjZSBmb3Igc2NyZWVuYnVmZmVyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDEwIDE0OjQwOjM0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgaW5jbHVkZS9tc2Rvcy5oLCBsb2FkZXIvbWFpbi5jLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvZG9zY29uZi5jLCBtc2Rvcy9pbnQyMS5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgY29uZmlnLnN5cyBwYXJzZXIuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IFBhc2NhbCBDdW9xIDxQYXNjYWwuQ3VvcUBpbnJpYS5mcj4KCVNtYWxsIGNoYW5nZSBpbiBMQl9TRVRDVVJTRUwzMiBoYW5kbGluZyAodGhlIGNhcmV0IHNob3VsZCBiZSBtb3ZlZCBhcwoJd2VsbCkuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZmlsZXMvYXN5bmMuYywgaW5jbHVkZS9jb25maWcuaC5pbiwgbWlzYy93aW5zb2NrX2Rucy5jLCBtc2Rvcy9pbnQyMS5jLCBvbGUvY29tcG9iai5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVc2UgYXV0b2NvbmYgY2hlY2sgZm9yIHByZXNlbmNlIG9mIHN5cy9maWxlLmguCgoJKiBkbGxzL250ZGxsL3J0bC5jLCByZWxheTMyL250ZGxsLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUltcGxlbWVudGVkIERiZ1ByaW50LCBhZGRlZCB1bHRvYS4KCgkqIHdpbjMyL2NvbnNvbGUuYzogUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbG5ldHdvcmtzLmNvbT4KCVBlZWtDb25zb2xlSW5wdXQgJiBSZWFkQ29uc29sZUlucHV0IG5lZWQgdG8gcmV0dXJuIDAgcmVjb3JkcyByZWFkIGluCgl0aGUgY2FzZSBvZiBhbiBpbnZhbGlkIGhhbmRsZS4KCgkqIGNvbnNvbGUvbmN1cnNlcy5jLCBsb2FkZXIvbWFpbi5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglNb3JlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KCVJlbW92ZSBjb21waWxhdGlvbiB3YXJuaW5nLgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglGaXggdXAgc29tZSBpbnRlcnJ1cHQgY2FsbHMgdG8gcmV0dXJuIGF0IHRoZSBkYXRhIHRoYXQgdGhleSBhcmUgc3VwcG9zZWQKCXRvLiBBbHNvIGluY3JlYXNlIGNvbW1lbnQgdmVyYm9zaXR5IHRvIGhlbHAgZGVidWcgdGhpbmdzIGxhdGVyLgoKCSogaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jLCBtaXNjL3ZlcnNpb24uYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIHN3aXRjaCAtZG9zdmVyLgoJQ2xlYW51cCBmb3IgT2FCdWlsZFZlcnNpb24oKS4KCgkqIGxpYnRlc3QvLmN2c2lnbm9yZTogQWRkZWQgdmFydGVzdCBhbmQgdm9saW5mbwoKCSogZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9waWRsLmgsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNYW55IGJ1Z2ZpeGVzLCBjb2RlIGNsZWFudXAuCglSZW1vdmVkIGEgZmV3IGdsaXRjaGVzIGZyb20gdGhlIENPTSBwYXRjaC4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IExhd3NvbiBXaGl0bmV5IDxsYXdzb25fd2hpdG5leUBqdW5vLmNvbT4KCU9ubHkgZGVzdHJveSB3aW5kb3cgb25jZS4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJLSBtb3ZlZCBkcmF3YWJsZSB0byBjb21tb24gc2luY2UgaXQgaXMgdXNlZCBieSBib3RoIERHQSBhbmQgWGxpYi4KCSAgKGZpeGVzIG9uZSBiYWQgbWVtb3J5IGNvcnJ1cHRpb24gYnVnIGluIERHQSAoU3RhckNyYWZ0IGFuZCBEaWFibG8pCgktIGFkZGVkIEJsdEZhc3Qgc2FuaXR5IGNoZWNrcy4KCgkqIHdpbmRvd3MvcXVldWUuYywgbG9hZGVyL3Rhc2suYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW5pdEFwcCgpIGNhbGwgcmVtb3ZlZCBmcm9tIDMyLWJpdCBhcHBsaWNhdGlvbiBzdGFydHVwOwoJY3JlYXRlIHRhc2sgbWVzc2FnZSBxdWV1ZSBpbiBJbml0VGhyZWFkSW5wdXQoKSBpbnN0ZWFkLgoKCSogbG9hZGVyL25lL2NvbnZlcnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgYWNjZWxlcmF0b3IgdGFibGUgUEUtPk5FIHJlc291cmNlIGNvbnZlcnNpb24uCgoJKiBkZWJ1Z2dlci9lZGl0bGluZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZXN0YXJ0IHJlYWQoKSBpbiBjYXNlIG9mIEVJTlRSIGluIFRUWWdldCgpLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUHRyIHJlZiB3cm9uZy4KCgkqIHRvb2xzL3dyYy9DSEFOR0VTLCB0b29scy93cmMvZHVtcHJlcy5jLCB0b29scy93cmMvZ2VucmVzLmMsIHRvb2xzL3dyYy9uZXdzdHJ1Yy5jLCB0b29scy93cmMvbmV3c3RydWMuaCwgdG9vbHMvd3JjL3BhcnNlci5sLCB0b29scy93cmMvcGFyc2VyLnksIHRvb2xzL3dyYy9yZWFkcmVzLmMsIHRvb2xzL3dyYy91dGlscy5jLCB0b29scy93cmMvdXRpbHMuaCwgdG9vbHMvd3JjL3dyYy5oLCB0b29scy93cmMvd3JjdHlwZXMuaCwgdG9vbHMvd3JjL3dyaXRlcmVzLmM6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJV3JjIHZlcnNpb24gMS4wLjguIFRvb2xiYXIgcmVzb3VyY2VzIGFyZSBub3cgc3VwcG9ydGVkLiBBIGNvdXBsZSBvZgoJb3RoZXIgZml4ZXMgYXJlIGFsc28gaW5jbHVkZWQuIFNlZSBmaWxlIHRvb2xzL3dyYy9DSEFOR0VTIGZvciBkZXRhaWxzLgoKCSogb2xlL2NvbXBvYmouYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNaXNzaW5nIFdJTkFQSS4KCgkqIGluY2x1ZGUveDExZHJ2LmgsIGxvYWRlci9kb3MvbW9kdWxlLmMsIG9iamVjdHMvZGMuYywgcmVsYXkzMi9idWlsdGluMzIuYywgcmVsYXkzMi9yZWxheTM4Ni5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIGZpbGVzL2FzeW5jLmMsIGlmMTYzMi9yZWxheS5jLCBpbmNsdWRlL21haW4uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmgsIGluY2x1ZGUvd2luZG93cy5oOgoJSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJQWRkIG1pc3NpbmcgI2luY2x1ZGVzIGFuZCBwcm90b3R5cGVzIHRvIGVsaW1pbmF0ZSBzb21lIGltcGxpY2l0CglmdW5jdGlvbiBkZWNsYXJhdGlvbiB3YXJuaW5ncyBhbmQgJ2V4dGVybidzIGluIC5jIGZpbGVzLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGNvbnNvbGUvbmN1cnNlcy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW46CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUNoZWNrIGZvciByZXNpemV0ZXJtIGluIG5jdXJzZXMuCgoJKiBsaWJ0ZXN0L01ha2VmaWxlLmluLCBsaWJ0ZXN0L3ZhcnRlc3QtV2luMzIubG9nLCBsaWJ0ZXN0L3ZhcnRlc3QuYywgbGlidGVzdC92YXJ0ZXN0LnJlYWRtZToKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCU5ldyB0ZXN0IHByb2dyYW0gZm9yIFZBUklBTlQgZnVuY3Rpb25zLgoKCSogZGVidWdnZXIvbXNjLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJU29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiAoUERCKSB3YXMgbm90IG1hcHBlZCB3aGVuIGxvYWRpbmcgYSBtb2R1bGUsCgl3aGljaCBjYXVzZWQgYSBjb3JlIGluIHRoZSBkZWJ1Z2dlciB3aGVuIGl0IHRyaWVkIHRvIGFjY2VzcyBpdC4KCgkqIE1ha2VmaWxlLmluOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUxpbmtzIGxpYndpbmUuc28uMS4wIHRvIGxpYndpbmUuc28gaW4gV2luZSdzIG1haW4gZGlyZWN0b3J5LgoJTWFrZXMgV2luZSBjb21waWxlIHdpdGggLS1lbmFibGUtZGxsIGFnYWluLgoKU2F0IEphbiAgOSAwOToxMjo0MCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogcmVsYXkzMi9vbGUzMi5zcGVjLCB3aW5kb3dzL2RpbnB1dC5jLCBpbmNsdWRlL3N0b3JhZ2UuaCwgaW5jbHVkZS91bmtud24uaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2luZS9vYmpfYmFzZS5oLCBpbmNsdWRlL3dpbmUvb2JqX2NoYW5uZWwuaCwgaW5jbHVkZS93aW5lL29ial9jbGllbnRzZXJ2ZXIuaCwgaW5jbHVkZS93aW5lL29ial9kYXRhb2JqZWN0LmgsIGluY2x1ZGUvd2luZS9vYmpfbWFyc2hhbC5oLCBpbmNsdWRlL3dpbmUvb2JqX21pc2MuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIGluY2x1ZGUvd2luZS9vYmpfcHJvcGVydHlzdG9yYWdlLmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd3R5cGVzLmgsIG1pc2Mvc2hlbGwuYywgbXVsdGltZWRpYS9kcGxheS5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBvYmplY3RzL2ZvbnQuYywgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvbW9uaWtlci5jLCBvbGUvb2xlMi5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZWRsZy5jLCBvbGUvb2xlb2JqLmMsIG9sZS9zdG9yYWdlLmMsIG9sZS90eXBlbGliLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9mb2xkZXJzLmMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3MvdmdhLmMsIGlmMTYzMi9jb21wb2JqLnNwZWMsIGluY2x1ZGUvY29tcG9iai5oLCBpbmNsdWRlL2RkcmF3LmgsIGluY2x1ZGUvZGlucHV0LmgsIGluY2x1ZGUvZHBsYXkuaCwgaW5jbHVkZS9kc291bmQuaCwgaW5jbHVkZS9pbnRlcmZhY2VzLmgsIGluY2x1ZGUvb2JqYmFzZS5oLCBpbmNsdWRlL29iamlkbC5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL29sZTIuaCwgaW5jbHVkZS9vbGVvYmouaCwgaW5jbHVkZS9zZXJ2cHJvdi5oLCBpbmNsdWRlL3NoZWxsLmgsIGluY2x1ZGUvc2hsZ3VpZC5oLCBpbmNsdWRlL3NobG9iai5oLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCUFkZGVkIGEgbG90IG9mIENPTSBpbnRlcmZhY2VzIGRlZmluaXRpb25zLgoJUmVzdHJ1Y3R1cmVkIENPTSBoZWFkZXIgZmlsZXMgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5IGFuZCBjbGFyaXR5LgoKRnJpIEphbiAgOCAxNjozNzowMyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZmlsZXMvZmlsZS5jOiBTZXQgR0VORVJJQ19SRUFEfEdFTkVSSUNfV1JJVEUgYWNjZXNzIGZvciBPRl9DUkVBVEUuCglNYWtlIEdldEZpbGVUeXBlIHdvcmsgZm9yIGFsbCBoYW5kbGUgdHlwZXMuCgoJKiB3aW4zMi9kZXZpY2UuYzogQXZvaWQgY3Jhc2ggb24gTlVMTCBkZXYtPmluZm8uCgoJKiBpbmNsdWRlL2ZsYXRzYi5oLCByZWxheTMyL2NvbWN0bDMyLnNwZWMsIGRsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW4sIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgZGxscy9jb21jdGwzMi9mbGF0c2IuYywgaW5jbHVkZS9jb21tY3RybC5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUFkZGVkIHN0dWJzIGFuZCBkZWZpbmVzIGZvciB0aGUgZmxhdCBzY3JvbGxiYXIgY29tbW9uIGNvbnRyb2wuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGRsbHMvY29tY3RsMzIvZGF0ZXRpbWUuYzoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglBZGRlZCBzb21lIGRlZmluZXMgbmVlZGVkIGZvciBjdXN0b20gZHJhdydpbmcgYW5kIGRhdGV0aW1lIGNvbW1vbgoJY29udHJvbHMuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6IEVkZGllIENhcnBlbnRlciA8ZWNhcnBlbnRlckBpdGV4LmNvLnphPgoJRml4ZWQgYSBzbWFsbCBidWcgaW4gZnVuY3Rpb24gRXh0cmFjdEljb25FeDMyQS4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUhUQVNLMTYgLT4gdGhyZWFkSUQgbWFwcGluZyBvZiBXTV9BQ1RJVkFURUFQUC4KCgkqIGZpbGVzL2ZpbGUuYzogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCU1ha2UgRGVsZXRlRmlsZSBmYWlsIGZvciBlbXB0eSBwYXRoLgoKCSogbXNkb3MvaW9wb3J0cy5jOiBHZXJhbGQgUGZlaWZlciA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KCUZpeCBkdW1teV9jdHIgc3R1ZmYgdG8gd29yayBldmVuIHdpdGhvdXQgRElSRUNUX0lPX0FDQ0VTUy4KCgkqIGxvYWRlci9uZS9zZWdtZW50LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgd3JvbmcgYnVmZmVyIHdoaWNoIGNhdXNlZCBmaXh1cHMgdG8gZmFpbC4KCgkqIGdyYXBoaWNzL2QzZGNvbW1vbi5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgaW5jbHVkZS9kM2QuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBhbGwgdGhlIERpcmVjdDNEIGVycm9yIGNvZGVzCgktIGFkZGVkIDhiaXQgcGFsZXR0aXplZCB0ZXh0dXJlIHN1cHBvcnQKCgkqIG1zZG9zL2Nkcm9tLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJaWZkZWZzIGZvciBkZWZpbmVzIG5vdCBpbiBsaW51eCAyLjAuCgoJKiByZWxheTMyL3dpbnNwb29sLnNwZWMsIG1pc2MvcHJpbnRkcnYuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHR3byBzdHVicyBmb3IgQWRkUHJpbnRlckRyaXZlci4KCgkqIGluY2x1ZGUvZG9zZXhlLmgsIGxvYWRlci9kb3MvZG9zbW9kLmMsIGxvYWRlci9kb3MvZG9zbW9kLmgsIGxvYWRlci9kb3MvZG9zdm0uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJUXVldWUgU0lHQUxSTSB0byByZWR1Y2UgdGhlICJzaWduYWwgMTQgbG9zdCIgY29tcGxhaW50cy4KCUFkZGVkIHN1cHBvcnQgZm9yIHJlcHJvZ3JhbW1pbmcgdGhlIERPUyB0aW1lciwgYW5kIHJlYWRpbmcgYmFjayB0aGUKCWN1cnJlbnQgdmFsdWUuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJV2luZSBoYW5ncyB3aGVuIHJlZ2lzdHJ5IChjb3JydXB0ZWQpIGhhcyBsb25lIFwgYXQgZW5kIG9mIGZpbGUuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYzoKCUtvc3R5YSBJdmFub3YgPGtvc3R5YUB3YXJtY2F0LmV4Y29tLnNwYi5zdT4KCVNtYWxsIHBhdGNoIHRoYXQgZW5hYmxlcyBDbGFyaW9uIGZvciBXaW5kb3dzIG5vdCB0byB0cmFwIHdoaWxlCglsb2FkaW5nLgoKCSogb2xlL3ZhcmlhbnQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZXBsYWNlIHRyb3VibGVzb21lIGFzc2lnbm1lbnRzIGJ5IG1lbXNldCBmb3Igd2hvbGUgc3RydWN0LgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBoYW5kbGluZyBvZiB0aGUgJ3BhbGVudCcgZmllbGQgb2YgdGhlIENyZWF0ZVBhbGV0dGUgcHJvY2VkdXJlLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbjoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIGRlc2NyaXB0aW9uIGFib3V0IGluY2x1ZGluZy9leGNsdWRpbmcgZnVuY3Rpb25zIGZyb20gcmVsYXkKCXRyYWNlLgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlYWQgYXQgbGVhc3QgMSBpbnB1dCByZWNvcmQgaW4gUmVhZENvbnNvbGVJbnB1dEEuCgoJKiBtZW1vcnkvdmlydHVhbC5jOgoJRml4ZWQgQ3JlYXRlTWFwcGluZyB3aGVuIGEgbWFwcGluZyB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuCgpXZWQgSmFuICA2IDEwOjM3OjI5IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBzZXJ2ZXIvZmlsZS5jOiBGaXhlZCBmaWxlIGRlc3RydWN0aW9uIHdoZW4gZmlsZSBoYXMgbm8gbmFtZS4KClR1ZSBKYW4gIDUgMTg6Mzg6NTkgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvbWFpbi5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVdhcm5zIHVzZXIgaWYgbXVsdGlwbGUgLWRsbCBzd2l0Y2hlcyBhcmUgdXNlZCBvbiBjb21tYW5kIGxpbmUuCgoJKiBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmM6IEFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglGaXhlZCBhIGxlZnRvdmVyIEhlYXBGcmVlIGluIHRoZSB0cmFja2JhciBjb21tb24gY29udHJvbC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL3RhYi5oLCBkbGxzL2NvbWN0bDMyL3RhYi5jOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgdGFiIGNvbW1vbiBjb250cm9sICh3aXRoIHRoYW5rcyB0byBBbmRlcnMKCUNhcmxzc29uIDxhbmRlcnMuY2FybHNzb25AbGludXgubnU+KS4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgZGxscy9jb21jdGwzMi9wcm9wc2hlZXQuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL3Byb3BzaGVldC5oLCByZWxheTMyL2NvbWN0bDMyLnNwZWM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJQWRkZWQgYSBtaXNzaW5nIFByb3BlcnR5U2hlZXQzMkFXIGFuZCBDcmVhdGVQcm9wZXJ0eVNoZWV0UGFnZSBzdHViLAoJYW5kIHNvbWUgbWlzc2luZyBkZWZpbmVzLgoKCSogbWlzYy9tYWluLmMsIHNjaGVkdWxlci9zeXNsZXZlbC5jLCBncmFwaGljcy92Z2EuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVXNlIE1ha2VDcml0aWNhbFNlY3Rpb25HbG9iYWwgb24gYWxsIGNyaXRpY2FsIHNlY3Rpb25zIHVzZWQgYWNyb3NzCglwcm9jZXNzIGJvdW5kYXJpZXMuCgoJKiBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHByb3RvdHlwZXMgZm9yIE1ha2VDcml0aWNhbFNlY3Rpb25HbG9iYWwsIENvbnZlcnRUb0dsb2JhbEhhbmRsZS4KCgkqIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIG1hbiBwYWdlLgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYzogR2VyYWxkIFBmZWlmZXIgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CglGaXhlZCBhcmdzIG9mIE1aX0NyZWF0ZVByb2Nlc3MuCgoJKiBwcm9ncmFtcy9jbG9jay9sYW5ndWFnZS5jLCBwcm9ncmFtcy9ub3RlcGFkL2xhbmd1YWdlLmMsIHByb2dyYW1zL3Byb2dtYW4vbWFpbi5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgc3RyaW5nIGJ1ZyBpbiBwcm9ncmFtcy8uCgoJKiBtc2Rvcy9pb3BvcnRzLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIHN0dXBpZCAiYWN0aW9uIiBlbXVsYXRpb24gZm9yIGhhcmR3YXJlIHRpbWVycyBpbiBpb3BvcnRzLmMuCgoJKiBkbGxzL3dpbmFzcGkvd2luYXNwaTE2LmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFnYWluIGEgc21hbGwgRE9TQVNQSSBwYXRjaC4KCgkqIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cywgZG9jdW1lbnRhdGlvbi9mb250cywgd2luZG93cy9zeXNtZXRyaWNzLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gY2hlY2sgaWYgcGFsZXR0ZSBpcyBub3QgbnVsbCB3aGVuIHNldHRpbmcgYSBwYWxldHRlCgktIGNoZWNrIGlmIHdpbmRvdyBoYW5kbGUgaXMgdmFsaWQgYmVmb3JlIGdldHRpbmcgaXRzICdkcmF3YWJsZScKCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVByZXZlbnQgY29yZSBkdW1wIHdpdGggc29tZSBUVEYgKHdoZW4gWDExIHJ1bnMgd2l0aCBhIHRydWUgdHlwZQoJc2VydmVyKS4KCgkqIHNlcnZlci9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVXNlIHN0ZG91dCBmb3IgZGVmYXVsdCBjb25zb2xlIG91dHB1dC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAgMyAxNzowMDoyMCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBncmFwaGljcy9kM2RsaWdodC5jLCBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2QzZHZpZXdwb3J0LmMsIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS93aW5lX2dsLmgsIG11bHRpbWVkaWEvZHNvdW5kLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3QzRCwgZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0ZHJhdywgZ3JhcGhpY3MvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL2QzZF9wcml2YXRlLmgsIGdyYXBoaWNzL2QzZGNvbW1vbi5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYmVnaW5uaW5nIG9mIGltcGxlbWVudGF0aW9uIG9mIERpcmVjdDNEMiAoRFggNS4wKSBhbmQgYXNzb2NpYXRlZCBjbGFzc2VzCgktIHNvbWUgYmFzaWMgY29kZSBmb3IgRGlyZWN0M0QgYW5kIERpcmVjdDNERXhlY3V0ZUJ1ZmZlciAoRFggMy4wKQoJLSBhZGRlZCBzdHJldGNoaW5nIHRvIEJsdCBmdW5jdGlvbgoKCSogbWlzYy92ZXJzaW9uLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVHJ5IHRvIGF1dG9kZXRlY3QgTlQ0LgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCTAgbWVhbnMgc3VjY2VzcywgYWxsIGVsc2UgZmFpbHVyZSBmb3IgV2FpdEZvclNpbmdsZU9iamVjdC4KCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJRG8gbm90IGFkdmFuY2UgdGhlIGN1cnNvciBpbiBjZXJ0YWluIHJvdXRpbmVzLiBUaGlzIGNsZWFuZWQgdXAgdGhlCglpbXBsZW1lbnRhdGlvbiBxdWl0ZSBhIGJpdC4KCgkqIGxvYWRlci9tYWluLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJU2V0IGNvbnNvbGUgdmlkZW8gbW9kZSB3aGVuIGxvYWRpbmcgRE9TIGFwcC4gKEV2ZW50dWFsbHksIEkgd2FudCB0bwoJbWltaWMgV2luZG93cyA5eCdzIGJlaGF2aW9yIGJ5IHNldHRpbmcgdGhlIHZpZGVvIG1vZGUgb25seSB3aGVuIG5vbgoJSU5UIDIxIGNhbGxzIGFyZSB1c2VkIHRvIGFsbG93IGZvciBhcmJpdHJhcnktc2l6ZWQgY29uc29sZXMpLgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgY29uc29sZS94dGVybS5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglYdGVybSBkcml2ZXIgY2FuIG5vdyByZXNpemUgdGhlIHRlcm1pbmFsIHdoZW4gYSBtb2RlIGNoYW5nZSBpcwoJZGV0ZWN0ZWQuCgoJKiBjb25zb2xlL2dlbmVyaWMuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglMb25nIHN0YW5kaW5nIHNjcm9sbCBidWcgZml4ZWQhCgoJKiBjb25zb2xlL25jdXJzZXMuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2NvbnNvbGUuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVJld3JpdGUgb2YgY29uZmlndXJhdGlvbiBzeXN0ZW0gdG8gc3VwcG9ydCAicmVndWxhciIgY3Vyc2VzIGFzIHdlbGwgYXMKCWVsaW1pbmF0aW5nIHRoZSAtLXdpdGgtbmN1cnNlcyBvcHRpb24uIE5vdywgbmN1cnNlcyBzdXBwb3J0IHdpbGwgYmUKCWJ1aWx0IGluIGlmIGEgY29tcGF0aWJsZSBsaWJyYXJ5IGlzIGRldGVjdGVkLgoKCSogaW5jbHVkZS93aW50eXBlcy5oLCB3aW5kb3dzL2RlZmRsZy5jOgoJTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXggdGhlIHJldHVybiB0eXBlIG9mIERMR1BST0MgdHlwZSBhbmQgbWFzayBvdXQgdGhlIHVuc2V0IGhpZ2h3b3JkIG9mCgl0aGUgcmV0dXJuIHdoZW4gYSAxNiBiaXQgZGlhbG9nIHByb2MgaXMgY2FsbGVkLgoKCSogaW5jbHVkZS9pbnRlcmZhY2VzLmg6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglBZGQgaW50ZXJmYWNlIElEJ3MgZm9yIHVwY29taW5nIElUeXBlTGliIGltcGxlbWVudGF0aW9uLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4IGZvciB0cmFpbGluZyBzbGFzaGVzLCByZXBldGl0aW9uIG9mICcvJyBvciAnXCcgYW5kCglTZXRMYXN0RXJyb3IoKSBpbiBHZXRGdWxsUGF0aG5hbWUuCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvTWFrZWZpbGUuaW4sIGRsbHMvYWR2YXBpMzIvLmN2c2lnbm9yZSwgZGxscy9hZHZhcGkzMi9NYWtlZmlsZS5pbiwgZGxscy9hZHZhcGkzMi9hZHZhcGkuYywgZGxscy9hZHZhcGkzMi9ldmVudGxvZy5jLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIGRsbHMvYWR2YXBpMzIvc2VydmljZS5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWMsIHdpbjMyL0F0dGljL2FkdmFwaS5jLCB3aW4zMi9BdHRpYy9zZWN1cml0eS5jLCB3aW4zMi9NYWtlZmlsZS5pbiwgd2luMzIvaW5pdC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3ZlZCBBRFZBUEkzMiBmaWxlcyB0byBkbGxzL2FkdmFwaTMyLgoJQWRkZWQgc3R1YnMgZm9yIGV2ZW50bG9nIGZ1bmN0aW9ucy4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgTlRTSENoYW5nZU5vdGlmeVJlZ2lzdGVyLCBOVFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3Rlci4KCUNsZWFudXAsIHNvbWUgbW9yZSBmdW5jdGlvbnMgVU5JQ09ERSByZWFkeS4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU0hDbG9uZVNwZWNpYWxJRExpc3QgaW1wbGVtZW50ZWQuCglTSEdldERhdGFGcm9tSURMaXN0QSBjb3JyZWN0ZWQuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNoZWxsX0dldENhY2hlZEltYWdlSW5kZXgzMltBfFddIGltcGxlbWVudGVkLgoKCSogbXNkb3MvaW50MjEuYywgbXNkb3MvaW50MjUuYywgbXNkb3MvaW50MjYuYywgZmlsZXMvZHJpdmUuYywgaW5jbHVkZS9kcml2ZS5oOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJSW1wbGVtZW50ZWQgcmF3IGRldmljZSBhY2Nlc3MgY2FsbHMgZm9yIGlvY3RsR2VuZXJpY0Jsa0RldlJlcSgpCglhbmQgdGhlcmVmb3JlIG1vdmVkIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgaW50Mls1Nl0uYyBpbnRvIGZpbGVzL2RyaXZlLmMuCgoJKiBtc2Rvcy9pb3BvcnRzLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIGF1dG9tYXRpYyBDTU9TIFJBTSBjaGVja3N1bSBjYWxjdWxhdGlvbi4KCgkqIGRsbHMvd2luYXNwaS93aW5hc3BpMTYuYywgZGxscy93bmFzcGkzMi93aW5hc3BpMzIuYywgZG9jdW1lbnRhdGlvbi9hc3BpLCByZWxheTMyL3duYXNwaTMyLnNwZWM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglTZW5kQVNQSTMyQ29tbWFuZDMyIGhhcyB0byBiZSBfX2NkZWNsLgoJVXBkYXRlZCBkb2N1bWVudGF0aW9uL2FzcGkgYW5kIHJldmVydGVkIGFuIEVSUiBiYWNrIHRvIFdBUk4uCgoJKiBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHM6IEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCU9mIGNvdXJzZSB3ZSB3YW50IHRoZSBsYXN0IDEwMCBsaW5lcywgbm90IHRoZSBmaXJzdCAxMDAgbGluZXMuCglVc2UgJ3RhaWwnIGluc3RlYWQgb2YgJ2hlYWQnLiBBbHNvIGZpeCB0ZXh0IGFsaWdubWVudCBmcm9tCglwcmV2aW91cyBwYXRjaC4KCgkqIG11bHRpbWVkaWEvam95c3RpY2suYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglSZWFkaW5nIGpveXN0aWNrIDUgd2hlbiB3ZSBvbmx5IHN1cHBvcnQgNCBzaG91bGQgZmFpbCBpbnN0ZWFkIG9mCgloYW5nLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglQbGF5aW5nIGEgbm9uLWV4aXN0ZW50IENEIHNob3VsZCBmYWlsIGluc3RlYWQgb2YgY3Jhc2guCgoJKiBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGVjayBmb3IgbmVjZXNzYXJ5IGNvbmZpZ3VyZSByZXJ1bnMgZm9yIE1ha2VmaWxlIGFuZCBNYWtlLnJ1bGVzCglnZW5lcmF0aW9uLgoKCSogbWlzY2VtdS9pbnN0ci5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUVtdWxhdGVzIGlucy9vdXRzIGNvcnJlY3RseSBmb3IgRE9TIHByb2dyYW1zLgoKCSogb2xlL3N0b3JhZ2UuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2VydmVyL2NoYW5nZS5jLCBzZXJ2ZXIvY29uc29sZS5jLCBzZXJ2ZXIvZXZlbnQuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL21hcHBpbmcuYywgc2VydmVyL211dGV4LmMsIHNlcnZlci9vYmplY3QuYywgc2VydmVyL3BpcGUuYywgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3NlbWFwaG9yZS5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jLCB3aW4zMi9kZXZpY2UuYywgd2luMzIvZmlsZS5jLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2RldmljZS5oLCBpbmNsdWRlL2ZpbGUuaCwgaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgbG9hZGVyL25lL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgbWlzYy9jcnRkbGwuYywgbXNkb3MvaW50MjEuYywgbXNkb3MvdnhkLmM6CglJbXBsZW1lbnRlZCBmaWxlIHNoYXJpbmcgY2hlY2tzIGluIHRoZSBzZXJ2ZXIuCglBZGRlZCBzZXQgZmlsZSB0aW1lIHNlcnZlciByZXF1ZXN0LgoJT3ZlcmFsbCBjbGVhbiB1cCBvZiB0aGUgZmlsZSBoYW5kbGluZyAoRE9TIGRldmljZSBoYW5kbGluZyBpcyBub3cKCWJyb2tlbiwgc2hvdWxkIGJlIHJlZG9uZSkuCgpTYXQgSmFuICAyIDA4OjIyOjM0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtZW1vcnkvdmlydHVhbC5jOgoJRml4ZWQgYnVnIGluIENyZWF0ZUZpbGVNYXBwaW5nIHdoZW4gbmFtZSBpcyBub3QgTlVMTC4KCgkqIHNlcnZlci9yZXF1ZXN0LmM6IEZpeGVkIENIRUNLX1NUUklORyBkaXNwbGF5LgoKRnJpIEphbiAgMSAxOTo1MToyNSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBtZW1vcnkvbG9jYWwuYzoKCVJpY2hhcmQgQSBMb3VnaCA8cmFsb3VnaC5jZWRAZG5ldC5jby51az4KCVB1dCByZXR1cm4gdmFsdWUgb2YgTG9jYWxBbGxvYyBpbiBDWCB0b28uCgoJKiBpbmNsdWRlL3BzZHJ2Lmg6IERpbWl0cmllIE8uIFBhdW4gPGRpbWlAY3MudG9yb250by5lZHU+CglQcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgaW5jbHVkZXMuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6IFVzZSBwcm9wZXIgc3lzdGVtIGRpcmVjdG9yeS4KCgkqIHNjaGVkdWxlci9wcm9jZXNzLmM6IEdvdCByaWQgb2YgQ0xJRU5UX0dldFByb2Nlc3NJbmZvLgoKCSogd2luZG93cy9jbGFzcy5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2RlZmRsZy5jLCB3aW5kb3dzL2RlZnduZC5jLCB3aW5kb3dzL2RyaXZlci5jLCB3aW5kb3dzL21zZ2JveC5jLCB3aW5kb3dzL3BhaW50aW5nLmMsIHdpbmRvd3MvdXNlci5jLCB3aW5kb3dzL3dpbmhlbHAuYywgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBpbmNsdWRlL3dpbnJlZy5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgbG9hZGVyL21vZHVsZS5jLCBtaXNjL2NvbW0uYywgbWlzYy9zaGVsbC5jLCBtaXNjL3Nwb29sZXIuYywgbWlzYy9zcHkuYywgbWlzYy93aW5zb2NrLmMsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21jaXdhdmUuYywgbXVsdGltZWRpYS9taWRpLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgb2JqZWN0cy9jbGlwcGluZy5jLCBvbGUvb2xlb2JqLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9kZXNrdG9wLmMsIGNvbnRyb2xzL2ljb250aXRsZS5jLCBjb250cm9scy9zdGF0aWMuYywgZGVidWdnZXIvZGJnLnksIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBncmFwaGljcy9wc2Rydi9lc2NhcGUuYywgaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgaW5jbHVkZS9kaXNwbGF5LmgsIGluY2x1ZGUvaW1hZ2VsaXN0LmgsIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS9zaGVsbC5oLCBpbmNsdWRlL3N0b3JhZ2UuaCwgaW5jbHVkZS9zdHJ1Y3QzMi5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJTW92ZXMgbW9yZSBzdHVmZiBmcm9tIHdpbmRvd3MuaC4KCS0gaW5jbHVkZS93aW51c2VyLmggLSBpbnRlcmZhY2UgcmVsZXZhbnQgdG8gdXNlcjMyLnNwZWMKCS0gaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oIC0gdGhlIG9sZCAxNiBiaXQgaW50ZXJmYWNlIChpbnRlcm5hbCB1c2UpCgktIGluY2x1ZGUvd2luYmFzZS5oIC0gc29tZSBtaW5vciB1cGRhdGVzIHRvIGtlZXAgdGhpbmdzIGNvaGVyZW50LgoJLSBMb3Qgb2Ygb3RoZXIgZmlsZXMgbWFkZSB0byBpbmNsdWRlIHdpbmUvd2ludXNlcjE2LmgsIHdoaWNoIGlzIG5vCgkgIGxvbmdlciBpbmNsdWRlZCBmcm9tIHdpbmRvd3MuaAoKCSogc2NoZWR1bGVyL2hhbmRsZS5jOiBGaXhlZCBDbG9zZUhhbmRsZSgpIG9uIGdsb2JhbCBoYW5kbGVzLgoKCSogUkVBRE1FLCBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMsIGRvY3VtZW50YXRpb24vd2luOTVsb29rLCBkb2N1bWVudGF0aW9uL3dpbmUubWFuOgoJSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJQWRkIHNvbWUgaW5mb3JtYXRpb24gdG8gdGhlIG1hbiBwYWdlIGFuZCBSRUFETUUgZmlsZS4KCU1ha2UgZG9jdW1lbnRhdGlvbi93aW45NWxvb2sgc2F5IFtUd2Vhay5MYXlvdXRdIGluc3RlYWQgb2YKCVtUd2Vha3MuTGF5b3V0XS4KCUZpeCBpbmNvcnJlY3QgY29tbWFuZCBnaXZlbiBpbiBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMuCglTdGFuZGFyZCBlcnJvciB3YXMgbm90IGJlaW5nIHJlZGlyZWN0ZWQsIHNvIG1vc3Qgb2YgdGhlCglvdXRwdXQgd2FzIGxvc3QuCgoJKiBvYmplY3RzL2JpdG1hcC5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCURlbHBoaSAyLjAgbmVlZHMgdG8gYWxsb2NhdGUgYSBiaXRtYXAgYmlnZ2VyIHRoYW4gNDA5NiBiaXRzIHdpZGUuCgoJKiBtaXNjL3ByaW50ZHJ2LmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJSW5pdGlhbGl6ZSBscGR3TmVlZGVkLgoKCSogaWYxNjMyL3Nub29wLmM6CglNYXJjdXMgTWVpc3NuZXIgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUluY2x1ZGUgc3R1ZmYgZXZlbiBpZiBub3Qgb24gX19pMzg2X18gZm9yIGRlYnVnIGRlZmluZXMuCgoJKiBvbGUvdmFyaWFudC5jOgoJTWFyY3VzIE1laXNzbmVyIDxNYXJjdXMuTWVpc3NuZXJAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbm90aGVyIC8vIGNvbW1lbnQgZml4ZWQuCgoJKiBzZXJ2ZXIvZmlsZS5jOgoJTWFyY3VzIE1laXNzbmVyIDxNYXJjdXMuTWVpc3NuZXJAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglOZWVkIDxlcnJuby5oPiBmb3IgZXJybm8gZGVjbC4gb24gU29sYXJpcy4KCgkqIGluY2x1ZGUvd2luZ2RpLmgsIGluY2x1ZGUveDExZm9udC5oLCBvYmplY3RzL2ZvbnQuYzoKCURvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB3aW5laHEuY29tPgoJSW1wbGVtZW50IFRyYW5zbGF0ZUNoYXJzZXRJbmZvLCBjaGFuZ2UgY2hhcnNldCB0eXBlIHRvIEJZVEUuCgoJKiBjb250cm9scy9jb21iby5jLCBjb250cm9scy9saXN0Ym94LmMsIGluY2x1ZGUvY29tYm8uaDoKCUFsZXggS29yb2JrYSA8a29yb2JrYUBnYWxheHkuYW1zLnN1bnlzYi5lZHU+CglCZXR0ZXIgQ0JfU0VUQ1VSU0VMIG1lc3NhZ2UgaGFuZGxpbmcuCgoJKiBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvdGhyZWFkLmgsIHNjaGVkdWxlci9zeW5jaHJvLmMsIHNjaGVkdWxlci90aHJlYWQuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYzoKCU1vdmVkIE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiB0byBVU0VSIHJvdXRpbmVzLCB1c2luZwoJYSBub3JtYWwgV2luMzIgZXZlbnQuCgoJKiB0b29scy9tYWtlX3JlcXVlc3RzOiBTZW5kIGRlYnVnZ2luZyBvdXRwdXQgdG8gc3RkZXJyLgoKCSogZmlsZXMvY2hhbmdlLmMsIGZpbGVzL2Rvc19mcy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZmlsZS5oLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNjaGVkdWxlci9ldmVudC5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNjaGVkdWxlci9tdXRleC5jLCBzY2hlZHVsZXIvcGlwZS5jLCBzY2hlZHVsZXIvc2VtYXBob3JlLmMsIHdpbjMyL2NvbnNvbGUuYzoKCUNsZWFuZWQgdXAgYW5kIHJlbW92ZWQgc29tZSBubyBsb25nZXIgdXNlZCBjb2RlLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogVXNlIHNlcnZlciBmaWxlIG1hcHBpbmcgb2JqZWN0cy4KCgkqIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIGluY2x1ZGUvc2VydmVyL3RocmVhZC5oLCBzZXJ2ZXIvTWFrZWZpbGUuaW4sIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tYWluLmMsIHNlcnZlci9tYXBwaW5nLmMsIHNlcnZlci9vYmplY3QuYywgc2VydmVyL3BpcGUuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3RocmVhZC5jLCBzZXJ2ZXIvdHJhY2UuYywgaW5jbHVkZS9zZXJ2ZXIuaDoKCUFkZGVkIHNlcnZlci1zaWRlIGZpbGUgbWFwcGluZyBvYmplY3Qgc3VwcG9ydC4KCgkqIG1pc2MvY3J0ZGxsLmM6CglIYWNrZWQgc3RkaW8gZnVuY3Rpb25zIHRvIHVzZSBXaW4zMiBmaWxlIGhhbmRsZXMuIFN0aWxsIG5lZWRzIGEgcHJvcGVyCglzdGRpbyBlbXVsYXRpb24uCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmMsIGxvYWRlci9uZS9yZXNvdXJjZS5jLCBsb2FkZXIvbmUvc2VnbWVudC5jOgoJVXNlIFdpbjMyIGZpbGUgaGFuZGxlcyBpbnN0ZWFkIG9mIFVuaXggb25lcy4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgaW5jbHVkZS9wcm9jZXNzLmgsIGxvYWRlci9kb3MvbW9kdWxlLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIGluY2x1ZGUvZG9zZXhlLmg6CglUYWtlIGludG8gYWNjb3VudCBoYW5kbGUgaW5oZXJpdGFuY2UgZmxhZy4KClRodSBEZWMgMzEgMTU6NTU6MTkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRlYnVnZ2VyL2RiX2Rpc2FzbS5jOgoJQ2hhbmdlZCBkYl90YXNrX3ByaW50c3ltIHRvIGFsd2F5cyBwcmludCBhIGZ1bGwgYWRkcmVzcywgbm8gbWF0dGVyCgl3aGF0IHRoZSBvcGVyYW5kIHNpemUgaXMuCgoJKiBzY2hlZHVsZXIvY3JpdHNlY3Rpb24uYzogUmUtaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFsIHNlbWFwaG9yZS4KCgkqIHdpbmRvd3MvcXVldWUuYywgZmlsZXMvY2hhbmdlLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9rMzJvYmouaCwgaW5jbHVkZS9wcm9jZXNzLmgsIGluY2x1ZGUvdGhyZWFkLmgsIGxvYWRlci9zaWduYWwuYywgbWVtb3J5L3ZpcnR1YWwuYywgbWlzYy90b29saGVscC5jLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNjaGVkdWxlci9ldmVudC5jLCBzY2hlZHVsZXIvaGFuZGxlLmMsIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL211dGV4LmMsIHNjaGVkdWxlci9waXBlLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci9zZW1hcGhvcmUuYywgc2NoZWR1bGVyL3N5bmNocm8uYywgc2NoZWR1bGVyL3RocmVhZC5jLCB3aW4zMi9jb25zb2xlLmMsIHdpbjMyL2RldmljZS5jOgoJUmVtb3ZlZCBjbGllbnQtc2lkZSB3YWl0IGZ1bmN0aW9uczsgYWxsIHdhaXRpbmcgaXMgbm93IGRvbmUgdGhyb3VnaAoJdGhlIHNlcnZlci4KCgkqIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2NoYW5nZS5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdHJhY2UuYywgaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaDoKCUFkZGVkIGNoYW5nZSBub3RpZmljYXRpb25zLgoJQWRkZWQgZ2xvYmFsIGhhbmRsZSBzdXBwb3J0LgoKV2VkIERlYyAzMCAxMjoxMTo1MiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS90aHJlYWQuaCwgc2NoZWR1bGVyL3N5bmNocm8uYzoKCUNoYW5nZWQgc2VydmVyIHdhaXQgbG9naWMgYSBiaXQuCgoJKiB3aW4zMi9jb25zb2xlLmM6CglIYWNrcyB0byBzdXBwb3J0IHNlcnZlci1zaWRlIGNvbnNvbGUuIFNob3VsZCBiZSByZWRvbmUgcHJvcGVybHkKCXNvbWUgZGF5LgoKCSogZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9maWxlLmgsIHdpbjMyL2ZpbGUuYywgd2luMzIvbmV3Zm5zLmM6CglSZWltcGxlbWVudGVkIFJlYWQvV3JpdGVGaWxlIHRvIHVzZSBzZXJ2ZXIgZmlsZSBkZXNjcmlwdG9ycy4KCVJlbW92ZWQgZmlsZSBwb3NpdGlvbiBoYWNrIGFzIGl0IGlzIHdyb25nIGZvciBXaW4zMiAoc2hvdWxkIGJlIHJlZG9uZQoJZm9yIFdpbjE2IG9ubHkpLgoKCSogc2NoZWR1bGVyL01ha2VmaWxlLmluLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNjaGVkdWxlci9waXBlLmM6CglBZGRlZCBhbm9ueW1vdXMgcGlwZSBzdXBwb3J0CgoJKiBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBzZXJ2ZXIvTWFrZWZpbGUuaW4sIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9ldmVudC5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvbXV0ZXguYywgc2VydmVyL29iamVjdC5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci90aHJlYWQuYywgc2VydmVyL3RyYWNlLmM6CglBZGRlZCBzZXZlcmFsIGZpbGUgc2VydmVyIHJlcXVlc3RzCglBZGRlZCBzZXJ2ZXItc2lkZSBwaXBlcyBhbmQgY29uc29sZXMKClN1biBEZWMgMjcgMTU6Mjg6NTUgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvY3J0ZGxsLmMsIG1zZG9zL2ludDIxLmMsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzZXJ2ZXIvTWFrZWZpbGUuaW4sIHNlcnZlci9ldmVudC5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvbXV0ZXguYywgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3NlbWFwaG9yZS5jLCBzZXJ2ZXIvdHJhY2UuYywgdG9vbHMvbWFrZV9yZXF1ZXN0cywgZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL2ZpbGUuaCwgaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgbG9hZGVyL21haW4uYywgbWVtb3J5L3ZpcnR1YWwuYzoKCUFkZGVkIGJlZ2lubmluZ3Mgb2Ygc2VydmVyLXNpZGUgZmlsZSBoYW5kbGluZy4KCUFkZGVkIC1kZWJ1Z21zZyArc2VydmVyIHN1cHBvcnQuCglCZXR0ZXIgc2VydmVyIHJlcXVlc3QgZHVtcGluZyBmb3IgdmFyYXJncyByZXF1ZXN0cy4KCgkqIHdpbmRvd3MveDExZHJ2L3duZC5jOgoJRml4ZWQgU2V0Rm9jdXMgdGhhdCB3YXMgYnJva2VuIHdoZW4gbW92ZWQgdG8geDExZHJ2LgoKCSogaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3RocmVhZC5oLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9tYWluLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvc2VsZWN0LmMsIHNlcnZlci9zZW1hcGhvcmUuYywgc2VydmVyL3NvY2tldC5jLCBzZXJ2ZXIvdGhyZWFkLmM6CglBZGRlZCBhZGRfcXVldWUvcmVtb3ZlX3F1ZXVlIHRvIHNlcnZlciBvYmplY3Qgb3BlcmF0aW9ucy4KCU1vdmVkIHNlbGVjdCgpIGxvb3AgZnVuY3Rpb25zIHRvIHNlbGVjdC5jLgoKU2F0IERlYyAyNiAxOTo0NzowMCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmM6CglSZW5hbWVkIEVSUiBtYWNybyB0byBhdm9pZCBjb25mdXNpbmcgdGhlIG1ha2VfZGVidWcgc2NyaXB0LgoKCSogb2xlL3N0b3JhZ2UuYywgb2xlL3R5cGVsaWIuYywgaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL29sZWF1dG8uaCwgaW5jbHVkZS9zdG9yYWdlLmgsIGluY2x1ZGUvd2ludmVyc2lvbi5oLCBvbGUvY29tcG9iai5jLCBvbGUvb2xlMi5jLCBvbGUvb2xlMm5scy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB0b25zIG9mIGluY29tcGxldGUgcHJvdG90eXBlcywgYXNzaWdubWVudCdzIG9mIHBvaW50ZXIgd2l0aAoJZGlmZmVyZW50IHNpZ25lZG5lc3MsIHN1cGVyZmxvdXMgJywnIGFuZCAnOycgaW4gc3RydWN0dXJlcywgd3JvbmcKCXJldHVybi10eXBlcywgbG9zZSBvZiBkaWdpdHMgYW5kIHNvbWUgc21hbGwgZ2xpdGNoZXMuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYywgaW5jbHVkZS94MTFmb250Lmg6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAZ2FsYXh5LmFtcy5zdW55c2IuZWR1PgoJQ2xlYW5lZCB1cCBmb250IGVuY29kaW5nIGhhbmRsaW5nLiBBZGRlZCAnSWdub3JlIycgb3B0aW9uIHRvIHRoZQoJW2ZvbnRzXSBzZWN0aW9uLiBBbHNvLCBmaWxlIHdpdGggY2FjaGVkIG1ldHJpY3Mgbm93IGhhcyB0aGUgdmFsdWUgb2YKCSRESVNQTEFZIGFwcGVuZGVkIHRvIHRoZSBmaWxlbmFtZS4KCgkqIHByb2dyYW1zL2Nsb2NrL2xhbmd1YWdlLmMsIHByb2dyYW1zL2Nsb2NrL21haW4uYywgcHJvZ3JhbXMvbm90ZXBhZC9kaWFsb2cuYywgcHJvZ3JhbXMvbm90ZXBhZC9sYW5ndWFnZS5jLCBwcm9ncmFtcy9ub3RlcGFkL21haW4uYywgcmMvc3lzdGVzdC5jLCB3aW5kb3dzL211bHRpbW9uLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGZpbGVzL3Byb2ZpbGUuYywgZ3JhcGhpY3MvcGF0aC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvZDNkLmgsIGluY2x1ZGUvZHBsYXkuaCwgaW5jbHVkZS9kc291bmQuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9vbGVvYmouaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS92ZncuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbmlvY3RsLmgsIG1pc2MvbWFpbi5jLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvZHNvdW5kLmMsIG9sZS9vbGUyLmMsIGRlYnVnZ2VyL3N0YWJzLmMsIGRsbHMvY29tY3RsMzIvYW5pbWF0ZS5jLCBkbGxzL2NvbWN0bDMyL2hlYWRlci5jLCBkbGxzL2NvbWN0bDMyL2hvdGtleS5jLCBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmMsIGRsbHMvY29tY3RsMzIvcGFnZXIuYywgZGxscy9jb21jdGwzMi9yZWJhci5jLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYywgZGxscy9jb21jdGwzMi90b29sdGlwcy5jLCBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmMsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGFuZ2VkIC8vIGNvbW1lbnRzIHRvIC8qICovIHNvIFdJTkUgY29tcGlsZXMgd2l0aCBub24tZ2NjIGNvbXBpbGVycwoJYWdhaW4uCgoJKiB3aW5kb3dzL3R0eWRydi9jbGlwYm9hcmQuYywgd2luZG93cy90dHlkcnYvZXZlbnQuYywgd2luZG93cy90dHlkcnYvaW5pdC5jLCB3aW5kb3dzL3gxMWRydi9jbGlwYm9hcmQuYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCB3aW5kb3dzL3gxMWRydi9tb3VzZS5jLCB3aW5kb3dzL3gxMWRydi93bmQuYywgZGVidWdnZXIvZGJnLnksIGdyYXBoaWNzL2RkcmF3LmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JydXNoLmMsIGdyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBpbmNsdWRlL2NsaXBib2FyZC5oLCBpbmNsdWRlL2RkcmF3LmgsIGluY2x1ZGUvZGlzcGxheS5oLCBpbmNsdWRlL3R0eWRydi5oLCBpbmNsdWRlL3dpbi5oLCBpbmNsdWRlL3gxMWRydi5oLCBvYmplY3RzL3BhbGV0dGUuYywgd2luZG93cy9kY2UuYywgd2luZG93cy9kaW5wdXQuYywgd2luZG93cy9kaXNwbGF5LmMsIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU1vdmVkIG1vcmUgdGhpbmdzIHRvIHRoZSBYMTEgZHJpdmVyLgoKCSogaW5jbHVkZS93aW5nZGkuaCwgb2JqZWN0cy9icnVzaC5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJRml4ZWQgdGhlIHByb3RvdHlwZSBvZiBDcmVhdGVESUJQYXR0ZXJuQnJ1c2hQdAoKCSogaW5jbHVkZS93aW5kb3dzLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCVJlbW92ZWQgdGhlIENOX3h4eCBtYWNyb3Mgc2luY2UgdGhleSBhcmUgbm90IHVzZWQsIGRvIG5vdCBjb3JyZXNwb25kIHRvCglhbnkgV2luZG93cyBkZWZpbmUgYW5kIGNvbmZsaWN0IHdpdGggTUZDIGRlZmluZXMuCgl3aW5kb3dzLmggbXVzdCBwcm92aWRlIGFsbCB0aGUgZGVmaW5pdGlvbnMgY29udGFpbmVkIGluIHdpbmJhc2UuaAoJU29tZSBYeHgzMiBmdW5jdGlvbnMgZGlkIG5vdCBoYXZlIHRoZSBhc3NvY2lhdGVkIFh4eCBtYWNyby4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJQWRkZWQgYSB0eXBlZGVmIGZvciBfX2ludDY0IHdoaWNoIGlzIGEgYnVpbHRpbiBWaXN1YWwgQysrIHR5cGUKCUFkZGVkIGEgdHlwZWRlZiBmb3IgUFVJTlQKCgkqIGluY2x1ZGUvb2JqYmFzZS5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglSRUZJSUQgd2FzIG5vdCBkZWZpbmVkLgoKCSogY29uZmlndXJlLmluLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvd2luc29jay5oLCBtaXNjL3dpbnNvY2suYywgY29uZmlndXJlOgoJUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCWNvbmZpZ3VyZSBmaXJzdCBjaGVja3Mgd2hldGhlciBpdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIElQWCBjb2RlIHdpdGgKCUdsaWJjIGhlYWRlcnMuIElmIGl0IGZhaWxzLCBuZXh0IGNoZWNrIGRldGVybWluZXMgd2hldGhlciBkaXJlY3QgaW5jbHVzaW9uCglvZiA8bGludXgvaXB4Lmg+IHdvcmtzLgoKCSogaW5jbHVkZS90Y2hhci5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglQcm92aWRlcyB0aGUgbWFwcGluZ3MuIE1CQ1MgYW5kIFVuaWNvZGUgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQuCglTdGFuZGFyZCAoU0JDUykgZnVuY3Rpb25zIG1heSBleGlzdCBvciBub3QsIHdpdGggdGhlIHNhbWUgb3IgYSBkaWZmZXJlbnQKCXNlbWFudGljcy4KCgkqIGRsbHMvY29tY3RsMzIvaXBhZGRyZXNzLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9pcGFkZHJlc3MuaDoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglJUGFkZHJlc3MgY29tbW9uIGNvbnRyb2wgaW1wbGVtZW50YXRpb24uIEZpcnN0IHRyeTsgbmVlZHMgbW9yZSB3b3JrIHRvCglyZW1vdmUgYm9yaW5nIGJ1Z3MuCgpGcmkgRGVjIDI1IDA4OjU1OjE1IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9vbGVvYmouaCwgaW5jbHVkZS9zaGxvYmouaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgdGhlIFRFWFQgcmVkZWZpbmVkIHdhcm5pbmdzLgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglIb29rIGludG8gdGhlIChzdHViYmVkKSByZXNpemUgY29kZSBpbiBtc2RvcyBpbnQxMC4KCgkqIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGluY2x1ZGUvY29uc29sZS5oLCBpbmNsdWRlL29wdGlvbnMuaCwgbG9hZGVyL21haW4uYywgbWlzYy9tYWluLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZCBzdXBwb3J0IGZvciBzZWxlY3Rpb24gb2YgY29uc29sZSBtb2RlIGRyaXZlcnMgdG8gdXNlIHVzaW5nIHRoZQoJLWNvbnNvbGUgb3B0aW9uLiBDdXJyZW50bHkgInR0eSIsICJuY3Vyc2VzIiwgYW5kICJ4dGVybSIgYXJlCglzdXBwb3J0ZWQuCglBZGQgc3R1YnMgZm9yIHJlc2l6aW5nIHRoZSBzY3JlZW4gb24gbW9kZSBjaGFuZ2VzLgoKCSogaW5jbHVkZS9kZGVtbC5oLCBtaXNjL2RkZW1sLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCVBhcnRpYWwgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgRERFIEFQSXM6CglEZGVDbXBTdHJpbmdIYW5kbGVzLCBEZGVDcmVhdGVTdHJpbmdIYW5kbGUsIERkZUZyZWVTdHJpbmdIYW5kbGUsCglEZGVRdWVyeVN0cmluZywgRGRlVW5pbml0aWFsaXplLgoKVGh1IERlYyAyNCAxNjo1OToxNyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL01ha2VmaWxlLmluLCBvbGUvcGFyc2VkdC5jLCBvbGUvcGFyc2VkdC5oLCBvbGUvdmFyaWFudC5jOgoJSmVhbi1DbGF1ZGUgQ290ZSA8amVhbi1jbGF1ZGVAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBWYXJEYXRlRnJvbVN0ciBBUEkuCgoJKiBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmMsIGluY2x1ZGUvdHJhY2tiYXIuaDoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CgktIFRvb2x0aXAgc3VwcG9ydAoJLSBWZXJ0aWNhbCB0cmFja2JhcnMgc3VwcG9ydGVkIG5vdwoJLSBUQlNfQk9USCBzdXBwb3J0IChnb2VzIGFsb25nIHdpdGggcGFydGlhbCBjbGVhbnVwIG9mIGRyYXdpbmcgY29kZSkKCS0gVXNlIENPTUNUTDMyIGhlYXAgaW5zdGVhZCBvZiBzeXN0ZW0gaGVhcAoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oOgoJUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbG5ldHdvcmtzLmNvbT4KCUFkZGVkIGFsbCBjbGlwcGVyJjNkIHN0dWJzLgoJU3RhcnRpbmcgQ29sb3JLZXkgc3VwcG9ydC4KCUZpeGVkIHRyYWNlIHN0YXRlbWVudCBpbiBEaXJlY3REcmF3Q3JlYXRlIGFzIGZvcm1hdHRpbmcgd2Fzbid0IGNvcnJlY3QuCglDaGFuZ2VkICJyZXR1cm4gMDsiIHRvICJyZXR1cm4gRERfT0siIG9yICJyZXR1cm4gU19PSyIgYXMgYXBwcm9wcmlhdGUuCglBZGRlZCBTdXJmYWNlRW51bSBkd0ZsYWdzLgoKCSogaW5jbHVkZS9kcGxheS5oLCBtdWx0aW1lZGlhL2RwbGF5LmM6CglQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJQWRkZWQgbWFjcm9zIHRvIGhlYWRlciBmaWxlIGZvciBlYXNpZXIgZnVuY3Rpb24gY2FsbGluZy4KCUNoYW5nZWQgaW1wbGVtZW50YXRpb24gYSBsaXR0bGUgYml0LgoJQWRkZWQgc3R1YnMgZm9yIGRwbGF5My4gU3RpbGwgbmVlZCB0byBicmVhayBpbnRvIEEgYW5kIFcgdmVyc2lvbnMuCgoJKiB3aW4zMi9maWxlLmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWxuZXR3b3Jrcy5jb20+CglDcmVhdGVGaWxlMzJBIHdhcyBvbmx5IGFsbG93aW5nIGNvbnNvbGUgb3BlbnMgb24gQ09OSU4kL09VVCQuIFRoaXMKCWhhcyBiZWVuIGNoYW5nZWQgdG8gaGF2ZSBhIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyZS4KCgkqIGNvbnRyb2xzL2xpc3Rib3guYzogR2VyYXJkIFBhdGVsIDxnLnBhdGVsQHdhbmFkb28uZnI+CglEb24ndCBzZW5kIE9EQV9FTlRJUkUgZm9yIGVtcHR5IGxpc3Rib3hlcyAoTElTVEJPWF9QYWludCkuCgoJKiBpbmNsdWRlL3dpbmJhc2UuaCwgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCB3aW4zMi9rZXJuZWwzMi5jOgoJSmVhbi1DbGF1ZGUgQ290ZSA8amVhbi1jbGF1ZGVAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCB0aGUgR2V0QmluYXJ5VHlwZSBBUEkgZnVuY3Rpb24uCgoJKiBsb2FkZXIvZG9zL2Rvc21vZC5jLCBsb2FkZXIvZG9zL2Rvc21vZC5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmMsIGxvYWRlci9kb3MvbW9kdWxlLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIHNvbWUgbmV3IGRvc21vZCBjb21tdW5pY2F0aW9uIHBvc3NpYmlsaXRpZXMsIGluY2x1ZGluZwoJYWN0aXZhdGluZyBhIGRvc21vZC1zcGVjaWZpYyBzZXRpdGltZXIoKSwgYW5kIHRoZSBjYXB0dXJlIG9mIHNvbWUKCWNvbW1vbiBzaWduYWxzLCB3aGljaCBpcyByZXR1cm5lZCB0byBXaW5lIChwcmV2aW91c2x5IGEgU0lHSUxMCgl3b3VsZCBqdXN0IGNhdXNlIGEgImRvc21vZCBzeW5jIGxvc3QiIHdpdGhvdXQgZXhwbGFuYXRpb24sIG5vdyBpdAoJaW52b2tlcyB0aGUgV2luZSBkZWJ1Z2dlcikuIEludm9rZXMgaW50IDA4IHVwb24gcmVjZWlwdCBvZiBkb3Ntb2QKCVNJR0FMUk0sIHRodXMgc2ltdWxhdGluZyB0aGUgRE9TIHRpbWVyLiBNYWRlIERPUyBpbnRlcnJ1cHQgY2FsbHMKCWJlIHJlcG9ydGVkIGJ5IC1kZWJ1Z21zZyArcmVsYXkgaW5zdGVhZCBvZiAtZGVidWdtc2cgK2ludC4gQW5kCglmaXhlZCBub24taTM4NiBjb21waWxhdGlvbiBvZiBkb3Ntb2QuIChBbnl0aGluZyBlbHNlPyEpCgoJKiBsb2FkZXIvbWFpbi5jLCB3aW5kb3dzL3dpbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglEZXNrdG9wIHdpbmRvdyBxdWV1ZSBoYW5kbGluZyBhZGFwdGVkLgoKCSogd2luZG93cy9jbGlwYm9hcmQuYywgd2luZG93cy9ob29rLmMsIHdpbmRvd3MvdGltZXIuYywgd2luZG93cy93aW5wb3MuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUXVldWUgaGFuZGxpbmcgYWRhcHRlZCB0byBuZXcgcXVldWUgcm91dGluZXMuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvdGFzay5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBzdHViIGZvciBJbml0VGhyZWFkSW5wdXQuCglVc2UgR2V0VGhyZWFkUXVldWUvR2V0RmFzdFF1ZXVlIGluc3RlYWQgb2YgR2V0VGFza1F1ZXVlLgoKCSogbG9hZGVyL3Rhc2suYywgbWlzY2VtdS9tYWluLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBDYWxsb3V0IHRhYmxlIGluc3RlYWQgb2YgZGlyZWN0IEdldFByb2NBZGRyZXNzLgoJVXNlcllpZWxkIG1vdmVkIHRvIFVTRVIuCgoJKiBpbmNsdWRlL2NhbGxiYWNrLmgsIG1pc2MvY2FsbGJhY2suYywgaWYxNjMyL3RodW5rLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNhbGxvdXQgdGFibGUgKGZvciBLRVJORUwtPlVTRVIgY2FsbHMpIGFkZGVkLgoJQ2FsbGJhY2tzLT5DYWxsUG9zdEFwcE1lc3NhZ2VQcm9jIHJlbW92ZWQuCgoJKiBtaXNjL2NhbGxiYWNrLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3Rhc2suaCwgbG9hZGVyL3Rhc2suYywgaWYxNjMyL3RodW5rLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUhhbmRsZSBub24taGFyZHdhcmUgWCBldmVudHMgY29ycmVjdGx5IHdpdGggbmF0aXZlIFVTRVIKCShyZW1vdmVkIHJlZmVyZW5jZSB0byBNRVNTQUdFUVVFVUUgZnJvbSBLRVJORUwgY29kZSkuCglIYW5kbGUgRXhwb3NlIGV2ZW50cyB3aXRoIG5hdGl2ZSBVU0VSLgoKCSogbWlzYy9jcnRkbGwuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUJldHRlciBfdWx0b2EoKS4KCgkqIHdpbjMyL3RpbWUuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUZpeCBzbWFsbCBwcm9ibGVtIGluIEdldFRpbWVab25lSW5mb3JtYXRpb24oKS4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglMb3dlc3Qgc2NhbiBjb2RlIHNlZW1zIHRvIGJlIDEsIG5vdCB6ZXJvLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTdHVicyBmb3IgSURpcmVjdDNEKDIpOjpDcmVhdGVMaWdodCBhbmQgQ3JlYXRlRGV2aWNlIHRvIGF2b2lkIGNyYXNoZXMuCgoJKiBkbGxzL250ZGxsL3J0bC5jLCByZWxheTMyL250ZGxsLnNwZWMsIGRsbHMvbnRkbGwvbnQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlcyBjcmFzaCB3aGVuIHJ1bm5pbmcgd2l0aG91dCBleHRlcm5hbCBzaGVsbDMyLmRsbC4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vcmUgbWVzc2FnZXMgW0xCXyosRU1fKl0gdHJhbnNsYXRlZCAzMkEgZnJvbS90byAzMlcuCgoJKiByZWxheTMyL3VzZXIzMi5zcGVjOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCURlc3QgYnVmZmVyIHdhcyBwcmludGVkIG91dCBhcyBzdHIuCgoJKiBtaXNjL3Zlci5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUdldHRpbmcgc3RyaW5ncyB3aXRoIFZlclF1ZXJ5VmFsdWUzMlcgd2FzIGJyb2tlbi4gQ29tcGxldGUKCXJlY29uc3RydWN0aW9uIG9mIHRoZSBmdW5jdGlvbi4KCgkqIG1pc2MvdG9vbGhlbHAuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggbnVtYmVyIGFuZCB0eXBlIG9mIGFyZ3MgaW4gZGVidWdnaW5nIHN0YXRlbWVudHMuCgoJKiBvbGUvc3RvcmFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BtdWQuZGU+CglJU3RvcmFnZTMyIHZ0YWJsZSB3YXMgbWlzc2luZyAzIHN0dWIgZW50cmllcy4KCkZyaSBEZWMgMTggMTc6Mzg6MzkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvd2luZ2RpLmgsIG9iamVjdHMvZm9udC5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCURvY3VtZW50YXRpb24gZm9yIFRyYW5zbGF0ZUNoYXJzZXRJbmZvLgoKCSogZGxscy93bmFzcGkzMi93aW5hc3BpMzIuYywgaWYxNjMyL3dwcm9jcy5zcGVjLCBkbGxzL3dpbmFzcGkvd2luYXNwaTE2LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglNYWtlIHRoZSBET1NBU1BJIHBhcnQgdXNlIHRoZSBleGNlbGxlbnQgRFBNSSBSTUNCIGltcGxlbWVudGF0aW9uIGRvbmUKCWJ5IE92ZSBLYWF2ZW4sIHdoaWNoIG1ha2VzIHRoZSBjb2RlIF9tdWNoXyBjbGVhbmVyLgoKCSogTWFrZS5ydWxlcy5pbiwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJVG9kZCBWaWVybGluZyA8dHZAcG9ib3guY29tPgoJVXNlIC1sd2luZSBmb3IgbGlua2luZy4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogYWx3YXlzIGNsZWFyIFFTXy4uLiBmcm9tICpib3RoKiBjaGFuZ2VCaXRzIGFuZCB3YWl0Qml0cy4KCUJ1Z2ZpeDogcXVldWUtPmhTZW5kaW5nVGFzayBpcyAqcXVldWUqIGhhbmRsZSwgbm90IHRhc2sgaGFuZGxlLgoKCSogaWYxNjMyL3N0b3JhZ2Uuc3BlYywgaW5jbHVkZS9pbnRlcmZhY2VzLmgsIGluY2x1ZGUvb2JqYmFzZS5oLCBpbmNsdWRlL3N0b3JhZ2UuaCwgb2xlL2lmcy5jLCBvbGUvc3RvcmFnZS5jOgoJRnJhbudvaXMgR291Z2V0IDxnb3VnZXRAbWV0YWludGVncmF0aW9uLm5ldD4KCUZpcnN0IHN0ZXAgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBjYWxsIENPTSBpbnRlcmZhY2VzIGZyb20gQysrIGNvZGUgaW4KCVdpbmVsaWIuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIGluY2x1ZGUvdHJlZXZpZXcuaDoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglQcmVsaW1pbmFyeSB0b29sdGlwIHN1cHBvcnQuCglXTV9TRVRGT05UL0dFVEZPTlQgYWRkZWQuCglTb21lIGJ1ZyBmaXhlcy4KCVVzZSBDT01DVEwzMiBoZWFwIGluc3RlYWQgb2Ygc3lzdGVtIGhlYXAuCgoJKiBncmFwaGljcy9wYWludGluZy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUltcGxlbWVudGVkIFBvbHlsaW5lVG8uCgoJKiByZWxheTMyL250ZGxsLnNwZWM6IEFkcmlhbiBIYXJ2ZXkgPGFkcmlhbkBzZWxlY3QuY29tLmF1PgoJVGhlIFp3Li4uIEZ1bmN0aW9ucyBpbiBudGRsbC5kbGwgYXJlIGp1c3QgYWx0ZXJuYXRlIGVudHJ5Cglwb2ludHMgZm9yIHRoZSBzYW1lIGZ1bmN0aW9ucyBhcyB0aGUgTnQuLi4gZnVuY3Rpb24gb2YgdGhlCglzYW1lIG5hbWVzLiAgQ2hhbmdlZCBudGRsbC5zcGVjIHRvIG1hdGNoIHRoaXMuCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIHJlbGF5MzIvYnVpbHRpbjMyLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlb3JnYW5pemVkIFBFIG1vZHVsZSBsb2FkaW5nIHRvIHByZXBhcmUgZm9yIGVsZi1kbGwgbG9hZGVyLgoJV0lORV9NT0RSRUYgY3JlYXRpb24gbW92ZWQgdG8gb25lIGNlbnRyYWwgbG9jYXRpb24uCglCdWdmaXg6IGNvcnJlY3RseSBzZWxlY3QgbmF0aXZlL2J1aWx0LWluIHZlcnNpb24gaWYgLkRMTAoJZXh0ZW5zaW9uIGlzIG1pc3NpbmcgaW4gTG9hZExpYnJhcnkgY2FsbC4KCgkqIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglDaGFuZ2VkIGVycm9yIHZhbHVlcyBNQ0lfSU5URVJOQUwgdG8gdGhlaXIgY29ycmVjdCB2YWx1ZXMuCgoJKiBtdWx0aW1lZGlhL21jaXdhdmUuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglSZW1vdmVkIHdhcm5pbmcuCgoJKiBtdWx0aW1lZGlhL21jaXN0cmluZy5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU5vIGxvbmdlciBzZW5kaW5nIGRpcmVjdGx5IG1lc3NhZ2VzIHRvIERyaXZlclByb2MgYnV0IHJhdGhlciBnbyB0aHJvdWdoCglNQ0kgbGF5ZXIgKHJlcXVpcmVkIGZvciBvcGVuL2Nsb3NlKS4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJUmVtb3ZlZCBpbmNvcnJlY3QgcGF0Y2ggZm9yIE1DSV9PUEVOIGFuYyBNQ0lfQ0xPU0UgcGFyYW1ldGVycyAodGhhbmtzIHRvIFJvYmVydCBSaWdncwoJZm9yIHBvaW50aW5nIG91dCB0aGUgYnVnLCBzZWUgdGhlIGZpeCBpbiBtY2lzdHJpbmcuYykKCUZpeGVkIE1DSSBzZWVraW5nIG9uIENEIGF1ZGlvLgoKCSogaW5jbHVkZS93aW5lcnJvci5oOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWJzIGZvciBXYWl0TmFtZWRQaXBlW0F8V10uCgoJKiBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpbmNsdWRlL3NoZWxsLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBmaXhlcy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIENvbnRyb2xfRmlsbENhY2hlX1J1bkRMTC4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU0hHZXRGaWxlSW5mbzMyQTogZ2V0IFNIR0ZJX1NZU0lDT05JTkRFWCBpbXBsZW1lbnRlZC4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSUxBcHBlbmQgc2VlbXMgdG8gd29yayBub3cuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL2tlcm5lbDMyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWJzIGZvciBXYWl0TmFtZWRQaXBlW0F8V10uCgpUdWUgRGVjIDE1IDE4OjA0OjU4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBmaWxlcy9kaXJlY3RvcnkuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggR2V0VGVtcFBhdGgzMiBpZiBjb3VudD0wLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvbXVsdGltZWRpYS5oLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvZHNvdW5kLmMsIG11bHRpbWVkaWEvaW5pdC5jLCBtdWx0aW1lZGlhL21jaWNkYS5jLCBtdWx0aW1lZGlhL21jaW1pZGkuYywgbXVsdGltZWRpYS9taWRpLmMsIG11bHRpbWVkaWEvbWl4ZXIuYywgbXVsdGltZWRpYS9tbWF1eC5jOgoJVG9kZCBWaWVybGluZyA8dHZAcG9ib3guY29tPgoJLSBhZGQgLWxvc3NhdWRpbyBpZiBuZWVkZWQsIGFuZCBhIGNoZWNrIGZvciA8c291bmRjYXJkLmg+LCB0byBjb25maWd1cmUuaW4KCSAgKHJ1biBhdXRvY29uZiBhZnRlciB0aGlzKS4gIE5vdGUgdGhhdCB0aGUgY2hlY2sgaGFzIGJlZW4gYWx0ZXJlZCB0byBicmVhawoJICBvdXQgb2YgdGhlIEFDX0NIRUNLX0hFQURFUlMgYWZ0ZXIgdGhlIGZpcnN0IG1hdGNoIC0gdGhpcyBpcyBzbwoJICA8c3lzL3NvdW5kY2FyZC5oPiwgaWYgZm91bmQgb24gTmV0QlNEIChhIGByZWFsJyBPU1MpLCB3aWxsIG5vdCBjb25mbGljdAoJICB3aXRoIHRoZSBlbXVsYXRlZCBvc3NhdWRpby4KCS0gY2hlY2sgZm9yIDxzb3VuZGNhcmQuaD4gYWxvbmcgd2l0aCB0aGUgb3RoZXIgdHdvIGluIGEgbXV0dWFsbHktZXhjbHVzaXZlCgkgIG1hbm5lciBpbiB0aGUgdmFyaW91cyAqLmMgZmlsZXMgdGhhdCBuZWVkIGl0OyBjaGFuZ2UgaW5jbHVkZSBvZgoJICAibW1zeXN0ZW0uaCIgdG8gIm11bHRpbWVkaWEuaCIgc28gdGhpcyBsb2dpYyBpcyBhbGwgaW4gb25lIHBsYWNlCgktIGNoYW5nZSBtY2ljZGEuYyB0byBhbGxvdyBmb3IgQ0QgYXVkaW8gbWFuaXB1bGF0aW9uIG9uIE5ldEJTRC4gIFRoaXMKCSAgaW5jbHVkZXM6CgkgICogY2hhbmdpbmcgaW9jdGwoKSBjYWxscyB0byBiZSBOT04tU1BMSVQgd2l0aCBleGFjdGx5IDMgYXJnczsgb24gTmV0QlNECgkgICAgb3NzYXVkaW8sIGlvY3RsKCkgaXMgI2RlZmluZWQgdG8gYmUgX29zc19pb2N0bCBieSA8c291bmRjYXJkLmg+LCBhbmQKCSAgICBuZWl0aGVyIHNwbGl0dGluZyB3aXRoICMtZGlyZWN0aXZlcyBub3IgYSB0d28tYXJnIGlvY3RsIHdvcms7CgkgICogY2hhbmdpbmcgdGhlICNpZiBsb2dpYyB0byBhbGxvdyBib3RoIEZyZWVCU0QgYW5kIE5ldEJTRCB0byBzaGFyZSB0aGUKCSAgICBhcHByb3ByaWF0ZSBjb2RlIGJsb2NrcwoJLSBibG9jayBvdXQgTUlESSBjb2RlIGZvciBOZXRCU0QgKGluaXQuYykgYW5kL29yIG1pc3NpbmcgU05EQ1RMX01JRElfSU5GTwoJICAobWlkaS5jLCBtY2ltaWRpLmMpLiAgTmV0QlNEJ3MgT1NTIGVtdWxhdGlvbiBkb2VzIG5vdCAoeWV0KSBzdXBwb3J0IE1JREkuCglUaGFua3MgZ28gdG8gbXljcm9mdEBuZXRic2Qub3JnIGZvciB0aGUgOTklIGJ1bGsgb2YgdGhpcyB3b3JrLgoKCSogdHN4MTEvWDExX2NhbGxzLCB0c3gxMS90c194dXRpbC5jLCB3aW5kb3dzL3gxMWRydi93bmQuYywgaW5jbHVkZS90c194dXRpbC5oOgoJRGlyayBUaGllcmJhY2ggPHRoaWVyYmFjaEBtYXRoZW1hdGlrLnR1LWRhcm1zdGFkdC5kZT4KCVNldCB0aGUgY2xhc3MgaGludHMgZm9yIG1hbmFnZWQgd2luZG93cy4KCgkqIGZpbGVzL2Rvc19mcy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1Z2ZpeDogR2V0RnVsbFBhdGhOYW1lIHNldHMgbHBGaWxlUGFydCBvbmx5IHdoZW4gdGhlIGxhc3QgZWxlbWVudAoJZG9lcyBub3QgZW5kIHdpdGggJ1wnLgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvd2luLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9jb21tZGxnLmgsIGluY2x1ZGUvZGRlbWwuaCwgaW5jbHVkZS9tb3VzZS5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBtaXNjL2RkZW1sLmMsIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvYnJ1c2guYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2ZvbnQuYywgb2JqZWN0cy9nZGlvYmouYywgcmVsYXkzMi9nZGkzMi5zcGVjLCByZWxheTMyL3VzZXIzMi5zcGVjLCBjb250cm9scy9tZW51LmMsIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgZ3JhcGhpY3MvYml0Ymx0LmMsIGdyYXBoaWNzL2VzY2FwZS5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMsIGdyYXBoaWNzL3BhaW50aW5nLmMsIGdyYXBoaWNzL3BhdGguYywgaWYxNjMyL3VzZXIuc3BlYzoKCVBhdWwgUXVpbm4gPHBhdWxxQENPUkVMLkNBPgoJTG90cyBvZiBuZXcgZGVmaW5lcyBhbmQgc3R1YnMuCgoJKiBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglUaGVzZSBwYXRjaGVzIGFkZCBzdXBwb3J0IGZvciAtLWVuYWJsZS1kbGwgb24gTmV0QlNELCBhbmQgbWF5IGV2ZW4gZG8gc28gZm9yCglGcmVlQlNEIGEub3V0LiAgTm93LCBOZXRCU0QgY2FuIHVzZSBsaWJ3aW5lIGFzIGEgc2hhcmVkIG9iamVjdC4gIFRoYW5rcyB0bwoJbXljcm9mdEBuZXRic2Qub3JnIGZvciBkb2luZyB0aGlzIHdvcmshCgoJKiB0b29scy93cmMvd3JpdGVyZXMuYzogVG9kZCBWaWVybGluZyA8dHZAcG9ib3guY29tPgoJR2xvYmFsIGNvbnN0cnVjdG9ycyB1c2luZyBgLnNlY3Rpb24gLmN0b3JzJyBhcmUgYm9ndXMgZm9yIE5ldEJTRCdzCglhc3NlbWJsZXIuIFVzZSB0aGUgYXBwcm9wcmlhdGUgYC5zdGFicycgd2hlbiBvbiBOZXRCU0QuCgoJKiBvbGUvdmFyaWFudC5jOiBUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglVbmRlZmluZWQgQ0hBUl9NQVggYW5kIENIQVJfTUlOICgjZGVmaW5lZCBieSBOZXRCU0QncyBzeXN0ZW0gaGVhZGVycykuCglGaXhlZCBzb21lIGNvbnN0YW50cyB0aGF0IGFyZSB0b28gYmlnIGZvciBhIHBsYWluIGBpbnQnLgoKCSogb2xlL3ZhcmlhbnQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGVjayBmb3IgTUFYRkxPQVQgaWYgRkxUX01BWCBpc24ndCB0aGVyZS4KCgkqIGdyYXBoaWNzL3BzZHJ2L01ha2VmaWxlLmluOiBUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglncmFwaGljcy9wc2RydiBmb3JnZXRzIHRvIHB1bGwgaW4gQERMTEZMQUdTQCwgYW5kIHNvIGlzIGNvbXBpbGVkIG5vbi1QSUMgaWYKCXVzaW5nIC0tZW5hYmxlLWRsbC4KCgkqIGluY2x1ZGUvd2luZ2RpLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgaW5jbHVkZS93aW51c2VyLmgsIGluY2x1ZGUvd2luZG93cy5oOgoJVmVrc2xlciBNaWNoYWVsIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCU1vdmUgZGVjbGFyYXRpb25zIGZyb20gd2luZG93cy5oIHRvIHdpbmdkaS5oIGFuZCB3aW51c2VyLmguCgpNb24gRGVjIDE0IDE4OjE1OjExIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW4zMi9jb25zb2xlLmMsIGZpbGVzL01ha2VmaWxlLmluLCBmaWxlcy9hc3luYy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvYXN5bmMuaCwgaW5jbHVkZS9maWxlLmgsIGxvYWRlci9zaWduYWwuYywgbWlzYy93aW5zb2NrX2Rucy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNYWRlIGFzeW5jIElPIChTSUdJTykgc3R1ZmYgZnJvbSBXSU5TT0NLIGdlbmVyaWMgdXNlYWJsZS4KCUFkZGVkIGFzeW5jIElPIHN1cHBvcnQgdG8gRklMRSBhbmQgQ09OU09MRSBvYmplY3RzLgoKCSogbWlzYy93aW5zb2NrLmM6IFN0ZXBoZW4gTGFuZ2FzZWsgPHZvcmxvbkBkb2Rkcy5uZXQ+CglQcmV2ZW50IHNlZ2ZhdWx0IGluIHNldHNvY2tvcHQgd2hlbiBvcHRuYW1lIGlzIFNPX0xJTkdFUiBhbmQgb3B0dmFsIGlzCgludWxsLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU29tZSBjbGVhbnVwLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTSE1hcFBJRExUb1N5c3RlbUltYWdlTGlzdEluZGV4IHRyeSdzIHRvIGRldGVybWluZSBhbmQgbG9hZCB0aGUgZXhhY3QKCWljb24gZm9yIGZpbGVzIChieSB0eXBlKSBub3cuCgoJKiBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBIQ1JfR2V0RGVmYXVsdEljb24gKGludGVybmFsKS4KCgkqIGluY2x1ZGUvZG9zZXhlLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbXNkb3MvZG9zbWVtLmMsIG1zZG9zL2RwbWkuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgRFBNSSB3cmFwcGVyIGFsbG9jYXRpb24gY29kZSB0byBkb3NtZW0uYyB0byBSRUFMTFkgbWFrZSB0aGUKCVJNY2FsbCBzaG9ydGN1dHMgaW5kZXBlbmRlbnQgb2YgZG9zbW9kLiBTUyBoYWQgYmVlbiBsZWZ0IG91dCBvZgoJdGhlIFJFQUxNT0RFQ0FMTCBjb3B5IHJvdXRpbmVzIGZvciBzb21lIHJlYXNvbiwgZml4ZWQgbm93LiBBbHNvCgljbGVhbmVkIHVwIGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6IElhbiBQaWxjaGVyIDxwaWxjaGVyQGNvbmNlbnRyaWMubmV0PgoJQWRkZWQgYWJpbGl0eSB0byBzcGVjaWZ5IFggZm9udHMgdXNlZCBmb3IgSGVsdiBhbmQgVG1zIFJtbiB0eXBlZmFjZXMKCXdpdGggRGVmYXVsdFNlcmlmIGFuZCBEZWZhdWx0U2Fuc1NlcmlmIElOSSBrZXlzLgoKCSogdG9vbHMvd3JjL3BhcnNlci55LCB0b29scy93cmMvd3JjLmgsIHRvb2xzL3dyYy93cml0ZXJlcy5jLCB0b29scy93cmMvQ0hBTkdFUzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CgktIEFkZGVkIGEgZ2xvYmFsIGxhYmVsIGZvciBlbGYtZGxsIGxpbmtpbmcgYW5kIGEgbG9uZyB3aXRoIHRoZSByZXNvdXJjZQoJICBzaXplIGFuZCBhIGxvbmcgd2l0aCB0aGUgZGlyZWN0b3J5IHNpemUuCgktIEtpbGxlZCBhbiBhbm5veWluZyB3YXJuaW5nIHNpbmNlIHZlcnNpb24gMS4wLjAgaW4gcGFyc2VyLnkgYWJvdXQgYQoJICB2YXIgYmVpbmcgdXNlZCBiZWZvcmUgaW5pdC4KCgkqIGluY2x1ZGUvc2hsb2JqLmgsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUFkZHMgdGhlIElQZXJzaXN0RmlsZSBJbnRlcmZhY2UgdG8gSVNoZWxsTGlua1tXXSBhbmQgZ2F2ZSBib3RoIG93bgoJSUNsYXNzRmFjdG9yeXMuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJKFJlYWRDb25zb2xlMzJBKTogc21hbGwgYW5kIHN0dXBpZCBidWcgZml4ZWQKCShXcml0ZUNvbnNvbGVPdXRwdXQpOiBidWcgZml4ZWQgKGF0dHJpYnV0ZXMgbWF5IGNoYW5nZSB3aXRoaW4gbGluZXMpCglhbmQgZW5oYW5jZWQgc3BlZWR3aXNlIGJ5IHVzaW5nIGJ1ZmZlcmluZy4KCShDT05TT0xFX3N0cmluZ18yX0lSKTogZW5oYW5jZWQsIG5vdyBnZXRzIHNjYW5jb2RlcyBhbmQgdmlydHVhbGtleWNvZGVzCgoJKiBtaXNjL2NydGRsbC5jLCByZWxheTMyL2NydGRsbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglfdWx0b2EgaW1wbGVtZW50ZWQuCgoJKiBjb250cm9scy9zdGF0aWMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTbWFsbCBoYWNrIHRvIGdldCByaWQgb2YgYW5ub3lpbmcgZXJyOnJlc291cmNlOiBtZXNzYWdlIGZvcgoJTWVzc2FnZUJveGVzLgoKCSogcmVsYXkzMi9kc291bmQuc3BlYzogSWFuIFNjaG1pZHQgPGlyc21hbkBpYWcubmV0PgoJRml4IG9mZi1ieS0xIGVycm9yIGluIERpcmVjdFNvdW5kIG9yZGluYWxzLiBUaGFua3MgdG8gUm9iZXJ0IFJpZ2dzIGZvcgoJdGhlIHBvaW50ZXIuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCVNhdmUgdGhlIG9yaWdpbmFsIHZpZGVvIG1vZGUgYmVmb3JlIGdvaW5nIGZ1bGxzY3JlZW4gYW5kIHJlc3RvcmUgaXQKCXdoZW4gdGhlIGxhc3QgRGlyZWN0RHJhd19SZWxlYXNlIGlzIGNhbGxlZC4gQWxzbyBmaXggYSBwcm9ibGVtIHdoZXJlCgl0aGUgdmlld3BvcnQgd2Fzbid0IHNldCB0byAwLDAuCgoJKiBjb25zb2xlL3h0ZXJtLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJTWFkZSBtb3JlIGNyb3NzLXBsYXRmb3JtIGJ5IGNoYW5naW5nIC0+X2ZpbGVubyB0byBmaWxlbm8oKS4KCgkqIHdpbmRvd3Mvd2luLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4IHRoZSBaLW9yZGVyIG9mIG1heGltaXplZC9taW5pbWl6ZWQgY2hpbGQgd2luZG93cy4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglYTEZEcyBzaG91bGQgYmUgd2VsbC1mb3JtZWQgKDE0IGh5cGhlbnMpIHRvIG1hdGNoIHNjYWxhYmxlIGZvbnRzLgoJU3RvcCBzbGFudCBmaWVsZCBiZWNvbWluZyB3aWxkY2FyZGVkIHRvbyBlYXJseS4KCgkqIHdpbmRvd3MvZm9jdXMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkoRk9DVVNfU3dpdGNoRm9jdXMpIGNoZWNrIGZvciBwRm9jdXNUbyA9PSBOVUxMIGluc3RlYWQgb2YgaEZvY3VzVG89PTAuCgoJKiBvbGUvb2xlMm5scy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUhhY2sgT0xFX0dldEZvcm1hdCogdG8gcmV0dXJuIHNvbWV0aGluZyBpZiBkYXRlbGVuID0gMC4KCVJlbW92ZSB1bm5lY2Vzc2FyeSBXSU5BUEkncy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIERlYyAxMSAxNTowNDoxMSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9wcm9jZXNzLmgsIGluY2x1ZGUvdGxoZWxwMzIuaCwgaW5jbHVkZS90b29saGVscC5oLCBtaXNjL3Rvb2xoZWxwLmMsIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL3Byb2Nlc3MuYzoKCVBhdHJpY2sgU3BpbmxlciA8c3Bpbmxlci5wYXRyaWNrQG1heW8uZWR1PgoJSW1wbGVtZW50ZWQgQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90LCBpbmNsdWRpbmcgdHdvIG9mIHRoZSByb3V0aW5lcwoJdXNpbmcgc25hcHNob3RzLCBQcm9jZXNzMzJGaXJzdCBhbmQgUHJvY2VzczMyTmV4dC4KCgkqIHJlbGF5MzIvb2xlYXV0MzIuc3BlYywgaW5jbHVkZS9tYXBpZGVmcy5oLCBpbmNsdWRlL29sZWF1dG8uaCwgaW5jbHVkZS93aW4xNmRydi5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG9sZS9jb21wb2JqLmMsIG9sZS92YXJpYW50LmM6CglKdXN0aW4gQnJhZGZvcmQgPGp1c3RpbkB1a2Fucy5lZHU+CglNb3N0IG9mIHRoZSBjdXJyZW5jeSB2YXJpYW50IGNvbnZlcnNpb24gZnVuY3Rpb25zIGltcGxlbWVudGVkLgoJTWlub3IgYnVnZml4ZXMgYW5kIGhlYWRlciB0aWR5aW5nLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkbGxzL3Jhc2FwaTMyL01ha2VmaWxlLmluLCBkbGxzL3Jhc2FwaTMyL3Jhc2FwaS5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvcmFzLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgcmVsYXkzMi9yYXNhcGkzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBSYXNFbnVtQ29ubmVjdGlvbnMgc3R1Yi4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXggaW4gUGF0aENvbWJpbmUzMltBfFddLgoJVmlldyBtZW51IGluIGV4cGxvcmVyIGFuZCBvbiByaWdodCBtb3VzZSBidXR0b24gaXMgd29ya2luZyBub3cuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkICBJTEdldERpc3BsYXlOYW1lLgoKCSogZGxscy9zaGVsbDMyL2NsYXNzZXMuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0YXJ0ZWQgaW1wbGVtZW50YXRpb24gb2YgU2hlbGxFeGVjdXRlRXgzMkEuCglTbWFsbCBjaGFuZ2VzLgoKCSogZGxscy9zaGVsbDMyLy5jdnNpZ25vcmUsIGRsbHMvc2hlbGwzMi9NYWtlZmlsZS5pbiwgZGxscy9zaGVsbDMyL3NocmVzLnJjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3ZlZCBtZW51IHJlc291cmNlcyB0byByYy1maWxlLgoKCSogaW5jbHVkZS9wZV9pbWFnZS5oLCBvbGUvb2xlMm5scy5jLCB3aW4zMi9maWxlLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVR3byBkZWJ1ZyBtZXNzYWdlcyBjbGFyaWZpZWQsIG9uZSB1c2VsZXNzIHByb3RvdHlwZSByZW1vdmVkLgoKCSogaW5jbHVkZS9vbGVhdXRvLmgsIG9sZS92YXJpYW50LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCTI5NCBtaXNzaW5nIFdJTkFQSSBhZGRlZC4KCgkqIHRvb2xzL3Rlc3RydW46IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJS2lsbCBzd2FwcGVkIG91dCAod2luZSkgcHJvY2Vzc2VzIHRvbyBhbmQgdHJ1bmNhdGUgZGlmZiBhZnRlciBzb21lIHh4eAoJbGluZXMuCgoJKiBvbGUvb2xlMm5scy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIFNldExhc3RFcnJvciB3aXRoIHdyb25nIHZhbHVlLgoKCSogbWlzYy9wcmludGRydi5jLCBvYmplY3RzL2VuaG1ldGFmaWxlLmMsIGdyYXBoaWNzL3BhaW50aW5nLmMsIGluY2x1ZGUvd2luZG93cy5oOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglJbXBsZW1lbnQgQWJvcnREb2MxNiwgbW92ZSBBYm9ydERvYzMyIGFuZCBTdGFydERvYzMyVyB0bwoJbWlzYy9wcmludGRydi5jIGFuZCBmaXggYSBmZXcgY29tcGlsZSB3YXJuaW5ncy4KCgkqIHdpbjMyL29yZGluYWxzLmMsIHdpbmRvd3MvZHJpdmVyLmMsIHdpbmRvd3MvbXNnYm94LmMsIHdpbmRvd3MvbXVsdGltb24uYywgd2luZG93cy91c2VyLmMsIGRsbHMvY29tY3RsMzIvYW5pbWF0ZS5jLCBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYywgZGxscy9udGRsbC9udC5jLCBpZjE2MzIvdHlwZWxpYi5zcGVjLCBpbmNsdWRlL2ZpbGUuaCwgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbXNkb3MvaW50MjEuYywgb2xlL29sZTJubHMuYywgb2xlL3R5cGVsaWIuYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUZpeGVkIGEgYnVuY2ggb2YgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBmaWxlcy9maWxlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgV2luMzIgc3luY2hybyB0byBGSUxFcyAodXNlZnVsIG9ubHkgZm9yIHRlcm1pbmFsIGhhbmRsZXMpLgoKVGh1IERlYyAxMCAxNjowNDo1MSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2VuaG1ldGFmaWxlLmMsIG9iamVjdHMvZm9udC5jLCBvYmplY3RzL21ldGFmaWxlLmMsIHJlbGF5MzIvY29tY3RsMzIuc3BlYywgcmVsYXkzMi9nZGkzMi5zcGVjLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHJlbGF5MzIvbXByLnNwZWMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCByZWxheTMyL3RhcGkzMi5zcGVjLCByZWxheTMyL3VzZXIzMi5zcGVjLCByZWxheTMyL3dpbnNwb29sLnNwZWMsIHdpbjMyL2NvbnNvbGUuYywgd2luMzIva2VybmVsMzIuYywgd2luMzIvdGltZS5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbWVzc2FnZS5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMsIGlmMTYzMi9kZGVtbC5zcGVjLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvZGRlbWwuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgbWVtb3J5L3N0cmluZy5jLCBtaXNjL2RkZW1sLmMsIG1pc2MvbmV0d29yay5jLCBtaXNjL3ByaW50ZHJ2LmMsIG1pc2MvdGFwaTMyLmMsIGNvbnRyb2xzL2VkaXQuYywgZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZmlsZXMvZmlsZS5jLCBncmFwaGljcy9wYWludGluZy5jOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJU3lsdmFpbiBTdC1HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglMb3RzIG9mIG5ldyBzdHVicy4KCgkqIG1zZG9zL3Z4ZC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUxldCB0aGUgU3lzdGVtX1RpbWVfU2VsZWN0b3IgY2xvY2sgdGljay4KCgkqIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1pc2NlbXUvaW5zdHIuYywgbXNkb3MvZG9zbWVtLmMsIGdyYXBoaWNzL2Rpc3BkaWIuYywgZ3JhcGhpY3MvdmdhLmMsIGluY2x1ZGUvbWlzY2VtdS5oLCBpbmNsdWRlL3ZnYS5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIENyZWF0ZVN5c3RlbVRpbWVyIGludGVyZmFjZSBjaGFuZ2UuCgoJKiBpZjE2MzIvc3lzdGVtLnNwZWMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGluY2x1ZGUvd2luZG93cy5oLCBtaXNjL2NhbGxiYWNrLmMsIG1pc2Mvc3lzdGVtLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNsZWFuZWQgdXAgQ3JlYXRlU3lzdGVtVGltZXIgaW50ZXJmYWNlIGZvciB1c2Ugd2l0aCAzMi1iaXQgY2FsbGJhY2tzLgoJKE5PVEU6IDE2LWJpdCBjYWxsYmFja3Mgc3RpbGwgZG9uJ3Qgd29yayEpCgoJKiB3aW5kb3dzL21kaS5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCS0gSGFuZGxlIFdNX01ESVJFU1RPUkUgYnkgY2FsbGluZyBXTV9TWVNDT01NQU5EIGZvcgoJdGhlIGNoaWxkIHdpbmRvdyBzbyB0aGF0IHRoZSBzeXN0ZW0gbWVudSBpcyBzZXQgY29ycmVjdGx5LgoJLSBJbiBNRElDYXNjYWRlIGFuZCBNRElUaWxlIHVzZSBXTV9NRElSRVNUT1JFIG1lc3NhZ2UKCXRvIHJlc3RvcmUgbWF4aW1pemVkIHdpbmRvdyBzbyB0aGF0IHN5c3RlbSBtZW51IGlzCgloYW5kbGVkIGNvcnJlY3RseS4KCgkqIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIG9sZS9NYWtlZmlsZS5pbiwgb2xlL3R5cGVsaWIuYywgb2xlL3ZhcmlhbnQuYywgcmVsYXkzMi9vbGVhdXQzMi5zcGVjOgoJSmVhbi1DbGF1ZGUgQ290ZSA8amVhbi1jbGF1ZGVAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVkFSSUFOVCBBUElzLgoKCSogZmlsZXMvZHJpdmUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgRFJJVkVfR2V0RnJlZVNwYWNlIHRvIGhhbmRsZSBzcGFjZSA+IDQgR0J5dGUuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IEFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CgloYW5kbGUgVFZJRl9URVhUIGJ5IFRSRUVWSUVXX1NldEl0ZW0gYWNjb3JkaW5nIHRvIE1TIGRvY3VtZW50YXRpb24uCgliZXR0ZXIgaGFuZGxpbmcgb2YgTFBTVFJfVEVYVENBTExCQUNLMzJBCglUUkVFVklFV19HZXROZXh0fFByZXZMaXN0SXRlbSBkaWRuJ3QgZGVzY2VuZCBpbnRvIHZpc2libGUgY2hpbGQgaXRlbXMuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXYXJuIGlmIHR3byAuZXhlcyBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIgYW5kIHRoZSBzZWNvbmQgZG9lcyBub3QKCWhhdmUgcmVsb2NhdGlvbiByZWNvcmRzLgoKCSogbWlzYy9jb21tZGxnLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIEdldEZpbGVUaXRsZTMyQSBub3QgZmlsbGluZyB1cCBscFRpdGxlIGlmIGxwRmlsZSBkaWRuJ3QKCWNvbnRhaW4gJy8nLCdcXCcgb3IgJzonLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglGaXhlZCBhIHBvdGVudGlhbCBjcmFzaCBpZiBhIHVzYWJsZSB2aWRlbyBtb2RlIGlzIG5vdCBkZXRlY3RlZC4KCgkqIHRvb2xzL21ha2VfYXV0aG9yczogU2NyaXB0IHRvIGdlbmVyYXRlIGF1dGhvcnMgZmlsZXMKCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglTdHVicyBmb3IgSURpcmVjdElucHV0RWZmZWN0IGFuZCBJRGlyZWN0SW5wdXREZXZpY2UyQSBtZXRob2RzLAoJYXMgd2VsbCBhcyBBZGRSZWYoKSwgR2V0Q2FwYWJpbGl0ZXMoKSwgRW51bU9iamVjdHMoKSwKCUdldFByb3BlcnR5KCksIEdldE9iamVjdEluZm8oKSwgR2V0RGV2aWNlSW5mbygpLCBJbml0aWFsaXplKCksCglhbmQgUnVuQ29udHJvbFBhbmVsKCkgZm9yIElEaXJlY3RJbnB1dERldmljZS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglTZXQgd2luZG93IGZvY3VzIGluICBfY29tbW9uX0lEaXJlY3REcmF3X1NldERpc3BsYXlNb2RlKCkuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJQWNjZXB0IE1DSV9PUEVOIGFuZCBNQ0lfQ0xPU0UgbWVzc2FnZXMgaW4gTUNJQ0RBVURJT19Ecml2ZXJQcm9jMzIoKS4KCgkqIGluY2x1ZGUvd2luLmgsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmMsIHdpbmRvd3MveDExZHJ2L3duZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZW1vdmVkIGRlZmVycmVkIEV4cG9zZSBldmVudHMgaGFuZGxpbmcuCgoJKiB3aW5kb3dzL2RjZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCURvbid0IGNsaXAgVmlzUmduIGFnYWluc3QgWCBkZXNrdG9wLgoKCSogbG9hZGVyL21vZHVsZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUxvYWRNb2R1bGUzMi9XaW5FeGVjMzIgc2hvdWxkIHJldHVybiAxNi1iaXQgaEluc3RhbmNlL2hUYXNrLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVNhbml0eSBjaGVjayBvbiBmb250IHNpemUuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTWlzc2luZyBwYXJlbnRoZXNlcyBhZGRlZC4KCldlZCBEZWMgIDkgMTY6Mzc6MDUgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGxvYWRlci90YXNrLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgd2luMzIvY29uc29sZS5jLCBpbmNsdWRlL3dpbmNvbi5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFbmhhbmNlZCBXaW4zMiBDb25zb2xlIChYVEVSTSkKCS0gaW5wdXRoYW5kbGluZyBlbmhhbmNlZCAoa2V5cyBhbmQgbW91c2VjbGlja3MpCgktIHdpbjMyIHN5bmNocm9uaXphdGlvbiAocGFydGlhbCkKCS0gbG90cyBvZiBlbmhhbmNlbWVudHMgdG8gZHJhd2luZyBmdW5jdGlvbnMKCS0gc2ltcGxlL2NvbXBsZXggY29uc29sZSAoc2ltcGxlLXN0ZGluL3N0ZG91dCAtPiBjb21wbGV4LXh0ZXJtKS4KCgkqIGNvbnNvbGUvTWFrZWZpbGUuaW4sIGNvbnNvbGUvZ2VuZXJpYy5jLCBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL25jdXJzZXMuYywgY29uc29sZS90dHkuYywgY29uc29sZS94dGVybS5jLCBpbmNsdWRlL2NvbnNvbGUuaDoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkIGEgZHJpdmVyIHRvIG9wZW4gdXAgYSBuZXcgeHRlcm0gd2luZG93IHdoZW5ldmVyIGNvbnNvbGUgb3V0cHV0IGlzCgluZWVkZWQuIERlcml2ZWQgZnJvbSBjb25zb2xlL3dpbjMyLmMgYnV0IHdlIGFyZSBub3QgeWV0IHJlYWR5IHRvIG1lcmdlCgl0aGUgY29kZSBjb21wbGV0ZWx5LgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmMsIGluY2x1ZGUvd2luZG93cy5oLCB0b29scy9mbnQyYmRmLmM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUltcHJvdmVkIHRoZSBoYW5kbGluZyBvZiBmb250IGVuY29kaW5ncy4KCgkqIG1zZG9zL2RwbWkuYywgaW5jbHVkZS9taXNjZW11Lmg6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSW1wbGVtZW50ZWQgRFBNSSBSTUNCcyB1c2luZyB0aGUgRE9TIHN1YnN5c3RlbSwgYW5kIGEgZmV3IG90aGVyCglpbXByb3ZlbWVudHMuIEFsc28sIHNvbWUgc3BlY2lhbC1jYXNlZCBzaG9ydGN1dCBwYXRocyB3aWxsIGFsbG93IHNvbWUKCWNvbW1vbiByZWFsLW1vZGUgY2FsbC9STUNCIGNvbWJpbmF0aW9ucyB0byB3b3JrIGV2ZW4gd2l0aG91dCBjYWxsaW5nIHRoZQoJRE9TIHN1YnN5c3RlbSwgdGh1cyBsZXR0aW5nIEFQSXMgbGlrZSBET1NBU1BJIHdvcmsgd2l0aG91dCBhbnkgZGlydHkgaGFja3MKCWV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgY2Fubm90IHVzZSBkb3Ntb2QuCgoJKiBtdWx0aW1lZGlhL3RpbWUuYywgb2xlL2NvbXBvYmouYywgZmlsZXMvY2hhbmdlLmMsIGxvYWRlci9tb2R1bGUuYywgbWlzYy9semV4cGFuZC5jLCBtaXNjL21haW4uYywgY29udHJvbHMvbWVudS5jLCBjb250cm9scy9zY3JvbGwuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSB1bm5lY2Vzc2FyeSAjaW5jbHVkZSBhbmQgbWVzc2FnZXMgcmVtb3ZlZC4KCgkqIG9sZS9vbGUybmxzLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNvbWUgc21hbGwgY29ycmVjdGlvbnMgdG8gRW51bVN5c3RlbUxvY2FsZXMzMkFXCgpUdWUgRGVjICA4IDE1OjA2OjM5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB0b29scy9tYWtlX1gxMXdyYXBwZXJzLCB0c3gxMS90c194Zjg2dm1vZGUuYywgZ3JhcGhpY3MvZGRyYXcuYzoKCVRyaWVkIGFub3RoZXIga2x1ZGdlIGZvciB0aGUgWG1kLmggcHJvYmxlbS4KCgkqIHRzeDExL01ha2VmaWxlLmluLCB0c3gxMS9YMTFfY2FsbHMsIHRzeDExL3RzX3hmODZ2bW9kZS5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL3RzX3hmODZ2bW9kZS5oLCB0b29scy9tYWtlX1gxMXdyYXBwZXJzOgoJU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglBZGRlZCBmdWxsc2NyZWVuIERHQSBzdXBwb3J0LgoKCSogbWlzYy9tYWluLmM6IFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJRml4ZWQgZHVtbXkgZW50cmllcyBpbiBNQUlOX1BhcnNlTGFuZ3VhZ2VPcHRpb24oKS4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgbXVsdGltZWRpYS9tY2ljZGEuYzoKCUJyaWFuIEdlcnN0IDxiZ2Vyc3RAcXVhcmsudnBwbHVzLmNvbT4KCVByb3Blcmx5IGltcGxlbWVudCBNQ0lfQ0RBX1NUQVRVU19UWVBFX1RSQUNLLgoJRml4IGFuIG9mZi1ieS1vbmUgYnVnIHdpdGggTUNJX1NUQVRVU19MRU5HVEguCgoJKiB3aW5kb3dzL3gxMWRydi9ldmVudC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN1cGVyZmxvdXMgV0lOQVBJIHJlbW92ZWQuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXYXJuIGFib3V0IGludmFsaWQgZW50cnlwb2ludHMgKGNyZWF0ZWQgYnkgdmlydXNlcykgd2hpY2ggcmVzdWx0IGluCglXaW5lIGNyYXNoZXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNyZWF0ZSBYMTEgcGFsZXR0ZSBvbiBEaXJlY3REcmF3U3VyZmFjZTo6U2V0UGFsZXR0ZSwgbm90IGJlZm9yZSAod2UKCW1pZ2h0IG5vdCBoYXZlIGFuIFgxMSB3aW5kb3cgeWV0KS4KCgkqIGxvYWRlci9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTW92ZSBUV0VBS19Jbml0IGZyb20gVVNFUiB0byBHRElJbml0LgoKCSogZ3JhcGhpY3MvcGFpbnRpbmcuYywgaWYxNjMyL2dkaS5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaCwgbWlzYy9wcmludGRydi5jLCBtaXNjL3Nwb29sZXIuYywgcmVsYXkzMi9nZGkzMi5zcGVjOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggZm9yIFNldEFib3J0UHJvYzE2LCBzdHViIGZvciBTZXRBYm9ydFByb2MzMiBhbmQgdGlkeSB1cCBzb21lIG90aGVyCglwcmludGluZyBmdW5jdGlvbnMuCgoJKiB3aW5kb3dzL2ZvY3VzLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IGluY2x1ZGVzLgoKCSogZ3JhcGhpY3MveDExZHJ2L3RleHQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IFgxMURSVl9FeHRUZXh0T3V0IGZvciByb3RhdGVkIHRleHQgaWYgZWl0aGVyIG9mIGxwRHgsIGJyZWFrRXh0cmEKCW9yIGNoYXJFeHRyYSBhcmUgbm9uLXplcm8uCgoJKiBpbmNsdWRlL0F0dGljL2dyYXBoaWNzLmgsIG1pc2Mvc2hlbGwuYywgd2luZG93cy9BdHRpYy9ncmFwaGljcy5jLCB3aW5kb3dzL01ha2VmaWxlLmluLCB3aW5kb3dzL25vbmNsaWVudC5jLCB3aW5kb3dzL3Njcm9sbC5jLCBjb250cm9scy9idXR0b24uYywgY29udHJvbHMvY29tYm8uYywgY29udHJvbHMvZGVza3RvcC5jLCBjb250cm9scy9pY29udGl0bGUuYywgY29udHJvbHMvbWVudS5jLCBjb250cm9scy9zY3JvbGwuYywgZGxscy9jb21jdGwzMi91cGRvd24uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVJlcGxhY2UgR1JBUEhfIGZ1bmN0aW9ucyB3aXRoIFdpbiBTREsgZXF1aXZhbGVudHMuCgpNb24gRGVjICA3IDE2OjIzOjQyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBmaWxlcy9kb3NfZnMuYzogQWxleGFuZGVyIExhcnNzb24gPGFsbGFAbHlzYXRvci5saXUuc2U+CglSZXZlcnRlZCBwcmV2aW91cyBwYXRjaC4KCgkqIGluY2x1ZGUvZG9zZXhlLmg6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRG9uJ3QgZGVmaW5lIE1aX1NVUFBPUlRFRCBvbiBub24taTM4NiBwbGF0Zm9ybXMuCgoJKiBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9kcG1pLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgRFBNSV9DYWxsUk1Qcm9jIChJIHRoaW5rKS4KCgkqIG1pc2MvbmV0d29yay5jLCByZWxheTMyL21wci5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTdHViIGZvciBOUFNHZXRQcm92aWRlckhhbmRsZUEuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBCcmlhbiBHZXJzdCA8YmdlcnN0QHF1YXJrLnZwcGx1cy5jb20+CglUaGUgc2NhbmNvZGUgV2luZG93cyBzZW5kIGZvciBleHRlbmRlZCBrZXlzIGlzIHRoZSBzY2FuY29kZSBvZiB0aGUKCXVuZXh0ZW5kZWQgZXF1aXZhbGVudCBvZiB0aGUga2V5LCBwbHVzIHRoZSBleHRlbmRlZCBmbGFnLgoKCSogZGxscy93aW5hc3BpL3dpbmFzcGkxNi5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgYSByZWFsIG1vZGUgcHJvYmxlbS4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU5FX01PRFVMRS5zdGFja19zaXplIHdhcyBzZXQgdG8gYSByaWRpY3Vsb3VzbHkgc21hbGwgdmFsdWUgb2YgNS4KCVdpbmRvd3Mgc2V0cyAweDE0MDAgaW4gc3VjaCBjYXNlcyBmb3IgcHJvZ3JhbXMuCgoJKiBjb250cm9scy9zdGF0aWMuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglXZSBkb24ndCB5ZXQgd2FudCB0aGUgc3RhdGljIGNvbnRyb2wgdG8gY2FsbCBEZXN0cm95SWNvbi4KCgkqIHdpbmRvd3MvY2xhc3MuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglBZGRlZCBjYXNlIGZvciBHQ1dfQVRPTSBpbnQgR2V0Q2xhc3NMb25nMzJBLgoKCSogbWlzYy9uZXR3b3JrLmMsIHJlbGF5MzIvbXByLnNwZWM6IEdhZWwgZGUgQ2hhbGVuZGFyIDxnYWVsQGxpbXNpLmZyPgoJU3R1YiBmb3IgV05ldE9wZW5FbnVtMzJXLgoKCSogbXVsdGltZWRpYS9kc291bmQuYywgcmVsYXkzMi9kc291bmQuc3BlYzoKCVJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglNb3JlIGdlbmVyYWwgY29kZSBjbGVhbnVwIGZvciByZWFkYWJpbGl0eS4KCUEgZmV3IG1vcmUgcGFyYW1ldGVyIHZhbGlkYXRpb24gY2hlY2tzLgoJUmV0dXJuIERTX09LIHJhdGhlciB0aGFuIDAgaW4gYSBudW1iZXIgb2YgZnVuY3Rpb25zLgoJRml4ZWQgcHJpbWFyeSBidWZmZXIgcmVmIGNvdW50IGJ1ZyBpbiBDcmVhdGVTb3VuZEJ1ZmZlcigpLgoJSGFuZGxlIDEtMyBieXRlIHNvdW5kIGZyYWdtZW50cyB0aGF0IHdvdWxkIGNhdXNlIGJ1ZmZlciBvdmVycnVucy4KCUNsZWFyIHByaW1hcnkgYnVmZmVyIHdpdGggYSBuZXV0cmFsIHZhbHVlIGluc3RlYWQgb2YgYWx3YXlzIDAKCShiZWNhdXNlIDEyOCBpcyBuZXV0cmFsIGZvciA4LWJpdCBzb3VuZCkuCglGaXggYnVnIHdpdGggbWl4aW5nIDgtYml0IHNvdW5kIGludG8gdGhlIHByaW1hcnkgYnVmZmVyLgoJQnJva2Ugb3V0IHRoZSBtYWluIGJsb2NrIGluIERTT1VORF90aHJlYWQoKSB0byBhbm90aGVyIGZ1bmN0aW9uIGZvcgoJcmVhZGFiaWxpdHkuCglIYW5kbGUgIm5vIGF1ZGlvIiBhbmQgImF1ZGlvIGJ1c3kiIGNhc2VzIHByb3Blcmx5IHdoZW4gaW5pdGlhbGl6aW5nCglkc291bmQuIFJlbmFtZSBEbGxDYW5VbmxvYWROb3coKSB0byBEU09VTkRfRGxsQ2FuVW5sb2FkTm93KCkuCgoJKiBkZWJ1Z2dlci9oYXNoLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTWFkZSB2YXJpYWJsZXMgb3B0aW1pemVkIGludG8gcmVnaXN0ZXJzIGFjY2Vzc2libGUuCgoJKiByZWxheTMyL3VzZXIzMi5zcGVjOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVGhlIHNwZWMgZGVmaW5pdGlvbiBmb3IgTW9uaXRvckZyb21XaW5kb3cgd2FzIHdyb25nLgoKCSogbXNkb3MvaW50MjEuYzogU3RlZmFuIExlaWNodGVyIDxzbGVAY2FtbGluZS5jb20+CglGaWxlIGhhbmRsZSBidWcgZml4LgoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBwYXJhZ3JhcGggYWJvdXQgZGlmZmVyZW50IGRsbCB2ZXJzaW9ucyBhbmQgc3RydWN0dXJlIHNpemVzLgoKCSogaW5jbHVkZS9jb21tY3RybC5oOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgbWlzc2luZyBUT09MSU5GTyBzdHJ1Y3R1cmUuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUZpeGVkIGEgaGVhcCBidWcuCgoJKiBsb2FkZXIvdGFzay5jLCBtZW1vcnkvbG9jYWwuYywgbWVtb3J5L3NlbGVjdG9yLmMsIG1pc2MvY2FsbGJhY2suYywgbXNkb3MvZHBtaS5jLCBtc2Rvcy9pbnQ0MS5jLCBtc2Rvcy92eGQuYywgaWYxNjMyL2tlcm5lbC5zcGVjLCBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL2xkdC5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCS0gU2V2ZXJhbCBrZXJuZWwuc3BlYyByZXR1cm4gdHlwZSBtaXNtYXRjaCBmaXhlcwoJLSBbR1NdZXRTZWxlY3RvckJhc2UgV2luMzJzIG9mZnNldCBzdXBwb3J0IGJ5IFVscmljaCBXZWlnYW5kICh0aGFua3Mgdi5tLiAhISkKCS0gTW92ZSBBcHBUb1dpbmUvV2luZVRvQXBwIG1hY3JvcyBhcyBXMzJTX0FQUDJXSU5FIGV0Yy4gdG8gbGR0LmgKCS0gTG9jYWxOb3RpZnkoKSBiYXNpYyBzdXBwb3J0CgktIEZpeGVzIGZvciBsb2NhbCBoZWFwIGhhbmRsaW5nIHdpdGggaGVhcCBoYW5kbGVzIGNyZWF0ZWQgYnkgVmlydHVhbCooKQoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogLW1pY3Jvc29mdC1zeW1ib2wgZW5jb2Rpbmcgd2FzIG5vdCByZWNvZ25pemVkLgoKCSogd2luZG93cy93aW4uYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFdJTl9SZXNldFF1ZXVlV2luZG93cyB3b3VsZCBza2lwIHNvbWUgd2luZG93cy4KCgkqIHRvb2xzL2J1aWxkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWxsb3cgcmVjdXJzaXZlbHkgcmVlbnRlcmluZyBDQUxMMzJfTGFyZ2VTdGFjay4KCgkqIGluY2x1ZGUvdHR5ZHJ2LmgsIHdpbmRvd3MvdHR5ZHJ2Ly5jdnNpZ25vcmUsIHdpbmRvd3MvdHR5ZHJ2L01ha2VmaWxlLmluLCB3aW5kb3dzL3R0eWRydi9jbGlwYm9hcmQuYywgd2luZG93cy90dHlkcnYvZXZlbnQuYywgd2luZG93cy90dHlkcnYvaW5pdC5jLCB3aW5kb3dzL3R0eWRydi9rZXlib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9tb3VzZS5jLCB3aW5kb3dzL3R0eWRydi93bmQuYywgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglBZGRlZCB0aGUgbmV3IFRUWSBkcml2ZXIuCgoJKiBpbmNsdWRlL2NsaXBib2FyZC5oLCBpbmNsdWRlL2tleWJvYXJkLmgsIGluY2x1ZGUvbWVzc2FnZS5oLCBpbmNsdWRlL3dpbi5oLCBpbmNsdWRlL3gxMWRydi5oLCB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2RlZnduZC5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2ZvY3VzLmMsIHdpbmRvd3Mva2V5Ym9hcmQuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmMsIHdpbmRvd3MveDExZHJ2L01ha2VmaWxlLmluLCB3aW5kb3dzL3gxMWRydi9jbGlwYm9hcmQuYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9tb3VzZS5jLCB3aW5kb3dzL3gxMWRydi93bmQuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJTW92ZWQgbW9yZSBjb2RlIHRvIHRoZSBYMTEgZHJpdmVyLgoKVGh1IERlYyAgMyAxNjoyOTo1NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbXNkb3MvaW50MTAuYywgbXNkb3MvaW50MTYuYywgbXNkb3MvaW50MjEuYywgbXNkb3MvaW50MjkuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQ2FsbCB0aGUgbmV3IGNvbnNvbGUgZHJpdmVyIGZvciBzb21lIHJvdXRpbmVzLiBUaGlzIGlzIG5vdCBjb21wbGV0ZWx5Cglkb25lIHlldCBhbmQgbW9yZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KCldlZCBEZWMgIDIgMTk6NTg6MDkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiwgY29uc29sZS8uY3ZzaWdub3JlLCBjb25zb2xlL01ha2VmaWxlLmluLCBjb25zb2xlL2dlbmVyaWMuYywgY29uc29sZS9pbnRlcmZhY2UuYywgY29uc29sZS9uY3Vyc2VzLmMsIGNvbnNvbGUvdHR5LmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9jb25zb2xlLmgsIGluY2x1ZGUvd2lubnQuaCwgbG9hZGVyL21haW4uYywgbWlzYy9tYWluLmMsIE1ha2VmaWxlLmluLCBjb25maWd1cmU6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZGVkIGNvbnNvbGUgc3VwcG9ydC4KCgkqIGdyYXBoaWNzL3gxMWRydi9vZW1iaXRtYXAuYywgaW5jbHVkZS9iaXRtYXAuaCwgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS94MTFkcnYuaCwgbG9hZGVyL21haW4uYywgb2JqZWN0cy9BdHRpYy9vZW1iaXRtYXAuYywgb2JqZWN0cy9NYWtlZmlsZS5pbiwgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgZ3JhcGhpY3MvcHNkcnYvaW5pdC5jLCBncmFwaGljcy93aW4xNmRydi9pbml0LmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L3Blbi5jLCBncmFwaGljcy94MTFkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3gxMWRydi9pbml0LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU1vdmUgT0VNIHJlc291cmNlcyB0byB0aGUgeDExZHJ2LgoKCSogZmlsZXMvZG9zX2ZzLmM6IEFsZXhhbmRlciBMYXJzc29uIDxhbGxhQGx5c2F0b3IubGl1LnNlPgoJT3BlbmluZyBhIGZpbGUgaW4gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBleGlzdCByZXR1cm5zCglFUlJPUl9GSUxFX05PVF9GT1VORCBpbnN0ZWFkIG9mIEVSUk9SX1BBVEhfTk9UX0ZPVU5ELgoKCSogbWVtb3J5L2F0b20uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglIYW5kbGUgYXRvbXMgIiMgbm9uIG51bWJlciIgKG9yYWNsZSBjbGllbnQpLgoKVHVlIERlYyAgMSAxNjoyMzoxOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBtaXNjL2Vycm9yLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlbmFtZWQgS0VSTkVMLjMyNyB0byBIYW5kbGVQYXJhbUVycm9yIChhcyBpbiAnVW5kb2MuIFdpbmRvd3MnKS4KCUZpeGVkIHdyb25nIG9yZGluYWxzL3Byb3RvdHlwZSBmb3IgTWFwUHJvY2Vzc0hhbmRsZS9HZXRNb2R1bGVGaWxlTmFtZTMyLgoJQWRkZWQgbmFtZXMgZm9yIHNvbWUgdW5kb2N1bWVudGVkIGV4cG9ydHMuCgoJKiBtZW1vcnkvZ2xvYmFsLmMsIGlmMTYzMi90aHVuay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBHbG9iYWxDaGFuZ2VMb2NrQ291bnQgKEtFUk5FTC4zNjUpLgoKCSogaWYxNjMyL3Rvb2xoZWxwLnNwZWMsIGluY2x1ZGUvdG9vbGhlbHAuaCwgbWVtb3J5L2hlYXAuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgTG9jYWwzMkluZm8sIHN0dWJzIGZvciBMb2NhbDMyRmlyc3QvTmV4dCAoS0VSTkVMLjQ0NC00NDYpLgoKCSogaWYxNjMyL2dkaS5zcGVjLCBvYmplY3RzL2dkaW9iai5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBHZGlGcmVlUmVzb3VyY2VzIChHREkuNjA5KS4KCgkqIGluY2x1ZGUvZHNvdW5kLmgsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJRml4ZWQgOC1iaXQgV0FWIGZvcm1hdCBoYW5kbGluZyAoaXQgaXMgdW5zaWduZWQgZGF0YSkuCglGaXhlZCBvZmYtYnktb25lIGNoZWNrcyBmb3IgYnVmZmVyIHdyYXAuCglJbmNyZW1lbnQgcmVmIGNvdW50IGZvciBwcmltYXJ5IGJ1ZmZlciBpbiBDcmVhdGVTb3VuZEJ1ZmZlcigpLgoJQWRkZWQgRFNCUE5fT0ZGU0VUU1RPUCBzdXBwb3J0IHRvIHBvc2l0aW9uIG5vdGlmaWNhdGlvbiBjb2RlLgoJTG90cyBvZiBtaW5vciBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBjaGVja3MuCglTdHVicyBmb3I6IElEaXJlY3RTb3VuZF9pbml0aWFsaXplKCksIElEaXJlY3RTb3VuZF9Db21wYWN0KCksCglhbmQgSURpcmVjdFNvdW5kX0dldFNwZWFrZXJDb25maWcoKS4KCUZpeGVkIGZyZXEgc2hpZnRpbmcgd2l0aCAxNi1iaXQgZGF0YSBwcm9ibGVtLCBmaXhlZCA4Yml0PC0+MTZiaXQKCWNvbnZlcnNpb24uCglMb3RzIG9mIHRocmVhZCBsb2NraW5nIGZvciBEaXJlY3RTb3VuZCBidWZmZXJzLgoJRGVhbGxvYyBwcmltYXJ5IGJ1ZmZlciB3aGVuIGRzb3VuZCBpcyBkZWFsbG9jYXRlZC4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHRoZSBURVhUKCkgYW5kIE1BS0VMUkVTVUxUKCkgZGVmaW5pdGlvbnMuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgY2hhbmdlLgoKCSogTWFrZWZpbGUuaW46IEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCVJldmVydCBtaXNndWlkZWQgY2hhbmdlIHRvIGluc3RhbGxfbGliIHRoYXQgYnJva2UgLWRpc2FibGUtbGliCgljb25maWd1cmUgb3B0aW9uLgoKCSogbWlzYy9tYWluLmMsIGluY2x1ZGUvd2luZG93cy5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgcGFyYW1ldGVyIFNQSV9HRVREUkFHRlVMTFdJTkRPVy4KCU9uZSBtaXNzaW5nIGJyZWFrIGluIFNQSV9HRVREUkFHRlVMTFdJTkRPVy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZnVuY3Rpb25zIElMR2xvYmFsQ2xvbmUvSUxHbG9iYWxGcmVlLgoKCSogZG9jdW1lbnRhdGlvbi9wcmludGluZzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWRkIGEgbm90ZSBhYm91dCBXaW5QcmludGVycy4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYywgcmVsYXkzMi9vbGUzMi5zcGVjLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBzb21lIHN0dWJzLCBzb21lIHB0ci0+c3RyIGNvbnZlcnNpb25zLgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oLCByZWxheTMyL2RkcmF3LnNwZWM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgZGVmaW5pdGlvbiBvZiBEaXJlY3REcmF3Q3JlYXRlQ2xpcHBlci4KCS0gbW9yZSB2ZXJzYXRpbGUgc3VwcG9ydCBvZiBzdXJmYWNlcyAvIGJldHRlciBzdXJmYWNlIGRlc2NyaXB0aW9uIHN1cHBvcnQuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgd3JvbmcgcGFyYW1ldGVyIGNvdW50IGZvciBTSENoYW5nZU5vdGlmeURlcmVnaXN0ZXIsICBTSEZyZWVVbnVzZWRMaWJyYXJpZXMuCglOZXcgZnVuY3Rpb25zIFBhcnNlRmllbGQsIEdldC9TZXRJbnN0YW5jZUV4cGxvcmVyKCksIFBhdGhJc1VOQywgUGF0aElzUmVsYXRpdmUuCglTdHVicyBTSFdhaXRGb3JGaWxlVG9PcGVuLCBQYXRoRmluZE9uUGF0aC4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgY2hhbmdlcyB0byBwcmludCB0aGUgc3RyaW5ncyBpbiB0aGUgcmVsYXktdHJhY2UuCgoJKiB3aW5kb3dzL2NsYXNzLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJVGhlIGNsYXNzIG5hbWUgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgZ2V0cHRyLgoKCSogbXVsdGltZWRpYS9tY2ltaWRpLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgbWVtb3J5L3N0YXR1cyByZWNvdmVyeSB3aGVuIGVycm9yIG9jY3VyZWQgaW4gTUlESV9tY2lPcGVuLgoJRml4ZWQgc3VwcG9ydCBmb3IgUk1JRCBmaWxlcyBpbiBNSURJX21jaU9wZW4uCglGaXhlZCBidWcgZm9yIHBsYXlpbmcgTUlESSBmaWxlcyB3aXRoIHRlbXBvIGNoYW5nZXMuIFNvdW5kIG91dHB1dCBpcwoJbm93IGNvcnJlY3QsIGJ1dCBsZW5ndGggb2YgdHJhY2tzIChhbmQgdGhlcmVmb3JlIG9mIHdob2xlIGZpbGUpIGlzIG5vdAoJY29ycmVjdC4KCUNoYW5nZWQgZXJyb3IgdmFsdWVzIChJTlRFUk5BTCA9PiBJTlZBTElEX0ZJTEUpIHdoZW4gZmlsZSBjYW5ub3QgYmUgcmVhZC4KCgkqIG11bHRpbWVkaWEvbWNpd2F2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIG1lbW9yeS9zdGF0dXMgcmVjb3Zlcnkgd2hlbiBlcnJvciBvY2N1cmVkIGluIFdBVkVfbWNpT3Blbi4KCUNoYW5nZWQgZXJyb3IgdmFsdWVzIChJTlRFUk5BTCA9PiBJTlZBTElEX0ZJTEUpIHdoZW4gZmlsZSBjYW5ub3QKCWJlIHJlYWQuCgoJKiBtdWx0aW1lZGlhL21zdmlkZW8uYywgcmVsYXkzMi9tc3ZmdzMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWJzIGZvciBNQ0lXbmRDcmVhdGVbQXxXXS4KCgkqIG1pc2MvdmVyLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJVmVyUXVlcnlWYWx1ZSwgYnVnZml4OiB3ZSBjYW50IGNvbnZlcnQgYmluYXJ5IGRhdGEgd2l0aAoJSEVBUF9zdHJkdXBXdG9BIChcVmFyRmlsZUluZm9cVHJhbnNsYXRpb24pLgoKTW9uIE5vdiAzMCAxNzo0MToxNyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCB3aW4zMi9hZHZhcGkuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIEVudW1TZXJ2aWNlU3RhdHVzMzIsIHNtYWxsIGNoYW5nZXMuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglMb2FkIG5vdyB0aGUgZmlyc3QgaWNvbiBmcm9tIHRoZSAqLmFuaSBmaWxlIGluc3RlYWQgb2YgY3Jhc2hpbmcuCgoJKiBtaXNjZW11L21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXggd2FybmluZ3MgaW4gbWlzY2VtdS9tYWluLmMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaDoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCS0gYWRkZWQgc29tZSBkZWZpbmVzIGFyb3VuZCB0aGUgQ29tbVBvcnQgKFBVUkdFX1hYWCBhbmQgTVNfWFhYX09OKQoJLSBhZGRlZCB0aGUgRExHVEVNUExBVEUgYW5kIERMR0lURU1URU1QTEFURSBzdHJ1Y3R1cmVzCgktIGFkZGVkIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBTdGFydFBhZ2UsRW5kUGFnZSxHZXRDb21tTWFzaywKCQlHZXRDb21tTW9kZW1TdGF0dXMgYW5kIFB1cmdDb21tLFdhaXRDb21tRXZlbnQuCgoJKiB3aW5kb3dzL2RlZnduZC5jOiBQYXVsIFF1aW5uIDxQYXVsUUBjb3JlbC5jb20+CglGaXhlZCBhY3RpdmF0aW9uL0ZvY3VzIG1lc3NhZ2Ugb3JkZXIgcHJvYmxlbSB3aGVuIGNyZWF0aW5nIGEgbmV3IEhXTkQuCgoJKiB3aW5kb3dzL3dpbnBvcy5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaCwgcmVsYXkzMi91c2VyMzIuc3BlYzoKCVBhdWwgUXVpbm4gPFBhdWxRQGNvcmVsLmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIENoaWxkV2luZG93RnJvbVBvaW50RXggZnVuY3Rpb25zLgoKCSogbWlzYy9yZWdpc3RyeS5jOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglGaXhlZCByZWdpc3RyeSBxdWVyeSBlcnJvciB2YWx1ZTogbm93IHJldHVybnMgRVJST1JfRklMRV9OT1RfRk9VTkQuCgoJKiBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2N1cnNvcmljb24uYywgb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9wYWxldHRlLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUdldFN5c3RlbVBhbGV0dGVFbnRyaWVzIHJldHVybnMgcGFsZXR0ZSBzaXplIGlmIGVudHJpZXM9PU5VTEwuCglVc2UgdGhpcyBpbnN0ZWFkIG9mIENPTE9SX0dldFN5c3RlbVBhbGV0dGVTaXplLgoKCSogcmVsYXkzMi9kc291bmQuc3BlYywgbXVsdGltZWRpYS9kc291bmQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSW1wbGVtZW50ZWQgY2xhc3MgZmFjdG9yeSBmb3IgZHNvdW5kLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBtaXNjL2NvbW0uYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCS0gZml4ZWQgYSBtaW5pbWFsIGVycm9yIGluIEdldENvbW1NYXNrIGRlZmluaXRpb24uCgktIGFkZHMgc3R1YnMgZm9yIEdldENvbW1Nb2RlbVN0YXR1cyBhbmQgV2FpdENvbW1FdmVudC4KCgkqIGluY2x1ZGUveG1hbGxvYy5oLCBsaWJyYXJ5L3dpbmVzdHViLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlcyBmb3IgQysrIFdpbmVsaWIgY29tcGlsYXRpb24uCgoJKiBvbGUvY29tcG9iai5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUJ1Z2ZpeDogc2Vjb25kIFJlZ09wZW5LZXkgc2hvdWxkIHVzZSBDTFNJRGtleSBpbnN0ZWFkIG9mIEhLRVlfQ0xBU1NFU19ST09ULgoKRnJpIE5vdiAyNyAxNjowNjowOCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogQlVHUywgZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzLCBkb2N1bWVudGF0aW9uL2RlYnVnZ2luZywgZG9jdW1lbnRhdGlvbi9uby13aW5kb3dzLCBkb2N1bWVudGF0aW9uL3dpbmUubWFuOgoJSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgoKCSogTWFrZWZpbGUuaW46IEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCUZpeGVkICdtYWtlIGluc3RhbGwnIHRvIHJlYWxseSBjaGVjayBmb3IgbGlid2luZS5hIGJlZm9yZSBpbnN0YWxsaW5nCglpdC4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvb3B0aW9ucy5oLCBtaXNjL21haW4uYzoKCVN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJQWRkZWQgYSBuZXcgY21kbGluZSBzd2l0Y2ggdG8gZGlzYWJsZSBYRjg2IERHQSBFeHRlbnNpb25zLCAtbm9kZ2EuCgoJKiBmaWxlcy9kcml2ZS5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglJbXByb3ZlZCBHZXREaXNrRnJlZVNwYWNlMzJBKCkuCgpUaHUgTm92IDI2IDE2OjMyOjAwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3dpbi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVJlbW92ZSBpbmNsdWRlZCBjb2xvci5oLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlIHVubmVjZXNzYXJ5IGNoZWNrIGZvciBlbnRyeXBvaW50IGFkZHJlc3MgKHRlc3QgYmluYXJ5IHdhcwoJaW5mZWN0ZWQgYnkgYSB2aXJ1cyB3aGljaCB1c2VzIGludmFsaWQgUEUgbG9hZGluZyBzdHVmZikuCgoJKiBncmFwaGljcy9wYWludGluZy5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBzdHVicyBmb3IgU3RhcnRwYWdlIGFuZCBFbmRQYWdlLgoKCSogaWYxNjMyL3RodW5rLmMsIG9iamVjdHMvZGMuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVtb3ZlZCBzb21lIHVubmVjZXNzYXJ5IEZJWE1FIG91dHB1dHMuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIGxvYWRlci90YXNrLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEtFUk5FTC42MDIgYW5kIHN0dWIgZm9yIEtFUk5FTC40OTAuCgoJKiBvbGUvb2xlMm5scy5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogRG8gKm5vdCogemVybyBvdXQgb3V0cHV0IGJ1ZmZlciBpbiBHZXROdW1iZXJGb3JtYXQzMltBV10uCgpXZWQgTm92IDI1IDE4OjE1OjUzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvbmxzL2dyYy5ubHMsIG9sZS9ubHMvc2t5Lm5scywgb2xlL25scy90aGEubmxzLCBvbGUvbmxzL3Ryay5ubHMsIG9sZS9vbGUybmxzLmM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCVNtYWxsIGZpeGVzLgoKCSogbG9hZGVyL25lL3Jlc291cmNlLmMsIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNb3ZlZCAuLi5SZXNvdXJjZTE2IHJvdXRpbmVzIHRvIGxvYWRlci9yZXNvdXJjZS5jLgoJSW1wbGVtZW50ZWQgYWNjZXNzaW5nIFBFLWZpbGUgcmVzb3VyY2VzIHdpdGggMTYtYml0IHJlc291cmNlIHJvdXRpbmVzLgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBsb2FkZXIvbmUvTWFrZWZpbGUuaW4sIGxvYWRlci9uZS9jb252ZXJ0LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIFBFLT5ORSByZXNvdXJjZSBjb252ZXJzaW9uIHJvdXRpbmVzIChLRVJORUwuNjE1LTYxOCkuCgoJKiBpbmNsdWRlL29sZWF1dG8uaCwgb2xlL29sZTJkaXNwLmMsIHJlbGF5MzIvb2xlYXV0MzIuc3BlYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIDMgbWV0aG9kczogU3lzQWxsb2NTdHJpbmdMZW4oKSwgU3lzUmVBbGxvY1N0cmluZ0xlbigpCglhbmQgU3lzU3RyaW5nTGVuKCkuIEVuc3VyZSB0aGF0IHRoZSBCU1RSIG9iamVjdHMgd2VyZSBhbGxvY2F0ZWQKCWFjY29yZGluZyB0byB0aGUgV2luZG93cyBkb2N1bWVudGF0aW9uLgoKCSogZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIGV4aXN0aW5nIHBhdGggLSBmdW5jdGlvbnMgdG8gc2hlbGxwYXRjaC5jLgoJTmV3OiBQYXRoUmVtb3ZlQmxhbmtzMzJBfFcsICBQYXRoTWF0Y2hTcGVjMzJBfFcsCglQYXRoU2V0RGxnSXRlbVBhdGgzMkF8Vy4KCgkqIGRsbHMvc2hlbGwzMi9mb2xkZXJzLmMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIGV4aXN0aW5nIElTaGVsbExpbmsgY2xhc3MuIE5ldyBzdHVicyBmb3IgSVNoZWxsTGlua1cuCgoJKiBpbmNsdWRlL2JpdG1hcC5oLCBpbmNsdWRlL2NvbG9yLmgsIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUveDExZHJ2LmgsIGluY2x1ZGUveDExZm9udC5oLCBtaXNjL21haW4uYywgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jb2xvci5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZ2Rpb2JqLmMsIHdpbmRvd3MvQXR0aWMvZ3JhcGhpY3MuYywgd2luZG93cy9kY2UuYywgd2luZG93cy9kaXNwbGF5LmMsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL21vdXNlLmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIHdpbmRvd3Mvc3lzbWV0cmljcy5jLCB3aW5kb3dzL3VzZXIuYywgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3Mvd2luZy5jLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9iaXRtYXAuYywgZ3JhcGhpY3MveDExZHJ2L2JydXNoLmMsIGdyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jLCBncmFwaGljcy94MTFkcnYvZGliLmMsIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvcGVuLmMsIGdyYXBoaWNzL3gxMWRydi90ZXh0LmMsIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglSZW1vdmUgWF9EQ19JTkZPIGZyb20gREMgYW5kIG1ha2UgaXQgYmVoYXZlIGxpa2UgYW55IG90aGVyIFBERVZJQ0UuCgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvZHBtaS5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyNS5jLCBtc2Rvcy9pbnQyNi5jLCBtc2Rvcy9pbnQyZi5jLCBtc2Rvcy94bXMuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2hhbmdlZCBDVFhfU0VHX09GRl9UT19MSU4gdG8gYWxsb3cgbGluZWFyIGFkZHJlc3NlcyBpbiAzMi1iaXQKCXJlZ2lzdGVycyAodXNlZCBieSBEZXZpY2VJb0NvbnRyb2wpLiBBZGFwdGVkIGFsbCB1c2Vycy4KCgkqIGluY2x1ZGUvd2luaW9jdGwuaCwgd2luMzIvZGV2aWNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIChtb3N0KSBWV2luMzIuVnhEIERldmljZUlvQ29udHJvbCByb3V0aW5lcy4KClR1ZSBOb3YgMjQgMjA6NDc6MTcgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvdGhyZWFkLmgsIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBTZXQgdGhlIFRFQkZfV0lOMzIgZmxhZyBpbiB0ZWIuZmxhZ3MgZm9yIDMyLWJpdCB0aHJlYWRzLgoKCSogbG9hZGVyL3Rhc2suYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IENhbGwgSW5pdFRocmVhZElucHV0IGluIEdldEZhc3RRdWV1ZSB3aXRoIGNvcnJlY3QgcGFyYW1ldGVyCglmb3IgMzItYml0IHF1ZXVlcy4KCgkqIHdpbjMyL2tlcm5lbDMyLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBbUUZdVF9UaHVuayBzaG91bGQgY2xlYXIgSElXT1JEKEVBWCkgb24gcmV0dXJuLgoJQnVnZml4OiBoYWNrIGZvciBzdHVwaWQgVVNFUjMyIENhbGxiYWNrR2x1ZUxTIHJvdXRpbmUgaW4gQ29tbW9uMzJUaGtMUy4KCgkqIGlmMTYzMi90aHVuay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogQmFkIGp1bXAgZ2VuZXJhdGVkIGluIFRIVU5LX0FsbG9jTFNUaHVua2xldC4KCUJ1Z2ZpeDogRm9yZ290IHRvIGNvbnZlcnQgc2VncHRyIGluIEFsbG9jTFNUaHVua2xldENhbGxiYWNrRXguCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzogRXJpYyBXYXJua2UgPGVyaWNAc25vd21vb24uY29tPgoJRG9uJ3QgbWF0Y2ggYWdhaW5zdCBTeW1ib2wgb3IgTmlsIGZvbnRzLgoKCSogbWVtb3J5L2dsb2JhbC5jOiBTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCVJldHVybiB0aGUgImJ1ZmZlcnMiIGFuZCAiY2FjaGVkIiBtZW1vcnkgYXMgZnJlZSBzaW5jZSBpdCBpcwoJZGVhbGxvY2F0ZWQgd2hlbiBhIHByb2dyYW0gbmVlZHMgaXQgYW55d2F5LgoKCSogd2luZG93cy9kaWFsb2cuYywgaW5jbHVkZS93aW5kb3dzLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1Z2ZpeDogU2V0RGxnSXRlbVRleHQzMiByZXR1cm5zIEJPT0wgbm90IHZvaWQuCgoJKiByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL3VzZXIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIEdldFVzZXJPYmplY3RJbmZvcm1hdGlvbkF8Vy4KCgkqIHJlbGF5MzIvcmVsYXkzODYuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIGxlZnQgb3ZlciAnc2hvdycgYW5kIHVzZWxlc3MgZGVhZGJlZWYgY2hlY2tpbmcgd2hpY2ggZG9lc24ndAoJd29yay4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkanVzdCBicm9rZW4gZW50cnlwb2ludCBhZGRyZXNzZXMuICh3aW45OCBub3RlcGFkLmV4ZSkKCgkqIGRvY3VtZW50YXRpb24vc3RhdHVzL211bHRpbWVkaWE6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJVXBkYXRlZCBhY2NvcmRpbmcgdG8gZGV2ZWxvcG1lbnQuCgoJKiBpZjE2MzIvbW1zeXN0ZW0uc3BlYywgcmVsYXkzMi93aW5tbS5zcGVjOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglTb21lIG5ldyBzdHVicyAobWlkaVN0cmVhbVhYWCBmdW5jdGlvbnMsIHNvbWUgbWNpIGZ1bmN0aW9ucywgYW5kCglzb21lIG1taW8gZnVuY3Rpb25zKS4KCgkqIG11bHRpbWVkaWEvbWlkaS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU1vdmVkIE1DSSBwYXJ0IHRvIG1jaW1pZGkuYyA7IGFkZGVkIERyaXZlclByb2MuCgoJKiBtdWx0aW1lZGlhL2F1ZGlvLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTW92ZWQgTUNJIHBhcnQgdG8gbWNpd2F2ZS5jIDsgYWRkZWQgc29tZSBlcnJvciBjaGVja2luZyA7IGFkZGVkCglEcml2ZXJQcm9jCgoJKiBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIG11bHRpbWVkaWEvTWFrZWZpbGUuaW46CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIG1jaW1pZGkgYW5kIG1jaXdhdmUuCgoJKiBtdWx0aW1lZGlhL21jaW1pZGkuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBidWcgaW4gTUNJX0lORk8gY29tbWFuZCA7IGZpeGVkIHBhdXNlL3Jlc3VtZSBjb21tYW5kcyA7IGZpeGVkCglzZWVrIGNvbW1hbmQuCgoJKiBtdWx0aW1lZGlhL21jaXdhdmUuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglTdGFydGluZyB3cml0aW5nIE1DSSBwYXJ0IDsgZml4ZWQgYnVnIGluIE1DSV9JTkZPIGNvbW1hbmQuCgoJKiBtdWx0aW1lZGlhL21taW8uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIG1pc3Npbmcgc3R1YnMgaW4gMzIgYml0IHBhcnQuCgoJKiBtdWx0aW1lZGlhL21jaXN0cmluZy5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU1hZGUgdXNlIG9mIG5ldyAxNi8zMiBNQ0kgbWVzc2FnZSBoYW5kbGluZyBpbiBtbXN5c3RlbS5jLgoKCSogaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL211bHRpbWVkaWEuaDoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc29tZSBuZXcgZnVuY3Rpb25zL3N0cnVjdHVyZXMgZGVmaW5pdGlvbnMuKEkgY291bGRuJ3QgZ2V0IGFsbAoJdGhlIG1hbmlmZXN0IGNvbnN0YW50cyB2YWx1ZXMgdGhhdCBNUyB3YXMgcmVmZXJyaW5nIHRvIGluIGl0cyBzcGVjcy4uLgoJaWYgc29tZW9uZSBoYXMgdGhlbS4uLikKCgkqIG11bHRpbWVkaWEvbWNpYW5pbS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHNvbWUgZXJyb3IgY2hlY2tpbmcgOyBtYWRlIHVzZSBvZiBuZXcgMTYvMzIgTUNJIG1lc3NhZ2UgaGFuZGxpbmcKCWluIG1tc3lzdGVtLmMgOyBmaXhlZCBidWcgaW4gTUNJX0lORk8gY29tbWFuZC4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc29tZSBlcnJvciBjaGVja2luZyA7IG1hZGUgdXNlIG9mIG5ldyAxNi8zMiBNQ0kgbWVzc2FnZQoJaGFuZGxpbmcgaW4gbW1zeXN0ZW0uYy4KCUFkZGVkIFdpbjk1IGNvbW1hbmQgdG8gaGFuZGxlIGNkLXJvbSB3aXRoIGJvdGggZGF0YSBhbmQgYXVkaW8gOyBmaXhlZAoJYnVnIGluIE1DSV9JTkZPIGNvbW1hbmQgOyBzaGFkb3dpbmcgTUNJIHN0YXR1cyBmb3IgZGV2aWNlcyB0aGF0IGNhbid0CglnZXQgY3VycmVudCBzdGF0dXMgOyBmaXhlZCBzdGF0dXMgbm90IGJlaW5nIHVwZGF0ZWQgb24gY2QgY2hhbmdlLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZhY3Rvcml6ZWQgMTYvMzIgYml0IE1DSSBmdW5jdGlvbiBieSB1c2luZyAgbWVzc2FnZSBtYXBwaW5nIGZyb20gMTYKCXRvIDMyIGJpdHMgOyBhZGRlZCBzb21lIG5ldyBwcm90b3R5cGVzIG1jaVNlbmRDb21tYW5kLCBtY2lTZW5kU3RyaW5nLAoJbWNpKFNldC9HZXQpWWllbGRQcm9jIDsgc3RhcnRlZCB3cml0aW5nIG1pZGlTdHJlYW1YWFggZnVuY3Rpb25zIC0gbm90Cgl5ZXQgd29ya2luZy4gRml4ZWQgc29tZSBpc3N1ZXMgcmVnYXJkaW5nIGFzeW5jaHJvbm91cyBNQ0kgY29tbWFuZHMgOwoJZml4ZWQgTUNJX1NZU0lORk8gY29tbWFuZC4KCgkqIHJlc291cmNlcy9zeXNyZXNfRnIucmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgc29tZSBxdWlya3MuCgpTdW4gTm92IDIyIDE4OjI5OjUwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hbnkgZml4ZXMuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmdW5jdGlvbjogX0lMR2V0RXh0ZW5zaW9uLgoKCSogZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZmlsZS4gSEtFWV9DTEFTU0VTX1JPT1QgaGFuZGxpbmcuCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVVwZGF0ZWQuCgoJKiBkbGxzL2NvbWN0bDMyL2hlYWRlci5jLCBkbGxzL2NvbWN0bDMyL3N0YXR1cy5jLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2hlYWRlci5oLCBpbmNsdWRlL2xpc3R2aWV3LmgsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL3JlYmFyLmgsIGluY2x1ZGUvc3RhdHVzLmgsIGluY2x1ZGUvdG9vbGJhci5oLCBpbmNsdWRlL3Rvb2x0aXBzLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgVW5pY29kZSBzdXBwb3J0IChhdCBsZWFzdCBwYXJ0aWFsbHkpLgoKCSogb2xlL01ha2VmaWxlLmluLCBvbGUvY29tcG9iai5jLCBvbGUvb2xlb2JqLmMsIGluY2x1ZGUvb2xlb2JqLmgsIGluY2x1ZGUvc2hsb2JqLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgSU9sZUFkdmlzZUhvbGVyIGludGVyZmFjZSAoc3RpbGwgYSBkdW1teSkgYW5kIGZpeGVkCglDcmVhdGVPbGVBZHZpc2VIb2xkZXIoKS4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgZGxscy9jb21jdGwzMi90b29sdGlwcy5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIGdsb2JhbCBzdWJjbGFzc2luZyBhdG9tLCB1c2VkIGJ5IHRvb2x0aXBzIGFuZCB1cGRvd24gKG5vdCB5ZXQpLgoKCSogZGxscy9jb21jdGwzMi9yZWJhci5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgbGF5b3V0IGNvZGUuCgoJKiBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCByZWxheTMyL2NvbWN0bDMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgSW1hZ2VMaXN0X0xvYWRJbWFnZSgpLgoKCSogZGxscy9jb21jdGwzMi9jb21ib2V4LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBDTUVNX1NFVElURU0zMkEgYW5kIG1lc3NhZ2UgZm9yd2FyZGluZyB0byBjb21ib2JveC4KCgkqIG9sZS9tb25pa2VyLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBzdHViIGZvciBDcmVhdGVJdGVtTW9uaWtlcigpLgoKCSogZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBzb21lIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBuYW1lcyBhbmQgaW1wbGVtZW50ZWQgRFBBX01lcmdlCglwYXJ0aWFsbHkuCgoJKiBjb250cm9scy9idXR0b24uYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUVuYWJsZWQgZG91YmxlIGNsaWNrIGZvciBidXR0b25zLgoKCSogaW5jbHVkZS93aW5kb3dzLmg6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBjb21tYW5kIGFuZCByZXR1cm4gY29uc3RhbnRzIHVzZWQgYnkgV01fTk9USUZZRk9STUFULgoKCSogb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZ2Rpb2JqLmMsIG9iamVjdHMvcGVuLmMsIHdpbmRvd3MvQXR0aWMvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvZGliLmMsIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvdGV4dC5jLCBpbmNsdWRlL2RjLmgsIGluY2x1ZGUveDExZHJ2Lmg6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU1vdmVkIERDX1NldHVwR0MgZnVuY3Rpb25zIHRvIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jLgoKCSogaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jLCBvbGUvb2xlMm5scy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBmaXhlcyB0byBnZXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgdG8gYSBzZW5zaWJsZSB2YWx1ZS4KCVRoYW5rcyB0byBQYWJsby4KCgkqIEFOTk9VTkNFLCBERVZFTE9QRVJTLUhJTlRTLCBSRUFETUUsIGRvY3VtZW50YXRpb24vUkVBRE1FLmRvY3VtZW50YXRpb24sIGRvY3VtZW50YXRpb24vaG93LXRvLXBvcnQsIGRvY3VtZW50YXRpb24vd2luZS5tYW4sIGRvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglNaXNjZWxsYW5lb3VzIHNtYWxsIGZpeGVzLgoKCSogZ3JhcGhpY3Mvd2luMTZkcnYvcHJ0ZHJ2LmMsIGlmMTYzMi9nZGkuc3BlYywgaW5jbHVkZS93aW5kb3dzLmgsIG9iamVjdHMvbWV0YWZpbGUuYywgb2JqZWN0cy9yZWdpb24uYywgcmVsYXkzMi9nZGkzMi5zcGVjOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgV2luMTYgaW1wbGVtZW50YXRpb24gZm9yIEdldFJlZ2lvbkRhdGEoKS4KCgkqIG9sZS90eXBlbGliLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUVuaGFuY2VkIE9BQnVpbGRWZXJzaW9uKCkgdG8gcmV0dXJuIGRpZmZlcmVudCB2ZXJzaW9uIHZhbHVlcyBmb3IKCWRpZmZlcmVudCB3aW52ZXJzLgoKCSogbXNkb3MvaW50MjEuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgSU5UMjFfUGFyc2VGaWxlTmFtZUludG9GQ0IoKSBhbmQgc29tZSBvdGhlciB0aGluZ3MgdG8gZ2V0CglDT01NQU5ELkNPTSB3b3JraW5nLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUFkZGVkIG1pc3NpbmcgZW50cnkgZm9yIEdldE51bWJlckZvcm1hdFcuCgoJKiBvYmplY3RzL3BhbGV0dGUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDaGVja2luZyBmb3IgTlVMTC1wb2ludGVyLgoKCSogb2xlL25scy9mcmEubmxzLCBvbGUvbmxzL2ZyYi5ubHMsIG9sZS9ubHMvZnJjLm5scywgb2xlL25scy9mcmwubmxzOgoJUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCUJldHRlciBPTEUgc3VwcG9ydCBpbiBGcmVuY2ggbGFuZ3VhZ2VzLgoKCSogbG9hZGVyL21vZHVsZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGF0aW9uIG9mIENyZWF0ZVByb2Nlc3MzMlcuCgoJKiB3aW5kb3dzL2V2ZW50LmM6IERhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KCVF1ZXVpbmcgb2YgZGVmZXJyZWQgRXhwb3NlIGV2ZW50cy4KCgkqIGNvbnRyb2xzL2xpc3Rib3guYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglMQl9HRVRURVhUOiBIYW5kbGUgcGFzc2VkIE5VTEwgYnVmZmVyLgoKCSogY29udHJvbHMvY29tYm8uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDQl9HRVRURVhUOiBVc2UgbHBCdWZmZXIgaW5zdGVhZCBvZiBscFRleHQgZm9yIExCX0dFVFRFWFQzMiwgaGFuZGxlIDAKCWJ5dGUgTlVMTCBidWZmZXIuCgoJKiBvbGUvbmxzL2Zycy5ubHMsIG9sZS9ubHMvc2t5Lm5scywgb2xlL29sZTJubHMuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVHVybiBtZWdhIGRvdWJsZSBzd2l0Y2ggaW50byBzdGF0aWMgdGFibGUgKHJlZHVjZXMgY29tcGlsZSB0aW1lKS4KCgkqIEFVVEhPUlMsIGluY2x1ZGUvYXV0aG9ycy5oOiBBZGRlZCBSb2JlcnQgUmlnZ3MuCgoJKiBpbmNsdWRlL2QzZC5oOiBSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJaW5jbHVkZSBkZHJhdy5oLCBxdWVzdGlvbmFibGUgZml4IGZvciBxdWVzdGlvbmFibGUgc3RydWN0L3VuaW9uCgljb25zdHJ1Y3QgaW4gTVMncyBEM0RWRUNUT1IgZGVmaW5pdGlvbi4KCgkqIGluY2x1ZGUvZHNvdW5kLmg6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglNb3JlIGZsYWdzIChEaXJlY3RYIDUuMiksIERpcmVjdFNvdW5kM0RMaXN0ZW5lciBhbmQKCURpcmVjdFNvdW5kM0RCdWZmZXIgc3RydWN0dXJlcywgaW5jbHVkZSBzb21lIHJlcXVpcmVkIGZpbGVzCgkod2luZG93cy5oLCBjb21wb2JqLmgsIGFuZCBkM2QuaCkuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jOiBSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJRGlyZWN0U291bmQzRExpc3RlbmVyIGFuZCBEaXJlY3RTb3VuZDNEQnVmZmVyIHN0dWJzLCBuZXcgbWl4ZXIgY29kZSwKCXByaW1hcnkgYnVmZmVyIGlzIGltcGxlbWVudGVkIGNsb3NlciB0byB3aGF0IHRoZSBTREsgZG9jcyBzcGVjaWZ5LAoJb3RoZXIgU0RLIGRvY3VtZW50ZWQgYmVoYXZpb3VyIGVuZm9yY2VkLiBDb21wbGV0ZWQgdGhlIGRldmNhcHMgbGlzdC4KCgkqIG1pc2MvY3J0ZGxsLmMsIHJlbGF5MzIvY3J0ZGxsLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicyBzdHJkYXRlLCBzdHJ0aW1lLgoKCSogbWVtb3J5L3NlbGVjdG9yLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogdHlwbyBpbiBTVW5NYXBMU19JUF9FQlBfOCBsZWFkIHRvIHN0YWNrIGNvcnJ1cHRpb24uCgoJKiBtaXNjL2NvbW0uYzogQ2xpZmYgV3JpZ2h0IDxjbGlmZkBzbmlwZTQ0NC5vcmc+CglGaXhlZCBhIG1hc2sgc2V0LCBhbmQgb3RoZXIgcGFyaXR5IHNldHRpbmcgYnVncyBmb3Igc2VyaWFsIHBvcnRzLgoKCSogaW5jbHVkZS9zaWdfY29udGV4dC5oOiBWYXN1ZGV2IE11bGNoYW5kYW5pIDx2YXN1QHRlaWwuc29mdC5uZXQ+CglBZGRlZCBCU0RJIHNpZ2NvbnRleHQgZGVmaW5pdGlvbnMuCgoJKiB3aW5kb3dzL2NsYXNzLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglGaXhlZCB0eXBvLgoKCSogcmVsYXkzMi9yZWxheTM4Ni5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZSBub3cgdXNlbGVzcyBSRUxBWV9TaG93RGVidWdtc2dzUmVsYXkgY2hlY2suCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEbyBub3QgcmVsb2NhdGUgdGhlIHBvaW50ZXJzIGluIHRoZSBJTUFHRV9USFJFQURfTE9DQUxfU1RPUkFHRQoJZGlyZWN0b3J5LCBmb3IgdGhleSBzZWVtIHRvIGJlIHJlbG9jYXRlZCBieSB0aGUgc3RhbmRhcmQgcmVsb2NhdGluZwoJbWVjaGFuaXNtLiAoRXhwbGljaXRseSBjaGVja2VkIG9uZSBwcm9ncmFtIHVzaW5nIGl0KQoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGluY2x1ZGUvc2hlbGwuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUGF0aEFkZEJhY2tzaGxhc2gsIFBhdGhSZW1vdmVCYWNrc2xhc2g6IGFyZ3VtZW50IGlzIG5vdCBjb25zdGFudC4KCgkqIHdpbmRvd3Mvd2luLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hlY2sgd25kUHRyIGZvciBOVUxMLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglCbHRGYXN0OiBIb25vciBsUGl0Y2gsIExvY2svVW5sb2NrIHN1cmZhY2VzICh4bGliIG5lZWRzIHVubG9jayB0byBkcmF3KS4KCgkqIG1pc2Mvc3Bvb2xlci5jLCBtaXNjL01ha2VmaWxlLmluLCBtaXNjZW11L21haW4uYywgTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYywgbG9hZGVyL21haW4uYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJVGFrZXMgcHJpbnQgc3Bvb2xlciBmdW5jdGlvbnMgb3V0IG9mIHdpbjE2ZHJ2LgoJQWxsb3dzIHRoZSBQb3N0U2NyaXB0IGRyaXZlciB0byBnbyBpbnRvIGxpYndpbmUuCgoJKiBpZjE2MzIvZ2RpLnNwZWMsIG9iamVjdHMvYnJ1c2guYywgb2JqZWN0cy9wYWxldHRlLmM6CglJYW4gU2NobWlkdCA8aXJzbWFuQGlhZy5uZXQ+CglBZGRlZCBzdHVicyBmb3IgdHdvIHVuZG9jdW1lbnRlZCBHREkgcm91dGluZXMsIFNldE1hZ2ljQ29sb3JzIGFuZAoJU2V0U29saWRCcnVzaC4gVGhpcyBhbGxvd3MgV2luOTggbmF0aXZlIFVTRVIgdG8gc3RhcnQgdXAuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUZpeGVkIHRoZSBER0EgZGV0ZWN0aW9uIGNvZGUgaW4gZGRyYXcuIFlvdSBkb24ndCBuZWVkIHJvb3QgYWNjZXNzLAoJaGF2aW5nIHIrdyBhY2Nlc3MgdG8gL2Rldi9tZW0gaXMgZW5vdWdoLgoKCSogZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0ZHJhdywgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3Mvd2luZy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURpcmVjdERyYXcgc3RhdHVzIHVwZGF0ZWQuCglVc2UgY29vcGVyYXRpdmUgd2luZG93IGZvciBkcmF3aW5nIGluIHhsaWIgaW1wbGVtZW50YXRpb24gaWYgcG9zc2libGUuCglTbGlnaHRseSByZXN0cnVjdHVyZWQgSURpcmVjdERyYXdTdXJmYWNlOjpCbHQgc28gaXQgZG9lc24ndCBjcmFzaC4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPERhdmlkLkZhdXJlQGluc2EtbHlvbi5mcj4KCU1pY3JvIHBhdGNoIGZvciBBbHRHciBrZXkgb24gZ2VybWFuIGtleWJvYXJkcy4KCgkqIGZpbGVzL2Rvc19mcy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVzIGVycm9yIGhhbmRsaW5nIChTZXRMYXN0RXJyb3IoKSBhbmQgcmV0dXJuIHZhbHVlKS4KCgkqIG9iamVjdHMvdGV4dC5jLCBpbmNsdWRlL3dpbmRvd3MuaDogR2FlbCBkZSBDaGFsZW5kYXIgPGdhZWxAbGltc2kuZnI+CglQYXJ0aWFsbHkgY29tcGxldGUgR2V0VGV4dENoYXJzZXRJbmZvIGFuZCBjb3JyZWN0cyByZXR1cm4gdmFsdWVzIGZvcgoJdGhpcyBmYW1pbHkgb2YgZnVuY3Rpb25zLgoKU3VuIE5vdiAxNSAxODoxMjoxMiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL2NvbXBvYmouYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWcgZml4LgoKCSogb2JqZWN0cy9kaWIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHJldHJpZXZhbCBvZiBpbnZhbGlkIHBhbGV0dGUgZGF0YSBpbiBHZXRESUJpdHMoKS4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5jb20+CglBbGxvdyBTV1BfSElERVdJTkRPVyB0byBiZSBjYWxsZWQgb24gd2luZG93cyB0aGF0IGFyZSBhbHJlYWR5IGhpZGRlbgoJd2l0aG91dCB1bm1hcHBpbmcgdGhlbSBhZ2Fpbi4KCgkqIHdpbmRvd3Mvc2Nyb2xsLmM6IFBpbSBCb2xsZW4gPHBpbUBnaW1saS5pYWVodi5ubD4KCUZpeGVkIHNjcm9sbCBidWcgaW4gU2Nyb2xsV2luZG93RXgzMiB3aGljaCBjYXVzZWQgZ2FyYmFnZSBvbiBzY3JlZW4KCW91dHNpZGUgZGVza3RvcCB3aW5kb3cgd2l0aCBndHdpbi5leGUgKER1dGNoIGJhbmtpbmcgcHJvZ3JhbSkuCgoJKiBsb2FkZXIvbWFpbi5jLCBtZW1vcnkvYXRvbS5jLCBtaXNjL2RkZW1sLmMsIHdpbmRvd3MvY2xhc3MuYywgd2luZG93cy9tZXNzYWdlLmMsIGluY2x1ZGUvQXR0aWMvYXRvbS5oLCBpbmNsdWRlL2dsb2JhbC5oOgoJU21hbGwgYXRvbSBmaXhlcy4KCgkqIG9iamVjdHMvZGliLmM6IERpcmsgVGhpZXJiYWNoIDx0aGllcmJhY2hAbWF0aGVtYXRpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBidWcgaW4gU3RyZXRjaERJQml0czMyICh3cm9uZyBvcmlnaW4pLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgZml4ZXMuCgoJKiBpbmNsdWRlL2RkcmF3LmgsIGluY2x1ZGUvdHNfeHNobS5oLCB0b29scy9tYWtlX1gxMXdyYXBwZXJzLCB0c3gxMS9YMTFfY2FsbHMsIHRzeDExL3RzX3hzaG0uYywgZ3JhcGhpY3MvZGRyYXcuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJU29tZSBjb3JyZWN0aW9ucyB0byB0aGUgaGFuZGxpbmcgb2Ygb2ZmLXNjcmVlbiBidWZmZXJzLgoJQ29ycmVjdGlvbiB0byB0aGUgRW51bURpc3BsYXlNb2RlcyBmdW5jdGlvbi4KCUFkZGVkIFhTaG0gc3VwcG9ydCB0byBYbGliIGRyaXZlci4KCU9wZW4gYSBEaXJlY3RYIHdpbmRvdyBldmVuIHdoZW4gdXNpbmcgdGhlIERHQSBkcml2ZXIuCgoJKiBpbmNsdWRlL3NoZWxsLmgsIGluY2x1ZGUvc2hsb2JqLmgsIG1pc2Mvc2hlbGwuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9NYWtlZmlsZS5pbiwgZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9mb2xkZXJzLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2xlYW51cCwgc21hbGwgZml4ZXMsIGEgZmV3IG5ldyBzdHVicy4KCgkqIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSGFuZGxpbmcgZm9yIGxpc3R2aWV3c3R5bGVzLCB2aWV3IG1vZGUgYnV0dG9ucyBpbiBmaWxlZGlhbG9ncwoJZW5hYmxlZCBhbmQgaGFuZGxlZC4KCU5ldyBsaXN0dmlldyBjb2x1bW5zIFNpemUsIFR5cGUsIE1vZGlmaWVkIGZvciByZXBvcnR2aWV3CgljcmVhdGVkIGFuZCBoYW5kbGVkLgoKCSogZGxscy9zaGVsbDMyL2lmX21hY3Jvcy5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZmlsZSwgd3JhcHBlciBmb3IgSVNoZWxsQnJvd3NlciBjbGFzcy4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZpbGUsIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgaWNvbiBjYWNoZS4KCUltcGxlbWVudGVkIEV4dHJhY3RJY29uRXg7IG1vdmVkIFNITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXgsCglTaGVsbF9HZXRJbWFnZUxpc3QgaW4gdGhpcyBmaWxlLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQ6IElMSXNFcWFsLCBJTEZpbmRDaGlsZCwgX0lMR2V0RmlsZURhdGUsIF9JTEdldEZpbGVTaXplLgoKCSogbG9hZGVyL21vZHVsZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUxvYWRMaWJyYXJ5RXg6IHNob3cgYSB3YXJuaW5nIHdoZW4gY2FsbGVkIHdpdGggdW5pbXBsZW1lbnRlZCBwYXJtLgoKCSogbWlzY2VtdS9pbnN0ci5jOiBDbGVhbmVkIHVwIGEgYml0LgoKCSogbWVtb3J5L3NlbGVjdG9yLmMsIG1pc2NlbXUvaW5zdHIuYywgdG9vbHMvYnVpbGQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2xlYW4gaW52YWxpZCBzZWxlY3RvcnMgb24gdGhlIHBvcCAleHMgZnJvbSB0aGUgU1RBQ0tGUkFNRSBpdHNlbGYKCWluc3RlYWQgb2YgdXNpbmcgbGlua2VkIGxpc3QgaGFjay4KCgkqIE1ha2VmaWxlLmluOiBSZW1vdmVkIGdldHMgbWVzc2FnZS4KCgkqIG9sZS9ubHMvdGhhLm5sczogRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJQWRkZWQgVGhhaSBubHMtcmVzb3VyY2VzLgoKCSogb2xlL25scy9SRUFETUUsIG9sZS9ubHMvY3plLm5scywgb2xlL25scy9lc2UubmxzLCBvbGUvbmxzL2VzZy5ubHMsIG9sZS9ubHMvZXN0Lm5scywgb2xlL25scy9ldXEubmxzLCBvbGUvbmxzL2Zvcy5ubHMsIG9sZS9ubHMvaHJ2Lm5scywgb2xlL25scy9odW4ubmxzLCBvbGUvbmxzL2lzbC5ubHMsIG9sZS9ubHMvbm9yLm5scywgb2xlL25scy9wbGsubmxzLCBvbGUvbmxzL3B0Zy5ubHMsIG9sZS9ubHMvcm9tLm5scywgb2xlL25scy9zbHYubmxzLCBvbGUvbmxzL3N2ZS5ubHMsIG9sZS9vbGUybmxzLmMsIGluY2x1ZGUvd2lubmxzLmg6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCURpc3BsYXkgdGhlIGxhbmd1YWdlIGlkIGZvciAiWFhYIG5vdCBzdXBwb3J0ZWQgZm9yIHlvdXIgbGFuZ3VhZ2UiCgltZXNzYWdlcy4KCUFkZGVkIGFsbCBsYW5ndWFnZXMgYW5kIHN1Ymxhbmd1YWdlcyBmb3IgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBpbgoJcmVzb3VyY2VzL3N5c3Jlc19YeC4KCgkqIG9sZS9vbGUyLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzogR2F2cmllbCBTdGF0ZSA8Z2F2cmllbHNAY29yZWwuY29tPgoJQWRkIHN0dWJzIGZvciBHZXRSdW5uaW5nT2JqZWN0VGFibGUzMiBhbmQgT2xlUmVnR2V0VXNlclR5cGUuCgoJKiBvbGUvbW9uaWtlci5jOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglFbnN1cmUgdGhhdCBDcmVhdGVGaWxlTW9uaWtlciBmdW5jdGlvbnMgZG9uJ3QgcmV0dXJuIGEgYm9ndXMgbW9uaWtlcgoJb2JqZWN0IG9uIGZhaWx1cmUuCgoJKiBpbmNsdWRlL2NsYXNzLmgsIHdpbmRvd3MvY2xhc3MuYzogR2F2cmllbCBTdGF0ZSA8Z2F2cmllbHNAY29yZWwuY29tPgoJQWRkZWQgY29kZSB0byBtYW5hZ2UgQXNjaWkgYW5kIFdpZGVDaGFyIGNsYXNzIG5hbWVzLCBhbmQgdG8gcmV0dXJuIHRoZQoJbmFtZXMgaW4gdGhlIEdldENsYXNzSW5mbyBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL3dpbnNvY2suaDogQ29uc3RhbnRpbmUgU2FwdW50emFraXMgPGNzYXB1bnR6QHN0YW5mb3JkLmVkdT4KCUZpeCB0byBMaW51eCBJUFggc28gY29tcGlsZXMgb24gbm9uLWxpbnV4IHBsYXRmb3Jtcy4KCgkqIG1pc2MvbWFpbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU93biBYMTEgZXJyb3JoYW5kbGVyIHRvIGxvY2F0ZSBYMTEgZXJyb3JzLiBVc2VmdWwgb25seSB3aXRoIC1zeW5jLgoKU2F0IE5vdiAxNCAxODo1OTozMCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9jb2xvci5oLCBpbmNsdWRlL2ltYWdlaGxwLmgsIGluY2x1ZGUvcGFsZXR0ZS5oLCBtZW1vcnkvZ2xvYmFsLmMsIG1pc2MvcmVnaXN0cnkuYywgd2luZG93cy9kZWZ3bmQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgd2FybmluZ3MsIHNvbWUgb25seSB2aXNpYmxlIHdpdGggLVdzdHJpY3QtcHJvdG90eXBlcyBvciAtcGVkYW50aWMuCgoJKiBpbmNsdWRlL2N1cnNvcmljb24uaCwgaW5jbHVkZS9kaXNwbGF5LmgsIGluY2x1ZGUvbWVzc2FnZS5oLCBvYmplY3RzL2N1cnNvcmljb24uYywgd2luZG93cy9kaXNwbGF5LmMsIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCBpZjE2MzIvZGlzcGxheS5zcGVjOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNb3ZlZCBYMTEgbW91c2UgY3Vyc29yIGhhbmRsaW5nIHRvIHRoZSBESVNQTEFZIGRyaXZlci4KCgkqIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGxvYWRlci9tYWluLmMsIGxvYWRlci90YXNrLmMsIG1pc2MvY2FsbGJhY2suYywgbWlzY2VtdS9tYWluLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVNvbWUgZml4ZXMgdG8gV2luZSBzdGFydHVwL3Rlcm1pbmF0aW9uIHNlcXVlbmNlIHdpdGggbmF0aXZlIFVTRVIuCglEbyBub3QgY2FsbCBidWlsdC1pbiBVU0VSIHNpZ25hbCBoYW5kbGVyIHdoZW4gdXNpbmcgbmF0aXZlIFVTRVIuCgoJKiBkZWJ1Z2dlci9icmVhay5jLCBpbmNsdWRlL2RlYnVnZ2VyLmgsIGluY2x1ZGUvdGFzay5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IC1kZWJ1ZyBkaWRuJ3Qgd29yayBhbnltb3JlIGFmdGVyIHRoZSBsYXN0IHN0YXJ0dXAgc2VxdWVuY2UgcGF0Y2guCgoJKiBvbGUvY29tcG9iai5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgbGlzdCBpbnNlcnRpb24gYnVnIGluIENvTG9hZExpYnJhcnkoKS4KCgkqIGlmMTYzMi93cHJvY3Muc3BlYywgbXNkb3MvTWFrZWZpbGUuaW4sIG1zZG9zL2ludDJmLmMsIG1zZG9zL2ludDQxLmMsIG1zZG9zL3Z4ZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBzdHVicyBmb3Igc2V2ZXJhbCBWeERzIC8gaW50ZXJydXB0cy4KCgkqIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIG1pc2MvY2FsbGJhY2suYywgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglTaG91bGQgZ2V0IHdpbjE2ZHJ2IEFib3J0UHJvYyB3b3JraW5nLiBIb3BlZnVsbHkuCgoJKiB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3Mva2V5Ym9hcmQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTW92ZWQgR2V0S2V5Ym9hcmRMYXlvdXROYW1lMTYgdG8gd2luZG93cy9pbnB1dC5jLgoKCSogaW5jbHVkZS9pbWFnZWhscC5oLCBpbmNsdWRlL3dpbm50LmgsIGluY2x1ZGUvd2ludHlwZXMuaDoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJTW92ZWQgc29tZSBkZWNsYXJhdGlvbnMgZnJvbSBpbWFnZWhscC5oIHRvIGNvbW1vbiBpbmNsdWRlIGZpbGVzLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCB3aW4zMi90aHJlYWQuYzoKCVJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglBZGRlZCBpbXBsZW1lbnRhdGlvbnMgZm9yIEludGVybG9ja2VkRXhjaGFuZ2VBZGQoKSBhbmQKCUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCkuCgoJKiB3aW4zMi9jb25zb2xlLmMsIG9iamVjdHMvZGliLmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4ZXMgYSBmZXcgb2YgdGhlIG1hbnkgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBtaXNjZW11L2luc3RyLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW11bGF0ZSAibW92IGNyNCxlYXgiICh0b21icmFpZGVyIDMgZGVtbykuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvIG5vdCBlbnVtZXJhdGUgRDNEIGRldmljZXMgd2UgY2FuJ3QgaGFuZGxlIGFueXdheS4KCVJldHVybiBiaXRtYXNrcyBmb3IgaGkvdHJ1ZWNvbG9yIGRlcHRocyBpbiBFbnVtRGlzcGxheU1vZGVzLgoKCSogaWYxNjMyL3Nub29wLmMsIGluY2x1ZGUvc25vb3AuaCwgcmVsYXkzMi9idWlsdGluMzIuYywgcmVsYXkzMi9zbm9vcC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTcGVlZCB1cCByZWxheTMyLCBzbm9vcDE2IGFuZCBzbm9vcDMyIGluY2x1ZGUvZXhjbHVkZXMgYnkgZG9pbmcgdGhlbQoJanVzdCBvbmNlIGF0IGNyZWF0aW9uIHRpbWUuCgoJKiByZWxheTMyL29sZTMyLnNwZWMsIG9sZS9jb21wb2JqLmMsIG9sZS9vbGUyLmM6CglQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJQWRkZWQgc3R1YnMgZm9yIENvUmV2b2tlQ2xhc3NPYmplY3QgYW5kIE9sZVNldENsaXBib2FyZC4KCgkqIHdpbmRvd3Mvd2luLmM6IFBlciDFbmdzdHL2bSA8cGFuZ0BtaW5kLm51PgoJRW51bVRhc2tXaW5kb3dzMTY6IEJhc2luZyB0aGUgc2VsZWN0aW9uIG9uIGEgd2luZG93J3MgdGFzayBpcyBub3Qgb25seQoJbW9yZSBzdHJhaWdodGZvcndhcmQgdGhhbiBjb21wYXJpbmcgbWVzc2FnZSBxdWV1ZXMsIGl0IGFsc28gd29ya3MKCWJldHRlciBmb3IgV2luMzIgYXBwbGljYXRpb25zLgoKCSogbWVtb3J5L2xvY2FsLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQ2hhbmdlZCBzb21lIG9mIHRoZSBtZXNzYWdlIGNsYXNzZXMuCgoJKiB3aW5kb3dzL2tleWJvYXJkLmM6IERhdmlkIEZhdXJlIDxEYXZpZC5GYXVyZUBpbnNhLWx5b24uZnI+CglTcGVjaWFsIGNhc2UgaGFuZGxpbmcgb2YgOiBTaGlmdCArIGFycm93LCBzaGlmdCArIGhvbWUsIC4uLgoJWCByZXR1cm5zIGEgY2hhciBmb3IgaXQsIGJ1dCBXaW5kb3dzIGRvZXNuJ3QuIElnbm9yZSBYIGNoYXIuCglBbHNvIGFkZGVkIHNvbWUgZG9jdW1lbnRhdGlvbi4KCgkqIGluY2x1ZGUvd2luc29jay5oLCBtaXNjL3dpbnNvY2suYzoKCVN0ZXBoZW4gTGFuZ2FzZWsgPHZvcmxvbkBkb2Rkcy5uZXQ+CglCdWdmaXhlcyBmb3IgSVBYIGNvZGUgYW5kIHByZWxpbWluYXJ5IGdyb3VuZHdvcmsgZm9yIG90aGVyIGFkZHJlc3MKCWZhbWlseSBzdXBwb3J0LgoKCSogb2xlL2NvbXBvYmouYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkoQ29HZXRDbGFzc09iamVjdCkgb25lIG1pc3NpbmcgQ0FMTEJBQ0ssIGV4dHJlbWVseSBzaW1wbGlmaWVkIGNsc2lkCglsb29rdXAgKFJlZ2lzdHJ5IGlzIGNhc2UgaW5zZW5zaXRpdmUpLgoKCSogcmVsYXkzMi9udGRsbC5zcGVjLCB3aW4zMi9hZHZhcGkuYywgZGxscy9udGRsbC9ydGwuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViczogU2V0U2VydmljZVN0YXR1cywgUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXJBL1csCglTdGFydFNlcnZpY2VDdHJsRGlzcGF0Y2hlcjMyQS9XLCBSdGxTeXN0ZW1UaW1lVG9Mb2NhbFRpbWUsCglSdGxUaW1lVG9UaW1lRmllbGRzLgoKCSogaW5jbHVkZS93aW5kb3dzLmgsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgZm9yIEdldE51bWJlckZvcm1hdDMyVy4KCgkqIG1pc2MvY3J0ZGxsLmM6IERhdmlkIEEuIEN1dGhiZXJ0IDxkYWN1dEBlY2UuY211LmVkdT4KCWdldHMoKSBmaXhlcy4KCgkqIG9sZS9ubHMvcnVzLm5sczogQWxleGFuZGVyIFYuIEx1a3lhbm92IDxsYXZAbG9uZy55YXIucnU+CglGaXggU0NPVU5UUlksIFNOQVRJVkVDVFJZTkFNRSwgU0FCQlJFVkRBWU5BTUUzOyBjaGFuZ2Ugc29tZSBTTU9OVEhOQU1FKgoJdG8gYmUgaW4gbm9taW5hdGl2ZSBjYXNlLgoKCSogd2luZG93cy9xdWV1ZS5jOiBQZXIgxW5nc3Ry9m0gPHBhbmdAbWluZC5udT4KCUZpeGVkIFNldE1lc3NhZ2VRdWV1ZTMyIHRvIHJldHVybiBGQUxTRSwgbm90IFRSVUUsIHdoZW4gY2FsbGVkIHdpdGgKCWFuIGludmFsaWQgc2l6ZSBwYXJhbWV0ZXIuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIGNvcnJlY3QgaW1wbGVtZW50YXRpb24gb2YgR2V0Q2FwcywgY2hhbmdlZCBQbGF5IGFuZCBTdG9wIGhhbmRsaW5nCglvZiBwb3NpdGlvbnMgaW5kZXhlcywgc3VwcHJlc3NlZCB3YXJuaW5ncy4KCgkqIG1lbW9yeS9sb2NhbC5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNvcnJlY3RlZCBidWcgaW4gVFJBQ0UgZnVuY3Rpb24uCgoJKiBBVVRIT1JTLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2F1dGhvcnMuaCwgaW5jbHVkZS9kZHJhdy5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglDb3JyZWN0ZWQgYnVnIGluIERpcmVjdERyYXdTdXJmYWNlIGNyZWF0aW9uIGFuZCBoYW5kbGluZyBmb3IgZHJpdmVyCgliYXNlZCB1cG9uIFhsaWxiLgoKCSogd2luZG93cy9kaW5wdXQuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglXaW5lIGtleWJvYXJkIGFuZCBtb3VzZSBoYXZlIG5vdyB0aGVpciBvd24gVUlEcy4KCgkqIG9iamVjdHMvYnJ1c2guYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggYWxsb2NhdGlvbiBzaXplIGluIENyZWF0ZURJQlBhdHRlcm5CcnVzaCouCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBOb3YgIDggMTY6NDQ6NDEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4ZWQga2V5c3Ryb2tlIGFjY2VsZXJhdG9ycyBpbiBkaWFsb2dzIHdoaWNoIGhhdmUgY29udHJvbHMgY29udGFpbmluZwoJb3RoZXIgY29udHJvbHMgYXMgY2hpbGQgd2luZG93cy4KCgkqIGluY2x1ZGUvd2lucHJvYy5oLCBtaXNjL2NvbW1kbGcuYywgd2luZG93cy9ob29rLmMsIHdpbmRvd3Mvd2lucHJvYy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlczogTEJfL0NCXy9FTV8gbWVzc2FnZXMgZm9yIGdldHRpbmcvc2V0dGluZyB0ZXh0IGFuZCBhIGJ1ZyBpbgoJMTYtPjMyIGJpdCBjb252ZXJzaW9uLgoKCSogb2JqZWN0cy9kaWIuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglQcmV2ZW50IENyZWF0ZURJQlNlY3Rpb24gZnJvbSBzZWcgZmF1bHRpbmcgd2hlbiBvbmUgZGltZW5zaW9uIG9mCglzZWN0aW9uIGlzIDAuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS93aW5zb2NrLmgsIG1pc2Mvd2luc29jay5jOgoJU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCVN1cHBvcnQgZm9yIElQWCBuZXR3b3JraW5nIHZpYSB3aW5zb2NrIHVuZGVyIExpbnV4LgoKCSogcmVsYXkzMi9nZGkzMi5zcGVjLCBncmFwaGljcy9wYWludGluZy5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgYSBzdHViIGZvciBTdGFydERvY0EgYW5kIEVuZERvYy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgd2luMzIvY29uc29sZS5jOgoJSmFtZXMgU3V0aGVybGFuZCA8SmFtZXNTdXRoZXJsYW5kQGdteC5kZT4KCU1vcmUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNldEN0cmxIYW5kbGVyKCkgZnVuY3Rpb24gKGFuZCB0aGUKCXJlbGF0ZWQgY29uc29sZSBmdW5jdGlvbnMpLgoKCSogb2JqZWN0cy9icnVzaC5jLCByZWxheTMyL2dkaTMyLnNwZWM6IEplZmYgSm9oYW5uIDxqam9oYW5uQGtpdmEubmV0PgoJQWRkZWQgQ3JlYXRlRElCUGF0dGVybkJydXNoUHQgKEdESTMyLjM1KSB3aXRoIG1pbm9yIGRvY3VtZW50YXRpb24KCXVwZGF0ZXMuCgoJKiBncmFwaGljcy92Z2EuYywgaW5jbHVkZS92Z2EuaCwgbXNkb3MvaW9wb3J0cy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTaW11bGF0ZSB0aGUgVkdBIHZlcnRpY2FsIHJlZnJlc2guCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIHN1cHBvcnQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGluIEJsaXQgZnVuY3Rpb24uCgoJKiBpbmNsdWRlL2RpbnB1dC5oLCB3aW5kb3dzL2RpbnB1dC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBkZXZpY2UgdHlwZSBjb25zdGFudHMgYW5kIHVzZWQgdGhlbSBpbiBkZXZpY2UgZW51bWVyYXRpb24KCWZ1bmN0aW9uLgoKCSogbWlzYy9yZWdpc3RyeS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBUEkgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgUmVnRW51bUtleUV4LCBSZWdFbnVtVmFsdWUgYW5kCglSZWdRdWVyeUluZm9LZXkgdGFrZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcnMgYXMgY2hhcmFjdGVycy4KCgkqIG9sZS9jb21wb2JqLmM6IEFkZGVkIG1pc3NpbmcgI2luY2x1ZGUgImNvbmZpZy5oIgoKCSogQVVUSE9SUywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvYXV0aG9ycy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBvbGUvY29tcG9iai5jOgoJSnVzdGluIEJyYWRmb3JkIDxqdXN0aW5AdWthbnMuZWR1PgoJUmVwbGFjZXMgQ29DcmVhdGVHdWlkIHN0dWIgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBEQ0UncyBVVUlECglzcGVjaWZpY2F0aW9uLiBBbHNvIHJlbW92ZXMgc29tZSB1bm5lY2Vzc2FyeSBjb2RlIGZyb20gU3RyaW5nRnJvbUNMU0lELgoKCSogaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW50eXBlcy5oOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgYW4gZXh0ZXJuICJDIiBzYWZlZ3VhcmQuCgoJKiBpbmNsdWRlL2NvbW1kbGcuaCwgaW5jbHVkZS93aW5kb3dzLmgsIHdpbmRvd3MvaW5wdXQuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCS0gYWRkcyBHZXRFeGl0Q29kZVByb2Nlc3MKCS0gY29ycmVjdHMgdGhlIHJldHVybi10eXBlIG9mIEdldEtleVN0YXRlCgktIGNvcnJlY3RzIHRoZSB3aW5lbGliIGRlZmluaXRpb24gb2YgSXNEaWFsb2dNZXNzYWdlCgktIGFkZHMgd2luZWxpYiBkZWZpbml0aW9ucyBmb3IgUHJpbnREbGcKCgkqIG9iamVjdHMvY2xpcHBpbmcuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUV4dFNlbGVjdENsaXBSZ24gZml4OiBSR05fRElGRiBkaWQgbm90IHdvcmsuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYywgd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL21lc3NhZ2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRhcHRlZCB0byBuZXcgaW5wdXQgZXZlbnQgaGFuZGxpbmcuCgoJKiBpZjE2MzIvdGh1bmsuYywgaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS9pbnB1dC5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgcmVsYXkzMi91c2VyMzIuc3BlYywgd2luZG93cy9NYWtlZmlsZS5pbiwgd2luZG93cy9pbnB1dC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVU0VSLXNpZGUgcGFydCBvZiBpbnB1dCBldmVudCBoYW5kbGluZzogY29udGFpbnMgaW1wbGVtZW50YXRpb24gb2YKCWtleWJkX2V2ZW50IGFuZCBtb3VzZV9ldmVudCwgYW5kIFVTRVItcmVsYXRlZCBjb2RlIHJlbW92ZWQgZnJvbQoJd2luZG93cy9ldmVudC5jIGFuZCB3aW5kb3dzL2tleWJvYXJkLmMuCgoJKiB3aW5kb3dzL2Rpc3BsYXkuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU3R1YnMgZm9yIERJU1BMQVkuRFJWIHJlbW92ZWQgZnJvbSBrZXlib2FyZC5jLgoKCSogaWYxNjMyL21vdXNlLnNwZWMsIGluY2x1ZGUvbW91c2UuaCwgd2luZG93cy9tb3VzZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRhdGlvbiBvZiBNT1VTRS5EUlYgKGNvbnRhaW5zIHNvbWUgY29kZSB0YWtlbiBmcm9tCgl3aW5kb3dzL2V2ZW50LmMpLgoKCSogaWYxNjMyL2tleWJvYXJkLnNwZWMsIGluY2x1ZGUva2V5Ym9hcmQuaCwgd2luZG93cy9rZXlib2FyZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRhdGlvbiBvZiBLRVlCT0FSRC5EUlYgKGNvZGUgbW9zdGx5IHRha2VuIGZyb20gcHJldmlvdXMKCXdpbmRvd3Mva2V5Ym9hcmQuYykuCgoJKiBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvdGFzay5jLCBtaXNjZW11L21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiByZWFsbHkgKmRvKiBzd2l0Y2ggdG8gdGhlIGluaXRpYWwgdGFzaydzIHN0YWNrLgoJQ2FsbExhcmdlU3RhY2sgbWVjaGFuaXNtIHJlLWVuYWJsZWQuCgoJKiBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJTmV3IEZpbGVzLiBBZGRlZCAnZGF0ZSBhbmQgdGltZSBwaWNrZXInIGFuZCAnbW9udGggY2FsZW5kYXInIGNvbnRyb2wKCWR1bW1pZXMuIFRoZXkgYXJlIHVzZWQgYnkgT3V0bG9vayBFeHByZXNzLgoKCSogb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZUJpbmRDdHgoKSBhbmQgYWRkZWQgbWlzc2luZyBDb0dldENsYXNzT2JqZWN0KCkKCXRvICouc3BlYyBmaWxlLiBNYWtlcyBJbnRlcm5ldCBFeHBsb3JlciA0LjAxIGhhcHB5IDstKQoKCSogZGxscy9jb21jdGwzMi9wYWdlci5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJTGl0dGxlIGltcHJvdmVtZW50LgoKCSogZGxscy9jb21jdGwzMi9saXN0dmlldy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgcHJlbGltaW5hcnkgaGl0IHRlc3RpbmcuIE1ha2VzIHJlZ2VkaXQuZXhlIGhhcHB5IDstKQoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgZG9jdW1lbnRhdGlvbiBhbmQgZml4ZWQgdHlwb3MuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBEcmF3U3RhdHVzVGV4dDMyQVcoKSBhbmQgQ3JlYXRlU3RhdHVzV2luZG93MzJBVygpLgoKCSogZGxscy9jb21jdGwzMi9yZWJhci5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgZGlzcGxheSBhbmQgbGF5b3V0IGNvZGUuCgoJKiBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2RhdGV0aW1lLmMsIGRsbHMvY29tY3RsMzIvbW9udGhjYWwuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2RhdGV0aW1lLmgsIGluY2x1ZGUvbW9udGhjYWwuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglOZXcgRmlsZXMuIEFkZGVkICdkYXRlIGFuZCB0aW1lIHBpY2tlcicgYW5kICdtb250aCBjYWxlbmRhcicgY29udHJvbAoJZHVtbWllcy4gVGhleSBhcmUgdXNlZCBieSBPdXRsb29rIEV4cHJlc3MuCgpTYXQgTm92ICA3IDEyOjU2OjMyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvYmplY3RzL2VuaG1ldGFmaWxlLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYywgaW5jbHVkZS93aW5kb3dzLmg6CglDaGFybGVzIFN1cHJpbiA8Y3N1cHJpbkBseW54LmRhYy5uZXUuZWR1PgoJQWRkZWQgc3R1YnMgZm9yIFNldFdpbk1ldGFGaWxlQml0cyBhbmQgR2V0RW5oTWV0YUZpbGVQYWxldHRlRW50cmllcy4KCgkqIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglTdG9wIFgxMURSVl9Sb3VuZFJlY3QgY2FsbGluZyBYRHJhd0FyYyB3aXRoIC12ZSB3aWR0aC9oZWlnaHQgcGFyYW1zCgl3aGljaCBpdCBkaWQgaWYgZWl0aGVyIGVsbGlwc2UgZGltZW5zaW9uIHdhcyB6ZXJvLgoKCSogZ3JhcGhpY3MvcGFpbnRpbmcuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglPcHRpbWl6ZSBSb3VuZFJlY3QzMiB0byBjYWxsIFJlY3RhbmdsZTMyIGlmIGVpdGhlciBlbGxpcHNlIGRpbWVuc2lvbgoJaXMgemVyby4KCgkqIHJlbGF5MzIvbXByLnNwZWMsIG1pc2MvbmV0d29yay5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgc3R1YiBXTmV0RW51bUNhY2hlZFBhc3N3b3Jkcy4KCgkqIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludDI1LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglNYWRlIHRoaXMgZmlsZSBET1NNT0QgZnJpZW5kbHkuCgoJKiBsb2FkZXIvbmUvc2VnbWVudC5jLCBsb2FkZXIvcGVfaW1hZ2UuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVVuaWZpZWQgIk5vIGltcGxlbWVudGF0aW9uIGZvci4uLiIgd2FybmluZ3MuCgoJKiB3aW4zMi9kZXZpY2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+Cgltb25vZGViZy52eGQgdXNlZCBieSBzb21lIE9yaWdpbiBwcm9ncmFtcyBpbXBsZW1lbnRlZC4KCgkqIG9iamVjdHMvYml0bWFwLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGYWlsIGlmIGxlc3MgdGhlbiBvbmUgZW50aXJlIGxpbmUgcmVxdWVzdGVkIGluIEdldEJpdG1hcEJpdHMzMi4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQWRkZWQgV01fR0VURExHQ09ERSBoYW5kbGluZyBpbiAoVW4pTWFwTXNnMzJBdG8xNi4KCgkqIGlmMTYzMi9jb21wb2JqLnNwZWMsIGluY2x1ZGUvb2xlLmgsIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCUpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBDb0xvYWRMaWJyYXJ5LCBDb0ZyZWVBbGxMaWJyYXJpZXMsCglDb0ZyZWVVbnVzZWRMaWJyYXJpZXMsIENvRnJlZUxpYnJhcnkuCglGaXhlZCBtaXNzcGVsbGluZyBvZiBDb1VuaW5pdGlhbGl6ZS4KCgkqIHByb2dyYW1zL2Nsb2NrL0NoYW5nZUxvZywgcHJvZ3JhbXMvY2xvY2svbWFpbi5jOgoJUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCUZpeGVzIGZvciBvdGhlciBsYW5ndWFnZXMuCgpGcmkgTm92ICA2IDE3OjM2OjEzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5jb20+CglGaXggd2lkZSBjaGFyYWN0ZXIgZnVuY3Rpb25zIHRvIHJldHVybiBjaGFyYWN0ZXIgY291bnQgaW4gY2hhcmFjdGVyCglxdWFudGl0aWVzIG5vdCBieXRlIHF1YW50aXRpZXMuICBNYWtlIFJlZ1F1ZXJ5SW5mb0tleSBhbmQKCVJlZ1F1ZXJ5SW5mb0tleSBiZWhhdmUgY29ycmVjdGx5IGluIHdpbjk1IG1vZGUuCgoJKiBpbmNsdWRlL2RpbnB1dC5oLCB3aW5kb3dzL2RpbnB1dC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglDaGFuZ2VkIG1vdXNlIGJ1dHRvbiBtYXBwaW5nIGFuZCBjaGVjayBzaXplIG9mIHJldHVybiBidWZmZXIuCgoJKiBvYmplY3RzL2NsaXBwaW5nLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglFeHRTZWxlY3RDbGlwUmduKCkgd2l0aCBSR05fQ09QWSBjb3BpZXMgdGhlIHdyb25nIHJlZ2lvbi4KCgkqIGZpbGVzL2ZpbGUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgYW4gZXJyb3IgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIEZJTEVfU2hhcmVEZW55LgoKCSogc2NoZWR1bGVyL2hhbmRsZS5jLCBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9kZWJ1Z3Rvb2xzLmgsIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgbXVsdGltZWRpYS9tbXN5c3RlbS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb2xhcmlzIHJlZGVmaW5lcyBFUlIgYW5kIENTLCBmaXhlZCBvY2N1cmFuY2VzLgoJU29sYXJpcyBoYXMgVFJBUE5PIGluIGl0cyBzaWdjb250ZXh0LCBhZGRlZCB0byBzaWdfY29udGV4dC5oCgoJKiBpbmNsdWRlL21tc3lzdGVtLmgsIG11bHRpbWVkaWEvbW1pby5jLCByZWxheTMyL3dpbm1tLnNwZWMsIGlmMTYzMi9tbXN5c3RlbS5zcGVjOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglNYWRlIG1taW9TZXRCdWZmZXIgY2FsbGFibGUgZnJvbSAxNiBhbmQgMzIgYml0IGNvZGUuCgoJKiBjb250cm9scy9tZW51LmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgd3JvbmcgYXJnIHR5cGUuCgoJKiBvYmplY3RzL2RpYi5jLCBvYmplY3RzL2dkaW9iai5jLCBncmFwaGljcy94MTFkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2luaXQuYywgaW5jbHVkZS94MTFkcnYuaDoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW92ZWQgWDExIERJQiBzdHVmZiB0byB4MTFkcnYuCgoJKiB3aW4zMi9jb2RlX3BhZ2UuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVRoZSBBUEkgZm9yIFdpZGVDaGFyVG9NdWx0aUJ5dGUgc2F5cyB0aGF0IHRoZSBzcmMtc3RyaW5nIGhhcyBvbmx5IHRvIGJlCgl0cmVhdGVkIGFzIE5VTEwtdGVybWluYXRlZCBpZiBzcmNsZW4gaXMgLTEuCgoJKiBpbmNsdWRlL3dpbi5oLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3Mvd2luLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1hZGUgc3VyZSBDb25maWd1cmVOb3RpZnkgaXMgcHJvY2Vzc2VkIGJlZm9yZSBFeHBvc2UsIGRlZmVycmluZyB0aGUKCUV4cG9zZSBldmVudCBpZiBuZWNlc3NhcnksIHRodXMgd29ya2luZyBhcm91bmQgYSBXTSBmbGF3IHdpdGggdmlydHVhbAoJZGVza3RvcCBzY3JvbGxpbmcgaW4gLW1hbmFnZWQgbW9kZS4KCgkqIHJlc291cmNlcy9zeXNyZXNfRnIucmM6IEVyaWMgUG91ZWNoIDxlcmljLnBvdWVjaEBsZW1lbC5mcj4KCVRyYW5zbGF0ZWQgaW4gRnJlbmNoIChub3Qgc28gZ29vZCBhbnlob3cpIG1lc3NhZ2UgZm9yIHRoZSBtYXJrIG9uCglzeXN0ZW0gbWVudS4KCgkqIG1pc2MvbWFpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoYW5nZWQgdGhlIGRlZmF1bHQgZnJvbSAwIHRvIDB4NDA5IChlbmctdXMpLgoKCSogd2luZG93cy9tZGkuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUd28gbWlzc2luZyBXSU5BUElzLgoKCSogaW5jbHVkZS9pbnRlcmZhY2VzLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgb25lIHdyb25nIHBhcmFtZXRlci4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeGVkIC0tZGlzYWJsZS1saWIuCgpUaHUgTm92ICA1IDEwOjMzOjE4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2NvbW1jdHJsLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ29uc3RhbnRzIGZvciBjb250cm9scyBpbiBjb21tb24gZGlhbG9ncy4KCldlZCBOb3YgIDQgMTg6MDg6MzMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvY3J0ZGxsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgc29tZSBjb21waWxlciB3YXJuaW5ncy4KClN1biBOb3YgIDEgMTk6Mjc6MjQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL25vbmNsaWVudC5jLCB3aW5kb3dzL3BhaW50aW5nLmMsIHdpbmRvd3Mvd2luaGVscC5jLCB3aW5kb3dzL3dpbnBvcy5jLCBtaXNjL2NvbW1kbGcuYywgbWlzYy9zaGVsbC5jLCBtaXNjL3dpbnNvY2suYywgbWlzY2VtdS9pbnN0ci5jLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvam95c3RpY2suYywgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jbGlwcGluZy5jLCBvYmplY3RzL2NvbG9yLmMsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBvYmplY3RzL2RpYi5jLCB0b29scy93cmMvZHVtcHJlcy5jLCB0b29scy93cmMvcGFyc2VyLmwsIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvbWRpLmMsIGZpbGVzL2ZpbGUuYywgZ3JhcGhpY3MveDExZHJ2L3hmb250LmMsIG1lbW9yeS9oZWFwLmM6CglKZXNwZXIgU2tvdiA8anNrb3ZAY3lnbnVzLmNvLnVrPgoJZWdjcyAnYW1iaWd1b3VzIGVsc2UnIHdhcm5pbmdzIGZpeGVzLgoKCSogaW5jbHVkZS90b29saGVscC5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgc2NoZWR1bGVyL3Byb2Nlc3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJR2V0IHJpZCBvZiB0aGUgcmVkZWZpbml0aW9uIG9mIE1BWF9QQVRIIGFuZCBtb3ZlIFBST0NFU1NFTlRSWTMyCglkZWZpbml0aW9uIHRvIHRvb2xoZWxwLmguCgoJKiB3aW5kb3dzL3dpbi5jLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGxpYnJhcnkvd2luZXN0dWIuYywgbG9hZGVyL2VsZi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9yZXNvdXJjZS5jLCBtaXNjL2NhbGxiYWNrLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJ1biBXaW5lbGliIGFwcGxpY2F0aW9ucyBhcyAzMi1iaXQgcHJvY2Vzc2VzIGluIHRoZSBpbml0aWFsIHRhc2suCglTaW1wbGlmaWVkL3JlbW92ZWQgc2V2ZXJhbCBzcGVjaWFsICdpZiAoX193aW5lbGliKScgY2FzZXMgaW4KCVdpbmUgbWFpbiBjb2RlIG9ic29sZXRlZCBieSB0aGF0IGNoYW5nZS4KCgkqIHdpbmRvd3MvZXZlbnQuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDYWxsIG1vdXNlIGRyaXZlciBjYWxsYmFjayBhbHNvIGlmIHdpbmRvd3MgYXJlIG5vdCByZWdpc3RlcmVkIHdpdGggWAoJKGlmIHVzaW5nIG5hdGl2ZSBVU0VSLkVYRSkuCgoJKiBtZW1vcnkvYXRvbS5jLCBpbmNsdWRlL2F0b20uaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRhcHRlZCB0byBzZXBhcmF0aW9uIGJldHdlZW4gS0VSTkVMIGFuZCBVU0VSLgoKCSogaWYxNjMyL2J1aWx0aW4uYywgaW5jbHVkZS9tYWluLmgsIGxvYWRlci9tYWluLmMsIGxvYWRlci90YXNrLmMsIG1pc2NlbXUvbWFpbi5jLCByZWxheTMyL2dkaTMyLnNwZWMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgcmVsYXkzMi91c2VyMzIuc3BlYywgc2NoZWR1bGVyL3Byb2Nlc3MuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgbmV3IFdpbmUgc3RhcnR1cCBzZXF1ZW5jZSwgc2VwYXJhdGluZyBzdGFydHVwIGludG8KCUtFUk5FTC9VU0VSL0dESSByZWxhdGVkIHBhcnRzLCBhbGxvd2luZyBuYXRpdmUgcmVwbGFjZW1lbnQuCglJbXBsZW1lbnRlZCBpbml0aWFsICdrZXJuZWwnIHRhc2suCgoJKiBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIG9sZS9jb21wb2JqLmM6CglKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHplYWxhbmQubXYuY29tPgoJSW1wbGVtZW50YXRpb24gb2YgSW5wcm9jU2VydmVyMzIgQ29HZXRDbGFzc09iamVjdC4KCgkqIGluY2x1ZGUvYml0bWFwLmgsIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBvYmplY3RzL29lbWJpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU1vcmUgYml0bWFwIGZpeGVzLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEZpeGVkIGNyYXNoZXMgd2l0aCBXTV9HRVRETEdDT0RFIHRyYW5zbGF0aW9uLgoKCSogcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvd2ludmVyL01ha2VmaWxlLmluLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3gxMWRydi8uY3ZzaWdub3JlLCB3aW5kb3dzL3gxMWRydi9NYWtlZmlsZS5pbiwgd2luZG93cy94MTFkcnYvaW5pdC5jLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL3dpbi5oLCBsaWJ0ZXN0L01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbG9jay9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvY29udHJvbC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvbm90ZXBhZC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvcmVndGVzdC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvdmlldy9NYWtlZmlsZS5pbiwgTWFrZS5ydWxlcy5pbiwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2FjY29uZmlnLmg6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVN0YXJ0ZWQgbW92aW5nIHNvbWUgWDExIHdpbmRvdyBtYW5hZ2VtZW50IGNvZGUgdG8gd2luZG93cy94MTFkcnYuCgoJKiBpZjE2MzIvdXNlci5zcGVjLCB3aW5kb3dzL2RpYWxvZy5jLCB3aW5kb3dzL3dpbnByb2MuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgSXNEaWFsb2dNZXNzYWdlMTYuCgoJKiBNYWtlZmlsZS5pbjogRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglUZWxsIHBlb3BsZSB0byBpZ25vcmUgdGhlICdnZXRzJyB3YXJuaW5nLiBTb21lIHdpbGwgbGlzdGVuLgoKCSogZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCB3aW5kb3dzL2dyYXBoaWNzLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUEgY291cGxlIG9mIHNtYWxsIGZpeGVzIHRvIG15IGJpdG1hcCBwYXRjaC4KCgkqIHJlc291cmNlcy9UT0RPLCByZXNvdXJjZXMvc3lzcmVzX0RlLnJjLCByZXNvdXJjZXMvc3lzcmVzX0VuLnJjLCB3aW5kb3dzL25vbmNsaWVudC5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWxsb3cgdGhlIHVzZXIgdG8gcHV0IGEgbWFyayBpbiB0aGUgZGVidWcgbG9nIGJ5IGFkZGluZyBhIGl0ZW0gaW4gdGhlCglTWVNNRU5VLiBUaGUgbWVzc2FnZXMgbmVlZHMgaW1wbGVtZW50YXRpb24gaW4gYWxsIG90aGVyIGxhbmd1YWdlcyB0aGFuCglFbmdsaXNoIGFuZCBHZXJtYW4uCgoJKiBmaWxlcy9maWxlLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUdpdmUgdGVtcGZpbGUgYSBkaWZmZXJlbnQgbmFtZSBldmVuIGlmIHRoZXkgYXJlIGNyZWF0ZWQgaW4gdGhlIHNhbWUKCXNlY29uZC4gUmVtb3ZlZCBzb21lIGZpeG1lcyBmcm9tIHRoZSBTaGFyZURlbnkgc3R1ZmYuCgoJKiBpbmNsdWRlL21kaS5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgcmVsYXkzMi91c2VyMzIuc3BlYywgd2luZG93cy9tZGkuYywgd2luZG93cy93aW4uYzoKCVJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglDcmVhdGVXaW5kb3dFeDMyW0FXXSBub3cgY3JlYXRlcyBhbiBNREkgY2hpbHMgd2hlbiB0aGUgV01fRVhfTURJQ0hJTEQKCWV4dGVuZGVkIHN0eWxlIGlzIHNwZWNpZmllZC4gQWxzbyBpbXBsZW1lbnRlZCBDcmVhdGVNRElXaW5kb3czMkEoKQoJY2FsbCAtIHNpbmdsZSB0aHJlYWQgb25seSAtLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVycmVkIGluIHRoZSBiaXQgbWFjcm9zIGluIHRyZWV2aWV3LmMuIFNoaWZ0Y291bnRzIHdlcmUgd3JvbmcuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiBpbXBvcnRzIHdpdGggQ2hhcmFjdGVyaXN0aWNzIDAgZmFpbCBmb3IgQm9ybGFuZAoJcHJvZ3JhbXMgKHdoaWNoIHNlZW0gdG8gaGF2ZSBhbHdheXMgY2hhcmFjdGVyaXN0aWNzIDApLiBDaGFuZ2VkIHRvIGFsZ29yaXRobQoJdG8gc29tZXRoaW5nIGEgYml0IG1vcmUgaW50ZWxsaWdlbnQuCgoJKiBvbGUvY29tcG9iai5jLCByZWxheTMyL29sZTMyLnNwZWM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgQ29GcmVlTGlicmFyeSBzdHViLgoKCSogUkVBRE1FOiBVcGRhdGVkIEZBUSBsb2NhdGlvbi4KCgkqIGdyYXBoaWNzL2VzY2FwZS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUltcGxlbWVudCBTRUdQVFIgY29udmVyc2lvbiBmb3IgU1RBUlRET0MgaW4gRXNjYXBlMzIoKS4KCgkqIG9iamVjdHMvZGMuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFNldERDU3RhdGUgZGlkIG5vdCByZXNldCBjbGlwcGluZyByZWdpb24gdG8gZW1wdHkuCgoJKiB3aW4zMi9pbml0LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgc21hbGwgb2ZmIGJ5IG9uZSBlcnJvciBpbiBHZXRDb21wdXRlck5hbWUzMlcsIGFsd2F5cyBraWxsZWQgdGhlCglsYXN0IGNoYXJhY3RlciBvZiBhIGhvc3RuYW1lLgoKCSogb2JqZWN0cy9kaWIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEb24ndCBIZWFwRnJlZSgpIGNvbG9ybWFwIGlmIHdlIGRpZG4ndCBhbGxvY2F0ZSBvbmUuCgoJKiB3aW4zMi9hZHZhcGkuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvdXNlci5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgaW5jbHVkZS93aW50eXBlcy5oLCBtaXNjL2NydGRsbC5jLCBtaXNjL3ByaW50ZHJ2LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgcmVsYXkzMi9jcnRkbGwuc3BlYywgcmVsYXkzMi9tcHIuc3BlYywgcmVsYXkzMi9zaGVsbDMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHJlbGF5MzIvd2luc3Bvb2wuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgc3R1YnMgZm9yIHVzZXIzMixhZHZhcGkzMiBmdW5jdGlvbnMuCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvTWFrZWZpbGUuaW4sIGRsbHMvbnRkbGwvKiwgaW5jbHVkZS9udGRsbC5oLCBtaXNjL0F0dGljL250ZGxsLmMsIG1pc2MvTWFrZWZpbGUuaW4sIHJlbGF5MzIvbnRkbGwuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTW9yZSBOdCogYW5kIFJ0bCogZnVuY3Rpb24gc3R1YnMsIG1vdmVkIG50ZGxsLmMgdG8gZGxscy9udGRsbC8uCgoJKiBtZW1vcnkvbG9jYWwuYywgbWVtb3J5L2hlYXAuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQ2hhbmdlZCBtYW55IFdBUk4oKXMgcmVsYXRlZCB0byBpbnRlcm5hbCBXaW5lIG1lbW9yeSBmYWlsdXJlcyB0bwoJRVJSKClzLgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgLnNwZWMgZW50cnkgZm9yIEtFUk5FTC5SZWdpc3RlclNlcnZpY2VQcm9jZXNzLgoKCSogaWYxNjMyL2Rpc3BsYXkuc3BlYywgd2luZG93cy9rZXlib2FyZC5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgc3R1YiBmb3IgQ2hlY2tDdXJzb3IoKS4KCgkqIGluY2x1ZGUvZGlhbG9nLmgsIHdpbmRvd3MvZGVmZGxnLmM6IFRpbSBOZXdzb21lIDxudWlzYW5jZUBjbXUuZWR1PgoJRml4IGZvciBub24tbW9kYWwgZGlhbG9nIGNsb3NpbmcuCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBEYXZpZCBGYXVyZSAgPGZhdXJlQGtkZS5vcmc+CglSZXdyb3RlIHRoZSB0d28gcm91dGluZXMgdXNpbmcgdGhlIHZrZXktPnNjYW5jb2RlIGFycmF5IHRvIHVzZQoJa2V5YzJ2a2V5IGZvciBlYWNoIGtleWNvZGUsIGluc3RlYWQuIE5vdCB0ZXN0ZWQuCglSZW1vdmVkIHVudXNlZCBJRGlyZWN0SW5wdXREZXZpY2VBX0dldERldmljZVN0YXRlLgoJRml4ZWQgd2FybmluZyBpbiBUUkFDRSgpIGNhbGwuCgoJKiB3aW5kb3dzL2tleWJvYXJkLmM6IERhdmlkIEZhdXJlIDxmYXVyZUBrZGUub3JnPgoJRGVsZXRlZCB0aGUgdmtleS0+c2FuY29kZSBhcnJheSwgYmVjYXVzZSBRV0VSVFkgc3BlY2lmaWMuCglCYWNrIHRvIHVzaW5nIHRoZSBYIGtleWNvZGUgaW5zdGVhZCBhcyB0aGUgc2NhbmNvZGUuIFRlc3RlZC4KCgkqIGdyYXBoaWNzL3BzZHJ2L2luaXQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUHJpbnQgYSBtZXNzYWdlIGlmIHRoZSBQb3N0U2NyaXB0IGRyaXZlciBjYW4ndCBmaW5kIGEgUFBEIGZpbGUuCgoJKiBtc2Rvcy9pbnQxMC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIFZHQSAyNTYtY29sb3IgbW9kZSAweDEzIHVzaW5nIHRoZSBEaXNwbGF5RGliIFZHQSBlbXVsYXRpb24uCgkoRE9TIGFwcHMvZ2FtZXMgdXNpbmcgdGhpcyBtb2RlIGNvbWVzIHVwIG5vdywgYWx0aG91Z2ggeW91IGNhbid0CglyZWFsbHkgZG8gYW55dGhpbmcgd2l0aCB0aGVtICh5ZXQ/KS4pCgoJKiBtc2Rvcy9kcG1pLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJVXNlIG1hY3JvIFY4Nl9GTEFHLgoKCSogbXNkb3MvZG9zbWVtLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJU2V0IGRlZmF1bHQgdmlkZW8gbW9kZSB0byAzICg4MHgyNSBjb2xvcikuCgoJKiBsb2FkZXIvZG9zL2Rvc21vZC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUlnbm9yZXMgYSBjb3VwbGUgb2Ygc2lnbmFscy4KCgkqIGdyYXBoaWNzL01ha2VmaWxlLmluLCBncmFwaGljcy9kaXNwZGliLmMsIGdyYXBoaWNzL3ZnYS5jLCBpbmNsdWRlL3ZnYS5oLCBtc2Rvcy9pb3BvcnRzLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1vdmVkIFZHQS1lbXVsYXRpbmcgRGlyZWN0WCBjb2RlIGZyb20gZGlzcGRpYi5jIHRvIGEgc2VwYXJhdGUKCWZpbGUuIE1hZGUgaXQgdXNlIGEgc3lzdGVtIHRpbWVyIGFuZCB0cmFwIEkvTyBhY2Nlc3NlcyB0byB0aGUgVkdBCglEQUMgcmVnaXN0ZXJzIHRvIGFjY29tbW9kYXRlIERpc3BsYXlEaWItdXNpbmcgcHJvZ3JhbXMgdGhhdCB0cnkgdG8KCWFjY2VzcyB0aGUgVkdBIGhhcmR3YXJlIGRpcmVjdGx5LgoKCSogbWlzY2VtdS9pbnN0ci5jLCBpZjE2MzIvc2lnbmFsLmMsIGluY2x1ZGUvZG9zZXhlLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbWlzYy9zeXN0ZW0uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSW5kaXJlY3Rpb24gZm9yIElOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbiBmb3IgdXNlIGJ5IERPUyBjb2RlLgoJQWRkZWQgc3VwcG9ydCBmb3IgYSA1NUh6IHN5c3RlbSB0aW1lciwgbGV0dGluZyBET1MgYXBwcyBjYWxpYnJhdGUKCXRoZWlyIGRlbGF5IGxvb3BzIGFuZCBzdWNoLiBDYWxscyBJTlNUUl9FbXVsYXRlSW5zdHJ1Y3Rpb24gZm9yCglpbnN0cnVjdGlvbiBlbXVsYXRpb24gKHByaW5jaXBhbGx5IEkvTyBwb3J0IGFjY2VzcykuIEFkZGVkIG1hY3JvCglWODZfRkxBRy4KClNhdCBPY3QgMzEgMTI6MjA6NTYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvZGlucHV0LmMsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNtYWxsIGZpeGVzLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIHRoZSBGSVhNRSgpIGFuZCBtb3ZlZCBTZXRMYXN0RXJyb3IoMCkgdG8gdGhlIGVuZCAoc28gdGhhdAoJR2V0VGVtcEZpbGVOYW1lIGV0LmFsLiBjYW4ndCBvdmVyd3JpdGUgaXQpLgoKCSogbWlzYy9BdHRpYy9udGRsbC5jLCByZWxheTMyL250ZGxsLnNwZWMsIHJlbGF5MzIvcmVsYXkzODYuYywgcmVsYXkzMi91c2VyMzIuc3BlYywgd2luZG93cy91c2VyLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxvdHMgb2Ygc3R1YnMgdG8gZ2V0IHdpbmxvZ29uLmV4ZSBmcm9tIG50My41MSBhbmQgb3RoZXIgTlQzLjUxIGFwcGxldHMKCWEgYml0IGZ1cnRoZXIuCgoJKiB3aW5kb3dzL21kaS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJTURJY2hpbGQgY3JlYXRlZCB3aGVuIHRoZSBNREkgY2xpZW50IGhhcyB0aGUgTURJU19BTExDSElMRFNUWUxFUwoJc3R5bGUsIHNob3VsZCBub3QgYmUgc2hvd24gYXQgY3JlYXRpb24gbm9yIGFjdGl2YXRlZCB1bmxlc3MgdGhlCglXU19WSVNJQkxFIGZsYWcgaXMgc2V0LgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IFN0ZXBoZW4gTGFuZ2FzZWsgPHZvcmxvbkBkb2Rkcy5uZXQ+CglCdWdmaXggZm9yIGZpeHVwX2ltcG9ydHM6IEVuYWJsZSBjaGVja2luZyBmb3IgdGVybWluYXRpbmcgaW1wb3J0CglzdHJ1Y3Qgd2l0aCBDaGFyYWN0ZXJpc3RpY3MgYml0ZmllbGQgc2V0IHRvIDAuCgoJKiB3aW5kb3dzL3dpbi5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRGVsYXkgbGlua2luZyBuZXdseSBjcmVhdGVkIHdpbmRvdyBpbiBsaW5rZWQgbGlzdCB1bnRpbCBhZnRlciB0aGUKCVdNX05DQ1JFQVRFIG1lc3NhZ2UuCgoJKiBmaWxlcy9maWxlLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglTbWFsbCBidWcgaW4gRklMRV9JblVzZSBkb2VzIG5vdCBkbyBhIHJlbGVhc2Ugb24gZXZlcnkgYWNxdWlyZWQgZmlsZQoJcG9pbnRlci4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWxwc3pOYW1lIG9mIE5VTEwgaXMgaGFuZGxlZCAocmVtb3ZlcyBzb21lIHdhcm5pbmdzKS4KCgkqIHRvb2xzL3Rlc3RydW46IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTm93IGFsbG93cyBzcGVjaWZpY2F0aW9uIG9mIGEgc3RhcnQgZGlyZWN0b3J5IG9uIHRoZSBjbWRsaW5lLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUdldHMgcmlkIG9mIHRoZSBhcmNoLWRlcGVuZGVudCBiaXQgb3BlcmF0aW9ucyAodGVzdGVkIG9uIExpbnV4IGFuZAoJU29sYXJpcy94ODYpLgoKV2VkIE9jdCAyOCAxNDo1ODowMiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy93aW4uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBIGRlc3QgYnVmZmVyIHdhcyBwcmludGVkIG91dCBhcyBzdHJpbmcuCgoJKiBpbmNsdWRlL3NobG9iai5oOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNvcnJlY3RlZCAyIHdyb25nIGRlZmluaXRpb25zLgoKCSogaW5jbHVkZS93aW5kb3dzLmgsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgc2NoZWR1bGVyL3Byb2Nlc3MuYzoKCVBhdHJpY2sgU3BpbmxlciA8c3Bpbmxlci5wYXRyaWNrQG1heW8uZWR1PgoJQWRkZWQgc3R1YnMgZm9yIFByb2Nlc3MzMkZpcnN0L1Byb2Nlc3MzMk5leHQuCgoJKiBpbmNsdWRlL3gxMWRydi5oLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9kY3ZhbHVlcy5jLCBvYmplY3RzL3BhbGV0dGUuYywgb2JqZWN0cy9yZWdpb24uYywgZ3JhcGhpY3MvZXNjYXBlLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3BhaW50aW5nLmMsIGdyYXBoaWNzL3BhdGguYywgZ3JhcGhpY3MvcHNkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3Mvd2luMTZkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGluY2x1ZGUvZGVidWdnZXIuaCwgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS9tZXRhZmlsZWRydi5oLCBpbmNsdWRlL3BzZHJ2LmgsIGluY2x1ZGUvd2luMTZkcnYuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL21zYy5jLCBkZWJ1Z2dlci9zdGFicy5jLCBkZWJ1Z2dlci90eXBlcy5jOgoJRnJhbudvaXMgR291Z2V0IDxnb3VnZXRAbWV0YWludGVncmF0aW9uLm5ldD4KCUZpeGVkIHNvbWUgTFBQT0lOVC9MUFNJWkUgbWlzbWF0Y2hlcyBhbmQgc29tZSBtaXNzaW5nICJjb25zdCIgaW4gdGhlCgloZWFkZXJzIHByb3RvdHlwZXMuCgoJKiBncmFwaGljcy9wc2Rydi9pbml0LmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2luaXQuYywgZ3JhcGhpY3MveDExZHJ2L29iamVjdHMuYywgaW5jbHVkZS9iaXRtYXAuaCwgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS94MTFkcnYuaCwgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL2RpYi5jLCBvYmplY3RzL29lbWJpdG1hcC5jLCB3aW5kb3dzL2dyYXBoaWNzLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWRkZWQgcEJpdG1hcEJpdHMgYW5kIHBDcmVhdGVCaXRtYXAgdG8gdGhlIEdESSBmdW5jdGlvbiB0YWJsZSBhbmQKCW1vdmVkIHRoZSBYMTEgZGVwZW5kZW50IHN0dWZmIG91dCBvZiBvYmplY3RzL2JpdG1hcC5jIGludG8geDExZHJ2LgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgaW5jbHVkZS9zaGVsbC5oLCBkbGxzL3NoZWxsMzIvcGlkbC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgU0hHZXRTaW1wbGVJRExpc3RGcm9tUGF0aDMyQVcuCglVbmljb2RlLXNhZmU6IFBhdGhGaW5kRmlsZW5hbWUzMkFXLgoKCSogaW5jbHVkZS9zaGxvYmouaDogSnVzdGluIEJyYWRmb3JkIDxqdXN0aW5AYnVzYm95LnNwZWQudWthbnMuZWR1PgoJSUV4dHJhY3RJY29uIGhhZCBhbiBleHRyYSBjIGluIGEgc3RydWN0IGRlZmluaXRpb24uCgoJKiByZWxheTMyL2RwbGF5LnNwZWM6CglKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHplYWxhbmQubXYuc3BhbWxlc3MuY29tPgoJQWRkZWQgZW50cnkgZm9yIERpcmVjdFBsYXlFbnVtZXJhdGUuCgoJKiBvbGUvbmxzL3NreS5ubHMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUFkZGVkIFNsb3ZhayBubHMtcmVzb3VyY2VzLgoKCSogb2JqZWN0cy9yZWdpb24uYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXhlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIFNldFJlY3RSZ24xNiBhbmQgU2V0UmVjdFJnbjMyLiBBbHNvIGEgYnVnIGZpeCBmb3IKCUNyZWF0ZVJvdW5kUmVjdFJnbi4KClR1ZSBPY3QgMjcgMTU6NDE6NTQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvdXNlci5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVudW1EaXNwbGF5TW9kZXMqIHJldHVybnMgYSBzdGF0aWMgbGlzdCBvZiBtb2RlcyB3aXRoIGFsbCBkZXB0aHMKCShoZWxwcyBoZXhlbjJkZW1vKSwgQ2hhbmdlRGlzcGxheVNldHRpbmdzIHJldHVybnMgdHJ1ZSBhbGwgdGhlIHRpbWUuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmgsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgcmVsYXkzMi93aW5tbS5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTdHViIGZvciBtaWRpT3BlblN0cmVhbSAoaGVscHMgaGV4ZW4yZGVtbykuCgoJKiBvbGUvbmxzL2VuYy5ubHMsIG9sZS9ubHMvZnJjLm5scywgcmVzb3VyY2VzL3N5c3Jlc19Gci5yYzoKCVJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CglTbWFsbCBwYXRjaCBmb3IgYmV0dGVyIEZyZW5jaCBzdXBwb3J0LgoKCSogbG9hZGVyL2VsZi5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogbWVtb3J5IG92ZXJ3cml0ZSBidWcuCgpNb24gT2N0IDI2IDExOjA0OjEzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb250cm9scy9lZGl0LmMsIHdpbmRvd3MvY2xpcGJvYXJkLmM6IFBhc2NhbCBDdW9xIDxwY3VvcUBlbnMtbHlvbi5mcj4KCTMyLWJpdCBjbGlwYm9hcmQgc3VwcG9ydC4KCgkqIHdpbmRvd3MvcXVldWUuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXggZm9yIFFVRVVFX1NpZ25hbDogQWx3YXlzIHVzZSBQb3N0RXZlbnQgaWYgbm8gdGhyZWFkIGlzIHdhaXRpbmcKCW9uIHRoZSBxdWV1ZS4KCgkqIHdpbmRvd3MvbWRpLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4ZWQgYSBtaW5vciBwcm9ibGVtIHdpdGggdGhlIG1lbnVzIGZvciBtZGkgY2hpbGQgd2luZG93cy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlZCBubyBsb25nZXIgbmVjZXNzYXJ5IGNvbW1lbnRlZCBvdXQgY29kZSwgZGVzdHJveSBvbGQgd2luZG93Cgl3aGVuIFNldERpc3BsYXlNb2RlIGlzIGNhbGxlZCBhZ2FpbiwgRW51bURpc3BsYXlNb2RlcyBub3cgcmV0dXJucwoJYWxsIHBvc3NpYmxlIG1vZGVzICh1c2luZyBhIHN0YXRpYyBsaXN0KS4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQW5vbiBzaGFyZWQgbWFwcGluZyBmaXhlZCBmb3IgZmlsZSBzaGFyaW5nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDI1IDEwOjMyOjIzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvb2xlMm5scy5jLCBpbmNsdWRlL3dpbm5scy5oOiBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCUZpeGVzIGZvciBMQU5HX05FVVRSQUwuCgoJKiBpbmNsdWRlL3Rhc2suaDoKCUFkZGVkIHNvbWUgcGFkZGluZyB0byB0aGUgUERCIGZvciBpbGwtYmVoYXZpbmcgYXBwcyAocHJvYmxlbSByZXBvcnRlZAoJYnkgQW5kcmVhcyBNb2hyKS4KCgkqIGRvY3VtZW50YXRpb24vaW9wb3J0LXRyYWNlLWhpbnRzLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIG1pc2NlbXUvaW5zdHIuYzoKCUpvbmF0aGFuIEJ1enphcmQgPGphYkBoZXgucHJlc3RlbC5jby51az4KCUFkZGVkIGEgbmV3IGRlYnVnZ2luZyBjaGFubmVsIGlvIHRvIGFsbG93IHJlYWQvd3JpdGVzIG9uIGEgcG9ydCB0byBiZQoJbG9nZ2VkIHRvIGEgZmlsZS4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPERhdmlkLkZhdXJlQGluc2EtbHlvbi5mcj4KCVJlcGxhY2VkIDB4MDAgd2l0aCAweDAxIGluIHRoZSB2a2V5LT5zYW5jb2RlIGFycmF5LCBzbyB0aGF0IG5vIGtleSBpcwoJaWdub3JlZC4gMHgwMCBpcyB1c2VkIGZvciBnZW5lcmF0ZWQga2V5IGV2ZW50cyBvbmx5LgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYzoKCURvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB3aW5laHEuY29tPgoJQVBJIERvY3VtZW50YXRpb24gZm9yIFNlbmRNZXNzYWdlLCBHZXRUaWNrQ291bnQsIFBvc3RRdWl0TWVzc2FnZSwKCUdldE1lc3NhZ2VQb3MsIEdldE1lc3NhZ2VUaW1lLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEZWxldGUgdGhlIGZpbGVuYW1lIGZvciB0aGUgbWFwcGluZyBpbnN0YW50bHkuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglNaWNoYWVsIFBvb2xlIDxwb29sZUBncmF2aXRvbi5yZXMuY211LmVkdT4KCVN0dWIgZm9yIFNIU2ltcGxlSURMaXN0RnJvbVBhdGguCgoJKiBsb2FkZXIvdGFzay5jOiBGaXhlZCBidWcgaW4gU3dpdGNoU3RhY2tUby4KClNhdCBPY3QgMjQgMTM6MDY6MTYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGNvbnRyb2xzL3Njcm9sbC5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNoZWNrIGlmIHNjcm9sbGJhciBhbmQgcGFyZW50IGFyZSB2aXNpYmxlIGJlZm9yZSByZWRyYXcuCgoJKiBpZjE2MzIvc2hlbGwuc3BlYywgaW5jbHVkZS9zaGVsbC5oLCBtaXNjL3NoZWxsLmMsIHByb2dyYW1zL25vdGVwYWQvbWFpbi5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUthaSBNb3JpY2ggPGthaS5tb3JpY2hAZGFybXN0YWR0Lm5ldHN1cmYuZGU+CglBZGRlZCBEcmFnKjMyIGZ1bmN0aW9ucy4KCgkqIHdpbmRvd3MvZXZlbnQuYzogS2FpIE1vcmljaCA8a2FpLm1vcmljaEBkYXJtc3RhZHQubmV0c3VyZi5kZT4KCUFkZGVkIERyYWcmRHJvcCBmcm9tIEtERSBhcHAgdG8gMTYvMzIgYml0IFdpbmRvemUgYXBwLgoKCSogd2luZG93cy9tZXNzYWdlLmM6IEthaSBNb3JpY2ggPGthaS5tb3JpY2hAZGFybXN0YWR0Lm5ldHN1cmYuZGU+CglBZGRlZCBGSVhNRSBtZXNzYWdlIGluIFBvc3RNZXNzYWdlMzJ4IGlmIHBhcmFtZXRlcnMgYXJlIHRydW5jYXRlZAoJd2hlbiBjYWxsaW5nIFBvc3RNZXNzYWdlMTYuCgoJKiBpbmNsdWRlL3Byb2Nlc3MuaCwgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9oYW5kbGUuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3RocmVhZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBzdXBwb3J0IGZvciBnbG9iYWwgaGFuZGxlcywgaW1wbGVtZW50ZWQgQ29udmVydFRvR2xvYmFsSGFuZGxlLgoJQWxsb2NhdGUgc3RhcnR1cCBkYXRhIGFuZCAxNi1iaXQgc3RhY2sgZm9yIGluaXRpYWwgcHJvY2Vzcy4KCgkqIGRvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvOiBMZWlnaCBXZWRkaW5nIDxsd2VkZGluZ0Bjb3JwbGluay5jb20uYXU+CglTbWFsbCBmaXguCgoJKiBwcm9ncmFtcy9wcm9nbWFuLy5jdnNpZ25vcmUsIHByb2dyYW1zL3Byb2dtYW4vRXMucmMsIHByb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4sIHByb2dyYW1zL3dpbmhlbHAvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvd2luaGVscC9Fcy5yYywgcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvY2xvY2svLmN2c2lnbm9yZSwgcHJvZ3JhbXMvY2xvY2svRXMucmMsIHByb2dyYW1zL2Nsb2NrL01ha2VmaWxlLmluLCBwcm9ncmFtcy9ub3RlcGFkLy5jdnNpZ25vcmUsIHByb2dyYW1zL25vdGVwYWQvRXMucmMsIHByb2dyYW1zL25vdGVwYWQvTWFrZWZpbGUuaW46CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUFkZGVkIFNwYW5pc2ggcmVzb3VyY2VzLgoKCSogb2xlL25scy9ldXEubmxzLCByZXNvdXJjZXMvc3lzcmVzX0VzLnJjOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglTbWFsbCBjb3JyZWN0aW9ucy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgc2NoZWR1bGVyL3Byb2Nlc3MuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTG9hZExpYnJhcnlFeFcgc3BlYyBhZGRlZCAoZnVuY3Rpb24gd2FzIHRoZXJlKS4KCVNldFByb2Nlc3NQcmlvcml0eUJvb3N0IHN0dWIgYWRkZWQuCgoJKiBtc2Rvcy9kcG1pLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQ29tcGlsZSBmaXggZm9yIFNvbGFyaXMuCgoJKiBpZjE2MzIvLmN2c2lnbm9yZSwgaWYxNjMyL01ha2VmaWxlLmluLCBpZjE2MzIvYnVpbHRpbi5jLCBpZjE2MzIvZGlzcGRpYi5zcGVjLCBpbmNsdWRlL2Rpc3BkaWIuaCwgZ3JhcGhpY3MvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL2Rpc3BkaWIuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSW1wbGVtZW50ZWQgRGlzcGxheURpYi4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUhhY2sgdG8gc3VwcG9ydCBpbnRlZ2VyIGlkcyBpbiBhbGwgc3RhdGljIGNvbnRyb2xzLgoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQmVnaW5uaW5nIG9mIG1vdXNlIHN1cHBvcnQgaW4gRGlyZWN0SW5wdXQgKG9ubHkgInN0YW5kYXJkIiBtb3VzZQoJY29uZmlndXJhdGlvbiBzdXBwb3J0ZWQgZm9yIG5vdykuCgoJKiBpbmNsdWRlLyouaCwgZGxscy9jb21jdGwzMi8qLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgeHh4X1VucmVnaXN0ZXIoKSBmdW5jdGlvbnMgdG8gYWxsIGNvbW1vbiBjb250cm9scy4KCgkqIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jLCBkbGxzL2NvbWN0bDMyL3BhZ2VyLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9scywgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVNvbWUgbWlub3IgaW1wcm92ZW1lbnRzIGFuZCBmaXhlcy4KCgkqIGRsbHMvY29tY3RsMzIvcmViYXIuYywgaW5jbHVkZS9yZWJhci5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIHRoZSByZWJhciBjb250cm9sLgoKCSogZGxscy9jb21jdGwzMi90b29sdGlwcy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgc3VwcG9ydCBmb3IgdHJhbnNwYXJlbnQgYW5kIHRyYWNraW5nIHRvb2x0aXBzLgoKCSogY29udHJvbHMvbWVudS5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgYSBwb3B1cCBtZW51IHNlbGVjdGlvbiBidWcuCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgRHJhd0NhcHRpb24xNigpIGFuZCBEcmF3Q2FwdGlvblRlbXAxNigpLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJRml4ZWQgd2FybmluZy4KCgkqIGdyYXBoaWNzL3BzZHJ2L01ha2VmaWxlLmluLCBncmFwaGljcy9wc2Rydi9iaXRtYXAuYywgZ3JhcGhpY3MvcHNkcnYvYnJ1c2guYywgZ3JhcGhpY3MvcHNkcnYvZm9udC5jLCBncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jLCBncmFwaGljcy9wc2Rydi9pbml0LmMsIGdyYXBoaWNzL3BzZHJ2L3BzLmMsIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUvcHNkcnYuaCwgb2JqZWN0cy9kaWIuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWRkcyBBcmMsIENob3JkLCBHZXRDaGFyV2lkdGgsIFBpZSwgUG9seVBvbHlnb24sIFBvbHlQb2x5bGluZSwgUm91bmRSZWN0LAoJU2V0UGl4ZWwsIGhhdGNoZWQgYnJ1c2hlcyBhbmQgYSBzdHViIGZvciBTdHJldGNoRElCaXRzIHRvIHRoZSBQb3N0U2NyaXB0Cglkcml2ZXIuCgoJKiBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvbWlzY2VtdS5oLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50ZXJydXB0cy5jOgoJSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJQWRkZWQgc3VwcG9ydCBmb3IgaW50MTcgYW5kIGludDE5LgoKCSogbXNkb3MvaW50MTkuYzogQ2FybCB2YW4gU2NoYWlrIDxjYXJsQGRyZWFtY29hdC5jaGUudWN0LmFjLnphPgoJU3R1YnMgZm9yIGRvcyBtb2RlIHJlYm9vdCBpbnRlcnJ1cHQuCgoJKiBtc2Rvcy9pbnQxNy5jOiBDYXJsIHZhbiBTY2hhaWsgPGNhcmxAZHJlYW1jb2F0LmNoZS51Y3QuYWMuemE+CglTb21lIHByaW50ZXIgc3R1YnMgZm9yIERPUyBhZGRlZC4KCgkqIG1zZG9zL2ludDEzLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCU1vcmUgc3R1YnMgYWRkZWQuIFRoZXNlIGNoYW5nZXMgYXJlIG9ubHkgcGFydGlhbGx5IG1pbmUsIEkganVzdCBtYWRlCgl0aGVtIGNvbXBpbGUuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBzb21lIHRyYWNlcyBhbmQgY2xlYW5lZCB1cCBhIGNvdXBsZSBvZiB0aGluZ3MuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hlbGwuaCwgaW5jbHVkZS9zaGxvYmouaCwgbWVtb3J5L3N0cmluZy5jLCBvbGUvb2xlMm5scy5jLCByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDaGFuZ2VkIHNvbWUgc3RyaW5nLXNoZWxsMzIgZnVuY3Rpb25zIHRvIDMyQVcsIHBhcmFtZXRlciBhcmUKCW9zIGRlcGVuZGluZyAzMkEgb3IgMzJXICgtd2ludmVyIG50MzUxIG9yIG50NDApLCBzb21lIG5ldyBmdW5jdGlvbnMuCglTb21lIGZpeGVzIGluIG9sZTJubHMuCglOZXcgT0xFMk5MU19DaGVja0xvY2FsZSgpIHRvIGhhbmRsZSBMb2NhbGVfVXNlcl9EZWZhdWx0IGFuZAoJTG9jYWxlX1N5c3RlbV9EZWZhdWx0LgoJU2hlbGwzMiBub3cgZHluYW1pY2x5IGxpbmtzIHRvIERQQV8qKCksIGNvbWRsZzMyIHdvcmtzIGFnYWluCgkoY29tY3RsMzIgaGVhcCBhbGxvYyBwYXRjaCBicm9rZSBpdCkuCgoJKiBpbmNsdWRlL3dpbnZlcnNpb24uaCwgbWlzYy92ZXJzaW9uLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUFkZGVkIFZFUlNJT05fSXNPc1VuaWNvZGUoKS4KCgkqIHNjaGVkdWxlci9oYW5kbGUuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1vcmUgb2ZmLWJ5LW9uZSBlcnJvcnMgZml4ZWQuCgoJKiBpbmNsdWRlL2ZpbGUuaCwgbWlzYy9jcnRkbGwuYywgbXNkb3MvdnhkLmMsIHdpbjMyL2ZpbGUuYywgZmlsZXMvZmlsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRmlsZSBzaGFyaW5nIGZpeGVzLgoKRnJpIE9jdCAyMyAxNzoyNjo0NCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jb21tZGxnLmM6IE5pY2sgSG9sbG93YXkgPGFsZmllQGFsZmllLmRlbW9uLmNvLnVrPgoJQnVnIGZpeC4KCgkqIGxvYWRlci9kb3MvbW9kdWxlLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgRE9TIGVudmlyb25tZW50IHBhc3NpbmcuCgoJKiBtaXNjL21haW4uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTeXNtZXRyaWNzMzJXIGZvciBTUElfR0VUSUNPTlRJVExFTE9HRk9OVCByZXR1cm5zIGNvcnJlY3QgZm9udG5hbWUuCgoJKiBpbmNsdWRlL2ZvbnQuaCwgb2JqZWN0cy9mb250LmMsIG9iamVjdHMvZ2Rpb2JqLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBGT05UX0dldE9iamVjdDMyVygpLCBHZXRPYmplY3QzMlcoKS4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbjMyL29yZGluYWxzLmMsIHdpbmRvd3MvdXNlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YiBSZWdpc3RlclRhc2tMaXN0LgoJTmV3IGZ1bmN0aW9uIEVudW1EaXNwbGF5U2V0dGluZ3MzMlcoKS4KCgkqIG1pc2MvbnRkbGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3JlIHBhcmFtZXRlciBjaGVja2luZyBpbiBSbHRDb3B5U2lkLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW9yZSBtZXNzYWdlIG1hcHBpbmcgMzJBPC0tPjMyVyBmb3IgRU1fLCBDQl8sIExCXyBmb3IgVW5pY29kZS4KCgkqIHJlbGF5MzIvLmN2c2lnbm9yZSwgcmVsYXkzMi9NYWtlZmlsZS5pbiwgcmVsYXkzMi9hdmlmaWwzMi5zcGVjLCByZWxheTMyL2J1aWx0aW4zMi5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBuZXcgZGxsIGF2aWZpbDMyLmRsbC4KCgkqIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbXNkb3MvZHBtaS5jLCBpbmNsdWRlL2Rvc2V4ZS5oOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXJzdCBzaG90IGF0IERQTUkgcmVhbG1vZGUgY2FsbHMuCgoJKiBsb2FkZXIvbW9kdWxlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUZpeGVkIHNldmVyYWwgYnVncyB3aXRoIERMTCBpbml0aWFsaXphdGlvbi4KClRodSBPY3QgMjIgMTc6MDI6MjUgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNjaGVkdWxlci9zeXNsZXZlbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIG9yZGluYWwgZm9yIHR3byBzeXNsZXZlbCBmdW5jdGlvbnMuCgoJKiBtdWx0aW1lZGlhL21pZGkuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBbm90aGVyIG1pc3NpbmcgV0lOQVBJLgoKCSogaW5jbHVkZS9tbXN5c3RlbS5oOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNtYWxsIGNvcnJlY3Rpb25zIGluIG1taW8gZGVjbGFyYXRpb25zLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVGFrZSB2aXJ0dWFsIHNpemVzIGluIGFjY291bnQgZm9yIHRoZSB0b3RhbCB2bWEgc2l6ZS4KCgkqIG9sZS9ubHMvcm9tLm5sczogRGltaXRyaWUgTy4gUGF1biA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCUFkZCBzb21lIG1vcmUgTkxTIGRlZmluaXRpb25zIGZvciB0aGUgUm9tYW5pYW4gbGFuZ3VhZ2UuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgcHJvZ3JhbXMgKHF1YWtlMiBldCBhbCkgZG8gY2hlY2sgZm9yIERTQ0FQU19FTVVMRFJJVkVSIGFuZCBzdG9wCgl0byB3b3JrLiAnQWRqdXN0JyBjYXBzIGZsYWdzIGFjY29yZGluZ2x5LgoKCSogb2xlL2NvbXBvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJUGV0ZSBSYXR6bGFmZiA8cHJhdHpsYWZmQGNmYS5oYXJ2YXJkLmVkdT4KCVN0dWIgZm9yIENvQ3JlYXRlR3VpZCgpLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBtdWx0aW1lZGlhL21jaWNkYS5jOgoJQnJpYW4gTGl0emluZ2VyIDxicmlhbkBsaXR6aW5nZXIuY29tPgoJRml4ZXMgZm9yIEZyZWVCU0QuCgoJKiBsaWJ0ZXN0Ly5jdnNpZ25vcmUsIGxpYnRlc3QvTWFrZWZpbGUuaW46CglQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQG1pbmVydmEuY2MudWl0Lm5vPgoJTWFrZSBzdXJlIGhlbGxvM3Jlcy5oIGlzIGdlbmVyYXRlZCBldmVuIGlmICdtYWtlIGRlcGVuZCcgbmV2ZXIgaGFzCgliZWVuIHJ1bi4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4ZWQgbW92aW5nIGFuZCBzaXppbmcgb2YgY2hpbGQgd2luZG93cy4KCgkqIGluY2x1ZGUvdHNfeGxpYi5oLCB0b29scy9tYWtlX1gxMXdyYXBwZXJzLCB0c3gxMS9YMTFfY2FsbHMsIHRzeDExL3RzX3hsaWIuYywgd2luZG93cy9rZXlib2FyZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglYUXVlcnlLZXltYXAgLT4gVFNYUXVlcnlLZXltYXAgKGZpeGVzIHRoZSBYSU8gZXJyb3JzIHJlcG9ydGVkKS4KCldlZCBPY3QgMjEgMTc6MjA6NDggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvZG9zZXhlLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbWlzY2VtdS9tYWluLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIGluZGlyZWN0aW9uIGZvciBjdHhfZGVidWcgdG8gdGhlIERPUyBsb2FkZXIsIHNvIFdpbmVsaWIgd29ya3MKCWFnYWluLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTdXBwb3J0IGFub24gc2hhcmVkIG1hcHBpbmdzIHVzaW5nIHRlbXBvcmFyeSBmaWxlcyAod29udCBiZSBkZWxldGVkCgl5ZXQpLgoKCSogbWlzYy9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJV2FzIGZyZWVpbmcgdGhlIGluY29ycmVjdCBwb2ludGVycyAtPiBjcmFzaCBpbiBtYWxsb2NzL2ZyZWVzLgoKCSogZmlsZXMvZG9zX2ZzLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGVmaW5lRG9zRGV2aWNlIHN0dWIgYWRkZWQuCgoJKiBtaXNjZW11L21haW4uYywgd2luZS5pbmk6IENoYWQgUG93ZWxsIChweHB4QHVzYS5uZXQpCglBZGRlZCBhIGRlZmF1bHQgcHJvZ3JhbSBvcHRpb24gaW4gd2luZS5jb25mIGluIHNlY3Rpb24gW3Byb2dyYW1zXSBrZXkKCURlZmF1bHQuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmg6IERhdmlkIEN1dGhiZXJ0IDxkYWN1dEBlY2UuY211LmVkdT4KCUJldHRlciBmaXggZm9yIHRoaXNfaXNfYV9zeW50YXhfZXJyb3IuCgoJKiBvbGUvbmxzLyoubmxzOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglBZGRlZCB0aGUgZW50cmllcyBmb3IgTE9DQUxFX1NJU082MzlMQU5HTkFNRSBhbmQKCUxPQ0FMRV9TSVNPMzE2NkNUUllOQU1FLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJVXBkYXRlZCBtYW5wYWdlLgoKCSogcmVsYXkzMi9tc2FjbTMyLnNwZWM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJRml4ZWQgd3Jvbmcgb3JkaW5hbHMuCgoJKiBvYmplY3RzL3JlZ2lvbi5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeGVkIGEgYnVnIGluIFJlY3RJblJlZ2lvbi4KClR1ZSBPY3QgMjAgMTU6MjY6MjYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1zZG9zL2ludGVycnVwdHMuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglSZW1vdmVkIGFuIGluY29ycmVjdCBlcnJvciBtZXNzYWdlLgoKCSogZmlsZXMvZHJpdmUuYzogUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUBtaW5lcnZhLmNjLnVpdC5ubz4KCU1ha2Ugc3VyZSB0aGUgYWNjZXNzIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHVzZWQgdG8gZ2V0IGxhYmVsIGFuZCBzZXJpYWwKCW51bWJlci4KCk1vbiBPY3QgMTkgMDg6NDg6MjQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9vbGUybmxzLmM6IEVyaWMgUG91ZWNoIDxlcmljLnBvdWVjaEBob2wuZnI+CglGaXhlZCBidWcgb24gcGxhdGZvcm1zIHdlcmUgYnVmZmVycyByZXR1cm5lZCBieSBnZXRlbnYoKSBzaGFsbCBub3QgYmUKCWZyZWUoKSdlZC4gQWRkZWQgRnJlbmNoIChkZWZhdWx0KSBpbiBsb2NhbGUgaGFuZGxpbmcuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmg6IERhdmUgQ3V0aGJlcnQgPGRhY3V0QGVjZS5jbXUuZWR1PgoJQ2hhbmdlZCAidGhpcyBpcyBhIHN5bnRheCBlcnJvciIgdG8gInRoaXNfaXNfYV9zeW50YXhfZXJyb3IiIHRvIG1ha2UgYQoJY29tcGlsZS10aW1lIGVycm9yIG1lc3NhZ2UgbWFrZSBtb3JlIHNlbnNlLgoKCSogc2NoZWR1bGVyL2hhbmRsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgb2ZmIGJ5IG9uZSBlcnJvciBpbiBIQU5ETEVfR2V0T2JqUHRyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDE4IDE0OjQ4OjMxIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBmaWxlcy9maWxlLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVRyeSB0byBpbXBsZW1lbnQgdGhlIE9GX1NIQVJFX1hYWCBvcHRpb25zLgoJTW92ZSB0aGUgbW9kZSB0cmFuc2xhdGlvbnMgdG8gZnVuY3Rpb25zLgoKCSogaW5jbHVkZS9tYWluLmgsIG9sZS9jb21wb2JqLmMsIG9sZS9pZnMuYywgb2xlL29sZTJkaXNwLmMsIG9sZS9vbGUybmxzLmMsIG9sZS9vbGVzdnIuYywgb2xlL3N0b3JhZ2UuYzoKCU1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CglEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgoJKiBvbGUvY29tcG9iai5jLCByZWxheTMyL29sZTMyLnNwZWM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBzdHViIGZvciBDb1NldFN0YXRlMzIuCgoJKiBtaXNjZW11L21haW4uYzogQ2hhZCBQb3dlbGwgPHB4cHhAdXNhLm5ldD4KCUFkZGVkIGFiaWxpdHkgdG8gcmVhZCBhIHN0YXJ0dXAgcHJvZ3JhbSBmcm9tIHdpbmUuaW5pIGZpbGUuCglQdXQgaXQgaW4gc2VjdGlvbiBbcHJvZ3JhbXNdIGtleSBTdGFydHVwLgoKCSogaW5jbHVkZS90cmFja2Jhci5oLCBpbmNsdWRlL3RyZWV2aWV3LmgsIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYywgZGxscy9jb21jdGwzMi90cmVldmlldy5jOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUZ1cnRoZXIgaW1wcm92ZW1lbnRzLgoKCSogaW5jbHVkZS9jdXJzb3JpY29uLmgsIG9iamVjdHMvY3Vyc29yaWNvbi5jOgoJVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CglJbXBsZW1lbnRlZCBMb2FkQ3Vyc29yRnJvbUZpbGUsIGZpeGVkIERyYXdJY29uRXggdG8gc3VwcG9ydCBvZmZzY3JlZW4KCWRyYXdpbmcsIGZpeGVkIENVUlNPUklDT05fQ3JlYXRlRnJvbVJlc291cmNlIHRvIHN1cHBvcnQgTFJfIHNlbWFudGljcy4KCgkqIGluY2x1ZGUvYml0bWFwLmgsIG9iamVjdHMvYml0bWFwLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIExvYWRJbWFnZSB0byBzdXBwb3J0IGFsbW9zdCBhbGwgTFJfIGZsYWdzLgoKCSogb2JqZWN0cy9kaWIuYzogVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CglGaXhlZCBidWcgaW4gRElCX1NldEltYWdlQml0c19STEU4IChiZWNhdXNlICdjb2xvcicgdmFyIHdhcyBXT1JELCBhbGwKCUNPTE9SRUZzIGhhZCByZWQgcGFydCB6ZXJvZWQpIHRoYXQgbWFkZSBwbGVudHkgb2YgY3lhbiBjb2xvcnMsIG1pbm9yCglidWcgZml4ZXMsIGNoYW5nZXMgdG8gc3VwcG9ydCBMUl8gZmxhZ3MuCgoJKiBpbmNsdWRlL2dsb2JhbC5oLCBtZW1vcnkvdmlydHVhbC5jOgoJVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CglBZGRlZCBWSVJUVUFMX01hcEZpbGVXIHRvIG1hcCBmaWxlIHRvIG1lbW9yeSBpbiBvbmUgZnVuY3Rpb24gY2FsbC4KCgkqIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgd2luZG93cy9tdWx0aW1vbi5jOgoJVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CglNb3ZlZCBNdWx0aW1vbml0b3IgQVBJIGRlY2xhcmF0aW9ucyB0byB3aW5kb3dzLmguCgoJKiBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL2RyaXZlci5oLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvbWNpYW5pbS5jLCBtdWx0aW1lZGlhL21jaWNkYS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCByZWxheTMyL3dpbm1tLnNwZWMsIHdpbmRvd3MvZHJpdmVyLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUltcGxlbWVudGVkIERlZkRyaXZlclByb2MzMiBmcm9tIHdpbm1tLmRsbC4KCgkqIGNvbnRyb2xzL3Njcm9sbC5jLCBpbmNsdWRlL3Njcm9sbC5oLCB3aW5kb3dzL21kaS5jLCB3aW5kb3dzL25vbmNsaWVudC5jOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGFtcy5zdW55c2IuZWR1PgoJR290IHJpZCBvZiBmbGlja2VyaW5nIHNjcm9sbGJhciBhcnJvd3MuIE1ESSBzY3JvbGxpbmcgc3BlZWRlZCB1cCBhCgliaXQuCgoJKiBpbmNsdWRlL3dpbm5scy5oLCBvbGUvbmxzL2RldS5ubHMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUdldExvY2FsZUluZm8zMkEgY2FuIGhhbmRsZSBsZW49MCBub3csIHNldHMgTGFzdEVycm9yIGFuZCB0b3VjaGVzCglidWZmZXIgb25seSB3aGVuIG5lY2Vzc2FyeS4KCVVwZGF0ZWQgZGV1Lm5scyBhbmQgc29tZSBMQ1RZUEVTIGluIHdpbm5scy5oLgoKCSogaWYxNjMyL3JlbGF5LmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglDYWxsUHJvY1tFeF0zMlcgY2FsbGVkIHdpdGggbHBQcm9jQWRkcmVzcz09TlVMTCBzaG91bGQgcmV0dXJuIHplcm8gYW5kCglub3QgY3Jhc2guCgpTYXQgT2N0IDE3IDEzOjA3OjQ4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJUmVkdWNlZCBodWdlICgxR0IpIGhlYXAgY3JlYXRpb24gdGhhdCBjYXVzZWQgU3RhcmNyYWZ0IHRvIGZhaWwuCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oLCBpbmNsdWRlL21vZHVsZS5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmMsIG11bHRpbWVkaWEvZHBsYXkuYywgd2luZG93cy9kaWFsb2cuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQ29tcGlsZSBmaXggZm9yIFNvbGFyaXMuCgoJKiBtdWx0aW1lZGlhL21pZGkuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3Igbm9uIE9TUyBzeXN0ZW1zLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3Igbm9uIFhGODYtREdBIHN5c3RlbXMuCgoJKiBsaWJ0ZXN0L01ha2VmaWxlLmluLCBsaWJ0ZXN0L3ZvbGluZm8uYzoKCVBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KCU5ldyBmaWxlIHRvIHRlc3QgRFJJVkVfR2V0TGFiZWwuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgoJU21hbGwsIHN1Ym9wdGltYWwsIGZpeCBmb3IgMzIgYml0IGNkYXVkaW8gb3BlbiByb3V0aW5lcy4gTmVlZHMgcHJvcGVyCgkzMmJpdCBjZGF1ZGlvIGJpdCBzdXBwb3J0IGJlZm9yZSBpdCBjYW4gYmUgcmVtb3ZlZC4uLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbC5jYT4KCUFkZGVkIGEgYnVuY2ggb2Ygc3R1YnMgZm9yIGRkcmF3IHN1ZmFjZSByb3V0aW5lcy4gQWxsIHN0dWJzIGZvcgoJc3VyZmFjZSBwcmVzZW50IG5vdy4KCUNvbW1lbnRlZCBvdXQgbWVzc2FnZSBwdW1wIGNhbGxzLiBJIGRvbid0IHNlZSBhIHJlYXNvbiBmb3IgdGhlbSBiZWluZwoJdGhlcmUuIEV2ZXJ5dGhpbmcgd29ya3MgZmluZSB3aXRoIC1kZXNrdG9wIGFuZCAtbWFuYWdlZCBzdGlsbCBoYXMKCXByb2JsZW1zLiBEaXNhZ3JlZW1lbnRzPwoKCSogb2xlL29sZTJubHMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBHZXRMb2NhbGVJbmZvMzJBIGZvciBvdGhlciBsYW5ndWFnZXMgdGhhbiBlbl91ay4KCU1hZGUgaXQgcmVjb2duaXNlIExPQ0FMRV9TWVNURU1fREVGQVVMVCwgTE9DQUxFX1NZU1RFTV9ERUZBVUxUIGFuZAoJbGFzdCBidXQgbm90IGxlYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBsY2lkIHdoZXJlIGlzIGFsbCBhYm91dC4uLgoKCSogaW5jbHVkZS9zeXNsZXZlbC5oLCBtaXNjL3JlZ2lzdHJ5LmMsIG11bHRpbWVkaWEvZHBsYXkuYywgbXVsdGltZWRpYS9kc291bmQuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBtdWx0aW1lZGlhL3RpbWUuYywgd2luZG93cy9jYXJldC5jLCBkbGxzL21zYWNtMzIvYnVpbHRpbi5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBzb21lIG1vcmUgbWlzc2luZyBXSU5BUElzIChob3BlZnVsbHkgY29ycmVjdCkuCgoJKiBvbGUvb2xlMm5scy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIHRoZSA9IC0+ID09IGJ1Zy4KCgkqIG1zZG9zL2ludDJmLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCVNoZWxsIHBhcmFtZXRlcnMgKGNvbmZpZy5zeXMpIGFuZCBBTlNJIHN1cHBvcnQgc3R1YnMuCgoJKiBtc2Rvcy9NYWtlZmlsZS5pbjogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJQWRkZWQgaW50MTYuYyBhbmQgaW50MjkuYy4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBtc2Rvcy9pbnRlcnJ1cHRzLmM6CglKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglNb3JlIGludGVycnVwdHMgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIERPUyBtb2RlLgoKCSogbXNkb3MvaW50MjkuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJQWRkZWQgaW50MjkgKEZhc3QgV3JpdGUgdG8gU2NyZWVuKSBzdXBwb3J0LgoKCSogbXNkb3MvaW50MTYuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oOgoJSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJQWRkZWQgaW50MTYgKEtleWJvYXJkKSBzdXBwb3J0LCBtb3N0bHkgc3R1YnMuCgpGcmkgT2N0IDE2IDE1OjQwOjIxIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNYW55IGJ1Z2ZpeGVzLCBuZXcgc3R1YnMgU0hHZXRSZWFsSURMLCBTSFJlZ1F1ZXJ5VmFsdWUzMlcsCglTSFJlZ1F1ZXJ5VmFsdWVFeDMyVywgU3RyUmV0VG9TdHJOLCBTdHJDaHJXLCBTSEFsbG9jU2hhcmVkLAoJU0hMb2NrU2hhcmVkLCBTSFVubG9ja1NoYXJlZCwgU0hGcmVlU2hhcmVkLCBTZXRBcHBTdGFydGluZ0N1cnNvcjMyLAoJU0hMb2FkT0xFMzIsIFNoZWxsX01lcmdlTWVudXMzMiwgUGF0aEdldERyaXZlTnVtYmVyMzIsIERyaXZlVHlwZTMyLAoJU0hBYm9ydEludm9rZUNvbW1hbmQsIFNIT3V0T2ZNZW1vcnlNZXNzYWdlQm94LCBTSEZsdXNoQ2xpcGJvYXJkLgoKCSogbWlzYy9udGRsbC5jLCByZWxheTMyL250ZGxsLnNwZWM6CglEaWV0bWFyIEtsaW5nIDxkaWV0bWFyLmtsaW5nQHVzYS5uZXQ+CglBZGRlZCB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gUnRsT3BlbkN1cnJlbnRVc2VyLgoKCSogb2JqZWN0cy9jdXJzb3JpY29uLmMsIG1pc2Mvc2hlbGwuYywgbWlzYy92ZXIuYywgbWlzYy92ZXJzaW9uLmMsIGxvYWRlci9lbGYuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgbG9hZGVyL3BlX3Jlc291cmNlLmMsIGluY2x1ZGUvbmVleGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBpbmNsdWRlL3BlZXhlLmgsIGRlYnVnZ2VyL2RiZ21haW4uYywgZGVidWdnZXIvbXNjLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglSZW5hbWVkIGFsbCBMUElNQUdFXyogdHlwZXMgdG8gUElNQUdFXyouCgpUaHUgT2N0IDE1IDEzOjAzOjEwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3dpbnBvcy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRml4ZWQgYW4gZXJyb3Igd2hlbiBhbiBvd25lZCB3aW5kb3cgYWN0aXZhdGVzIGl0cyBvd25lciBkdXJpbmcKCWNyZWF0aW9uLgoKCSogd2luZG93cy9kZWZkbGcuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNsb3NpbmcgYSBkaWFsb2cgdXNpbmcgdGhlIG1lbnUgYmFyICgieCIgb3IgIi0iIGJ1dHRvbiBvciB3aW5kb3dzCgltZW51KSBtdXN0IGdlbmVyYXRlIGEgV01fQ09NTUFORCtJRENBTkNFTCBtZXNzYWdlLCB1bmxpa2UgY2xvc2luZwoJbm9ybWFsIHdpbmRvd3Mgd2hlbiBEZXN0cm95V2luZG93KCkgaXMgY2FsbGVkLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzoKCU1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgbWlzc2luZyBXSU5BUElzLgoKCSogd2luZG93cy93aW5wb3MuYywgd2luMzIvb3JkaW5hbHMuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIFByaXZhdGVFeHRyYWN0SWNvbkV4W0FXXSwgUHJpdmF0ZUV4dHJhY3RJY29uc1csCglSZWdpc3RlclNoZWxsSG9va1dpbmRvdywgRGVyZWdpc3RlclNoZWxsSG9va1dpbmRvdywgR2V0UHJvZ21hbldpbmRvdywKCUdldFRhc2ttYW5XaW5kb3csIFNldFByb2dtYW5XaW5kb3csIFNldFNoZWxsV2luZG93RXgsCglTZXRUYXNrbWFuV2luZG93LgoKCSogcmVsYXkzMi9udGRsbC5zcGVjLCBtaXNjL250ZGxsLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicyBOdFF1ZXJ5SW5mb3JtYXRpb25UaHJlYWQsIE50UXVlcnlJbmZvcm1hdGlvblRva2VuLAoJUnRsQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkLCBSdGxFcXVhbFNpZCwgUnRsRnJlZVNpZC4KCgkqIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzogVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CglGaXhlZCBQbGF5U291bmQgdG8gc3RhcnQgaXRzIHRocmVhZCB0aGUgcmlnaHQgd2F5LgoKV2VkIE9jdCAxNCAxODo0MDozNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29udHJvbHMvY29tYm8uYywgY29udHJvbHMvbGlzdGJveC5jOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGFtcy5zdW55c2IuZWR1PgoJQ0JfU0VUQ1VSU0VMIGFuZCBzb21lIG90aGVyIGZpeGVzLgoKCSogd2luZG93cy9xdWV1ZS5jOiBBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CglCZXR0ZXIgUVVFVUVfRmx1c2hNZXNzYWdlcygpLgoKCSogcmVsYXkzMi9nZGkzMi5zcGVjLCBvYmplY3RzL2ZvbnQuYywgaW5jbHVkZS93aW5kb3dzLmgsIGlmMTYzMi9nZGkuc3BlYzoKCU1vc2hlIFZhaW5lciA8bW9zaGV2QGVhc3liYXNlLmNvbT4KCVBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgR2V0T3V0bGluZVRleHRNZXRyaWNzMzJBLgoJQWRkZWQgc3RydWN0dXJlcyBmb3IgT1VUTElORVRFWFRNRVRSSUNTLgoKCSogb2JqZWN0cy9kYy5jLCBpbmNsdWRlL2dkaS5oLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9iaXRtYXAuYywgZ3JhcGhpY3MveDExZHJ2L2luaXQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRG8gbm90IGNsaXAgc291cmNlIHJlY3RhbmdsZSBldmVuIGJ5IHZpc2libGUgcmVnaW9uIGZvciBiaXRibHRzLgoJQWRkZWQgZmllbGQgJ3RvdGFsRXh0ZW50JyB0byBXSU5fRENfSU5GTy4KCgkqIG1zZG9zL3Z4ZC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHN0dWIgZm9yIFZNTSBQTSBBUEkgQUg9MDI2W2RlXSAobmV2ZXIgc2F5ICdzYWZlIG1vZGUnKS4KCgkqIG1lbW9yeS9oZWFwLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBMb2NhbDMyRnJlZSBjYXVzZWQgZnJlZSBoYW5kbGVzIGxpc3QgY29ycnVwdGlvbi4KCgkqIGluY2x1ZGUvZGVidWd0b29scy5oOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIC0tZGlzYWJsZS1kZWJ1ZyBjb25maWcgb3B0aW9uLgoKVHVlIE9jdCAxMyAxMjo1MDowNCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jOgoJUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgoJQWRkZWQgc3R1YnMgU0hSZWdDbG9zZUtleSgpLCBTSFJlZ09wZW5LZXlbQVddKCksIFNIUmVnUXVlcnlWYWx1ZUV4QSgpCglhbmQgRmlsZUljb25Jbml0KCkgbmVlZGVkIGJ5IFdpbjk1IGV4cGxvcmVyLgoKTW9uIE9jdCAxMiAwNzoyNTo1NCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaWFsb2cuYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL21lbnUuYzoKCU5vcm1hbiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUltcHJvdmluZyBrZXlib2FyZCBoYW5kbGluZywgaW5jbHVkaW5nIGFjY2VsZXJhdG9yIGtleXMgaW4gZGlhbG9nCglib3hlcy4gQWxzbyBmaXhlcyBlbnRlciBrZXkgaW4gQWdlbnQzMiBlZGl0IGJveC4KClN1biBPY3QgMTEgMTk6Mzc6MjMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvY29tbWRsZy5jOiBFcmljIFBvdWVjaCAgPGVyaWMucG91ZWNoQGxlbWVsLmZyPgoJQWRkZWQgc3VwcG9ydCBpbiBmaWxlIGRpYWxvZyBib3hlcyBoYW5kbGluZyBmb3IgZmlsdGVycyBsaWtlCgkiKi50eHQ7Ki5iYXQiLgoKCSogd2luMzIva2VybmVsMzIuYywgc2NoZWR1bGVyL3RocmVhZC5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBsb2FkZXIvdGFzay5jLCBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIG5ldyBQRSBETEwgaW5pdGFsaXphdGlvbiBjb2RlLCB0cnlpbmcgdG8gY2FsbCB0aGUKCURsbEVudHJ5UG9pbnQgcm91dGluZXMgYWx3YXlzIGluIGNvcnJlY3Qgb3JkZXIgOi0pCglCeXBhc3Mgc25vb3Bpbmcgd2hlbiBnZXR0aW5nIGRhdGEgYnVmZmVyIGFkZHJlc3NlcyAodGh1bmsgYnVmZmVycywKCV9fR1AgaGFuZGxlcnMpIGFuZCBmb3IgMzItYml0IHJvdXRpbmVzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIDE2LWJpdAoJKGR1ZSB0byBzdGFjayBhZGRyZXNzIHNpemUgcHJvYmxlbXMpLgoKCSogd2luMzIvb3JkaW5hbHMuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBsb2FkZXIvbmUvbW9kdWxlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIENvbW1vblVuaW1wU3R1YiwgTWFwSEluc3QoTFN8U0wpX1BOLCBXMzJTX0JhY2tUbzMyLgoJU3R1YiBmb3IgSG91c2VDbGVhbkxvZ2ljYWxseURlYWRIYW5kbGVzLCBmaXhlZCBrMzJ3dnNwcmludGZBLgoKCSogdG9vbHMvYnVpbGQuYywgaWYxNjMyL2tlcm5lbC5zcGVjLCBpZjE2MzIvcmVsYXkuYywgaWYxNjMyL3RodW5rLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIChwYXJ0aWFsbHkpIHRoZSBLRVJORUwgVGh1bmtsZXQgQVBJIGFuZCBDYWxsYmFjayBDbGllbnQKCUFQSSAoS0VSTkVMLjU2MC01NjgsNjA0LTYxMiw2MTktNjIyKS4KCUFkZGVkIHN0dWJzIGZvciBLMjI4LCBLMjM3LCBLRVJORUwuMzY1LCBLRVJORUwuNDQ3LgoKCSogb2JqZWN0cy9iaXRtYXAuYywgaWYxNjMyL2dkaS5zcGVjOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTdHVicyBmb3IgQ3JlYXRlVXNlcihEaXNjYXJkYWJsZSlCaXRtYXAxNi4KCgkqIG1lbW9yeS9oZWFwLmMsIGluY2x1ZGUvd2lubnQuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgSEVBUF9XSU5FX0NPREUxNlNFRyBTRUdQVFIgaGVhcHMgd2l0aCAxNi1iaXQgY29kZSBzZWdtZW50cy4KCgkqIG1lbW9yeS9nbG9iYWwuYywgaW5jbHVkZS93aW5kb3dzLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUdsb2JhbEZpeDE2IGlzIHN1cHBvc2VkIHRvIHJldHVybiBzZWxlY3RvciB0byB0aGUgbWVtb3J5IGFyZWEuCgoJKiBtc2Rvcy92eGQuYywgaWYxNjMyL01ha2VmaWxlLmluLCBpZjE2MzIvYnVpbHRpbi5jLCBpZjE2MzIvY29tbS5zcGVjLCBpZjE2MzIvd3Byb2NzLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVN0dWJzIGZvciBDT01NLkRSViwgUkVCT09ULlZYRCwgVkRELlZYRC4KCgkqIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci9zeXNsZXZlbC5jLCBpbmNsdWRlL3NpZ19jb250ZXh0LmgsIGluY2x1ZGUvc3lzbGV2ZWwuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVXNlIGVtZXJnZW5jeSBURUIgc2VsZWN0b3IgdG8gYXZvaWQgZGVidWdnZXIgY3Jhc2hlcyB3aGVuIHN0ZXBwaW5nCgl0aHJvdWdoIHJlbGF5IHN0dWJzIChvciB3aGVuIEZTIGlzIGludmFsaWQgb3RoZXJ3aXNlKS4KCgkqIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9rZXlib2FyZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNT1VTRS5EUlYgcm91dGluZXMgbW92ZWQgdG8gZXZlbnQuYy4gQ2FsbCBtb3VzZSBldmVudCBwcm9jZWR1cmUuCgoJKiB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL3BhaW50aW5nLmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2RjdmFsdWVzLmMsIGluY2x1ZGUvZGMuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGlmMTYzMi9nZGkuc3BlYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi90ZXh0LmMsIGdyYXBoaWNzL3BhdGguYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2hhbmdlZCBEQyBtZW1iZXJzIHcuaFZpc1Jnbiwgdy5oQ2xpcFJnbiwgYW1kIHcuaEdDQ2xpcFJnbiB0bwoJY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGRldmljZSwgbm90IHRoZSBEQyBvcmlnaW4uIFRoaXMgaXMKCW5lY2Vzc2FyeSB0byBjb3JyZWN0bHkgaW1wbGVtZW50IEdldENsaXBSZ24xNiBhbmQgSW5xdWlyZVZpc1Jnbi4KCVNlbGVjdFZpc1JnbiBhbHNvIGV4cGVjdHMgcmVnaW9uIGluIGRldmljZS1yZWxhdGl2ZSBjb29yZGluYXRlcy4KCUFkYXB0ZWQgdGhlIHJlc3Qgb2YgV2luZSB0byB0aGlzIGNvb3JkaW5hdGUgY2hhbmdlLgoJSW1wbGVtZW50ZWQgRXh0U2VsZWN0Q2xpcFJnbi4KCgkqIHRvb2xzL3dpbmFwaS1jaGVjaywgc2NoZWR1bGVyL3N5c2xldmVsLmMsIGZpbGVzL2Rvc19mcy5jOgoJQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CglTbWFsbCBmaXguCgoJKiBsb2FkZXIvbmUvc2VnbWVudC5jLCBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL25lZXhlLmgsIGlmMTYzMi9rZXJuZWwuc3BlYzoKCUFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoJWWV0IGFub3RoZXIgc21hbGwgc2VsZi1sb2FkZXIgZml4LgoKCSogZmlsZXMvZHJpdmUuYzogQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CglGaXhlZCBzZXZlcmUgYnVnOiBTZXRDdXJyZW50RGlyZWN0b3J5MzJBIGRpZG4ndCBzZXQgcFRhc2stPmN1cmRpcgoJY29ycmVjdGx5IGR1ZSB0byBjdXJyZW50IGRyaXZlIGJlaW5nIHNldCB0b28gbGF0ZS4KCgkqIE1ha2UucnVsZXMuaW46IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJVXNlICQoQVMpIGluc3RlYWQgb2YgJChDQykgdG8gY29tcGlsZSAucyBmaWxlcy4KCgkqIHJlbGF5MzIvLmN2c2lnbm9yZSwgcmVsYXkzMi9NYWtlZmlsZS5pbiwgcmVsYXkzMi9idWlsdGluMzIuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL21tcmVnLmgsIGlmMTYzMi8uY3ZzaWdub3JlLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGRsbHMvTWFrZWZpbGUuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgTVNBQ00uRExMLCBNU0FDTTMyLkRMTCBhbmQgSU1BR0VITFAuRExMLgoKCSogaW5jbHVkZS9pbWFnZWhscC5oLCByZWxheTMyL2ltYWdlaGxwLnNwZWMsIGRsbHMvaW1hZ2VobHAvLmN2c2lnbm9yZSwgZGxscy9pbWFnZWhscC9NYWtlZmlsZS5pbiwgZGxscy9pbWFnZWhscC9hY2Nlc3MuYywgZGxscy9pbWFnZWhscC9kZWJ1Zy5jLCBkbGxzL2ltYWdlaGxwL2ltYWdlaGxwX21haW4uYywgZGxscy9pbWFnZWhscC9pbnRlZ3JpdHkuYywgZGxscy9pbWFnZWhscC9pbnRlcm5hbC5jLCBkbGxzL2ltYWdlaGxwL21vZGlmeS5jLCBkbGxzL2ltYWdlaGxwL3N5bWJvbC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBJTUFHRUhMUC5ETEwuCgoJKiBpbmNsdWRlL21zYWNtLmgsIGluY2x1ZGUvbXNhY21kcnYuaCwgcmVsYXkzMi9tc2FjbTMyLnNwZWMsIGlmMTYzMi9tc2FjbS5zcGVjLCBkbGxzL21zYWNtMzIvLmN2c2lnbm9yZSwgZGxscy9tc2FjbTMyL01ha2VmaWxlLmluLCBkbGxzL21zYWNtMzIvYnVpbHRpbi5jLCBkbGxzL21zYWNtMzIvZHJpdmVyLmMsIGRsbHMvbXNhY20zMi9maWx0ZXIuYywgZGxscy9tc2FjbTMyL2Zvcm1hdC5jLCBkbGxzL21zYWNtMzIvaW50ZXJuYWwuYywgZGxscy9tc2FjbTMyL21zYWNtMzJfbWFpbi5jLCBkbGxzL21zYWNtMzIvc3RyZWFtLmMsIGRsbHMvbXNhY20vLmN2c2lnbm9yZSwgZGxscy9tc2FjbS9NYWtlZmlsZS5pbiwgZGxscy9tc2FjbS9tc2FjbV9tYWluLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIE1TQUNNLkRMTCBhbmQgTVNBQ00zMi5ETEwuCgoJKiB3aW4zMi9kZXZpY2UuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglSZW1vdmVkIHRoaW5ncyB0aGF0IHdlcmUgZWFybGllciBhZGRlZCBieSBtaXN0YWtlLgoKCSogcmVsYXkzMi93aW5tbS5zcGVjOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVRoZSBpbXBsZW1lbnRhdGlvbiBvZiBtbWlvV3JpdGUgaXMgbm93IGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBzdHViLgoKCSogaW5jbHVkZS9zaGVsbC5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4ZXMsIHNoZWxsdmlldyB1c2VzIERQQSdzIG5vdywgSVNoZWxsVmlld19HZXRJdGVtT2JqZWN0IGltcGxlbWVudGVkLgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzOiBTSEdldEZpbGVJbmZvMzJXLCBSZWFkQ2FiaW5ldFN0YXRlLCBXcml0ZUNhYmluZXRTdGF0ZSwgSXNVc2VyQWRtaW4uCglJbXBsZW1lbnRlZDogU0hHZXRQYXRoRnJvbUlETGlzdDMyVy4KCUNoYW5nZWQgUGF0aENvbWJpbmUuCgoJKiBpbmNsdWRlL3NobG9iai5oOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHJ1Y3R1cmVzIERWQVNQRUNULCBUWU1FRCwgSURMTGlzdC4KCVNoZWxsIHNwZWNpZmljIGNsaXBib2FyZCBmb3JtYXRzLgoKCSogcmVsYXkzMi93aW5zcG9vbC5zcGVjLCBtaXNjL3ByaW50ZHJ2LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgRW51bVByaW50ZXJzVy4KCgkqIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIGZpcnN0IGZ1bmN0aW9ucy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9waWRsLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBjbGFzcyBJRExMaXN0ICJJdGVtIElEIExpc3QgTGlzdCIgKGludGVybmFsKS4KCgkqIG1pc2MvdmVyLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgY2hhbmdlcyAodXNlcyBISVdPUkQvTE9XT1JEKS4KCgkqIHdpbmRvd3MvZGlhbG9nLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglTYXQgT2N0IDEwIDEyOjAwOjAwIDE5OTggIEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtQW9yVy4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdD4KCURvbid0IGluc3RhbGwgb2JqZWN0IGZpbGVzIHdoZW4gLS1kaXNhYmxlLWxpYiBpcyBzZWxlY3RlZC4KCgkqIGRlYnVnZ2VyL2hhc2guYywgZGVidWdnZXIvbXNjLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQ+CglEb24ndCBwcmludCBuYW1lIGZvciAzMiBiaXQgbGliIG11bHRpcGxlIHRpbWVzLgoJQ2xlYW4gdXAgcHJpbnRpbmcgaW4gREVCVUdfUHJvY2Vzc0RlZmVycmVkRGVidWcuCgoJKiBtZW1vcnkvaGVhcC5jLCBkbGxzL2NvbWN0bDMyL3RhYi5jLCBjb250cm9scy9jb21iby5jOgoJRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJU21hbGwgZml4ZXMuCgoJKiBmaWxlcy9kcml2ZS5jOiBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+CglCdWdmaXg6IENoYW5nZWQgR2V0RHJpdmVUeXBlMzJBKE5VTEwpIHRvIHVzZSBjd2QncyByb290LgoKCSogb2xlL3R5cGVsaWIuYywgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvbW9uaWtlci5jLCBvbGUvb2xlMi5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZTJubHMuYywgb2xlL29sZWNsaS5jLCBvbGUvb2xlc3ZyLmMsIG9sZS9zdG9yYWdlLmMsIG1pc2MvbnRkbGwuYywgbWlzYy9yZWdpc3RyeS5jOgoJTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCURvY3VtZW50YXRpb24gY29ycmVjdGlvbnMvc3RhbmRhcmRpemF0aW9ucy4KCgkqIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvbWNpYW5pbS5jLCBtdWx0aW1lZGlhL21jaWNkYS5jLCBtdWx0aW1lZGlhL21jaXN0cmluZy5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgoJRXJpYyBQb3VlY2ggIDxlcmljLnBvdWVjaEBsZW1lbC5mcj4KCVN0YXJ0ZWQgY29kaW5nIDMyIGJpdCBNQ0kgaGFuZGxpbmcuCglBZGRlZCBPcGVuL0Nsb3NlIHRvIGxvdy1sZXZlbCBNQ0kgZHJpdmVycyAoYXVkaW8sIG1pZGksIGFuaW0sIGNkYSkuCglXcm90ZSBNQ0kgTUlESSBzdXBwb3J0LgoKCSogZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglZZXQgYW5vdGhlciBpbXByb3ZlbWVudCB0byB0aGUgYmV6aWVyIGNvZGUuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUdldFRpY2tDb3VudHMoKSBoYXMgYSBncmFudWxhcml0eSBpbiB3aW5kb3dzIG9mIDI1IG1zZWMncy4KCUdpcm90ZWwncyBzZXJpYWwgY29tbXVuaWNhdGlvbiBhcHBlYXJzIHRvIGRlcGVuZCBvbiBpdCwgc28gSSBndWVzcwoJaXQncyBhIGZlYXR1cmUuLi4KCgkqIG1pc2MvY29tbS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJVXBkYXRlIHRoZSBtb2RlbW4gc3RhdHVzIGJpdCB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBSTFNEIGxpbmUgaXMKCWFjdGl2ZSBpbiBldmVyeSBjYWxsIHRvIEdldENvbW1FcnJvcigpLiBUaGlzIGlzIG5vdCB0aGUgcHJvcGVyIHBsYWNlLAoJYnV0IHNpbmNlIHdpbmUgZG9lc24ndCBkbyBhbnkgZXZlbnQtc3R1ZmYuLi4KCUZpeGVkIHNvbWUgVFJBQ0UgY2FsbCdzIGZhY2VkIHdpdGggbm9uIHplcm8gdGVybWluYXRlZCBzdHJpbmdzLgoJUmVzdG9yZSB0aGUgdGVybWluYWwgc3RhdGUgYXQgQ2xvc2VDb21tdCB0byB0aGUgc3RhdGUgaXQgd2FzIGF0CglPcGVuQ29tbSgpLCBzbyB0aGUgbW9kZW0gd2lsbCBnbyBvZmYtaG9vay4KCgkqIGxvYWRlci9tb2R1bGUuYzogQWxleGFuZGVyIExhcnNzb24gIDxhbGxhQGx5c2F0b3IubGl1LnNlPgoJR2V0TW9kdWxlRmlsZU5hbWUzMkEoKSByZXR1cm5zIGxvbmcgZmlsZW5hbWUgaWYgYXBwIHNldHMgb3N2ZXJzaW9uID49Cgk0LjAuIEFsc28gbW92ZWQgdGhlIGxvbmcgZmlsZW5hbWUgaGFja2VyeSB0byBHZXRMb25nUGF0aE5hbWUzMkEoKSBzbwoJaXQgY2FuIGJlIHVzZWQgYnkgd2luMzIgcHJvZ3JhbXMuCgoJKiBmaWxlcy9kb3NfZnMuYzogQWxleGFuZGVyIExhcnNzb24gPGFsbGFAbHlzYXRvci5saXUuc2U+CglHZXRMb25nUGF0aE5hbWUzMkEoKSByZXR1cm5zIGRvcyBmb3JtYXQgbG9uZyBmaWxlbmFtZSBpbnN0ZWFkIG9mIHVuaXgKCWZvcm1hdC4KCgkqIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVNtYWxsIGZpeGVzLgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIFNIRmx1c2hDbGlwYm9hcmQuCgoJKiByZWxheTMyL2NvbWN0bDMyLnNwZWMsIGluY2x1ZGUvY29tbWN0cmwuaCwgZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgc29tZSB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zLgoJQ2hhbmdlZCBhbGdvcml0aG0gaW4gRFBBX1F1aWNrU29ydCgpLgoJRml4ZWQgaGVhcCBjcmVhdGlvbi9kZXN0cnVjdGlvbiBhbmQgY29udHJvbCBbdW5dcmVnaXN0cmF0aW9uIGluCglDb21DdGwzMkxpYk1haW4oKS4KCgkqIGRsbHMvY29tY3RsMzIvaGVhZGVyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBhIGJ1Zy4KCgkqIGluY2x1ZGUvdG9vbHRpcHMuaCwgZGxscy9jb21jdGwzMi90b29sdGlwcy5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHRyYWNraW5nIHN1cHBvcnQgYW5kIGZpeGVkIGxvYWRpbmcgb2YgcmVzb3VyY2Ugc3RyaW5ncy4KCUFkZGVkIHVucmVnaXN0ZXIgY29kZS4KCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9pcGFkZHJlc3MuaCwgaW5jbHVkZS9uYXRpdmVmb250LmgsIGRsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW4sIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgZGxscy9jb21jdGwzMi9pcGFkZHJlc3MuYywgZGxscy9jb21jdGwzMi9uYXRpdmVmb250LmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgSVBBZGRyZXNzIGFuZCBOYXRpdmVGb250IGNvbnRyb2xzLgoKCSogaW5jbHVkZS9pbWFnZWxpc3QuaCwgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglTb21lIG1pbm9yIGltcHJvdmVtZW50cy4KCgkqIGluY2x1ZGUvdG9vbGJhci5oLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBkcmF3aW5nIGFuZCBwbGFjZW1lbnQgY29kZS4gRXhwbG9yZXIgc3R5bGUgY29tbW9uIGRpYWxvZ3MgYXJlCglsb29raW5nIGdvb2Qgbm93LgoKCSogb2JqZWN0cy9jdXJzb3JpY29uLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBidWcgaW4gRHJhd0ljb25FeDMyKCkuCgoJKiBtaXNjL21haW4uYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIEdldFN5c3RlbUluZm9ybWF0aW9uMzJbQS9XXS4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCBpZjE2MzIvdXNlci5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIERyYXdDYXB0aW9uWzE2LzMyXSBhbmQgRHJhd0NhcHRpb25UZW1wWzE2LzMyQS8zMlddLgoJRml4ZWQgaGFuZGxpbmcgb2YgV1NfRVhfVE9PTFdJTkRPVy4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJVXBkYXRlZC4KCgkqIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9rZXlib2FyZC5jLCBpbmNsdWRlL2tleWJvYXJkLmg6CglEYXZpZCBGYXVyZSA8ZmF1cmVAa2RlLm9yZz4KCUFkZGVkIEtFWUJPQVJEX1VwZGF0ZVN0YXRlLCB0byByZWFkIHRoZSBtb2RpZmllcnMgd2hlbiB0aGUgd2luZSBhcHAgaXMKCWFjdGl2YXRlZC4gVXNlcyB0aGUgbmV3IEtFWUJPQVJEX1VwZGF0ZU9uZVN0YXRlLgoJRml4ZWQgYSBwcm9ibGVtIHdpdGggbWVudSBhY2NlbGVyYXRvcnMgKEFsdC1sZXR0ZXIgZ2VuZXJhdGVzIGEgZG93bgoJYXJyb3cgZXZlbnQgd2hpY2ggYmVlcHMgaWYgbm90IGZpbHRlcmVkKS4KCVNwZWVkZWQgdXAgVG9Bc2NpaTE2LzMyKCkgYSBsaXR0bGUgYml0LgoKCSogZGVidWdnZXIvYnJlYWsuYywgZGVidWdnZXIvZGJfZGlzYXNtLmMsIGRlYnVnZ2VyL2RiZy55LCBkZWJ1Z2dlci9leHByLmMsIGRlYnVnZ2VyL3NvdXJjZS5jLCBkZWJ1Z2dlci90eXBlcy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNYWRlIFdpbmUncyBkZWJ1Z2dlciB3b3JrIHNhdGlzZmFjdG9yaWx5IHdpdGggRE9TIGFwcHMuCglQZXJoYXBzIGRlcmVmZXJlbmNpbmcgd29yayBiZXR0ZXIgZm9yIFdpbjE2IGFwcHMgdG9vIG5vdywgYnV0CglpdCBhcHBlYXJzIHRoZSBkZWJ1Z2dlciBjb3JlIHdhc24ndCBkZXNpZ25lZCBmb3Igc2VnbWVudGF0aW9uLgoKCSogbXNkb3MvZHBtaS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNpbXVsYXRlcyBEUE1JIG1lbW9yeSBtYXAgYnkgY29udmVydGluZyBsb3dlci1NQiBzZWdtZW50IGJhc2UKCWFkZHJlc3NlcyBhcyBuZWNlc3NhcnkuIEltcGxlbWVudGVkIGFsbG9jYXRpbmcvZnJlZWluZyBET1MgbWVtb3J5CglibG9ja3MuIEFkZGVkIFhNUyBob29rLiAoRFBNSSByZW1haW5zIGRpc2FibGVkIGJ5IGRlZmF1bHQgdW50aWwKCXNvbWVvbmUgaW1wbGVtZW50cyB0aGUgcmF3IG1vZGUgc3dpdGNoIGVudHJ5IHBvaW50cyBwa3VuemlwIG5lZWRzLikKCgkqIG1zZG9zL2ludDIxLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSSB0aGluayBpdCdzIHRpbWUgdG8gcmV0aGluayB0aGUgSEZJTEUxNl9UT19IRklMRTMyIHN0cmF0ZWd5LAoJY2FuJ3Qga2VlcCB3b3JraW5nIGFyb3VuZCBmbGF3cyBpbiBpdCBsaWtlIHRoaXMgKG5vdyBzdGRpbwoJd2FzIGdldHRpbmcgY2xvc2VkIHdoZW4gcHJvZ3JhbXMgY2xvc2UgaGFuZGxlcyA+PTUpCgoJKiBtc2Rvcy94bXMuYywgbXNkb3MvTWFrZWZpbGUuaW4sIG1zZG9zL2ludDJmLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUltcGxlbWVudGVkIGJhc2ljIFhNUyBmdW5jdGlvbnMuIHdjYi5leGUgKFdpbjE2IGRpc2Fzc2VtYmxlcikgbm93CglzZWVtcyB0byB3b3JrIGZpbmUgdW5kZXIgV2luZS4KCgkqIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYywgaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9taXNjZW11Lmg6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1vdmVkIHNvbWUgc3lzdGVtIGRlcGVuZGVuY2llcyB0byBsb2FkZXIvZG9zL2Rvc3ZtLmMuIEltcGxlbWVudGVkCgllbnZpcm9ubWVudGFsIGFyZ3ZbMF0gcGFzc2luZyB0byBET1MgYXBwcy4gQWRkZWQgWE1TIGhvb2tzLgoKCSogZGVidWdnZXIvc3RhYnMuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBhIG1lbXNldCgpIHRvIHByZXZlbnQgYSBkZWJ1Z2dlciBzZWdmYXVsdCBjYXVzZWQgYnkKCXVuaW5pdGlhbGl6ZWQgcG9pbnRlcnMgaW4gdGhlIHN0YWJzIGxvb2t1cCB0YWJsZXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUEgZmV3IGZpeGVzLgoKCSogcmVsYXkzMi9udGRsbC5zcGVjOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIFJ0bEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZCBlbnRyeS4KCgkqIGxvYWRlci9NYWtlZmlsZS5pbiwgbG9hZGVyL2VsZi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvcGVleGUuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUdlbmVyaWMgZHluYW1pYyBkbGwgbG9hZGVyIHVzaW5nIGRsKigpIEFQSS4KCUluY2x1ZGVzOiBzdGRjYWxsLT5jZGVjbCBtYXBwaW5nIGFiaWxpdHksIHNub29waW5nLgoJKFRlc3RlZCBvbmx5IHdpdGggZ2xpZGUyeC5kbGwgLT4gbGliZ2xpZGUyeC5zbykKCgkqIG11bHRpbWVkaWEvaW5pdC5jLCBtdWx0aW1lZGlhL3RpbWUuYywgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL211bHRpbWVkaWEuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgd2luMzIgZW5oYW5jZWQgZnVuY3Rpb25hbGl0eSB0byB0aW1lciBjYWxsYmFja3MuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgYmFkIGhhY2tzIHNvIFdyaXRlQ29uc29sZU91dHB1dCB3b3JrcyBvbiB2dDEwMCBhbmQgUGVla01lc3NhZ2UKCWRvZXMgYXQgbGVhc3QgYSBiaXQgb2Yga2V5Ym9hcmQgaW5wdXQuCgoJKiByZWxheTMyL3Nub29wLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU2hvdWxkIGRpc3BsYXkgYWdhaW4uCgpTYXQgT2N0IDEwIDE1OjUyOjQ2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL2RpYWxvZy5jOiBEYXZlIFBpY2tsZXMgPGRhdmVwQG51Z2F0ZS5kZW1vbi5jby51az4KCUltcGxlbWVudGVkIERTX0NFTlRFUiBkaWFsb2cgc3R5bGUuCgoJKiBtaXNjL21haW4uYzogUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglBZGRlZCBmdW5jdGlvbiB0byBidWlsZCB0aGUgV2luZG93cyBudW1lcmljIGxhbmd1YWdlIElEIGZyb20gbGFuZ3VhZ2UsCgljb2RlLCBjaGFyc2V0IGFuZCBkaWFsZWN0IHN0cmluZ3MsIGxpa2UgdXNlZCBieSBVbml4IExBTkcgdmFyaWFibGUuCgoJKiBvbGUvb2xlMm5scy5jLCBvbGUvbmxzL1JFQURNRSwgaW5jbHVkZS93aW5ubHMuaCwgb2xlL25scy8qLm5sczoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJTW9yZSBOTFMgZGF0YS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFBldGVyIFNjaGxhaWxlIDx1ZGJ6QHJ6LnVuaS1rYXJsc3J1aGUuZGU+CglGaXhlZCBhIGxvdCBvZiBidWdzIGluIGRkcmF3LmMgdG8gbWFrZSB4bGliIHN1cHBvcnQgd29yay4KCVJ1bnMgc3VjY2Vzc2Z1bGx5IFRSMkRlbW8gYW5kIEphenogSmFja3JhYmJpdCBJSSBEZW1vIQoKCSogb2JqZWN0cy9nZGlvYmouYzogQ2xpZmYgV3JpZ2h0IDxjbGlmZkBzbmlwZTQ0NC5vcmc+CglBZGRlZCBEQyBvYmplY3QgdHlwZSB0byB0aGUgbGlzdCBvZiB2YWxpZCBvYmplY3RzIHRoYXQgY2FuIGJlIGRlbGV0ZWQKCWJ5IERlbGV0ZU9iamVjdDMyLgoKU3VuIE9jdCAgNCAxODoyMDoyOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogQ2hhbmdlTG9nOgoJU3RhcnRpbmcgbmV3IGZvcm1hdCBjaGFuZ2Vsb2cgKG9sZGVyIGNoYW5nZXMgbW92ZWQgdG8KCWRvY3VtZW50YXRpb24vQ2hhbmdlTG9nLk9MRCkuCg==