CiAgICAgICAgTkVXUyBmaWxlIGZvciBsaWJ4bWwyCgogIE5vdGUgdGhhdCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIG5ld3Mgd2VicGFnZSBhdDoKICAgICAgIGh0dHA6Ly94bWxzb2Z0Lm9yZy9uZXdzLmh0bWwKCgoKQ1ZTIG9ubHkgOiBjaGVjayB0aGUgQ2hhbmdlbG9nIGF0IApodHRwOi8vY3ZzLmdub21lLm9yZy9seHIvc291cmNlL2dub21lLXhtbC9DaGFuZ2VMb2cKIGZpbGUKZm9yIGEgcmVhbGx5IGFjY3VyYXRlIGRlc2NyaXB0aW9uOgpJdGVtcyBub3QgZmluaXNoZWQgYW5kIHdvcmtlZCBvbiwgZ2V0IGluIHRvdWNoIHdpdGggdGhlIGxpc3QgaWYgeW91IHdhbnQKdG8gdGVzdCB0aG9zZQogICAtIE1vcmUgdGVzdGluZyBvbiBSZWxheE5HCiAgIC0gRmluaXNoaW5nIHVwIFhNTAogIFNjaGVtYXMKCgoKMi41LjY6IEFwciAxIDIwMDM6CiAgIC0gRml4ZWQgVzNDIFhNTCBTY2hlbWFzIGRhdGF0eXBlLCBzaG91bGQgYmUgY29tcGxpYW50IG5vdyBleGNlcHQgZm9yCiAgICBiaW5IZXggYW5kIGJhc2U2NCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCiAgIC0gYnVnIGZpeGVzOiBub24tQVNDSUkgSURzLCBIVE1MIG91dHB1dCwgWEluY2x1ZGUgb24gbGFyZ2UgZG9jcyBhbmQKICAgIFhJbmNsdWRlIGVudGl0aWVzIGhhbmRsaW5nLCBlbmNvZGluZyBkZXRlY3Rpb24gb24gZXh0ZXJuYWwgc3Vic2V0cywgWE1MCiAgICBTY2hlbWFzIGJ1Z3MgYW5kIG1lbW9yeSBsZWFrcywgSFRNTCBwYXJzZXIgKEphbWVzIEJ1cnNhKQogICAtIHBvcnRhYmlsaXR5OiBweXRob24vdHJpbyAoQWxiZXJ0IENoaW4pLCBTdW4gY29tcGlsZXIgd2FybmluZ3MKICAgLSBkb2N1bWVudGF0aW9uOiBhZGRlZCAtLXJlbGF4bmcgb3B0aW9uIHRvIHhtbGxpbnQgbWFuIHBhZ2UgKEpvaG4pCiAgIC0gaW1wcm92ZWQgZXJyb3IgcmVwb3J0aW5nOiB4bWw6c3BhY2UsIHN0YXJ0L2VuZCB0YWcgbWlzbWF0Y2hlcywgUmVsYXggTkcKICAgIGVycm9ycwoKCjIuNS41OiBNYXIgMjQgMjAwMzoKICAgLSBMb3Qgb2YgZml4ZXMgb24gdGhlIFJlbGF4IE5HIGltcGxlbWVudGF0aW9uLiBNb3JlIHRlc3RpbmcgaW5jbHVkaW5nCiAgICBEb2NCb29rIGFuZCBURUkgZXhhbXBsZXMuCiAgIC0gSW5jcmVhc2VkIHRoZSBzdXBwb3J0IGZvciBXM0MgWE1MIFNjaGVtYXMgZGF0YXR5cGUKICAgLSBTZXZlcmFsIGJ1ZyBmaXhlcyBpbiB0aGUgVVJJIGhhbmRsaW5nIGxheWVyCiAgIC0gQnVnIGZpeGVzOiBIVE1MIHBhcnNlciwgeG1sUmVhZGVyLCBEVEQgdmFsaWRhdGlvbiwgWFBhdGgsIGVuY29kaW5nCiAgICBjb252ZXJzaW9uLCBsaW5lIGNvdW50aW5nIGluIHRoZSBwYXJzZXIuCiAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgJFhNTExJTlRfSU5ERU5UIGVudmlyb25tZW50IHZhcmlhYmxlLCBGVFAgZGVsZXRlCiAgIC0gRml4ZWQgdGhlIFJQTSBzcGVjIGZpbGUgbmFtZQoKCjIuNS40OiBGZWIgMjAgMjAwMzoKICAgLSBDb25mb3JtYW5jZSB0ZXN0aW5nIGFuZCBsb3Qgb2YgZml4ZXMgb24gUmVsYXggTkcgYW5kIFhJbmNsdWRlCiAgICBpbXBsZW1lbnRhdGlvbgogICAtIEltcGxlbWVudGF0aW9uIG9mIFhQb2ludGVyIGVsZW1lbnQoKSBzY2hlbWUKICAgLSBCdWcgZml4ZXM6IFhNTCBwYXJzZXIsIFhJbmNsdWRlIGVudGl0aWVzIG1lcmdlLCB2YWxpZGl0eSBjaGVja2luZyBvbgogICAgbmFtZXNwYWNlcywKICAgIDIgc2VyaWFsaXphdGlvbiBidWdzLCBub2RlIGluZm8gZ2VuZXJhdGlvbiBwcm9ibGVtcywgYSBEVEQgcmVnZXhwCiAgICBnZW5lcmF0aW9uIHByb2JsZW0uCiAgCiAgIC0gUG9ydGFiaWxpdHk6IHdpbmRvd3MgdXBkYXRlcyBhbmQgcGF0aCBjYW5vbmljYWxpemF0aW9uIChJZ29yKQogICAtIEEgZmV3IHR5cG8gZml4ZXMgKEtqYXJ0YW4gTWFyYWFzKQogICAtIFB5dGhvbiBiaW5kaW5ncyBnZW5lcmF0b3IgZml4ZXMgKFN0ZXBoYW5lIEJpZG91bCkKCgoyLjUuMzogRmViIDEwIDIwMDM6CiAgIC0gUmVsYXhORyBhbmQgWE1MIFNjaGVtYXMgZGF0YXR5cGVzIGltcHJvdmVtZW50cywgYW5kIGFkZGVkIGEgZmlyc3QKICAgIHZlcnNpb24gb2YgUmVsYXhORyBQeXRob24gYmluZGluZ3MKICAgLSBGaXhlczogWExpbmsgKFNlYW4gQ2hpdHRlbmRlbiksIFhJbmNsdWRlIChTZWFuIENoaXR0ZW5kZW4pLCBBUEkgZml4IGZvcgogICAgc2VyaWFsaXppbmcgbmFtZXNwYWNlIG5vZGVzLCBlbmNvZGluZyBjb252ZXJzaW9uIGJ1ZywgWEhUTUwxCiAgc2VyaWFsaXphdGlvbgogICAtIFBvcnRhYmlsaXR5IGZpeGVzOiBXaW5kb3dzIChJZ29yKSwgQU1EIDY0Yml0cyBSUE0gc3BlYyBmaWxlCgoKMi41LjI6IEZlYiA1IDIwMDM6CiAgIC0gRmlyc3QgaW1wbGVtZW50YXRpb24gb2YgUmVsYXhORywgYWRkZWQgLS1yZWxheG5nIGZsYWcgdG8geG1sbGludAogICAtIFNjaGVtYXMgc3VwcG9ydCBub3cgY29tcGlsZWQgaW4gYnkgZGVmYXVsdC4KICAgLSBCdWcgZml4ZXM6IERURCB2YWxpZGF0aW9uLCBuYW1lc3BhY2UgY2hlY2tpbmcsIFhJbmNsdWRlIGFuZCBlbnRpdGllcywKICAgIGRlbGVnYXRlVVJJIGluIFhNTCBDYXRhbG9ncywgSFRNTCBwYXJzZXIsIFhNTCByZWFkZXIgKFN06XBoYW5lIEJpZG91bCksCiAgICBYUGF0aCBwYXJzZXIgYW5kIGV2YWx1YXRpb24sICBVVEY4VG9VVEY4IHNlcmlhbGl6YXRpb24sIFhNTCByZWFkZXIgbWVtb3J5CiAgICBjb25zdW1wdGlvbiwgSFRNTCBwYXJzZXIsIEhUTUwgc2VyaWFsaXphdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YKICBuYW1lc3BhY2VzCiAgIC0gYWRkZWQgYW4gSFRNTCBBUEkgdG8gY2hlY2sgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCiAgIC0gRG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudCwgUERGIGZvciB0aGUgdHV0b3JpYWwgKEpvaG4gRmxlY2spLCBkb2MKICAgIHBhdGNoZXMgKFN0ZWZhbiBLb3N0KQogICAtIFBvcnRhYmlsaXR5IGZpeGVzOiBOZXRCU0QgKEp1bGlvIE1lcmlubyksIFdpbmRvd3MgKElnb3IgWmxhdGtvdmljKQogICAtIEFkZGVkIHB5dGhvbiBiaW5kaW5ncyBmb3IgWFBvaW50ZXIsIGNvbnRleHR1YWwgZXJyb3IgcmVwb3J0aW5nCiAgICAoU3TpcGhhbmUgQmlkb3VsKQogICAtIFVSSS9maWxlIGVzY2FwaW5nIHByb2JsZW1zIChTdGVmYW5vIFphY2NoaXJvbGkpCgoKMi41LjE6IEphbiA4IDIwMDM6CiAgIC0gRml4ZXMgYSBtZW1vcnkgbGVhayBhbmQgY29uZmlndXJhdGlvbi9jb21waWxhdGlvbiBwcm9ibGVtcyBpbiAyLjUuMAogICAtIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoSm9obikKICAgLSBhIGNvdXBsZSBvZiBYbWxUZXh0UmVhZGVyIGZpeGVzCgoKMi41LjA6IEphbiA2IDIwMDM6CiAgIC0gTmV3IFhtbHRleHRSZWFkZXIgaW50ZXJmYWNlIGJhc2VkIG9uIEMjCiAgICBBUEkgKHdpdGggaGVscCBvZiBTdOlwaGFuZSBCaWRvdWwpCiAgIC0gV2luZG93czogbW9yZSBleHBvcnRzLCBpbmNsdWRpbmcgdGhlIG5ldyBBUEkgKElnb3IpCiAgIC0gWEluY2x1ZGUgZmFsbGJhY2sgZml4CiAgIC0gUHl0aG9uOiBiaW5kaW5ncyBmb3IgdGhlIG5ldyBBUEksIHBhY2thZ2luZyAoU3TpcGhhbmUgQmlkb3VsKSwKICAgIGRydl9saWJ4bWwyLnB5IFB5dGhvbiB4bWwuc2F4IGRyaXZlciAoU3TpcGhhbmUgQmlkb3VsKSwgZml4ZXMsIHNwZWVkdXAKICAgIGFuZCBpdGVyYXRvcnMgZm9yIFB5dGhvbi0yLjIgKEhhbm51IEtyb3NpbmcpCiAgIC0gVHV0b3JpYWwgZml4ZXMgKGpvaG4gRmxlY2sgYW5kIE5pcmFqIFRvbGlhKSB4bWxsaW50IG1hbiB1cGRhdGUKICAoSm9obikKICAgLSBGaXggYW4gWE1MIHBhcnNlciBidWcgcmFpc2VkIGJ5IFZ5YWNoZXNsYXYgUGluZHl1cmEKICAgLSBGaXggZm9yIFZNUyBzZXJpYWxpemF0aW9uIChOaWdlbCBIYWxsKSBhbmQgY29uZmlnIChDcmFpZyBBLiBCZXJyeSkKICAgLSBFbnRpdGllcyBoYW5kbGluZyBmaXhlcwogICAtIG5ldyBBUEkgdG8gb3B0aW9uYWxseSB0cmFjayBub2RlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiAoTHVrYXMKICBTY2hyb2VkZXIpCiAgIC0gQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFhtbHRleHRSZWFkZXIgaW50ZXJmYWNlIGFuZCBzb21lIFhNTCBndWlkZWxpbmVzCgoKCjIuNC4zMDogRGVjIDEyIDIwMDI6CiAgIC0gMi40LjI5IGJyb2tlIHRoZSBweXRob24gYmluZGluZ3MsIHJlcmVsZWFzaW5nCiAgIC0gSW1wcm92ZW1lbnQvZml4ZXMgb2YgdGhlIFhNTCBBUEkgZ2VuZXJhdG9yLCBhbmQgY291cGxlIG9mIG1pbm9yIGNvZGUKICAgIGZpeGVzLgoKCjIuNC4yOTogRGVjIDExIDIwMDI6CiAgIC0gV2luZG93cyBmaXhlcyAoSWdvcik6IFdpbmRvd3MgQ0UgcG9ydCwgcHRocmVhZCBsaW5raW5nLCBweXRob24gYmluZGluZ3MKICAgIChTdOlwaGFuZSBCaWRvdWwpLCBNaW5ndyAoTWFnbnVzIEhlbm9jaCksIGFuZCBleHBvcnQgbGlzdCB1cGRhdGVzCiAgIC0gRml4IGZvciBwcmV2IGluIHB5dGhvbiBiaW5kaW5ncyAoRVJESSBHZXJnbykKICAgLSBGaXggZm9yIGVudGl0aWVzIGhhbmRsaW5nIChNYXJjdXMgQ2xhcmtlKQogICAtIFJlZmFjdG9yZWQgdGhlIFhNTCBhbmQgSFRNTCBkdW1wcyB0byBhIHNpbmdsZSBjb2RlIHBhdGgsIGZpeGVkIFhIVE1MMQogICAgZHVtcAogICAtIEZpeCBmb3IgVVJJIHBhcnNpbmcgd2hlbiBoYW5kbGluZyBVUk5zIHdpdGggZnJhZ21lbnQgaWRlbnRpZmllcnMKICAgLSBGaXggZm9yIEhUVFAgVVJMIGVzY2FwaW5nIHByb2JsZW0KICAgLSBhZGRlZCBhbiBUZXh0WG1sUmVhZGVyIChDIykgbGlrZSBBUEkgKHdvcmsgaW4gcHJvZ3Jlc3MpCiAgIC0gUmV3cm90ZSB0aGUgQVBJIGluIFhNTCBnZW5lcmF0aW9uIHNjcmlwdCwgaW5jbHVkZXMgYSBDIHBhcnNlciBhbmQgc2F2ZXMKICAgIG1vcmUgaW5mb3JtYXRpb25zIG5lZWRlZCBmb3IgQyMgYmluZGluZ3MKCgoyLjQuMjg6IE5vdiAyMiAyMDAyOgogICAtIGEgY291cGxlIG9mIHB5dGhvbiBiaW5kaW5nIGZpeGVzCiAgIC0gMiBidWcgZml4ZXMgaW4gdGhlIFhNTCBwdXNoIHBhcnNlcgogICAtIHBvdGVudGlhbCBtZW1vcnkgbGVhayByZW1vdmVkIChNYXJ0aW4gU3RvaWxvdikKICAgLSBmaXggdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIFVuaXggKERpbWl0cmkgUGFwYWRvcG91bG9zKQogICAtIGFkZGVkIGVuY29kaW5nIHN1cHBvcnQgZm9yIFhJbmNsdWRlIHBhcnNlPSJ0ZXh0IgogICAtIGF1dG9kZXRlY3Rpb24gb2YgWEhUTUwxIGFuZCBzcGVjaWZpYyBzZXJpYWxpemF0aW9uIHJ1bGVzIGFkZGVkCiAgIC0gbmFzdHkgdGhyZWFkaW5nIGJ1ZyBmaXhlZCAoV2lsbGlhbSBCcmFjaykKCgoyLjQuMjc6IE5vdiAxNyAyMDAyOgogICAtIGZpeGVzIGZvciB0aGUgUHl0aG9uIGJpbmRpbmdzCiAgIC0gYSBudW1iZXIgb2YgYnVnIGZpeGVzOiBTR01MIGNhdGFsb2dzLCB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnkoKSwKICAgIEhUTUwgcGFyc2VyLCAgU2NoZW1hcyAoQ2hhcmxlcyBCb3plbWFuKSwgZG9jdW1lbnQgZnJhZ21lbnQgc3VwcG9ydAogICAgKENocmlzdGlhbiBHbGFobiksIHhtbFJlY29uY2lsaWF0ZU5zIChCcmlhbiBTdGFmZm9yZCksIFhQb2ludGVyLAogICAgeG1sRnJlZU5vZGUoKSwgeG1sU0FYUGFyc2VNZW1vcnkgKFBldGVyIEpvbmVzKSwgeG1sR2V0Tm9kZVBhdGggKFBldHIKICAgIFBhamFzKSwgZW50aXRpZXMgcHJvY2Vzc2luZwogICAtIGFkZGVkIGdyZXAgdG8geG1sbGludCAtLXNoZWxsCiAgIC0gVk1TIHVwZGF0ZSBwYXRjaCBmcm9tIENyYWlnIEEuIEJlcnJ5CiAgIC0gY2xlYW51cCBvZiB0aGUgV2luZG93cyBidWlsZCB3aXRoIHN1cHBvcnQgZm9yIG1vcmUgY29tcGlsZXJzIChJZ29yKSwKICAgIGJldHRlciB0aHJlYWQgc3VwcG9ydCBvbiBXaW5kb3dzCiAgIC0gY2xlYW51cCBvZiBVbml4IE1ha2VmaWxlcyBhbmQgc3BlYyBmaWxlCiAgIC0gSW1wcm92ZW1lbnRzIHRvIHRoZSBkb2N1bWVudGF0aW9uIChKb2huIEZsZWNrKQoKCjIuNC4yNjogT2N0IDE4IDIwMDI6CiAgIC0gUGF0Y2hlcyBmb3IgV2luZG93cyBDRSBwb3J0LCBpbXByb3ZlbWVudHMgb24gV2luZG93cyBwYXRocyBoYW5kbGluZwogICAtIEZpeGVzIHRvIHRoZSB2YWxpZGF0aW9uICBjb2RlIChEVEQgYW5kIFNjaGVtYXMpLCB4bWxOb2RlR2V0UGF0aCgpICwKICAgIEhUTUwgc2VyaWFsaXphdGlvbiwgTmFtZXNwYWNlIGNvbXBsaWFuY2UsICBhbmQgYSBudW1iZXIgb2Ygc21hbGwKICBwcm9ibGVtcwoKCjIuNC4yNTogU2VwIDI2IDIwMDI6CiAgIC0gQSBudW1iZXIgb2YgYnVnIGZpeGVzOiBYUGF0aCwgdmFsaWRhdGlvbiwgUHl0aG9uIGJpbmRpbmdzLCBET00gYW5kCiAgICB0cmVlLCB4bWxJL08sICBIdG1sCiAgIC0gU2VyaW91cyByZXdyaXRlIG9mIFhJbmNsdWRlCiAgIC0gTWFkZSBYTUwgU2NoZW1hcyByZWdleHAgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCBhbmQgQVBJcywgc21hbGwgZml4CiAgICBhbmQgaW1wcm92ZW1lbnQgb2YgdGhlIHJlZ2V4cCBjb3JlCiAgIC0gQ2hhbmdlZCB0aGUgdmFsaWRhdGlvbiBjb2RlIHRvIHJldXNlIFhNTCBTY2hlbWFzIHJlZ2V4cCBBUElzCiAgIC0gQmV0dGVyIGhhbmRsaW5nIG9mIFdpbmRvd3MgZmlsZSBwYXRocywgaW1wcm92ZW1lbnQgb2YgTWFrZWZpbGVzIChJZ29yLAogICAgRGFuaWVsIEdlaHJpZ2VyLCBNYXJrIFZha29jKQogICAtIEltcHJvdmVkIHRoZSBweXRob24gSS9PIGJpbmRpbmdzLCB0aGUgdGVzdHMsIGFkZGVkIHJlc29sdmVyIGFuZCByZWdleHAKICAgIEFQSXMKICAgLSBOZXcgbG9nb3MgZnJvbSBNYXJjIExpeWFuYWdlCiAgIC0gVHV0b3JpYWwgaW1wcm92ZW1lbnRzOiBKb2huIEZsZWNrLCBDaHJpc3RvcGhlciBIYXJyaXMKICAgLSBNYWtlZmlsZTogRml4ZXMgZm9yIEFNRCB4ODZfNjQgKE1hbmRyYWtlKSwgREVTVERJUiAoQ2hyaXN0b3BoZQogIE1lcmxldCkKICAgLSByZW1vdmFsIG9mIGFsbCBzdGRlcnIvcGVycm9yIHVzZSBmb3IgZXJyb3IgcmVwb3J0aW5nCiAgIC0gQmV0dGVyIGVycm9yIHJlcG9ydGluZzogWFBhdGggYW5kIERURCB2YWxpZGF0aW9uCiAgIC0gdXBkYXRlIG9mIHRoZSB0cmlvIHBvcnRhYmlsaXR5IGxheWVyIChCam9ybiBSZWVzZSkKCjIuNC4yNDogQXVnIDIyIDIwMDIKICAgLSBYUGF0aCBmaXhlcyAoV2lsbGlhbSksIHhmOmVzY2FwZS11cmkoKSAoV2VzbGV5IFRlcnBzdHJhKQogICAtIFB5dGhvbiBiaW5kaW5nIGZpeGVzOiBtYWtlZmlsZXMgKFdpbGxpYW0pLCBnZW5lcmF0b3IsIHJwbSBidWlsZCwgeDg2LTY0CiAgICAoZmNyb3phdCkKICAgLSBIVE1MIDxzdHlsZT4gYW5kIGJvb2xlYW4gYXR0cmlidXRlcyBzZXJpYWxpemVyIGZpeGVzCiAgIC0gQzE0TiBpbXByb3ZlbWVudHMgYnkgQWxla3NleQogICAtIGRvYyBjbGVhbnVwczogUmljayBKb25lcwogICAtIFdpbmRvd3MgY29tcGlsZXIgbWFrZWZpbGUgdXBkYXRlczogSWdvciBhbmQgRWxpemFiZXRoIEJhcmhhbQogICAtIFhJbmNsdWRlOiBpbXBsZW1lbnRhdGlvbiBvZiBmYWxsYmFjayBhbmQgeG1sOmJhc2UgZml4dXAgYWRkZWQKCgoyLjQuMjM6IEp1bHkgNiAyMDAyOgogICAtIHBlcmZvcm1hbmNlcyBwYXRjaGVzOiBQZXRlciBKYWNvYmkKICAgLSBjMTRuIGZpeGVzLCB0ZXN0c3VpdGUgYW5kIHBlcmZvcm1hbmNlczogQWxla3NleSBTYW5pbgogICAtIGFkZGVkIHhtbERvY0Zvcm1hdER1bXA6IENoZW1hIENlbG9yaW8KICAgLSBuZXcgdHV0b3JpYWw6IEpvaG4gRmxlY2sKICAgLSBuZXcgaGFzaCBmdW5jdGlvbnMgYW5kIHBlcmZvcm1hbmNlczogU2FuZGVyIFZlc2lrLCBwb3J0YWJpbGl0eSBmaXggZnJvbQogICAgUGV0ZXIgSmFjb2JpCiAgIC0gYSBudW1iZXIgb2YgYnVnIGZpeGVzOiBYUGF0aCAoV2lsbGlhbSBCcmFjaywgUmljaGFyZCBKaW5rcyksIFhNTCBhbmQKICAgIEhUTUwgcGFyc2VycywgSUQgbG9va3VwIGZ1bmN0aW9uCiAgIC0gcmVtb3ZhbCBvZiBhbGwgcmVtYWluaW5nIHNwcmludGY6IEFsZWtzZXkgU2FuaW4KCgoyLjQuMjI6IE1heSAyNyAyMDAyOgogICAtIGEgbnVtYmVyIG9mIGJ1ZyBmaXhlczogY29uZmlndXJlIHNjcmlwdHMsIGJhc2UgaGFuZGxpbmcsIHBhcnNlciwgbWVtb3J5CiAgICB1c2FnZSwgSFRNTCBwYXJzZXIsIFhQYXRoLCBkb2N1bWVudGF0aW9uIChDaHJpc3RpYW4gQ29ybmVsc3NlbiksCiAgICBpbmRlbnRhdGlvbiwgVVJJIHBhcnNpbmcKICAgLSBPcHRpbWl6YXRpb25zIGZvciBYTUxTZWMsIGZpeGluZyBhbmQgbWFraW5nIHB1YmxpYyBzb21lIG9mIHRoZSBuZXR3b3JrCiAgICBwcm90b2NvbCBoYW5kbGVycyAoQWxla3NleSkKICAgLSBwZXJmb3JtYW5jZSBwYXRjaCBmcm9tIEdhcnkgUGVubmluZ3RvbgogICAtIENoYXJsZXMgQm96ZW1hbiBwcm92aWRlZCBkYXRlIGFuZCB0aW1lIHN1cHBvcnQgZm9yIFhNTCBTY2hlbWFzCiAgZGF0YXR5cGVzCgoKMi40LjIxOiBBcHIgMjkgMjAwMjoKVGhpcyByZWxlYXNlIGlzIGJvdGggYSBidWcgZml4IHJlbGVhc2UgYW5kIGFsc28gY29udGFpbnMgdGhlIGVhcmx5IFhNTApTY2hlbWFzIHN0cnVjdHVyZXMgYXQgCmh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLwogYW5kIGRhdGF0eXBlcyBhdCAKaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvCiBjb2RlLCBiZXdhcmUsIGFsbAppbnRlcmZhY2VzIGFyZSBsaWtlbHkgdG8gY2hhbmdlLCB0aGVyZSBpcyBodWdlIGhvbGVzLCBpdCBpcyBjbGVhcmx5IGEgd29yayBpbgpwcm9ncmVzcyBhbmQgZG9uJ3QgZXZlbiB0aGluayBvZiBwdXR0aW5nIHRoaXMgY29kZSBpbiBhIHByb2R1Y3Rpb24gc3lzdGVtLAppdCdzIGFjdHVhbGx5IG5vdCBjb21waWxlZCBpbiBieSBkZWZhdWx0LiBUaGUgcmVhbCBmaXhlcyBhcmU6CiAgIC0gYSBjb3VwbGUgb2YgYnVncyBvciBsaW1pdGF0aW9ucyBpbnRyb2R1Y2VkIGluIDIuNC4yMAogICAtIHBhdGNoZXMgZm9yIEJvcmxhbmQgQysrIGFuZCBNU0MgYnkgSWdvcgogICAtIHNvbWUgZml4ZXMgb24gWFBhdGggc3RyaW5ncyBhbmQgY29uZm9ybWFuY2UgcGF0Y2hlcyBieSBSaWNoYXJkCiAgSmlua3MKICAgLSBwYXRjaCBmcm9tIEFsZWtzZXkgZm9yIHRoZSBFeGNDMTROIHNwZWNpZmljYXRpb24KICAgLSBPU0YvMSBidWcgZml4IGJ5IEJqb3JuCgoKMi40LjIwOiBBcHIgMTUgMjAwMjoKICAgLSBidWcgZml4ZXM6IGZpbGUgZGVzY3JpcHRvciBsZWFrLCBYUGF0aCwgSFRNTCBvdXRwdXQsIERURCB2YWxpZGF0aW9uCiAgIC0gWFBhdGggY29uZm9ybWFuY2UgdGVzdGluZyBieSBSaWNoYXJkIEppbmtzCiAgIC0gUG9ydGFiaWxpdHkgZml4ZXM6IFNvbGFyaXMsIE1QRS9pWCwgV2luZG93cywgT1NGLzEsIHB5dGhvbiBiaW5kaW5ncywKICAgIGxpYnhtbC5tNAoKCjIuNC4xOTogTWFyIDI1IDIwMDI6CiAgIC0gYnVnIGZpeGVzOiBoYWxmIGEgZG96ZW4gWFBhdGggYnVncywgVmFsaWRhdGlvbiwgSVNPLUxhdGluIHRvIFVURjgKICAgIGVuY29kZXIKICAgLSBwb3J0YWJpbGl0eSBmaXhlcyBpbiB0aGUgSFRUUCBjb2RlCiAgIC0gbWVtb3J5IGFsbG9jYXRpb24gY2hlY2tzIHVzaW5nIHZhbGdyaW5kLCBhbmQgcHJvZmlsaW5nIHRlc3RzCiAgIC0gcmV2YW1wIG9mIHRoZSBXaW5kb3dzIGJ1aWxkIGFuZCBNYWtlZmlsZXMKCgoyLjQuMTg6IE1hciAxOCAyMDAyOgogICAtIGJ1ZyBmaXhlczogdHJlZSwgU0FYLCBjYW5vbmljYWxpemF0aW9uLCB2YWxpZGF0aW9uLCBwb3J0YWJpbGl0eSwKICBYUGF0aAogICAtIHJlbW92ZWQgdGhlIC0td2l0aC1idWZmZXIgb3B0aW9uIGl0IHdhcyBiZWNvbWluZyB1bm1haW50YWluYWJsZQogICAtIHNlcmlvdXMgY2xlYW51cCBvZiB0aGUgUHl0aG9uIG1ha2VmaWxlcwogICAtIHNwZWVkdXAgcGF0Y2ggdG8gWFBhdGggdmVyeSBlZmZlY3RpdmUgZm9yIERvY0Jvb2sgc3R5bGVzaGVldHMKICAgLSBGaXhlcyBmb3IgV2luZG93cyBidWlsZCwgY2xlYW51cCBvZiB0aGUgZG9jdW1lbnRhdGlvbgoKCjIuNC4xNzogTWFyIDggMjAwMjoKICAgLSBhIGxvdCBvZiBidWcgZml4ZXMsIGluY2x1ZGluZyAibmFtZXNwYWNlIG5vZGVzIGhhdmUgbm8gcGFyZW50cyBpbgogIFhQYXRoIgogICAtIGZpeGVkL2ltcHJvdmVkIHRoZSBQeXRob24gd3JhcHBlcnMsIGFkZGVkIG1vcmUgZXhhbXBsZXMgYW5kIG1vcmUKICAgIHJlZ3Jlc3Npb24gdGVzdHMsIFhQYXRoIGV4dGVuc2lvbiBmdW5jdGlvbnMgY2FuIG5vdyByZXR1cm4gbm9kZS1zZXRzCiAgIC0gYWRkZWQgdGhlIFhNTCBDYW5vbmljYWxpemF0aW9uIHN1cHBvcnQgZnJvbSBBbGVrc2V5IFNhbmluCgoKMi40LjE2OiBGZWIgMjAgMjAwMjoKICAgLSBhIGxvdCBvZiBidWcgZml4ZXMsIG1vc3Qgb2YgdGhlbSB3ZXJlIHRyaWdnZXJlZCBieSB0aGUgWE1MIFRlc3RzdWl0ZQogICAgZnJvbSBPQVNJUyBhbmQgVzNDLiBDb21wbGlhbmNlIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgaW1wcm92ZWQuCiAgIC0gYSBjb3VwbGUgb2YgcG9ydGFiaWxpdHkgZml4ZXMgdG9vLgoKCjIuNC4xNTogRmViIDExIDIwMDI6CiAgIC0gRml4ZWQgdGhlIE1ha2VmaWxlcywgZXNwZWNpYWxseSB0aGUgcHl0aG9uIG1vZHVsZSBvbmVzCiAgIC0gQSBmZXcgYnVnIGZpeGVzIGFuZCBjbGVhbnVwCiAgIC0gSW5jbHVkZXMgY2xlYW51cAoKCjIuNC4xNDogRmViIDggMjAwMjoKICAgLSBDaGFuZ2Ugb2YgTGljZW5zZSB0byB0aGUgTUlUCiAgICBMaWNlbnNlIGJhc2ljYWxseSBmb3IgaW50ZWdyYXRpb24gaW4gWEZyZWU4NiBjb2RlYmFzZSwgYW5kIHJlbW92aW5nCiAgICBjb25mdXNpb24gYXJvdW5kIHRoZSBwcmV2aW91cyBkdWFsLWxpY2Vuc2luZwogICAtIGFkZGVkIFB5dGhvbiBiaW5kaW5ncywgYmV0YSBzb2Z0d2FyZSBidXQgc2hvdWxkIGFscmVhZHkgYmUgcXVpdGUKICAgIGNvbXBsZXRlCiAgIC0gYSBsYXJnZSBudW1iZXIgb2YgZml4ZXMgYW5kIGNsZWFudXBzLCBlc3BlY2lhbGx5IGZvciBhbGwgdHJlZQogICAgbWFuaXB1bGF0aW9ucwogICAtIGNsZWFudXAgb2YgdGhlIGhlYWRlcnMsIGdlbmVyYXRpb24gb2YgYSByZWZlcmVuY2UgQVBJIGRlZmluaXRpb24gaW4KICBYTUwKCgoyLjQuMTM6IEphbiAxNCAyMDAyOgogICAtIHVwZGF0ZSBvZiB0aGUgZG9jdW1lbnRhdGlvbjogSm9obiBGbGVjayBhbmQgQ2hhcmxpZSBCb3plbWFuCiAgIC0gY2xlYW51cCBvZiB0aW1pbmcgY29kZSBmcm9tIEp1c3RpbiBGbGV0Y2hlcgogICAtIGZpeGVzIGZvciBXaW5kb3dzIGFuZCBpbml0aWFsIHRocmVhZCBzdXBwb3J0IG9uIFdpbjMyOiBJZ29yIGFuZCBTZXJndWVpCiAgICBOYXJvam55aQogICAtIEN5Z3dpbiBwYXRjaCBmcm9tIFJvYmVydCBDb2xsaW5zCiAgIC0gYWRkZWQgeG1sU2V0RW50aXR5UmVmZXJlbmNlRnVuYygpIGZvciBLZWl0aCBJc2RhbGUgd29yayBvbiB4c2xkYmcKCgoyLjQuMTI6IERlYyA3IDIwMDE6CiAgIC0gYSBmZXcgYnVnIGZpeGVzOiB0aHJlYWQgKEdhcnkgUGVubmluZ3RvbiksIHhtbGxpbnQgKEdlZXJ0IEtsb29zdGVybWFuKSwKICAgIFhNTCBwYXJzZXIgKFJvYmluIEJlcmpvbiksIFhQb2ludGVyIChEYW5ueSBKYW1zaHkpLCBJL08gY2xlYW51cHMKICAocm9iZXJ0KQogICAtIEVyaWMgTGF2aWduZSBjb250cmlidXRlZCBwcm9qZWN0IGZpbGVzIGZvciBNYWNPUwogICAtIHNvbWUgbWFrZWZpbGVzIGNsZWFudXBzCgoKMi40LjExOiBOb3YgMjYgMjAwMToKICAgLSBmaXhlZCBhIGNvdXBsZSBvZiBlcnJvcnMgaW4gdGhlIGluY2x1ZGVzLCBmaXhlZCBhIGZldyBidWdzLCBzb21lIGNvZGUKICAgIGNsZWFudXBzCiAgIC0geG1sbGludCBtYW4gcGFnZXMgaW1wcm92ZW1lbnQgYnkgSGVpa28gUnVwcAogICAtIHVwZGF0ZWQgVk1TIGJ1aWxkIGluc3RydWN0aW9ucyBmcm9tIEpvaG4gQSBGb3RoZXJpbmdoYW0KICAgLSBXaW5kb3dzIE1ha2VmaWxlcyB1cGRhdGVzIGZyb20gSWdvcgoKCjIuNC4xMDogTm92IDEwIDIwMDE6CiAgIC0gVVJJIGVzY2FwaW5nIGZpeCAoSm9lbCBZb3VuZykKICAgLSBhZGRlZCB4bWxHZXROb2RlUGF0aCgpIChmb3IgcGF0aHMgb3IgWFBvaW50ZXJzIGdlbmVyYXRpb24pCiAgIC0gRml4ZXMgbmFtZXNwYWNlIGhhbmRsaW5nIHByb2JsZW1zIHdoZW4gdXNpbmcgRFREIGFuZCB2YWxpZGF0aW9uCiAgIC0gaW1wcm92ZW1lbnRzIG9uIHhtbGxpbnQ6IE1vcnVzIFdhbHRlciBwYXRjaGVzIGZvciAtLWZvcm1hdCBhbmQKICAgIC0tZW5jb2RlLCBTdGVmYW4gS29zdCBhbmQgSGVpa28gUnVwcCBpbXByb3ZlbWVudHMgb24gdGhlIC0tc2hlbGwKICAgLSBmaXhlcyBmb3IgeG1sY2F0YWxvZyBsaW5raW5nIHBvaW50ZWQgYnkgV2VpcWkgR2FvCiAgIC0gZml4ZXMgdG8gdGhlIEhUTUwgcGFyc2VyCgoKMi40Ljk6IE5vdiA2IDIwMDE6CiAgIC0gZml4ZXMgbW9yZSBjYXRhbG9nIGJ1Z3MKICAgLSBhdm9pZCBhIGNvbXBpbGF0aW9uIHByb2JsZW0sIGltcHJvdmUgeG1sR2V0TGluZU5vKCkKCgoyLjQuODogTm92IDQgMjAwMToKICAgLSBmaXhlZCBTR01MIGNhdGFsb2dzIGJyb2tlbiBpbiBwcmV2aW91cyByZWxlYXNlLCB1cGRhdGVkIHhtbGNhdGFsb2cKICB0b29sCiAgIC0gZml4ZWQgYSBjb21waWxlIGVycm9ycyBhbmQgc29tZSBpbmNsdWRlcyB0cm91Ymxlcy4KCgoyLjQuNzogT2N0IDMwIDIwMDE6CiAgIC0gZXhwb3J0ZWQgc29tZSBkZWJ1Z2dpbmcgaW50ZXJmYWNlcwogICAtIHNlcmlvdXMgcmV3cml0ZSBvZiB0aGUgY2F0YWxvZyBjb2RlCiAgIC0gaW50ZWdyYXRlZCBHYXJ5IFBlbm5pbmd0b24gdGhyZWFkIHNhZmV0eSBwYXRjaCwgYWRkZWQgY29uZmlndXJlIG9wdGlvbgogICAgYW5kIHJlZ3Jlc3Npb24gdGVzdHMKICAgLSByZW1vdmVkIGFuIEhUTUwgcGFyc2VyIGJ1ZwogICAtIGZpeGVkIGEgY291cGxlIG9mIHBvdGVudGlhbGx5IHNlcmlvdXMgdmFsaWRhdGlvbiBidWdzCiAgIC0gaW50ZWdyYXRlZCB0aGUgU0dNTCBEb2NCb29rIHN1cHBvcnQgaW4geG1sbGludAogICAtIGNoYW5nZWQgdGhlIG5hbm9mdHAgYW5vbnltb3VzIGxvZ2luIHBhc3N3ZAogICAtIHNvbWUgSS9PIGNsZWFudXAgYW5kIGEgY291cGxlIG9mIGludGVyZmFjZXMgZm9yIFBlcmwgd3JhcHBlcgogICAtIGdlbmVyYWwgYnVnIGZpeGVzCiAgIC0gdXBkYXRlZCB4bWxsaW50IG1hbiBwYWdlIGJ5IEpvaG4gRmxlY2sKICAgLSBzb21lIFZNUyBhbmQgV2luZG93cyB1cGRhdGVzCgoKMi40LjY6IE9jdCAxMCAyMDAxOgogICAtIGFkZGVkIGFuIHVwZGF0ZWQgbWFuIHBhZ2VzIGJ5IEpvaG4gRmxlY2sKICAgLSBwb3J0YWJpbGl0eSBhbmQgY29uZmlndXJlIGZpeGVzCiAgIC0gYW4gaW5maW5pdGUgbG9vcCBvbiB0aGUgSFRNTCBwYXJzZXIgd2FzIHJlbW92ZWQgKFdpbGxpYW0pCiAgIC0gV2luZG93cyBtYWtlZmlsZSBwYXRjaGVzIGZyb20gSWdvcgogICAtIGZpeGVkIGhhbGYgYSBkb3plbiBidWdzIHJlcG9ydGVkIGZvciBsaWJ4bWwgb3IgbGlieHNsdAogICAtIHVwZGF0ZWQgeG1sY2F0YWxvZyB0byBiZSBhYmxlIHRvIG1vZGlmeSBTR01MIHN1cGVyIGNhdGFsb2dzCgoKMi40LjU6IFNlcCAxNCAyMDAxOgogICAtIFJlbW92ZSBhIGZldyBhbm5veWluZyBidWdzIGluIDIuNC40CiAgIC0gZm9yY2VzIHRoZSBIVE1MIHNlcmlhbGl6ZXIgdG8gb3V0cHV0IGRlY2ltYWwgY2hhcnJlZnMgc2luY2Ugc29tZQogICAgdmVyc2lvbiBvZiBOZXRzY2FwZSBjYW4ndCBoYW5kbGUgaGV4YWRlY2ltYWwgb25lcwoKCjEuOC4xNjogU2VwIDE0IDIwMDE6CiAgIC0gbWFpbnRlbmFuY2UgcmVsZWFzZSBvZiB0aGUgb2xkIGxpYnhtbDEgYnJhbmNoLCBjb3VwbGUgb2YgYnVnIGFuZAogICAgcG9ydGFiaWxpdHkgZml4ZXMKCgoyLjQuNDogU2VwIDEyIDIwMDE6CiAgIC0gYWRkZWQgLS1jb252ZXJ0IHRvIHhtbGNhdGFsb2csIGJ1ZyBmaXhlcyBhbmQgY2xlYW51cHMgb2YgWE1MCiAgQ2F0YWxvZwogICAtIGEgZmV3IGJ1ZyBmaXhlcyBhbmQgc29tZSBwb3J0YWJpbGl0eSBjaGFuZ2VzCiAgIC0gc29tZSBkb2N1bWVudGF0aW9uIGNsZWFudXBzCgoKMi40LjM6ICBBdWcgMjMgMjAwMToKICAgLSBYTUwgQ2F0YWxvZyBzdXBwb3J0IHNlZSB0aGUgZG9jCiAgIC0gTmV3IE5hTi9JbmZpbml0eSBmbG9hdGluZyBwb2ludCBjb2RlCiAgIC0gQSBmZXcgYnVnIGZpeGVzCgoKMi40LjI6ICBBdWcgMTUgMjAwMToKICAgLSBhZGRzIHhtbExpbmVOdW1iZXJzRGVmYXVsdCgpIHRvIGNvbnRyb2wgbGluZSBudW1iZXIgZ2VuZXJhdGlvbgogICAtIGxvdCBvZiBidWcgZml4ZXMKICAgLSB0aGUgTWljcm9zb2Z0IE1TQyBwcm9qZWN0cyBmaWxlcyBzaG91bGQgbm93IGJlIHVwIHRvIGRhdGUKICAgLSBpbmhlcml0YW5jZSBvZiBuYW1lc3BhY2VzIGZyb20gRFREIGRlZmF1bHRlZCBhdHRyaWJ1dGVzCiAgIC0gZml4ZXMgYSBzZXJpb3VzIHBvdGVudGlhbCBzZWN1cml0eSBidWcKICAgLSBhZGRlZCBhIC0tZm9ybWF0IG9wdGlvbiB0byB4bWxsaW50CgoKMi40LjE6ICBKdWx5IDI0IDIwMDE6CiAgIC0gcG9zc2liaWxpdHkgdG8ga2VlcCBsaW5lIG51bWJlcnMgaW4gdGhlIHRyZWUKICAgLSBzb21lIGNvbXB1dGF0aW9uIE5hTiBmaXhlcwogICAtIGV4dGVuc2lvbiBvZiB0aGUgWFBhdGggQVBJCiAgIC0gY2xlYW51cCBmb3IgYWxwaGEgYW5kIGlhNjQgdGFyZ2V0cwogICAtIHBhdGNoIHRvIGFsbG93IHNhdmluZyB0aHJvdWdoIEhUVFAgUFVUIG9yIFBPU1QKCgoyLjQuMDogSnVseSAxMCAyMDAxOgogICAtIEZpeGVkIGEgZmV3IGJ1Z3MgaW4gWFBhdGgsIHZhbGlkYXRpb24sIGFuZCB0cmVlIGhhbmRsaW5nLgogICAtIEZpeGVkIFhNTCBCYXNlIGltcGxlbWVudGF0aW9uLCBhZGRlZCBhIGNvdXBsZSBvZiBleGFtcGxlcyB0byB0aGUKICAgIHJlZ3Jlc3Npb24gdGVzdHMKICAgLSBBIGJpdCBvZiBjbGVhbnVwCgoKMi4zLjE0OiBKdWx5IDUgMjAwMToKICAgLSBmaXhlZCBzb21lIGVudGl0aWVzIHByb2JsZW1zIGFuZCByZWR1Y2UgbWVtb3J5IHJlcXVpcmVtZW50IHdoZW4KICAgIHN1YnN0aXR1dGluZyB0aGVtCiAgIC0gbG90cyBvZiBpbXByb3ZlbWVudHMgaW4gdGhlIFhQYXRoIHF1ZXJpZXMgaW50ZXJwcmV0ZXIgY2FuIGJlCiAgICBzdWJzdGFudGlhbGx5IGZhc3RlcgogICAtIE1ha2VmaWxlcyBhbmQgY29uZmlndXJlIGNsZWFudXBzCiAgIC0gRml4ZXMgdG8gWFBhdGggdmFyaWFibGUgZXZhbCwgYW5kIGNvbXBhcmUgb24gZW1wdHkgbm9kZSBzZXQKICAgLSBIVE1MIHRhZyBjbG9zaW5nIGJ1ZyBmaXhlZAogICAtIEZpeGVkIGFuIFVSSSByZWZlcmVuY2UgY29tcHV0YXRpb24gcHJvYmxlbSB3aGVuIHZhbGlkYXRpbmcKCgoyLjMuMTM6IEp1bmUgMjggMjAwMToKICAgLSAyLjMuMTIgY29uZmlndXJlLmluIHdhcyBicm9rZW4gYXMgd2VsbCBhcyB0aGUgcHVzaCBtb2RlIFhNTCBwYXJzZXIKICAgLSBhIGZldyBtb3JlIGZpeGVzIGZvciBjb21waWxhdGlvbiBvbiBXaW5kb3dzIE1TQyBieSBZb24gRGVyZWsKCgoxLjguMTQ6IEp1bmUgMjggMjAwMToKICAgLSBaYmlnbmlldyBDaHlsYSBnYXZlIGEgcGF0Y2ggdG8gdXNlIHRoZSBvbGQgWE1MIHBhcnNlciBpbiBwdXNoIG1vZGUKICAgLSBTbWFsbCBNYWtlZmlsZSBmaXgKCgoyLjMuMTI6IEp1bmUgMjYgMjAwMToKICAgLSBsb3RzIG9mIGNsZWFudXAKICAgLSBhIGNvdXBsZSBvZiB2YWxpZGF0aW9uIGZpeAogICAtIGZpeGVkIGxpbmUgbnVtYmVyIGNvdW50aW5nCiAgIC0gZml4ZWQgc2VyaW91cyBwcm9ibGVtcyBpbiB0aGUgWEluY2x1ZGUgcHJvY2Vzc2luZwogICAtIGFkZGVkIHN1cHBvcnQgZm9yIFVURjggQk9NIGF0IGJlZ2lubmluZyBvZiBlbnRpdGllcwogICAtIGZpeGVkIGEgc3RyYW5nZSBnY2Mgb3B0aW1pemVyIGJ1Z3MgaW4geHBhdGggaGFuZGxpbmcgb2YgZmxvYXQsIGdjYy0zLjAKICAgIG1pc2NvbXBpbGUgdXJpLmMgKFdpbGxpYW0pLCBUaG9tYXMgTGVpdG5lciBwcm92aWRlZCBhIGZpeCBmb3IgdGhlCiAgICBvcHRpbWl6ZXIgb24gVHJ1NjQKICAgLSBpbmNvcnBvcmF0ZWQgWW9uIERlcmVrIGFuZCBJZ29yIFpsYXRrb3ZpYyAgZml4ZXMgYW5kIGltcHJvdmVtZW50cyBmb3IKICAgIGNvbXBpbGF0aW9uIG9uIFdpbmRvd3MgTVNDCiAgIC0gdXBkYXRlIG9mIGxpYnhtbC1kb2MuZWwgKEZlbGl4IE5hdHRlcikKICAgLSBmaXhlZCAyIGJ1Z3MgaW4gVVJJIG5vcm1hbGl6YXRpb24gY29kZQoKCjIuMy4xMTogSnVuZSAxNyAyMDAxOgogICAtIHVwZGF0ZXMgdG8gdHJpbywgTWFrZWZpbGVzIGFuZCBjb25maWd1cmUgc2hvdWxkIGZpeCBzb21lIHBvcnRhYmlsaXR5CiAgICBwcm9ibGVtcyAoYWxwaGEpCiAgIC0gZml4ZWQgc29tZSBIVE1MIHNlcmlhbGl6YXRpb24gcHJvYmxlbXMgKHByZSwgc2NyaXB0LCBhbmQgYmxvY2svaW5saW5lCiAgICBoYW5kbGluZyksIGFkZGVkIGVuY29kaW5nIGF3YXJlIEFQSXMsIGNsZWFudXAgb2YgdGhpcyBjb2RlCiAgIC0gYWRkZWQgeG1sSGFzTnNQcm9wKCkKICAgLSBpbXBsZW1lbnRlZCBhIHNwZWNpZmljIFBJIGZvciBlbmNvZGluZyBzdXBwb3J0IGluIHRoZSBEb2NCb29rIFNHTUwKICAgIHBhcnNlcgogICAtIHNvbWUgWFBhdGggZml4ZXMgKC1JbmZpbml0eSwgLyBhcyBhIGZ1bmN0aW9uIHBhcmFtZXRlciBhbmQgbmFtZXNwYWNlcwogICAgbm9kZSBzZWxlY3Rpb24pCiAgIC0gZml4ZWQgYSBwZXJmb3JtYW5jZSBwcm9ibGVtIGFuZCBhbiBlcnJvciBpbiB0aGUgdmFsaWRhdGlvbiBjb2RlCiAgIC0gZml4ZWQgWEluY2x1ZGUgcm91dGluZSB0byBpbXBsZW1lbnQgdGhlIHJlY3Vyc2l2ZSBiZWhhdmlvdXIKICAgLSBmaXhlZCB4bWxGcmVlTm9kZSBwcm9ibGVtIHdoZW4gbGlieG1sIGlzIGluY2x1ZGVkIHN0YXRpY2FsbHkgdHdpY2UKICAgLSBhZGRlZCAtLXZlcnNpb24gdG8geG1sbGludCBmb3IgYnVnIHJlcG9ydHMKCgoyLjMuMTA6IEp1bmUgMSAyMDAxOgogICAtIGZpeGVkIHRoZSBTR01MIGNhdGFsb2cgc3VwcG9ydAogICAtIGEgbnVtYmVyIG9mIHJlcG9ydGVkIGJ1Z3MgZ290IGZpeGVkLCBpbiBYUGF0aCwgaWNvbnYgZGV0ZWN0aW9uLAogICAgWEluY2x1ZGUgcHJvY2Vzc2luZwogICAtIFhQYXRoIHN0cmluZyBmdW5jdGlvbiBzaG91bGQgbm93IGhhbmRsZSB1bmljb2RlIGNvcnJlY3RseQoKCjIuMy45OiBNYXkgMTkgMjAwMToKTG90cyBvZiBidWdmaXhlcywgYW5kIGFkZGVkIGEgYmFzaWMgU0dNTCBjYXRhbG9nIHN1cHBvcnQ6CiAgIC0gSFRNTCBwdXNoIGJ1Z2ZpeCAjNTQ4OTEgYW5kIGFub3RoZXIgcGF0Y2ggZnJvbSBKb25hcyBCb3Jnc3Ry9m0KICAgLSBzb21lIHNlcmlvdXMgc3BlZWQgb3B0aW1pemF0aW9uIGFnYWluCiAgIC0gc29tZSBkb2N1bWVudGF0aW9uIGNsZWFudXBzCiAgIC0gdHJ5aW5nIHRvIGdldCBiZXR0ZXIgbGlua2luZyBvbiBTb2xhcmlzICgtUikKICAgLSBYUGF0aCBBUEkgY2xlYW51cCBmcm9tIFRob21hcyBCcm95ZXIKICAgLSBWYWxpZGF0aW9uIGJ1ZyBmaXhlZCAjNTQ2MzEsIGFkZGVkIGEgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24sIGZpeGVkCiAgICB4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMoKQogICAtIEFkZGVkIGFuIElOU1RBTEwgZmlsZQogICAtIEF0dHJpYnV0ZSByZW1vdmFsIGFkZGVkIHRvIEFQSTogIzU0NDMzCiAgIC0gYWRkZWQgYSBiYXNpYyBzdXBwb3J0IGZvciBTR01MIGNhdGFsb2dzCiAgIC0gZml4ZWQgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgQVBJCiAgIC0gYnVnZml4IGluIHhtbE5vZGVHZXRMYW5nKCkKICAgLSBmaXhlZCBhIHNtYWxsIGNvbmZpZ3VyZSBwb3J0YWJpbGl0eSBwcm9ibGVtCiAgIC0gZml4ZWQgYW4gaW52ZXJzaW9uIG9mIFNZU1RFTSBhbmQgUFVCTElDIGlkZW50aWZpZXIgaW4gSFRNTCBkb2N1bWVudAoKCjEuOC4xMzogTWF5IDE0IDIwMDE6CiAgIC0gYnVnZml4ZXMgcmVsZWFzZSBvZiB0aGUgb2xkIGxpYnhtbDEgYnJhbmNoIHVzZWQgYnkgR25vbWUKCgoyLjMuODogTWF5IDMgMjAwMToKICAgLSBJbnRlZ3JhdGVkIGFuIFNHTUwgRG9jQm9vayBwYXJzZXIgZm9yIHRoZSBHbm9tZSBwcm9qZWN0CiAgIC0gRml4ZWQgYSBmZXcgdGhpbmdzIGluIHRoZSBIVE1MIHBhcnNlcgogICAtIEZpeGVkIHNvbWUgWFBhdGggYnVncyByYWlzZWQgYnkgWFNMVCB1c2UsIHRyaWVkIHRvIGZpeCB0aGUgZmxvYXRpbmcKICAgIHBvaW50IHBvcnRhYmlsaXR5IGlzc3VlCiAgIC0gU3BlZWQgaW1wcm92ZW1lbnQgKDhNL3MgZm9yIFNBWCwgM00vcyBmb3IgRE9NLCAxLjVNL3MgZm9yCiAgICBET00rdmFsaWRhdGlvbiB1c2luZyB0aGUgWE1MIFJFQyBhcyBpbnB1dCBhbmQgYSA3MDBNSHogY2VsZXJvbikuCiAgIC0gaW5jb3Jwb3JhdGVkIG1vcmUgV2luZG93cyBjbGVhbnVwCiAgIC0gYWRkZWQgeG1sU2F2ZUZvcm1hdEZpbGUoKQogICAtIGZpeGVkIHByb2JsZW1zIGluIGNvcHlpbmcgbm9kZXMgd2l0aCBlbnRpdGllcyByZWZlcmVuY2VzIChnZG9tZSkKICAgLSByZW1vdmVkIHNvbWUgdHJvdWJsZXMgc3Vycm91bmRpbmcgdGhlIG5ldyB2YWxpZGF0aW9uIG1vZHVsZQoKCjIuMy43OiBBcHJpbCAyMiAyMDAxOgogICAtIGxvdHMgb2Ygc21hbGwgYnVnIGZpeGVzLCBjb3JyZWN0ZWQgWFBvaW50ZXIKICAgLSBOb24gZGV0ZXJtaW5pc3RpYyBjb250ZW50IG1vZGVsIHZhbGlkYXRpb24gc3VwcG9ydAogICAtIGFkZGVkIHhtbERvY0NvcHlOb2RlIGZvciBnZG9tZTIKICAgLSByZXZhbXBlZCB0aGUgd2F5IHRoZSBIVE1MIHBhcnNlciBoYW5kbGVzIGVuZCBvZiB0YWdzCiAgIC0gWFBhdGg6IGNvcnJlY3Rpb25zIG9mIG5hbWVzcGFjZXMgc3VwcG9ydCBhbmQgbnVtYmVyIGZvcm1hdHRpbmcKICAgLSBXaW5kb3dzOiBJZ29yIFpsYXRrb3ZpYyBwYXRjaGVzIGZvciBNU0MgY29tcGlsYXRpb24KICAgLSBIVE1MIG91dHB1dCBmaXhlcyBmcm9tIFAgQyBDaG93IGFuZCBXaWxsaWFtIE0uIEJyYWNrCiAgIC0gSW1wcm92ZWQgdmFsaWRhdGlvbiBzcGVlZCBzZW5zaWJsZSBmb3IgRG9jQm9vawogICAtIGZpeGVkIGEgYmlnIGJ1ZyB3aXRoIElEIGRlY2xhcmVkIGluIGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcwogICAtIHBvcnRhYmlsaXR5IGZpeGVzLCB1cGRhdGUgb2YgVHJpbyBmcm9tIEJqb3JuIFJlZXNlCgoKMi4zLjY6IEFwcmlsIDggMjAwMToKICAgLSBDb2RlIGNsZWFudXAgdXNpbmcgZXh0cmVtZSBnY2MgY29tcGlsZXIgd2FybmluZyBvcHRpb25zLCBmb3VuZCBhbmQKICAgIGNsZWFyZWQgaGFsZiBhIGRvemVuIHBvdGVudGlhbCBwcm9ibGVtCiAgIC0gdGhlIEVhemVsIHRlYW0gZm91bmQgYW4gWE1MIHBhcnNlciBidWcKICAgLSBjbGVhbmVkIHVwIHRoZSB1c2VyIG9mIHNvbWUgb2YgdGhlIHN0cmluZyBmb3JtYXR0aW5nIGZ1bmN0aW9uLiB1c2VkIHRoZQogICAgdHJpbyBsaWJyYXJ5IGNvZGUgdG8gcHJvdmlkZSB0aGUgb25lIG5lZWRlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpcyBtaXNzaW5nCiAgICB0aGVtCiAgIC0geHBhdGg6IHJlbW92ZWQgYSBtZW1vcnkgbGVhayBhbmQgZml4ZWQgdGhlIHByZWRpY2F0ZSBldmFsdWF0aW9uCiAgICBwcm9ibGVtLCBleHRlbmRlZCB0aGUgdGVzdHN1aXRlIGFuZCBjbGVhbmVkIHVwIHRoZSByZXN1bHQuIFhQb2ludGVyIHNlZW1zCiAgICBicm9rZW4gLi4uCgoKMi4zLjU6IE1hciAyMyAyMDAxOgogICAtIEJpZ2dlc3QgY2hhbmdlIGlzIHNlcGFyYXRlIHBhcnNpbmcgYW5kIGV2YWx1YXRpb24gb2YgWFBhdGggZXhwcmVzc2lvbnMsCiAgICB0aGVyZSBpcyBzb21lIG5ldyBBUElzIGZvciB0aGlzIHRvbwogICAtIGluY2x1ZGVkIGEgbnVtYmVyIG9mIGJ1ZyBmaXhlcyhYTUwgcHVzaCBwYXJzZXIsIDUxODc2LCBub3RhdGlvbnMsCiAgNTIyOTkpCiAgIC0gRml4ZWQgc29tZSBwb3J0YWJpbGl0eSBpc3N1ZXMKCgoyLjMuNDogTWFyIDEwIDIwMDE6CiAgIC0gRml4ZWQgYnVncyAjNTE4NjAgYW5kICM1MTg2MQogICAtIEFkZGVkIGEgZ2xvYmFsIHZhcmlhYmxlIHhtbERlZmF1bHRCdWZmZXJTaXplIHRvIGFsbG93IGRlZmF1bHQgYnVmZmVyCiAgICBzaXplIHRvIGJlIGFwcGxpY2F0aW9uIHR1bmFibGUuCiAgIC0gU29tZSBjbGVhbnVwIGluIHRoZSB2YWxpZGF0aW9uIGNvZGUsIHN0aWxsIGEgYnVnIGxlZnQgYW5kIHRoaXMgcGFydAogICAgc2hvdWxkIHByb2JhYmx5IGJlIHJld3JpdHRlbiB0byBzdXBwb3J0IGFtYmlndW91cyBjb250ZW50IG1vZGVsIDotXAogICAtIEZpeCBhIGNvdXBsZSBvZiBzZXJpb3VzIGJ1Z3MgaW50cm9kdWNlZCBvciByYWlzZWQgYnkgY2hhbmdlcyBpbiAyLjMuMwogICAgcGFyc2VyCiAgIC0gRml4ZWQgYW5vdGhlciBidWcgaW4geG1sTm9kZUdldENvbnRlbnQoKQogICAtIEJqb3JuIGZpeGVkIFhQYXRoIG5vZGUgY29sbGVjdGlvbiBhbmQgTnVtYmVyIGZvcm1hdHRpbmcKICAgLSBGaXhlZCBhIGxvb3AgcmVwb3J0ZWQgaW4gdGhlIEhUTUwgcGFyc2luZwogICAtIGJsYW5rIHNwYWNlIGFyZSByZXBvcnRlZCBldmVuIGlmIHRoZSBEdGQgY29udGVudCBtb2RlbCBwcm92ZXMgdGhhdCB0aGV5CiAgICBhcmUgZm9ybWF0dGluZyBzcGFjZXMsIHRoaXMgaXMgZm9yIFhNTCBjb25mb3JtYW5jZQoKCjIuMy4zOiBNYXIgMSAyMDAxOgogICAtIHNtYWxsIGNoYW5nZSBpbiBYUGF0aCBmb3IgWFNMVAogICAtIGRvY3VtZW50YXRpb24gY2xlYW51cHMKICAgLSBmaXggaW4gdmFsaWRhdGlvbiBieSBHYXJ5IFBlbm5pbmd0b24KICAgLSBzZXJpb3VzIHBhcnNpbmcgcGVyZm9ybWFuY2VzIGltcHJvdmVtZW50cwoKCjIuMy4yOiBGZWIgMjQgMjAwMToKICAgLSBjaGFzaW5nIFhQYXRoIGJ1Z3MsIGZvdW5kIGEgYnVuY2gsIGNvbXBsZXRlZCBzb21lIFRPRE8KICAgLSBmaXhlZCBhIER0ZCBwYXJzaW5nIGJ1ZwogICAtIGZpeGVkIGEgYnVnIGluIHhtbE5vZGVHZXRDb250ZW50CiAgIC0gSUQvSURSRUYgc3VwcG9ydCBwYXJ0bHkgcmV3cml0dGVuIGJ5IEdhcnkgUGVubmluZ3RvbgoKCjIuMy4xOiBGZWIgMTUgMjAwMToKICAgLSBzb21lIFhQYXRoIGFuZCBIVE1MIGJ1ZyBmaXhlcyBmb3IgWFNMVAogICAtIHNtYWxsIGV4dGVuc2lvbiBvZiB0aGUgaGFzaCB0YWJsZSBpbnRlcmZhY2VzIGZvciBET00gZ2RvbWUyCiAgICBpbXBsZW1lbnRhdGlvbgogICAtIEEgZmV3IGJ1ZyBmaXhlcwoKCjIuMy4wOiBGZWIgOCAyMDAxICgyLjIuMTIgd2FzIG9uIDI1IEphbiBidXQgSSBkaWRuJ3Qga2VwdCB0cmFjayk6CiAgIC0gTG90cyBvZiBYUGF0aCBidWcgZml4ZXMKICAgLSBBZGQgYSBtb2RlIHdpdGggRHRkIGxvb2t1cCBidXQgd2l0aG91dCB2YWxpZGF0aW9uIGVycm9yIHJlcG9ydGluZyBmb3IKICAgIFhTTFQKICAgLSBBZGQgc3VwcG9ydCBmb3IgdGV4dCBub2RlIHdpdGhvdXQgZXNjYXBpbmcgKFhTTFQpCiAgIC0gYnVnIGZpeGVzIGZvciB4bWxDaGVja0ZpbGVuYW1lCiAgIC0gdmFsaWRhdGlvbiBjb2RlIGJ1ZyBmaXhlcyBmcm9tIEdhcnkgUGVubmluZ3RvbgogICAtIFBhdGNoIGZyb20gUGF1bCBELiBTbWl0aCBjb3JyZWN0aW5nIFVSSSBwYXRoIG5vcm1hbGl6YXRpb24KICAgLSBQYXRjaCB0byBhbGxvdyBzaW11bHRhbmVvdXMgaW5zdGFsbCBvZiBsaWJ4bWwtZGV2ZWwgYW5kCiAgbGlieG1sMi1kZXZlbAogICAtIHRoZSBleGFtcGxlIE1ha2VmaWxlIGlzIG5vdyBmaXhlZAogICAtIGFkZGVkIEhUTUwgdG8gdGhlIFJQTSBwYWNrYWdlcwogICAtIHRyZWUgY29weWluZyBidWdmaXhlcwogICAtIHVwZGF0ZXMgdG8gV2luZG93cyBtYWtlZmlsZXMKICAgLSBvcHRpbWl6YXRpb24gcGF0Y2ggZnJvbSBCam9ybiBSZWVzZQoKCjIuMi4xMTogSmFuIDQgMjAwMToKICAgLSBidW5jaCBvZiBidWcgZml4ZXMgKG1lbW9yeSBJL08sIHhwYXRoLCBmdHAvaHR0cCwgLi4uKQogICAtIGFkZGVkIGh0bWxIYW5kbGVPbWl0dGVkRWxlbSgpCiAgIC0gQXBwbGllZCBCam9ybiBSZWVzZSdzIElQVjYgZmlyc3QgcGF0Y2gKICAgLSBBcHBsaWVkIFBhdWwgRC4gU21pdGggcGF0Y2hlcyBmb3IgdmFsaWRhdGlvbiBvZiBYSW5jbHVkZSByZXN1bHRzCiAgIC0gYWRkZWQgWFBvaW50ZXIgeG1sbnMoKSBuZXcgc2NoZW1lIHN1cHBvcnQKCgoyLjIuMTA6IE5vdiAyNSAyMDAwOgogICAtIEZpeCB0aGUgV2luZG93cyBwcm9ibGVtcyBvZiAyLjIuOAogICAtIGludGVncmF0ZSBPcGVuVk1TIHBhdGNoZXMKICAgLSBiZXR0ZXIgaGFuZGxpbmcgb2Ygc29tZSBuYXN0eSBIVE1MIGlucHV0CiAgIC0gSW1wcm92ZWQgdGhlIFhQb2ludGVyIGltcGxlbWVudGF0aW9uCiAgIC0gaW50ZWdyYXRlIGEgbnVtYmVyIG9mIHByb3ZpZGVkIHBhdGNoZXMKCgoyLjIuOTogTm92IDI1IDIwMDA6CiAgIC0gZXJyb25lb3VzIHJlbGVhc2UgOi0oCgoKMi4yLjg6IE5vdiAxMyAyMDAwOgogICAtIEZpcnN0IHZlcnNpb24gb2YgWEluY2x1ZGUKICAgIHN1cHBvcnQKICAgLSBQYXRjaCBpbiBjb25kaXRpb25hbCBzZWN0aW9uIGhhbmRsaW5nCiAgIC0gdXBkYXRlZCBNUyBjb21waWxlciBwcm9qZWN0CiAgIC0gZml4ZWQgc29tZSBYUGF0aCBwcm9ibGVtcwogICAtIGFkZGVkIGFuIFVSSSBlc2NhcGluZyBmdW5jdGlvbgogICAtIHNvbWUgb3RoZXIgYnVnIGZpeGVzCgoKMi4yLjc6IE9jdCAzMSAyMDAwOgogICAtIGFkZGVkIG1lc3NhZ2UgcmVkaXJlY3Rpb24KICAgLSBYUGF0aCBpbXByb3ZlbWVudHMgKHRoYW5rcyBUT00gISkKICAgLSB4bWxJT1BhcnNlRFREKCkgYWRkZWQKICAgLSB2YXJpb3VzIHNtYWxsIGZpeGVzIGluIHRoZSBIVE1MLCBVUkksIEhUVFAgYW5kIFhQb2ludGVyIHN1cHBvcnQKICAgLSBzb21lIGNsZWFudXAgb2YgdGhlIE1ha2VmaWxlLCBhdXRvY29uZiBhbmQgdGhlIGRpc3RyaWJ1dGlvbiBjb250ZW50CgoKMi4yLjY6IE9jdCAyNSAyMDAwOjoKICAgLSBBZGRlZCBhbiBoYXNoIHRhYmxlIG1vZHVsZSwgbWlncmF0ZWQgYSBudW1iZXIgb2YgaW50ZXJuYWwgc3RydWN0dXJlIHRvCiAgICB0aG9zZQogICAtIEZpeGVkIGEgcG9zdGVyaW9yaSB2YWxpZGF0aW9uIHByb2JsZW1zCiAgIC0gSFRUUCBtb2R1bGUgY2xlYW51cHMKICAgLSBIVE1MIHBhcnNlciBpbXByb3ZlbWVudHMgKHRhZyBlcnJvcnMsIHNjcmlwdC9zdHlsZSBoYW5kbGluZywgYXR0cmlidXRlCiAgICBub3JtYWxpemF0aW9uKQogICAtIGNvYWxlc2Npbmcgb2YgYWRqYWNlbnQgdGV4dCBub2RlcwogICAtIGNvdXBsZSBvZiBYUGF0aCBidWcgZml4ZXMsIGV4cG9ydGVkIHRoZSBpbnRlcm5hbCBBUEkKCgoyLjIuNTogT2N0IDE1IDIwMDA6OgogICAtIFhQb2ludGVyIGltcGxlbWVudGF0aW9uIGFuZCB0ZXN0c3VpdGUKICAgLSBMb3Qgb2YgWFBhdGggZml4ZXMsIGFkZGVkIHZhcmlhYmxlIGFuZCBmdW5jdGlvbnMgcmVnaXN0cmF0aW9uLCBtb3JlCiAgICB0ZXN0cwogICAtIFBvcnRhYmlsaXR5IGZpeGVzLCBsb3RzIG9mIGVuaGFuY2VtZW50cyB0b3dhcmQgYW4gZWFzeSBXaW5kb3dzIGJ1aWxkCiAgICBhbmQgcmVsZWFzZQogICAtIExhdGUgdmFsaWRhdGlvbiBmaXhlcwogICAtIEludGVncmF0ZWQgYSBsb3Qgb2YgY29udHJpYnV0ZWQgcGF0Y2hlcwogICAtIGFkZGVkIG1lbW9yeSBtYW5hZ2VtZW50IGRvY3MKICAgLSBhIHBlcmZvcm1hbmNlIHByb2JsZW0gd2hlbiB1c2luZyBsYXJnZSBidWZmZXIgc2VlbXMgZml4ZWQKCgoyLjIuNDogT2N0IDEgMjAwMDo6CiAgIC0gbWFpbiBYUGF0aCBwcm9ibGVtIGZpeGVkCiAgIC0gSW50ZWdyYXRlZCBwb3J0YWJpbGl0eSBwYXRjaGVzIGZvciBXaW5kb3dzCiAgIC0gU2VyaW91cyBidWcgZml4ZXMgb24gdGhlIFVSSSBhbmQgSFRNTCBjb2RlCgoKMi4yLjM6IFNlcCAxNyAyMDAwOgogICAtIGJ1ZyBmaXhlcwogICAtIGNsZWFudXAgb2YgZW50aXR5IGhhbmRsaW5nIGNvZGUKICAgLSBvdmVyYWxsIHJldmlldyBvZiBhbGwgbG9vcHMgaW4gdGhlIHBhcnNlcnMsIGFsbCBzcHJpbnRmIHVzYWdlIGhhcyBiZWVuCiAgICBjaGVja2VkIHRvbwogICAtIEZhciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGFyZ2VzIER0ZC4gVmFsaWRhdGluZyBhZ2FpbnN0IERvY0Jvb2sgWE1MIER0ZAogICAgd29ya3Mgc21vb3RobHkgbm93LgoKCjEuOC4xMDogU2VwIDYgMjAwMDoKICAgLSBidWcgZml4IHJlbGVhc2UgZm9yIHNvbWUgR25vbWUgcHJvamVjdHMKCgoyLjIuMjogQXVndXN0IDEyIDIwMDA6CiAgIC0gbW9zdGx5IGJ1ZyBmaXhlcwogICAtIHN0YXJ0ZWQgYWRkaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB4bWwgcGFyc2VyIGNvbnRleHQgb3B0aW9ucwoKCjIuMi4xOiBKdWx5IDIxIDIwMDA6CiAgIC0gYSBwdXJlbHkgYnVnIGZpeGVzIHJlbGVhc2UKICAgLSBmaXhlZCBhbiBlbmNvZGluZyBzdXBwb3J0IHByb2JsZW0gd2hlbiBwYXJzaW5nIGZyb20gYSBtZW1vcnkgYmxvY2sKICAgLSBmaXhlZCBhIERPQ1RZUEUgcGFyc2luZyBwcm9ibGVtCiAgIC0gcmVtb3ZlZCBhIGJ1ZyBpbiB0aGUgZnVuY3Rpb24gYWxsb3dpbmcgdG8gb3ZlcnJpZGUgdGhlIG1lbW9yeQogICAgYWxsb2NhdGlvbiByb3V0aW5lcwoKCjIuMi4wOiBKdWx5IDE0IDIwMDA6CiAgIC0gYXBwbGllZCBhIGxvdCBvZiBwb3J0YWJpbGl0eSBmaXhlcwogICAtIGJldHRlciBlbmNvZGluZyBzdXBwb3J0L2NsZWFudXAgYW5kIHNhdmluZyAoY29udGVudCBpcyBub3cgYWx3YXlzCiAgICBlbmNvZGVkIGluIFVURi04KQogICAtIHRoZSBIVE1MIHBhcnNlciBub3cgY29ycmVjdGx5IGhhbmRsZXMgZW5jb2RpbmdzCiAgIC0gYWRkZWQgeG1sSGFzUHJvcCgpCiAgIC0gZml4ZWQgYSBzZXJpb3VzIHByb2JsZW0gd2l0aCAmIzM4OwogICAtIHByb3BhZ2F0ZWQgdGhlIGZpeCB0byBGVFAgY2xpZW50CiAgIC0gY2xlYW51cCwgYnVnZml4ZXMsIGV0YyAuLi4KICAgLSBBZGRlZCBhIHBhZ2UgYWJvdXQgbGlieG1sIEludGVybmF0aW9uYWxpemF0aW9uCiAgICBzdXBwb3J0CgoKCjEuOC45OiAgSnVseSA5IDIwMDA6CiAgIC0gZml4ZWQgdGhlIHNwZWMgdGhlIFJQTXMgc2hvdWxkIGJlIGJldHRlcgogICAtIGZpeGVkIGEgc2VyaW91cyBidWcgaW4gdGhlIEZUUCBpbXBsZW1lbnRhdGlvbiwgcmVsZWFzZWQgMS44LjkgdG8gc29sdmUKICAgIHJwbWZpbmQgdXNlcnMgcHJvYmxlbQoKCjIuMS4xOiBKdWx5IDEgMjAwMDoKICAgLSBmaXhlcyBhIGNvdXBsZSBvZiBidWdzIGluIHRoZSAyLjEuMCBwYWNrYWdpbmcKICAgLSBpbXByb3ZlbWVudHMgb24gdGhlIEhUTUwgcGFyc2VyCgoKMi4xLjAgYW5kIDEuOC44OiBKdW5lIDI5IDIwMDA6CiAgIC0gMS44LjggaXMgbW9zdGx5IGEgY29tbW9kaXR5IHBhY2thZ2UgZm9yIHVwZ3JhZGluZyB0byBsaWJ4bWwyIGFjY29yZGluZwogICAgdG8gbmV3IGluc3RydWN0aW9ucy4gSXQgZml4ZXMgYSBuYXN0eSBwcm9ibGVtCiAgICBhYm91dCAmIzM4OyBjaGFycmVmIHBhcnNpbmcKICAgLSAyLjEuMCBhbHNvIGVhc2UgdGhlIHVwZ3JhZGUgZnJvbSBsaWJ4bWwgdjEgdG8gdGhlIHJlY2VudCB2ZXJzaW9uLiBpdAogICAgYWxzbyBjb250YWlucyBudW1lcm91cyBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzOgogICAgYWRkZWQgeG1sU3RvcFBhcnNlcigpIHRvIHN0b3AgcGFyc2luZwogICAgICBpbXByb3ZlZCBhIGxvdCBwYXJzaW5nIHNwZWVkIHdoZW4gdGhlcmUgaXMgbGFyZ2UgQ0RBVEEgYmxvY3MKICAgICAgaW5jbHVkZXMgWFBhdGggcGF0Y2hlcyBwcm92aWRlZCBieSBQaWNkYXIgVGVjaG5vbG9neQogICAgICB0cmllZCB0byBmaXggYXMgbXVjaCBhcyBwb3NzaWJsZSBEVEQgdmFsaWRhdGlvbiBhbmQgbmFtZXNwYWNlCiAgICAgICAgcmVsYXRlZCBwcm9ibGVtcwogICAgICBvdXRwdXQgdG8gYSBnaXZlbiBlbmNvZGluZyBoYXMgYmVlbiBhZGRlZC90ZXN0ZWQKICAgICAgbG90IG9mIHZhcmlvdXMgZml4ZXMKICAgIAogICAtIGFkZGVkIHhtbFN0b3BQYXJzZXIoKSB0byBzdG9wIHBhcnNpbmcKICAgLSBpbXByb3ZlZCBhIGxvdCBwYXJzaW5nIHNwZWVkIHdoZW4gdGhlcmUgaXMgbGFyZ2UgQ0RBVEEgYmxvY3MKICAgLSBpbmNsdWRlcyBYUGF0aCBwYXRjaGVzIHByb3ZpZGVkIGJ5IFBpY2RhciBUZWNobm9sb2d5CiAgIC0gdHJpZWQgdG8gZml4IGFzIG11Y2ggYXMgcG9zc2libGUgRFREIHZhbGlkYXRpb24gYW5kIG5hbWVzcGFjZQogICAgICAgIHJlbGF0ZWQgcHJvYmxlbXMKICAgLSBvdXRwdXQgdG8gYSBnaXZlbiBlbmNvZGluZyBoYXMgYmVlbiBhZGRlZC90ZXN0ZWQKICAgLSBsb3Qgb2YgdmFyaW91cyBmaXhlcwoKCjIuMC4wOiBBcHIgMTIgMjAwMDoKICAgLSBGaXJzdCBwdWJsaWMgcmVsZWFzZSBvZiBsaWJ4bWwyLiBJZiB5b3UgYXJlIHVzaW5nIGxpYnhtbCwgaXQncyBhIGdvb2QKICAgIGlkZWEgdG8gY2hlY2sgdGhlIDEueCB0byAyLnggdXBncmFkZSBpbnN0cnVjdGlvbnMuIE5PVEU6IHdoaWxlIGluaXRpYWxseQogICAgc2NoZWR1bGVkIGZvciBBcHIgMyB0aGUgcmVsZWFzZSBvY2N1cnJlZCBvbmx5IG9uIEFwciAxMiBkdWUgdG8gbWFzc2l2ZQogICAgd29ya2xvYWQuCiAgIC0gVGhlIGluY2x1ZGUgYXJlIG5vdyBsb2NhdGVkIHVuZGVyICRwcmVmaXgvaW5jbHVkZS9saWJ4bWwgKGluc3RlYWQgb2YKICAgICRwcmVmaXgvaW5jbHVkZS9nbm9tZS14bWwpLCB0aGV5IGFsc28gYXJlIHJlZmVyZW5jZWQgYnkKICAgICNpbmNsdWRlIDxsaWJ4bWwveHh4Lmg+CiAgICBpbnN0ZWFkIG9mCiAgICAjaW5jbHVkZSAieHh4LmgiCiAgCiAgIC0gYSBuZXcgVVJJIG1vZHVsZSBmb3IgcGFyc2luZyBVUklzIGFuZCBmb2xsb3dpbmcgc3RyaWN0bHkgUkZDIDIzOTYKICAgLSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgdXNlZCBieSBsaWJ4bWwgY2FuIG5vdyBiZSBvdmVybG9hZGVkCiAgICBkeW5hbWljYWxseSBieSB1c2luZyB4bWxNZW1TZXR1cCgpCiAgIC0gVGhlIHByZXZpb3VzbHkgQ1ZTIG9ubHkgdG9vbCB0ZXN0ZXIgaGFzIGJlZW4gcmVuYW1lZAogICAgeG1sbGludCBhbmQgaXMgbm93IGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBsaWJ4bWwyCiAgICBwYWNrYWdlCiAgIC0gVGhlIEkvTyBpbnRlcmZhY2UgaGFzIGJlZW4gcmV2YW1wZWQuIFRoZXJlIGlzIG5vdyB3YXlzIHRvIHBsdWcgaW4KICAgIHNwZWNpZmljIEkvTyBtb2R1bGVzLCBlaXRoZXIgYXQgdGhlIFVSSSBzY2hlbWUgZGV0ZWN0aW9uIGxldmVsIHVzaW5nCiAgICB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKCkgIG9yIGJ5IHBhc3NpbmcgSS9PIGZ1bmN0aW9ucyB3aGVuIGNyZWF0aW5nIGEKICAgIHBhcnNlciBjb250ZXh0IHVzaW5nIHhtbENyZWF0ZUlPUGFyc2VyQ3R4dCgpCiAgIC0gdGhlcmUgaXMgYSBDIHByZXByb2Nlc3NvciBtYWNybyBMSUJYTUxfVkVSU0lPTiBwcm92aWRpbmcgdGhlIHZlcnNpb24KICAgIG51bWJlciBvZiB0aGUgbGlieG1sIG1vZHVsZSBpbiB1c2UKICAgLSBhIG51bWJlciBvZiBvcHRpb25hbCBmZWF0dXJlcyBvZiBsaWJ4bWwgY2FuIG5vdyBiZSBleGNsdWRlZCBhdAogICAgY29uZmlndXJlIHRpbWUgKEZUUC9IVFRQL0hUTUwvWFBhdGgvRGVidWcpCgoKMi4wLjBiZXRhOiBNYXIgMTQgMjAwMDoKICAgLSBUaGlzIGlzIGEgZmlyc3QgQmV0YSByZWxlYXNlIG9mIGxpYnhtbCB2ZXJzaW9uIDIKICAgLSBJdCdzIGF2YWlsYWJsZSBvbmx5IGZyb214bWxzb2Z0Lm9yZwogICAgRlRQLCBpdCdzIHBhY2thZ2VkIGFzIGxpYnhtbDItMi4wLjBiZXRhIGFuZCBhdmFpbGFibGUgYXMgdGFyIGFuZAogIFJQTXMKICAgLSBUaGlzIHZlcnNpb24gaXMgbm93IHRoZSBoZWFkIGluIHRoZSBHbm9tZSBDVlMgYmFzZSwgdGhlIG9sZCBvbmUgaXMKICAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGFnIExJQl9YTUxfMV9YCiAgIC0gVGhpcyBpbmNsdWRlcyBhIHZlcnkgbGFyZ2Ugc2V0IG9mIGNoYW5nZXMuIEZyb20gYSAgcHJvZ3JhbW1hdGljIHBvaW50CiAgICBvZiB2aWV3IGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IGhhdmUgdG8gYmUgbW9kaWZpZWQgdG9vIG11Y2gsIGNoZWNrIHRoZQogICAgdXBncmFkZSBwYWdlCgogICAtIFNvbWUgaW50ZXJmYWNlcyBtYXkgY2hhbmdlcyAoZXNwZWNpYWxseSBhIGJpdCBhYm91dCBlbmNvZGluZykuCiAgIC0gdGhlIHVwZGF0ZXMgaW5jbHVkZXM6CiAgICBmaXggSTE4TiBzdXBwb3J0LiBJU08tTGF0aW4teC9VVEYtOC9VVEYtMTYgKG5lYXJseSkgc2VlbXMgY29ycmVjdGx5CiAgICAgICAgaGFuZGxlZCBub3cKICAgICAgQmV0dGVyIGhhbmRsaW5nIG9mIGVudGl0aWVzLCBlc3BlY2lhbGx5IHdlbGwtZm9ybWVkbmVzcyBjaGVja2luZwogICAgICAgIGFuZCBwcm9wZXIgUEVyZWYgZXh0ZW5zaW9ucyBpbiBleHRlcm5hbCBzdWJzZXRzCiAgICAgIERURCBjb25kaXRpb25hbCBzZWN0aW9ucwogICAgICBWYWxpZGF0aW9uIG5vdyBjb3JyZWN0bHkgaGFuZGxlIGVudGl0aWVzIGNvbnRlbnQKICAgICAgY2hhbmdlCiAgICAgICAgc3RydWN0dXJlcyB0byBhY2NvbW1vZGF0ZSBET00KICAgIAogICAtIGZpeCBJMThOIHN1cHBvcnQuIElTTy1MYXRpbi14L1VURi04L1VURi0xNiAobmVhcmx5KSBzZWVtcyBjb3JyZWN0bHkKICAgICAgICBoYW5kbGVkIG5vdwogICAtIEJldHRlciBoYW5kbGluZyBvZiBlbnRpdGllcywgZXNwZWNpYWxseSB3ZWxsLWZvcm1lZG5lc3MgY2hlY2tpbmcKICAgICAgICBhbmQgcHJvcGVyIFBFcmVmIGV4dGVuc2lvbnMgaW4gZXh0ZXJuYWwgc3Vic2V0cwogICAtIERURCBjb25kaXRpb25hbCBzZWN0aW9ucwogICAtIFZhbGlkYXRpb24gbm93IGNvcnJlY3RseSBoYW5kbGUgZW50aXRpZXMgY29udGVudAogICAtIGNoYW5nZQogICAgICAgIHN0cnVjdHVyZXMgdG8gYWNjb21tb2RhdGUgRE9NCiAgIC0gU2VyaW91cyBwcm9ncmVzcyB3ZXJlIG1hZGUgdG93YXJkIGNvbXBsaWFuY2UsIGhlcmUgYXJlIHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgYWdhaW5zdCB0aGUKICAgIE9BU0lTIHRlc3RzdWl0ZSAoZXhjZXB0IHRoZSBKYXBhbmVzZSB0ZXN0cyBzaW5jZSBJIGRvbid0IHN1cHBvcnQgdGhhdAogICAgZW5jb2RpbmcgeWV0KS4gVGhpcyBVUkwgaXMgcmVidWlsdCBldmVyeSBjb3VwbGUgb2YgaG91cnMgdXNpbmcgdGhlIENWUwogICAgaGVhZCB2ZXJzaW9uLgoKCjEuOC43OiBNYXIgNiAyMDAwOgogICAtIFRoaXMgaXMgYSBidWcgZml4IHJlbGVhc2U6CiAgIC0gSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgaWdub3JhYmxlIGJsYW5rcyBoZXVyaXN0aWMgdXNlZCBieQogICAgbGlieG1sLTEueCwgYSBuZXcgZnVuY3Rpb24gIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdpbGwgYWxsb3cgdGhpcy4gTm90ZQogICAgdGhhdCBmb3IgYWRoZXJlbmNlIHRvIFhNTCBzcGVjLCB0aGlzIGJlaGF2aW91ciB3aWxsIGJlIGRpc2FibGVkIGJ5CiAgICBkZWZhdWx0IGluIDIueCAuIFRoZSBzYW1lIGZ1bmN0aW9uIHdpbGwgYWxsb3cgdG8ga2VlcCBjb21wYXRpYmlsaXR5IGZvcgogICAgb2xkIGNvZGUuCiAgIC0gQmxhbmtzIGluIDxhPiAgPC9hPiBjb25zdHJ1Y3RzIGFyZSBub3QgaWdub3JlZCBhbnltb3JlLAogICAgYXZvaWRpbmcgaGV1cmlzdGljIGlzIHJlYWxseSB0aGUgUmlnaHQgV2F5IDotXAogICAtIFRoZSB1bmNoZWNrZWQgdXNlIG9mIHNucHJpbnRmIHdoaWNoIHdhcyBicmVha2luZyBsaWJ4bWwtMS44LjYKICAgIGNvbXBpbGF0aW9uIG9uIHNvbWUgcGxhdGZvcm1zIGhhcyBiZWVuIGZpeGVkCiAgIC0gbmFub2Z0cC5jIG5hbm9odHRwLmM6IEZpeGVkICcjJyBhbmQgJz8nIHN0cmlwcGluZyB3aGVuIHByb2Nlc3NpbmcKICBVUklzCgoKMS44LjY6IEphbiAzMSAyMDAwOgogICAtIGFkZGVkIGEgbmFub0ZUUCB0cmFuc3BvcnQgbW9kdWxlLCBkZWJ1Z2dlZCB1bnRpbCB0aGUgbmV3IHZlcnNpb24gb2YgcnBtZmluZCBjYW4gdXNlCiAgICBpdCB3aXRob3V0IHRyb3VibGVzCgoKMS44LjU6IEphbiAyMSAyMDAwOgogICAtIGFkZGluZyBBUElzIHRvIHBhcnNlIGEgd2VsbCBiYWxhbmNlZCBjaHVuayBvZiBYTUwgKHByb2R1Y3Rpb24gWzQzXSBjb250ZW50IG9mIHRoZQogICAgWE1MIHNwZWMpCiAgIC0gZml4ZWQgYSBoaWRlb3VzIGJ1ZyBpbiB4bWxHZXRQcm9wIHBvaW50ZWQgYnkgUnVuZS5EanVyaHV1c0BmYXN0Lm5vCiAgIC0gSm9keSBHb2xkYmVyZyA8amdvbGRiZXJnQGhvbWUuY29tPiBwcm92aWRlZCBhbm90aGVyIHBhdGNoIHRyeWluZwogICAgdG8gc29sdmUgdGhlIHpsaWIgY2hlY2tzIHByb2JsZW1zCiAgIC0gVGhlIGN1cnJlbnQgc3RhdGUgaW4gZ25vbWUgQ1ZTIGJhc2UgaXMgZXhwZWN0ZWQgdG8gc2hpcCBhcyAxLjguNSB3aXRoCiAgICBnbnVtZXJpYyBzb29uCgoKMS44LjQ6IEphbiAxMyAyMDAwOgogICAtIGJ1ZyBmaXhlcywgcmVpbnRyb2R1Y2VkIHhtbE5ld0dsb2JhbE5zKCksIGZpeGVkIHhtbE5ld05zKCkKICAgLSBhbGwgZXhpdCgpIGNhbGwgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gbGlieG1sCiAgIC0gZml4ZWQgYSBwcm9ibGVtIHdpdGggSU5DTFVERV9XSU5TT0NLIG9uIFdJTjMyIHBsYXRmb3JtCiAgIC0gYWRkZWQgbmV3RG9jRnJhZ21lbnQoKQoKCjEuOC4zOiBKYW4gNSAyMDAwOgogICAtIGEgUHVzaCBpbnRlcmZhY2UgZm9yIHRoZSBYTUwgYW5kIEhUTUwgcGFyc2VycwogICAtIGEgc2hlbGwtbGlrZSBpbnRlcmZhY2UgdG8gdGhlIGRvY3VtZW50IHRyZWUgKHRyeSB0ZXN0ZXIgLS1zaGVsbCA6LSkKICAgLSBsb3RzIG9mIGJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnQgYWRkZWQgb3ZlciBYTWFzIGhvbGlkYXlzCiAgIC0gZml4ZWQgdGhlIERURCBwYXJzaW5nIGNvZGUgdG8gd29yayB3aXRoIHRoZSB4aHRtbCBEVEQKICAgLSBhZGRlZCB4bWxSZW1vdmVQcm9wKCksIHhtbFJlbW92ZUlEKCkgYW5kIHhtbFJlbW92ZVJlZigpCiAgIC0gRml4ZWQgYnVncyBpbiB4bWxOZXdOcygpCiAgIC0gRXh0ZXJuYWwgZW50aXR5IGxvYWRpbmcgY29kZSBoYXMgYmVlbiByZXZhbXBlZCwgbm93IGl0IHVzZXMKICAgIHhtbExvYWRFeHRlcm5hbEVudGl0eSgpLCBzb21lIGZpeCBvbiBlbnRpdGllcyBwcm9jZXNzaW5nIHdlcmUgYWRkZWQKICAgLSBjbGVhbmVkIHVwIFdJTjMyIGluY2x1ZGVzIG9mIHNvY2tldCBzdHVmZgoKCjEuOC4yOiBEZWMgMjEgMTk5OToKICAgLSBJIGdvdCBhbm90aGVyIHByb2JsZW0gd2l0aCBpbmNsdWRlcyBhbmQgQysrLCBJIGhvcGUgdGhpcyBpc3N1ZSBpcyBmaXhlZAogICAgZm9yIGdvb2QgdGhpcyB0aW1lCiAgIC0gQWRkZWQgYSBmZXcgdHJlZSBtb2RpZmljYXRpb24gZnVuY3Rpb25zOiB4bWxSZXBsYWNlTm9kZSwKICAgIHhtbEFkZFByZXZTaWJsaW5nLCB4bWxBZGROZXh0U2libGluZywgeG1sTm9kZVNldE5hbWUgYW5kCiAgICB4bWxEb2NTZXRSb290RWxlbWVudAogICAtIFRyaWVkIHRvIGltcHJvdmUgdGhlIEhUTUwgb3V0cHV0IHdpdGggaGVscCBmcm9tIENocmlzIExhaGV5CgoKCjEuOC4xOiBEZWMgMTggMTk5OToKICAgLSB2YXJpb3VzIHBhdGNoZXMgdG8gYXZvaWQgdHJvdWJsZXMgd2hlbiB1c2luZyBsaWJ4bWwgd2l0aCBDKysgY29tcGlsZXJzCiAgICB0aGUgIm5hbWVzcGFjZSIga2V5d29yZCBhbmQgQyBlc2NhcGluZyBpbiBpbmNsdWRlIGZpbGVzCiAgIC0gYSBwcm9ibGVtIGluIG9uZSBvZiB0aGUgY29yZSBtYWNyb3MgSVNfQ0hBUiB3YXMgY29ycmVjdGVkCiAgIC0gZml4ZWQgYSBidWcgaW50cm9kdWNlZCBpbiAxLjguMCBicmVha2luZyBkZWZhdWx0IG5hbWVzcGFjZSBwcm9jZXNzaW5nLAogICAgYW5kIG1vcmUgc3BlY2lmaWNhbGx5IHRoZSBEaWEgYXBwbGljYXRpb24KICAgLSBmaXhlZCBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbiAodmFsaWRhdGlvbiBhZnRlciBwYXJzaW5nLCBvciBieSB1c2luZyBhCiAgICBEdGQgbm90IHNwZWNpZmllZCBpbiB0aGUgb3JpZ2luYWwgZG9jdW1lbnQpCiAgIC0gZml4ZWQgYSBidWcgaW4KCgoxLjguMDogRGVjIDEyIDE5OTk6CiAgIC0gY2xlYW51cCwgZXNwZWNpYWxseSBtZW1vcnkgd2lzZQogICAtIHRoZSBwYXJzZXIgc2hvdWxkIGJlIG1vcmUgcmVsaWFibGUsIGVzcGVjaWFsbHkgdGhlIEhUTUwgb25lLCBpdCBzaG91bGQKICAgIG5vdCBjcmFzaCwgd2hhdGV2ZXIgdGhlIGlucHV0ICEKICAgLSBJbnRlZ3JhdGVkIHZhcmlvdXMgcGF0Y2hlcywgZXNwZWNpYWxseSBhIHNwZWVkdXAgaW1wcm92ZW1lbnQgZm9yIGxhcmdlCiAgICBkYXRhc2V0IGZyb20gQ2FybCBOeWdhcmQsCiAgICBjb25maWd1cmUgd2l0aCAtLXdpdGgtYnVmZmVycyB0byBlbmFibGUgdGhlbS4KICAgLSBhdHRyaWJ1dGUgbm9ybWFsaXphdGlvbiwgb29wcyBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIGxvbmcgYWdvICEKICAgLSBhdHRyaWJ1dGVzIGRlZmF1bHRlZCBmcm9tIERURHMgc2hvdWxkIGJlIGF2YWlsYWJsZSwgeG1sU2V0UHJvcCgpIG5vdwogICAgZG9lcyBlbnRpdGllcyBlc2NhcGluZyBieSBkZWZhdWx0LgoKCjEuNy40OiBPY3QgMjUgMTk5OToKICAgLSBMb3RzIG9mIEhUTUwgaW1wcm92ZW1lbnQKICAgLSBGaXhlZCBzb21lIGVycm9ycyB3aGVuIHNhdmluZyBib3RoIFhNTCBhbmQgSFRNTAogICAtIE1vcmUgZXhhbXBsZXMsIHRoZSByZWdyZXNzaW9uIHRlc3RzIHNob3VsZCBub3cgbG9vayBjbGVhbgogICAtIEZpeGVkIGEgYnVnIHdpdGggY29udGlndW91cyBjaGFycmVmCgoKMS43LjM6IFNlcCAyOSAxOTk5OgogICAtIHBvcnRhYmlsaXR5IHByb2JsZW1zIGZpeGVkCiAgIC0gc25wcmludGYgd2FzIHVzZWQgdW5jb25kaXRpb25hbGx5LCBsZWFkaW5nIHRvIGxpbmsgcHJvYmxlbXMgb24gc3lzdGVtCiAgICB3ZXJlIGl0J3Mgbm90IGF2YWlsYWJsZSwgZml4ZWQKCgoxLjcuMTogU2VwIDI0IDE5OTk6CiAgIC0gVGhlIGJhc2ljIHR5cGUgZm9yIHN0cmluZ3MgbWFuaXB1bGF0ZWQgYnkgbGlieG1sIGhhcyBiZWVuIHJlbmFtZWQgaW4KICAgIDEuNy4xIGZyb20gQ0hBUiB0byB4bWxDaGFyLiBUaGUgcmVhc29uCiAgICBpcyB0aGF0IENIQVIgd2FzIGNvbmZsaWN0aW5nIHdpdGggYSBwcmVkZWZpbmVkIHR5cGUgb24gV2luZG93cy4gSG93ZXZlcgogICAgb24gbm9uIFdJTjMyIGVudmlyb25tZW50LCBjb21wYXRpYmlsaXR5IGlzIHByb3ZpZGVkIGJ5IHRoZSB3YXkgb2YgIGEKICAgICNkZWZpbmUgLgogICAtIENoYW5nZWQgYW5vdGhlciBlcnJvciA6IHRoZSB1c2Ugb2YgYSBzdHJ1Y3R1cmUgZmllbGQgY2FsbGVkIGVycm5vLCBhbmQKICAgIGxlYWRpbmcgdG8gdHJvdWJsZXMgb24gcGxhdGZvcm1zIHdoZXJlIGl0J3MgYSBtYWNybwoKCjEuNy4wOiBTZXAgMjMgMTk5OToKICAgLSBBZGRlZCB0aGUgYWJpbGl0eSB0byBmZXRjaCByZW1vdGUgRFREIG9yIHBhcnNlZCBlbnRpdGllcywgc2VlIHRoZSBuYW5vaHR0cCBtb2R1bGUuCiAgIC0gQWRkZWQgYW4gZXJybm8gdG8gcmVwb3J0IGVycm9ycyBieSBhbm90aGVyIG1lYW4gdGhhbiBhIHNpbXBsZSBwcmludGYKICAgIGxpa2UgY2FsbGJhY2sKICAgLSBGaW5pc2hlZCBJRC9JRFJFRiBzdXBwb3J0IGFuZCBjaGVja2luZyB3aGVuIHZhbGlkYXRpb24KICAgLSBTZXJpb3VzIG1lbW9yeSBsZWFrcyBmaXhlZCAodGhlcmUgaXMgbm93IGEgbWVtb3J5IHdyYXBwZXIgbW9kdWxlKQogICAtIEltcHJvdmVtZW50IG9mIFhQYXRoCiAgICBpbXBsZW1lbnRhdGlvbgogICAtIEFkZGVkIGFuIEhUTUwgcGFyc2VyIGZyb250LWVuZAoKRGFuaWVsIFZlaWxsYXJkIGF0IApidWdzLmh0bWwKCg==