KnVzcl8yNC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA1IEFwciAwMQoKCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCgoJCQkgICAgIEluc2VydGluZyBxdWlja2x5CgoKV2hlbiBlbnRlcmluZyB0ZXh0LCBWaW0gb2ZmZXJzIHZhcmlvdXMgd2F5cyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBrZXlzdHJva2VzCmFuZCBhdm9pZCB0eXBpbmcgbWlzdGFrZXMuICBVc2UgSW5zZXJ0IG1vZGUgY29tcGxldGlvbiB0byByZXBlYXQgcHJldmlvdXNseQp0eXBlZCB3b3Jkcy4gIEFiYnJldmlhdGUgbG9uZyB3b3JkcyB0byBzaG9ydCBvbmVzLiAgVHlwZSBjaGFyYWN0ZXJzIHRoYXQKYXJlbid0IG9uIHlvdXIga2V5Ym9hcmQuCgp8MjQuMXwJTWFraW5nIGNvcnJlY3Rpb25zCnwyNC4yfAlTaG93aW5nIG1hdGNoZXMKfDI0LjN8CUNvbXBsZXRpb24KfDI0LjR8CVJlcGVhdGluZyBhbiBpbnNlcnQKfDI0LjV8CUNvcHlpbmcgZnJvbSBhbm90aGVyIGxpbmUKfDI0LjZ8CUluc2VydGluZyBhIHJlZ2lzdGVyCnwyNC43fAlBYmJyZXZpYXRpb25zCnwyNC44fAlFbnRlcmluZyBzcGVjaWFsIGNoYXJhY3RlcnMKfDI0Ljl8CURpZ3JhcGhzCnwyNC4xMHwJTm9ybWFsIG1vZGUgY29tbWFuZHMKCiAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzI1LnR4dHwgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMjMudHh0fCAgRWRpdGluZyBvdGhlciBmaWxlcwpUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC4xKglNYWtpbmcgY29ycmVjdGlvbnMKClRoZSA8QlM+IGtleSB3YXMgYWxyZWFkeSBtZW50aW9uZWQuICBJdCBkZWxldGVzIHRoZSBjaGFyYWN0ZXIganVzdCBiZWZvcmUgdGhlCmN1cnNvci4gIFRoZSA8RGVsPiBrZXkgZG9lcyB0aGUgc2FtZSBmb3IgdGhlIGNoYXJhY3RlciB1bmRlciAoYWZ0ZXIpIHRoZQpjdXJzb3IuCiAgIFdoZW4geW91IHR5cGVkIGEgd2hvbGUgd29yZCB3cm9uZywgdXNlIENUUkwtVzoKCglUaGUgaG9yc2UgaGFkIGZhbGxlbiB0byB0aGUgc2t5IH4KCQkJCSAgICAgICBDVFJMLVcKCVRoZSBob3JzZSBoYWQgZmFsbGVuIHRvIHRoZSB+CgpJZiB5b3UgcmVhbGx5IG1lc3NlZCB1cCBhIGxpbmUgYW5kIHdhbnQgdG8gc3RhcnQgb3ZlciwgdXNlIENUUkwtVSB0byBkZWxldGUKaXQuICBUaGlzIGtlZXBzIHRoZSB0ZXh0IGFmdGVyIHRoZSBjdXJzb3IgYW5kIHRoZSBpbmRlbnQuICBPbmx5IHRoZSB0ZXh0IGZyb20KdGhlIGZpcnN0IG5vbi1ibGFuayB0byB0aGUgY3Vyc29yIGlzIGRlbGV0ZWQuICBXaXRoIHRoZSBjdXJzb3Igb24gdGhlICJmIiBvZgoiZmFsbGVuIiBpbiB0aGUgbmV4dCBsaW5lIHByZXNzaW5nIENUUkwtVSBkb2VzIHRoaXM6CgoJVGhlIGhvcnNlIGhhZCBmYWxsZW4gdG8gdGhlIH4KCQkgICAgICBDVFJMLVUKCWZhbGxlbiB0byB0aGUgfgoKV2hlbiB5b3Ugc3BvdCBhIG1pc3Rha2UgYSBmZXcgd29yZHMgYmFjaywgeW91IG5lZWQgdG8gbW92ZSB0aGUgY3Vyc29yIHRoZXJlIHRvCmNvcnJlY3QgaXQuICBGb3IgZXhhbXBsZSwgeW91IHR5cGVkIHRoaXM6CgoJVGhlIGhvcnNlIGhhZCBmb2xsZW4gdG8gdGhlIGdyb3VuZCB+CgpZb3UgbmVlZCB0byBjaGFuZ2UgImZvbGxlbiIgdG8gImZhbGxlbiIuICBXaXRoIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCwgeW91CndvdWxkIHR5cGUgdGhpcyB0byBjb3JyZWN0IGl0OiA+CgoJCQkJCTxFc2M+NGJscmFBCgo8CWdldCBvdXQgb2YgSW5zZXJ0IG1vZGUJCTxFc2M+Cglmb3VyIHdvcmRzIGJhY2sJCQkgICAgIDRiCgltb3ZlIG9uIHRvcCBvZiB0aGUgIm8iCQkgICAgICAgbAoJcmVwbGFjZSB3aXRoICJhIgkJCXJhCglyZXN0YXJ0IEluc2VydCBtb2RlCQkJICBBCgpBbm90aGVyIHdheSB0byBkbyB0aGlzOiA+CgoJCTxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PjxDLUxlZnQ+PFJpZ2h0PjxEZWw+YTxFbmQ+Cgo8CWZvdXIgd29yZHMgYmFjawkJICAgICA8Qy1MZWZ0PjxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PgoJbW92ZSBvbiB0b3Agb2YgdGhlICJvIgkJCTxSaWdodD4KCWRlbGV0ZSB0aGUgIm8iCQkJCSAgICAgICA8RGVsPgoJaW5zZXJ0IGFuICJhIgkJCQkJICAgIGEKCWdvIHRvIGVuZCBvZiB0aGUgbGluZQkJCQkgICAgIDxFbmQ+CgpUaGlzIHVzZXMgc3BlY2lhbCBrZXlzIHRvIG1vdmUgYXJvdW5kLCB3aGlsZSByZW1haW5pbmcgaW4gSW5zZXJ0IG1vZGUuICBUaGlzCnJlc2VtYmxlcyB3aGF0IHlvdSB3b3VsZCBkbyBpbiBhIG1vZGVsZXNzIGVkaXRvci4gIEl0J3MgZWFzaWVyIHRvIHJlbWVtYmVyLApidXQgdGFrZXMgbW9yZSB0aW1lICh5b3UgaGF2ZSB0byBtb3ZlIHlvdXIgaGFuZCBmcm9tIHRoZSBsZXR0ZXJzIHRvIHRoZSBjdXJzb3IKa2V5cywgYW5kIHRoZSA8RW5kPiBrZXkgaXMgaGFyZCB0byBwcmVzcyB3aXRob3V0IGxvb2tpbmcgYXQgdGhlIGtleWJvYXJkKS4KICAgVGhlc2Ugc3BlY2lhbCBrZXlzIGFyZSBtb3N0IHVzZWZ1bCB3aGVuIHdyaXRpbmcgYSBtYXBwaW5nIHRoYXQgZG9lc24ndApsZWF2ZSBJbnNlcnQgbW9kZS4gIFRoZSBleHRyYSB0eXBpbmcgZG9lc24ndCBtYXR0ZXIgdGhlbi4KICAgQW4gb3ZlcnZpZXcgb2YgdGhlIGtleXMgeW91IGNhbiB1c2UgaW4gSW5zZXJ0IG1vZGU6CgoJPEMtSG9tZT4JdG8gc3RhcnQgb2YgdGhlIGZpbGUKCTxQYWdlVXA+CWEgd2hvbGUgc2NyZWVuZnVsIHVwCgk8SG9tZT4JCXRvIHN0YXJ0IG9mIGxpbmUKCTxTLUxlZnQ+CW9uZSB3b3JkIGxlZnQKCTxDLUxlZnQ+CW9uZSB3b3JkIGxlZnQKCTxTLVJpZ2h0PglvbmUgd29yZCByaWdodAoJPEMtUmlnaHQ+CW9uZSB3b3JkIHJpZ2h0Cgk8RW5kPgkJdG8gZW5kIG9mIHRoZSBsaW5lCgk8UGFnZURvd24+CWEgd2hvbGUgc2NyZWVuZnVsIGRvd24KCTxDLUVuZD4JCXRvIGVuZCBvZiB0aGUgZmlsZQoKVGhlcmUgYXJlIGEgZmV3IG1vcmUsIHNlZSB8aW5zLXNwZWNpYWwtc3BlY2lhbHwuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjIqCVNob3dpbmcgbWF0Y2hlcwoKV2hlbiB5b3UgdHlwZSBhICkgaXQgd291bGQgYmUgbmljZSB0byBzZWUgd2l0aCB3aGljaCAoIGl0IG1hdGNoZXMuICBUbyBtYWtlClZpbSBkbyB0aGF0IHVzZSB0aGlzIGNvbW1hbmQ6ID4KCgk6c2V0IHNob3dtYXRjaAoKV2hlbiB5b3Ugbm93IHR5cGUgYSB0ZXh0IGxpa2UgIihleGFtcGxlKSIsIGFzIHNvb24gYXMgeW91IHR5cGUgdGhlICkgVmltIHdpbGwKYnJpZWZseSBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG1hdGNoaW5nICgsIGtlZXAgaXQgdGhlcmUgZm9yIGhhbGYgYSBzZWNvbmQsCmFuZCBtb3ZlIGJhY2sgdG8gd2hlcmUgeW91IHdlcmUgdHlwaW5nLgogICBJbiBjYXNlIHRoZXJlIGlzIG5vIG1hdGNoaW5nICgsIFZpbSB3aWxsIGJlZXAuICBUaGVuIHlvdSBrbm93IHRoYXQgeW91Cm1pZ2h0IGhhdmUgZm9yZ290dGVuIHRoZSAoIHNvbWV3aGVyZSwgb3IgdHlwZWQgYSApIHRvbyBtYW55LgogICBUaGUgbWF0Y2ggd2lsbCBhbHNvIGJlIHNob3duIGZvciBbXSBhbmQge30gcGFpcnMuICBZb3UgZG9uJ3QgaGF2ZSB0byB3YWl0CndpdGggdHlwaW5nIHRoZSBuZXh0IGNoYXJhY3RlciwgYXMgc29vbiBhcyBWaW0gc2VlcyBpdCB0aGUgY3Vyc29yIHdpbGwgbW92ZQpiYWNrIGFuZCBpbnNlcnRpbmcgY29udGludWVzIGFzIGJlZm9yZS4KICAgWW91IGNhbiBjaGFuZ2UgdGhlIHRpbWUgVmltIHdhaXRzIHdpdGggdGhlICdtYXRjaHRpbWUnIG9wdGlvbi4gIEZvcgpleGFtcGxlLCB0byBtYWtlIFZpbSB3YWl0IG9uZSBhbmQgYSBoYWxmIHNlY29uZDogPgoKCTpzZXQgbWF0Y2h0aW1lPTE1CgpUaGUgdGltZSBpcyBzcGVjaWZpZWQgaW4gdGVudGhzIG9mIGEgc2Vjb25kLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC4zKglDb21wbGV0aW9uCgpWaW0gY2FuIGF1dG9tYXRpY2FsbHkgY29tcGxldGUgd29yZHMgb24gaW5zZXJ0aW9uLiAgWW91IHR5cGUgdGhlIGZpcnN0IHBhcnQgb2YKYSB3b3JkLCBwcmVzcyBDVFJMLVAsIGFuZCBWaW0gZ3Vlc3NlcyB0aGUgcmVzdC4KICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGFyZSBjcmVhdGluZyBhIEMgcHJvZ3JhbSBhbmQgd2FudCB0byB0eXBlIGluCnRoZSBmb2xsb3dpbmc6CgoJdG90YWwgPSBjaF9hcnJheVswXSArIGNoX2FycmF5WzFdICsgY2hfYXJyYXlbMl07IH4KCllvdSBzdGFydCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgoKCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF8gfgoKQXQgdGhpcyBwb2ludCwgeW91IHRlbGwgVmltIHRvIGNvbXBsZXRlIHRoZSB3b3JkIHVzaW5nIHRoZSBjb21tYW5kIENUUkwtUC4KVmltIHNlYXJjaGVzIGZvciBhIHdvcmQgdGhhdCBzdGFydHMgd2l0aCB3aGF0J3MgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4gIEluCnRoaXMgY2FzZSwgaXQgaXMgImNoXyIsIHdoaWNoIG1hdGNoZXMgd2l0aCB0aGUgd29yZCBjaF9hcnJheS4gIFNvIHR5cGluZwpDVFJMLVAgZ2l2ZXMgeW91IHRoZSBmb2xsb3dpbmc6CgoJdG90YWwgPSBjaF9hcnJheVswXSArIGNoX2FycmF5IH4KCkFmdGVyIGEgbGl0dGxlIG1vcmUgdHlwaW5nLCB5b3UgZ2V0IHRoaXMgKGVuZGluZyBpbiBhIHNwYWNlKToKCgl0b3RhbCA9IGNoX2FycmF5WzBdICsgY2hfYXJyYXlbMV0gKyAgfgoKSWYgeW91IG5vdyB0eXBlIENUUkwtUCBWaW0gd2lsbCBzZWFyY2ggYWdhaW4gZm9yIGEgd29yZCB0aGF0IGNvbXBsZXRlcyB0aGUKd29yZCBiZWZvcmUgdGhlIGN1cnNvci4gIFNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgaW4gZnJvbnQgb2YgdGhlIGN1cnNvciwgaXQKZmluZHMgdGhlIGZpcnN0IHdvcmQgYmFja3dhcmRzLCB3aGljaCBpcyAiY2hfYXJyYXkiLiAgVHlwaW5nIENUUkwtUCBhZ2FpbgpnaXZlcyB5b3UgdGhlIG5leHQgd29yZCB0aGF0IG1hdGNoZXMsIGluIHRoaXMgY2FzZSAidG90YWwiLiAgQSB0aGlyZCBDVFJMLVAKc2VhcmNoZXMgZnVydGhlciBiYWNrLiAgSWYgdGhlcmUgaXMgbm90aGluZyBlbHNlLCBpdCBjYXVzZXMgdGhlIGVkaXRvciB0byBydW4Kb3V0IG9mIHdvcmRzLCBzbyBpdCByZXR1cm5zIHRvIHRoZSBvcmlnaW5hbCB0ZXh0LCB3aGljaCBpcyBub3RoaW5nLiAgQSBmb3VydGgKQ1RSTC1QIGNhdXNlcyB0aGUgZWRpdG9yIHRvIHN0YXJ0IG92ZXIgYWdhaW4gd2l0aCAiY2hfYXJyYXkiLgoKVG8gc2VhcmNoIGZvcndhcmQsIHVzZSBDVFJMLU4uICBTaW5jZSB0aGUgc2VhcmNoIHdyYXBzIGFyb3VuZCB0aGUgZW5kIG9mIHRoZQpmaWxlLCBDVFJMLU4gYW5kIENUUkwtUCB3aWxsIGZpbmQgdGhlIHNhbWUgbWF0Y2hlcywgYnV0IGluIGEgZGlmZmVyZW50CnNlcXVlbmNlLiAgSGludDogQ1RSTC1OIGlzIE5leHQtbWF0Y2ggYW5kIENUUkwtUCBpcyBQcmV2aW91cy1tYXRjaC4KClRoZSBWaW0gZWRpdG9yIGdvZXMgdGhyb3VnaCBhIGxvdCBvZiBlZmZvcnQgdG8gZmluZCB3b3JkcyB0byBjb21wbGV0ZS4gIEJ5CmRlZmF1bHQsIGl0IHNlYXJjaGVzIHRoZSBmb2xsb3dpbmcgcGxhY2VzOgoKCTEuIEN1cnJlbnQgZmlsZQoJMi4gRmlsZXMgaW4gb3RoZXIgd2luZG93cwoJMy4gT3RoZXIgbG9hZGVkIGZpbGVzIChoaWRkZW4gYnVmZmVycykKCTQuIEZpbGVzIHdoaWNoIGFyZSBub3QgbG9hZGVkIChpbmFjdGl2ZSBidWZmZXJzKQoJNS4gVGFnIGZpbGVzCgk2LiBBbGwgZmlsZXMgI2luY2x1ZGVkIGJ5IHRoZSBjdXJyZW50IGZpbGUKCgpPUFRJT05TCgpZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgc2VhcmNoIG9yZGVyIHdpdGggdGhlICdjb21wbGV0ZScgb3B0aW9uLgoKVGhlICdpZ25vcmVjYXNlJyBvcHRpb24gaXMgdXNlZC4gIFdoZW4gaXQgaXMgc2V0LCBjYXNlIGRpZmZlcmVuY2VzIGFyZSBpZ25vcmVkCndoZW4gc2VhcmNoaW5nIGZvciBtYXRjaGVzLgoKQSBzcGVjaWFsIG9wdGlvbiBmb3IgY29tcGxldGlvbiBpcyAnaW5mZXJjYXNlJy4gIFRoaXMgaXMgdXNlZnVsIHRvIGZpbmQKbWF0Y2hlcyB3aGlsZSBpZ25vcmluZyBjYXNlICgnaWdub3JlY2FzZScgbXVzdCBiZSBzZXQpIGJ1dCBzdGlsbCB1c2luZyB0aGUKY2FzZSBvZiB0aGUgd29yZCB0eXBlZCBzbyBmYXIuICBUaHVzIGlmIHlvdSB0eXBlICJGb3IiIGFuZCBWaW0gZmluZHMgYSBtYXRjaAoiZm9ydHVuYXRlbHkiLCBpdCB3aWxsIHJlc3VsdCBpbiAiRm9ydHVuYXRlbHkiLgoKCkNPTVBMRVRJTkcgU1BFQ0lGSUMgSVRFTVMKCklmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBsb29raW5nIGZvciwgeW91IGNhbiB1c2UgdGhlc2UgY29tbWFuZHMgdG8gY29tcGxldGUKd2l0aCBhIGNlcnRhaW4gdHlwZSBvZiBpdGVtOgoKCUNUUkwtWCBDVFJMLUYJCWZpbGUgbmFtZXMKCUNUUkwtWCBDVFJMLUwJCXdob2xlIGxpbmVzCglDVFJMLVggQ1RSTC1ECQltYWNybyBkZWZpbml0aW9ucyAoYWxzbyBpbiBpbmNsdWRlZCBmaWxlcykKCUNUUkwtWCBDVFJMLUkJCWN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzCglDVFJMLVggQ1RSTC1LCQl3b3JkcyBmcm9tIGEgZGljdGlvbmFyeQoJQ1RSTC1YIENUUkwtVAkJd29yZHMgZnJvbSBhIHRoZXNhdXJ1cwoJQ1RSTC1YIENUUkwtXQkJdGFncwoJQ1RSTC1YIENUUkwtVgkJVmltIGNvbW1hbmQgbGluZQoKQWZ0ZXIgZWFjaCBvZiB0aGVtIENUUkwtTiBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBuZXh0IG1hdGNoLCBDVFJMLVAgdG8gZmluZAp0aGUgcHJldmlvdXMgbWF0Y2guCiAgIE1vcmUgaW5mb3JtYXRpb24gZm9yIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaGVyZTogfGlucy1jb21wbGV0aW9ufC4KCgpDT01QTEVUSU5HIEZJTEUgTkFNRVMKCkxldCdzIHRha2UgQ1RSTC1YIENUUkwtRiBhcyBhbiBleGFtcGxlLiAgVGhpcyB3aWxsIGZpbmQgZmlsZSBuYW1lcy4gIEl0IHNjYW5zCnRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgYW5kIGRpc3BsYXlzIGVhY2ggb25lIHRoYXQgbWF0Y2hlcyB0aGUgd29yZCBpbgpmcm9udCBvZiB0aGUgY3Vyc29yLgogICBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHRoZSBjdXJyZW50CmRpcmVjdG9yeToKCgltYWluLmMgIHN1Yl9jb3VudC5jICBzdWJfZG9uZS5jICBzdWJfZXhpdC5jCgpOb3cgZW50ZXIgSW5zZXJ0IG1vZGUgYW5kIHN0YXJ0IHR5cGluZzoKCglUaGUgZXhpdCBjb2RlIGlzIGluIHRoZSBmaWxlIHN1YiB+CgpBdCB0aGlzIHBvaW50LCB5b3UgZW50ZXIgdGhlIGNvbW1hbmQgQ1RSTC1YIENUUkwtRi4gIFZpbSBub3cgY29tcGxldGVzIHRoZQpjdXJyZW50IHdvcmQgInN1YiIgYnkgbG9va2luZyBhdCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhlCmZpcnN0IG1hdGNoIGlzIHN1Yl9jb3VudC5jLiAgVGhpcyBpcyBub3QgdGhlIG9uZSB5b3Ugd2FudCwgc28geW91IG1hdGNoIHRoZQpuZXh0IGZpbGUgYnkgdHlwaW5nIENUUkwtTi4gIFRoaXMgbWF0Y2ggaXMgc3ViX2RvbmUuYy4gIFR5cGluZyBDVFJMLU4gYWdhaW4KdGFrZXMgeW91IHRvIHN1Yl9leGl0LmMuICBUaGUgcmVzdWx0czoKCglUaGUgZXhpdCBjb2RlIGlzIGluIHRoZSBmaWxlIHN1Yl9leGl0LmMgfgoKSWYgdGhlIGZpbGUgbmFtZSBzdGFydHMgd2l0aCAvIChVbml4KSBvciBDOlwgKE1TLVdpbmRvd3MpIHlvdSBjYW4gZmluZCBhbGwKZmlsZXMgaW4gdGhlIGZpbGUgc3lzdGVtLiAgRm9yIGV4YW1wbGUsIHR5cGUgIi91IiBhbmQgQ1RSTC1YIENUUkwtRi4gIFRoaXMKd2lsbCBtYXRjaCAiL3VzciIgKHRoaXMgaXMgb24gVW5peCk6CgoJdGhlIGZpbGUgaXMgZm91bmQgaW4gL3Vzci8gfgoKSWYgeW91IG5vdyBwcmVzcyBDVFJMLU4geW91IGdvIGJhY2sgdG8gIi91Ii4gIEluc3RlYWQsIHRvIGFjY2VwdCB0aGUgIi91c3IvIgphbmQgZ28gb25lIGRpcmVjdG9yeSBsZXZlbCBkZWVwZXIsIHVzZSBDVFJMLVggQ1RSTC1GIGFnYWluOgoKCXRoZSBmaWxlIGlzIGZvdW5kIGluIC91c3IvWDExUjYvIH4KClRoZSByZXN1bHRzIGRlcGVuZCBvbiB3aGF0IGlzIGZvdW5kIGluIHlvdXIgZmlsZSBzeXN0ZW0sIG9mIGNvdXJzZS4gIFRoZQptYXRjaGVzIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjQqCVJlcGVhdGluZyBhbiBpbnNlcnQKCklmIHlvdSBwcmVzcyBDVFJMLUEsIHRoZSBlZGl0b3IgaW5zZXJ0cyB0aGUgdGV4dCB5b3UgdHlwZWQgdGhlIGxhc3QgdGltZSB5b3UKd2VyZSBpbiBJbnNlcnQgbW9kZS4KICAgQXNzdW1lLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3UgaGF2ZSBhIGZpbGUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgZm9sbG93aW5nOgoKCSJmaWxlLmgiIH4KCS8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgoKWW91IGVkaXQgdGhpcyBmaWxlIGJ5IGluc2VydGluZyAiI2luY2x1ZGUgIiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdApsaW5lOgoKCSNpbmNsdWRlICJmaWxlLmgiIH4KCS8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgoKWW91IGdvIGRvd24gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lIHVzaW5nIHRoZSBjb21tYW5kcyAial4iLiAgWW91Cm5vdyBzdGFydCB0byBpbnNlcnQgYSBuZXcgIiNpbmNsdWRlIiBsaW5lLiAgU28geW91IHR5cGU6ID4KCglpIENUUkwtQQoKVGhlIHJlc3VsdCBpcyBhcyBmb2xsb3dzOgoKCSNpbmNsdWRlICJmaWxlLmgiIH4KCSNpbmNsdWRlIC8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgoKVGhlICIjaW5jbHVkZSAiIHdhcyBpbnNlcnRlZCBiZWNhdXNlIENUUkwtQSBpbnNlcnRzIHRoZSB0ZXh0IG9mIHRoZSBwcmV2aW91cwppbnNlcnQuICBOb3cgeW91IHR5cGUgICJtYWluLmgiPEVudGVyPiAgdG8gZmluaXNoIHRoZSBsaW5lOgoKCgkjaW5jbHVkZSAiZmlsZS5oIiB+CgkjaW5jbHVkZSAibWFpbi5oIiB+CgkvKiBNYWluIHByb2dyYW0gYmVnaW5zICovIH4KClRoZSBDVFJMLUAgY29tbWFuZCBkb2VzIGEgQ1RSTC1BIGFuZCB0aGVuIGV4aXRzIEluc2VydCBtb2RlLiAgVGhhdCdzIGEgcXVpY2sKd2F5IG9mIGRvaW5nIGV4YWN0bHkgdGhlIHNhbWUgaW5zZXJ0aW9uIGFnYWluLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC41KglDb3B5aW5nIGZyb20gYW5vdGhlciBsaW5lCgpUaGUgQ1RSTC1ZIGNvbW1hbmQgaW5zZXJ0cyB0aGUgY2hhcmFjdGVyIGFib3ZlIHRoZSBjdXJzb3IuICBUaGlzIGlzIHVzZWZ1bAp3aGVuIHlvdSBhcmUgZHVwbGljYXRpbmcgYSBwcmV2aW91cyBsaW5lLiAgRm9yIGV4YW1wbGUsIHlvdSBoYXZlIHRoaXMgbGluZSBvZgpDIGNvZGU6CgoJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CgpOb3cgeW91IG5lZWQgdG8gdHlwZSB0aGUgc2FtZSBsaW5lLCBidXQgd2l0aCAic19wcmV2IiBpbnN0ZWFkIG9mICJzX25leHQiLgpTdGFydCB0aGUgbmV3IGxpbmUsIGFuZCBwcmVzcyBDVFJMLVkgMTQgdGltZXMsIHVudGlsIHlvdSBhcmUgYXQgdGhlICJuIiBvZgoibmV4dCI6CgoJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CgliX2FycmF5W2ldLT5zXyB+CgpOb3cgeW91IHR5cGUgInByZXYiOgoKCWJfYXJyYXlbaV0tPnNfbmV4dCA9IGFfYXJyYXlbaV0tPnNfbmV4dDsgfgoJYl9hcnJheVtpXS0+c19wcmV2IH4KCkNvbnRpbnVlIHByZXNzaW5nIENUUkwtWSB1bnRpbCB0aGUgZm9sbG93aW5nICJuZXh0IjoKCgliX2FycmF5W2ldLT5zX25leHQgPSBhX2FycmF5W2ldLT5zX25leHQ7IH4KCWJfYXJyYXlbaV0tPnNfcHJldiA9IGFfYXJyYXlbaV0tPnNfIH4KCk5vdyB0eXBlICJwcmV2OyIgdG8gZmluaXNoIGl0IG9mZi4KClRoZSBDVFJMLUUgY29tbWFuZCBhY3RzIGxpa2UgQ1RSTC1ZIGV4Y2VwdCBpdCBpbnNlcnRzIHRoZSBjaGFyYWN0ZXIgYmVsb3cgdGhlCmN1cnNvci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqMjQuNioJSW5zZXJ0aW5nIGEgcmVnaXN0ZXIKClRoZSBjb21tYW5kIENUUkwtUiB7cmVnaXN0ZXJ9IGluc2VydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3Rlci4gIFRoaXMgaXMKdXNlZnVsIHRvIGF2b2lkIGhhdmluZyB0byB0eXBlIGEgbG9uZyB3b3JkLiAgRm9yIGV4YW1wbGUsIHlvdSBuZWVkIHRvIHR5cGUKdGhpczoKCglyID0gVmVyeUxvbmdGdW5jdGlvbihhKSArIFZlcnlMb25nRnVuY3Rpb24oYikgKyBWZXJ5TG9uZ0Z1bmN0aW9uKGMpIH4KClRoZSBmdW5jdGlvbiBuYW1lIGlzIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgZmlsZS4gIEVkaXQgdGhhdCBmaWxlIGFuZCBtb3ZlIHRoZQpjdXJzb3Igb24gdG9wIG9mIHRoZSBmdW5jdGlvbiBuYW1lIHRoZXJlLCBhbmQgeWFuayBpdCBpbnRvIHJlZ2lzdGVyIHY6ID4KCgkidnlpdwoKInYgaXMgdGhlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24sICJ5aXciIGlzIHlhbmstaW5uZXItd29yZC4gIE5vdyBlZGl0IHRoZSBmaWxlCndoZXJlIHRoZSBuZXcgbGluZSBpcyB0byBiZSBpbnNlcnRlZCwgYW5kIHR5cGUgdGhlIGZpcnN0IGxldHRlcnM6CgoJciA9IH4KCk5vdyB1c2UgQ1RSTC1SIHYgdG8gaW5zZXJ0IHRoZSBmdW5jdGlvbiBuYW1lOgoKCXIgPSBWZXJ5TG9uZ0Z1bmN0aW9uIH4KCllvdSBjb250aW51ZSB0byB0eXBlIHRoZSBjaGFyYWN0ZXJzIGluIGJldHdlZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIGFuZCB1c2UKQ1RSTC1SIHYgdHdvIHRpbWVzIG1vcmUuCiAgIFlvdSBjb3VsZCBoYXZlIGRvbmUgdGhlIHNhbWUgd2l0aCBjb21wbGV0aW9uLiAgVXNpbmcgYSByZWdpc3RlciBpcyB1c2VmdWwKd2hlbiB0aGVyZSBhcmUgbWFueSB3b3JkcyB0aGF0IHN0YXJ0IHdpdGggdGhlIHNhbWUgY2hhcmFjdGVycy4KCklmIHRoZSByZWdpc3RlciBjb250YWlucyBjaGFyYWN0ZXJzIHN1Y2ggYXMgPEJTPiBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCnRoZXkgYXJlIGludGVycHJldGVkIGFzIGlmIHRoZXkgaGFkIGJlZW4gdHlwZWQgZnJvbSB0aGUga2V5Ym9hcmQuICBJZiB5b3UgZG8Kbm90IHdhbnQgdGhpcyB0byBoYXBwZW4gKHlvdSByZWFsbHkgd2FudCB0aGUgPEJTPiB0byBiZSBpbnNlcnRlZCBpbiB0aGUgdGV4dCksCnVzZSB0aGUgY29tbWFuZCBDVFJMLVIgQ1RSTC1SIHtyZWdpc3Rlcn0uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjcqCUFiYnJldmlhdGlvbnMKCkFuIGFiYnJldmlhdGlvbiBpcyBhIHNob3J0IHdvcmQgdGhhdCB0YWtlcyB0aGUgcGxhY2Ugb2YgYSBsb25nIG9uZS4gIEZvcgpleGFtcGxlLCAiYWQiIHN0YW5kcyBmb3IgImFkdmVydGlzZW1lbnQiLiAgVmltIGVuYWJsZXMgeW91IHRvIHR5cGUgYW4KYWJicmV2aWF0aW9uIGFuZCB0aGVuIHdpbGwgYXV0b21hdGljYWxseSBleHBhbmQgaXQgZm9yIHlvdS4KICAgVG8gdGVsbCBWaW0gdG8gZXhwYW5kICJhZCIgaW50byAiYWR2ZXJ0aXNlbWVudCIgZXZlcnkgdGltZSB5b3UgaW5zZXJ0IGl0LAp1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CgoJOmlhYmJyZXYgYWQgYWR2ZXJ0aXNlbWVudAoKTm93LCB3aGVuIHlvdSB0eXBlICJhZCIsIHRoZSB3aG9sZSB3b3JkICJhZHZlcnRpc2VtZW50IiB3aWxsIGJlIGluc2VydGVkIGludG8KdGhlIHRleHQuICBUaGlzIGlzIHRyaWdnZXJlZCBieSB0eXBpbmcgYSBjaGFyYWN0ZXIgdGhhdCBjYW4ndCBiZSBwYXJ0IG9mIGEKd29yZCwgZm9yIGV4YW1wbGUgYSBzcGFjZToKCglXaGF0IElzIEVudGVyZWQJCVdoYXQgWW91IFNlZQoJSSBzYXcgdGhlIGEJCUkgc2F3IHRoZSBhIH4KCUkgc2F3IHRoZSBhZAkJSSBzYXcgdGhlIGFkIH4KCUkgc2F3IHRoZSBhZDxTcGFjZT4JSSBzYXcgdGhlIGFkdmVydGlzZW1lbnQ8U3BhY2U+IH4KClRoZSBleHBhbnNpb24gZG9lc24ndCBoYXBwZW4gd2hlbiB0eXBpbmcganVzdCAiYWQiLiAgVGhhdCBhbGxvd3MgeW91IHRvIHR5cGUgYQp3b3JkIGxpa2UgImFkZCIsIHdoaWNoIHdpbGwgbm90IGdldCBleHBhbmRlZC4gIE9ubHkgd2hvbGUgd29yZHMgYXJlIGNoZWNrZWQKZm9yIGFiYnJldmlhdGlvbnMuCgoKQUJCUkVWSUFUSU5HIFNFVkVSQUwgV09SRFMKCkl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSBhbiBhYmJyZXZpYXRpb24gdGhhdCByZXN1bHRzIGluIG11bHRpcGxlIHdvcmRzLiAgRm9yCmV4YW1wbGUsIHRvIGRlZmluZSAiSkIiIGFzICJKYWNrIEJlbm55IiwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgoKCTppYWJicmV2IEpCIEphY2sgQmVubnkKCkFzIGEgcHJvZ3JhbW1lciwgSSB1c2UgdHdvIHJhdGhlciB1bnVzdWFsIGFiYnJldmlhdGlvbnM6ID4KCgk6aWFiYnJldiAjYiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJOmlhYmJyZXYgI2UgPFNwYWNlPioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpUaGVzZSBhcmUgdXNlZCBmb3IgY3JlYXRpbmcgYm94ZWQgY29tbWVudHMuICBUaGUgY29tbWVudCBzdGFydHMgd2l0aCAjYiwgd2hpY2gKZHJhd3MgdGhlIHRvcCBsaW5lLiAgSSB0aGVuIHR5cGUgdGhlIGNvbW1lbnQgdGV4dCBhbmQgdXNlICNlIHRvIGRyYXcgdGhlCmJvdHRvbSBsaW5lLgogICBOb3RpY2UgdGhhdCB0aGUgI2UgYWJicmV2aWF0aW9uIGJlZ2lucyB3aXRoIGEgc3BhY2UuICBJbiBvdGhlciB3b3JkcywgdGhlCmZpcnN0IHR3byBjaGFyYWN0ZXJzIGFyZSBzcGFjZS1zdGFyLiAgVXN1YWxseSBWaW0gaWdub3JlcyBzcGFjZXMgYmV0d2VlbiB0aGUKYWJicmV2aWF0aW9uIGFuZCB0aGUgZXhwYW5zaW9uLiAgVG8gYXZvaWQgdGhhdCBwcm9ibGVtLCBJIHNwZWxsIHNwYWNlIGFzIHNldmVuCmNoYXJhY3RlcnM6IDwsIFMsIHAsIGEsIGMsIGUsID4uCgoJTm90ZToKCSI6aWFiYnJldiIgaXMgYSBsb25nIHdvcmQgdG8gdHlwZS4gICI6aWFiIiB3b3JrcyBqdXN0IGFzIHdlbGwuCglUaGF0J3MgYWJicmV2aWF0aW5nIHRoZSBhYmJyZXZpYXRlIGNvbW1hbmQhCgoKRklYSU5HIFRZUElORyBNSVNUQUtFUwoKSXQncyB2ZXJ5IGNvbW1vbiB0byBtYWtlIHRoZSBzYW1lIHR5cGluZyBtaXN0YWtlIGV2ZXJ5IHRpbWUuICBGb3IgZXhhbXBsZSwKdHlwaW5nICJ0ZWgiIGluc3RlYWQgb2YgInRoZSIuICBZb3UgY2FuIGZpeCB0aGlzIHdpdGggYW4gYWJicmV2aWF0aW9uOiA+CgoJOmFiYnJldmlhdGUgdGVoIHRoZQoKWW91IGNhbiBhZGQgYSB3aG9sZSBsaXN0IG9mIHRoZXNlLiAgQWRkIG9uZSBlYWNoIHRpbWUgeW91IGRpc2NvdmVyIGEgY29tbW9uCm1pc3Rha2UuCgoKTElTVElORyBBQkJSRVZJQVRJT05TCgpUaGUgIjphYmJyZXZpYXRlIiBjb21tYW5kIGxpc3RzIHRoZSBhYmJyZXZpYXRpb25zOgoKCTphYmJyZXZpYXRlCglpICAjZQkJICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoJaSAgI2IJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJaSAgSkIJCSBKYWNrIEJlbm55CglpICBhZAkJIGFkdmVydGlzZW1lbnQKCSEgIHRlaAkJIHRoZQoKVGhlICJpIiBpbiB0aGUgZmlyc3QgY29sdW1uIGluZGljYXRlcyBJbnNlcnQgbW9kZS4gIFRoZXNlIGFiYnJldmlhdGlvbnMgYXJlCm9ubHkgYWN0aXZlIGluIEluc2VydCBtb2RlLiAgT3RoZXIgcG9zc2libGUgY2hhcmFjdGVycyBhcmU6CgoJYwlDb21tYW5kLWxpbmUgbW9kZQkJCTpjYWJicmV2CgkhCWJvdGggSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZQk6YWJicmV2aWF0ZQoKU2luY2UgYWJicmV2aWF0aW9ucyBhcmUgbm90IG9mdGVuIHVzZWZ1bCBpbiBDb21tYW5kLWxpbmUgbW9kZSwgeW91IHdpbGwgbW9zdGx5CnVzZSB0aGUgIjppYWJicmV2IiBjb21tYW5kLiAgVGhhdCBhdm9pZHMsIGZvciBleGFtcGxlLCB0aGF0ICJhZCIgZ2V0cyBleHBhbmRlZAp3aGVuIHR5cGluZyBhIGNvbW1hbmQgbGlrZTogPgoKCTplZGl0IGFkCgoKREVMRVRJTkcgQUJCUkVWSUFUSU9OUwoKVG8gZ2V0IHJpZCBvZiBhbiBhYmJyZXZpYXRpb24sIHVzZSB0aGUgIjp1bmFiYnJldmlhdGUiIGNvbW1hbmQuICBTdXBwb3NlIHlvdQpoYXZlIHRoZSBmb2xsb3dpbmcgYWJicmV2aWF0aW9uOiA+CgoJOmFiYnJldmlhdGUgQGYgZnJlc2gKCllvdSBjYW4gcmVtb3ZlIGl0IHdpdGggdGhpcyBjb21tYW5kOiA+CgoJOnVuYWJicmV2aWF0ZSBAZgoKV2hpbGUgeW91IHR5cGUgdGhpcywgeW91IHdpbGwgbm90aWNlIHRoYXQgQGYgaXMgZXhwYW5kZWQgdG8gImZyZXNoIi4gIERvbid0CndvcnJ5IGFib3V0IHRoaXMsIFZpbSB1bmRlcnN0YW5kcyBpdCBhbnl3YXkgKGV4Y2VwdCB3aGVuIHlvdSBoYXZlIGFuCmFiYnJldmlhdGlvbiBmb3IgImZyZXNoIiwgYnV0IHRoYXQncyB2ZXJ5IHVubGlrZWx5KS4KICAgVG8gcmVtb3ZlIGFsbCB0aGUgYWJicmV2aWF0aW9uczogPgoKCTphYmNsZWFyCgoiOnVuYWJicmV2aWF0ZSIgYW5kICI6YWJjbGVhciIgYWxzbyBjb21lIGluIHRoZSB2YXJpYW50cyBmb3IgSW5zZXJ0IG1vZGUKKCI6aXVuYWJicmV2aWF0ZSBhbmQgIjppYWJjbGVhciIpIGFuZCBDb21tYW5kLWxpbmUgbW9kZSAoIjpjdW5hYmJyZXZpYXRlIiBhbmQKIjpjYWJjbGVhciIpLgoKClJFTUFQUElORyBBQkJSRVZJQVRJT05TCgpUaGVyZSBpcyBvbmUgdGhpbmcgdG8gd2F0Y2ggb3V0IGZvciB3aGVuIGRlZmluaW5nIGFuIGFiYnJldmlhdGlvbjogVGhlCnJlc3VsdGluZyBzdHJpbmcgc2hvdWxkIG5vdCBiZSBtYXBwZWQuICBGb3IgZXhhbXBsZTogPgoKCTphYmJyZXZpYXRlIEBhIGFkZGVyCgk6aW1hcCBkZCBkaXNrLWRvb3IKCldoZW4geW91IG5vdyB0eXBlIEBhLCB5b3Ugd2lsbCBnZXQgImFkaXNrLWRvb3JlciIuICBUaGF0J3Mgbm90IHdoYXQgeW91IHdhbnQuClRvIGF2b2lkIHRoaXMsIHVzZSB0aGUgIjpub3JlYWJicmV2IiBjb21tYW5kLiAgSXQgZG9lcyB0aGUgc2FtZSBhcwoiOmFiYnJldmlhdGUiLCBidXQgYXZvaWRzIHRoYXQgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgdXNlZCBmb3IgbWFwcGluZ3M6ID4KCgk6bm9yZWFiYnJldiBAYSBhZGRlcgoKRm9ydHVuYXRlbHksIGl0J3MgdW5saWtlbHkgdGhhdCB0aGUgcmVzdWx0IG9mIGFuIGFiYnJldmlhdGlvbiBpcyBtYXBwZWQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjgqCUVudGVyaW5nIHNwZWNpYWwgY2hhcmFjdGVycwoKVGhlIENUUkwtViBjb21tYW5kIGlzIHVzZWQgdG8gaW5zZXJ0IHRoZSBuZXh0IGNoYXJhY3RlciBsaXRlcmFsbHkuICBJbiBvdGhlcgp3b3JkcywgYW55IHNwZWNpYWwgbWVhbmluZyB0aGUgY2hhcmFjdGVyIGhhcywgaXQgd2lsbCBiZSBpZ25vcmVkLiAgRm9yCmV4YW1wbGU6ID4KCglDVFJMLVYgPEVzYz4KCkluc2VydHMgYW4gZXNjYXBlIGNoYXJhY3Rlci4gIFRodXMgeW91IGRvbid0IGxlYXZlIEluc2VydCBtb2RlLiAgKERvbid0IHR5cGUKdGhlIHNwYWNlIGFmdGVyIENUUkwtViwgaXQncyBvbmx5IHRvIG1ha2UgdGhpcyBlYXNpZXIgdG8gcmVhZCkuCgoJTm90ZToKCU9uIE1TLVdpbmRvd3MgQ1RSTC1WIGlzIHVzZWQgdG8gcGFzdGUgdGV4dC4gIFVzZSBDVFJMLVEgaW5zdGVhZCBvZgoJQ1RSTC1WLiAgT24gVW5peCwgb24gdGhlIG90aGVyIGhhbmQsIENUUkwtUSBkb2VzIG5vdCB3b3JrIG9uIHNvbWUKCXRlcm1pbmFscywgYmVjYXVzZSBpdCBoYXMgYSBzcGVjaWFsIG1lYW5pbmcuCgpZb3UgY2FuIGFsc28gdXNlIHRoZSBjb21tYW5kIENUUkwtViB7ZGlnaXRzfSB0byBpbnNlcnQgYSBjaGFyYWN0ZXIgd2l0aCB0aGUKZGVjaW1hbCBudW1iZXIge2RpZ2l0c30uICBGb3IgZXhhbXBsZSwgdGhlIGNoYXJhY3RlciBudW1iZXIgMTI3IGlzIHRoZSA8RGVsPgpjaGFyYWN0ZXIgKGJ1dCBub3QgbmVjZXNzYXJpbHkgdGhlIDxEZWw+IGtleSEpLiAgVG8gaW5zZXJ0IDxEZWw+IHR5cGU6ID4KCglDVFJMLVYgMTI3CgpZb3UgY2FuIGVudGVyIGNoYXJhY3RlcnMgdXAgdG8gMjU1IHRoaXMgd2F5LiAgV2hlbiB5b3UgdHlwZSBmZXdlciB0aGFuIHR3bwpkaWdpdHMsIGEgbm9uLWRpZ2l0IHdpbGwgdGVybWluYXRlIHRoZSBjb21tYW5kLiAgVG8gYXZvaWQgdGhlIG5lZWQgb2YgdHlwaW5nIGEKbm9uLWRpZ2l0LCBwcmVwZW5kIG9uZSBvciB0d28gemVyb3MgdG8gbWFrZSB0aHJlZSBkaWdpdHMuCiAgIEFsbCB0aGUgbmV4dCBjb21tYW5kcyBpbnNlcnQgYSA8VGFiPiBhbmQgdGhlbiBhIGRvdDoKCglDVFJMLVYgOS4KCUNUUkwtViAwOS4KCUNUUkwtViAwMDkuCgpUbyBlbnRlciBhIGNoYXJhY3RlciBpbiBoZXhhZGVjaW1hbCwgdXNlIGFuICJ4IiBhZnRlciB0aGUgQ1RSTC1WOiA+CgoJQ1RSTC1WIHg3ZgoKVGhpcyBhbHNvIGdvZXMgdXAgdG8gY2hhcmFjdGVyIDI1NSAoQ1RSTC1WIHhmZikuICBZb3UgY2FuIHVzZSAibyIgdG8gdHlwZSBhCmNoYXJhY3RlciBhcyBhbiBvY3RhbCBudW1iZXIgYW5kIHR3byBtb3JlIG1ldGhvZHMgYWxsb3cgeW91IHRvIHR5cGUgdXAgdG8KYSAxNiBiaXQgYW5kIGEgMzIgYml0IG51bWJlciAoZS5nLiwgZm9yIGEgVW5pY29kZSBjaGFyYWN0ZXIpOiA+CgoJQ1RSTC1WIG8xMjMKCUNUUkwtViB1MTIzNAoJQ1RSTC1WIFUxMjM0NTY3OAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioyNC45KglEaWdyYXBocwoKU29tZSBjaGFyYWN0ZXJzIGFyZSBub3Qgb24gdGhlIGtleWJvYXJkLiAgRm9yIGV4YW1wbGUsIHRoZSBjb3B5cmlnaHQgY2hhcmFjdGVyCiipKS4gIFRvIHR5cGUgdGhlc2UgY2hhcmFjdGVycyBpbiBWaW0sIHlvdSB1c2UgZGlncmFwaHMsIHdoZXJlIHR3byBjaGFyYWN0ZXJzCnJlcHJlc2VudCBvbmUuICBUbyBlbnRlciBhIKksIGZvciBleGFtcGxlLCB5b3UgcHJlc3MgdGhyZWUga2V5czogPgoKCUNUUkwtSyBDbwoKVG8gZmluZCBvdXQgd2hhdCBkaWdyYXBocyBhcmUgYXZhaWxhYmxlLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CgoJOmRpZ3JhcGhzCgpWaW0gd2lsbCBkaXNwbGF5IHRoZSBkaWdyYXBoIHRhYmxlLiAgSGVyZSBhcmUgdGhyZWUgbGluZXMgb2YgaXQ6CgogIEFDIH5fIDE1OSAgTlMgfCAgMTYwICAhSSChICAxNjEgIEN0IKIgIDE2MiAgUGQgoyAgMTYzICBDdSCkICAxNjQgIFllIKUgIDE2NSB+CiAgQkIgpiAgMTY2ICBTRSCnICAxNjcgICc6IKggIDE2OCAgQ28gqSAgMTY5ICAtYSCqICAxNzAgIDw8IKsgIDE3MSAgTk8grCAgMTcyIH4KICAtLSCtICAxNzMgIFJnIK4gIDE3NCAgJ20gryAgMTc1ICBERyCwICAxNzYgICstILEgIDE3NyAgMlMgsiAgMTc4ICAzUyCzICAxNzkgfgoKVGhpcyBzaG93cywgZm9yIGV4YW1wbGUsIHRoYXQgdGhlIGRpZ3JhcGggeW91IGdldCBieSB0eXBpbmcgQ1RSTC1LIFBkIGlzIHRoZQpjaGFyYWN0ZXIgKKMpLiAgVGhpcyBpcyBjaGFyYWN0ZXIgbnVtYmVyIDE2MyAoZGVjaW1hbCkuCiAgIFBkIGlzIHNob3J0IGZvciBQb3VuZC4gIE1vc3QgZGlncmFwaHMgYXJlIHNlbGVjdGVkIHRvIGdpdmUgeW91IGEgaGludCBhYm91dAp0aGUgY2hhcmFjdGVyIHRoZXkgd2lsbCBwcm9kdWNlLiAgSWYgeW91IGxvb2sgdGhyb3VnaCB0aGUgbGlzdCB5b3Ugd2lsbAp1bmRlcnN0YW5kIHRoZSBsb2dpYy4KICAgWW91IGNhbiBleGNoYW5nZSB0aGUgZmlyc3QgYW5kIHNlY29uZCBjaGFyYWN0ZXIsIGlmIHRoZXJlIGlzIG5vIGRpZ3JhcGggZm9yCnRoYXQgY29tYmluYXRpb24uICBUaHVzIENUUkwtSyBkUCBhbHNvIHdvcmtzLiAgU2luY2UgdGhlcmUgaXMgbm8gZGlncmFwaCBmb3IKImRQIiBWaW0gd2lsbCBhbHNvIHNlYXJjaCBmb3IgYSAiUGQiIGRpZ3JhcGguCgoJTm90ZToKCVRoZSBkaWdyYXBocyBkZXBlbmQgb24gdGhlIGNoYXJhY3RlciBzZXQgdGhhdCBWaW0gYXNzdW1lcyB5b3UgYXJlCgl1c2luZy4gIE9uIE1TLURPUyB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBNUy1XaW5kb3dzLiAgQWx3YXlzIHVzZQoJIjpkaWdyYXBocyIgdG8gZmluZCBvdXQgd2hpY2ggZGlncmFwaHMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUuCgpZb3UgY2FuIGRlZmluZSB5b3VyIG93biBkaWdyYXBocy4gIEV4YW1wbGU6ID4KCgk6ZGlncmFwaCBhIiDkCgpUaGlzIGRlZmluZXMgdGhhdCBDVFJMLUsgYSIgaW5zZXJ0cyBhbiDkIGNoYXJhY3Rlci4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZQpjaGFyYWN0ZXIgd2l0aCBhIGRlY2ltYWwgbnVtYmVyLiAgVGhpcyBkZWZpbmVzIHRoZSBzYW1lIGRpZ3JhcGg6ID4KCgk6ZGlncmFwaCBhIiAyMjgKCk1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGlncmFwaHMgaGVyZTogfGRpZ3JhcGhzfAogICBBbm90aGVyIHdheSB0byBpbnNlcnQgc3BlY2lhbCBjaGFyYWN0ZXJzIGlzIHdpdGggYSBrZXltYXAuICBNb3JlIGFib3V0IHRoYXQKaGVyZTogfDQ1LjV8Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKjI0LjEwKglOb3JtYWwgbW9kZSBjb21tYW5kcwoKSW5zZXJ0IG1vZGUgb2ZmZXJzIGEgbGltaXRlZCBudW1iZXIgb2YgY29tbWFuZHMuICBJbiBOb3JtYWwgbW9kZSB5b3UgaGF2ZSBtYW55Cm1vcmUuICBXaGVuIHlvdSB3YW50IHRvIHVzZSBvbmUsIHlvdSB1c3VhbGx5IGxlYXZlIEluc2VydCBtb2RlIHdpdGggPEVzYz4sCmV4ZWN1dGUgdGhlIE5vcm1hbCBtb2RlIGNvbW1hbmQsIGFuZCByZS1lbnRlciBJbnNlcnQgbW9kZSB3aXRoICJpIiBvciAiYSIuCiAgIFRoZXJlIGlzIGEgcXVpY2tlciB3YXkuICBXaXRoIENUUkwtTyB7Y29tbWFuZH0geW91IGNhbiBleGVjdXRlIGFueSBOb3JtYWwKbW9kZSBjb21tYW5kIGZyb20gSW5zZXJ0IG1vZGUuICBGb3IgZXhhbXBsZSwgdG8gZGVsZXRlIGZyb20gdGhlIGN1cnNvciB0byB0aGUKZW5kIG9mIHRoZSBsaW5lOiA+CgoJQ1RSTC1PIEQKCllvdSBjYW4gZXhlY3V0ZSBvbmx5IG9uZSBOb3JtYWwgbW9kZSBjb21tYW5kIHRoaXMgd2F5LiAgQnV0IHlvdSBjYW4gc3BlY2lmeSBhCnJlZ2lzdGVyIG9yIGEgY291bnQuICBBIG1vcmUgY29tcGxpY2F0ZWQgZXhhbXBsZTogPgoKCUNUUkwtTyAiZzNkdwoKVGhpcyBkZWxldGVzIHVwIHRvIHRoZSB0aGlyZCB3b3JkIGludG8gcmVnaXN0ZXIgZy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKTmV4dCBjaGFwdGVyOiB8dXNyXzI1LnR4dHwgIEVkaXRpbmcgZm9ybWF0dGVkIHRleHQKCkNvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgo=