CiAgICAgICAgTkVXUyBmaWxlIGZvciBsaWJ4bWwyCgogIE5vdGUgdGhhdCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIG5ld3Mgd2VicGFnZSBhdDoKICAgICAgIGh0dHA6Ly94bWxzb2Z0Lm9yZy9uZXdzLmh0bWwKCgoKQ1ZTIG9ubHkgOiBjaGVjayB0aGUgQ2hhbmdlbG9nIGF0IApodHRwOi8vY3ZzLmdub21lLm9yZy9seHIvc291cmNlL2dub21lLXhtbC9DaGFuZ2VMb2cKIGZpbGUKZm9yIGEgcmVhbGx5IGFjY3VyYXRlIGRlc2NyaXB0aW9uOgpJdGVtcyBub3QgZmluaXNoZWQgYW5kIHdvcmtlZCBvbiwgZ2V0IGluIHRvdWNoIHdpdGggdGhlIGxpc3QgaWYgeW91IHdhbnQKdG8gdGVzdCB0aG9zZQogICAtIEZpbmlzaGluZyB1cCBYTUwKICAgIFNjaGVtYXMgYW5kIFhJbmNsdWRlCgoKCjIuNS4xOiBKYW4gOCAyMDAzOgogICAtIEZpeGVzIGEgbWVtb3J5IGxlYWsgYW5kIGNvbmZpZ3VyYXRpb24vY29tcGlsYXRpb24gcHJvYmxlbXMgaW4gMi41LjAKICAgLSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgKEpvaG4pCiAgIC0gYSBjb3VwbGUgb2YgWG1sVGV4dFJlYWRlciBmaXhlcwoKCjIuNS4wOiBKYW4gNiAyMDAzOgogICAtIE5ldyBYbWx0ZXh0UmVhZGVyIGludGVyZmFjZSBiYXNlZCBvbiBDIwogICAgQVBJICh3aXRoIGhlbHAgb2YgU3TpcGhhbmUgQmlkb3VsKQogICAtIFdpbmRvd3M6IG1vcmUgZXhwb3J0cywgaW5jbHVkaW5nIHRoZSBuZXcgQVBJIChJZ29yKQogICAtIFhJbmNsdWRlIGZhbGxiYWNrIGZpeAogICAtIFB5dGhvbjogYmluZGluZ3MgZm9yIHRoZSBuZXcgQVBJLCBwYWNrYWdpbmcgKFN06XBoYW5lIEJpZG91bCksCiAgICBkcnZfbGlieG1sMi5weSBQeXRob24geG1sLnNheCBkcml2ZXIgKFN06XBoYW5lIEJpZG91bCksIGZpeGVzLCBzcGVlZHVwCiAgICBhbmQgaXRlcmF0b3JzIGZvciBQeXRob24tMi4yIChIYW5udSBLcm9zaW5nKQogICAtIFR1dG9yaWFsIGZpeGVzIChqb2huIEZsZWNrIGFuZCBOaXJhaiBUb2xpYSkgeG1sbGludCBtYW4gdXBkYXRlCiAgKEpvaG4pCiAgIC0gRml4IGFuIFhNTCBwYXJzZXIgYnVnIHJhaXNlZCBieSBWeWFjaGVzbGF2IFBpbmR5dXJhCiAgIC0gRml4IGZvciBWTVMgc2VyaWFsaXphdGlvbiAoTmlnZWwgSGFsbCkgYW5kIGNvbmZpZyAoQ3JhaWcgQS4gQmVycnkpCiAgIC0gRW50aXRpZXMgaGFuZGxpbmcgZml4ZXMKICAgLSBuZXcgQVBJIHRvIG9wdGlvbmFsbHkgdHJhY2sgbm9kZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24gKEx1a2FzCiAgU2Nocm9lZGVyKQogICAtIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBYbWx0ZXh0UmVhZGVyIGludGVyZmFjZSBhbmQgc29tZSBYTUwgZ3VpZGVsaW5lcwoKCgoyLjQuMzA6IERlYyAxMiAyMDAyOgogICAtIDIuNC4yOSBicm9rZSB0aGUgcHl0aG9uIGJpbmRpbmdzLCByZXJlbGVhc2luZwogICAtIEltcHJvdmVtZW50L2ZpeGVzIG9mIHRoZSBYTUwgQVBJIGdlbmVyYXRvciwgYW5kIGNvdXBsZSBvZiBtaW5vciBjb2RlCiAgICBmaXhlcy4KCgoyLjQuMjk6IERlYyAxMSAyMDAyOgogICAtIFdpbmRvd3MgZml4ZXMgKElnb3IpOiBXaW5kb3dzIENFIHBvcnQsIHB0aHJlYWQgbGlua2luZywgcHl0aG9uIGJpbmRpbmdzCiAgICAoU3TpcGhhbmUgQmlkb3VsKSwgTWluZ3cgKE1hZ251cyBIZW5vY2gpLCBhbmQgZXhwb3J0IGxpc3QgdXBkYXRlcwogICAtIEZpeCBmb3IgcHJldiBpbiBweXRob24gYmluZGluZ3MgKEVSREkgR2VyZ28pCiAgIC0gRml4IGZvciBlbnRpdGllcyBoYW5kbGluZyAoTWFyY3VzIENsYXJrZSkKICAgLSBSZWZhY3RvcmVkIHRoZSBYTUwgYW5kIEhUTUwgZHVtcHMgdG8gYSBzaW5nbGUgY29kZSBwYXRoLCBmaXhlZCBYSFRNTDEKICAgIGR1bXAKICAgLSBGaXggZm9yIFVSSSBwYXJzaW5nIHdoZW4gaGFuZGxpbmcgVVJOcyB3aXRoIGZyYWdtZW50IGlkZW50aWZpZXJzCiAgIC0gRml4IGZvciBIVFRQIFVSTCBlc2NhcGluZyBwcm9ibGVtCiAgIC0gYWRkZWQgYW4gVGV4dFhtbFJlYWRlciAoQyMpIGxpa2UgQVBJICh3b3JrIGluIHByb2dyZXNzKQogICAtIFJld3JvdGUgdGhlIEFQSSBpbiBYTUwgZ2VuZXJhdGlvbiBzY3JpcHQsIGluY2x1ZGVzIGEgQyBwYXJzZXIgYW5kIHNhdmVzCiAgICBtb3JlIGluZm9ybWF0aW9ucyBuZWVkZWQgZm9yIEMjIGJpbmRpbmdzCgoKMi40LjI4OiBOb3YgMjIgMjAwMjoKICAgLSBhIGNvdXBsZSBvZiBweXRob24gYmluZGluZyBmaXhlcwogICAtIDIgYnVnIGZpeGVzIGluIHRoZSBYTUwgcHVzaCBwYXJzZXIKICAgLSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgcmVtb3ZlZCAoTWFydGluIFN0b2lsb3YpCiAgIC0gZml4IHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IGZvciBVbml4IChEaW1pdHJpIFBhcGFkb3BvdWxvcykKICAgLSBhZGRlZCBlbmNvZGluZyBzdXBwb3J0IGZvciBYSW5jbHVkZSBwYXJzZT0idGV4dCIKICAgLSBhdXRvZGV0ZWN0aW9uIG9mIFhIVE1MMSBhbmQgc3BlY2lmaWMgc2VyaWFsaXphdGlvbiBydWxlcyBhZGRlZAogICAtIG5hc3R5IHRocmVhZGluZyBidWcgZml4ZWQgKFdpbGxpYW0gQnJhY2spCgoKMi40LjI3OiBOb3YgMTcgMjAwMjoKICAgLSBmaXhlcyBmb3IgdGhlIFB5dGhvbiBiaW5kaW5ncwogICAtIGEgbnVtYmVyIG9mIGJ1ZyBmaXhlczogU0dNTCBjYXRhbG9ncywgeG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5KCksCiAgICBIVE1MIHBhcnNlciwgIFNjaGVtYXMgKENoYXJsZXMgQm96ZW1hbiksIGRvY3VtZW50IGZyYWdtZW50IHN1cHBvcnQKICAgIChDaHJpc3RpYW4gR2xhaG4pLCB4bWxSZWNvbmNpbGlhdGVOcyAoQnJpYW4gU3RhZmZvcmQpLCBYUG9pbnRlciwKICAgIHhtbEZyZWVOb2RlKCksIHhtbFNBWFBhcnNlTWVtb3J5IChQZXRlciBKb25lcyksIHhtbEdldE5vZGVQYXRoIChQZXRyCiAgICBQYWphcyksIGVudGl0aWVzIHByb2Nlc3NpbmcKICAgLSBhZGRlZCBncmVwIHRvIHhtbGxpbnQgLS1zaGVsbAogICAtIFZNUyB1cGRhdGUgcGF0Y2ggZnJvbSBDcmFpZyBBLiBCZXJyeQogICAtIGNsZWFudXAgb2YgdGhlIFdpbmRvd3MgYnVpbGQgd2l0aCBzdXBwb3J0IGZvciBtb3JlIGNvbXBpbGVycyAoSWdvciksCiAgICBiZXR0ZXIgdGhyZWFkIHN1cHBvcnQgb24gV2luZG93cwogICAtIGNsZWFudXAgb2YgVW5peCBNYWtlZmlsZXMgYW5kIHNwZWMgZmlsZQogICAtIEltcHJvdmVtZW50cyB0byB0aGUgZG9jdW1lbnRhdGlvbiAoSm9obiBGbGVjaykKCgoyLjQuMjY6IE9jdCAxOCAyMDAyOgogICAtIFBhdGNoZXMgZm9yIFdpbmRvd3MgQ0UgcG9ydCwgaW1wcm92ZW1lbnRzIG9uIFdpbmRvd3MgcGF0aHMgaGFuZGxpbmcKICAgLSBGaXhlcyB0byB0aGUgdmFsaWRhdGlvbiAgY29kZSAoRFREIGFuZCBTY2hlbWFzKSwgeG1sTm9kZUdldFBhdGgoKSAsCiAgICBIVE1MIHNlcmlhbGl6YXRpb24sIE5hbWVzcGFjZSBjb21wbGlhbmNlLCAgYW5kIGEgbnVtYmVyIG9mIHNtYWxsCiAgcHJvYmxlbXMKCgoyLjQuMjU6IFNlcCAyNiAyMDAyOgogICAtIEEgbnVtYmVyIG9mIGJ1ZyBmaXhlczogWFBhdGgsIHZhbGlkYXRpb24sIFB5dGhvbiBiaW5kaW5ncywgRE9NIGFuZAogICAgdHJlZSwgeG1sSS9PLCAgSHRtbAogICAtIFNlcmlvdXMgcmV3cml0ZSBvZiBYSW5jbHVkZQogICAtIE1hZGUgWE1MIFNjaGVtYXMgcmVnZXhwIHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQgYW5kIEFQSXMsIHNtYWxsIGZpeAogICAgYW5kIGltcHJvdmVtZW50IG9mIHRoZSByZWdleHAgY29yZQogICAtIENoYW5nZWQgdGhlIHZhbGlkYXRpb24gY29kZSB0byByZXVzZSBYTUwgU2NoZW1hcyByZWdleHAgQVBJcwogICAtIEJldHRlciBoYW5kbGluZyBvZiBXaW5kb3dzIGZpbGUgcGF0aHMsIGltcHJvdmVtZW50IG9mIE1ha2VmaWxlcyAoSWdvciwKICAgIERhbmllbCBHZWhyaWdlciwgTWFyayBWYWtvYykKICAgLSBJbXByb3ZlZCB0aGUgcHl0aG9uIEkvTyBiaW5kaW5ncywgdGhlIHRlc3RzLCBhZGRlZCByZXNvbHZlciBhbmQgcmVnZXhwCiAgICBBUElzCiAgIC0gTmV3IGxvZ29zIGZyb20gTWFyYyBMaXlhbmFnZQogICAtIFR1dG9yaWFsIGltcHJvdmVtZW50czogSm9obiBGbGVjaywgQ2hyaXN0b3BoZXIgSGFycmlzCiAgIC0gTWFrZWZpbGU6IEZpeGVzIGZvciBBTUQgeDg2XzY0IChNYW5kcmFrZSksIERFU1RESVIgKENocmlzdG9waGUKICBNZXJsZXQpCiAgIC0gcmVtb3ZhbCBvZiBhbGwgc3RkZXJyL3BlcnJvciB1c2UgZm9yIGVycm9yIHJlcG9ydGluZwogICAtIEJldHRlciBlcnJvciByZXBvcnRpbmc6IFhQYXRoIGFuZCBEVEQgdmFsaWRhdGlvbgogICAtIHVwZGF0ZSBvZiB0aGUgdHJpbyBwb3J0YWJpbGl0eSBsYXllciAoQmpvcm4gUmVlc2UpCgoyLjQuMjQ6IEF1ZyAyMiAyMDAyCiAgIC0gWFBhdGggZml4ZXMgKFdpbGxpYW0pLCB4Zjplc2NhcGUtdXJpKCkgKFdlc2xleSBUZXJwc3RyYSkKICAgLSBQeXRob24gYmluZGluZyBmaXhlczogbWFrZWZpbGVzIChXaWxsaWFtKSwgZ2VuZXJhdG9yLCBycG0gYnVpbGQsIHg4Ni02NAogICAgKGZjcm96YXQpCiAgIC0gSFRNTCA8c3R5bGU+IGFuZCBib29sZWFuIGF0dHJpYnV0ZXMgc2VyaWFsaXplciBmaXhlcwogICAtIEMxNE4gaW1wcm92ZW1lbnRzIGJ5IEFsZWtzZXkKICAgLSBkb2MgY2xlYW51cHM6IFJpY2sgSm9uZXMKICAgLSBXaW5kb3dzIGNvbXBpbGVyIG1ha2VmaWxlIHVwZGF0ZXM6IElnb3IgYW5kIEVsaXphYmV0aCBCYXJoYW0KICAgLSBYSW5jbHVkZTogaW1wbGVtZW50YXRpb24gb2YgZmFsbGJhY2sgYW5kIHhtbDpiYXNlIGZpeHVwIGFkZGVkCgoKMi40LjIzOiBKdWx5IDYgMjAwMjoKICAgLSBwZXJmb3JtYW5jZXMgcGF0Y2hlczogUGV0ZXIgSmFjb2JpCiAgIC0gYzE0biBmaXhlcywgdGVzdHN1aXRlIGFuZCBwZXJmb3JtYW5jZXM6IEFsZWtzZXkgU2FuaW4KICAgLSBhZGRlZCB4bWxEb2NGb3JtYXREdW1wOiBDaGVtYSBDZWxvcmlvCiAgIC0gbmV3IHR1dG9yaWFsOiBKb2huIEZsZWNrCiAgIC0gbmV3IGhhc2ggZnVuY3Rpb25zIGFuZCBwZXJmb3JtYW5jZXM6IFNhbmRlciBWZXNpaywgcG9ydGFiaWxpdHkgZml4IGZyb20KICAgIFBldGVyIEphY29iaQogICAtIGEgbnVtYmVyIG9mIGJ1ZyBmaXhlczogWFBhdGggKFdpbGxpYW0gQnJhY2ssIFJpY2hhcmQgSmlua3MpLCBYTUwgYW5kCiAgICBIVE1MIHBhcnNlcnMsIElEIGxvb2t1cCBmdW5jdGlvbgogICAtIHJlbW92YWwgb2YgYWxsIHJlbWFpbmluZyBzcHJpbnRmOiBBbGVrc2V5IFNhbmluCgoKMi40LjIyOiBNYXkgMjcgMjAwMjoKICAgLSBhIG51bWJlciBvZiBidWcgZml4ZXM6IGNvbmZpZ3VyZSBzY3JpcHRzLCBiYXNlIGhhbmRsaW5nLCBwYXJzZXIsIG1lbW9yeQogICAgdXNhZ2UsIEhUTUwgcGFyc2VyLCBYUGF0aCwgZG9jdW1lbnRhdGlvbiAoQ2hyaXN0aWFuIENvcm5lbHNzZW4pLAogICAgaW5kZW50YXRpb24sIFVSSSBwYXJzaW5nCiAgIC0gT3B0aW1pemF0aW9ucyBmb3IgWE1MU2VjLCBmaXhpbmcgYW5kIG1ha2luZyBwdWJsaWMgc29tZSBvZiB0aGUgbmV0d29yawogICAgcHJvdG9jb2wgaGFuZGxlcnMgKEFsZWtzZXkpCiAgIC0gcGVyZm9ybWFuY2UgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24KICAgLSBDaGFybGVzIEJvemVtYW4gcHJvdmlkZWQgZGF0ZSBhbmQgdGltZSBzdXBwb3J0IGZvciBYTUwgU2NoZW1hcwogIGRhdGF0eXBlcwoKCjIuNC4yMTogQXByIDI5IDIwMDI6ClRoaXMgcmVsZWFzZSBpcyBib3RoIGEgYnVnIGZpeCByZWxlYXNlIGFuZCBhbHNvIGNvbnRhaW5zIHRoZSBlYXJseSBYTUwKU2NoZW1hcyBzdHJ1Y3R1cmVzIGF0IApodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8KIGFuZCBkYXRhdHlwZXMgYXQgCmh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLwogY29kZSwgYmV3YXJlLCBhbGwKaW50ZXJmYWNlcyBhcmUgbGlrZWx5IHRvIGNoYW5nZSwgdGhlcmUgaXMgaHVnZSBob2xlcywgaXQgaXMgY2xlYXJseSBhIHdvcmsgaW4KcHJvZ3Jlc3MgYW5kIGRvbid0IGV2ZW4gdGhpbmsgb2YgcHV0dGluZyB0aGlzIGNvZGUgaW4gYSBwcm9kdWN0aW9uIHN5c3RlbSwKaXQncyBhY3R1YWxseSBub3QgY29tcGlsZWQgaW4gYnkgZGVmYXVsdC4gVGhlIHJlYWwgZml4ZXMgYXJlOgogICAtIGEgY291cGxlIG9mIGJ1Z3Mgb3IgbGltaXRhdGlvbnMgaW50cm9kdWNlZCBpbiAyLjQuMjAKICAgLSBwYXRjaGVzIGZvciBCb3JsYW5kIEMrKyBhbmQgTVNDIGJ5IElnb3IKICAgLSBzb21lIGZpeGVzIG9uIFhQYXRoIHN0cmluZ3MgYW5kIGNvbmZvcm1hbmNlIHBhdGNoZXMgYnkgUmljaGFyZAogIEppbmtzCiAgIC0gcGF0Y2ggZnJvbSBBbGVrc2V5IGZvciB0aGUgRXhjQzE0TiBzcGVjaWZpY2F0aW9uCiAgIC0gT1NGLzEgYnVnIGZpeCBieSBCam9ybgoKCjIuNC4yMDogQXByIDE1IDIwMDI6CiAgIC0gYnVnIGZpeGVzOiBmaWxlIGRlc2NyaXB0b3IgbGVhaywgWFBhdGgsIEhUTUwgb3V0cHV0LCBEVEQgdmFsaWRhdGlvbgogICAtIFhQYXRoIGNvbmZvcm1hbmNlIHRlc3RpbmcgYnkgUmljaGFyZCBKaW5rcwogICAtIFBvcnRhYmlsaXR5IGZpeGVzOiBTb2xhcmlzLCBNUEUvaVgsIFdpbmRvd3MsIE9TRi8xLCBweXRob24gYmluZGluZ3MsCiAgICBsaWJ4bWwubTQKCgoyLjQuMTk6IE1hciAyNSAyMDAyOgogICAtIGJ1ZyBmaXhlczogaGFsZiBhIGRvemVuIFhQYXRoIGJ1Z3MsIFZhbGlkYXRpb24sIElTTy1MYXRpbiB0byBVVEY4CiAgICBlbmNvZGVyCiAgIC0gcG9ydGFiaWxpdHkgZml4ZXMgaW4gdGhlIEhUVFAgY29kZQogICAtIG1lbW9yeSBhbGxvY2F0aW9uIGNoZWNrcyB1c2luZyB2YWxncmluZCwgYW5kIHByb2ZpbGluZyB0ZXN0cwogICAtIHJldmFtcCBvZiB0aGUgV2luZG93cyBidWlsZCBhbmQgTWFrZWZpbGVzCgoKMi40LjE4OiBNYXIgMTggMjAwMjoKICAgLSBidWcgZml4ZXM6IHRyZWUsIFNBWCwgY2Fub25pY2FsaXphdGlvbiwgdmFsaWRhdGlvbiwgcG9ydGFiaWxpdHksCiAgWFBhdGgKICAgLSByZW1vdmVkIHRoZSAtLXdpdGgtYnVmZmVyIG9wdGlvbiBpdCB3YXMgYmVjb21pbmcgdW5tYWludGFpbmFibGUKICAgLSBzZXJpb3VzIGNsZWFudXAgb2YgdGhlIFB5dGhvbiBtYWtlZmlsZXMKICAgLSBzcGVlZHVwIHBhdGNoIHRvIFhQYXRoIHZlcnkgZWZmZWN0aXZlIGZvciBEb2NCb29rIHN0eWxlc2hlZXRzCiAgIC0gRml4ZXMgZm9yIFdpbmRvd3MgYnVpbGQsIGNsZWFudXAgb2YgdGhlIGRvY3VtZW50YXRpb24KCgoyLjQuMTc6IE1hciA4IDIwMDI6CiAgIC0gYSBsb3Qgb2YgYnVnIGZpeGVzLCBpbmNsdWRpbmcgIm5hbWVzcGFjZSBub2RlcyBoYXZlIG5vIHBhcmVudHMgaW4KICBYUGF0aCIKICAgLSBmaXhlZC9pbXByb3ZlZCB0aGUgUHl0aG9uIHdyYXBwZXJzLCBhZGRlZCBtb3JlIGV4YW1wbGVzIGFuZCBtb3JlCiAgICByZWdyZXNzaW9uIHRlc3RzLCBYUGF0aCBleHRlbnNpb24gZnVuY3Rpb25zIGNhbiBub3cgcmV0dXJuIG5vZGUtc2V0cwogICAtIGFkZGVkIHRoZSBYTUwgQ2Fub25pY2FsaXphdGlvbiBzdXBwb3J0IGZyb20gQWxla3NleSBTYW5pbgoKCjIuNC4xNjogRmViIDIwIDIwMDI6CiAgIC0gYSBsb3Qgb2YgYnVnIGZpeGVzLCBtb3N0IG9mIHRoZW0gd2VyZSB0cmlnZ2VyZWQgYnkgdGhlIFhNTCBUZXN0c3VpdGUKICAgIGZyb20gT0FTSVMgYW5kIFczQy4gQ29tcGxpYW5jZSBoYXMgYmVlbiBzaWduaWZpY2FudGx5IGltcHJvdmVkLgogICAtIGEgY291cGxlIG9mIHBvcnRhYmlsaXR5IGZpeGVzIHRvby4KCgoyLjQuMTU6IEZlYiAxMSAyMDAyOgogICAtIEZpeGVkIHRoZSBNYWtlZmlsZXMsIGVzcGVjaWFsbHkgdGhlIHB5dGhvbiBtb2R1bGUgb25lcwogICAtIEEgZmV3IGJ1ZyBmaXhlcyBhbmQgY2xlYW51cAogICAtIEluY2x1ZGVzIGNsZWFudXAKCgoyLjQuMTQ6IEZlYiA4IDIwMDI6CiAgIC0gQ2hhbmdlIG9mIExpY2Vuc2UgdG8gdGhlIE1JVAogICAgTGljZW5zZSBiYXNpY2FsbHkgZm9yIGludGVncmF0aW9uIGluIFhGcmVlODYgY29kZWJhc2UsIGFuZCByZW1vdmluZwogICAgY29uZnVzaW9uIGFyb3VuZCB0aGUgcHJldmlvdXMgZHVhbC1saWNlbnNpbmcKICAgLSBhZGRlZCBQeXRob24gYmluZGluZ3MsIGJldGEgc29mdHdhcmUgYnV0IHNob3VsZCBhbHJlYWR5IGJlIHF1aXRlCiAgICBjb21wbGV0ZQogICAtIGEgbGFyZ2UgbnVtYmVyIG9mIGZpeGVzIGFuZCBjbGVhbnVwcywgZXNwZWNpYWxseSBmb3IgYWxsIHRyZWUKICAgIG1hbmlwdWxhdGlvbnMKICAgLSBjbGVhbnVwIG9mIHRoZSBoZWFkZXJzLCBnZW5lcmF0aW9uIG9mIGEgcmVmZXJlbmNlIEFQSSBkZWZpbml0aW9uIGluCiAgWE1MCgoKMi40LjEzOiBKYW4gMTQgMjAwMjoKICAgLSB1cGRhdGUgb2YgdGhlIGRvY3VtZW50YXRpb246IEpvaG4gRmxlY2sgYW5kIENoYXJsaWUgQm96ZW1hbgogICAtIGNsZWFudXAgb2YgdGltaW5nIGNvZGUgZnJvbSBKdXN0aW4gRmxldGNoZXIKICAgLSBmaXhlcyBmb3IgV2luZG93cyBhbmQgaW5pdGlhbCB0aHJlYWQgc3VwcG9ydCBvbiBXaW4zMjogSWdvciBhbmQgU2VyZ3VlaQogICAgTmFyb2pueWkKICAgLSBDeWd3aW4gcGF0Y2ggZnJvbSBSb2JlcnQgQ29sbGlucwogICAtIGFkZGVkIHhtbFNldEVudGl0eVJlZmVyZW5jZUZ1bmMoKSBmb3IgS2VpdGggSXNkYWxlIHdvcmsgb24geHNsZGJnCgoKMi40LjEyOiBEZWMgNyAyMDAxOgogICAtIGEgZmV3IGJ1ZyBmaXhlczogdGhyZWFkIChHYXJ5IFBlbm5pbmd0b24pLCB4bWxsaW50IChHZWVydCBLbG9vc3Rlcm1hbiksCiAgICBYTUwgcGFyc2VyIChSb2JpbiBCZXJqb24pLCBYUG9pbnRlciAoRGFubnkgSmFtc2h5KSwgSS9PIGNsZWFudXBzCiAgKHJvYmVydCkKICAgLSBFcmljIExhdmlnbmUgY29udHJpYnV0ZWQgcHJvamVjdCBmaWxlcyBmb3IgTWFjT1MKICAgLSBzb21lIG1ha2VmaWxlcyBjbGVhbnVwcwoKCjIuNC4xMTogTm92IDI2IDIwMDE6CiAgIC0gZml4ZWQgYSBjb3VwbGUgb2YgZXJyb3JzIGluIHRoZSBpbmNsdWRlcywgZml4ZWQgYSBmZXcgYnVncywgc29tZSBjb2RlCiAgICBjbGVhbnVwcwogICAtIHhtbGxpbnQgbWFuIHBhZ2VzIGltcHJvdmVtZW50IGJ5IEhlaWtvIFJ1cHAKICAgLSB1cGRhdGVkIFZNUyBidWlsZCBpbnN0cnVjdGlvbnMgZnJvbSBKb2huIEEgRm90aGVyaW5naGFtCiAgIC0gV2luZG93cyBNYWtlZmlsZXMgdXBkYXRlcyBmcm9tIElnb3IKCgoyLjQuMTA6IE5vdiAxMCAyMDAxOgogICAtIFVSSSBlc2NhcGluZyBmaXggKEpvZWwgWW91bmcpCiAgIC0gYWRkZWQgeG1sR2V0Tm9kZVBhdGgoKSAoZm9yIHBhdGhzIG9yIFhQb2ludGVycyBnZW5lcmF0aW9uKQogICAtIEZpeGVzIG5hbWVzcGFjZSBoYW5kbGluZyBwcm9ibGVtcyB3aGVuIHVzaW5nIERURCBhbmQgdmFsaWRhdGlvbgogICAtIGltcHJvdmVtZW50cyBvbiB4bWxsaW50OiBNb3J1cyBXYWx0ZXIgcGF0Y2hlcyBmb3IgLS1mb3JtYXQgYW5kCiAgICAtLWVuY29kZSwgU3RlZmFuIEtvc3QgYW5kIEhlaWtvIFJ1cHAgaW1wcm92ZW1lbnRzIG9uIHRoZSAtLXNoZWxsCiAgIC0gZml4ZXMgZm9yIHhtbGNhdGFsb2cgbGlua2luZyBwb2ludGVkIGJ5IFdlaXFpIEdhbwogICAtIGZpeGVzIHRvIHRoZSBIVE1MIHBhcnNlcgoKCjIuNC45OiBOb3YgNiAyMDAxOgogICAtIGZpeGVzIG1vcmUgY2F0YWxvZyBidWdzCiAgIC0gYXZvaWQgYSBjb21waWxhdGlvbiBwcm9ibGVtLCBpbXByb3ZlIHhtbEdldExpbmVObygpCgoKMi40Ljg6IE5vdiA0IDIwMDE6CiAgIC0gZml4ZWQgU0dNTCBjYXRhbG9ncyBicm9rZW4gaW4gcHJldmlvdXMgcmVsZWFzZSwgdXBkYXRlZCB4bWxjYXRhbG9nCiAgdG9vbAogICAtIGZpeGVkIGEgY29tcGlsZSBlcnJvcnMgYW5kIHNvbWUgaW5jbHVkZXMgdHJvdWJsZXMuCgoKMi40Ljc6IE9jdCAzMCAyMDAxOgogICAtIGV4cG9ydGVkIHNvbWUgZGVidWdnaW5nIGludGVyZmFjZXMKICAgLSBzZXJpb3VzIHJld3JpdGUgb2YgdGhlIGNhdGFsb2cgY29kZQogICAtIGludGVncmF0ZWQgR2FyeSBQZW5uaW5ndG9uIHRocmVhZCBzYWZldHkgcGF0Y2gsIGFkZGVkIGNvbmZpZ3VyZSBvcHRpb24KICAgIGFuZCByZWdyZXNzaW9uIHRlc3RzCiAgIC0gcmVtb3ZlZCBhbiBIVE1MIHBhcnNlciBidWcKICAgLSBmaXhlZCBhIGNvdXBsZSBvZiBwb3RlbnRpYWxseSBzZXJpb3VzIHZhbGlkYXRpb24gYnVncwogICAtIGludGVncmF0ZWQgdGhlIFNHTUwgRG9jQm9vayBzdXBwb3J0IGluIHhtbGxpbnQKICAgLSBjaGFuZ2VkIHRoZSBuYW5vZnRwIGFub255bW91cyBsb2dpbiBwYXNzd2QKICAgLSBzb21lIEkvTyBjbGVhbnVwIGFuZCBhIGNvdXBsZSBvZiBpbnRlcmZhY2VzIGZvciBQZXJsIHdyYXBwZXIKICAgLSBnZW5lcmFsIGJ1ZyBmaXhlcwogICAtIHVwZGF0ZWQgeG1sbGludCBtYW4gcGFnZSBieSBKb2huIEZsZWNrCiAgIC0gc29tZSBWTVMgYW5kIFdpbmRvd3MgdXBkYXRlcwoKCjIuNC42OiBPY3QgMTAgMjAwMToKICAgLSBhZGRlZCBhbiB1cGRhdGVkIG1hbiBwYWdlcyBieSBKb2huIEZsZWNrCiAgIC0gcG9ydGFiaWxpdHkgYW5kIGNvbmZpZ3VyZSBmaXhlcwogICAtIGFuIGluZmluaXRlIGxvb3Agb24gdGhlIEhUTUwgcGFyc2VyIHdhcyByZW1vdmVkIChXaWxsaWFtKQogICAtIFdpbmRvd3MgbWFrZWZpbGUgcGF0Y2hlcyBmcm9tIElnb3IKICAgLSBmaXhlZCBoYWxmIGEgZG96ZW4gYnVncyByZXBvcnRlZCBmb3IgbGlieG1sIG9yIGxpYnhzbHQKICAgLSB1cGRhdGVkIHhtbGNhdGFsb2cgdG8gYmUgYWJsZSB0byBtb2RpZnkgU0dNTCBzdXBlciBjYXRhbG9ncwoKCjIuNC41OiBTZXAgMTQgMjAwMToKICAgLSBSZW1vdmUgYSBmZXcgYW5ub3lpbmcgYnVncyBpbiAyLjQuNAogICAtIGZvcmNlcyB0aGUgSFRNTCBzZXJpYWxpemVyIHRvIG91dHB1dCBkZWNpbWFsIGNoYXJyZWZzIHNpbmNlIHNvbWUKICAgIHZlcnNpb24gb2YgTmV0c2NhcGUgY2FuJ3QgaGFuZGxlIGhleGFkZWNpbWFsIG9uZXMKCgoxLjguMTY6IFNlcCAxNCAyMDAxOgogICAtIG1haW50ZW5hbmNlIHJlbGVhc2Ugb2YgdGhlIG9sZCBsaWJ4bWwxIGJyYW5jaCwgY291cGxlIG9mIGJ1ZyBhbmQKICAgIHBvcnRhYmlsaXR5IGZpeGVzCgoKMi40LjQ6IFNlcCAxMiAyMDAxOgogICAtIGFkZGVkIC0tY29udmVydCB0byB4bWxjYXRhbG9nLCBidWcgZml4ZXMgYW5kIGNsZWFudXBzIG9mIFhNTAogIENhdGFsb2cKICAgLSBhIGZldyBidWcgZml4ZXMgYW5kIHNvbWUgcG9ydGFiaWxpdHkgY2hhbmdlcwogICAtIHNvbWUgZG9jdW1lbnRhdGlvbiBjbGVhbnVwcwoKCjIuNC4zOiAgQXVnIDIzIDIwMDE6CiAgIC0gWE1MIENhdGFsb2cgc3VwcG9ydCBzZWUgdGhlIGRvYwogICAtIE5ldyBOYU4vSW5maW5pdHkgZmxvYXRpbmcgcG9pbnQgY29kZQogICAtIEEgZmV3IGJ1ZyBmaXhlcwoKCjIuNC4yOiAgQXVnIDE1IDIwMDE6CiAgIC0gYWRkcyB4bWxMaW5lTnVtYmVyc0RlZmF1bHQoKSB0byBjb250cm9sIGxpbmUgbnVtYmVyIGdlbmVyYXRpb24KICAgLSBsb3Qgb2YgYnVnIGZpeGVzCiAgIC0gdGhlIE1pY3Jvc29mdCBNU0MgcHJvamVjdHMgZmlsZXMgc2hvdWxkIG5vdyBiZSB1cCB0byBkYXRlCiAgIC0gaW5oZXJpdGFuY2Ugb2YgbmFtZXNwYWNlcyBmcm9tIERURCBkZWZhdWx0ZWQgYXR0cmlidXRlcwogICAtIGZpeGVzIGEgc2VyaW91cyBwb3RlbnRpYWwgc2VjdXJpdHkgYnVnCiAgIC0gYWRkZWQgYSAtLWZvcm1hdCBvcHRpb24gdG8geG1sbGludAoKCjIuNC4xOiAgSnVseSAyNCAyMDAxOgogICAtIHBvc3NpYmlsaXR5IHRvIGtlZXAgbGluZSBudW1iZXJzIGluIHRoZSB0cmVlCiAgIC0gc29tZSBjb21wdXRhdGlvbiBOYU4gZml4ZXMKICAgLSBleHRlbnNpb24gb2YgdGhlIFhQYXRoIEFQSQogICAtIGNsZWFudXAgZm9yIGFscGhhIGFuZCBpYTY0IHRhcmdldHMKICAgLSBwYXRjaCB0byBhbGxvdyBzYXZpbmcgdGhyb3VnaCBIVFRQIFBVVCBvciBQT1NUCgoKMi40LjA6IEp1bHkgMTAgMjAwMToKICAgLSBGaXhlZCBhIGZldyBidWdzIGluIFhQYXRoLCB2YWxpZGF0aW9uLCBhbmQgdHJlZSBoYW5kbGluZy4KICAgLSBGaXhlZCBYTUwgQmFzZSBpbXBsZW1lbnRhdGlvbiwgYWRkZWQgYSBjb3VwbGUgb2YgZXhhbXBsZXMgdG8gdGhlCiAgICByZWdyZXNzaW9uIHRlc3RzCiAgIC0gQSBiaXQgb2YgY2xlYW51cAoKCjIuMy4xNDogSnVseSA1IDIwMDE6CiAgIC0gZml4ZWQgc29tZSBlbnRpdGllcyBwcm9ibGVtcyBhbmQgcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudCB3aGVuCiAgICBzdWJzdGl0dXRpbmcgdGhlbQogICAtIGxvdHMgb2YgaW1wcm92ZW1lbnRzIGluIHRoZSBYUGF0aCBxdWVyaWVzIGludGVycHJldGVyIGNhbiBiZQogICAgc3Vic3RhbnRpYWxseSBmYXN0ZXIKICAgLSBNYWtlZmlsZXMgYW5kIGNvbmZpZ3VyZSBjbGVhbnVwcwogICAtIEZpeGVzIHRvIFhQYXRoIHZhcmlhYmxlIGV2YWwsIGFuZCBjb21wYXJlIG9uIGVtcHR5IG5vZGUgc2V0CiAgIC0gSFRNTCB0YWcgY2xvc2luZyBidWcgZml4ZWQKICAgLSBGaXhlZCBhbiBVUkkgcmVmZXJlbmNlIGNvbXB1dGF0aW9uIHByb2JsZW0gd2hlbiB2YWxpZGF0aW5nCgoKMi4zLjEzOiBKdW5lIDI4IDIwMDE6CiAgIC0gMi4zLjEyIGNvbmZpZ3VyZS5pbiB3YXMgYnJva2VuIGFzIHdlbGwgYXMgdGhlIHB1c2ggbW9kZSBYTUwgcGFyc2VyCiAgIC0gYSBmZXcgbW9yZSBmaXhlcyBmb3IgY29tcGlsYXRpb24gb24gV2luZG93cyBNU0MgYnkgWW9uIERlcmVrCgoKMS44LjE0OiBKdW5lIDI4IDIwMDE6CiAgIC0gWmJpZ25pZXcgQ2h5bGEgZ2F2ZSBhIHBhdGNoIHRvIHVzZSB0aGUgb2xkIFhNTCBwYXJzZXIgaW4gcHVzaCBtb2RlCiAgIC0gU21hbGwgTWFrZWZpbGUgZml4CgoKMi4zLjEyOiBKdW5lIDI2IDIwMDE6CiAgIC0gbG90cyBvZiBjbGVhbnVwCiAgIC0gYSBjb3VwbGUgb2YgdmFsaWRhdGlvbiBmaXgKICAgLSBmaXhlZCBsaW5lIG51bWJlciBjb3VudGluZwogICAtIGZpeGVkIHNlcmlvdXMgcHJvYmxlbXMgaW4gdGhlIFhJbmNsdWRlIHByb2Nlc3NpbmcKICAgLSBhZGRlZCBzdXBwb3J0IGZvciBVVEY4IEJPTSBhdCBiZWdpbm5pbmcgb2YgZW50aXRpZXMKICAgLSBmaXhlZCBhIHN0cmFuZ2UgZ2NjIG9wdGltaXplciBidWdzIGluIHhwYXRoIGhhbmRsaW5nIG9mIGZsb2F0LCBnY2MtMy4wCiAgICBtaXNjb21waWxlIHVyaS5jIChXaWxsaWFtKSwgVGhvbWFzIExlaXRuZXIgcHJvdmlkZWQgYSBmaXggZm9yIHRoZQogICAgb3B0aW1pemVyIG9uIFRydTY0CiAgIC0gaW5jb3Jwb3JhdGVkIFlvbiBEZXJlayBhbmQgSWdvciBabGF0a292aWMgIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgZm9yCiAgICBjb21waWxhdGlvbiBvbiBXaW5kb3dzIE1TQwogICAtIHVwZGF0ZSBvZiBsaWJ4bWwtZG9jLmVsIChGZWxpeCBOYXR0ZXIpCiAgIC0gZml4ZWQgMiBidWdzIGluIFVSSSBub3JtYWxpemF0aW9uIGNvZGUKCgoyLjMuMTE6IEp1bmUgMTcgMjAwMToKICAgLSB1cGRhdGVzIHRvIHRyaW8sIE1ha2VmaWxlcyBhbmQgY29uZmlndXJlIHNob3VsZCBmaXggc29tZSBwb3J0YWJpbGl0eQogICAgcHJvYmxlbXMgKGFscGhhKQogICAtIGZpeGVkIHNvbWUgSFRNTCBzZXJpYWxpemF0aW9uIHByb2JsZW1zIChwcmUsIHNjcmlwdCwgYW5kIGJsb2NrL2lubGluZQogICAgaGFuZGxpbmcpLCBhZGRlZCBlbmNvZGluZyBhd2FyZSBBUElzLCBjbGVhbnVwIG9mIHRoaXMgY29kZQogICAtIGFkZGVkIHhtbEhhc05zUHJvcCgpCiAgIC0gaW1wbGVtZW50ZWQgYSBzcGVjaWZpYyBQSSBmb3IgZW5jb2Rpbmcgc3VwcG9ydCBpbiB0aGUgRG9jQm9vayBTR01MCiAgICBwYXJzZXIKICAgLSBzb21lIFhQYXRoIGZpeGVzICgtSW5maW5pdHksIC8gYXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgYW5kIG5hbWVzcGFjZXMKICAgIG5vZGUgc2VsZWN0aW9uKQogICAtIGZpeGVkIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSBhbmQgYW4gZXJyb3IgaW4gdGhlIHZhbGlkYXRpb24gY29kZQogICAtIGZpeGVkIFhJbmNsdWRlIHJvdXRpbmUgdG8gaW1wbGVtZW50IHRoZSByZWN1cnNpdmUgYmVoYXZpb3VyCiAgIC0gZml4ZWQgeG1sRnJlZU5vZGUgcHJvYmxlbSB3aGVuIGxpYnhtbCBpcyBpbmNsdWRlZCBzdGF0aWNhbGx5IHR3aWNlCiAgIC0gYWRkZWQgLS12ZXJzaW9uIHRvIHhtbGxpbnQgZm9yIGJ1ZyByZXBvcnRzCgoKMi4zLjEwOiBKdW5lIDEgMjAwMToKICAgLSBmaXhlZCB0aGUgU0dNTCBjYXRhbG9nIHN1cHBvcnQKICAgLSBhIG51bWJlciBvZiByZXBvcnRlZCBidWdzIGdvdCBmaXhlZCwgaW4gWFBhdGgsIGljb252IGRldGVjdGlvbiwKICAgIFhJbmNsdWRlIHByb2Nlc3NpbmcKICAgLSBYUGF0aCBzdHJpbmcgZnVuY3Rpb24gc2hvdWxkIG5vdyBoYW5kbGUgdW5pY29kZSBjb3JyZWN0bHkKCgoyLjMuOTogTWF5IDE5IDIwMDE6CkxvdHMgb2YgYnVnZml4ZXMsIGFuZCBhZGRlZCBhIGJhc2ljIFNHTUwgY2F0YWxvZyBzdXBwb3J0OgogICAtIEhUTUwgcHVzaCBidWdmaXggIzU0ODkxIGFuZCBhbm90aGVyIHBhdGNoIGZyb20gSm9uYXMgQm9yZ3N0cvZtCiAgIC0gc29tZSBzZXJpb3VzIHNwZWVkIG9wdGltaXphdGlvbiBhZ2FpbgogICAtIHNvbWUgZG9jdW1lbnRhdGlvbiBjbGVhbnVwcwogICAtIHRyeWluZyB0byBnZXQgYmV0dGVyIGxpbmtpbmcgb24gU29sYXJpcyAoLVIpCiAgIC0gWFBhdGggQVBJIGNsZWFudXAgZnJvbSBUaG9tYXMgQnJveWVyCiAgIC0gVmFsaWRhdGlvbiBidWcgZml4ZWQgIzU0NjMxLCBhZGRlZCBhIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uLCBmaXhlZAogICAgeG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzKCkKICAgLSBBZGRlZCBhbiBJTlNUQUxMIGZpbGUKICAgLSBBdHRyaWJ1dGUgcmVtb3ZhbCBhZGRlZCB0byBBUEk6ICM1NDQzMwogICAtIGFkZGVkIGEgYmFzaWMgc3VwcG9ydCBmb3IgU0dNTCBjYXRhbG9ncwogICAtIGZpeGVkIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIEFQSQogICAtIGJ1Z2ZpeCBpbiB4bWxOb2RlR2V0TGFuZygpCiAgIC0gZml4ZWQgYSBzbWFsbCBjb25maWd1cmUgcG9ydGFiaWxpdHkgcHJvYmxlbQogICAtIGZpeGVkIGFuIGludmVyc2lvbiBvZiBTWVNURU0gYW5kIFBVQkxJQyBpZGVudGlmaWVyIGluIEhUTUwgZG9jdW1lbnQKCgoxLjguMTM6IE1heSAxNCAyMDAxOgogICAtIGJ1Z2ZpeGVzIHJlbGVhc2Ugb2YgdGhlIG9sZCBsaWJ4bWwxIGJyYW5jaCB1c2VkIGJ5IEdub21lCgoKMi4zLjg6IE1heSAzIDIwMDE6CiAgIC0gSW50ZWdyYXRlZCBhbiBTR01MIERvY0Jvb2sgcGFyc2VyIGZvciB0aGUgR25vbWUgcHJvamVjdAogICAtIEZpeGVkIGEgZmV3IHRoaW5ncyBpbiB0aGUgSFRNTCBwYXJzZXIKICAgLSBGaXhlZCBzb21lIFhQYXRoIGJ1Z3MgcmFpc2VkIGJ5IFhTTFQgdXNlLCB0cmllZCB0byBmaXggdGhlIGZsb2F0aW5nCiAgICBwb2ludCBwb3J0YWJpbGl0eSBpc3N1ZQogICAtIFNwZWVkIGltcHJvdmVtZW50ICg4TS9zIGZvciBTQVgsIDNNL3MgZm9yIERPTSwgMS41TS9zIGZvcgogICAgRE9NK3ZhbGlkYXRpb24gdXNpbmcgdGhlIFhNTCBSRUMgYXMgaW5wdXQgYW5kIGEgNzAwTUh6IGNlbGVyb24pLgogICAtIGluY29ycG9yYXRlZCBtb3JlIFdpbmRvd3MgY2xlYW51cAogICAtIGFkZGVkIHhtbFNhdmVGb3JtYXRGaWxlKCkKICAgLSBmaXhlZCBwcm9ibGVtcyBpbiBjb3B5aW5nIG5vZGVzIHdpdGggZW50aXRpZXMgcmVmZXJlbmNlcyAoZ2RvbWUpCiAgIC0gcmVtb3ZlZCBzb21lIHRyb3VibGVzIHN1cnJvdW5kaW5nIHRoZSBuZXcgdmFsaWRhdGlvbiBtb2R1bGUKCgoyLjMuNzogQXByaWwgMjIgMjAwMToKICAgLSBsb3RzIG9mIHNtYWxsIGJ1ZyBmaXhlcywgY29ycmVjdGVkIFhQb2ludGVyCiAgIC0gTm9uIGRldGVybWluaXN0aWMgY29udGVudCBtb2RlbCB2YWxpZGF0aW9uIHN1cHBvcnQKICAgLSBhZGRlZCB4bWxEb2NDb3B5Tm9kZSBmb3IgZ2RvbWUyCiAgIC0gcmV2YW1wZWQgdGhlIHdheSB0aGUgSFRNTCBwYXJzZXIgaGFuZGxlcyBlbmQgb2YgdGFncwogICAtIFhQYXRoOiBjb3JyZWN0aW9ucyBvZiBuYW1lc3BhY2VzIHN1cHBvcnQgYW5kIG51bWJlciBmb3JtYXR0aW5nCiAgIC0gV2luZG93czogSWdvciBabGF0a292aWMgcGF0Y2hlcyBmb3IgTVNDIGNvbXBpbGF0aW9uCiAgIC0gSFRNTCBvdXRwdXQgZml4ZXMgZnJvbSBQIEMgQ2hvdyBhbmQgV2lsbGlhbSBNLiBCcmFjawogICAtIEltcHJvdmVkIHZhbGlkYXRpb24gc3BlZWQgc2Vuc2libGUgZm9yIERvY0Jvb2sKICAgLSBmaXhlZCBhIGJpZyBidWcgd2l0aCBJRCBkZWNsYXJlZCBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMKICAgLSBwb3J0YWJpbGl0eSBmaXhlcywgdXBkYXRlIG9mIFRyaW8gZnJvbSBCam9ybiBSZWVzZQoKCjIuMy42OiBBcHJpbCA4IDIwMDE6CiAgIC0gQ29kZSBjbGVhbnVwIHVzaW5nIGV4dHJlbWUgZ2NjIGNvbXBpbGVyIHdhcm5pbmcgb3B0aW9ucywgZm91bmQgYW5kCiAgICBjbGVhcmVkIGhhbGYgYSBkb3plbiBwb3RlbnRpYWwgcHJvYmxlbQogICAtIHRoZSBFYXplbCB0ZWFtIGZvdW5kIGFuIFhNTCBwYXJzZXIgYnVnCiAgIC0gY2xlYW5lZCB1cCB0aGUgdXNlciBvZiBzb21lIG9mIHRoZSBzdHJpbmcgZm9ybWF0dGluZyBmdW5jdGlvbi4gdXNlZCB0aGUKICAgIHRyaW8gbGlicmFyeSBjb2RlIHRvIHByb3ZpZGUgdGhlIG9uZSBuZWVkZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgbWlzc2luZwogICAgdGhlbQogICAtIHhwYXRoOiByZW1vdmVkIGEgbWVtb3J5IGxlYWsgYW5kIGZpeGVkIHRoZSBwcmVkaWNhdGUgZXZhbHVhdGlvbgogICAgcHJvYmxlbSwgZXh0ZW5kZWQgdGhlIHRlc3RzdWl0ZSBhbmQgY2xlYW5lZCB1cCB0aGUgcmVzdWx0LiBYUG9pbnRlciBzZWVtcwogICAgYnJva2VuIC4uLgoKCjIuMy41OiBNYXIgMjMgMjAwMToKICAgLSBCaWdnZXN0IGNoYW5nZSBpcyBzZXBhcmF0ZSBwYXJzaW5nIGFuZCBldmFsdWF0aW9uIG9mIFhQYXRoIGV4cHJlc3Npb25zLAogICAgdGhlcmUgaXMgc29tZSBuZXcgQVBJcyBmb3IgdGhpcyB0b28KICAgLSBpbmNsdWRlZCBhIG51bWJlciBvZiBidWcgZml4ZXMoWE1MIHB1c2ggcGFyc2VyLCA1MTg3Niwgbm90YXRpb25zLAogIDUyMjk5KQogICAtIEZpeGVkIHNvbWUgcG9ydGFiaWxpdHkgaXNzdWVzCgoKMi4zLjQ6IE1hciAxMCAyMDAxOgogICAtIEZpeGVkIGJ1Z3MgIzUxODYwIGFuZCAjNTE4NjEKICAgLSBBZGRlZCBhIGdsb2JhbCB2YXJpYWJsZSB4bWxEZWZhdWx0QnVmZmVyU2l6ZSB0byBhbGxvdyBkZWZhdWx0IGJ1ZmZlcgogICAgc2l6ZSB0byBiZSBhcHBsaWNhdGlvbiB0dW5hYmxlLgogICAtIFNvbWUgY2xlYW51cCBpbiB0aGUgdmFsaWRhdGlvbiBjb2RlLCBzdGlsbCBhIGJ1ZyBsZWZ0IGFuZCB0aGlzIHBhcnQKICAgIHNob3VsZCBwcm9iYWJseSBiZSByZXdyaXR0ZW4gdG8gc3VwcG9ydCBhbWJpZ3VvdXMgY29udGVudCBtb2RlbCA6LVwKICAgLSBGaXggYSBjb3VwbGUgb2Ygc2VyaW91cyBidWdzIGludHJvZHVjZWQgb3IgcmFpc2VkIGJ5IGNoYW5nZXMgaW4gMi4zLjMKICAgIHBhcnNlcgogICAtIEZpeGVkIGFub3RoZXIgYnVnIGluIHhtbE5vZGVHZXRDb250ZW50KCkKICAgLSBCam9ybiBmaXhlZCBYUGF0aCBub2RlIGNvbGxlY3Rpb24gYW5kIE51bWJlciBmb3JtYXR0aW5nCiAgIC0gRml4ZWQgYSBsb29wIHJlcG9ydGVkIGluIHRoZSBIVE1MIHBhcnNpbmcKICAgLSBibGFuayBzcGFjZSBhcmUgcmVwb3J0ZWQgZXZlbiBpZiB0aGUgRHRkIGNvbnRlbnQgbW9kZWwgcHJvdmVzIHRoYXQgdGhleQogICAgYXJlIGZvcm1hdHRpbmcgc3BhY2VzLCB0aGlzIGlzIGZvciBYTUwgY29uZm9ybWFuY2UKCgoyLjMuMzogTWFyIDEgMjAwMToKICAgLSBzbWFsbCBjaGFuZ2UgaW4gWFBhdGggZm9yIFhTTFQKICAgLSBkb2N1bWVudGF0aW9uIGNsZWFudXBzCiAgIC0gZml4IGluIHZhbGlkYXRpb24gYnkgR2FyeSBQZW5uaW5ndG9uCiAgIC0gc2VyaW91cyBwYXJzaW5nIHBlcmZvcm1hbmNlcyBpbXByb3ZlbWVudHMKCgoyLjMuMjogRmViIDI0IDIwMDE6CiAgIC0gY2hhc2luZyBYUGF0aCBidWdzLCBmb3VuZCBhIGJ1bmNoLCBjb21wbGV0ZWQgc29tZSBUT0RPCiAgIC0gZml4ZWQgYSBEdGQgcGFyc2luZyBidWcKICAgLSBmaXhlZCBhIGJ1ZyBpbiB4bWxOb2RlR2V0Q29udGVudAogICAtIElEL0lEUkVGIHN1cHBvcnQgcGFydGx5IHJld3JpdHRlbiBieSBHYXJ5IFBlbm5pbmd0b24KCgoyLjMuMTogRmViIDE1IDIwMDE6CiAgIC0gc29tZSBYUGF0aCBhbmQgSFRNTCBidWcgZml4ZXMgZm9yIFhTTFQKICAgLSBzbWFsbCBleHRlbnNpb24gb2YgdGhlIGhhc2ggdGFibGUgaW50ZXJmYWNlcyBmb3IgRE9NIGdkb21lMgogICAgaW1wbGVtZW50YXRpb24KICAgLSBBIGZldyBidWcgZml4ZXMKCgoyLjMuMDogRmViIDggMjAwMSAoMi4yLjEyIHdhcyBvbiAyNSBKYW4gYnV0IEkgZGlkbid0IGtlcHQgdHJhY2spOgogICAtIExvdHMgb2YgWFBhdGggYnVnIGZpeGVzCiAgIC0gQWRkIGEgbW9kZSB3aXRoIER0ZCBsb29rdXAgYnV0IHdpdGhvdXQgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRpbmcgZm9yCiAgICBYU0xUCiAgIC0gQWRkIHN1cHBvcnQgZm9yIHRleHQgbm9kZSB3aXRob3V0IGVzY2FwaW5nIChYU0xUKQogICAtIGJ1ZyBmaXhlcyBmb3IgeG1sQ2hlY2tGaWxlbmFtZQogICAtIHZhbGlkYXRpb24gY29kZSBidWcgZml4ZXMgZnJvbSBHYXJ5IFBlbm5pbmd0b24KICAgLSBQYXRjaCBmcm9tIFBhdWwgRC4gU21pdGggY29ycmVjdGluZyBVUkkgcGF0aCBub3JtYWxpemF0aW9uCiAgIC0gUGF0Y2ggdG8gYWxsb3cgc2ltdWx0YW5lb3VzIGluc3RhbGwgb2YgbGlieG1sLWRldmVsIGFuZAogIGxpYnhtbDItZGV2ZWwKICAgLSB0aGUgZXhhbXBsZSBNYWtlZmlsZSBpcyBub3cgZml4ZWQKICAgLSBhZGRlZCBIVE1MIHRvIHRoZSBSUE0gcGFja2FnZXMKICAgLSB0cmVlIGNvcHlpbmcgYnVnZml4ZXMKICAgLSB1cGRhdGVzIHRvIFdpbmRvd3MgbWFrZWZpbGVzCiAgIC0gb3B0aW1pemF0aW9uIHBhdGNoIGZyb20gQmpvcm4gUmVlc2UKCgoyLjIuMTE6IEphbiA0IDIwMDE6CiAgIC0gYnVuY2ggb2YgYnVnIGZpeGVzIChtZW1vcnkgSS9PLCB4cGF0aCwgZnRwL2h0dHAsIC4uLikKICAgLSBhZGRlZCBodG1sSGFuZGxlT21pdHRlZEVsZW0oKQogICAtIEFwcGxpZWQgQmpvcm4gUmVlc2UncyBJUFY2IGZpcnN0IHBhdGNoCiAgIC0gQXBwbGllZCBQYXVsIEQuIFNtaXRoIHBhdGNoZXMgZm9yIHZhbGlkYXRpb24gb2YgWEluY2x1ZGUgcmVzdWx0cwogICAtIGFkZGVkIFhQb2ludGVyIHhtbG5zKCkgbmV3IHNjaGVtZSBzdXBwb3J0CgoKMi4yLjEwOiBOb3YgMjUgMjAwMDoKICAgLSBGaXggdGhlIFdpbmRvd3MgcHJvYmxlbXMgb2YgMi4yLjgKICAgLSBpbnRlZ3JhdGUgT3BlblZNUyBwYXRjaGVzCiAgIC0gYmV0dGVyIGhhbmRsaW5nIG9mIHNvbWUgbmFzdHkgSFRNTCBpbnB1dAogICAtIEltcHJvdmVkIHRoZSBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbgogICAtIGludGVncmF0ZSBhIG51bWJlciBvZiBwcm92aWRlZCBwYXRjaGVzCgoKMi4yLjk6IE5vdiAyNSAyMDAwOgogICAtIGVycm9uZW91cyByZWxlYXNlIDotKAoKCjIuMi44OiBOb3YgMTMgMjAwMDoKICAgLSBGaXJzdCB2ZXJzaW9uIG9mIFhJbmNsdWRlCiAgICBzdXBwb3J0CiAgIC0gUGF0Y2ggaW4gY29uZGl0aW9uYWwgc2VjdGlvbiBoYW5kbGluZwogICAtIHVwZGF0ZWQgTVMgY29tcGlsZXIgcHJvamVjdAogICAtIGZpeGVkIHNvbWUgWFBhdGggcHJvYmxlbXMKICAgLSBhZGRlZCBhbiBVUkkgZXNjYXBpbmcgZnVuY3Rpb24KICAgLSBzb21lIG90aGVyIGJ1ZyBmaXhlcwoKCjIuMi43OiBPY3QgMzEgMjAwMDoKICAgLSBhZGRlZCBtZXNzYWdlIHJlZGlyZWN0aW9uCiAgIC0gWFBhdGggaW1wcm92ZW1lbnRzICh0aGFua3MgVE9NICEpCiAgIC0geG1sSU9QYXJzZURURCgpIGFkZGVkCiAgIC0gdmFyaW91cyBzbWFsbCBmaXhlcyBpbiB0aGUgSFRNTCwgVVJJLCBIVFRQIGFuZCBYUG9pbnRlciBzdXBwb3J0CiAgIC0gc29tZSBjbGVhbnVwIG9mIHRoZSBNYWtlZmlsZSwgYXV0b2NvbmYgYW5kIHRoZSBkaXN0cmlidXRpb24gY29udGVudAoKCjIuMi42OiBPY3QgMjUgMjAwMDo6CiAgIC0gQWRkZWQgYW4gaGFzaCB0YWJsZSBtb2R1bGUsIG1pZ3JhdGVkIGEgbnVtYmVyIG9mIGludGVybmFsIHN0cnVjdHVyZSB0bwogICAgdGhvc2UKICAgLSBGaXhlZCBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbiBwcm9ibGVtcwogICAtIEhUVFAgbW9kdWxlIGNsZWFudXBzCiAgIC0gSFRNTCBwYXJzZXIgaW1wcm92ZW1lbnRzICh0YWcgZXJyb3JzLCBzY3JpcHQvc3R5bGUgaGFuZGxpbmcsIGF0dHJpYnV0ZQogICAgbm9ybWFsaXphdGlvbikKICAgLSBjb2FsZXNjaW5nIG9mIGFkamFjZW50IHRleHQgbm9kZXMKICAgLSBjb3VwbGUgb2YgWFBhdGggYnVnIGZpeGVzLCBleHBvcnRlZCB0aGUgaW50ZXJuYWwgQVBJCgoKMi4yLjU6IE9jdCAxNSAyMDAwOjoKICAgLSBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdHN1aXRlCiAgIC0gTG90IG9mIFhQYXRoIGZpeGVzLCBhZGRlZCB2YXJpYWJsZSBhbmQgZnVuY3Rpb25zIHJlZ2lzdHJhdGlvbiwgbW9yZQogICAgdGVzdHMKICAgLSBQb3J0YWJpbGl0eSBmaXhlcywgbG90cyBvZiBlbmhhbmNlbWVudHMgdG93YXJkIGFuIGVhc3kgV2luZG93cyBidWlsZAogICAgYW5kIHJlbGVhc2UKICAgLSBMYXRlIHZhbGlkYXRpb24gZml4ZXMKICAgLSBJbnRlZ3JhdGVkIGEgbG90IG9mIGNvbnRyaWJ1dGVkIHBhdGNoZXMKICAgLSBhZGRlZCBtZW1vcnkgbWFuYWdlbWVudCBkb2NzCiAgIC0gYSBwZXJmb3JtYW5jZSBwcm9ibGVtIHdoZW4gdXNpbmcgbGFyZ2UgYnVmZmVyIHNlZW1zIGZpeGVkCgoKMi4yLjQ6IE9jdCAxIDIwMDA6OgogICAtIG1haW4gWFBhdGggcHJvYmxlbSBmaXhlZAogICAtIEludGVncmF0ZWQgcG9ydGFiaWxpdHkgcGF0Y2hlcyBmb3IgV2luZG93cwogICAtIFNlcmlvdXMgYnVnIGZpeGVzIG9uIHRoZSBVUkkgYW5kIEhUTUwgY29kZQoKCjIuMi4zOiBTZXAgMTcgMjAwMDoKICAgLSBidWcgZml4ZXMKICAgLSBjbGVhbnVwIG9mIGVudGl0eSBoYW5kbGluZyBjb2RlCiAgIC0gb3ZlcmFsbCByZXZpZXcgb2YgYWxsIGxvb3BzIGluIHRoZSBwYXJzZXJzLCBhbGwgc3ByaW50ZiB1c2FnZSBoYXMgYmVlbgogICAgY2hlY2tlZCB0b28KICAgLSBGYXIgYmV0dGVyIGhhbmRsaW5nIG9mIGxhcmdlcyBEdGQuIFZhbGlkYXRpbmcgYWdhaW5zdCBEb2NCb29rIFhNTCBEdGQKICAgIHdvcmtzIHNtb290aGx5IG5vdy4KCgoxLjguMTA6IFNlcCA2IDIwMDA6CiAgIC0gYnVnIGZpeCByZWxlYXNlIGZvciBzb21lIEdub21lIHByb2plY3RzCgoKMi4yLjI6IEF1Z3VzdCAxMiAyMDAwOgogICAtIG1vc3RseSBidWcgZml4ZXMKICAgLSBzdGFydGVkIGFkZGluZyByb3V0aW5lcyB0byBhY2Nlc3MgeG1sIHBhcnNlciBjb250ZXh0IG9wdGlvbnMKCgoyLjIuMTogSnVseSAyMSAyMDAwOgogICAtIGEgcHVyZWx5IGJ1ZyBmaXhlcyByZWxlYXNlCiAgIC0gZml4ZWQgYW4gZW5jb2Rpbmcgc3VwcG9ydCBwcm9ibGVtIHdoZW4gcGFyc2luZyBmcm9tIGEgbWVtb3J5IGJsb2NrCiAgIC0gZml4ZWQgYSBET0NUWVBFIHBhcnNpbmcgcHJvYmxlbQogICAtIHJlbW92ZWQgYSBidWcgaW4gdGhlIGZ1bmN0aW9uIGFsbG93aW5nIHRvIG92ZXJyaWRlIHRoZSBtZW1vcnkKICAgIGFsbG9jYXRpb24gcm91dGluZXMKCgoyLjIuMDogSnVseSAxNCAyMDAwOgogICAtIGFwcGxpZWQgYSBsb3Qgb2YgcG9ydGFiaWxpdHkgZml4ZXMKICAgLSBiZXR0ZXIgZW5jb2Rpbmcgc3VwcG9ydC9jbGVhbnVwIGFuZCBzYXZpbmcgKGNvbnRlbnQgaXMgbm93IGFsd2F5cwogICAgZW5jb2RlZCBpbiBVVEYtOCkKICAgLSB0aGUgSFRNTCBwYXJzZXIgbm93IGNvcnJlY3RseSBoYW5kbGVzIGVuY29kaW5ncwogICAtIGFkZGVkIHhtbEhhc1Byb3AoKQogICAtIGZpeGVkIGEgc2VyaW91cyBwcm9ibGVtIHdpdGggJiMzODsKICAgLSBwcm9wYWdhdGVkIHRoZSBmaXggdG8gRlRQIGNsaWVudAogICAtIGNsZWFudXAsIGJ1Z2ZpeGVzLCBldGMgLi4uCiAgIC0gQWRkZWQgYSBwYWdlIGFib3V0IGxpYnhtbCBJbnRlcm5hdGlvbmFsaXphdGlvbgogICAgc3VwcG9ydAoKCgoxLjguOTogIEp1bHkgOSAyMDAwOgogICAtIGZpeGVkIHRoZSBzcGVjIHRoZSBSUE1zIHNob3VsZCBiZSBiZXR0ZXIKICAgLSBmaXhlZCBhIHNlcmlvdXMgYnVnIGluIHRoZSBGVFAgaW1wbGVtZW50YXRpb24sIHJlbGVhc2VkIDEuOC45IHRvIHNvbHZlCiAgICBycG1maW5kIHVzZXJzIHByb2JsZW0KCgoyLjEuMTogSnVseSAxIDIwMDA6CiAgIC0gZml4ZXMgYSBjb3VwbGUgb2YgYnVncyBpbiB0aGUgMi4xLjAgcGFja2FnaW5nCiAgIC0gaW1wcm92ZW1lbnRzIG9uIHRoZSBIVE1MIHBhcnNlcgoKCjIuMS4wIGFuZCAxLjguODogSnVuZSAyOSAyMDAwOgogICAtIDEuOC44IGlzIG1vc3RseSBhIGNvbW1vZGl0eSBwYWNrYWdlIGZvciB1cGdyYWRpbmcgdG8gbGlieG1sMiBhY2NvcmRpbmcKICAgIHRvIG5ldyBpbnN0cnVjdGlvbnMuIEl0IGZpeGVzIGEgbmFzdHkgcHJvYmxlbQogICAgYWJvdXQgJiMzODsgY2hhcnJlZiBwYXJzaW5nCiAgIC0gMi4xLjAgYWxzbyBlYXNlIHRoZSB1cGdyYWRlIGZyb20gbGlieG1sIHYxIHRvIHRoZSByZWNlbnQgdmVyc2lvbi4gaXQKICAgIGFsc28gY29udGFpbnMgbnVtZXJvdXMgZml4ZXMgYW5kIGVuaGFuY2VtZW50czoKICAgIGFkZGVkIHhtbFN0b3BQYXJzZXIoKSB0byBzdG9wIHBhcnNpbmcKICAgICAgaW1wcm92ZWQgYSBsb3QgcGFyc2luZyBzcGVlZCB3aGVuIHRoZXJlIGlzIGxhcmdlIENEQVRBIGJsb2NzCiAgICAgIGluY2x1ZGVzIFhQYXRoIHBhdGNoZXMgcHJvdmlkZWQgYnkgUGljZGFyIFRlY2hub2xvZ3kKICAgICAgdHJpZWQgdG8gZml4IGFzIG11Y2ggYXMgcG9zc2libGUgRFREIHZhbGlkYXRpb24gYW5kIG5hbWVzcGFjZQogICAgICAgIHJlbGF0ZWQgcHJvYmxlbXMKICAgICAgb3V0cHV0IHRvIGEgZ2l2ZW4gZW5jb2RpbmcgaGFzIGJlZW4gYWRkZWQvdGVzdGVkCiAgICAgIGxvdCBvZiB2YXJpb3VzIGZpeGVzCiAgICAKICAgLSBhZGRlZCB4bWxTdG9wUGFyc2VyKCkgdG8gc3RvcCBwYXJzaW5nCiAgIC0gaW1wcm92ZWQgYSBsb3QgcGFyc2luZyBzcGVlZCB3aGVuIHRoZXJlIGlzIGxhcmdlIENEQVRBIGJsb2NzCiAgIC0gaW5jbHVkZXMgWFBhdGggcGF0Y2hlcyBwcm92aWRlZCBieSBQaWNkYXIgVGVjaG5vbG9neQogICAtIHRyaWVkIHRvIGZpeCBhcyBtdWNoIGFzIHBvc3NpYmxlIERURCB2YWxpZGF0aW9uIGFuZCBuYW1lc3BhY2UKICAgICAgICByZWxhdGVkIHByb2JsZW1zCiAgIC0gb3V0cHV0IHRvIGEgZ2l2ZW4gZW5jb2RpbmcgaGFzIGJlZW4gYWRkZWQvdGVzdGVkCiAgIC0gbG90IG9mIHZhcmlvdXMgZml4ZXMKCgoyLjAuMDogQXByIDEyIDIwMDA6CiAgIC0gRmlyc3QgcHVibGljIHJlbGVhc2Ugb2YgbGlieG1sMi4gSWYgeW91IGFyZSB1c2luZyBsaWJ4bWwsIGl0J3MgYSBnb29kCiAgICBpZGVhIHRvIGNoZWNrIHRoZSAxLnggdG8gMi54IHVwZ3JhZGUgaW5zdHJ1Y3Rpb25zLiBOT1RFOiB3aGlsZSBpbml0aWFsbHkKICAgIHNjaGVkdWxlZCBmb3IgQXByIDMgdGhlIHJlbGVhc2Ugb2NjdXJyZWQgb25seSBvbiBBcHIgMTIgZHVlIHRvIG1hc3NpdmUKICAgIHdvcmtsb2FkLgogICAtIFRoZSBpbmNsdWRlIGFyZSBub3cgbG9jYXRlZCB1bmRlciAkcHJlZml4L2luY2x1ZGUvbGlieG1sIChpbnN0ZWFkIG9mCiAgICAkcHJlZml4L2luY2x1ZGUvZ25vbWUteG1sKSwgdGhleSBhbHNvIGFyZSByZWZlcmVuY2VkIGJ5CiAgICAjaW5jbHVkZSA8bGlieG1sL3h4eC5oPgogICAgaW5zdGVhZCBvZgogICAgI2luY2x1ZGUgInh4eC5oIgogIAogICAtIGEgbmV3IFVSSSBtb2R1bGUgZm9yIHBhcnNpbmcgVVJJcyBhbmQgZm9sbG93aW5nIHN0cmljdGx5IFJGQyAyMzk2CiAgIC0gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIHVzZWQgYnkgbGlieG1sIGNhbiBub3cgYmUgb3ZlcmxvYWRlZAogICAgZHluYW1pY2FsbHkgYnkgdXNpbmcgeG1sTWVtU2V0dXAoKQogICAtIFRoZSBwcmV2aW91c2x5IENWUyBvbmx5IHRvb2wgdGVzdGVyIGhhcyBiZWVuIHJlbmFtZWQKICAgIHhtbGxpbnQgYW5kIGlzIG5vdyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgbGlieG1sMgogICAgcGFja2FnZQogICAtIFRoZSBJL08gaW50ZXJmYWNlIGhhcyBiZWVuIHJldmFtcGVkLiBUaGVyZSBpcyBub3cgd2F5cyB0byBwbHVnIGluCiAgICBzcGVjaWZpYyBJL08gbW9kdWxlcywgZWl0aGVyIGF0IHRoZSBVUkkgc2NoZW1lIGRldGVjdGlvbiBsZXZlbCB1c2luZwogICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcygpICBvciBieSBwYXNzaW5nIEkvTyBmdW5jdGlvbnMgd2hlbiBjcmVhdGluZyBhCiAgICBwYXJzZXIgY29udGV4dCB1c2luZyB4bWxDcmVhdGVJT1BhcnNlckN0eHQoKQogICAtIHRoZXJlIGlzIGEgQyBwcmVwcm9jZXNzb3IgbWFjcm8gTElCWE1MX1ZFUlNJT04gcHJvdmlkaW5nIHRoZSB2ZXJzaW9uCiAgICBudW1iZXIgb2YgdGhlIGxpYnhtbCBtb2R1bGUgaW4gdXNlCiAgIC0gYSBudW1iZXIgb2Ygb3B0aW9uYWwgZmVhdHVyZXMgb2YgbGlieG1sIGNhbiBub3cgYmUgZXhjbHVkZWQgYXQKICAgIGNvbmZpZ3VyZSB0aW1lIChGVFAvSFRUUC9IVE1ML1hQYXRoL0RlYnVnKQoKCjIuMC4wYmV0YTogTWFyIDE0IDIwMDA6CiAgIC0gVGhpcyBpcyBhIGZpcnN0IEJldGEgcmVsZWFzZSBvZiBsaWJ4bWwgdmVyc2lvbiAyCiAgIC0gSXQncyBhdmFpbGFibGUgb25seSBmcm9teG1sc29mdC5vcmcKICAgIEZUUCwgaXQncyBwYWNrYWdlZCBhcyBsaWJ4bWwyLTIuMC4wYmV0YSBhbmQgYXZhaWxhYmxlIGFzIHRhciBhbmQKICBSUE1zCiAgIC0gVGhpcyB2ZXJzaW9uIGlzIG5vdyB0aGUgaGVhZCBpbiB0aGUgR25vbWUgQ1ZTIGJhc2UsIHRoZSBvbGQgb25lIGlzCiAgICBhdmFpbGFibGUgdW5kZXIgdGhlIHRhZyBMSUJfWE1MXzFfWAogICAtIFRoaXMgaW5jbHVkZXMgYSB2ZXJ5IGxhcmdlIHNldCBvZiBjaGFuZ2VzLiBGcm9tIGEgIHByb2dyYW1tYXRpYyBwb2ludAogICAgb2YgdmlldyBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIG1vZGlmaWVkIHRvbyBtdWNoLCBjaGVjayB0aGUKICAgIHVwZ3JhZGUgcGFnZQoKICAgLSBTb21lIGludGVyZmFjZXMgbWF5IGNoYW5nZXMgKGVzcGVjaWFsbHkgYSBiaXQgYWJvdXQgZW5jb2RpbmcpLgogICAtIHRoZSB1cGRhdGVzIGluY2x1ZGVzOgogICAgZml4IEkxOE4gc3VwcG9ydC4gSVNPLUxhdGluLXgvVVRGLTgvVVRGLTE2IChuZWFybHkpIHNlZW1zIGNvcnJlY3RseQogICAgICAgIGhhbmRsZWQgbm93CiAgICAgIEJldHRlciBoYW5kbGluZyBvZiBlbnRpdGllcywgZXNwZWNpYWxseSB3ZWxsLWZvcm1lZG5lc3MgY2hlY2tpbmcKICAgICAgICBhbmQgcHJvcGVyIFBFcmVmIGV4dGVuc2lvbnMgaW4gZXh0ZXJuYWwgc3Vic2V0cwogICAgICBEVEQgY29uZGl0aW9uYWwgc2VjdGlvbnMKICAgICAgVmFsaWRhdGlvbiBub3cgY29ycmVjdGx5IGhhbmRsZSBlbnRpdGllcyBjb250ZW50CiAgICAgIGNoYW5nZQogICAgICAgIHN0cnVjdHVyZXMgdG8gYWNjb21tb2RhdGUgRE9NCiAgICAKICAgLSBmaXggSTE4TiBzdXBwb3J0LiBJU08tTGF0aW4teC9VVEYtOC9VVEYtMTYgKG5lYXJseSkgc2VlbXMgY29ycmVjdGx5CiAgICAgICAgaGFuZGxlZCBub3cKICAgLSBCZXR0ZXIgaGFuZGxpbmcgb2YgZW50aXRpZXMsIGVzcGVjaWFsbHkgd2VsbC1mb3JtZWRuZXNzIGNoZWNraW5nCiAgICAgICAgYW5kIHByb3BlciBQRXJlZiBleHRlbnNpb25zIGluIGV4dGVybmFsIHN1YnNldHMKICAgLSBEVEQgY29uZGl0aW9uYWwgc2VjdGlvbnMKICAgLSBWYWxpZGF0aW9uIG5vdyBjb3JyZWN0bHkgaGFuZGxlIGVudGl0aWVzIGNvbnRlbnQKICAgLSBjaGFuZ2UKICAgICAgICBzdHJ1Y3R1cmVzIHRvIGFjY29tbW9kYXRlIERPTQogICAtIFNlcmlvdXMgcHJvZ3Jlc3Mgd2VyZSBtYWRlIHRvd2FyZCBjb21wbGlhbmNlLCBoZXJlIGFyZSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0IGFnYWluc3QgdGhlCiAgICBPQVNJUyB0ZXN0c3VpdGUgKGV4Y2VwdCB0aGUgSmFwYW5lc2UgdGVzdHMgc2luY2UgSSBkb24ndCBzdXBwb3J0IHRoYXQKICAgIGVuY29kaW5nIHlldCkuIFRoaXMgVVJMIGlzIHJlYnVpbHQgZXZlcnkgY291cGxlIG9mIGhvdXJzIHVzaW5nIHRoZSBDVlMKICAgIGhlYWQgdmVyc2lvbi4KCgoxLjguNzogTWFyIDYgMjAwMDoKICAgLSBUaGlzIGlzIGEgYnVnIGZpeCByZWxlYXNlOgogICAtIEl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIGlnbm9yYWJsZSBibGFua3MgaGV1cmlzdGljIHVzZWQgYnkKICAgIGxpYnhtbC0xLngsIGEgbmV3IGZ1bmN0aW9uICB4bWxLZWVwQmxhbmtzRGVmYXVsdCgwKSB3aWxsIGFsbG93IHRoaXMuIE5vdGUKICAgIHRoYXQgZm9yIGFkaGVyZW5jZSB0byBYTUwgc3BlYywgdGhpcyBiZWhhdmlvdXIgd2lsbCBiZSBkaXNhYmxlZCBieQogICAgZGVmYXVsdCBpbiAyLnggLiBUaGUgc2FtZSBmdW5jdGlvbiB3aWxsIGFsbG93IHRvIGtlZXAgY29tcGF0aWJpbGl0eSBmb3IKICAgIG9sZCBjb2RlLgogICAtIEJsYW5rcyBpbiA8YT4gIDwvYT4gY29uc3RydWN0cyBhcmUgbm90IGlnbm9yZWQgYW55bW9yZSwKICAgIGF2b2lkaW5nIGhldXJpc3RpYyBpcyByZWFsbHkgdGhlIFJpZ2h0IFdheSA6LVwKICAgLSBUaGUgdW5jaGVja2VkIHVzZSBvZiBzbnByaW50ZiB3aGljaCB3YXMgYnJlYWtpbmcgbGlieG1sLTEuOC42CiAgICBjb21waWxhdGlvbiBvbiBzb21lIHBsYXRmb3JtcyBoYXMgYmVlbiBmaXhlZAogICAtIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBGaXhlZCAnIycgYW5kICc/JyBzdHJpcHBpbmcgd2hlbiBwcm9jZXNzaW5nCiAgVVJJcwoKCjEuOC42OiBKYW4gMzEgMjAwMDoKICAgLSBhZGRlZCBhIG5hbm9GVFAgdHJhbnNwb3J0IG1vZHVsZSwgZGVidWdnZWQgdW50aWwgdGhlIG5ldyB2ZXJzaW9uIG9mIHJwbWZpbmQgY2FuIHVzZQogICAgaXQgd2l0aG91dCB0cm91YmxlcwoKCjEuOC41OiBKYW4gMjEgMjAwMDoKICAgLSBhZGRpbmcgQVBJcyB0byBwYXJzZSBhIHdlbGwgYmFsYW5jZWQgY2h1bmsgb2YgWE1MIChwcm9kdWN0aW9uIFs0M10gY29udGVudCBvZiB0aGUKICAgIFhNTCBzcGVjKQogICAtIGZpeGVkIGEgaGlkZW91cyBidWcgaW4geG1sR2V0UHJvcCBwb2ludGVkIGJ5IFJ1bmUuRGp1cmh1dXNAZmFzdC5ubwogICAtIEpvZHkgR29sZGJlcmcgPGpnb2xkYmVyZ0Bob21lLmNvbT4gcHJvdmlkZWQgYW5vdGhlciBwYXRjaCB0cnlpbmcKICAgIHRvIHNvbHZlIHRoZSB6bGliIGNoZWNrcyBwcm9ibGVtcwogICAtIFRoZSBjdXJyZW50IHN0YXRlIGluIGdub21lIENWUyBiYXNlIGlzIGV4cGVjdGVkIHRvIHNoaXAgYXMgMS44LjUgd2l0aAogICAgZ251bWVyaWMgc29vbgoKCjEuOC40OiBKYW4gMTMgMjAwMDoKICAgLSBidWcgZml4ZXMsIHJlaW50cm9kdWNlZCB4bWxOZXdHbG9iYWxOcygpLCBmaXhlZCB4bWxOZXdOcygpCiAgIC0gYWxsIGV4aXQoKSBjYWxsIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIGxpYnhtbAogICAtIGZpeGVkIGEgcHJvYmxlbSB3aXRoIElOQ0xVREVfV0lOU09DSyBvbiBXSU4zMiBwbGF0Zm9ybQogICAtIGFkZGVkIG5ld0RvY0ZyYWdtZW50KCkKCgoxLjguMzogSmFuIDUgMjAwMDoKICAgLSBhIFB1c2ggaW50ZXJmYWNlIGZvciB0aGUgWE1MIGFuZCBIVE1MIHBhcnNlcnMKICAgLSBhIHNoZWxsLWxpa2UgaW50ZXJmYWNlIHRvIHRoZSBkb2N1bWVudCB0cmVlICh0cnkgdGVzdGVyIC0tc2hlbGwgOi0pCiAgIC0gbG90cyBvZiBidWcgZml4ZXMgYW5kIGltcHJvdmVtZW50IGFkZGVkIG92ZXIgWE1hcyBob2xpZGF5cwogICAtIGZpeGVkIHRoZSBEVEQgcGFyc2luZyBjb2RlIHRvIHdvcmsgd2l0aCB0aGUgeGh0bWwgRFRECiAgIC0gYWRkZWQgeG1sUmVtb3ZlUHJvcCgpLCB4bWxSZW1vdmVJRCgpIGFuZCB4bWxSZW1vdmVSZWYoKQogICAtIEZpeGVkIGJ1Z3MgaW4geG1sTmV3TnMoKQogICAtIEV4dGVybmFsIGVudGl0eSBsb2FkaW5nIGNvZGUgaGFzIGJlZW4gcmV2YW1wZWQsIG5vdyBpdCB1c2VzCiAgICB4bWxMb2FkRXh0ZXJuYWxFbnRpdHkoKSwgc29tZSBmaXggb24gZW50aXRpZXMgcHJvY2Vzc2luZyB3ZXJlIGFkZGVkCiAgIC0gY2xlYW5lZCB1cCBXSU4zMiBpbmNsdWRlcyBvZiBzb2NrZXQgc3R1ZmYKCgoxLjguMjogRGVjIDIxIDE5OTk6CiAgIC0gSSBnb3QgYW5vdGhlciBwcm9ibGVtIHdpdGggaW5jbHVkZXMgYW5kIEMrKywgSSBob3BlIHRoaXMgaXNzdWUgaXMgZml4ZWQKICAgIGZvciBnb29kIHRoaXMgdGltZQogICAtIEFkZGVkIGEgZmV3IHRyZWUgbW9kaWZpY2F0aW9uIGZ1bmN0aW9uczogeG1sUmVwbGFjZU5vZGUsCiAgICB4bWxBZGRQcmV2U2libGluZywgeG1sQWRkTmV4dFNpYmxpbmcsIHhtbE5vZGVTZXROYW1lIGFuZAogICAgeG1sRG9jU2V0Um9vdEVsZW1lbnQKICAgLSBUcmllZCB0byBpbXByb3ZlIHRoZSBIVE1MIG91dHB1dCB3aXRoIGhlbHAgZnJvbSBDaHJpcyBMYWhleQoKCgoxLjguMTogRGVjIDE4IDE5OTk6CiAgIC0gdmFyaW91cyBwYXRjaGVzIHRvIGF2b2lkIHRyb3VibGVzIHdoZW4gdXNpbmcgbGlieG1sIHdpdGggQysrIGNvbXBpbGVycwogICAgdGhlICJuYW1lc3BhY2UiIGtleXdvcmQgYW5kIEMgZXNjYXBpbmcgaW4gaW5jbHVkZSBmaWxlcwogICAtIGEgcHJvYmxlbSBpbiBvbmUgb2YgdGhlIGNvcmUgbWFjcm9zIElTX0NIQVIgd2FzIGNvcnJlY3RlZAogICAtIGZpeGVkIGEgYnVnIGludHJvZHVjZWQgaW4gMS44LjAgYnJlYWtpbmcgZGVmYXVsdCBuYW1lc3BhY2UgcHJvY2Vzc2luZywKICAgIGFuZCBtb3JlIHNwZWNpZmljYWxseSB0aGUgRGlhIGFwcGxpY2F0aW9uCiAgIC0gZml4ZWQgYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24gKHZhbGlkYXRpb24gYWZ0ZXIgcGFyc2luZywgb3IgYnkgdXNpbmcgYQogICAgRHRkIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG9yaWdpbmFsIGRvY3VtZW50KQogICAtIGZpeGVkIGEgYnVnIGluCgoKMS44LjA6IERlYyAxMiAxOTk5OgogICAtIGNsZWFudXAsIGVzcGVjaWFsbHkgbWVtb3J5IHdpc2UKICAgLSB0aGUgcGFyc2VyIHNob3VsZCBiZSBtb3JlIHJlbGlhYmxlLCBlc3BlY2lhbGx5IHRoZSBIVE1MIG9uZSwgaXQgc2hvdWxkCiAgICBub3QgY3Jhc2gsIHdoYXRldmVyIHRoZSBpbnB1dCAhCiAgIC0gSW50ZWdyYXRlZCB2YXJpb3VzIHBhdGNoZXMsIGVzcGVjaWFsbHkgYSBzcGVlZHVwIGltcHJvdmVtZW50IGZvciBsYXJnZQogICAgZGF0YXNldCBmcm9tIENhcmwgTnlnYXJkLAogICAgY29uZmlndXJlIHdpdGggLS13aXRoLWJ1ZmZlcnMgdG8gZW5hYmxlIHRoZW0uCiAgIC0gYXR0cmlidXRlIG5vcm1hbGl6YXRpb24sIG9vcHMgc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCBsb25nIGFnbyAhCiAgIC0gYXR0cmlidXRlcyBkZWZhdWx0ZWQgZnJvbSBEVERzIHNob3VsZCBiZSBhdmFpbGFibGUsIHhtbFNldFByb3AoKSBub3cKICAgIGRvZXMgZW50aXRpZXMgZXNjYXBpbmcgYnkgZGVmYXVsdC4KCgoxLjcuNDogT2N0IDI1IDE5OTk6CiAgIC0gTG90cyBvZiBIVE1MIGltcHJvdmVtZW50CiAgIC0gRml4ZWQgc29tZSBlcnJvcnMgd2hlbiBzYXZpbmcgYm90aCBYTUwgYW5kIEhUTUwKICAgLSBNb3JlIGV4YW1wbGVzLCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBzaG91bGQgbm93IGxvb2sgY2xlYW4KICAgLSBGaXhlZCBhIGJ1ZyB3aXRoIGNvbnRpZ3VvdXMgY2hhcnJlZgoKCjEuNy4zOiBTZXAgMjkgMTk5OToKICAgLSBwb3J0YWJpbGl0eSBwcm9ibGVtcyBmaXhlZAogICAtIHNucHJpbnRmIHdhcyB1c2VkIHVuY29uZGl0aW9uYWxseSwgbGVhZGluZyB0byBsaW5rIHByb2JsZW1zIG9uIHN5c3RlbQogICAgd2VyZSBpdCdzIG5vdCBhdmFpbGFibGUsIGZpeGVkCgoKMS43LjE6IFNlcCAyNCAxOTk5OgogICAtIFRoZSBiYXNpYyB0eXBlIGZvciBzdHJpbmdzIG1hbmlwdWxhdGVkIGJ5IGxpYnhtbCBoYXMgYmVlbiByZW5hbWVkIGluCiAgICAxLjcuMSBmcm9tIENIQVIgdG8geG1sQ2hhci4gVGhlIHJlYXNvbgogICAgaXMgdGhhdCBDSEFSIHdhcyBjb25mbGljdGluZyB3aXRoIGEgcHJlZGVmaW5lZCB0eXBlIG9uIFdpbmRvd3MuIEhvd2V2ZXIKICAgIG9uIG5vbiBXSU4zMiBlbnZpcm9ubWVudCwgY29tcGF0aWJpbGl0eSBpcyBwcm92aWRlZCBieSB0aGUgd2F5IG9mICBhCiAgICAjZGVmaW5lIC4KICAgLSBDaGFuZ2VkIGFub3RoZXIgZXJyb3IgOiB0aGUgdXNlIG9mIGEgc3RydWN0dXJlIGZpZWxkIGNhbGxlZCBlcnJubywgYW5kCiAgICBsZWFkaW5nIHRvIHRyb3VibGVzIG9uIHBsYXRmb3JtcyB3aGVyZSBpdCdzIGEgbWFjcm8KCgoxLjcuMDogU2VwIDIzIDE5OTk6CiAgIC0gQWRkZWQgdGhlIGFiaWxpdHkgdG8gZmV0Y2ggcmVtb3RlIERURCBvciBwYXJzZWQgZW50aXRpZXMsIHNlZSB0aGUgbmFub2h0dHAgbW9kdWxlLgogICAtIEFkZGVkIGFuIGVycm5vIHRvIHJlcG9ydCBlcnJvcnMgYnkgYW5vdGhlciBtZWFuIHRoYW4gYSBzaW1wbGUgcHJpbnRmCiAgICBsaWtlIGNhbGxiYWNrCiAgIC0gRmluaXNoZWQgSUQvSURSRUYgc3VwcG9ydCBhbmQgY2hlY2tpbmcgd2hlbiB2YWxpZGF0aW9uCiAgIC0gU2VyaW91cyBtZW1vcnkgbGVha3MgZml4ZWQgKHRoZXJlIGlzIG5vdyBhIG1lbW9yeSB3cmFwcGVyIG1vZHVsZSkKICAgLSBJbXByb3ZlbWVudCBvZiBYUGF0aAogICAgaW1wbGVtZW50YXRpb24KICAgLSBBZGRlZCBhbiBIVE1MIHBhcnNlciBmcm9udC1lbmQKCkRhbmllbCBWZWlsbGFyZCBhdCAKYnVncy5odG1sCgo=