VmVyc2lvbiA1LjNhICh3aW4zMiBvbmx5KQoKIFRyb3kgRW5nZWwKIC0gQ29ycmVjdGVkIGEgd2luMzIgYnVnIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBwYXJ0LgoKVmVyc2lvbiA1LjMKCiBHaWxiZXJ0IFJhbWlyZXogSnIuICgyMSBEZWMgMTk5OCkKIC0gSSBoYXZlIGltcGxlbWVudGVkIHRoZSAicXVvdGUiIGZ1bmN0aW9uIG9mIEZUUCBjbGllbnRzLiBJdCBhbGxvd3MgeW91IHRvCiAgIHNlbmQgYXJiaXRyYXJ5IGNvbW1hbmRzIHRvIHRoZSByZW1vdGUgRlRQIHNlcnZlci4gSSBjaG9zZSB0aGUgLVEvLS1xdW90ZQogICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgoKICAgWW91IGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcXVvdGVkIHN0cmluZywgYW5kIGN1cmwgd2lsbCBhcHBseSB0aGVtIGluCiAgIG9yZGVyLiAgVGhpcyBpcyB3aGF0IEkgdXNlIGZvciBteSBNVlMgdXBsb2FkOgoKICBjdXJsIC1CIC0tY3JsZiAtUSAic2l0ZSBscmVjbD04MCIgLVEgInNpdGUgYmxrPTgwMDAiIC1UIGZpbGUgZnRwOi8vb3MzOTAvdGVzdAoKICAgQ3VybCB3aWxsIHNlbmQgdGhlIHR3byBxdW90ZWQgInNpdGUiIGNvbW1hbmRzIGluIHRoZSBwcm9wZXIgb3JkZXIuCgogLSBNYWRlIGl0IGNvbXBpbGUgc21vb3RobHkgb24gQUlYLgoKIEdpbGJlcnQgUmFtaXJleiBKci4gKDE4IERlYyAxOTk4KQogLSBCcm91Z2h0IGFuIE1WUyBwYXRjaDogLTMvLS1tdnMsIGZvciBmdHAgdXBsb2FkIHRvIHRoZSBNVlMgZnRwIHNlcnZlci4KCiBUcm95IEVuZ2VsICgxNyBEZWMgMTk5OCkKIC0gQnJvdWdodCBhIGNvcnJlY3Rpb24gdGhhdCBmaXhlcyB0aGUgd2luMzIgY3VybCBidWcuCgogRGFuaWVsIFN0ZW5iZXJnCiAtIEEgYnVnLCBwb2ludGVkIG91dCB0byBtZSBieSBEciBILiBULiBMZXVuZywgY2F1c2VkIGN1cmwgdG8gY3Jhc2ggb24gdGhlIC1BCiAgIGZsYWcgb24gY2VydGFpbiBzeXN0ZW1zLiBBY3R1YWxseSwgYWxsIHN5c3RlbXMgc2hvdWxkJ3ZlIQoKIC0gQWRkZWQgYSBmZXcgZGVmaW5lcyB0byBtYWtlIGRpcmVjdG9yaWVzL2ZpbGUgbmFtZXMgZ2V0IGJ1aWxkIG5pY2VyICh3aXRoIF8KICAgaW5zdGVhZCBvZiAuIGFuZCBcIGluc3RlYWQgb2YgLyBpbiB3aW4zMikuCgogLSBzdGV2ZSA8ZmlzayBhdCBwb2xhci5ib3dkb2luLmVkdT4gcmVwb3J0ZWQgYSB3ZWlyZCBidWcgdGhhdCBvY2N1cmVkIGlmIHRoZQogICBmdHAgc2VydmVyIHJlc3BvbnNlIGxpbmUgaGFkIGEgcGFyZW50aGVzaXMgb24gdGhlIGxpbmUgYmVmb3JlIHRoZSAoc2l6ZSkKICAgaW5mby4gSSBob3BlIGl0IHdvcmtzIGJldHRlciBub3chCgpWZXJzaW9uIDUuMi4xCgogU3RldmVuIEcuIEpvaG5zb24gKERlYyAxNCwgMTk5OCkKIC0gQnJvdWdodCBhIGZpeCB0aGF0IGNvcnJlY3RlZCBhIGNyYXNoIGluIDUuMiBkdWUgdG8gYmFkIHRyZWF0bWVudCBvZiB0aGUKICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLgoKVmVyc2lvbiA1LjIKCiBEYW5pZWwgU3RlbmJlcmcgKERlYyAxNCwgMTk5OCkKIC0gUmV3cm90ZSB0aGUgbWtoZWxwIHNjcmlwdCBhbmQgbm93LCB0aGUgbWtoZWxwLnBsIHNjcmlwdCBnZW5lcmF0ZXMgdGhlCiAgIGh1Z2VoZWxwLmMgZmlsZSBmcm9tIHRoZSBSRUFETUUgKmFuZCogdGhlIG1hbiBwYWdlIGZpbGUgY3VybC4xLiBCeSB1c2luZwogICBib3RoIGZpbGVzLCBJIG5vIGxvbmdlciBuZWVkIHRvIGhhdmUgZG91YmxlIGluZm9ybWF0aW9uIGluIGJvdGggdGhlIG1hbgogICBwYWdlIGFuZCB0aGUgUkVBRE1FIGFzIHdlbGwuIFNvLCB3aW4zMi11c2VycyB3aWxsIG9ubHkgaGF2ZSB0aGUgaHVnZWhlbHAuYwogICBmaWxlIGZvciBhbGwgaW5mbywgYnV0IHRoZW4sIHRoZXkgZG93bmxvYWQgdGhlIHBsYWluIGJpbmFyeSBtb3N0IHRpbWVzCiAgIGFueXdheS4KCiAtIGdjYzIuOC4xIHdpdGggdGhlIC1XYWxsIGZsYWcgY29tcGxhaW50cyBhIGxvdCBvbiBzdWJzY3JpcHQgaGFzIHR5cGUgYGNoYXInCiAgIGlmIEkgZG9uJ3QgZXhwbGljaXRseSB0eXBlY2FzdCB0aGUgYXJndW1lbnQgdG8gaXNkaWdpdCgpIG9yIGlzc3BhY2UoKSB0bwogICBpbnQuIFNvIEkgZGlkIHRvIGNvbXBpbGUgd2FybmluZyBmcmVlIHdpdGggdGhhdCB0b28uCgogLSBBZGRlZCBjaGVja3MgZm9yICdsb25nIGRvdWJsZScgYW5kICdsb25nIGxvbmcnIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LiBJCiAgIG5lZWQgdGhvc2UgZm9yIHRoZSBtcHJpbnRmLmMgc291cmNlIHRvIGNvbXBpbGUgd2VsbCBvbiBub24gbG9uZyBsb25nCiAgIGNvbWZvcm1pbmcgc3lzdGVtcyEKClZlcnNpb24gNS4xIChub3QgcHVibGljbHkgcmVsZWFzZWQpCgogRGFuaWVsIFN0ZW5iZXJnIChEZWMgMTAsIDE5OTgpCiAtIEkgZ290IGEgcmVxdWVzdCBmb3IgYSBwcmUtY29tcGlsZWQgTlQgQWxwaGEgdmVyc2lvbi4gQW55b25lPwoKIC0gQWRkZWQgTHlueC9DRVJOIHd3dyBsaWIgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGUgc3VwcG9ydC4gVGhhdCBtZWFucyBjdXJsCiAgIG5vdyByZWFkcyBhbmQgdW5kZXJzdGFuZHMgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CgoJSFRUUF9QUk9YWSwgSFRUUFNfUFJPWFksIEZUUF9QUk9YWSwgR09QSEVSX1BST1hZCgogICBUaGV5IHNob3VsZCBiZSBzZXQgZm9yIHByb3RvY29sLXNwZWNpZmljIHByb3hpZXMuIEdlbmVyYWwgcHJveHkgc2hvdWxkIGJlCiAgIHNldCB3aXRoCgkKCUFMTF9QUk9YWQoKICAgQW5kIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaG9zdCBuYW1lcyB0aGF0IHNob3VsZG4ndCBnbyB0aHJvdWdoIGFueQogICBwcm94eSBpcyBzZXQgaW4gKG9ubHkgYW4gYXN0ZXJpc2ssICcqJyBtYXRjaGVzIGFsbCBob3N0cykuCgoJTk9fUFJPWFkKCiAgIFRoZSB1c2FnZSBvZiB0aGUgLXgvLS1wcm94eSBmbGFnIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgoKIC0gUHJveHkgY2FuIG5vdyBiZSBzcGVjaWZpZWQgd2l0aCBhIHByb2NvdG9sOi8vIHByZWZpeC4KCiAtIFdyb3RlIHRoZSBjdXJsLjEgbWFuIHBhZ2UuCgogLSBJbnRyb2R1Y2VkIGEgd2hvbGUgbmV3IGR5bmFtaWMgYnVmZmVyIHN5c3RlbSBmb3IgYWxsIHNwcmludGYoKXMuIEl0IGlzCiAgIGJhc2VkIG9uIHRoZSAqcHJpbnRmKCkgcGFja2FnZSBieSB5b3VycyB0cnVseSBhbmQgQmpvcm4gUmVlc2UuIEhvcGVmdWxseSwKICAgdGhlcmUgYXJlbid0IHRoYXQgbWFueSBidWZmZXIgb3ZlcmZsb3cgcmlza3MgbGVmdCBub3cuCgogLSBBaCwgSSBzaG91bGQgbWVudGlvbiBJJ3ZlIGNvbXBpbGVkIGFuZCBidWlsdCBjdXJsIHN1Y2Nlc3NmdWxseSB1bmRlcgogICBzb2xhcmlzIDIuNiB3aXRoIGdjYyBub3csIGdjYyAyLjcuMiB3b24ndCB3b3JrIGJ1dCAyLjguMSBkaWQgb2suCgogT3JlbiBUaXJvc2ggKERlYyAzLCAxOTk4KQogLSBCcm91Z2h0IHR3byAuc3BlYyBmaWxlcywgdG8gdXNlIHdoZW4gY3JlYXRpbmcgKExpbnV4KSBSZWRoYXQgc3R5bGUgUlBNCiAgIHBhY2thZ2VzLiBUaGV5J3JlIG5hbWVkIGN1cmwuc3BlYyBhbmQgY3VybC1zc2wuc3BlYy4KCiBUcm95IEVuZ2VsCiAtIFN1cHBsaWVkIHRoZSBzcmMvTWFrZWZpbGUudmM2IGZvciBlYXN5IGNvbXBpbGluZyB3aXRoIFZDKysgdW5kZXIgV2luMzIuCgpWZXJzaW9uIDUuMAoKIERhbmllbCBTdGVuYmVyZyAoRGVjIDEsIDE5OTgpCiAtIE5vdCBhIHNpbmdsZSBidWcgcmVwb3J0IGluIGFnZXMuCiAtIENvcnJlY3RlZCBnZXRwYXNzLmMgYW5kIG1haW4uYyB0byBjb21waWxlIHdhcm5pbmcgYW5kIGVycm9yIGZyZWUgd2l0aCB0aGUKICAgV2luMzIgVkMrKyBjcmFwLgoKVmVyc2lvbiA1LjAgYmV0YSAyNAoKIERhbmllbCBTdGVuYmVyZyAoTm92IDIwLCAxOTk4KQoKIEhPVyBUTyBCVUlMRCBBIFJFTEVBU0UgQVJDSElWRToKCiAqIFByZS1yZXF1aXNpdGUgc29mdHdhcmU6CiAgIFdoYXQJCSAgICAgVG8gYnVpbGQgd2hhdCAgICAgICAgICAgICBSZWFkcyBkYXRhIGZyb20KICAgPT09PSAgICAgICAgICAgICAgPT09PT09PT09PT09PSAgICAgICAgICAgICA9PT09PT09PT09PT09PT0KICAgR05VIGF1dG9tYWtlICAgICAgTWFrZWZpbGUuaW4sIGFjbG9jYWwubTQgICBjb25maWd1cmUuaW4KICAgICBHTlUgbWFrZSgxKSAgICAgIC0gIiAtCiAgICAgR05VIGdjYygxKSAgICAgICAtICIgLQogICBHTlUgYXV0b2NvbmYgICAgICBjb25maWd1cmUgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZS5pbgogICBHTlUgYXV0b2hlYWRlcigyKSBjb25maWcuaC5pbgkgICAgICAgY29uZmlndXJlLmluLCBhY2NvbmZpZy5oCgogKiBNYWtlIHN1cmUgYWxsIGZpbGVzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGFyY2hpdmUgYXJlIHB1dCBpbiBGSUxFUy4KCiAqIFJ1biAnLi9tYWtldGd6JyBhbmQgZW50ZXIgdmVyc2lvbiBudW1iZXIgb2YgdGhlIG5ldyB0byBiZWNvbWUgYXJjaGl2ZS4KCiAgIG1ha2V0Z3ogZG9lczoKCiAgIC0gRW50ZXJzIHRoZSBuZXdseSBjcmVhdGVkIHZlcnNpb24gbnVtYmVyIGluIHVybC5oLgogICAtIChJZiB5b3UgZG9uJ3QgaGF2ZSBhdXRvbWFrZSwgdGhpcyBzY3JpcHQgd2lsbCB3YXJuIGFib3V0IHRoYXQsIGJ1dCB1bmxlc3MKICAgICB5b3UgaGF2ZSBjaGFuZ2VkIHRoZSBNYWtlZmlsZS5hbSBmaWxlcywgdGhhdCBpcyBub3RoaW5nIHRvIGNhcmUgYWJvdXQuKQogICAgIElmIHlvdSBoYXZlIGl0LCBpdCdsbCBydW4gaXQuCiAgIC0gSWYgeW91IGhhdmUgYXV0b2NvbmYsIHRoZSBjb25maWd1cmUuaW4gd2lsbCBiZSBlZGl0ZWQgdG8gZ2V0IHRoZSBuZXdseQogICAgIGNyZWF0ZWQgdmVyc2lvbiBudW1iZXIgYW5kIGF1dG9jb25mIHdpbGwgYmUgcnVuLgogICAtIENyZWF0ZXMgYSBuZXcgZGlyZWN0b3J5IG5hbWVkIGN1cmwtPHZlcnNpb24+LiAoQWN0dWFsbHksIGl0IHVzZXMgdGhlIGJhc2UKICAgICBuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB1cCB0byB0aGUgZmlyc3QgJy0nLikKICAgLSBDb3BpZXMgYWxsIGZpbGVzIG1lbnRpb25lZCBpbiBGSUxFUyB0byB0aGUgbmV3IGRpcmVjdG9yeS4gU2F2aW5nCiAgICAgcGVybWlzc2lvbnMgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCiAgIC0gVXNlcyB0YXIgdG8gY3JlYXRlIGFuIGFyY2hpdmUgb2YgaXQgYWxsLCBuYW1lZCBjdXJsLTx2ZXJzaW9uPi50YXIuZ3oKICAgLSBnemlwcyB0aGUgYXJjaGl2ZQogICAtIFJlbW92ZXMgdGhlIG5ldyBkaXJlY3RvcnkgYW5kIGFsbCBpdHMgY29udGVudHMuCgogKiBXaGVuIGRvbmUsIHlvdSBoYXZlIGFuIGFyY2hpdmUgc3RvcmVkIGluIHlvdXIgZGlyZWN0b3J5IG5hbWVkCiAgIGN1cmwtPHZlcnNpb24+LnRhci5nei4KCiAgIERvbmUhCgogICAoMSkgVGhleSdyZSByZXF1aXJlZCB0byBtYWtlIGF1dG9tYWtlIHJ1biBwcm9wZXJseS4KICAgKDIpIEl0IGlzIGRpc3RyaWJ1dGVkIGFzIGEgcGFydCBvZiB0aGUgR05VIGF1dG9jb25mIGFyY2hpdmUuCgogRGFuaWVsIFN0ZW5iZXJnIChOb3YgMTgsIDE5OTgpCiAtIEkgY2hhbmdlZCB0aGUgVEFHLXN5c3RlbS4gSWYgeW91IGV2ZXIgdXNlZCB1cmxnZXQoKSBmcm9tIHRoaXMgcGFja2FnZSBpbgogICBhbm90aGVyIHByb2R1Y3QsIHlvdSBuZWVkIHRvIHJlY29tcGlsZSB3aXRoIHRoZSBuZXcgaGVhZGVycy4gSSBkaWQgdGhpcwogICBuZXcgc3R1ZmYgdG8gYmV0dGVyIGRlYWwgd2l0aCBkaWZmZXJlbnQgY29tcGlsZXJzIGFuZCBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQKICAgdmFyaWFibGUgc2l6ZXMuIEkgdGhpbmsgaXQgbWFrZXMgaXQgYSBsaXR0bGUgbW9yZSBwb3J0YWJsZS4gVGhpcyBwcm92ZXMKICAgdG8gY29tcGlsZSB3YXJuaW5nIGZyZWUgd2l0aCB0aGUgcHJvYmxlbWF0aWMgSVJJWCBjb21waWxlciEKIC0gV2luMzIgY29tcGlsZWQgd2l0aCBhIHNpbGx5IGVycm9yLiBDb3JyZWN0ZWQgbm93LgogLSBCcmlhbiBDaGFwbGluIHJlcG9ydGVkIHlldCBhbm90aGVyIHByb2JsZW0gaW4KICAgbXVsdGlsaW5lIEZUUCByZXNwb25zZXMuIEkndmUgdHJpZWQgdG8gY29ycmVjdCBpdC4gSSBtYWlsZWQgaGltIGEgbmV3CiAgIHZlcnNpb24gYW5kIEkgaG9wZSBoZSBnZXRzIGJhY2sgc29vbiB3aXRoIHBvc2l0aXZlIGZlZWRiYWNrIQogLSBJbXByb3ZlZCB0aGUgJ21ha2V0Z3onIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdHJlZSB3aGljaCBpdCBtYWtlcwogICBhbiBhcmNoaXZlIGZyb20gaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgcmVuYW1pbmcgb2YgdGhlIGN1cnJlbnQgb25lLgogLSBNYWlsaW5nIGxpc3Qgb3BlbmVkIChzZWUgUkVBRE1FKS4KIC0gTWFkZSAtdiBtb3JlIHZlcmJvc2Ugb24gdGhlIFBBU1Ygc2VjdGlvbiBvZiBmdHAgdHJhbnNmZXJzLiBOb3cgaXQgdGVsbHMKICAgaG9zdCBuYW1lIGFuZCBJUCBvZiB0aGUgbmV3IGhvc3QgKGFuZCBwb3J0IG51bWJlcikuIEkgYWxzbyBhZGRlZCBhIHNlY3Rpb24KICAgYWJvdXQgUE9SVCB2cyBQQVNWIGluIHRoZSBSRUFETUUuCgpWZXJzaW9uIDUuMCBiZXRhIDIxCgogQW5ndXMgTWFja2F5IChOb3YgMTUsIDE5OTgpCiAtIEludHJvZHVjZWQgYXV0b21ha2Ugc3R1ZmYuCgogRGFuaWVsIFN0ZW5iZXJnIChOb3YgMTMsIDE5OTgpCiAtIEp1c3QgbWFkZSBhIHN1Y2Nlc3NmdWwgR0VUIG9mIGEgZG9jdW1lbnQgZnJvbSBhbiBTU0wtc2VydmVyIHVzaW5nIG15IG93bgogICBwcml2YXRlIGNlcnRpZmljYXRlIGZvciBhdXRoZW50aWNhdGlvbiEgVGhlIGNlcnRpZmljYXRlIGhhcyB0byBiZSBpbiBQRU0KICAgZm9ybWF0LiBZb3UgZG8gdGhhdCB0aGUgZWFzaWVzdCB3YXkgKGFsdGhvdWdoIG5vdCAqdGhhdCogZWFzeSkgYnkKICAgZG93bmxvYWRpbmcgdGhlIFNTTHllYXkgUEtDUyMxMi1wYXRjaCBieSBEciBTdGVwaGVuIE4uIEhlbnNvbiBmcm9tIGhpcyBzaXRlCiAgIGF0OiBodHRwOi8vd3d3LmRyaC1jb25zdWx0YW5jeS5kZW1vbi5jby51ay8uIFVzaW5nIGhpcyB0b29sLCB5b3UgY2FuCiAgIGNvbnZlcnQgYW55IG1vZGVybiBOZXRzY2FwZSBvciAoZXZlbikgTVNJRSBjZXJ0aWZpY2F0ZSB0byBQRU0tZm9ybWF0LiAgVXNlCiAgIGl0IHdpdGggJ2N1cmwgLUUgPGNlcnRpZmljYXRlOnBhc3N3b3JkPiBodHRwczovL3NpdGUuY29tJy4gIElmIHRoaXMgaXNuJ3QgYQogICBjb29sIGZlYXR1cmUsIHRoZW4gSSBkb24ndCBrbm93IHdoYXQgY29vbCBmZWF0dXJlcyBsb29rIGxpa2UhIDstKQogLSBXb3JraW5nIHNsb3dseSBvbiB0ZWxuZXQgY29ubmVjdGlvbnMuICNkZWZpbmUgVFJZX1RFTE5FVCB0byB0cnkgaXQgb3V0LgogICAoY3VybCAtdSB1c2VyOnBhc3N3ZCAidGVsbmV0Oi8vaG9zdC5jb20vY2F0IC5sb2dpbiIgaXMgb25lIGV4YW1wbGUpIEkgZG8KICAgaGF2ZSBwcm9ibGVtIHRvIGRlZmluZSBob3cgaXQgc2hvdWxkIHdvcmsuIFRoZSBwcmltZSBwdXJwb3NlIGZvciB0aGlzIG11c3QKICAgYmUgdG8gZ2V0ICg4Yml0IGNsZWFuKSBmaWxlcyB2aWEgdGVsbmV0LCBhbmQgaXQgcmVhbGx5IGlzbid0IHRoYXQgZWFzeSB0bwogICBnZXQgZmlsZXMgdGhpcyB3YXkuIFN0aWxsIGhhdmluZyBwcm9ibGVtcyB3aXRoIFxuIGJlaW5nIGNvbnZlcnRlZCB0byBcclxuLgoKIEFuZ3VzIE1hY2theSAoTm92IDEyLCAxOTk4KQogLSBDb3JyZWN0ZWQgYW5vdGhlciBidWcgaW4gdGhlIGxvbmcgcGFyYW1ldGVyIG5hbWUgcGFyc2VyLgogLSBNb2RpZmllZCBnZXRwYXNzLmMgKE5PVEU6IHNlZSB0aGUgc3BlY2lhbCBsaWNlbnNpbmcgaW4gdGhlIHRvcCBvZiB0aGF0CiAgIHNvdXJjZSBmaWxlKS4KCiBEYW5pZWwgU3RlbmJlcmcgKE5vdiAxMiwgMTk5OCkKIC0gV2UgbWF5IGhhdmUgcmVtb3ZlZCB0aGUgc2lsbHkgd2FybmluZ3MgZnJvbSB1cmwuYyB3aGVuIGNvbXBpbGVkIHVuZGVyIElSSVguCiAgIFRoYW5rcyBhZ2FpbiB0byBCam9ybiBSZWVzZSBhbmQgTWFydGluIFN0YWFlbC4KIC0gV3JvdGUgZm9ybWZpbmQucGwgd2hpY2ggaXMgYSBuZXcgcGVybCBzY3JpcHQgaW50ZW5kZWQgdG8gaGVscCB5b3UgZmluZCBvdXQKICAgaG93IGEgRk9STSBzdWJtaXNzaW9uIHNob3VsZCBiZSBkb25lLiBUaGlzIG5lZWRzIGEgbGl0dGxlIG1vcmUgd29yayB0byBnZXQKICAgcmVhbGx5IGdvb2QuCgogRGFuaWVsIFN0ZW5iZXJnIChOb3YgMTEsIDE5OTgpCiAtIE1hZGUgdGhlIEhUVFAgaGVhZGVyLWNoZWNrZXIgYWNjZXB0IHdoaXRlIHNwYWNlcyBiZWZvcmUgdGhlIEhUVFAvMS4/IGxpbmUuCiAgIEFwcGVhcmFudGx5IHNvbWUgcHJveGllcy9zaXRlcyBhZGQgc3VjaCBhdCB0aW1lcyAobXkgdGVzdCBwcm94eSBkaWQgd2hlbiBJCiAgIGRvd25sb2FkZWQgYSBnb3BoZXIgcGFnZSB3aXRoIGl0KSEKIC0gTW92ZWQgdGhlIGZvcm1lciAtaCB0byAtTSBhbmQgbWFkZSAtaCBzaG93IHRoZSBzaG9ydCBoZWxwIHRleHQgaW5zdGVhZC4gSQogICBoYWQgdG8gZW5hYmxlIGEgZm9yY2VkIGhlbHAgdGV4dCBvcHRpb24uIE5vdyBhbiBldmVuIHNob3J0ZXIgaGVscCB0ZXh0IHdpbGwKICAgYmUgcHJlc2VudGVkIHdoZW4gYW4gdW5rbm93biBvcHRpb24gYW5kIHNpbWlsYXIsIGlzIHVzZWQuCiAtIHN0ZGNoZWFkZXJzLmggZGlkbid0IHdvcmsgd2l0aCBJUklYIDYuNCBuYXRpdmUgY2MgY29tcGlsZXIuIEkgaG9wZSBteQogICBjaGFuZ2VzIGRvbid0IG1ha2Ugb3RoZXIgdmVyc2lvbnMgZ28gbnV0cyBpbnN0ZWFkLgoKIERhbmllbCBTdGVuYmVyZyAoTm92IDEwLCAxOTk4KQogLSBBZGRlZCBhIHdlaXJkIGNoZWNrIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIGNoZWNrIGZvciB0aGUgc2lsbHkgQUlYCiAgIHdhcm5pbmdzIGFib3V0IG15ICNkZWZpbmUgc3RyY2FzZWNtcCgpIHN0dWZmLiBJIGRvIHRoYXQgZGVmaW5lIHRvIHByZXZlbnQKICAgbWUgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB0byBhY2NpZGVudGFseSB1c2UgdGhhdCBmdW5jdGlvbiBuYW1lIGluc3RlYWQKICAgb2Ygc3RyZXF1YWwoKS4uLgogLSBJIGJ1Z2ZpeGVkIEFuZ3VzJ3MgZ2V0cGFzcy5jIHZlcnkgbGl0dGxlLgogLSBGaXhlZCB0aGUgdmVyYm9zZSBmbGFnIG5hbWVzIHRvIGdldG9wdC1zdHlsZSwgaS5lICdjdXJsIC0tbG9jJyB3aWxsIGJlCiAgIHN1ZmZpY2llbnQgaW5zdGVhZCBvZiAtLWxvY2F0aW9uIGFzICJsb2MiIGlzIGEgdW5pcXVlIHByZWZpeC4gQWxzbywgYW55dGhpbmcKICAgYWZ0ZXIgYSAnLS0nIGlzIHRyZWF0ZWQgYXMgYW4gVVJMLiBTbyBpZiB5b3UgZG8gaGF2ZSBhIGhvc3Qgd2l0aCBhIHdlZWVpcmQKICAgbmFtZSB5b3UgY2FuIGRvICdjdXJsIC0tIC1ob3N0LmNvbScuCiAtIEFub3RoZXIgZ2V0b3B0LWFkanVzdDsgY3VybCBub3cgYWNjZXB0cyBmbGFncyBhZnRlciB0aGUgVVJMIG9uIHRoZSBjb21tYW5kCiAgIGxpbmUuICdjdXJsIHd3dy5mb28uY29tIC1PJyBpcyBwZXJmZWN0bHkgdmFsaWQuCiAtIENvcnJlY3RlZCB0aGUgLmN1cmxyYyBwYXJzZXIgc28gdGhhdCBzdHJ0b2soKSBpcyBubyBsb25nZXIgdXNlZCBhbmQgSQogICBiZWxpZXZlIGl0IHdvcmtzIGJldHRlci4gRXZlbiBVUkxzIGNhbiBiZSBzcGVjaWZpZWQgaW4gaXQgbm93LgoKIEFuZ3VzIE1hY2theSAoTm92IDksIDE5OTgpCiAtIFJlcGxhY2VkIGdldHBhc3MuYyB3aXRoIGEgbmV3bHkgd3JpdHRlbiBvbmUsIG5vdCB1bmRlciBHUEwgbGljZW5zZQogLSBDaGFuZ2VkIE9TIHRvIGEgI2RlZmluZSBpbiBjb25maWcuaCBpbnN0ZWFkIG9mIGNvbXBpbGVyIGZsYWcKIC0gTWFrZWZpbGUgbm93IHVzZXMgLURIQVZFX0NPTkZJR19ICgogRGFuaWVsIFN0ZW5iZXJnIChOb3YgOSwgMTk5OCkKIC0gT2ssIEkgZXhwYW5kZWQgdGhlIHRnei10YXJnZXQgdG8gdXBkYXRlIHRoZSB2ZXJzaW9uIHN0cmluZyBvbiBlYWNoIG9jY2F0aW9uCiAgIEkgYnVpbGQgYSByZWxlYXNlIGFyY2hpdmUhCiAtIEkgcmVhY3RlZCBvbiBBbmd1cyBNYWNrYXkncyBpbml0aWF0aXZlIGFuZCByZW1hZGUgdGhlIHBhcmFtZXRlciBwYXJzZXIgdG8KICAgYmUgbW9yZSBnZXRvcHQgY29tcGxpYW50LiBDdXJsIG5vdyBzdXBwb3J0cyAibWVyZ2VkIiBmbGFncyBhcyBpbiAKCWN1cmwgLWxzdiBmdHAuc2l0ZS5jb20KICAgRG8gbm90ZSB0aGF0IEkgaGFkIHRvIG1vdmUgdGhyZWUgc2hvcnQtbmFtZXMgb2YgdGhlIG9wdGlvbnMuIFBhcmFtZXRlcnMKICAgdGhhdCBuZWVkcyBhbiBhZGRpdGlvbmFsIHN0cmluZyBzdWNoIGFzIC14IG11c3QgYmUgc3RhbmQtYWxvbmUgb3IgdGhlCiAgIGxhc3QgaW4gYSBtZXJnZWQgc2VxdWVuY2U6CgljdXJsIC1sc3ggbXktcHJveHkgZnRwLnNpdGUuY29tCiAgIGlzIG9rLCBidXQgdXNpbmcgdGhlIGZsYWdzIGluIGEgZGlmZmVyZW50IG9yZGVyIGxpa2UgJy1seHMnIHdvdWxkIGNhdXNlCiAgIHVuZXhwZWN0ZWQgcmVzdWx0cyAoYXMgdGhlICdzJyBvcHRpb24gd291bGQgYmUgc2tpcHBlZCkuCiAtIEkndmUgY2hhbmdlZCB0aGUgaGVhZGVycyBpbiBhbGwgZmlsZXMgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgTW96UEwKICAgbGljZW5zZSwgYXMgdGhleSBhcmUgc3VwcG9zZWQgdG8gbG9vayBsaWtlIHdoZW4gY29uZm9ybWluZy4KIC0gTWFkZSB0aGUgY29uZmlndXJlIHNjcmlwdCBtYWtlIHRoZSBjb25maWcuaC4gVGhlIGZvcm1lciBjb25maWcuaCBpcyBub3cKICAgc2V0dXAuaC4KIC0gVGhlIFJFU09VUkNFUyBhbmQgVE9ETyBmaWxlcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGFyY2hpdmUuCgogQW5ndXMgTWFja2F5IChOb3YgNSwgMTk5OCkKIC0gRml4ZWQgZ2V0cGFzcy5jIGFuZCB2YXJpb3VzIGNvbmZpZ3VyZSBzdHVmZgoKIERhbmllbCBTdGVuYmVyZyAoTm92IDMsIDE5OTgpCiAtIFVzZSAtSC8tLWhlYWRlciBmb3IgY3VzdG9tIEhUVFAtaGVhZGVycy4gTGV0cyB5b3UgcGFzcyBvbiB5b3VyIG93bgogICBzcGVjaWZpZWQgaGVhZGVycyB0byB0aGUgcmVtb3RlIHNlcnZlci4gSSB3b3VsZG4ndCByZWNvbW1lbmQgdHJ5aW5nIHRvIHVzZQogICBhIGhlYWRlciB3aXRoIGEgZGVmaW5lZCB1c2FnZSBhY2NvcmRpbmcgdG8gc3RhbmRhcmRzLiBVc2UgdGhpcyBmbGFnIG9uY2UKICAgZm9yIGV2ZXJ5IGN1c3RvbSBoZWFkZXIgeW91IHdhbnQgdG8gYWRkLgogLSBVc2UgLUIvLS1mdHAtYXNjaWkgdG8gZm9yY2UgZnRwIHRvIHVzZSBBU0NJSSBtb2RlIHdoZW4gdHJhbnNmZXJpbmcgZmlsZXMuCiAtIENvcnJlY3RlZCB0aGUgJ2dldGxpbmtzLnBsJyBzY3JpcHQsIEkgYWNjaWRlbnRhbGx5IGxlZnQgbXkgc2lsbHkgcHJveHkKICAgdXNhZ2UgaW4gdGhlcmUhIFNpbmNlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIC5jdXJscmMgZmlsZSwgaXQgaXMgZWFzaWVyIHRvCiAgIHdyaXRlIHNjcmlwdHMgdGhhdCB1c2UgY3VybCBzaW5jZSBwcm94aWVzIGFuZCBzdHVmZiBzaG91bGQgYmUgaW4gdGhlCiAgIC5jdXJscmMgZmlsZSBhbnl3YXkuCiAtIEludHJvZHVjaW5nIHRoZSBuZXcgLUYgZmxhZyBmb3IgSFRUUCBQT1NULiBJdCBzdXBwb3J0cyBtdWx0aXBhcnQvZm9ybS1kYXRhCiAgIHdoaWNoIG1lYW5zIGl0IGlzIGdvbm5hIGJlIHBvc3NpYmxlIHRvIHVwbG9hZCBmaWxlcyBldGMgdGhyb3VnaCBIVFRQIFBPU1QuCiAgIFNoaXJheiBLYW5nYSBhc2tlZCBmb3IgdGhlIGZlYXR1cmUgYW5kIG15IGJyb3RoZXIsCiAgIEJq9nJuIFN0ZW5iZXJnIGhlbHBlZCBtZSBkZXNpZ24gdGhlIHVzZXIKICAgaW50ZXJmYWNlIGZvciB0aGlzIGJlYXN0LiAgVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHF1aXRlIHNvbWUgZG9jcywKICAgc2luY2UgaXQgaGFzIHR1cm5lZCBvdXQgbm90IG9ubHkgcXVpdGUgY2FwYWJsZSwgYnV0IGFsc28gY29tcGxpY2F0ZWQhIDotKQogLSBBIG5vdGUgaGVyZSwgc2luY2UgSSd2ZSByZWNlaXZlZCBtYWlsIGFib3V0IGl0LiBTU0xlYXkgdmVyc2lvbnMgcHJpb3IgdG8KICAgMC44IHdpbGwgKm5vdCogd29yayB3aXRoIGN1cmwhCiAtIFdpbCBMYW5nZm9yZCByZXBvcnRlZCBhIGJ1ZyB0aGF0IG9jY3VycmVkIHNpbmNlIGN1cmwKICAgZGlkIG5vdCBwcm9wZXJseSB1c2UgQ1JMRiB3aGVuIGlzc3VpbmcgZnRwIGNvbW1hbmRzLiBJIGZpeGVkIGl0LgogLSBSZWFycmFuZ2VkIHRoZSBvcmRlciBjb25maWcgZmlsZXMgYXJlIHJlYWQuIC5jdXJscmMgaXMgbm93ICphbHdheXMqIHJlYWQKICAgZmlyc3QgYW5kIGJlZm9yZSB0aGUgY29tbWFuZCBsaW5lIGZsYWdzLiAtSyBjb25maWcgZmlsZXMgdGhlbiBhY3QgYXMKICAgYWRkaXRpb25hbCBjb25maWcgaXRlbXMuCiAtIFVzZSAtcSBBUyBUSEUgRklSU1QgT1BUSU9OIHNwZWNpZmllZCB0byBwcmV2ZW50IC5jdXJscmMgZnJvbSBiZWluZyByZWFkLgogLSBZb3UgY2FuIG5vdyBkaXNhYmxlIGEgcHJveHkgYnkgdXNpbmcgLXggIiIuIFVzZWZ1bCBpZiB0aGUgLmN1cmxyYyBmaWxlCiAgIHNwZWNpZmllcyBhIHByb3h5IGFuZCB5b3Ugd2FubmEgZmV0Y2ggc29tZXRoaW5nIHdpdGhvdXQgZ29pbmcgdGhyb3VnaAogICB0aGF0LgogLSBJJ20gdGhpbmtpbmcgb2YgZHJvcHBpbmcgdGhlIC1wIHN1cHBvcnQuIEl0cyByZWFsbHkgbm90IHVzZWZ1bCBzaW5jZSBwb3J0cwogICBjb3VsZCAoYW5kIHNob3VsZD8pIGJlIHNwZWNpZmllZCBhcyA6PHBvcnQ+IGFwcGVuZGVkIG9uIHRoZSBob3N0IG5hbWUKICAgaW5zdGVhZCwgYm90aCBpbiBVUkxzIGFuZCB0byBwcm94eSBob3N0IG5hbWVzLgogLSBNYXJ0aW4gU3RhYWVsIHJlcG9ydHMgY3VybCAtTCBidWdzIHVuZGVyIFdpbmRvd3MgTlQKICAgKHRlc3Qgd2l0aCBVUkwgaHR0cDovL2NvbWUudG8vc2NzZGUpLiBUaGlzIGJ1ZyBpcyBub3QgcHJlc2VudCBpbiB0aGlzCiAgIHZlcnNpb24gYW55bW9yZS4KIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHdlaXJkIEZUUCBVUkwgdHlwZT0gdGhpbmcuIFlvdSBjYW4gZG93bmxvYWQgYSBmaWxlCiAgIHVzaW5nIEFTQ0lJIHRyYW5zZmVyIGJ5IGFwcGVuZGluZyAiO3R5cGU9QSIgdG8gdGhlIHJpZ2h0IG9mIGl0LiBPdGhlcgogICBhdmFpbGFibGUgdHlwZXMgYXJlIHR5cGU9RCBmb3IgZGlyLWxpc3QgKE5MU1QpIGFuZCB0eXBlPUkgZm9yIGJpbmFyeQogICB0cmFuc2Zlci4gSSBjYW4ndCBzYXkgSSd2ZSBldmVyIHNlZW4gYW55b25lIHVzZSB0aGlzIGtpbmQgb2YgVVJMIHRob3VnaCEKICAgOi0pCiAtIFRyb3kgRW5nZWwgcG9pbnRlZCBvdXQgYSBidWcgaW4gbXkgZ2V0ZW52KCJIT01FIikKICAgdXNhZ2UgZm9yIHdpbjMyIHN5c3RlbXMuIEkgaW50cm9kdWNlIGdldGVudi5jIHRvIGJldHRlciBjb3BlIHdpdGgKICAgdGhpcy4gTXIgRW5nZWwgaGVscHMgbWUgd2l0aCB0aGUgZGV0YWlscyBhcm91bmQgdGhhdC4uLgogLSBBIGxpdHRsZSBub3RlIHRvIG15c2VsZiBhbmQgb3RoZXJzLCBJIHNob3VsZCBtYWtlIHRoZSB3aW4zMi1iaW5hcnkgYnVpbHQKICAgd2l0aCBTU0wgc3VwcG9ydC4uLgogLSBSeWFuIE5lbHNvbiBzZW50IG1lIGNvbW1lbnRzIGFib3V0IGJ1aWxkaW5nIGN1cmwKICAgd2l0aCBTU0wgdW5kZXIgRnJlZUJTRC4gU2VlIHRoZSBNYWtlZmlsZSBmb3IgZGV0YWlscy4gVXNpbmcgdGhlIGNvbmZpZ3VyZQogICBzY3JpcHQsIGl0IHNob3VsZCB3b3JrIGJldHRlciBhbmQgYXV0b21hdGljYWxseSBub3cuLi4KIC0gQ2xlYW5lZCB1cCBpbiB0aGUgcG9ydCBudW1iZXIgbWVzcyBpbiB0aGUgc291cmNlLiBObyBsb25nZXIgc3RvcmVzIGFuZCB1c2VzCiAgIHByb3h5IHBvcnQgbnVtYmVyIHNlcGFyYXRlIGZyb20gbm9ybWFsIHBvcnQgbnVtYmVyLgogLSAnY29uZmlndXJlJyBzY3JpcHQgd29ya2luZy4gQ29uZmlybWVkIGNvbXBpbGVzIG9uOgogICAgSG9zdCAgICAgICAgIFNTTCAgQ29tcGlsZXIKICAgIFN1bk9TIDUuNSAgICBubyAgIGdjYwogICAgU3VuT1MgNS41LjEgIHllcyAgZ2NjCiAgICBTdW5PUyA1LjYgICAgbm8gICBjYyAgKHdpdGggZ2NjLCBpdCBoYXMgdGhlICJnY2MgaW5jbHVkZSBmaWxlcyIgcHJvYmxlbSkKICAgIFN1bk9TIDQuMS4zICBubyAgIGdjYyAod2l0aG91dCBBTlNJIEMgaGVhZGVycykKICAgIFN1bk9TIDQuMS4yICBubyAgIGdjYyAobmF0aXZlIGNvbXBpbGVyIGZhaWxlZCkKICAgIExpbnV4IDIuMC4xOCBubyAgIGdjYwogICAgTGludXggMi4wLjMyIHllcyAgZ2NjCiAgICBMaW51eCAyLjAuMzUgbm8gICBnY2MgKHdpdGggZ2xpYmMpCiAgICBJUklYIDYuMiAgICAgbm8gICBnY2MgKGNjIGNvbXBpbGVzIGdlbmVyYXRlIGEgZmV3IHdhcm5pbmdzKQogICAgSVJJWCA2LjQgICAgIG5vICAgY2MgIChnZW5lcmF0ZWQgd2FybmluZ3MgdGhvdWdoKQogICAgV2luMzIgICAgICAgIG5vICAgQm9ybGFuZAogICAgT1NGNC4wCSBubyAgID8KCiAtIE9vb3BzLiBUaGUgNWJldGEgKGFuZCA0LjEwKSB1bmRlciB3aW4zMiBmYWlsZWQgaWYgdGhlIEhPTUUgdmFyaWFibGUgd2Fzbid0CiAgIHNldC4KIC0gV2hlbiB1c2luZyBhIHByb3h5LCBjdXJsIG5vdyBndWVzc2VzIGFuZCB1c2VzIHRoZSBwcm90b2NvbCBwYXJ0IGluIGNhc2VzCiAgIGxpa2U6CgljdXJsIC14IHByb3h5OjgwIHd3dy5zaXRlLmNvbQogICBQcm94aWVzIG5vcm1hbGx5IGdvIG51dHMgdW5sZXNzIGh0dHA6Ly8gaXMgcHJlcGVuZGVkIHRvIHRoZSBob3N0IG5hbWUsIHNvCiAgIGlmIGN1cmwgaXMgdXNlZCBsaWtlIHRoaXMsIGl0IGd1ZXNzZXMgcHJvdG9jb2wgYW5kIGFwcGVuZHMgdGhlIHByb3RvY29sCiAgIHN0cmluZyBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGUgcHJveHkuIEl0IGFscmVhZHkgZGlkIHRoaXMgd2hlbiB1c2VkCiAgIHdpdGhvdXQgcHJveHkuCiAtIEJldHRlciBwb3J0IHVzYWdlIHdpdGggU1NMIHRocm91Z2ggcHJveHkgbm93LiBJZiB5b3Ugc3BlY2lmaWVkIGEgZGlmZmVyZW50CiAgIGh0dHBzLXBvcnQgd2hlbiBhY2Nlc3NpbmcgdGhyb3VnaCBhIHByb3h5LCBpdCBkaWRuJ3QgdXNlIHRoYXQgbnVtYmVyCiAgIGNvcnJlY3RseS4gSSBhbHNvIHJld3JvdGUgdGhlIGNvZGUgdGhhdCBwYXJzZXMgdGhlIHN0dWZmIHJlYWQgZnJvbSB0aGUKICAgcHJveHkgd2hlbiB5b3Ugd2FubmEgY29ubmVjdCB0aHJvdWdoIGl0IHdpdGggU1NMLgogLSBCam9ybiBSZWVzZSBoZWxwZWQgbWUgd29yayBhcm91bmQgb25lIG9mIHRoZSBjb21waWxlcgogICB3YXJuaW5ncyBvbiBJUklYIG5hdGl2ZSBjYyBjb21waWxlcy4KClZlcnNpb24gNC4xMCAoT2N0IDI2LCAxOTk4KQogRGFuaWVsIFN0ZW5iZXJnCiAtIEpvaG4gQS4gQnJpc3RvciBzdWdnZXN0ZWQgYSBjb25maWcgZmlsZSBzd2l0Y2gsCiAgIGFuZCBzaW5jZSBJJ3ZlIGJlZW4gaGF2aW5nIHRoYXQgaWRlYSBraW5kIG9mIGluIHRoZSBiYWNrZ3JvdW5kIGZvciBhIGxvbmcKICAgdGltZSBJIHJld3JvdGUgdGhlIHBhcmFtZXRlciBwYXJzaW5nIGZ1bmN0aW9uIGEgbGl0dGxlIGFuZCBub3cgSSBpbnRyb2R1Y2UKICAgdGhlIC1LLy0tY29uZmlnIGZsYWcuIEkgYWxzbyBtYWRlIGN1cmwgKmFsd2F5cyogKHVubGVzcyAtSyBpcyB1c2VkKSB0cnkgdG8KICAgbG9hZCB0aGUgLmN1cmxyYyBmaWxlIGZvciBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4gVGhlIHN5bnRheCBmb3IgdGhlCiAgIGNvbmZpZyBmaWxlIGlzIHRoZSBzdGFuZGFyZCBjb21tYW5kIGxpbmUgYXJndW1lbnQgc3R5bGUuIERldGFpbHMgaW4gJ2N1cmwKICAgLWgnIG9yIHRoZSBSRUFETUUuCiAtIEkgcmVtb3ZlZCB0aGUgLWsgb3B0aW9uLiBLZWVwLWFsaXZlIGlzbid0IHJlYWxseSBhbnl0aGluZyBhbnlvbmUgd291bGQKICAgd2FudCB0byBlbmFibGUgd2l0aCBjdXJsIGFueXdheS4KIC0gTWFydGluIFN0YWFlbCBoZWxwZWQgbWUgYWRkIHRoZSAnaXJpeCcgdGFyZ2V0LiBOb3cKICAgIm1ha2UgaXJpeCIgc2hvdWxkIGJ1aWxkIGN1cmwgc3VjY2Vzc2Z1bGx5IG9uIG5vbi1nY2MgU0dJIG1hY2hpbmVzLgogLSBTaW5nbGUgc3dpdGNoZXMgbm93IHRvZ2dsZSBiZWhhdmlvdXJzLiBJLmUgaWYgeW91IHVzZSAtdiAtdiB0aGUgc2Vjb25kCiAgIHdpbGwgc3dpdGNoIG9mZiB0aGUgdmVyYm9zZSBtb2RlIHRoZSBmaXJzdCBvbmUgZW5hYmxlZC4gVGhpcyBpcyBzbyB0aGF0CiAgIHlvdSBjYW4gZGlzYWJsZSBhIGRlZmF1bHQgc2V0dGluZyBhIC5jdXJscmMgZmlsZSBlbmFibGVzIGV0Yy4KClZlcnNpb24gNC45IChPY3QgNywgMTk5OCkKIERhbmllbCBTdGVuYmVyZwogLSBNYXJ0aW4gU3RhYWVsIHN1Z2dlc3RlZCBjdXJsIHdvdWxkIHN1cHBvcnQgY29va2llcy4KICAgSSBhZGRlZCAtYi8tLWNvb2tpZSB0byBlbmFibGUgZnJlZS10ZXh0IGNvb2tpZSBkYXRhIHRvIGJlIHBhc3NlZC4gVGhlcmUncwogICBhbHNvIGEgbGl0dGxlIGJsdXJiIGFib3V0IGdlbmVyYWwgY29va2llIHN0dWZmIGluIHRoZSBSRUFETUUvaGVscCB0ZXh0LgogLSBkbWggPGRtaCBhdCBqZXQuZXM+IHN1Z2dlc3RlZCBIVFRQIHJlc3VtZSBjYXBhYmlsaXRpZXMuIEFsdGhvdWdoIHlvdSBjb3VsZAogICBtYW51YWxseSBnZXQgY3VybCB0byByZXN1bWUgSFRUUCBkb2N1bWVudHMsIEkgbWFkZSB0aGUgLWMgcmVzdW1lIGZsYWcgd29yawogICBmb3IgSFRUUCB0b28gKHVubGVzcyAtciBpcyB1c2VkIHRvbywgd2hpY2ggd291bGQgYmUgdmVyeSBvZGQgYW55d2F5KS4KIC0gQWRkZWQgY2hlY2tsaW5rcy5wbCB0byB0aGUgYXJjaGl2ZS4gSXQgaXMgYSBzdGlsbCBleHBlcmltZW50YWwgcGVybCBzY3JpcHQKICAgdGhhdCBjaGVja3MgYWxsIGxpbmtzIG9mIGEgd2ViIHBhZ2UgYnkgdXNpbmcgY3VybC4KIC0gUmVhcnJhbmdlZCB0aGUgYXJjaGl2ZSBoaWVyYXJjaHkgYSBsaXR0bGUuIEJ1aWxkIHRoZSBleGVjdXRhYmxlIGluIHRoZQogICBzcmMvIGRpciBmcm9tIG5vdyBvbiEKIC0gVmVyc2lvbiA0LjkgYW5kIGhlcmVhZnRlciwgaXMgbm8gbG9uZ2VyIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgbGljZW5zZS4KICAgSSBoYXZlIG5vdyB1cGRhdGVkIHRoZSBMRUdBTCBmaWxlIGV0YyBhbmQgbm93IHRoaXMgaXMgcmVsZWFzZWQgdXNpbmcgdGhlCiAgIE1vemlsbGEgUHVibGljIExpY2Vuc2UgdG8gYXZvaWQgdGhlIHBsYWd1ZSBrbm93biBhcyAidGhlIEdQTCB2aXJ1cyIuIFlvdQogICBtdXN0IG1ha2UgdGhlIHNvdXJjZSBhdmFpbGFibGUgaWYgeW91IGRlY2lkZSB0byBjaGFuZ2UgYW5kL29yIHJlZGlzdHJpYnV0ZQogICBjdXJsLCBidXQgaWYgeW91IGRlY2lkZSB0byB1c2UgY3VybCB3aXRoaW4gc29tZXRoaW5nIGVsc2UgeW91IGRvIG5vdCBuZWVkCiAgIHRvIG9mZmVyIHRoZSB3b3JsZCB0aGUgc291cmNlIHRvIHRoYXQgdG9vLgogLSBDdXJsIGRpZCBub3QgbGlrZSBIVFRQIHNlcnZlcnMgdGhhdCBzZW50IG5vIGhlYWRlcnMgYXQgYWxsIG9uIGEgR0VUCiAgIHJlcXVlc3QuICBJdCBpcyBhIHZpb2xhdGlvbiBvZiBSRkMyMDY4IGJ1dCBhcHBlYXJhbnRseSBzb21lIHNlcnZlcnMgZG8KICAgdGhhdCBhbnl3YXkuICBUaGFua3MgdG8gR29yZG9uIEJlYXRvbiBmb3IgdGhlIHJlcG9ydCEKIC0gLUwvLS1sb2NhdGlvbiB3YXMgYWRkZWQgYWZ0ZXIgYSBzdWdnZXN0aW9uIGZyb20gTWFydGluIFN0YWFlbC4gVGhpcyBtYWtlcwogICBjdXJsIEFUVEVNUFQgdG8gZm9sbG93IHRoZSBMb2NhdGlvbjogcmVkaXJlY3QgaWYgb25lIGlzIHByZXNlbnQgaW4gdGhlIEhUVFAKICAgaGVhZGVycy4gSWYgLWkgb3IgLUkgaXMgdXNlZCB3aXRoIHRoaXMgZmxhZywgeW91IHdpbGwgc2VlIGhlYWRlcnMgZnJvbSBhbGwKICAgc2l0ZXMgdGhlIExvY2F0aW9uOiBwb2ludHMgdG8uIERvIG5vdGUgdGhhdCB0aGUgZmlyc3Qgc2VydmVyIGNhbiBwb2ludCB0byBhCiAgIHNlY29uZCB0aGF0IHBvaW50cyB0byBhIHRoaXJkIGV0Yy4gSXQgc2VlbXMgdGhlIExvY2F0aW9uOiBwYXJhbWV0ZXIgKHNhaWQKICAgdG8gYmUgYW4gQWJzb2x1dGVVUkkgaW4gUkZDMjA2OCkgaXNuJ3QgYWx3YXlzIGFic29sdXRlLi4gOi0vIEFueXdheSwgSSd2ZQogICBtYWRlIGN1cmwgQVRURU1QVCB0byBkbyB0aGUgYmVzdCBpdCBjYW4gdG8gZGVhbCB3aXRoIHRoZSByZWFsaXR5LgogLSBBZGRlZCBnZXRsaW5rcy5wbCB0byB0aGUgYXJjaGl2ZS4gZ2V0bGlua3MucGwgc2VsZWN0aXZlbHkgZG93bmxvYWRzCiAgIGZpbGVzIHRoYXQgYSB3ZWIgcGFnZSBsaW5rcyB0by4KClZlcnNpb24gNC44LjQKIERhbmllbCBTdGVuYmVyZwogLSBBcyBKdWxpYW4gUm9tZXJvIE5pZXRvIHJlcG9ydGVkLCBjdXJsIHJlcG9ydGVkIHdyb25nIHZlcnNpb24gbnVtYmVyLgogLSBBcyBUZWVtdSBZbGktRWxzaWxhIHBvaW50ZWQgb3V0LCB0aGUgd2luMzIgdmVyc2lvbiBvZiA0LjggKGFuZCBwcm9iYWJseSBhbGwKICAgb3RoZXIgdmVyc2lvbnMgZm9yIHdpbjMyKSBkaWRuJ3Qgd29yayB3aXRoIGJpbmFyeSBmaWxlcyBzaW5jZSBJJ20gdG9vIHVzZWQKICAgdG8gdGhlIFVOSVggc3R5bGUgZm9wZW4oKSB3aGVyZSBiaW5hcnkgYW5kIHRleHQgZG9uJ3QgZGlmZmVyLi4uCiAtIFJhbHBoIEJlY2ttYW5uIGJyb3VnaHQgbWUgc29tZSBjaGFuZ2VzIHRoYXQgbGV0cyBjdXJsIGNvbXBpbGUgZXJyb3IgYW5kCiAgIHdhcm5pbmcgZnJlZSB3aXRoIC1XYWxsIC1wZWRhbnRpYyB3aXRoIGcrKy4gSSBhbHNvIHRvb2sgdGhlIG9wcG9ydHVuaXR5IHRvCiAgIGNsZWFuIG9mZiBzb21lIHVudXNlZCB2YXJpYWJsZXMgYW5kIHNpbWlsYXIuCiAtIFJhbHBoIEJlY2ttYW5uIG1hZGUgbWUgYXdhcmUgb2YgYSByZWFsbHkgb2RkIGJ1ZyBub3cgY29ycmVjdGVkLiBXaGVuIGN1cmwKICAgcmVhZCBhIHNldCBvZiBoZWFkZXJzIGZyb20gYSBIVFRQIHNlcnZlciwgZGl2aWRlZCBpbnRvIG1vcmUgdGhhbiBvbmUgcmVhZAogICBhbmQgdGhlIGZpcnN0IHJlYWQgc2hvd2VkIGEgZnVsbCBsaW5lICpleGFjdGx5KiAoaS5lIGVuZGluZyB3aXRoIGEKICAgbmV3bGluZSksIGN1cmwgZGlkIG5vdCBiZWhhdmUgd2VsbC4KClZlcnNpb24gNC44LjMKIERhbmllbCBTdGVuYmVyZwogLSBJIHdhcyB0b28gcXVpY2sgdG8gcmVsZWFzZSA0LjguMiB3aXRoIHRvbyBsaXR0bGUgdGVzdGluZy4gT25lIG9mIHRoZQogICBjaGFuZ2VzIGlzIG5vdyByZXZlcnRlZCBzbGlnaHRseSB0byB0aGUgNC44LjEgd2F5IHNpbmNlIDQuOC4yIGNvdWxkbid0CiAgIHVwbG9hZCBmaWxlcy4gSSBzdGlsbCB0aGluayBib3RoIHByb2JsZW1zIGNvcnJlY3RlZCBpbiA0LjguMiByZW1haW4KICAgY29ycmVjdGVkLiAgUmVwb3J0ZWQgYnkgSnVsaWFuIFJvbWVybyBOaWV0by4KClZlcnNpb24gNC44LjIKIERhbmllbCBTdGVuYmVyZwogLSBCZXJuaGFyZCBJc2VsYm9ybiByZXBvcnRlZCB0d28gRlRQIHByb3RvY29sIGVycm9ycyBjdXJsIGRpZC4gVGhleSdyZSBub3cKICAgY29ycmVjdGVkLiBCb3RoIGFwcGVhcmVkIHdoZW4gZ2V0dGluZyBmaWxlcyBmcm9tIGEgTVMgRlRQIHNlcnZlciEgOi0pCgpWZXJzaW9uIDQuOC4xCiBEYW5pZWwgU3RlbmJlcmcKIC0gQWRkZWQgYSBsYXN0IHVwZGF0ZSBvZiB0aGUgcHJvZ3Jlc3MgbWV0ZXIgd2hlbiB0aGUgdHJhbnNmZXIgaXMgZG9uZS4gVGhlCiAgIGZpbmFsIG91dHB1dCBvbiB0aGUgc2NyZWVuIGRpZG4ndCBoYXZlIHRvIGJlIHRoZSBmaW5hbCBzaXplIHRyYW5zZmVyZWQKICAgd2hpY2ggbWFkZSBpdCBzb21ldGltZXMgbG9vayBvZGQuCiAtIFRoYW5rcyB0byBEYXZpZCBMb25nIEkgZ290IHJpZCBvZiBhIHNpbGx5IGJ1ZyB0aGF0IGhhcHBlbmVkIGlmIGEgSFRUUC1wYWdlCiAgIGhhZCBub3RoaW5nIGJ1dCBoZWFkZXIuIEFwcGVhcmFudGx5IFNvbGFyaXMgZGVhbHMgd2l0aCBuZWdhdGl2ZSBzaXplcyBpbgogICBmd3JpdGUoKSBjYWxscyBhIGxvdCBiZXR0ZXIgdGhhbiBMaW51eCBkb2VzLi4uID1CLV0KClZlcnNpb24gNC44CiBEYW5pZWwgU3RlbmJlcmcKIC0gQ29udGludWUgRlRQIGZpbGUgdHJhbnNmZXIuIC1jIGlzIHRoZSBzd2l0Y2guIE5vdGUgdGhhdCB5b3UgbmVlZCB0bwogICBzcGVjaWZ5IGEgZmlsZSBuYW1lIGlmIHlvdSB3YW5uYSByZXN1bWUgYSBkb3dubG9hZCAoeW91IGNhbid0IHJlc3VtZSBhCiAgIGRvd25sb2FkIHNlbnQgdG8gc3Rkb3V0KS4gUmVzdW1pbmcgdXBsb2FkIG1heSBiZSBsaW1pdGVkIGJ5IHRoZSBzZXJ2ZXIKICAgc2luY2UgY3VybCBpcyB0aGVuIHVzaW5nIHRoZSBub24tUkZDOTU5IGNvbW1hbmQgU0laRSB0byBnZXQgdGhlIHNpemUgb2YKICAgdGhlIHRhcmdldCBmaWxlIGJlZm9yZSB1cGxvYWQgYmVnaW5zICh0byBmaWd1cmUgb3V0IHdoaWNoIG9mZnNldCB0bwogICB1c2UpLiBVc2UgLUMgdG8gc3BlY2lmeSB0aGUgb2Zmc2V0IHlvdXJzZWxmISAtQyBpcyBoYW5keSBpZiB5b3UncmUgZG9pbmcKICAgdGhlIG91dHB1dCB0byBzb21ldGhpbmcgZWxzZSBidXQgYSBwbGFpbiBmaWxlIG9yIHdoZW4geW91IGp1c3Qgd2FudCB0byBnZXQKICAgdGhlIGVuZCBvZiBhIGZpbGUuCiAtIHJlY3Vyc2l2ZWZ0cGdldC5wbCBub3cgZmVhdHVyZXMgYSBtYXhpbXVtIHJlY3Vyc2l2ZSBsZXZlbCBhcmd1bWVudC4KClZlcnNpb24gNC43CiBEYW5pZWwgU3RlbmJlcmcKIC0gQWRkZWQgc3VwcG9ydCB0byBhYm9ydCBhIGRvd25sb2FkIGlmIHRoZSBzcGVlZCBpcyBiZWxvdyBhIGNlcnRhaW4gYW1vdW50CiAgIChzcGVlZC1saW1pdCkgYnl0ZXMgcGVyIHNlY29uZCBmb3IgYSBjZXJ0YWluIChzcGVlZC10aW1lKSB0aW1lLgogLSBXcm90ZSBhIHBlcmwgc2NyaXB0ICdyZWN1cnNpdmVmdHBnZXQucGwnIHRvIHJlY3Vyc2l2ZWx5IHVzZSBjdXJsIHRvIGdldCBhCiAgIHdob2xlIGZ0cCBkaXJlY3RvcnkgdHJlZS4gSXQgaXMgbWVhbnQgYXMgYW4gZXhhbXBsZSBvZiBob3cgY3VybCBjYW4gYmUKICAgdXNlZC4gIEkgYWdyZWUgaXQgaXNuJ3QgdGhlIHdpc2VzdCB0aGluZyB0byBkbyB0byBtYWtlIGEgc2VwYXJhdGUgbmV3CiAgIGNvbm5lY3Rpb24gZm9yIGVhY2ggZmlsZSBhbmQgZGlyZWN0b3J5IGZvciB0aGlzLgoKVmVyc2lvbiA0LjYKIERhbmllbCBTdGVuYmVyZwogLSBBZGRlZCBhIGZpcnN0IGF0dGVtcHQgdG8gb3B0aW9uYWxseSBwYXJzZSB0aGUgLm5ldHJjIGZpbGUgZm9yIGxvZ2luIHVzZXIKICAgYW5kIHBhc3N3b3JkLiBJZiB1c2VkIHdpdGggaHR0cCwgaXQgZW5hYmxlcyB1c2VyIGF1dGhlbnRpY2F0aW9uLiAtbiBpcwogICB0aGUgbmV3IHN3aXRjaC4KIC0gUmVtb3ZlZCB0aGUgZXh0cmEgbmV3bGluZXMgb24gdGhlIGRlZmF1bHQgdXNlci1hZ2VudCBzdHJpbmcuCiAtIENvcnJlY3RlZCB0aGUgbWlzc2luZyBmdHAgdXBsb2FkIGVycm9yIG1lc3NhZ2VzIHdoZW4gaXQgZmFpbGVkIHdpdGhvdXQgdGhlCiAgIHZlcmJvc2UgZmxhZyBzZXQuIEdhcnkgVy4gU3dlYXJpbmdlbiBmb3VuZCBpdC4KIC0gTm93IHVzaW5nIGFsYXJtKCkgdG8gZW5hYmxlIHNlY29uZC1wcmVjaXNpb24gdGltZW91dCBldmVuIG9uIHRoZSBuYW1lCiAgIHJlc29sdmluZy9jb25uZWN0aW5nIHBoYXNlLiBUaGUgdGltZW91dCBpcyBhbHRob3VnaCByZXNldCBhZnRlciB0aGF0IGZpcnN0CiAgIHNlcXVlbmNlLiAoVGhpcyBzaG91bGQgYmUgY29ycmVjdGVkLikgR2FyeSBXLiBTd2VhcmluZ2VuIHJlcG9ydGVkLgogLSBOb3cgc3BlbGxzICJVbmtub3duIiBwcm9wZXJseSwgYXMgaW4gIlVua25vd24gb3B0aW9uICd6JyIuLi4gOi0pCiAtIEFkZGVkIGJ1ZyByZXBvcnQgZW1haWwgYWRkcmVzcyBpbiB0aGUgUkVBRE1FLgogLSBBZGRlZCBhICJjdXJyZW50IHNwZWVkIiBmaWVsZCB0byB0aGUgcHJvZ3Jlc3MgbWV0ZXIuIEl0IHNob3dzIHRoZSBhdmVyYWdlCiAgIHNwZWVkIHRoZSBsYXN0IDUgc2Vjb25kcy4gVGhlIG90aGVyIHNwZWVkIGZpZWxkIHNob3dzIHRoZSBhdmVyYWdlIHNwZWVkIG9mCiAgIHRoZSBlbnRpcmUgdHJhbnNmZXIgc28gZmFyLgoKVmVyc2lvbiA0LjUuMQogTGluYXMgVmVwc3RhcwogLSBTU0wgdGhyb3VnaCBwcm94eSBmaXgKIC0gQWRkZWQgLUEgdG8gYWxsb3cgVXNlci1BZ2VudDogY2hhbmdlcwoKIERhbmllbCBTdGVuYmVyZyAKIC0gTWFkZSB0aGUgLUEgd29yayB3aGVuIFNTTC10aHJvdWdoLXByb3h5LgoKVmVyc2lvbiA0LjUKIExpbmFzIFZlcHN0YXMKIC0gTW9yZSBTU0wgY29ycmVjdGlvbnMKIC0gSSd2ZSBhZGRlZCBhIHBvcnQgdG8gQUlYLgogLSBydW5uaW5nIFNTTCB0aHJvdWdoIGEgcHJveHkgY2F1c2VzIGEgY2h1bmsgb2YgY29kZSB0byBiZSBleGVjdXRyZWQgdHdpY2UuCiAgIG9uZSBvZiB0aG9zZSBibG9ja3MgbmVlZHMgdG8gYmUgZGVsZXRlZC4KCiBEYW5pZWwgU3RlbmJlcmcKIC0gTWFkZSAtaSBhbmQgLUkgd29yayBhZ2FpbgoKVmVyc2lvbiA0LjQKIExpbmFzIFZlcHN0YXMKIC0gLXggY2FuIG5vdyBhbHNvIHNwZWNpZnkgcHJveHlwb3J0IHdoZW4gdXNlZCBhcyBpbiAncHJveHlob3N0OnByb3h5cG9ydCcKIC0gU1NMIGZpeGVzCgpWZXJzaW9uIDQuMwogRGFuaWVsIFN0ZW5iZXJnCiAtIEFkanVzdGVkIHRvIGNvbXBpbGUgdW5kZXIgd2luMzIgKFZpc3VhbEMrKyA1KS4gVGhlIC1QIHN3aXRjaCBkb2VzIG5vdAogICBzdXBwb3J0IG5ldHdvcmsgaW50ZXJmYWNlIG5hbWVzIGluIHdpbjMyLiBJIGNvdWxkbid0IGZpZ3VyZSBvdXQgaG93IQoKVmVyc2lvbiA0LjIKIExpbmFzIFZlcHN0YXMgLyBTYW1wbyBLZWxsb21ha2kKIC0gQWRkZWQgU1NMIC8gU1NMZWF5IHN1cHBvcnQgKGh0dHBzOi8vKQogLSBBZGRlZCB0aGUgLVQgdXNhZ2UgZm9yIEhUVFAgUE9TVC4KCiBEYW5pZWwgU3RlbmJlcmcKIC0gQnVnZml4ZWQgdGhlIFNTTCBpbXBsZW1lbnRhdGlvbi4KIC0gTWFkZSAtUCBhIGxvdCBiZXR0ZXIgdG8gdXNlIG90aGVyIElQIGFkZHJlc3Nlcy4gSXQgbm93IGFjY2VwdHMgYSBmb2xsb3dpbmcKICAgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIGVpdGhlcgogICAgICAgIGludGVyZmFjZSAtIGkuZSAiZXRoMCIgdG8gc3BlY2lmeSB3aGljaCBpbnRlcmZhY2UncyBJUCBhZGRyZXNzIHlvdQogICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gdXNlCiAgICAgICAgSVAgYWRkcmVzcyAtIGkuZSAiMTkyLjE2OC4xMC4xIiB0byBzcGVjaWZ5IGV4YWN0IElQIG51bWJlcgogICAgICAgIGhvc3QgbmFtZSAtIGkuZSAibXkuaG9zdC5kb21haW4iIHRvIHNwZWNpZnkgbWFjaGluZQogICAgICAgICItIiAgICAgICAtIChhbnkgc2luZ2xlLWxldHRlciBzdHJpbmcpIHRvIG1ha2UgaXQgcGljayB0aGUgbWFjaGluZSdzCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdAogLSBUaGUgTWFrZWZpbGUgaXMgbm93IHJlYWR5IHRvIGNvbXBpbGUgZm9yIHNvbGFyaXMsIHN1bm9zNCBhbmQgbGludXggcmlnaHQKICAgb3V0IG9mIHRoZSBib3guCiAtIEJldHRlciBnZW5lcmF0ZWQgdmVyc2lvbiBzdHJpbmcgc2VlbiB3aXRoICdjdXJsIC1WJwoKVmVyc2lvbiA0LjEKIERhbmllbCBTdGVuYmVyZwogLSBUaGUgSVAgbnVtYmVyIHJldHVybmVkIGJ5IHRoZSBmdHAgc2VydmVyIGFzIGEgcmVwbHkgdG8gUEFTViBkb2VzIG5vIGxvbmdlcgogICBoYXZlIHRvIEROUyByZXNvbHZlLiBJbiBmYWN0LCBubyBJUC1udW1iZXItb25seSBhZGRyZXNzZXMgaGF2ZSB0byBhbnltb3JlLgogLSBCaW5kcyBiZXR0ZXIgdG8gYXZhaWxhYmxlIHBvcnQgd2hlbiAtUCBpcyB1c2VkLgogLSBOb3cgTElTVHMgLi8gaW5zdGVhZCBvZiAvIHdoZW4gdXNlZCBhcyBpbiBmdHA6Ly9mdHAuZnVuZXQuZmkvLiBUaGUgcmVhc29uCiAgIGZvciB0aGlzIGlzIHRoYXQgZXhhY3RseSB0aGF0IHNpdGUsIGZ0cC5mdW5ldC5maSwgZG9lcyBub3QgYWxsb3cgTElTVCAvCiAgIHdoaWxlIExJU1QgLi8gaXMgZmluZS4gQW55IG9iamVjdGlvbnM/CgpWZXJzaW9uIDQgKDE5OTgtMDMtMjApCiBEYW5pZWwgU3RlbmJlcmcKIC0gSSB0b29rIGFub3RoZXIgaHVnZSBzdGVwIGFuZCBjaGFuZ2VkIGJvdGggdmVyc2lvbiBudW1iZXIgYW5kIHByb2plY3QgbmFtZSEKICAgVGhlIHJlYXNvbiBmb3IgdGhlIG5ldyBuYW1lIGlzIHRoYXQgdGhlcmUgYXJlIGp1c3Qgb25lIHRvbyBtYW55IHByb2dyYW1zCiAgIG5hbWVkIHVybGdldCBhbHJlYWR5IGFuZCB0aGlzIHByb2dyYW0gYWxyZWFkeSBjYW4gYSBsb3QgbW9yZSB0aGFuIG1lcmVseQogICBnZXR0aW5nIFVSTHMsIGFuZCB0aGUgcmVhc29uIGZvciB0aGUgdmVyc2lvbiBudW1iZXIgaXMgdGhhdCBJIGRpZCBhZGQgdGhlCiAgIHByZXR0eSBiaWcgY2hhbmdlIGluIC1QIGFuZCBzaW5jZSBJIGNoYW5nZWQgbmFtZSBJIHdhbnRlZCB0byBzdGFydCB3aXRoCiAgIHNvbWV0aGluZyBmcmVzaCEKIC0gVGhlIC0tc3R5bGUgZmxhZ3MgYXJlIHdvcmtpbmcgYmV0dGVyIG5vdy4KIC0gTGlzdGluZyBkaXJlY3RvcmllcyB3aXRoIEZUUCBvZnRlbiByZXBvcnRlZCB0aGF0IHRoZSBmaWxlIHRyYW5zZmVyIHdhcwogICBpbmNvbXBsZXRlLiBXcm9uZyBhc3N1bXB0aW9ucyB3ZXJlIHRvbyBjb21tb24gZm9yIGRpcmVjdG9yaWVzLCB3aHkgbm8KICAgc2l6ZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBnZXQgY29tcGFyZWQgb24gdGhlbSBmcm9tIG5vdyBvbi4KIC0gSW1wbGVtZW50ZWQgdGhlIC1QIGZsYWcgdGhhdCBsZXQncyB0aGUgZnRwIGNvbnRyb2wgaXNzdWUgYSBQT1JUIGNvbW1hbmQKICAgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgUEFTVi4KIC0gLWEgZm9yIGFwcGVuZGluZyBGVFAgdXBsb2FkcyB3b3Jrcy4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVmVyc2lvbiAzLjEyICgxNCBNYXJjaCAxOTk4KQogRGFuaWVsIFN0ZW5iZXJnCiAtIEVuZC1vZi1oZWFkZXIgdHJhY2tpbmcgc3RpbGwgbGFja2VkIHN1cHBvcnQgZm9yIFxyXG4gb3IganVzdCBcbiBhdCB0aGUKICAgZW5kIG9mIHRoZSBsYXN0IGhlYWRlciBsaW5lLgogU2VyZ2lvIEJhcnJlc2kKIC0gQWRkZWQgUFJPWFkgYXV0aGVudGljYXRpb24uCiBSYWZhZWwgU2FndWxhCiAtIEZpeGVkIHNvbWUgbGl0dGxlIGJ1Z3MuCgpWZXJzaW9uIDMuMTEKIERhbmllbCBTdGVuYmVyZwogLSBUaGUgaGVhZGVyIHBhcnNpbmcgd2FzIHN0aWxsIG5vdCBjb3JyZWN0IHNpbmNlIHRoZSAzLjIgbW9kaWZpY2F0aW9uLi4uCgpWZXJzaW9uIDMuMTAKIERhbmllbCBTdGVuYmVyZwogLSAzLjcgYW5kIDMuOSB3ZXJlIHNpbXVsdGFuZW91c2x5IGRldmVsb3BlZCBhbmQgbWVyZ2VkIGludG8gdGhpcyB2ZXJzaW9uLgogLSBGVFAgdXBsb2FkIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgc2luY2UgMy4yLgoKVmVyc2lvbiAzLjkKIFJhZmFlbCBTYWd1bGEKIC0gQWRkZWQgdGhlICItZSA8dXJsPiAvIC0tcmVmZXJlciA8dXJsPiIgb3B0aW9uIHdoZXJlIHdlIGNhbiBzcGVjaWZ5CiAgIHRoZSByZWZlcmVyIHBhZ2UuIE9idmlvdXNseSwgdGhpcyBpcyBuZWNlc3Nhcnkgb25seSB0byBmb29sIHRoZQogICBzZXJ2ZXIsIGJ1dC4uLgoKVmVyc2lvbiAzLjcKIERhbmllbCBTdGVuYmVyZwogLSBOb3cgY2hlY2tzIHRoZSBsYXN0IGVycm9yIGNvZGUgc2VudCBmcm9tIHRoZSBmdHAgc2VydmVyIGFmdGVyIGEgZmlsZSBoYXMKICAgYmVlbiByZWNlaXZlZCBvciB1cGxvYWRlZC4gV2Fzbid0IGRvbmUgcHJldmlvdXNseS4KIC0gV2hlbiAndXJsZ2V0IDxob3N0PicgaXMgdXNlZCB3aXRob3V0IGEgJ3Byb3RvY29sOi8vJyBmaXJzdCBpbiB0aGUgaG9zdCBwYXJ0LAogICBpdCBub3cgY2hlY2tzIGZvciBob3N0IG5hbWVzIHN0YXJ0aW5nIHdpdGggZnRwIG9yIGdvcGhlciBhbmQgaWYgaXQgZG9lcywKICAgaXQgdXNlcyB0aGF0IHByb3RvY29sIGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiBodHRwLgoKVmVyc2lvbiAzLjYKIERhbmllbCBTdGVuYmVyZwogLSBTaWxseSBtaXN0YWtlIG1hZGUgdGhlIFBPU1QgYnVnLiBUaGlzIGhhcyBub3cgYWxzbyBiZWVuIHRlc3RlZCB0byB3b3JrIHdpdGgKICAgcHJveHkuCgpWZXJzaW9uIDMuNQogRGFuaWVsIFN0ZW5iZXJnCiAtIEhpZ2hseSBpbnNwaXJlZCBieSBSYWZhZWwgU2FndWxhJ3MgY2hhbmdlcyB0byB0aGUgMy4xIHRoYXQgYWRkZWQgYW4gYWxtb3N0CiAgIGZ1bmN0aW9uYWwgUE9TVCwgSSBhcHBsaWVkIGhpcyBjaGFuZ2VzIGludG8gdGhpcyB2ZXJzaW9uIGFuZCBtYWRlIHRoZW0gd29yay4KICAgKEl0IHNlZW1zIFBPU1QgcmVxdWlyZXMgdGhlIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1MZW5ndGggaGVhZGVycy4pIEl0IGlzCiAgIG5vdyB1c2FibGUgd2l0aCB0aGUgLWQgc3dpdGNoLgoKVmVyc2lvbiAzLjMgLSAzLjQKIFBhc3NlZCB0byBhdm9pZCBjb25mdXNpb25zCgpWZXJzaW9uIDMuMgogRGFuaWVsIFN0ZW5iZXJnCiAtIE1ham9yIHJld3JpdGUgb2YgdHdvIGNydWNpYWwgcGFydHMgb2YgdGhpcyBjb2RlOiB1cGxvYWQgYW5kIGRvd25sb2FkLgogICBUaGV5IGFyZSBib3RoIG5vdyB1c2luZyBhIHNlbGVjdCgpIHN3aXRjaCwgdGhhdCBhbGxvd3MgbXVjaCBiZXR0ZXIKICAgcHJvZ3Jlc3MgbWV0ZXIgYW5kIHRpbWUgY29udHJvbC4gCiAtIGFsYXJtKCkgdXNhZ2UgcmVtb3ZlZCBjb21wbGV0ZWx5CiAtIEZUUCBnZXQgY2FuIG5vdyBsaXN0IGRpcmVjdG9yeSBjb250ZW50cyBpZiB0aGUgcGF0aCBlbmRzIHdpdGggYSBzbGFzaCAnLycuCiAgIFVybGdldCBvbiBhIGZ0cC1wYXRoIHRoYXQgZG9lc24ndCBlbmQgd2l0aCBhIHNsYXNoIG1lYW5zIHVybGdldCB3aWxsCiAgIGF0dGVtcHQgZ2V0dGluZyBpdCBhcyBhIGZpbGUgbmFtZS4KIC0gRlRQIGRpcmVjdG9yeSB2aWV3IHN1cHBvcnRzIC1sIGZvciAibGlzdC1vbmx5IiB3aGljaCBsaXN0cyB0aGUgZmlsZSBuYW1lcwogICBvbmx5LgogLSBBbGwgb3BlcmF0aW9ucyBzdXBwb3J0IC1tIGZvciBtYXggdGltZSB1c2FnZSBpbiBzZWNvbmRzIGFsbG93ZWQuCiAtIEZUUCB1cGxvYWQgbm93IGFsbG93cyB0aGUgc2l6ZSBvZiB0aGUgdXBsb2FkZWQgZmlsZSB0byBiZSBwcm92aWRlZCwgYW5kCiAgIHRodXMgaXQgY2FuIGJldHRlciBjaGVjayBpdCBhY3R1YWxseSB1cGxvYWRlZCB0aGUgd2hvbGUgZmlsZS4gSXQgYWxzbwogICBtYWtlcyB0aGUgcHJvZ3Jlc3MgbWV0ZXIgZm9yIHVwbG9hZHMgbXVjaCBiZXR0ZXIhCiAtIE1hZGUgdGhlIHBhcmFtZXRlciBwYXJzaW5nIGZhaWwgaW4gY2FzZXMgbGlrZSAndXJsZ2V0IC1yIDkwMCcgd2hpY2gKICAgcHJldmlvdXNseSB0cmllZCB0byBjb25uZWN0IHRvIHRoZSBob3N0IG5hbWVkICc5MDAnLgoKVmVyc2lvbiAzLjEKIEtqZWxsIEVyaWNzb24KIC0gUG9pbnRlZCBvdXQgaG93IHRvIGNvcnJlY3QgdGhlIDMgd2FybmluZ3MgaW4gd2luMzItY29tcGlsZXMuCgogRGFuaWVsIFN0ZW5iZXJnCiAtIFJlbW92ZWQgYWxsIGNhbGxzIHRvIGV4aXQoKS4KIC0gTWFkZSB0aGUgc2hvcnQgaGVscCB0ZXh0IGdldCB3cml0dGVuIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci4KIC0gTWFkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiBrZWVwaW5nIHRoZXNlIGNvbW1lbnRzIGluIHRoZSBzb3VyY2UuCiAtIE1hZGUgdHdvIGNhbGxiYWNrIGhvb2tzLCB0aGF0IGVuYWJsZSBleHRlcm5hbCBwcm9ncmFtcyB0byB1c2UgdXJsZ2V0KCkKICAgZWFzaWVyIGFuZCB0byBncmFiIHRoZSBvdXRwdXQvb2ZmZXIgdGhlIGlucHV0IGVhc2llci4KIC0gSXQgaXMgZXZpZGVudCB0aGF0IFdpbjMyLWNvbXBpbGVzIGFyZSBwYWluZnVsLiBJIHdhdGNoZWQgdGhlIG91dHB1dCBmcm9tCiAgIHRoZSBCb3JsYW5kIEMrKyB2NSBhbmQgaXQgd2FzIGF3ZnVsLiBKdXN0IGlnbm9yZSBhbGwgdGhvc2Ugd2FybmluZ3MuCgpWZXJzaW9uIDMuMAogRGFuaWVsIFN0ZW5iZXJnCiAtIEFkZGVkIEZUUCB1cGxvYWQgY2FwYWJpbGl0aWVzLiBUaGUgbmFtZSB1cmxnZXQgZ2V0cyBhIGJpdCBzaWxseSBub3cKICAgd2hlbiB3ZSBjYW4gcHV0IHRvby4uLiA9KQogLSBSZXN0cnVjdHVyZWQgdGhlIHNvdXJjZSBxdWl0ZSBhIGxvdC4KICAgQ2hhbmdlZCB0aGUgdXJsZ2V0KCkgaW50ZXJmYWNlLiBUaGlzIHdheSwgd2Ugd2lsbCBzdXJ2aXZlIGNoYW5nZXMgbXVjaAogICBiZXR0ZXIuIE5ldyBmZWF0dXJlcyBjYW4gY29tZSBhbmQgb2xkIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgdXMgbmVlZGluZwogICB0byBjaGFuZ2UgdGhlIGludGVyZmFjZS4gSSd2ZSB3cml0dGVuIGEgc21hbGwgZXhwbGFuYXRpb24gaW4gdXJsZ2V0LmgKICAgdGhhdCBleHBsYWlucyBpdC4KIC0gTmV3IGZsYWdzIGluY2x1ZGUgLXQsIC1ULCAtTyBhbmQgLWguIFRoZSAtaCB0ZXh0IGlzIGdlbmVyYXRlZCBieSB0aGUgbmV3CiAgIG1raGVscCBzY3JpcHQuCgpWZXJzaW9uIDIuOQogUmVtY28gdmFuIEhvb2ZmCiAtIEFkZGVkIGEgZml4IHRvIG1ha2UgaXQgY29tcGlsZSBzbW9vdGhseSBvbiBBbWlnYSB1c2luZyB0aGUgU0FTL0MKICAgY29tcGlsZXIuCiAgCiBEYW5pZWwgU3RlbmJlcmcKIC0gQmVsaWV2ZSBpdCBvciBub3QsIGJ1dCB0aGUgU1RVUElEIE5vdmVsbCB3ZWIgc2VydmVyIHNlZW1zIHRvIHJlcXVpcmUKICAgdGhhdCB0aGUgSG9zdDoga2V5d29yZCBpcyB1c2VkLCBzbyB3ZWxsIEkgdXNlIGl0IGFuZCBJIChyZS1pbnRyb2R1Y2UpIHRoZQogICB1cmxnZXQgVXNlci1BZ2VudDouIEkgc3RpbGwgaGF2ZSB0byBjaGVjayB0aGF0IHRoaXMgSG9zdDogdXNhZ2Ugd29ya3Mgd2l0aAogICBwcm94aWVzLi4uICdIb3N0OicgaXMgcmVxdWlyZWQgZm9yIEhUVFAvMS4xIEdFVCBhY2NvcmRpbmcgdG8gUkZDMjA2OC4KClZlcnNpb24gMi44CiBSYWZhZWwgU2FndWxhCiAtIHNvbWUgbGl0dGxlIG1vZGlmaWNhdGlvbnMKClZlcnNpb24gMi43CiBEYW5pZWwgU3RlbmJlcmcKIC0gUmVtb3ZlZCB0aGUgLWwgb3B0aW9uIGFuZCBpbnRyb2R1Y2VkIHRoZSAtZiBvcHRpb24gaW5zdGVhZC4gTm93IEknbGwKICAgcmV3cml0ZSB0aGUgZm9ybWVyIC1sIGtsdWRnZSBpbiBhbiBleHRlcm5hbCBzY3JpcHQgdGhhdCdsbCB1c2UgdXJsZ2V0IHRvCiAgIGZldGNoIG11bHRpcGFydCBmaWxlcyBsaWtlIHRoYXQuCiAtICctZicgaXMgaW50cm9kdWNlZCwgaXQgbWVhbnMgRmFpbCB3aXRob3V0IG91dHB1dCBpbiBjYXNlIG9mIEhUVFAgc2VydmVyCiAgIGVycm9ycyAocmV0dXJuIGNvZGUgPj0zMDApLgogLSBBZGRlZCBzdXBwb3J0IGZvciAtciwgcmFuZ2VzLiBTcGVjaWZ5IHdoaWNoIHBhcnQgb2YgYSBkb2N1bWVudCB5b3UgCiAgIHdhbnQsIGFuZCBvbmx5IHRoYXQgcGFydCBpcyByZXR1cm5lZC4gT25seSB3aXRoIEhUVFAvMS4xLXNlcnZlcnMuCiAtIFNwbGl0IHVwIHRoZSBzb3VyY2UgaW4gMyBwYXJ0cy4gTm93IGFsbCBwdXJlIFVSTCBmdW5jdGlvbnMgYXJlIGluCiAgIHVybGdldC5jIGFuZCBzdHVmZiB0aGF0IGRlYWxzIHdpdGggdGhlIHN0YW5kLWFsb25lIHByb2dyYW0gaXMgaW4gbWFpbi5jLgogLSBJIHRvb2sgYSBmZXcgbWludXRlcyBhbmQgd3JvdGUgYW4gZW1icnlvIG9mIGEgUkVBRE1FIGZpbGUgdG8gZXhwbGFpbgogICBhIGZldyB0aGluZ3MuCgpWZXJzaW9uIDIuNgogRGFuaWVsIFN0ZW5iZXJnCiAtIE1hZGUgdGhlIC1sIChsb29wKSB0aGluZyB1c2UgdGhlIG5ldyBDT05GX0ZBSUxPTkVSUk9SIHdoaWNoIG1ha2VzCiAgIHVybGdldCgpIHJldHVybiBlcnJvciBjb2RlIGlmIG5vbi1zdWNjZXNzZnVsLiBJdCBhbHNvIHdvbid0IG91dHB1dCBhbnl0aGluZwogICB0aGVuLiBOb3cgZmluYWxseSByZW1vdmVkIHRoZSBIVFRQIDEuMCBhbmQgZXJyb3IgNDA0IGRlcGVuZGVuY2llcy4KIC0gQWRkZWQgLUkgd2hpY2ggdXNlcyB0aGUgSEVBRCByZXF1ZXN0IHRvIGdldCB0aGUgaGVhZGVyIG9ubHkgZnJvbSBhCiAgIGh0dHAtc2VydmVyLgoKVmVyc2lvbiAyLjUKIFJhZmFlbCBTYWd1bGEKIC0gTWFkZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgdXNlIEhISDpNTTpTUyBpbnN0ZWFkIG9mIG9ubHkgc2Vjb25kcy4KClZlcnNpb24gMi40CiBEYW5pZWwgU3RlbmJlcmcKIC0gQWRkZWQgcHJvZ3Jlc3MgbWV0ZXIuIEl0IGFwcGVhcnMgd2hlbiBkb3dubG9hZGluZyA+IEJVRkZFUiBTSVpFIGFuZAogICBtdXRlIGlzIG5vdCBzZWxlY3RlZC4gSSBmb3VuZCBvdXQgdGhhdCB3aGVuIGRvd25sb2FkaW5nIGxhcmdlIGZpbGVzIGZyb20KICAgcmVhbGx5IHJlYWxseSBzbG93IHNpdGVzLCBpdCBpcyBkZXNpcmFibGUgdG8ga25vdyB0aGUgc3RhdHVzIG9mIHRoZQogICBkb3dubG9hZC4gRG8gbm90ZSB0aGF0IHNvbWUgZG93bmxvYWRzIGFyZSBkb25lIHVuYXdhcmluZyBvZiB0aGUgc2l6ZSwgd2hpY2gKICAgbWFrZXMgdGhlIHByb2dyZXNzIG1ldGVyIGxlc3MgdGhyaWxsaW5nIDspIElmIHRoZSBvdXRwdXQgaXMgc2VudCB0byBhIHR0eSwKICAgdGhlIHByb2dyZXNzIG1ldGVyIGlzIHNodXQgb2ZmLgogLSBJbmNyZWFzZWQgYnVmZmVyIHNpemUgdXNlZCBmb3IgcmVhZGluZy4KIC0gQWRkZWQgbGVuZ3RoIGNoZWNrcyBpbiB0aGUgdXNlcitwYXNzd2QgcGFyc2luZy4KIC0gTWFkZSBpdCBncm9rIHVzZXIrcGFzc3dkIGZvciBIVFRQIGZldGNoZXMuIFRoZSB0cmljayBpcyB0byBiYXNlNjQKICAgZW5jb2RlIHRoZSB1c2VyK3Bhc3N3ZCBhbmQgc2VuZCBhbiBleHRyYSBoZWFkZXIgbGluZS4gUmVhZCBjaGFwdGVyIDExLjEgaW4KICAgUkZDMjA2OCBmb3IgZGV0YWlscy4gSSBhZGRlZCBpdCB0byBiZSB1c2VkIGp1c3QgbGlrZSB0aGUgZnRwIG9uZS4gIFRvIGdldCBhCiAgIGh0dHAgZG9jdW1lbnQgZnJvbSBhIHBsYWNlIHRoYXQgcmVxdWlyZXMgdXNlciBhbmQgcGFzc3dvcmQsIHVzZSBhbiBVUkwKICAgbGlrZToKCiAgICAgICAgaHR0cDovL3VzZXI6cGFzc3dkQHd3dy5zaXRlLnRvLmxlYWNoL2RvYy5odG1sCgogICBJIGFsc28gYWRkZWQgdGhlIC11IGZsYWcsIHNpbmNlIFdIRU4gVVNJTkcgQSBQUk9YWSBZT1UgQ0FOJ1QgU1BFQ0lGWSBUSEUKICAgVVNFUiBBTkQgUEFTU1dPUkQgV0lUSCBIVFRQIExJS0UgVEhBVC4gVGhlIC11IGZsYWcgd29ya3MgZm9yIGZ0cCB0b28sIGJ1dAogICBub3QgaWYgdXNlZCB3aXRoIHByb3h5LiBUbyBkbyB0aGUgc2FtZSBhcyB0aGUgYWJvdmUgb25lLCB5b3UgY2FuIGludm9rZToKCiAgICAgICAgdXJsZ2V0IC11IHVzZXI6cGFzc3dkIGh0dHA6Ly93d3cuc2l0ZS50by5sZWFjaC9kb2MuaHRtbAoKVmVyc2lvbiAyLjMKIFJhZmFlbCBTYWd1bGEKIC0gQWRkZWQgIi1vIiBvcHRpb24gKG91dHB1dCBmaWxlKQogLSBBZGRlZCBVUkdfSFRUUF9OT1RfRk9VTkQgcmV0dXJuIGNvZGUuCiAgIChEYW5pZWwncyBub3RlOikKICAgUGVyaGFwcyB3ZSBzaG91bGQgZGV0ZWN0IGFsbCBraW5kcyBvZiBlcnJvcnMgYW5kIGluc3RlYWQgb2Ygd3JpdGluZyB0aGF0CiAgIGN1c3RvbSBzdHJpbmcgZm9yIHRoZSBwYXJ0aWN1bGFyIDQwNC1lcnJvciwgdXNlIHRoZSBlcnJvciB0ZXh0IHdlIGFjdHVhbGx5CiAgIGdldCBmcm9tIHRoZSBzZXJ2ZXIuIFNlZSBmdXJ0aGVyIGRldGFpbHMgaW4gUkZDMjA2OCAoSFRUUCAxLjEKICAgZGVmaW5pdGlvbikuIFRoZSBjdXJyZW50IHdheSBhbHNvIHJlbGllcyBvbiBhIEhUVFAvMS4wIHJlcGx5LCB3aGljaCBuZXdlcgogICBzZXJ2ZXJzIG1pZ2h0IG5vdCBkby4KIC0gTG9vcGluZyBtb2RlICgiLWwiIG9wdGlvbikuIEl0J3MgZWFzaWVyIHRvIGdldCB2YXJpb3VzIHNwbGl0IGZpbGVzLgogICAoRGFuaWVsJ3Mgbm90ZTopCiAgIFVzZSBpdCBsaWtlICd1cmxnZXQgLWwgMSBodHRwOi8vZnJvbS50aGlzLnNpdGUvZmlsZSVkLmh0bWwnLCB3aGljaCB3aWxsCiAgIG1ha2UgdXJsZ2V0IHRvIGF0dGVtcHQgdG8gZmV0Y2ggYWxsIGZpbGVzIG5hbWVkIGZpbGUxLmh0bWwsIGZpbGUyLmh0bWwgZXRjCiAgIHVudGlsIG5vIG1vcmUgZmlsZXMgYXJlIGZvdW5kLiBUaGlzIGlzIG9ubHkgYSBtb2RpZmljYXRpb24gb2YgdGhlCiAgIFNUQU5EX0FMT05FIHBhcnQsIG5vdGhpbmcgaW4gdGhlIHVybGdldCgpIGZ1bmN0aW9uIHdhcyBtb2RmaWZpZWQgZm9yIHRoaXMuCiBEYW5pZWwgU3RlbmJlcmcKIC0gQ2hhbmdlZCB0aGUgLWggdG8gYmUgLWkgaW5zdGVhZC4gLWggc2hvdWxkIGJlIHByZXNlcnZlZCB0byBoZWxwIHVzZS4KIC0gQmpvcm4gUmVlc2UgaW5kaWNhdGVkIHRoYXQgQm9ybGFuZCBfbWlnaHRfIHVzZSAnX1dJTjMyJyBpbnN0ZWFkIG9mIHRoZQogICBWQysrIFdJTjMyIGRlZmluZSBhbmQgdGhlcmVmb3JlIEkgYWRkZWQgYSBsaXR0bGUgZml4IGZvciB0aGF0LgoKVmVyc2lvbiAyLjIKIEpvaGFuIEFuZGVyc3NvbgogLSBUaGUgdXJsZ2V0IGZ1bmN0aW9uIGRpZG4ndCBzZXQgdGhlIHBhdGggdG8gdXJsIHdoZW4gdXNpbmcgcHJveHkuCiAtIEZpeGVkIGJ1ZyB3aXRoIElNQyBwcm94eS4gTm93IHVzaW5nIChhbG1vc3QpIGNvbXBsZXRlIEdFVCBjb21tYW5kLgogIAogRGFuaWVsIFN0ZW5iZXJnCiAtIE1hZGUgaXQgY29tcGlsZSBvbiBTb2xhcmlzLiBIYWQgdG8gcmVvcmdhbml6ZSB0aGUgaW5jbHVkZXMgYSBiaXQuCiAgIChzbyBXaW4zMiwgTGludXgsIFN1bk9TIDQgYW5kIFNvbGFyaXMgMiBjb21waWxlIGZpbmUuKQogLSBNYWRlIEpvaGFuJ3Mga2VlcGFsaXZlIGtleXdvcmQgb3B0aW9uYWwgd2l0aCB0aGUgLWsgZmxhZyAoc2luY2UgaXQKICAgbWFrZXMgYSBsb3Qgb2YgdXJsZ2V0cyB0YWtlIGEgbG90IGxvbmdlciB0aW1lKS4KIC0gTWFkZSBhICctaCcgc3dpdGNoIGluIGNhc2UgeW91IHdhbnQgdGhlIEhUVFAtaGVhZGVyIGluIHRoZSBvdXRwdXQuCgpWZXJzaW9uIDIuMQogRGFuaWVsIFN0ZW5iZXJnIGFuZCBLamVsbCBFcmljc29uCiAtIFdpbjMyLWNvbXBpbGFibGUKIC0gTm8gbW9yZSBnbG9iYWwgdmFyaWFibGVzCiAtIE11dGUgb3B0aW9uIChubyBvdXRwdXQgYXQgYWxsIHRvIHN0ZGVycikKIC0gRnVsbCByYW5nZSBvZiByZXR1cm4gY29kZXMgZnJvbSB1cmxnZXQoKSwgd2hpY2ggaXMgbm93IHdyaXR0ZW4gdG8gYmUgYQogICBmdW5jdGlvbiBmb3IgZWFzeS10by11c2UgaW4gW290aGVyXSBwcm9ncmFtcy4KIC0gRGVmaW5lIFNUQU5EX0FMT05FIHRvIGNvbXBpbGUgdGhlIHN0YW5kIGFsb25lIHVybGdldCBwcm9ncmFtCiAtIE5vdyBjb21waWxlcyB3aXRoIGdjYyBvcHRpb25zIC1hbnNpIC1XYWxsIC1wZWRhbnRpYyA7KQoKVmVyc2lvbiAyLjAKIC0gSW50cm9kdWNpbmcgZnRwIEdFVCBzdXBwb3J0LiBUaGUgRlRQIFVSTCB0eXBlIGlzIHJlY29nbml6ZWQgYW5kIHVzZWQuCiAtIFJlbmFtZWQgdGhlIHByb2plY3QgdG8gJ3VybGdldCcuCiAtIFN1cHBvcnRzIHRoZSB1c2VyK3Bhc3N3ZCBpbiB0aGUgRlRQIFVSTCAob3RoZXJ3aXNlIGl0IHRyaWVzIGFub255bW91cwogICBsb2dpbiB3aXRoIGEgd2VpcmQgZW1haWwgYWRkcmVzcyBhcyBwYXNzd29yZCkuCgpWZXJzaW9uIDEuNQogRGFuaWVsIFN0ZW5iZXJnCiAtIFRoZSBza2lwX2hlYWRlcigpIGNyYXAgbWVzc2VkIGl0IHVwIGJpZy10aW1lLiBCeSBzaW1wbHkgcmVtb3ZpbmcgdGhhdAogICBvbmUgd2UgY2FuIGFsbCBvZiBhIHN1ZGRlbiBkb3dubG9hZCBhbnl0aGluZyA7KQogLSBObyBsb25nZXIgcmVxdWlyZXMgYSB0cmFpbGluZyBzbGFzaCBvbiB0aGUgVVJMcy4KIC0gSWYgdGhlIGdpdmVuIFVSTCBpc24ndCBwcmVmaXhlZCB3aXRoICdodHRwOi8vJywgSFRUUCBpcyBhc3N1bWVkIGFuZAogICBnaXZlbiBhIHRyeSEKIC0gJ3ZvaWQgbWFpbigpJyBpcyBoaXN0b3J5LgoKVmVyc2lvbiAxLjQKIERhbmllbCBTdGVuYmVyZwogLSBUaGUgZ29waGVyIHNvdXJjZSB1c2VkIHRoZSBwcGF0aCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHBhdGggd2hpY2ggY291bGQKICAgbGVhZCB0byBkaXNhc3Rlci4KClZlcnNpb24gMS4zCiBEYW5pZWwgU3RlbmJlcmcKIC0gV2VsbCwgSSBhZGRlZCBhIGxhbWUgdGV4dCBhYm91dCB0aGUgdGltZSBpdCB0b29rIHRvIGdldCB0aGUgZGF0YS4gSSBhbHNvCiAgIGZvdWdodCBhZ2FpbnN0IEpvaGFuIHRvIHByZXZlbnQgaGlzIC1mIG9wdGlvbiAodG8gc3BlY2lmeSBhIGZpbGUgbmFtZQogICB0aGF0IHNob3VsZCBiZSB3cml0dGVuIGluc3RlYWQgb2Ygc3Rkb3V0KSEgPSkKIC0gTWFkZSBpdCB3cml0ZSAnY29ubmVjdGlvbiByZWZ1c2VkJyBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNvbm5lY3QoKQogICBwcm9ibGVtLgogLSBSZW51bWJlcmVkIHRoZSB2ZXJzaW9uLiBMZXQncyBub3QgbWFrZSBzaWxseSAxLjAuWCB2ZXJzaW9ucywgdGhpcyBpcwogICBhIHBsYWluIDEuMyBpbnN0ZWFkLgoKVmVyc2lvbiAxLjIKIEpvaGFuIEFuZGVyc3NvbgogLSBEaXNjb3ZlcmVkIGFuZCBmaXhlZCB0aGUgcHJvYmxlbSB3aXRoIGdldHRpbmcgYmluYXJ5IGZpbGVzLiBwdXRzKCkgaXMKICAgbm93IHJlcGxhY2VkIHdpdGggZndyaXRlKCkuIChEYW5pZWwncyBub3RlOiB0aGlzIGFsc28gZml4ZWQgdGhlIGJ1ZmZlcgogICBvdmVyd3JpdGUgcHJvYmxlbSBJIGZvdW5kIGluIHRoZSBwcmV2aW91cyB2ZXJzaW9uLikKCiBSYWZhZWwgU2FndWxhCiAtIExldCAiLXAiIGJlZm9yZSAiLXgiLgoKIERhbmllbCBTdGVuYmVyZwogLSBCdWdmaXhlZCB0aGUgcHJveHkgdXNhZ2UuIEl0IHNob3VsZCAqTk9UKiB1c2Ugbm9yIHN0cmlwIHRoZSBwb3J0IG51bWJlcgogICBmcm9tIHRoZSBVUkwgYnV0IHNpbXBseSBwYXNzIHRoYXQgaW5mb3JtYXRpb24gdG8gdGhlIHByb3h5LiBUaGlzIGFsc28KICAgbWFkZSB0aGUgdXNlci9wYXNzd29yZCBmaWVsZHMgcG9zc2libGUgdG8gdXNlIGluIHByb3h5IFtmdHAtXSBVUkxzLgogICAobGlrZSBpbiBmdHA6Ly91c2VyOnBhc3N3b3JkQGZ0cC5teS5zaXRlOjgwMjEvUkVBRE1FKQoKIEpvaGFuIEFuZGVyc3NvbgogLSBJbXBsZW1lbnRlZCBIVFRQIHByb3h5IHN1cHBvcnQuCiAtIFJlY2VpdmUgYnl0ZSBjb3VudGVyIGFkZGVkLgoKIEJqb3JuIFJlZXNlCiAtIEltcGxlbWVudGVkIFVSTHMgKGFuZCBza2lwcGVkIHRoZSBvbGQgc3ludGF4KS4KIC0gT3V0cHV0IGlzIHdyaXR0ZW4gdG8gc3Rkb3V0LCBzbyB0byBhY2hpZXZlIHRoZSBhYm92ZSBleGFtcGxlLCBkbzoKICAgaHR0cGdldCBodHRwOi8vMTQzLjU0LjEwLjYvaW5mb19sb2dvLmdpZiA+IHRlc3QuZ2lmCgpWZXJzaW9uIDEuMQogRGFuaWVsIFN0ZW5iZXJnCiAtIEFkanVzdGVkIGl0IHNsaWdodGx5IHRvIGFjY2VwdCBuYW1lZCBob3N0cyBvbiB0aGUgY29tbWFuZCBsaW5lLiBXZQogICB3b3VsZG4ndCB3YW5uYSB1c2UgSVAgbnVtYmVycyBmb3IgdGhlIHJlc3Qgb2Ygb3VyIGxpZmVzLCB3b3VsZCB3ZT8KClZlcnNpb24gMS4wCiAgUmFmYWVsIFNhZ3VsYQogIC0gV3JvdGUgdGhlIGluaXRpYWwgaHR0cGdldCwgd2hpY2ggc3RhcnRlZCBhbGwgdGhpcyEK