KnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IE1hciAxMwoKCgkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCgoKCQkJICAgICAgVE9ETyBsaXN0IGZvciBWaW0JCSp0b2RvKgoKVGhpcyBpcyBhIHZlZWVlcnkgbG9uZyBsaXN0IG9mIGtub3duIGJ1Z3MsIGN1cnJlbnQgd29yayBhbmQgZGVzaXJlZAppbXByb3ZlbWVudHMuICBUbyBtYWtlIGl0IGEgbGl0dGxlIGJpdCBhY2Nlc3NpYmxlLCB0aGUgaXRlbXMgYXJlIGdyb3VwZWQgYnkKc3ViamVjdC4gIEluIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGxpbmUgYSBjbGFzc2lmaWNhdGlvbiBpcyB1c2VkIHRvIGJlIGFibGUKdG8gbG9vayBmb3IgInRoZSBuZXh0IHRoaW5nIHRvIGRvIjoKClByaW9yaXR5IGNsYXNzaWZpY2F0aW9uOgo5ICAgbmV4dCBwb2ludCByZWxlYXNlCjggICBuZXh0IHJlbGVhc2UKNyAgIGFzIHNvb24gYXMgcG9zc2libGUKNiAgIHNvb24KNSAgIHNob3VsZCBiZSBpbmNsdWRlZAo0ICAgbmljZSB0byBoYXZlCjMgICBjb25zaWRlciBpbmNsdWRpbmcKMiAgIG1heWJlIG5vdAoxICAgcHJvYmFibHkgbm90Ci0gICB1bmNsYXNzaWZpZWQKCgkJCQkJCSAgICAqdm90ZXMtZm9yLWNoYW5nZXMqClNlZSB8ZGV2ZWxvcC50eHR8IGZvciBkZXZlbG9wbWVudCBwbGFucy4gIFlvdSBjYW4gdm90ZSBmb3Igd2hpY2ggaXRlbXMgc2hvdWxkCmJlIHdvcmtlZCBvbiwgYnV0IG9ubHkgaWYgeW91IHNwb25zb3IgVmltIGRldmVsb3BtZW50LiAgU2VlIHxzcG9uc29yfC4KCgkJCQkJCQkqa25vd24tYnVncyoKLS0tLS0tLS0tLS0tLS0tLS0tLS0gS25vd24gYnVncyBhbmQgY3VycmVudCB3b3JrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotICAgVU5ETyBUUkVFOgogICAgTWFrZSBwcm9wZXIgdGVzdCBmb3IgImcrIiBhbmQgImctIgogICAgVmVyaWZ5IHRoZXJlIGFyZSBubyBtZW1vcnkgbGVha3MuCiAgICBEb2NzIGZvciAiZysiIGFuZCAiZy0iLCBub3RlIGluIHZlcnNpb243LnR4dAogICAgQ29tbWFuZCB0byBqdW1wIHNvIG1hbnkgc2Vjb25kcyBmb3J3YXJkL2JhY2t3YXJkPwogICAgU2hvdyB0aGUgbGlzdCBvZiBjaGFuZ2VzIGluIGEgd2luZG93IHRvIGJlIGFibGUgdG8gc2VsZWN0IGEgdmVyc2lvbj8KCldpbjMyOiBEZXNjcmliZSBob3cgdG8gZG8gZGVidWdnaW5nLiAoR2VvcmdlIFJlaWxseSkKCk1hYyB1bmljb2RlIHBhdGNoIChEYSBXb29uIEp1bmcpOgotICAgTWFjOiBVbmljb2RlIGlucHV0IGFuZCBkaXNwbGF5IChFY2tlaGFyZCBCZXJucykKICAgIEluY2x1ZGVkIHBhdGNoIGZyb20gRGEgV29vbiBKdW5nLCBub3QgY29tcGxldGUgeWV0Lgo4ICAgQWRkIHBhdGNoIGZyb20gTXVyYW9rYSBUYXJvIChNYXIgMTYpIHRvIHN1cHBvcnQgaW5wdXQgbWV0aG9kIG9uIE1hYz8KICAgIE5ldyBwYXRjaCAyMDA0IEp1biAxNgotIEFkZCBkZWZhdWx0IGtleSBtYXBwaW5ncyBmb3IgdGhlIGNvbW1hbmQga2V5IChBbGFuIFNjaG1pdHQpCiAgICB1c2UgaHR0cDovL21hY3ZpbS5vcmcvT1NYL2ZpbGVzL2d2aW1yYwotIHNlbGVjdGluZyBwcm9wb3J0aW9uYWwgZm9udCBicmVha3MgZGlzcGxheQotIFVURi04IHRleHQgY2F1c2VzIGRpc3BsYXkgcHJvYmxlbXMuICBGb250IHJlcGxhY2VtZW50IGNhdXNlcyB0aGlzLgotIENvbW1hbmQta2V5IG1hcHBpbmdzIGRvIG5vdCB3b3JrLiAoQWxhbiBTY2htaXR0KQotIFdpdGggJ25vcGFzdGUnIHBhc3RpbmcgaXMgd3JvbmcsIHdpdGggJ3Bhc3RlJyBDb21tYW5kLVYgZG9lc24ndCB3b3JrLgogIChBbGFuIFNjaG1pdHQpCgoKQ09OU0lERVJFRCBGT1IgVkVSU0lPTiA3LjA6CgotICAgRU1CRURESU5HOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biBWaW0gaW5zaWRlIGEgd2luZG93IG9mIGFub3RoZXIgcHJvZ3JhbS4KICAgIEZvciBYd2luZG93cyB0aGlzIGNhbiBiZSBkb25lIHdpdGggWFJlcGFyZW50V2luZG93KCkuCiAgICBGb3IgR1RLIE5laWwgQmlyZCBoYXMgYSBwYXRjaCB0byB1c2UgVmltIGxpa2UgYSB3aWRnZXQuCgotICAgQWRkIGEgZmV3IG1vcmUgdGhpbmdzIHRvICdkaWZmb3B0JzogImhvcml6b250YWwiLCAidmVydGljYWwiLAogICAgImZvbGRjb2x1bW4iLiAoQmVuamkgRmlzaGVyLCAyMDA0IEp1biAyMSkKLSAgIEZpbGVDaGFuZ2VkU2hlbGxQb3N0IGF1dG9jb21tYW5kIGV2ZW50OiBhZnRlciAobm90KSByZWxvYWRpbmcgYSBjaGFuZ2VkCiAgICBmaWxlLiAgQ2FuIGJlIHVzZWQgdG8gdXBkYXRlIHN0YXR1c2xpbmUgb3NsdC4KLSAgIFZpbVJlc2l6ZWQgYXV0b2NtZCBldmVudDogV2hlbiB0aGUgVmltIHdpbmRvdyBoYXMgYmVlbiByZXNpemVkIChTSUdXSU5DSCkKICAgIHBhdGNoIGZyb20gWWFrb3YgTGVybmVyLCAyMDAzIEp1bHkgMjQuCglJdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBwcm9ibGVtcyB3aGVuIHRoZSBleGVjdXRlZAoJY29tbWFuZHMgZG8gc29tZXRoaW5nIGxpa2UgY2hhbmdpbmcgJ2xpbmVzJy4gIEVzcC4gYmVjYXVzZSB0aGUgCglzY3JlZW4gaGFzIG5vdCB5ZXQgYmVlbiBhbGxvY2F0ZWQgd2l0aCB0aGUgbmV3IHNpemUuCjcgICBNYWtlICI6c3RhcnRpbnNlcnQiIGNvbW1hbmQgd29yayBkaXJlY3RseSBmb3IgZnVuY3Rpb25zIGFuZCBzY3JpcHRzPwogICAgQWxzbyBtYWtlIGl0IHBvc3NpYmxlIHRvIGFwcGVuZCAoaXQncyBkaWZmaWN1bHQgYXQgZW5kIG9mIGxpbmUpLgotICAgV2hlbiB1c2luZyAnaW5jc2VhcmNoIiBDVFJMLVIgQ1RSTC1XIGdldHMgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciwgYnV0CiAgICB0aGUgcGFydCB0aGF0IGFscmVhZHkgbWF0Y2hlZCBpcyBkb3VibGVkIHRoZW4uICBSZW1vdmUgdGhlIHBhcnQgb2YgdGhlCiAgICB3b3JkIHRoYXQgd291bGQgYmUgZG91YmxlZC4gIE1ha2UgaXQgd29yayBsaW5lIENUUkwtTiBpbiBJbnNlcnQgbW9kZS4KLSAgICJvbmVtb3JlIiBmbGFnIGluICd2aXJ0dWFsZWRpdCc6IG1vdmUgY3Vyc29yIHBhc3QgZW5kIG9mIGxpbmUuICBQYXRjaCBieQogICAgTWF0dGlhcyBGbG9kaW4gKDIwMDQgSnVsIDMwKQotICAgSW4gYSA6cyBjb21tYW5kIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBzaG91bGQgYWxzbyBiZSB1cHBlci9sb3dlciBjYXNlZAogICAgd2l0aCBcdSwgXFUsIGV0Yy4KCi0gICBBZGp1c3Qgc3JjL21haW4uYWFwIGZvciBpbnN0YWxsaW5nIG1hbnBhZ2VzIGxpa2UgaW4gTWFrZWZpbGUuCiAgICBBbmQgZm9yIGdlbmVyYXRpbmcgVmltLmFwcCBmb3IgdGhlIE1hYy4KICAgIEluc3RhbGwgc3BlbGwgZmlsZXMgd2l0aCBzcmMvbWFpbi5hYXAuCgotICAgQWRkIGNvbW1hbmQgdG8gc2VhcmNoIGZvciBpbGxlZ2FsIHV0Zi04IGJ5dGUgc2VxdWVuY2UuCgpBZGQgc3RydG9sKCkgdG8gYXZvaWQgdGhlIHByb2JsZW1zIHdpdGggbGVhZGluZyB6ZXJvIGNhdXNpbmcgb2N0YWwgY29udmVyc2lvbi4KClVwZGF0ZWQgUnVieSBpbnRlcmZhY2UuIChSeWFuIFBhdWwpCgpBZGQgYSAndG9vbCcgd2luZG93OiBiZWhhdmVzIGxpa2UgYSBwcmV2aWV3IHdpbmRvdyBidXQgdGhlcmUgY2FuIGJlIHNldmVyYWwuCkRvbid0IGNvdW50IGl0IGluIG9ubHlfb25lX3dpbmRvdygpLiAoQWxleGVpIEFsZXhhbmRyb3YpCgpXaW4zMjogUGF0Y2ggZm9yIEtvcmVhbiBJTUUuIChZdXN1bmcsIDIwMDUgTWFyY2ggMjEpCgpTdXBwb3J0ICI6c2V0IHN5bnRheD1jcHAuZG94eWdlbiI/ICBTdWdnZXN0ZWQgcGF0Y2ggYnkgTWljaGFlbCBHZWRkZXMgKDkgQXVnCjIwMDQpLiAgU2hvdWxkIGFsc28gd29yayBmb3IgJ2ZpbGV0eXBlJy4KCldpbjMyOiBJbiB0aGUgZ2VuZXJhdGVkIGJhdGNoIGZpbGVzLCB1c2UgJFZJTVJVTlRJTUUgaWYgaXQncyBzZXQuICBFeGFtcGxlcyBieQpNYXRoaWFzIE1pY2hhZWxpcyAoMjAwNCBTZXAgNikKQWxzbyBwbGFjZSB2aW10dXRvci5iYXQgaW4gJXdpbmRpciU/CgpDdGFncyBzdGlsbCBoYXNuJ3QgaW5jbHVkZWQgdGhlIHBhdGNoLiAgRGFycmVuIGlzIGxvb2tpbmcgZm9yIHNvbWVvbmUgdG8gZG8KbWFpbnRhbmFuY2UuICBJcyB0aGVyZSBhbm90aGVyIHNvbHV0aW9uPwoKSFRNTCBpbmRlbnRpbmcgY2FuIGJlIHNsb3csIGZpbmQgb3V0IHdoeS4KQWRkIGEgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUgaW4gdXNlYy4gIHJlbHRpbWUoW3N0YXJ0LCBbZW5kXV0pCiAgICByZWx0aW1lKCkuc2VjID09IHNlY29uZHMsIHJlbHRpbWUoKS51c2VjID0gbWljcm9zZWNvbmRzCiAgICByZWx0aW1lKHN0YXJ0KSBjdXJyZW50IHRpbWUgcmVsYXRpdmUgdG8gW3N0YXJ0XQoJZWNobyB0aW1lc3RyaW5nKHJlbHRpbWUoc3RhcnQpLCAzKSAgKDMgaXMgbnIgb2YgZGlnaXRzIGFmdGVyIGRvdCkKICAgIHJlbHRpbWUoc3RhcnQsIGVuZCkgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQKUHJvZmlsaW5nOgogICAgLSA6cHJvZmlsZSBwYXVzZQogICAgLSA6cHJvZmlsZSByZXN1bWUKCkFkZCBtb3JlIHRlc3RzIGZvciBhbGwgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gVmltIDcuICBFc3BlY2lhbGx5IG5ldyBmdW5jdGlvbnMuCgonZXJyb3Jmb3JtYXQnIGRvY3MgYXJlIGEgYml0IHVuY2xlYXIuICBTdWdnZXN0aW9ucyBieSBDaGFybGVzIENhbXBiZWxsICgyMDA2CkphbiA2KQpBZGQgYSBmbGFnIHRvIGNoZWNrIGZvciBhIG1hdGNoIHdpdGggdGhlIG5leHQgaXRlbSBmaXJzdD8gIEhlbHBzIGZvcgpjb250aW51YXRpb24gbGluZXMgdGhhdCBtYXkgY29udGFpbiBqdXN0IGFib3V0IGFueXRoaW5nLgoKQWRkICI6c21hcCIsIFNlbGVjdCBtb2RlIG1hcHBpbmc/ICBPdGhlcndpc2U6ICI6c3VubWFwIiwgc28gdGhhdCBWaXN1YWwgbW9kZQptYXBwaW5ncyBmb3Igbm9ybWFsIGtleXMgY2FuIGJlIHJlbW92ZWQgZnJvbSBTZWxlY3QgbW9kZS4KCkNoZWNrIGlmIGZpbGUgZXhwbG9yZXIgY2FuIGhhbmRsZSBkaXJlY3RvcnkgbmFtZXMgYW5kIGxpbmtzIHdpdGggYSBzaW5nbGUKcXVvdGUuIChOaWVrbyBNYWF0amVzLCAyMDA1IEphbiA0KQoKCkF3YWl0aW5nIHVwZGF0ZWQgcGF0Y2hlczoKOCAgIEFkZCAiOm4iIHRvIGZuYW1lbW9kaWZ5KCk6IG5vcm1hbGl6ZSBwYXRoLCByZW1vdmUgIi4uLyIgd2hlbiBwb3NzaWJsZS4KICAgIEFyaWMgQmx1bWVyIGhhcyBhIHBhdGNoIGZvciB0aGlzLgogICAgSGUgd2lsbCB1cGRhdGUgdGhlIHBhdGNoIGZvciA2LjMuCjcgICBDb21wbGV0aW9uIG9mIG5ldHdvcmsgc2hhcmVzLCBwYXRjaCBieSBZYXN1aGlybyBNYXRzdW1vdG8uCiAgICBVcGRhdGUgMjAwNCBTZXAgNi4KICAgIEhvdyBkb2VzIHRoaXMgd29yaz8gIE1pc3NpbmcgY29tbWVudHMuCi0gICBQYXRjaCBmb3IgJ2JyZWFraW5kZW50JyBvcHRpb246IHJlcGVhdCBpbmRlbnQgZm9yIHdyYXBwZWQgbGluZS4gKFZhY2xhdgogICAgU21pbGF1ZXIsIDIwMDQgU2VwIDEzLCBmaXggT2N0IDMxKQogICAgQXNrZWQgZm9yIGltcHJvdmVtZW50cyAyMDA0IERlYyAyMC4KNyAgIE1ha2UgIjVkZCIgb24gbGFzdC1idXQtb25lLWxpbmUgbm90IGRlbGV0ZSBhbnl0aGluZyAoVmkgY29tcGF0aWJsZSkuCiAgICBBZGQgZmxhZyBpbiAnY3BvcHRpb25zJyBmb3IgdGhpcy4gIFdoZW4gbm90IHByZXNlbnQsICIyZGQiIGluIHRoZSBsYXN0CiAgICBsaW5lIHNob3VsZCBkZWxldGUgdGhlIGxhc3QgbGluZS4gIFBhdGNoIGZyb20gZ3JlZW54IDIwMDIgQXByIDExLgo4ICAgQWRkIGEgZmV3IG1vcmUgY29tbWFuZCBuYW1lcyB0byB0aGUgbWVudXMuICBQYXRjaCBmcm9tIEppcmkgQnJlemluYQogICAgKDI4IGZlYiAyMDAyKS4KNyAgIEFUVEVOVElPTiBkaWFsb2cgY2hvaWNlcyBhcmUgbW9yZSBsb2dpY2FsIHdoZW4gIkRlbGV0ZSBpdCcgYXBwZWFycwogICAgYmVmb3JlICJRdWl0Ii4gIFBhdGNoIGJ5IFJvYmVydCBXZWJiLCAyMDA0IE1heSAzLgotICAgSW5jbHVkZSBmbGlwY2FzZSBwYXRjaDogfi92aW0vcGF0Y2hlcy93YWxsLmZsaXBjYXNlMiA/ICBNYWtlIGl0IHdvcmsKICAgIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCi0gICBXaW4zMjogYWRkIG9wdGlvbnMgdG8gcHJpbnQgZGlhbG9nLiAgUGF0Y2ggZnJvbSBWaXBpbiBBcmF2aW5kLgotICAgUGF0Y2ggdG8gYWRkIGhpZ2hsaWdodGluZyBmb3Igd2hpdGVzcGFjZS4gKFRvbSBTY2h1bW0sIDIwMDMgSnVsIDUpCiAgICB1c2UgdGhlIHBhdGNoIHRoYXQga2VlcHMgdXNpbmcgSExGXzggaWYgSExGX1dTIGhhcyBub3QKICAgIGJlZW4gZ2l2ZW4gdmFsdWVzLgogICAgQWRkIHNlY3Rpb24gaW4gaGVscCBmaWxlcyBmb3IgdGhlc2UgaGlnaGxpZ2h0IGdyb3Vwcz8KOCAgICJmZyIgYW5kICJiZyIgZG9uJ3Qgd29yayBpbiBhbiB4dGVybS4gIEdldCBkZWZhdWx0IGNvbG9ycyBmcm9tIHh0ZXJtCiAgICB3aXRoIGFuIEVTQyBzZXF1ZW5jZS4gIElkZWFzIGluOiB+L3ZpbS9wYXRjaGVzL3Zpa2FzLnh0ZXJtY29sb3JzIC4KNyAgIEFkZCAiRGVmYXVsdEZHIiBhbmQgIkRlZmF1bHRCRyIgZm9yIHRoZSBjb2xvcnMgb2YgdGhlIG1lbnUuIChNYXJjaW4KICAgIERhbGVja2kgaGFzIGEgcGF0Y2ggZm9yIE1vdGlmIGFuZCBDYXJib24pCi0gICBBZGQgcG9zc2liaWxpdHkgdG8gaGlnaGxpZ2h0IHNwZWNpZmljIGNvbHVtbnMgKGZvciBGb3J0cmFuKS4gIE9yIHB1dCBhCiAgICBsaW5lIGluIGJldHdlZW4gY29sdW1ucyAoZS5nLiwgZm9yICd0ZXh0d2lkdGgnKS4KICAgIFBhdGNoIHRvIGFkZCAnaGxjb2x1bW4nIGZyb20gVml0IFN0cmFkYWwsIDIwMDQgTWF5IDIwLgo4ICAgQWRkIGZ1bmN0aW9uczoKICAgIGdldHRleHQoKQkJVHJhbnNsYXRlIGEgbWVzc2FnZS4gIChQYXRjaCBmcm9tIFlhc3VoaXJvIE1hdHN1bW90bykKCQkJVXBkYXRlIDIwMDQgU2VwIDEwCgkJCUFub3RoZXIgcGF0Y2ggZnJvbSBFZHdhcmQgTC4gRm94ICgyMDA1IE5vdiAyNCkKCQkJU2VhcmNoIGluICdydW50aW1lcGF0aCc/CgkJCU1vcmUgZG9jcyBhYm91dCBob3cgdG8gdXNlIHRoaXMuCgkJCUhvdyB0byBnZXQgdGhlIG1lc3NhZ2VzIGludG8gdGhlIC5wbyBmaWxlcz8KICAgIGNvbmZpcm0oKQkJYWRkICJmbGFncyIgYXJndW1lbnQsIHdpdGggJ3YnIGZvciB2ZXJ0aWNhbAoJCQkgICAgbGF5b3V0IGFuZCAnYycgZm9yIGNvbnNvbGUgZGlhbG9nLiAoSGFlZ2cpCgkJCSAgICBGbGVtbWluZyBNYWRzZW4gaGFzIGEgcGF0Y2ggZm9yIHRoZSAnYycgZmxhZwoJCQkgICAgKDIwMDMgTWF5IDEzKQogICAgcmFpc2V3aW4oKQkJcmFpc2UgZ3ZpbSB3aW5kb3cgKHNlZSBIaWVyQXNzaXN0IHBhdGNoIGZvcgoJCQkgICAgVGNsIGltcGxlbWVudGF0aW9uIH4vdmltL0hpZXJBc3Npc3QvICkKNyAgIE1ha2UgZ2xvYnBhdGgoKSBhbHNvIHdvcmsgd2l0aCB1cHdhcmRzIHNlYXJjaC4gKEJyaWFuIE1lZGxleSkKNyAgIEFkZCBwYXRjaCBmcm9tIEJlbm9pdCBDZXJyaW5hIHRvIGludGVncmF0ZSBWaW0gYW5kIFBlcmwgZnVuY3Rpb25zCiAgICBiZXR0ZXIuICBOb3cgYWxzbyB3b3JrcyBmb3IgUnVieSAoMjAwMSBOb3YgMTApCi0gICBQYXRjaCBmcm9tIEhlcmN1bGFubyBkZSBMaW1hIEVpbmxvZnQgTmV0byBmb3IgYmV0dGVyIGZvcm1hdHRpbmcgb2YgdGhlCiAgICBxdWlja2ZpeCB3aW5kb3cgKDIwMDQgZGVjIDIpCjcgICBXaGVuICdyaWdodGxlZnQnIGlzIHNldCwgdGhlIHNlYXJjaCBwYXR0ZXJuIHNob3VsZCBiZSBkaXNwbGF5ZWQgcmlnaHQKICAgIHRvIGxlZnQgYXMgd2VsbD8gIFNlZSBwYXRjaCBvZiBEZWMgMjYuIChOYWRpbSBTaGFpa2xpKQo4ICAgTG9jayBhbGwgdXNlZCBtZW1vcnkgc28gdGhhdCBpdCBkb2Vzbid0IGdldCBzd2FwcGVkIHRvIGRpc2sgKHVuY3J5cHRlZCkuCiAgICBQYXRjaCBieSBKYXNvbiBIb2x0LCAyMDAzIE1heSAyMy4gIFVzZXMgbWxvY2suCjcgICBTdXBwb3J0IGEgc3Ryb25nZXIgZW5jcnlwdGlvbi4gIEphc29uIEhvbHQgaW1wbGVtZW50ZWQgQUVTIChNYXkgNiAyMDAzKS4KNyAgIEFkZCAhIHJlZ2lzdGVyLCBmb3Igc2hlbGwgY29tbWFuZHMuIChwYXRjaCBmcm9tIEdyZW5pZSkKOCAgIEluIHRoZSBnemlwIHBsdWdpbiwgYWxzbyByZWNvZ25pemUgKi5nei5vcmlnLCAqLmd6LmJhaywgZXRjLiAgTGlrZSBpdCdzCiAgICBkb25lIGZvciBmaWxldHlwZSBkZXRlY3Rpb24uICBQYXRjaCBmcm9tIFdhbHRlciBCcmlzY29lLCAyMDAzIEp1bCAxLgo3ICAgQWRkIGEgIi1AIGZpbGVsaXN0IiBhcmd1bWVudDogcmVhZCBmaWxlIG5hbWVzIGZyb20gYSBmaWxlLiAoRGF2aWQKICAgIEtvdGNoYW4gaGFzIGEgcGF0Y2ggZm9yIGl0KQo4ICAgSW5jbHVkZSBhIGNvbm5lY3Rpb24gdG8gYW4gZXh0ZXJuYWwgcHJvZ3JhbSB0aHJvdWdoIGEgcGlwZT8gIFNlZQogICAgcGF0Y2hlcyBmcm9tIEZlbGJpbmdlciBmb3IgYSBtYXRoZW1hdGljYSBpbnRlcmZhY2UuCiAgICBPciB1c2UgZW1hY3Mgc2VydmVyIGtpbmQgb2YgdGhpbmc/CjcgICBBZGQgIjpqdXN0aWZ5IiBjb21tYW5kLiAgUGF0Y2ggZnJvbSBWaXQgU3RyYWRhbCAyMDAyIE5vdiAyNS4KLSAgIGZpbmRtYXRjaCgpIHNob3VsZCBiZSBhZGp1c3RlZCBmb3IgTGlzcC4gIFNlZSByZW1hcmsgYXQKICAgIGdldF9saXNwX2luZGVudCgpLiAgRXNwLiBcKCBhbmQgXCkgc2hvdWxkIGJlIHNraXBwZWQuIChEb3JhaSBTaXRhcmFtLAogICAgaW5jb21wbGV0ZSBwYXRjaCBNYXIgMTgpCi0gICBTZXQgdXNlciB2YXJpYWJsZXMgdG8gdGhlIG5hbWVzIG9mIHRoZSBhY3R1YWxseSB1c2VkIHVzZXIgdmltcmMgZmlsZSwKICAgIHRoZSBmaXJzdCBkaXJlY3RvcnkgbG9va2VkIGZvciB1c2VyIHBsdWdpbnMvc3ludGF4IGZpbGVzLgogICAgJE1ZVklNUkMgZm9yIC52aW1yYywgJE1ZR1ZJTVJDIGZvciAuZ3ZpbXJjLCAkTVlSVU5USU1FL3BsdWdpbiBmb3IKICAgIHJ1bnRpbWUgZmlsZXM/CiAgICBBbHNvOiB3aGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBleGlzdHMsIHVzZSBpdC4gIElmIGl0IGRvZXNuJ3QKICAgIGV4aXN0LCBzZXQgaXQuICBSZXF1aXJlcyBnb29kIG5hbWVzOiAkVklNX1VTRVJfVklNUkMgICRWSU1fVVNFUl9ESVIKICAgIEFkZCBhIG1lbnUgaXRlbSAiUHJlZmVyZW5jZXMiIHRoYXQgZG9lcyAic3AgJE1ZVklNUkMiLgotICAgVGhlIFJlcGxhY2UgZGlhbG9nIHRha2VzICJcciIgbGl0ZXJhbCwgdW5sZXNzICJyZXBsYWNlIGFsbCIgaXMgdXNlZC4KICAgIE5lZWQgdG8gZXNjYXBlIGJhY2tzbGFzaGVzLgogICAgV2luMzI6IHRoZSB0ZXh0IHRvIHJlcGxhY2Ugd2l0aCBpc24ndCByZW1lbWJlcmVkLgotICAgRm9yIEdVSSBGaW5kL1JlcGxhY2UgZGlhbG9nIHN1cHBvcnQgdXNpbmcgYSByZWdleHAuICBQYXRjaCBmb3IgTW90aWYKICAgIGFuZCBHVEsgYnkgZGVncmVuZWlyIChub3YgMTAgYW5kIG5vdiAxOCkuCi0gICBQYXRjaCBmb3IgInBhcmFub2lkIG1vZGUiIGJ5IEtldmluIENvbGxpbnMsIE1hcmNoIDcuICBOZWVkcyBtdWNoIG1vcmUgd29yay4KCgpWaSBpbmNvbXBhdGliaWxpdHk6Ci0gICBUcnkgbmV3IFBPU0lYIHRlc3RzLCBtYWRlIGFmdGVyIG15IGNvbW1lbnRzLiAoR2VvZmYgQ2xhcmUsIDIwMDUgQXByaWwgNykKICAgIFZlcnNpb24gMS41IGlzIGluIH4vc3JjL3Bvc2l4LzEuNS4gKEx5bm5lIENhbmFsKQo4ICAgV2l0aCB1bmRvL3JlZG8gb25seSBtYXJrcyBpbiB0aGUgY2hhbmdlZCBsaW5lcyBzaG91bGQgYmUgY2hhbmdlZC4gIE90aGVyCiAgICBtYXJrcyBzaG91bGQgYmUga2VwdC4gIFZpIGtlZXBzIGVhY2ggbWFyayBhdCB0aGUgc2FtZSB0ZXh0LCBldmVuIHdoZW4gaXQKICAgIGlzIGRlbGV0ZWQgb3IgcmVzdG9yZWQuIChXZWJiKQogICAgQWxzbzogQSBtYXJrIGlzIGxvc3QgYWZ0ZXI6IG1ha2UgY2hhbmdlLCB1bmRvLCByZWRvIGFuZCB1bmRvLgogICAgRXhhbXBsZTogIntkJyciIHRoZW4gInUiIHRoZW4gImQnJyI6IGRlbGV0ZXMgYW4gZXh0cmEgbGluZSwgYmVjYXVzZSB0aGUgJycKICAgIHBvc2l0aW9uIGlzIG9uZSBsaW5lIGRvd24uIChWZXNlbGlub3ZpYykKOCAgIFdoZW4gc3RkaW4gaXMgbm90IGEgdHR5LCBhbmQgVmltIHJlYWRzIGNvbW1hbmRzIGZyb20gaXQsIGFuIGVycm9yIHNob3VsZAogICAgbWFrZSBWaW0gZXhpdC4KNyAgIFVuaXggVmltIChub3QgZ3ZpbSk6IFR5cGluZyBDVFJMLUMgaW4gRXggbW9kZSBzaG91bGQgZmluaXNoIHRoZSBsaW5lCiAgICAoY3VycmVudGx5IHlvdSBjYW4gY29udGludWUgdHlwaW5nLCBidXQgaXQncyB0cnVuY2F0ZWQgbGF0ZXIgYW55d2F5KS4KICAgIFJlcXVpcmVzIGEgd2F5IHRvIG1ha2UgQ1RSTC1DIGludGVycnVwdCBzZWxlY3QoKSB3aGVuIGluIGNvb2tlZCBpbnB1dC4KOCAgIFdoZW4gbG9hZGluZyBhIGZpbGUgaW4gdGhlIC5leHJjLCBWaSBsb2FkcyB0aGUgYXJndW1lbnQgYW55d2F5LiAgVmltIHNraXBzCiAgICBsb2FkaW5nIHRoZSBhcmd1bWVudCBpZiB0aGVyZSBpcyBhIGZpbGUgYWxyZWFkeS4gIFdoZW4gbm8gZmlsZSBhcmd1bWVudAogICAgZ2l2ZW4sIFZpIHN0YXJ0cyB3aXRoIGFuIGVtcHR5IGJ1ZmZlciwgVmltIGtlZXBzIHRoZSBsb2FkZWQgZmlsZS4gKEJlYXJkZWQpCjYgICBJbiBJbnNlcnQgbW9kZSwgd2hlbiB1c2luZyA8QlM+IG9yIDxEZWw+LCBkb24ndCB3aXBlIG91dCB0aGUgdGV4dCwgYnV0CiAgICBvbmx5IG1vdmUgYmFjayB0aGUgY3Vyc29yLglCZWhhdmVzIGxpa2UgJyQnIGluICdjcG9wdGlvbnMnLiAgVXNlIGEgZmxhZwogICAgaW4gJ2Nwb3B0aW9ucycgdG8gc3dpdGNoIHRoaXMgb24vb2ZmLgo4ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSB3aGljaCBpcyBhIHN5bWJvbGljIGxpbmssIGFuZCB0aGVuIG9wZW5pbmcgYW5vdGhlcgogICAgc3ltYm9saWMgbGluayBvbiB0aGUgc2FtZSBmaWxlLCBWaW0gdXNlcyB0aGUgbmFtZSBvZiB0aGUgZmlyc3Qgb25lLgogICAgQWRqdXN0IHRoZSBmaWxlIG5hbWUgaW4gdGhlIGJ1ZmZlciB0byB0aGUgbGFzdCBvbmUgdXNlZD8gIFVzZSBzZXZlcmFsIGZpbGUKICAgIG5hbWVzIGluIG9uZSBidWZmZXI/Pz8KICAgIEFsc286IFdoZW4gZmlyc3QgZWRpdGluZyBmaWxlICJ0ZXN0Iiwgd2hpY2ggaXMgc3ltbGluayB0byAidGVzdDIiLCBhbmQKICAgIHRoZW4gZWRpdGluZyAidGVzdDIiLCB5b3UgZW5kIHVwIGVkaXRpbmcgYnVmZmVyICJ0ZXN0IiBhZ2Fpbi4gIEl0J3Mgbm90CiAgICBsb2dpY2FsIHRoYXQgdGhlIG5hbWUgdGhhdCB3YXMgZmlyc3QgdXNlZCBzdGlja3Mgd2l0aCB0aGUgYnVmZmVyLgo3ICAgVGhlICI6dW5kbyIgY29tbWFuZCB3b3JrcyBkaWZmZXJlbnRseSBpbiBFeCBtb2RlLiAgRWRpdCBhIGZpbGUsIG1ha2Ugc29tZQogICAgY2hhbmdlcywgIlEiLCAidW5kbyIgYW5kIF9hbGxfIGNoYW5nZXMgYXJlIHVuZG9uZSwgbGlrZSB0aGUgIjp2aXN1YWwiCiAgICBjb21tYW5kIHdhcyBvbmUgY29tbWFuZC4KICAgIE9uIHRoZSBvdGhlciBoYW5kLCBhbiAiOnVuZG8iIGNvbW1hbmQgaW4gYW4gRXggc2NyaXB0IG9ubHkgdW5kb2VzIHRoZSBsYXN0CiAgICBjaGFuZ2UgKGUuZy4sIHVzZSB0d28gOmFwcGVuZCBjb21tYW5kcywgdGhlbiA6dW5kbykuCjcgICBUaGUgIjptYXAiIGNvbW1hbmQgb3V0cHV0IG92ZXJ3cml0ZXMgdGhlIGNvbW1hbmQuICBQZXJoYXBzIGl0IHNob3VsZCBrZWVwCiAgICB0aGUgIjptYXAiIHdoZW4gaXQncyB1c2VkIHdpdGhvdXQgYXJndW1lbnRzPwo3ICAgQ1RSTC1MIGlzIG5vdCB0aGUgZW5kIG9mIGEgc2VjdGlvbj8gIEl0IGlzIGZvciBQb3NpeCEgIE1ha2UgaXQgYW4gb3B0aW9uLgo3ICAgSW1wbGVtZW50ICdwcm9tcHQnIG9wdGlvbi4JSW5pdCB0byBvZmYgd2hlbiBzdGRpbiBpcyBub3QgYSB0dHkuCjcgICBDVFJMLVQgaW4gSW5zZXJ0IG1vZGUgaW5zZXJ0cyAnc2hpZnR3aWR0aCcgb2Ygc3BhY2VzIGF0IHRoZSBjdXJzb3IuICBBZGQgYQogICAgZmxhZyBpbiAnY3BvcHRpb25zJyBmb3IgdGhpcy4KNyAgIEFkZCBhIHdheSB0byBzZW5kIGFuIGVtYWlsIGZvciBhIGNyYXNoZWQgZWRpdCBzZXNzaW9uLiAgQ3JlYXRlIGEgZmlsZSB3aGVuCiAgICBtYWtpbmcgY2hhbmdlcyAoY29udGFpbmluZyBuYW1lIG9mIHRoZSBzd2FwIGZpbGUpLCBkZWxldGUgaXQgd2hlbiB3cml0aW5nCiAgICB0aGUgZmlsZS4gIFN1cHBseSBhIHByb2dyYW0gdGhhdCBjYW4gY2hlY2sgZm9yIGNyYXNoZWQgc2Vzc2lvbnMgKGVpdGhlcgogICAgYWxsLCBmb3IgYSBzeXN0ZW0gc3RhcnR1cCwgb3IgZm9yIG9uZSB1c2VyLCBmb3IgaW4gYSAubG9naW4gZmlsZSkuCjcgICBWaSBkb2Vzbid0IGRvIGF1dG9pbmRlbnRpbmcgd2hlbiBpbnB1dCBpcyBub3QgZnJvbSBhIHR0eSAoaW4gRXggbW9kZSkuCjcgICAiejM8Q1I+IiBzaG91bGQgc3RpbGwgdXNlIHRoZSB3aG9sZSB3aW5kb3csIGJ1dCBvbmx5IHJlZGlzcGxheSAzIGxpbmVzLgo3ICAgIjp0YWcgeHgiIHNob3VsZCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IG5vbi1ibGFuay4gIE9yIHNob3VsZCBpdCBnbwogICAgdG8gdGhlIG1hdGNoIHdpdGggdGhlIHRhZz8JT3B0aW9uPwo3ICAgSW1wbGVtZW50ICdhdXRvcHJpbnQnLydhcCcgb3B0aW9uLgo3ICAgQWRkIGZsYWcgaW4gJ2Nwb3B0aW9ucycgdGhhdCBtYWtlcyA8QlM+IGFmdGVyIGEgY291bnQgd29yayBsaWtlIDxEZWw+CiAgICAoU2F5cmUpLgo3ICAgQWRkIGZsYWcgaW4gJ2Nwb3B0aW9ucycgdGhhdCBtYWtlcyBvcGVyYXRvciAoeWFuaywgZmlsdGVyKSBub3QgbW92ZSB0aGUKICAgIGN1cnNvciwgYXQgbGVhc3Qgd2hlbiBjYW5jZWxsZWQuIChkZWZhdWx0IFZpIGNvbXBhdGlibGUpLgo3ICAgVGhpcyBWaS10cmljayBkb2Vzbid0IHdvcms6ICJRIiB0byBnbyB0byBFeCBtb2RlLCB0aGVuICJnL3BhdHRlcm4vdmlzdWFsIi4KICAgIEluIFZpIHlvdSBjYW4gZWRpdCBpbiB2aXN1YWwgbW9kZSwgYW5kIHdoZW4gZG9pbmcgIlEiIHlvdSBqdW1wIHRvIHRoZSBuZXh0CiAgICBtYXRjaC4gIE52aSBjYW4gZG8gaXQgdG9vLgo3ICAgU3VwcG9ydCAnXCcgZm9yIGxpbmUgY29udGludWF0aW9uIGluIEV4IG1vZGUgZm9yIHRoZXNlIGNvbW1hbmRzOiAoTHVlYmtpbmcpCglnLy4vYVwJCSAgICBnL3BhdHRlcm4xLyBzL3BhdHRlcm4yL3JlcDFcXAoJbGluZSAxXAkJICAgIGxpbmUgMlxcCglsaW5lIDJcCQkgICAgbGluZSAzXFwKCS4JCSAgICBsaW5lNC8KNiAgICI6ZSAvdG1wLyR0dHkiIGRvZXNuJ3Qgd29yay4gICI6ZSAkdWlkIiBkb2VzLiAgSXMgJHR0eSBub3Qgc2V0IGJlY2F1c2Ugb2YKICAgIHRoZSB3YXkgdGhlIHNoZWxsIGlzIHN0YXJ0ZWQ/CjYgICBWaSBjb21wYXRpYmlsaXR5IChvcHRpb25hbCk6IG1ha2UgImlhPENSPjxFU0M+MTAuIiBkbyB0aGUgc2FtZSBzdHJhbmdlCiAgICB0aGluZy4gIChvbmx5IHJlcGVhdCBpbnNlcnQgZm9yIHRoZSBmaXJzdCBsaW5lKS4KCgpHVEsrIDEgKE9LIGluIEdUSyAyKToKOCAgIFdoZW4gbWVudXMgYXJlIGRpc2FibGVkLCAnbScgcmVtb3ZlZCBmcm9tICdndWlvcHRpb25zJywgQWx0LUYgc3RpbGwgcG9wcwogICAgdXAgdGhlIEZpbGUgbWVudS4gIENhbm5vdCByZXByb2R1Y2UgdGhpczogZ2l2ZXMgYSB3YXJuaW5nIGZvciBhIE5VTEwKICAgIHBvaW50ZXIgaWYgdGhlIG1lbnUgd2FzIG5ldmVyIGRpc3BsYXllZC4KOCAgIFdoZW4gdXNpbmcgImd2aW0gLWdlb20gNDB4MzAiIG9yIHNldHRpbmcgJ2NvbHVtbnMnIGluIC5ndmltcmMgb3Igd2l0aCBhCiAgICBHVUlFbnRlciBhdXRvY29tbWFuZCwgdGhlIHdpZHRoIGlzIHN0aWxsIHNldCB0byBmaXQgdGhlIHRvb2xiYXIuICBBbHNvCiAgICBoYXBwZW5zIHdoZW4gY2hhbmdpbmcgdGhlIGZvbnQuICBIb3cgdG8gYXZvaWQgdGhhdCB0aGUgdG9vbGJhciBzcGVjaWZpZXMKICAgIHRoZSBtaW5pbWFsIHdpbmRvdyB3aWR0aD8KOCAgIFdoZW4gdXNpbmcgYSB0aGVtZSB3aXRoIGRpZmZlcmVudCBzY3JvbGxiYXJzIChndGtzdGVwKSwgdGhlIHNjcm9sbGJhcnMgY2FuCiAgICBiZSB0b28gbmFycm93LiAoRHJhemVuIEthY2FyKQo4ICAgRm9udCAiN3gxNCIgaGFzIGEgYm9sZCB2ZXJzaW9uICI3eDE0Ym9sZCIuICBUcnkgdG8gZmluZCB0aGUgYm9sZCBmb250IGJ5CiAgICBhcHBlbmRpbmcgImJvbGQiIHdoZW4gdGhlcmUgYXJlIG5vdCAxNCBkYXNoZXMuCgpHVEsrIEdVSSBrbm93biBidWdzOgo5ICAgQ3Jhc2ggd2l0aCBYIGNvbW1hbmQgc2VydmVyIG92ZXIgc3NoLiAoQ2lhcmFuIE1jQ3JlZXNoLCAyMDA2IEZlYiA2KQo4ICAgR1RLIDI6IENvbWJpbmluZyBVVEYtOCBjaGFyYWN0ZXJzIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgaW4gbWVudXMgKE1pa29sYWoKICAgIE1hY2hvd3NraSkgIFRoZXkgYXJlIGRpc3BsYXllZCBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzLiAgUHJvYmxlbSBpbgogICAgY3JlYXRpbmcgYSBsYWJlbD8KOCAgIEdUSyAyOiBDb21iaW5pbmcgVVRGLTggY2hhcmFjdGVycyBhcmUgc29tZXRpbWVzIG5vdCBkcmF3biBwcm9wZXJseS4KICAgIERlcGVuZHMgb24gdGhlIGZvbnQgc2l6ZSwgIm1vbm9zcGFjZSAxMyIgaGFzIHRoZSBwcm9ibGVtLiAgVmltIHNlZW1zIHRvIGRvCiAgICBldmVyeXRoaW5nIHJpZ2h0LCBtdXN0IGJlIGEgR1RLIGJ1Zy4gIElzIHRoZXJlIGEgd2F5IHRvIHdvcmsgYXJvdW5kIGl0Pwo5ICAgQ2FuJ3QgcGFzdGUgYSBWaXN1YWwgc2VsZWN0aW9uIGZyb20gR1RLLWd2aW0gdG8gdmltIGluIHh0ZXJtIG9yIE1vdGlmIGd2aW0KICAgIHdoZW4gaXQgaXMgbG9uZ2VyIHRoYW4gNDAwMCBjaGFyYWN0ZXJzLiAgV29ya3MgT0sgZnJvbSBndmltIHRvIGd2aW0gYW5kCiAgICB2aW0gdG8gdmltLiAgUGFzdGluZyB0aHJvdWdoIHh0ZXJtICh1c2luZyB0aGUgc2hpZnQga2V5KSBhbHNvIHdvcmtzLgogICAgSXQgc3RhcnRzIHdvcmtpbmcgYWZ0ZXIgR1RLIGd2aW0gbG9zZXMgdGhlIHNlbGVjdGlvbiBhbmQgZ2FpbnMgaXQgYWdhaW4uCgpXaW4zMiBHVUkga25vd24gYnVnczoKLSAgIFdpbjMyOiB0ZWFyb2ZmIG1lbnUgd2luZG93IHNob3VsZCBoYXZlIGEgc2Nyb2xsYmFyIHdoZW4gaXQncyB0YWxsZXIgdGhhbgogICAgdGhlIHNjcmVlbi4KOCAgIE9uIFdpbmRvd3MgOTggdGhlIHVuaWNvd3MgbGlicmFyeSBpcyBuZWVkZWQgdG8gc3VwcG9ydCBmdW5jdGlvbnMgd2l0aCBVQ1MyCiAgICBmaWxlIG5hbWVzLiAgQ2FuIHdlIGxvYWQgdW5pY293cy5kbGwgZHluYW1pY2FsbHk/CjggICBUaGUgLVAgYXJndW1lbnQgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIG1hbnkgTURJIGFwcGxpY2F0aW9ucy4KICAgIFRoZSBsYXN0IGFyZ3VtZW50IG9mIENyZWF0ZVdpbmRvd0V4KCkgc2hvdWxkIGJlIHVzZWQsIHNlZSBNU0ROIGRvY3MuCiAgICBUdXRvcmlhbDogaHR0cDovL3dpbjMyYXNzZW1ibHkub25saW5lLmZyL3R1dDMyLmh0bWwKOCAgIEluIGV2YWwuYywgaW8uaCBpcyBpbmNsdWRlZCB3aGVuIE1TV0lOMzIgaXMgZGVmaW5lZC4gIFNob3VsZG4ndCB0aGlzIGJlCiAgICBXSU4zMj8gIE9yIGNhbiBpbmNsdWRpbmcgaW8uaCBiZSBtb3ZlZCB0byB2aW0uaD8gKERhbiBTaGFycCkKNyAgIFdpbmRvd3MgWFA6IFdoZW4gdXNpbmcgIkNsZWFyVHlwZSIgZm9yIHRleHQgc21vb3RoaW5nLCBhIGNvbHVtbiBvZiB5ZWxsb3cKICAgIHBpeGVscyByZW1haW5zIHdoZW4gdHlwaW5nIHNwYWNlcyBpbiBmcm9udCBvZiBhICJEIiAoJ2d1aWZvbnQnIHNldCB0bwogICAgImx1Y2lkYV9jb25zb2xlOmg4IikuCjYgICBXaW4zMiBHVUk6IFdpdGggIi11IE5PTkUgLVUgTk9ORSIgYW5kIGRvaW5nICJDVFJMLVcgdiIgIkNUUkwtVyBvIiwgdGhlICI6IgogICAgb2YgIjpvbmx5IiBpcyBoaWdobGlnaHRlZCBsaWtlIHRoZSBjdXJzb3IuICAoTGlwZWxpcykKOCAgIFdoZW4gJ2VuY29kaW5nJyBpcyAidXRmLTgiLCBzaG91bGQgdXNlICdndWlmb250JyBmb3IgYm90aCBub3JtYWwgYW5kIHdpZGUKICAgIGNoYXJhY3RlcnMgdG8gbWFrZSBBc2lhbiBsYW5ndWFnZXMgd29yay4gIFdpbjMyIGZvbnRzIGNvbnRhaW4gYm90aAogICAgdHlwZSBvZiBjaGFyYWN0ZXJzLgo3ICAgV2hlbiBmb250IHNtb290aGluZyBpcyBlbmFibGVkLCByZWRyYXdpbmcgY2FuIGJlY29tZSB2ZXJ5IHNsb3cuICBUaGUgcmVhc29uCiAgICBhcHBlYXJzIHRvIGJlIGRyYXdpbmcgd2l0aCBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuICBXb3VsZCBpdCBiZSBwb3NzaWJsZQogICAgdG8gdXNlIGFuIG9wYXF1ZSBiYWNrZ3JvdW5kIGluIG1vc3QgcGxhY2VzPwo4ICAgVXNlIGFub3RoZXIgZGVmYXVsdCBmb3IgJ3Rlcm1lbmNvZGluZyc6IHRoZSBhY3RpdmUgY29kZXBhZ2UuICBNZWFucyB0aGF0CiAgICB3aGVuICdlbmNvZGluZycgaXMgY2hhbmdlZCB0eXBpbmcgY2hhcmFjdGVycyBzdGlsbCB3b3JrcyBwcm9wZXJseS4KICAgIEFsdGVybmF0aXZlOiB1c2UgdGhlIFVuaWNvZGUgZnVuY3Rpb25zIHRvIG9idGFpbiB0eXBlZCBjaGFyYWN0ZXJzLgo4ICAgV2luMzI6IE11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgbm90IGRpc3BsYXllZCwgZXZlbiB0aG91Z2ggdGhlIHNhbWUgZm9udAogICAgaW4gTm90ZXBhZCBjYW4gZGlzcGxheSB0aGVtLiAoU3JpbmF0aCBBdmFkaGFudWxhKSAgVHJ5IHdpdGggdGhlCiAgICBVVEYtOC1kZW1vLnR4dCBwYWdlIHdpdGggQW5kYWxlIE1vbm8uCjcgICBUaGUgY3Vyc29yIGNvbG9yIGluZGljYXRpbmcgSU1FIG1vZGUgZG9lc24ndCB3b3JrIHByb3Blcmx5LiAoU2hpemh1IFBhbiwKICAgIDIwMDQgTWF5IDkpCjggICBXaW4zMjogV2hlbiBjbGlja2luZyBvbiB0aGUgZ3ZpbSB0aXRsZSBiYXIsIHdoaWNoIGdpdmVzIGl0IGZvY3VzLCBwcm9kdWNlcwogICAgYSBmaWxlLWNoYW5nZWQgZGlhbG9nLCBhZnRlciBjbGlja2luZyBvbiBhIGJ1dHRvbiBpbiB0aGF0IGRpYWxvZyB0aGUgZ3ZpbQogICAgd2luZG93IGZvbGxvd3MgdGhlIG1vdXNlLiAgVGhlIGJ1dHRvbi11cCBldmVudCBpcyBsb3N0LiAgT25seSB3aXRoCiAgICBNUy1XaW5kb3dzIDk4PwogICAgVHJ5IHRoaXM6ICI6c2V0IHN3IHRzIiwgZ2V0IGVudGVyLXByb21wdCwgdGhlbiBjaGFuZ2UgdGhlIGZpbGUgaW4gYQogICAgY29uc29sZSwgZ28gYmFjayB0byBWaW0gYW5kIGNsaWNrICJyZWxvYWQiIGluIHRoZSBkaWFsb2cgZm9yIHRoZSBjaGFuZ2VkCiAgICBmaWxlOiBXaW5kb3cgbW92ZXMgd2l0aCB0aGUgY3Vyc29yIQogICAgUHV0IGZvY3VzIGV2ZW50IGluIGlucHV0IGJ1ZmZlciBhbmQgbGV0IGdlbmVyaWMgVmltIGNvZGUgaGFuZGxlIGl0Pwo4ICAgV2hlbiBhY3RpdmF0aW5nIHRoZSBWaW0gd2luZG93IHdpdGggbW91c2UgY2xpY2ssIGRvbid0IG1vdmUgY3Vyc29yIHRvCiAgICBtb3VzZSBwb3NpdGlvbi4gIENhdGNoIFdNX01PVVNFQUNUSVZBVEUuIChMdWV2ZWxzbWV5ZXIpCjggICBXaW4zMjogV2hlbiBtb3VzZSBpcyBoaWRkZW4gYW5kIGluIHRoZSB0b29sYmFyLCBtb3ZpbmcgaXQgd29uJ3QgbWFrZSBpdAogICAgYXBwZWFyLiAoU2FtaSBTYWxvbmVuKQo4ICAgV2luZG93cyBOVDogd3JpdGluZyB0byBhdXguKiBtYWtlcyBWaW0gaGFuZy4gKEFjZXZlZG8pCjggICBXaW4zMiBHVUk6IFdpdGggbWF4aW1pemVkIHdpbmRvdywgIjpzZXQgZ28tPXIiIGRvZXNuJ3QgdXNlIHRoZSBzcGFjZSB0aGF0CiAgICBjb21lcyBhdmFpbGFibGUuIChQb3VjZXQpICBJdCB3b3JrcyBPSyBvbiBXaW4gOTggYnV0IGRvZXNuJ3Qgd29yayBvbiBXaW4KICAgIE5UIDQuMC4gIExlYXZlcyBhIGdyZXkgYXJlYSB3aGVyZSB0aGUgc2Nyb2xsYmFyIHdhcy4gICI6c2V0IGdvKz1yIiBhbHNvCiAgICBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCjggICBXaGVuIFZpbSBpcyBtaW5pbWl6ZWQgYW5kIHdoZW4gbWF4aW1pemluZyBpdCBhIGZpbGUtY2hhbmdlZCBkaWFsb2cgcG9wcwogICAgdXAsIFZpbSBpc24ndCBtYXhpbWl6ZWQuICBJdCBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGhlIGRpYWxvZywgc28gdGhhdCBpdAogICAgYXBwZWFycyBpbiB0aGUgcmlnaHQgcG9zaXRpb24uIChXZWJiKQo5ICAgV2hlbiBzZWxlY3RpbmcgYXQgdGhlIG1vcmUtcHJvbXB0IG9yIGhpdC1lbnRlci1wcm9tcHQsIHRoZSByaWdodCBtb3VzZQogICAgYnV0dG9uIGRvZXNuJ3QgZ2l2ZSBwb3B1cCBtZW51LgogICAgQXQgdGhlIGhpdC1lbnRlciBwcm9tcHQgQ1RSTC1ZIGRvZXNuJ3Qgd29yayB0byBjb3B5IHRoZSBtb2RlbGVzcwogICAgc2VsZWN0aW9uLgogICAgT24gdGhlIGNvbW1hbmQgbGluZSwgZG9uJ3QgZ2V0IGEgcG9wdXAgbWVudSBmb3IgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbi4KICAgIExldCB0aGUgbWlkZGxlIGJ1dHRvbiBwYXN0ZSBzZWxlY3RlZCB0ZXh0IChub3QgdGhlIGNsaXBib2FyZCBidXQgdGhlCiAgICBub24tVmlzdWFsIHNlbGVjdGlvbik/ICBPdGhlcndpc2UgQ1RSTC1ZIGhhcyB0byBiZSB1c2VkIHRvIGNvcHkgdGhlIHRleHQuCjggICBXaGVuICdncmVwcHJnJyBkb2Vzbid0IGV4ZWN1dGUsIHRoZSBlcnJvciBvbmx5IGZsYXNoZXMgYnksIHRoZQogICAgdXNlciBjYW4gaGFyZGx5IHNlZSB3aGF0IGlzIHdyb25nLiAoTW9vcmUpCiAgICBDb3VsZCB1c2UgdmltcnVuIHdpdGggYW4gIi1ub3dhaXQiIGFyZ3VtZW50IHRvIG9ubHkgd2FpdCB3aGVuIGFuIGVycm9yCiAgICBvY2N1cnMsIGJ1dCAiY29tbWFuZC5jb20iIGRvZXNuJ3QgcmV0dXJuIGFuIGVycm9yIGNvZGUuCjggICBXaGVuIHRoZSAnc2hlbGwnIGNhbm5vdCBiZSBleGVjdXRlZCwgc2hvdWxkIGdpdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbXNnLgogICAgRXNwLiBmb3IgYSBmaWx0ZXIgY29tbWFuZCwgY3VycmVudGx5IGl0IG9ubHkgY29tcGxhaW5zIHRoZSBmaWxlIGNvdWxkIG5vdAogICAgYmUgcmVhZC4KNyAgIEFkZCBhbiBvcHRpb24gdG8gYWRkIG9uZSBwaXhlbCBjb2x1bW4gdG8gdGhlIGNoYXJhY3RlciB3aWR0aD8gIEx1Y2lkYQogICAgQ29uc29sZSBpdGFsaWMgaXMgd2lkZXIgdGhhbiB0aGUgbm9ybWFsIGZvbnQgKCJkIiBvdmVybGFwcyB3aXRoIG5leHQgY2hhcikuCiAgICBPcHBvc2l0ZSBvZiAnbGluZXNwYWNlJzogJ2NvbHVtbnNwYWNlJy4KNyAgIEF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0IHNjcm9sbGluZyBub3cgbm8gbG9uZ2VyIHdvcmtzLiAgTmVlZCB0byB1c2UgdGhlCiAgICBrZXlib2FyZCB0byBnZXQgYXJvdW5kIHRoaXMuICBQcmV0ZW5kIDxDUj4gd2FzIGhpdCB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvCiAgICBzY3JvbGw/CjcgICBTY3JvbGxiYXIgd2lkdGggZG9lc24ndCBjaGFuZ2Ugd2hlbiBzZWxlY3Rpbmcgb3RoZXIgd2luZG93cyBhcHBlYXJhbmNlLgogICAgQWxzbyBiYWNrZ3JvdW5kIGNvbG9yIG9mIFRvb2xiYXIgYW5kIHJlY3RhbmdsZSBiZWxvdyB2ZXJ0LiBzY3JvbGxiYXIuCjcgICAiIXN0YXJ0IC9taW4gY21kIiBzaG91bGQgcnVuIGluIGEgbWluaW1pemVkIHdpbmRvdywgaW5zdGVhZCBvZiB1c2luZwogICAgIi9taW4iIGFzIHRoZSBjb21tYW5kIG5hbWUuIChSb2dhbGwpCjYgICBEcmF3aW5nIHRleHQgdHJhbnNwYXJlbnRseSBkb2Vzbid0IHNlZW0gdG8gd29yayAod2hlbiBkcmF3aW5nIHBhcnQgY3Vyc29yKS4KOCAgIENUUkwga2V5IGRvZXNuJ3QgYWx3YXlzIHdvcmsgaW4gY29tYmluYXRpb24gd2l0aCBBTFQga2V5LiAgSXQgZG9lcyB3b3JrCiAgICBmb3IgZnVuY3Rpb24ga2V5cywgbm90IGZvciBhbHBoYWJldGljIGNoYXJhY3RlcnMuICBQZXJoYXBzIHRoaXMgaXMgYmVjYXVzZQogICAgQ1RSTC1BTFQgaXMgdXNlZCBieSBXaW5kb3dzIGFzIEFsdEdyPwo4ICAgQ1RSTC0tIGRvZXNuJ3Qgd29yayBmb3IgQVpFUlRZLCBiZWNhdXNlIGl0J3MgQ1RSTC1bIGZvciBRV0VSVFkuICBIb3cgZG8gd2UKICAgIGtub3cgd2hpY2gga2V5Ym9hcmQgaXMgYmVpbmcgdXNlZD8KNyAgIFdoZW4gc2Nyb2xsaW5nLCBhbmQgYSBiYWNrZ3JvdW5kIGNvbG9yIGlzIGRpdGhlcmVkLCB0aGUgZGl0aGVyIHBhdHRlcm4KICAgIGRvZXNuJ3QgYWx3YXlzIGpvaW4gY29ycmVjdGx5IGJldHdlZW4gdGhlIHNjcm9sbGVkIGFyZWEgYW5kIHRoZSBuZXcgZHJhd24KICAgIGFyZWEgKEtvbG9zZWlrZSkuCjggICBXaGVuIGd1aV9pbml0X2ZvbnQoKSBpcyBjYWxsZWQgd2l0aCAiKiIsIHBfZ3VpZm9udCBpcyBmcmVlZCB3aGlsZSBpdCBtaWdodAogICAgc3RpbGwgYmUgdXNlZCBzb21ld2hlcmUuICBUaGlzIGlzIHRvbyB0cmlja3ksIGRvIHRoZSBmb250IHNlbGVjdGlvbiBmaXJzdCwKICAgIHRoZW4gc2V0IHRoZSBuZXcgZm9udCBieSBuYW1lIChyZXF1aXJlcyBwdXR0aW5nIGFsbCBsb2dmb250IHBhcmFtZXRlcnMgaW4KICAgIHRoZSBmb250IG5hbWUpLgoKCkF0aGVuYSBhbmQgTW90aWY6CjYgICBOZXcgTW90aWYgdG9vbGJhciBidXR0b24gZnJvbSBNYXJjaW4gRGFsZWNraToKICAgIC0gV2hlbiB0aGUgbW91c2UgcG9pbnRlciBpcyBvdmVyIGFuIEFnaWRlIGJ1dHRvbiB0aGUgcmVkIGJlY29tZXMgYmxhY2suCiAgICAgIFNvbWV0aGluZyB3aXRoIHRoZSB3YXkgY29sb3JzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIC54cG0gZmlsZS4KICAgIC0gVGhlIHBpeG1hcCBpcyB0d28gcGl4ZWxzIHNtYWxsZXIgdGhhbiBpdCBzaG91bGQgYmUuICBUaGUgZ2FwIGlzIGZpbGxlZAogICAgICB3aXRoIGdyZXkgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB0b29sYmFyIGJhY2tncm91bmQgY29sb3IuCjkgICBDYW4gY29uZmlndXJlIGJlIGNoYW5nZWQgdG8gZGlzYWJsZSBuZXRiZWFucyBpZiB0aGUgWHBtIGxpYnJhcnkgaXMKICAgIHJlcXVpcmVkIGFuZCBpdCdzIG1pc3Npbmc/CjggICBXaGVuIHVzaW5nIHRoZSByZXNvdXJjZSAiVmltKmJvcmRlcndpZHRoIDIiIHRoZSB3aWRnZXRzIGFyZSBwb3NpdGlvbmVkCiAgICB3cm9uZy4KOSAgIFhJTSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBTR0kvSVJJWC4gIEZpeCBYSU0gc28gdGhhdCAnaW1kaXNhYmxlJyBjYW4KICAgIGJlIG9mZiBieSBkZWZhdWx0Lgo5ICAgWElNIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IgQXRoZW5hL01vdGlmLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKSAgRm9yIG5vdywKICAgIGtlZXAgWElNIGFjdGl2ZSBhdCBhbGwgdGltZXMgd2hlbiB0aGUgaW5wdXQgbWV0aG9kIGhhcyB0aGUgcHJlZWRpdGluZwogICAgZmxhZy4KOCAgIFgxMTogQSBtZW51IHRoYXQgY29udGFpbnMgYW4gdW1sYXV0IGlzIHRydW5jYXRlZCBhdCB0aGF0IGNoYXJhY3Rlci4KICAgIEhhcHBlbnMgd2hlbiB0aGUgbG9jYWxlIGlzICJDIiwgd2hpY2ggdXNlcyBBU0NJSSBpbnN0ZWFkIG9mIElTMC04ODU5LTEuCiAgICBJcyB0aGVyZSBhIHdheSB0byB1c2UgbGF0aW4xIGJ5IGRlZmF1bHQ/ICBHbm9tZV9pbml0KCkgc2VlbXMgdG8gZG8gdGhpcy4KOCAgIFBlcmhhcHMgdXNlIGZvbnRzZXRzIGZvciBldmVyeXRoaW5nPwo2ICAgV2hlbiBzdGFydGluZyBpbiBFbmdsaXNoIGFuZCBzd2l0Y2hpbmcgdGhlIGxhbmd1YWdlIHRvIEphcGFuZXNlLCBzZXR0aW5nCiAgICB0aGUgbG9jYWxlIHdpdGggIjpsYW5nIiwgJ2d1aWZvbnRzZXQnIGFuZCAiaGkgbWVudSBmb250PSIsIGRlbGV0aW5nIGFsbAogICAgbWVudXMgYW5kIHNldHRpbmcgdGhlbSBhZ2FpbiwgdGhlIG1lbnVzIGRvbid0IHVzZSB0aGUgbmV3IGZvbnQuICBNb3N0IG9mCiAgICB0aGUgdG9vbHRpcHMgd29yayB0aG91Z2guLi4KNyAgIE1vdGlmOiB3aGVuIHVzaW5nIGEgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLCB0aGUgc3BlY2lmaWVkIGZpbGUgbmFtZSBpcyBub3QKICAgIGFsd2F5cyB1c2VkICh3aGVuIHNwZWNpZnlpbmcgYSBmaWx0ZXIgb3IgYW5vdGhlciBkaXJlY3RvcnkpLgo4ICAgV2hlbiAnZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZSAoZS5nLiwgdXRmLTgpIHRoZQogICAgbWVudSBzdHJpbmdzIGRvbid0IHdvcmsuICBSZXF1aXJlcyBjb252ZXJzaW9uIGZyb20gJ2VuY29kaW5nJyB0byB0aGUKICAgIGN1cnJlbnQgbG9jYWxlLiAgV29ya2Fyb3VuZDogc2V0ICdsYW5nbWVudScuCgoKQXRoZW5hIEdVSToKOSAgIFdoZW4gZHJhZ2dpbmcgdGhlIHNjcm9sbGJhciB0aHVtYiB2ZXJ5IGZhc3QsIGZvY3VzIGlzIG9ubHkgb2J0YWluZWQgaW4KICAgIHRoZSBzY3JvbGxiYXIgaXRzZWxmLiAgQW5kIHRoZSB0aHVtYiBpcyBubyBsb25nZXIgdXBkYXRlZCB3aGVuIG1vdmluZwogICAgdGhyb3VnaCBmaWxlcy4KNyAgIFRoZSBmaWxlIHNlbGVjdG9yIGlzIG5vdCByZXNpemFibGUuICBXaXRoIGEgYmlnIGZvbnQgaXQgaXMgZGlmZmljdWx0IHRvCiAgICByZWFkIGxvbmcgZmlsZSBuYW1lcy4gKFNjaHJvZWRlcikKNCAgIFJlLXdyaXRlIHRoZSB3aWRnZXQgYXR0YWNobWVudHMgYW5kIGNvZGUgc28gdGhhdCB3ZSB3aWxsIG5vdCBoYXZlIHRvIGdvCiAgICB0aHJvdWdoIGFuZCBjYWxjdWxhdGUgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIGV2ZXJ5IHdpZGdldCBldmVyeSB0aW1lIHRoZQogICAgd2luZG93IGlzIHJlZnJlc2hlZC9jaGFuZ2VzIHNpemUuICBUaGlzIHdpbGwgaGVscCB0aGUgImZsYXNoaW5nLXdpZGdldHMiCiAgICBwcm9ibGVtIGR1cmluZyBhIHJlZnJlc2guCjUgICBXaGVuIHN0YXJ0aW5nIGd2aW0gd2l0aCBhbGwgdGhlIGRlZmF1bHQgY29sb3JzIGFuZCB0aGVuIHR5cGluZwogICAgIjpoaSBNZW51IGd1aWJnPWN5YW4iLCB0aGUgbWVudXMgY2hhbmdlIGNvbG9yIGJ1dCB0aGUgYmFja2dyb3VuZCBvZiB0aGUKICAgIHB1bGxyaWdodCBwaXhtYXAgZG9lc24ndCBjaGFuZ2UgY29sb3JzLgogICAgSWYgeW91IHR5cGUgIjpoaSBNZW51IGd1aWJnPWN5YW4gZm9udD1hbnlmb250IiwgdGhlbiB0aGUgcGl4bWFwIGNoYW5nZXMKICAgIGNvbG9ycyBhcyBpdCBzaG91bGQuCiAgICBBbGxvY2F0aW5nIGEgbmV3IHBpeG1hcCBhbmQgc2V0dGluZyB0aGUgcmVzb3VyY2UgZG9lc24ndCBjaGFuZ2UgdGhlCiAgICBwdWxscmlnaHQgcGl4bWFwJ3MgY29sb3JzLiAgV2h5PyAgUG9zc2libGUgQXRoZW5hIGJ1Zz8KCgpNb3RpZiBHVUk6Ci0gICBndWlfbWNoX2Jyb3dzZWRpcigpIGlzIG1pc3NpbmcuCjcgICBVc2UgWG1TdHJpbmdDcmVhdGVMb2NhbGl6ZWQoKSBpbnN0ZWFkIG9mIFhtU3RyaW5nQ3JlYXRlU2ltcGxlKCk/CiAgICBEYXZpZCBIYXJyaXNvbiBzYXlzIGl0J3MgT0sgKGl0IGV4aXN0cyBpbiBNb3RpZiAxLjIpLgo4ICAgTGVzc3RpZjogV2hlbiBkZWxldGluZyBhIG1lbnUgdGhhdCdzIHRvcm4gb2ZmLCB0aGUgdG9ybiBvZmYgbWVudSBiZWNvbWVzCiAgICB2ZXJ5IHNtYWxsIGluc3RlYWQgb2YgZGlzYXBwZWFyaW5nLiAgV2hlbiBjbG9zaW5nIGl0LCBWaW0gY3Jhc2hlcy4KICAgIChQaGlsbGlwcHMpCgoKR1VJOgo5ICAgT24gU29sYXJpcywgY3JlYXRpbmcgdGhlIHBvcHVwIG1lbnUgY2F1c2VzIHRoZSByaWdodCBtb3VzZSBidXR0b24gbm8KICAgIGxvbmdlciB0byB3b3JrIGZvciBleHRlbmRpbmcgdGhlIHNlbGVjdGlvbi4gKEhhbGV2eSkKOSAgIFdoZW4gcnVubmluZyBhbiBleHRlcm5hbCBwcm9ncmFtLCBpdCBjYW4ndCBhbHdheXMgYmUga2lsbGVkIHdpdGggQ1RSTC1DLgogICAgZS5nLiwgb24gU29sYXJpcyA1LjUsIHdoZW4gdXNpbmcgIksiIChLZWVjaCkuICBPdGhlciAnZ3VpcHR5JyBwcm9ibGVtcyBvbgogICAgU29sYXJpcyAyLjYuIChNYXJsZXkpCjkgICBPbiBTb2xhcmlzOiBVc2luZyBhICItZ2VvbWV0cnkiIGFyZ3VtZW50LCBiaWdnZXIgdGhhbiB0aGUgd2luZG93IHdoZXJlIFZpbQogICAgaXMgc3RhcnRlZCBmcm9tLCBjYXVzZXMgZW1wdHkgbGluZXMgYmVsb3cgdGhlIGNtZGxpbmUuIChyYWYpCjggICBYMTEgR1VJOiBXaGVuIG1lbnUgaXMgZGlzYWJsZWQgYnkgZXhjbHVkaW5nICdtJyBmcm9tICdndWlvcHRpb25zJywgQUxUIGtleQogICAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIHRyaWdnZXIgYSBtZW51IChsaWtlIHRoZSBXaW4zMiB2ZXJzaW9uKS4KOCAgIFdoZW4gc2V0dGluZyAnbGFuZ21lbnUnLCBpdCBzaG91bGQgYmUgZWZmZWN0aXZlIGltbWVkaWF0ZWx5LiAgU3RvcmUgYm90aAogICAgdGhlIEVuZ2xpc2ggYW5kIHRoZSB0cmFuc2xhdGVkIHRleHQgaW4gdGhlIG1lbnUgc3RydWN0dXJlLiAgUmUtZ2VuZXJhdGUKICAgIHRoZSB0cmFuc2xhdGlvbiB3aGVuICdsYW5nbWVudScgaGFzIGNoYW5nZWQuCjggICBCYXNpYyBmbGF3IGluIHRoZSBHVUkgY29kZTogTmV4dFNjcmVlbiBpcyB1cGRhdGVkIGJlZm9yZSBjYWxsaW5nCiAgICBndWlfd3JpdGUoKSwgYnV0IHRoZSBHVUkgY29kZSByZWxpZXMgb24gTmV4dFNjcmVlbiB0byByZXByZXNlbnQgdGhlIHN0YXRlCiAgICBvZiB3aGVyZSBpdCBpcyBwcm9jZXNzaW5nIHRoZSBvdXRwdXQuCiAgICBOZWVkIGJldHRlciBzZXBhcmF0aW9uIG9mIFZpbSBjb3JlIGFuZCBHVUkgY29kZS4KOCAgIFdoZW4gZm9udHNldCBzdXBwb3J0IGlzIGVuYWJsZWQsIHNldHRpbmcgJ2d1aWZvbnQnIHRvIGEgc2luZ2xlIGZvbnQKICAgIGRvZXNuJ3Qgd29yay4KOCAgIE1lbnUgcHJpb3JpdHkgZm9yIHN1Yi1tZW51cyBmb3I6IEFtaWdhLCBCZU9TLgo4ICAgV2hlbiB0cmFuc2xhdGluZyBtZW51cyBpZ25vcmUgdGhlIHBhcnQgYWZ0ZXIgdGhlIFRhYiwgdGhlIHNob3J0Y3V0LiAgU28KICAgIHRoYXQgdGhlIHNhbWUgbWVudSBpdGVtIHdpdGggYSBkaWZmZXJlbnQgc2hvcnRjdXQgKGUuZy4sIGZvciB0aGUgTWFjKSBhcmUKICAgIHN0aWxsIHRyYW5zbGF0ZWQuCjggICBBZGQgbWVudSBzZXBhcmF0b3JzIGZvciBBbWlnYSwgUklTQ09TLgo4ICAgQWRkIHdheSB0byBzcGVjaWZ5IHRoZSBmaWxlIGZpbHRlciBmb3IgdGhlIGJyb3dzZSBkaWFsb2cuICBBdCBsZWFzdCBmb3IKICAgIGJyb3dzZSgpLgo4ICAgQWRkIGRpYWxvZyBmb3Igc2VhcmNoL3JlcGxhY2UgdG8gb3RoZXIgR1VJcz8gIFRrIGhhcyBzb21ldGhpbmcgZm9yIHRoaXMsCiAgICB1c2UgdGhhdCBjb2RlPyAgT3IgdXNlIGNvbnNvbGUgZGlhbG9nLgo4ICAgV2hlbiBzZWxlY3RpbmcgYSBmb250IHdpdGggdGhlIGZvbnQgZGlhbG9nIGFuZCB0aGUgZm9udCBpcyBpbnZhbGlkLCB0aGUKICAgIGVycm9yIG1lc3NhZ2UgZGlzYXBwZWFycyB0b28gcXVpY2suCjcgICBNb3JlIGZlYXR1cmVzIGluIHRoZSBmaW5kL3JlcGxhY2UgZGlhbG9nOgogICAgLSByZWdleHAgb24vb2ZmCiAgICAtIHNlYXJjaCBpbiBzZWxlY3Rpb24vYnVmZmVyL2FsbCBidWZmZXJzL2RpcmVjdG9yeQogICAgICAgd2hlbiBhbGwgYnVmZmVycy9kaXJlY3RvcnkgaXMgdXNlZDoKCS0gZmlsdGVyIGZvciBmaWxlIG5hbWUKICAgICAgIHdoZW4gZGlyZWN0b3J5IGlzIHVzZWQ6CgktIHN1YmRpcmVjdG9yeSBvbi9vZmYKCS0gdG9wIGRpcmVjdG9yeSBicm93c2VyCjggICBndWlfY2hlY2tfY29sb3JzKCkgaXMgbm90IGNhbGxlZCBhdCB0aGUgcmlnaHQgbW9tZW50LiAgRG8gaXQgbXVjaCBsYXRlciwKICAgIHRvIGF2b2lkIHByb2JsZW1zLgo4ICAgZ3VpX3VwZGF0ZV9jdXJzb3IoKSBpcyBjYWxsZWQgZm9yIGEgY3Vyc29yIHNoYXBlIGNoYW5nZSwgZXZlbiB3aGVuIHRoZXJlCiAgICBhcmUgbWFwcGluZ3MgdG8gYmUgcHJvY2Vzc2VkLiAgT25seSBkbyBzb21ldGhpbmcgd2hlbiBnb2luZyB0byB3YWl0IGZvcgogICAgaW5wdXQuICBPciBtYXliZSBldmVyeSAxMDAgbXM/CjggICBYMTE6IFdoZW4gdGhlIHdpbmRvdyBzaXplIGlzIHJlZHVjZWQgdG8gZml0IG9uIHNjcmVlbiwgdGhlcmUgYXJlIGJsYW5rCiAgICBsaW5lcyBiZWxvdyB0aGUgdGV4dCBhbmQgYm90dG9tIHNjcm9sbGJhci4gICJndmltIC1nZW9tZXRyeSA4MHg3OCswKzAiLgogICAgV2hlbiB0aGUgIiswKzAiIGlzIG9taXR0ZWQgaXQgd29ya3MuCjggICBXaGVuIHN0YXJ0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQsIGFuZCAnZ3VpcHR5JyBzZXQsIEJTIGFuZCBERUwgYXJlIG1peGVkCiAgICB1cC4gIFNldCBlcmFzZSBjaGFyYWN0ZXIgc29tZWhvdz8KOCAgIEEgZGVhZCBjaXJjdW1mbGV4IGZvbGxvd2VkIGJ5IGEgc3BhY2Ugc2hvdWxkIGdpdmUgdGhlICdeJyBjaGFyYWN0ZXIKICAgIChSb21tZWwpLiAgTG9vayBob3cgeHRlcm0gZG9lcyB0aGlzLgogICAgQWxzbzogQmVkbmFyIGhhcyBzb21lIGNvZGUgZm9yIGRlYWQga2V5IGhhbmRsaW5nLgogICAgQWxzbzogTmVkaXQgNS4wLjIgd2l0aCBVU0VfWE1JTSBkb2VzIGl0IHJpZ2h0LiAoR2F5YSkKOCAgIFRoZSBjb21wb3NlIGtleSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgKENlcGFzKS4gIEJvdGggZm9yIFdpbjMyIGFuZCBYMTEuCjcgICBUaGUgY3Vyc29yIGluIGFuIGluYWN0aXZlIHdpbmRvdyBzaG91bGQgYmUgaG9sbG93LiAgQ3VycmVudGx5IGl0J3Mgbm90CiAgICB2aXNpYmxlLgo3ICAgR1VJIG9uIFNvbGFyaXMgMi41LjEsIHVzaW5nIC91c3IvZHQvLi46IFdoZW4gZ3ZpbSBzdGFydHMsIGN1cnNvciBpcwogICAgaG9sbG93LCBhZnRlciB3aW5kb3cgbG93ZXJlZC9yYWlzZWQgaXQncyBPSy4gKEdvZGZyZXkpCjcgICBXaGVuIHN0YXJ0aW5nIEdVSSB3aXRoICI6Z3VpIiwgYW5kIHdpbmRvdyBpcyBtYWRlIHNtYWxsZXIgYmVjYXVzZSBpdAogICAgZG9lc24ndCBmaXQgb24gdGhlIHNjcmVlbiwgdGhlcmUgaXMgYW4gZXh0cmEgcmVkcmF3Lgo4ICAgV2hlbiBzZXR0aW5nIGZvbnQgd2l0aCAuWGRlZmF1bHRzLCB0aGVyZSBpcyBhbiBleHRyYSBlbXB0eSBsaW5lIGF0IHRoZQogICAgYm90dG9tLCB3aGljaCBkaXNhcHBlYXJzIHdoZW4gdXNpbmcgIjpzZXQgZ3VpZm9udD08VGFiPiIuIChDaGFkemVsZWspCjggICBXaGVuIGZvbnQgc2hhcGUgY2hhbmdlcywgYnV0IG5vdCB0aGUgc2l6ZSwgZG9pbmcgIjpzZXQgZm9udD0iIGRvZXMgbm90CiAgICByZWRyYXcgdGhlIHNjcmVlbiB3aXRoIHRoZSBuZXcgZm9udC4gIEFsc28gZm9yIFdpbjMyLgogICAgV2hlbiB0aGUgc2l6ZSBjaGFuZ2VzLCBvbiBTb2xhcmlzIDIuNSB0aGVyZSBpc24ndCBhIHJlZHJhdyBmb3IgdGhlCiAgICByZW1haW5pbmcgcGFydCBvZiB0aGUgd2luZG93IChQaGlsbGlwcHMpLgotICAgRmxhc2hlcyByZWFsbHkgYmFkbHkgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHJ1bm5pbmcgcmVtb3RlbHkgZnJvbSBhIFN1bi4KNCAgIFJlLXdyaXRlIHRoZSBjb2RlIHNvIHRoYXQgdGhlIGhpZ2hsaWdodGluZyBpc24ndCBjaGFuZ2VkIG11bHRpcGxlIHRpbWVzCiAgICB3aGVuIGRvaW5nIGEgIjpoaSBjbGVhciIuICBUaGUgY29sb3IgY2hhbmdlcyBoYXBwZW4gdGhyZWUgb3IgbW9yZSB0aW1lcwogICAgY3VycmVudGx5LiAgVGhpcyBpcyB2ZXJ5IG9idmlvdXMgb24gYSA2Nk1oeiA0ODYuCgoKTVNET1MvREpHUFA6CjkgICBQcmVzc2luZyBDVFJMLUMgb2Z0ZW4gY3Jhc2hlcyB0aGUgY29uc29sZSBWaW0gcnVucyBpbi4gKEtlbiBMaWFvKQogICAgV2hlbiAnYmlvc2tleScgaXNuJ3Qgc2V0IGl0IGRvZXNuJ3QgaGFwcGVuLiAgQ291bGQgYmUgYSBwcm9ibGVtIHdpdGggdGhlCiAgICBCSU9TIGVtdWxhdGlvbiBvZiB0aGUgY29uc29sZS4gIFZlcnNpb24gNS42IGFscmVhZHkgaGFkIHRoaXMgcHJvYmxlbS4KOCAgIERKR1BQOiAiY2QgYzoiIGNhbiB0YWtlIHVzIHRvIGEgZGlyZWN0b3J5IHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy4KICAgIGNoYW5nZV9kcml2ZSgpIGRvZXNuJ3QgY2hlY2sgdGhpcy4gIEhvdyB0byBjaGVjayBmb3IgdGhpcyBlcnJvcj8KOSAgIFRoZSAxNiBiaXQgdmVyc2lvbiBydW5zIG91dCBvZiBtZW1vcnkgdmVyeSBxdWlja2x5LiAgU2hvdWxkIGZpbmQgdW51c2VkCiAgICBjb2RlIGFuZCByZWR1Y2Ugc3RhdGljIGRhdGEuCjkgICBDcmFzaCB3aGVuIHJ1bm5pbmcgb24gV2luZG93cyA5OCBpbiBhIGNvbnNvbGUgd2luZG93IGFuZCBwcmVzc2luZyBDVFJMLUMuCiAgICBIYXBwZW5zIG5vdyBhbmQgdGhlbi4gIFdoZW4gZGVidWdnaW5nIFZpbSBpbiBnZGIgdGhpcyBhbHNvIGhhcHBlbnMuICBTaW5jZQogICAgdGhlIGNvbnNvbGUgY3Jhc2hlcywgbWlnaHQgYmUgYSBidWcgaW4gdGhlIERPUyBjb25zb2xlLiAgUmVzZXR0aW5nCiAgICAnYmlvc2tleScgYXZvaWRzIGl0LCBidXQgdGhlbiBDVFJMLUMgZG9lc24ndCB3b3JrLgo5ICAgRE9TOiBNYWtlIENUUkwtRnggYW5kIEFMVC1GeCB3b3JrLgogICAgQ1RSTC1GMSA9IENFLTVFLCBDVFJMLUYyID0gQ0UtNUYsIC4uLCBDVFJMLUYxMCA9IENFLTY3CiAgICBBTFQtRjEgPSBDRS02OCwgQUxULUYyID0gQ0UtNjksIC4uLCBBTFQtRjEwID0gQ0UtNzEKICAgIFNoaWZ0ZWQgY3Vyc29yIGtleXMgcHJvZHVjZSBzYW1lIGNvZGVzIGFzIHVuc2hpZnRlZCBrZXlzLiAgVXNlIGJpb3NrZXkoMikKICAgIHRvIGdldCBtb2RpZmllciBtYXNrIGZvciA8Uy1DLU0tRng+LgogICAgVXNlIEtfU1BFQ0lBTC9LU19NT0RJRklFUiBjb2RlcyB0byBpbnNlcnQgbW9kaWZpZXIgbWFzayBpbiBpbnB1dCBzdHJlYW0/CiAgICBNYWtlIHRoaXMgd29yayBsaWtlIGluIFdpbjMyIGNvbnNvbGUuCiAgICBNYXBwaW5nIHRoaW5ncyBsaWtlIDxNLUE+IGRvZXNuJ3Qgd29yaywgYmVjYXVzZSBpdCBnZW5lcmF0ZXMgYW4gZXh0ZW5kZWQKICAgIGtleSBjb2RlLiAgVXNlIGEgdHJhbnNsYXRpb24gdGFibGU/CjkgICBDYW4ndCByZWFkIGFuIG9wZW5lZCBzd2FwIGZpbGUgd2hlbiB0aGUgInNoYXJlIiBjb21tYW5kIGhhcyBub3QgYmVlbiB1c2VkLgogICAgQXQgbGVhc3QgaWdub3JlIHRoZSBzd2FwIGZpbGVzIHRoYXQgVmltIGhhcyBvcGVuZWQgaXRzZWxmLgo4ICAgVXNlIERKR1BQIDIuMDMuCjggICBUaGUgRG9zMzIgdmVyc2lvbiAoREpHUFApIGNhbid0IHVzZSBsb25nIGZpbGUgbmFtZXMgb24gV2luZG93cyBOVC4KICAgIENoZWNrIGlmIG5ldyBwYWNrYWdlIGNhbiBiZSB1c2VkICh2Mm1pc2MvbnRsZm4wOFtic10uemlwKS4KOCAgIHNldGxvY2FsZSgpIGlzIGJvZ3VzLgo4ICAgVmltIGJ1c3kgd2FpdHMgZm9yIG5ldyBjaGFyYWN0ZXJzIG9yIG1vdXNlIGNsaWNrcy4JU2hvdWxkIHB1dCBpbiBzb21lCiAgICBzb3J0IG9mIHNsZWVwLCB0byBhdm9pZCBlYXRpbmcgNTAlIG9mIHRoZSBDUFUgdGltZS4gIFRlc3Qgb24gYW4gdW5wYXRjaGVkCiAgICBXaW5kb3dzIDk1IHN5c3RlbSEKOCAgIERKR1BQOiB3aGVuIHNoZWxsIGlzIGJhc2gsIG1ha2UgZmFpbHMuIChEb25haG9lKQo3ICAgSGl0dGluZyBDVFJMLVAgdHdpY2UgcXVpY2tseSAoZS5nLiwgaW4ga2V5d29yZCBjb21wbGV0aW9uKSBvbiBhIDgwODgKICAgIG1hY2hpbmUsIHN0YXJ0cyBwcmludGVyIGVjaG8hIChKb2huIE11bGxpbikuCjcgICBNU0RPUyAxNiBiaXQgdmVyc2lvbiBjYW4ndCB3b3JrIHdpdGggQ09NU1BFQyB0aGF0IGhhcyBhbiBhcmd1bWVudCwgZS5nLjoKICAgIENPTVNQRUM9QzpcV0lORE9XU1xDT01NQU5ELkNPTSAvRTo0MDk2ICAgIChCcmFkbGV5KQogICAgQ2F1c2VkIGJ5IEJDQyBzeXN0ZW0oKSBmdW5jdGlvbiAoQm9ybGFuZCAibWFrZSIgaGFzIHRoZSBzYW1lIHByb2JsZW0pLgo4ICAgTW91c2U6IGhhbmRsZSBsZWZ0JnJpZ2h0IGJ1dHRvbiBwcmVzc2VkIGFzIG1pZGRsZSBidXR0b24gcHJlc3NlZC4gIEFkZAogICAgbW9kaWZpZXIga2V5cyBzaGlmdCwgY3RybCBhbmQgYWx0Lgo3ICAgV2hlbiB0b28gbWFueSBmaWxlcyBhcmUgb3BlbiAoZGVwZW5kcyBvbiBGSUxFUyksIHN0cmFuZ2UgdGhpbmdzIGhhcHBlbi4KICAgIFRoZSBEb3MxNiB2ZXJzaW9uIHJ1bnMgb3V0IG9mIG1lbW9yeSwgaW4gdGhlIERvczMyIHZlcnNpb24gIiFscyIgY2F1c2VzIGEKICAgIGNyYXNoLiAgQW5vdGhlciBzeW1wdG9tOiAuc3dwIGZpbGVzIGFyZSBub3QgZGVsZXRlZCwgZXhpc3RpbmcgZmlsZXMgYXJlCiAgICAiW05ldyBmaWxlXSIuCjcgICBESkdQUCB2ZXJzaW9uIGRvZXNuJ3Qgd29yayB3aXRoIGdyYXBoaWNzIGRpc3BsYXkgbW9kZS4gIFN3aXRjaCB0byBhIG1vZGUKICAgIHRoYXQgaXMgc3VwcG9ydGVkPwo4ICAgREpHUFA6ICI6bW9kZSIgZG9lc24ndCB3b3JrIGZvciBtYW55IG1vZGVzLiAgRGlzYWJsZSB0aGVtLgo4ICAgREpHUFA6IFdoZW4gc3RhcnRpbmcgaW4gRXggbW9kZSwgc2hvdWxkbid0IGNsZWFyIHRoZSBzY3JlZW4uIChXYWx0ZXIKICAgIEJyaXNjb2UpCgoKTVNET1MsIE9TLzIgYW5kIFdpbjMyOgo4ICAgT1MvMjogQWRkIGJhY2t0aWNrIGV4cGFuc2lvbi4gIFVuZGVmaW5lIE5PX0VYUEFORFBBVEggYW5kIHVzZQogICAgZ2VuX2V4cGFuZF93aWxkY2FyZHMoKS4KOCAgIE9TLzI6IEFkZCBjbGlwYm9hcmQgc3VwcG9ydD8gIFNlZSBleGFtcGxlIGNsaXBicmQuZXhlIGZyb20gQWxleGFuZGVyCiAgICBXYWduZXIuCjggICBPUy8yOiBBZGQgRXh0ZW5kZWQgQXR0cmlidXRlcyBzdXBwb3J0IGFuZCBkZWZpbmUgSEFWRV9BQ0wuCjggICBPUy8yOiBXaGVuIGVkaXRpbmcgYSBmaWxlIG5hbWUgImZvby50eHQiIHRoYXQgaXMgYWN0dWFsbHkgY2FsbGVkIEZPTy50eHQsCiAgICB3cml0aW5nIHVzZXMgImZvby50eHQiLiAgU2hvdWxkIG9idGFpbiB0aGUgcmVhbCBmaWxlIG5hbWUuCjggICBTaG91bGQgJFVTRVJQUk9GSUxFIGJlIHByZWZlcnJlZCBhYm92ZSAkSE9NRURSSVZFLyRIT01FUEFUSD8gIE5vLCBidXQgaXQncwogICAgYSBnb29kIGZhbGxiYWNrLCB0aHVzIHVzZToKCSAgICAkSE9NRQoJICAgICRIT01FRFJJVkUkSE9NRVBBVEgKCSAgICBTSEdldFNwZWNpYWxGb2xkZXJQYXRoKE5VTEwsIGxwenNQYXRoLCBDU0lETF9BUFBEQVRBLCBGQUxTRSk7CgkgICAgJFVTRVJQUk9GSUxFCgkgICAgU0hHZXRTcGVjaWFsRm9sZGVyUGF0aChOVUxMLCBscHpzUGF0aCwgQ1NJRExfQ09NTU9OX0FQUERBVEEsIEZBTFNFKTsKCSAgICAkQUxMVVNFUlNQUk9GSUxFCgkgICAgJFNZU1RFTURSSVZFXAoJICAgIEM6XAo4ICAgV2luMzIgY29uc29sZTogPE0tVXA+IGFuZCA8TS1Eb3duPiBkb24ndCB3b3JrLiAoR2VkZGVzKSAgV2UgZG9uJ3QgaGF2ZQogICAgc3BlY2lhbCBrZXlzIGZvciB0aGVzZS4gIFNob3VsZCB1c2UgbW9kaWZpZXIgKyBrZXkuCjggICBXaW4zMiBjb25zb2xlOiBjYXBzLWxvY2sgbWFrZXMgbm9uLWFscGhhIGtleXMgd29yayBsaWtlIHdpdGggc2hpZnQuCiAgICBTaG91bGQgd29yayBsaWtlIGluIHRoZSBHVUkgdmVyc2lvbi4KOCAgIEVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBET1MgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4gIE1ha2UgYSBkZWZpbmUgZm9yCiAgICBTVFJDTVBfRU5WKCksIGFuZCB1c2UgaXQgd2hlbiBjb21wYXJpbmcgZW52aXJvbm1lbnQgdmFyIG5hbWVzLgo4ICAgU2V0dGluZyAnc2hlbGxzbGFzaCcgaGFzIG5vIGltbWVkaWF0ZSBlZmZlY3QuICBDaGFuZ2UgYWxsIGZpbGUgbmFtZXMgd2hlbgogICAgaXQgaXMgc2V0L3Jlc2V0PyAgT3Igb25seSB1c2UgaXQgd2hlbiBhY3R1YWxseSBleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kPwo4ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSBvbiBhIFNhbWJhIHNlcnZlciwgY2FzZSBtaWdodCBtYXR0ZXIuICAiOmUgZmlsZSIKICAgIGZvbGxvd2VkIGJ5ICI6ZSBGSUxFIiB3aWxsIGVkaXQgImZpbGUiIGFnYWluLCBldmVuIHRob3VnaCAiRklMRSIgbWlnaHQgYmUKICAgIGFub3RoZXIgb25lLiAgU2V0IGxhc3QgdXNlZCBuYW1lIGluIGJ1Zmxpc3RfbmV3KCk/ICBGaXggZG9fZWNtZCgpLCBldGMuCjggICBXaGVuIGEgYnVmZmVyIGlzIGVkaXRpbmcgYSBmaWxlIGxpa2UgImZ0cDovL21hY2gvZmlsZSIsIHdoaWNoIGlzIG5vdCBnb2luZwogICAgdG8gYmUgdXNlZCBsaWtlIGEgbm9ybWFsIGZpbGUgbmFtZSwgZG9uJ3QgY2hhbmdlIHRoZSBzbGFzaGVzIHRvCiAgICBiYWNrc2xhc2hlcy4gKFJvbmFsZCBIb2VsbHdhcnRoKQoKCldpbmRvd3MgOTU6CjggICBFZGl0aW5nIGEgZmlsZSBieSBpdCdzIHNob3J0IGZpbGUgbmFtZSBhbmQgd3JpdGluZyBpdCwgbWFrZXMgdGhlIGxvbmcgZmlsZQogICAgbmFtZSBkaXNhcHBlYXIuICBTZXR0aW5nICdiYWNrdXBjb3B5JyBoZWxwcy4KICAgIFVzZSBGaW5kRmlyc3RGaWxlKCktPmNBbHRlcm5hdGVGaWxlTmFtZSBpbiBmbmFtZV9jYXNlKCkgKEdlb3JnZSBSZWlsbHkpLgo4ICAgRG9pbmcgd2lsZGNhcmQgZXhwYW5zaW9uLCB3aWxsIG1hdGNoIHRoZSBzaG9ydCBmaWxlbmFtZSwgYnV0IHJlc3VsdCBpbiB0aGUKICAgIGxvbmcgZmlsZW5hbWUgKGJvdGggREpHUFAgYW5kIFdpbjMyKS4KCgpXaW4zMiBjb25zb2xlOgo5ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSBieSBpdHMgc2hvcnQgZmlsZSBuYW1lLCBpdCBzaG91bGQgYmUgZXhwYW5kZWQgaW50byBpdHMKICAgIGxvbmcgZmlsZSBuYW1lLCB0byBhdm9pZCBwcm9ibGVtcyBsaWtlIHRoZXNlOiAoTWNjb2xsaXN0ZXIpCiAgICAgMSkgQ3JlYXRlIGEgZmlsZSBjYWxsZWQgIi5iYXNocmMiIHVzaW5nIHNvbWUgb3RoZXIgZWRpdG9yLgogICAgIDIpIERyYWcgdGhhdCBmaWxlIG9udG8gYSBzaG9ydGN1dCBvciB0aGUgYWN0dWFsIGV4ZWN1dGFibGUuCiAgICAgMykgTm90ZSB0aGF0IHRoZSBmaWxlIG5hbWUgaXMgc29tZXRoaW5nIGxpa2UgQkFTSFJDfjEKICAgICA0KSBHbyB0byBGaWxlLT5TYXZlIEFzIG1lbnUgaXRlbSBhbmQgdHlwZSAiLmJhc2hyYyIgYXMgdGhlIGZpbGUgbmFtZS4KICAgICA1KSBQcmVzcyAiWWVzIiB0byBpbmRpY2F0ZSB0aGF0IEkgd2FudCB0byBvdmVyd3JpdGUgdGhlIGZpbGUuCiAgICAgNikgTm90ZSB0aGF0IHRoZSBtZXNzYWdlICJGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIiBpcyBkaXNwbGF5ZWQKCWFuZCB0aGUgZmlsZSBpcyBub3Qgc2F2ZWQuCiAgICBVc2UgRmluZEZpcnN0RmlsZSgpIHRvIGV4cGFuZCBhIGZpbGUgbmFtZSBhbmQgZGlyZWN0b3J5IGluIHRoZSBwYXRoIHRvIGl0cwogICAgbG9uZyBuYW1lLgo4ICAgQWxzbyBpbXBsZW1lbnQgJ2NvbnNrZXknIG9wdGlvbiBmb3IgdGhlIFdpbjMyIGNvbnNvbGUgdmVyc2lvbj8gIExvb2sgYXQKICAgIGhvdyBYdmkgZG9lcyBjb25zb2xlIEkvTyB1bmRlciBXaW5kb3dzIE5ULgo3ICAgUmUtaW5zdGFsbCB0aGUgdXNlIG9mICRURVJNIGFuZCBzdXBwb3J0IHRoZSB1c2Ugb2YgZGlmZmVyZW50IHRlcm1pbmFscywKICAgIGJlc2lkZXMgdGhlIGNvbnNvbGUuCjggICBVc2Ugb2YgPGFsdGdyPiBtb2RpZmllciBkb2Vzbid0IHdvcms/ICA1LjMgd2FzIE9LLiAoR2FyY2lhLVN1YXJlei9HdWNrZXMpCjkgICBNYXBwaW5nIDxDLVMtVGFiPiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5LiAgSG93IHRvIHNlZSB0aGUgZGlmZmVyZW5jZSB3aXRoCiAgICA8Qy1TLWk+Pwo5ICAgdG1wbmFtKCkgdXNlcyBmaWxlIGluIHJvb3Qgb2YgZmlsZSBzeXN0ZW06ICJcYXNkZiIuICBUaGF0IGRvZXNuJ3Qgd29yayBvbgogICAgYSBOZXR3YXJlIG5ldHdvcmsgZHJpdmUuICBVc2Ugc2FtZSBmdW5jdGlvbiBhcyBmb3IgV2luMzIgR1VJPwo4ICAgSW4gb3Nfd2luMzIuaCwgSEFWRV9TVFJJQ01QIGFuZCBIQVZFX1NUUk5JQ01QIGFyZSBkZWZpbmVkIG9ubHkgaWYgX19HTlVDX18KICAgIGlzIG5vdCBkZWZpbmVkLiAgU2hvdWxkbid0IHRoYXQgYmUgdGhlIG90aGVyIHdheSBhcm91bmQ/CjcgICBVc2UgU2V0Q29uc29sZUNQKCkgYW5kIFNldENvbnNvbGVPdXRwdXRDUCgpIHRvIGltcGxlbWVudCAndGVybWVuY29kaW5nJz8KICAgIEF2b2lkcyB0aGF0IGlucHV0IGFuZCBvdXRwdXQgd29yayBkaWZmZXJlbnRseS4gIE5lZWQgdG8gYmUgcmVzdG9yZWQgd2hlbgogICAgZXhpdGluZy4KCgpBbWlnYToKOCAgIEluIG1jaF9pbmNoYXIoKSBzaG91bGQgdXNlIGNvbnZlcnRfaW5wdXRfc2FmZSgpIHRvIGhhbmRsZSBpbmNvbXBsZXRlIGJ5dGUKICAgIHNlcXVlbmNlcy4KOSAgIEluIG1jaF9leHBhbmRwYXRoKCkgYSAiKiIgaXMgdG8gYmUgZXhwYW5kZWQsIGJ1dCAiXCoiIGlzbid0LiAgUmVtb3ZlCiAgICBiYWNrc2xhc2hlcyBpbiByZXN1bHQuCjggICBFeGVjdXRpbmcgYSBzaGVsbCwgb25seSBvbmUgb3B0aW9uIGZvciAnc2hlbGwnIGlzIHNlcGFyYXRlZC4gIFNob3VsZCBkbwogICAgYWxsIG9wdGlvbnMsIHVzaW5nIHdoaXRlIHNwYWNlIHNlcGFyYXRpb24uCgoKTWFjaW50b3NoOgotICAgR1VJOiBndWlfbWNoX2Jyb3dzZWRpcigpIGlzIG1pc3NpbmcuCjcgICBQYXRjaCB0byBhZGQgJ3RyYW5zcGFyZW5jeScgb3B0aW9uLiAgRGlzYWR2YW50YWdlOiBpdCdzIHNsb3cuIChFY2tlaGFyZAogICAgQmVybnMsIDIwMDQgTWF5IDkpIGh0dHA6Ly9lY2tpLnRvL3ZpbS9UcmFuc0JhY2stMjAwNC0wNS0wOS5kaWZmCiAgICBOZWVkcyBtb3JlIHdvcmsuICBBZGQgd2hlbiBzb21lb25lIHJlYWxseSB3YW50cyBpdC4KNyAgIExvYWRpbmcgdGhlIFBlcmwgbGlicmFyeSBvbmx5IHdvcmtzIG9uIE9TL1ggMTAuMiBvciAxMC4zLCBuZXZlciBvbiBib3RoLgogICAgTG9hZCB0aGUgUGVybCBsaWJyYXJ5IGR5bmFtaWNhbGx5IHNlZSBQeXRob24gc291cmNlcyBmaWxlIGR5bmxvYWRfbWFjCiAgICAoSmFjaykKICAgIGR5bmFtaWMgbGlua2luZzogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL3RuMjAwMi90bjIwNjQuaHRtbAo4ICAgSW5wdXR0aW5nIFVuaWNvZGUgY2hhcmFjdGVycyBkb2VzIG5vdCB3b3JrIGluIHRoZSB0ZXJtaW5hbC4gIFRoZXkgYXBwZWFyCiAgICB0byBhcnJpdmUgYXMgdXBwZXIgYW5kIGxvd2VyIGJ5dGVzLiAoRGF2aWQgQnJvd24sIDIwMDQgQXByaWwgMTcpCjggICBUeXBpbmcgVW5pY29kZSBjaGFyYWN0ZXJzIGRvZXNuJ3Qgd29yayBhdCBhbGwgaW4gdGhlIEdVSS4KOSAgIFByb2JsZW1zIGluIENhcmJvbiB2ZXJzaW9uIGZvciBPUyBYOiAoQmVuamkgRmlzaGVyKQogICAgLSBrZXlib2FyZCBzaG9ydGN1dHMgaW4gdGhlIG1lbnVzIGdldCBsb3N0Lgo4ICAgVGhlIFZpbS9BYm91dCBtZW51IGRvZXNuJ3Qgd29yay4KOCAgICI6Z3VpIiBkb2Vzbid0IGZvcmsuICBFbmFibGluZyB0aGUgY29kZSBpbiBndWkuYyB0byBmb3JrIGNhdXNlcyBhIFNFR1YuCjggICBEZWZpbmUgdmltX21rZGlyKCkgZm9yIE1hY2ludG9zaC4KOCAgIERlZmluZSBtY2hfd3JpdGFibGUoKSBmb3IgTWFjaW50b3NoLgo5ICAgV2hlbiBEaXNrTG9jayBpcyBydW5uaW5nLCB1c2luZyBhIHN3YXAgZmlsZSBjYXVzZXMgYSBjcmFzaC4gIEFwcGVhcnMgdG8gYmUKICAgIGEgcHJvYmxlbSB3aXRoIHdyaXRpbmcgYSBmaWxlIHRoYXQgc3RhcnRzIHdpdGggYSBkb3QuIChHaWFjYWxvbmUpCjkgICBPbiBHMyBNYWMsIE9TIHZlcnNpb24gOCwgY29udHJvbCBzdHJpcCBjYXVzZXMgY2hhcmFjdGVycyBtZXNzZWQgdXAgd2hlbgogICAgc2Nyb2xsaW5nIChDVFJMLUwgY2xlYW5zIGl0IHVwKS4gKEJlbmppIEZpc2hlcikKOSAgIE9uIEczIE1hYywgT1MgdmVyc2lvbiA4LCB2YXJpYWJsZS1zcGVlZCBzY3JvbGxpbmcgZG9lc24ndCB3b3JrLCBhZnRlciB0d28KICAgIHNlY29uZHMgb2Ygc2Nyb2xsaW5nIHRoZSBzY3JlZW4gZnJlZXplcy4gKEJlbmppIEZpc2hlcikKOSAgIEluIG1hY19leHBhbmRwYXRoKCkgY2hlY2sgdGhhdCBoYW5kbGluZyBvZiBiYWNrc2xhc2hlcyBpcyBkb25lIHByb3Blcmx5Lgo4ICAgU3RhbmRhcmQgTWFjIHNob3J0Y3V0cyBhcmUgbWlzc2luZy4gIChBbWVyaWdlKQo4ICAgSGFuZGxpbmcgb2Ygbm9uLWZpeGVkIHdpZHRoIGZvbnRzIGlzIHdyb25nLiAoQW1lcmlnZSkKCgoiU21hbGwiIHByb2JsZW1zOgo4ICAgV2hlbiBhbiAiOmVkaXQiIGlzIGluc2lkZSBhIHRyeSBjb21tYW5kIGFuZCB0aGUgQVRURU5USU9OIHByb21wdCBpcyB1c2VkLAogICAgdGhlIDpjYXRjaCBjb21tYW5kcyBhcmUgYWx3YXlzIGV4ZWN1dGVkLCBhbHNvIHdoZW4gdGhlIGZpbGUgaXMgZWRpdGVkCiAgICBub3JtYWxseS4gIFNob3VsZCByZXNldCBkaWRfZW1zZyBhbmQgdW5kbyBzaWRlIGVmZmVjdHMuICBBbHNvIG1ha2Ugc3VyZQogICAgdGhlIEFUVEVOVElPTiBtZXNzYWdlIHNob3dzIHVwLiAgU2VydmF0aXVzIEJyYW5kdCB3b3JrcyBvbiB0aGlzLgo5ICAgV2hlbiB1c2luZyAiOmUgKytlbmM9Zm9vIGZpbGUiIGFuZCB0aGUgZmlsZSBpcyBhbHJlYWR5IGxvYWRlZCB3aXRoCiAgICAnZmlsZWVuY29kaW5nJyBzZXQgdG8gImJhciIsIHRoZW4gZG9fZWNtZCgpIHVzZXMgdGhhdCBidWZmZXIsIGV2ZW4gdGhvdWdoCiAgICB0aGUgZmlsZWVuY29kaW5nIGRpZmZlcnMuICBSZWxvYWQgdGhlIGJ1ZmZlciBpbiB0aGlzIHNpdHVhdGlvbj8gIE5lZWQgdG8KICAgIGNoZWNrIGZvciB0aGUgYnVmZmVyIHRvIGJlIHVubW9kaWZpZWQuCjggICAiOmcvLyIgZ2l2ZXMgIlBhdHRlcm4gbm90IGZvdW5kIGVycm9yIiB3aXRoIEU0ODYuICBTaG91bGQgbm90IHVzZSB0aGUKICAgIGVycm9yIG51bWJlciwgaXQncyBub3QgYSByZWd1bGFyIGVycm9yIG1lc3NhZ2UuCjcgICBWaW10dXRvciBsZWF2ZXMgZXNjYXBlIHNlcXVlbmNlIGluIHRlcm1pbmFsLiBUaGlzIGlzIHRoZSB4dGVybSByZXNwb25zZSB0bwogICAgcmVxdWVzdGluZyB0aGUgdmVyc2lvbiBudW1iZXIuICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQo4ICAgV2hlbiByZWRpcmVjdGluZyBhbmQgdXNpbmcgIjpzaWxlbnQiIHRoZSBjdXJyZW50IGNvbHVtbiBmb3IgZGlzcGxheWluZyBhbmQKICAgIHJlZGlyZWN0aW9uIGNhbiBiZSBkaWZmZXJlbnQuICBVc2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSB0byBob2xkIHRoZSBjb2x1bW4KICAgIGZvciByZWRpcmVjdGlvbi4KNyAgIFRoZXJlIGlzIG5vIHdheSB0byBjaGFuZ2UgZGlyZWN0b3J5IGFuZCBnbyBiYWNrIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxvY2FsCiAgICBhbmQvb3IgZ2xvYmFsIGRpcmVjdG9yeS4gIEFkZCBhIHdheSB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCB3aW5kb3cgdXNlcwogICAgYSBsb2NhbCBkaXJlY3RvcnkuICBBZGQgY2RjbWQoKSB0aGF0IHJldHVybnMgIjpjZCIgb3IgIjpsY2QiPwo3ICAgVGhlIG1lc3NhZ2VzIGZvciAidmltIC0taGVscCIgYW5kICJ2aW0gLS12ZXJzaW9uIiBkb24ndCB1c2UKICAgICd0ZXJtZW5jb2RpbmcnLgo4ICAgV2hlbiAnc2Nyb2xsYmluZCcgaXMgc2V0LCBhIHdpbmRvdyB3b24ndCBzY3JvbGwgaG9yaXpvbnRhbGx5IGlmIHRoZSBjdXJzb3IKICAgIGxpbmUgaXMgdG9vIHNob3J0LiAgQWRkIGEgd29yZCBpbiAnc2Nyb2xsb3B0JyB0byBhbGxvdyBtb3ZpbmcgdGhlIGN1cnNvcgogICAgdG8gbG9uZ2VyIGxpbmUgdGhhdCBpcyB2aXNpYmxlLiAgQSBzaW1pbGFyIHRoaW5nIGlzIGRvbmUgZm9yIHRoZSBHVUkgd2hlbgogICAgdXNpbmcgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyLgo3ICAgVmlzVmltIGNhbiBvbmx5IG9wZW4gb25lIGZpbGUuICBIYXJkIHRvIHNvbHZlOiBlYWNoIG9wZW5lZCBmaWxlIGlzIHBhc3NlZAogICAgd2l0aCBhIHNlcGFyYXRlIGludm9jYXRpb24sIHdvdWxkIG5lZWQgdG8gdXNlIHRpbWVzdGFtcHMgdG8ga25vdyB0aGUKICAgIGludm9jYXRpb25zIGJlbG9uZyB0b2dldGhlci4KOCAgIFdoZW4gZ2l2aW5nIGEgIjpid2lwZW91dCIgY29tbWFuZCBhIGZpbGUtY2hhbmdlZCBkaWFsb2cgbWF5IHBvcHVwIGZvciB0aGlzCiAgICBidWZmZXIsIHdoaWNoIGlzIHBvaW50bGVzcy4gIChNaWtlIFdpbGxpYW1zKQo4ICAgT24gTVMtV2luZG93cyAiOm1ha2UiIGRvZXNuJ3Qgc2hvdyBvdXRwdXQgd2hpbGUgaXQgaXMgd29ya2luZy4gIFVzZSB0aGUKICAgIHRlZS5leGUgZnJvbSAgaHR0cDovL3VueHV0aWxzLnNvdXJjZWZvcmdlLm5ldC8gPyAgQWJvdXQgMTYgS2J5dGUgaW4gdGhlCiAgICBVbnhVdGlscy56aXAgYXJjaGl2ZS4KICAgIEFsdGVybmF0ZSBvbmU6IGh0dHA6Ly93d3cucHJhbW9keC4yMG0uY29tL3RlZV9mb3Jfd2luMzIuaHRtLCBidXQgV2FsdGVyCiAgICBCcmlzY29lIHNheXMgaXQncyBub3QgYXMgZ29vZC4KOCAgICdmaWxsY2hhcnMnIGRvZXNuJ3Qgd29yayBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgo4ICAgQ29tbWFuZCBsaW5lIGNvbXBsZXRpb246IGJ1ZmZlcnMgImZvby50eHQiIGFuZCAiLi4vYi9mb28udHh0IiwgY29tcGxldGluZwogICAgIjpidWYgZm9vPFRhYj4iIGRvZXNuJ3QgZmluZCB0aGUgc2Vjb25kIG9uZS4gKEdlb3JnZSBWLiBSZWlsbHkpCjcgICBPdXRwdXQgZm9yICI6c2NyaXB0bmFtZXMiIGFuZCAiOmJyZWFrbGlzdCIgc2hvdWxkIHNob3J0ZW4gdGhlIGZpbGUgbmFtZXM6CiAgICB1c2UgIn4vIiB3aGVuIHBvc3NpYmxlLgo3ICAgbWJfb2ZmMmNlbGxzKCkgZG9lc24ndCB3b3JrIGNvcnJlY3RseSBvbiB0aGUgdGFpbCBieXRlIG9mIGEgZG91YmxlLWJ5dGUKICAgIGNoYXJhY3Rlci4gKFlhc3VoaXJvIE1hdHN1bW90bykgIEl0IHNob3VsZCByZXR1cm4gMSB3aGVuIHVzZWQgb24gYSB0YWlsCiAgICBieXRlLCBsaWtlIGZvciB1dGYtOC4gIFN0b3JlIHNlY29uZCBieXRlIG9mIGRvdWJsZS1ieXRlIGluIFNjcmVlbkxpbmVzMltdCiAgICAobGlrZSBmb3IgREJDU19KUE5VKSBhbmQgcHV0IGEgemVybyBpbiB0aGUgc2Vjb25kIGJ5dGUgKGxpa2UgZm9yIFVURi04KS4KOCAgICdiYWNrdXBkaXInIGFuZCAnZGlyZWN0b3J5JyBzaG91bGQgdXNlICRUTVBESVIsICRUTVAgYW5kL29yICRURU1QIHdoZW4KICAgIGRlZmluZWQuCjcgICBJbnNpZGUgYSBmdW5jdGlvbiB3aXRoICJwZXJsIDw8RU9GIiBhIGxpbmUgd2l0aCAiJGkrKyIgaXMgcmVjb2duaXplZCBhcyBhbgogICAgIjppbnNlcnQiIGNvbW1hbmQsIGNhdXNpbmcgdGhlIGZvbGxvd2luZyAiZW5kZnVuY3Rpb24iIG5vdCB0byBiZSBmb3VuZC4KICAgIEFkZCBza2lwcGluZyB0aGlzIHBlcmwgY29uc3RydWN0aW9uIGluc2lkZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KNyAgIFdoZW4gJ3R0aW1lb3V0bGVuJyBpcyAxMCBhbmQgJ3RpbWVvdXRsZW4nIGlzIDEwMDAsIHRoZXJlIGlzIGEga2V5Y29kZQogICAgIjxFc2M+YSIgYW5kIGEgbWFwcGluZyA8RXNjPngiLCB3aGVuIHR5cGluZyAiPEVzYz5hIiB3aXRoIGhhbGYgYSBzZWNvbmQKICAgIGRlbGF5IHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgYSBrZXljb2RlLiAoSGFucyBHaW56ZWwpCjcgICAiOmJvdHJpZ2h0IDEgbmV3IiB0d2ljZSBjYXVzZXMgYWxsIHdpbmRvdyBoZWlnaHRzIHRvIGJlIGNoYW5nZWQuICBNYWtlIHRoZQogICAgYm90dG9tIHdpbmRvdyBvbmx5IGJpZ2dlciBhcyBtdWNoIGFzIG5lZWRlZC4KNyAgICJbcCIgZG9lc24ndCB3b3JrIGluIFZpc3VhbCBtb2RlLiAoRGF2aWQgQnJvd24pCjcgICBUaGUgQ3lnd2luIGFuZCBNaW5nVyBtYWtlZmlsZXMgZGVmaW5lICJQQyIsIGJ1dCBpdCdzIG5vdCB1c2VkIGFueXdoZXJlLgogICAgUmVtb3ZlPyAoRGFuIFNoYXJwKQo5ICAgVGhlIGFyZ3VtZW50IDxmLWFyZ3M+IG9mIGEgdXNlciBjb21tYW5kIGRvZXNuJ3QgaGFuZGxlIGJhY2tzbGFzaGVzCiAgICBwcm9wZXJseS4gICJDbWQgXCBlIiBpcyBvbmUgYXJndW1lbnQsICJDbWQgXFwgZSIgc3RpbGwgaXMgb25lIGFyZ3VtZW50LgogICAgIkNtZCBcICBlIiBpcyB0d28gYXJndW1lbnRzLCBmaXJzdCBvbmUgZW5kaW5nIGluIHNwYWNlLiAoS29udHJhIEdlcmdlbHkpCjkgICBVc2VyIGNvbW1hbmRzIHVzZSB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0IHRoZXkgd2VyZSBkZWZpbmVkIGluLiAgVGhpcwogICAgY2F1c2VzIGEgInM6dmFyIiBhcmd1bWVudCB0byB1bmV4cGVjdGVkbHkgdXNlIGEgdmFyaWFibGUgaW4gdGhlIGRlZmluaW5nCiAgICBzY3JpcHQsIG5vdCB0aGUgY2FsbGluZyBzY3JpcHQuICBBZGQgYW4gYXJndW1lbnQgdG8gIjpjb21tYW5kIjoKICAgICIta2VlcGNvbnRleHQiLiAgRG8gcmVwbGFjZSA8U0lEPiwgc28gdGhhdCBhIGZ1bmN0aW9uIGluIHRoZSBkZWZpbmluZwogICAgc2NyaXB0IGNhbiBiZSBjYWxsZWQuCjggICBUaGUgSmFwYW5lc2UgbWVzc2FnZSB0cmFuc2xhdGlvbnMgZm9yIE1TLVdpbmRvd3MgYXJlIGNhbGxlZCBqYS5zamlzLnBvLAogICAgYnV0IHRoZXkgdXNlIGVuY29kaW5nIGNwOTMyLiAgUmVuYW1lIHRoZSBmaWxlIGFuZCBjaGVjayB0aGF0IGl0IHN0aWxsCiAgICB3b3Jrcy4KOSAgIFdoZW4gYSBzeW50YXggcmVnaW9uIGRvZXMgbm90IHVzZSAia2VlcGVuZCIgYW5kIGEgY29udGFpbmVkIGl0ZW0gZG9lcyB1c2UKICAgICJleHRlbmQiLCB0aGlzIG1ha2VzIHRoZSBvdXRlciByZWdpb24gc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBjb250YWluZWQKICAgIHJlZ2lvbi4gKEx1dHogRXltZXJzKSAgQW5vdGhlciBleGFtcGxlIE5vdiAxNCAyMDAyLgo4ICAgQSB2ZXJ5IGxvbmcgbWVzc2FnZSBpbiBjb25maXJtKCkgY2FuJ3QgYmUgcXVpdC4gIE1ha2UgdGhpcyBwb3NzaWJsZSB3aXRoCiAgICBDVFJMLUMuCjcgICBjbGlwX3gxMV9vd25fc2VsZWN0aW9uKCkgdXNlcyBDdXJyZW50VGltZSwgdGhhdCBpcyBub3QgYWxsb3dlZC4gIFZOQyBYCiAgICBzZXJ2ZXIgaGFzIGEgcHJvYmxlbSB3aXRoIHRoaXMuICAoTWFyayBXYWdnb25lcikgUmVtZW1iZXJpbmcgdGhlIHRpbWVzdGFtcAogICAgb2YgZXZlbnRzIGlzbid0IGFsd2F5cyBwb3NzaWJsZS4gIFdlIGRvbid0IGdldCB0aGVtIGluIGFuIHh0ZXJtLiAgR1RLCiAgICBkb2Vzbid0IG9idGFpbiB0aGUgc2VsZWN0aW9uIGFnYWluIHdoZW4gdGhlIHRpbWVzdGFtcCBkaWZmZXJzLCB0aHVzIGl0CiAgICB3b24ndCB3b3JrIGZvciBHVEsgYW55d2F5Lgo4ICAgV2hlbiB0aGUgY2xpcGJvYXJkIGlzbid0IHN1cHBvcnRlZDogIjp5YW5rKiIgZ2l2ZXMgYSBjb25mdXNpbmcgZXJyb3IKICAgIG1lc3NhZ2UuICBTcGVjaWZpY2FsbHkgbWVudGlvbiB0aGF0IHRoZSByZWdpc3RlciBuYW1lIGlzIGludmFsaWQuCjggICAiZ2YiIGFsd2F5cyBleGNsdWRlcyB0cmFpbGluZyBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLiAgZmlsZV9uYW1lX2luX2xpbmUoKQogICAgaXMgY3VycmVudGx5IGZpeGVkIHRvIHVzZSAiLiw6OyEiLiAgQWRkIGFuIG9wdGlvbiB0byBtYWtlIHRoaXMKICAgIGNvbmZpZ3VyYWJsZT8KOCAgICdoa21hcCcgc2hvdWxkIHByb2JhYmx5IGJlIGdsb2JhbC1sb2NhbC4KOSAgIFdoZW4gIiQiIGlzIGluICdjcG9wdGlvbnMnIGFuZCBmb2xkaW5nIGlzIGFjdGl2ZSwgYSAiQyIgY29tbWFuZCBjaGFuZ2VzCiAgICB0aGUgZm9sZHMgYW5kIHJlc2V0cyB3X2xpbmVzX3ZhbGlkLiAgVGhlIGRpc3BsYXkgdXBkYXRpbmcgZG9lc24ndCB3b3JrCiAgICB0aGVuLiAoUHJpdGVzaCBNaXN0cnkpCjggICAiOnMhZnJvbSF0byEiIHdvcmtzLCBidXQgIjpzbWFnaWMhZnJvbSF0byEiIGRvZXNuJ3QuICBJdCBzZWVzIHRoZSAiISIgYXMgYQogICAgZmxhZyB0byB0byB0aGUgY29tbWFuZC4gIFNhbWUgZm9yICI6c25vbWFnaWMiLiAoSm9oYW4gU3BldHopCjggICBVc2luZyAiOnMiIGluIGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgcHJldmlvdXMgcmVwbGFjZW1lbnQgc3RyaW5nLiAgU2F2ZQogICAgIm9sZF9zdWIiIGluIHNhdmVfc2VhcmNoX3BhdHRlcm5zKCk/CjggICBXaGVuIGFwcGVuZGluZyB0byBhIGZpbGUgYW5kICdwYXRjaG1vZGUnIGlzbid0IGVtcHR5LCBhIGJhY2t1cCBmaWxlIGlzCiAgICBhbHdheXMgd3JpdHRlbiwgZXZlbiB3aGVuIHRoZSBvcmlnaW5hbCBmaWxlIGFscmVhZHkgZXhpc3RzLgo3ICAgV2hlbiB1c2luZyAiZGF3IiBvbiB0aGUgbGFzdCB3b3JkIGluIGEgZmlsZSBhbmQgdGhpcyBpcyBhIHNpbmdsZSBsZXR0ZXIsCiAgICBub3RoaW5nIGlzIGRlbGV0ZWQuICBTaG91bGQgZGVsZXRlIHRoZSBsZXR0ZXIgYW5kIHByZWNlZGluZyB3aGl0ZSBzcGFjZS4KOSAgIFdoZW4gZ2V0dGluZyBmb2N1cyB3aGlsZSB3cml0aW5nIGEgbGFyZ2UgZmlsZSwgY291bGQgd2FybiBmb3IgdGhpcyBmaWxlCiAgICBiZWluZyBjaGFuZ2VkIG91dHNpZGUgb2YgVmltLiAgQXZvaWQgY2hlY2tpbmcgdGhpcyB3aGlsZSB0aGUgZmlsZSBpcyBiZWluZwogICAgd3JpdHRlbi4KOSAgIFRoZSAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyBtb2RlbGluZXMiIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYW4KICAgIGVycm9yIG51bWJlci4KNyAgIFRoZSBtZXNzYWdlIGluIGJ0X2RvbnR3cml0ZV9tc2coKSBjb3VsZCBiZSBjbGVhcmVyLgo4ICAgVGhlIHNjcmlwdCBJRCB0aGF0IGlzIHN0b3JlZCB3aXRoIGFuIG9wdGlvbiBhbmQgZGlzcGxheWVkIHdpdGggIjp2ZXJib3NlCiAgICBzZXQiIGlzbid0IHJlc2V0IHdoZW4gdGhlIG9wdGlvbiBpcyBzZXQgaW50ZXJuYWxseS4gIEZvciBleGFtcGxlIHdoZW4KICAgICdmb2xkbGV2ZWwnIGlzIHNldCBmcm9tICdmb2xkbGV2ZWxzdGFydCcuCjggICBJbiB0aGUgZmlsZWZvcm1hdCBkaWFsb2csICJDYW5jZWwiIGlzbid0IHRyYW5zbGF0ZWQuICBBZGQgYSBnbG9iYWwKICAgIHZhcmlhYmxlIGZvciB0aGlzLiAoRWR1YXJkbyBGZXJuYW5kZXopCjkgICBXaGVuIGVkaXRpbmcgYSBmaWxlIHdpdGggJ3JlYWRvbmx5JyBzZXQsIHRoZXJlIGlzIG5vIGNoZWNrIGZvciBhbiBleGlzdGluZwogICAgc3dhcCBmaWxlLiAgVGhlbiB1c2luZyAiOndyaXRlIiAod2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMpIGRvZXNuJ3QgZ2l2ZQogICAgYSB3YXJuaW5nIGVpdGhlci4gIFNob3VsZCBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3dhcCBmaWxlIHdpdGhvdXQgY3JlYXRpbmcKICAgIG9uZS4KNyAgIFdoZW4gJ3Nob3dicmVhaycgaXMgc2V0LCB0aGUgYW1vdW50IG9mIHNwYWNlIGEgVGFiIG9jY3VwaWVzIGNoYW5nZXMuCiAgICBTaG91bGQgd29yayBsaWtlICdzaG93YnJlYWsnIGlzIGluc2VydGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIFRhYnMuCjcgICBXaGVuICdtb3VzZWZvY3VzJyBpcyBzZXQgYW5kIHN3aXRjaGluZyB0byBhbm90aGVyIHdpbmRvdyB3aXRoIGEgdHlwZWQKICAgIGNvbW1hbmQsIHRoZSBtb3VzZSBwb2ludGVyIG1heSBiZSBtb3ZlZCB0byBhIHBhcnQgb2YgdGhlIHdpbmRvdyB0aGF0J3MKICAgIGNvdmVyZWQgYnkgYW5vdGhlciB3aW5kb3cgYW5kIHdlIGxvc2UgZm9jdXMuICBPbmx5IG1vdmUgaW4gdGhlIHkKICAgIGRpcmVjdGlvbiwgbm90IGhvcml6b250YWxseT8KOCAgIFdoZW4gdXNpbmcgQ1RSTC1EIGFmdGVyICI6aGVscCIsIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyB0byBhCiAgICB0aG91c2FuZCwgb3RoZXJ3aXNlIHVzaW5nIENUUkwtRCB3aXRob3V0IGFuIGFyZ3VtZW50IHRha2VzIHRvbyBsb25nLgo4ICAgIjpoYXJkY29weSI6CiAgICAtIFVzaW5nIHRoZSBjdGVybV9jb2xvcltdIHRhYmxlIGlzIHdyb25nIHdoZW4gdF9jb2xvcnMgaXMgPiAxNi4KICAgIC0gTmVlZCB0byBoYW5kbGUgdW5wcmludGFibGUgY2hhcmFjdGVycy4KICAgIC0gV2luMzI6IE9uIGEgQiZXIHByaW50ZXIgc3ludGF4IGhpZ2hsaWdodGluZyBpc24ndCB2aXNpYmxlLiAgUGVyZm9ybQogICAgICBkaXRoZXJpbmcgdG8gbWFrZSBncmV5IHRleHQ/CiAgICAtIEFkZCBhIGZsYWcgaW4gJ3ByaW50b3B0aW9ucycgdG8gYWRkIGFuIGVtcHR5IHBhZ2UgdG8gbWFrZSB0aGUgdG90YWwKICAgICAgbnVtYmVyIGV2ZW4uICAiYWRkZW1wdHkiPyAoTWlrZSBXaWxsaWFtcykKICAgIC0gUmVzcGVjdCAnbGluZWJyZWFrJy4gIFBlcmhhcHMgYWxzbyAnc2hvd2JyZWFrJz8KICAgIC0gU2hvdWxkIGludGVycHJldGVkIENUUkwtTCBhcyBhIHBhZ2UgYnJlYWsuCiAgICAtIEdyZXkgbGluZSBudW1iZXJzIGFyZSBub3QgYWx3YXlzIHJlYWRhYmxlLiAgQWRkIGZpZWxkIGluICdwcmludG9wdGlvbnMnLgogICAgICBEZWZhdWx0IHRvIGJsYWNrIHdoZW4gbm8gc3ludGF4IGhpZ2hsaWdodGluZy4KICAgIC0gQmUgYWJsZSB0byBwcmludCBhIHdpbmRvdyBpbiBkaWZmIG1vZGUuCiAgICAtIEJlIGFibGUgdG8gc3BlY2lmeSBhIGNvbG9yc2NoZW1lIHRvIHVzZSBmb3IgcHJpbnRpbmcuICBBbmQgYSBzZXBhcmF0ZQogICAgICBvbmUgZm9yIEImVyBwcmludGluZyAoaWYgdGhhdCBjYW4gYmUgZGV0ZWN0ZWQpLgo4ICAgSW4gVmlzdWFsIGJsb2NrIG1vZGUgd2l0aCAnbGJyJyBzZXQsIGEgY2hhbmdlIGNvbW1hbmQgZG9lc24ndCBpbnNlcnQgdGhlCiAgICB0ZXh0IGluIGZvbGxvd2luZyBsaW5lcyB3aGVyZSB0aGUgbGluZWJyZWFrIGNoYW5nZXMuCjkgICBkb3NpbnN0LmM6IFRoZSBESkdQUCB2ZXJzaW9uIGNhbid0IHVuaW5zdGFsbCB0aGUgVW5pbnN0YWxsIHJlZ2lzdHJ5IGtleSBvbgogICAgV2luZG93cyBOVC4gIEhvdyB0byBpbnN0YWxsIGEgLmluZiBmaWxlIG9uIFdpbmRvd3MgTlQgYW5kIGhvdyB0byBkZXRlY3QKICAgIHRoYXQgV2luZG93cyBOVCBpcyBiZWluZyB1c2VkPwo4ICAgV2hlbiAndmlydHVhbGVkaXQnIGlzICJibG9jayxpbnNlcnQiIGFuZCBlbmNvZGluZyBpcyAidXRmLTgiLCBzZWxlY3RpbmcgYQogICAgYmxvY2sgb2Ygb25lIGRvdWJsZS13aWRlIGNoYXJhY3RlciwgdGhlbiAiZCIgZGVsZXRlcyBvbmx5IGhhbGYgb2YgaXQuCjggICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0LCBzaG91bGQgIkkiIGluIGJsb2Nrd2lzZSB2aXN1YWwgbW9kZSBhbHNvIGluc2VydAogICAgaW4gbGluZXMgdGhhdCBkb24ndCBleHRlbmQgaW50byB0aGUgYmxvY2s/CjggICBXaXRoICd2aXJ0dWFsZWRpdCcgc2V0LCBpbiBJbnNlcnQgbW9kZSBqdXN0IGFmdGVyIHRoZSBlbmQgb2YgbGluZSwgQ1RSTC1PCiAgICB5aCBkb2VzIG5vdCB5YW5rIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGluZS4gKFBhdmVsIFBhcHVzaGV2KQogICAgRG9pbmcgImhsIiBmaXJzdCBhcHBlYXJzIHRvIG1ha2UgaXQgd29yay4KOCAgIFdpdGggJ3ZpcnR1YWxlZGl0JyBzZXQgaXQncyBwb3NzaWJsZSB0byBtb3ZlIGludG8gdGhlIGJsYW5rIGFyZWEgZnJvbQogICAgJ2xpbmVicmVhaycuCjggICBXaXRoICd2aXJ0dWFsZWRpdCcgc2V0IGFuZCAnc2VsZWN0aW9uJyAiZXhjbHVzaXZlIiwgYSBWaXN1YWwgc2VsZWN0aW9uCiAgICB0aGF0IGVuZHMgaW4gb3IgYWZ0ZXIgYSB0YWIsICJkIiBkb2Vzbid0IGRlbGV0ZSAocGFydCBvZikgdGhlIHRhYi4KICAgIChIZWxtdXQgU3RpZWdsZXIpCjggICBXaXRoICd2aXJ0dWFsZWRpdCcgc2V0LCBhIGJsb2Nrd2lzZSBWaXN1YWwgc2VsZWN0aW9uIHRoYXQgc3RhcnRzIGFuZCBlbmRzCiAgICBpbiBhIHRhYiwgIjwiIHNoaWZ0cyB0b28gbXVjaC4gKEhlbG11dCBTdGllZ2xlcikKOSAgIFdoZW4ganVtcGluZyB0byBhIHRhZywgdGhlIHNlYXJjaCBwYXR0ZXJuIGlzIHB1dCBpbiB0aGUgaGlzdG9yeS4gIFdoZW4KICAgICdtYWdpYycgaXMgb24sIHRoZSBwYXR0ZXJuIG1heSBub3Qgd29yay4gIFRyYW5zbGF0ZSB0aGUgcGF0dGVybiBkZXBlbmRpbmcKICAgIG9uIHBfbWFnaWMgd2hlbiBwdXR0aW5nIGl0IGluIHRoZSBoaXN0b3J5PyAgQWx0ZXJuYXRpdmU6IFN0b3JlIHZhbHVlIG9mCiAgICAnbWFnaWMnIGluIGhpc3RvcnkuICAoTWFyZ28pCjkgICBvcHR3aW4udmltOiBSZXN0b3JpbmcgYSBtYXBwaW5nIGZvciA8U3BhY2U+IG9yIDxDUj4gaXMgbm90IGNvcnJlY3QgZm9yCiAgICAiOm5vcmVtYXAiLiAgQWRkICJtYXBjbWQoe3N0cmluZ30sIHttb2RlfSk/ICBVc2UgY29kZSBmcm9tICI6bWtleHJjIi4KOSAgIGluY3NlYXJjaCBpcyBpbmNvcnJlY3QgZm9yICIvdGhhdC88UmV0dXJuPi90aGlzLzsvLyIgKGxhc3Qgc2VhcmNoIHBhdHRlcm4KICAgIGlzbid0IHVwZGF0ZWQpLgo5ICAgdGVybV9jb25zb2xlIGlzIHVzZWQgYmVmb3JlIGl0IGlzIHNldCAobXNkb3MsIEFtaWdhKS4KOSAgIEdldCBvdXQtb2YtbWVtb3J5IGZvciAiOmcvXi8sJHMvL0AvIiBvbiAxMDAwIGxpbmVzLCB0aGlzIGlzIG5vdCBoYW5kbGVkCiAgICBjb3JyZWN0bHkuICBHZXQgbWFueSBlcnJvciBtZXNzYWdlcyB3aGlsZSByZWRyYXdpbmcgdGhlIHNjcmVlbiwgd2hpY2gKICAgIGNhdXNlIGFub3RoZXIgcmVkcmF3LCBldGMuCjggICBbPEMtST4gZG9lc24ndCB3b3JrIHdoZW4gJyonIGlzIGluICdpc2tleXdvcmQnLiAgZmluZF9wYXR0ZXJuX2luX3BhdGgoKQogICAgbXVzdCBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLgo4ICAgVmltIGNhbiBvdmVyd3JpdGUgYSByZWFkLW9ubHkgZmlsZSB3aXRoICI6dyEiLiAgIjp3IiBjYW4ndCBvdmVyd3JpdGUgYW4KICAgIGV4aXN0aW5nIGZpbGUsICJ3ISIgY2FuLCBidXQgcGVyaGFwcyBub3QgYSByZWFkLW9ubHkgZmlsZT8gIFRoZW4gdXNlCiAgICAiOnchISIgZm9yIHRoYXQuCiAgICBPciBhc2sgZm9yIHBlcm1pc3Npb24gdG8gb3ZlcndyaXRlIGl0IChpZiBmaWxlIGNhbiBiZSBtYWRlIHdyaXRhYmxlKSBhbmQKICAgIHJlc3RvcmUgZmlsZSB0byByZWFkb25seSBhZnRlcndhcmRzLgogICAgT3ZlcndyaXRpbmcgYSBmaWxlIGZvciB3aGljaCBhIHN3YXAgZmlsZSBleGlzdHMgaXMgc2ltaWxhciBpc3N1ZS4KNyAgIFdoZW4gY29tcGlsZWQgd2l0aCAieHRlcm1fY2xpcGJvYXJkIiwgc3RhcnR1cCBjYW4gYmUgc2xvd2VyIGFuZCBtaWdodCBnZXQKICAgIGVycm9yIG1lc3NhZ2UgZm9yIGludmFsaWQgJERJU1BMQVkuICBUcnkgY29ubmVjdGluZyB0byB0aGUgWCBzZXJ2ZXIgaW4gdGhlCiAgICBiYWNrZ3JvdW5kIChmb3JrZWQpLCBzbyB0aGF0IFZpbSBzdGFydHMgdXAgcXVpY2tlcj8gIENvbm5lY3QgYXMgc29vbiBhcwogICAgdGhlIGNsaXBib2FyZCBpcyB0byBiZSB1c2VkIChWaXN1YWwgc2VsZWN0IG1vZGUgc3RhcnRzLCBwYXN0ZSBmcm9tCiAgICBjbGlwYm9hcmQpCjcgICBYMTE6IFNvbWUgcGVvcGxlIHByZWZlciB0byB1c2UgQ0xJUEJPQVJEIGluc3RlYWQgb2YgUFJJTUFSWSBmb3IgdGhlIG5vcm1hbAogICAgc2VsZWN0aW9uLiAgQWRkIGFuICJ4Y2xpcGJvYXJkIiBhcmd1bWVudCB0byB0aGUgJ2NsaXBib2FyZCcgb3B0aW9uPyAoTWFyawogICAgV2FnZ29uZXIpCjggICBGb3IgeHRlcm0gbmVlZCB0byBvcGVuIGEgY29ubmVjdGlvbiB0byB0aGUgWCBzZXJ2ZXIgdG8gZ2V0IHRoZSB3aW5kb3cKICAgIHRpdGxlLCB3aGljaCBjYW4gYmUgc2xvdy4gIENhbiBhbHNvIGdldCB0aGUgdGl0bGUgd2l0aCAiPEVzYz5bMjF0Iiwgbm8KICAgIG5lZWQgdG8gdXNlIFgxMSBjYWxscy4gIFRoaXMgcmV0dXJucyAiPEVzYz5dbHt0aXRsZX08RXNjPlwiLgo2ICAgV2hlbiB0aGUgeHRlcm0gcmVwb3J0cyB0aGUgbnVtYmVyIG9mIGNvbG9ycywgYSByZWRyYXcgb2NjdXJzLiAgVGhpcyBpcwogICAgYW5ub3lpbmcgb24gYSBzbG93IGNvbm5lY3Rpb24uICBXYWl0IGZvciB0aGUgeHRlcm0gdG8gcmVwb3J0IHRoZSBudW1iZXIgb2YKICAgIGNvbG9ycyBiZWZvcmUgZHJhd2luZyB0aGUgc2NyZWVuLiAgV2l0aCBhIHRpbWVvdXQuCjggICBXaGVuIHRoZSBidWlsdGluIHh0ZXJtIHRlcm1jYXAgY29udGFpbnMgY29kZXMgdGhhdCBhcmUgbm90IHdhbnRlZCwgbmVlZCBhCiAgICB3YXkgdG8gYXZvaWQgdXNpbmcgdGhlIGJ1aWx0aW4gdGVybWNhcC4KOCAgIFh0ZXJtIHNlbmRzIF5bW0ggZm9yIDxIb21lPiBhbmQgXltbRiBmb3IgPEVuZD4gaW4gc29tZSBtb2RlLiAgQWxzbwogICAgcmVjb2duaXplIHRoZXNlIGtleXM/ICBNb3N0bHkgdXNlZnVsIGZvciB4dGVybSBzaW11bGF0b3JzLCBsaWtlIGdub21ldGVybS4KICAgIFNlZSBodHRwOi8vZGlja2V5Lmhpcy5jb20veHRlcm0veHRlcm0uZmFxLmh0bWwjeHRlcm1fcGNfc3R5bGUuCjggICAnWyBhbmQgJ10gc2hvdWxkIGJlIHNldCB0byBzdGFydC9lbmQgb2YgbGluZSB3aGVuIHVzaW5nIGEgbGluZXdpc2Ugb3BlcmF0b3IKICAgIChlLmcuLCAiOnciKS4KOCAgIENUUkwtQSBjYW4ndCBoYW5kbGUgYmlnICJsb25nIiBudW1iZXJzLCB0aGV5IGJlY29tZSBuZWdhdGl2ZS4gIENoZWNrIGZvcgogICAgIi0iIGNoYXJhY3RlciwgaWYgbm90IHByZXNlbnQsIHVzZSB1bnNpZ25lZCBsb25nLgo4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgIiMiIGluIHRoZSBmaXJzdCBjb2x1bW4KICAgIGZvciAiPj4iLgo4ICAgQWRkIHN1c3BlbmRpbmcgd2l0aCBDVFJMLVogYXQgdGhlICJtb3JlIiBwcm9tcHQsIGFuZCB3aGVuIGV4ZWN1dGluZyBhIGxvbmcKICAgIHNjcmlwdCBpbiBkb19jbWRsaW5lKCkuCjggICBXaGVuIHVzaW5nICdoaWRkZW4nLCBtYW55IHN3YXAgZmlsZXMgd2lsbCBiZSBvcGVuLiAgV2hlbiBWaW0gcnVucyBpbnRvIHRoZQogICAgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBmaWxlcywgZXJyb3IgbWVzc2FnZXMgd2lsbCBhcHBlYXIuICBEZXRlY3QgdGhhdAogICAgdGhpcyBwcm9ibGVtIGlzIHByZXNlbnQsIGFuZCBjbG9zZSBhbnkgaGlkZGVuIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZQogICAgY2hhbmdlcy4KOCAgIFdpdGggJ3ZpbWluZm8nIHNldCBzdWNoIHRoYXQgdGhlICIudmltaW5mbyIgZmlsZSBpcyB3cml0dGVuIG9uIGEgRkFUCiAgICBmaWxlc3lzdGVtLCBhbiBpbGxlZ2FsIGZpbGUgbmFtZSBtYXkgYmUgY3JlYXRlZDogIi52aW0iLgo4ICAgRm9yIGVhY2ggYnVmZmVyIHRoYXQgaXMgb3BlbmVkLCB0aGUgdmltaW5mbyBmaWxlIGlzIG9wZW5lZCBhbmQgcmVhZCB0bwogICAgY2hlY2sgZm9yIGZpbGUgbWFya3MuICBUaGlzIGNhbiBiZSBzbG93Lgo3ICAgSW4geHRlcm0sIHJlY29nbml6ZSBib3RoIHZ0MTAwIGFuZCB2dDIyMCBjdXJzb3Iga2V5cy4gIENoYW5nZQogICAgYWRkX3Rlcm1jb2RlKCkgdG8gbm90IHJlbW92ZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgYSBuYW1lLCB3aGVuIGl0J3MKICAgIG5lZWRlZC4KICAgIE5lZWQgYSBnZW5lcmljIHNvbHV0aW9uIHRvIHJlY29nbml6ZSBkaWZmZXJlbnQgY29kZXMgZm9yIHRoZSBzYW1lIGtleS4KOCAgIENvcmUgZHVtcCB3aXRoaW4gc2lnbmFsIGZ1bmN0aW9uOiBnZGIgZG9lc24ndCBzaG93IHN0YWNrIGJhY2t0cmFjZSEgIE9wdGlvbgogICAgdG8gc2tpcCBjYXRjaF9zaWduYWxzKCk/CjkgICBSZXBlYXRpbmcgYSAiY3ciIHdpdGggIi4iIGRvZXNuJ3Qgd29yayBpZiB0aGUgdGV4dCB3YXMgcGFzdGVkIGZyb20gdGhlCiAgICBjbGlwYm9hcmQuIChUaG9tYXMgSm9uZXMpICBJdCdzIGJlY2F1c2UgdGhlIG1lbnUvdG9vbGJhciBpdGVtIGV4aXRzIEluc2VydAogICAgbW9kZSBhbmQgdXNlcyAiZ1AiLiAgSG93IHRvIGZpeCB0aGlzIHdpdGhvdXQgYnJlYWtpbmcgaW5zZXJ0aW5nIGEgYmxvY2sgb2YKICAgIHRleHQ/CjggICBJbiBSZXBsYWNlIG1vZGUgcGFzdGluZyBmcm9tIHRoZSBjbGlwYm9hcmQgKHVzaW5nIG1lbnUgb3IgdG9vbGJhcikgaW5zZXJ0cwogICAgYWxsIHRoZSB0ZXh0LiAgQWRkICI6cm1lbnUiPwo4ICAgUGFzdGluZyB3aXRoIHRoZSBtb3VzZSBpbiBSZXBsYWNlIG1vZGUgaW5zZXJ0cyB0aGUgdGV4dCwgaW5zdGVhZCBvZgogICAgb3ZlcndyaXRpbmcsIHdoZW4gaXQgaXMgbW9yZSB0aGFuIG9uZSBsaW5lLiAgU2FtZSBmb3IgdXNpbmcgPEMtUj4uCjkgICBDVFJMLUUgYW5kIENUUkwtWSBkb24ndCB3b3JrIGluIHNtYWxsIHdpbmRvdyB3aGVuICdzbycgaXMgNCBhbmQgbGluZXMgYXJlCiAgICB3cmFwcGluZyAoQWNldmVkby9pbi4yMjYpLiAgRS5nLiwgd2hlbiB1c2luZyBDVFJMLUUsIHdpbmRvdyBoZWlnaHQgNywKICAgIHdpbmRvdyBtaWdodCBhY3R1YWxseSBzY3JvbGwgZG93biB3aGVuIGxhc3QgbGluZSBvZiBidWZmZXIgaXMgZGlzcGxheWVkLgogICAgLS0+IFJlbWVtYmVyIGlmIHRoZSBwcmV2aW91cyBjb21tYW5kIHdhcyAiY3Vyc29yIGZvbGxvd3Mgc2NyZWVuIiBvcgogICAgInNjcmVlbiBmb2xsb3cgY3Vyc29yIiBhbmQgdXNlIHRoaXMgaW4gY3Vyc3VwZGF0ZSgpLgo3ICAgdGlsZGVfcmVwbGFjZSgpIGNhbiBvbmx5IGhhbmRsZSAifi8iLCBzaG91bGQgYWxzbyBkbyAifnVzZXIvIi4KICAgIEdldCB0aGUgbGlzdCBvZiBob21lIGRpcmVjdG9yaWVzIChmcm9tIC9ldGMvcGFzc3dkPyAgVXNlIGdldHB3ZW50KCkpIGFuZAogICAgdXNlIHNvbWUgY2xldmVyIGFsZ29yaXRobSB0byBtYXRjaCBhIHBhdGggd2l0aCB0aGF0LiAgRmluZCBjb21tb24gc3RyaW5ncwogICAgaW4gdGhlIGxpc3Q/CjggICBXaGVuIGRyYWdnaW5nIHN0YXR1cyBsaW5lIHdpdGggbW91c2UsIHNvbWV0aW1lcyBhIGp1bXAgd2hlbiBmaXJzdCBjbGlja2luZwogICAgb24gdGhlIHN0YXR1cyBsaW5lIChjYXVzZWQgYnkgJ3dpbmhlaWdodCcpLiAgU2VsZWN0IHdpbmRvdyBvbiBidXR0b24gdXAsCiAgICBpbnN0ZWFkIG9mIG9uIGJ1dHRvbiBkb3duLgo4ICAgRHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lIGRvZXNuJ3Qgc2Nyb2xsIGJ1dCByZWRyYXcuCjkgICBFdmFsdWF0aW5nICdzdGF0dXNsaW5lJyBpbiBidWlsZF9zdGxfc3RyX2hsKCkgZG9lcyBub3QgcHJvcGVybHkgY2hlY2sgZm9yCiAgICByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBhdmFpbGFibGUgYnVmZmVyLgo4ICAgV2hlbiBwZXJmb3JtaW5nIGluY3JlbWVudGFsIHNlYXJjaCwgc2hvdWxkIGFib3J0IHNlYXJjaGluZyBhcyBzb29uIGFzIGEKICAgIGNoYXJhY3RlciBpcyB0eXBlZC4KOCAgIFdoZW4gdGhlIHZhbHVlIG9mICRNQUtFIGNvbnRhaW5zIGEgcGF0aCwgY29uZmlndXJlIGNhbid0IGhhbmRsZSB0aGlzLgogICAgSXQncyBhbiBhdXRvY29uZiBidWcuICBSZW1vdmUgdGhlIHBhdGggZnJvbSAkTUFLRSB0byB3b3JrIGFyb3VuZCBpdC4KOCAgIEhvdyB0byBzZXQgVklNUkNfRklMRSB0byBcInNvbWV0aGluZ1wiIGZvciBjb25maWd1cmU/ICBXaHkgZG9lcyB0aGlzIG5vdAogICAgd29yazogQ0ZMQUdTPSctRFZJTVJDX0ZJTEU9XCIvbXlkaXIvbXlmaWxlXCInIC4vY29uZmlndXJlCjggICBUaGUgdGVtcG9yYXJ5IGZpbGUgaXMgc29tZXRpbWVzIG5vdCB3cml0YWJsZS4gIENoZWNrIGZvciB0aGlzLCBhbmQgdXNlIGFuCiAgICBhbHRlcm5hdGUgbmFtZSB3aGVuIGl0IGlzbid0LiAgT3IgYWRkIHRoZSAndGVtcHRlbXBsYXRlJyBvcHRpb246IHRlbXBsYXRlCiAgICBmb3IgdGhlIHRlbXAgZmlsZSBuYW1lICI6c2V0IHRlbXB0ZW1wbGF0ZT0vdXNyL3RtcC8/Pz8/Py50bXAiLgogICAgQWxzbzogV2luMzIgdmVyc2lvbiB1c2VzIFdpbmRvd3MgdGVtcCBkaXJlY3RvcnksIHdoaWNoIG1pZ2h0IG5vdCB3b3JrIGZvcgogICAgY3lnd2luIGJhc2guCjcgICBHZXQgZXJyb3IgIiosIFwrIG9yIFwoIG9wZXJhbmQgY291bGQgYmUgZW1wdHkiIGZvciBwYXR0ZXJuICJcKC5cKVwxXHszfSIuCiAgICBSZW1lbWJlciBmbGFncyBmb3IgYmFja3JlZmVyZW5jZXMuCjcgICBXaGVuIHN3aXRjaGluZyB0byBEYXlsaWdodCBTYXZpbmcgVGltZSwgVmltIGNvbXBsYWlucyB0aGF0IGEgZmlsZSBoYXMgYmVlbgogICAgY2hhbmdlZCBzaW5jZSBsYXN0IHJlYWQuICBDYW4gd2UgdXNlIGEgZnVuY3Rpb24gdGhhdCB1c2VzIEdNVD8KNyAgIFdoZW4gY29tcGxldGluZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhZnRlciBhICckJywgY2hlY2sgZm9yIGZpbGUgbmFtZXMKICAgIHRoYXQgY29udGFpbiBhICckJyBhZnRlciBhbGwgaGF2ZSBiZWVuIGZvdW5kLgo4ICAgV2hlbiAiY20iIHRlcm1jYXAgZW50cnkgaXMgbWlzc2luZywgc3RhcnRpbmcgZ3ZpbSBzaG91bGRuJ3QgY29tcGxhaW4gYWJvdXQKICAgIGl0LiAoTG9obmVyKSAgVHJ5IG91dCB3aXRoICJ2dDEwMCIgZW50cnksIGNtIHJlcGxhY2VkIHdpdGggY1guCjcgICBXaGVuIGFuIGluY2x1ZGUgZmlsZSBzdGFydHMgd2l0aCAiLi4vIiwgdGhlIGNoZWNrIGZvciBhbHJlYWR5IHZpc2l0aW5nCiAgICB0aGlzIGZpbGUgZG9lc24ndCB3b3JrLiAgTmVlZCB0byBzaW1wbGlmeSB0aGUgZmlsZSBuYW1lLgo3ICAgVGhlIG5hbWVzIGFuZCBjb21tZW50cyBmb3IgdGhlIGFyZ3VtZW50cyBvZiBkb19icm93c2UoKSBhcmUgY29uZnVzaW5nLgogICAgImRmbHQiIGlzbid0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZSB3aGVuICJpbml0ZGlyIiBpcyBub3QgTlVMTCBhbmQKICAgICJpbml0ZGlyIiBpcyB0aGUgZGVmYXVsdCBwYXRoIHRvIGJlIHVzZWQuCjcgICBXaGVuICdzY3JvbGxvZmYnIGlzIGV4YWN0bHkgaGFsZiB0aGUgd2luZG93IGhlaWdodCwgImoiIGNhdXNlcyBhIHNjcm9sbCBvZgogICAgdHdvIGxpbmVzIGF0IGEgdGltZS4gICJrIiBkb2Vzbid0IGRvIHRoaXMuIChDb3J5IFQuIEVjaG9scykKOCAgIFdoZW4gd3JpdGVfdmltaW5mbygpIGlzIHVzZWQgd2hpbGUgdGhlcmUgYXJlIG1hbnkgb3JwaGFuZWQgdmltaW5mbwogICAgdGVtcGZpbGVzIHdyaXRpbmcgdGhlIHZpbWluZm8gZmlsZSBmYWlscy4gIEdpdmUgYSBjbGVhciBlcnJvciBtZXNzYWdlIHNvCiAgICB0aGF0IHRoZSB1c2VyIGtub3dzIGhlIGhhcyB0byBkZWxldGUgdGhlIGZpbGVzLgo3ICAgSXQncyBwb3NzaWJsZSB0byByZWRlZmluZSBhIHNjcmlwdC1sb2NhbCBmdW5jdGlvbiB3aXRoICI6ZnVuYwogICAgPFNOUj4xMjNfVGVzdCgpIi4gKEtyaXNobmEpICBEaXNhbGxvdyB0aGlzLgoKCkkgY2FuJ3QgcmVwcm9kdWNlIHRoZXNlIChpZiB5b3UgY2FuLCBsZXQgbWUga25vdyBob3chKToKOSAgIE5UIDQuMCBvbiBOVEZTIGZpbGUgc3lzdGVtOiBFZGl0aW5nICIuYmFzaHJjIiAoZHJhZyBhbmQgZHJvcCksIGZpbGUKICAgIGRpc2FwcGVhcnMuICBFZGl0aW5nICIueHl6IiBpcyBPSy4gIEFsc28sIGRyYWcmZHJvcCBvbmx5IHdvcmtzIGZvciB0aHJlZQogICAgZmlsZXMuIChNY0NvbGxpc3RlcikKCgpQcm9ibGVtcyB0aGF0IHdpbGwgKHByb2JhYmx5KSBub3QgYmUgc29sdmVkOgotICAgeHRlcm0gdGl0bGU6IFRoZSBmb2xsb3dpbmcgc2NlbmFyaW8gbWF5IG9jY3VyIChlc3AuIHdoZW4gcnVubmluZyB0aGUgVmltCiAgICB0ZXN0IHNjcmlwdCk6IFZpbSAxIHNldHMgdGhlIHRpdGxlIHRvICJmaWxlMSIsIHRoZW4gcmVzdG9yZXMgdGhlIHRpdGxlIHRvCiAgICAieHRlcm0iIHdpdGggYW4gRVNDIHNlcXVlbmNlIHdoZW4gZXhpdGluZy4gIFZpbSAyIG9idGFpbnMgdGhlIG9sZCB0aXRsZQogICAgd2l0aCBhbiBYIGxpYnJhcnkgY2FsbCwgdGhpcyBtYXkgcmVzdWx0IGluICJmaWxlMSIsIGJlY2F1c2UgdGhlIHdpbmRvdwogICAgbWFuYWdlciBoYXNuJ3QgcHJvY2Vzc2VkIHRoZSAieHRlcm0iIHRpdGxlIHlldC4gIENhbiBhcHBhcmVudGx5IG9ubHkgYmUKICAgIHdvcmtlZCBhcm91bmQgd2l0aCBhIGRlbGF5LgotICAgSW4gYSB0ZXJtaW5hbCB3aXRoICdtb3VzZScgc2V0IHN1Y2ggdGhhdCB0aGUgbW91c2UgaXMgYWN0aXZlIHdoZW4gZW50ZXJpbmcKICAgIGEgY29tbWFuZCBsaW5lLCBhZnRlciBleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kIHRoYXQgc2Nyb2xscyB1cCB0aGUKICAgIGRpc3BsYXkgYW5kIHRoZW4gcHJlc3NpbmcgIjoiOiBTZWxlY3RpbmcgdGV4dCB3aXRoIHRoZSBtb3VzZSB3b3JrcyBsaWtlCiAgICB0aGUgZGlzcGxheSB3YXNuJ3Qgc2Nyb2xsZWQuICBWaW0gZG9lc24ndCBrbm93IGhvdyBtdWNoIHRoZSBleHRlcm5hbAogICAgY29tbWFuZCBzY3JvbGxlZCB1cCB0aGUgZGlzcGxheS4gIFVzZSBTaGlmdCB0byBzZWxlY3QgdGV4dC4KLSAgIFggd2luZG93czogV2hlbiAkRElTUExBWSBwb2ludHMgdG8gYSBYIHNlcnZlciB3aGVyZSB0aGVyZSBpcyBubyBhY2Nlc3MKICAgIHBlcm1pc3Npb24sIHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBYIHNlcnZlciBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZS4KICAgIFh0T3BlbkRpc3BsYXkoKSBwcmludHMgdGhpcyBkaXJlY3RseSwgdGhlcmUgaXMgbm8gd2F5IHRvIGF2b2lkIGl0LgotICAgWCB3aW5kb3dzOiBTZXR0aW5nICdndWlmb250c2V0JyB0byBhbiBpbGxlZ2FsIHZhbHVlIHNvbWV0aW1lcyBjcmFzaGVzIFZpbS4KICAgIFRoaXMgaXMgY2F1c2VkIGJ5IGEgZmF1bHQgaW4gYSBYIGxpYnJhcnkgZnVuY3Rpb24sIGNhbid0IGJlIHNvbHZlZCBpbiBWaW0uCi0gICBNb3RpZjogV2hlbiBhZGRpbmcgYSBtZW51IGl0ZW0gIkZpbmQgdGhpcyAmU3ltYm9sIiwgdGhlICJzIiBpbiAidGhpcyIgd2lsbAogICAgYmUgdW5kZXJsaW5lZCwgaW5zdGVhZCBvZiBpbiAiU3ltYm9sIi4gIE1vdGlmIGRvZXNuJ3QgbGV0IHVzIHNwZWNpZnkgd2hpY2gKICAgIGNoYXJhY3RlciBnZXRzIHRoZSBoaWdobGlnaHRpbmcuCi0gICBNb3ZpbmcgdGhlIGN1cnNvciByZW1vdmVzIGNvbG9yIGluIGNvbG9yLXh0ZXJtLiAgVGhpcyBpcyBhIGNvbG9yLXh0ZXJtCiAgICBwcm9ibGVtISAgY29sb3IteHRlcm0gdmVyLiA2LjEgYmV0YSAzIGFuZCBsYXRlciB3b3JrIHByb3Blcmx5LgotICAgSW4genNoLCAiZ3ZpbSYiIGNoYW5nZXMgdGhlIHRlcm1pbmFsIHNldHRpbmdzLiAgVGhpcyBpcyBhIHpzaCBwcm9ibGVtLgogICAgKEplbm5pbmdzKQotICAgUHJvYmxlbSB3aXRoIEhQdGVybSB1bmRlciBYOiBvbGQgY29udGVudHMgb2Ygd2luZG93IGlzIGxvc3QgKENvc2VudGlubykuCi0gICBBbWlnYTogV2hlbiB1c2luZyBxdWlja2ZpeCB3aXRoIHRoZSBNYW54IGNvbXBpbGVyIHdlIG9ubHkgZ2V0IHRoZSBmaXJzdCAyNQogICAgZXJyb3JzLiAgSG93IGRvIHdlIGdldCB0aGUgcmVzdD8KLSAgIEFtaWdhOiBUaGUgIjpjcSIgY29tbWFuZCBkb2VzIG5vdCBhbHdheXMgYWJvcnQgdGhlIE1hbnggY29tcGlsZXIuICBXaHk/Ci0gICBMaW51eDogQSBmaWxlIHdpdGggcHJvdGVjdGlvbiByLS1ydy1ydy0gaXMgc2VlbiByZWFkb25seSBmb3Igb3RoZXJzLiAgVGhlCiAgICBhY2Nlc3MoKSBmdW5jdGlvbiBpbiBHTlUgbGliYyBpcyBwcm9iYWJseSB3cm9uZy4KLSAgIE1TRE9TOiBXaGVuIHVzaW5nIHNtYXJ0ZHJpdmUgd2l0aCB3cml0ZS1iYWNrIGJ1ZmZlcmluZywgd3JpdGluZyB0byBhCiAgICByZWFkb25seSBmbG9wcHkgd2lsbCBjYXVzZSBwcm9ibGVtcy4gIEhvdyB0byB0ZXN0IGZvciBhIHdyaXRhYmxlIGZsb3BweQogICAgZmlyc3Q/Ci0gICBNU0RPUzogQm90aCAxNiBhbmQgMzIgYml0IHZlcnNpb25zOiBGaWxlIG5hbWUgZXhwYW5zaW9uIGRvZXNuJ3Qgd29yayBmb3IKICAgIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBhIGRvdC4gIFRoZXNlIHVzZWQgdG8gYmUgaWxsZWdhbCBmaWxlIG5hbWVzLgotICAgV2hlbiBkb2luZyBhIENUUkwtWiBhbmQgdHlwaW5nIGEgY29tbWFuZCBmb3IgdGhlIHNoZWxsLCB3aGlsZSBWaW0gaXMgYnVzeQogICAgKGUuZy4gd3JpdGluZyBhIGZpbGUpLCB0aGUgY29tbWFuZCBmb3IgdGhlIHNoZWxsIGlzIHNvbWV0aW1lcyBlYXRlbiBieSBWaW0sCiAgICBiZWNhdXNlIHRoZSB0ZXJtaW5hbCBtb2RlIGlzIGNoYW5nZWQgZnJvbSBSQVcgdG8gQ0JSRUFLLgotICAgQW4gb2xkIHZlcnNpb24gb2YgR05VIHRnb3RvIGNhbid0IGhhbmRsZSB0aGUgdGVybWluZm8gY29kZSBmb3IgIkFGIi4gIFRoZQogICAgIiVwMSIgaXMgaW50ZXJwcmV0ZWQgYXMgIiVwIiBhbmQgIjEiLCBjYXVzaW5nIGNvbG9yIG5vdCB0byBiZSB3b3JraW5nLgogICAgRml4OiBDaGFuZ2UgdGhlICIlcDEiIGluIHRoZSAiQUYiIGFuZCAiQUIiIHRlcm1pbmZvIGVudHJpZXMgdG8gIiVwIi4KICAgIChCZW56aW5nZXIpLgotICAgV2hlbiBydW5uaW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgZnJvbSB0aGUgR1VJLCB0eXBlYWhlYWQgaXMgZ29pbmcgdG8gdGhhdAogICAgcHJvZ3JhbSwgbm90IHRvIFZpbS4gIEl0IGxvb2tzIGxpa2UgdGhlIHNoZWxsIGVhdHMgdGhlIGNoYXJhY3RlcnMsIFZpbQogICAgY2FuJ3QgZ2V0IGJhY2sgd2hhdCB0aGUgZXh0ZXJuYWwgY29tbWFuZCBkaWRuJ3QgdXNlLgotICAgV2luMzIgR1VJOiBFcnJvciBjb2RlIGZyb20gZXh0ZXJuYWwgY29tbWFuZCBub3QgcmV0dXJuZWQgaW4gc2hlbGxfZXJyb3IuCiAgICBJdCBhcHBlYXJzIHRoYXQgY21kLmV4ZSBhbmQgY29tbWFuZC5jb20gZG9uJ3QgcmV0dXJuIGFuIGVycm9yIGNvZGUuCi0gICBXaW4zMiBHVUk6IFRoZSBUb29sYmFyIGlzIGEgYml0IHRvbyBoaWdoIHdoZW4gdGhlIGZsYXQgc3R5bGUgaXMgYmVpbmcKICAgIHVzZWQuICBXZSBkb24ndCBoYXZlIGNvbnRyb2wgb3ZlciB0aGUgaGVpZ2h0IG9mIHRoZSBUb29sYmFyLgotICAgV2luMzI6IEFsbCBmaWxlcyBjcmVhdGVkIG9uIHRoZSBkYXkgb2Ygc3dpdGNoaW5nIGZyb20gd2ludGVyIHRvIHN1bW1lcgogICAgdGltZSBjYXVzZSAiY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiIG1lc3NhZ2VzLiAgSXQgZ29lcyBhd2F5IHdoZW4KICAgIHRoZSBmaWxlIGlzIHdyaXR0ZW4gYWdhaW4gdGhlIG5leHQgZGF5LCBvciB0aGUgdGltZXpvbmUgaXMgYWRqdXN0ZWQuCiAgICBESkdQUCB2ZXJzaW9uIGlzIE9LLiAoWmFpbWkpICBMb29rcyBsaWtlIGEgcHJvYmxlbSB3aXRoIHRoZSBXaW4zMiBsaWJyYXJ5LgogICAgUmVib290aW5nIGRvZXNuJ3QgaGVscC4gIFRpbWUgc3RhbXBzIGxvb2sgT0sgaW4gZGlyZWN0b3J5LiAoUGVubikKICAgIElzIHRoaXMgb24gRkFUIChzdG9yZXMgd2FsbCBjbG9jayB0aW1lKSBvciBOVEZTIChzdG9yZXMgVVRTKT8KLSAgIFdpbjMyLCBNUy1XaW5kb3dzIFhQOiAkSE9NRSB1c2VzIHRoZSB3cm9uZyBkcml2ZSB3aGVuIHRoZSB1c2VyIHByb2ZpbGVzCiAgICBhcmUgbm90IG9uIHRoZSBib290IGRpc2suICBUaGlzIGlzIGNhdXNlZCBieSBhIHdyb25nIHZhbHVlIG9mICRIT01FRFJJVkUuCiAgICBUaGlzIGlzIGEgYnVnIGluIFhQLCBzZWUgTVNLQiBhcnRpY2xlIDgxODEzNC4KLSAgIFN1bk9TIDUuNS4xIHdpdGggTW90aWY6IFRoZSBmaWxlIG9wZW4gZGlhbG9nIGRvZXMgbm90IGhhdmUgYSBob3Jpem9udGFsCiAgICBzY3JvbGwgYmFyIGZvciB0aGUgImZpbGVzIiBzZWxlY3Rpb24uICBUaGlzIGlzIGEgcHJvYmxlbSBpbiB0aGUgTW90aWYKICAgIGxpYnJhcmllcywgZ2V0IGEgcGF0Y2ggZnJvbSBTdW4uCi0gICBTb2xhcmlzIDIuNiB3aXRoIEdUSyBhbmQgUGVybDogZ3ZpbSBjcmFzaGVzIHdoZW4gc3RhcnRlZC4gIFByb2JsZW0gd2l0aCBYCiAgICBpbnB1dCBtZXRob2QgY2FsbGVkIGZyb20gR0RLIGNvZGUuICBXaXRob3V0IFBlcmwgaXQgZG9lc24ndCBjcmFzaC4KLSAgIFZNUzogVmltZGlmZiBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgVk1TIGRpZmYsIGJlY2F1c2UgdGhlIG91dHB1dCBsb29rcwogICAgZGlmZmVyZW50LiAgVGhpcyBtYWtlcyB0ZXN0IDQ3IGZhaWwuICBJbnN0YWxsIGEgVW5peC1jb21wYXRpYmxlIGRpZmYuCi0gICBWTVMgdjcuMSBhbmQgb2xkZXI6IFRlc3RzIDIxIGFuZCAzMiBmYWlsLiAgRnJvbSBWTVMgdjcuMS0yIGFuZCBuZXdlciBWaW0KICAgIGRvZXMgbm90IGhhdmUgdGhpcyBiZWhhdmlvci4gKFpvbHRhbiBBcnBhZGZmeSkKLSAgIFdpbjMyIEdVSTogbW91c2Ugd2hlZWwgYWx3YXlzIHNjcm9sbHMgcmlnaHRtb3N0IHdpbmRvdy4gIFRoZSBldmVudHMgYXJyaXZlCiAgICBpbiBWaW0gYXMgaWYgdGhlIHJpZ2h0bW9zdCBzY3JvbGxiYXIgd2FzIHVzZWQuCi0gICBHVEsgd2l0aCBHbm9tZTogUHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHN0YXJ0aW5nIHVwOgoJR2RrLVdBUk5JTkcgKio6IGxvY2FsZSBub3Qgc3VwcG9ydGVkIGJ5IEMgbGlicmFyeQogICAgVGhpcyBpcyBjYXVzZWQgYnkgdGhlIGdub21lIGxpYnJhcnkgZ25vbWVfaW5pdCgpIHNldHRpbmcgJExDX0NUWVBFIHRvCiAgICAiZW5fVVMiLiAgTm90IGFsbCBzeXN0ZW1zIHN1cHBvcnQgdGhpcyBsb2NhbGUgbmFtZSwgdGh1cyBjYXVzaW5nIHRoZQogICAgZXJyb3IuICBIb3BlZnVsbHkgYSBuZXdlciB2ZXJzaW9uIG9mIEdUSy9Hbm9tZSBmaXhlcyB0aGlzIHByb2JsZW0uCi0gICBHVEsgMjogV2l0aCB0aGlzIG1hcHBpbmcgdGhlIGhpdC1lbnRlciBwcm9tcHQgaXMgX3NvbWV0aW1lc18gYmVsb3cgdGhlCiAgICBzY3JlZW4sIGF0IG90aGVyIHRpbWVzIHRoZXJlIGlzIGEgZ3JleSBhcmVhIGJlbG93IHRoZSBjb21tYW5kIGxpbmU6Cgk6bm1hcCA8RjExPiA6aWYgJmd1aW9wdGlvbnM9fidtJyBcfCBzZXQgZ3Vpb3B0aW9ucy09bSBcfCBlbHNlIFx8IHNldCBndWlvcHRpb25zKz1tIFx8IGVuZGlmPGNyPgotICAgR1RLOiBXaGVuIHBhc3RpbmcgYSBzZWxlY3Rpb24gZnJvbSBWaW0gdG8geGNsaXBib2FyZCBndmltIGNyYXNoZXMgd2l0aCBhCiAgICBBQlJUIHNpZ25hbC4gIFByb2JhYmx5IGFuIGVycm9yIGluIHRoZSBmaWxlIGdka3NlbGVjdGlvbi5jLCB0aGUgYXNzZXJ0CiAgICBhbHdheXMgZmFpbHMgd2hlbiBYbWJUZXh0TGlzdFRvVGV4dFByb3BlcnR5KCkgZmFpbHMuIChUb20gQWxsYXJkKQotICAgR1RLIDI6IGdpdmVzIGFuIGFzc2VydGlvbiBlcnJvciBmb3IgZXZlcnkgbm9uLWJ1aWx0aW4gaWNvbiBpbiB0aGUgdG9vbGJhci4KICAgIFRoaXMgaXMgYSBHVEsgMi40LnggYnVnLCBmaXhlZCBpbiBHVEsgMi40LjIuIChUaG9tYXMgZGUgR3JlbmllciBkZSBMYXRvdXIpCi0gICBXaGVuIHVzaW5nIGFuIHh0ZXJtIHRoYXQgc3VwcG9ydHMgdGhlIHRlcm1yZXNwb25zZSBmZWF0dXJlLCBhbmQgdGhlICd0X0NvJwogICAgdGVybWNhcCBvcHRpb24gd2FzIHdyb25nIHdoZW4gVmltIHN0YXJ0ZWQsIGl0IHdpbGwgYmUgY29ycmVjdGVkIHdoZW4gdGhlCiAgICB0ZXJtcmVzcG9uc2UgaXMgcmVjZWl2ZWQuICBTaW5jZSB0aGUgbnVtYmVyIG9mIGNvbG9ycyBjaGFuZ2VzLCB0aGUKICAgIGhpZ2hsaWdodGluZyBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBhZ2Fpbi4gIFRoaXMgbWF5IGNhdXNlIGNvbG9ycyBkZWZpbmVkCiAgICBpbiB0aGUgdmltcmMgZmlsZSB0byBiZSBsb3N0LgotICAgT24gV2luZG93cyBOVCA0LjAgdGhlIG51bWJlciBvZiBmaWxlcyBwYXNzZWQgdG8gVmltIHdpdGggZHJhZyZkcm9wIGFuZAogICAgIkVkaXQgd2l0aCBWaW0iIGlzIGxpbWl0ZWQuICBUaGUgbWF4aW11bSBjb21tYW5kIGxpbmUgbGVuZ3RoIGlzIDI1NSBjaGFycy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgZXh0ZW5zaW9ucyBhbmQgaW1wcm92ZW1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkJICAgICpleHRlbnNpb25zLWltcHJvdmVtZW50cyoKCkRpZG4ndCBtYWtlIGl0IGludG8gVmltIDcuMDoKLSAgIEFkZCBDT0xVTU4gTlVNQkVSUyB0byAiOiIgY29tbWFuZHMgIjpsaW5lMSxsaW5lMltjb2wxLGNvbDJdY21kIi4gIEJsb2NrCiAgICBjYW4gYmUgc2VsZWN0ZWQgd2l0aCBDVFJMLVYuICBBbGxvdyAnJCcgKGVuZCBvZiBsaW5lKSBmb3IgY29sMi4KLSAgIEFkZCBERUJVR0dFUiBJTlRFUkZBQ0UuICBJbXBsZW1lbnRhdGlvbiBmb3IgZ2RiIGJ5IFhhdmllciBkZSBHYXllLgogICAgU2hvdWxkIHdvcmsgbGlrZSBhbiBJREUuICBUcnkgdG8ga2VlcCBpdCBnZW5lcmljLiAgTm93IGZvdW5kIGhlcmU6CiAgICBodHRwOi8vY2xld24uc2YubmV0LgogICAgQW5kIHRoZSBpZGV2aW0gcGx1Z2luL3NjcmlwdC4KICAgIFRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIGRlYnVnZ2VyIGZyb20gaW5zaWRlIFZpbTogRm9yIEdVSSBydW4gYSBwcm9ncmFtCiAgICB3aXRoIGEgbmV0YmVhbnMgY29ubmVjdGlvbjsgZm9yIGNvbnNvbGU6IHN0YXJ0IGEgcHJvZ3JhbSB0aGF0IHNwbGl0cyB0aGUKICAgIHRlcm1pbmFsLCBydW5zIHRoZSBkZWJ1Z2dlciBpbiBvbmUgd2luZG93IGFuZCByZWNvbm5lY3QgVmltIEkvTyB0byB0aGUKICAgIG90aGVyIHdpbmRvdy4KICAgIFdpc2hlcyBmb3IgTmV0QmVhbnMgY29tbWFuZHM6CiAgICAtIG1ha2UgaXQgcG9zc2libGUgdG8gaGF2ZSAnZGVmaW5lQW5ub1R5cGUnIGFsc28gaGFuZGxlIHRlcm1pbmFsIGNvbG9ycy4KICAgIC0gc2VuZCAnYmFsbG9vblRleHQnIGV2ZW50cyBmb3IgdGhlIGN1cnNvciBwb3NpdGlvbiAodXNpbmcgQ3Vyc29ySG9sZCA/KQogICAgICBpbiB0ZXJtaW5hbCBtb2RlLgotICAgRUNMSVBTRSBwbHVnaW4uICBQcm9ibGVtIGlzOiB0aGUgaW50ZXJmYWNlIGlzIHZlcnkgY29tcGxpY2F0ZWQuICBOZWVkIHRvCiAgICBpbXBsZW1lbnQgcGFydCBpbiBKYXZhIGFuZCB0aGVuIGNvbm5lY3QgdG8gVmltLiAgU29tZSBoaW50cyBmcm9tIEFsZXhhbmRydQogICAgUm9tYW4sIDIwMDQgRGVjIDE1LiAgU2hvdWxkIHRoZW4gYWxzbyB3b3JrIHdpdGggT3JhY2xlIEpkZXZlbG9wZXIsIHNlZSBKU1IKICAgIDE5OCBzdGFuZGFyZCBodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0xOTguCiAgICBFY2xpbSBkb2VzIGl0OiBodHRwOi8vZWNsaW0uc291cmNlZm9yZ2UubmV0LyAgKEVyaWMgVmFuIERld29lc3RpbmUpCiAgICBQbHVnaW4gdGhhdCB1c2VzIGEgdGVybWluYWwgZW11bGF0b3I6IGh0dHA6Ly92aW1wbHVnaW4uc2YubmV0Ci0gICBTVElDS1kgQ1VSU09SOiBBZGQgYSB3YXkgb2Ygc2Nyb2xsaW5nIHRoYXQgbGVhdmVzIHRoZSBjdXJzb3Igd2hlcmUgaXQgaXMuCiAgICBFc3BlY2lhbGx5IHdoZW4gdXNpbmcgdGhlIHNjcm9sbGJhci4gIFR5cGluZyBhIGN1cnNvci1tb3ZlbWVudCBjb21tYW5kCiAgICBzY3JvbGxzIGJhY2sgdG8gd2hlcmUgdGhlIGN1cnNvciBpcy4KLSAgIFJ1bm5pbmcgYSBzaGVsbCBjb21tYW5kIGZyb20gdGhlIEdVSSBzdGlsbCBoYXMgbGltaXRhdGlvbnMuICBMb29rIGludG8gaG93CiAgICB0aGUgdGVybWluYWwgZW11bGF0b3Igb2YgdGhlIFZpbSBzaGVsbCBwcm9qZWN0IGNhbiBoZWxwOgogICAgaHR0cDovL3ZpbXNoZWxsLndhbmEuYXQKLSAgIEFkZCBMdWEgaW50ZXJmYWNlPyAoV29sZmdhbmcgT2VydGwpCjggICBBZGQgYSBjb21tYW5kIHRvIGp1bXAgdG8gYSBjZXJ0YWluIGtpbmQgb2YgdGFnLiAgQWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeQogICAgdmFsdWVzIGZvciB0aGUgb3B0aW9uYWwgZmllbGRzLiAgRS5nLiwgIjp0YWcgc2l6ZSB0eXBlPW0iLgogICAgQWxzbyBhbGxvdyBzcGVjaWZ5aW5nIHRoZSBmaWxlIGFuZCBjb21tYW5kLCBzbyB0aGF0IHRoZSByZXN1bHQgb2YKICAgIHRhZ2xpc3QoKSBjYW4gYmUgdXNlZC4KCgpEb2N1bWVudGF0aW9uOgo4ICAgVGhlIEdVSSBoZWxwIHNob3VsZCBleHBsYWluIHRoZSBGaW5kIGFuZCBGaW5kL1JlcGxhY2UgZGlhbG9ncy4gIEFkZCBhIGxpbmsKICAgIHRvIGl0IGZyb20gIjpwcm9tcHRyZXBsIiBhbmQgIjpwcm9tcHRmaW5kIi4KOCAgIExpc3Qgb2Ygb3B0aW9ucyBzaG91bGQgbWVudGlvbiB3aGV0aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQKICAgIG9yIG5vdC4KOCAgIEV4dGVuZCB1c3JfMjcudHh0IGEgYml0LiAoQWRhbSBTZXlmYXJ0aCkKNyAgIEFkZCBhIHNlY3Rpb24gb24gZGVidWdnaW5nIHNjcmlwdHMgaW4gdGhlIHVzZXIgbWFudWFsLgo5ICAgTWFrZSB0aGUgUmVmZXJlbmNlIE1hbnVhbCBtb3JlIHByZWNpc2UuICBGb3IgZWFjaCBjb21tYW5kIG1lbnRpb246CiAgICAtIGNoYW5nZSB0byBjdXJzb3IgcG9zaXRpb24gYW5kIGN1cnN3YW50CiAgICAtIGlmIGl0IGNhbiBiZSB1bmRvbmUgKHUvQ1RSTC1SKSBhbmQgcmVkb25lICguKQogICAgLSBob3cgaXQgd29ya3MgZm9yIGZvbGRlZCBsaW5lcwogICAgLSBob3cgaXQgd29ya3Mgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMKOSAgIEluIGNoYW5nZS50eHQsIHJlbWFyayBhYm91dCBKYXZhZG9jIGlzbid0IHJpZ2h0LiAgUmlnaHQgYWxpZ25tZW50IHdvdWxkCiAgICB3b3JrIHRvby4KOCAgIFNwcmVhZCB0aGUgd2luZG93cyBjb21tYW5kcyBvdmVyIHRoZSBvdGhlciBmaWxlcy4gIEZvciBleGFtcGxlLCAiOnN0YWciCiAgICBzaG91bGQgYmUgd2l0aCAiOnRhZyIuICBDcm9zcy1saW5rIHdpdGggdGFncyB0byBhdm9pZCB0b28gbXVjaCBkb3VibGUKICAgIHRleHQuCjggICBBZGQgdGFncyBmb3IgYWxsIGZlYXR1cmVzLCBlLmcuICJndWlfcnVubmluZyIuCjcgICBNUy1XaW5kb3dzOiBXaGVuIGEgd3JvbmcgY29tbWFuZCBpcyB0eXBlZCB3aXRoIGFuIEFMVCBrZXksIGdpdmUgYSBoaW50IHRvCiAgICBsb29rIGF0IHRoZSBoZWxwIGZvciAnd2luYWx0a2V5cycuCjcgICBBZGQgYSBoZWxwLnZpbSBwbHVnaW4gdGhhdCBtYXBzIDxUYWI+IHRvIGp1bXAgdG8gdGhlIG5leHQgdGFnIGluIHx8IGFuZAogICAgPEMtVGFiPiAoYW5kIDxTLVRhYj4pIHRvIHRoZSBwcmV2aW91cyB0YWcuCi0gICBDaGVjayB0ZXh0IGVkaXRvciBjb21wZW5kaXVtIGZvciB2aSBhbmQgVmltIHJlbWFya3MuCgoKSGVscDoKLSAgIEZpcnN0IHRyeSB1c2luZyB0aGUgIjpoZWxwIiBhcmd1bWVudCBsaXRlcmFsbHksIGJlZm9yZSB1c2luZyBpdCBhcyBhCiAgICBwYXR0ZXJuLiAgQW5kIHRoZW4gbWF0Y2ggaXQgYXMgcGFydCBvZiBhIHRhZy4KLSAgIFdoZW4gYSBoZWxwIGl0ZW0gaGFzIG11bHRpcGxlIG1hdGNoZXMgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgIjp0biIgdG8gZ28KICAgIHRvIHRoZSBvdGhlciBtYXRjaGVzLgotICAgU3VwcG9ydCBhIHdheSB0byB2aWV3IChhbmQgZWRpdCkgLmluZm8gZmlsZXMuCi0gICBEZWZhdWx0IG1hcHBpbmcgZm9yIGhlbHAgZmlsZXM6IDxUYWI+IHRvIHBvc2l0aW9uIGN1cnNvciBvbiBuZXh0IHw6dGFnfC4KLSAgIEltcGxlbWVudCBhICJzdGlja3kiIGhlbHAgd2luZG93LCBzb21lIGhlbHAgdGV4dCBsaW5lcyB0aGF0IGFyZSBhbHdheXMKICAgIGRpc3BsYXllZCBpbiBhIHdpbmRvdyB3aXRoIGZpeGVkIGhlaWdodC4gKEd1Y2tlcykgIFVzZSAifi8udmltaGVscCIgZmlsZSwKICAgIHVzZXIgY2FuIGVkaXQgaXQgdG8gaW5zZXJ0IGhpcyBmYXZvcml0ZSBjb21tYW5kcywgbmV3IGFjY291bnQgY2FuIGNvbnRhaW4gYQogICAgZGVmYXVsdCBjb250ZW50cy4KLSAgIE1ha2UgJ3dpbm1pbmhlaWdodCcgYSBsb2NhbCBvcHRpb24sIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNldCBhIG1pbmltYWwKICAgIGhlaWdodCBmb3IgdGhlIGhlbHAgd2luZG93IChhbmQgb3RoZXIgd2luZG93cykuCi0gICAiOmhlbHAgOnNeSSIgc2hvdWxkIGV4cGFuZCB0byAiOmhlbHAgOnN1YnN0aXR1dGUiLgotICAgTWFrZSB0aGUgaGVscCBrZXkgKDxGMT4pIGNvbnRleHQgc2Vuc2l0aXZlPwotICAgTGVhcm4gbW9kZTogc2hvdyBzaG9ydCBoZWxwIHdoaWxlIHR5cGluZyBjb21tYW5kcy4KCgpVc2VyIEZyaWVuZGxpZXI6CjggICBXaW5kb3dzIGluc3RhbGwgd2l0aCBOU0lTOiBtYWtlIGl0IHBvc3NpYmxlIHRvIGRvIGEgc2lsZW50IGluc3RhbGwsIHNlZQogICAgaHR0cDovL25zaXMuc291cmNlZm9yZ2UubmV0L0RvY3MvQ2hhcHRlcjQuaHRtbCM0LjEyCjggICBXaW5kb3dzIGluc3RhbGwgd2l0aCBpbnN0YWxsLmV4ZTogVXNlIC5leGUgaW5zdGVhZCBvZiAuYmF0IGZpbGVzIGZvcgogICAgbGlua3MsIHNvIHRoYXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHVubW9kaWZpZWQ/IChXYWx0ZXIKICAgIEJyaXNjb2UpCjggICBXaW5kb3dzIGluc3RhbGw6IEJlIGFibGUgdG8gYXNzb2NpYXRlIFZpbSB3aXRoIGEgc2VsZWN0aW9uIG9mIGZpbGUgdHlwZXM/CjggICBXaW5kb3dzIHVuaW5zdGFsbDogSGF2ZSB1bmluc3RhbC5jIGRlbGV0ZSB0aGUgdmltZmlsZXMgZGlyZWN0b3JpZXMgdGhhdAogICAgZG9zaW5zdC5jIGNyZWF0ZXMuICBMaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IChyZWN1cnNpdmVseSkgaWYKICAgIHRoZSB1c2VyIGFza3MgZm9yIGl0LiAgUmVxdWlyZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgInJtIC1yZiIuCjggICBSZW1lbWJlciB0aGUgbmFtZSBvZiB0aGUgdmltcmMgZmlsZSB0aGF0IHdhcyB1c2VkICh+Ly52aW1yYywgJFZJTS9fdmltcmMsCiAgICAkSE9NRS9fdmltcmMsIGV0Yy4pIGFuZCBhZGQgImVkaXQgdmltcmMiIHRvIHRoZSBGaWxlIG1lbnUuCi0gICBBZGQgYSB3YXkgdG8gc2F2ZSBsb2NhbCBzZXR0aW5ncyBhbmQgbWFwcGluZ3MgaW50byBhIG5ldyBwbHVnaW4gZmlsZS4KICAgICI6bWtwbHVnaW4gPGZpbGU+Ij8KOCAgIEFkZCAiOnBsdWdpbmluc3RhbGwiIGNvbW1hbmQuICBDYW4gYmUgdXNlZCB0byBpbnN0YWxsIGEgcGx1Z2luIGZpbGUgdGhhdAogICAgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbi4gIExldCB0aGUgdXNlciBzZWxlY3QgYSBkaXJlY3RvcnkgZnJvbQogICAgJ3J1bnRpbWVwYXRoJy4KCSIgVmltIHBsdWdpbgoJPG1haW4gcGx1Z2luIGNvZGU+CgkiID4+PiBwbHVnaW4gaGVscCBzdGFydCA8PDwKCTxwbHVnaW4gZG9jcz4KLSAgIEFkZCBtYXBwaW5ncyBsb2NhbCB0byBhIHdpbmRvdzogIjptYXAgPHdpbmRvdz4gLi4uIj8KOSAgIEFkZCBidWZmZXItbG9jYWwgbWVudS4gIFNob3VsZCBvZmZlciBhIGNob2ljZSBiZXR3ZWVuIHJlbW92aW5nIHRoZSBtZW51IG9yCiAgICBkaXNhYmxpbmcgaXQuICBCZSBjYXJlZnVsIHRoYXQgdGVhci1vZmZzIGRvbid0IGRpc2FwcGVhciAoa2VlcCBvbmUgZW1wdHkKICAgIGl0ZW0/KS4KICAgIEFsdGVybmF0aXZlOiB1c2UgQnVmRW50ZXIgYW5kIEJ1ZkxlYXZlIGF1dG9jb21tYW5kcy4KOCAgIG1ha2UgYSB2aW10dXRvciBzY3JpcHQgZm9yIEFtaWdhIGFuZCBvdGhlciBzeXN0ZW1zLgo3ICAgQWRkIHRoZSBhcmd1bWVudHMgZm9yIGNvbmZpZ3VyZSB0byB0aGUgIjp2ZXJzaW9uIiBvdXRwdXQ/CjcgICBXaGVuIFZpbSBkZXRlY3RzIGEgZmlsZSBpcyBiZWluZyBlZGl0ZWQgZWxzZXdoZXJlIGFuZCBpdCdzIGEgZ3ZpbSBzZXNzaW9uCiAgICBvZiB0aGUgc2FtZSB1c2VyIGl0IHNob3VsZCBvZmZlciBhICJSYWlzZSIgYnV0dG9uLCBzbyB0aGF0IHRoZSBvdGhlciBndmltCiAgICB3aW5kb3cgY2FuIGJlIGRpc3BsYXllZC4gKEVkdWFyZCkKOCAgIFN1cHBvcnQgc2F2aW5nIGFuZCByZXN0b3Jpbmcgc2Vzc2lvbiBmb3IgWCB3aW5kb3dzPyAgSXQgc2hvdWxkIHdvcmsgdG8gZG8KICAgICI6bWtzZXNzaW9uIiBhbmQgdXNlICItUyBmbmFtZSIgZm9yIHRoZSByZXN0YXJ0IGNvbW1hbmQuICBUaGUKICAgIGd1aV94MTFfd21fcHJvdG9jb2xfaGFuZGxlcigpIGFscmVhZHkgdGFrZXMgY2FyZSBvZiB0aGUgcmVzdC4KICAgIGdsb2JhbF9ldmVudF9maWx0ZXIoKSBmb3IgR1RLLgoKClRhYiBwYWdlczoKOSAgIEdVSSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHRhYiBwYWdlcyBsaW5lIGZvciBvdGhlciBzeXN0ZW1zLgo4ICAgTWFrZSBHVUkgbWVudSBpbiB0YWIgcGFnZXMgbGluZSBjb25maWd1cmFibGUuICBMaWtlIHRoZSBwb3B1cCBtZW51Lgo4ICAgdGFiIHBhZ2VzIGluIHRoZSBzZXNzaW9uIGZpbGUsIGlmICJ0YWJwYWdlcyIgaW4gJ3Nlc3Npb25vcHRpb25zJwo4ICAgOnRhYm1vdmUgK04JIG1vdmUgdGFiIHBhZ2UgTiBwYWdlcyBmb3J3YXJkCjggICA6dGFibW92ZSAtTgkgbW92ZSB0YWIgcGFnZSBOIHBhZ2VzIGJhY2t3YXJkCjcgICA6dGFiZHVwCSBkdXBsaWNhdGUgdGhlIHRhYiB3aXRoIGFsbCBpdHMgd2luZG93cy4KNyAgIE9wdGlvbiB0byBwdXQgdGFiIGxpbmUgYXQgdGhlIGxlZnQgb3IgcmlnaHQ/ICBOZWVkIGFuIG9wdGlvbiB0byBzcGVjaWZ5CiAgICBpdHMgd2l0ZGguICBJdCdzIGxpa2UgYSBzZXBhcmF0ZSB3aW5kb3cgd2l0aCAiOnRhYnMiIG91dHB1dC4KNyAgIEFkZCBsb2NhbCB2YXJpYWJsZXMgZm9yIGVhY2ggdGFiIHBhZ2U/CjggICBBZGQgbG9jYWwgb3B0aW9ucyBmb3IgZWFjaCB0YWIgcGFnZT8gIEUuZy4sICdkaWZmb3B0JyBjb3VsZCBkaWZmZXIgYmV0d2VlbgogICAgdGFiIHBhZ2VzLgo3ICAgQWRkIGxvY2FsIGhpZ2hsaWdodGluZyBmb3IgZWFjaCB0YWIgcGFnZT8KCgpTcGVsbCBjaGVja2luZzoKLSAgIEltcGxlbWVudCBDT01QT1VOREZPUkJJREZMQUcgLgotICAgQ2hlY2sgb3V0IEh1bnNwZWxsIDEuMS40LgogICAgVGhlIG1hbnBhZ2UgZG9lc24ndCBtYXRjaCB0aGUgc291cmNlIGNvZGUuLi4KICAgIFRyeSB0byBtYWtlIHRoZSBuZXdseSBhZGRlZCBmZWF0dXJlcyBjb21wYXRpYmxlLgogICAgd2hhdCBkb2VzIE1BWE5HUkFNU1VHUyBkbz8KICAgIGlzIENPTVBMRVhQUkVGSVhFUyBuZWNlc3Nhcnkgd2hlbiB3ZSBoYXZlIGZsYWdzIGZvciBhZmZpeGVzPwotICAgTG9vayBpbnRvIEh1bmdhcmlhbiBkaWN0aW9uYXJ5OiBodV9IVS0xLjAudGFyLmd6CiAgICBUaGlzIG9uZSBkb2Vzbid0IG1hdGNoIHdpdGggSHVuc3BlbGwgMS4xLjQuCi0gICBBZGQgQ0hFQ0tDT01QT1VORENBU0U6IHdoZW4gY29tcG91bmRpbmcgbWFrZSBsZWFkaW5nIGNhcGl0YWwgbG93ZXIgY2FzZS4KICAgIEhvdyBpcyBpdCBzdXBwb3NlZCB0byB3b3JrPwotICAgV2hlbiBjb21wb3VuZGluZyBIdW5zcGVsbCBkb2Vzbid0IGFsbG93IGFmZml4ZXMgaW5zaWRlIHRoZSBjb21wb3VuZCB3b3JkLAogICAgb25seSBiZWZvcmUgYW5kIGFmdGVyIGl0LiAgQ09NUE9VTkRQRVJNSVRGTEFHIGNhbiBiZSB1c2VkIHRvIGFsbG93IGl0LgogICAgQ2hlY2sgTXlzcGVsbCBhbmQgQXNwZWxsIGlmIHRoZXkgYWxzbyB3b3JrIHRoaXMgd2F5LgogICAgVGh1cyBhIHdvcmQgKyBzdWZmaXggbmVlZHMgYSBmbGFnIHRoYXQgaXQgY2FuJ3QgYmUgdXNlZCB3aXRoIGEgZm9sbG93aW5nCiAgICBjb21wb3VuZCwgYW5kIHdvcmQgKyBwcmVmaXggY2FuJ3QgYmUgYWZ0ZXIgYW5vdGhlciB3b3JkIGluIGEgY29tcG91bmQuCi0gICBzdWdnZXN0aW9uIGZvciAiS0ciIHRvICJrZyIgd2hlbiBpdCdzIGtlZXBjYXNlLgotICAgU3VwcG9ydCBmbGFncyBvbiBhIHN1ZmZpeC4gIFVzZWQgZm9yIHNlY29uZCBsZXZlbCBhZmZpeGVzLCByYXJlIGFuZAogICAgbm9jb21wLiAgVGhlIGZsYWdzIG1heSBhbHNvIGJlIHVzZWQgZm9yIGNvbXBvdW5kaW5nLiAgRGVmYXVsdCBpcyBhbiBPUgogICAgbWVjaGFuaXNtIHdpdGggdGhlIGZsYWdzIG9mIHRoZSB3b3JkLiAgQWRkaW5nICJjb21wc2V0IiBvbiB0aGUgYWZmaXhlcwogICAgbWVhbnMgdGhlIGNvbXBvdW5kIGZsYWdzIG9mIHRoZSB3b3JkIGFyZSBub3QgdXNlZC4KICAgIEluc3RlYWQgb2YgIlNGWCBhIDAgYWRkL0ZMQUdTIC4iIHdlIGNvdWxkIHVzZSAiU0ZYIGEgMCBhZGQgLiAvRkxBR1MiIChvcgogICAgc3VwcG9ydCBib3RoKS4KLSAgIFN1cHBvcnQgYnJlYWtwb2ludCBjaGFyYWN0ZXIgtyAweGI3IGFuZCBpZ25vcmUgaXQ/ICBNYWtlcyBpdCBwb3NzaWJsZSB0bwogICAgdXNlIHNhbWUgd29yZGxpc3QgZm9yIGh5cGhlbmF0aW9uLgotICAgQ29tcG91bmQgd29yZCBpcyBhY2NlcHRlZCBpZiBuciBvZiB3b3JkcyBpcyA8PSBDT01QT1VORE1BWCBPUiBuciBvZgogICAgc3lsbGFibGVzIDw9IENPTVBPVU5EU1lMTUFYLiAgU3BlY2lmeSB1c2luZyBBTkQgaW4gdGhlIGFmZml4IGZpbGU/Ci0gICBDT01QT1VORE1BWCAtPiBDT01QT1VORFdPUkRNQVg/Ci0gICBORUVEQ09NUE9VTkQgYWxzbyB1c2VkIGZvciBhZmZpeD8gIE9yIGlzIHRoaXMgY2FsbGVkIE9OTFlJTkNPTVBPVU5EIG5vdz8KICAgIE9yIGlzIE9OTFlJTkNPTVBPVU5EIG9ubHkgZm9yIGluc2lkZSBhIGNvbXBvdW5kLCBub3QgYXQgc3RhcnQgb3IgZW5kPwotICAgRG8gd2UgbmVlZCBhIGZsYWcgZm9yIHRoZSBydWxlIHRoYXQgd2hlbiBjb21wb3VuZGluZyBpcyBkb25lIHRoZSBmb2xsb3dpbmcKICAgIHdvcmQgZG9lc24ndCBoYXZlIGEgY2FwaXRhbCBhZnRlciBhIHdvcmQgY2hhcmFjdGVyLCBldmVuIGZvciBPbmVjYXAgd29yZHM/Ci0gICBOZXcgaHVuc3BlbGwgaG9tZSBwYWdlOiBodHRwOi8vaHVuc3BlbGwuc291cmNlZm9yZ2UubmV0LwogICAgLSBWZXJzaW9uIDEuMS4wIGlzIG91dCBub3csIGxvb2sgaW50byB0aGF0LgogICAgLSBMb3RzIG9mIGNvZGUgZGVwZW5kcyBvbiBMQU5HLCB0aGF0IGlzbid0IHJpZ2h0LiAgRW5hYmxlIGVhY2ggbWVjaGFuaXNtCiAgICAgIGluIHRoZSBhZmZpeCBmaWxlIHNlcGFyYXRlbHkuCiAgICAtIEV4YW1wbGUgd2l0aCBjb21wb3VuZGluZyBkYXNoIGlzIGJhZCwgZ2V0cyBpbiB0aGUgd2F5IG9mIHNldHRpbmcKICAgICAgQ09NUE9VTkRNSU4gYW5kIENPTVBPVU5ETUFYIHRvIGEgcmVhc29uYWJsZSB2YWx1ZS4KICAgIC0gUFNFVURPUk9PVCA9PSBORUVEQUZGSVgKICAgIC0gQ09NUE9VTkRST09UIC0+IENPTVBPVU5ERUQ/ICBGb3IgYSB3b3JkIHRoYXQgYWxyZWFkeSBpcyBhIGNvbXBvdW5kIHdvcmQKCSAgICBPciB1c2UgQ09NUE9VTkRFRDIsIENPTVBPVU5ERUQzLCBldGMuCjggICBBbHRlcm5hdGUgRHV0Y2ggd29yZCBsaXN0IGF0IHd3dy5uZWRlcmxhbmRzZXdvb3JkZW4ubmwgKHVzZSBzY3JpcHQgdG8KICAgIG9idGFpbikuICBCdXQgbmV3IE15c3BlbGwgd29yZGxpc3Qgd2lsbCBjb21lIChIYWdlbikKLSAgIENJUkNVTUZJWDogd2hlbiBhIHdvcmQgdXNlcyBhIHByZWZpeCBtYXJrZWQgd2l0aCB0aGUgQ0lSQ1VNRklYIGZsYWcsIHRoZW4KICAgIHRoZSB3b3JkIG11c3QgYWxzbyBoYXZlIGEgc3VmZml4IG1hcmtlZCB3aXRoIHRoZSBDSVJDVU1GSVggZmxhZy4gIEl0J3MgYQogICAgYml0IHByaW1pdGl2ZSwgc2luY2Ugb25seSBvbmUgZmxhZyBpcyB1c2VkLCB3aGljaCBkb2Vzbid0IGFsbG93IG1hdGNoaW5nCiAgICBzcGVjaWZpYyBwcmVmaXhlcyB3aXRoIHN1ZmZpeGVzLgogICAgQWx0ZXJuYXRpdmU6CglQU0ZYIHtmbGFnfSB7cGNob3B9IHtwYWRkfSB7cGNvbmR9IHtzY2hvcH0ge3NhZGR9Wy9mbGFnc10ge3Njb25kfQogICAgV2UgbWlnaHQgbm90IG5lZWQgdGhpcyBhdCBhbGwsIHlvdSBjYW4gdXNlIHRoZSBORUVEQUZGSVggZmxhZyBhbmQgdGhlCiAgICBhZmZpeCB3aGljaCBpcyByZXF1aXJlZC4KLSAgIFdoZW4gYSBzdWZmaXggaGFzIG1vcmUgdGhhbiBvbmUgc3lsbGFibGUsIGl0IG1heSBjb3VudCBhcyBhIHdvcmQgZm9yCiAgICBDT01QT1VORE1BWC4KLSAgIEFkZCBmbGFncyB0byBjb3VudCBleHRyYSBzeWxsYWJsZXMgaW4gYSB3b3JkLiAgU1lMTEFCTEVBREQxIFNZTExBQkxFQUREMiwKICAgIGV0Yy4/ICBPciBtYWtlIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhlIHN5bGxhYmxlIGNvdW50IG9mIGEgd29yZAogICAgZGlyZWN0bHksIGUuZy4sIGFmdGVyIGFub3RoZXIgc2xhc2g6IC9hYmMvMwotICAgTU9SUEhPIGl0ZW0gaW4gYWZmaXggZmlsZTogaWdub3JlIFRBQiBhbmQgbW9ycGhvbG9naWNhbCBmaWVsZCBhZnRlcgogICAgd29yZC9mbGFncyBhbmQgYWZmaXguCi0gICBJbXBsZW1lbnQgbXVsdGlwbGUgZmxhZ3MgZm9yIGNvbXBvdW5kIHdvcmRzIGFuZCBDTVAgaXRlbT8KICAgIEF3YWl0IGNvbW1lbnRzIGZyb20gb3RoZXIgc3BlbGwgY2hlY2tpbmcgYXV0aG9ycy4KLSAgIEFsc28gc2VlIHRrbHNwZWxsOiBodHRwOi8vdGtsdHJhbnMuc291cmNlZm9yZ2UubmV0Lwo4ICAgQ2hhcmxlcyBDYW1wYmVsbCBhc2tzIGZvciBtZXRob2QgdG8gYWRkICJjb250YWluZWQiIGdyb3VwcyB0byBleGlzdGluZwogICAgc3ludGF4IGl0ZW1zICh0byBhZGQgQFNwZWxsKS4KICAgIEFkZCAiOnN5bnRheCBjb250YWlucyB7cGF0dGVybn0gYWRkPUBTcGVsbCIgY29tbWFuZD8gIEEgYml0IGxpa2UgIjpzeW4KICAgIGNsdXN0ZXIiIGJ1dCBjaGFuZ2UgdGhlIGNvbnRhaW5zIGxpc3QgZGlyZWN0bHkgZm9yIG1hdGNoaW5nIHN5bnRheCBpdGVtcy4KLSAgIFJlZmVyZW5jZXM6IE15U3BlbGwgbGlicmFyeSAoaW4gT3Blbk9mZmljZS5vcmcpLgoJaHR0cDovL3NwZWxsY2hlY2tlci5tb3pkZXYub3JnL3NvdXJjZS5odG1sCglodHRwOi8vd2hpdGVib2FyZC5vcGVub2ZmaWNlLm9yZy9zb3VyY2UvYnJvd3NlL3doaXRlYm9hcmQvbGluZ3Vjb21wb25lbnQvc291cmNlL3NwZWxsY2hlY2svbXlzcGVsbC8KICAgICAgYXV0aG9yOiBLZXZpbiBIZW5kcmlja3MgPGtldmluLmhlbmRyaWNrc0BzeW1wYXRpY28uY2E+CjggICBNYWtlICJlbi1yYXJlIiBzcGVsbCBmaWxlPyAgQXNrIENoYXJsZXMgQ2FtcGJlbGwuCjggICBUaGUgRW5nbGlzaCBkaWN0aW9uYXJpZXMgZm9yIGRpZmZlcmVudCByZWdpb25zIGFyZSBub3QgY29uc2lzdGVudCBpbiB0aGVpcgogICAgdXNlIG9mIHdvcmRzIHdpdGggYSBkYXNoLgo3ICAgSW5zZXJ0IG1vZGUgY29tcGxldGlvbiBtZWNoYW5pc20gdGhhdCB1c2VzIHRoZSBzcGVsbCB3b3JkIGxpc3RzLgo4ICAgQWRkIGhsIGdyb3VwcyB0byAnc3BlbGxsYW5nJz8KCTpzZXQgc3BlbGxsYW5nPWVuX3VzLGVuLXJhcmUvU3BlbGxSYXJlLGVuLW1hdGgvU3BlbGxNYXRoCiAgICBNb3JlIGNvbXBsaWNhdGVkOiBSZWdpb25zIHdpdGggZGlmZmVyZW50IGxhbmd1YWdlcz8gIEUuZy4sIGNvbW1lbnRzCiAgICBpbiBFbmdsaXNoLCBzdHJpbmdzIGluIEdlcm1hbiAocG8gZmlsZSkuCgoKRGlmZiBtb2RlOgo4ICAgVXNlIGRpZmYgbW9kZSB0byBzaG93IHRoZSBjaGFuZ2VzIG1hZGUgaW4gYSBidWZmZXIgKGNvbXBhcmVkIHRvIHRoZSBmaWxlKS4KICAgIFVzZSBhbiB1bm5hbWVkIGJ1ZmZlciwgbGlrZSBkb2luZzoKCW5ldyB8IHNldCBidD1ub2ZpbGUgfCByICMgfCAwZF8gfCBkaWZmdGhpcyB8IHdpbmNtZCBwIHwgZGlmZnRoaXMKICAgIEFsc28gc2hvdyBkaWZmZXJlbmNlIHdpdGggdGhlIGZpbGUgd2hlbiBlZGl0aW5nIHN0YXJ0ZWQ/ICBTaG91bGQgc2hvdyB3aGF0CiAgICBjYW4gYmUgdW5kb25lLiAoVG9tIFBvcG92aWNoKQo3ICAgQWRkIGN1cnNvci1iaW5kaW5nOiB3aGVuIG1vdmluZyB0aGUgY3Vyc29yIGluIG9uZSBkaWZmJ2VkIGJ1ZmZlciwgYWxzbwogICAgbW92ZSBpdCBpbiBvdGhlciBkaWZmJ2VkIGJ1ZmZlcnMsIHNvIHRoYXQgQ1RSTC1XIGNvbW1hbmRzIGdvIHRvIHRoZSBzYW1lCiAgICBsb2NhdGlvbi4KCgpGb2xkaW5nOgogICAgKGNvbW1hbmRzIHN0aWxsIGF2YWlsYWJsZTogekkgekogeksgenAgelAgenEgelEgelYgenkgelk7CiAgICBzZWNvbmRhcnk6IHpCIHpTIHpUIHpaLCB6PSkKOCAgIEFkZCAiei8iIGFuZCAiej8iIGZvciBzZWFyY2hpbmcgaW4gbm90IGZvbGRlZCB0ZXh0IG9ubHkuCjggICBBZGQgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBmb3IgYSBmb2xkIGxpbmUgZGVwZW5kaW5nIG9uIHRoZSBmb2xkIGxldmVsLgogICAgKE5vZWwgSGVuc29uKQo3ICAgVXNlICIrKy0tIiwgIisrKy0tIiBmb3IgZGlmZmVyZW50IGxldmVscyBpbnN0ZWFkIG9mICIrLS0tIiAiKy0tLS0iLgo4ICAgV2hlbiBhIGNsb3NlZCBmb2xkIGlzIGRpc3BsYXllZCBvcGVuIGJlY2F1c2Ugb2YgJ2ZvbGRtaW5saW5lcycsIHRoZQogICAgYmVoYXZpb3Igb2YgY29tbWFuZHMgaXMgc3RpbGwgbGlrZSB0aGUgZm9sZCBpcyBjbG9zZWQuICBIb3cgdG8gbWFrZSB0aGUKICAgIHVzZXIgYXdhcmUgb2YgdGhpcz8KOCAgIEFkZCBhbiBvcHRpb24gJ2ZvbGRza2lwJyB3aXRoIHZhbHVlcyBsaWtlICdmb2xkb3BlbicgdGhhdCBzcGVjaWZpZXMgd2hpY2gKICAgIGNvbW1hbmRzIHNraXAgb3ZlciBhIGNsb3NlZCBmb2xkLgo4ICAgIkgiIGFuZCAiTCIgY291bnQgYnVmZmVyIGxpbmVzIGluc3RlYWQgb2Ygd2luZG93IGxpbmVzLiAoU2VydmF0aXVzIEJyYW5kdCkKOCAgIEFkZCBhIHdheSB0byBhZGQgZm9sZC1wbHVnaW5zLiAgSm9oYW5uZXMgWmVsbG5lciBoYXMgb25lIGZvciBWQi4KNyAgIFdoZW4gdXNpbmcgbWFudWFsIGZvbGRpbmcsIHRoZSB1bmRvIGNvbW1hbmQgc2hvdWxkIGFsc28gcmVzdG9yZSBmb2xkcy4KLSAgIEFsbG93IGNvbXBsZXRlbHkgaGlkaW5nIGEgY2xvc2VkIGZvbGQuICBFLmcuLCBieSBzZXR0aW5nICdmb2xkdGV4dCcgdG8gYW4KICAgIGVtcHR5IHN0cmluZy4gIFJlcXVpcmUgc2hvd2luZyBhIGNoYXJhY3RlciBpbiAnZm9sZGNvbHVtbicgdG8gYXZvaWQgdGhlCiAgICBtaXNzaW5nIGxpbmUgZ29lcyB1bm5vdGljZWQuCiAgICBIb3cgdG8gaW1wbGVtZW50IHRoaXM/Ci0gICBXaGVuIHByZXNzaW5nIHRoZSBkb3duIGFycm93IG9mIGEgc2Nyb2xsYmFyLCBhIGNsb3NlZCBmb2xkIGRvZXNuJ3Qgc2Nyb2xsCiAgICB1bnRpbCBhZnRlciBhIGxvbmcgdGltZS4gIEhvdyB0byBtYWtlIHNjcm9sbGluZyB3aXRoIGNsb3NlZCBmb2xkcwogICAgc21vb3RoZXI/Ci0gICBXaGVuIGNyZWF0aW5nIGEgc2Vzc2lvbiwgYWxzbyBzdG9yZSBmb2xkcyBmb3IgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QsCiAgICB1c2luZyB0aGUgd2luaW5mbyBpbiB3aV9mb2xkcy4KLSAgICdmb2xkbWV0aG9kJyAidGV4dG9iamVjdCI6IGZvbGQgb24gc2VjdGlvbnMgYW5kIHBhcmFncmFwaCB0ZXh0IG9iamVjdHMuCi0gICBBZGQgJ2hpZGVjb21tZW50JyBvcHRpb246IGRvbid0IGRpc3BsYXkgY29tbWVudHMgaW4gLyogKi8gYW5kIGFmdGVyIC8vLgogICAgT3IgaXMgdGhlIGNvbmNlYWwgcGF0Y2ggZnJvbSBWaW5jZSBOZWdyaSBhIG1vcmUgZ2VuZXJpYyBzb2x1dGlvbj8KLSAgICJ6dWYiOiB1bmRvIGNoYW5nZSBpbiBtYW51YWwgZm9sZC4gInpVZiIgcmVkbyBjaGFuZ2UgaW4gbWFudWFsIGZvbGQuICBIb3cKICAgIHRvIGltcGxlbWVudCB0aGlzPwotICAgInpKIiBjb21tYW5kOiBhZGQgdGhlIGxpbmUgb3IgZm9sZCBiZWxvdyB0aGUgZm9sZCBpbiB0aGUgZm9sZCB1bmRlciB0aGUKICAgIGN1cnNvci4KLSAgICdmb2xkbWV0aG9kJyAic3ludGF4IjogImZvbGQ9MyIgYXJndW1lbnQ6IHNldCBmb2xkIGxldmVsIGZvciBhIHJlZ2lvbiBvcgogICAgbWF0Y2guCi0gICBBcHBseSBhIG5ldyBmb2xkbGV2ZWwgdG8gYSByYW5nZSBvZiBsaW5lcy4gKFN0ZXZlIExpdHQpCjggICBIYXZlIHNvbWUgd2F5IHRvIHJlc3RyaWN0IGNvbW1hbmRzIHRvIG5vdCBmb2xkZWQgdGV4dC4gIEFsc28gY29tbWFuZHMgbGlrZQogICAgc2VhcmNoZXMuCgoKTXVsdGktYnl0ZSBjaGFyYWN0ZXJzOgotICAgV2hlbiBlZGl0aW5nIGEgZmlsZSB3aXRoIGJvdGggdXRmLTggYW5kIGxhdGluMSB0ZXh0IFZpbSBhbHdheXMgZmFsbHMgYmFjawogICAgdG8gbGF0aW4xLiAgQWRkIGEgY29tbWFuZCB0byBjb252ZXJ0IHRoZSBsYXRpbjEgY2hhcmFjdGVycyB0byB1dGYtOD8KCTp1bm1peCB1dGYtOCxsYXRpbjEgZmlsZW5hbWUKICAgIFdvdWxkIG9ubHkgd29yayB3aGVuICdlbmNvZGluZycgaXMgdXRmLTguCjkgICBXaGVuIHRoZSB0YWlsIGJ5dGUgb2YgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgaXMgaWxsZWdhbCAoZS5nLiwgYSBDUiksIHRoZQogICAgZGlzcGxheSBpcyBtZXNzZWQgdXAgKFlhc3VoaXJvIE1hdHN1bW90bykuICBTaG91bGQgY2hlY2sgZm9yIGlsbGVnYWwKICAgIGRvdWJsZS1ieXRlIGNoYXJhY3RlcnMgYW5kIGRpc3BsYXkgdGhlbSBkaWZmZXJlbnRseSAoZGlzcGxheSBlYWNoIHNpbmdsZQogICAgYnl0ZSkuCjggICBBZGQgYW4gaXRlbSBpbiAnZmlsZWVuY29kaW5ncycgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmVzIG9mIGEgZmlsZSBmb3IKICAgIHRoZSBlbmNvZGluZy4gIFNlZSBQeXRob24gUEVQOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGVwcy9wZXAtMDI2My5odG1sLgogICAgVG8gYXZvaWQgZ2V0dGluZyBhIHdyb25nIGVuY29kaW5nIG9ubHkgYWNjZXB0IHNvbWV0aGluZyBFbWFjcy1saWtlOgogICAgIi0qLSBjb2Rpbmc6IGVuYy1uYV9tZS5mb28gLSotIiBhbmQgIi0qLSBjb2Rpbmc9IGVuYy1uYV9tZS5mb28gLSotIgogICAgTWF0Y2ggd2l0aCAiLVwqLVxzKmNvZGluZ1s6PV1ccypcKFs6OndvcmQ6Oi1fLl1cK1wpXHMqLVwqLSIgYW5kIHVzZSBmaXJzdAogICAgaXRlbS4KOCAgIEFkZCBhbiBpdGVtIGluICdmaWxlZW5jb2RpbmdzJyB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBvZiBhbiBYTUwgZmlsZSBmb3IKICAgIHRoZSBlbmNvZGluZy4gIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+ICBPciAiY2hhcnNldD1VVEYtOCI/CiAgICBGb3IgSFRNTCBsb29rIGZvciAiY2hhcnNldD11dGYtOCIuCjggICBUaGUgcXVpY2tmaXggZmlsZSBpcyByZWFkIHdpdGhvdXQgY29udmVyc2lvbiwgdGh1cyBpbiAnZW5jb2RpbmcnLiAgQWRkIGFuCiAgICBvcHRpb24gdG8gc3BlY2lmeSB0aGUgZW5jb2Rpbmcgb2YgdGhlIGVycm9yZmlsZSBhbmQgY29udmVydCBpdC4gIEFsc28gZm9yCiAgICAiOmdyZXAiIGFuZCAiOmhlbHBncmVwIi4KICAgIE1vcmUgZ2VuZXJpYyBzb2x1dGlvbjogc3VwcG9ydCBhIGZpbHRlciAoZS5nLiwgYnkgY2FsbGluZyBhIGZ1bmN0aW9uKS4KOCAgIFdoZW4gYSBmaWxlIHdhcyBjb252ZXJ0ZWQgZnJvbSAnZmlsZWVuY29kaW5nJyB0byAnZW5jb2RpbmcnLCBhIHRhZyBzZWFyY2gKICAgIHNob3VsZCBhbHNvIGRvIHRoaXMgb24gdGhlIHNlYXJjaCBwYXR0ZXJuLiAoQW5kcnplaiBNLiBPc3RydXN6a2EpCjcgICBXaGVuIGNvbnZlcnRpbmcgYSBmaWxlIGZhaWxzLCBtZW50aW9uIHdoaWNoIGJ5dGUgY291bGQgbm90IGJlIGNvbnZlcnRlZCwKICAgIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGZpeCB0aGUgcHJvYmxlbS4KOCAgIEFkZCBjb25maWd1cmUgb3B0aW9uIHRvIGJlIGFibGUgdG8gZGlzYWJsZSB1c2luZyB0aGUgaWNvbnYgbGlicmFyeS4gKFVkbwogICAgU2Nod2VpZ2VydCkKOSAgICdhbGVwaCcgc2hvdWxkIGJlIHNldCB0byAxNDg4IGZvciBVbmljb2RlLiAoWnZpIEhhcidFbCkKOCAgIFNob3VsZCBhZGQgdGVzdCBmb3IgdXNpbmcgdmFyaW91cyBjb21tYW5kcyB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KOCAgICdpbmZlcmNhc2UnIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KOCAgIHRvdXBwZXIoKSBmdW5jdGlvbiBkb2Vzbid0IGhhbmRsZSBieXRlIGNvdW50IGNoYW5nZXMuCjcgICBXaGVuIHNlYXJjaGluZywgc2hvdWxkIG9yZGVyIG9mIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGJlIGlnbm9yZWQ/CjggICBTaG91bGQgaW1wbGVtZW50ICdkZWxjb21iaW5lJyBmb3IgY29tbWFuZCBsaW5lIGVkaXRpbmcuCjggICBEZXRlY3Qgb3ZlcmxvbmcgVVRGLTggc2VxdWVuY2VzIGFuZCBoYW5kbGUgdGhlbSBsaWtlIGlsbGVnYWwgYnl0ZXMuCjggICAiOnMveC9cdVwxLyIgZG9lc24ndCB3b3JrLCBtYWtpbmcgdXBwZXJjYXNlIGlzbid0IGRvbmUgZm9yIG11bHRpLWJ5dGUKICAgIGNoYXJhY3RlcnMuCjggICBVVEYtODogInIiIGluIFZpc3VhbCBtb2RlIGRvZXNuJ3QgdGFrZSBjb21wb3NpbmcgY2hhcmFjdGVycy4KOCAgIFVURi04OiBXaGVuIHRoZXJlIGlzIGEgcHJlY29tcG9zZWQgY2hhcmFjdGVyIGluIHRoZSBmb250LCB1c2UgaXQgaW5zdGVhZAogICAgb2YgYSBjaGFyYWN0ZXIgYW5kIGEgY29tcG9zaW5nIGNoYXJhY3Rlci4gIFNlZSB4dGVybSBmb3IgYW4gZXhhbXBsZS4KNyAgIFdoZW4gYSBjaGFyYWN0ZXIgY2FuJ3QgYmUgZGlzcGxheWVkLCBkaXNwbGF5IGl0cyBkaWdyYXBoIGluc3RlYWQuCiAgICAnZGlzcGxheScgb3B0aW9uIHRvIHNwZWNpZnkgdGhpcy4KNyAgIFVzZSBpZGVhcyBmb3IgbmxfbGFuZ2luZm8oKSBmcm9tIE1hcmt1cyBLdWhuIGluIGVuY19kZWZhdWx0KCk6CiAgICAod3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL2xhbmdpbmZvLmMpCi0gICBHVEsgYW5kIFdpbjMyOiBBbGxvdyBzZWxlY3RpbmcgZm9udHMgZm9yICdndWlmb250c2V0JyB3aXRoIHRoZQogICAgZm9udHNlbGVjdG9yIHNvbWVob3cuCi0gICBHVEsgYW5kIFdpbjMyOiBtYWtlIGl0IHBvc3NpYmxlIHRvIHNldCB0aGUgZm9udCBmb3IgdGhlIG1lbnUgdG8gbWFrZSBpdAogICAgcG9zc2libGUgdG8gaGF2ZSAnZW5jb2RpbmcnIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZS4KLSAgIGRiY3NfY2xhc3MoKSBvbmx5IHdvcmtzIGZvciBKYXBhbmVzZSBhbmQgS29yZWFuLiAgSW1wbGVtZW50IHRoaXMgZm9yCiAgICBvdGhlciBlbmNvZGluZ3MuICBUaGUgImV1Yy1qcCIgYW5kICJldWMta3IiIGNob2ljZXMgbWlnaHQgYmUgd3JvbmcuCi0gICBGaW5kIHNvbWUgd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSByaWdodCBHVUkgZm9udCBvciBmb250c2V0LAogICAgZGVwZW5kaW5nIG9uIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdlbmNvZGluZycuCiAgICBJcnJlbGV2YW50IGluIHRoZSBHVEsrIDIgR1VJIHNvIGxvbmcgYXMgVVRGLTggaXMgdXNlZC4KICAgIEZvciBXaW5kb3dzLCB0aGUgY2hhcnNldF9wYWlyc1tdIHRhYmxlIGNvdWxkIGJlIHVzZWQuICBCdXQgaG93IGRvIHdlIGtub3cKICAgIGlmIGEgZm9udCBleGlzdHM/Ci0gICBEbyBrZXlib2FyZCBjb252ZXJzaW9uIGZyb20gJ3Rlcm1lbmNvZGluZycgdG8gJ2VuY29kaW5nJyB3aXRoCiAgICBjb252ZXJ0X2lucHV0KCkgZm9yIE1hYyBHVUkgYW5kIFJpc2NPUyBHVUkuCi0gICBBZGQgbW5lbW9uaWNzIGZyb20gUkZDMTM0NSBsb25nZXIgdGhhbiB0d28gY2hhcmFjdGVycy4KICAgIFN1cHBvcnQgQ1RSTC1LIF97bW5lbW9uaWN9Xwo3ICAgSW4gIi0tIElOU0VSVCAobGFuZykgLS0iIHNob3cgdGhlIG5hbWUgb2YgdGhlIGtleW1hcCB1c2VkIGluc3RlYWQgb2YKICAgICJsYW5nIi4gKElseWEgRG9nb2xhemt5KQotICAgTWFrZSAnbGFuZ21hcCcgYWNjZXB0IG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KLSAgIE1ha2UgJ2JyZWFrYXQnIGFjY2VwdCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBQcm9ibGVtOiBjYW4ndCB1c2UgYSBsb29rdXAKICAgIHRhYmxlIGFueW1vcmUgKGJyZWFrYXRfZmxhZ3NbXSkuCiAgICBTaW1wbGlzdGljIHNvbHV0aW9uOiB3aGVuICdmb3JtYXRvcHRpb25zJyBjb250YWlucyAibSIgYWxzbyBicmVhayBhIGxpbmUKICAgIGF0IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgPj0gMHgxMDAuCi0gICBEbyB3ZSBuZWVkIHRoZSByZXZlcnNlIG9mICdrZXltYXAnLCBsaWtlICdsYW5nbWFwJyBidXQgd2l0aCBmaWxlcyBhbmQKICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycz8gIEUuZy4sIHdoZW4gdXNpbmcgYSBSdXNzaWFuIGtleWJvYXJkLgotICAgQWRkIHRoZSBwb3NzaWJpbGl0eSB0byBlbnRlciBtYXBwaW5ncyB3aGljaCBhcmUgdXNlZCB3aGVuZXZlciBub3JtYWwgdGV4dAogICAgY291bGQgYmUgZW50ZXJlZC4gIEUuZy4sIGZvciAiZiIgY29tbWFuZC4gIEJ1dCBub3QgaW4gTm9ybWFsIG1vZGUuICBTb3J0CiAgICBvZiBvcHBvc2l0ZSBvZiAnbGFuZ21hcCcuICBVc2UgIjp0bWFwIiBjb21tYW5kPwotICAgV2hlbiBicmVha2luZyBhIGxpbmUsIHRha2UgcHJvcGVydGllcyBvZiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgaW50bwogICAgYWNjb3VudC4gIFRoZSAibGluZWJyZWFrIiBwcm9ncmFtIGZyb20gQnJ1bm8gSGFpYmxlIGNhbiBkbyBpdDoKICAgIGZ0cDovL2Z0cC5pbG9nLmZyL3B1Yi9Vc2Vycy9oYWlibGUvZ251L2xpbmVicmVhay0wLjEudGFyLmd6CiAgICBCdXQgaXQncyB2ZXJ5IGNvbXBsaWNhdGVkLi4uCgoKUHJpbnRpbmc6CjcgICBJbXBsZW1lbnQgInVuZGVyY3VybCIgZm9yIHByaW50aW5nLgotICAgQWRkICJwYWdlIHdpZHRoIiB0byB3cmFwIGxvbmcgbGluZXMuCi0gICBXaW4zMjogdXNlIGEgZm9udCBkaWFsb2cgZm9yIHNldHRpbmcgJ3ByaW50Zm9udCcuICBDYW4gcmV1c2UgdGhlIGNvZGUgZm9yCiAgICB0aGUgJ2d1aWZvbnQnIGRpYWxvZywgcHV0IHRoZSBjb21tb24gY29kZSBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uLgotICAgQWRkIHRoZSBmaWxlIHRpbWVzdGFtcCB0byB0aGUgcGFnZSBoZWFkZXIgKHdpdGggYW4gb3B0aW9uKS4gKEdlb3JnZQogICAgUmVpbGx5KQotICAgV2luMzI6IHdoZW4gJ3ByaW50Zm9udCcgaXMgZW1wdHkgdXNlICdndWlmb250Jy4KLSAgIFVuaXg6IFVzZSBzb21lIGRpYWxvZyBib3ggdG8gZG8gdGhlIG9idmlvdXMgc2V0dGluZ3MgKHBhcGVyIHNpemUsIHByaW50ZXIKICAgIG5hbWUsIHBvcnRyYWl0L2xhbmRzY2FwZSwgZXRjKS4KLSAgIFBvc3RTY3JpcHQ6IG9ubHkgd29ya3MgZm9yIDctYml0IEFTQ0lJIGFuZCBFQkNESUMuICBTaG91bGQgc3VwcG9ydAogICAgZGlmZmVyZW50ICdlbmNvZGluZycgdmFsdWVzIHNvbWVob3cuCi0gICBBbGxvdyBzcGVjaWZ5aW5nIHRoZSBwYXBlciBzaXplLCBpbnN0ZWFkIG9mIHVzaW5nIGEgc3RhbmRhcmQgc2l6ZS4gIFNhbWUKICAgIHVuaXRzIGFzIGZvciB0aGUgbWFyZ2lucy4KLSAgIFN1cHBvcnQgcmlnaHQtdG8tbGVmdCB0ZXh0Pwo4ICAgTWFrZSB0aGUgZm9yZWdyb3VuZCBjb2xvciBkYXJrZW5pbmcgZnVuY3Rpb24gcHJlc2VydmUgdGhlIGh1ZSBvZiB0aGUKICAgIGNvbG9yLgoKClN5bnRheCBoaWdobGlnaHRpbmc6CjggICBNYWtlICI6c3luIG9mZiIgdXNlICdydW50aW1lcGF0aCcgaW5zdGVhZCBvZiAkVklNUlVOVElNRS4gKEdhcnkgSm9obnNvbikKICAgIFNob3VsZCBkbyB0aGUgc2FtZSBmb3IgIjpzeW4gb24iIGFuZCAiOnN5biBtYW51YWwiLgo4ICAgU3VwcG9ydCAiY29udGFpbmVkaW4iIGFyZ3VtZW50IGZvciAiOnN5biBpbmNsdWRlIiwgc28gdGhhdCB0aGUgZGVmaW5lZAogICAgY2x1c3RlciBjYW4gYmUgYWRkZWQgdG8gZXhpc3Rpbmcgc3ludGF4IGl0ZW1zLgo4ICAgQyBzeW50YXg6IERvbid0IGhpZ2hsaWdodCB7fSBhcyBlcnJvcnMgaW5zaWRlICgpIHdoZW4gdXNlZCBsaWtlIHRoaXM6CiAgICAiKHsgc29tZXRoaW5nIH0pIiwgb2Z0ZW4gdXNlZCBpbiBHQ0MgY29kZS4KOCAgIFdoZW4gZWRpdGluZyBhIG5ldyBmaWxlIHdpdGhvdXQgYSBuYW1lIGFuZCBnaXZpbmcgaXQgYSBuYW1lIChieSB3cml0aW5nCiAgICBpdCkgYW5kICdmaWxldHlwZScgaXMgbm90IHNldCwgZGV0ZWN0IHRoZSBmaWxldHlwZS4gIEF2b2lkIGRvaW5nIGl0IGZvcgogICAgIjp3cSBmaWxlIi4KOCAgIE1ha2UgY29udmVyc2lvbiB0byBIVE1MIGZhc3RlciAoV3JpdGUgaXQgaW4gQyBvciBwcmUtY29tcGlsZSB0aGUgc2NyaXB0KS4KOSAgIFRoZXJlIGlzIHN0aWxsIGEgcmVkcmF3IGJ1ZyBzb21ld2hlcmUuICBQcm9iYWJseSBiZWNhdXNlIGEgY2FjaGVkIHN0YXRlIGlzCiAgICB1c2VkIGluIGEgd3Jvbmcgd2F5LiAgSSBjYW4ndCByZXByb2R1Y2UgaXQuLi4KNyAgIEJlIGFibGUgdG8gY2hhbmdlIG9ubHkgdGhlIGJhY2tncm91bmQgaGlnaGxpZ2h0aW5nLiAgVXNlZnVsIGZvciBEaWZmKiBhbmQKICAgIFNlYXJjaCBoaWdobGlnaHRpbmcuCjcgICBXaGVuICdudW1iZXInIGlzIHNldCBoaWdobGlnaHQgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBsaW5lLgogICAgTXVzdCBiZSBlbmFibGVkIHdpdGggYW4gb3B0aW9uLCBiZWNhdXNlIGl0IHNsb3dzIGRvd24gZGlzcGxheSB1cGRhdGluZy4KOCAgIEFsbG93IHRoZSB1c2VyIHRvIGFkZCBpdGVtcyB0byB0aGUgU3ludGF4IG1lbnUgc29ydGVkLCB3aXRob3V0IGhhdmluZyB0bwogICAgY2hhbmdlIHRoaXMgZm9yIGVhY2ggcmVsZWFzZS4KOCAgIEFkZCBhICJtYXRjaGNvbnRhaW5zIiBmb3IgcmVnaW9uczogaXRlbXMgY29udGFpbmVkIGluIHRoZSBzdGFydCBvciBlbmQKICAgIHBhdHRlcm4sIGJ1dCBub3QgaW4gdGhlIGJvZHkuCjggICBBZGQgYSAia2VlcGVuZC1jb250YWluZWQiIGFyZ3VtZW50OiBEb24ndCBjaGFuZ2UgdGhlIGVuZCBvZiBhbiBpdGVtIHRoaXMKICAgIG9uZSBpcyBjb250YWluZWQgaW4uICBMaWtlICJrZWVwZW5kIiBidXQgc3BlY2lmaWVkIG9uIHRoZSBjb250YWluZWQgaXRlbSwKICAgIGluc3RlYWQgb2YgdGhlIGNvbnRhaW5pbmcgaXRlbS4KOCAgIGNwcC52aW06IEluIEMrKyBpdCdzIGFsbG93ZWQgdG8gdXNlIHt9IGluc2lkZSAoKS4KOCAgIFNvbWUgc3ludGF4IGZpbGVzIHNldCAnaXNrZXl3b3JkJy4gIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgZmlsZXR5cGUKICAgIHRoaXMgaXNuJ3QgcmVzZXQuICBBZGQgYSBzcGVjaWFsIGtleXdvcmQgZGVmaW5pdGlvbiBmb3IgdGhlIHN5bnRheCBydWxlcz8KICAgIFdoZW4gdGhpcyBpcyBkb25lLCB1c2UgdmltLnZpbSBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBoZWxwIGZpbGUgZXhhbXBsZXMsCiAgICBidXQgd2l0aG91dCAiOiIgaW4gJ2lza2V5d29yZCcgZm9yIHN5bnRheC4KOCAgIEFkZCBzcGVjaWZpYyBzeW50YXggaXRlbSB0byBtYXRjaCB3aXRoIHBhcmVucy9icmFjZXMgdGhhdCBkb24ndCBoYXZlIGEKICAgICIlIiBtYXRjaC4gIDpzeW50YXggbm9tYXRjaCBjTWF0Y2hFcnJvciAoLHssWywpLH0sXSBbY29udGFpbmVkXQo4ICAgSGlnaGxpZ2h0IHRoZSB0ZXh0IGJldHdlZW4gdHdvIG1hdGNoaW5nIHBhcmVucyAoZS5nLiwgd2l0aCBhIGdyZXkKICAgIGJhY2tncm91bmQpIHdoZW4gb24gb25lIG9mIHRoZSBwYXJlbnMgb3IgaW4gYmV0d2VlbiB0aGVtLgogICAgT3B0aW9uIGZvciB0aGUgbWF0Y2hwYXJlbiBwbHVnaW4/CjggICBBZGQgYSBjb21tYW5kIHRvIGp1bXAgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGhpZ2hsaWdodGVkIHdpdGggIkVycm9yIi4KOCAgIFdoZW4gdXNpbmcgYSBjdGVybSwgYW5kIG5vIGN0ZXJtZmcgb3IgY3Rlcm1iZyBhcmUgZGVmaW5lZCwgdXNlIHN0YXJ0L3N0b3AKICAgIHNlcXVlbmNlcy4JQWRkIHJlbWFyayBpbiBkb2NzIHRoYXQgOmlmICd0ZXJtJyA9PSAidGVybS1uYW1lIiBzaG91bGQgYmUKICAgIHVzZWQuCjggICBBZGQgQHNwZWxsIGNsdXN0ZXIgdG8gU3RyaW5nIGFuZCBDb21tZW50IGdyb3VwcyBmb3IgbWFueSBsYW5ndWFnZXMuICBXaWxsCiAgICBhbGxvdyBzcGVsbCBjaGVja2luZy4gKEZsZWluZXIpCjggICBXaGVuIGxpc3Rpbmcgc3ludGF4IGl0ZW1zLCB0cnkgdG8gc29ydCB0aGUga2V5d29yZHMgYWxwaGFiZXRpY2FsbHkuICBBbmQKICAgIHJlLWluc2VydCB0aGUgW10gaWYgcG9zc2libGUuCjggICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBjb2xvciBvZiB0ZXh0IGZvciBWaXN1YWwgaGlnaGxpZ2h0IGdyb3VwIChsaWtlIGZvcgogICAgdGhlIEN1cnNvcikuCjggICBJdCB3b3VsZCBiZSB1c2VmdWwgdG8gbWFrZSB0aGUgaGlnaGxpZ2h0IGdyb3VwIG5hbWUgYW4gZXhwcmVzc2lvbi4gIFRoZW4KICAgIHdoZW4gdGhlcmUgaXMgYSBtYXRjaCwgdGhlIGV4cHJlc3Npb24gd291bGQgYmUgZXZhbHVhdGVkIHRvIGZpbmQgb3V0IHdoYXQKICAgIGhpZ2hsaWdodCBncm91cCB0byB1c2UuICBDb3VsZCBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBzaGVsbCB1c2VkIGluIGEKICAgIHBhc3N3b3JkIGZpbGUgYXBwZWFycyBpbiAvZXRjL3NoZWxscy4gKE5pa29sYWkgV2VpYnVsbCkKCXN5biBtYXRjaCA9czpjaGVja1NoZWxsKHY6bWF0Y2gpIGNvbnRhaW5lZCAncGF0dGVybicKOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gb25seSBoaWdobGlnaHQgYSBzdWItZXhwcmVzc2lvbiBvZiBhIG1hdGNoLiAgTGlrZQogICAgdXNpbmcgIlwxIiBpbiBhICI6cyIgY29tbWFuZC4KOCAgIFN1cHBvcnQgZm9yIGRlbGV0aW5nIHN5bnRheCBpdGVtczoKICAgIDpzeW4ga2V5d29yZCBjVG9kbyByZW1vdmUgdGhpcwogICAgOnN5biBtYXRjaCBjVG9kbyByZW1vdmUgInBhdHRlcm4iCiAgICA6c3luIHJlZ2lvbiBjU3RyaW5nIHJlbW92ZSBzdGFydD0idGhpcyIgZW5kPSJ0aGF0Igo4ICAgQWRkIHBvc3NpYmlsaXR5IHRvIHN5bmMgb24gc29tZXRoaW5nIGVsc2UsIHdoZW4gdGhlIHN5bmNpbmcgaW4gb25lIHdheQogICAgZG9lc24ndCBmaW5kIG1hdGNoLiAgRm9yIEhUTUw6IFdoZW4gbm8ge3NjcmlwdH0gaXMgZm91bmQsIHRyeSBsb29raW5nIGZvcgogICAgYSAnPCcuICAoRmxlaW5lcikKNyAgIFJlcGxhY2UgdGhlIHN5bmNocm9uaXppbmcgbWV0aG9kIHdpdGggYSBzdGF0ZSBtYWNoaW5lIHNwZWNpZmljYXRpb24/CiAgICBTaG91bGQgYmUgYWJsZSB0byBzdGFydCBhdCBhbnkgbGluZSBpbiB0aGUgZmlsZSwgc2VhcmNoIGZvcndhcmRzIG9yCiAgICBiYWNrd2FyZHMsIGFuZCB1c2UgdGhlIHJlc3VsdCBvZiBtYXRjaGluZyBhIHBhdHRlcm4uCjcgICBVc2UgcGFyc2luZyBsaWtlIGF3aywgc28gdGhhdCBlLmcuLCBhICggd2l0aG91dCBhIG1hdGNoaW5nICkgY2FuIGJlCiAgICBkZXRlY3RlZC4KOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlICJpbnZlcnRlZCIgaGlnaGxpZ2h0aW5nLCBpbnZlcnQgdGhlIG9yaWdpbmFsCiAgICBjaGFyYWN0ZXIuICBGb3IgVmlzdWFsIG1vZGUuICAoeHRlcm0tc2VsZWN0aW9uIGFscmVhZHkgZG9lcyB0aGlzKS4KOCAgIEhpZ2hsaWdodCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgd2l0aCAiU3BlY2lhbENoYXIiLCBsaW5rZWQgdG8KICAgICJTcGVjaWFsIi4gIERpc3BsYXkgdGhlbSB3aXRoIHRoZSBkaWdyYXBoIGNoYXJhY3RlcnMsIGlmIHBvc3NpYmxlLgo4ICAgSGlnaGxpZ2h0IHRoZSBjbGlwYm9hcmQtc2VsZWN0aW9uIHdpdGggYSBoaWdobGlnaHQgZ3JvdXAuCjggICBCZSBhYmxlIHRvIHJlc2V0IGhpZ2hsaWdodGluZyB0byBpdHMgb3JpZ2luYWwgKGRlZmF1bHQpIHZhbHVlcy4KNyAgIEJlIGFibGUgdG8gd3JpdGUgY3VycmVudCBoaWdobGlnaHRpbmcgdG8gYSBmaWxlIGFzIGNvbW1hbmRzLCBzaW1pbGFyIHRvCiAgICAiOm1rdmltcmMiLgo4ICAgSW1wcm92ZSBjLnZpbToKICAgIC0gQWRkIGNoZWNrIGZvciB1bnRlcm1pbmF0ZWQgc3RyaW5ncywgd2l0aCBhIHZhcmlhYmxlIHRvIHN3aXRjaCBpdCBvbjoKICAgICAgImNfc3RyaWN0X2Fuc2kiLgogICAgLSBEZXRlY3QgdW5iYWxhbmNlZCAiI2VuZGlmIi4gIFJlcXVpcmVzIGxvb2tpbmcgYmFjayBhIGxvbmcgd2F5Li4uCjggICBBZGQgYW4gb3B0aW9uIHRvIHJlc3RyaWN0IHRoZSB1cGRhdGluZyBvZiBzeW50YXggaGlnaGxpZ2h0aW5nIHRvIHRoZQogICAgY3VycmVudCBsaW5lIHdoaWxlIGluIEluc2VydCBtb2RlLgo4ICAgV2hlbiBndWVzc2luZyB2YWx1ZSBvZiAnYmFja2dyb3VuZCcsIHRoZSBzeW50YXggZmlsZSBoYXMgYWxyZWFkeSBiZWVuCiAgICBsb2FkZWQgKGZyb20gdGhlIC5ndmltcmMpLglBZnRlciBjaGFuZ2luZyAnYmFja2dyb3VuZCcsIGxvYWQgaXQgYWdhaW4/CjggICBBZGQgIjpzeW4gcmVzeW5jIiBjb21tYW5kLCB0byByZS1wYXJzZSB0aGUgd2hvbGUgZmlsZSB1bnRpbCB0aGUgY3VycmVudAogICAgZGlzcGxheSBwb3NpdGlvbi4KOCAgIFNob3VsZCBzdXBwb3J0ICJtZSIgb2Zmc2V0IGZvciBhIHJlZ2lvbiBzdGFydCBwYXR0ZXJuLiAgVG8gYmUgdXNlZCB0bwogICAgYWxsb3cgc2VhcmNoaW5nIGZvciB0aGUgZW5kIHBhdHRlcm4gaW5zaWRlIHRoZSBtYXRjaCBvZiB0aGUgZW5kIHBhdHRlcm4uCiAgICBFeGFtcGxlOiBzeW4gcmVnaW9uIHBpa2VYWCBzdGFydD0iKFtee10iIGVuZD0iKSIgc2hvdWxkIHdvcmsgb24gIigpIi4KOCAgIFdoZW4gdXNpbmcgYSByZWdleHAgZm9yICJjb250YWlucz0iLCBzaG91bGQgZGVsYXkgbWF0Y2hpbmcgd2l0aCBpdCB1bnRpbAogICAgcmVkcmF3aW5nIGhhcHBlbnMuICBTZXQgYSBmbGFnIHdoZW4gYSBncm91cCBpcyBhZGRlZCwgY2hlY2sgdGhpcyBmbGFnIHdoZW4KICAgIGhpZ2hsaWdodGluZyBzdGFydHMuCjcgICBBZGQgInNlbWl0cmFucyI6IEFkZCBoaWdobGlnaHRpbmcuICBFLmcuLCBtYWtlIHRoZSB0ZXh0IGJvbGQsIGJ1dCBrZWVwIHRoZQogICAgY29sb3JzLiAgQW5kIGFkZCBjb2xvcnMsIHNvIHRoYXQgR3JlZW4rUmVkIGJlY29tZXMgWWVsbG93LgogICAgRS5nLiBmb3IgdGhpcyBodG1sOgoJPEI+IGJvbGQgdGV4dCA8ST4gaXRhbGljK2JvbGQgdGV4dCA8L0I+IGl0YWxpYyB0ZXh0IDwvST4KNyAgIFdpbGQgaWRlYTogTm90IG9ubHkgc2V0IGhpZ2hsaWdodGluZywgYnV0IGFsc28gY2hhbmdlIHdoYXQgaXMgZGlzcGxheWVkCiAgICAoZS5nLiwgcmVtb3ZlIGNoYXJhY3RlcnMsIHNvIHRoYXQgIjxCPmJvbGQ8L0I+IiBjYW4gYmUgc2hvd24gYXMgImJvbGQiKToKCTpzeW4gcmVnaW9uIGJvbGRzdHVmZiBzdGFydD0iPEI+IiBkaXNwbGF5PSIiIGVuZD0iPC9CPiIgZGlzcGxheT0iIgo3ICAgQ1RSTC1dIGNoZWNrcyB0aGUgaGlnaGxpZ2h0IGdyb3VwIGZvciBmaW5kaW5nIG91dCB3aGF0IHRoZSB0YWcgaXMuCjcgICBBZGQgYW4gZXhwbGFuYXRpb24gaG93IGEgbGlzdCBvZiB3b3JkcyBjYW4gYmUgdXNlZCB0byBoaWdobGlnaHQgbWlzc3BlbGxlZAogICAgd29yZHMuCjcgICBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgIjpmaW5kIiBzaG91bGQgc2VhcmNoIGluICdwYXRoJy4KOCAgIEFkZCBtb3JlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciA6c3ludGF4Lgo4ICAgQWRkIG1vcmUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yIDpoaWdobGlnaHQuCjggICBBZGQgbW9yZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgOnNpZ24uCjcgICBTaG91bGQgZmluZCBhIGJldHRlciB3YXkgdG8gcGFyc2UgdGhlIDpzeW50YXggYW5kIDpoaWdobGlnaHQgY29tbWFuZHMuCiAgICBVc2UgdGFibGVzIG9yIGxpc3RzIHRoYXQgY2FuIGJlIHNoYXJlZCBieSBwYXJzaW5nIGZvciBleGVjdXRpb24gYW5kCiAgICBjb21wbGV0aW9uPwo4ICAgQWRkIENvbG9yU2NoZW1lUG9zdCBhdXRvY29tbWFuZCBldmVudCwgc28gdGhhdCBzY3JpcHRzIGNhbiBzZXQgdXAgdGhlaXIKICAgIGhpZ2hsaWdodGluZy4gKFNhbG1hbiBIYWxpbSkKNyAgIEFkZCBhIGZldyBzZXRzIG9mIGNvbG9ycyAoZS5nLiBCb3JsYW5kIFR1cmJvIEMgb25lKS4gIFdpdGggYSBtZW51IHRvCiAgICBzZWxlY3Qgb25lIG9mIHRoZSBzZXRzLgo4ICAgQWRkIG9mZnNldHMgdG8gc3ViLW1hdGNoZXM6ICJcKGEqXCkgKiJoZT1lMS0xCiAgICAnZScgaXMgZW5kIG9mIG1hdGNoICdlMScgaXMgZW5kIG9mIHN1Yi1tYXRjaCAxLCAnczInIGlzIHN0YXJ0IG9mIHN1Ym1hdGNoCiAgICAyLCBldGMuCjggICBJbiBJbnNlcnQgbW9kZSwgd2hlbiB0aGVyZSBhcmUgdHlwZWFoZWFkIGNoYXJhY3RlcnMsIHBvc3Rwb25lIHRoZQogICAgaGlnaGxpZ2h0aW5nIChmb3IgIi4iIGNvbW1hbmQpLgo4ICAgU3luY2luZyBvbiBjb21tZW50cyBpc24ndCAxMDAlIGNvcnJlY3Qgd2hlbiAvIC8gbGluZXMgbWl4IHdpdGggLyAqIGFuZCAqIC8uCiAgICBGb3IgZXhhbXBsZTogV2hhdCBhYm91dCBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAvIC8gYW5kIGNvbnRhaW5zICogLz8KOCAgIElnbm9yZSAvICogYW5kICAqIC8gaW5zaWRlIHN0cmluZ3MsIHdoZW4gc3luY2luZy4KNyAgIEJ1aWxkIGEgZmV3IG1vcmUgc3ludGF4IGZpbGVzIGZyb20gdGhlIGZpbGUgIi91c3Ivc2hhcmUvbWlzYy92Z3JpbmRlZnMiOgogICAgSVNQLCBMREwsIEljb24sIHJhdGZvci4gIEFuZCBjaGVjayAibmVkaXQvc291cmNlL2hpZ2hsaWdodC5jIi4KNiAgIEFkZCBwb3NzaWJpbGl0eSB0byBoYXZlIGJhY2tncm91bmQgY29sb3IgY29udGludWUgdW50aWwgdGhlIHJpZ2h0IGVkZ2Ugb2YKICAgIHRoZSB3aW5kb3cuICBVc2VmdWwgZm9yIGNvbW1lbnQgYmxvY2tzIGFuZCBmdW5jdGlvbiBoZWFkaW5ncy4gKFJvZ2FsbCkKLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gYWRkICJjb250YWlucyIgaXRlbXMgZm9yIGFsbCBpdGVtcyBpbiBhIGdyb3VwLglVc2VmdWwKICAgIHdoZW4gZXh0ZW5kaW5nIGFuIGFscmVhZHkgZXhpc3Rpbmcgc3ludGF4IGZpbGUuCi0gICBBZGQgbGluZS1jb250aW51YXRpb24gcGF0dGVybiBmb3Igbm9uLXN5bmNpbmcgaXRlbXMgdG9vPwotICAgQWRkIHBvc3NpYmlsaXR5IHRvIGhpZ2hsaWdodCB0aGUgd2hvbGUgbGluZSwgaW5jbHVkaW5nIHRoZSByaWdodCBtYXJnaW4KICAgIChmb3IgY29tbWVudCBibG9ja3MpLgotICAgQWRkICdobG1hdGNoJyBvcHRpb246IExpc3Qgb2YgZmxhZ3M6CiAgICAnYyc6IGhpZ2hsaWdodCBtYXRjaCBmb3IgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCiAgICAnYic6IGhpZ2hsaWdodCB0aGUgcHJldmlvdXMgKCwgYW5kIGl0cyBtYXRjaC4KICAgICdhJzogaGlnaGxpZ2h0IGFsbCB0ZXh0IGZyb20gdGhlIHByZXZpb3VzICggdW50aWwgaXRzIG1hdGNoLgoJIEFsc28gZm9yIHt9LCA8PiwgZXRjLj8KICAgICdlJzogaGlnaGxpZ2h0IGFsbCBicmFjZXMgd2l0aG91dCBhIG1hdGNoIChzbG93PykKICAgIE9SOiBhZGQgYW4gYXJndW1lbnQgImN1cnNvciIgdG8gdGhlIHN5bnRheCBjb21tYW5kLCB3aGljaCBtZWFucyB0aGF0IHRoZQogICAgcmVnaW9uL21hdGNoL2tleXdvcmQgaXMgb25seSBoaWdobGlnaHRlZCB3aGVuIHRoZSBjdXJzb3IgaXMgb24gaXQuCiAgICAoQ2FtcGJlbGwpCiAgICBPciBkbyBpdCBsaWtlIEVsdmlzOiBkZWZpbmUgdGV4dCBvYmplY3RzIGFuZCBob3cgdG8gaGlnaGxpZ2h0IHRoZW0gYXJvdW5kCiAgICB0aGUgY3Vyc29yLiAoSWFpbiBUcnVza2V0dCkKNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGFsbCB3b3JkcyBpbiB0aGUgdGFncyBmaWxlcyBhcyBLZXl3b3JkLgogICAgQ2FuIGFsc28gYmUgZG9uZSB3aXRoIGEgc2NyaXB0IChidXQgaXQncyBzbG93KS4KNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gY2FsbCBhICI6IiBjb21tYW5kIHdoZW4gYSBtYXRjaCBpcyBmb3VuZC4gIFNob3VsZAogICAgYWxsb3cgZm9yIGFkZGluZyBrZXl3b3JkcyBmcm9tIHRoZSB0ZXh0IChlLmcuIHZhcmlhYmxlcyB0aGF0IGFyZSBzZXQpLgogICAgQW5kIGFsbG93cyBmb3Igc2VjdGlvbnMgd2l0aCBkaWZmZXJlbnQgaGlnaGxpZ2h0aW5nLgo3ICAgQWRkIGhpZ2hsaWdodCBncm91cCBmb3IgY29tbWFuZGxpbmU6ICJDb21tYW5kbGluZSIuICBNYWtlIHN1cmUgaXQKICAgIGhpZ2hsaWdodHMgdGhlIGNvbW1hbmQgbGluZSB3aGlsZSB0eXBpbmcgYSBjb21tYW5kLCBhbmQgYW55IG91dHB1dCBmcm9tCiAgICBtZXNzYWdlcy4gIEFuZCBleHRlcm5hbCBjb21tYW5kcz8KOCAgIE1ha2UgYSB2ZXJzaW9uIHRoYXQgd29ya3MgbGlrZSBsZXNzLCBidXQgd2l0aCBoaWdobGlnaHRpbmc6IHJlYWQgc3RkaW4gZm9yCiAgICB0ZXh0LCBleGl0IGF0IGVuZCBvZiBmaWxlLCBkb24ndCBhbGxvdyBlZGl0aW5nLCBldGMuICBtb3JlaW0/ICBsZXNzaW0/CjcgICBTcGVjaWFsS2V5IGhpZ2hsaWdodGluZyBvdmVycnVsZXMgc3ludGF4IGhpZ2hsaWdodGluZy4gIENhbid0IGdpdmUgYW4KICAgIHVucHJpbnRhYmxlIGNoYXIgYW5vdGhlciBjb2xvci4gIFdvdWxkIGJlIHVzZWZ1bCBmb3IgXk0gYXQgZW5kIG9mIGxpbmUuCgoKQnVpbHQtaW4gc2NyaXB0IGxhbmd1YWdlOgo5ICAgQXV0b2xvYWQ6ICBBZGQgYSBWaW0gc2NyaXB0IGluICRWSU1SVU5USU1FL3Rvb2xzIHRoYXQgdGFrZXMgYSBmaWxlIHdpdGggYQogICAgbGlzdCBvZiBzY3JpcHQgbmFtZXMgYW5kIGEgaGVscCBmaWxlIGFuZCBwcm9kdWNlcyBhIHNjcmlwdCB0aGF0IGNhbiBiZQogICAgc291cmNlZCB0byBpbnN0YWxsIHRoZSBzY3JpcHRzIGluIHRoZSB1c2VyJ3MgZGlyZWN0b3JpZXMuCiAgICAgIFVzZSBmaW5kZmlsZSgpLCBzbyB0aGF0IG9ubHkgZmlsZSBuYW1lcyBuZWVkIHRvIGJlIGdpdmVuOgoJc2NyaXB0IHBsdWdpbi9teXNjcmlwdC52aW0KCXNjcmlwdCBhdXRvbG9hZC9teWxpYi52aW0KCXNjcmlwdCBhdXRvbG9hZC95b3VybGliLnZpbQoJaGVscGZpbGUgZG9jL215c2NyaXB0LnR4dAogICAgICBGb3IgdGhlICJoZWxwZmlsZSIgaXRlbSAiOmhlbHB0YWdzIiBpcyBydW4uCjcgICBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBzdGFuZGFyZCBvcHRpb24gdmFsdWVzLiAgTm8gbmVlZCB0byBzYXZlIGFuZAogICAgcmVzdG9yZSBvcHRpb24gdmFsdWVzLiAgRXNwZWNpYWxseSB1c2VmdWwgZm9yIG5ldyBvcHRpb25zLiAgUHJvYmxlbTogaG93CiAgICB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgKGVzcC4gZm9yIHN0cmluZyBvcHRpb25zKT8KOCAgIEFkZCByZWZlcnJpbmcgdG8ga2V5IG9wdGlvbnMgd2l0aCAiJnRfeHgiLiAgQm90aCBmb3IgImVjaG8gJnRfeHgiIGFuZAogICAgIjpsZXQgJnRfeHggPSIuICBVc2VmdWwgZm9yIG1ha2luZyBwb3J0YWJsZSBtYXBwaW5ncy4KOCAgIGV4aXN0cygiJiZvcHRpb24iKSB0ZXN0cyBpZiAnb3B0aW9uJyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gIFVzZWZ1bCBmb3IKICAgICdzaGVsbHNsYXNoJywgZm9yIGV4YW1wbGUuCi0gICBBZGQgIntyYW5nZX1zb3VyY2UiOiBleGVjdXRlIGxpbmVzIGZyb20gYSBidWZmZXIuCiAgICBBbHRlcm5hdGl2ZTogQWxsb3cgcmFuZ2UgZm9yICI6ZXhlYyIsIHBhc3MgaXQgb24gdG8gdGhlIGV4ZWN1dGVkIGNvbW1hbmQuCiAgICAoV2ViYikKICAgIFlvdSBjYW4gYWxyZWFkeSB5YW5rIGxpbmVzIGFuZCB1c2UgOkAiIHRvIGV4ZWN1dGUgdGhlbS4KNyAgICI6aW5jbHVkZSIgY29tbWFuZDoganVzdCBsaWtlICI6c291cmNlIiBidXQgZG9lc24ndCBzdGFydCBhIG5ldyBzY3JpcHRJRD8KICAgIFdpbGwgYmUgdHJpY2t5IGZvciB0aGUgbGlzdCBvZiBzY3JpcHQgbmFtZXMuCjggICBIYXZlIGEgbG9vayBhdCBWU0VMLiAgV291bGQgaXQgYmUgdXNlZnVsIHRvIGluY2x1ZGU/IChCaWdoYW0pCjggICBBZGQgIjpmdW5ncm91cCIgY29tbWFuZCwgdG8gZ3JvdXAgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG9nZXRoZXIuICBXaGVuCiAgICBlbmNvdW50ZXJlZCwgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgZ3JvdXAgYXJlIHJlbW92ZWQuICBTdWdnZXN0IHVzaW5nIGFuCiAgICBvYnNjdXJlIG5hbWUgdG8gYXZvaWQgbmFtZSBjbGFzaGVzLiAgUmVxdWlyZSBhICI6ZnVuZ3JvdXAgRU5EIiBpbiB0aGUgc2FtZQogICAgc291cmNlZCBmaWxlPyAgQXNzdW1lIHRoZSBncm91cCBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuICBIYW5kbGUKICAgIG5lc3RlZCBwYWNrYWdlcz8KICAgIEFsdGVybmF0aXZlOiBTdXBwb3J0IHBhY2thZ2VzLiAge3BhY2thZ2UtbmFtZX06e2Z1bmN0aW9uLW5hbWV9KCkuCiAgICBQYWNrYWdlcyBhcmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBmaXJzdCB1c2VkLCBmcm9tCiAgICAkVklNUlVOVElNRS9wYWNrYWdlcyAob3IgdXNlIGEgc2VhcmNoIHBhdGgpLgo3ICAgUHJlLXBhcnNlIG9yIGNvbXBpbGUgVmltIHNjcmlwdHMgaW50byBhIGJ5dGVjb2RlLgogICAgMS4gUHV0IHRoZSBieXRlY29kZSB3aXRoIHRoZSBvcmlnaW5hbCBzY3JpcHQsIHdpdGggYW4gIjppZgogICAgICAgaGFzKCdieXRlY29kZScpIiBhcm91bmQgaXQsIHNvIHRoYXQgaXQncyBvbmx5IHVzZWQgd2l0aCBhIFZpbSB0aGF0CiAgICAgICBzdXBwb3J0cyBpdC4gIFVwZGF0ZSB0aGUgY29kZSB3aXRoIGEgY29tbWFuZCwgY2FuIGJlIHVzZWQgaW4gYW4KICAgICAgIGF1dG9jb21tYW5kLgogICAgMi4gVXNlIGEgIi52aWMiIGZpbGUgKGxpa2UgUHl0aG9uIHVzZSAucHljKS4gIENyZWF0ZSBpdCB3aGVuIHdyaXRpbmcgYQogICAgICAgLnZpbSBmaWxlLiAgUHJvYmxlbTogZGlzdHJpYnV0aW9uLgogICAgMy4gVXNlIGEgY2FjaGUgZGlyZWN0b3J5IGZvciBlYWNoIHVzZXIuICBIb3cgdG8gcmVjb2duaXplIHdoaWNoIGNhY2hlZAogICAgICAgZmlsZSBiZWxvbmdzIHRvIGEgc291cmNlZCBzY3JpcHQ/CjcgICBBZGQgYXJndW1lbnQgdG8gd2lud2lkdGgoKSB0byBzdWJ0cmFjdCB0aGUgc3BhY2UgdGFrZW4gYnkgJ2ZvbGRjb2x1bW4nLAogICAgc2lnbnMgYW5kL29yICdudW1iZXInLgo4ICAgQWRkIGZ1bmN0aW9uczoKCXJlYWxuYW1lKCkJCUdldCB1c2VyIG5hbWUgKGZpcnN0LCBsYXN0LCBmdWxsKQoJCQkJdXNlcl9mdWxsbmFtZSgpIHBhdGNoIGJ5IE5pa29sYWkgV2VpYnVsbCwgTm92CgkJCQkzIDIwMDIKCQkJCU9ubHkgYWRkIHRoaXMgd2hlbiBhbHNvIGltcGxlbWVudGVkIGZvcgoJCQkJbm9uLVVuaXggc3lzdGVtcywgb3RoZXJ3aXNlIGEgc2hlbGwgY21kIGNvdWxkCgkJCQliZSB1c2VkLgoJCQkJZ2V0X3VzZXJfbmFtZSgpIGdldHMgbG9naW4gbmFtZS4KCW1lbnVwcm9wKHtuYW1lfSwge2lkeH0sIHt3aGF0fSkKCQkJCUdldCBtZW51IHByb3BlcnR5IG9mIG1lbnUge25hbWV9IGl0ZW0ge2lkeH0uCgkJCQltZW51cHJvcCgiIiwgMSwgIm5hbWUiKSByZXR1cm5zICJGaWxlIi4KCQkJCW1lbnVwcm9wKCJGaWxlIiwgMSwgIm4iKSByZXR1cm5zICJubWVudQoJCQkJRmlsZS5PcGVuLi4uIiBhcmd1bWVudC4KCQkJCVBhdGNoIGJ5IElseWEgU2hlciwgMjAwNCBBcHIgMjIKCQkJCVJldHVybiBhIGxpc3Qgb2YgbWVudXMgYW5kL29yIGEgZGljdGlvbmFyeQoJCQkJd2l0aCBwcm9wZXJ0aWVzIGluc3RlYWQuCgltYXBuYW1lKHtpZHh9LCBtb2RlKQlyZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGlkeCd0aCBtYXBwaW5nLgoJCQkJUGF0Y2ggYnkgSWx5YSBTaGVyLCAyMDA0IE1hciA0LgoJCQkJUmV0dXJuIGEgbGlzdCBpbnN0ZWFkLgoJY2hhcjJoZXgoKQkJY29udmVydCBjaGFyIHN0cmluZyB0byBoZXggc3RyaW5nLgoJYXR0cmlidXRlcygpCQlyZXR1cm4gZmlsZSBwcm90ZWN0aW9uIGZsYWdzICJkcnd4cnd4cnd4IgoJZmlsZWNvcHkoZnJvbSwgdG8pCUNvcHkgYSBmaWxlCglzaG9ydGVuKGZuYW1lKQkJc2hvcnRlbiBhIGZpbGUgbmFtZSwgbGlrZSBob21lX3JlcGxhY2UoKQoJcGVybChjbWQpCQljYWxsIFBlcmwgYW5kIHJldHVybiBzdHJpbmcKCWlucHV0cmwoKQkJbGlrZSBpbnB1dCgpIGJ1dCByaWdodC10by1sZWZ0Cgl2aXJ0dWFsbW9kZSgpCQlhZGQgYXJndW1lbnQgdG8gb2J0YWluIHdoZXRoZXIgIiQiIHdhcyB1c2VkIGluCgkJCQlWaXN1YWwgYmxvY2sgbW9kZS4KCWdldGFjcCgpCQlXaW4zMjogZ2V0IGNvZGVwYWdlIChHbGVubiBNYXluYXJkKQoJZGVsZXRlYnVmbGluZSgpCQlkZWxldGUgbGluZSBpbiBhbnkgYnVmZmVyCglhcHBlbmRidWZsaW5lKCkJCWFwcGVuZCBsaW5lIGluIGFueSBidWZmZXIKCWxpYmNhbGwoKQkJQWxsb3cgbW9yZSB0aGFuIG9uZSBhcmd1bWVudC4KCWxpYmNhbGxleHQoKQkJTGlrZSBsaWJjYWxsKCksIGJ1dCB1c2luZyBhIGNhbGxiYWNrIGZ1bmN0aW9uCgkJCQl0byBhbGxvdyB0aGUgbGlicmFyeSB0byBleGVjdXRlIGEgY29tbWFuZCBvcgoJCQkJZXZhbHVhdGUgYW4gZXhwcmVzc2lvbi4KNyAgIE1ha2UgYnVmbmFtZSgiJzAiKSByZXR1cm4gdGhlIGJ1ZmZlciBuYW1lIGZyb20gbWFyayAnMC4gIEhvdyB0byBnZXQgdGhlCiAgICBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyPyAgY29sKCInMCIpIGN1cnJlbnRseSByZXR1cm5zIHplcm8uCjggICBhcmdjKCkgcmV0dXJucyAwIHdoZW4gdXNpbmcgInZpbSAtdCB0YWciLiAgSG93IHRvIGRldGVjdCB0aGF0IG5vIGZpbGUgd2FzCiAgICBzcGVjaWZpZWQgaW4gYW55IHdheT8gIFRvIGJlIGFibGUgdG8ganVtcCB0byB0aGUgbGFzdCBlZGl0ZWQgZmlsZS4KOCAgIFBhc3MgdGhlIGV4ZWN1dGFibGUgbmFtZSB0byB0aGUgVmltIHNjcmlwdHMgaW4gc29tZSB3YXkuICBBcyB2OmFyZ3YwPwo4ICAgQWRkIGNvbW1hbmQgYXJndW1lbnRzIHdpdGggdGhyZWUgZGFzaGVzLCBwYXNzZWQgb24gdG8gVmltIHNjcmlwdHMuCjcgICBBZGQgb3B0aW9uYWwgYXJndW1lbnRzIHRvIHVzZXIgZnVuY3Rpb25zOgoJOmZ1bmMgbXlGdW5jKGFyZzEsIGFyZzIsIGFyZzMgPSAiYmxhaCIsIGFyZzQgPSAxNykKNiAgIFVzZXIgZnVuY3Rpb25zOiBGdW5jdGlvbnMgbG9jYWwgdG8gYnVmZmVyICJiOmZ1bmMoKSI/CjggICBGb3IgU3RyaW5ncyBhZGQgIjpsZXQgdmFyW3tleHByfV0gPSB7ZXhwcn0iLiAgV2hlbiBwYXN0IHRoZSBlbmQgb2YgInZhciIKICAgIGp1c3QgaWdub3JlLgo4ICAgVGhlICI9IHJlZ2lzdGVyIHNob3VsZCBiZSB3cml0YWJsZSwgaWYgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSwKICAgIG9wdGlvbiBvciBlbnZpcm9ubWVudCB2YXJpYWJsZS4KOCAgICI6bGV0ICZvcHRpb24iIHNob3VsZCBsaXN0IHRoZSB2YWx1ZSBvZiB0aGUgb3B0aW9uLgo3ICAgQWRkIHN5bklEbGlzdCgpLCBtYWtpbmcgdGhlIHdob2xlIGxpc3Qgb2Ygc3ludGF4IGl0ZW1zIG9uIHRoZSBzeW50YXggc3RhY2sKICAgIGF2YWlsYWJsZSBhcyBhIExpc3QuCjggICBBZGQgYXV0b2NvbW1hbmQtZXZlbnQgZm9yIHdoZW4gYSB2YXJpYWJsZSBpcyBjaGFuZ2VkOgoJOmF1IFZhckNoYW5nZWQge3Zhcm5hbWV9IHtjb21tYW5kc30KOCAgIEFkZCAiaGFzKCJndWlfY2FwYWJsZSIpIiwgdG8gY2hlY2sgaWYgdGhlIEdVSSBjYW4gYmUgc3RhcnRlZC4KOCAgIEFkZCBwb3NzaWJpbGl0eSB0byB1c2UgdmFyaWFibGVzIGxpa2UgcmVnaXN0ZXJzOiBjaGFyYWN0ZXJ3aXNlIChkZWZhdWx0KSwKICAgIGxpbmV3aXNlICh3aGVuIGVuZGluZyBpbiAnXG4nKSwgYmxvY2t3aXNlICh3aGVuIGVuZGluZyBpbiAnXDAwMScpLglyZWcwLAogICAgcmVnYSwgcmVnJSwgZXRjLiAgQWRkIGZ1bmN0aW9ucyBsaW5ld2lzZSh7ZXhwcn0pLCBibG9ja3dpc2Uoe2V4cHJ9KSBhbmQKICAgIGNoYXJ3aXNlKHtleHByfSkuCjcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGRvIGFueSBjb21tYW5kIG9uIGEgc3RyaW5nIHZhcmlhYmxlIChtYWtlIGEgYnVmZmVyCiAgICB3aXRoIG9uZSBsaW5lLCBjb250YWluaW5nIHRoZSBzdHJpbmcpLiAgTWF5YmUgYWRkIGFuIChpbnZpc2libGUpIHNjcmF0Y2gKICAgIGJ1ZmZlciBmb3IgdGhpcz8KCXJlc3VsdCA9IHNjcmF0Y2goc3RyaW5nLCBjb21tYW5kKQoJcmVzdWx0ID0gYXBwbHkoc3RyaW5nLCBjb21tYW5kKQoJcmVzdWx0ID0gZXhlY3V0ZShzdHJpbmcsIGNvbW1hbmQpCiAgICAiY29tbWFuZCIgd291bGQgdXNlIDw+IG5vdGF0aW9uLgogICAgRG9lcyBzY3JhdGNoIGJ1ZmZlciBoYXZlIGEgbnVtYmVyPyAgT3IgcmUtdXNlIHNhbWUgbnVtYmVyPwo3ICAgQWRkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHVuaXF1ZSBudW1iZXIgKGRhdGUgaW4gbWlsbGlzZWNvbmRzKS4KNyAgIEF1dG9tYXRpY2FsbHkgbG9hZCBhIGZ1bmN0aW9uIGZyb20gYSBmaWxlIHdoZW4gaXQgaXMgY2FsbGVkLiAgTmVlZCBhbgogICAgb3B0aW9uIGZvciB0aGUgc2VhcmNoIHBhdGguIChTZWtlcmEpCgoKUm9idXN0bmVzczoKNiAgIEFkZCBmaWxlIGxvY2tpbmcuICBMb2NrIGEgZmlsZSB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgaXQgd2l0aCBmbG9jaygpIG9yCiAgICBmY250bCgpLiAgVGhpcyBwYXRjaCBoYXMgYWR2aXNvcnkgZmlsZSBsb2NraW5nIHdoaWxlIHJlYWRpbmcvd3JpdGluZwogICAgdGhlIGZpbGUgZm9yIFZpbSA1LjQ6IH4vdmltL3BhdGNoZXMva2Fobl9maWxlX2xvY2tpbmcgLgogICAgVGhlIHBhdGNoIGlzIGluY29tcGxldGUgKG5lZWRzIHN1cHBvcnQgZm9yIG1vcmUgc3lzdGVtcywgYXV0b2NvbmYpLgogICAgQW5keSBkb2Vzbid0IGhhdmUgdGltZSB0byB3b3JrIG9uIGl0LgogICAgRGlzYWR2YW50YWdlOiBOZWVkIHRvIGZpbmQgd2F5cyB0byBncmFjZWZ1bGx5IGhhbmRsZSBmYWlsdXJlIHRvIG9idGFpbiBhCiAgICBsb2NrLiAgV2hlbiB0byByZWxlYXNlIGEgbG9jazogV2hlbiBidWZmZXIgaXMgdW5sb2FkZWQ/CgoKUGVyZm9ybWFuY2U6CjcgICBGb3Igc3RyaW5ncyB1cCB0byAzIGJ5dGVzIGRvbid0IGFsbG9jYXRlIG1lbW9yeSwgdXNlIHZfbGlzdCBpdHNlbGYgYXMgYQogICAgY2hhcmFjdGVyIGFycmF5LiAgVXNlIFZBUl9TU1RSSU5HIChzaG9ydCBzdHJpbmcpLgo4ICAgVHVybiBiX3N5bl9pYyBhbmQgYl9zeW5fY29udGFpbmVkaW4gaW50byBiX3N5bl9mbGFncy4KOSAgIExvYWRpbmcgbWVudS52aW0gc3RpbGwgdGFrZXMgcXVpdGUgYSBiaXQgb2YgdGltZS4gIEhvdyB0byBtYWtlIGl0IGZhc3Rlcj8KOCAgIGluX2lkX2xpc3QoKSB0YWtlcyBtdWNoIHRpbWUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuICBDYWNoZSB0aGUgcmVzdWx0Pwo3ICAgc2V0cGNtYXJrKCkgc2hpZnRzIHRoZSBqdW1wbGlzdCwgdGhpcyB0YWtlcyBxdWl0ZSBhIGJpdCBvZiB0aW1lIHdoZW4KICAgIGp1bXBpbmcgYXJvdW5kLiAgSW5zdGVhZCB1c2UgYW4gaW5kZXggZm9yIHRoZSBzdGFydD8KOCAgIFdoZW4gZGlzcGxheWluZyBhIHNwYWNlIHdpdGggb25seSBmb3JlZ3JvdW5kIGhpZ2hsaWdodGluZywgaXQncyB0aGUgc2FtZQogICAgYXMgYSBzcGFjZSB3aXRob3V0IGF0dHJpYnV0ZXMuICBBdm9pZCBkaXNwbGF5aW5nIHNwYWNlcyBmb3IgdGhlICJ+IiBsaW5lcwogICAgd2hlbiBzdGFydGluZyB1cCBpbiBhIGNvbG9yIHRlcm1pbmFsLgo4ICAgQXZvaWQgYWxsb2MoKSBmb3Igc2NyYXRjaCBidWZmZXIgdXNlLCBlc3AuIGluIHN5bnRheC5jLiAgSXQncyB2ZXJ5IHNsb3cgb24KICAgIFdpbjE2Lgo5ICAgU2V0dGluZyBHVUkgb3B0aW9ucyBpbiB0aGUgY29uc29sZSAoZS5nLiwgJ2d1aWZvbnQnKSBzaG91bGQgbm90IGNhdXNlIGEKICAgIHJlZHJhdy4KOCAgIFByb2ZpbGluZyBzaG93cyB0aGF0IGluX2lkX2xpc3QoKSBpcyB1c2VkIHZlcnkgb2Z0ZW4gZm9yIEMgY29kZS4gIENhbiB0aGlzCiAgICBmdW5jdGlvbiBiZSBpbXByb3ZlZD8KOCAgIEZvciBhbiBleGlzdGluZyBmaWxlLCB0aGUgcGFnZSBzaXplIG9mIHRoZSBzd2FwIGZpbGUgaXMgYWx3YXlzIHRoZQogICAgZGVmYXVsdCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgZGV2aWNlLCBiZWNhdXNlIHRoZSBzd2FwCiAgICBmaWxlIGlzIGNyZWF0ZWQgb25seSBhZnRlciBzZXR0aW5nIHRoZSBibG9jayBzaXplIGluIG1mX29wZW4oKS4gIEhvdyBjYW4KICAgIHRoaXMgYmUgaW1wcm92ZWQ/CjggICBTZXQgZGVmYXVsdCBmb3IgJ3R0eXNjcm9sbCcgdG8gaGFsZiBhIHNjcmVlbiBoZWlnaHQ/ICBTaG91bGQgc3BlZWQgdXAKICAgIE1TLURPUyB2ZXJzaW9uLiAoTmVncmkpCjcgICBDIHN5bnRheCBoaWdobGlnaHRpbmcgZ2V0cyBhIGxvdCBzbG93ZXIgYWZ0ZXIgIjpzZXQgZm9sZG1ldGhvZD1zeW50YXgiLgogICAgKENoYXJsZXMgQ2FtcGJlbGwpICBJbnNlcnRpbmcgYSAieyIgaXMgdmVyeSBzbG93LiAoZG1hbikKNyAgIEhUTUwgc3ludGF4IGhpZ2hsaWdodGluZyBpcyBzbG93IGZvciBsb25nIGxpbmVzLiAgVHJ5IGRpc3BsYXlpbmcKICAgIGh0dHA6Ly93d3cudGhlcmVnaXN0ZXIuY28udWsvY29udGVudC80LzIyOTA4Lmh0bWwuIChBbmRyZSBQYW5nKQo3ICAgQ2hlY2sgaG93IHBlcmZvcm1hbmNlIG9mIGxvYWRpbmcgdGhlIHdvcmRsaXN0IGNhbiBiZSBpbXByb3ZlZCAoYWRkaW5nIGEKICAgIGxvdCBvZiBhYmJyZXZpYXRpb25zKS4KNyAgIERPUyBjb25zb2xlOiBBZGQgdF9ETCBzdXBwb3J0LCB0byBtYWtlIHNjcm9sbGluZyBmYXN0ZXIuCjcgICBDb21waWxlIEV4IGNvbW1hbmRzIHRvIGJ5dGUgY29kZXMuICBTdG9yZSBieXRlIGNvZGVzIGluIGEgdmltIHNjcmlwdCBmaWxlCiAgICBhdCB0aGUgZW5kLCBhZnRlciAiY29tcGlsZWQ6LiAgTWFrZSBpdCBsb29rIGxpa2UgYSBzaW5nbGUgY29tbWVudCBsaW5lCiAgICBmb3Igb2xkIFZpbSB2ZXJzaW9ucy4gIEluc2VydCBmaXJzdCBsaW5lICJWaW0gc2NyaXB0IGNvbXBpbGVkIDx0aW1lc3RhbXA+LgogICAgT25seSB1c2VkIGNvbXBpbGVkIGNvZGUgd2hlbiB0aW1lc3RhbXAgbWF0Y2hlcyB0aGUgZmlsZSBzdGF0LgogICAgQWRkIGNvbW1hbmQgdG8gY29tcGlsZSBhIHZpbSBzY3JpcHQgYW5kIGFkZCBpdCB0byB0aGUgZmlsZSBpbi1wbGFjZS4KICAgIFNwbGl0IEV4IGNvbW1hbmQgZXhlY3V0aW5nIGludG8gYSBwYXJzaW5nIGFuZCBleGVjdXRpbmcgcGhhc2UuCiAgICBVc2UgY29tcGlsZWQgY29kZSBmb3IgZnVuY3Rpb25zLCB3aGlsZSBsb29wcywgZXRjLgo4ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSB3aXRoIGV4dHJlbWVseSBsb25nIGxpbmVzIChlLmcuLCBhbiBleGVjdXRhYmxlKSwgdGhlCiAgICAibGluZXJlc3QiIGluIHJlYWRmaWxlKCkgaXMgYWxsb2NhdGVkIHR3aWNlIHRvIGJlIGFibGUgdG8gY29weSB3aGF0IHdhcwogICAgcmVhZCBzbyBmYXIuICBVc2UgcmVhbGxvYygpIGluc3RlYWQ/ICBPciBzcGxpdCB0aGUgbGluZSB3aGVuIGFsbG9jYXRpbmcKICAgIG1lbW9yeSBmYWlscyBhbmQgImxpbmVyZXN0IiBpcyBiaWcgKD4gMTAwMDAwKT8KOCAgIFdoZW4gZGVmaW5pbmcgYXV0b2NvbW1hbmRzIChlLmcuLCBmcm9tICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbSksIG5lZWQgdG8KICAgIGNvbXBhcmUgZWFjaCBwYXR0ZXJuIHdpdGggYWxsIGV4aXN0aW5nIHBhdHRlcm5zLiAgVXNlIGEgaGFzaCBjb2RlIHRvIGF2b2lkCiAgICB1c2luZyBzdHJjbXAoKSB0b28gb2Z0ZW4/CjcgICBJbmNsdWRlIHR1cmJvX2xvYWRlciBwYXRjaGVzLCBzcGVlZGluZyB1cCByZWFkaW5nIGEgZmlsZT8KICAgIFNwZWVkIHVwIHJlYWRpbmcgYSBmaWxlIGJ5IHJlYWRpbmcgaXQgaW50byBhIGZpeGVkLXNpemUgYnVmZmVyLCBjcmVhdGluZwogICAgdGhlIGxpc3Qgb2YgaW5kZXhlcyBpbiBhbm90aGVyIGJ1ZmZlciwgYW5kIHRoZW4gY29weWluZyB0aGUgcmVzdWx0IGludG8gYQogICAgbWVtZmlsZSBibG9jayB3aXRoIHR3byBjb3BpZXMuICBUaGVuIHJlYWQgdGhlIG5leHQgYmxvY2sgaW50byBhbm90aGVyCiAgICBmaXhlZC1zaXplIGJ1ZmZlciwgY3JlYXRlIHRoZSBzZWNvbmQgbGlzdCBvZiBpbmRleGVzIGFuZCBjb3B5IHRleHQgZnJvbQogICAgdGhlIHR3byBibG9ja3MgdG8gdGhlIG1lbWZpbGUgYmxvY2suCjcgICBkb19jbWRsaW5lKCk6IEF2b2lkIHRoYXQgdGhlIGNvbW1hbmQgbGluZSBpcyBjb3BpZWQgdG8gYWxsb2NhdGVkIG1lbW9yeQogICAgYW5kIGZyZWVkIGFnYWluIGxhdGVyIGFsbCB0aGUgdGltZS4gIEZvciB3aGlsZSBsb29wcywgYW5kIGZvciB3aGVuIGNhbGxlZAogICAgd2l0aCBhbiBhcmd1bWVudCB0aGF0IGNhbiBiZSBtZXNzZWQgd2l0aC4KICAgIEdlbmVyaWMgc29sdXRpb246IE1ha2UgYSBzdHJ1Y3QgdGhhdCBjb250YWlucyBhIHBvaW50ZXIgYW5kIGEgZmxhZyB0aGF0CiAgICBpbmRpY2F0ZXMgaWYgdGhlIHBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIHdoZW4gcmVwbGFjZWQuCjcgICBDaGVjayB0aGF0IHRoZSBmaWxlIHNpemUgaXMgbm90IG1vcmUgdGhhbiAic2l6ZW9mKGxvbmcpIi4KLSAgIEZ1cnRoZXIgaW1wcm92ZSBmaW5kaW5nIG1hcHBpbmdzIGluIG1hcGhhc2hbXSBpbiB2Z2V0b3JwZWVrKCkKOCAgIFN5bnRheCBoaWdobGlnaHRpbmcgaXMgc2xvdyB3aGVuIGRlbGV0aW5nIGxpbmVzLiAgVHJ5IGluCiAgICAkVklNUlVOVElNRS9maWxldHlwZS52aW0uCi0gICAib3V0IG9mIG1lbW9yeSIgYWZ0ZXIgZGVsZXRpbmcgKDEsJGQpIGFuZCBjaGFuZ2luZyAoOiVzL14vPiAvKSBhIGxvdCBvZgogICAgbGluZXMgKDI3MDAwKSBhIGZldyB0aW1lcy4gIE1lbW9yeSBmcmFnbWVudGF0aW9uPwotICAgSGF2ZSBhIGxvb2sgYXQgaG93IHBka3NoIGRvZXMgbWVtb3J5IGFsbG9jYXRpb24gKGFsbG9jLmMpLiAoRGFsZWNraSkKLSAgIERvIHByb2ZpbGluZyBvbjoKICAgIC0gOmcvcGF0L25vcm1hbCBjbWQKICAgIC0gMTAwMGlpPEVzYz4KICAgIC0gZGVsZXRpbmcgMTBNYnl0ZSB3b3J0aCBvZiBsaW5lcyAobmV0c2NhcGUgYmluYXJ5KQogICAgLSAiW2kiIGFuZCAiW2QiIChZZWdhcHBhbiBMYWtzaG1hbmFuKQogICAgLSAiOmcvXi9tMCIgb24gYSA0NTBLYnl0ZSBmaWxlLiAgQW5kIHRoZSAidSIuCiAgICAtIGhpZ2hsaWdodGluZyAifi92aW0vdGVzdC9sb25nbGluZS50ZXgiLCAifi92aW0vdGVzdC9zY3dvb3AudGNsIiBhbmQKICAgICAgIn4vdmltL3Rlc3QvbG9ja3VwLnBsIi4KICAgIC0gbG9hZGluZyBhIHN5bnRheCBmaWxlIHRvIGhpZ2hsaWdodCBhbGwgd29yZHMgbm90IGZyb20gYSBkaWN0aW9uYXJ5LgogICAgLSBlZGl0aW5nIGEgVmltIHNjcmlwdCB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgb24gKGxvYWRpbmcgdmltLnZpbSkuCjcgICBTY3JlZW4gdXBkYXRpbmcgY2FuIGJlIGZ1cnRoZXIgaW1wcm92ZWQgYnkgb25seSByZWRyYXdpbmcgbGluZXMgdGhhdCB3ZXJlCiAgICBjaGFuZ2VkIChhbmQgbGluZXMgYWZ0ZXIgdGhlbSwgd2hlbiBzeW50YXggaGlnaGxpZ2h0aW5nIHdhcyB1c2VkLCBhbmQgaXQKICAgIGNoYW5nZWQpLgogICAgLSBPbiBlYWNoIGNoYW5nZSwgcmVtZW1iZXIgc3RhcnQgYW5kIGVuZCBvZiB0aGUgY2hhbmdlLgogICAgLSBXaGVuIGluc2VydGluZy9kZWxldGluZyBsaW5lcywgcmVtZW1iZXIgYmVnaW4sIGVuZCwgYW5kIGxpbmUgY291bnQuCi0gICBVc2UgbWFjcm9zL2R1YXJ0ZS9jYXBpY3VhIGZvciBwcm9maWxpbmcuICBOdmkgMS43MSBpcyB0aGUgZmFzdGVzdCEKLSAgIFdoZW4gdXNpbmcgYSBmaWxlIHdpdGggb25lIGxvbmcgbGluZSAoMU1ieXRlKSwgdGhlbiBkbyAiJGhoaGgiLCBpcyBzdGlsbAogICAgdmVyeSBzbG93LiAgQXZvaWQgY2FsbGluZyBnZXR2Y29sKCkgZm9yIGVhY2ggImgiPwotICAgRXhlY3V0aW5nIGEgcmVnaXN0ZXIsIGUuZy4gIjEwMDAwQEAiIGlzIHNsb3csIGJlY2F1c2UgaW5zX3R5cGVidWYgaGFzIHRvCiAgICBtb3ZlIHRoZSBwcmV2aW91cyBjb21tYW5kcyBmb3J3YXJkIGVhY2ggdGltZS4gIFBhc3MgY291bnQgZnJvbQogICAgbm9ybWFsX2NtZCgpIGRvd24gdG8gZG9fZXhlY3JlZygpLgotICAgUmVwZWF0aW5nIGluc2VydCAiMTAwMGktPEVzYz4iIGRpc3BsYXlzIC0tSU5TRVJULS0gYWxsIHRoZSB0aW1lLCBiZWNhdXNlIG9mCiAgICB0aGUgPEVzYz4gYXQgdGhlIGVuZC4gIE1ha2UgdGhpcyB3b3JrIGZhc3RlciAoZGlzYWJsZSByZWRyYXdpbmcpLgotICAgQXZvaWQgY2FsbHMgdG8gcGxpbmVzKCkgZm9yIGN1cnNvciBsaW5lLCB1c2Ugd19jbGluZV9oZWlnaHQuCi0gICBBZnRlciAiOnNldCBub3dyYXAiIHJlbW92ZSBzdXBlcmZsdW91cyByZWRyYXcgd2l0aCB3cm9uZyBob3IuIG9mZnNldCBpZgogICAgY3Vyc29yIGlzIHJpZ2h0IG9mIHRoZSBzY3JlZW4uCjggICBNYWtlIENUUkwtQyBvbiBVbml4IGdlbmVyYXRlIGEgc2lnbmFsLCBhdm9pZCB1c2luZyBzZWxlY3QoKSB0byBjaGVjayBmb3IgYQogICAgQ1RSTC1DIChpdCdzIHNsb3cpLgoKCkNvZGUgc2l6ZToKOCAgIEdVSTogV2hlbiBOT19DT05TT0xFIGlzIGRlZmluZWQsIG1vcmUgY29kZSBjYW4gYmUgZXhjbHVkZWQuCi0gICBQdXQgZ2V0bGluZSgpIGFuZCBjb29raWUgaW4gYSBzdHJ1Y3QsIHNvIG9ubHkgb25lIGFyZ3VtZW50IGhhcyB0byBiZQogICAgcGFzc2VkIHRvIGRvX2NtZGxpbmUoKSBhbmQgb3RoZXIgZnVuY3Rpb25zLgo4ICAgTWFrZSBhIEdVSS1vbmx5IHZlcnNpb24gZm9yIFVuaXg/CjggICBJbiBidWZfd3JpdGUgXygpIGlzbid0IG5lZWRlZCB3aGVuIHNldHRpbmcgZXJybXNnLCBkbyBpdCBvbmNlIHdoZW4gdXNpbmcKICAgIGl0Lgo3ICAgV2hlbiBjb21waWxpbmcgd2l0aCBhIEdVSS1vbmx5IHZlcnNpb24sIHRoZSBjb2RlIGZvciBjdGVybSBjb2xvcnMgY2FuIGJlCiAgICBsZWZ0IG91dC4KOCAgIFdoZW4gY29tcGlsZWQgd2l0aCBhIEdVSS1vbmx5IHZlcnNpb24sIHRoZSB0ZXJtY2FwIGVudHJpZXMgZm9yIHRlcm1pbmFscwogICAgY2FuIGJlIHJlbW92ZWQuCjggICBDYW4gdGhlIGNoZWNrIGZvciBsaWJlbGYgaW4gY29uZmlndXJlLmluIGJlIHJlbW92ZWQ/CgoKTWVzc2FnZXM6CjggICBXaGVuIHVzaW5nICI6cSIgaW4gYSBjaGFuZ2VkIGZpbGUsIHRoZSBlcnJvciBzYXlzIHRvICJhZGQgISIuICBBZGQgdGhlCiAgICBjb21tYW5kIHNvIHRoYXQgYmVnaW5uZXJzIHVuZGVyc3RhbmQgaXQ6ICJ1c2UgOnEhIi4KOCAgIEZvciAndmVyYm9zZScgbGV2ZWwgMTIgcHJpbnRzIGNvbW1hbmRzIGZyb20gc291cmNlJ2VkIGZpbGVzLiAgSG93IHRvIHNraXAKICAgIGxpbmVzIHRoYXQgYXJlbid0IGV4ZWN1dGVkPyAgUGVyaGFwcyBtb3ZlIHRoZSBlY2hvaW5nIHRvIGRvX2NtZGxpbmUoKT8KOCAgIFVzZSAncmVwb3J0JyBmb3IgIjpiZGVsIj8gIChLcmlzaG5hKSAgVG8gYXZvaWQgdGhlc2UgbWVzc2FnZXMgd2hlbiB1c2luZyBhCiAgICBzY3JpcHQuCi0gICBEZWxldGUgbWVzc2FnZSBhZnRlciBuZXcgY29tbWFuZCBoYXMgYmVlbiBlbnRlcmVkIGFuZCBoYXZlIHdhaXRlZCBmb3Iga2V5LgogICAgUGVyaGFwcyBhZnRlciB0ZW4gc2Vjb25kcz8KLSAgIE1ha2UgbWVzc2FnZSBoaXN0b3J5IGF2YWlsYWJsZSBpbiAibXNnIiB2YXJpYWJsZXM6IG1zZzEsIG1zZzIsIC4uIG1zZzkuCjkgICBDaGVjayBoYW5kbGluZyBvZiBvdmVyd3JpdGluZyBvZiBtZXNzYWdlcyBhbmQgZGVsYXlzOgogICAgVmVyeSB3cm9uZzogZXJyb3JzIHdoaWxlIHJlZHJhd2luZyBjYXVzZSBlbmRsZXNzIGxvb3AuCiAgICBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIGZpbGUgYW5kIHNjcmVlbiBzY3JvbGxzIGJlY2F1c2Ugb2YgdGhlIGxvbmcKICAgIG1lc3NhZ2UgYW5kIHJldHVybiBtdXN0IGJlIHR5cGVkLCBkb24ndCBzY3JvbGwgdGhlIHNjcmVlbiBiYWNrIGJlZm9yZQogICAgcmVkcmF3aW5nLgo3ICAgQWRkIGFuIG9wdGlvbiwgd2hpY2ggaXMgYSByZWdleHAsIHRoYXQgZGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyB3aGljaAogICAgbWF0Y2ggdGhhdCByZWdleHAgKFRzaXJraW4pLgo4ICAgV2hlbiBhZGRyZXNzIHJhbmdlIGlzIHdyb25nIHlvdSBvbmx5IGdldCAiSW52YWxpZCByYW5nZSIuICBCZSBhIGJpdCBtb3JlCiAgICBzcGVjaWZpYzogTmVnYXRpdmUsIGJleW9uZCBsYXN0IGxpbmUsIHJldmVyc2UgcmFuZ2U/ICBJbmNsdWRlIHRoZSB0ZXh0Lgo4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBpZ25vcmUgZXJyb3JzIGZvciBhIG1vbWVudCAoJ2Vycm9yaWdub3JlJz8pLiAgQW5vdGhlcgogICAgb3B0aW9uIHRvIHN3aXRjaCBvZmYgZ2l2aW5nIGVycm9yIG1lc3NhZ2VzICgnZXJyb3JxdWlldCc/KS4gIEFsc28gYW4gb3B0aW9uCiAgICBub3QgdG8gZ2l2ZSBhbnkgbWVzc2FnZXMgKCdxdWlldCcpPyAgT3IgIjpxdWlldCBvbiIsICI6cXVpZXQgb2ZmIi4KICAgIENhcmVmdWw6IEZvciBhIHNldmVyZSBlcnJvciAob3V0IG9mIG1lbW9yeSksIGFuZCB3aGVuIHRoZSB1c2VyIHN0YXJ0cwogICAgdHlwaW5nLCBlcnJvciBtZXNzYWdlcyBtdXN0IGJlIHN3aXRjaGVkIGJhY2sgb24uCiAgICBBbHNvIGEgZmxhZyB0byBpZ25vcmUgZXJyb3IgbWVzc2FnZXMgZm9yIHNoZWxsIGNvbW1hbmRzIChmb3IgbWFwcGluZ3MpLgotICAgT3B0aW9uIHRvIHNldCB0aW1lIGZvciBlbXNnKCkgc2xlZXAuICBJbnRlcnJ1cHQgc2xlZXAgd2hlbiBrZXkgaXMgdHlwZWQ/CiAgICBTbGVlcCBiZWZvcmUgc2Vjb25kIG1lc3NhZ2U/CjggICBJbiBFeCBzaWxlbnQgbW9kZSBvciB3aGVuIHJlYWRpbmcgY29tbWFuZHMgZnJvbSBhIGZpbGUsIHdoYXQgZXhhY3RseSBpcwogICAgbm90IHByaW50ZWQgYW5kIHdoYXQgaXM/ICBDaGVjayAiOnByaW50IiwgIjpzZXQgYWxsIiwgIjphcmdzIiwgIjp2ZXJzIiwKICAgIGV0Yy4gIEF0IGxlYXN0IHRoZXJlIHNob3VsZCBiZSBubyBwcm9tcHQuIChTbXVsZGVycykgIEFuZCBkb24ndCBjbGVhciB0aGUKICAgIHNjcmVlbiB3aGVuIHJlYWRpbmcgY29tbWFuZHMgZnJvbSBzdGRpbi4gKEtlbmRhbGwpCiAgICAtLT4gTWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiBpbmZvcm1hdGl2ZSBtZXNzYWdlcywgcHJvbXB0cywgZXRjLiBhbmQKCWVycm9yIG1lc3NhZ2VzLCBwcmludGluZyB0ZXh0LCBldGMuCjggICBXaW5kb3cgc2hvdWxkIGJlIHJlZHJhd24gd2hlbiByZXNpemluZyBhdCB0aGUgaGl0LWVudGVyIHByb21wdC4KICAgIEFsc28gYXQgdGhlICI6dHNlbGVjdCIgcHJvbXB0LiAgRmluZCBhIGdlbmVyaWMgc29sdXRpb24gZm9yIHJlZHJhd2luZyB3aGVuCiAgICBhIHByb21wdCBpcyBwcmVzZW50ICh3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24/KS4KCgpTY3JlZW4gdXBkYXRpbmc6CjcgICBBZGQgYSBzdHJpbmcgdG8gdGhlICdkaXNwbGF5JyBvcHRpb24gdG8gbWFrZSBDVFJMLUUgYW5kIENUUkwtWSBzY3JvbGwgb25lCiAgICBzY3JlZW4gbGluZSwgYWxzbyBpZiB0aGlzIG1lYW5zIHRoZSBmaXJzdCBsaW5lIGRvZXNuJ3Qgc3RhcnQgd2l0aCB0aGUKICAgIGZpcnN0IGNoYXJhY3RlciAobGlrZSB3aGF0IGhhcHBlbnMgd2l0aCBhIHNpbmdsZSBsaW5lIHRoYXQgZG9lc24ndCBmaXQpLgotICAgc2NyZWVuX2xpbmUoKToKICAgIC0gaW5zZXJ0L2RlbGV0ZSBjaGFyYWN0ZXIgc3R1ZmYuCiAgICAtIGltcHJvdmUgZGVsZXRlIHJlc3Qgb2YgbGluZSAoc3BhY2VzIGF0IGVuZCBvZiBsaW5lKS4KLSAgIFdoZW4gbW92aW5nIG9yIHJlc2l6aW5nIHdpbmRvdywgdHJ5IHRvIGF2b2lkIGEgY29tcGxldGUgcmVkcmF3IChlc3AuIHdoZW4KICAgIGRyYWdnaW5nIHRoZSBzdGF0dXMgbGluZSB3aXRoIHRoZSBtb3VzZSkuCi0gICBXaGVuICdsYXp5cmVkcmF3JyBzZXQsIGRvbid0IGVjaG8gOmV4IGNvbW1hbmRzPyAgTmVlZCBhIGZsYWcgdG8gcmVkcmF3IHdoZW4KICAgIHdhaXRpbmcgZm9yIGEgY2hhcmFjdGVyLgo4ICAgQWRkIGEgIjpyZWZyZXNoIFt3aW5ucl0iIGNvbW1hbmQsIHRvIGZvcmNlIHVwZGF0aW5nIGEgd2luZG93LiAgVXNlZnVsIGZyb20KICAgIGFuIGV2ZW50IGhhbmRsZXIgd2hlcmUgIjpub3JtYWwiIGNhbid0IGJlIHVzZWQuICBBbHNvIHVzZWZ1bCB3aGVuCiAgICAnbGF6eXJlZHJhdycgaXMgc2V0IGluIGEgbWFwcGluZy4KNyAgIE1ha2UgJ2xpc3QnIGFuZCAnbGluZWJyZWFrJyB3b3JrIHRvZ2V0aGVyLgoKClNjcm9sbGluZzoKOCAgIEFkZCAiem0iIGNvbW1hbmQ6IHNjcm9sbCBob3Jpem9udGFsbHkgdG8gcHV0IHRoZSBjdXJzb3IgaW4gdGhlIG1pZGRsZS4KNiAgIEFkZCBvcHRpb24gdG8gc2V0IHRoZSBvdmVybGFwIGZvciBDVFJMLUYgYW5kIENUUkwtQi4gKEdhcmhpKQotICAgZXh0ZW5kICdzY3JvbGxiaW5kJyBvcHRpb246ICdzY3JvbGxvcHQnIHdvcmRzICJzZWFyY2giLCAicmVsYXRpdmUiLCBldGMuLgogICAgQWxzbyAnZSd4ZWN1dGUgc29tZSBjb21tYW5kcyAoc2VhcmNoLCB2ZXJ0aWNhbCBtb3ZlbWVudHMpIGluIGFsbCBib3VuZAogICAgd2luZG93cy4KNyAgIEFkZCAnc2Nyb2xsYmluZCcgZmVhdHVyZSB0byBtYWtlIHRoZSBvZmZzZXQgb2Ygb25lIHdpbmRvdyB3aXRoIHRoZSBuZXh0CiAgICBvbmUgZXF1YWwgdG8gdGhlIHdpbmRvdyBoZWlnaHQuICBXaGVuIGVkaXRpbmcgb25lIGZpbGUgaW4gYm90aCB3aW5kb3dzIGl0CiAgICBsb29rcyBsaWtlIGVhY2ggd2luZG93IGRpc3BsYXlzIGEgcGFnZSBvZiB0aGUgYnVmZmVyLgotICAgQWxsb3cgc2Nyb2xsaW5nIGJ5IGRyYWdnaW5nIHdpdGggdGhlIG1vdXNlIChncmFiIGEgY2hhcmFjdGVyIGFuZCBtb3ZlIGl0CiAgICB1cC9kb3duKS4gIExpa2UgdGhlICJoYW5kIiBpbiBBY3JvYmF0IHJlYWRlci4gIFVzZSBBbHQtTGVmdE1vdXNlIGZvciB0aGlzPwogICAgKEdvbGRmYXJiKQotICAgQWRkIGNvbW1hbmQgdG8gZXhlY3V0ZSBzb21lIGNvbW1hbmRzIChzZWFyY2gsIHZlcnRpY2FsIG1vdmVtZW50cykgaW4gYWxsCiAgICBib3VuZCB3aW5kb3dzLgotICAgQWRkICdzZWFyY2gnIG9wdGlvbiB0byAnc2Nyb2xsb3B0JyB0byBhbGxvdyAnc2Nyb2xsYmluZCcgd2luZG93cyB0bwogICAgYmUgYm91bmQgYnkgcmVnZXhwIHNlYXJjaGVzCi0gICBBZGQgIno+IiBhbmQgIno8Ijogc2Nyb2xsIHNpZGV3YXlzIG9uZSBzY3JlZW5mdWwuIChDYW1wYmVsbCkKLSAgIEFkZCBvcHRpb24gdG8gc2V0IHRoZSBudW1iZXIgb2YgbGluZXMgd2hlbiBub3QgdG8gc2Nyb2xsLCBpbnN0ZWFkIG9mIHRoZQogICAgZml4ZWQgbnVtYmVyIHVzZWQgbm93IChmb3IgdGVybWluYWxzIHRoYXQgc2Nyb2xsIHNsb3cgd2l0aCBhIGxhcmdlIG51bWJlcgogICAgb2YgbGluZXMgYnV0IG5vdCB3aXRoIGEgc2luZ2xlIGxpbmUpLgoKCkF1dG9jb25mOgo4ICAgU2hvdWxkIHVzZSBhY2NvbmZpZy5oIHRvIGRlZmluZSBwcm90b3R5cGVzIHRoYXQgYXJlIHVzZWQgYnkgYXV0b2hlYWRlci4KOCAgIFNvbWUgY29tcGlsZXJzIGRvbid0IGdpdmUgYW4gZXJyb3IgZm9yICItT1BUOk9saW1pdCIgYnV0IGEgd2FybmluZy4gKFdlYmIpCiAgICBBZGQgYSBjaGVjayBmb3IgdGhlIHdhcm5pbmcsIHNvIHRoYXQgIk9saW1pdCIgY2FuIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHk/Ci0gICBBdXRvY29uZjogVXNlIEBkYXRhZGlyQCBmb3IgdGhlIHN5c3RlbSBpbmRlcGVuZGVudCBmaWxlcy4gIE1ha2Ugc3VyZSB0aGUKICAgIHN5c3RlbSBkZXBlbmRlbnQgYW5kIHN5c3RlbSBpbmRlcGVuZGVudCBmaWxlcyBhcmUgc2VwYXJhdGVkLiAoTGVpdG5lcikuCi0gICBBZGQgYXV0b2NvbmYgY2hlY2sgZm9yIHdhaXRwaWQoKS93YWl0NCgpLgotICAgUmVtb3ZlIGZjbnRsKCkgZnJvbSBhdXRvY29uZiwgYWxsIHN5c3RlbXMgaGF2ZSBpdD8KLSAgIFNldCBkZWZhdWx0IGZvciAnZGljdGlvbmFyeScsIGFkZCBzZWFyY2ggZm9yIGRpY3Rpb25hcnkgdG8gYXV0b2NvbmYuCgoKUGVybCBpbnRlcmZhY2U6CjggICBSZW5hbWUgdHlwZW1hcCBmaWxlIHRvIHNvbWV0aGluZyBlbHNlPwo3ICAgTWFrZSBidWZmZXJzIGFjY2Vzc2VkIGFzIFBlcmwgYXJyYXlzLiAoQ2xhcmspCjcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCBub24tQU5TSSBDPwo2ICAgVGNsL1RrIGhhcyB0aGUgImxvYWQiIGNvbW1hbmQ6IGxvYWQgYSBzaGFyZWQgbGlicmFyeSAoLnNvIG9yIC5kbGwpLgoKClNoYXJlZCBsaWJyYXJpZXM6CjYgICBBZGQgc3VwcG9ydCBmb3IgbG9hZGluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgY2FsbGluZyBmdW5jdGlvbnMgaW4gaXQuCgk6bGlibG9hZCBpbnRlcm5hbC1uYW1lIGxpYm5hbWUKCTpsaWJ1bmxvYWQgaW50ZXJuYWwtbmFtZQoJOmxpYmxpc3QKCTpsaWJjYWxsIGludGVybmFsLW5hbWUgZnVuY3Rpb24oYXJnMSwgYXJnMiwgLi4uKQoJOmxpYmNhbGwgZnVuY3Rpb24oYXJnMSwgYXJnMiwgLi4uKQogICAgbGliY2FsbCgpIGNhbiBoYXZlIG9ubHkgb25lIGludGVnZXIgb3IgU3RyaW5nIGFyZ3VtZW50IGF0IHRoZSBtb21lbnQuCjYgICBIYXZlIGEgbG9vayBvbiBob3cgUGVybCBoYW5kbGVzIGxvYWRpbmcgZHluYW1pYyBsaWJyYXJpZXMuCgoKVGFnczoKNyAgIENhbiBDVFJMLV0gKGp1bXAgdG8gdGFnKSBpbmNsdWRlIGEgZm9sbG93aW5nICIuIiBhbmQgIi0+IiB0byByZXN0cmljdCB0aGUKICAgIG51bWJlciBvZiBwb3NzaWJsZSBtYXRjaGVzPyBDaGVjayB0YWdzIGZpbGUgZm9yIGFuIGl0ZW0gdGhhdCBoYXMgbWVtYmVycy4KICAgIChGbGVtbWluZyBNYWRzZW4pCjggICBTY29wZSBhcmd1bWVudHMgZm9yICI6dGFnIiwgZS5nLjogIjp0YWcgY2xhc3M6Y1BhZ2Ugb3BlbiIsIGxpa2UgRWx2aXMuCjggICBXaGVuIG91dHB1dCBvZiAiOnRzZWxlY3QiIGlzIGxvbmcsIGdldHRpbmcgdGhlIG1vcmUtcHJvbXB0LCBzaG91bGQgYmUgYWJsZQogICAgdG8gdHlwZSB0aGUgdGFnIG51bWJlciBkaXJlY3RseS4KNyAgIEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIHRoZSAiLXQge3RhZ30iIGFyZ3VtZW50IG11bHRpcGxlIHRpbWVzLiAgT3BlbiBhCiAgICB3aW5kb3cgZm9yIGVhY2ggdGFnLgo3ICAgTWFrZSBvdXRwdXQgb2YgIjp0c2VsZWN0IiBhIGJpdCBuaWNlci4gIFVzZSBoaWdobGlnaHRpbmc/CjcgICBIaWdobGlnaHQgdGhlICJ0YWcgMSBvZiA+MiIgbWVzc2FnZS4gIE5ldyBoaWdobGlnaHQgZ3JvdXAsIG9yIHNhbWUgYXMgImhpdAogICAgYm90dG9tIiBzZWFyY2ggbWVzc2FnZS4KNyAgIFdoZW4gdXNpbmcgIjp0YWciIGF0IHRoZSB0b3Agb2YgdGhlIHRhZyBzdGFjaywgc2hvdWxkIGFkZCBhbm90aGVyIGVudHJ5LAogICAgc28gQ1RSTC1UIGNhbiBicmluZyB5b3UgYmFjayB0byB3aGVyZSB5b3UgYXJlIG5vdyBBTkQgdG8gd2hlcmUgeW91IHdlcmUKICAgIGJlZm9yZSB0aGUgcHJldmlvdXMgIjp0YWciIGNvbW1hbmQuIChXZWJiKQotICAgV2hlbiBkb2luZyAiW15JIiBvciAiW15EIiBhZGQgcG9zaXRpb24gdG8gdGFnIHN0YWNrLgotICAgQWRkIGNvbW1hbmQgdG8gcHV0IGN1cnJlbnQgcG9zaXRpb24gdG8gdGFnIHN0YWNrOiAiOnRwdXNoIi4KNyAgIFdoZW4gdXNpbmcgQ1RSTC1dIG9uIHNvbWVDbGFzczo6c29tZU1ldGhvZCwgc2VwYXJhdGUgY2xhc3MgZnJvbSBtZXRob2QgYW5kCiAgICB1c2UgIjp0YSBjbGFzczpzb21lQ2xhc3Mgc29tZU1ldGhvZCIuCiAgICBJbmNsdWRlIEMrKyB0YWdzIGNoYW5nZXMgKEJlcnRpbikuCUNoYW5nZSAiY2xhc3M6OmZ1bmMiIHRhZyBpbnRvICJmdW5jIgogICAgd2l0aCAiY2xhc3M9Y2xhc3MiPyAgRG9jcyBpbiBvbGRtYWlsL2JlcnRpbi9pbi54eHguCjcgICBBZGQgIjp0YWdhcmdzIiwgdG8gc2V0IHZhbHVlcyBmb3IgZmllbGRzOgoJOnRhZ2FyZ3MgY2xhc3M6c29tZWNsYXNzIGZpbGU6dmVyc2lvbi5jCgk6dGFnYXJncyBjbGVhcgogICAgVGhlc2UgYXJlIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWVzIChjaGFuZ2VzIHRoZSBvcmRlciBvZiBwcmlvcml0eSBpbiB0YWcKICAgIG1hdGNoaW5nKS4KNyAgIFN1cHBvcnQgZm9yICJndGFncyIgYW5kICJnbG9iYWwiPyAgV2l0aCAiOnJ0YWciIGNvbW1hbmQ/CiAgICBUaGVyZSBpcyBhbiBleGFtcGxlIGZvciBob3cgdG8gZG8gdGhpcyBpbiBOdmkuCiAgICBPciBkbyBpdCBsaWtlIEVsdmlzOiAndGFncHJnJyBhbmQgJ3RhZ3ByZ29uY2UnIG9wdGlvbnMuIChZYW1hZ3VjaGkpCiAgICBUaGUgRWx2aXMgbWV0aG9kIGlzIGZhciBtb3JlIGZsZXhpYmxlLCBkbyBpdCB0aGF0IHdheS4KNyAgIFN1cHBvcnQgImNvbDo5OSIgZXh0cmEgZmllbGQsIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhhdCBjb2x1bW4uICBXaXRoCiAgICBhIGZsYWcgaW4gJ2Nwb3B0aW9ucycgdG8gc3dpdGNoIGl0IG9mZiBhZ2Fpbi4KNyAgIEJldHRlciBzdXBwb3J0IGZvciBqdW1waW5nIHRvIHdoZXJlIGEgZnVuY3Rpb24gb3IgdmFyaWFibGUgaXMgdXNlZC4gIFVzZQogICAgdGhlIGlkLXV0aWxzLCB3aXRoIGEgY29ubmVjdGlvbiB0byAiZ2lkIiAoRW1hY3MgY2FuIGRvIGl0IHRvbykuICBBZGQKICAgICI6aWRzZWxlY3QiLCB3aGljaCB1c2VzIGFuICJJRCIgZGF0YWJhc2UgKG1hZGUgYnkgIm1raWQiKSBsaWtlICJ0c2VsZWN0Ii4KCgpTZWN1cml0eToKLSAgIG5vdGhpbmcgYXQgdGhlIG1vbWVudAoKCldpbjMyIEdVSToKOCAgIE1ha2UgZGVidWcgbW9kZSB3b3JrIHdoaWxlIHN0YXJ0aW5nIHVwICh2aW0gLUQpLiAgT3BlbiBjb25zb2xlIHdpbmRvdyBmb3IKICAgIHRoZSBtZXNzYWdlIGFuZCBpbnB1dD8KNyAgIFRoZSBQeXRob24gaW50ZXJmYWNlIG9ubHkgd29ya3Mgd2l0aCBvbmUgdmVyc2lvbiBvZiBQeXRob24sIHNlbGVjdGVkIGF0CiAgICBjb21waWxlIHRpbWUuICBDYW4gdGhpcyBiZSBtYWRlIHRvIHdvcmsgd2l0aCB2ZXJzaW9uIDIuMSBhbmQgMi4yCiAgICBkeW5hbWljYWxseT8KNyAgIEd2aW1FeHQ6IHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgZXhpc3RpbmcgVmltcywgbW92ZSB0aGUgbGlzdCB0byBhIHN1Ym1lbnUuCiAgICAoTWlrZSBNY0NvbGxpc3RlcikKOCAgIFdoZW4gdXNpbmcgIkVkaXQgd2l0aCBWaW0iIGZvciBvbmUgZmlsZSBpdCBjaGFuZ2VzIGRpcmVjdG9yeSwgd2hlbiBzZXZlcmFsCiAgICBmaWxlcyBhcmUgc2VsZWN0ZWQgYW5kIHVzaW5nICJFZGl0IHdpdGggc2luZ2xlIFZpbSIgdGhlIGRpcmVjdG9yeSBpc24ndAogICAgY2hhbmdlZC4gIEF0IGxlYXN0IGNoYW5nZSBkaXJlY3Rvcnkgd2hlbiB0aGUgcGF0aCBpcyB0aGUgc2FtZSBmb3IgYWxsCiAgICBmaWxlcy4gIFBlcmhhcHMganVzdCB1c2UgdGhlIHBhdGggb2YgdGhlIGZpcnN0IGZpbGUgb3IgdXNlIHRoZSBsb25nZXN0CiAgICBjb21tb24gcGFydCBvZiB0aGUgcGF0aC4KOCAgIEFkZCBmb250IGFyZ3VtZW50IHRvIHNldCB0aGUgbGZDaGFyU2V0LiAoQm9iY2lrKQo4ICAgU29tZWhvdyBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgc3lzdGVtIGxhbmd1YWdlIGFuZCBzZXQgJExBTkcsIHNvIHRoYXQKICAgIGdldHRleHQgYW5kIG1lbnVzIHdvcmsuCjggICBDb3VsZCBrZWVwIGNvbnNvbGUgb3BlbiB0byBydW4gbXVsdGlwbGUgY29tbWFuZHMsIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGhpdAogICAgcmV0dXJuIGluIGV2ZXJ5IGNvbnNvbGUuCiAgICBBbHNvOiBMb29rIGF0IGhvdyBFbWFjcyBkb2VzIHJ1bnMgZXh0ZXJuYWwgY29tbWFuZHM6CglodHRwOi8vd3d3LmNzLndhc2hpbmd0b24uZWR1L2hvbWVzL3ZvZWxrZXIvbnRlbWFjcy5odG1sLgo4ICAgTmVlZCBhIHNlcGFyYXRlIFBvcFVwIG1lbnUgZm9yIG1vZGVsZXNzIHNlbGVjdGlvbi4gIE5lZWQgdHdvIG5ldyBjb21tYW5kczoKICAgIENvcHkgc2VsZWN0aW9uIHRvIGNsaXBib2FyZCwgUGFzdGUgc2VsZWN0aW9uIChhcyB0eXBlZCB0ZXh0KS4KOCAgIFN1cHBvcnQgY29weS9wYXN0ZSBmb3Igb3RoZXIgZmlsZSBmb3JtYXRzLiAgQXQgbGVhc3QgSFRNTCwgcGVyaGFwcyBSVEYuCiAgICBBZGQgImNvcHkgc3BlY2lhbCIgYW5kICJwYXN0ZSBzcGVjaWFsIiBjb21tYW5kcz8KNyAgIFVzZSBkaWZmZXJlbnQgZGVmYXVsdCBjb2xvcnMsIHRvIG1hdGNoIHRoZSBjdXJyZW50IFdpbmRvd3MgY29sb3Igc2NoZW1lLgogICAgU3lzX1dpbmRvd1RleHQsIFN5c19XaW5kb3csIGV0Yy4gKExpb25lbCBTY2hhZmZoYXVzZXIpCjcgICBVc2UgPEMtVGFiPiB0byBjeWNsZSB0aHJvdWdoIG9wZW4gd2luZG93cyAoZS5nLiwgdGhlIGZpbmQgZGlhbG9nKS4KNyAgIDxFc2M+IHNob3VsZCBjbG9zZSBhIGRpYWxvZy4KNyAgIEtlZXAgdGhlIGNvbnNvbGUgZm9yIGV4dGVybmFsIGNvbW1hbmRzIG9wZW4uICBEb24ndCB3YWl0IGZvciBhIGtleSB0byBiZQogICAgaGl0LiAgUmUtb3BlbiBpdCB3aGVuIHRoZSB1c2VyIGhhcyBjbG9zZWQgaXQgYW55d2F5LiAgT3IgdXNlIGEgcHJlcGVuZGVkCiAgICBjb21tYW5kOiAiOm5vd2FpdCB7Y21kfSIsIG9yICI6cXVpZXQiLCB3aGljaCBleGVjdXRlcyB7Y21kfSB3aXRob3V0IGFueQogICAgcHJvbXB0cy4KNyAgIFNob3VsZCBiZSBhYmxlIHRvIHNldCBhbiBvcHRpb24gc28gdGhhdCB3aGVuIHlvdSBkb3VibGUgY2xpY2sgYSBmaWxlIHRoYXQKICAgIGlzIGFzc29jaWF0ZWQgd2l0aCBWaW0sIHlvdSBjYW4gZWl0aGVyIGdldCBhIG5ldyBpbnN0YW5jZSBvZiBWaW0sIG9yIGhhdmUKICAgIHRoZSBmaWxlIGFkZGVkIGludG8gYW4gYWxyZWFkeSBydW5uaW5nIFZpbS4KNyAgIFRoZSAiLVAiIGFyZ3VtZW50IG9ubHkgd29ya3MgZm9yIHRoZSBjdXJyZW50IGNvZGVwYWdlLiAgVXNlIHdpZGUKICAgIGZ1bmN0aW9ucyB0byBmaW5kIHRoZSB3aW5kb3cgdGl0bGUuCgoKR1VJOgo4ICAgTWFrZSBpbnB1dGRpYWxvZygpIHdvcmsgZm9yIFBob3RvbiwgQW1pZ2EsIFJpc2NPUy4KLSAgIDxDLS0+IGNhbm5vdCBiZSBtYXBwZWQuICBTaG91bGQgYmUgcG9zc2libGUgdG8gcmVjb2duaXplIHRoaXMgYXMgYQogICAgbm9ybWFsICItIiB3aXRoIHRoZSBDdHJsIG1vZGlmaWVyLgo3ICAgSW1wbGVtZW50ICI6cG9wdXAiIGZvciBvdGhlciBzeXN0ZW1zIHRoYW4gV2luZG93cy4KOCAgIEltcGxlbWVudCAiOnRlYXJvZmYiIGZvciBvdGhlciBzeXN0ZW1zIHRoYW4gV2luMzIgR1VJLgo2ICAgSW1wbGVtZW50ICI6dW50ZWFyb2ZmIjogaGlkZSBhIHRvcm4tb2ZmIG1lbnUuCjggICBXaGVuIHVzaW5nIHRoZSBzY3JvbGxiYXIgdG8gc2Nyb2xsLCBkb24ndCBtb3ZlIHRoZSBjdXJzb3IgcG9zaXRpb24uICBXaGVuCiAgICBtb3ZpbmcgdGhlIGN1cnNvcjogc2Nyb2xsIHRvIHRoZSBjdXJzb3IgcG9zaXRpb24uCjkgICBNYWtlIDxTLUluc2VydD4gcGFzdGUgZnJvbSB0aGUgY2xpcGJvYXJkIGJ5IGRlZmF1bHQuIChLdW56ZSkKNyAgIE1lbnUgbG9jYWwgdG8gYSBidWZmZXIsIGxpa2UgbWFwcGluZ3MuICBPciBsb2NhbCB0byBhIGZpbGV0eXBlPwo4ICAgSW4gQnVmZmVycyBtZW51LCBhZGQgYSBjaG9pY2Ugd2hldGhlciBzZWxlY3RpbmcgYSBidWZmZXIgb3BlbnMgaXQgaW4gdGhlCiAgICBjdXJyZW50IHdpbmRvdywgc3BsaXRzIHRoZSB3aW5kb3cgb3IgdXNlcyAiOmhpZGUiLgo4ICAgRHJhZ2dpbmcgdGhlIG1vdXNlIHBvaW50ZXIgb3V0c2lkZSBvZiBhIFZpbSBXaW5kb3cgc2hvdWxkIG1ha2UgdGhlIHRleHQKICAgIHNjcm9sbC4gIFJldHVybiBhIHZhbHVlIGZyb20gZ3VpX3NlbmRfbW91c2VfZXZlbnQoKSB0byB0aGUgbWFjaGluZQogICAgc3BlY2lmaWMgY29kZSB0byBpbmRpY2F0ZSB0aGUgdGltZSBpbiB3aGljaCB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlcGVhdGVkLgo4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBpZ25vcmUgYSBtb3VzZSBjbGljayB3aGVuIGl0J3MgdXNlZCB0byBnaXZlIFZpbSAoZ3ZpbSkKICAgIHdpbmRvdyBmb2N1cy4gIEFsc28gd2hlbiBhIG1vdXNlIGNsaWNrIGlzIHVzZWQgdG8gYnJpbmcgYSB3aW5kb3cgdG8gZnJvbnQuCjggICBNYWtlIHRoZSBzcGxpdCBpbnRvIHN5c3RlbSBpbmRlcGVuZGVudCBjb2RlIGFuZCBzeXN0ZW0gc3BlY2lmaWMgY29kZSBtb3JlCiAgICBleHBsaWNpdC4gIFRoZXJlIGFyZSB0b28gbWFueSAjaWZkZWZzIGluIGd1aS5jLgogICAgSWYgcG9zc2libGUsIHNlcGFyYXRlIHRoZSBWaW0gY29kZSBjb21wbGV0ZWx5IGZyb20gdGhlIEdVSSBjb2RlLCB0byBhbGxvdwogICAgcnVubmluZyB0aGVtIGluIHNlcGFyYXRlIHByb2Nlc3Nlcy4KNyAgIFgxMTogU3VwcG9ydCBjdXJzb3JDb2xvciByZXNvdXJjZSBhbmQgIi1jciIgYXJndW1lbnQuCjggICBYMTEgKGFuZCBvdGhlcnMpOiBDVFJMLTsgaXMgbm90IGRpZmZlcmVudCBmcm9tICc7Jy4gIFNldCB0aGUgbW9kaWZpZXIgbWFzawogICAgdG8gaW5jbHVkZSBDVFJMIGZvciBrZXlzIHdoZXJlIENUUkwgcHJvZHVjZXMgdGhlIHNhbWUgQVNDSUkgY29kZS4KNyAgIEFkZCBzb21lIGNvZGUgdG8gaGFuZGxlIHByb3BvcnRpb25hbCBmb250cyBvbiBtb3JlIHN5c3RlbXM/ICBOZWVkIHRvIGRyYXcKICAgIGVhY2ggY2hhcmFjdGVyIHNlcGFyYXRlbHkgKGxpa2UgeHRlcm0pLiAgQWxzbyBmb3Igd2hlbiBhIGRvdWJsZS13aWR0aCBmb250CiAgICBpcyBub3QgZXhhY3RseSBkb3VibGUtd2lkdGguIChNYWVkYSkKOCAgIFNob3VsZCB0YWtlIGZvbnQgZnJvbSB4dGVybSB3aGVyZSBndmltIHdhcyBzdGFydGVkIChpZiBubyBvdGhlciBkZWZhdWx0KS4KOCAgIFNlbGVjdGluZyBmb250IG5hbWVzIGluIFgxMSBpcyBkaWZmaWN1bHQsIG1ha2UgYSBzY3JpcHQgb3Igc29tZXRoaW5nIHRvCiAgICBzZWxlY3Qgb25lLgo4ICAgVmlzdWFsIGhpZ2hsaWdodGluZyBzaG91bGQga2VlcCB0aGUgc2FtZSBmb250IChib2xkLCBpdGFsaWMsIGV0Yy4pLgo4ICAgQWRkIGZsYWcgdG8gJ2d1aW9wdGlvbnMnIHRvIG5vdCBwdXQgYW55dGhpbmcgaW4gdGhlIGNsaXBib2FyZCBhdCBhbGw/CjggICBTaG91bGQgc3VwcG9ydCBhIHdheSB0byB1c2Uga2V5cyB0aGF0IHdlIGRvbid0IHJlY29nbml6ZSB5ZXQuICBBZGQgYQogICAgY29tbWFuZCB0aGF0IGFkZHMgZW50cmllcyB0byBzcGVjaWFsX2tleXMgc29tZWhvdy4JSG93IGRvIHdlIG1ha2UgdGhpcwogICAgcG9ydGFibGUgKFgxMSwgV2luMzIsIC4uKT8KNyAgIEFkZCBhIGZsYWcgdG8gJ2d1aW9wdGlvbnMnIHRoYXQgdGVsbHMgbm90IHRvIHJlbW92ZSBpbmFjdGl2ZSBtZW51IGl0ZW1zLgogICAgRm9yIHN5c3RlbXMgd2hlcmUgZ3JleWluZy1vdXQgb3IgcmVtb3ZpbmcgbWVudSBpdGVtcyBpcyB2ZXJ5IHNsb3cuICBUaGUKICAgIG1lbnUgaXRlbXMgd291bGQgcmVtYWluIHZpc2libHkgbm9ybWFsbHksIGJ1dCBub3QgZG8gYW55dGhpbmcuCjcgICBBZGQgIjptaW5pbWl6ZSIgYW5kICI6bWF4aW1pemUiLCB3aGljaCBpY29uaXplIHRoZSB3aW5kb3cgYW5kIGJhY2suCiAgICBVc2VmdWwgd2hlbiB1c2luZyBndmltIHRvIHJ1biBhIHNjcmlwdCAoZS5nLiAyaHRtbC52aW0pLgo3ICAgWDExOiBJcyBpdCBwb3NzaWJsZSB0byBmcmVlIGFsbG9jYXRlZCBjb2xvcnMsIHNvIHRoYXQgb3RoZXIgcHJvZ3JhbXMgY2FuCiAgICB1c2UgdGhlbSBhZ2Fpbj8gIE90aGVyd2lzZSwgYWxsb3cgZGlzYWJsaW5nIGFsbG9jYXRpbmcgdGhlIGRlZmF1bHQgY29sb3JzLgogICAgT3IgYWxsb2NhdGUgYW4gb3duIGNvbG9ybWFwIChjaGVjayBVQUUpLiAgV2l0aCBhbiBvcHRpb24gdG8gdXNlIGl0LiAgRm9yCiAgICB0aGUgY29tbWFuZGxpbmUsICItaW5zdGFsbCIgaXMgbW9zdGx5IHVzZWQgZm9yIFgxMSBwcm9ncmFtcy4KNyAgIEFkZCBjb21tYW5kIGxpbmUgYXJndW1lbnQgZm9yICJndmltIiBub3QgdG8gc3RhcnQgdGhlIEdVSS4gIFNvcnQgb2YgdGhlCiAgICBpbnZlcnNlIG9mICJ2aW0gLWciLiAoVmlrYXMpCjcgICBTaG91bGQgc3VwcG9ydCBtdWx0aS1jb2x1bW4gbWVudXMuCi0gICBTaG91bGQgYWRkIG9wdGlvbiBmb3Igd2hlcmUgdG8gcHV0IHRoZSAiSGVscCIgbWVudTogbGlrZSBNb3RpZiBhdCB0aGUgZmFyCiAgICByaWdodCwgb3Igd2l0aCB0aGUgb3RoZXIgbWVudXMgKGJ1dCBzdGlsbCBhdCB0aGUgcmlnaHQpLgotICAgQWRkIG1lbnUgaXRlbSB0byAiS2VlcCBJbnNlcnQgbW9kZSIuCjggICAiOm1rZ3ZpbXJjIiBjb21tYW5kLCB0aGF0IGluY2x1ZGVzIG1lbnVzLgo2ICAgQmlnIGNoYW5nZTogTW92ZSBHVUkgdG8gc2VwYXJhdGUgcHJvZ3JhbSAidmltZ3VpIiwgdG8gbWFrZSBzdGFydHVwIG9mIHZpbSBhCiAgICBsb3QgZmFzdGVyLCBidXQgc3RpbGwgYmUgYWJsZSB0byBkbyAidmltIC1nIiBvciAiOmd1aSIuCjcgICBNb3JlIGV4cGxpY2l0IG1vdXNlIGJ1dHRvbiBiaW5kaW5nIGluc3RlYWQgb2YgJ21vdXNlbW9kZWwnPwo3ICAgQWRkIG9wdGlvbiB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cgb24gdGhlIHNjcmVlbi4gICd3aW5kb3dwb3MnLAogICAgd2hpY2ggaGFzIGEgdmFsdWUgb2YgIjEyMyw0NTYiOiA8eD4sPHk+LgogICAgT3IgYWRkIGEgY29tbWFuZCwgbGlrZSAiOndpbnNpemUiPwo3ICAgQWRkIHRvb2xiYXIgZm9yIG1vcmUgR1VJcy4KOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlICJhbWVudSBpY29uPUJ1aWx0SW4jIyIsIHNvIHRoYXQgdGhlIHRvb2xiYXIgaXRlbQogICAgbmFtZSBjYW4gYmUgY2hvc2VuIGZyZWUuCjcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHB1dCB0aGUgdG9vbGJhciBvbiB0b3AsIGxlZnQsIHJpZ2h0IGFuZC9vciBib3R0b20gb2YKICAgIHRoZSB3aW5kb3c/ICBBbGxvd3MgZm9yIHNvZnRrZXktbGlrZSB1c2UuCjYgICBTZXBhcmF0ZSB0aGUgcGFydCBvZiBWaW0gdGhhdCBkb2VzIHRoZSBlZGl0aW5nIGZyb20gdGhlIHBhcnQgdGhhdCBydW5zIHRoZQogICAgR1VJLiAgQ29tbXVuaWNhdGUgdGhyb3VnaCBhIHBzZXVkby10dHkuICBWaW0gc3RhcnRzIHVwLCBjcmVhdGVzIGEKICAgIHB0eSB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUgdGVybWluYWwuICBXaGVuIHRoZSBHVUkgc3RhcnRzLCB0aGUgcHR5IGlzCiAgICByZWNvbm5lY3RlZCB0byB0aGUgR1VJIHByb2Nlc3MuICBXaGVuIHRoZSBHVUkgc3RvcHMsIGl0IGlzIGNvbm5lY3RlZCB0bwogICAgdGhlIHRlcm1pbmFsIGFnYWluLiAgQWxzbyB1c2UgdGhlIHB0eSBmb3IgZXh0ZXJuYWwgcHJvY2Vzc2VzLCBpdCBsb29rcwogICAgbGlrZSBhIHZ0MTAwIHRlcm1pbmFsIHRvIHRoZW0uICBWaW0gdXNlcyBleHRyYSBjb21tYW5kcyB0byBjb21tdW5pY2F0ZSBHVUkKICAgIHRoaW5ncy4KNyAgIE1vdGlmOiBGb3IgYSBjb25maXJtKCkgZGlhbG9nIDxFbnRlcj4gc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBubyBkZWZhdWx0CiAgICBidXR0b24gc2VsZWN0ZWQsIDxFc2M+IHNob3VsZCBjbG9zZSB0aGUgZGlhbG9nLgo3ICAgV2hlbiB1c2luZyBhIHBzZXVkby10dHkgVmltIHNob3VsZCBiZWhhdmUgbGlrZSBzb21lIHRlcm1pbmFsICh2dDUyIGxvb2tzCiAgICBzaW1wbGUgZW5vdWdoKS4gIFRlcm1pbmFsIGNvZGVzIHRvL2Zyb20gc2hlbGwgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0gICBXb3VsZCBpdCBiZSB1c2VmdWwgdG8gYmUgYWJsZSB0byBxdWl0IHRoZSBHVUkgYW5kIGdvIGJhY2sgdG8gdGhlIHRlcm1pbmFsCiAgICB3aGVyZSBpdCB3YXMgc3RhcnRlZCBmcm9tPwo3ICAgU3VwcG9ydCAiLXZpc3VhbCA8dHlwZT4iIGNvbW1hbmQgbGluZSBhcmd1bWVudC4KCgpBdXRvY29tbWFuZHM6Ci0gICBQdXQgYXV0b2NvbW1hbmQgZXZlbnQgbmFtZXMgaW4gYSBoYXNodGFibGUgZm9yIGZhc3RlciBsb29rdXA/CjcgICBGb3IgYXV0b2NvbW1hbmQgZXZlbnRzIHRoYXQgdHJpZ2dlciBtdWx0aXBsZSB0aW1lcyBwZXIgYnVmZmVyIChlLmcuLAogICAgQ3Vyc29ySG9sZCksIGdvIHRocm91Z2ggdGhlIGxpc3Qgb25jZSBhbmQgY2FjaGUgdGhlIHJlc3VsdCBmb3IgYSBzcGVjaWZpYwogICAgYnVmZmVyLiAgSW52YWxpZGF0ZSB0aGUgY2FjaGUgd2hlbiBhZGRpbmcvZGVsZXRpbmcgYXV0b2NvbW1hbmRzIG9yCiAgICBjaGFuZ2luZyB0aGUgYnVmZmVyIG5hbWUuCjggICBBZGQgU2NyaXB0UmVhZENtZCBldmVudDogdXNlZCB0byBsb2FkIHJlbW90ZSBWaW0gc2NyaXB0cywgZS5nLgogICAgInZpbSAtdSBodHRwOi8vbWFjaC9wYXRoL3ZpbXJjIi4KNyAgIEFkZCBUYWdKdW1wIGV2ZW50OiBkbyBzb21ldGhpbmcgYWZ0ZXIganVtcGluZyB0byBhIHRhZy4KOCAgIEFkZCAiVGFnSnVtcEZpbGUiIGF1dG9jb21tYW5kOiBXaGVuIGp1bXBpbmcgdG8gYW5vdGhlciBmaWxlIGZvciBhIHRhZy4KICAgIENhbiBiZSB1c2VkIHRvIG9wZW4gIm1haW4uYy5neiIgd2hlbiAibWFpbi5jIiBpc24ndCBmb3VuZC4KOCAgIFVzZSBhbm90aGVyIG9wdGlvbiB0aGFuICd1cGRhdGV0aW1lJyBmb3IgdGhlIEN1cnNvckhvbGQgZXZlbnQuICBUaGUgdHdvCiAgICB0aGluZ3MgYXJlIHVucmVsYXRlZCBmb3IgdGhlIHVzZXIgKGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbW9yZQogICAgZGlmZmljdWx0KS4KOCAgIEFkZCBhbiBldmVudCBsaWtlIEN1cnNvckhvbGQgdGhhdCBpcyB0cmlnZ2VyZWQgcmVwZWF0ZWRseSwgbm90IGp1c3Qgb25jZQogICAgYWZ0ZXIgdHlwaW5nIHNvbWV0aGluZy4KNyAgIEFkZCBhdXRvY29tbWFuZCBldmVudCBmb3Igd2hlbiBhIGJ1ZmZlciBjYW5ub3QgYmUgYWJhbmRvbmVkLiAgU28gdGhhdCB0aGUKICAgIHVzZXIgY2FuIGRlZmluZSB0aGUgYWN0aW9uIHRha2luZyAoYXV0b3dyaXRlLCBkaWFsb2csIGZhaWwpIGJhc2VkIG9uIHRoZQogICAga2luZCBvZiBmaWxlLiAoWWFrb3YgTGVybmVyKSAgT3IgaXMgQnVmTGVhdmUgc3VmZmljaWVudD8KOCAgIEF1dG9jb21tYW5kIGZvciB3aGVuIG1vZGlmaWVkIGZpbGVzIGhhdmUgYmVlbiBmb3VuZCwgd2hlbiBnZXR0aW5nIGlucHV0CiAgICBmb2N1cyBhZ2FpbiAoZS5nLiwgRmlsZUNoYW5nZWRGb2N1cykuCiAgICBDaGVjayB3aGVuOiBnZXR0aW5nIGZvY3VzLCBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyLCAuLi4KOCAgIEF1dG9jb21tYW5kcyBzaG91bGQgbm90IGNoYW5nZSByZWdpc3RlcnMuICBBbmQgbWFya3M/ICBBbmQgdGhlIGp1bXBsaXN0PwogICAgQW5kIGFueXRoaW5nIGVsc2U/ICBBZGQgYSBjb21tYW5kIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlc2UgdGhpbmdzLgo4ICAgQWRkIGF1dG9jb21tYW5kcywgdXNlciBmdW5jdGlvbnMgYW5kIHVzZXIgY29tbWFuZHMgdG8gIjpta3ZpbXJjIi4KNiAgIEFkZCBLZXltYXBDaGFuZ2VkIGV2ZW50LCBzbyB0aGF0IHRoZSBlZmZlY3RzIG9mIGEgZGlmZmVyZW50IGtleW1hcCBjYW4gYmUKICAgIGhhbmRsZWQgKGUuZy4sIG90aGVyIGZvbnQpIChSb24gQWFyb24pCjcgICBXaGVuIHRyeWluZyB0byBvcGVuIGEgZGlyZWN0b3J5LCB0cmlnZ2VyIGFuIE9wZW5EaXJlY3RvcnkgZXZlbnQuCjcgICBBZGQgZmlsZSB0eXBlIGluIGZyb250IG9mIGZpbGUgcGF0dGVybjogPGQ+IGZvciBkaXJlY3RvcnksIDxsPiBmb3IgbGluaywKICAgIDx4PiBmb3IgZXhlY3V0YWJsZSwgZXRjLiAgPCZ4eHg+IGZvciBSaXNjIE9TLiAgV2l0aCBjb21tYXMgdG8gc2VwYXJhdGUKICAgIGFsdGVybmF0aXZlcy4gIFRoZSBhdXRvY29tbWFuZCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gYm90aCB0aGUgZmlsZSB0eXBlCiAgICBBTkQgdGhlIGZpbGUgcGF0dGVybiBtYXRjaC4gKExlb25hcmQpCjUgICBBZGQgb3B0aW9uIHRoYXQgc3BlY2lmaWVzIGV4dGVuc2lvbnMgd2hpY2ggYXJlIHRvIGJlIGRpc2NhcmRlZCBmcm9tIHRoZQogICAgZmlsZSBuYW1lLiAgRS5nLiAnYXVzdWZmaXgnLCB3aXRoICIuZ3osLm9yaWciLiAgU3VjaCB0aGF0IGZpbGUuYy5neiB3aWxsCiAgICB0cmlnZ2VyIHRoZSAiKi5jIiBhdXRvY29tbWFuZHMuICAoQmVsYWJhcykKNyAgIEFkZCBzb21ldGhpbmcgdG8gYnJlYWsgdGhlIGF1dG9jb21tYW5kcyBmb3IgdGhlIGN1cnJlbnQgZXZlbnQsIGFuZCBmb3IKICAgIHdoYXQgZm9sbG93cy4gIFVzZWZ1bCBmb3IgYSAiQnVmV3JpdGVQcmUiIHRoYXQgd2FudHMgdG8gYXZvaWQgd3JpdGluZyB0aGUKICAgIGZpbGUuCjggICBXaGVuIGVkaXRpbmcgInR0Lmd6Iiwgd2hpY2ggaXMgaW4gRE9TIGZvcm1hdCwgJ2ZpbGVmb3JtYXQnIHN0YXlzIGF0CiAgICAidW5peCIsIHRodXMgd3JpdGluZyB0aGUgZmlsZSBjaGFuZ2VzIGl0LiAgU29tZWhvdyBkZXRlY3QgdGhhdCB0aGUgcmVhZAogICAgY29tbWFuZCB1c2VkIGRvcyBmaWxlZm9ybWF0LiAgU2FtZSBmb3IgJ2ZpbGVlbmNvZGluZycuCi0gICBBZGQgZXZlbnRzIHRvIGF1dG9jb21tYW5kczoKICAgIEVycm9yCSAgICAtIFdoZW4gYW4gZXJyb3IgaGFwcGVucwogICAgTm9ybWFsRW50ZXIJICAgIC0gRW50ZXJpbmcgTm9ybWFsIG1vZGUKICAgIFJlcGxhY2VFbnRlciAgICAtIEVudGVyaW5nIFJlcGxhY2UgbW9kZQogICAgQ21kRW50ZXIJICAgIC0gRW50ZXJpbmcgQ21kbGluZSBtb2RlCiAgICBWaXN1YWxFbnRlcgkgICAgLSBFbnRlcmluZyBWaXN1YWwgbW9kZQogICAgKkxlYXZlCSAgICAtIExlYXZpbmcgYSBtb2RlIChpbiBwYWlyIHdpdGggdGhlIGFib3ZlICpFbnRlcikKICAgIFZpbUxlYXZlQ2hlY2sgICAgLSBCZWZvcmUgVmltIGRlY2lkZXMgdG8gZXhpdCwgc28gdGhhdCBpdCBjYW4gYmUgY2FuY2VsbGVkCgkJICAgICAgd2hlbiBleGl0aW5nIGlzbid0IGEgZ29vZCBpZGVhLgogICAgV2luTW92ZWQJICAgIC0gd2hlbiB3aW5kb3dzIGhhdmUgYmVlbiBtb3ZlZCBhcm91bmQsIGUuZywgIjp3aW5jbWQgSiIKICAgIENtZFVuZGVmaW5lZCAgICAtIExpa2UgRnVuY1VuZGVmaW5lZCBidXQgZm9yIHVzZXIgY29tbWFuZHMuCiAgICBTZWFyY2hQb3N0CSAgICAtIEFmdGVyIGRvaW5nIGEgc2VhcmNoIGNvbW1hbmQgKGUuZy4gdG8gZG8gIk0iKQogICAgUHJlRGlyQ2hhbmdlZC9Qb3N0RGlyQ2hhbmdlZAoJCSAgICAtIEJlZm9yZS9hZnRlciAiOmNkIiBoYXMgYmVlbiB1c2VkIChmb3IgY2hhbmdpbmcgdGhlCgkJICAgICAgd2luZG93IHRpdGxlKQogICAgQnVmUmVhZEFjdGlvbiAgIC0gcmVwbGFjZXMgcmVhZGluZyBhIGZpbGUKICAgIEJ1ZldyaXRlQWN0aW9uICAtIHJlcGxhY2VzIHdyaXRpbmcgYSBmaWxlCiAgICBTaHV0RG93bgkgICAgLSB3aGVuIHRoZSBzeXN0ZW0gaXMgYWJvdXQgdG8gc2h1dCBkb3duCiAgICBJbnNlcnRDaGFyUHJlICAgLSB1c2VyIHR5cGVkIGNoYXJhY3RlciBJbnNlcnQgbW9kZSwgYmVmb3JlIGluc2VydGluZyB0aGUKCQkgICAgICBjaGFyLiAgUGF0dGVybiBpcyBtYXRjaGVkIHdpdGggdGV4dCBiZWZvcmUgdGhlIGN1cnNvci4KCQkgICAgICBTZXQgdjpjaGFyIHRvIHRoZSBjaGFyYWN0ZXIsIGNhbiBiZSBjaGFuZ2VkLgoJCSAgICAgIChub3QgdHJpZ2dlcmVkIHdoZW4gJ3Bhc3RlJyBpcyBzZXQpLgogICAgSW5zZXJ0Q2hhclBvc3QgIC0gdXNlciB0eXBlZCBhIGNoYXJhY3RlciBpbiBJbnNlcnQgbW9kZSwgYWZ0ZXIgaW5zZXJ0aW5nCgkJICAgICAgdGhlIGNoYXIuCiAgICBCdWZNb2RpZmllZAkgICAgLSBXaGVuIGEgYnVmZmVyIGJlY29tZXMgbW9kaWZpZWQsIG9yIHVubW9kaWZpZWQgKGZvcgoJCSAgICAgIHB1dHRpbmcgYSBbK10gaW4gdGhlIHdpbmRvdyB0aXRsZSBvciBjaGVja2luZyBvdXQgdGhlCgkJICAgICAgZmlsZSBmcm9tIENWUykuCiAgICBCdWZGaXJzdENoYW5nZSAgLSBXaGVuIG1ha2luZyBhIGNoYW5nZSwgd2hlbiAnbW9kaWZpZWQnIGlzIHNldC4gIENhbiBiZQoJCSAgICAgIHVzZWQgdG8gZG8gYSA6cHJlc2VydmUgZm9yIHJlbW90ZSBmaWxlcy4KICAgIEJ1ZkNoYW5nZQkgICAgLSBhZnRlciBhIGNoYW5nZSB3YXMgbWFkZS4gIFNldCBzb21lIHZhcmlhYmxlcyB0byBpbmRpY2F0ZQoJCSAgICAgIHRoZSBwb3NpdGlvbiBhbmQgbnVtYmVyIG9mIGluc2VydGVkL2RlbGV0ZWQgbGluZXMsIHNvCgkJICAgICAgdGhhdCBtYXJrcyBjYW4gYmUgdXBkYXRlZC4gIEhpZXJBc3Npc3QgaGFzIHBhdGNoIHRvIGFkZAoJCSAgICAgIEJ1ZkNoYW5nZVByZSwgQnVmQ2hhbmdlUG9zdCBhbmQgUmV2ZXJ0QnVmLiAoU2hhaCkKICAgIFdpblJlc2l6ZWQJICAgIC0gV2hlbiBhIHdpbmRvdyBoYXMgYmVlbiByZXNpemVkCi0gICBXcml0ZSB0aGUgZmlsZSBub3cgYW5kIHRoZW4gKCdhdXRvc2F2ZScpOgoJCQkJICAqJ2F1dG9zYXZlJyogKidhcycqIConbm9hdXRvc2F2ZScqIConbm9hcycqCiAgICAnYXV0b3NhdmUnICdhdycgbnVtYmVyICAoZGVmYXVsdCAwKQoJICAgIEF1dG9tYXRpY2FsbHkgd3JpdGUgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIGZpbGUgTiBzZWNvbmRzIGFmdGVyIHRoZQoJICAgIGxhc3QgY2hhbmdlIGhhcyBiZWVuIG1hZGUgYW5kIHdoZW4gfCdtb2RpZmllZCd8IGlzIHN0aWxsIHNldC4KCSAgICBEZWZhdWx0OiAwID0gZG8gbm90IGF1dG9zYXZlIHRoZSBidWZmZXIuCiAgICBBbHRlcm5hdGl2ZTogaGF2ZSAnYXV0b3NhdmUnIHVzZSAndXBkYXRldGltZScgYW5kICd1cGRhdGVjb3VudCcgYnV0IG1ha2UKICAgIHRoZW0gc2F2ZSB0aGUgZmlsZSBpdHNlbGYgYmVzaWRlcyB0aGUgc3dhcGZpbGUuCgoKT21uaSBjb21wbGV0aW9uOgotICAgSWRlYXMgZnJvbSB0aGUgVmltIDcgQk9GIGF0IFNBTkU6CgktIEZvciBpbnRlcnByZXRlZCBsYW5ndWFnZXMsIHVzZSB0aGUgaW50ZXJwcmV0ZXIgdG8gb2J0YWluIGluZm9ybWF0aW9uLgoJICBTaG91bGQgd29yayBmb3IgSmF2YSAoRWNsaXBzZSBkb2VzIHRoaXMpLCBQeXRob24sIFRjbCwgZXRjLgoJICBSaWNoYXJkIEVtYmVyc29uIG1lbnRpb25lZCB3b3JraW5nIG9uIGFuIGludGVyZmFjZSB0byBKYXZhLgoJLSBDaGVjayBSZWFkbGluZSBmb3IgaXRzIGNvbXBsZXRpb24gaW50ZXJmYWNlLgoJLSBVc2UgY3RhZ3MgZm9yIG90aGVyIGxhbmd1YWdlcy4gIFdyaXRpbmcgYSBmaWxlIGNvdWxkIHRyaWdnZXIgcnVubmluZwoJICBjdGFncywgbWVyZ2luZyB0aGUgdGFncyBvZiB0aGUgY2hhbmdlZCBmaWxlLgotICAgSWRlYXMgZnJvbSBvdGhlcnM6CglodHRwOi8vd3d3Lndob2xldG9tYXRvLmNvbS8KCWh0dHA6Ly93d3cudmltLm9yZy9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTc0NwoJICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvaW5zZW52aW0KCQlvciBodHRwOi8vaW5zZW52aW0uc291cmNlZm9yZ2UubmV0CgkgICAgSmF2YSwgWE1MLCBIVE1MLCBDKyssIEpTUCwgU1FMLCBDIwoJICAgIE1TLVdpbmRvd3Mgb25seSwgbG90cyBvZiBkZXBlbmRlbmNpZXMgKGUuZy4gUGVybCwgSW50ZXJuZXQKCQlleHBsb3JlciksIHVzZXMgLmRsbCBzaGFyZWQgbGlicmFyaWVzLgoJICAgIEZvciBDKysgdXNlcyAkSU5DTFVERSBlbnZpcm9ubWVudCB2YXIuCgkgICAgVXNlcyBQZXJsIGZvciBDKysuCgkgICAgVXNlcyBjdGFncyB0byBmaW5kIHRoZSBpbmZvOgoJCWN0YWdzIC1mICRhbGxUYWdzRmlsZSAtLWZpZWxkcz0rYWlLbW5zU3ogLS1sYW5ndWFnZS1mb3JjZT1DKysgLS1DKysta2luZHM9K2NlZmdtbnBzdXQtZGx1eCAtdSAkZmlsZXMKCXd3dy52aW0ub3JnIHNjcmlwdCAxMjEzIChKYXZhIERldmVsb3BtZW50IEVudmlyb25tZW50KSAoRnVjaHVhbiBXYW5nKQoJSUNvbXBsZXRlOiBodHRwOi8vd3d3LnZpbS5vcmcvc2NyaXB0cy9zY3JpcHQucGhwP3NjcmlwdF9pZD0xMjY1CgkgICAgYW5kIGh0dHA6Ly9zdHVkNC50dXdpZW4uYWMuYXQvfmUwMTI1NjcyL2ljb21wbGV0ZS8KCWh0dHA6Ly9jZWRldC5zb3VyY2Vmb3JnZS5uZXQvaW50ZWxsaXNlbnNlLnNodG1sIChmb3IgRW1hY3MpCglJdmFuIFZpbGxhbnVldmEgaGFzIHNvbWV0aGluZyBmb3IgSmF2YS4KCUVtYWRzOiBodHRwOi8vd3d3LnhyZWYtdGVjaC5jb20veHJlZmFjdG9yeS9tb3JlX2NfY29tcGxldGlvbi5odG1sCglDb21wbGV0aW9uIGluIC5ORVQgZnJhbWV3b3JrIFNoYXJwRGV2ZWxvcDogaHR0cDovL3d3dy5pY3NoYXJwY29kZS5uZXQKLSAgIFByZS1leHBhbmQgYWJicmV2aWF0aW9ucywgc2hvdyB3aGljaCBhYmJyZXZzIHdvdWxkIG1hdGNoPwoKCkluc2VydCBtb2RlIGNvbXBsZXRpb24vZXhwYW5zaW9uOgotICAgR1VJIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwb3B1cCBtZW51Lgo4ICAgV2hlbiB0aGVyZSBpcyBubyB3b3JkIGJlZm9yZSB0aGUgY3Vyc29yIGJ1dCBzb21ldGhpbmcgbGlrZSAic3lzLiIgY29tcGxldGUKICAgIHdpdGggInN5cy4iLiAgV29ya3Mgd2VsbCBmb3IgQyBhbmQgc2ltaWxhciBsYW5ndWFnZXMuCjkgICBeWF5MIGNvbXBsZXRpb24gZG9lc24ndCByZXBlYXQgY29ycmVjdGx5LiAgSXQgdXNlcyB0aGUgZmlyc3QgbWF0Y2ggd2l0aAogICAgdGhlIGxhc3QgYWRkZWQgbGluZSwgaW5zdGVhZCBvZiBjb250aW51aW5nIHdoZXJlIHRoZSBsYXN0IG1hdGNoIGVuZGVkLgogICAgKFdlYmIpCjggICBBZGQgb3B0aW9uIHRvIHNldCBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIEluc2VydCBtb2RlIGNvbXBsZXRpb246CiAgICAtIGlnbm9yZS9tYXRjaCBjYXNlCiAgICAtIGRpZmZlcmVudCBjaGFyYWN0ZXJzIHRoYW4gJ2lza2V5d29yZCcKOCAgIEFkZCBhIGNvbW1hbmQgdG8gdW5kbyB0aGUgY29tcGxldGlvbiwgZ28gYmFjayB0byB0aGUgb3JpZ2luYWwgdGV4dC4KNyAgIENvbXBsZXRpb24gb2YgYW4gYWJicmV2aWF0aW9uOiBDYW4gbGVhdmUgbGV0dGVycyBvdXQsIGxpa2Ugd2hhdCBJbnN0YW50CiAgICB0ZXh0IGRvZXM6IHd3dy50ZXh0d2FyZS5jb20KOCAgIFVzZSB0aGUgY2xhc3MgaW5mb3JtYXRpb24gaW4gdGhlIHRhZ3MgZmlsZSB0byBkbyBjb250ZXh0LXNlbnNpdGl2ZQogICAgY29tcGxldGlvbi4gIEFmdGVyICJmb28uIiBjb21wbGV0ZSBhbGwgbWVtYmVyIGZ1bmN0aW9ucy92YXJpYWJsZXMgb2YKICAgICJmb28iLiAgTmVlZCB0byBzZWFyY2ggYmFja3dhcmRzIGZvciB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvZiBmb28uCiAgICBTaG91bGQgd29yayBmb3IgQysrIGFuZCBKYXZhLgogICAgRXZlbiBtb3JlIGNvbnRleHQgd291bGQgYmUgbmljZTogImltcG9ydCBqYXZhLl5OIiAtPiAiaW8iLCAibGFuZyIsIGV0Yy4KNyAgIFdoZW4gZXhwYW5kaW5nICRIT01FL2RpciB3aXRoIF5YXkYga2VlcCB0aGUgJEhPTUUgKHdpdGggYW4gb3B0aW9uPykuCjcgICBBZGQgQ1RSTC1YIGNvbW1hbmQgaW4gSW5zZXJ0IG1vZGUgbGlrZSBDVFJMLVggQ1RSTC1OLCB0aGF0IGNvbXBsZXRlcyBXT1JEUwogICAgaW5zdGVhZCBvZiB3b3Jkcy4KOCAgIEFkZCBDVFJMLVggQ1RSTC1SOiBjb21wbGV0ZSB3b3JkcyBmcm9tIHJlZ2lzdGVyIGNvbnRlbnRzLgo4ICAgQWRkIGNvbXBsZXRpb24gb2YgcHJldmlvdXNseSBpbnNlcnRlZCB0ZXh0cyAobGlrZSB3aGF0IENUUkwtQSBkb2VzKS4KICAgIFJlcXVpcmVzIHJlbWVtYmVyaW5nIGEgbnVtYmVyIG9mIGluc2VydGlvbnMuCjggICBBZGQgJ2YnIGZsYWcgdG8gJ2NvbXBsZXRlJzogRXhwYW5kIGZpbGUgbmFtZXMuCiAgICBBbHNvIGFwcGx5ICdjb21wbGV0ZScgdG8gd2hvbGUgbGluZSBjb21wbGV0aW9uLgotICAgTWFrZSBpdCBwb3NzaWJsZSB0byBzZWFyY2ggaW5jbHVkZSBmaWxlcyBpbiBzZXZlcmFsIHBsYWNlcy4gIFVzZSB0aGUKICAgICdwYXRoJyBvcHRpb24/ICBDYW4gdGhpcyBiZSBkb25lIHdpdGggdGhlIGRpY3Rpb25hcnkgY29tcGxldGlvbiAodXNlCiAgICB3aWxkY2FyZHMgaW4gdGhlIGZpbGUgbmFtZSk/Ci0gICBNYWtlIENUUkwtWCBDVFJMLUsgZG8gYSBiaW5hcnkgc2VhcmNoIGluIHRoZSBkaWN0aW9uYXJ5IChpZiBpdCdzIHNvcnRlZCkuCi0gICBTcGVlZCB1cCBDVFJMLVggQ1RSTC1LIGRpY3Rpb25hcnkgc2VhcmNoaW5nIChkb24ndCB1c2UgYSByZWdleHA/KS4KLSAgIFNldCBhIG1hcmsgYXQgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBtYXRjaCB3YXMgZm91bmQgKGZpbGUgbWFyaywgY291bGQKICAgIGJlIGluIGFub3RoZXIgZmlsZSkuCi0gICBBZGQgQ1RSTC1BIGNvbW1hbmQgaW4gQ1RSTC1YIG1vZGU6IHNob3cgYWxsIG1hdGNoZXMuCi0gICBNYWtlIENUUkwtWCBDVFJMLUwgdXNlIHRoZSAnY29tcGxldGUnIG9wdGlvbj8KLSAgIEFkZCBjb21tYW5kIGluIENUUkwtWCBtb2RlIHRvIGFkZCBmb2xsb3dpbmcgd29yZHMgdG8gdGhlIGNvbXBsZXRlZCBzdHJpbmcKICAgIChlLmcuIHRvIGNvbXBsZXRlICJQb2ludGVyLT5lbGVtZW50IiB3aXRoIENUUkwtWCBDVFJMLVAgQ1RSTC1XIENUUkwtVykKLSAgIENUUkwtWCBDVFJMLUY6IFVzZSAncGF0aCcgdG8gZmluZCBjb21wbGV0aW9ucy4KLSAgIENUUkwtWCBDVFJMLUY6IE9wdGlvbiB0byB1c2UgZm9yd2FyZCBzbGFzaGVzIG9uIE1TLVdpbmRvd3M/Ci0gICBDVFJMLVggQ1RSTC1GOiBEb24ndCByZXBsYWNlICIkVklNIiB3aXRoIHRoZSBhY3R1YWwgdmFsdWUuIChLZWxseSkKOCAgIEFkZCBvcHRpb24gJ2lzZXhwYW5kJywgY29udGFpbmluZyBjaGFyYWN0ZXJzIHdoZW4gZG9pbmcgZXhwYW5zaW9uIChzbyB0aGF0CiAgICAiLiIgYW5kICJcIiBjYW4gYmUgaW5jbHVkZWQsIHdpdGhvdXQgY2hhbmdpbmcgJ2lza2V5d29yZCcpLiAoR29sZGZhcmIpCiAgICBBbHNvOiAnaXN0YWd3b3JkJzogY2hhcmFjdGVycyB1c2VkIGZvciBDVFJMLV0uCiAgICBXaGVuICdpc2V4cGFuZCcgb3IgJ2lzdGFnd29yZCcgYXJlIGVtcHR5LCB1c2UgJ2lza2V5d29yZCcuCi0gICBBbGxvdyBsaXN0aW5nIGFsbCBtYXRjaGVzIGluIHNvbWUgd2F5IChhbmQgcGlja2luZyBvbmUgZnJvbSB0aGUgbGlzdCkuCgoKQ29tbWFuZCBsaW5lIGVkaXRpbmc6CjcgICBBZGQgY29tbWFuZHMgKGtleXMpIHRvIGRlbGV0ZSBmcm9tIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgY29tbWFuZAogICAgbGluZS4KOCAgIEN1c3RvbSBjb21wbGV0aW9uIG9mIHVzZXIgY29tbWFuZHMgY2FuJ3QgdXNlIHRoZSBzdGFuZGFyZCBjb21wbGV0aW9uCiAgICBmdW5jdGlvbnMuICBBZGQgYSBob29rIHRvIGludm9rZSBhIHVzZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB0eXBlIG9mCiAgICBjb21wbGV0aW9uIHRvIGJlIGRvbmU6ICJmaWxlIiwgInRhZyIsICJjdXN0b20iLCBldGMuCi0gICBBZGQgZmxhZ3MgdG8gJ3doaWNod3JhcCcgZm9yIGNvbW1hbmQgbGluZSBlZGl0aW5nIChjdXJzb3IgcmlnaHQgYXQgZW5kIG9mCiAgICBsaW5lcyB3cmFwcyB0byBzdGFydCBvZiBsaW5lKS4KLSAgIE1ha2UgZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lIHdvcmsgbGlrZSBJbnNlcnQgbW9kZSBpbiBhIHNpbmdsZS1saW5lIHZpZXcKICAgIG9uIGEgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5LiAgQnV0IHRoaXMgaGFzIG1hbnkKICAgIGRpc2FkdmFudGFnZXMsIG9ubHkgaW1wbGVtZW50IGl0IHdoZW4gdGhlc2UgY2FuIGJlIHNvbHZlZC4gIEVsdmlzIGhhcyBydW4KICAgIGludG8gdGhlc2UsIHNlZSByZW1hcmtzIGZyb20gU3RldmUgKH4vTWFpbC9vbGRtYWlsL2tpcmtlbmRhbGwvaW4uMDAwMTIpLgogICAgLSBHb2luZyBiYWNrIGluIGhpc3RvcnkgYW5kIGVkaXRpbmcgYSBsaW5lIHRoZXJlIHdvdWxkIGNoYW5nZSB0aGUgaGlzdG9yeS4KICAgICAgV291bGQgc3RpbGwgbmVlZCB0byBrZWVwIGEgY29weSBvZiB0aGUgaGlzdG9yeSBlbHNld2hlcmUuICBMaWtlIHRoZQogICAgICBjbWR3aW4gZG9lcyBub3cgYWxyZWFkeS4KICAgIC0gVXNlIENUUkwtTyB0byBleGVjdXRlIG9uZSBOb3JtYWwgbW9kZSBjb21tYW5kLiAgSG93IHRvIHN3aXRjaCB0byBub3JtYWwKICAgICAgbW9kZSBmb3IgbW9yZSBjb21tYW5kcz8gIDxFc2M+IHNob3VsZCBjYW5jZWwgdGhlIGNvbW1hbmQgbGluZS4gIENUUkwtVD8KICAgIC0gVG8gYWxsb3cgIi8iIGFuZCAiPSBuZWVkIHRvIHJlY3Vyc2l2ZWx5IGNhbGwgZ2V0Y21kbGluZSgpLCBvdmVyd3JpdGUgdGhlCiAgICAgIGNtZGxpbmUuICBCdXQgdGhlbiB3ZSBhcmUgZWRpdGluZyBhIGNvbW1hbmQtbGluZSBhZ2Fpbi4gIEhvdyB0byBhdm9pZAogICAgICB0aGF0IHRoZSB1c2VyIGdldHMgY29uZnVzZWQgYnkgdGhlIHN0YWNrIG9mIGNvbW1hbmQgbGluZXM/CiAgICAtIFVzZSBlZGl0KCkgZm9yIG5vcm1hbCBjbWRsaW5lIGVkaXRpbmc/ICBXb3VsZCBoYXZlIHRvIGludGVncmF0ZQogICAgICBnZXRjbWRsaW5lKCkgaW50byBlZGl0KCkuICBOZWVkIHRvIHNvbHZlIGNvbmZsaWN0cyBiZXR3ZWVuIEluc2VydCBtb2RlCiAgICAgIGFuZCBDb21tYW5kLWxpbmUgbW9kZSBjb21tYW5kcy4gIE1ha2UgaXQgd29yayBsaWtlIEtvcm4gc2hlbGwgYW5kIHRjc2guCiAgICAgIFByb2JsZW1zOgoJLSBJbnNlcnQ6IGNvbXBsZXRpb24gd2l0aCAnd2lsZGNoYXInCgktIEluc2VydDogdXNlIGNtZGxpbmUgYWJicmV2aWF0aW9ucwoJLSBJbnNlcnQ6IENUUkwtRCBkZWxldGVzIGluZGVudCBpbnN0ZWFkIG9mIGxpc3RpbmcgbWF0Y2hlcwoJLSBOb3JtYWw6IG5vIENUUkwtVyBjb21tYW5kcwoJLSBOb3JtYWw6IG5vICI6IiBjb21tYW5kcz8KCS0gTm9ybWFsOiBhbGxvdyBWaXN1YWwgbW9kZSBvbmx5IHdpdGhpbiBvbmUgbGluZS4KICAgIC0gd2hlcmUgdG8gc2hvdyBpbnNlcnQvbm9ybWFsIG1vZGUgbWVzc2FnZT8gIENoYW5nZSBoaWdobGlnaHRpbmcgb2YKICAgICAgY2hhcmFjdGVyIGluIGZpcnN0IGNvbHVtbj8KICAgIC0gSW1wbGVtZW50YXRpb24gaWRlYXM6CiAgICAgIC0gU2V0ICJjdXJ3aW4iIGFuZCAiY3VyYnVmIiB0byB0aGUgY29tbWFuZCBsaW5lIHdpbmRvdyBhbmQgYnVmZmVyLgogICAgICAtIGN1cndpbi0+d190b3BsaW5lIGlzIGFsd2F5cyBlcXVhbCB0byBjdXJ3aW4tPndfY3Vyc29yLmxudW0uCiAgICAgIC0gbmV2ZXIgc2V0ICdudW1iZXInLCBubyBmb2xkaW5nLCBldGMuICBObyBzdGF0dXMgbGluZS4KICAgICAgLSBzeW5jIHVuZG8gYWZ0ZXIgZW50ZXJpbmcgYSBjb21tYW5kIGxpbmU/CiAgICAgIC0gdXNlIE5WX05PQ0wgZmxhZyBmb3IgY29tbWFuZHMgdGhhdCBhcmUgbm90IGFsbG93ZWQgaW4gQ29tbWFuZC1saW5lCglNb2RlLgoKCkNvbW1hbmQgbGluZSBjb21wbGV0aW9uOgo4ICAgQ2hhbmdlIGV4cGFuZF9pbnRlcmFjdGl2ZWx5IGludG8gYSBmbGFnIHRoYXQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50Lgo4ICAgV2l0aCBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBhZnRlciAnJScgYW5kICcjJywgZXhwYW5kIGN1cnJlbnQvYWx0ZXJuYXRlCiAgICBmaWxlIG5hbWUsIHNvIGl0IGNhbiBiZSBlZGl0ZWQuICBBbHNvIHdpdGggbW9kaWZpZXJzLCBzdWNoIGFzICIlOmgiLgo4ICAgV2hlbiBjb21wbGV0aW5nIGNvbW1hbmQgbmFtZXMsIGVpdGhlciBzb3J0IHRoZW0gb24gdGhlIGxvbmcgbmFtZSwgb3IgbGlzdAogICAgdGhlbSB3aXRoIHRoZSBvcHRpb25hbCBwYXJ0IGluc2lkZSBbXS4KNyAgIENvbXBsZXRpb24gb2YgIjptYXAgeCAiOiBmaWxsIGluIHRoZSBjdXJyZW50IG1hcHBpbmcsIHNvIHRoYXQgaXQgY2FuIGJlCiAgICBlZGl0ZWQuIChTdmVuIEd1Y2tlcykKLSAgIEZvciAnd2lsZG1lbnUnOiBTaW1wbGlmeSAiLi4vYmFyIiB3aGVuIHBvc3NpYmxlLgotICAgV2hlbiB1c2luZyA8VXA+IGluIHdpbGRtZW51IG1vZGUgZm9yIGEgc3VibWVudSwgc2hvdWxkIGdvIGJhY2sgdG8gdGhlCiAgICBjdXJyZW50IG1lbnUsIG5vdCB0aGUgZmlyc3Qgb25lLiAgRS5nLiwgIjplbWVudSBGaWxlLlNhdmU8VXA+Ii4KOCAgIEZvciAiOmZpbmQiIGFuZCAiOnNmaW5kIiBleHBhbmQgZmlsZXMgZm91bmQgaW4gJ3BhdGgnLgo4ICAgV2hlbiB1c2luZyBiYWNrdGljayBleHBhbnNpb24sIHRoZSBleHRlcm5hbCBjb21tYW5kIG1heSB3cml0ZSBhIGdyZWV0aW5nCiAgICBtZXNzYWdlLiAgQWRkIGFuIG9wdGlvbiBvciBjb21tYW5kcyB0byByZW1vdmUgbGluZXMgdGhhdCBtYXRjaCBhIHJlZ2V4cD8KNyAgIFdoZW4gbGlzdGluZyBtYXRjaGVzIG9mIGZpbGVzLCBkaXNwbGF5IHRoZSBjb21tb24gcGF0aCBzZXBhcmF0ZWx5IGZyb20gdGhlCiAgICBmaWxlIG5hbWVzLCBpZiB0aGlzIG1ha2VzIHRoZSBsaXN0aW5nIHNob3J0ZXIuIChXZWJiKQotICAgQWRkIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciAiOmlsaXN0IiBhbmQgZnJpZW5kcywgc2hvdyBtYXRjaGluZwogICAgaWRlbnRpZmllcnMgKFdlYmIpLgo4ICAgQWRkIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciAib2xkIHZhbHVlIiBvZiBhIGNvbW1hbmQuICAiOmFyZ3MgPGtleT4iCiAgICB3b3VsZCByZXN1bHQgaW4gdGhlIGN1cnJlbnQgbGlzdCBvZiBhcmd1bWVudHMsIHdoaWNoIHlvdSBjYW4gdGhlbiBlZGl0Lgo3ICAgQWRkIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIHdpdGggQ1RSTC1YLCBqdXN0IGxpa2UgSW5zZXJ0IG1vZGUgY29tcGxldGlvbi4KICAgIFVzZWZ1bCBmb3IgIjpzL3dvcmQveHgvIi4KLSAgIEFkZCBjb21tYW5kIHRvIGdvIGJhY2sgdG8gdGhlIHRleHQgYXMgaXQgd2FzIGJlZm9yZSBjb21wbGV0aW9uIHN0YXJ0ZWQuCiAgICBBbHNvIHRvIGJlIHVzZWQgZm9yIDxVcD4gaW4gdGhlIGNvbW1hbmQgbGluZS4KLSAgIEFkZCAnd2lsZGxvbmdlc3QnIG9wdGlvbjogS2V5IHRvIHVzZSB0byBmaW5kIGxvbmdlc3QgY29tbW9uIG1hdGNoIGZvcgogICAgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGRlZmF1bHQgQ1RSTC1MKSwgbGlrZSAnd2lsZGNoYXInLiAoQ3JlZ3V0KQogICAgQWxzbzogd2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGVzLCBzaG93IHRoZW0gbGluZSBhIENUUkwtRC4KCgpDb21tYW5kIGxpbmUgaGlzdG9yeToKOSAgIFJlbWVtYmVyIHdoaWNoIGNvbW1hbmQgbGluZXMgd2VyZSBhY3R1YWxseSB0eXBlZCBhbmQgd2VyZSBub3QgbG9hZGVkIGZyb20KICAgIHZpbWluZm8uICBXaGVuIHdyaXRpbmcgdmltaW5mbyBhcHBlbmQgb25seSB0aGVzZSBsaW5lcywgc28gdGhhdCBsaW5lcyBmcm9tCiAgICBvdGhlciBWaW0ncyBhcmUgbm90IG92ZXJ3cml0dGVuLgotICAgQWRkICJLZXlXYXNUeXBlZCIgZmxhZzogSXQncyByZXNldCBiZWZvcmUgZWFjaCBjb21tYW5kIGFuZCBzZXQgd2hlbiBhCiAgICBjaGFyYWN0ZXIgZnJvbSB0aGUga2V5Ym9hcmQgaXMgY29uc3VtZWQuIFZhbHVlIGlzIHVzZWQgdG8gZGVjaWRlIHRvIHB1dCBhCiAgICBjb21tYW5kIGxpbmUgaW4gaGlzdG9yeSBvciBub3QuIFB1dCBsaW5lIGluIGhpc3RvcnkgaWYgaXQgZGlkbid0CiAgICBjb21wbGV0ZWx5IHJlc3VsdGVkIGZyb20gb25lIG1hcHBpbmcuCi0gICBXaGVuIHVzaW5nICI6YnJvd3NlIiwgYWxzbyBwdXQgdGhlIHJlc3VsdGluZyBlZGl0IGNvbW1hbmQgaW4gdGhlIGhpc3RvcnksCiAgICBzbyB0aGF0IGl0IGNhbiBiZSByZXBlYXRlZC4gKERlbWlyZWwpCgoKSW5zZXJ0IG1vZGU6CjkgICBXaGVuICdhdXRvaW5kZW50JyBpcyBzZXQsIGhpdHRpbmcgPENSPiB0d2ljZSwgd2hpbGUgdGhlcmUgaXMgdGV4dCBhZnRlcgogICAgdGhlIGN1cnNvciwgZG9lc24ndCBkZWxldGUgdGhlIGF1dG9pbmRlbnQgaW4gdGhlIHJlc3VsdGluZyBibGFuayBsaW5lLgogICAgKFJpY2ggV2FsZXMpIFRoaXMgaXMgVmkgY29tcGF0aWJsZSwgYnV0IGl0IGxvb2tzIGxpa2UgYSBidWcuCjggICBXaGVuIHVzaW5nIENUUkwtTyBpbiBJbnNlcnQgbW9kZSwgdGhlbiBleGVjdXRpbmcgYW4gaW5zZXJ0IGNvbW1hbmQKICAgICJhIiBvciAiaSIsIHNob3VsZCB3ZSByZXR1cm4gdG8gSW5zZXJ0IG1vZGUgYWZ0ZXIgPEVzYz4/IChFZ2dpbmspCiAgICBQZXJoYXBzIGl0IGNhbiBiZSBhbGxvd2VkIGEgc2luZ2xlIHRpbWUsIHRvIGJlIGFibGUgdG8gZG8KICAgICI8Qy1PPjEwYXh5ejxFc2M+Ii4gIE5lc3RpbmcgdGhpcyBmdXJ0aGVyIGlzIGNvbmZ1c2luZy4KICAgICI6bWFwIDxGMj4gNWFhYmM8RXNjPiIgd29ya3Mgb25seSBvbmNlIGZyb20gSW5zZXJ0IG1vZGUuCjcgICBVc2UgQ1RSTC1HIDxjb3VudD4gdG8gcmVwZWF0IHdoYXQgZm9sbG93cy4gIFVzZWZ1bCBmb3IgaW5zZXJ0aW5nIGEKICAgIGNoYXJhY3RlciBtdWx0aXBsZSB0aW1lcyBvciByZXBlYXRpbmcgQ1RSTC1ZLgo3ICAgVXNlICdtYXRjaHBhaXJzJyBmb3IgJ3Nob3dtYXRjaCc6IFdoZW4gaW5zZXJ0aW5nIGEgY2hhcmFjdGVyIGNoZWNrIGlmIGl0CiAgICBhcHBlYXJzIGluIHRoZSByaHMgb2YgJ21hdGNocGFpcnMnLgotICAgSW4gSW5zZXJ0IG1vZGUgKGFuZCBjb21tYW5kIGxpbmUgZWRpdGluZz8pOiBBbGxvdyB1bmRvIG9mIHRoZSBsYXN0IHR5cGVkCiAgICBjaGFyYWN0ZXIuCVRoaXMgaXMgdXNlZnVsIGZvciBDVFJMLVUsIENUUkwtVywgZGVsZXRlIGFuZCBiYWNrc3BhY2UsIGFuZAogICAgYWxzbyBmb3IgY2hhcmFjdGVycyB0aGF0IHdyYXAgdG8gdGhlIG5leHQgbGluZS4KICAgIEFsc286IGJlIGFibGUgdG8gdW5kbyBDVFJMLVIgKGluc2VydCByZWdpc3RlcikuCiAgICBQb3NzaWJseSB1c2UgJ2JhY2tzcGFjZSc9Indob2xlIiBmb3IgYSBtb2RlIHdoZXJlIGF0IGxlYXN0IGEgPENSPiB0aGF0CiAgICBpbnNlcnRzIGF1dG9pbmRlbnQgaXMgdW5kb25lIGJ5IGEgc2luZ2xlIDxCUz4uCi0gICBVc2UgQ1RSTC1HIGluIEluc2VydCBtb2RlIGZvciBhbiBleHRyYSByYW5nZSBvZiBjb21tYW5kcywgbGlrZSAiZyIgaW4KICAgIE5vcm1hbCBtb2RlLgotICAgTWFrZSAncGFzdGUnIHdvcmsgd2l0aG91dCByZXNldHRpbmcgb3RoZXIgb3B0aW9ucywgYnV0IG92ZXJyaWRlIHRoZWlyCiAgICB2YWx1ZS4gIEF2b2lkcyBwcm9ibGVtcyB3aGVuIGNoYW5naW5nIGZpbGVzIGFuZCBtb2RlbGluZXMgb3IgYXV0b2NvbW1hbmRzCiAgICBhcmUgdXNlZC4KLSAgIFdoZW4gdHlwaW5nIENUUkwtViBhbmQgYSBkaWdpdCBoaWdoZXIgdGhhbiAyLCBvbmx5IGV4cGVjdCB0d28gZGlnaXRzLgotICAgSW5zZXJ0IGJpbmFyeSBudW1iZXJzIHdpdGggQ1RSTC1WIGIuCi0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVuZG8gPEJTPiwgPEMtVz4gYW5kIDxDLVU+LiAgQmFzaCB1c2VzIENUUkwtWS4KCgonY2luZGVudCcsICdzbWFydGluZGVudCc6CjggICBXcm9uZyBpbmRlbnQgYmVsb3cgPyA6IHdpdGggKCk6CglpZiAoKGEgPyAoYikgOiBjKSAhPSAwKQoJCSAgICAgICBhbGlnbnMgd2l0aCAiOiIuCjggICBVc2luZyAiKyIgcGFydCBvZiAnY2lub3B0aW9ucycgd2hlcmUgaXQncyBub3QgZXhwZWN0ZWQgKEFsZXhlaSBBbGV4YW5kcm92KToKCWlmIChhKQoJewoJfSBlbHNlCgkJCWFzZGY7CjggICBXcm9uZyBpbmRlbnQgZm9yICI6IiBhZnRlciBhIG1ldGhvZCB3aXRoIGxpbmUgYnJlYWsgaW4gYXJndW1lbnRzOgoJRm9vOjpGb28gKGludCBvbmUsCgkJICAgIGludCB0d28pCgk6IHNvbWV0aGluZyg0KQoJe30KOCAgIFdyb25nIGluZGVudCBmb3IgIjoiIGFmdGVyIGEgbWV0aG9kIHdpdGggbXVsdGlwbGUgbGluZXM6CglGb286OkZvbyAoaW50IG9uZSwgaW50IHR3bykKCQk6IHNvbWV0aGluZyg0KSwKCXNvbWV0aGluZ2Vsc2UoMykKCXt9CjkgICBUb28gbXVjaCBpbmRlbnQgZm9yICJsdWx1IjogKFV3ZSBaZWlzYmVyZ2VyKQogICAgICAgaW50IG1haW4gKCkKICAgICAgIHsKCSBpZiAobGFsYSkKCSAgIGRvCgkgICAgICsrKCpsb2xvKTsKCSAgIHdoaWxlIChsaWxpCgkJICAmJiBsZWxlKTsKCSAgIGx1bHU7CiAgICAgICB9CjkgICBGdW5jdGlvbiBnZXRzIGV4dHJhIGluZGVudDogKEphbWF4KQoJdm9pZCBmdW5jdGlvbihpbnQgcGFyYW0pIHsKCSAgICAgaWYgKGZhbHNlKQoJCSByZXR1cm47Cgl9CjkgICBicmFjZSBub3QgaW5kZW50ZWQgY29ycmVjdGx5OgoJY2FzZSAnYyc6ICAgaWYgKGNvbmQpCgkJCXsKICAgIFNob3VsZCBhbGlnbiB3aXRoICJpZiIgaW4gY2FzZSBzdGF0ZW1lbnQuCjcgICBBbGxvdyBhbGlnbmluZyBhIGNsb3NpbmcgIikiIHdpdGggdGhlIGxpbmUgYWJvdmUsIGluc3RlYWQgb2YgdGhlIG1hdGNoaW5nCiAgICAiKCI6IChSaWVobSkgaWYgKGFzZGZhc2RmICYmCgkJCWFzZGYKCQkJKQo4ICAgSmF2YTogSW5zaWRlIGFuIGFub255bW91cyBjbGFzcywgYWZ0ZXIgYW4gImVsc2UiIG9yICJ0cnkiIHRoZSBpbmRlbnQgaXMKICAgIHRvbyBzbWFsbC4gKFZpbmNlbnQgQmVyZ2JhdWVyKQo4ICAgSW4gQysrIGl0J3MgcG9zc2libGUgdG8gaGF2ZSB7fSBpbnNpZGUgKCk6IChLaXJzaG5hKQoJCWZ1bmMoCgkJCW5ldyBTdHJpbmdbXSB7CgkJCSAgICAiYXNkZiIsCgkJCSAgICAiYXNkZiIKCQkJfQoJCSAgICApOwo3ICAgU2VwYXJhdGUgIigwIiBvcHRpb24gaW50byBpbnNpZGUvb3V0c2lkZSBhIGZ1bmN0aW9uIChaZWxsbmVyKToKCWZ1bmMoCgkgICBpbnQgeCkJLy8gaW5kZW50IGxpa2UgIig0IgoJewoJICAgaWYgKGEKCSAgICAgICAmJiBiKQkvLyBpbmRlbnQgbGlrZSAiKDAiCjggICBTdHJhbmdlIHByb2JsZW0gd2l0aCB0aGlzIGNvZGUsICJoZWxsbyIgaXMgaW5kZW50ZWQgd3Jvbmc6IChHYXJ5IEhvbGxvd2F5KQogICAgbWFpbigpIHsgY2hhcglmb29bXSA9ICIvKiI7CgkgLyogVGhpcyBpcyBhIGNvbW1lbnQ7IHRoZSBpbmRlbnRhdGlvbiBvZiBDCgkgICogc291cmNlIGJlbG93IHRoaXMgY29tbWVudCBnZXRzIG1lc3NlZCB1cCBkdWUgdG8gdGhlIHN0cmluZyBhYm92ZS4KCSAgKi8KCSAgaGVsbG8KOSAgIFVzaW5nICJ7IiBpbiBhIGNvbW1lbnQ6IChIZWxtdXQgU3RpZWdsZXIpCiAgICBpZiAoYSkKICAgIHsKCSAgICBpZiAoYikKCSAgICB7CgkJICAgIC8vIHsKCSAgICB9CgkgICAgfSA8LS0gdGhpcyBpcyBpbmRlbnRlZCBpbmNvcnJlY3QKOSAgIFdyb25nIGluZGVudCBmb3IgY2lubz0oNCwgcmVtb3ZpbmcgdGhlICh2b2lkKSBmaXhlcyBpdDogKFplbGxuZXIpCgkodm9pZCkgTXlGYW5jeUZ1bmN0aW9uKAoJCQkgICAgICAgYXJndW1lbnQpOwotICAgTWFrZSBzbWFydGluZGVudGluZyBjb25maWd1cmFibGUuICBBZGQgJ3Npb3B0aW9ucycsIGUuZy4gJyMnIHNldHRpbmcgdGhlCiAgICBpbmRlbnQgdG8gMCBzaG91bGQgYmUgc3dpdGNoZWQgb24vb2ZmLgo3ICAgU3VwcG9ydCBBTlNJIHN0eWxlIGZ1bmN0aW9uIGhlYWRlciwgd2l0aCBlYWNoIGFyZ3VtZW50IG9uIGl0cyBvd24gbGluZS4KLSAgICJbcCIgYW5kICJdcCIgc2hvdWxkIHVzZSAnY2luZGVudCcgY29kZSBpZiBpdCdzIG9uIChvbmx5IGZvciB0aGUgZmlyc3QKICAgIGxpbmUpLgotICAgQWRkIG9wdGlvbiB0byAnY2luZGVudCcgdG8gc2V0IGluZGVudCBmb3IgY29tbWVudHMgb3V0c2lkZSBvZiB7fT8KLSAgIE1ha2UgYSBjb21tYW5kIHRvIGxpbmUgdXAgYSBjb21tZW50IGFmdGVyIGEgY29kZSBsaW5lIHdpdGggYSBwcmV2aW91cwogICAgY29tbWVudCBhZnRlciBhIGNvZGUgbGluZS4JQ2FuICdjaW5kZW50JyBkbyB0aGlzIGF1dG9tYXRpY2FsbHk/CjcgICBBZGQgJ2onIGZsYWcgdG8gJ2Zvcm1hdG9wdGlvbnMnOiBSZW1vdmUgY29tbWVudCBsZWFkZXIgd2hlbiBqb2luaW5nIGxpbmVzLgotICAgV2hlbiAnY2luZGVudCdpbmcgYSAnfScsIHNob3dtYXRjaCBpcyBkb25lIGJlZm9yZSBmaXhpbmcgdGhlIGluZGVudC4gIEl0CiAgICBsb29rcyBiZXR0ZXIgd2hlbiB0aGUgaW5kZW50IGlzIGZpeGVkIGJlZm9yZSB0aGUgc2hvd21hdGNoLiAoV2ViYikKLSAgIEFkZCBvcHRpb24gdG8gbWFrZSBpbmRlbnRpbmcgd29yayBpbiBjb21tZW50cyB0b28gKGZvciBjb21tZW50ZWQtb3V0CiAgICBjb2RlKSwgdW5sZXNzIHRoZSBsaW5lIHN0YXJ0cyB3aXRoICIqIi4KLSAgIERvbid0IHVzZSAnY2luZGVudCcgd2hlbiBkb2luZyBmb3JtYXR0aW5nIHdpdGggImdxIj8KLSAgIFdoZW4gZm9ybWF0dGluZyBhIGNvbW1lbnQgYWZ0ZXIgc29tZSB0ZXh0LCBpbnNlcnQgdGhlICcqJyBmb3IgdGhlIG5ldyBsaW5lCiAgICAoaW5kZW50IGlzIGNvcnJlY3QgaWYgJ2NpbmRlbnQnIGlzIHNldCwgYnV0ICcqJyBkb2Vzbid0IGdldCBpbnNlcnRlZCkuCjggICBXaGVuICdjb21tZW50cycgaGFzIGJvdGggInMxOi8qLG1iOiosZXg6Ki8iIGFuZCAiczE6KCosbWI6KixleDoqKSIsIHRoZQogICAgJ3gnIGZsYWcgYWx3YXlzIHVzZXMgdGhlIGZpcnN0IG1hdGNoLiAgTmVlZCB0byBjb250aW51ZSBsb29raW5nIGZvciBtb3JlCiAgICBtYXRjaGVzIG9mICIqIiBhbmQgcmVtZW1iZXIgYWxsIGNoYXJhY3RlcnMgdGhhdCBjb3VsZCBlbmQgdGhlIGNvbW1lbnQuCi0gICBGb3Igc21hcnRpbmRlbnQ6IFdoZW4gdHlwaW5nICdlbHNlJyBsaW5lIGl0IHVwIHdpdGggbWF0Y2hpbmcgJ2lmJy4KLSAgICdzbWFydGluZGVudCc6IGFsbG93IHBhdHRlcm5zIGluICdjaW53b3JkcycsIGZvciBlLmcuIFRlWCBmaWxlcywgd2hlcmUKICAgIGxpbmVzIHN0YXJ0IHdpdGggIlxpdGVtIi4KLSAgIFN1cHBvcnQgdGhpcyBzdHlsZSBvZiBjb21tZW50cyAod2l0aCBhbiBvcHRpb24pOiAoQnJvd24pCgkvKiBoZXJlIGlzIGEgY29tbWVudCB0aGF0CglpcyBqdXN0IGF1dG9pbmRlbnRlZCwgYW5kCglub3RoaW5nIGVsc2UgKi8KLSAgIEFkZCB3b3JkcyB0byAnY2lud29yZHMnIHRvIHJlZHVjZSB0aGUgaW5kZW50LCBlLmcuLCAiZW5kIiBvciAiZmkiLgo3ICAgVXNlIFRhYnMgZm9yIHRoZSBpbmRlbnQgb2Ygc3RhcnRpbmcgbGluZXMsIHBhZCB3aXRoIHNwYWNlcyBmb3IKICAgIGNvbnRpbnVhdGlvbiBsaW5lcy4gIEFsbG93cyBjaGFuZ2luZyAndGFic3RvcCcgd2l0aG91dCBtZXNzaW5nIHVwIHRoZQogICAgaW5kZW50cy4KICAgIEFuZC9vcjogQWRkIG9wdGlvbiB0byBjb3B5IGluZGVudCBhcy1pcywgd2l0aG91dCBjaGFuZ2luZyBzcGFjZXMgdG8gdGFicy4KICAgIEFsc28gZm9yICdhdXRvaW5kZW50Jy4gICdrZWVwdGFicyc6IHdoZW4gc2V0IGRvbid0IGNoYW5nZSB0aGUgdGFicyBhbmQKICAgIHNwYWNlcyB1c2VkIGZvciBpbmRlbnQsIHdoZW4gdGhlIGluZGVudCByZW1haW5zIHRoZSBzYW1lIG9yIGluY3JlYXNlcy4KCgpKYXZhOgo4ICAgQ2FuIGhhdmUge30gY29uc3RydWN0cyBpbnNpZGUgcGFyZW5zLiAgSW5jbHVkZSBjaGFuZ2VzIGZyb20gU3RldmUKICAgIE9kZW5kYWhsPwo4ICAgUmVjb2duaXplICJpbXBvcnQgamF2YS51dGlsLlZlY3RvciIgYW5kIHVzZSAkQ0xBU1NQQVRIIHRvIGZpbmQgZmlsZXMgZm9yCiAgICAiW2kiIGNvbW1hbmRzIGFuZCBmcmllbmRzLgotICAgRm9yIGZpbGVzIGZvdW5kIHdpdGggJ2luY2x1ZGUnOiBoYW5kbGUgIioiIGluIGluY2x1ZGVkIG5hbWUsIGZvciBKYXZhLgogICAgKEphc29uKQotICAgSG93IHRvIG1ha2UgYSAicGFja2FnZSBqYXZhLnV0aWwiIGNhdXNlIGFsbCBjbGFzc2VzIGluIHRoZSBwYWNrYWdlIHRvIGJlCiAgICBzZWFyY2hlZD8gIEFsc28gZm9yICJpbXBvcnQgamF2YS51dGlsLioiLiAoTWFyayBCcm9waHkpCgoKJ2NvbW1lbnRzJzoKOCAgIFdoZW4gZm9ybWF0dGluZyBDIGNvbW1lbnRzIHRoYXQgYXJlIGFmdGVyIGNvZGUsIHRoZSAiKiIgaXNuJ3QgcmVwZWF0ZWQKICAgIGxpa2UgaXQncyBkb25lIHdoZW4gdGhlcmUgaXMgbm8gY29kZS4gIEFuZCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgd3JhcHBpbmcuCiAgICBSZWNvZ25pemUgY29tbWVudHMgdGhhdCBjb21lIGFmdGVyIGNvZGUuICBTaG91bGQgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlcgogICAgd2hlbiBpdCdzICIjIiBvciAiLy8iLgogICAgT3RoZXIgd2F5IGFyb3VuZDogd2hlbiBhIEMgY29tbWFuZCBzdGFydHMgd2l0aCAiKiA0IiB0aGUgIioiIGlzIHJlcGVhdGVkCiAgICB3aGlsZSBpdCBzaG91bGQgbm90LiAgVXNlIHN5bnRheCBITCBjb21tZW50IHJlY29nbml0aW9uPwo3ICAgV2hlbiB1c2luZyAiY29tbWVudHM9Zmc6LS0iLCBWaW0gaW5zZXJ0cyB0aHJlZSBzcGFjZXMgZm9yIGEgbmV3IGxpbmUuCiAgICBXaGVuIGhpdHRpbmcgYSBUQUIsIHRoZXNlIHNwYWNlcyBjb3VsZCBiZSByZW1vdmVkLgo3ICAgVGhlICduJ2VzdGluZyBmbGFnIGRvZXNuJ3QgZG8gdGhlIGluZGVudGluZyBvZiB0aGUgbGFzdCAocmlnaHRtb3N0KSBpdGVtLgo2ICAgTWFrZSBzdHJpbmdzIGluICdjb21tZW50cycgb3B0aW9uIGEgUkUsIHRvIGJlIGFibGUgdG8gbWF0Y2ggbW9yZQogICAgY29tcGxpY2F0ZWQgdGhpbmdzLiAoUGhpbGxpcHBzKSAgVXNlIGEgc3BlY2lhbCBmbGFnIHRvIGluZGljYXRlIHRoYXQgYQogICAgcmVnZXhwIGlzIHVzZWQuCjggICBNYWtlIHRoZSAnY29tbWVudHMnIG9wdGlvbiB3aXRoICIvKiAqICovIiBsaW5lcyBvbmx5IHJlcGVhdCB0aGUgIioiIGxpbmUKICAgIHdoZW4gdGhlcmUgaXMgYSAiLyoiIGJlZm9yZSBpdD8gIE9yIGluY2x1ZGUgdGhpcyBpbiAnY2luZGVudCc/CgoKVmlydHVhbCBlZGl0Ogo4ICAgTWFrZSB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgd29yayB0byBtb3ZlIHRoZSB0ZXh0IGZ1cnRoZXIgbGVmdC4KNyAgIEFkZCBhIG1vZGUgd2hlcmUgdGhlIGN1cnNvciBpcyBvbmx5IGFsbG93ZWQgdG8gZ28gb25lIGNoYXJhY3RlciBhZnRlciB0aGUKICAgIGVuZCBvZiB0aGUgbGluZT8KNyAgIEFsbG93IHNwZWNpZnlpbmcgaXQgc2VwYXJhdGVseSBmb3IgVGFicyBhbmQgYmV5b25kIGVuZC1vZi1saW5lPwoKClRleHQgb2JqZWN0czoKOCAgIEFkZCB0ZXN0IHNjcmlwdCBmb3IgdGV4dCBvYmplY3QgY29tbWFuZHMgImF3IiwgImlXIiwgZXRjLgo4ICAgQWRkIHRleHQgb2JqZWN0IGZvciBwYXJ0IG9mIGEgQ2FtZWxIdW1lZFdvcmQgYW5kIHVuZGVyX3Njb3JlZF93b3JkLgogICAgKFNjb3R0IEdyYWhhbSkgICJhYyIgYW5kICJhdSI/CjggICBBZGQgYSB0ZXh0IG9iamVjdCBmb3IgYW55IGtpbmQgb2YgcXVvdGluZywgYWxzbyB3aXRoIG11bHRpLWJ5dGUKICAgIGNoYXJhY3RlcnMuICBPcHRpb24gdG8gc3BlY2lmeSB3aGF0IHF1b3RlcyBhcmUgcmVjb2duaXplZCAoZGVmYXVsdDogYWxsKQogICAgdXNlICJhcSIgYW5kICJpcSIuICBVc2UgJ3F1b3RlcGFpcnMnIHRvIGRlZmluZSBwYWlycyBvZiBxdW90ZXMsIGxpa2UKICAgICdtYXRjaHBhaXJzJz8KOCAgIEFkZCB0ZXh0IG9iamVjdCBmb3IgYW55IGtpbmQgb2YgcGFyZW5zLCBhbHNvIG11bHRpLWJ5dGUgb25lcy4KNyAgIEFkZCB0ZXh0IG9iamVjdCBmb3IgY3VycmVudCBzZWFyY2ggcGF0dGVybjogImEvIiBhbmQgImkvIi4gIE1ha2VzIGl0CiAgICBwb3NzaWJsZSB0byB0dXJuIHRleHQgaGlnaGxpZ2h0ZWQgZm9yICdobHNlYXJjaCcgaW50byBhIFZpc3VhbCBhcmVhLgo4ICAgQWRkICJncCIgYW5kICJnUCIgY29tbWFuZHM6IGluc2VydCB0ZXh0IGFuZCBtYWtlIHN1cmUgdGhlcmUgaXMgYSBzaW5nbGUKICAgIHNwYWNlIGJlZm9yZSBpdCwgdW5sZXNzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSwgYW5kIGFmdGVyIGl0LCB1bmxlc3MgYXQKICAgIHRoZSBlbmQgb2YgdGhlIGxpbmUgb3IgYmVmb3JlIGEgIi4iLgo3ICAgQWRkIG9iamVjdHMgd2l0aCBiYWNrd2FyZHMgZXh0ZW5zaW9uPyAgVXNlICJJIiBhbmQgIkEiLiAgVGh1cyAiMmRBcyIKICAgIGRlbGV0ZXMgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3VzIHNlbnRlbmNlLiAoSmVucyBQYXVsdXMpCjcgICBBZGQgImd7IiBhbmQgImd9IiB0byBtb3ZlIHRvIHRoZSBmaXJzdC9sYXN0IGNoYXJhY3RlciBvZiBhIHBhcmFncmFwaAogICAgKGluc3RlYWQgb2YgdGhlIGxpbmUganVzdCBiZWZvcmUvYWZ0ZXIgYSBwYXJhZ3JhcGggYXMgd2l0aCAieyIgYW5kICJ9IikuCjYgICBJZ25vcmUgY29tbWVudCBsZWFkZXJzIGZvciBvYmplY3RzLiAgTWFrZSAiZGFzIiB3b3JrIGluIHJlcGx5LWVtYWlsLgo1ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1c2Ugc3ludGF4IGdyb3VwIG1hdGNoZXMgYXMgYSB0ZXh0IG9iamVjdC4gIEZvcgogICAgZXhhbXBsZSwgZGVmaW5lIGEgImNjSXRlbSIgZ3JvdXAsIHRoZW4gZG8gImRhPGNjSXRlbT4iIHRvIGRlbGV0ZSBvbmUuCiAgICBPciwgbWF5YmUganVzdCBkZWZpbmUgImRhaSIsIGRlbGV0ZS1hbi1pdGVtLCB0byBkZWxldGUgdGhlIHN5bnRheCBpdGVtIHRoZQogICAgY3Vyc29yIGlzIG9uLgoKClNlbGVjdCBtb2RlOgo4ICAgSW4gYmxvY2t3aXNlIG1vZGUsIHR5cGVkIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGluIGZyb250IG9mIHRoZSBibG9jaywKICAgIGJhY2tzcGFjZSBkZWxldGVzIGEgY29sdW1uIGJlZm9yZSB0aGUgYmxvY2suIChTdGV2ZSBIYWxsKQo3ICAgQWx0LWxlZnRtb3VzZSBzdGFydHMgYmxvY2sgbW9kZSBzZWxlY3Rpb24gaW4gTVMgV29yZC4KICAgIFNlZSBodHRwOi8vd3d3LnZpbS5vcmcvdGlwcy90aXAucGhwP3RpcF9pZD03NDMKNyAgIEFkZCBDbWRsaW5lLXNlbGVjdCBtb2RlLiAgTGlrZSBTZWxlY3QgbW9kZSwgYnV0IHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KICAgIC0gQ2hhbmdlIGd1aV9zZW5kX21vdXNlX2V2ZW50KCkgdG8gcGFzcyBvbiBtb3VzZSBldmVudHMgd2hlbiAnbW91c2UnCiAgICAgIGNvbnRhaW5zICdDJyBvciAnQScuCiAgICAtIENhdGNoIG1vdXNlIGV2ZW50cyBpbiBleF9nZXRsbi5jLiAgQWxzbyBzaGlmdC1jdXJzb3IsIGV0Yy4sIGxpa2UgaW4KICAgICAgbm9ybWFsX2NtZCgpLgogICAgLSByZW1lbWJlciBzdGFydCBhbmQgZW5kIG9mIHNlbGVjdGlvbiBpbiBjbWRsaW5lX2luZm8uCiAgICAtIFR5cGluZyB0ZXh0IHJlcGxhY2VzIHRoZSBzZWxlY3Rpb24uCgoKVmlzdWFsIG1vZGU6Ci0gICBXaGVuIGRyYWdnaW5nIHRoZSBWaXN1YWwgc2VsZWN0aW9uIHdpdGggdGhlIG1vdXNlIGFuZCAnc2Nyb2xsb2ZmJyBpcyB6ZXJvLAogICAgYmVoYXZlIGxpa2UgJ3Njcm9sbG9mZicgaXMgb25lLCBzbyB0aGF0IHRoZSB0ZXh0IHNjcm9sbHMgd2hlbiB0aGUgcG9pbnRlcgogICAgaXMgaW4gdGhlIHRvcCBsaW5lLgotICAgRGlzcGxheWluZyBzaXplIG9mIFZpc3VhbCBhcmVhOiB1c2UgMjQtMzMgY29sdW1uIGRpc3BsYXkuCiAgICBXaGVuIHNlbGVjdGluZyBtdWx0aXBsZSBsaW5lcywgdXAgdG8gYWJvdXQgYSBzY3JlZW5mdWwsIGFsc28gY291bnQgdGhlCiAgICBjaGFyYWN0ZXJzLgo4ICAgV2hlbiB1c2luZyAiSSIgb3IgIkEiIGluIFZpc3VhbCBibG9jayBtb2RlLCBzaG9ydCBsaW5lcyBkbyBub3QgZ2V0IHRoZSBuZXcKICAgIHRleHQuICBNYWtlIGl0IHBvc3NpYmxlIHRvIGFkZCB0aGUgdGV4dCB0byBzaG9ydCBsaW5lcyB0b28sIHdpdGggcGFkZGluZwogICAgd2hlcmUgbmVlZGVkLgo3ICAgV2l0aCBhIFZpc3VhbCBibG9jayBzZWxlY3RlZCwgIjJ4IiBkZWxldGVzIGEgYmxvY2sgb2YgZG91YmxlIHRoZSB3aWR0aCwKICAgICIzeSIgeWFua3MgYSBibG9jayBvZiB0cmlwbGUgd2lkdGgsIGV0Yy4KNyAgIFdoZW4gc2VsZWN0aW5nIGxpbmV3aXNlLCB1c2luZyAiaXRleHQiIHNob3VsZCBpbnNlcnQgInRleHQiIGF0IHRoZSBzdGFydAogICAgb2YgZWFjaCBzZWxlY3RlZCBsaW5lLgo4ICAgV2hhdCBpcyAiUiIgc3VwcG9zZWQgdG8gZG8gaW4gVmlzdWFsIG1vZGU/CjggICBNYWtlIFZpc3VhbCBtb2RlIGxvY2FsIHRvIHRoZSBidWZmZXIuICBBbGxvdyBjaGFuZ2luZyB0byBhbm90aGVyIGJ1ZmZlci4KICAgIFdoZW4gc3RhcnRpbmcgYSBuZXcgVmlzdWFsIHNlbGVjdGlvbiwgcmVtb3ZlIHRoZSBWaXN1YWwgc2VsZWN0aW9uIGluIGFueQogICAgb3RoZXIgYnVmZmVyLiAoUm9uIEFhcm9uKQo4ICAgU3VwcG9ydCBkcmFnZ2luZyB0aGUgVmlzdWFsIGFyZWEgdG8gZHJvcCBpdCBzb21ld2hlcmUgZWxzZS4gKFJvbiBBYXJvbiwKICAgIEJlbiBHb2RmcmV5KQo3ICAgU3VwcG9ydCBkcmFnZ2luZyB0aGUgVmlzdWFsIGFyZWEgdG8gZHJvcCBpdCBpbiBhbm90aGVyIHByb2dyYW0sIGFuZAogICAgcmVjZWl2ZSBkcm9wcGVkIHRleHQgZnJvbSBhbm90aGVyIHByb2dyYW0uIChCZW4gR29kZnJleSkKNyAgIFdpdGggYmxvY2t3aXNlIFZpc3VhbCBtb2RlIGFuZCAiYyIsICJDIiwgIkkiLCAiQSIsIGV0Yy4sIGFsbG93IHRoZSB1c2Ugb2YKICAgIGEgPENSPi4gIFRoZSBlbnRlcmVkIGxpbmVzIGFyZSByZXBlYXRlZCBvdmVyIHRoZSBWaXN1YWwgYXJlYS4KNyAgIENUUkwtViA6cyBzaG91bGQgc3Vic3RpdHV0ZSBvbmx5IGluIHRoZSBibG9jaywgbm90IHRvIHdob2xlIGxpbmVzLiAoRGF2aWQKICAgIFlvdW5nIGlzIHdvcmtpbmcgb24gdGhpcykKNyAgIEZpbHRlcmluZyBhIGJsb2NrIHNob3VsZCBvbmx5IGFwcGx5IHRvIHRoZSBibG9jaywgbm90IHRvIHRoZSB3aG9sZSBsaW5lcy4KICAgIFdoZW4gdGhlIG51bWJlciBvZiBsaW5lcyBpcyBpbmNyZWFzZWQsIGFkZCBsaW5lcy4gV2hlbiBkZWNyZWFzZWQsIHBhZCB3aXRoCiAgICBzcGFjZXMgb3IgZGVsZXRlPyBVc2UgIjpgPCxgPiIgb24gdGhlIGNvbW1hbmQgbGluZS4KOCAgIEFmdGVyIGZpbHRlcmluZyB0aGUgVmlzdWFsIGFyZWEsIG1ha2UgImd2IiBzZWxlY3QgdGhlIGZpbHRlcmVkIHRleHQ/CiAgICBDdXJyZW50bHkgImd2IiBvbmx5IHNlbGVjdHMgYSBzaW5nbGUgbGluZSwgbm90IHVzZWZ1bC4KNyAgIERvbid0IG1vdmUgdGhlIGN1cnNvciB3aGVuIHNjcm9sbGluZz8gIE5lZWRlZCB3aGVuIHRoZSBzZWxlY3Rpb24gc2hvdWxkCiAgICBzdGF5IHRoZSBzYW1lLiAgU2Nyb2xsIHRvIHRoZSBjdXJzb3IgYXQgYW55IG1vdmVtZW50IGNvbW1hbmQuICBXaXRoIGFuCiAgICBvcHRpb24hCjcgICBJbiBWaXN1YWwgYmxvY2sgbW9kZSwgbmVlZCB0byBiZSBhYmxlIHRvIGRlZmluZSBhIGNvcm5lciBvbiBhIHBvc2l0aW9uCiAgICB0aGF0IGRvZXNuJ3QgaGF2ZSB0ZXh0PyAgQWxzbzogd2hlbiB1c2luZyB0aGUgbW91c2UsIGJlIGFibGUgdG8gc2VsZWN0CiAgICBwYXJ0IG9mIGEgVEFCLiAgRXZlbiBtb3JlOiBBZGQgYSBtb2RlIHdoZXJlIHRoZSBjdXJzb3IgY2FuIGJlIG9uIGEgc2NyZWVuCiAgICBwb3NpdGlvbiB3aGVyZSB0aGVyZSBpcyBubyB0ZXh0LiAgV2hlbiB0eXBpbmcsIGFkZCBzcGFjZXMgdG8gZmlsbCB0aGUgZ2FwLgogICAgT3RoZXIgc29sdXRpb246IEFsd2F5cyB1c2UgY3Vyc3dhbnQsIHNvIHRoYXQgeW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgdG8KICAgIHRoZSByaWdodCBjb2x1bW4sIGFuZCB0aGVuIHVzZSB1cC9kb3duIG1vdmVtZW50cyB0byBzZWxlY3QgdGhlIGxpbmUsCiAgICB3aXRob3V0IGNoYW5naW5nIHRoZSBjb2x1bW4uCjYgICAiOmxlZnQiIGFuZCAiOnJpZ2h0IiBzaG91bGQgd29yayBpbiBWaXN1YWwgYmxvY2sgbW9kZS4KNyAgIENUUkwtSSBhbmQgQ1RSTC1PIHNob3VsZCB3b3JrIGluIFZpc3VhbCBtb2RlLCBidXQgb25seSBqdW1wIHRvIG1hcmtzIGluIHRoZQogICAgY3VycmVudCBidWZmZXIuCjcgICBDVFJMLUEgYW5kIENUUkwtWCBzaG91bGQgaW5jcmVhc2UvZGVjcmVhc2UgYWxsIG51bWJlcnMgaW4gdGhlIFZpc3VhbCBhcmVhLgo2ICAgSW4gbm9uLUJsb2NrIG1vZGUsICJJIiBzaG91bGQgaW5zZXJ0IHRoZSBzYW1lIHRleHQgaW4gZnJvbnQgb2YgZWFjaCBsaW5lLAogICAgYmVmb3JlIHRoZSBmaXJzdCBub24tYmxhbmssICJnSSIgaW4gY29sdW1uIDEuCjYgICBJbiBub24tQmxvY2sgbW9kZSwgIkEiIHNob3VsZCBhcHBlbmQgdGhlIHNhbWUgdGV4dCBhZnRlciBlYWNoIGxpbmUuCjYgICAiOic8LCc+c291cmNlIiBzaG91bGQgcmVhZCB0aGUgc2VsZWN0ZWQgbGluZXMgYW5kICI6c291cmNlIiB0aGVtLgo2ICAgV2hlbiBpbiBibG9ja3dpc2UgdmlzdWFsIHNlbGVjdGlvbiAoQ1RSTC1WKSwgYWxsb3cgY3Vyc29yIHRvIGJlIHBsYWNlZAogICAgcmlnaHQgb2YgdGhlIGxpbmUuICBDb3VsZCBhbHNvIGFsbG93IGN1cnNvciB0byBiZSBwbGFjZWQgYW55d2hlcmUgb24gYSBUQUIKICAgIG9yIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVyLgo2ICAgQWRkIGNvbW1hbmRzIHRvIG1vdmUgc2VsZWN0ZWQgdGV4dCwgd2l0aG91dCBkZXNlbGVjdGluZy4KCgpNb3JlIGFkdmFuY2VkIHJlcGVhdGluZyBjb21tYW5kczoKLSAgIEFkZCAiLiIgY29tbWFuZCBmb3IgdmlzdWFsIG1vZGU6IHJlZG8gbGFzdCB2aXN1YWwgY29tbWFuZCAoZS5nLiAiOmZtdCIpLgo3ICAgUmVwZWF0aW5nICJkOntjbWR9IiB3aXRoICIuIiBkb2Vzbid0IHdvcmsuIChCZW5qaSBGaXNoZXIpICBTb21laG93IHJlbWVtYmVyCiAgICB0aGUgY29tbWFuZCBsaW5lIHNvIHRoYXQgaXQgY2FuIGJlIHJlcGVhdGVkPwotICAgQWRkICIuIiBjb21tYW5kIGFmdGVyIG9wZXJhdG9yOiByZXBlYXQgbGFzdCBjb21tYW5kIG9mIHNhbWUgb3BlcmF0b3IuICBFLmcuCiAgICAiYy4iIHdpbGwgcmVwZWF0IGxhc3QgY2hhbmdlLCBhbHNvIHdoZW4gIngiIHVzZWQgc2luY2UgdGhlbiAoV2ViYikuCiAgICAieS4iIHdpbGwgcmVwZWF0IGxhc3QgeWFuay4KICAgICJjMi4iIHdpbGwgcmVwZWF0IHRoZSBsYXN0IGJ1dCBvbmUgY2hhbmdlPwogICAgQWxzbzoga2VlcCBoaXN0b3J5IG9mIE5vcm1hbCBtb2RlIGNvbW1hbmRzLCBhZGQgY29tbWFuZCB0byBsaXN0IHRoZSBoaXN0b3J5CiAgICBhbmQvb3IgcGljayBhbiBvbGRlciBjb21tYW5kLgotICAgSGlzdG9yeSBzdGFjayBmb3IgLiBjb21tYW5kPyAgVXNlICJnLiIgY29tbWFuZC4KCgpNYXBwaW5ncyBhbmQgQWJicmV2aWF0aW9uczoKOCAgIFdoZW4gIjAiIGlzIG1hcHBlZCAoaXQgaXMgYSBtb3ZlbWVudCBjb21tYW5kKSB0aGlzIG1hcHBpbmcgc2hvdWxkIG5vdCBiZQogICAgdXNlZCBhZnRlciB0eXBpbmcgYW5vdGhlciBudW1iZXIsIGUuZy4gIjIwbCIuIChDaGFybGVzIENhbXBiZWxsKQogICAgSXMgdGhpcyBwb3NzaWJsZSB3aXRob3V0IGRpc2FibGluZyB0aGUgbWFwcGluZyBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmQ/CjggICBTaG91bGQgbWFwcGluZyA8Qy1BPiBhbmQgPEMtUy1BPiBib3RoIHdvcms/CjcgICAiOmFiYnIgYiBieXRlIiwgYXBwZW5kICJiICIgdG8gYW4gZXhpc3Rpbmcgd29yZCBzdGlsbCBleHBhbmRzIHRvICJieXRlIi4KICAgIFRoaXMgaXMgVmkgY29tcGF0aWJsZSwgYnV0IGNhbiB3ZSBhdm9pZCBpdCBhbnl3YXk/CjggICBUbyBtYWtlIGEgbWFwcGluZyB3b3JrIHdpdGggYSBwcmVwZW5kZWQgInggdG8gc2VsZWN0IGEgcmVnaXN0ZXIsIHN0b3JlIHRoZQogICAgbGFzdCBfdHlwZWRfIHJlZ2lzdGVyIG5hbWUgYW5kIGFjY2VzcyBpdCB3aXRoICImLgo4ICAgQWRkICI6YW1hcCIsIGxpa2UgIjphbWVudSIuCjcgICBBZGQgYSBtYXBwaW5nIHRoYXQgd29ya3MgYWx3YXlzLCBmb3IgcmVtYXBwaW5nIHRoZSBrZXlib2FyZC4KOCAgIEFkZCAiOmNhYiEiLCBhYmJyZXZpYXRpb25zIHRoYXQgb25seSBhcHBseSB0byBDb21tYW5kLWxpbmUgbW9kZSBhbmQgbm90IHRvCiAgICBlbnRlcmluZyBzZWFyY2ggc3RyaW5ncy4KOCAgIEFkZCBhIGZsYWcgdG8gIjphYmJyZXYiIHRvIGVhdCB0aGUgY2hhcmFjdGVyIHRoYXQgdHJpZ2dlcnMgdGhlCiAgICBhYmJyZXZpYXRpb24uICBUaHVzICJhYmIgYWIgeHh4IiBhbmQgdHlwaW5nICJhYjxTcGFjZT4iIGluc2VydHMgInh4eCIgYW5kCiAgICBub3QgdGhlIDxTcGFjZT4uCjggICBBbGxvdyBtYXBwaW5nIG9mIENUUkwtQCAoYW55d2hlcmUgaW4gdGhlIExIUykuCjggICBHaXZlIGEgd2FybmluZyB3aGVuIHVzaW5nIENUUkwtQyBpbiB0aGUgbGhzIG9mIGEgbWFwcGluZy4gIEl0IHdpbGwgbmV2ZXIKICAgICg/KSB3b3JrLgo4ICAgQWRkIGEgd2F5IHRvIHNhdmUgYSBjdXJyZW50IG1hcHBpbmcgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuICBVc2UgYSBmdW5jdGlvbgogICAgdGhhdCByZXR1cm5zIHRoZSBtYXBwaW5nIGNvbW1hbmQgdG8gcmVzdG9yZSBpdDogbWFwY21kKCk/ICBtYXBjaGVjaygpIGlzCiAgICBub3QgZm9vbCBwcm9vZi4gIEhvdyB0byBoYW5kbGUgYW1iaWd1b3VzIG1hcHBpbmdzPwo3ICAgQWRkIDwweDhmPiAoaGV4KSwgPDAzMz4gKG9jdGFsKSBhbmQgPDEyMz4gKGRlY2ltYWwpIHRvIDw+IG5vdGF0aW9uPwo3ICAgQWxsb3cgbWFwcGluZyAiUSIgYW5kICJRfSIgYXQgdGhlIHNhbWUgdGltZS4gIE5lZWQgdG8gcHV0IGEgZmxhZyB3aXRoICJRIiwKICAgIHRoYXQgaXQgbmVlZHMgYW4gZXh0cmEgY2hhcmFjdGVyIGJlZm9yZSBpdCBjYW4gbWF0Y2guICBTZWUgVmlsZSAnbWFwbG9uZ2VyJwogICAgb3B0aW9uLgo3ICAgV2hlbiBzb21lb25lIHRyaWVzIHRvIHVubWFwIHdpdGggYSB0cmFpbGluZyBzcGFjZSwgYW5kIGl0IGZhaWxzLCB0cnkKICAgIHVubWFwcGluZyB3aXRob3V0IHRoZSB0cmFpbGluZyBzcGFjZS4gIEhlbHBzIGZvciAiOnVubWFwIHh4IHwgdW5tYXAgeXkiLgo3ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBtYXAgJ3dpbGRjaGFyJywgYnV0IG9ubHkgd2hlbiBpdCdzIGEgc3BlY2lhbCBjaGFyYWN0ZXIKICAgIChsaWtlIENUUkwtRSkuICBDdXJyZW50bHkgaXQncyBvbmx5IHJlY29nbml6ZWQgd2hlbiB0eXBlZC4gIFVzZWZ1bCBmb3IKICAgIG1hcHBpbmcgYSBrZXkgdG8gZG8gc29tZXRoaW5nIGFuZCB0aGVuIGNvbXBsZXRpb24uCjYgICBDb250ZXh0LXNlbnNpdGl2ZSBhYmJyZXZpYXRpb25zOiBTcGVjaWZ5IHN5bnRheCBncm91cChzKSBpbiB3aGljaCB0aGUKICAgIGFiYnJldmlhdGlvbnMgYXJlIHRvIGJlIHVzZWQuCi0gICBBZGQgbWFwcGluZ3MgdGhhdCB0YWtlIGFyZ3VtZW50cy4gIENvdWxkIHdvcmsgbGlrZSB0aGUgIjpzIiBjb21tYW5kLiAgRm9yCiAgICBleGFtcGxlLCBmb3IgYSBtb3VzZSBlc2NhcGUgc2VxdWVuY2U6Cgk6bWFwZXhwICA8RXNjPntcKFswLTldKlwpLFwoWzAtOV0qXCk7CUhcMWpcMmwKLSAgIEFkZCBvcHRpb25hbCA8TnVtYmVyPiBhcmd1bWVudCBmb3IgbWFwcGluZ3M6CiAgICA6bWFwIDxOdW1iZXI+cQkgICAgIF5XXlc8TnVtYmVyPkcKICAgIDptYXAgPE51bWJlcj5xPE51bWJlcj50ICBeV15XPE51bWJlcjEtMT5HPE51bWJlcjI+bAogICAgOm1hcCBxPENoYXI+CSAgICA6cy88Q2hhcj4vXHVcMC9nCiAgICBPciBpbXBsaWNpdDoKICAgIDptYXAgcQkJCTxSZWdpc3Rlcj5kPE51bWJlcj4kCi0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSA8TnVsPiBpbiB0aGUgbGhzIGFuZCByaHMgb2YgYSBtYXBwaW5nLgotICAgQWRkIGNvbW1hbmQgdG8gcmVwZWF0IGEgd2hvbGUgbWFwcGluZyAoIi4iIG9ubHkgcmVwZWF0cyB0aGUgbGFzdCBjaGFuZ2UgaW4KICAgIGEgbWFwcGluZykuICBBbHNvOiBSZXBlYXQgYSB3aG9sZSBpbnNlcnQgY29tbWFuZCwgaW5jbHVkaW5nIGFueSBtYXBwaW5ncwogICAgdGhhdCBpdCBpbmNsdWRlZC4gIFNvcnQtb2YgYXV0b21hdGljIHJlY29yZGluZz8KLSAgIEFkZCBhbiBvcHRpb24gdG8gIjptYXAiIHRoYXQgbWFrZXMgaXQgZGlzcGxheSB0aGUgc3BlY2lhbCBrZXlzIGluCiAgICA8PiBub3RhdGlvbiAoZS5nLiA8Q1I+IGluc3RlYWQgb2YgXk0pLiAgT3IganVzdCBhbHdheXMgZG8gdGhpcz8KLSAgIEluY2x1ZGUgYW4gb3B0aW9uIChvciBmbGFnIHRvICdjcG9wdGlvbnMnKSB0aGF0IG1ha2VzIGVycm9ycyBpbiBtYXBwaW5ncwogICAgbm90IGZsdXNoIHRoZSByZXN0IG9mIHRoZSBtYXBwaW5nIChsaWtlIG52aSBkb2VzKS4KLSAgIFVzZSBjb250ZXh0IHNlbnNpdGl2ZW5lc3Mgb2YgY29tcGxldGlvbiB0byBzd2l0Y2ggYWJicmV2aWF0aW9ucyBhbmQKICAgIG1hcHBpbmdzIG9mZiBmb3IgOnVuYWIgYW5kIDp1bm1hcC4KNiAgIFdoZW4gdXNpbmcgbWFwcGluZ3MgaW4gSW5zZXJ0IG1vZGUsIGluc2VydCBjaGFyYWN0ZXJzIGZvciBpbmNvbXBsZXRlCiAgICBtYXBwaW5ncyBmaXJzdCwgdGhlbiByZW1vdmUgdGhlbSBhZ2FpbiB3aGVuIGEgbWFwcGluZyBtYXRjaGVzLiAgQXZvaWRzCiAgICB0aGF0IGNoYXJhY3RlcnMgdGhhdCBhcmUgdGhlIHN0YXJ0IG9mIHNvbWUgbWFwcGluZyBhcmUgbm90IHNob3duIHVudGlsIHlvdQogICAgaGl0IGFub3RoZXIgY2hhcmFjdGVyLgotICAgQWRkIG1hcHBpbmdzIGZvciByZXBsYWNlIG1vZGU6ICI6cm1hcCIuICBIb3cgZG8gd2UgdGhlbiBlbnRlciBtYXBwaW5ncyBmb3IKICAgIG5vbi1yZXBsYWNlIEluc2VydCBtb2RlPwotICAgQWRkIHNlcGFyYXRlIG1hcHBpbmdzIGZvciBWaXN1YWwtY2hhcmFjdGVyL2Jsb2NrL2xpbmUgbW9kZT8KLSAgIEFkZCAnbWFwc3RvcCcgY29tbWFuZCwgdG8gc3RvcCByZWN1cnNpdmUgbWFwcGluZ3MuCi0gICBMaXN0IG1hcHBpbmdzIHRoYXQgaGF2ZSBhIHJhdyBlc2NhcGUgc2VxdWVuY2UgYm90aCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBrZXkKICAgIGZvciB0aGF0IGVzY2FwZSBzZXF1ZW5jZSAoaWYgdGhlcmUgaXMgb25lKSBhbmQgdGhlIHNlcXVlbmNlIGl0c2VsZi4KLSAgIExpc3QgbWFwcGluZ3M6IE9uY2Ugd2l0aCBzcGVjaWFsIGtleXMgbGlzdGVkIGFzIDw+LCBvbmNlIHdpdGggbWV0YSBjaGFycyBhcwogICAgPE0tYT4sIG9uY2Ugd2l0aCB0aGUgYnl0ZSB2YWx1ZXMgKG9jdGFsPykuICBTb3J0IG9mICJzcGVsbCBtYXBwaW5nIiBjb21tYW5kPwotICAgV2hlbiBlbnRlcmluZyBtYXBwaW5nczogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byBlbnRlciBtZXRhIGtleXMgbGlrZSB0aGV5CiAgICBhcmUgZGlzcGxheWVkLCB3aXRoaW4gPD46IDxNLWE+LCA8fkA+IG9yIDx8YT4uCi0gICBBbGxvdyBtdWx0aXBsZSBhcmd1bWVudHMgdG8gOnVubWFwLgotICAgQ29tbWFuZCB0byBzaG93IGtleXMgdGhhdCBhcmUgbm90IHVzZWQgYW5kIGF2YWlsYWJsZSBmb3IgbWFwcGluZwogICAgIjpmcmVla2V5cyIuCi0gICBBbGxvdyBhbnkgY2hhcmFjdGVyIGV4Y2VwdCB3aGl0ZSBzcGFjZSBpbiBhYmJyZXZpYXRpb25zIGxocyAoUmllaG0pLgoKCkluY3NlYXJjaDoKLSAgIEFkZCBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUgc2VhcmNoZWQgZm9yICdpbmNzZWFyY2gnPwotICAgV2hlbiBubyBtYXRjaCBpcyBmb3VuZCBhbmQgdGhlIHVzZXIgdHlwZXMgbW9yZSwgdGhlIHNjcmVlbiBpcyByZWRyYXduCiAgICBhbnl3YXkuICBDb3VsZCBza2lwIHRoYXQuICBFc3AuIGlmIHRoZSBsaW5lIHdyYXBzIGFuZCB0aGUgdGV4dCBpcyBzY3JvbGxlZAogICAgdXAgZXZlcnkgdGltZS4KLSAgIFRlbXBvcmFyaWx5IG9wZW4gZm9sZHMgdG8gc2hvdyB3aGVyZSB0aGUgc2VhcmNoIGVuZHMgdXAuICBSZXN0b3JlIHRoZQogICAgZm9sZHMgd2hlbiBnb2luZyB0byBhbm90aGVyIGxpbmUuCi0gICBXaGVuIGluY3NlYXJjaCB1c2VkIGFuZCBoaXR0aW5nIHJldHVybiwgbm8gbmVlZCB0byBzZWFyY2ggYWdhaW4gaW4gbWFueQogICAgY2FzZXMsIHNhdmVzIGEgbG90IG9mIHRpbWUgaW4gYmlnIGZpbGVzLiAoU2xvb3RtYW4gd2FudHMgdG8gd29yayBvbiB0aGlzPykKICAgIFdoZW4gbm90IHVzaW5nIHNwZWNpYWwgY2hhcmFjdGVycywgY2FuIGNvbnRpbnVlIHNlYXJjaCBmcm9tIHRoZSBsYXN0IG1hdGNoCiAgICAob3Igbm90IGF0IGFsbCwgd2hlbiB0aGVyZSB3YXMgbm8gbWF0Y2gpLiAgU2VlIG9sZG1haWwvd2ViYi9pbi44NzIuCi0gICBXaXRoIGluY3NlYXJjaCwgdXNlIENUUkwtTi9DVFJMLVAgdG8gZ28gdG8gbmV4dC9wcmV2aW91cyBtYXRjaCwgc29tZSBvdGhlcgogICAga2V5IHRvIGNvcHkgbWF0Y2hlZCB3b3JkIHRvIHNlYXJjaCBwYXR0ZXJuIChBbGV4YW5kZXIgU2NobWlkKS4KCgpTZWFyY2hpbmc6CjggICBBZGQgImcvIiBhbmQgImdiIiB0byBzZWFyY2ggZm9yIGEgcGF0dGVybiBpbiB0aGUgVmlzdWFsbHkgc2VsZWN0ZWQgdGV4dD8KICAgICJnPyIgaXMgYWxyZWFkeSB1c2VkIGZvciByb3QxMy4KICAgIENhbiB1c2UgImcvIiBpbiBOb3JtYWwgbW9kZSwgdXNlcyB0aGUgJzwgdG8gJz4gYXJlYS4KOCAgIEFkZCBhIG1lY2hhbmlzbSBmb3IgcmVjdXJzaXZlbmVzczogIlxAKChbXigpXSpcQGdbXigpXSopXCkiLiAgXEBnIHN0YW5kcwogICAgZm9yICJnbyByZWN1cnNpdmUgaGVyZSIgYW5kIFxAKCBcKSBtYXJrcyB0aGUgcmVjdXJzaXZlIHBhcnQuCiAgICBQZXJsIGRvZXMgaXQgdGhpcyB3YXk6CgkgICAgJHBhcmVuID0gcXIvIFwoKCBbXigpXSB8ICg/P3sgJHBhcmVuIH0pICkqIFwpIC94OwogICAgSGVyZSAkcGFyZW4gaXMgZXZhbHVhdGVkIHdoZW4gaXQncyBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgbGlrZSBhIHJlZ2V4cAogICAgaW5zaWRlIGEgcmVnZXhwLiAgSW4gdGhlIGFib3ZlIHRlcm1zIGl0IHdvdWxkIGJlOgoJICAgIFxAKChcKFteKCldXHxcQGdcKSopXCkKNyAgIFN1cHBvcnQgZm9yIGFwcHJveGltYXRlLXJlZ2V4cHMgdG8gZmluZCBzaW1pbGFyIHdvcmRzIChhZ3JlcAogICAgaHR0cDovL3d3dy50Z3JpZXMuZGUvYWdyZXAvIHRyZTogaHR0cDovL2xhdXJpa2FyaS5uZXQvdHJlL2luZGV4Lmh0bWwpLgo4ICAgQWRkIGFuIGl0ZW0gZm9yIGEgYmlnIGNoYXJhY3RlciByYW5nZSwgc28gdGhhdCBvbmUgY2FuIHNlYXJjaCBmb3IgYQogICAgY2hpbmVzZSBjaGFyYWN0ZXI6IFx6WzIzNC0xMjM0XSAgb3IgXHpbWFgtWVldIG9yIFx6WzB4MjMtMHgyMzRdLgo3ICAgQWRkIGFuIGl0ZW0gc3RhY2sgdG8gYWxsb3cgbWF0Y2hpbmcgKCkuICBPbmUgc2lkZSBpcyAicHVzaCBYIG9uCiAgICB0aGUgc3RhY2sgaWYgcHJldmlvdXMgYXRvbSBtYXRjaGVkIi4gIE90aGVyIHNpZGUgaXMgIm1hdGNoIHdpdGggdG9wIG9mCiAgICBzdGFjaywgcG9wIGl0IHdoZW4gaXQgbWF0Y2hlcyIuICBVc2UgIlxAcFgiIGFuZCAiXEBtIj8KCUV4YW1wbGU6IFwoKFxAcCkuXHstfVxAbVwpKgo3ICAgQWRkIGFuIG9wdGlvbiB0byBhY2NlcHQgYSBtYXRjaCBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgQWxzbyBmb3IKICAgIHNlYXJjaCgpLiAoQnJldHQpCjcgICBBZGQgYSBmbGFnIHRvICIvcGF0LyIgdG8gZGlzY2FyZCBhbiBlcnJvci4gIFVzZWZ1bCB0byBjb250aW51ZSBhIG1hcHBpbmcKICAgIHdoZW4gYSBzZWFyY2ggZmFpbHMuICBDb3VsZCBiZSAiL3BhdC9FIiAoZSBpcyBhbHJlYWR5IHVzZWQgZm9yIGFuIG9mZnNldCkuCjcgICBBZGQgcGF0dGVybiBpdGVtIHRvIHVzZSBwcm9wZXJ0aWVzIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4gIEluIFBlcmwgaXQncwogICAgIlxwe0x9IiBmb3IgYSBsZXR0ZXIuICBTZWUgUmVndWxhciBFeHByZXNzaW9uIFBvY2tldCBSZWZlcmVuY2UuCjggICBXb3VsZCBpdCBiZSBwb3NzaWJsZSB0byBhbGxvdyAiOjIzLDQ1L3BhdC9mbGFncyIgdG8gc2VhcmNoIGZvciAicGF0IiBpbgogICAgbGluZXMgMjMgdG8gNDU/ICBPciBkb2VzIHRoaXMgY29uZmxpY3Qgd2l0aCBFeCByYW5nZSBzeW50YXg/CjggICBBbGxvdyBpZGVudGljYWwgcGFpcnMgaW4gJ21hdGNocGFpcnMnLiAgUmVzdHJpY3QgdGhlIHNlYXJjaCB0byB0aGUgY3VycmVudAogICAgbGluZS4KNyAgIEFsbG93IGxvbmdlciBwYWlycyBpbiAnbWF0Y2hwYWlycycuICBVc2Ugfi92aW0vbWFjcm9zL21hdGNoaXQudmltIGFzIGFuCiAgICBleGFtcGxlLgo4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIGNoYXJhY3RlciB0aGF0ICIlIiBjaGVja3MgZm9yIGluCiAgICAjaWYvI2VuZGlmLiAgRm9yIG5tYWtlIGl0J3MgIWlmLyFlbmRpZi4KLSAgIEZvciAiJSIgY29tbWFuZDogc2V0IGhpZXJhcmNoeSBmb3Igd2hpY2ggdGhpbmdzIGluY2x1ZGUgb3RoZXIgdGhpbmdzIHRoYXQKICAgIHNob3VsZCBiZSBpZ25vcmVkIChsaWtlICIqLyIgb3IgIiNlbmRpZiIgaW5zaWRlIC8qICovKS4KICAgIEFsc286IHVzZSAiJSIgdG8ganVtcCBmcm9tIHN0YXJ0IHRvIGVuZCBvZiBzeW50YXggcmVnaW9uIGFuZCBiYWNrLgogICAgQWx0ZXJuYXRpdmU6IHVzZSBtYXRjaGl0LnZpbQo4ICAgIi86L2UrMSIgZ2V0cyBzdHVjayBvbiBhIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICBEbyB3ZSBjYXJlPwo4ICAgQSBwYXR0ZXJuIGxpa2UgIlwoW15hXVwrXClcKyIgdGFrZXMgYW4gYXdmdWwgbG9uZyB0aW1lLiAgUmVjb2duaXplIHRoYXQKICAgIHRoZSByZWN1cnNpdmUgIlwrIiBpcyBtZWFuaW5nbGVzcyBhbmQgb3B0aW1pemUgZm9yIGl0LgogICAgVGhpcyBvbmUgaXMgYWxzbyB2ZXJ5IHNsb3cgb24gIi8qIHNvbWUgY29tbWVudCAqLyI6ICJeXC9cKlwoLipbXi9dXCkqJCIuCjcgICBSZWNvZ25pemUgIlthLXpdIiwgIlswLTldIiwgZXRjLiBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIGZhc3RlciAiXGwiIGFuZAogICAgIlxkIi4KNyAgIEFkZCBhIHdheSB0byBzcGVjaWZ5IGNoYXJhY3RlcnMgaW4gPEMtTT4gb3IgPEtleT4gZm9ybS4gIENvdWxkIGJlCiAgICBcJTxDLU0+Lgo4ICAgRmxhZ3MgdGhhdCBhcHBseSB0byB0aGUgd2hvbGUgcGF0dGVybi4KICAgIFRoaXMgd29ya3MgZm9yIGFsbCBwbGFjZXMgd2hlcmUgYSByZWdleHAgaXMgdXNlZC4KICAgIEFkZCAiXHEiIHRvIG5vdCBzdG9yZSB0aGlzIHBhdHRlcm4gYXMgdGhlIGxhc3Qgc2VhcmNoIHBhdHRlcm4/CjggICBBZGQgYW4gYXJndW1lbnQgYWZ0ZXIgIjpzL3BhdC9zdHIvIiBmb3IgYSByYW5nZSBvZiBtYXRjaGVzLiAgRm9yIGV4YW1wbGUsCiAgICAiOnMvcGF0L3N0ci8jMy00IiB0byByZXBsYWNlIG9ubHkgdGhlIHRoaXJkIGFuZCBmb3VydGggInBhdCIgaW4gYSBsaW5lLgo4ICAgQWRkIGFuIG9wdGlvbiBub3QgdG8gdXNlICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIGZvciAiOnMiIGFuZCAiOmciCiAgICBjb21tYW5kcy4gKEthaG4pICBJdCB3b3VsZCB3b3JrIGxpa2UgIjpub2giIGlzIHVzZWQgYWZ0ZXIgdGhhdCBjb21tYW5kLgogICAgQWxzbzogQW4gZXh0cmEgZmxhZyB0byBkbyB0aGlzIG9uY2UsIGFuZCBhIGZsYWcgdG8ga2VlcCB0aGUgZXhpc3RpbmcKICAgIHNlYXJjaCBwYXR0ZXJuLgotICAgQWRkIFwlaHtncm91cC1uYW1lfTsgdG8gc2VhcmNoIGZvciBhIHNwZWNpZmljIGhpZ2hsaWdodCBncm91cC4KICAgIEFkZCBcJXN7c3ludGF4LWdyb3VwfTsgdG8gc2VhcmNoIGZvciBhIHNwZWNpZmljIHN5bnRheCBncm91cC4KLSAgIFN1cHBvcnQgUGVybCByZWdleHAuICBVc2UgUENSRSAoUGVybCBDb21wYXRpYmxlIFJFKSBwYWNrYWdlLiAoU2hhZGUpCiAgICBPciB0cmFuc2xhdGUgdGhlIHBhdHRlcm4gdG8gYSBWaW0gb25lLgogICAgRG9uJ3Qgc3dpdGNoIG9uIHdpdGggYW4gb3B0aW9uIGZvciB0eXBlZCBjb21tYW5kcy9tYXBwaW5ncy9mdW5jdGlvbnMsIGl0J3MKICAgIHRvbyBjb25mdXNpbmcuICBVc2UgIlxAQCIgaW4gdGhlIHBhdHRlcm4sIHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzLgo3ICAgQWRkIFBPU0lYIHJlZ2V4cCwgbGlrZSBOdmksIHdpdGggJ2V4dGVuZGVkJyBvcHRpb24/ICBJdCdzIGxpa2UgdmVyeS1tYWdpYy4KLSAgIFJlbWVtYmVyIGZsYWdzIGZvciBiYWNrcmVmZXJlbmNlZCBpdGVtcywgc28gdGhhdCAiKiIgY2FuIGJlIHVzZWQgYWZ0ZXIgaXQuCiAgICBDaGVjayB3aXRoICJcKFxTXClcMVx7M30iLiAoSGVtbWVybGluZykKLSAgIEFkZCBmbGFncyB0byBzZWFyY2ggY29tbWFuZCAoYWxzbyBmb3IgIjpzIj8pOgogICAgaQlpZ25vcmUgY2FzZQogICAgSQl1c2UgY2FzZQogICAgcAl1c2UgUGVybCByZWdleHAgc3ludGF4IChvciBQT1NJWD8pCiAgICB2CXVzZSBWaSByZWdleHAgc3ludGF4CiAgICBmCWZvcmdldCBwYXR0ZXJuLCBkb24ndCBrZWVwIGl0IGZvciAibiIgY29tbWFuZAogICAgRiAgIHJlbWVtYmVyIHBhdHRlcm4sIGtlZXAgaXQgZm9yICJuIiBjb21tYW5kCiAgICBQZXJsIHVzZXMgdGhlc2UgdG9vOgogICAgZQlldmFsdWF0ZSB0aGUgcmlnaHQgc2lkZSBhcyBhbiBleHByZXNzaW9uIChQZXJsIG9ubHkpCiAgICBtCW11bHRpcGxlIGxpbmUgZXhwcmVzc2lvbiAod2UgZG9uJ3QgbmVlZCBpdCkKICAgIG8JY29tcGlsZSBvbmx5IG9uY2UgKFBlcmwgb25seSkKICAgIHMJc2luZ2xlIGxpbmUgZXhwcmVzc2lvbiAod2UgZG9uJ3QgbmVlZCBpdCkKICAgIHgJZXh0ZW5kZWQgcmVnZXhwICh3ZSBkb24ndCBuZWVkIGl0KQogICAgV2hlbiB1c2VkIGFmdGVyICI6ZyIgY29tbWFuZCwgYmFja3NsYXNoIG5lZWRlZCB0byBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUKICAgIGZvbGxvd2luZyBjb21tYW5kLgogICAgQWRkICdzZWFyY2hmbGFncycgZm9yIGRlZmF1bHQgZmxhZ3MgKHJlcGxhY2VzICdnZGVmYXVsdCcpLgotICAgQWRkIGNvbW1hbmQgdG8gZGlzcGxheSB0aGUgbGFzdCB1c2VkIHN1YnN0aXR1dGUgcGF0dGVybiBhbmQgbGFzdCB1c2VkCiAgICBwYXR0ZXJuLiAoTWFyZ28pICBNYXliZSBtYWtlIGl0IGFjY2Vzc2libGUgdGhyb3VnaCBhIHJlZ2lzdGVyIChsaWtlICIvCiAgICBmb3Igc2VhcmNoIHN0cmluZyk/CjcgICBVc2UgVC1zZWFyY2ggYWxnb3JpdGhtLCB0byBzcGVlZCB1cCBzZWFyY2hpbmcgZm9yIHN0cmluZ3Mgd2l0aG91dCBzcGVjaWFsCiAgICBjaGFyYWN0ZXJzLiAgU2VlIEMndCBhcnRpY2xlLCBBdWd1c3QgMTk5Ny4KLSAgIEFkZCAnZnV6enljYXNlJyBvcHRpb24sIHNvIHRoYXQgY2FzZSBkb2Vzbid0IG1hdHRlciwgYW5kICctJyBhbmQgJ18nIGFyZQogICAgZXF1aXZhbGVudCAoZm9yIFVuaXggZmlsZW5hbWVzKS4KLSAgIEFkZCAndicgZmxhZyB0byBzZWFyY2ggY29tbWFuZDogZW50ZXIgVmlzdWFsIG1vZGUsIHdpdGggdGhlIG1hdGNoaW5nIHRleHQKICAgIGFzIFZpc3VhbCBhcmVhLiAodmFyaWF0aW9uIG9uIGlkZWEgZnJvbSBCZXJ0aW4pCi0gICBTZWFyY2hpbmc6ICIvdGhpcy8vdGhhdC8iIHNob3VsZCBmaW5kICJ0aGF0IiBhZnRlciAidGhpcyIuCi0gICBBZGQgZ2xvYmFsIHNlYXJjaCBjb21tYW5kczogSW5zdGVhZCBvZiB3cmFwcGluZyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsCiAgICB0aGV5IGNvbnRpbnVlIGluIGFub3RoZXIgYnVmZmVyLiAgVXNlIGZsYWcgYWZ0ZXIgc2VhcmNoIHBhdHRlcm46CiAgICBhCWZvciB0aGUgbmV4dCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0CiAgICBmCWZvciBmaWxlIGluIHRoZSBidWZmZXIgbGlzdAogICAgdwlmb3IgZmlsZSBlZGl0ZWQgaW4gYSB3aW5kb3cuCiAgICBlLmcuICIvcGF0L2YiLiAgVGhlbiAibiIgYW5kICJOIiB3b3JrIHRocm91Z2ggZmlsZXMgdG9vLiAgImYiIGZsYWcgYWxzbyBmb3IKICAgICI6cy9wYXQvZm9vL2YiPz8/ICBUaGVuIHdoZW4gJ2F1dG93cml0ZScgYW5kICdoaWRkZW4nIGFyZSBib3RoIG5vdCBzZXQsIGFzawogICAgYmVmb3JlIHNhdmluZyBmaWxlczogIlNhdmUgbW9kaWZpZWQgYnVmZmVyICIvcGF0aC9maWxlIj8gKFllcy9IaWRlL05vCiAgICBTYXZlLWFsbC9oaWRlLUFsbC9RdWl0KSAiLgotICAgIjpzL3BhdC9mb28vMyI6IGZpbmQgM3JkIG1hdGNoIG9mICJwYXQiLCBsaWtlIHNlZC4gKFRob21hcyBLb2VobGVyKQo3ICAgV2hlbiBzZWFyY2hpbmcgd2l0aCAnbicgZ2l2ZSBtZXNzYWdlIHdoZW4gZ2V0dGluZyBiYWNrIHdoZXJlIHRoZSBzZWFyY2gKICAgIGZpcnN0IHN0YXJ0ZWQuICBSZW1lbWJlciBzdGFydCBvZiBzZWFyY2ggaW4gJy8gbWFyay4KNyAgIEFkZCBvcHRpb24gdGhhdCBzY3JvbGxzIHNjcmVlbiB0byBwdXQgY3Vyc29yIGluIG1pZGRsZSBvZiBzY3JlZW4gYWZ0ZXIKICAgIHNlYXJjaCBhbHdheXMvd2hlbiBvZmYtc2NyZWVuL25ldmVyLiAgQW5kIGFmdGVyIGEgIjp0YWciIGNvbW1hbmQuICBNYXliZQogICAgc3BlY2lmeSBob3cgbWFueSBsaW5lcyBiZWxvdyB0aGUgc2NyZWVuIGNhdXNlcyBhIHJlZHJhdyB3aXRoIHRoZSBjdXJzb3IgaW4KICAgIHRoZSBtaWRkbGUgKGRlZmF1bHQgd291bGQgYmUgaGFsZiBhIHNjcmVlbiwgemVybyBtZWFucyBhbHdheXMpLgo2ICAgU3VwcG9ydCBtdWx0aXBsZSBzZWFyY2ggYnVmZmVycywgc28gbWFjcm9zIGNhbiBiZSBtYWRlIHdpdGhvdXQgc2lkZQogICAgZWZmZWN0cy4KNyAgIEZyb20geHZpbTogQWxsb3cgYSBuZXdsaW5lIGluIHNlYXJjaCBwYXR0ZXJucyAoYWxzbyBmb3IgOnMsIGNhbiBkZWxldGUKICAgIG5ld2xpbmUpLiAgQWRkIEJPVywgRU9XLCBORVdMLCBOTE9SQU5ZLCBOTEJVVEFOWSwgbWFnaWMgJ24nIGFuZCAncicsIGV0Yy4KICAgIFtub3QgaW4geHZpbTpdIEFkZCBvcHRpb24gdG8gc3dpdGNoIG9uIG1hdGNoZXMgY3Jvc3NpbmcgT05FIGxpbmUgYm91bmRhcnkuCjcgICBBZGQgIjppc2VsZWN0IiwgYSBjb21iaW5hdGlvbiBvZiAiOmlsaXN0IiBhbmQgIjp0c2VsZWN0Ii4gKEFhcm9uKSAoWmVsbG5lcikKICAgIEFsc28gIjpkc2VsZWN0Ii4KCgpVbmRvOgotICAgUGVyc2lzdGVudCB1bmRvOiBzdG9yZSB1bmRvIGluIGEgZmlsZS4KICAgIFVzZSB0aW1lc3RhbXBzLCBzbyB0aGF0IGEgdmVyc2lvbiBhIGNlcnRhaW4gdGltZSBhZ28gY2FuIGJlIGZvdW5kIGFuZCBpbmZvCiAgICBiZWZvcmUgc29tZSB0aW1lL2RhdGUgY2FuIGJlIGZsdXNoZWQuICd1bmRvcGVyc2lzdCcgZ2l2ZXMgbWF4aW11bSB0aW1lIHRvCiAgICBrZWVwIHVuZG86ICIzaCIsICIxZCIsICIydyIsICIxeSIsIGV0Yy4gIEZvciB0aGUgZmlsZSB1c2UgZG90IGFuZAogICAgZXh0ZW5zaW9uOiAiLmZpbGVuYW1lLnVufiIgKGxpa2Ugc3dhcGZpbGUgYnV0ICJ1bn4iIGluc3RlYWQgb2YgInN3cCIpLgo4ICAgU2VlICI6ZSIgYXMgYSBjaGFuZ2Ugb3BlcmF0aW9uLCBmaW5kIHRoZSBjaGFuZ2VzIGFuZCBhZGQgdGhlbSB0byB0aGUKICAgIHVuZG8gaW5mby4gIE5lZWRlZCBmb3Igd2hlbiBhbiBleHRlcm5hbCB0b29sIGNoYW5nZXMgdGhlIGZpbGUuCi0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVuZG8gYWxsIHRoZSBjb21tYW5kcyBmcm9tIGEgbWFwcGluZywgaW5jbHVkaW5nIGEKICAgIHRyYWlsaW5nIHVuZmluaXNoZWQgY29tbWFuZCwgZS5nLiBmb3IgIjptYXAgSyBpWF5bciIuCi0gICBXaGVuIGFjY2lkZW50YWxseSBoaXR0aW5nICJSIiBpbnN0ZWFkIG9mIEN0cmwtUiwgZnVydGhlciBDdHJsLVIgaXMgbm90CiAgICBwb3NzaWJsZSwgZXZlbiB3aGVuIHR5cGluZyA8RXNjPiBpbW1lZGlhdGVseS4gKEdyYWhuKSAgQWxzbyBmb3IgImkiLCAiYSIsCiAgICBldGMuICBQb3N0cG9uZSBzYXZpbmcgZm9yIHVuZG8gdW50aWwgc29tZXRoaW5nIGlzIHJlYWxseSBpbnNlcnRlZD8KOCAgIFdoZW4gSW5zZXJ0aW5nIGEgbG90IG9mIHRleHQsIGl0IGNhbiBvbmx5IGJlIHVuZG9uZSBhcyBhIHdob2xlLiAgTWFrZSB1bmRvCiAgICBzeW5jIHBvaW50cyBhdCBldmVyeSBsaW5lIG9yIHdvcmQuICBDb3VsZCByZWNvZ25pemUgdGhlIHN0YXJ0IG9mIGEgbmV3CiAgICB3b3JkICh3aGl0ZSBzcGFjZSBhbmQgdGhlbiBub24td2hpdGUgc3BhY2UpIGFuZCBiYWNrc3BhY2luZy4KICAgIENhbiBhbHJlYWR5IHVzZSBDVFJMLUcgdSwgYnV0IHRoYXQgcmVxdWlyZXMgcmVtYXBwaW5nIGEgbG90IG9mIHRoaW5ncy4KOCAgIE1ha2UgdW5kbyBtb3JlIG1lbW9yeS1lZmZpY2llbnQ6IENvbXBhcmUgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIGNoYW5nZSwKICAgIG9ubHkgcmVtZW1iZXIgdGhlIGxpbmVzIHRoYXQgcmVhbGx5IGNoYW5nZWQuCjcgICBBZGQgdW5kbyBmb3IgYSByYW5nZSBvZiBsaW5lcy4gIENhbiBjaGFuZ2UgdGhlc2UgYmFjayB0byBhIHByZXZpb3VzCiAgICB2ZXJzaW9uIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUuICBTdG9wIGRvaW5nIHRoaXMgd2hlbiBhCiAgICBjaGFuZ2UgaW5jbHVkZXMgb25seSBzb21lIG9mIHRoZXNlIGxpbmVzIGFuZCBjaGFuZ2VzIHRoZSBsaW5lIGNvdW50LiAgTmVlZAogICAgdG8gc3RvcmUgdGhlc2UgdW5kbyBhY3Rpb25zIGFzIGEgc2VwYXJhdGUgY2hhbmdlIHRoYXQgY2FuIGJlIHVuZG9uZS4KLSAgIEZvciB1X3NhdmUoKSBpbmNsdWRlIHRoZSBjb2x1bW4gbnVtYmVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCAnWyBhbmQgJ10uCiAgICBBbmQgaW4gdGhlIGZ1dHVyZSB0aGUgdW5kbyBjYW4gYmUgbWFkZSBtb3JlIGVmZmljaWVudCAoV2ViYikuCi0gICBJbiBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnM6IEZyZWUgYWxsb2NhdGVkIHNwYWNlIGluIHVuZG8sIGFuZCByZWR1Y2UgdGhlCiAgICBudW1iZXIgb2YgdW5kbyBsZXZlbHMgKHdpdGggY29uZmlybWF0aW9uKS4KLSAgIEluc3RlYWQgb2YgWytdLCBnaXZlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCB3cml0ZTogWysxMjNdLgogICAgV2hlbiB1bmRvaW5nIHRvIGJlZm9yZSB0aGUgbGFzdCB3cml0ZSwgY2hhbmdlIHRoaXMgdG8gYSBuZWdhdGl2ZSBudW1iZXI6CiAgICBbLTk5XS4KLSAgIFdpdGggdW5kbyB3aXRoIHNpbXBsZSBsaW5lIGRlbGV0ZS9pbnNlcnQ6IG9wdGltaXplIHNjcmVlbiB1cGRhdGluZy4KLSAgIFdoZW4gZXhlY3V0aW5nIG1hY3JvJ3M6IFNhdmUgZWFjaCBsaW5lIGZvciB1bmRvIG9ubHkgb25jZS4KLSAgIFdoZW4gZG9pbmcgYSBnbG9iYWwgc3Vic3RpdHV0ZSwgY2F1c2luZyBhbG1vc3QgYWxsIGxpbmVzIHRvIGJlIGNoYW5nZWQsCiAgICB1bmRvIGluZm8gYmVjb21lcyB2ZXJ5IGJpZy4gIFB1dCB1bmRvIGluZm8gaW4gc3dhcCBmaWxlPz8KCgpCdWZmZXIgbGlzdDoKNyAgIENvbW1hbmQgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgaW4gYW5vdGhlciBidWZmZXI6ICI6aW5idWYge2J1Zm5hbWV9IHtjbWR9Ii4KICAgIEFsc28gZm9yIG90aGVyIHdpbmRvd3M6ICI6aW53aW4ge3dpbm5yfSB7Y21kfSIuICBIb3cgdG8gbWFrZSBzdXJlIHRoYXQKICAgIHRoaXMgd29ya3MgcHJvcGVybHkgZm9yIGFsbCBjb21tYW5kcywgYW5kIHN0aWxsIGJlIGFibGUgdG8gcmV0dXJuIHRvIHRoZQogICAgY3VycmVudCBidWZmZXIvd2luZG93PyAgRS5nLjogIjppbmJ1ZiB4eHggb25seSIuCjggICBBZGQgRmlsZS57cmVjZW50X2ZpbGVzfSBtZW51IGVudHJpZXM6IFJlY2VudGx5IGVkaXRlZCBmaWxlcy4KICAgIFJvbiBBYXJvbiBoYXMgYSBwbHVnaW4gZm9yIHRoaXM6IG1ydS52aW0uCjggICBVbml4OiBDaGVjayBhbGwgdXNlcyBvZiBmbmFtZWNtcCgpIGFuZCBmbmFtZW5jbXAoKSBpZiB0aGV5IHNob3VsZCBjaGVjawogICAgaW5vZGUgdG9vLgo3ICAgQWRkIGFub3RoZXIgbnVtYmVyIGZvciBhIGJ1ZmZlciwgd2hpY2ggaXMgdmlzaWJsZSBmb3IgdGhlIHVzZXIuICBXaGVuCiAgICBjcmVhdGluZyBhIG5ldyBidWZmZXIsIHVzZSB0aGUgbG93ZXN0IG51bWJlciBub3QgaW4gdXNlIChvciB0aGUgaGlnaGVzdAogICAgbnVtYmVyIGluIHVzZSBwbHVzIG9uZT8pLgo3ICAgT2ZmZXIgc29tZSBidWZmZXIgc2VsZWN0aW9uIGZyb20gdGhlIGNvbW1hbmQgbGluZT8gIExpa2UgdXNpbmcgIjpscyIgYW5kCiAgICBhc2tpbmcgZm9yIGEgYnVmZmVyIG51bWJlci4gKFphY2htYW5uKQotICAgV2hlbiBzdGFydGluZyB0byBlZGl0IGEgZmlsZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIGJ1ZmZlciBsaXN0LCB1c2UgdGhlCiAgICBmaWxlIG5hbWUgYXJndW1lbnQgZm9yIHRoZSBuZXcgc2hvcnQgZmlsZSBuYW1lLiAoV2ViYikKLSAgIEFkZCBhbiBvcHRpb24gdG8gbWFrZSAiOmJuZXh0IiBhbmQgIjpicHJldiIgd3JhcCBhcm91bmQgdGhlIGVuZCBvZiB0aGUKICAgIGJ1ZmZlciBsaXN0LiAgQWxzbyBmb3IgIjpuZXh0IiBhbmQgIjpwcmV2Ij8KNyAgIEFkZCBhcmd1bWVudCB0byAiOmxzIiB3aGljaCBpcyBhIHBhdHRlcm4gZm9yIGJ1ZmZlcnMgdG8gbGlzdC4KICAgIEUuZy4gIjpscyAqLmMiLiAoVGhvbXBzb24pCjcgICBBZGQgZXhwYW5zaW9uIG9mIGJ1ZmZlciBuYW1lcywgc28gdGhhdCAiKi5jIiBpcyBleHBhbmRlZCB0byBhbGwgYnVmZmVyCiAgICBuYW1lcy4gIE5lZWRlZCBmb3IgIjpiZGVsICouYyIsICI6YnVubG9hZCAqLmMiLCBldGMuCjggICBTdXBwb3J0IGZvciA8YWZpbGU+IHdoZXJlIGEgYnVmZmVyIG5hbWUgaXMgZXhwZWN0ZWQuCjggICBTb21lIGNvbW1hbmRzIGRvbid0IHVzZSBsaW5lIG51bWJlcnMsIGJ1dCBidWZmZXIgbnVtYmVycy4gICckJwogICAgc2hvdWxkIHRoZW4gbWVhbiB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGJ1ZmZlci4gIEUuZy46ICI0LCRiZGVsIi4KNyAgIEFkZCBhbiBvcHRpb24gdG8gbW9zdGx5IHVzZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMuICBTZXBhcmF0ZWx5IGZvcgogICAgaW50ZXJuYWwgdXNlIGFuZCBmb3Igd2hlbiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbT8KCgpTd2FwICguc3dwKSBmaWxlczoKOCAgIElmIHdyaXRpbmcgdG8gdGhlIHN3YXAgZmlsZSBmYWlscywgc2hvdWxkIHRyeSB0byBvcGVuIG9uZSBpbiBhbm90aGVyCiAgICBkaXJlY3RvcnkgZnJvbSAnZGlyJy4gIFVzZWZ1bCBpbiBjYXNlIHRoZSBmaWxlIHN5c3RlbSBpcyBmdWxsIGFuZCB3aGVuCiAgICB0aGVyZSBhcmUgc2hvcnQgZmlsZSBuYW1lIHByb2JsZW1zLgo4ICAgQWxzbyB1c2UgdGhlIGNvZGUgdG8gdHJ5IHVzaW5nIGEgc2hvcnQgZmlsZSBuYW1lIGZvciB0aGUgYmFja3VwIGFuZCBzd2FwCiAgICBmaWxlIGZvciB0aGUgV2luMzIgYW5kIERvcyAzMiBiaXQgdmVyc2lvbnMuCjggICBXaGVuIGEgZmlsZSBpcyBlZGl0ZWQgYnkgcm9vdCwgYWRkICRMT0dOQU1FIHRvIGtub3cgd2hvIGRpZCBzdS4KOCAgIFdoZW4gdGhlIGVkaXRlZCBmaWxlIGlzIGEgc3ltbGluaywgdHJ5IHRvIHB1dCB0aGUgc3dhcCBmaWxlIGluIHRoZSBzYW1lCiAgICBkaXIgYXMgdGhlIGFjdHVhbCBmaWxlLiAgQWRqdXN0IEZ1bGxOYW1lKCkuICBBdm9pZHMgZWRpdGluZyB0aGUgc2FtZSBmaWxlCiAgICB0d2ljZSAoZS5nLiB3aGVuIHVzaW5nIHF1aWNrZml4KS4gIEFsc28gdHJ5IHRvIG1ha2UgdGhlIG5hbWUgb2YgdGhlIGJhY2t1cAogICAgZmlsZSB0aGUgc2FtZSBhcyB0aGUgYWN0dWFsIGZpbGU/CiAgICBVc2UgdGhlIGNvZGUgZm9yIHJlc29sdmUoKT8KNyAgIFdoZW4gdXNpbmcgNjQgYml0IGlub2RlIG51bWJlcnMsIGFsc28gc3RvcmUgdGhlIHRvcCAzMiBiaXRzLiAgQWRkIGFub3RoZXIKICAgIGZpZWxkIGZvciB0aGlzLCB1c2luZyBwYXJ0IG9mIGJvX2ZuYW1lW10sIHRvIGtlZXAgaXQgY29tcGF0aWJsZS4KNyAgIFdoZW4gZWRpdGluZyBhIGZpbGUgb24gcmVtb3ZhYmxlIG1lZGlhLCBzaG91bGQgcHV0IHN3YXAgZmlsZSBzb21ld2hlcmUKICAgIGVsc2UuICBVc2Ugc29tZXRoaW5nIGxpa2UgJ3InIGZsYWcgaW4gJ3ZpbWluZm8nLiAgJ2RpcmF2b2lkJz8KICAgIEFsc286IEJlIGFibGUgdG8gc3BlY2lmeSBtaW5pbXVtIGRpc2sgc3BhY2UsIHNraXAgZGlyZWN0b3J5IHdoZW4gbm90CiAgICBlbm91Z2ggcm9vbS4KNyAgIEFkZCBhIGNvbmZpZ3VyZSBjaGVjayBmb3Igd2hpY2ggZGlyZWN0b3J5IHNob3VsZCBiZSB1c2VkOiAvdG1wLCAvdmFyL3RtcAogICAgb3IgL3Zhci9wcmVzZXJ2ZS4KLSAgIEFkZCBhbiBvcHRpb24gdG8gY3JlYXRlIGEgc3dhcCBmaWxlIG9ubHkgd2hlbiBtYWtpbmcgdGhlIGZpcnN0IGNoYW5nZSB0bwogICAgdGhlIGJ1ZmZlci4gIChMaWFuZykgIE9yIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIG5vdCByZWFkLW9ubHkuCi0gICBBZGQgb3B0aW9uIHRvIHNldCAidW1hc2siIGZvciBiYWNrdXAgZmlsZXMgYW5kIHN3YXAgZmlsZXMgKEFudHdlcnBlbikuCiAgICAnYmFja3VwdW1hc2snIGFuZCAnc3dhcHVtYXNrJz8gIE9yICd1bWFza2JhY2snIGFuZCAndW1hc2tzd2FwJz8KLSAgIFdoZW4gZWRpdGluZyBhIHJlYWRvbmx5IGZpbGUsIGRvbid0IHVzZSBhIHN3YXAgZmlsZSBidXQgcmVhZCBwYXJ0cyBmcm9tIHRoZQogICAgb3JpZ2luYWwgZmlsZS4gIEFsc28gZG8gdGhpcyB3aGVuIHRoZSBmaWxlIGlzIGh1Z2UgKD4nbWF4bWVtJykuICBXZSBkbwogICAgbmVlZCB0byBsb2FkIHRoZSBmaWxlIG9uY2UgdG8gY291bnQgdGhlIG51bWJlciBvZiBsaW5lcz8gIFBlcmhhcHMga2VlcCBhCiAgICBjYWNoZWQgbGlzdCBvZiB3aGljaCBsaW5lIGlzIHdoZXJlLgoKClZpbWluZm86CjcgICBDYW4gcHJvYmFibHkgcmVtb3ZlIHRoZSBjb2RlIHRoYXQgY2hlY2tzIGZvciBhIHdyaXRhYmxlIHZpbWluZm8gZmlsZSwKICAgIGJlY2F1c2Ugd2Ugbm93IGRvIHRoZSBjaG93bigpIGZvciByb290LCBhbmQgb3RoZXJzIGNhbid0IG92ZXJ3cml0ZSBzb21lb25lCiAgICBlbHNlJ3MgdmltaW5mbyBmaWxlLgo4ICAgQWRkIGFyZ3VtZW50IHRvIGtlZXAgdGhlIGxpc3Qgb2YgYnVmZmVycyB3aGVuIFZpbSBpcyBzdGFydGVkIHdpdGggYSBmaWxlCiAgICBuYW1lLiAoU2NoaWxkKQo4ICAgS2VlcCB0aGUgbGFzdCB1c2VkIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSBicm93c2VyIChGaWxlL09wZW4gbWVudSkuCjggICBSZW1lbWJlciB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyIGZvciAiQEAiLgo4ICAgUmVtZW1iZXIgYSBsaXN0IG9mIGxhc3QgYWNjZXNzZWQgZmlsZXMuICBUbyBiZSB1c2VkIGluIHRoZQogICAgIkZpbGUuT3BlbiBSZWNlbnQiIG1lbnUuICBEZWZhdWx0IGlzIHRvIHJlbWVtYmVyIDEwIGZpbGVzIG9yIHNvLgogICAgQWxzbyByZW1lbWJlciB3aGljaCBmaWxlcyBoYXZlIGJlZW4gcmVhZCBhbmQgd3JpdHRlbi4gIEhvdyB0byBkaXNwbGF5CiAgICB0aGlzPwo3ICAgQWxzbyBzdG9yZSB0aGUgIi4gcmVnaXN0ZXIgKGxhc3QgaW5zZXJ0ZWQgdGV4dCkuCjcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHN0b3JlIGJ1ZmZlciBuYW1lcyBpbiB2aW1pbmZvIGZpbGUgcmVsYXRpdmUgdG8gc29tZQogICAgZGlyZWN0b3J5LCB0byBtYWtlIHRoZW0gcG9ydGFibGUgb3ZlciBhIG5ldHdvcmsuIChBYXJvbikKNiAgIFN0b3JlIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgd2luZG93cy4gIFNvIHRoYXQgd2hlbiBxdWl0dGluZwogICAgVmltLCBhbmQgdGhlbiBzdGFydGluZyBhZ2FpbiAod2l0aG91dCBhIGZpbGUgbmFtZSBhcmd1bWVudCksIHlvdSBzZWUgdGhlCiAgICBzYW1lIGZpbGVzIGluIHRoZSB3aW5kb3dzLiAgVXNlICI6bWtzZXNzaW9uIiBjb2RlPwotICAgTWFrZSBtYXJrcyBwcmVzZW50IGluIC52aW1pbmZvIHVzYWJsZSBhcyBmaWxlIG1hcmtzOiBEaXNwbGF5IGEgbGlzdCBvZgogICAgImxhc3QgdmlzaXRlZCBmaWxlcyIgYW5kIHNlbGVjdCBvbmUgdG8ganVtcCB0by4KCgpNb2RlbGluZXM6CjggICBCZWZvcmUgdHJ5aW5nIHRvIGV4ZWN1dGUgYSBtb2RlbGluZSwgY2hlY2sgdGhhdCBpdCBsb29rcyBsaWtlIG9uZSAodmFsaWQKICAgIG9wdGlvbiBuYW1lcykuICBJZiBpdCdzIHZlcnkgd3JvbmcsIHNpbGVudGx5IGlnbm9yZSBpdC4KICAgIElnbm9yZSBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiU3ViamVjdDogIi4KLSAgIFdoZW4gYW4gb3B0aW9uIHZhbHVlIGlzIGNvbWluZyBmcm9tIGEgbW9kZWxpbmUsIGRvIG5vdCBjYXJyeSBpdCBvdmVyIHRvCiAgICBhbm90aGVyIGVkaXRlZCBmaWxlPyAgV291bGQgbmVlZCB0byByZW1lbWJlciB0aGUgdmFsdWUgZnJvbSBiZWZvcmUgdGhlCiAgICBtb2RlbGluZSBzZXR0aW5nLgotICAgQWxsb3cgc2V0dGluZyBhIHZhcmlhYmxlIGZyb20gYSBtb2RlbGluZT8gIE9ubHkgYWxsb3cgdXNpbmcgZml4ZWQgc3RyaW5ncywKICAgIG5vIGZ1bmN0aW9uIGNhbGxzLCB0byBhdm9pZCBhIHNlY3VyaXR5IHByb2JsZW0uCi0gICBBbGxvdyAiOmRvYXV0byBCdWZSZWFkIHguY3BwIiBpbiBtb2RlbGluZXMsIHRvIGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvcgogICAgLmNwcCBmaWxlcy4KLSAgIFN1cHBvcnQgdGhlICJhYmJyZXZpYXRlIiBjb21tYW5kIGluIG1vZGVsaW5lcyAoS2Vhcm5zKS4gIENhcmVmdWwgZm9yCiAgICBjaGFyYWN0ZXJzIGFmdGVyIDxFc2M+LCB0aGF0IGlzIGEgc2VjdXJpdHkgbGVhay4KLSAgIEFkZCBvcHRpb24gc2V0dGluZyB0byBhc2sgdXNlciBpZiBoZSB3YW50cyB0byBoYXZlIHRoZSBtb2RlbGluZXMgZXhlY3V0ZWQKICAgIG9yIG5vdC4gIFNhbWUgZm9yIC5leHJjIGluIGxvY2FsIGRpci4KCgpTZXNzaW9uczoKOCAgIERPUy9XaW5kb3dzOiAiOm1rc2Vzc2lvbiIgZ2VuZXJhdGVzIGEgImNkIiBjb21tYW5kIHdoZXJlICJhYVwjYmIiIG1lYW5zCiAgICBkaXJlY3RvcnkgIiNiYiIgaW4gImFhIiwgYnV0IGl0J3MgdXNlZCBhcyAiYWEjYmIiLiAoUm9uYWxkIEhvZWxsd2FydGgpCjcgICBXaGVuIHRoZXJlIGlzIGEgImhlbHAudHh0IiB3aW5kb3cgaW4gYSBzZXNzaW9uIGZpbGUsIHJlc3RvcmluZyB0aGF0CiAgICBzZXNzaW9uIHdpbGwgbm90IGdldCB0aGUgIkxPQ0FMIEFERElUSU9OUyIgYmFjay4KOCAgIFdpdGggIjpta3Nlc3Npb24iIGFsd2F5cyBzdG9yZSB0aGUgJ3Nlc3Npb25vcHRpb25zJyBvcHRpb24sIGV2ZW4gd2hlbgogICAgIm9wdGlvbnMiIGlzbid0IGluIGl0LiAoU3QtQW1hbnQpCjggICBXaGVuIHVzaW5nICI6bWtzZXNzaW9uIiwgYWxzbyBzdG9yZSBhIGNvbW1hbmQgdG8gcmVzZXQgYWxsIG9wdGlvbnMgdG8KICAgIHRoZWlyIGRlZmF1bHQgdmFsdWUsIGJlZm9yZSBzZXR0aW5nIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBhdCB0aGVpcgogICAgZGVmYXVsdCB2YWx1ZS4KNyAgIFdpdGggIjpta3Nlc3Npb24iIGFsc28gc3RvcmUgdGhlIHRhZyBzdGFjayBhbmQganVtcCBoaXN0b3J5LiAoTWljaGFsCiAgICBNYWxlY2tpKQo3ICAgUGVyc2lzdGVudCB2YXJpYWJsZXM6ICJwOnZhciI7IHN0b3JlZCBpbiB2aW1pbmZvIGZpbGUgYW5kIHNlc3Npb25zIGZpbGVzLgogCgpPcHRpb25zOgo3ICAgIjp3aXRoIG9wdGlvbj12YWx1ZSB8IGNvbW1hbmQiOiB0ZW1wb3JhcmlseSBzZXQgYW4gb3B0aW9uIHZhbHVlIGFuZAogICAgcmVzdG9yZSBpdCBhZnRlciB0aGUgY29tbWFuZCBoYXMgZXhlY3V0ZWQuCjcgICBTZXR0aW5nIGFuIG9wdGlvbiBhbHdheXMgc2V0cyAid19zZXRfY3Vyc3dhbnQiLCB3aGlsZSB0aGlzIGlzIG9ubHkKICAgIHJlcXVpcmVkIGZvciBhIGZldyBvcHRpb25zLiAgT25seSBkbyBpdCBmb3IgdGhvc2Ugb3B0aW9ucyB0byBhdm9pZCB0aGUKICAgIHNpZGUgZWZmZWN0Lgo4ICAgTWFrZSAib2xkIiBudW1iZXIgb3B0aW9ucyB0aGF0IHJlYWxseSBnaXZlIGEgbnVtYmVyIG9mIGVmZmVjdHMgaW50byBzdHJpbmcKICAgIG9wdGlvbnMgdGhhdCBhcmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4gIFRoZSBvbGQgbnVtYmVyIHZhbHVlcyBzaG91bGQKICAgIGFsc28gYmUgc3VwcG9ydGVkLgo4ICAgQWRkIGNvbW1hbmRzIHRvIHNhdmUgYW5kIHJlc3RvcmUgYW4gb3B0aW9uLCB3aGljaCBhbHNvIHByZXNlcnZlcyB0aGUgZmxhZwogICAgdGhhdCBtYXJrcyBpZiB0aGUgb3B0aW9uIHdhcyBzZXQuICBVc2VmdWwgdG8ga2VlcCB0aGUgZWZmZWN0IG9mIHNldHRpbmcKICAgICdjb21wYXRpYmxlJyBhZnRlciAiOnN5bnRheCBvbiIgaGFzIGJlZW4gdXNlZC4KNyAgIFRoZXJlIGlzICd0aXRsZW9sZCcsIHdoeSBpcyB0aGVyZSBubyAnaWNvbm9sZCc/IChDaGF6ZWxhcykKNyAgIE1ha2UgJ3Njcm9sbG9mZicgYSBnbG9iYWwtbG9jYWwgb3B0aW9uLCBzbyB0aGF0IGl0IGNhbiBiZSBkaWZmZXJlbnQgaW4gdGhlCiAgICBxdWlja2ZpeCB3aW5kb3csIGZvciBleGFtcGxlLiAoR2FyeSBIb2xsb3dheSkKCgpFeHRlcm5hbCBjb21tYW5kczoKOCAgIFdoZW4gZmlsdGVyaW5nIHRleHQsIHJlZGlyZWN0IHN0ZGVyciBzbyB0aGF0IGl0IGNhbid0IG1lc3MgdXAgdGhlIHNjcmVlbgogICAgYW5kIFZpbSBkb2Vzbid0IG5lZWQgdG8gcmVkcmF3IGl0LiAgQWxzbyBmb3IgIjpyICFjbWQiLgo0ICAgU2V0IHNlcGFyYXRlIHNoZWxsIGZvciAiOnNoIiwgcGlwaW5nICJyYW5nZSFmaWx0ZXIiLCByZWFkaW5nIHRleHQgInIgIWxzIgogICAgYW5kIHdyaXRpbmcgdGV4dCAidyAhd2MiLiAoRGV1dHNjaGUpICBBbGxvdyBhcmd1bWVudHMgZm9yIGZhc3Qgc3RhcnQgKGUuZy4KICAgIC1mKS4KNCAgIEFsbG93IGRpcmVjdCBleGVjdXRpb24sIHdpdGhvdXQgdXNpbmcgYSBzaGVsbC4KNCAgIFJ1biBhbiBleHRlcm5hbCBjb21tYW5kIGluIHRoZSBiYWNrZ3JvdW5kLiAgQnV0IGhvdyBhYm91dCBJL08gaW4gdGhlIEdVST8KICAgIENhcmVmdWw6IGRvbid0IHR1cm4gVmltIGludG8gYSBzaGVsbCEKNCAgIEFkZCBmZWF0dXJlIHRvIGRpc2FibGUgdXNpbmcgYSBzaGVsbCBvciBleHRlcm5hbCBjb21tYW5kcy4KCgpNdWx0aXBsZSBXaW5kb3dzOgo3ICAgInZpbSAtb08gZmlsZSAuLi4iIHVzZSBib3RoIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNwbGl0cy4KOCAgIEFkZCBDVFJMLVcgVDogZ28gdG8gdGhlIHRvcCB3aW5kb3cgaW4gdGhlIGNvbHVtbiBvZiB0aGUgY3VycmVudCB3aW5kb3cuCiAgICBBbmQgQ1RSTC1XIEI6IGdvIHRvIGJvdHRvbSB3aW5kb3cuCjcgICBVc2UgQ1RSTC1XIDxUYWI+LCBsaWtlIGFsdC10YWIsIHRvIHN3aXRjaCBiZXR3ZWVuIGJ1ZmZlcnMuICBSZXBlYXQgPFRhYj4KICAgIHRvIHNlbGVjdCBhbm90aGVyIGJ1ZmZlciAob25seSBsb2FkZWQgb25lcz8pLCA8QlM+IHRvIGdvIGJhY2ssIDxFbnRlcj4gdG8KICAgIHNlbGVjdCBidWZmZXIsIDxFc2M+IHRvIGdvIGJhY2sgdG8gb3JpZ2luYWwgYnVmZmVyLgo3ICAgQWRkIGEgJ3dpbmZpeHdpZHRoJyBvcHRpb24sIHNpbWlsYXIgdG8gJ3dpbmZpeGhlaWdodCcuCjYgICBBZGQgYW4gb3B0aW9uIHRvIHJlc2l6ZSB0aGUgc2hlbGwgd2hlbiBzcGxpdHRpbmcgYW5kL29yIGNsb3NpbmcgYSB3aW5kb3cuCiAgICAiOnZzcCIgd291bGQgbWFrZSB0aGUgc2hlbGwgd2lkZXIgYnkgYXMgbWFueSBjb2x1bW5zIGFzIG5lZWRlZCBmb3IgdGhlIG5ldwogICAgd2luZG93LiAgU3BlY2lmeSBhIG1heGltdW0gc2l6ZSAob3IgdXNlIHRoZSBzY3JlZW4gc2l6ZSkuICAiOmNsb3NlIiB3b3VsZAogICAgc2hyaW5rIHRoZSBzaGVsbCBieSBhcyBtYW55IGNvbHVtbnMgYXMgY29tZSBhdmFpbGFibGUuIChEZW1pcmVsKQo3ICAgV2hlbiBzdGFydGluZyBWaW0gc2V2ZXJhbCB0aW1lcywgaW5zdGFudGlhdGUgYSBWaW0gc2VydmVyLCB0aGF0IGFsbG93cwogICAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgVmltcy4gIEZlZWxzIGxpa2Ugb25lIFZpbSBydW5uaW5nIHdpdGgKICAgIG11bHRpcGxlIHRvcC1sZXZlbCB3aW5kb3dzLiAgRXNwLiB1c2VmdWwgd2hlbiBWaW0gaXMgc3RhcnRlZCBmcm9tIGFuIElERQogICAgdG9vLiAgUmVxdWlyZXMgc29tZSBmb3JtIG9mIGludGVyIHByb2Nlc3MgY29tbXVuaWNhdGlvbi4KLSAgIFN1cHBvcnQgYSBjb25uZWN0aW9uIHRvIGFuIGV4dGVybmFsIHZpZXdlci4gIENvdWxkIGNhbGwgdGhlIHZpZXdlcgogICAgYXV0b21hdGljYWxseSBhZnRlciBzb21lIHNlY29uZHMgb2Ygbm9uLWFjdGl2aXR5LCBvciB3aXRoIGEgY29tbWFuZC4KICAgIEFsbG93IHNvbWUgd2F5IG9mIHJlcG9ydGluZyBzY3JvbGxpbmcgYW5kIGN1cnNvciBwb3NpdGlvbmluZyBpbiB0aGUgdmlld2VyCiAgICB0byBWaW0sIHNvIHRoYXQgdGhlIGxpbmsgYmV0d2VlbiB0aGUgdmlld2VkIGFuZCBlZGl0ZWQgdGV4dCBjYW4gYmUgbWFkZS4KCgpNYXJrczoKOCAgIFdoZW4gY3Vyc29yIGlzIGZpcnN0IG1vdmVkIGJlY2F1c2Ugb2Ygc2Nyb2xsaW5nLCBzZXQgYSBtYXJrIGF0IHRoaXMKICAgIHBvc2l0aW9uLiAgKFJpbW9uIEJhcnIpICBVc2UgJy0uCjggICBBZGQgYSBjb21tYW5kIHRvIGp1bXAgdG8gYSBtYXJrIGFuZCBtYWtlIHRoZSBtb3Rpb24gaW5jbHVzaXZlLiAgZydtIGFuZCBnYG0/CjggICBUaGUgJyIgbWFyayBpcyBzZXQgdG8gdGhlIGZpcnN0IGxpbmUsIGV2ZW4gd2hlbiBkb2luZyAiOm5leHQiIGEgZmV3IHRpbWVzLgogICAgT25seSBzZXQgdGhlICciIG1hcmsgd2hlbiB0aGUgY3Vyc29yIHdhcyByZWFsbHkgbW92ZWQgaW4gYSBmaWxlLgo4ICAgTWFrZSBgYCBhbmQgJycsIHdoaWNoIHdvdWxkIHBvc2l0aW9uIHRoZSBuZXcgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBtaWRkbGUKICAgIG9mIHRoZSB3aW5kb3csIHJlc3RvcmUgdGhlIG9sZCB0b3BsaW5lIChvciByZWxhdGl2ZSBwb3NpdGlvbikgZnJvbSB3aGVuCiAgICB0aGUgbWFyayB3YXMgc2V0Lgo3ICAgTWFrZSBhIGxpc3Qgb2YgZmlsZSBtYXJrcyBpbiBhIHNlcGFyYXRlIHdpbmRvdy4gIEZvciBsaXN0aW5nIGFsbCBidWZmZXJzLAogICAgbWF0Y2hpbmcgdGFncywgZXJyb3JzLCBldGMuICBOb3JtYWwgY29tbWFuZHMgdG8gbW92ZSBhcm91bmQuICBBZGQgY29tbWFuZHMKICAgIHRvIGp1bXAgdG8gdGhlIG1hcmsgKGluIGN1cnJlbnQgd2luZG93IG9yIG5ldyB3aW5kb3cpLiAgU3RhcnQgaXQgd2l0aAogICAgIjpicm93c2UgbWFya3MiPwo2ICAgQWRkIGEgbWVudSB0aGF0IGxpc3RzIHRoZSBNYXJrcyBsaWtlICI6bWFya3MiLiAoQW1lcmlnZSkKNyAgIEZvciAiOmp1bXBzIiwgIjp0YWdzIiBhbmQgIjptYXJrcyIsIGZvciBub3QgbG9hZGVkIGJ1ZmZlcnMsIHJlbWVtYmVyIHRoZQogICAgdGV4dCBhdCB0aGUgbWFyay4gIEhpZ2hsaWdodCB0aGUgY29sdW1uIHdpdGggdGhlIG1hcmsuCjcgICBIaWdobGlnaHQgZWFjaCBtYXJrIGluIHNvbWUgd2F5IChXaXRoICJNYXJrIiBoaWdobGlnaHQgZ3JvdXApLgogICAgT3IgZGlzcGxheSBtYXJrcyBpbiBhIHNlcGFyYXRlIGNvbHVtbiwgbGlrZSAnbnVtYmVyJyBkb2VzLgo3ICAgVXNlIGQibSB0byBkZWxldGUgcmVjdGFuZ3VsYXIgYXJlYSBmcm9tIGN1cnNvciB0byBtYXJrIG0gKGxpa2UgVmlsZSdzIFxtCiAgICBjb21tYW5kKS4KNyAgIFRyeSB0byBrZWVwIG1hcmtzIGluIHRoZSBzYW1lIHBvc2l0aW9uIHdoZW46CiAgICAtIHJlcGxhY2luZyB3aXRoIGEgbGluZSBicmVhaywgbGlrZSBpbiAiOnMvcGF0L15NLyIsIG1vdmUgbWFya3MgYWZ0ZXIgdGhlCiAgICAgIGxpbmUgYnJlYWsgY29sdW1uIHRvIHRoZSBuZXh0IGxpbmUuIChBY2V2ZWRvKQogICAgLSBpbnNlcnRpbmcvZGVsZXRpbmcgY2hhcmFjdGVycyBpbiBhIGxpbmUuCjUgICBJbmNsdWRlIG1hcmtzIGZvciBzdGFydC9lbmQgb2YgdGhlIGN1cnJlbnQgd29yZCBhbmQgc2VjdGlvbi4gIFVzZWZ1bCBpbgogICAgbWFwcGluZ3MuCjYgICBBZGQgInVubmFtZWQgbWFyayIgZmVhdHVyZTogTGlrZSBtYXJrcyBmb3IgdGhlICI6ZyIgY29tbWFuZCwgYnV0IHBsYWNlIGFuZAogICAgdW5wbGFjZSB0aGVtIHdpdGggY29tbWFuZHMgYmVmb3JlIGRvaW5nIHNvbWV0aGluZyB3aXRoIHRoZSBsaW5lcy4KICAgIEhpZ2hsaWdodCB0aGUgbWFya2VkIGxpbmVzIHNvbWVob3cuCgoKRGlncmFwaHM6CjcgICBNYWtlICJnYSIgc2hvdyB0aGUgZGlncmFwaCBmb3IgYSBjaGFyYWN0ZXIsIGlmIGl0IGV4aXN0cy4KICAgIEFsc28gdGhlIGtleW1hcD8KLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gZW50ZXIgInI8Qy1FPiIgYW5kICJyPEMtWT4iIChnZXQgY2hhcmFjdGVyIGZyb20gbGluZQogICAgYmVsb3cvYWJvdmUpLgotICAgVXNlIGRpZ3JhcGggdGFibGUgdG8gdGVsbCBWaW0gYWJvdXQgdGhlIGNvbGxhdGluZyBzZXF1ZW5jZSBvZiBzcGVjaWFsCiAgICBjaGFyYWN0ZXJzPwo4ICAgQWRkIGNvbW1hbmQgdG8gcmVtb3ZlIG9uZSBvciBtb3JlIChhbGwpIGRpZ3JhcGhzLiAoQnJvd24pCjcgICBTdXBwb3J0IGRpZmZlcmVudCBzZXRzIG9mIGRpZ3JhcGhzIChkZXBlbmRpbmcgb24gdGhlIGNoYXJhY3RlciBzZXQ/KS4gIEF0CiAgICBsZWFzdCBMYXRpbjEvVW5pY29kZSwgTGF0aW4tMiwgTVMtRE9TIChlc3AuIGZvciBXaW4zMikuCgoKV3JpdGluZyBmaWxlczoKLSAgIEluIHZpbV9yZW5hbWUoKSwgc2hvdWxkIGxvY2sgImZyb20iIGZpbGUgd2hlbiBkZWxldGluZyAidG8iIGZpbGUgZm9yCiAgICBzeXN0ZW1zIG90aGVyIHRoYW4gQW1pZ2EuICBBdm9pZHMgcHJvYmxlbXMgd2l0aCB1bmV4cGVjdGVkIGxvbmduYW1lIHRvCiAgICBzaG9ydG5hbWUgY29udmVyc2lvbi4KOCAgIHdyaXRlIG1jaF9pc2RldmljZSgpIGZvciBBbWlnYSwgTWFjLCBWTVMsIGV0Yy4KOCAgIFdoZW4gYXBwZW5kaW5nIHRvIGEgZmlsZSwgVmltIHNob3VsZCBhbHNvIG1ha2UgYSBiYWNrdXAgYW5kIGEgJ3BhdGNobW9kZScKICAgIGZpbGUuCjggICAnYmFja3Vwc2tpcCcgZG9lc24ndCB3cml0ZSBhIGJhY2t1cCBmaWxlIGF0IGFsbCwgYSBiaXQgZGFuZ2Vyb3VzIGZvciBzb21lCiAgICBhcHBsaWNhdGlvbnMuICBBZGQgJ2JhY2t1cGVsc2V3aGVyZScgdG8gd3JpdGUgYSBiYWNrdXAgZmlsZSBpbiBhbm90aGVyCiAgICBkaXJlY3Rvcnk/ICBPciBhZGQgYSBmbGFnIHRvICdiYWNrdXBkaXInPwo3ICAgVGhlICdkaXJlY3RvcnknIG9wdGlvbiBzdXBwb3J0cyBjaGFuZ2luZyBwYXRoIHNlcGFyYXRvcnMgdG8gIiUiIHRvIG1ha2UKICAgIGZpbGUgbmFtZXMgdW5pcXVlLCBhbHNvIHN1cHBvcnQgdGhpcyBmb3IgJ2JhY2t1cGRpcicuIChNaWtvbGFqIE1hY2hvd3NraSkKNiAgIEFkZCBhbiBvcHRpb24gdG8gd3JpdGUgYSBuZXcsIG51bWJlcmVkLCBiYWNrdXAgZmlsZSBlYWNoIHRpbWUuICBMaWtlCiAgICAncGF0Y2htb2RlJywgZS5nLiwgJ2JhY2t1cG1vZGUnLgo2ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB3cml0ZSAncGF0Y2htb2RlJyBmaWxlcyB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCiAgICBFLmcuLCAiOnNldCBwYXRjaG1vZGU9fi9iYWNrdXBzLyoub3JpZyIuIChUaG9tYXMpCjYgICBBZGQgYW4gb3B0aW9uIHRvIHByZXBlbmQgc29tZXRoaW5nIHRvIHRoZSBiYWNrdXAgZmlsZSBuYW1lLiAgRS5nLiwgIiMiLgogICAgT3IgbWF5YmUgYWxsb3cgYSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIGJhY2t1cCBmaWxlIG5hbWU/CjggICBPbmx5IG1ha2UgYSBiYWNrdXAgd2hlbiBvdmVyd3JpdGluZyBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLiAgQXZvaWRzCiAgICBsb3NpbmcgdGhlIG9yaWdpbmFsIHdoZW4gd3JpdGluZyB0d2ljZS4gKFNsb290bWFuKQo3ICAgT24gbm9uLVVuaXggbWFjaGluZXMsIGFsc28gb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBmaWxlIGluIHNvbWUgc2l0dWF0aW9ucwogICAgKGZpbGUgc3lzdGVtIGZ1bGwsIGl0J3MgYSBsaW5rIG9uIGFuIE5GUyBwYXJ0aXRpb24pLgo3ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSwgY2hlY2sgdGhhdCBpdCBoYXMgYmVlbiBjaGFuZ2Ugb3V0c2lkZSBvZiBWaW0gbW9yZQogICAgb2Z0ZW4sIG5vdCBvbmx5IHdoZW4gd3JpdGluZyBvdmVyIGl0LiAgRS5nLiwgYXQgdGhlIHRpbWUgdGhlIHN3YXAgZmlsZSBpcwogICAgZmx1c2hlZC4gIE9yIGV2ZXJ5IHRlbiBzZWNvbmRzIG9yIHNvICh1c2UgdGhlIHRpbWUgb2YgZGF5LCBjaGVjayBpdCBiZWZvcmUKICAgIHdhaXRpbmcgZm9yIGEgY2hhcmFjdGVyIHRvIGJlIHR5cGVkKS4KOCAgIFdoZW4gYSBmaWxlIHdhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZCwgc2hvdyB0aGlzIGluIHRoZSBzdGF0dXMKICAgIGxpbmUgb2YgdGhlIHdpbmRvdywgbGlrZSAiW3RpbWVdIi4KICAgIE1ha2UgaXQgZWFzaWVyIHRvIHJlbG9hZCBhbGwgb3V0ZGF0ZWQgZmlsZXMgdGhhdCBkb24ndCBoYXZlIGNoYW5nZXMuCiAgICBBdXRvbWF0aWMgYW5kL29yIHdpdGggYSBjb21tYW5kLgoKClN1YnN0aXR1dGU6CjggICBTdWJzdGl0dXRlIHdpdGggaGV4L3VuaWNvZGUgbnVtYmVyICJcJXhmZiIgYW5kICJcJXVhYmNkIi4gIEp1c3QgbGlrZQogICAgIlwldWFiY2QiIGluIHNlYXJjaCBwYXR0ZXJuLgo4ICAgTWFrZSBpdCBlYXNpZXIgdG8gcmVwbGFjZSBpbiBhbGwgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuICBFLmcuOgogICAgIjphcmdzdWIvb2xkd29yZC9uZXd3b3JkLyIuICBXb3JrcyBsaWtlICI6YXJnZG8gJXMvb2xkd29yZC9uZXd3b3JkL2d8dyIuCi0gICA6cy8vL3AgcHJpbnRzIHRoZSBsaW5lIGFmdGVyIGEgc3Vic3RpdHV0aW9uLgotICAgV2l0aCA6cy8vL2MgcmVwbGFjZSBcJiwgfiwgZXRjLiB3aGVuIHNob3dpbmcgdGhlIHJlcGxhY2VtZW50IHBhdHRlcm4uCjggICBXaXRoIDpzLy8vYyBhbGxvdyBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5IHdoZW4gJ25vd3JhcCcgaXMgZWZmZWN0aXZlLgogICAgQWxzbyBhbGxvdyBhIGNvdW50IGJlZm9yZSB0aGUgc2Nyb2xsaW5nIGtleXMuCi0gICBBZGQgbnVtYmVyIG9wdGlvbiB0byAiOnMvLzIiOiByZXBsYWNlIHNlY29uZCBvY2N1cnJlbmNlIG9mIHN0cmluZz8gIE9yOgogICAgOnMvLy9OIHN1YnN0aXR1dGVzIE4gdGltZXMuCi0gICBBZGQgYW5zd2VycyB0byAiOnN1YnN0aXR1dGUiIHdpdGggJ2MnIGZsYWcsIHVzZWQgaW4gYSAiOmdsb2JhbCIsIGUuZy46CiAgICAiOmcvcGF0MS9zL3BhdDIvcGF0My9jZyI6ICdBJyBkbyBhbGwgcmVtYWluaW5nIHJlcGxhY2VtZW50cywgJ1EnIGRvbid0IGRvCiAgICBhbnkgcmVwbGFjZW1lbnRzLCAndScgdW5kbyBsYXN0IHN1YnN0aXR1dGlvbi4KNyAgIFN1YnN0aXR1dGUgaW4gYSBibG9jayBvZiB0ZXh0LiAgVXNlIHtsaW5lfS57Y29sdW1ufSBub3RhdGlvbiBpbiBhbiBFeAogICAgcmFuZ2UsIGUuZy46ICI6MS4zLCQuNXMiIG1lYW5zIHRvIHN1YnN0aXR1dGUgZnJvbSBsaW5lIDEgY29sdW1uIDMgdG8gdGhlCiAgICBsYXN0IGxpbmUgY29sdW1uIDUuCjUgICBBZGQgY29tbWFuZHMgdG8gYm9va21hcmsgbGluZXMsIGRpc3BsYXkgYm9va21hcmtzLCByZW1vdmUgYm9va21hcmtzLAogICAgb3BlcmF0ZSBvbiBsaW5lcyB3aXRoIGJvb2ttYXJrcywgZXRjLiAgTGlrZSAiOmdsb2JhbCIgYnV0IHdpdGggdGhlCiAgICBwb3NzaWJpbGl0eSB0byBrZWVwIHRoZSBib29rbWFya3MgYW5kIHVzZSB0aGVtIHdpdGggc2V2ZXJhbCBjb21tYW5kcy4KICAgIChTdGFuaXNsYXYgU2l0YXIpCgoKTW91c2Ugc3VwcG9ydDoKOCAgIEFkZCAnbycgZmxhZyB0byAnbW91c2UnPwo3ICAgQmUgYWJsZSB0byBzZXQgYSAnbW91c2VzaGFwZScgZm9yIHRoZSBwb3B1cCBtZW51Lgo4ICAgQWRkICdtb3VzZScgZmxhZywgd2hpY2ggc2V0cyBhIGJlaGF2aW9yIGxpa2UgVmlzdWFsIG1vZGUsIGJ1dCBhdXRvbWF0aWMKICAgIHlhbmtpbmcgYXQgdGhlIGJ1dHRvbi11cCBldmVudC4gIE9yIGxpa2UgU2VsZWN0IG1vZGUsIGJ1dCB0eXBpbmcgZ2V0cyB5b3UKICAgIG91dCBvZiBTZWxlY3QgbW9kZSwgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlIHRleHQuIChCaGFza2FyKQo3ICAgQ2hlY2tvdXQgc3lzbW91c2UoKSBmb3IgRnJlZUJTRCBjb25zb2xlIG1vdXNlIHN1cHBvcnQuCi0gICBJbXBsZW1lbnQgbW91c2Ugc3VwcG9ydCBmb3IgdGhlIEFtaWdhIGNvbnNvbGUuCi0gICBVc2luZyByaWdodCBtb3VzZSBidXR0b24gdG8gZXh0ZW5kIGEgYmxvY2t3aXNlIHNlbGVjdGlvbiBzaG91bGQgYXR0YWNoIHRvCiAgICB0aGUgbmVhcmVzdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZSAoZm91ciBwb3NzaWJsZSBjb3JuZXJzKS4KLSAgIFByZWNlZGUgbW91c2UgY2xpY2sgYnkgYSBudW1iZXIgdG8gc2ltdWxhdGUgZG91YmxlIGNsaWNrcz8hPwotICAgV2hlbiBtb3VzZSBjbGljayBhZnRlciAncicgY29tbWFuZCwgZ2V0IGNoYXJhY3RlciB0aGF0IHdhcyBwb2ludGVkIHRvLgoKCkNyeXB0IGFuZCBzZWN1cml0eToKOCAgIEFsc28gY3J5cHQgdGhlIHN3YXBmaWxlLCBlYWNoIGJsb2NrIHNlcGFyYXRlbHkuICBDaGFuZ2UgbWZfd3JpdGUoKSBhbmQKICAgIG1mX3JlYWQoKS4gIEhvdyB0byBnZXQgYl9wX2tleSB0byB0aGVzZSBmdW5jdGlvbnM/CgoKQXJndW1lbnQgbGlzdDoKNiAgIEFkZCBjb21tYW5kIHRvIHB1dCBhbGwgZmlsZW5hbWVzIGZyb20gdGhlIHRhZyBmaWxlcyBpbiB0aGUgYXJndW1lbnQgbGlzdC4KICAgIFdoZW4gZ2l2ZW4gYW4gYXJndW1lbnQsIG9ubHkgdXNlIHRoZSBmaWxlcyB3aGVyZSB0aGF0IGFyZ3VtZW50IG1hdGNoZXMKICAgIChsaWtlIGBncmVwIC1sIGlkZW50YCkgYW5kIGp1bXAgdG8gdGhlIGZpcnN0IG1hdGNoLgo2ICAgQWRkIGNvbW1hbmQgdG8gZm9ybSBhbiBhcmdzIGxpc3QgZnJvbSBhbGwgdGhlIGJ1ZmZlcnM/CgoKUmVnaXN0ZXJzOgo4ICAgRG9uJ3QgZGlzcGxheSBlbXB0eSByZWdpc3RlcnMgd2l0aCAiOmRpc3BsYXkiLiAoRXRpZW5uZSkKOCAgIE1ha2UgdGhlICMgcmVnaXN0ZXIgd3JpdGFibGUsIHNvIHRoYXQgaXQgY2FuIGJlIHJlc3RvcmVkIGFmdGVyIGp1bXBpbmcKICAgIGFyb3VuZCBpbiB3aW5kb3dzLgo4ICAgQWRkIHB1dCBjb21tYW5kIHRoYXQgb3ZlcndyaXRlcyBleGlzdGluZyB0ZXh0LiAgU2hvdWxkIGFsc28gd29yayBmb3IKICAgIGJsb2Nrcy4gIFVzZWZ1bCB0byBtb3ZlIHRleHQgYXJvdW5kIGluIGEgdGFibGUuICBXb3JrcyBsaWtlIHVzaW5nICJSIF5SIHIiCiAgICBmb3IgZXZlcnkgbGluZS4KNiAgIFdoZW4geWFua2luZyBpbnRvIHRoZSB1bm5hbWVkIHJlZ2lzdGVycyBzZXZlcmFsIHRpbWVzLCBzb21laG93IG1ha2UgdGhlCiAgICBwcmV2aW91cyBjb250ZW50cyBhbHNvIGF2YWlsYWJsZSAobGlrZSBpdCdzIGRvbmUgZm9yIGRlbGV0aW5nKS4gIFdoYXQKICAgIHJlZ2lzdGVyIG5hbWVzIHRvIHVzZT8gIGciMSwgZyIyLCBldGMuPwotICAgV2hlbiBhcHBlbmRpbmcgdG8gYSByZWdpc3RlciwgYWxzbyByZXBvcnQgdGhlIHRvdGFsIHJlc3VsdGluZyBudW1iZXIgb2YKICAgIGxpbmVzLiAgT3IganVzdCBzYXkgIjk5IG1vcmUgbGluZXMgeWFua2VkIiwgYWRkIHRoZSAibW9yZSIuCi0gICBXaGVuIGluc2VydGluZyBhIHJlZ2lzdGVyIGluIEluc2VydCBtb2RlIHdpdGggQ1RSTC1SLCBkb24ndCBpbnNlcnQgY29tbWVudAogICAgbGVhZGVyIHdoZW4gbGluZSB3cmFwcz8KLSAgIFRoZSAiOkByIiBjb21tYW5kcyBzaG91bGQgdGFrZSBhIHJhbmdlIGFuZCBleGVjdXRlIHRoZSByZWdpc3RlciBmb3IgZWFjaAogICAgbGluZSBpbiB0aGUgcmFuZ2UuCi0gICBBZGQgIlAiIGNvbW1hbmQgdG8gaW5zZXJ0IGNvbnRlbnRzIG9mIHVubmFtZWQgcmVnaXN0ZXIsIG1vdmUgc2VsZWN0ZWQgdGV4dAoJdG8gcG9zaXRpb24gb2YgcHJldmlvdXMgZGVsZXRlZCAodG8gc3dhcCBmb28gYW5kIGJhciBpbiAiICsgZm9vIikKOCAgIFNob3VsZCBiZSBhYmxlIHRvIHlhbmsgYW5kIGRlbGV0ZSBpbnRvIHRoZSAiLyByZWdpc3Rlci4KICAgIEhvdyB0byB0YWtlIGNhcmUgb2YgdGhlIGZsYWdzIChvZmZzZXQsIG1hZ2ljKT8KCgpEZWJ1ZyBtb2RlOgo3ICAgQWRkIHNvbWV0aGluZyB0byBlbmFibGUgZGVidWdnaW5nIHdoZW4gYSByZW1vdGUgbWVzc2FnZSBpcyByZWNlaXZlZC4KOCAgIEFkZCBicmVha3BvaW50cyBmb3Igc2V0dGluZyBhbiBvcHRpb24KOCAgIEFkZCBicmVha3BvaW50cyBmb3IgYXNzaWduaW5nIHRvIGEgdmFyaWFibGUuCjcgICBBZGQgYSB3YXRjaHBvaW50IGluIHRoZSBkZWJ1ZyBtb2RlOiBBbiBleHByZXNzaW9uIHRoYXQgYnJlYWtzIGV4ZWN1dGlvbgogICAgd2hlbiBldmFsdWF0aW5nIHRvIG5vbi16ZXJvLiAgQWRkIHRoZSAid2F0Y2hhZGQgZXhwciIgY29tbWFuZCwgc3RvcCB3aGVuCiAgICB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gY2hhbmdlcy4gICI6d2F0Y2hkZWwiIGRlbGV0ZXMgYW4gaXRlbSwKICAgICI6d2F0Y2hsaXN0IiBsaXN0cyB0aGUgaXRlbXMuIChDaGFybGVzIENhbXBiZWxsKQo3ICAgU3RvcmUgdGhlIGhpc3RvcnkgZnJvbSBkZWJ1ZyBtb2RlIGluIHZpbWluZm8uCjcgICBNYWtlIHRoZSBkZWJ1ZyBtb2RlIGhpc3RvcnkgYXZhaWxhYmxlIHdpdGggaGlzdGdldCgpIGV0IGFsLgoKClZhcmlvdXMgaW1wcm92ZW1lbnRzOgo3ICAgQWRkIHBsdWdpbnMgZm9yIGZvcm1hdHRpbmc/ICBTaG91bGQgYmUgYWJsZSB0byBtYWtlIGEgY2hvaWNlIGRlcGVuZGluZyBvbgogICAgdGhlIGxhbmd1YWdlIG9mIGEgZmlsZSAoRW5nbGlzaC9Lb3JlYW4vSmFwYW5lc2UvZXRjLikuCiAgICBTZXR0aW5nIHRoZSAnbGFuZ2Zvcm1hdCcgb3B0aW9uIHRvICJjaGluZXNlIiB3b3VsZCBsb2FkIHRoZQogICAgImZvcm1hdC9jaGluZXNlLnZpbSIgcGx1Z2luLgogICAgVGhlIHBsdWdpbiB3b3VsZCBzZXQgJ2Zvcm1hdGV4cHInIGFuZCBkZWZpbmUgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KICAgIEVkd2FyZCBMLiBGb3ggZXhwbGFpbnMgaG93IGl0IHNob3VsZCBiZSBkb25lIGZvciBtb3N0IEFzaWFuIGxhbmd1YWdlcy4KICAgICgyMDA1IE5vdiAyNCkKNyAgIFt0IHRvIG1vdmUgdG8gcHJldmlvdXMgeG1sL2h0bWwgdGFnIChsaWtlICJ2YXRvdiIpLCBddCB0byBtb3ZlIHRvIG5leHQKICAgICgidmF0diIpLgo3ICAgWzwgdG8gbW92ZSB0byBwcmV2aW91cyB4bWwvaHRtbCB0YWcsIGUuZy4sIHByZXZpb3VzIDxsaT4uIF08IHRvIG1vdmUgdG8KICAgIG5leHQgPGxpPiwgXTwgdG8gbmV4dCA8L2xpPiwgWzwgdG8gcHJldmlvdXMgPC9saT4uCjggICBBZGQgIjpyZW5hbWUiIGNvbW1hbmQ6IHJlbmFtZSB0aGUgZmlsZSBvZiB0aGUgY3VycmVudCBidWZmZXIgYW5kIHJlbmFtZQogICAgdGhlIGJ1ZmZlci4gIEJ1ZmZlciBtYXkgYmUgbW9kaWZpZWQuCi0gICBBZGQgJWIgdG8gJ2Vycm9yZm9ybWF0JzogYnVmZmVyIG51bWJlci4gKFllZ2FwcGFuIExha3NobWFuYW4gLyBTdXJlc2gKICAgIEdvdmluZGFjaGFyKQo2ICAgSW4gdGhlIHF1aWNrZml4IHdpbmRvdyBzdGF0dXNsaW5lIGFkZCB0aGUgY29tbWFuZCB1c2VkIHRvIGdldCB0aGUgbGlzdCBvZgogICAgZXJyb3JzLCBlLmcuICI6bWFrZSBmb28iLCAiOmdyZXAgc29tZXRoaW5nICouYyIuCjYgICBQeXRob24gaW50ZXJmYWNlOiBhZGQgdmltLm1lc3NhZ2UoKSBmdW5jdGlvbi4gKE1pY2hhbCBWaXRlY2VrLCAyMDAyIE5vdiA1KQo3ICAgU3VwcG9ydCB1c2luZyAiOnZlcnQiIHdpdGggVXNlciBjb21tYW5kcy4gIEFkZCBleHBhbmRhYmxlIGl0ZW1zIDx2ZXJ0Pi4KICAgIERvIHRoZSBzYW1lIGZvciAiOmJyb3dzZSIgYW5kICI6Y29uZmlybSI/CiAgICBGb3IgIjpzaWxlbnQiIGFuZCAiOmRlYnVnIiBhcHBseSB0byB0aGUgd2hvbGUgdXNlciBjb21tYW5kLgo3ICAgQWxsb3cgYSB3aW5kb3cgbm90IHRvIGhhdmUgYSBzdGF0dXNsaW5lLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGEKICAgIHdpbmRvdyBhcyBhIGJ1ZmZlci10YWIgc2VsZWN0aW9uLgo3ICAgQWRkIGFuIGludmlzaWJsZSBidWZmZXIgd2hpY2ggY2FuIGJlIGVkaXRlZC4gIEZvciB1c2UgaW4gc2NyaXB0cyB0aGF0IHdhbnQKICAgIHRvIG1hbmlwdWxhdGUgdGV4dCB3aXRob3V0IGNoYW5naW5nIHRoZSB3aW5kb3cgbGF5b3V0Lgo4ICAgQWRkIGEgY29tbWFuZCB0byByZXZlcnQgdG8gdGhlIHNhdmVkIHZlcnNpb24gb2YgZmlsZTsgdW5kbyBvciByZWRvIHVudGlsCiAgICBhbGwgY2hhbmdlcyBhcmUgZ29uZS4KNyAgIEFkZCBhICI6Y3BmaWxlIiwgZ28gaW4gdGhlIG90aGVyIGRpcmVjdGlvbiBhcyAiOmNuZmlsZSIuCjYgICAidmltIC1xIC0iIHNob3VsZCByZWFkIHRoZSBsaXN0IG9mIGVycm9ycyBmcm9tIHN0ZGluLiAoR2F1dGFtIE11ZHVudXJpKQo4ICAgQWRkICItLXJlbW90ZS1mYWlsIjogV2hlbiBjb250YWN0aW5nIHRoZSBzZXJ2ZXIgZmFpbHMsIGV4aXQgVmltLgogICAgQWRkICItLXJlbW90ZS1zZWxmIjogV2hlbiBjb250YWN0aW5nIHRoZSBzZXJ2ZXIgZmFpbHMsIGRvIGl0IGluIHRoaXMgVmltLgogICAgT3ZlcnJ1bGVzIHRoZSBkZWZhdWx0IG9mICItLXJlbW90ZS1zZW5kIiB0byBmYWlsIGFuZCAiLS1yZW1vdGUiIHRvIGRvIGl0CiAgICBpbiB0aGlzIFZpbS4KOCAgIFdoZW4gVmltIHdhcyBzdGFydGVkIHdpdGhvdXQgYSBzZXJ2ZXIsIG1ha2UgaXQgcG9zc2libGUgdG8gc3RhcnQgb25lLCBhcwogICAgaWYgdGhlICItLXNlcnZlcm5hbWUiIGFyZ3VtZW50IHdhcyBnaXZlbi4gICI6c3RhcnRzZXJ2ZXIgPG5hbWU+Ij8KOCAgIE5vIGFkZHJlc3MgcmFuZ2UgY2FuIGJlIHVzZWQgYmVmb3JlIHRoZSBjb21tYW5kIG1vZGlmaWVycy4gIFRoaXMgbWFrZXMKICAgIHRoZW0gZGlmZmljdWx0IHRvIHVzZSBpbiBhIG1lbnUgZm9yIFZpc3VhbCBtb2RlLiAgQWNjZXB0IHRoZSByYW5nZSBhbmQKICAgIGhhdmUgaXQgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBjb21tYW5kLgo4ICAgQWRkIHRoZSBwb3NzaWJpbGl0eSB0byBzZXQgJ2ZpbGVmb3JtYXRzJyB0byBmb3JjZSBhIGZvcm1hdCBhbmQgc3RyaXAgb3RoZXIKICAgIENSIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgZm9yICJkb3MiIGZpbGVzIHJlbW92ZSBDUiBjaGFyYWN0ZXJzIGF0IHRoZQogICAgZW5kIG9mIHRoZSBsaW5lLCBzbyB0aGF0IGEgZmlsZSB3aXRoIG1peGVkIGxpbmUgZW5kaW5ncyBpcyBjbGVhbmVkIHVwLgogICAgVG8ganVzdCBub3QgZGlzcGxheSB0aGUgQ1IgY2hhcmFjdGVyczogQWRkIGEgZmxhZyB0byAnZGlzcGxheSc/CjcgICBTb21lIGNvbXBpbGVycyBnaXZlIGVycm9yIG1lc3NhZ2VzIGluIHdoaWNoIHRoZSBmaWxlIG5hbWUgZG9lcyBub3QgaGF2ZSBhCiAgICBwYXRoLiAgQmUgYWJsZSB0byBzcGVjaWZ5IHRoYXQgJ3BhdGgnIGlzIHVzZWQgZm9yIHRoZXNlIGZpbGVzLgo3ICAgWHRlcm0gc2VuZHMgPEVzYz5PM0YgZm9yIDxNLUVuZD4uICBTaW1pbGFybHkgZm9yIG90aGVyIDxNLUhvbWU+LCA8TS1MZWZ0PiwKICAgIGV0Yy4gIENvbWJpbmF0aW9ucyBvZiBBbHQsIEN0cmwgYW5kIFNoaWZ0IGFyZSBhbHNvIHBvc3NpYmxlLiAgUmVjb2duaXplCiAgICB0aGVzZSB0byBhdm9pZCBpbnNlcnRpbmcgdGhlIHJhdyBieXRlIHNlcXVlbmNlLCBoYW5kbGUgbGlrZSB0aGUga2V5CiAgICB3aXRob3V0IG1vZGlmaWVyICh1bmxlc3MgbWFwcGVkKS4KOCAgIEFkZCAiOmJyZWFrZGVsICoiOiBkZWxldGUgYWxsIGJyZWFrcG9pbnRzLgo3ICAgU3VwcG9ydCAiOmJyb3dzZSBlZGl0IiBpbiBjb25zb2xlLCB1c2luZyBleHBsb3Jlci52aW0/CjYgICBBZGQgImdHIjogbGlrZSB3aGF0ICJnaiIgaXMgdG8gImoiOiBnbyB0byB0aGUgTid0aCB3aW5kb3cgbGluZS4KOCAgIEFkZCBjb21tYW5kIGxpa2UgIjpub3JtYWwiIHRoYXQgYWNjZXB0cyA8S2V5PiBub3RhdGlvbiBsaWtlICI6bWFwIi4KOSAgIFN1cHBvcnQgQUNMcyBvbiBtb3JlIHN5c3RlbXMuCjcgICBBZGQgTW9kZU1zZ1Zpc3VhbCwgTW9kZU1zZ0luc2VydCwgZXRjLiBzbyB0aGF0IGVhY2ggbW9kZSBtZXNzYWdlIGNhbiBiZQogICAgaGlnaGxpZ2h0ZWQgZGlmZmVyZW50bHkuCjcgICBBZGQgYSBtZXNzYWdlIGFyZWEgZm9yIHRoZSB1c2VyLiAgU2V0IHNvbWUgb3B0aW9uIHRvIHJlc2VydmUgc3BhY2UgKGFib3ZlCiAgICB0aGUgY29tbWFuZCBsaW5lPykuICBVc2UgYW4gIjplY2hvdXNlciIgY29tbWFuZCB0byBkaXNwbGF5IHRoZSBtZXNzYWdlCiAgICAodHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgc3BhY2UpLgo3ICAgQWRkICVzIHRvICdrZXl3b3JkcHJnJzogcmVwbGFjZSB3aXRoIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4gKFplbGxuZXIpCjggICBTdXBwb3J0IHByaW50aW5nIG9uIFVuaXguICBDYW4gdXNlICJscGFuc2kuYyIgYXMgYW4gZXhhbXBsZS4gKEJvb2tvdXQpCjggICBBZGQgcHV0IGNvbW1hbmQgdGhhdCByZXBsYWNlcyB0aGUgdGV4dCB1bmRlciBpdC4gIEVzcC4gZm9yIGJsb2Nrd2lzZQogICAgVmlzdWFsIG1vZGUuCjcgICBFbmhhbmNlIHRlcm1yZXNwb25zZSBzdHVmZjogQWRkIHRfQ1YoPyk6IHBhdHRlcm4gb2YgdGVybSByZXNwb25zZSwgdXNlCiAgICByZWdleHA6ICJcZVxbWz4/XVswLTk7XSpjIiwgYnV0IG9ubHkgY2hlY2sganVzdCBhZnRlciBzZW5kaW5nIHRfUlYuCjcgICBBZGQgImd8IiBjb21tYW5kOiBtb3ZlIHRvIE4ndGggY29sdW1uIGZyb20gdGhlIGxlZnQgbWFyZ2luIChhZnRlciB3cmFwcGluZwogICAgYW5kIGFwcGx5aW5nICdsZWZ0Y29sJykuICBXb3JrcyBhcyAifCIgbGlrZSB3aGF0ICJnMCIgaXMgdG8gIjAiLgo3ICAgU3VwcG9ydCBzZXR0aW5nICdlcXVhbHByZycgdG8gYSB1c2VyIGZ1bmN0aW9uIG5hbWUuCjcgICBIaWdobGlnaHQgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGVuZC1vZi1saW5lIGRpZmZlcmVudGx5Lgo3ICAgV2hlbiAnd2hpY2h3cmFwJyBjb250YWlucyAibCIsICIkZGwiIHNob3VsZCBqb2luIGxpbmVzPwo4ICAgQWRkIGFuIGFyZ3VtZW50IHRvIGNvbmZpZ3VyZSB0byB1c2UgJENGTEFHUyBhbmQgbm90IG1vZGlmeSBpdD8gKE1vb25leSkKOCAgIEVuYWJsaW5nIGZlYXR1cmVzIGlzIGEgbWl4IG9mIGNvbmZpZ3VyZSBhcmd1bWVudHMgYW5kIGRlZmluZXMgaW4KICAgIGZlYXR1cmUuaC4gIEhvdyB0byBtYWtlIHRoaXMgY29uc2lzdGVudD8gIEZlYXR1cmUuaCBpcyByZXF1aXJlZCBmb3IKICAgIG5vbi11bml4IHN5c3RlbXMuICBQZXJoYXBzIGxldCBjb25maWd1cmUgZGVmaW5lIENPTkZfWFhYLCBhbmQgdXNlICNpZmRlZgogICAgQ09ORl9YWFggaW4gZmVhdHVyZS5oPyAgVGhlbiB3aGF0IHNob3VsZCBtaW4tZmVhdHVyZXMgYW5kIG1heC1mZWF0dXJlcyBkbz8KOCAgIEFkZCAiZ15FIiBhbmQgImdeWSIsIHRvIHNjcm9sbCBhIHNjcmVlbi1mdWxsIGxpbmUgdXAgYW5kIGRvd24uCjYgICBBZGQgIjp0aW1lciIgY29tbWFuZCwgdG8gc2V0IGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCBhdCBhIGNlcnRhaW4KICAgIGludGVydmFsLCBvciBvbmNlIGFmdGVyIHNvbWUgdGltZSBoYXMgZWxhcHNlZC4gKEFhcm9uKQogICAgUGVyaGFwcyBhbiBhdXRvY29tbWFuZCBldmVudCBsaWtlIEN1cnNvckhvbGQgaXMgYmV0dGVyPwo4ICAgQWRkICI6Y29uZmlybSIgaGFuZGxpbmcgaW4gb3Blbl9leGZpbGUoKSwgZm9yIHdoZW4gZmlsZSBhbHJlYWR5IGV4aXN0cy4KOCAgIFdoZW4gcXVpdHRpbmcgd2l0aCBjaGFuZ2VkIGZpbGVzLCBtYWtlIHRoZSBkaWFsb2cgbGlzdCB0aGUgY2hhbmdlZCBmaWxlCiAgICBhbmQgYWxsb3cgIndyaXRlIGFsbCIsICJkaXNjYXJkIGFsbCIsICJ3cml0ZSBzb21lIi4gIFRoZSBsYXN0IG9uZSB3b3VsZAogICAgdGhlbiBhc2sgIndyaXRlIiBvciAiZGlzY2FyZCIgZm9yIGVhY2ggY2hhbmdlZCBmaWxlLiAgUGF0Y2ggaW4gSGllckFzc2lzdAogICAgZG9lcyBzb21ldGhpbmcgbGlrZSB0aGlzLiAoU2hhaCkKNyAgIFVzZSBncm93YXJyYXkgZm9yIHJlcGxhY2Ugc3RhY2suCjcgICBIYXZlIGEgbG9vayBhdCB2aUggKEhlbGxlbmljIG9yIEdyZWVrIHZlcnNpb24gb2YgVmltKS4gIEJ1dCBhIHNvbHV0aW9uCiAgICBvdXRzaWRlIG9mIFZpbSBtaWdodCBiZSBzYXRpc2ZhY3RvcnkgKEhhcml0c2lzKS4KMyAgIE1ha2UgIjJkJSIgd29yayBsaWtlICJkJWQlIiBpbnN0ZWFkIG9mICJkMiUiPwo4ICAgTWFrZSAibW9yZSIgcHJvbXB0IGFjY2VwdCBjb21tYW5kIGNoYXJhY3RlcnMsIGxpa2UgImhpdC1lbnRlciIgcHJvbXB0PwogICAgT3IgZXh0ZW5kIGl0IHdpdGggbW9yZSBjb21tYW5kcywgbGlrZSAibGVzcyI6ICdiJyBmb3IgYmFjaywgJ2onIGZvciBvbmUKICAgIGxpbmUgZG93biwgZXRjLgo4ICAgRm9yIHRoZSAiLS1tb3JlLS0iIHByb21wdCwgc3VwcG9ydCB0aGUgJ2InYWNrIGNvbW1hbmQgZm9yIG1vcmUgY29tbWFuZHMuCiAgICBQb3NzaWJsZSBpbXBsZW1lbnRhdGlvbjogRG8gaXQgYXQgYSB2ZXJ5IGxvdyBsZXZlbCwgY2FjaGluZyB0aGUgbGluZXMgdGhhdAogICAgYXJlIG9uIHRoZSBzY3JlZW4gKHdpdGggaGlnaGxpZ2h0IGF0dHJpYnV0ZXMpLiAgQXZvaWRzIHRoYXQgY2hhbmdlcyBoYXZlCiAgICB0byBiZSBtYWRlIGZvciBhbGwgZnVuY3Rpb25zIHRoYXQgbGlzdCBzb21ldGhpbmcuCjcgICAiZyBDVFJMLU8iIGp1bXBzIGJhY2sgdG8gbGFzdCB1c2VkIGJ1ZmZlci4JU2tpcCBDVFJMLU8ganVtcHMgaW4gdGhlIHNhbWUKICAgIGJ1ZmZlci4gIE1ha2UganVtcGxpc3QgcmVtZW1iZXIgdGhlIGxhc3QgdGVuIGFjY2Vzc2VkIGJ1ZmZlcnM/Ci0gICBLZWVwIGEgbGlzdCBvZiBtb3N0IHJlY2VudGx5IHVzZWQgZmlsZXMgZm9yIGVhY2ggd2luZG93LCB1c2UgIltvIiB0byBnbwogICAgYmFjayAob2xkZXIgZmlsZSkgYW5kICJdbiIgdG8gZ28gZm9yd2FyZCAobmV3ZXIgZmlsZSkgKGxpa2UgXk8gYW5kIF5JIGZvcgogICAganVtcHMpLiAoV2ViYikgIFVzZSAiOmZpbGVzIiBhbmQgIjpscyIgdG8gbGlzdCB0aGUgZmlsZXMgaW4gaGlzdG9yeSBvcmRlci4KNyAgIEFkZCBhIGhpc3Rvcnkgb2YgcmVjZW50bHkgYWNjZXNzZWQgYnVmZmVyLglNYXliZSBtYWtlICIyIENUUkwtXiIganVtcCB0bwogICAgdGhlIDJuZCBwcmV2aW91c2x5IHZpc2l0ZWQgYnVmZmVyLCAiMyBDVFJMLV4iIHRvIHRoZSB0aGlyZCwgZXRjLiAgT3IgdXNlCiAgICAiMyBnIENUUkwtXiIgZm9yIHRoaXM/Ci0gICBBZGQgY29kZSB0byBkaXNhYmxlIHRoZSBDQVBTIGtleSB3aGVuIGdvaW5nIGZyb20gSW5zZXJ0IHRvIE5vcm1hbCBtb2RlLgotICAgU2V0IGRhdGUvcHJvdGVjdGlvbi9ldGMuIG9mIHRoZSBwYXRjaGZpbGUgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGZpbGUuCi0gICBVc2UgZ3Jvd2FycmF5IGZvciB0ZXJtY29kZXNbXSBpbiB0ZXJtLmMKLSAgIEFkZCA8d2luZG93LTk5PiwgbGlrZSA8Y3dvcmQ+IGJ1dCB1c2UgZmlsZW5hbWUgb2YgOTkndGggd2luZG93Lgo3ICAgQWRkIGEgd2F5IHRvIGNoYW5nZSBhbiBvcGVyYXRvciB0byBhbHdheXMgd29yayBjaGFyYWN0ZXJ3aXNlLWluY2x1c2l2ZQogICAgKGxpa2UgInYiIG1ha2VzIHRoZSBvcGVyYXRvciBjaGFyYWN0ZXJ3aXNlLWV4Y2x1c2l2ZSkuICAieCIgY291bGQgYmUgdXNlZC4KLSAgIE1ha2UgYSBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBsaXN0IG9mIG5hbWVzOiBleHBhbmQgd2lsZGNhcmRzLCByZXBsYWNlIGhvbWUKICAgIGRpciwgYXBwZW5kIGEgc3RyaW5nLCBkZWxldGUgYSBzdHJpbmcsIGV0Yy4KLSAgIFJlbW92ZSBta3RlbXAoKSBhbmQgdXNlIHRtcG5hbWUoKSBvbmx5PyAgQ3RhZ3MgZG9lcyB0aGlzLgotICAgV2hlbiByZXBsYWNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgdGhlcmUgaXMgb25lIHRoYXQgaXMgbm90IHNldCwKICAgIHR1cm4gaXQgaW50byBhbiBlbXB0eSBzdHJpbmc/ICBPbmx5IHdoZW4gZXhwYW5kaW5nIG9wdGlvbnM/IChIaWViZXJ0KQotICAgT3B0aW9uIHRvIHNldCBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIGluc3RlYWQgb2YgcHJvZHVjaW5nIGEgYmVlcCAoZS5nLiB0bwogICAgY2FsbCAicGxheSBuZXdiZWVwLmF1IikuCi0gICBBZGQgb3B0aW9uIHRvIHNob3cgdGhlIGN1cnJlbnQgZnVuY3Rpb24gbmFtZSBpbiB0aGUgc3RhdHVzIGxpbmUuICBNb3JlIG9yCiAgICBsZXNzIHdoYXQgeW91IGZpbmQgd2l0aCAiW1trIiwgbGlrZSBob3cgJ2NpbmRlbnQnIHJlY29nbml6ZXMgYSBmdW5jdGlvbi4KICAgIChCaGF0dCkuCi0gICAiW3IiIGFuZCAiXXIiOiBsaWtlICJwIiBhbmQgIlAiLCBidXQgcmVwbGFjZSBpbnN0ZWFkIG9mIGluc2VydCAoZXNwLiBmb3IKICAgIGJsb2Nrd2lzZSByZWdpc3RlcnMpLgotICAgQWRkICd0aW1lY2hlY2snIG9wdGlvbiwgb24gYnkgZGVmYXVsdC4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHN3aXRjaCBvZmYgdGhlCiAgICB0aW1lc3RhbXAgd2FybmluZyBhbmQgcXVlc3Rpb24uIChEb2R0KS4KLSAgIEFkZCBhbiBvcHRpb24gdG8gc2V0IHRoZSB0aW1lIGFmdGVyIHdoaWNoIFZpbSBzaG91bGQgY2hlY2sgdGhlIHRpbWVzdGFtcHMKICAgIG9mIHRoZSBmaWxlcy4gIE9ubHkgY2hlY2sgd2hlbiBhbiBldmVudCBvY2N1cnMgKGUuZy4sIGNoYXJhY3RlciB0eXBlZCwKICAgIG1vdXNlIG1vdmVkKS4gIFVzZWZ1bCBmb3Igbm9uLUdVSSB2ZXJzaW9ucyB3aGVyZSBrZXlib2FyZCBmb2N1cyBpc24ndAogICAgbm90aWNlYWJsZS4KOSAgIFdoZW4gdXNpbmcgIjp3IDxmbmFtZT4iIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIKICAgIGJ1ZmZlci4gIEdpdmUgYSB3YXJuaW5nIHJpZ2h0IGF3YXksIGRvbid0IHdhaXQgZm9yIGEgc2hlbGwgY29tbWFuZC4KLSAgIE1ha2UgJ3NtYXJ0Y2FzZScgd29yayBldmVuIHRob3VnaCAnaWMnIGlzbid0IHNldCAoV2ViYikuCjcgICBXaGVuIGZvcm1hdHRpbmcgdGV4dCwgYWxsb3cgdG8gYnJlYWsgdGhlIGxpbmUgYXQgYSBudW1iZXIgb2YgY2hhcmFjdGVycy4KICAgIFVzZSBhbiBvcHRpb24gZm9yIHRoaXM6ICdicmVha2NoYXJzJz8gIFVzZWZ1bCBmb3IgZm9ybWF0dGluZyBGb3J0cmFuIGNvZGUuCi0gICBBZGQgZmxhZyB0byAnZm9ybWF0b3B0aW9ucycgdG8gYmUgYWJsZSB0byBmb3JtYXQgYm9vay1zdHlsZSBwYXJhZ3JhcGhzCiAgICAoZmlyc3QgbGluZSBvZiBwYXJhZ3JhcGggaGFzIGxhcmdlciBpbmRlbnQsIG5vIGVtcHR5IGxpbmVzIGJldHdlZW4KICAgIHBhcmFncmFwaHMpLiAgQ29tcGxlbWVudHMgdGhlICcyJyBmbGFnLiAgVXNlICc+JyBmbGFnIHdoZW4gbGFyZ2VyIGluZGVudAogICAgc3RhcnRzIGEgbmV3IHBhcmFncmFwaCwgdXNlICc8JyBmbGFnIHdoZW4gc21hbGxlciBpbmRlbnQgc3RhcnRzIGEgbmV3CiAgICBwYXJhZ3JhcGguCUJvdGggc3RhcnQgYSBuZXcgcGFyYWdyYXBoIG9uIGFueSBpbmRlbnQgY2hhbmdlLgo3ICAgQWRkIGEgd2F5IHRvIGRlZmluZSBhbiBpdGVtIGxpc3Qgd2l0aCBhIHBhdHRlcm4gaW4gJ2Zvcm1hdG9wdGlvbnMnLiAgVGhlCiAgICAnbicgZmxhZyBkb2Vzbid0IHdvcmsgZm9yICI2LjMiIG9yICI2YS4iLgo4ICAgQWxsb3cgdXNpbmcgYSB0cmFpbGluZyBzcGFjZSB0byBzaWduYWwgYSBwYXJhZ3JhcGggdGhhdCBjb250aW51ZXMgb24gdGhlCiAgICBuZXh0IGxpbmUgKE1JTUUgdGV4dC9wbGFpbjsgZm9ybWF0PWZsb3dlZCwgUkZDIDI2NDYpLiAgQ2FuIGJlIHVzZWQgZm9yCiAgICBjb250aW51b3VzIGZvcm1hdHRpbmcuICBDb3VsZCB1c2UgJ2F1dG9mb3JtYXQnIG9wdGlvbiwgd2hpY2ggc3BlY2lmaWVzIGEKICAgIHJlZ2V4cCB3aGljaCB0cmlnZ2VycyBhdXRvLWZvcm1hdHRpbmcgKGZvciBvbmUgbGluZSkuCiAgICAiOnNldCBhdXRvZm9ybWF0PVxccyQiLgotICAgQmUgYWJsZSB0byByZWRlZmluZSB3aGVyZSBhIHNlbnRlbmNlIHN0b3BzLiAgVXNlIGEgcmVnZXhwIHBhdHRlcm4/Ci0gICBTdXBwb3J0IG11bHRpLWJ5dGUgY2hhcmFjdGVycyBmb3Igc2VudGVuY2VzLiAgRXhhbXBsZSBmcm9tIEJlbiBQZXRlcnNvbi4KNyAgIEFkZCBjb21tYW5kICJnKSIgdG8gZ28gdG8gdGhlIGVuZCBvZiBhIHNlbnRlbmNlLCAiZygiIHRvIGdvIGJhY2sgdG8gdGhlCiAgICBlbmQgb2YgYSBzZW50ZW5jZS4gKFNlcnZhdGl1cyBCcmFuZHQpCi0gICBCZSBhYmxlIHRvIHJlZGVmaW5lIHdoZXJlIGEgcGFyYWdyYXBoIHN0YXJ0cy4gIEZvciAiW1siIHdoZXJlIHRoZSAneycgaXMKICAgIG5vdCBpbiBjb2x1bW4gMS4KNiAgIEFkZCAiOmNkcHJldiI6IGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIGRpcmVjdG9yeS4gIE5lZWQgdG8gcmVtZW1iZXIgYQogICAgc3RhY2sgb2YgcHJldmlvdXMgZGlyZWN0b3JpZXMuICBXZSBhbHNvIG5lZWQgIjpjZG5leHQiLgo3ICAgU2hvdWxkICI6Y2QiIGZvciBNUy1ET1MgZ28gdG8gJEhPTUUsIHdoZW4gaXQncyBkZWZpbmVkPwotICAgTWFrZSAiZ3E8Q1I+IiB3b3JrIG9uIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUuICBNYXliZSBmb3IgZXZlcnkgb3BlcmF0b3I/CjggICBmaW5kbWF0Y2hsaW1pdCgpIHNob3VsZCBiZSBhYmxlIHRvIHNraXAgY29tbWVudHMuICBTb2x2ZXMgcHJvYmxlbSBvZgogICAgbWF0Y2hpbmcgdGhlICd7JyBpbiAvKiBpZiAoZm9vKSB7ICovIChGaXZlYXNoKQotICAgQWRkIG1vcmUgcmVkaXJlY3Rpbmcgb2YgRXggY29tbWFuZHM6Cgk6cmVkaXIgIz4gIGJ1Zm5hbWUKCTpyZWRpciAjPj4gYnVmbmFtZSAgIChhcHBlbmQpCi0gICBHaXZlIGVycm9yIG1lc3NhZ2Ugd2hlbiBzdGFydGluZyA6cmVkaXI6IHR3aWNlIG9yIHVzaW5nIEVORCB3aGVuIG5vCiAgICByZWRpcmVjdGlvbiB3YXMgYWN0aXZlLgotICAgU2V0dGluZyBvZiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgZm9yIGEgYnVmZmVyIG9yIHdpbmRvdywgd2l0aAogICAgIjpzZXQgd2luZG93Lm9wdGlvbiIgb3IgIjpzZXQgYnVmZmVyLm9wdGlvbj12YWwiLiAgT3IgdXNlICI6YnVmZmVyLnNldCIuCiAgICBBbHNvOiAiYnVmZmVyLm1hcCA8RjE+IHF1aXQiLgo2ICAgV291bGQgaXQgYmUgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBjb2xvciBvZiB0aGUgY3Vyc29yIGluIHRoZSBXaW4zMgogICAgY29uc29sZT8gIChLbGF1cyBIYXN0KQotICAgQWRkIDpkZWxjciBjb21tYW5kOgoJCQkgICAgKjpkZWxjcioKICAgICA6W3JhbmdlXWRlbGNyWyFdCUNoZWNrIFtyYW5nZV0gbGluZXMgKGRlZmF1bHQ6IHdob2xlIGJ1ZmZlcikgZm9yIGxpbmVzCgkJCWVuZGluZyBpbiA8Q1I+LiAgSWYgYWxsIGxpbmVzIGVuZCBpbiA8Q1I+LCBvciBbIV0gaXMKCQkJdXNlZCwgcmVtb3ZlIHRoZSA8Q1I+IGF0IHRoZSBlbmQgb2YgbGluZXMgaW4gW3JhbmdlXS4KCQkJQSBDVFJMLVogYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZW1vdmVkLiAgSWYKCQkJW3JhbmdlXSBpcyBvbWl0dGVkLCBvciBpdCBpcyB0aGUgd2hvbGUgZmlsZSwgYW5kIGFsbAoJCQlsaW5lcyBlbmQgaW4gPENSPiAndGV4dG1vZGUnIGlzIHNldC4gIHtub3QgaW4gVml9Ci0gICBTaG91bGQgaW50ZWdyYXRlIGFkZHN0YXIoKSBhbmQgZmlsZV9wYXRfdG9fcmVnX3BhdCgpLgotICAgV2hlbiB3b3JraW5nIG92ZXIgYSBzZXJpYWwgbGluZSB3aXRoIDcgYml0IGNoYXJhY3RlcnMsIHJlbW92ZSBtZXRhCiAgICBjaGFyYWN0ZXJzIGZyb20gJ2lzcHJpbnQnLgotICAgVXNlIGZjaGRpcigpIGluIGluaXRfaG9tZWRpcigpLCBsaWtlIGluIEZ1bGxOYW1lKCkuCi0gICBJbiB3aW5fdXBkYXRlKCksIHdoZW4gdGhlIEdVSSBpcyBhY3RpdmUsIGFsd2F5cyB1c2UgdGhlIHNjcm9sbGluZyBhcmVhLgogICAgQXZvaWQgdGhhdCB0aGUgbGFzdCBzdGF0dXMgbGluZSBpcyBkZWxldGVkIGFuZCBuZWVkcyB0byBiZSByZWRyYXduLgotICAgVGhhdCAiY1R4IiBmYWlscyB3aGVuIHRoZSBjdXJzb3IgaXMganVzdCBhZnRlciAneCcgaXMgVmkgY29tcGF0aWJsZSwgYnV0CiAgICBtYXkgbm90IGJlIHdoYXQgeW91IGV4cGVjdC4gIEFkZCBhIGZsYWcgaW4gJ2Nwb3B0aW9ucycgZm9yIHRoaXM/ICBNb3JlCiAgICBnZW5lcmFsOiBBZGQgYW4gb3B0aW9uIHRvIGFsbG93ICJjIiB0byB3b3JrIHdpdGggYSBudWxsIG1vdGlvbi4KLSAgIEdpdmUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGJ5IHVzaW5nIGVycm5vIChzdHJlcnJvcigpKS4KLSAgIEdpdmUgIlVzYWdlOiIgZXJyb3IgbWVzc2FnZSB3aGVuIGNvbW1hbmQgdXNlZCB3aXRoIHdyb25nIGFyZ3VtZW50cyAobGlrZQogICAgTnZpKS4KLSAgIE1ha2UgJ3Jlc3RvcmVzY3JlZW4nIG9wdGlvbiBhbHNvIHdvcmsgZm9yIHh0ZXJtIChhbmQgb3RoZXJzKSwgcmVwbGFjZXMgdGhlCiAgICBTQVZFX1hURVJNX1NDUkVFTiBkZWZpbmUuCjcgICBTdXBwb3J0IGZvciAiOndpbnBvcyIgSW4geHRlcm06IHJlcG9ydCB0aGUgY3VycmVudCB3aW5kb3cgcG9zaXRpb24uCi0gICBHaXZlIHdhcm5pbmcgbWVzc2FnZSB3aGVuIHVzaW5nICI6c2V0IHRfeHg9YXNkZiIgZm9yIGEgdGVybWNhcCBjb2RlIHRoYXQKICAgIFZpbSBkb2Vzbid0IGtub3cgYWJvdXQuICBBZGQgZmxhZyBpbiAnc2hvcnRtZXNzJz8KNiAgIEFkZCAiOmNoZSA8ZmlsZT4iLCBsaXN0IGFsbCB0aGUgaW5jbHVkZSBwYXRocyB3aGljaCBsZWFkIHRvIHRoaXMgZmlsZS4KLSAgIEZvciBhIGNvbW1hbmRsaW5lIHRoYXQgaGFzIHNldmVyYWwgY29tbWFuZHMgKDpzLCA6ZCwgZXRjLikgc3VtbWFyaXplIHRoZQogICAgY2hhbmdlcyBhbGwgdG9nZXRoZXIgaW5zdGVhZCBvZiBmb3IgZWFjaCBjb21tYW5kIChlLmcuIGZvciB0aGUgcm90MTMKICAgIG1hY3JvKS4KLSAgIEFkZCBjb21tYW5kIGxpa2UgIltJIiB0aGF0IGFsc28gc2hvd3MgdGhlIHRyZWUgb2YgaW5jbHVkZWQgZmlsZXMuCi0gICAiOnNldCBzbV5MIiByZXN1bHRzIGluICI6c2V0IHMiLCBiZWNhdXNlIHNob3J0IG5hbWVzIG9mIG9wdGlvbnMgYXJlIGFsc28KICAgIGV4cGFuZGVkLiAgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM/Ci0gICBBZGQgIjpAISIgY29tbWFuZCwgdG8gIjpAIiBsaWtlIHdoYXQgIjpzb3VyY2UhIiBpcyB0byAiOnNvdXJjZSIuCjggICBBZGQgIjpAOiEiOiByZXBlYXQgbGFzdCBjb21tYW5kIHdpdGggZm9yY2VpdCBzZXQuCi0gICBTaG91bGQgYmUgcG9zc2libGUgdG8gd3JpdGUgdG8gYSBkZXZpY2UsIGUuZy4gIjp3ISAvZGV2L251bGwiLgotICAgQWRkICd0X25vcm1hbCc6IFVzZWQgd2hlbmV2ZXIgdF9tZSwgdF9zZSwgdF91ZSBvciB0X1pyIGlzIGVtcHR5LgotICAgIjpjYWIgbWFwIHRlc3QgXlZ8IGplIiwgIjpjdW5hYiBtYXAiIGRvZXNuJ3Qgd29yay4JVGhpcyBpcyB2aSBjb21wYXRpYmxlIQotICAgQ1RSTC1XIENUUkwtRSBhbmQgQ1RSTC1XIENUUkwtWSBzaG91bGQgbW92ZSB0aGUgY3VycmVudCB3aW5kb3cgdXAgb3IgZG93bgogICAgaWYgaXQgaXMgbm90IHRoZSBmaXJzdCBvciBsYXN0IHdpbmRvdy4KLSAgIEluY2x1ZGUtZmlsZS1zZWFyY2ggY29tbWFuZHMgc2hvdWxkIGxvb2sgaW4gdGhlIGxvYWRlZCBidWZmZXIgb2YgYSBmaWxlIChpZgogICAgdGhlcmUgaXMgb25lKSBpbnN0ZWFkIG9mIHRoZSBmaWxlIGl0c2VsZi4KNyAgIENoYW5nZSAnbnJmb3JtYXRzJyB0byBpbmNsdWRlIHRoZSBsZWFkZXIgZm9yIGVhY2ggZm9ybWF0LiAgRXhhbXBsZToKCW5yZm9ybWF0cz1oZXg6JCxiaW5hcnk6YixvY3RhbDowCiAgICBBZGQgc2V0dGluZyBvZiAnbnJmb3JtYXRzJyB0byBzeW50YXggZmlsZXMuCi0gICAncGF0aCcgY2FuIGJlY29tZSB2ZXJ5IGxvbmcsIGRvbid0IHVzZSBOYW1lQnVmZiBmb3IgZXhwYW5zaW9uLgotICAgV2hlbiB1bmhpZGluZyBhIGhpZGRlbiBidWZmZXIsIHB1dCB0aGUgc2FtZSBsaW5lIGF0IHRvcCBvZiB0aGUgd2luZG93IGFzCiAgICB0aGUgb25lIGJlZm9yZSBoaWRpbmcgaXQuICBPcjoga2VlcCB0aGUgc2FtZSByZWxhdGl2ZSBjdXJzb3IgcG9zaXRpb24gKHNvCiAgICBtYW55IHBlcmNlbnQgZG93biB0aGUgd2luZG93cykuCi0gICBNYWtlIGl0IHBvc3NpYmxlIGZvciB0aGUgJ3Nob3dicmVhaycgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSBlbmQgb2YgdGhlCiAgICBsaW5lLiAgVXNlIGEgY29tbWEgdG8gc2VwYXJhdGUgdGhlIHBhcnQgYXQgdGhlIGVuZCBhbmQgdGhlIHN0YXJ0IG9mIHRoZQogICAgbGluZT8gIEhpZ2hsaWdodCB0aGUgbGluZWJyZWFrIGNoYXJhY3RlcnMsIGFkZCBmbGFnIGluICdoaWdobGlnaHQnLgotICAgU29tZSBzdHJpbmcgb3B0aW9ucyBzaG91bGQgYmUgZXhwYW5kZWQgaWYgdGhleSBoYXZlIHdpbGRjYXJkcywgZS5nLgogICAgJ2RpY3Rpb25hcnknIHdoZW4gaXQgaXMgIiouaCIuCi0gICBVc2UgYSBzcGVjaWZpYyB0eXBlIGZvciBudW1iZXIgYW5kIGJvb2xlYW4gb3B0aW9ucywgbWFraW5nIGl0IHBvc3NpYmxlIHRvCiAgICBjaGFuZ2UgaXQgZm9yIHNwZWNpZmljIG1hY2hpbmVzIChlLmcuIHdoZW4gYSBsb25nIGlzIDY0IGJpdCkuCi0gICBBZGQgb3B0aW9uIGZvciA8SW5zZXJ0PiBpbiByZXBsYWNlIG1vZGUgZ29pbmcgdG8gbm9ybWFsIG1vZGUuIChOdWdlbnQpCi0gICBBZGQgYSBuZXh0L3ByZXZpb3VzIHBvc3NpYmlsaXR5IHRvICJbXkkiIGFuZCBmcmllbmRzLgotICAgQWRkIHBvc3NpYmlsaXR5IHRvIGNoYW5nZSB0aGUgSE9NRSBkaXJlY3RvcnkuICBVc2UgdGhlIGRpcmVjdG9yeSBmcm9tIHRoZQogICAgcGFzc3dkIGZpbGU/IChBbnR3ZXJwZW4pCjggICBBZGQgY29tbWFuZHMgdG8gcHVzaCBhbmQgcG9wIGFsbCBvciBpbmRpdmlkdWFsIG9wdGlvbnMuICI6c2V0cHVzaCB0dyIsCiAgICAiOnNldHBvcCB0dyIsICI6c2V0cHVzaCBhbGwiLiAgTWF5YmUgcHVzaGluZy9wb3BwaW5nIGFsbCBvcHRpb25zIGlzCiAgICBzdWZmaWNpZW50LiAgIjpzZXRmbHVzaCIgcmVzZXRzIHRoZSBvcHRpb24gc3RhY2s/CiAgICBIb3cgdG8gaGFuZGxlIGFuIGFib3J0ZWQgbWFwcGluZz8gIFJlbWVtYmVyIHBvc2l0aW9uIGluIHRhZyBzdGFjayB3aGVuCiAgICBtYXBwaW5nIHN0YXJ0cywgcmVzdG9yZSBpdCB3aGVuIGFuIGVycm9yIGFib3J0cyB0aGUgbWFwcGluZz8KLSAgIENoYW5nZSAiOmZpeGRlbCIgaW50byBvcHRpb24gJ2ZpeGRlbCcsIHRfZGVsIHdpbGwgYmUgYWRqdXN0ZWQgZWFjaCB0aW1lCiAgICB0X2JzIGlzIHNldD8gKFdlYmIpCi0gICAiZ2MiOiBnb3RvIGNoYXJhY3RlciwgbW92ZSBhYnNvbHV0ZSBjaGFyYWN0ZXIgcG9zaXRpb25zIGZvcndhcmQsIGFsc28KICAgIGNvdW50aW5nIG5ld2xpbmVzLiAgImdDIiBnb2VzIGJhY2t3YXJkcyAoV2VpZ2VydCkuCi0gICBXaGVuIGRvaW5nIENUUkwtXiwgcmVkcmF3IGJ1ZmZlciB3aXRoIHRoZSBzYW1lIHRvcGxpbmUuIChEZW1pcmVsKSAgU3RvcmUKICAgIGN1cnNvciByb3cgYW5kIHdpbmRvdyBoZWlnaHQgdG8gcmVkcmF3IGN1cnNvciBhdCBzYW1lIHBlcmNlbnRhZ2Ugb2Ygd2luZG93CiAgICAoV2ViYikuCi0gICBCZXNpZGVzIHJlbWVtYmVyaW5nIHRoZSBsYXN0IHVzZWQgbGluZSBudW1iZXIgb2YgYSBmaWxlLCBhbHNvIHJlbWVtYmVyIHRoZQogICAgY29sdW1uLiAgVXNlIGl0IHdpdGggQ1RSTC1eIGV0LiBhbC4KLSAgIENoZWNrIGZvciBub24tZGlnaXRzIHdoZW4gc2V0dGluZyBhIG51bWJlciBvcHRpb24gKGNhcmVmdWwgd2hlbiBlbnRlcmluZwogICAgaGV4IGNvZGVzIGxpa2UgMHhmZikuCi0gICBBZGQgb3B0aW9uIHRvIG1ha2UgIi4iIHJlZG8gdGhlICJAciIgY29tbWFuZCwgaW5zdGVhZCBvZiB0aGUgbGFzdCBjb21tYW5kCiAgICBleGVjdXRlZCBieSBpdC4gIEFsc28gdG8gbWFrZSAiLiIgcmVkbyB0aGUgd2hvbGUgbWFwcGluZy4gIEJhc2ljYWxseTogcmVkbwogICAgdGhlIGxhc3QgVFlQRUQgY29tbWFuZC4KLSAgIFN1cHBvcnQgVVJMIGxpbmtzIGZvciBeWF5GIGluIEluc2VydCBtb2RlLCBsaWtlIGZvciAiZ2YiLgotICAgU3VwcG9ydCAlbmFtZSUgZXhwYW5zaW9uIGZvciAiZ2YiIG9uIFdpbmRvd3MuCi0gICBNYWtlICJnZiIgd29yayBvbiAiZmlsZTovL2M6L3BhdGgvbmFtZSIuICAiZmlsZTovYzovIiBhbmQgImZpbGU6Ly8vYzovIgogICAgc2hvdWxkIGFsc28gd29yaz8KLSAgIEFkZCAndXJscGF0aCcsIHVzZWQgbGlrZSAncGF0aCcgZm9yIHdoZW4gImdmIiB1c2VkIG9uIGFuIFVSTD8KOCAgIFdoZW4gdXNpbmcgImdmIiBvbiBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUsIHdoaWxlIGVkaXRpbmcgYSByZW1vdGUgZmlsZQogICAgKHN0YXJ0cyB3aXRoIHNjcDovLyBvciBodHRwOi8vKSBzaG91bGQgcHJlcGVuZCB0aGUgbWV0aG9kIGFuZCBtYWNoaW5lCiAgICBuYW1lLgotICAgV2hlbiBmaW5kaW5nIGFuIFVSTCBvciBmaWxlIG5hbWUsIGFuZCBpdCBkb2Vzbid0IGV4aXN0LCB0cnkgcmVtb3ZpbmcgYQogICAgdHJhaWxpbmcgJy4nLgotICAgQWRkICI6cGF0aCIgY29tbWFuZCBtb2RpZmllci4gIFNob3VsZCB3b3JrIGZvciBldmVyeSBjb21tYW5kIHRoYXQgdGFrZXMgYQogICAgZmlsZSBuYW1lIGFyZ3VtZW50LCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIG5hbWUgaW4gJ3BhdGgnLglVc2UKICAgIGZpbmRfZmlsZV9pbl9wYXRoKCkuCi0gICBIaWdobGlnaHQgY29udHJvbCBjaGFyYWN0ZXJzIG9uIHRoZSBzY3JlZW46IFNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KICAgIENUUkwtWCBhbmQgIl4iIGZvbGxvd2VkIGJ5ICJYIiAoQ29sb24pLgotICAgSW50ZWdyYXRlIHBhcnNpbmcgb2YgY21kbGluZSBjb21tYW5kIGFuZCBwYXJzaW5nIGZvciBleHBhbnNpb24uCi0gICBDcmVhdGUgYSBwcm9ncmFtIHRoYXQgY2FuIHRyYW5zbGF0ZSBhIC5zd3AgZmlsZSBmcm9tIGFueSBtYWNoaW5lIGludG8gYQogICAgZm9ybSB1c2FibGUgYnkgVmltIG9uIHRoZSBjdXJyZW50IG1hY2hpbmUuCi0gICBBZGQgIjpub3JvIiBjb21tYW5kOiBSZXNldCAncm8nIGZsYWcgZm9yIGFsbCBidWZmZXJzLCBleGNlcHQgb25lcyB0aGF0IGhhdmUKICAgIGEgcmVhZG9ubHkgZmlsZS4gICI6bm9ybyEiIHdpbGwgcmVzZXQgYWxsICdybycgZmxhZ3MuCi0gICBBZGQgYSB2YXJpYW50IG9mIENUUkwtViB0aGF0IHN0b3BzIGludGVycHJldGF0aW9uIG9mIG1vcmUgdGhhbiBvbmUKICAgIGNoYXJhY3Rlci4JRm9yIGVudGVyaW5nIG1hcHBpbmdzIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlcmUgYSBrZXkgY29udGFpbnMKICAgIHNldmVyYWwgc3BlY2lhbCBjaGFyYWN0ZXJzLCBlLmcuIGEgdHJhaWxpbmcgbmV3bGluZS4KLSAgIEFkZCByZWdleCBmb3IgJ3BhcmFncmFwaHMnIGFuZCAnc2VjdGlvbnMnOiAncGFyYXJlJyBhbmQgJ3NlY3RyZScuICBDb21iaW5lCiAgICB0aGUgdHdvIGludG8gYSByZWdleCBmb3Igc2VhcmNoaW5nLiAoTmVkIEtvbnopCi0gICBNYWtlICcyJyBvcHRpb24gaW4gJ2Zvcm1hdG9wdGlvbnMnIGFsc28gd29yayBpbnNpZGUgY29tbWVudHMuCi0gICBBZGQgJ3MnIGZsYWcgdG8gJ2Zvcm1hdG9wdGlvbnMnOiBEbyBub3QgYnJlYWsgd2hlbiBpbnNpZGUgYSBzdHJpbmcuIChEb2R0KQotICAgV2hlbiB3aW5kb3cgc2l6ZSBjaGFuZ2VkICh3aXRoIHRoZSBtb3VzZSkgYW5kIG1hZGUgdG9vIHNtYWxsLCBzZXQgaXQgYmFjawogICAgdG8gdGhlIG1pbmltYWwgc2l6ZS4KLSAgIEFkZCAiXT4iIGFuZCAiWzwiLCBzaGlmdCBjb21tZW50IGF0IGVuZCBvZiBsaW5lIChjb21tYW5kOyAgLyogY29tbWVudCAqLykuCi0gICBTaG91bGQgbm90IGNhbGwgY3Vyc29yY21kKCkgZm9yIGVhY2ggdmdldGMoKSBpbiBnZXRjbWRsaW5lKCkuCi0gICAiOnNwbGl0IGZpbGUxIGZpbGUyIiBhZGRzIHR3byBtb3JlIHdpbmRvd3MgKFdlYmIpLgotICAgRG9uJ3QgZ2l2ZSBtZXNzYWdlICJJbmNvbXBsZXRlIGxhc3QgbGluZSIgd2hlbiBlZGl0aW5nIGJpbmFyeSBmaWxlLgotICAgQWRkICI6YSIsICI6aSIgZm9yIHByZWxvYWRpbmcgb2YgbmFtZWQgYnVmZmVycy4KLSAgIEFsbG93IGF1dG93cml0ZSB3aGVuIGRvaW5nICI6ZSBmaWxlIiAod2l0aCBhbiBvcHRpb24gJ2VhdycpLgotICAgQWxsb3cgYSAiK2NvbW1hbmQiIGFyZ3VtZW50IGJlZm9yZSBlYWNoIGZpbGUgbmFtZSBpbiB0aGUgVmltIGNvbW1hbmQgbGluZToKICAgICJ2aW0gKzEyMyBmaWxlMSArMjM0IGZpbGUyICszNDUgZmlsZTMiLiA/Pz8KLSAgIFdoZW4gZW50ZXJpbmcgdGV4dCwga2VlcCBvdGhlciB3aW5kb3dzIG9uIHNhbWUgYnVmZmVyIHVwZGF0ZWQgKHdoZW4gYSBsaW5lCiAgICBlbnRlcmVkKT8KLSAgIENoZWNrIG91dCBob3cgc2NyZWVuIGRvZXMgb3V0cHV0IG9wdGltaXppbmcuICBBcHBhcmVudGx5IHRoaXMgaXMgcG9zc2libGUKICAgIGFzIGFuIG91dHB1dCBmaWx0ZXIuCi0gICBJbiBkb3N1YigpIHJlZ2V4ZWMgaXMgY2FsbGVkIHR3aWNlIGZvciB0aGUgc2FtZSBsaW5lLiAgVHJ5IHRvIGF2b2lkIHRoaXMuCi0gICBXaW5kb3cgdXBkYXRpbmcgZnJvbSBtZW1saW5lLmM6IGluc2VydC9kZWxldGUvcmVwbGFjZSBsaW5lLgotICAgT3B0aW1pemUgbWxfYXBwZW5kKCkgZm9yIHNwZWVkLCBlc3AuIGZvciByZWFkaW5nIGEgZmlsZS4KLSAgIFYuLmMgc2hvdWxkIGtlZXAgaW5kZW50IHdoZW4gJ2FpJyBpcyBzZXQsIGp1c3QgbGlrZSBbY291bnRdY2MuCi0gICBVcGRhdGVzY3JpcHQoKSBjYW4gYmUgZG9uZSBmYXN0ZXIgd2l0aCBhIHN0cmluZyBpbnN0ZWFkIG9mIGEgY2hhci4KLSAgIFNjcmVlbiB1cGRhdGluZyBpcyBpbmVmZmljaWVudCB3aXRoIENUUkwtRiBhbmQgQ1RSTC1CIHdoZW4gdGhlcmUgYXJlIGxvbmcKICAgIGxpbmVzLgotICAgVXBwZXJjYXNlIGNoYXJhY3RlcnMgaW4gZXggY29tbWFuZHMgY2FuIGJlIG1hZGUgbG93ZXJjYXNlPwo4ICAgQWRkIG9wdGlvbiB0byBzaG93IGNoYXJhY3RlcnMgaW4gdGV4dCBub3QgYXMgInxBIiBidXQgYXMgZGVjaW1hbCAoIl4xMjkiKSwKICAgIGhleCAoIlx4ODEiKSBvciBvY3RhbCAoIlwyMDEiKSBvciBtZXRhIChNLXgpLiAgTnZpIGhhcyB0aGUgJ29jdGFsJyBvcHRpb24KICAgIHRvIHN3aXRjaCBmcm9tIGhleCB0byBvY3RhbC4gIFZpbGUgY2FuIHNob3cgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBoZXgKICAgIG9yIGluIG9jdGFsLgo3ICAgVGlnaHRlciBpbnRlZ3JhdGlvbiB3aXRoIHh4ZCB0byBlZGl0IGJpbmFyeSBmaWxlcy4gIE1ha2UgaXQgbW9yZQogICAgZWFzeS9vYnZpb3VzIHRvIHVzZS4gIENvbW1hbmQgbGluZSBhcmd1bWVudD8KLSAgIEhvdyBkb2VzIHZpIGRldGVjdCB3aGV0aGVyIGEgZmlsdGVyIGhhcyBtZXNzZWQgdXAgdGhlIHNjcmVlbj8gIENoZWNrIHNvdXJjZS4KICAgIEFmdGVyICI6dyAhY29tbWFuZCIgYSB3YWl0X3JldHVybj8KLSAgIEltcHJvdmUgc2NyZWVuIHVwZGF0aW5nIGNvZGUgZm9yIGRvcHV0KCkgKHVzZSBzX2lucygpKS4KLSAgIFdpdGggJ3AnIGNvbW1hbmQgb24gbGFzdCBsaW5lOiBzY3JvbGwgc2NyZWVuIHVwIChhbHNvIGZvciB0ZXJtaW5hbHMgd2l0aG91dAogICAgaW5zZXJ0IGxpbmUgY29tbWFuZCkuCi0gICBVc2UgaW5zZXJ0L2RlbGV0ZSBjaGFyIHdoZW4gdGVybWluYWwgc3VwcG9ydHMgaXQuCi0gICBPcHRpbWl6ZSBzY3JlZW4gcmVkcmF3IGZvciBzbG93IHRlcm1pbmFscy4KLSAgIE9wdGltaXplICJkdyIgZm9yIGxvbmcgcm93IG9mIHNwYWNlcyAoc2F5LCAzMDAwMCkuCi0gICBBZGQgIi1kIG51bGwiIGZvciBlZGl0aW5nIGZyb20gYSBzY3JpcHQgZmlsZSB3aXRob3V0IGRpc3BsYXlpbmcuCi0gICBJbiBJbnNlcnQgbW9kZTogUmVtZW1iZXIgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIHJlbW92ZWQgd2l0aCBiYWNrc3BhY2UKICAgIGFuZCByZS1pbnNlcnQgdGhlbSBvbmUgYXQgYSB0aW1lIHdpdGggPGtleTE+LCBhbGwgdG9nZXRoZXIgd2l0aCA8a2V5Mj4uCi0gICBBbWlnYTogQWRkIHBvc3NpYmlsaXR5IHRvIHNldCBhIGtleW1hcC4gIFRoZSBjb2RlIGluIGFtaWdhLmMgZG9lcyBub3Qgd29yawogICAgeWV0LgotICAgSW1wbGVtZW50ICdyZWRyYXcnIG9wdGlvbi4KLSAgIEFkZCBzcGVjaWFsIGNvZGUgdG8gJ3NlY3Rpb25zJyBvcHRpb24gdG8gZGVmaW5lIHNvbWV0aGluZyBlbHNlIGJ1dCAneycgb3IKICAgICd9JyBhcyB0aGUgc3RhcnQgb2YgYSBzZWN0aW9uIChlLmcuIG9uZSBzaGlmdHdpZHRoIHRvIHRoZSByaWdodCkuCjcgICBBbGxvdyB1c2luZyBWaW0gaW4gYSBwaXBlOiAibHMgfCB2aW0gLXUgeHh4LnZpbSAtIHwgeXl5Ii4gIE9ubHkgbmVlZHMKICAgIGltcGxlbWVudGluZyAiOnciIHRvIHN0ZG91dCBpbiB0aGUgYnVmZmVyIHRoYXQgd2FzIHJlYWQgZnJvbSBzdGRpbi4KICAgIFBlcmhhcHMgd3JpdGluZyB0byBzdGRvdXQgd2lsbCB3b3JrLCBzaW5jZSBzdGRlcnIgaXMgdXNlZCBmb3IgdGhlIHRlcm1pbmFsCiAgICBJL08uCjggICBBbGxvdyBvcGVuaW5nIGFuIHVubmFtZWQgYnVmZmVyIHdpdGggIjplICFjbWQiIGFuZCAiOnNwICFjbWQiLiAgVmlsZSBjYW4KICAgIGRvIGl0LgotICAgQWRkIGNvbW1hbmRzIGxpa2UgXV0gYW5kIFtbIHRoYXQgZG8gbm90IGluY2x1ZGUgdGhlIGxpbmUganVtcGVkIHRvLgotICAgV2hlbiA6dW5hYiB3aXRob3V0IG1hdGNoaW5nICJmcm9tIiBwYXJ0IGFuZCBzZXZlcmFsIG1hdGNoaW5nICJ0byIgcGFydHMsCiAgICBkZWxldGUgdGhlIGVudHJ5IHRoYXQgd2FzIHVzZWQgbGFzdCwgaW5zdGVhZCBvZiB0aGUgZmlyc3QgaW4gdGhlIGxpc3QuCi0gICBBZGQgdGV4dCBqdXN0aWZpY2F0aW9uIG9wdGlvbi4KLSAgIFNldCBib29sZWFuIG9wdGlvbnMgb24vb2ZmIHdpdGggIjpzZXQgcGFzdGU9b2ZmIiwgIjpzZXQgcGFzdGU9b24iLgotICAgQWZ0ZXIgImludiJpbmcgYW4gb3B0aW9uIHNob3cgdGhlIHZhbHVlOiAiOnNldCBpbnZwYXN0ZSIgZ2l2ZXMgInBhc3RlIGlzCiAgICBvZmYiLgotICAgQ2hlY2sgaGFuZGxpbmcgb2YgQ1RSTC1WIGFuZCAnXCcgZm9yICI6IiBjb21tYW5kcyB0aGF0IGRvIG5vdCBoYXZlIFRSTEJBUi4KLSAgIFdoZW4gYSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQgYnV0IGRvZXMgZXhpc3QsIGdpdmUgZXJyb3IgbWVzc2FnZS4KLSAgIEFtaWdhOiBXaGVuICdyJyBwcm90ZWN0aW9uIGJpdCBpcyBub3Qgc2V0LCBmaWxlIGNhbiBzdGlsbCBiZSBvcGVuZWQgYnV0CiAgICBnaXZlcyByZWFkIGVycm9ycy4gIENoZWNrIHByb3RlY3Rpb24gYmVmb3JlIG9wZW5pbmcuCi0gICBXaGVuIHdyaXRpbmcgY2hlY2sgZm9yIGZpbGUgZXhpc3RzIGJ1dCBubyBwZXJtaXNzaW9uLCAiUGVybWlzc2lvbiBkZW5pZWQiLgotICAgSWYgZmlsZSBkb2VzIG5vdCBleGlzdHMsIGNoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMuCi0gICBNU0RPUzogYWx0aG91Z2ggdF9jdiBhbmQgdF9jaSBhcmUgbm90IHNldCwgZG8gaW52ZXJ0IGNoYXIgdW5kZXIgY3Vyc29yLgotICAgU2V0dGluZ3MgZWRpdCBtb2RlOiBtYWtlIGZpbGUgd2l0aCAiOnNldCBvcHQ9eHgiLCBlZGl0IGl0LCBwYXJzZSBpdCBhcyBleAogICAgY29tbWFuZHMuCi0gICAiOnNldCAtdyBhbGwiOiBsaXN0IG9uZSBvcHRpb24gcGVyIGxpbmUuCi0gICBBbWlnYTogdGVzdCBmb3IgJ3cnIGZsYWcgd2hlbiByZWFkaW5nIGEgZmlsZS4KLSAgIDp0YWJsZSBjb21tYW5kIChXZWJiKQotICAgQWRkIG5ldyBvcGVyYXRvcjogY2xlYXIsIG1ha2UgYXJlYSB3aGl0ZSAocmVwbGFjZSB3aXRoIHNwYWNlcyk6ICJnICIuCi0gICBNYWtlIGl0IHBvc3NpYmxlIGZvciBhIHVzZXIgdG8gZGVmaW5lIGEgbmV3IG9wZXJhdG9yLiAgSW1wbGVtZW50YXRpb24gd2l0aAogICAgaW50ZXJuYWwgc2NyaXB0aW5nIGxhbmd1YWdlIG9yIFBlcmw/Ci0gICBBZGQgY29tbWFuZCB0byAiOnJlYWQiIGEgZmlsZSBhdCBhIGNlcnRhaW4gY29sdW1uIChibG9ja3dpc2UgcmVhZD8pLgotICAgQWRkIHNvcnQgb2YgcmVwbGFjZSBtb2RlIHdoZXJlIGNhc2UgaXMgdGFrZW4gZnJvbSB0aGUgb2xkIHRleHQgKEdvbGRmYXJiKS4KLSAgIEFsbG93IG11bHRpcGxlIGFyZ3VtZW50cyBmb3IgIjpyZWFkIiwgcmVhZCBhbGwgdGhlIGZpbGVzLgotICAgU3VwcG9ydCBmb3IgdGFicyBpbiBzcGVjaWZpYyBjb2x1bW5zOiAiOnNldCB0YWJjb2w9OCwyMCwzNCw1NiIgKERlbWlyZWwpLgotICAgQWRkICdzZWFyY2hkaXInIG9wdGlvbjogRGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBmaWxlIG5hbWUgYmVpbmcgZWRpdGVkCiAgICAoRGVtaXJlbCkuCi0gICBNb2RpZmllciBmb3IgdGhlIHB1dCBjb21tYW5kOiBDaGFuZ2UgdG8gbGluZXdpc2UsIGNoYXJ3aXNlLCBibG9ja3dpc2UsIGV0Yy4KLSAgIEFkZCBjb21tYW5kcyBmb3Igc2F2aW5nIGFuZCByZXN0b3Jpbmcgb3B0aW9ucyAiOnNldCBzYXZlIiAic2V0IHJlc3RvcmUiLAogICAgZm9yIHVzZSBpbiBtYWNybydzIGFuZCB0aGUgbGlrZS4KLSAgIEtlZXAgb3V0cHV0IGZyb20gbGlzdGluZ3MgaW4gYSB3aW5kb3csIHNvIHlvdSBjYW4gaGF2ZSBhIGxvb2sgYXQgaXQgd2hpbGUKICAgIHdvcmtpbmcgaW4gYW5vdGhlciB3aW5kb3cuICBQdXQgY21kbGluZSBpbiBhIHNlcGFyYXRlIHdpbmRvdz8KLSAgIEFkZCBwb3NzaWJpbGl0eSB0byBwdXQgb3V0cHV0IG9mIGV4IGNvbW1hbmRzIGluIGEgYnVmZmVyIG9yIGZpbGUsIGUuZy4gZm9yCiAgICAiOnNldCBhbGwiLiAgIjpyIDpzZXQgYWxsIj8KLSAgICdlZGl0JyBvcHRpb246IFdoZW4gb2ZmIGNoYW5naW5nIHRoZSBidWZmZXIgaXMgbm90IHBvc3NpYmxlIChSZWFsbHkKICAgIHJlYWQtb25seSBtb2RlKS4KLSAgIFdoZW4gdGhlICdlcXVhbGFsd2F5cycgb3B0aW9uIGlzIHNldCwgY3JlYXRpbmcgYSBuZXcgd2luZG93IHNob3VsZCBub3QKICAgIHJlc3VsdCBpbiB3aW5kb3dzIHRvIGJlY29tZSBiaWdnZXIuICBEZWxldGluZyBhIHdpbmRvdyBzaG91bGQgbm90IHJlc3VsdCBpbgogICAgYSB3aW5kb3cgdG8gYmVjb21lIHNtYWxsZXIgKFdlYmIpLgotICAgV2hlbiByZXNpemluZyB0aGUgd2hvbGUgVmltIHdpbmRvdywgdGhlIHdpbmRvd3MgaW5zaWRlIHNob3VsZCBiZSByZXNpemVkCiAgICBwcm9wb3J0aW9uYWxseSAoV2ViYikuCi0gICBJbmNsdWRlIG9wdGlvbnMgZGlyZWN0bHkgaW4gb3B0aW9uIHRhYmxlLCBubyBpbmRpcmVjdCBwb2ludGVycy4gIFVzZQogICAgbWtvcHR0YWIgdG8gbWFrZSBvcHRpb24gdGFibGU/Ci0gICBXaGVuIGRvaW5nICI6dyBkaXIiLCB3aGVyZSAiZGlyIiBpcyBhIGRpcmVjdG9yeSBuYW1lLCB3cml0ZSB0aGUgY3VycmVudAogICAgZmlsZSBpbnRvIHRoYXQgZGlyZWN0b3J5LCB3aXRoIHRoZSBjdXJyZW50IGZpbGUgbmFtZSAod2l0aG91dCB0aGUgcGF0aCk/Ci0gICBTdXBwb3J0IGZvciAnZGljdGlvbmFyeSdzIHRoYXQgYXJlIHNvcnRlZCwgbWFrZXMgYWNjZXNzIGEgbG90IGZhc3RlcgogICAgKEhhcml0c2lzKS4KLSAgIEFkZCAiXlZyeCIgb24gdGhlIGNvbW1hbmQgbGluZSwgcmVwbGFjZSB3aXRoIGNvbnRlbnRzIG9mIHJlZ2lzdGVyIHguICBVc2VkCiAgICBpbnN0ZWFkIG9mIENUUkwtUiB0byBtYWtlIHJlcGVhdGluZyBwb3NzaWJsZS4gKE1hcmluaWNoZXYpCi0gICBBZGQgIl5WYiIgb24gdGhlIGNvbW1hbmQgbGluZSwgcmVwbGFjZSB3aXRoIHdvcmQgYmVmb3JlIG9yIHVuZGVyIHRoZQogICAgY3Vyc29yPwotICAgT3B0aW9uIHRvIG1ha2UgYSAuc3dwIGZpbGUgb25seSB3aGVuIGEgY2hhbmdlIGlzIG1hZGUgKFRlbXBsZXRvbikuCi0gICBTdXBwb3J0IG1hcHBpbmcgZm9yIHJlcGxhY2UgbW9kZSBhbmQgInIiIGNvbW1hbmQgKFZpIGRvZXNuJ3QgZG8gdGhpcyk/CjUgICBBZGQgJ2lnbm9yZWZpbGVjYXNlJyBvcHRpb246IElnbm9yZSBjYXNlIHdoZW4gZXhwYW5kaW5nIGZpbGUgbmFtZXMuCiAgICAiOmUgbWE8VGFiPiIgd291bGQgYWxzbyBmaW5kICJNYWtlZmlsZSIgb24gVW5peC4KOCAgIFNvcnRpbmcgb2YgZmlsZW5hbWVzIGZvciBjb21wbGV0aW9uIGlzIHdyb25nIG9uIHN5c3RlbXMgdGhhdCBpZ25vcmUKICAgIGNhc2Ugb2YgZmlsZW5hbWVzLiAgQWRkICdpZ25vcmVmbmNhc2UnIG9wdGlvbi4gIFdoZW4gc2V0LCBjYXNlIGluCiAgICBmaWxlbmFtZXMgaXMgaWdub3JlZCBmb3Igc29ydGluZyB0aGVtLiBQYXRjaCBieSBNaWtlIFdpbGxpYW1zOgogICAgfi92aW0vcGF0Y2hlcy9pZ25vcmVmbmNhc2UuICBBbHNvIGNoYW5nZSB3aGF0IG1hdGNoZXM/ICBPciB1c2UgYW5vdGhlcgogICAgb3B0aW9uIG5hbWUuCjggICBTaG91bGQgYmUgYWJsZSB0byBjb21waWxlIFZpbSBpbiBhbm90aGVyIGRpcmVjdG9yeSwgd2l0aCAkKHNyY2Rpcikgc2V0IHRvCiAgICB3aGVyZSB0aGUgc291cmNlcyBhcmUuIEFkZCAkKHNyY2RpcikgaW4gdGhlIE1ha2VmaWxlIGluIGEgbG90IG9mIHBsYWNlcy4KICAgIChOZXRoZXJ0b24pCjYgICBNYWtlIGl0IGNvbmZpZ3VyYWJsZSB3aGVuICJKIiBpbnNlcnRzIGEgc3BhY2Ugb3Igbm90LiAgU2hvdWxkIG5vdCBhZGQgYQogICAgc3BhY2UgYWZ0ZXIgIigiLCBmb3IgZXhhbXBsZS4KNSAgIFdoZW4gaW5zZXJ0aW5nIHNwYWNlcyBhZnRlciB0aGUgZW5kLW9mLWxpbmUgZm9yICd2aXJ0dWFsZWRpdCcsIHVzZSB0YWJzCiAgICB3aGVuIHRoZSB1c2VyIHdhbnRzIHRoaXMgKGUuZy4sIGFkZCBhICJ0YWIiIGZpZWxkIHRvICd2aXJ0dWFsZWRpdCcpLgogICAgKFNlcnZhdGl1cyBCcmFuZHQpCgoKRnJvbSBFbHZpczoKLSAgIFVzZSAiaW5zdG1hbi5zaCIgdG8gaW5zdGFsbCBtYW5wYWdlcz8KLSAgIEFkZCAiOmFsaWFzIiBjb21tYW5kLgotICAgZm9udGNoYW5nZXMgcmVjb2duaXplZCAiXFxmQiIgZXRjLgotICAgU2VhcmNoIHBhdHRlcm5zOgogICAgICBcQAltYXRjaCB3b3JkIHVuZGVyIGN1cnNvci4KICAgIGJ1dCBkbzoKICAgICAgXEB3CW1hdGNoIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3I/CiAgICAgIFxAVwltYXRjaCB0aGUgV09SRCB1bmRlciB0aGUgY3Vyc29yPwo4ICAgIjp3aW5kb3ciIGNvbW1hbmQ6CiAgICA6d2luICsJbmV4dCB3aW5kb3cgKHVwKQogICAgOndpbiArKwlpZGVtLCB3cmFwcGluZwogICAgOndpbiAtCXByZXZpb3VzIHdpbmRvdyAoZG93bikKICAgIDp3aW4gLS0JaWRlbSwgd3JhcHBpbmcKICAgIDp3aW4gbnIJdG8gd2luZG93IG51bWJlciAibnIiCiAgICA6d2luIG5hbWUJdG8gd2luZG93IGVkaXRpbmcgYnVmZmVyICJuYW1lIgo3ICAgIjpjYyIgY29tcGlsZXMgYSBzaW5nbGUgZmlsZSAoZGVmYXVsdDogY3VycmVudCBvbmUpLiAgJ2NjcHJnJyAgIG9wdGlvbiBpcwogICAgcHJvZ3JhbSB0byB1c2Ugd2l0aCAiOmNjIi4gIFVzZSAiOmNvbXBpbGUiIGluc3RlYWQgb2YgIjpjYyI/CgoKRnJvbSBOdmk6Ci0gICAnc2VhcmNoaW5jcicgb3B0aW9uLCBhbGlhcyBmb3IgJ2luY3NlYXJjaCc/Ci0gICAnbGVmdHJpZ2h0JyBvcHRpb24sIGFsaWFzIGZvciAnbm93cmFwJz8KLSAgIEhhdmUgYSBsb29rIGF0ICJ2aS9kb2MvdmkuY2hhcnQiLCBmb3IgTnZpIHNwZWNpYWx0aWVzLgo4ICAgQWRkICdrZXl0aW1lJywgdGltZSBpbiAxLzEwIHNlYyBmb3IgbWFwcGluZyB0aW1lb3V0PwotICAgQWRkICdmaWxlYycgb3B0aW9uIGFzIGFuIGFsdGVybmF0aXZlIGZvciAnd2lsZGNoYXInLgo2ICAgU3VwcG9ydCBOdmkgY29tbWFuZCBuYW1lcyBhcyBhbiBhbGlhczoKICAgIDpiZwkJICAgIDpoaWRlCiAgICA6ZmcJZm5hbWUJICAgIDpidWYgZm5hbWUgKHdpdGggJ2hpZGRlbicgc2V0PykKICAgIDpkaXMgYgkgICAgOmxzCiAgICA6RWRpdCBmbmFtZQkgICAgOnNwbGl0IGZuYW1lCiAgICA6RmcgZm5hbWUJICAgIDpzYnVmIGZuYW1lICh3aXRoICdoaWRkZW4nIHNldD8pCiAgICA6TmV4dAkgICAgOnNuZXh0IChjYW4ndCBkbyB0aGlzLCBhbHJlYWR5IHVzZSA6TmV4dCkKICAgIDpQcmV2aW91cwkgICAgOnNwcmV2aW91cwogICAgOlRhZwkgICAgOnN0YWcKCgpGcm9tIHh2aToKLSAgIENUUkwtXyA6IHN3YXAgOHRoIGJpdCBvZiBjaGFyYWN0ZXIuCi0gICBBZGQgZWdyZXAtbGlrZSByZWdleCB0eXBlLCBsaWtlIHh2aSAoTmVkIEtvbnopIG9yIFBlcmwgKEVtbWFudWVsIE1vZ2VuZXQpCgoKRnJvbSB2aWxlOgotICAgV2hlbiBob3Jpem9udGFsIHNjcm9sbGluZywgdXNlICc+JyBmb3IgbGluZXMgY29udGludWluZyByaWdodCBvZiBhIHdpbmRvdy4KLSAgIFN1cHBvcnQgcHV0dGluZyAuc3dwIGZpbGVzIGluIC90bXA6IENvbW1hbmQgaW4gcmMubG9jYWwgdG8gbW92ZSAuc3dwIGZpbGVzCiAgICBmcm9tIC90bXAgdG8gc29tZSBkaXJlY3RvcnkgYmVmb3JlIGRlbGV0aW5nIGZpbGVzLgoKCkZhciBmdXR1cmUgYW5kICJiaWciIGV4dGVuc2lvbnM6Ci0gICBJbnN0ZWFkIG9mIHVzaW5nIGEgTWFrZWZpbGUgYW5kIGF1dG9jb25mLCB1c2UgYSBzaW1wbGUgc2hlbGwgc2NyaXB0IHRvCiAgICBmaW5kIHRoZSBDIGNvbXBpbGVyIGFuZCBkbyBldmVyeXRoaW5nIHdpdGggQyBjb2RlLiAgVHJhbnNsYXRlIHNvbWV0aGluZwogICAgbGlrZSBhbiBBYXAgcmVjaXBlIGFuZCBjb25maWd1cmUuaW4gdG8gQy4gIEF2b2lkcyBkZXBlbmRpbmcgb24gUHl0aG9uLAogICAgdGh1cyB3aWxsIHdvcmsgZXZlcnl3aGVyZS4gIFdpdGggYmF0Y2ggZmlsZSB0byBmaW5kIHRoZSBDIGNvbXBpbGVyIGl0CiAgICB3b3VsZCBhbHNvIHdvcmsgb24gTVMtV2luZG93cy4KLSAgIE1ha2UgaXQgZWFzeSB0byBzZXR1cCBWaW0gZm9yIGdyb3VwcyBvZiB1c2Vyczogbm92aWNlIHZpIHVzZXJzLCBub3ZpY2UKICAgIFZpbSB1c2VycywgQyBwcm9ncmFtbWVycywgeHRlcm0gdXNlcnMsIEdVSSB1c2VycywuLi4KLSAgIENoYW5nZSBsYXlvdXQgb2YgYmxvY2tzIGluIHN3YXAgZmlsZTogVGV4dCBhdCB0aGUgc3RhcnQsIHdpdGggJ1xuJyBpbgogICAgYmV0d2VlbiBsaW5lcyAoanVzdCBsb2FkIHRoZSBmaWxlIHdpdGhvdXQgY2hhbmdlcywgZXhjZXB0IGZvciBNYWMpLgogICAgSW5kZXhlcyBmb3IgbGluZXMgYXJlIGZyb20gdGhlIGVuZCBvZiB0aGUgYmxvY2sgYmFja3dhcmRzLiAgSXQncyB0aGUKICAgIGN1cnJlbnQgbGF5b3V0IG1pcnJvcmVkLgotICAgTWFrZSBpdCBwb3NzaWJsZSB0byBlZGl0IGEgcmVnaXN0ZXIsIGluIGEgd2luZG93LCBsaWtlIGEgYnVmZmVyLgotICAgQWRkIHN0dWZmIHRvIHN5bnRheCBoaWdobGlnaHRpbmcgdG8gY2hhbmdlIHRoZSB0ZXh0ICh1cHBlci1jYXNlIGtleXdvcmRzLAogICAgc2V0IGluZGVudCwgZGVmaW5lIG90aGVyIGhpZ2hsaWdodGluZywgZXRjLikuCi0gICBNb2RlIHRvIGtlZXAgQy1jb2RlIGZvcm1hdHRlZCBhbGwgdGhlIHRpbWUgKHNvcnQgb2Ygb24tbGluZSBpbmRlbnQpLgotICAgU2V2ZXJhbCB0b3AtbGV2ZWwgd2luZG93cyBpbiBvbmUgVmltIHNlc3Npb24uICBCZSBhYmxlIHRvIHVzZSBhIGRpZmZlcmVudAogICAgZm9udCBpbiBlYWNoIHRvcC1sZXZlbCB3aW5kb3cuCi0gICBBbGxvdyBlZGl0aW5nIGFib3ZlIHN0YXJ0IGFuZCBiZWxvdyBlbmQgb2YgYnVmZmVyIChmbGFnIGluICd2aXJ0dWFsZWRpdCcpLgotICAgU21hcnQgY3V0L3Bhc3RlOiByZWNvZ25pemUgd29yZHMgYW5kIGFkanVzdCBzcGFjZXMgYmVmb3JlL2FmdGVyIHRoZW0uCi0gICBBZGQgb3BlbiBtb2RlLCB1c2UgaXQgd2hlbiB0ZXJtaW5hbCBoYXMgbm8gY3Vyc29yIHBvc2l0aW9uaW5nLgotICAgU3BlY2lhbCAiZHJhd2luZyBtb2RlIjogYSBsaW5lIGlzIGRyYXduIHdoZXJlIHRoZSBjdXJzb3IgaXMgbW92ZWQgdG8uCiAgICBCYWNrc3BhY2UgZGVsZXRlcyBhbG9uZyB0aGUgbGluZSAoZnJvbSBqdmltKS4KLSAgIEltcGxlbWVudCAiOkJzZXQiLCBzZXQgb3B0aW9uIGluIGFsbCBidWZmZXJzLiAgQWxzbyAiOldzZXQiLCBzZXQgaW4gYWxsCiAgICB3aW5kb3dzLCAiOkFzZXQsIHNldCBpbiBhbGwgYXJndW1lbnRzIGFuZCAiOlRzZXQiLCBzZXQgaW4gYWxsIGZpbGVzCiAgICBtZW50aW9uZWQgaW4gdGhlIHRhZ3MgZmlsZS4KICAgIEFkZCBidWZmZXIvYXJnIHJhbmdlLCBsaWtlIGluICI6Miw1QiVzLy4uLiIgKGRvIHdlIHJlYWxseSBuZWVkIHRoaXM/Pz8pCiAgICBBZGQgc2VhcmNoIHN0cmluZzogIkIvKi5jLyVzLy4uIj8gIE9yICI6Ri8qLmMvJXMvLi4iPwotICAgU3VwcG9ydCBmb3IgdW5kZXJsaW5pbmcgKHVuZGVyc2NvcmUtQlMtY2hhciksIGJvbGQgKGNoYXItQlMtY2hhcikgYW5kIG90aGVyCiAgICBzdGFuZG91dCBtb2RlcyBzd2l0Y2hlZCBvbi9vZmYgd2l0aCAsICdvdmVyc3RyaWtlJyBvcHRpb24gKFJlaXRlcikuCi0gICBBZGQgdmVydGljYWwgbW9kZSAoUGF1bCBKdXJ5LCBEZW1pcmVsKTogIjV2ZHciIGRlbGV0ZXMgYSB3b3JkIGluIGZpdmUKICAgIGxpbmVzLCAiM3ZpdGV4dEVTQyIgd2lsbCBpbnNlcnQgInRleHQiIGluIHRocmVlIGxpbmVzLCBldGMuLgo0ICAgUmVjb2duaXplIGwsICMsIHAgYXMgJ2ZsYWdzJyB0byBFWCBjb21tYW5kczoKICAgIDpnL1JFLyNsIHNoYWxsIHByaW50IGxpbmVzIHdpdGggbGluZSBudW1iZXJzIGFuZCBpbiBsaXN0IGZvcm1hdC4KICAgIDpnL1JFL2RwIHNoYWxsIHByaW50IGxpbmVzIHRoYXQgYXJlIGRlbGV0ZWQuCiAgICBQT1NJWDogQ29tbWFuZHMgd2hlcmUgZmxhZ3Mgc2hhbGwgYXBwbHkgdG8gYWxsIGxpbmVzIHdyaXR0ZW46IGxpc3QsCiAgICBudW1iZXIsIG9wZW4sIHByaW50LCBzdWJzdGl0dXRlLCB2aXN1YWwsICYsIHouICBGb3Igb3RoZXIgY29tbWFuZHMsIGZsYWdzCiAgICBzaGFsbCBhcHBseSB0byB0aGUgY3VycmVudCBsaW5lIGFmdGVyIHRoZSBjb21tYW5kIGNvbXBsZXRlcy4gIEV4YW1wbGVzOgogICAgOjcsMTBqICNsIEpvaW4gdGhlIGxpbmVzIDctMTAgYW5kIHByaW50IHRoZSByZXN1bHQgaW4gbGlzdAotICAgQWxsb3cgdHdvIG9yIG1vcmUgdXNlcnMgdG8gZWRpdCB0aGUgc2FtZSBmaWxlIGF0IHRoZSBzYW1lIHRpbWUuICBDaGFuZ2VzCiAgICBhcmUgcmVmbGVjdGVkIGluIGVhY2ggVmltIGltbWVkaWF0ZWx5LiAgQ291bGQgd29yayB3aXRoIGxvY2FsIGZpbGVzIGJ1dAogICAgYWxzbyBvdmVyIHRoZSBpbnRlcm5ldC4gIFNlZSBodHRwOi8vd3d3LmNvZGluZ21vbmtleXMuZGUvc3ViZXRoYWVkaXQvLgoKV2hlbiB1c2luZyAiZG8iIG9yICI6ZGlmZmdldCIgaW4gYSBidWZmZXIgd2l0aCBjaGFuZ2VzIGluIGV2ZXJ5IGxpbmUgYW4gZXh0cmEKZW1wdHkgbGluZSB3b3VsZCBhcHBlYXIuCgp2aW06dHc9Nzg6c3c9NDpzdHM9NDp0cz04OmZ0PWhlbHA6bm9ybDoKdmltOiBzZXQgZm8rPW4gOgo=