ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWxvZwoKVmVyc2lvbiA3LjE5LjQgKDMgTWFyY2ggMjAwOSkKCkRhbmllbCBTdGVuYmVyZyAoMyBNYXIgMjAwOSkKLSBEYXZpZCBLaWVyem5vd3NraSBub3RpZmllZCB1cyBhYm91dCBhIHNlY3VyaXR5IGZsYXcKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2Fkdl8yMDA5MDMwMy5odG1sIGFsc28ga25vd24gYXMgQ1ZFLTIwMDktMDAzNykgaW4KICB3aGljaCBwcmV2aW91cyBsaWJjdXJsIHZlcnNpb25zIChieSBkZXNpZ24pIGNhbiBiZSB0cmlja2VkIHRvIGFjY2VzcyBhbgogIGFyYml0cmFyeSBsb2NhbC9kaWZmZXJlbnQgZmlsZSBpbnN0ZWFkIG9mIGEgcmVtb3RlIG9uZSB3aGVuCiAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBpcyBlbmFibGVkLiBUaGlzIGZsYXcgaXMgbm93IGZpeGVkIGluIHRoaXMgcmVsZWFzZQogIHRvZ2V0aGVyIHRoaXMgdGhlIGFkZGl0aW9uIG9mIHR3byBuZXcgc2V0b3B0IG9wdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHRoaXMKICBuZXcgYmVoYXZpb3I6CgogIG8gQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMgY29udHJvbHMgd2hhdCBwcm90b2NvbHMgbGliY3VybCBpcyBhbGxvd2VkIHRvCiAgZm9sbG93IHRvIHdoZW4gQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBpcyBlbmFibGVkLiBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbgogIGV4Y2x1ZGVzIHRoZSBGSUxFIGFuZCBTQ1AgcHJvdG9jb2xzIGFuZCB0aHVzIHlvdSBuZWUgdG8gZXhwbGljaXRseSBhbGxvdwogIHRoZW0gaW4geW91ciBhcHAgaWYgeW91IHJlYWxseSB3YW50IHRoYXQgYmVoYXZpb3IuCgogIG8gQ1VSTE9QVF9QUk9UT0NPTFMgY29udHJvbHMgd2hhdCBwcm90b2NvbChzKSBsaWJjdXJsIGlzIGFsbG93ZWQgdG8gZmV0Y2gKICB1c2luZyB0aGUgcHJpbWFyeSBVUkwgb3B0aW9uLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBhbGxvdyBhIHVzZXIgb3IKICBvdGhlciBvdXRzaWRlcnMgY29udHJvbCB3aGF0IFVSTCB0byBwYXNzIHRvIGxpYmN1cmwgYW5kIHlldCBub3QgYWxsb3cgYWxsCiAgcHJvdG9jb2xzIGxpYmN1cmwgbWF5IGhhdmUgYmVlbiBidWlsdCB0byBzdXBwb3J0LgoKRGFuaWVsIFN0ZW5iZXJnICgyNyBGZWIgMjAwOSkKLSBTZW50aGlsIFJhamEgVmVsdSByZXBvcnRlZCBhIHByb2JsZW0gd2hlbiBDVVJMT1BUX0lOVEVSRkFDRSBhbmQKICBDVVJMT1BUX0xPQ0FMUE9SVCB3ZXJlIHVzZWQgdG9nZXRoZXIgKHRoZSBsb2NhbCBwb3J0IGJpbmQgZmFpbGVkKSwgYW5kCiAgTWFya3VzIEtvZXR0ZXIgcHJvdmlkZWQgdGhlIGZpeCEKCkRhbmllbCBTdGVuYmVyZyAoMjUgRmViIDIwMDkpCi0gQXMgRGFuaWVsIEZhbmRyaWNoIGZpZ3VyZWQgb3V0LCB3ZSBtdXN0IGRvIHRoZSBHbnVUTFMgaW5pdGluZyBpbiB0aGUKICBjdXJsX2dsb2JhbF9pbml0KCkgZnVuY3Rpb24gdG8gcHJvcGVybHkgbWFpbnRhaW4gdGhlIHBlcmZvcm1pbmcgZnVuY3Rpb25zCiAgdGhyZWFkLXNhZmUuIFdlJ3ZlIHByZXZpb3VzbHkgKDI4IEFwcmlsIDIwMDcpIG1vdmVkIHRoZSBpbml0IHRvIGEgbGF0ZXIgdGltZQogIGp1c3QgdG8gYXZvaWQgaXQgdG8gZmFpbCB2ZXJ5IGVhcmx5IHdoZW4gbGliZ2NyeXB0IGRpc2xpa2VzIHRoZSBzaXR1YXRpb24sCiAgYnV0IHRoYXQgbW92ZSB3YXMgYmFkIGFuZCB0aGUgZml4IHNob3VsZCByYXRoZXIgYmUgaW4gbGliZ2NyeXB0IG9yCiAgZWxzZXdoZXJlLgogIApEYW5pZWwgU3RlbmJlcmcgKDI0IEZlYiAyMDA5KQotIEJyaWFuIEouIE11cnJlbGwgZm91bmQgb3V0IHRoYXQgTmVnb3RpYXRlIHByb3h5IGF1dGhlbnRpY2F0aW9uIGRpZG4ndCB3b3JrLgogIEl0IGhhcHBlbmVkIGJlY2F1c2UgdGhlIGNvZGUgdXNlZCB0aGUgc3RydWN0IGZvciBzZXJ2ZXItYmFzZWQgYXV0aCBhbGwgdGhlCiAgdGltZSBmb3IgYm90aCBwcm94eSBhbmQgc2VydmVyIGF1dGggd2hpY2ggb2YgY291cnNlIHdhcyB3cm9uZy4KCkRhbmllbCBTdGVuYmVyZyAoMjMgRmViIDIwMDkpCi0gQWZ0ZXIgYSBidWcgcmVwb3J0ZWQgYnkgSmFtZXMgQ2hlbmcgSSd2ZSBtYWRlIGN1cmxfZWFzeV9nZXRpbmZvKCkgZm9yCiAgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQgYW5kIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX1VQTE9BRCByZXR1cm4KICAtMSBpZiB0aGUgc2l6ZXMgYXJlbid0IGtub3cuIFByZXZpb3VzbHkgdGhlc2UgcmV0dXJuZWQgMCwgbWFrZSBpdCBpbXBvc3NpYmxlCiAgdG8gZGV0ZWN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWN0dWFsbHkgemVybyBhbmQgdW5rbm93bi4KCllhbmcgVHNlICgyMyBGZWIgMjAwOSkKLSBEYW5pZWwgSm9obnNvbiBwcm92aWRlZCBhIHNoZWxsIHNjcmlwdCB0aGF0IHdpbGwgcGVyZm9ybSBhbGwgdGhlIHN0ZXBzIG5lZWRlZAogIHRvIGJ1aWxkIGEgTWFjIE9TIFggZmF0IHBwYy9pMzg2IG9yIHBwYzY0L3g4Nl82NCBsaWJjdXJsLmZyYW1ld29yawoKRGFuaWVsIFN0ZW5iZXJnICgyMyBGZWIgMjAwOSkKLSBJIHJlbmFtZWQgZXZlcnl0aGluZyBpbiB0aGUgd2luZG93cyBidWlsZHMgZmlsZXMgdGhhdCB1c2VkIHRoZSBuYW1lICdjdXJsbGliJwogIHRvIHRoZSBwcm9wZXIgJ2xpYmN1cmwnIGFzIGNsZWFybHkgdGhpcyBjYXVzZWQgY29uZnVzaW9uLgoKWWFuZyBUc2UgKDIwIEZlYiAyMDA5KQotIERvIG5vdCBoYWx0IGNvbXBpbGF0aW9uIHdoZW4gdXNpbmcgVlMyMDA4IHRvIGJ1aWxkIGEgV2luZG93cyAyMDAwIHRhcmdldC4KCkRhbmllbCBTdGVuYmVyZyAoMjAgRmViIDIwMDkpCi0gTGludXMgTmllbHNlbiBGZWx0emluZyByZXBvcnRlZCBhbmQgaGVscGVkIG1lIHJlcGVhdCBhbmQgZml4IGEgcHJvYmxlbSB3aXRoCiAgRlRQIHdpdGggdGhlIG11bHRpIGludGVyZmFjZTogd2hlbiBhIHRyYW5zZmVyIGZhaWxzLCBsaWtlIHdoZW4gYWJvcnRlZCBieSBhCiAgd3JpdGUgY2FsbGJhY2ssIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gd2FzIHdyb25nbHkgY2xvc2VkIGFuZCB0aHVzIG5vdAogIHJlLXVzZWQgcHJvcGVybHkuCgogIFRoaXMgY2hhbmdlIGlzIGFsc28gYW4gYXR0ZW1wdCB0byBjbGVhbnVwIHRoZSBjb2RlIHNvbWV3aGF0IGluIHRoaXMgYXJlYSwgYXMKICBub3cgdGhlIEZUUCBjb2RlIGF0dGVtcHRzIHRvIGtlZXAgKGJldHRlcikgdHJhY2sgb24gcGVuZGluZyByZXNwb25zZXMKICBuZWNlc3NhcnkgdG8gZ2V0IHJlYWQgaW4gZnRwX2RvbmUoKS4KCkRhbmllbCBTdGVuYmVyZyAoMTkgRmViIDIwMDkpCi0gUGF0cmlrIFRodW5zdHJvbSByZXBvcnRlZCBhIHByb2JsZW0gYW5kIGhlbHBlZCBtZSByZXBlYXQgaXQuIEl0IHR1cm5lZCBvdXQgCiAgbGliY3VybCBkaWQgYSBzdXBlcmZsdW91cyAxMDAwbXMgd2FpdCB3aGVuIGRvaW5nIFNGVFAgZG93bmxvYWRzIQoKICBXZSByZWFkIGRhdGEgd2l0aCBsaWJzc2gyIHdoaWxlIGRvaW5nIHRoZSAiRE8iIG9wZXJhdGlvbiBmb3IgU0ZUUCBhbmQgdGhlbgogIHdoZW4gd2Ugd2VyZSBhYm91dCB0byBzdGFydCBnZXR0aW5nIGRhdGEgZm9yIHRoZSBhY3R1YWwgZmlsZSBwYXJ0LCB0aGUKICAiVFJBTlNGRVIiIHBhcnQsIHdlIHdhaXRlZCBmb3Igc29ja2V0IGFjdGlvbiAoaW4gMTAwMG1zKSBiZWZvcmUgZG9pbmcgYQogIGxpYnNzaDItcmVhZC4gQnV0IGluIHRoaXMgY2FzZSBsaWJzc2gyIGhhZCBhbHJlYWR5IHJlYWQgYW5kIGJ1ZmZlcmVkIHRoZQogIGRhdGEgc28gd2UgZW5kZWQgdXAgYWx3YXlzIGp1c3Qgd2FpdGluZyAxMDAwbXMgYmVmb3JlIHdlIGdldCB3b3JraW5nIG9uIHRoZQogIGRhdGEhCgpQYXRyaWNrIE1vbm5lcmF0ICgxOCBGZWIgMjAwOSkKLSBGVFAgZG93bmxvYWRzIChpLmUuOiBSRVRSKSBlbmRpbmcgd2l0aCBjb2RlIDU1MCBub3cgcmV0dXJuIGVycm9yCiAgQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EIGluc3RlYWQgb2YgQ1VSTEVfRlRQX0NPVUxETlRfUkVUUl9GSUxFLgoKRGFuaWVsIFN0ZW5iZXJnICgxNyBGZWIgMjAwOSkKLSBLYW1pbCBEdWRrYSBtYWRlIE5TUy1wb3dlcmVkIGJ1aWxkcyBjb21waWxlIGFuZCBydW4gYWdhaW4hCgotIEEgc2Vjb25kIGZvbGxvdy11cCBjaGFuZ2UgYnkgQW5kcmUgR3VpYmVydCBkZSBCcnVldCB0byBmaXggYSByZWxhdGVkIG1lbW9yeQogIGxlYWsgbGlrZSB0aGF0IGZpeGVkIG9uIHRoZSAxNHRoLiBXaGVuIHpsaWIgcmV0dXJucyBmYWlsdXJlLCB3ZSBuZWVkIHRvCiAgY2xlYW51cCBwcm9wZXJseSBiZWZvcmUgcmV0dXJuaW5nIGVycm9yLgoKLSBDVVJMT1BUX0ZUUF9DUkVBVEVfTUlTU0lOR19ESVJTIGNhbiBub3cgYmUgc2V0IHRvIDIgaW4gYWRkaXRpb24gdG8gMSBmb3IKICBwbGFpbiBGVFAgY29ubmVjdGlvbnMsIGFuZCBpdCB3aWxsIHRoZW4gYWxsb3cgTUtEIHRvIGZhaWwgb25jZSBhbmQgcmV0cnkgdGhlCiAgQ1dEIGFmdGVyd2FyZHMuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaWYgeW91J3JlIGRvaW5nIG1hbnkgc2ltdWx0YW5vZXMKICBjb25uZWN0aW9ucyBhZ2FpbnN0IHRoZSBzYW1lIHNlcnZlciBhbmQgdGhleSBhbGwgaGF2ZSB0aGlzIG9wdGlvbiBlbmFibGVkLAogIGFzIHRoZW4gQ1dEIG1heSBmaXJzdCBmYWlsIGJ1dCB0aGVuIGFub3RoZXIgY29ubmVjdGlvbiBkb2VzIE1LRCBiZWZvcmUgdGhpcwogIGNvbm5lY3Rpb24gYW5kIHRodXMgTUtEIGZhaWxzIGJ1dCB0cnlpbmcgQ1dEIHdvcmtzISBUaGUgbnVtYmVycyBjYW4KICAoc2hvdWxkPykgbm93IGJlIHNldCB3aXRoIHRoZSBjb252ZW5pZW5jZSBlbnVtcyBub3cgY2FsbGVkCiAgQ1VSTEZUUF9DUkVBVEVfRElSIGFuZCBDVVJMRlRQX0NSRUFURV9ESVJfUkVUUlkuCgogIFRlc3RzIGhhcyBwcm92ZW4gdGhhdCBpZiB5b3UncmUgbWFraW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXBsb2FkcyBhIHNldCBvZgogIGZpbGVzIHRvIGFuIGZ0cCBzZXJ2ZXIsIHlvdSB3aWxsIGdldCBhIG5vdGljYWJsZSBnYWluIGluIHNwZWVkIGlmIHlvdSdyZQogIHVzaW5nIG11bHRpcGxlIGNvbm5lY3Rpb25zIGFuZCB0aGlzIG9wdGlvbiB3aWxsIGJlIHRoZW4gYmUgdmVyeSB1c2VmdWwuCgpEYW5pZWwgU3RlbmJlcmcgKDE0IEZlYiAyMDA5KQotIEFuZHJlIEd1aWJlcnQgZGUgQnJ1ZXQgZm91bmQgYW5kIGZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGNvbnRlbnQgZW5jb2RpbmcKICBjb2RlLCB3aGljaCBjb3VsZCBoYXBwZW4gb24gbGlieiBlcnJvcnMuCgpEYW5pZWwgRmFuZHJpY2ggKDEyIEZlYiAyMDA5KQotIEFkZGVkIHN1cHBvcnQgZm9yIERpZ2VzdCBhbmQgTlRMTSBhdXRoZW50aWNhdGlvbiB1c2luZyBHbnVUTFMuCgpEYW5pZWwgU3RlbmJlcmcgKDExIEZlYiAyMDA5KQotIENVUkxJTkZPX0NPTkRJVElPTl9VTk1FVCB3YXMgYWRkZWQgdG8gYWxsb3cgYW4gYXBwbGljYXRpb24gdG8gZ2V0IHRvIGtub3cgaWYKICB0aGUgY29uZGl0aW9uIGluIHRoZSBwcmV2aW91cyByZXF1ZXN0IHdhcyB1bm1ldC4gVGhpcyBpcyB0eXBpY2FsbHkgYSB0aW1lCiAgY29uZGl0aW9uIHNldCB3aXRoIENVUkxPUFRfVElNRUNPTkRJVElPTiBhbmQgd2FzIHByZXZpb3VzbHkgbm90IHBvc3NpYmxlIHRvCiAgcmVsaWFibHkgZmlndXJlIG91dC4gRnJvbSBidWcgcmVwb3J0ICMyNTY1MTI4CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTI1NjUxMjgpIGZpbGVkIGJ5IEpvY2VseW4gSmF1YmVydC4KCkRhbmllbCBGYW5kcmljaCAoNCBGZWIgMjAwOSkKLSBEb24ndCBhZGQgdGhlIHN0YW5kYXJkIC91c3IvbGliIG9yIC91c3IvaW5jbHVkZSBwYXRocyB0byBMREZMQUdTIGFuZCBDUFBGTEFHUwogIChyZXNwZWN0aXZlbHkpIHdoZW4gLS13aXRoLXNzbD0vdXNyIGlzIHVzZWQgKHBhdGNoIGJhc2VkIG9uIEZyZWVCU0QpLgoKLSBBZGRlZCBhbiBleHBsaWNpdCBidWZmZXIgbGltaXQgY2hlY2sgaW4gbXNkb3NpZnkoKSAocGF0Y2ggYmFzZWQgb24gRnJlZUJTRCkuCiAgVGhpcyBjb3VsZG4ndCBldmVyIG92ZXJmbG93IGluIGN1cmwsIGJ1dCBtaWdodCBpZiB0aGUgY29kZSB3ZXJlIHVzZWQKICBlbHNld2hlcmUgb3IgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMuCgpEYW5pZWwgU3RlbmJlcmcgKDMgRmViIDIwMDkpCi0gSGlkZW1vdG8gTmFrYWRhIHByb3ZpZGVkIGEgc21hbGwgZml4IHRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2V0IHRoZQogIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FEIHNpemUgZnJvbSBmaWxlOi8vICJ0cmFuc2ZlcnMiIHdpdGgKICBDVVJMT1BUX05PQk9EWSBzZXQgdHJ1ZS4KCkRhbmllbCBTdGVuYmVyZyAoMiBGZWIgMjAwOSkKLSBQYXRyaWNrIFNjb3R0IGZvdW5kIGEgcmF0aGVyIGxhcmdlIG1lbW9yeSBsZWFrIHdoZW4gdXNpbmcgdGhlIG11bHRpCiAgaW50ZXJmYWNlIGFuZCBzZXR0aW5nIENVUkxNT1BUX01BWENPTk5FQ1RTIHRvIHNvbWV0aGluZyBsZXNzIHRoYW4gdGhlIG51bWJlcgogIG9mIGhhbmRsZXMgeW91IGFkZCB0byB0aGUgbXVsdGkgaGFuZGxlLiBBbGwgdGhlIGNvbm5lY3Rpb25zIHRoYXQgZGlkbid0IGZpdAogIGluIHRoZSBjYWNoZSB3b3VsZCBub3QgYmUgcHJvcGVybHkgZGlzY29ubmVjdGVkIG5vciBmcmVlZCEKCi0gQ3JhaWcgQSBXZXN0IGJyb3VnaHQgdXM6IGxpYmN1cmwgbm93IGRlZmF1bHRzIHRvIGRvIENPTk5FQ1Qgd2l0aCBIVFRQCiAgdmVyc2lvbiAxLjEgaW5zdGVhZCBvZiAxLjAgbGlrZSBiZWZvcmUuIFRoaXMgY2hhbmdlIGFsc28gaW50cm9kdWNlcyB0aGUgbmV3CiAgcHJveHkgdHlwZSBmb3IgbGliY3VybCBjYWxsZWQgJ0NVUkxQUk9YWV9IVFRQXzFfMCcgdGhhdCB0aGVuIGFsbG93cyBhcHBzIHRvCiAgc3dpdGNoIChiYWNrKSB0byBDT05ORUNUIDEuMCByZXF1ZXN0cy4gVGhlIGN1cmwgdG9vbCBhbHNvIGdvdCBhIC0tcHJveHkxLjAKICBvcHRpb24gdGhhdCB3b3JrcyBleGFjdGx5IGxpa2UgLS1wcm94eSBidXQgc2V0cyBDVVJMUFJPWFlfSFRUUF8xXzAuCgogIEkgdXBkYXRlZCBhbGwgdGVzdCBjYXNlcyBjYXNlcyB0aGF0IHVzZSBDT05ORUNUIGFuZCBJIHRyaWVkIHRvIGRvIHNvbWUgdXNpbmcKICAtLXByb3h5MS4wIGFuZCBzb21lIHVwZGF0ZWQgdG8gZG8gQ09OTkVDVCAxLjEgdG8gZ2V0IGJvdGggdmVyc2lvbnMgcnVuLgoKRGFuaWVsIFN0ZW5iZXJnICgzMSBKYW4gMjAwOSkKLSBXaGVuIGJ1aWxkaW5nIHdpdGggYy1hcmVzIDEuNi4xIChub3QgeWV0IHJlbGVhc2VkKSBvciBsYXRlciBhbmQgSVB2NiBzdXBwb3J0CiAgZW5hYmxlZCwgd2UgY2FuIG5vdyB0YWtlIGFkdmFudGFnZSBvZiBpdHMgYnJhbmQgbmV3IEFGX1VOU1BFQyBzdXBwb3J0IGluCiAgYXJlc19nZXRob3N0YnluYW1lKCkuIFRoaXMgbWFrZXMgdGVzdCBjYXNlIDI0MSBmaW5hbGx5IHJ1biBmaW5lIGZvciBtZSB3aXRoCiAgdGhpcyBzZXR1cCBzaW5jZSBpdCBub3cgcGFyc2VzIHRoZSAiOjoxIGlwNi1sb2NhbGhvc3QiIGxpbmUgZmluZSBpbiBteQogIC9ldGMvaG9zdHMgZmlsZSEKCkRhbmllbCBTdGVuYmVyZyAoMzAgSmFuIDIwMDkpCi0gU2NvdHQgQ2FudG9yIGZpbGVkIGJ1ZyByZXBvcnQgIzI1NTAwNjEKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjU1MDA2MSkgbWVudGlvbmluZyB0aGF0IEkgZmFpbGVkIHRvCiAgcHJvcGVybHkgbWFrZSBzdXJlIHRoYXQgdGhlIFZDOSBtYWtlZmlsZXMgZ290IGluY2x1ZGVkIGluIHRoZSBsYXRlc3QKICByZWxlYXNlLiBJJ3ZlIG5vdyBmaXhlZCB0aGUgcmVsZWFzZSBzY3JpcHQgYW5kIHZlcmlmaWVkIGl0IHNvIG5leHQgcmVsZWFzZQogIHdpbGwgaG9wZWZ1bGx5IGluY2x1ZGUgdGhlbSBwcm9wZXJseSEKCkRhbmllbCBGYW5kcmljaCAoMzAgSmFuIDIwMDkpCi0gRml4ZWQgLS1kaXNhYmxlLXByb3h5IGZvciBGVFAgYW5kIFNPQ0tTLiBUaGFua3MgdG8gRGFuaWVsIEVnZ2VyIGZvcgogIHJlcG9ydGluZy4KCllhbmcgVHNlICgyOSBKYW4gMjAwOSkKLSBJbnRyb2R1Y2VkIGN1cmxfc3NwaS5jIGFuZCBjdXJsX3NzcGkuaCBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucwogIEN1cmxfc3NwaV9nbG9iYWxfaW5pdCgpIGFuZCBDdXJsX3NzcGlfZ2xvYmFsX2NsZWFudXAoKSB3aGljaCBwcmV2aW91c2x5IHdlcmUKICBuYW1lZCBDdXJsX250bG1fZ2xvYmFsX2luaXQoKSBhbmQgQ3VybF9udGxtX2dsb2JhbF9jbGVhbnVwKCkgaW4gaHR0cF9udGxtLmMKICBBbHNvIGFkanVzdGVkIHNvY2tzX3NzcGkuYyB0byByZW1vdmUgdGhlIGxpbmstdGltZSBkZXBlbmRlbmN5IG9uIHRoZSBXaW5kb3dzCiAgU1NQSSBsaWJyYXJ5IHVzaW5nIGl0IG5vdyBpbiB0aGUgc2FtZSB3YXkgYXMgaXQgd2FzIGRvbmUgaW4gaHR0cF9udGxtLmMuCgpEYW5pZWwgU3RlbmJlcmcgKDI4IEphbiAyMDA5KQotIE1hcmt1cyBNb2VsbGVyIGludHJvZHVjZWQgdHdvIG5ldyBvcHRpb25zIHRvIGxpYmN1cmw6CiAgQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX1NFUlZJQ0UgYW5kIENVUkxPUFRfU09DS1M1X0dTU0FQSV9ORUMgdG8gYWxsb3cgbGliY3VybAogIHRvIGRvIEdTUy1zdHlsZSBhdXRoZW50aWNhdGlvbiB3aXRoIFNPQ0tTNSBwcm94aWVzLiBUaGUgY3VybCB0b29sIGdvdCB0aGUKICBvcHRpb25zIGNhbGxlZCAtLXNvY2tzNS1nc3NhcGktc2VydmljZSBhbmQgLS1zb2NrczUtZ3NzYXBpLW5lYyB0byBlbmFibGUKICB0aGVzZS4KCkRhbmllbCBTdGVuYmVyZyAoMjYgSmFuIDIwMDkpCi0gQ2hhZCBNb25yb2UgcHJvdmlkZWQgdGhlIG5ldyBDVVJMT1BUX1RGVFBfQkxLU0laRSBvcHRpb24gdGhhdCBhbGxvd3MgYW4gYXBwCiAgdG8gc2V0IGRlc2lyZWQgYmxvY2sgc2l6ZSB0byB1c2UgZm9yIFRGVFAgdHJhbnNmZXJzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKICA1MTIgYnl0ZXMuCgotIFRoZSAiLW5vX3RpY2tldCIgb3B0aW9uIHdhcyBpbnRyb2R1Y2VkIGluIE9wZW5zc2wwLjkuOGouIEl0J3MgYSBmbGFnIHRvCiAgZGlzYWJsZSAicmZjNDUwN2JpcyBzZXNzaW9uIHRpY2tldCBzdXBwb3J0Ii4gIHJmYzQ1MDdiaXMgd2FzIGxhdGVyIHR1cm5lZAogIGludG8gdGhlIHByb3BlciBSRkM1MDc3IGl0IHNlZW1zOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MDc3CgogIFRoZSBlbmFibGVkIGV4dGVuc2lvbiBjb25jZXJucyB0aGUgc2Vzc2lvbiBtYW5hZ2VtZW50LiBJIHdvbmRlciBob3cgb2Z0ZW4KICBsaWJjdXJsIHN0b3BzIGEgY29ubmVjdGlvbiBhbmQgdGhlbiByZXN1bWVzIGEgVExTIHNlc3Npb24uIGFsc28sIHNlbmRpbmcgdGhlCiAgc2Vzc2lvbiBkYXRhIGlzIHNvbWUgb3ZlcmhlYWQuIC5JIHN1Z2dlc3QgdGhhdCB5b3UganVzdCB1c2UgeW91ciBwcm9wb3NlZAogIHBhdGNoICh3aGljaCBleHBsaWNpdGx5IGRpc2FibGVzIFRJQ0tFVCkuCgogIElmIHNvbWVvbmUgd3JpdGVzIGFuIGFwcGxpY2F0aW9uIHdpdGggbGliY3VybCBhbmQgb3BlbnNzbCB3aG8gd2FudHMgdG8KICBlbmFibGUgdGhlIGZlYXR1cmUsIG9uZSBjYW4gZG8gdGhpcyBpbiB0aGUgU1NMIGNhbGxiYWNrLgoKICBTaGFyYWQgR3VwdGEgYnJvdWdodCB0aGlzIHRvIG15IGF0dGVudGlvbi4gUGV0ZXIgU3lsdmVzdGVyIGhlbHBlZCBtZSBkZWNpZGUKICBvbiB0aGUgcHJvcGVyIGFjdGlvbi4KCi0gQWxleGV5IEJvcnpvdiBmaWxlZCBidWcgcmVwb3J0ICMyNTM1NTA0CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTI1MzU1MDQpIHBvaW50aW5nIG91dCB0aGF0IHJlYWxtcyB3aXRoCiAgcXVvdGVkIHF1b3RhdGlvbiBtYXJrcyBpbiBIVFRQIERpZ2VzdCBoZWFkZXJzIGRpZG4ndCB3b3JrLiBJJ3ZlIG5vdyBhZGRlZCAKICB0ZXN0IGNhc2UgMTA5NSB0aGF0IHZlcmlmaWVzIG15IGZpeC4KCi0gQ3JhaWcgQSBXZXN0IGJyb3VnaHQgQ1VSTE9QVF9OT1BST1hZIGFuZCB0aGUgY29ycmVzcG9uZGluZyAtLW5vcHJveHkgb3B0aW9uLgogIFRoZXkgYmFzaWNhbGx5IG9mZmVyIHRoZSBzYW1lIHRoaW5nIHRoZSBOT19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbmx5CiAgb2ZmZXJlZCBwcmV2aW91c2x5OiBsaXN0IGEgc2V0IG9mIGhvc3QgbmFtZXMgdGhhdCBzaGFsbCBub3QgdXNlIHRoZSBwcm94eQogIGV2ZW4gaWYgb25lIGlzIHNwZWNpZmllZC4KCkRhbmllbCBGYW5kcmljaCAoMjAgSmFuIDIwMDkpCi0gQ2FsbCBzZXRsb2NhbGUoKSBmb3IgbGlidGVzdCB0ZXN0cyB0byB0ZXN0IHRoZSBlZmZlY3RzIG9mIGxvY2FsZS1pbmR1Y2VkCiAgbGliYyBjaGFuZ2VzIG9uIGxpYmN1cmwuCgotIEZpeGVkIGEgY291cGxlIG1vcmUgbG9jYWxlLWRlcGVuZGVudCB0b3VwcGVyIGNvbnZlcnNpb25zLCBtYWlubHkgZm9yCiAgY2xhcml0eS4gIFRoaXMgZG9lcyBmaXggb25lIHByb2JsZW0gdGhhdCBjYXVzZXMgO3R5cGU9aSBGVFAgVVJMcwogIHRvIGZhaWwgaW4gdGhlIFR1cmtpc2ggbG9jYWxlIHdoZW4gQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFIGlzCiAgdXNlZCAodGVzdCBjYXNlIDU2MSkKCi0gQWRkZWQgdGVzdHMgNTYxIGFuZCAxMDkxIHRocm91Z2ggMTA5NCB0byB0ZXN0IHZhcmlvdXMgY29tYmluYXRpb25zCiAgb2YgO3R5cGU9IGFuZCA7bW9kZT0gVVJMcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGZhaWwgaW4gdGhlIFR1cmtpc2gKICBsb2NhbGUuCgpEYW5pZWwgU3RlbmJlcmcgKDIwIEphbiAyMDA5KQotIExpc2EgWHUgcG9pbnRlZCBvdXQgdGhhdCB0aGUgc3NoLm9iaiBmaWxlIHdhcyBtaXNzaW5nIGZyb20gdGhlCiAgbGliL01ha2VmaWxlLnZjNiBmaWxlIChhbmQgdGh1cyBmcm9tIHRoZSB2YzggYW5kIHZjOSBvbmVzIHRvbykuCgpWZXJzaW9uIDcuMTkuMyAoMTkgSmFudWFyeSAyMDA5KQoKRGFuaWVsIFN0ZW5iZXJnICgxNiBKYW4gMjAwOSkKLSBBbmRyZXcgZGUgbG9zIFJleWVzIGZpeGVkIGN1cmxidWlsZC5oIGZvciAiZ2VuZXJpYyIgZ2NjIGJ1aWxkcyBvbiBQUEMsIGJvdGgKICAzMiBiaXQgYW5kIDY0IGJpdC4KCkRhbmllbCBTdGVuYmVyZyAoMTUgSmFuIDIwMDkpCi0gVGltIEFuc2VsbCBmaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgaW4gbGliL2Nvb2tpZS5jCgpEYW5pZWwgU3RlbmJlcmcgKDE0IEphbiAyMDA5KQotIEdyYW50IEVyaWNrc29uIGZpeGVkIHRpbWVvdXRzIGZvciBURlRQIHN1Y2ggdGhhdCBzcGVjaWZ5aW5nIGEKICBjb25uZWN0LXRpbWVvdXQsIGEgbWF4LXRpbWUgb3IgYm90aCBvcHRpb25zIHdvcmsgY29ycmVjdGx5IGFuZCBhcyBleHBlY3RlZAogIGJ5IHBhc3NpbmcgdGhlIGNvcnJlY3QgYm9vbGVhbiB2YWx1ZSB0byBDdXJsX3RpbWVsZWZ0IHZpYSB0aGUKICAnZHVyaW5nY29ubmVjdCcgcGFyYW1ldGVyLgoKICBXaXRoIHRoaXMgc21hbGwgY2hhbmdlLCBjdXJsIFRGVFAgbm93IGJlaGF2ZXMgYXMgZXhwZWN0ZWQgKGFuZCBsaWtlbHkgYXMKICBvcmlnaW5hbGx5LWRlc2lnbmVkKToKCiAgMSkgRm9yIG5vbi1leGlzdGVudCBvciB1bnJlYWNoYWJsZSBkb3R0ZWQgSVAgYWRkcmVzc2VzOgoKICAgYSkgV2l0aCBubyBvcHRpb25zLCBmb2xsb3dzIHRoZSBkZWZhdWx0IGN1cmwgMzAwcyB0aW1lb3V0Li4uCiAgIGIpIFdpdGggLS1jb25uZWN0LXRpbWVvdXQgb25seSwgZm9sbG93cyB0aGF0IHZhbHVlLi4uCiAgIGMpIFdpdGggLS1tYXgtdGltZSBvbmx5LCBmb2xsb3dzIHRoYXQgdmFsdWUuLi4KICAgZCkgV2l0aCBib3RoIC0tY29ubmVjdC10aW1lb3V0IGFuZCAtLW1heC10aW1lLCBmb2xsb3dzIHRoZSBzbWFsbGVyIHZhbHVlLi4uCgogICBhbmQgdGltZXMgb3V0IHdpdGggYSAiY3VybDogKDcpIENvdWxkbid0IGNvbm5lY3QgdG8gc2VydmVyIiBlcnJvci4KCiAgMikgRm9yIHRyYW5zZmVycyB0by9mcm9tIGEgdmFsaWQgaG9zdDoKCiAgIGEpIFdpdGggbm8gb3B0aW9ucywgZm9sbG93cyBkZWZhdWx0IGN1cmwgMzAwcyB0aW1lb3V0IGZvciB0aGUKICAgICAgZmlyc3QgWFJRL0RBVEEvQUNLIHRyYW5zYWN0aW9uIGFuZCB0aGUgZGVmYXVsdCBURlRQIDM2MDBzCiAgICAgIHRpbWVvdXQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHRyYW5zZmVyLi4uCgogICBiKSBXaXRoIC0tY29ubmVjdC10aW1lIG9ubHksIGZvbGxvd3MgdGhhdCB2YWx1ZSBmb3IgdGhlCiAgICAgIGZpcnN0IFhSUS9EQVRBL0FDSyB0cmFuc2FjdGlvbiBhbmQgdGhlIGRlZmF1bHQgVEZUUCAzNjAwcwogICAgICB0aW1lb3V0IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cmFuc2Zlci4uLgoKICAgYykgV2l0aCAtLW1heC10aW1lIG9ubHksIGZvbGxvd3MgdGhhdCB2YWx1ZSBmb3IgdGhlIGZpcnN0CiAgICAgIFhSUS9EQVRBL0FDSyB0cmFuc2FjdGlvbiBhbmQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlCiAgICAgIHRyYW5zZmVyLi4uCgogICBkKSBXaXRoIGJvdGggLS1jb25uZWN0LXRpbWVvdXQgYW5kIC0tbWF4LXRpbWUsIGZvbGxvd3MgdGhlIGZvcm1lcgogICAgICBmb3IgdGhlIGZpcnN0IFhSUS9EQVRBL0FDSyB0cmFuc2FjdGlvbiBhbmQgdGhlIGxhdHRlciBmb3IgdGhlCiAgICAgIHJlbWFpbmRlciBvZiB0aGUgdHJhbnNmZXIuLi4KCiAgIGFuZCB0aW1lcyBvdXQgd2l0aCBhICJjdXJsOiAoMjgpIFRpbWVvdXQgd2FzIHJlYWNoZWQiIGVycm9yIGFzCiAgIGFwcHJvcHJpYXRlLgoKRGFuaWVsIFN0ZW5iZXJnICgxMyBKYW4gMjAwOSkKLSBNaWNoYWVsIFdhbGxuZXIgZml4ZWQgYSBOVUxMIHBvaW50ZXIgZGVyZWYgd2hlbiBjYWxsaW5nCiAgY3VybF9lYXN5X3NldHVwKGN1cmwsIENVUkxPUFRfQ09PS0lFTElTVCwgIlNFU1MiKSBvbiBhIENVUkwgaGFuZGxlIHdpdGggbm8KICBjb29raWVzIGRhdGEuCgotIFN0ZWZhbiBUZWxlbWFuIGJyb3VnaHQgYSBwYXRjaCB0byBmaXggdGhlIGRlZmF1bHQgY3VybGJ1aWxkLmggZmlsZSBmb3IgdGhlCiAgU3VuUHJvIGNvbXBpbGVycy4KCkRhbmllbCBTdGVuYmVyZyAoMTIgSmFuIDIwMDkpCi0gQmFzZWQgb24gYnVnIHJlcG9ydCAjMjQ5ODY2NSAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjQ5ODY2NSkKICBieSBEYW5pZWwgQmxhY2ssIEkndmUgbm93IGFkZGVkIG1hZ2ljIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IHRoYXQgbWFrZXMgaXQKICB1c2UgcGtnLWNvbmZpZyB0byBkZXRlY3QgZ251dGxzIGRldGFpbHMgYXMgd2VsbCBpZiB0aGUgZXhpc3RpbmcgbWV0aG9kCiAgKHVzaW5nIGxpYmdudXRscy1jb25maWcpIGZhaWxzLiBXaGlsZSBkb2luZyB0aGlzLCBJIGNsZWFuZWQgdXAgYW5kIHVuaWZpZWQKICB0aGUgcGtnLWNvbmZpZyB1c2FnZSB3aGVuIGRldGVjdGluZyBvcGVuc3NsIGFuZCBuc3MgYXMgd2VsbC4KCkRhbmllbCBTdGVuYmVyZyAoMTEgSmFuIDIwMDkpCi0gS2FybCBNb2VyZGVyIGJyb3VnaHQgdGhlIHBhdGNoIHRoYXQgY3JlYXRlcyB2YzkgTWFrZWZpbGVzLCBhbmQgSSBtYWRlCiAgJ21ha2V0Z3onIG5vdyB1c2UgdGhlIGFjdHVhbCBtYWtlZmlsZSB0YXJnZXRzIHRvIGRvIHRoZSBWQzggYW5kIFZDOQogIG1ha2VmaWxlcy4KCkRhbmllbCBTdGVuYmVyZyAoMTAgSmFuIDIwMDkpCi0gRW1pbCBSb21hbnVzIGZpeGVkOgoKICBXaGVuIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2Ugb3ZlciBIVFRQIGFuZCB0aGUgc2VydmVyIHJldHVybnMgYSBMb2NhdGlvbgogIGhlYWRlciwgdGhlIHJ1bm5pbmcgZWFzeSBoYW5kbGUgd2lsbCBnZXQgc3R1Y2sgaW4gdGhlIENVUkxNX1NUQVRFX1BFUkZPUk0KICBzdGF0ZSwgbGVhdmluZyB0aGUgZXh0ZXJuYWwgZXZlbnQgbG9vcCBzdHVjayB3YWl0aW5nIGZvciBkYXRhIGZyb20gdGhlCiAgaW5nb2luZyBzb2NrZXQgKHdoZW4gdXNpbmcgdGhlIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiBzdHVmZikuIFdoaWxlIHRoaXMKICBidWcgd2FzIHByZXR0eSBoYXJkIHRvIGZpbmQsIGl0IHNlZW1zIHRvIHJlcXVpcmUgb25seSBhIG9uZS1saW5lIGZpeC4gVGhlCiAgYnJlYWsgc3RhdGVtZW50IG9uIGxpbmUgMTM3NCBpbiBtdWx0aS5jIGNhdXNlZCB0aGUgZnVuY3Rpb24gdG8gc2tpcCB0aGUgY2FsbAogIHRvIG11bHRpc3RhdGUoKS4KCiAgSG93IHRvIHJlcHJvZHVjZSB0aGlzIGJ1Zz8gV2VsbCwgdGhhdCdzIGFub3RoZXIgcXVlc3Rpb24uICBldmhpcGVyZmlmby5jIGluCiAgdGhlIGV4YW1wbGVzIGRpcmVjdG9yeSBjaG9rZXMgb24gdGhpcyBidWcgb25seSBfc29tZXRpbWVzXywgcHJvYmFibHkKICBkZXBlbmRpbmcgb24gaG93IGZhc3QgdGhlIFVSTHMgYXJlIGFkZGVkLiBPbmUgd2F5IG9mIHRlc3RpbmcgdGhlIGJ1ZyBvdXQgaXMKICB3cml0aW5nIHRvIGhpcGVyLmZpZm8gZnJvbSBtb3JlIHRoYW4gb25lIHNvdXJjZSBhdCB0aGUgc2FtZSB0aW1lLgoKRGFuaWVsIEZhbmRyaWNoICg3IEphbiAyMDA5KQotIFVuaWZpZWQgbXVjaCBvZiB0aGUgU2Vzc2lvbkhhbmRsZSBpbml0aWFsaXphdGlvbiBkb25lIGluIEN1cmxfb3BlbigpIGFuZAogIGN1cmxfZWFzeV9yZXNldCgpIGJ5IGNyZWF0aW5nIEN1cmxfaW5pdF91c2VyZGVmaW5lZCgpLiBUaGlzIGhhZCB0aGUgc2lkZQogIGVmZmVjdCBvZiBmaXhpbmcgY3VybF9lYXN5X3Jlc2V0KCkgc28gaXQgbm93IGFsc28gcmVzZXRzCiAgQ1VSTE9QVF9GVFBfRklMRU1FVEhPRCBhbmQgQ1VSTE9QVF9TU0xfU0VTU0lPTklEX0NBQ0hFCgpEYW5pZWwgU3RlbmJlcmcgKDcgSmFuIDIwMDkpCi0gUm9iIENyaXR0ZW5kZW4gZGlkIG9uY2UgYWdhaW4gcHJvdmlkZSBhbiBOU1MgdXBkYXRlOgoKICBJIGhhdmUgdG8ganVtcCB0aHJvdWdoIGEgZmV3IGhvb3BzIG5vdyB3aXRoIHRoZSBOU1MgbGlicmFyeSBpbml0aWFsaXphdGlvbgogIHNpbmNlIGFub3RoZXIgcGFydCBvZiBhbiBhcHBsaWNhdGlvbiBtYXkgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkIE5TUyBieSB0aGUKICB0aW1lIEN1cmwgZ2V0cyBpbnZva2VkLiBUaGlzIHBhdGNoIGlzIG1vcmUgY2FyZWZ1bCB0byBvbmx5IHNodXRkb3duIHRoZSBOU1MKICBsaWJyYXJ5IGlmIEN1cmwgZGlkIHRoZSBpbml0aWFsaXphdGlvbi4KCiAgSXQgYWxzbyBhZGRzIGluIGEgYml0IG9mIGNvZGUgdG8gc2V0IHRoZSBkZWZhdWx0IGNpcGhlcnMgaWYgdGhlIGFwcCB0aGF0CiAgY2FsbCBOU1NfSW5pdCogZGlkIG5vdCBjYWxsIE5TU19TZXREb21lc3RpY1BvbGljeSgpIG9yIHNldCBzcGVjaWZpYwogIGNpcGhlcnMuIE9uZSBtaWdodCBhcmd1ZSB0aGF0IHRoaXMgbGV0cyBvdGhlciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIGdldAogIGxhenkgYW5kL29yIHRoZXkgYXJlbid0IHVzaW5nIHRoZSBOU1MgQVBJIGNvcnJlY3RseSwgYW5kIHlvdSdkIGJlIHJpZ2h0LgogIEJ1dCBzdGlsbCwgdGhpcyB3aWxsIGF2b2lkIHRlcnJpYmx5IGRpZmZpY3VsdC10by10cmFjZSBjcmFzaGVzIGFuZCBpcwogIGdlbmVyYWxseSBoZWxwZnVsLgoKRGFuaWVsIFN0ZW5iZXJnICgxIEphbiAyMDA5KQotICdyZWNvbmYnIGlzIHJlbW92ZWQgc2luY2Ugd2UgcmF0aGVyIGhhdmUgdXNlcnMgdXNlICdidWlsZGNvbmYnCgpEYW5pZWwgU3RlbmJlcmcgKDMxIERlYyAyMDA4KQotIEJhcyBNZXZpc3NlbiByZXBvcnRlZCBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yNDc5MDMwIHBvaW50aW5nCiAgb3V0IHRoYXQgJ3JlY29uZicgZGlkbid0IHByb3Blcmx5IHBvaW50IG91dCB0aGUgbTQgc3ViZGlyZWN0b3J5IHdoZW4gcnVubmluZwogIGFjbG9jYWwuCgpEYW5pZWwgU3RlbmJlcmcgKDI5IERlYyAyMDA4KQogLSBQaGlsIExpc2llY2tpIGZpbGVkIGJ1ZyByZXBvcnQgIzI0MTMwNjcKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjQxMzA2NykgdGhhdCBpZGVudGlmaWVkIGEgcHJvYmxlbSB0aGF0CiAgd291bGQgY2F1c2UgbGliY3VybCB0byBtYXJrIGEgRE5TIGNhY2hlIGVudHJ5ICJpbiB1c2UiIGV0ZXJuYWxseSBpZiB0aGUKICBzdWJzZXF1ZW5jZSBUQ1AgY29ubmVjdCBmYWlsZWQuIEl0IHdvdWxkIHRodXMgbmV2ZXIgZ2V0IHBydW5lZCBhbmQgcmVmcmVzaGVkCiAgYXMgaXQgc2hvdWxkJ3ZlIGJlZW4uCgogIFBoaWwgcHJvdmlkZWQgaGlzIG93biBwYXRjaCB0byB0aGlzIHByb2JsZW0gdGhhdCB3aGlsZSBpdCBzZWVtZWQgdG8gd29yawogIHdhc24ndCBjb21wbGV0ZSBhbmQgdGh1cyBJIHdyb3RlIG15IG93biBmaXggdG8gdGhlIHByb2JsZW0uCgpEYW5pZWwgU3RlbmJlcmcgKDI4IERlYyAyMDA4KQotIFBldGVyIEtvcnNnYWFyZCBmaXhlZCBidWlsZGluZyBsaWJjdXJsIHdpdGggImNvbmZpZ3VyZSAtLXdpdGgtc3NsCiAgLS1kaXNhYmxlLXZlcmJvc2UiLgogIAotIEFudGhvbnkgQnJ5YW4gZml4ZWQgbW9yZSBsYW5ndWFnZSBhbmQgc3BlbGxpbmcgZmxhd3MgaW4gbWFuIHBhZ2VzLgoKRGFuaWVsIFN0ZW5iZXJnICgyMiBEZWMgMjAwOCkKLSBHaXZlbiBhIHJlY2VudCBlbm91Z2ggbGlic3NoMiwgbGliY3VybCBjYW4gbm93IHNlZWsvcmVzdW1lIHdpdGggU0ZUUCBldmVuCiAgb24gZmlsZSBpbmRleGVzIGJleW9uZCAyIG9yIDRHQi4KCi0gQW50aG9ueSBCcnlhbiBwcm92aWRlZCBhIHNldCBvZiBwYXRjaGVzIHRoYXQgY2xlYW5lZCB1cCBtYW51YWwgbGFuZ3VhZ2UsCiAgY29ycmVjdGVkIHNwZWxsaW5ncyBhbmQgbW9yZS4KCkRhbmllbCBTdGVuYmVyZyAoMjAgRGVjIDIwMDgpCi0gSWdvciBOb3Zvc2VsdHNldiBmaXhlZCBhIGJhZCBzaXR1YXRpb24gZm9yIHRoZSBtdWx0aV9zb2NrZXQoKSBBUEkgd2hlbiBkb2luZwogIHBpcGVsaW5pbmcsIGFzIGxpYmN1cmwgY291bGQgdGhlbiBlYXNpbHkgZ2V0IGNvbmZ1c2VkIGFuZCBBKSB3b3JrIG9uIHRoZQogIGhhbmRsZSB0aGF0IHdhcyBub3QgImZpcnN0IGluIHF1ZXVlIiBvbiBhIHBpcGVsaW5lLCBvciBldmVuIEIpIHRlbGwgdGhlIGFwcAogIHRvIFJFTU9WRSBhIHNvY2tldCB3aGlsZSBpdCB3YXMgaW4gdXNlIGJ5IGEgc2Vjb25kIGhhbmRsZSBpbiBhIHBpcGVsaW5lLiBCb3RoCiAgZXJyb3JzIGNhdXNlZCBoYW5naW5nIG9yIHN0YWxsaW5nIGFwcGxpY2F0aW9ucy4KCkRhbmllbCBTdGVuYmVyZyAoMTkgRGVjIDIwMDgpCi0gY3VybF9tdWx0aV90aW1lb3V0KCkgY291bGQgcmV0dXJuIGEgdGltZW91dCB2YWx1ZSBvZiAwIGV2ZW4gdGhvdWdoIG5vdGhpbmcKICB3YXMgYWN0dWFsbHkgcmVhZHkgdG8gZ2V0IGRvbmUsIGFzIHRoZSBpbnRlcm5hbCB0aW1lIHJlc29sdXRpb24gaXMgaGlnaGVyCiAgdGhhbiB0aGUgcmV0dXJuZWQgbWlsbGlzZWNvbmQgdGltZXIuIFRoZXJlZm9yZSBpdCBjb3VsZCBjYXVzZSBhcHBsaWNhdGlvbnMKICBydW5uaW5nIG9uIGZhc3QgcHJvY2Vzc29ycyB0byBkbyBzaG9ydCBidXJzdHMgb2YgYnVzeS1sb29wcy4KICBjdXJsX211bHRpX3RpbWVvdXQoKSB3aWxsIG5vdyBvbmx5IHJldHVybiAwIGlmIHRoZSB0aW1lb3V0IGlzIGFjdHVhbGx5CiAgYWxyZWF5IHRyaWdnZXJlZC4KCi0gVXNpbmcgdGhlIGxpYnNzaDIgMC4xOSBmdW5jdGlvbiBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucygpLCBsaWJjdXJsCiAgbm93IGhhcyBhbiBpbXByb3ZlZCBhYmlsaXR5IHRvIGRvIHJpZ2h0IHdoZW4gdGhlIG11bHRpIGludGVyZmFjZSAoYm90aAogICJyZWd1bGFyIiBhbmQgbXVsdGlfc29ja2V0KSBpcyB1c2VkIGZvciBTQ1AgYW5kIFNGVFAgdHJhbnNmZXJzLiBUaGlzIHNob3VsZAogIHJlc3VsdCBpbiAobXVjaCkgbGVzcyBidXN5LWxvb3Agc2l0dWF0aW9ucyBhbmQgdGh1cyBsZXNzIENQVSB1c2FnZSB3aXRoIG5vCiAgc3BlZWQgbG9zcy4KCkRhbmllbCBTdGVuYmVyZyAoMTcgRGVjIDIwMDgpCi0gU0NQIGFuZCBTRlRQIHdpdGggdGhlIG11bHRpIGludGVyZmFjZSBoYWQgdGhlIHNhbWUgZmxhdzogdGhlICdET05FJwogIG9wZXJhdGlvbiBkaWRuJ3QgY29tcGxldGUgcHJvcGVybHkgaWYgdGhlIEVBR0FJTiBlcXVpdmFsZW50IHdhcyByZXR1cm5lZCBidXQKICBsaWJjdXJsIHdvdWxkIHNpbXBseSBjb250aW51ZSB3aXRoIGEgaGFsZi1jb21wbGV0ZWQgY2xvc2Ugb3BlcmF0aW9uCiAgcGVyZm9ybWVkLiBUaGlzIHJ1aW5lZCBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gcmUtdXNlIGFuZCBjYXVzZSBzb21lCiAgU1NILXByb3RvY29sIGVycm9ycyBpbiBnZW5lcmFsLiBUaGUgY29ycmVjdGlvbiBpcyB1bmZvcnR1bmF0ZWx5IGFkZGluZyBhCiAgYmxvY2tpbmcgZnVuY3Rpb24gLSBkb2luZyBpdCBlbnRpcmVseSBub24tYmxvY2tpbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yCiAgYSBiZXR0ZXIgZml4LgoKR2lzbGUgVmFuZW0gKDE2IERlYyAyMDA4KQotIEFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgdGhlIFdhdHQtMzIgdGNwL2lwIHN0YWNrIHVuZGVyIFdpbmRvd3MuCiAgVGhlIGNoYW5nZSBzaW1wbHkgaW52b2x2ZWQgYWRkaW5nIGEgVVNFX1dBVFQzMiBzZWN0aW9uIGluIHRoZQogIGNvbmZpZy13aW4zMi5oIGZpbGVzICh1bmRlciAuL2xpYiBhbmQgLi9zcmMpLiBUaGlzIHNlY3Rpb24gZGlzYWJsZXMKICB0aGUgdXNlIG9mIGFueSBXaW5zb2NrIGhlYWRlcnMuCgpEYW5pZWwgU3RlbmJlcmcgKDE2IERlYyAyMDA4KQotIGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKCkgd2FzIHdyb25nbHkgdXNlZCBhdCBzb21lIHBsYWNlcyBpbiBsaWJjdXJsIHdoaWNoCiAgbWFkZSBsaWJjdXJsIHNvbWV0aW1lcyBub3QgcHJvcGVybHkgYWJvcnQgcHJvYmxlbWF0aWMgU0ZUUCB0cmFuc2ZlcnMuCgpEYW5pZWwgU3RlbmJlcmcgKDEyIERlYyAyMDA4KQotIE1vcmUgd29yayB3aXRoIElnb3IgTm92b3NlbHRzZXYgdG8gZmlyc3QgZml4IHRoZSByZW1haW5pbmcgc3R1ZmYgZm9yCiAgcmVtb3ZpbmcgZWFzeSBoYW5kbGVzIGZyb20gbXVsdGkgaGFuZGxlcyB3aGVuIHRoZSBlYXN5IGhhbmRsZSBpcy93YXMgd2l0aGluCiAgYSBIVFRQIHBpcGVsaW5lLiBIaXMgYnVnIHJlcG9ydCAjMjM1MTY1MwogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMzUxNjUzKSB3YXMgYWxzbyByZWxhdGVkIGFuZCB3YXMKICBldmVudHVhbGx5IGZpeGVkIGJ5IGEgcGF0Y2ggYnkgSWdvciBoaW1zZWxmLgoKWWFuZyBUc2UgKDEyIERlYyAyMDA4KQotIFBhdHJpY2sgTW9ubmVyYXQgZml4ZWQgYSBidWlsZCByZWdyZXNzaW9uLCBpbnRyb2R1Y2VkIGluIDcuMTkuMiwgYWZmZWN0aW5nCiAgT1MvNDAwIGNvbXBpbGF0aW9ucyB3aXRoIElQdjYgZW5hYmxlZC4KCkRhbmllbCBTdGVuYmVyZyAoMTIgRGVjIDIwMDgpCi0gTWFyayBLYXJwZWxlcyBmaWxlZCBidWcgcmVwb3J0ICMyNDE2MTgyIHRpdGxlZCAiY3Jhc2ggaW4gQ29ubmVjdGlvbkV4aXN0cwogIHdoZW4gdXNpbmcgZHVwaGFuZGxlK2N1cmxfbXV0bGkiCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTI0MTYxODIpIHdoaWNoIHNob3dlZCB0aGF0CiAgY3VybF9lYXN5X2R1cGhhbmRsZSgpIHdyb25nbHkgYWxzbyBjb3BpZWQgdGhlIHBvaW50ZXIgdG8gdGhlIGNvbm5lY3Rpb24KICBjYWNoZSwgd2hpY2ggd2FzIHBsYWluIHdyb25nIGFuZCBjYXVzZWQgYSBzZWdmYXVsdCBpZiB0aGUgaGFuZGxlIHdvdWxkIGJlCiAgdXNlZCBpbiBhIGRpZmZlcmVudCBtdWx0aSBoYW5kbGUgdGhhbiB0aGUgaGFuZGxlIGl0IHdhcyBkdXBsaWNhdGVkIGZyb20uCgpEYW5pZWwgU3RlbmJlcmcgKDExIERlYyAyMDA4KQotIEtlc2hhdiBLcml0eSBmb3VuZCBvdXQgdGhhdCBsaWJjdXJsIGZhaWxlZCB0byBkZWFsIHdpdGggZG90dGVkIElQdjYKICBhZGRyZXNzZXMgaWYgdGhleSB3ZXJlIHZlcnkgbG9uZyAoPjM5IGxldHRlcnMpIGR1ZSB0byBhIHRvbyBzdHJpY3QgYWRkcmVzcwogIHZhbGlkaXR5IHBhcnNlci4gSXQgbm93IGFjY2VwdHMgYWRkcmVzc2VzIHVwIHRvIDQ1IGJ5dGVzIGxvbmcuCgpEYW5pZWwgU3RlbmJlcmcgKDExIERlYyAyMDA4KQotIEludGVybmV0IEV4cGxvcmVyIGhhZCBhIGJyb2tlbiBIVFRQIGRpZ2VzdCBhdXRoZW50aWNhdGlvbiBiZWZvcmUgdjcgYW5kCiAgdGhlcmUgYXJlIHNlcnZlcnMgIm91dCB0aGVyZSIgdGhhdCByZWxpZXMgb24gdGhlIGNsaWVudCBkb2luZyB0aGlzIGJyb2tlbgogIERpZ2VzdCBhdXRoZW50aWNhdGlvbi4gQXBhY2hlIGV2ZW4gY29tZXMgd2l0aCBhbiBvcHRpb24gdG8gd29yayB3aXRoIHN1Y2gKICBicm9rZW4gY2xpZW50cy4KCiAgVGhlIGRpZmZlcmVuY2UgaXMgb25seSBmb3IgVVJMcyB0aGF0IGNvbnRhaW4gYSBxdWVyeS1wYXJ0IChhICc/Jy1sZXR0ZXIgYW5kCiAgdGV4dCB0byB0aGUgcmlnaHQgb2YgaXQpLgoKICBsaWJjdXJsIG5vdyBzdXBwb3J0cyB0aGlzIHF1aXJrLCBhbmQgeW91IGVuYWJsZSBpdCBieSBzZXR0aW5nIHRoZQogIENVUkxBVVRIX0RJR0VTVF9JRSBiaXQgaW4gdGhlIGJpdG1hc2sgeW91IHBhc3MgdG8gdGhlIENVUkxPUFRfSFRUUEFVVEggb3IKICBDVVJMT1BUX1BST1hZQVVUSCBvcHRpb25zLiBUaGV5IGFyZSB0aHVzIGluZGl2aWR1YWxseSBjb250cm9sbGVkIHRvIHNlcnZlcgogIGFuZCBwcm94eS4KCiAgKG5vdGUgdGhhdCB0aGVyZSdzIG5vIHdheSB0byBhY3RpdmF0ZSB0aGlzIHdpdGggdGhlIGN1cmwgdG9vbCB5ZXQpCgpEYW5pZWwgRmFuZHJpY2ggKDkgRGVjIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDg5IGFuZCAxMDkwIHRvIHRlc3QgLS13cml0ZS1vdXQgYWZ0ZXIgYSByZWRpcmVjdCB0bwogIHRlc3QgYSByZXBvcnQgdGhhdCB0aGUgc2l6ZSBkaWRuJ3Qgd29yaywgYnV0IHRoZXNlIHRlc3QgY2FzZXMgcGFzcy4KCi0gRG9jdW1lbnRlZCBDVVJMT1BUX0NPTk5FQ1RfT05MWSBhcyBiZWluZyB1c2VmdWwgb25seSBvbiBIVFRQIFVSTHMuCgpEYW5pZWwgU3RlbmJlcmcgKDkgRGVjIDIwMDgpCi0gS2VuIEhpcnNjaCBzaW1wbGlmaWVkIGhvdyBsaWJjdXJsIGRvZXMgRlRQUzogbm93IGl0IGRvZXNuJ3QgYXNzdW1lIGFueQogIHBhcnRpY3VsYXIgc3RhdGUgZm9yIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gbGlrZSBpdCBkaWQgYmVmb3JlIGZvciBpbXBsaWNpdAogIEZUUFMgKGxpYmN1cmwgYXNzdW1lZCBzdWNoIGNvbnRyb2wgY29ubmVjdGlvbnMgdG8gYmUgZW5jcnlwdGVkIHdoaWxlIHNvbWUKICBGVFBTIHNlcnZlcnMgc3VjaCBhcyBGaWxlWmlsbGEgYXNzdW1lcyBzdWNoIGNvbm5lY3Rpb25zIHRvIGJlIGNsZWFyCiAgbW9kZSkuIFVzZSB0aGUgQ1VSTE9QVF9VU0VfU1NMIG9wdGlvbiB0byBzZXQgeW91ciBkZXNpcmVkIGxldmVsLgoKRGFuaWVsIFN0ZW5iZXJnICg4IERlYyAyMDA4KQotIEZyZWQgTWFjaGFkbyBwb3N0ZWQgYWJvdXQgYSB3ZWlyZCBGVFAgcHJvYmxlbSBvbiB0aGUgY3VybC11c2VycyBsaXN0IGFuZCB3aGVuCiAgcmVzZWFyY2hpbmcgaXQsIGl0IHR1cm5lZCBvdXQgaGUgZ290IGEgNTUwIHJlc3BvbnNlIGJhY2sgZnJvbSBhIFNJWkUgY29tbWFuZAogIGFuZCB0aGVuIEkgZmVsbCBvdmVyIHRoZSB0ZXh0IGluIFJGQzM2NTkgdGhhdCBzYXlzOgoKICAgVGhlIHByZXNlbmNlIG9mIHRoZSA1NTAgZXJyb3IgcmVzcG9uc2UgdG8gYSBTSVpFIGNvbW1hbmQgTVVTVCBOT1QgYmUgdGFrZW4KICAgYnkgdGhlIGNsaWVudCBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGZpbGUgY2Fubm90IGJlIHRyYW5zZmVycmVkIGluIHRoZQogICBjdXJyZW50IE1PREUgYW5kIFRZUEUuCgogIEluIG90aGVyIHdvcmRzOiB0aGUgY2hhbmdlIEkgZGlkIG9uIFNlcHRlbWJlciAzMHRoIDIwMDggYW5kIHRoYXQgaGFzIGJlZW4KICBpbmNsdWRlZCBpbiB0aGUgbGFzdCB0d28gcmVsZWFzZXMgd2VyZSBhIHJlZ3Jlc3Npb24gYW5kIGEgYmFkIGlkZWEuIFdlIE1VU1QKICBOT1QgdGFrZSBhIDU1MCByZXNwb25zZSBmcm9tIFNJWkUgYXMgYSBoaW50IHRoYXQgdGhlIGZpbGUgZG9lc24ndCBleGlzdC4KCi0gQ2hyaXN0aWFuIEtyYXVzZSBmaWxlZCBidWcgIzIyMjEyMzcKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjIyMTIzNykgdGhhdCBpZGVudGlmaWVkIGFuIGluZmluaXRlCiAgbG9vcCBkdXJpbmcgR1NTIGF1dGhlbnRpY2F0aW9uIGdpdmVuIHNvbWUgc3BlY2lmaWMgY29uZGl0aW9ucy4gV2l0aCBoaXMKICBwYXRpZW5jZSBhbmQgZ3JlYXQgZmVlZGJhY2sgSSBtYW5hZ2VkIHRvIG5hcnJvdyBkb3duIHRoZSBwcm9ibGVtIGFuZAogIGV2ZW50dWFsbHkgZml4IGl0IGFsdGhvdWdoIEkgY2FuJ3QgdGVzdCBhbnkgb2YgdGhpcyBteXNlbGYhCgpEYW5pZWwgRmFuZHJpY2ggKDMgRGVjIDIwMDgpCi0gRml4ZWQgdGhlIGdldGlmYWRkcnMgdmVyc2lvbiBvZiBDdXJsX2lmMmlwIHRvIHdvcmsgb24gc3lzdGVtcyB3aXRob3V0IElQdjYKICBzdXBwb3J0IChlLmcuIE1pbml4KQoKRGFuaWVsIFN0ZW5iZXJnICgzIERlYyAyMDA4KQotIElnb3IgTm92b3NlbHRzZXYgZmlsZWQgYnVnICMyMzUxNjQ1CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIzNTE2NDUpIHRoYXQgaWRlbnRpZmllZCBhIHByb2JsZW0gd2l0aAogIHRoZSBtdWx0aSBpbnRlcmZhY2UgdGhhdCBvY2N1cmVkIGlmIHlvdSByZW1vdmVkIGFuIGVhc3kgaGFuZGxlIHdoaWxlIGluCiAgcHJvZ3Jlc3MgYW5kIHRoZSBoYW5kbGUgd2FzIHVzZWQgaW4gYSBIVFRQIHBpcGVsaW5lLgoKLSBQYXdlbCBLaWVyc2tpIHBvaW50ZWQgb3V0IGEgbWlzdGFrZSBpbiB0aGUgY29va2llIGNvZGUgdGhhdCBjb3VsZCBsZWFkIHRvIGEKICBiYWQgZmNsb3NlKCkgYWZ0ZXIgYSBmYXRhbCBlcnJvciBoYWQgb2NjdXJlZC4KICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjM4MjIxOSkKCkRhbmllbCBGYW5kcmljaCAoMjUgTm92IDIwMDgpCi0gSWYgYSBIVFRQIHJlcXVlc3QgaXMgQmFzaWMgYW5kIG51bSBpcyBhbHJlYWR5ID49MTAwMCwgdGhlIEhUVFAgdGVzdAogIHNlcnZlciBhZGRzIDEgdG8gbnVtIHRvIGdldCB0aGUgZGF0YSBzZWN0aW9uIHRvIHJldHVybi4gVGhpcyBhbGxvd3MKICB0ZXN0aW5nIGF1dGhlbnRpY2F0aW9uIG5lZ290aWF0aW9ucyB1c2luZyB0aGUgQmFzaWMgYXV0aGVudGljYXRpb24KICBtZXRob2QuCgotIEFkZGVkIHRlc3RzIDEwODcgYW5kIDEwODggdG8gdGVzdCBCYXNpYyBhdXRoZW50aWNhdGlvbiBvbiBhIHJlZGlyZWN0CiAgd2l0aCBhbmQgd2l0aG91dCAtLWxvY2F0aW9uLXRydXN0ZWQKCkRhbmllbCBTdGVuYmVyZyAoMjQgTm92IDIwMDgpCi0gQmFzZWQgb24gYSBwYXRjaCBieSBWbGFkIEdyYWNob3YsIGxpYmN1cmwgbm93IHVzZXMgYSBuZXcgbGlic3NoMiAwLjE5CiAgZnVuY3Rpb24gd2hlbiBidWlsdCB0byBzdXBwb3J0IFNDUCBhbmQgU0ZUUCB0aGF0IGhlbHBzIHRoZSBsaWJyYXJ5IHRvIGtub3cKICBpbiB3aGljaCBkaXJlY3Rpb24gYSBwYXJ0aWN1bGFyIGxpYnNzaDIgb3BlcmF0aW9uIHdvdWxkIHJldHVybiBFQUdBSU4gc28KICB0aGF0IGxpYmN1cmwga25vd3Mgd2hhdCBzb2NrZXQgY29uZGl0aW9ucyB0byB3YWl0IGZvciBiZWZvcmUgdHJ5aW5nIHRoZQogIGZ1bmN0aW9uIGNhbGwgYWdhaW4uIFByZXZpb3VzbHkgKGFuZCBzdGlsbCB3aGVuIHVzaW5nIGxpYnNzaDIgMC4xOCBvcgogIGVhcmxpZXIpLCBsaWJjdXJsIHdpbGwgYnVzeS1sb29wIGluIHRoaXMgc2l0dWF0aW9uIHdoZW4gdGhlIGVhc3kgaW50ZXJmYWNlCiAgaXMgdXNlZCEKCkRhbmllbCBGYW5kcmljaCAoMjAgTm92IDIwMDgpCi0gQXV0b21hdGljYWxseSBkZXRlY3QgT3BlbkJTRCdzIENBIGNlcnQgYnVuZGxlLgoKRGFuaWVsIFN0ZW5iZXJnICgxOSBOb3YgMjAwOCkKLSBJIHJlbW92ZWQgdGhlIGRlZmF1bHQgdXNlIG9mICJQcmFnbWE6IG5vLWNhY2hlIiBmcm9tIGxpYmN1cmwgd2hlbiBhIHByb3h5IGlzCiAgdXNlZC4gSXQgaGFzIGJlZW4gdXNlZCBzaW5jZSBmb3JldmVyIGJ1dCBpdCB3YXMgbmV2ZXIgYSBnb29kIGlkZWEgdG8gdXNlCiAgdW5sZXNzIGV4cGxpY2l0bHkgYXNrZWQgZm9yLgoKLSBKb3NlZiBXb2xmJ3MgZXh0ZW5zaW9uIHRoYXQgYWxsb3dzIGEgJFRFU1RESVIvZ2RiaW5pdCR0ZXN0bnVtIGZpbGUgdGhhdCB3aGVuCiAgeW91IHVzZSBydW50ZXN0cy5wbCAtZywgd2lsbCBiZSBzb3VyY2VkIGJ5IGdkYiB0byBhbGxvdyBhZGRpdGlvbmFsIGZhbmN5IG9yCiAgd2hhdGV2ZXIgeW91IHNlZSBmaXQKCi0gQ2hyaXN0aWFuIEtyYXVzZSByZXBvcnRlZCBhbmQgZml4ZWQgYSBtZW1vcnkgbGVhayB0aGF0IHdvdWxkIG9jY3VyIHdpdGggSFRUUAogIEdTUy9rZXJiZXJvcyBhdXRoZW50aWNhdGlvbiAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjI4NDM4NikKCi0gQW5kcmVhcyBXdXJmIGFuZCBNYXJrdXMgS29ldHRlciBoZWxwZWQgbWUgYW5hbHl6ZSBhIHByb2JsZW0gdGhhdCBBbmRyZWFzIGdvdAogIHdoZW4gdXBsb2FkaW5nIGZpbGVzIHRvIGEgc2luZ2xlIEZUUCBzZXJ2ZXIgdXNpbmcgbXVsdGlwbGUgZWFzeSBoYW5kbGUKICBoYW5kbGVzIHdpdGggdGhlIG11bHRpIGludGVyZmFjZS4gT2NjYXNpb25hbGx5IGEgaGFuZGxlIHdvdWxkIHN0YWxsIGluCiAgbXlzdGVyaW91cyB3YXlzLgoKICBUaGUgcHJvYmxlbSB0dXJuZWQgb3V0IHRvIGJlIGEgc2lkZS1lZmZlY3Qgb2YgdGhlIENvbm5lY3Rpb25FeGlzdHMoKQogIGZ1bmN0aW9uJ3MgZWFnZXJuZXNzIHRvIHJlLXVzZSBhIGhhbmRsZSBmb3IgSFRUUCBwaXBlbGluaW5nIHNvIGl0IHdvdWxkCiAgc2VsZWN0IGl0IGV2ZW4gaWYgYWxyZWFkeSBiZWluZyBpbiB1c2UsIGR1ZSB0byBhbiBpbmFkZXF1YXRlIGNoZWNrIGZvciBpdHMKICBjaGFuY2VzIG9mIGJlaW5nIHVzZWQgZm9yIHBpcGVsbmluaW5nLgoKRGFuaWVsIEZhbmRyaWNoICgxNyBOb3YgMjAwOCkKLSBBZGRlZCBtb3JlIGNvbXBpbGVyIHdhcm5pbmcgb3B0aW9ucyBmb3IgZ2NjIDQuMwoKWWFuZyBUc2UgKDE3IE5vdiAyMDA4KQotIEZpeCBhIHJlbWFpbmluZyBwcm9ibGVtIGluIHRoZSBpbmV0X3B0b24oKSBydW50aW1lIGNvbmZpZ3VyZSBjaGVjay4gQW5kCiAgZml4IGludGVybmFsIEN1cmxfaW5ldF9wdG9uKCkgZmFpbHVyZXMgdG8gcmVqZWN0IGNlcnRhaW4gbWFsZm9ybWVkIGxpdGVyYWxzLgoKLSBNYWtlIGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2sgaWYgaW9jdGwgd2l0aCB0aGUgU0lPQ0dJRkFERFIgY29tbWFuZCBjYW4gYmUKICB1c2VkLCBhbmQgZGVmaW5lIEhBVkVfSU9DVExfU0lPQ0dJRkFERFIgaWYgYXBwcm9wcmlhdGUuCgpEYW5pZWwgU3RlbmJlcmcgKDE2IE5vdiAyMDA4KQotIENocmlzdGlhbiBLcmF1c2UgZml4ZWQgYSBidWlsZCBmYWlsdXJlIHdoZW4gYnVpbGRpbmcgd2l0aCBnc3Mgc3VwcG9ydAogIGVuYWJsZWQgYW5kIEZUUCBkaXNhYmxlZC4KCi0gQWRkZWQgY2hlY2sgZm9yIE5VTEwgcmV0dXJucyBmcm9tIHN0cmR1cCgpIGluIHNyYy9tYWluLmMgYW5kIGxpYi9mb3JtZGF0YS5jCiAgLSByZXBvcnRlZCBieSBKaW0gTWV5ZXJpbmcgYWxzbyBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyBvbiBNU0RPUyB3aGVuIHlvdSBkbwogIGZvciBleGFtcGxlIC1PIG9uIGEgdXJsIHdpdGggYSBmaWxlIG5hbWUgcGFydCBsb25nZXIgdGhhbiBQQVRIX01BWCBsZXR0ZXJzCgotIGxpYi9uc3MuYyBmaXhlcyBiYXNlZCBvbiB0aGUgcmVwb3J0IGJ5IEppbSBNZXllcmluZzogSSB3ZW50IG92ZXIgYW5kIGFkZGVkCiAgY2hlY2tzIGZvciByZXR1cm4gY29kZXMgZm9yIGFsbCBjYWxscyB0byBtYWxsb2MgYW5kIHN0cmR1cCB0aGF0IHdlcmUKICBtaXNzaW5nLiBJIGFsc28gY2hhbmdlZCBhIGZldyBtYWxsb2MoMTMpIHRvIHVzZSBhcnJheXMgb24gdGhlIHN0YWNrIGFuZCBhCiAgZmV3IG1hbGxvYyhQQVRIX01BWCkgdG8gaW5zdGVhZCB1c2UgYXByaW50ZigpIHRvIGxvd2VyIG1lbW9yeSB1c2UuCgotIEkgZml4ZWQgYSBtZW1vcnkgbGVhayBpbiBDdXJsX25zc19jb25uZWN0KCkgd2hlbiBDVVJMT1BUX0lTU1VFUkNFUlQgaXMKICBpbiB1c2UuCgpEYW5pZWwgRmFuZHJpY2ggKDE0IE5vdiAyMDA4KQotIEFkZGVkIC54bWwgYXMgb25lIG9mIHRoZSBmZXcgY29tbW9uIGZpbGUgZXh0ZW5zaW9ucyBrbm93biBieSB0aGUgbXVsdGlwYXJ0CiAgZm9ybSBnZW5lcmF0b3IuCgotIEFkZGVkIHNvbWUgI2lmZGVmcyBhcm91bmQgaGVhZGVyIGZpbGVzIGFuZCBjaGFuZ2UgdGhlIEVBR0FJTiB0ZXN0IHRvCiAgZml4IGNvbXBpbGF0aW9uIG9uIENlbGwgKHJlcG9ydGVkIGJ5IEplZmYgQ3VybGV5KS4KCllhbmcgVHNlICgxNCBOb3YgMjAwOCkKLSBGaXhlZCBzZXZlcmFsIGNvbmZpZ3VyZSBzY3JpcHQgaXNzdWVzIGFmZmVjdGluZyBjaGVja3MgZm9yIGluZXRfbnRvYV9yKCksCiAgaW5ldF9udG9wKCksIGluZXRfcHRvbigpLCBnZXRpZmFkZHJzKCksIGZjbnRsKCkgYW5kIGdldGFkZHJpbmZvKCkuCgpZYW5nIFRzZSAoMTMgTm92IDIwMDgpCi0gUmVmYWN0b3JlZCBjb25maWd1cmUgc2NyaXB0IGRldGVjdGlvbiBvZiBmdW5jdGlvbnMgdXNlZCB0byBzZXQgc29ja2V0cyBpbnRvCiAgbm9uLWJsb2NraW5nIG1vZGUsIGFuZCBkZWNvdXBsZSBmdW5jdGlvbiBkZXRlY3Rpb24gZnJvbSBmdW5jdGlvbiBjYXBhYmlsaXR5LgoKVmVyc2lvbiA3LjE5LjIgKDEzIE5vdmVtYmVyIDIwMDgpCgpNaWNoYWwgTWFyZWsgKDEzIE5vdiAyMDA4KQotIEZpeGVkIGEgcG90ZW50aWFsIGRhdGEgbG9zcyBpbiBDdXJsX2NsaWVudF93cml0ZSgpIHdoZW4gdGhlIHRyYW5zZmVyIGlzCiAgcGF1c2VkLgoKRGFuaWVsIFN0ZW5iZXJnICgxMSBOb3YgMjAwOCkKLSBSYWluZXIgQ2FuYXZhbiBmaWxlZCBidWcgIzIyNTU2MjcKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjI1NTYyNykgd2hpY2ggcG9pbnRlZCBvdXQgdGhhdCBhCiAgcHJvZ3JhbSB1c2luZyBsaWJjdXJsJ3MgbXVsdGkgaW50ZXJmYWNlIHRvIGRvd25sb2FkIGEgSFRUUFMgcGFnZSB3aXRoIGEKICBsaWJjdXJsIGJ1aWx0IHBvd2VyZWQgYnkgT3BlblNTTCwgd291bGQgZWFzaWx5IGdldCBzaWxseSBhbmQgaW5zdGVhZCBoYW5kCiAgb3ZlciBTU0wgZGV0YWlscyBhcyBkYXRhIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBIVFRQIGhlYWRlcnMgYW5kIGJvZHkuIFRoaXMKICBoYXBwZW5lZCBiZWNhdXNlIGxpYmN1cmwgd291bGQgY29uc2lkZXIgdGhlIGNvbm5lY3Rpb24gaGFuZHNoYWtlIGRvbmUgdG9vCiAgZWFybHkuIFRoaXMgcHJvYmxlbSB3YXMgaW50cm9kdWNlZCBhdCBTZXB0ZW1iZXIgMjJuZCAyMDA4IHdpdGggbXkgZml4IG9mIHRoZQogIGJ1ZyAjMjEwNzM3NwoKICBUaGUgY29ycmVjdCBmaXggaXMgbm93IGluc3RlYWQgZG9uZSB3aXRoaW4gdGhlIEdudVRMUy1oYW5kbGluZyBjb2RlLCBhcyBib3RoCiAgdGhlIE9wZW5TU0wgYW5kIHRoZSBOU1MgY29kZSBhbHJlYWR5IGRlYWwgd2l0aCB0aGlzIHNpdHVhdGlvbiBpbiBzaW1pbGFyCiAgZmFzaGlvbi4gSSBhZGRlZCB0ZXN0IGNhc2UgNTYwIGluIGFuIGF0dGVtcHQgdG8gdmVyaWZ5IHRoaXMgZml4LCBidXQKICB1bmZvcnR1bmF0ZWx5IGl0IGRpZG4ndCB0cmlnZ2VyIGl0IGV2ZW4gYmVmb3JlIHRoaXMgZml4IQoKWWFuZyBUc2UgKDExIE5vdiAyMDA4KQotIFJlbGF0ZWQgd2l0aCBidWcgIzIyMzA1MzUgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIyMzA1MzUpCiAgRGFuaWVsIEZhbmRyaWNoIG5vdGljZWQgdGhhdCBjdXJsX2FkZHJpbmZvIHdhcyBhbHNvIG1pc3NpbmcgaW4gdGhlIGJ1aWxkCiAgcHJvY2VzcyBvZiBvdGhlciBmb3VyIG5vbi1jb25maWd1cmUgcGxhdGZvcm1zLiBBZGRlZCBub3cuCgpEYW5pZWwgRmFuZHJpY2ggKDcgTm92IDIwMDgpCi0gVGhlIGdldGlmYWRkcnMoKSB2ZXJzaW9uIG9mIEN1cmxfaWYyaXAoKSBjcmFzaGVkIHdoZW4gdXNlZCBvbiBhIExpbnV4CiAgc3lzdGVtIHdpdGggYSBURVFMIGxvYWQtYmFsYW5jaW5nIGRldmljZSBjb25maWd1cmVkLCB3aGljaCBkb2Vzbid0CiAgaGF2ZSBhbiBhZGRyZXNzLiAgVGhhbmtzIHRvIEFkYW0gU2FtcHNvbiBmb3Igc3BvdHRpbmcgdGhpcyAoYnVnICMyMjM0OTIzKS4KCllhbmcgVHNlICg2IE5vdiAyMDA4KQotIE1lcmdlZCBleGlzdGluZyBJUHY0IGFuZCBJUHY2IEN1cmxfaXAyYWRkciBmdW5jdGlvbnMgaW50byBhIHNpbmdsZSBvbmUKICB3aGljaCBub3cgYWxzbyB0YWtlcyBhIHByb3RvY29sIGFkZHJlc3MgZmFtaWx5IGFyZ3VtZW50LgoKLSBCdWcgIzIyMzA1MzUgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIyMzA1MzUpIHBvaW50ZWQgb3V0IGEKICBwcm9ibGVtIHdpdGggTVNWQyA2IG1ha2VmaWxlIHRoYXQgY2F1c2VkIGEgYnVpbGQgZmFpbHVyZS4gSXQgd2FzIG5vdGVkIHRoYXQKICB0aGUgY3VybF9hZGRyaW5mby5vYmogcmVmZXJlbmNlIHdhcyBtaXNzaW5nLiBJIHRvb2sgdGhlIG9wcG9ydHVuaXR5IHRvIHNvcnQKICB0aGUgbGlzdCBpbiB3aGljaCB0aGlzIHdhcyBtaXNzaW5nLiBJc3N1ZSBzdWJtaXR0ZWQgYnkgSm9obiBXaWxraW5zb24uCgpWZXJzaW9uIDcuMTkuMSAoNSBOb3ZlbWJlciAyMDA4KQoKRGFuaWVsIFN0ZW5iZXJnICg0IE5vdiAyMDA4KQotIENVUkxJTkZPX0ZJTEVUSU1FIG5vdyB3b3JrcyBmb3IgZmlsZTovLyB0cmFuc2ZlcnMgYXMgd2VsbAoKRGFuaWVsIFN0ZW5iZXJnICgzIE5vdiAyMDA4KQotIEJ1ZyAjMjIxODQ4MCAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjIxODQ4MCkgcG9pbnRlZCBvdXQgYQogIHByb2JsZW0gd2l0aCBteSBDVVJMSU5GT19QUklNQVJZX0lQIGZpeCBmcm9tIE9jdG9iZXIgN3RoIHRoYXQgY2F1c2VkIGEgTlVMTAogIHBvaW50ZXIgcmVhZC4gSSBhbHNvIHRvb2sgdGhlIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHRoaXMgbG9naWMgKHN0b3Jpbmcgb2YKICB0aGUgY29ubmVjdGlvbidzIElQIGFkZHJlc3MpIHNvbWV3aGF0IGFzIHdlIGhhZCBpdCBzdG9yZWQgaW4gdHdvIGRpZmZlcmVudAogIHBsYWNlcyBhbmQgd2F5cyBwcmV2aW91c2x5IGFuZCB0aGV5IGFyZSBub3cgdW5pZmllZC4KCllhbmcgVHNlICgzIE5vdiAyMDA4KQotIEZpeCB1bmRlcnNpemVkIElQdjYgYWRkcmVzcyBpbnRlcm5hbCBidWZmZXIuIElQdjYgYWRkcmVzcyBzdHJpbmdzIGxvbmdlcgogIHRoYW4gMzUgY2hhcmFjdGVycyB3b3VsZCBiZSB0cnVuY2F0ZWQuCgpEYW5pZWwgU3RlbmJlcmcgKDIgTm92IDIwMDgpCi0gRGFuaWVsIEpvaG5zb24gcmVwb3J0ZWQgYW5kIGZpeGVkOgoKICBXaGVuIGMtYXJlcyBpc24ndCBlbmFibGVkLCBsaWJjdXJsIGJ5IGRlZmF1bHQgY2FsbHMgZ2V0YWRkcmluZm8gd2l0aCBmYW1pbHkKICBzZXQgdG8gUEZfVU5TUEVDIHdoaWNoIGNhdXNlcyBnZXRhZGRyaW5mbyB0byByZXR1cm4gYWxsIGF2YWlsYWJsZSBhZGRyZXNzZXMsCiAgYm90aCBJUHY0IGFuZCBJUHY2LiBMaWJjdXJsIHRoZW4gdHJpZXMgZWFjaCBvbmUgdW50aWwgaXQgY2FuIGNvbm5lY3QuIElmIHRoZQogIG5ldCBjb25uZWN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBJUHY2LCBsaWJjdXJsIGNhbiBzdGlsbCBmYWxsIGJhY2sgdG8gSVB2NC4KCiAgSG93ZXZlciwgc2luY2UgYy1hcmVzIGRvZXNuJ3Qgc3VwcG9ydCBQRl9VTlNQRUMsIHdoZW4gaXQncyB1c2VkIGl0IGRlZmF1bHRzCiAgdG8gdXNpbmcgZmFtaWx5PVBGX0lORVQ2IGFuZCB0aGVyZWZvcmUgb25seSByZXR1cm5zIElQdjYgYWRkcmVzc2VzIHdoZW4gQUFBQQogIHJlY29yZHMgYXJlIGF2YWlsYWJsZSwgZXZlbiBpZiBJUHY0IGFkZHJlc3NlcyBhcmUgYWxzbyBhdmFpbGFibGUuIFRoZSBlZmZlY3QKICBpcyB0aGF0IHNpbmNlIG15IElTUCBkb2Vzbid0IGRvIElQdjYsIGxpYmN1cmwgY2FuJ3QgY29ubmVjdCBhdCBhbGwgdG8gYSBzaXRlCiAgdGhhdCBoYXMgQUFBQSByZWNvcmRzLiBJdCB3aWxsIHdvcmsgaWYgSSBleHBsaWNpdGx5IHVzZSBDVVJMX0lQUkVTT0xWRV9WNCBvcgogIC0taXB2NCB3aXRoIHRoZSBjdXJsIHRvb2wuIEkgZGlzY292ZXJlZCB0aGlzIHdoZW4gY3VybCB3b3VsZCBmYWlsIHRvIGNvbm5lY3QKICB0byBzZWVtaW5nbHkgcmFuZG9tIHNpdGVzLiBJdCB0dXJucyBvdXQgdGhleSB3ZXJlbid0IHJhbmRvbSwgdGhleSB3ZXJlIHNpdGVzCiAgd2l0aCBBQUFBIHJlY29yZHMuCgogIFNvIG5vdyBsaWJjdXJsIGRlZmF1bHRzIHRvIFBGX0lORVQuLi4gdW50aWwgYy1hcmVzIGhhcyBiZWVuIHRvdWdodCB0byBvZmZlcgogIGJvdGguCgpZYW5nIFRzZSAoMzEgT2N0IDIwMDgpCi0gVGVzdHMgNTU4IGFuZCA1NTkgYXJlIHN0YWJpbGl6ZWQuIFRoZXNlIHR3byB0ZXN0cyB3ZXJlIGluaXRpYWxseSBpbnRyb2R1Y2VkCiAgdG8gYWlkIGluIHRoZSBsb2NhdGlvbiBvZiBhIHNlZy1mYXVsdCB3aGljaCB3YXMgb25seSB0cmlnZ2VyZWQgb24gbm9uLWRlYnVnCiAgYnVpbGRzIGRvbmUgd2l0aCB0aGUgaWNjIDkuMSBJbnRlbCBjb21waWxlci4gVGVzdCA1NTggZG9lcyBub3QgdHJpZ2dlciB0aGUKICBwcm9ibGVtLCBidXQgdGVzdCA1NTkgZG9lcyB0cmlnZ2VyIGl0LiBBcyBvZiB0b2RheSwgaXQgaXNuJ3QgeWV0IGFic29sdXRlbHkKICBjbGVhciBpZiBpdCBpcyBhIGNvbXBpbGVyIG9wdGltaXplciBpc3N1ZSBvciBhIG1lbW9yeSBjb3JydXB0aW9uIG9uZS4KCllhbmcgVHNlICgzMCBPY3QgMjAwOCkKLSBVc2Ugb3VyIEN1cmxfYWRkcmluZm8gc3RydWN0dXJlIGRlZmluaXRpb24gdG8gaGFuZGxlIGFkZHJlc3MgaW5mbyBkYXRhIGV2ZW4KICB3aGVuIGEgc3lzdGVtIGFkZHJpbmZvIHN0cnVjdCBpcyBhdmFpbGFibGUuIFByb3ZpZGUgYW5kIHVzZSBhIHdyYXBwZXIgYXJvdW5kCiAgc3lzdGVtcyBnZXRhZGRyaW5mbyBmdW5jdGlvbiwgQ3VybF9nZXRhZGRyaW5mb19leCB3aGljaCByZXR1cm5zIGEgcG9pbnRlciB0bwogIGEgbGlzdCBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgQ3VybF9hZGRyaW5mbyBzdHJ1Y3RzLgoKICBDb25maWd1cmUgd2lsbCBjaGVjayBmcmVlYWRkcmluZm8gYW5kIGdldGFkZHJpbmZvIGZ1bmN0aW9ucyBhbmQgZGVmaW5lCiAgcHJlcHJvY2Vzc29yIHN5bWJvbHMgSEFWRV9GUkVFQUREUklORk8gYW5kIEhBVkVfR0VUQUREUklORk8gd2hlbiBhcHByb3ByaWF0ZS4KCkRhbmllbCBGYW5kcmljaCAoMjkgT2N0IDIwMDgpCi0gRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgYSBmZXcgYnl0ZXMgb2YgZ2FyYmFnZSB0byBiZSBzZW50IGFmdGVyIGEKICBjdXJsX2Vhc3lfcGF1c2UoKSBkdXJpbmcgYSBjaHVua3kgdXBsb2FkLiBSZXBvcnRlZCBieSBTdGV2ZSBSb3Nrb3dza2kuCgpEYW5pZWwgRmFuZHJpY2ggKDI4IE9jdCAyMDA4KQotIENoYW5nZWQgdGhlICJyZXNvbHZlIiB0ZXN0IHByZWNoZWNrIHByb2dyYW0gdG8gdmVyaWZ5IHRoYXQgYW4gSVB2NiBzb2NrZXQKICBjYW4gYmUgY3JlYXRlZCBiZWZvcmUgcmVzb2x2aW5nIHRoZSBJUHY2IG5hbWUuICBJbiB0aGUgY29udGV4dCBvZiBydW5uaW5nCiAgYSB0ZXN0LCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcnVuIGFuIElQdjYgdGVzdCB3aGVuIGEgaG9zdCBpcyByZXNvbHZhYmxlCiAgYnV0IElQdjYgaXNuJ3QgdXNhYmxlLiAgVGhpcyBzaG91bGQgZml4IGZhaWx1cmVzIG9mIHRlc3QgMTA4NSBvbiBob3N0cyB3aXRoCiAgbGlicmFyeSBhbmQgRE5TIHN1cHBvcnQgZm9yIElQdjYgYnV0IHdoZXJlIGFjdHVhbCB1c2Ugb2YgSVB2NiBoYXMgYmVlbgogIGFkbWluaXN0cmF0aXZlbHkgZGlzYWJsZWQuCgpEYW5pZWwgRmFuZHJpY2ggKDI0IE9jdCAyMDA4KQotIEFkZGVkIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciB6bGliIGFuZCBPcGVuU1NMIG9uIFN5bWJpYW4gT1MuCgpEYW5pZWwgRmFuZHJpY2ggKDIxIE9jdCAyMDA4KQotIEZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCBTRlRQIHJhbmdlIHN1cHBvcnQgdG8gZml4IHRlc3QgY2FzZXMgNjM0IHRocm91Z2gKICA2MzcuCgpEYW5pZWwgRmFuZHJpY2ggKDE3IE9jdCAyMDA4KQotIEZpeGVkIGEgY29tcGlsZSBlcnJvciByZXBvcnRlZCBieSBBbGJlcnQgQ2hpbiBvbiBBSVggYW5kIElSSVggd2hlbiB1c2luZwogIEdUTFMuCgpEYW5pZWwgU3RlbmJlcmcgKDE2IE9jdCAyMDA4KQotIElnb3IgTm92b3NlbHRzZXYgYWRkZWQgQ1VSTE9QVF9QUk9YWVVTRVIgYW5kIENVUkxPUFRfUFJPWFlQQVNTV09SRCB0aGF0IHRoZW4KICBtYWtlIENVUkxPUFRfUFJPWFlVU0VSUFdEIHNvcnQgb2YgZGVwcmVjYXRlZC4gVGhlIHByaW1hcnkgbW90aXZlIGZvciBhZGRpbmcKICB0aGVzZSBuZXcgb3B0aW9ucyBpcyB0aGF0IHRoZXkgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIHRoZSBjb2xvbiBzZXBhcmF0b3IKICB0aGF0IHRoZSBDVVJMT1BUX1BST1hZVVNFUlBXRCBvcHRpb24gZG9lcy4KCkRhbmllbCBTdGVuYmVyZyAoMTUgT2N0IDIwMDgpCi0gUGFzY2FsIFRlcmphbiBmaWxlZCBidWcgIzIxNTQ2MjcKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjE1NDYyNykgd2hpY2ggcG9pbnRlZCBvdXQgdGhhdCBsaWJjdXJsCiAgdXNlcyBzdHJjYXNlY21wKCkgaW4gbXVsdGlwbGUgcGxhY2VzIHdoZXJlIGl0IGNhdXNlcyBmYWlsdXJlcyB3aGVuIHRoZQogIFR1cmtpc2ggbG9jYWxlIGlzIHVzZWQuIFRoaXMgaXMgYmVjYXVzZSAnaScgYW5kICdJJyBpc24ndCB0aGUgc2FtZSBsZXR0ZXIgc28KICBzdHJjYXNlY21wKCkgb24gdGhvc2UgbGV0dGVycyBhcmUgZGlmZmVyZW50IGluIFR1cmtpc2ggdGhhbiBpbiBFbmdsaXNoIChvcgogIGp1c3QgYWJvdXQgYWxsIG90aGVyIGxhbmd1YWdlcykuIEkgdGh1cyBpbnRyb2R1Y2VkIGEgdG90YWxseSBuZXcgaW50ZXJuYWwKICBmdW5jdGlvbiBpbiBsaWJjdXJsIChjYWxsZWQgQ3VybF9yYXdfZXF1YWwpIGZvciBkb2luZyBjYXNlIGluc2VudGl2ZQogIGNvbXBhcmlzb25zIGZvciBlbmdsaXNoLShhc2NpaT8pIHN0eWxlIHN0cmluZ3MgdGhhdCB0aHVzIHdpbGwgbWFrZSAiZmlsZSIKICBhbmQgIkZJTEUiIG1hdGNoIGV2ZW4gaWYgdGhlIFR1cmtpc2ggbG9jYWxlIGlzIHNlbGVjdGVkLgoKRGFuaWVsIEZhbmRyaWNoICgxNSBPY3QgMjAwOCkKLSBBIDxwcmVjaGVjaz4gY29tbWFuZCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgZmFpbGVkIGlmIGl0IHJldHVybnMgYSBub24temVybwogIHJldHVybiBjb2RlLiAgVGhpcyB3YXksIGlmIHRoZSBwcmVjaGVjayBjb21tYW5kIGNhbid0IGJlIHJ1biBhdCBhbGwgZm9yCiAgd2hhdGV2ZXIgcmVhc29uLCBpdCdzIHRyZWF0ZWQgYXMgYSBwcmVjaGVjayBmYWlsdXJlIHdoaWNoIGNhdXNlcyB0aGUKICB0ZXN0IHRvIGJlIHNraXBwZWQuCgpEYW5pZWwgU3RlbmJlcmcgKDE1IE9jdCAyMDA4KQotIEpvaG4gV2lsa2luc29uIGZpbGVkIGJ1ZyAjMjE1NTQ5NgogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMTU1NDk2KSBwb2ludGluZyBvdXQgYW4gZXJyb3IgY2FzZQogIHdpdGhvdXQgYSBwcm9wZXIgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS4gV2hlbiBhIHJlYWQgY2FsbGJhY2sgcmV0dXJucwogIGEgdG9vIGxhcmdlIHZhbHVlIChsaWtlIHdoZW4gdHJ5aW5nIHRvIHJldHVybiBhIG5lZ2F0aXZlIG51bWJlcikgaXQgd291bGQKICB0cmlnZ2VyIGFuZCB0aGUgZ2VuZXJpYyBlcnJvciBtZXNzYWdlIHRoZW4gbWFrZXMgdGhlIHByb3BsZW0gc2xpZ2h0bHkKICBkaWZmZXJlbnQgdG8gdHJhY2sgZG93bi4gSSd2ZSBhZGRlZCBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGlzIG5vdy4KCkRhbmllbCBGYW5kcmljaCAoOSBPY3QgMjAwOCkKLSBGaXhlZCB0aGUgLS1pbnRlcmZhY2Ugb3B0aW9uIHRvIHdvcmsgd2l0aCBJUHY2IGNvbm5lY3Rpb25zIG9uIGdsaWJjCiAgc3lzdGVtcyBzdXBwb3J0aW5nIGdldGlmYWRkcnMoKS4gQWxzbyBmaXhlZCBhIHByb2JsZW0gd2hlcmUgYW4gSVB2NgogIGFkZHJlc3MgY291bGQgYmUgY2hvc2VuIGluc3RlYWQgb2YgYW4gSVB2NCBvbmUgZm9yIC0taW50ZXJmYWNlIHdoZW4gaXQKICBpbnZvbHZlZCBhIG5hbWUgbG9va3VwLgoKRGFuaWVsIEZhbmRyaWNoICg4IE9jdCAyMDA4KQotIEFkZGVkIHRlc3RzIDEwODIgdGhyb3VnaCAxMDg1IHRvIHRlc3Qgc3ltYm9saWMgLS1pbnRlcmZhY2UgcGFyYW1ldGVycwoKLSBBZGRlZCB0ZXN0cyA2MzMgdGhyb3VnaCA2MzcgdG8gdGVzdCB0aGUgbmV3IGZpbGUgcmFuZ2Ugc3VwcG9ydCBmb3IgU0ZUUC4KICBBbGwgYnV0IHRoZSBmaXJzdCB0ZXN0IGNhdXNlIGFuIGluZmluaXRlIGxvb3Agb3Igb3RoZXIgZmFpbHVyZSBhbmQgc28KICBhcmUgYWRkZWQgdG8gRElTQUJMRUQuCgpEYW5pZWwgU3RlbmJlcmcgKDggT2N0IDIwMDgpCi0gSm9obiBXaWxraW5zb24gZmlsZWQgYnVnICMyMTUyMjcwCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIxNTIyNzApIHdoaWNoIGlkZW50aWZpZWQgYW5kIGZpeGVkIGEKICBDVVJMSU5GT19SRURJUkVDVF9VUkwgbWVtb3J5IGxlYWsgYW5kIGFuIGFkZGl0aW9uYWwgd3JvbmctZG9pbmc6CgogIEFueSBzdWJzZXF1ZW50IHRyYW5zZmVyIHdpdGggYSByZWRpcmVjdCBsZWFrcyBtZW1vcnksIGV2ZW50dWFsbHkgY3Jhc2hpbmcKICB0aGUgcHJvY2VzcyBwb3RlbnRpYWxseS4KCiAgQW55IHN1YnNlcXVlbnQgdHJhbnNmZXIgV0lUSE9VVCBhIHJlZGlyZWN0IGNhdXNlcyB0aGUgbW9zdCByZWNlbnQgcmVkaXJlY3QKICB0aGF0IERJRCBvY2N1ciBvbiBzb21lIHByZXZpb3VzIHRyYW5zZmVyIHRvIHN0aWxsIGJlIHJlcG9ydGVkLgoKLSBJZ29yIE5vdm9zZWx0c2V2IGZpbGVkIGJ1ZyAjMjExMTYxMwogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMTExNjEzKSB0aGF0IGV2ZW50dWFsbHkgaWRlbnRpZmllZCBhCiAgZmxhdyBpbiBob3cgdGhlIG11bHRpX3NvY2tldCBpbnRlcmZhY2UgaW4gc29tZSBjYXNlcyBtaXNzZWQgdG8gY2FsbCB0aGUKICB0aW1lb3V0IGNhbGxiYWNrIHdoZW4gZWFzeSBpbnRlcmZhY2VzIGFyZSByZW1vdmVkIGFuZCBhZGRlZCB3aXRoaW4gdGhlIHNhbWUKICBtaWxsaXNlY29uZC4KCi0gSWdvciBOb3Zvc2VsdHNldiBicm91Z2h0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VkIHR3byBuZXcgb3B0aW9ucyB0bwogIGN1cmxfZWFzeV9zZXRvcHQ6IENVUkxPUFRfVVNFUk5BTUUgYW5kIENVUkxPUFRfUEFTU1dPUkQgdGhhdCBzb3J0IG9mCiAgZGVwcmVjYXRlcyB0aGUgZ29vZCBvbGQgQ1VSTE9QVF9VU0VSUFdEIHNpbmNlIHRoZXkgYWxsb3cgYXBwbGljYXRpb25zIHRvIHNldAogIHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGluZGVwZW5kZW50bHkgYW5kIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSBhbGxvdwogIGJvdGggdG8gY29udGFpbiBjb2xvbihzKSB3aGljaCBDVVJMT1BUX1VTRVJQV0QgZG9lc24ndCBmdWxseSBzdXBwb3J0LgoKRGFuaWVsIEZhbmRyaWNoICg3IE9jdCAyMDA4KQotIENoYW5nZWQgdGhlIGhhbmRsaW5nIG9mIHJlYWQvd3JpdGUgZXJyb3JzIGluIEN1cmxfcGVyZm9ybSgpIHRvIGFsbG93IGEKICBhIGZyZXNoIGNvbm5lY3Rpb24gdG8gYmUgbWFkZSBpbiBzdWNoIGNhc2VzIGFuZCB0aGUgcmVxdWVzdCByZXRyYW5zbWl0dGVkLgogIFRoaXMgc2hvdWxkIGZpeCB0ZXN0IGNhc2UgMTYwLiAgQWRkZWQgdGVzdCBjYXNlIDEwNzkgaW4gYW4gYXR0ZW1wdCB0bwogIHRlc3QgYSBzaW1pbGFyIGNvbm5lY3Rpb24gZHJvcHBpbmcgc2NlbmFyaW8sIGJ1dCBhcyBhIHJhY2UgY29uZGl0aW9uLCBpdCdzCiAgaGFyZCB0byB0ZXN0IHJlbGlhYmx5LgoKLSBDcmVhdGVkIHRlc3QgY2FzZXMgMTA4MCBhbmQgMTA4MSB0byByZXByb2R1Y2UgYSBwcm9ibGVtIG9mCiAgQ1VSTElORk9fUkVESVJFQ1RfVVJMIGxlYWtpbmcgbWVtb3J5IGFuZCByZXR1cm5pbmcgaW5jb3JyZWN0IHJlc3VsdHMgd2hlbgogIHR3byBVUkxzIGFyZSByZXF1ZXN0ZWQuIFJlcG9ydGVkIGJ5IHZtcGRlbW8gaW4gYnVnICMyMTUyMjcwCgpEYW5pZWwgU3RlbmJlcmcgKDcgT2N0IDIwMDgpCi0gRml4ZWQgQ1VSTElORk9fUFJJTUFSWV9JUDogV2hlbiBsaWJjdXJsIGNyZWF0ZWQgYSBjb25uZWN0aW9uIHRvIGhvc3QgQSB0aGVuCiAgdGhlIGFwcCByZS11c2VkIHRoZSBoYW5kbGUgdG8gZG8gYSBjb25uZWN0aW9uIHRvIGhvc3QgQiBhbmQgdGhlbiBhZ2FpbgogIHJlLXVzZWQgdGhlIGhhbmRsZSB0byBob3N0IEEsIGl0IHdvdWxkIG5vdCB1cGRhdGUgdGhlIGluZm8gd2l0aCBob3N0IEEncyBJUAogIGFkZHJlc3MgKGR1ZSB0byB0aGUgY29ubmVjdGlvbiBiZWluZyByZS11c2VkKSBidXQgaXQgd291bGQgaW5zdGVhZCByZXBvcnQKICB0aGUgaW5mbyBmcm9tIGhvc3QgQi4KCllhbmcgVHNlICg3IE9jdCAyMDA4KQotIEFkZGVkIC0tZW5hYmxlLW9wdGltaXplIGNvbmZpZ3VyZSBvcHRpb24gdG8gZW5hYmxlIGFuZCBkaXNhYmxlIGNvbXBpbGVyCiAgb3B0aW1pemF0aW9ucyB0byBhbGxvdyBkZWNvdXBsZWQgc2V0dGluZyBmcm9tIC0tZW5hYmxlLWRlYnVnLgoKWWFuZyBUc2UgKDIgT2N0IDIwMDgpCi0gQWRkZWQgLS1lbmFibGUtd2FybmluZ3MgY29uZmlndXJlIG9wdGlvbiB0byBlbmFibGUgYW5kIGRpc2FibGUgc3RyaWN0CiAgY29tcGlsZXIgd2FybmluZ3MgdG8gYWxsb3cgZGVjb3VwbGVkIHNldHRpbmcgZnJvbSAtLWVuYWJsZS1kZWJ1Zy4KCiAgcnVudGVzdHMucGwgd2lsbCBub3cgcnVuIHdpdGggcGlja3kgY29tcGlsZXIgd2FybmluZ3MgZW5hYmxlZCB1bmxlc3MKICBleHBsaWNpdGx5IGRpc2FibGVkLgoKRGFuaWVsIEZhbmRyaWNoICgxIE9jdCAyMDA4KQotICJtYWtlIGNsZWFuIiBub3cgY2xlYW5zIG91dCB0aGUgZG9jcyBhbmQgdGVzdHMgZGlyZWN0b3JpZXMsIHRvby4KCkRhbmllbCBTdGVuYmVyZyAoMzAgU2VwIDIwMDgpCi0gVGhlIGxpYmN1cmwgRlRQIGNvZGUgbm93IHJldHVybnMgQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EIGVycm9yIHdoZW4gU0laRQogIGdldHMgYSA1NTAgcmVzcG9uc2UgYmFjayBmb3IgdGhlIGNhc2VzIHdoZXJlIGEgZG93bmxvYWQgKG9yIE5PQk9EWSkgaXMKICB3YW50ZWQuIEl0IHN0aWxsIGFsbG93cyBhIDU1MCBhcyByZXNwb25zZSBpZiB0aGUgU0laRSBpcyB1c2VkIGFzIHBhcnQgb2YgYW4KICB1cGxvYWQgcHJvY2VzcyAobGlrZSBpZiByZXN1bWluZyBhbiB1cGxvYWQgaXMgcmVxdWVzdGVkIGFuZCB0aGUgZmlsZSBpc24ndAogIHRoZXJlIGJlZm9yZSB0aGUgdXBsb2FkKS4gSSBhbHNvIG1vZGlmaWVkIHRoZSBGVFAgdGVzdCBzZXJ2ZXIgYW5kIGEgZmV3IHRlc3QKICBjYXNlcyBhY2NvcmRpbmdseSB0byBtYXRjaCB0aGlzIG1vZGlmaWVkIGJlaGF2aW9yLgoKRGFuaWVsIFN0ZW5iZXJnICgyOSBTZXAgMjAwOCkKLSBEYW5pZWwgRWdnZXIgcHJvdmlkZWQgYSBwYXRjaCB0aGF0IGFsbG93cyB5b3UgdG8gZGlzYWJsZSBwcm94eSBzdXBwb3J0IGluCiAgbGliY3VybCB0byBzb21ld2hhdCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeS4gUnVuIGNvbmZpZ3VyZQogIC0tZGlzYWJsZS1wcm94eS4KCkRhbmllbCBGYW5kcmljaCAoMjkgU2VwIDIwMDgpCi0gTW92ZWQgYWxsIHNpZ25hbC1iYXNlZCBuYW1lIHJlc29sdXRpb24gdGltZW91dCBoYW5kbGluZyBpbnRvIGEgc2luZ2xlIG5ldwogIEN1cmxfcmVzb2x2X3RpbWVvdXQgZnVuY3Rpb24gdG8gcmVkdWNlIGNvdXBsaW5nLgoKRGFuaWVsIFN0ZW5iZXJnICgyOSBTZXAgMjAwOCkKLSBJYW4gTHluYWdoIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBub3cgbWFrZXMgQ1VSTE9QVF9SQU5HRSB3b3JrIGZpbmUgZm9yIFNGVFAKICBkb3dubG9hZHMhCgotIE1heGltIEl2YW5vdiBmaWxlZCBidWcgcmVwb3J0ICMyMTA3ODAzCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIxMDc4MDMpICJubyBDVVJMSU5GT19SRURJUkVDVF9VUkwgaW4KICBtdWx0aSBtb2RlIiB0b2dldGhlciB3aXRoIGEgcGF0Y2ggdGhhdCBmaXhlZCB0aGUgcHJvYmxlbS4KCkRhbmllbCBTdGVuYmVyZyAoMjUgU2VwIDIwMDgpCi0gRW1hbnVlbGUgQm92aXNpbyBzdWJtaXR0ZWQgYnVnIHJlcG9ydCAjMjEyNjQzNS4gV2UgZml4ZWQgdGhlIEhUVFAgRGlnZXN0CiAgYXV0aCBjb2RlIHRvIG5vdCBiZWhhdmUgYmFkbHkgd2hlbiBnZXR0aW5nIGEgYmxhbmsgcmVhbG0gd2l0aAogIHJlYWxtPSIiLiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMTI2NDM1CgpEYW5pZWwgRmFuZHJpY2ggKDIzIFNlcCAyMDA4KQotIE1ha2Ugc3VyZSBub3QgdG8gZGVyZWZlcmVuY2UgdGhlIHdyb25nIFVybFN0YXRlIHByb3RvIHVuaW9uIG1lbWJlciB3aGVuCiAgc3dpdGNoaW5nIGZyb20gb25lIHByb3RvY29sIHRvIGFub3RoZXIgaW4gYSBzaW5nbGUgcmVxdWVzdCAoZS5nLgogIHJlZGlyZWN0aW5nIGZyb20gSFRUUCB0byBGVFAgYXMgaW4gdGVzdCAxMDU1KSBieSByZXNldHRpbmcKICBzdGF0ZS5leHBlY3QxMDBoZWFkZXIgYmVmb3JlIGV2ZXJ5IHJlcXVlc3QuCgpEYW5pZWwgU3RlbmJlcmcgKDIzIFNlcCAyMDA4KQotIEludHJvZHVjaW5nIEphbWllIExva2llcidzIGZ1bmN0aW9uIGZvciBkYXRlIHRvIGVwb2NoIGNvbnZlcnNpb24gdXNlZCBpbiB0aGUKICBkYXRlIHBhcnNlciBmdW5jdGlvbi4gVGhpcyBtYWtlcyBvdXIgZnVuY3Rpb24gbGVzcyBkZXBlbmRlbnQgb24gc3lzdGVtLQogIHByb3ZpZGVkIGZ1bmN0aW9ucyBhbmQgaW5zdGVhZCB3ZSBkbyBhbGwgdGhlIG1hZ2ljIG91cnNlbHZlcy4gV2UgYWxzbyBubwogIGxvbmdlciBkZXBlbmQgb24gdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlLiBTd2l0Y2hpbmcgdG8gb3VyIG93biBjb252ZXJ0ZXIKICBoYXMgc29tZSBzaWRlLWVmZmVjdCBhbmQgdGhleSBhcmUgbm90ZWQgaGVyZSBmb3IgZnV0dXJlIHJlZmVyZW5jZSAodGFrZW4KICBmcm9tIGEgbWFpbCBieSBtciBMb2tpZXIpOgoKICB0aW1lX3QgaXMgbm90IG1lYXN1cmVkIGluIHNlY29uZHMgaW4gdGhlIEFOU0kgQyBzdGFuZGFyZCAtIG9yIGV2ZW4gY291bnRlZAogIHVuaWZvcm1seSAtIHdlaXJkIHBsYXRmb3JtcyBjYW4gdXNlIG90aGVyIG51bWVyaWMgcmVwcmVzZW50YXRpb25zIG9mIGRhdGVzCiAgaW4gdGltZV90IC0gaGVuY2UgdGhlIGRpZmZ0aW1lKCkgZnVuY3Rpb24uCgogIE9uIFBPU0lYIHRpbWVfdCBpcyBtZWFzdXJlZCBpbiBVVEMgc2Vjb25kcywgd2hpY2ggbWVhbnMgbm90IGluY2x1ZGluZyBsZWFwCiAgc2Vjb25kcy4gIEJ1dCBpdCdzIG1lbnRpb25lZCBpbiBhIGZldyBwbGFjZXMgdGhhdCBzb21lIG9sZCBQT1NJWC1pc2gKICBlbnZpcm9ubWVudHMgaW5jbHVkZSBsZWFwIHNlY29uZHMgaW4gdGhlaXIgdGltZV90IGNvdW50cy4uLgoKICBJJ20gcHJldHR5IHN1cmUgW3RoZSBuZXcgaW1wbGVtZW50YXRpb24gaXNdIGNvcnJlY3Qgb24gYW55dGhpbmcgdHJ1bHkgUE9TSVguCiAgQW5kIGl0J3Mgb2J2aW91c2x5IGEgbG90IGxlc3MgZGVwZW5kZW50IG9uIHBsYXRmb3JtIHF1aXJrcyBhbmQgY29ybmVyIGNhc2VzCiAgaW4gbWFueSB3YXlzIHRoYW4gdGhlIG1rdGltZSgpIHZlcnNpb24uCgotIFJvYiBDcml0dGVuZGVuIGJyb3VnaHQgYSBwYXRjaCB0byAiYWRkIHNvbWUgbG9ja2luZyBmb3IgdGhyZWFkLXNhZmV0eSB0byBOU1MKICBpbXBsZW1lbnRhdGlvbiIuCgpEYW5pZWwgU3RlbmJlcmcgKDIyIFNlcCAyMDA4KQotIE1hZGUgdGhlIFNPQ0tTIGNvZGUgdXNlIHRoZSBuZXcgQ3VybF9yZWFkX3BsYWluKCkgZnVuY3Rpb24gdG8gZml4IHRoZSBidWcKICBNYXJrdXMgTW9lbGxlciByZXBvcnRlZDogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAwOC0wOS8wMDE2Lmh0bWwKCi0gcmVjdigpIGVycm9ycyBvdGhlciB0aGFuIHRob3NlIGVxdWFsIHRvIEVBR0FJTiBub3cgY2F1c2UgcHJvcGVyCiAgQ1VSTEVfUkVDVl9FUlJPUiB0byBnZXQgcmV0dXJuZWQuIFRoaXMgbWFkZSB0ZXN0IGNhc2UgMTYwIGZhaWwgc28gSSd2ZSBub3cKICBkaXNhYmxlZCBpdCB1bnRpbCB3ZSBjYW4gZmlndXJlIG91dCBhbm90aGVyIHdheSB0byBleGVyY2lzZSB0aGF0IGxvZ2ljLgoKLSBNaWNoYWVsIEdvZmZpb3VsIGZpbGVkIGJ1ZyByZXBvcnQgIzIxMDczNzcgIlByb2JsZW0gd2l0aCBtdWx0aSArIEdudVRMUyArCiAgcHJveHkiIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMTA3Mzc3KSB0aGF0IHNob3dlZCBob3cgYSBtdWx0aQogIGludGVyZmFjZSB1c2luZyBwcm9ncmFtIGRpZG4ndCB3b3JrIHdoZW4gYnVpbHQgd2l0aCBHbnVUTFMgYW5kIGEgQ09OTkVDVAogIHJlcXVlc3Qgd2FzIGRvbmUgb3ZlciBhIHByb3h5IChiYXNpY2FsbHkgdGVzdCA1MDIgb3ZlciBhIHByb3h5IHRvIGEgSFRUUFMKICBzaXRlKS4gSXQgdHVybmVkIG91dCB0aGUgc3NsIGNvbm5lY3QgZnVuY3Rpb24gd291bGQgZ2V0IGNhbGxlZCB0d2ljZSB3aGljaAogIGNhdXNlZCB0aGUgc2Vjb25kIGNhbGwgdG8gZmFpbC4KCkRhbmllbCBGYW5kcmljaCAoMjIgU2VwIDIwMDgpCi0gRml4ZWQgdGVzdCA1MzkgdG8gaGFuZGxlIGFuIG91dCBvZiBtZW1vcnkgY29uZGl0aW9uIHRoYXQgc2hvd3MgdXAgbm93CiAgdGhhdCBtZW1kZWJ1Zy5oIGlzIGluY2x1ZGVkIGluIHRoZSB0ZXN0IHByb2dyYW1zLgoKWWFuZyBUc2UgKDIwIFNlcCAyMDA4KQotIEZpeCByZWdyZXNzaW9uIGluIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2ggYWZmZWN0ZWQgT3BlblNTTCBidWlsZHMgb24gTVNZUy4KCllhbmcgVHNlICgxOSBTZXAgMjAwOCkKLSBjb25maWd1cmUgc2NyaXB0IG5vdyBjaGVja3MgYXZhaWxhYmlsaXR5IG9mIHRoZSBhbGFybSgpIGZ1bmN0aW9uLgoKRGFuaWVsIEZhbmRyaWNoICgxOCBTZXAgMjAwOCkKLSBEb24ndCBib3RoZXIgdG8gaW5zdGFsbCBhIFNJR0FMUk0gaGFuZGxlciB1bmxlc3MgYWxhcm0oKSBpcyBhdmFpbGFibGUuCiAgQWxzbywgbGVhdmUgdGhlIGV4aXN0aW5nIFNJR0FMUk0gaGFuZGxlciBhbG9uZSBpZiB0aGUgdGltZW91dCBpcyB0b28gc21hbGwKICB0byBoYW5kbGUuCgpEYW5pZWwgRmFuZHJpY2ggKDE3IFNlcCAyMDA4KQotIFJlbW92ZWQgcmVmZXJlbmNlIHRvIGN1cmwtY2EtYnVuZGxlLmNydCBpbiB0aGUgaG9zdCB2ZXJpZmljYXRpb24gZmFpbHVyZQogIGVycm9yIG1lc3NhZ2UuCgpZYW5nIFRzZSAoMTcgU2VwIDIwMDgpCi0gSW1wcm92ZSBjb25maWd1cmUgZGV0ZWN0aW9uIG9mIGdldGhvc3RuYW1lKCksIGxvY2FsdGltZV9yKCksIHN0cnN0cigpLAogIGdldHNlcnZieXBvcnRfcigpLCBnZXRob3N0YnlhZGRyX3IoKSBhbmQgZ2V0aG9zdGJ5bmFtZV9yKCkuCgpZYW5nIFRzZSAoMTQgU2VwIDIwMDgpCi0gSW1wcm92ZSBjb25maWd1cmUgZGV0ZWN0aW9uIG9mIHN0cmNhc2VjbXAoKSwgc3RyY2FzZXN0cigpLCBzdHJjbXBpKCksCiAgc3RyaWNtcCgpLCBzdHJsY2F0KCksIHN0cm5jYXNlY21wKCksIHN0cm5jbXBpKCkgYW5kIHN0cm5pY21wKCkuCgpZYW5nIFRzZSAoMTMgU2VwIDIwMDgpCi0gRGlzYWJsZSB0cmFja2luZyBvZiBmZG9wZW4oKSBjYWxscyBpbiB0aGUgbG93LWxldmVsIG1lbW9yeSBsZWFrIHRyYWNraW5nCiAgY29kZSB3aGVuIGZkb3BlbigpIGlzIG5vdCBhdmFpbGFibGUsIHRvIGF2b2lkIGNvbXBpbGVyIGVycm9yLgoKWWFuZyBUc2UgKDEyIFNlcCAyMDA4KQotIEZ1cnRoZXIgYWRqdXN0IGRldGVjdGlvbiBvZiBzdHJlcnJvcl9yKCkgaW4gdGhlIGNvbmZpZ3VyZSBwcm9jZXNzLCBhbmQKICBlbnN1cmUgdGhhdCBlcnJubyBpcyBub3QgbW9kaWZpZWQgaW5zaWRlIEN1cmxfc3RyZXJyb3IoKS4KCllhbmcgVHNlICgxMCBTZXAgMjAwOCkKLSBJbXByb3ZlIGRldGVjdGlvbiBvZiBnbXRpbWVfcigpLCBzdHJ0b2xsKCksIHNpZ2FjdGlvbigpLCBzdHJ0b2tfcigpLAogIHN0cmR1cCgpIGFuZCBmdHJ1bmNhdGUoKSBpbiB0aGUgY29uZmlndXJlIHByb2Nlc3MuCgpEYW5pZWwgRmFuZHJpY2ggKDkgU2VwIDIwMDgpCi0gTWlrZSBSZXZpIGRpc2NvdmVyZWQgc29tZSBzd2FwcGVkIHNwZWVkIHN3aXRjaGVzIGRvY3VtZW50ZWQgaW4gdGhlIGN1cmwgbWFuCiAgcGFnZS4KCi0gQ2hlY2tlZCBpbiBzb21lIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgaW1wcm92ZW1lbnRzIGFuZCBmaXhlcyB0aGF0IEkKICBkaXNjb3ZlcmVkIGluIHRoZSBGcmVlQlNEIHBvcnRzIHN5c3RlbS4KCkRhbmllbCBTdGVuYmVyZyAoOCBTZXAgMjAwOCkKLSBEbWl0cnkgS3Vyb2Noa2luIHBhdGNoZWQgYSBwcm9ibGVtOiBJIGhhdmUgZm91bmQgYnVnIGluIHBpcGVsaW5pbmcgdGhyb3VnaAogIHByb3h5LiBJIGhhdmUgYSB0cmFuc3BhcmVudCBwcm94eS4gV2hlbiBydW5uaW5nIHdpdGggaHR0cF9wcm94eSBlbnZpcm9ubWVudAogIHZhcmlhYmxlIG5vdCBzZXQgbXkgdGVzdCBjb21wbGV0ZXMgZmluZSAoaXQgZ29lcyB0aHJvdWdoIHRyYW5zcGFyZW50CiAgcHJveHkpLiBXaGVuIEkgc2V0IGh0dHBfcHJveHkgdmFyaWFibGUgbXkgdGVzdCBoYW5ncyBhZnRlciB0aGUgZmlyc3QKICBkb3dubG9hZGVkIGlzIGNvbXBsZXRlLiBMb29rcyBsaWtlIHRoZSBzZWNvbmQgaGFuZGxlIG5ldmVyIGdldHMgb3V0IGZyb20KICBXQUlURE8gc3RhdGUuCgogIFRoZSBmaXg6IEl0IG1ha2VzIGNoZWNrUGVuZFBpcGVsaW5lIG1vdmUgMSBoYW5kbGVyIGZyb20gcGVuZCBwaXBlIHRvIHNlbmQKICBwaXBlIGlmIHBpcGVsaW5pbmcgaXMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIgYnV0IHRoZXJlIGFyZSBubyBoYW5kbGVzIGluCiAgc2VuZCBhbmQgcmVjdiBwaXBlcy4KCi0gU3RlZmFuIEtyYXVzZSBwb2ludGVkIG91dCB0aGF0IGxpYmN1cmwgd291bGQgd3JvbmdseSBzZW5kIGF3YXkgY29va2llcyB0bwogIHNpdGVzIGluIGNhc2VzIHdoZXJlIHRoZSBjb29raWUgY2xlYXJseSBoYXMgYSB2ZXJ5IG9sZCBleHBpcnkgZGF0ZS4gVGhlCiAgY29uZGl0aW9uIHdhcyBzaW1wbHkgdGhhdCBsaWJjdXJsJ3MgZGF0ZSBwYXJzZXIgd291bGQgZmFpbCB0byBjb252ZXJ0IHRoZQogIGRhdGUgYW5kIGl0IHdvdWxkIHRoZW4gY291bnQgYXMgYSAodGltZWQtYmFzZWQpIG1hdGNoLiBTdGFydGluZyBub3csIGEKICBtaXNzZWQgZGF0ZSBkdWUgdG8gYW4gdW5zdXBwb3J0ZWQgZGF0ZSBmb3JtYXQgb3IgZGF0ZSByYW5nZSB3aWxsIG5vdyBjYXVzZQogIHRoZSBjb29raWUgdG8gbm90IG1hdGNoLgoKRGFuaWVsIEZhbmRyaWNoICg1IFNlcCAyMDA4KQotIEltcHJvdmVkIHRoZSBsb2dpYyB0aGF0IGRlY2lkZXMgd2hldGhlciB0byB1c2UgSFRUUCAxLjEgZmVhdHVyZXMgb3Igbm90IGluIGEKICByZXF1ZXN0LiAgU2V0dGluZyBhIHNwZWNpZmljIHZlcnNpb24gd2l0aCBDVVJMT1BUX0hUVFBfVkVSU0lPTiBvdmVycmlkZXMKICBhbGwgb3RoZXIgY2hlY2tzLCBidXQgb3RoZXJ3aXNlLCBhIDEuMCByZXF1ZXN0IHdpbGwgYmUgbWFkZSBpZiB0aGUgc2VydmVyCiAgaXMga25vd24gdG8gc3VwcG9ydCBvbmx5IDEuMCBiZWNhdXNlIGl0IHByZXZpb3VzbHkgcmVzcG9uZGVkIHNvIGFuZCB0aGUKICBjb25uZWN0aW9uIHdhcyBrZXB0IGFsaXZlLCBvciBhIHJlc3BvbnNlIHRvIGEgcHJldmlvdXMgcmVxdWVzdCBvbiB0aGlzIGhhbmRsZQogIGNhbWUgYmFjayBhcyAxLjAuIFRoZSBsYXR0ZXIgY291bGQgdGFrZSBwbGFjZSBpbiBjYXNlcyBsaWtlIHJlZGlyZWN0aW9uIG9yCiAgYXV0aGVudGljYXRpb24gd2hlcmUgc2V2ZXJhbCByZXF1ZXN0cyBoYXZlIHRvIGJlIG1hZGUgYmVmb3JlIHRoZSBvcGVyYXRpb24KICBpcyBjb21wbGV0ZS4gIElmIGFueSBvbmUgb2YgdGhlIHNlcnZlcnMgaW4gYSByZWRpcmVjdGlvbiBjaGFpbiBzdXBwb3J0cyBvbmx5CiAgMS4wLCB0aGVuIHJlbWFpbmluZyByZXF1ZXN0cyB3aWxsIGJlIHNlbnQgaW4gMS4wIG1vZGUuCgotIERldGVjdCBjYXNlcyB3aGVyZSBhbiB1cGxvYWQgbXVzdCBiZSBzZW50IGNodW5rZWQgYW5kIHRoZSBzZXJ2ZXIgc3VwcG9ydHMKICBvbmx5IEhUVFAgMS4wIGFuZCByZXR1cm4gQ1VSTEVfVVBMT0FEX0ZBSUxFRC4KCkRhbmllbCBTdGVuYmVyZyAoNSBTZXAgMjAwOCkKLSBNYXJ0aW4gRHJhc2FyIHByb3ZpZGVkIHRoZSBDVVJMT1BUX1BPU1RSRURJUiBwYXRjaC4gSXQgcmVuYW1lcwogIENVUkxPUFRfUE9TVDMwMSAoYnV0IGFkZHMgYSBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciB5b3Ugd2hvCiAgZG9uJ3QgZGVmaW5lIENVUkxfTk9fT0xESUVTKS4gVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBub3cgYWxzbyBjaGFuZ2UgdGhlCiAgbGliY3VybCBiZWhhdmlvciBmb3IgYSBIVFRQIHJlc3BvbnNlIDMwMiBhZnRlciBhIFBPU1QgdG8gbm90IHVzZSBHRVQgaW4gdGhlCiAgc3Vic2VxdWVudCByZXF1ZXN0ICh3aGVuIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gaXMgZW5hYmxlZCkuIEkgZWRpdGVkIHRoZQogIHBhdGNoIHNvbWV3aGF0IGJlZm9yZSBjb21taXQuIFRoZSBjdXJsIHRvb2wgZ290IGEgbWF0Y2hpbmcgLS1wb3N0MzAyCiAgb3B0aW9uLiBUZXN0IGNhc2UgMTA3NiB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoaXMuCgotIEludHJvZHVjaW5nIENVUkxPUFRfQ0VSVElORk8gYW5kIHRoZSBjb3JyZXNwb25kaW5nIENVUkxJTkZPX0NFUlRJTkZPLiBCeQogIGVuYWJsaW5nIHRoaXMgZmVhdHVyZSB3aXRoIENVUkxPUFRfQ0VSVElORk8gZm9yIGEgcmVxdWVzdCB1c2luZyBTU0wgKEhUVFBTCiAgb3IgRlRQUyksIGxpYmN1cmwgd2lsbCBnYXRoZXIgbG90cyBvZiBzZXJ2ZXIgY2VydGlmaWNhdGUgaW5mbyBhbmQgdGhhdCBpbmZvCiAgY2FuIHRoZW4gZ2V0IGV4dHJhY3RlZCBieSBhIGNsaWVudCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgY29tcGxldGVkIHdpdGgKICBjdXJsX2Vhc3lfZ2V0aW5mbygpJ3MgQ1VSTElORk9fQ0VSVElORk8gb3B0aW9uLiBMaW51cyBOaWVsc2VuIEZlbHR6aW5nCiAgaGVscGVkIG1lIHRlc3QgYW5kIHNtb290aGVuIG91dCB0aGlzIGZlYXR1cmUuCgogIFVuZm9ydHVuYXRlbHksIHRoaXMgZmVhdHVyZSBjdXJyZW50bHkgb25seSB3b3JrcyB3aXRoIGxpYmN1cmwgYnVpbHQgdG8gdXNlCiAgT3BlblNTTC4KCiAgVGhpcyBmZWF0dXJlIHdhcyBzcG9uc29yZWQgYnkgbmV0d29ya2luZzRhbGwuY29tIC0gdGhhbmtzIQoKLSBEbWl0cml5IFNlcmdleWV2IHBvaW50ZWQgb3V0IHRoYXQgY3VybF9lYXN5X3BhdXNlKCkgZGlkbid0IHVucGF1c2UgcHJvcGVybHkKICBkdXJpbmcgY2VydGFpbiBjb25kaXRpb25zLiBJIGFsc28gY2hhbmdlZCB0aGlzIGNvZGUgdG8gdXNlIHJlYWxsb2MoKSBiYXNlZAogIG9uIERhbmllbCBGYW5kcmljaCdzIHN1Z2dlc3Rpb24uCgpHdWVudGVyIEtuYXVmICg0IFNlcCAyMDA4KQotIE1pbmdXMzIgbm9uLWNvbmZpZ3VyZSBidWlsZHMgYXJlIG5vdyBsYXJnZWZpbGUgZmVhdHVyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCiAgTmV0V2FyZSBMSUJDIGJ1aWxkcyBhcmUgYWxzbyBub3cgbGFyZ2VmaWxlIGZlYXR1cmUgZW5hYmxlZCBieSBkZWZhdWx0LgoKWWFuZyBUc2UgKDQgU2VwIDIwMDgpCi0gU2V2ZXJhbCBmaXhlcyByZWxhdGVkIHdpdGggcHJpbnQgZm9ybWF0dGluZyBzdHJpbmcgZGlyZWN0aXZlcy4KCkRhbmllbCBGYW5kcmljaCAoMyBTZXAgMjAwOCkKLSBTZWFyY2ggZm9yIHRoZSBGcmVlQlNEIENBIGNlcnQgZmlsZSAvdXNyL2xvY2FsL3NoYXJlL2NlcnRzL2NhLXJvb3QuY3J0CgpEYW5pZWwgRmFuZHJpY2ggKDIgU2VwIDIwMDgpCi0gRml4ZWQgYW4gb3V0IG9mIG1lbW9yeSBwcm9ibGVtIHRoYXQgY2F1c2VkIHRvcnR1cmUgdGVzdCBmYWlsdXJlcyBpbiB0ZXN0cwogIDcwNiBhbmQgNzA3LgoKRGFuaWVsIFN0ZW5iZXJnICgyIFNlcCAyMDA4KQotIEtlaXRoIE1vayBhZGRlZCBzdXBwb3J0ZWRfcHJvdG9jb2xzIGFuZCBzdXBwb3J0ZWRfZmVhdHVyZXMgdG8gdGhlIHBrZy1jb25maWcKICBmaWxlIGZvciBsaWJjdXJsLCBhbmQgd2hpbGUgZG9pbmcgdGhhdCBmaXggaGUgdW5pZmllZCB3aXRoIGN1cmwtY29uZmlnLmluCiAgaG93IHRoZSBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFuZCBmZWF0dXJlcyBhcmUgZXh0cmFjdGVkIGFuZCB1c2VkLCBzbyBib3RoIHRob3NlCiAgdG9vbHMgc2hvdWxkIG5vdyBhbHdheXMgYmUgc3luY2VkLgoKVmVyc2lvbiA3LjE5LjAgKDEgU2VwdGVtYmVyIDIwMDgpCgpEYW5pZWwgRmFuZHJpY2ggKDI5IEF1ZyAyMDA4KQotIEFkZGVkIHRlc3RzIDEwNzEgdGhyb3VnaCAxMDc0IHRvIHRlc3QgYXV0b21hdGljIGRvd25ncmFkaW5nIGZyb20gSFRUUCAxLjEKICB0byBIVFRQIDEuMCB1cG9uIHJlY2VpdmluZyBhIHJlc3BvbnNlIGZyb20gdGhlIEhUVFAgc2VydmVyLiAgVGVzdHMgMTA3MgogIGFuZCAxMDczIGFyZSBzaW1pbGFyIHRvIHRlc3QgMTA2OSBpbiB0aGF0IHRoZXkgaW52b2x2ZSB0aGUgaW1wb3NzaWJsZQogIHNjZW5hcmlvIG9mIHNlbmRpbmcgY2h1bmtlZCBkYXRhIHRvIGEgSFRUUCAxLjAgc2VydmVyLiAgQWxsIHRoZXNlIGZhaWwKICBhbmQgYXJlIGFkZGVkIHRvIERJU0FCTEVELgoKLSBBZGRlZCB0ZXN0IDEwNzUgdG8gdGVzdCAtLWFueWF1dGggd2l0aCBCYXNpYyBhdXRoZW50aWNhdGlvbi4KCkRhbmllbCBTdGVuYmVyZyAoMjkgQXVnIDIwMDgpCi0gV2hlbiBsaWJjdXJsIHdhcyBkb2luZyBhIEhUVFAgUE9TVCBhbmQgdGhlIHNlcnZlciB3b3VsZCByZXNwb25kIHdpdGgKICAiQ29ubmVjdGlvbjogY2xvc2UiIGFuZCBhY3R1YWxseSBjbG9zZSB0aGUgY29ubmVjdGlvbiBhZnRlciB0aGUKICByZXNwb25zZS1ib2R5LCBsaWJjdXJsIGNvdWxkIHN0aWxsIGhhdmUgb3V0c3RhbmRpbmcgZGF0YSB0byBzZW5kIGFuZCBpdAogIHdvdWxkIG5vdCBwcm9wZXJseSBub3RpY2UgdGhpcyBhbmQgc3RvcCBzZW5kaW5nLiBUaGlzIGNhdXNlZCB3ZWlyZG5lc3MgYW5kCiAgc2FkIGZhY2VzLiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMDgwMjIyCgogIE5vdGUgdGhhdCB0aGVyZSBhcmUgc3RpbGwgcmVhc29ucyB0byBjb25zaWRlciBsaWJjdXJsJ3MgYmVoYXZpb3Igd2hlbgogIGdldHRpbmcgYSA+PSA0MDAgcmVzcG9uc2UgY29kZSB3aGlsZSBzZW5kaW5nIGRhdGEsIGFzIENyYWlnIFBlcnJhcycgbm90ZQogICJodHRwIHVwbG9hZDogaG93IHRvIHN0b3Agb24gZXJyb3IiIHNwZWNpZmllczoKICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvYXJjaGl2ZS0yMDA4LTA4LzAxMzguaHRtbAoKRGFuaWVsIFN0ZW5iZXJnICgyOCBBdWcgMjAwOCkKLSBEZW5nbWlud2VuIHJlcG9ydGVkIHRoYXQgbGliY3VybCB3b3VsZCBsb2NrIGEgKGNvb2tpZSkgc2hhcmUgdHdpY2UgKHdpdGhvdXQKICBhbiB1bmxvY2sgaW4gYmV0d2VlbikgZm9yIGEgY2VydGFpbiBjYXNlIGFuZCB0aGF0IGluIGZhY3Qgd29ya3Mgd2hlbiB1c2luZwogIHJlZ3VsYXIgd2luZG93cyBtdXRleGVzIGJ1dCBub3Qgd2l0aCBwdGhyZWFkcychIExvY2tzIHNob3VsZCBvZiBjb3Vyc2Ugbm90CiAgZ2V0IGxvY2tlZCBhZ2FpbiBzbyB0aGlzIGlzIG5vdyBmaXhlZC4KICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDgvMDQyMi5odG1sCgotIEknbSBhYmFuZG9uaW5nIHRoZSBzeXN0ZW0gd2l0aCB0aGUgd2ViIHNpdGUgbWlycm9ycyAoYnV0IGtlZXBpbmcgZG93bmxvYWQKICBmaWxlcyBiaW5nIG1pcnJvcmVkKSBhbmQgdGh1cyBJJ3ZlIGNoYW5nZWQgdGhlIFVSTCBpbiB0aGUgY29va2llamFyIGhlYWRlcgogIHRvIG5vIGxvbmdlciB1c2UgY3VybG0uaGF4eC5zZSBidXQgaW5zdGVhZCB1c2UgdGhlIG1haW4gc2l0ZSBjdXJsLmhheHguc2UKCkRhbmllbCBGYW5kcmljaCAoMjcgQXVnIDIwMDgpCi0gRml4ZWQgdGVzdCBjYXNlIDEwNjUgYnkgY2hhbmdpbmcgdGhlIGhhbmRsaW5nIG9mIENVUkxPUFRfVVBMT0FEIHRvIHNldAogIHRoZSBIVFRQIG1ldGhvZCB0byBHRVQgKG9yIEhFQUQpIHdoZW4gZ2l2ZW4gYSB2YWx1ZSBvZiAwLgoKLSBBZGRlZCB0ZXN0IGNhc2VzIDEwNjggYW5kIDEwNjkgdG8gdGVzdCBhIHNpbXBsZSBIVFRQIFBVVCBmcm9tIHN0ZGluLiAgVGVzdAogIGNhc2UgMTA2OSBmYWlscyBpbiBhIHNpbWlsYXIgbWFubmVyIHRvIHRlc3QgMTA2NSBzbyBpcyBhZGRlZCB0byBESVNBQkxFRC4KCllhbmcgVHNlICgyNyBBdWcgMjAwOCkKLSBGaXggZ2VuZXJhdGlvbiBvZiBNUyBWQzYgLmRzcCBmaWxlIHRvIG1ha2UgaXQgc3VwcG9ydCBjb21waWxhdGlvbiBvZiBlaXRoZXIKICBkeW5hbWljIChETEwpIG9yIHN0YXRpYyAoTElCKSBsaWJjdXJsIGxpYnJhcmllcyBpbiBkZWJ1ZyBhbmQgcmVsZWFzZSBtb2Rlcy4KCkRhbmllbCBGYW5kcmljaCAoMjYgQXVnIDIwMDgpCi0gRml4ZWQgb3V0IG9mIG1lbW9yeSBwcm9ibGVtcyB0aGF0IGNhdXNlZCB0b3J0dXJlIHRlc3QgZmFpbHVyZXMgaW4gdGVzdHMKICAxMDIxIGFuZCAxMDY3LgoKWWFuZyBUc2UgKDI2IEF1ZyAyMDA4KQotIEFkZGVkIGNoZWNrIGFuZCBzeW1ib2wgZGVmaW5pdGlvbiBmb3IgV0lOMzIgZmlsZSBBUEkgdXNhZ2UgaW4gY29uZmlndXJlLAogIHN1cHBvcnRpbmcgY29uZmlndXJlJ3MgLS1kaXNhYmxlLWxhcmdlZmlsZSBvcHRpb24gZm9yIFdJTjMyIHRhcmdldHMgYWxzby4KCi0gTm9uLWNvbmZpZ3VyZSBzeXN0ZW1zIHdoaWNoIGRvIG5vdCB1c2UgY29uZmlnLXdpbjMyLmggY29uZmlndXJhdGlvbiBmaWxlLAogIGFuZCB3YW50IHRvIHVzZSB0aGUgV0lOMzIgZmlsZSBBUEksIG11c3QgZGVmaW5lIFVTRV9XSU4zMl9MQVJHRV9GSUxFUyBvcgogIFVTRV9XSU4zMl9TTUFMTF9GSUxFUyBhcyBhcHByb3ByaWF0ZSBpbiB0aGVpciBvd24gY29uZmlndXJhdGlvbiBmaWxlcy4KCkRhbmllbCBTdGVuYmVyZyAoMjMgQXVnIDIwMDgpCi0gUnVubmluZyAnbWFrZSBjYS1maXJlZm94JyBpbiB0aGUgcm9vdCBidWlsZCBkaXIgd2lsbCBub3cgcnVuIHRoZSBuZXcKICBmaXJlZm94LWRiMnBlbS5zaCBjb252ZXJzaW9uIHNjcmlwdCB0aGF0IGNvbnZlcnRzIGEgbG9jYWwgRmlyZWZveCBkYiBvZiBjYQogIGNlcnRzIGludG8gUEVNIGZvcm1hdCwgc3VpdGFibGUgZm9yIHVzZSB3aXRoIGEgT3BlblNTTCBvciBHbnVUTFMgYnVpbHQKICBsaWJjdXJsLgoKLSBDb25zdGFudGluZSBTYXB1bnR6YWtpcyBmaXhlZCBhIGJ1ZyB3aGVuIGRvaW5nIHByb3h5IENPTk5FQ1Qgd2l0aCB0aGUgbXVsdGkKICBpbnRlcmZhY2UsIGFuZCB0aGUgcHJveHkgd291bGQgc2VuZCBDb25uZWN0aW9uOiBjbG9zZSBkdXJpbmcgdGhlCiAgYXV0aGVudGljYXRpb24gcGhhc2UuICBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMDY5MDQ3CgpEYW5pZWwgRmFuZHJpY2ggKDIyIEF1ZyAyMDA4KQotIEZpeGVkIGEgcHJvYmxlbSB3aGVuIC0tZHVtcC1oZWFkZXIgLSB3YXMgZ2l2ZW4gd2l0aCBtb3JlIHRoYW4gb25lIFVSTCwKICB3aGljaCBjYXVzZWQgYW4gZXJyb3Igd2hlbiB0aGUgc2Vjb25kIGhlYWRlciB3YXMgZHVtcGVkIGR1ZSB0byBzdGRvdXQKICBiZWluZyBjbG9zZWQuICBBZGRlZCB0ZXN0IGNhc2UgMTA2NiB0byB2ZXJpZnkuICBBbHNvIGZpeGVkIGEgcG90ZW50aWFsCiAgcHJvYmxlbSB3aGVyZSBhIGNsb3NlZCBmaWxlIGRlc2NyaXB0b3IgbWlnaHQgYmUgdXNlZCBmb3IgYW4gdXBsb2FkCiAgd2hlbiBtb3JlIHRoYW4gb25lIFVSTCBpcyBnaXZlbi4KCllhbmcgVHNlICgyMiBBdWcgMjAwOCkKLSBJbXByb3ZlZCBsaWJjdXJsJ3MgaW50ZXJuYWwgY3VybF9tKnByaW50ZigpIGZ1bmN0aW9ucyBpbnRlZ3JhbCBkYXRhIHR5cGUKICBzaXplIGFuZCBzaWduZWRuZXNzIGhhbmRsaW5nLgoKLSBJbnRlcm5hbCBhZGp1c3RtZW50cyB0byBiZXR0ZXIgc2VsZWN0L2RpZmZlcmVudGlhdGUgd2hlbiBsYXJnZS9zbWFsbCBmaWxlCiAgc3VwcG9ydCBpcyBwcm92aWRlZCB1c2luZyBXSU4zMiBmdW5jdGlvbnMgZGlyZWN0bHkuCgpEYW5pZWwgRmFuZHJpY2ggKDIwIEF1ZyAyMDA4KQotIEFkZGVkIGFuIGVkaXRlZCB2ZXJzaW9uIG9mIFZpbmNlbnQgTGUgTm9ybWFuZCdzIGRvY3VtZW50YXRpb24gb2YgU0ZUUCBxdW90ZQogIGNvbW1hbmRzIHRvIHRoZSBtYW4gcGFnZXMuCgpEYW5pZWwgU3RlbmJlcmcgKDIwIEF1ZyAyMDA4KQotIFBoaWwgUGVsbG91Y2hvdWQgcG9pbnRlZCBvdXQgdGhhdCB0aGUgd2luZG93cyB2ZXJzaW9uIG9mIGxpYmN1cmwgaGFkIGEKICBtZW1vcnkgbGVhayBiZWNhdXNlIGl0IG5ldmVyIGNhbGxlZCB0aGUgT3BlblNTTCBmdW5jdGlvbgogIENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhKCkgYXMgaXQgd2FzIHN1cHBvc2VkIHRvLiBUaGlzIHdhcyBiZWNhdXNlIG9mIGEKICBtaXNzaW5nIGRlZmluZSBpbiBjb25maWctd2luMzIuaCEKCkdpc2xlIFZhbmVtICgxOCBBdWcgMjAwOCkKLSBVcGRhdGVkIGxpYi9NYWtlZmlsZS5XYXRjb20gd2l0aCB0aGUgb3B0aW9uIHRvIHVzZSBjLWFyZXMgKFVTRV9BUkVTPTEpLgoKWWFuZyBUc2UgKDE4IEF1ZyAyMDA4KQotIEFkZGVkIHRlc3QgY2FzZSA1NTcgdG8gdmVyaWZ5IGxpYmN1cmwncyBpbnRlcm5hbCBjdXJsX20qcHJpbnRmKCkgZnVuY3Rpb25zCiAgZm9ybWF0dGluZyBmdW5jdGlvbmFsaXR5IHdoZW4gaGFuZGxpbmcgc2lnbmVkIGFuZCB1bnNpZ25lZCBsb25ncywgYXMgd2VsbCBhcwogIG91ciBjdXJsX29mZl90IGRhdGEgdHlwZS4KCllhbmcgVHNlICgxNyBBdWcgMjAwOCkKLSBPcGVuU1NsIGVuYWJsZWQgTmV0V2FyZSBidWlsZHMgYXJlIGNoYW5nZWQgdG8gdXNlIHRoZSAnb3BlbnNzbCcgc3ViZGlyZWN0b3J5CiAgd2hlbiBpbmNsdWRpbmcgdGhlIE9wZW5TU0wgaGVhZGVyIGZpbGVzLiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLCB0aGlzCiAgcHJldmVudHMgdGhlIHVuZGVzaXJlZCBpbmNsdXNpb24gb2YgaGVhZGVyIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aG9zZQogIG9mIE9wZW5TU0wgYnV0IHdoaWNoIGRvIG5vdCBiZWxvbmcgdG8gdGhlIE9wZW5TU0wgcGFja2FnZS4gVGhlIHZpc2libGUgY2hhbmdlCiAgZnJvbSBwcmV2aW91c2x5IHJlbGVhc2VkIGxpYmN1cmwgdmVyc2lvbnMgaXMgdGhhdCBub3cgT3BlblNTbCBlbmFibGVkIE5ldFdhcmUKICBidWlsZHMgYWxzbyBkZWZpbmUgVVNFX09QRU5TU0wgaW4gY29uZmlnIGZpbGVzLCBhbmQgdGhhdCBPcGVuU1NMIGhlYWRlciBmaWxlcwogIG11c3QgYmUgbG9jYXRlZCBpbiBhIHN1YmRpcmVjdG9yeSBuYW1lZCAnb3BlbnNzbCcuCgpZYW5nIFRzZSAoMTYgQXVnIDIwMDgpCi0gTGlicmFyeSBpbnRlcm5hbCBvbmx5IEMgcHJlcHJvY2Vzc29yIG1hY3JvcyBGT1JNQVRfT0ZGX1QgYW5kIEZPUk1BVF9PRkZfVFUKICByZW1haW4gaW4gdXNlIGFzIGludGVybmFsIGN1cmxfb2ZmX3QgcHJpbnQgZm9ybWF0dGluZyBzdHJpbmdzIGZvciB0aGUgaW50ZXJuYWwKICAqcHJpbnRmIGZ1bmN0aW9ucyB3aGljaCBzdGlsbCBjYW5ub3QgaGFuZGxlIHByaW50IGZvcm1hdHRpbmcgc3RyaW5nIGRpcmVjdGl2ZXMKICBzdWNoIGFzICJJNjRkIiwgIkk2NHUiLCBhbmQgb3RoZXJzIGF2YWlsYWJsZSBvbiBNU1ZDLCBNaW5HVywgSW50ZWwncyBJQ0MsIGFuZAogIG90aGVyIERPUy9XaW5kb3dzIGNvbXBpbGVycy4KCkRhbmllbCBGYW5kcmljaCAoMTUgQXVnIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlIDEwNjMgdG8gdGVzdCBpbnZhbGlkIGxvbmcgZmlsZSByYW5nZXMgd2l0aCBmaWxlOiBVUkxzIGFuZAogIDEwNjQgdG8gdGVzdCBtdWx0aXBsZSBodHRwIFBVVHMuCgotIEFkZGVkIHRlc3QgY2FzZSAxMDY1IHRvIHRlc3QgYSBQVVQgd2l0aCBhIHNpbmdsZSBmaWxlIGJ1dCB0d28gVVJMcy4gVGhpcwogIHdhcyBkaXNjb3ZlcmVkIHRvIGJlIHByb2JsZW1hdGljIHdoaWxlIGludmVzdGlnYXRpbmcgYW4gaW5jaWRlbnQgcmVwb3J0ZWQgYnkKICBWb24gYmFjayBpbiBNYXkuICBjdXJsIGluIHRoaXMgY2FzZSBkb2Vzbid0IGluY2x1ZGUgYSBDb250ZW50LUxlbmd0aDogb3IKICBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCBoZWFkZXIgd2hpY2ggaXMgaWxsZWdhbC4gVGhpcyB0ZXN0IGNhc2UgaXMKICBhZGRlZCB0byBESVNBQkxFRCB1bnRpbCBhIHNvbHV0aW9uIGlzIGZvdW5kLgoKWWFuZyBUc2UgKDE1IEF1ZyAyMDA4KQotIEMgcHJlcHJvY2Vzc29yIG1hY3JvcyB1c2VkIGludGVybmFsbHkgYW5kIGVxdWFsbHkgYXZhaWxhYmxlIGV4dGVybmFsbHkgd2hpY2gKICBhaWQgaW4gdGhlIHVzZSBvZiB0aGUgY3VybF9vZmZfdCBkYXRhIHR5cGUgYXJlIG5hbWVkOiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9ULAogIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVLCBDVVJMX1NJWkVPRl9DVVJMX09GRl9ULCBDVVJMX1NVRkZJWF9DVVJMX09GRl9ULAogIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVLCBDVVJMX09GRl9UX0MgYW5kIENVUkxfT0ZGX1RVX0MuCgpZYW5nIFRzZSAoMTMgQXVnIDIwMDgpCi0gVGhlIHNpemUgb2YgbG9uZyBpcyBhIGJ1aWxkIHRpbWUgY2hhcmFjdGVyaXN0aWMgYW5kIGFzIHN1Y2ggaXQgaXMgbm93IHJlY29yZGVkCiAgaW4gY3VybGJ1aWxkLmggYXMgQ1VSTF9TSVpFT0ZfTE9ORy4gRGVmaW5pdGlvbiBub3cgZG9uZSBmcm9tIGNvbmZpZ3VyZSBwcm9jZXNzCiAgYW5kIGluIENWUyBjdXJsYnVpbGQuaC5kaXN0IGZvciBub24tY29uZmlndXJlIHN5c3RlbXMuCgpEYW5pZWwgRmFuZHJpY2ggKDEyIEF1ZyAyMDA4KQotIEZpeGVkIGEgYnVmZmVyIG92ZXJmbG93IHByb2JsZW0gaW4gQ3VybF9wcm94eUNPTk5FQ1QgdGhhdCBjb3VsZCBvY2N1cgogIHdoZW4gYSBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggbG9uZyBoZWFkZXJzIGFuZCBkYXRhLiAgTHVja2lseSwgdGhlIGJ1ZmZlcgogIG92ZXJmbG93ZWQgaW50byBhbm90aGVyIHVudXNlZCBidWZmZXIsIHNvIG5vIGFjdHVhbCBoYXJtIHdhcyBkb25lLgogIEFkZGVkIHRlc3QgY2FzZXMgMTA2MCBhbmQgMTA2MSB0byB2ZXJpZnkuCgpEYW5pZWwgU3RlbmJlcmcgKDEyIEF1ZyAyMDA4KQotIEFuZHkgVHNvdWxhZHplIGZpeGVkIHJ1bnRlc3RzLnBsIHRvIG5vdCBhdHRlbXB0IHRvIGV4ZWN1dGUgdGhlIHN0dW5uZWwKICBfZGlyZWN0b3J5XyBpZiB0aGF0IGhhcHBlbmVkIHRvIGFwcGVhciBpbiB0aGUgcGF0aCEKCllhbmcgVHNlICgxMiBBdWcgMjAwOCkKLSBBZGRlZCBtYWNyb3MgZm9yIG1pbmltdW0td2lkdGggc2lnbmVkIGFuZCB1bnNpZ25lZCBjdXJsX29mZl90IGludGVnZXIKICBjb25zdGFudHMgQ1VSTF9PRkZfVF9DIGFuZCBDVVJMX09GRl9UVV9DLiBUaGUgY2xldmVyIGRvdWJsZSBoZWxwZXIgbWFjcm8KICB1c2VkIGludGVybmFsbHkgdG8gcHJvdmlkZSBpdHMgZnVuY3Rpb25hbGl0eSBpcyB0aGFua3MgdG8gTGFycyBOaWxzc29uLgoKRGFuaWVsIEZhbmRyaWNoICgxMSBBdWcgMjAwOCkKLSBGaXhlZCBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBlcnJvciBpbiBmdHBfcmVhZHJlc3AoKSB3aGVyZWJ5IGEgbm9uLXRlcm1pbmFsCiAgbGluZSBvZiBhIG11bHRpbGluZSBGVFAgcmVzcG9uc2Ugd2hvc2UgbGFzdCBieXRlIGxhbmRlZCBleGFjdGx5IGF0IHRoZSBlbmQKICBvZiB0aGUgQlVGU0laRS1sZW5ndGggYnVmZmVyIHdvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIHRlcm1pbmFsIHJlc3BvbnNlCiAgbGluZS4gIFRoZSBmb2xsb3dpbmcgcmVzcG9uc2UgY29kZSByZWFkIGluIHdvdWxkIHRoZW4gYWN0dWFsbHkgYmUgdGhlCiAgZW5kIG9mIHRoZSBwcmV2aW91cyByZXNwb25zZSBsaW5lLCBhbmQgYWxsIHJlc3BvbnNlcyBmcm9tIHRoZW4gb24gd291bGQKICBjb3JyZXNwb25kIHRvIHRoZSB3cm9uZyBjb21tYW5kLiBUZXN0IGNhc2UgMTA2MiB2ZXJpZmllcyB0aGlzLgoKLSBTdG9wIGNsb3NpbmcgYSBuZXZlci1vcGVuZWQgZnRwIHNvY2tldC4KCkRhbmllbCBTdGVuYmVyZyAoMTEgQXVnIDIwMDgpCi0gQ29uc3RhbnRpbmUgU2FwdW50emFraXMgZmlsZWQgYnVnIHJlcG9ydCAjMjA0MjQzMAogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yMDQyNDMwKSB3aXRoIGEgcGF0Y2guICJOVExNIFdpbmRvd3MKICBTU1BJIGNvZGUgaXMgbm90IHRocmVhZCBzYWZlIi4gVGhpcyB3YXMgZHVlIHRvIGxpYmN1cmwgdXNpbmcgc3RhdGljCiAgdmFyaWFibGVzIHRvIHRlbGwgd2V0aGVyIHRvIGxvYWQgdGhlIG5lY2Vzc2FyeSBTU1BJIERMTCwgYnV0IG5vdyB0aGUgbG9hZGluZwogIGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBtb3JlIHN1aXRhYmxlIGN1cmxfZ2xvYmFsX2luaXQoKSBjYWxsLgoKLSBDb25zdGFudGluZSBTYXB1bnR6YWtpcyBmaWxlZCBidWcgcmVwb3J0ICMyMDQyNDQwCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIwNDI0NDApIHdpdGggYSBwYXRjaC4gSGUgaWRlbnRpZmllZCBhCiAgcHJvYmxlbSB3aGVuIHVzaW5nIE5UTE0gb3ZlciBhIHByb3h5IGJ1dCB0aGUgZW5kLXBvaW50IGRvZXMgQmFzaWMsIGFuZCB0aGVuCiAgbGliY3VybCB3b3VsZCBkbyB3cm9uZyB3aGVuIHRoZSBob3N0IHNlbnQgIkNvbm5lY3Rpb246IGNsb3NlIiBhcyB0aGUgcHJveHkncwogIE5UTE0gc3RhdGUgd2FzIGVycm9uZW91c2x5IGNsZWFyZWQuCgpZYW5nIFRzZSAoMTEgQXVnIDIwMDgpCi0gQWRkZWQgbWlzc2luZyBzaWduZWQgYW5kIHVuc2lnbmVkIGN1cmxfb2ZmX3QgaW50ZWdlciBjb25zdGFudCBzdWZmaXhlcyBmb3IKICBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgdXNlLiBDVVJMX1NVRkZJWF9DVVJMX09GRl9ULCBDVVJMX1NVRkZJWF9DVVJMX09GRl9UVS4KCkRhbmllbCBGYW5kcmljaCAoNyBBdWcgMjAwOCkKLSBGaXhlZCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGluIG11bHRpX3J1bnNpbmdsZSgpIHRoYXQgY291bGQgY2F1c2UgYQogIHJlcXVlc3QgdG8gcHJlbWF0dXJlbHkgZW5kLgoKLSBBZGRlZCB0ZXN0MTA1OSB0byB0ZXN0IHRoZSBGVFAgcHJveHkgdHVubmVsIHByb2JsZW0gZml4ZWQgSnVseSAxMS4KCllhbmcgVHNlICg3IEF1ZyAyMDA4KQotIEFkZGVkIGN1cmxidWlsZC5oIGFuZCBjdXJscnVsZXMuaCBoZWFkZXIgZmlsZXMgdG8gbGliY3VybCdzIHB1YmxpYyBoZWFkZXJzLgogIEZpbGUgY3VybGJ1aWxkLmggaXMgYSBnZW5lcmF0ZWQgZmlsZSBvbiBjb25maWd1cmUtY2FwYWJsZSBzeXN0ZW1zLiBUaGlzIGlzCiAgYSBmaXJzdCBzdGVwIHRvd2FyZHMgY29uZmlndXJlLWJhc2VkIGluZm8gaW4gcHVibGljIGhlYWRlcnMuIEN1cnJlbnRseSBvbmx5CiAgdXNlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGEgY3VybF9vZmZfdCBkYXRhIHR5cGUgd2hpY2ggaXMgbm90IGdhdGVkIHRvCiAgb2ZmX3QuIEZ1cnRoZXIgZGV0YWlscyBhcmUgZG9jdW1lbnRlZCBpbnNpZGUgdGhlc2UgbWVudGlvbmVkIGhlYWRlciBmaWxlcy4KCi0gRml4IENVUkxfQ0hFQ0tfREVGIHNvIHRoYXQgd2hlbiB0aGUgZXhwYW5zaW9uIG9mIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sCiAgcmVzdWx0cyBpbiBhIHNldCBvZiBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIHRoaXMgbWFjcm8gd2lsbCBub3cgcmV0dXJuIGFuCiAgZXhwYW5zaW9uIHdoaWNoIGNvbnNpc3RzIG9mIGEgc2luZ2xlIGRvdWJsZS1xdW90ZWQgc3RyaW5nIGFzIHRoZSByZXN1bHQgb2YKICBjb25jYXRlbmF0aW5nIGFsbCBvZiB0aGVtLgoKLSBTa2lwIGRhdGEgdHlwZSBjaGVjayBpbiBET19DVVJMX09GRl9UX0NIRUNLIG1hY3JvIHdoZW4gYXJndW1lbnQgaXMgZW1wdHkuCgotIEFkanVzdGVkIHRlc3RjdXJsLnBsIHRvIGNvcHkgY2hlY2tlZCBvdXQgY3VybGJ1aWxkLmguZGlzdCBhcyBjdXJsYnVpbGQuaAogIGZvciBub24tY29uZmlndXJlIHRhcmdldHMgd2hlbiB0aGUgaG9zdCBzeXN0ZW0gZG9lc24ndCBydW4gYnVpbGRjb25mLmJhdC4KCi0gUHJldmVudCBidWlsZGNvbmYgZnJvbSByZW1vdmluZyAnTWFrZWZpbGUnIGFuZCAnbWlzc2luZycgZmlsZXMuIFRoaXMgd291bGQKICBibG93IGF3YXkgb3VyIENWUyBjaGVja2VkIGZpbGVzICdtaXNzaW5nJyBhbmQgJ2hpcGVyL01ha2VmaWxlJy4KCi0gUmVtb3ZlIGFkanVzdG1lbnQgZG9uZSB0byB0ZXN0Y3VybC5wbCB0byB2ZXJpZnkgaWYgY2hhbmdlIGludHJvZHVjZWQgYnkKICBHdWVudGVyIEtuYXVmIGluIGxpYi9NYWtlZmlsZS5uZXR3YXJlIGlzIGVub3VnaCB0byBnZXQgdGhlIG5ldHdhcmUgYXV0b2J1aWxkcwogIGdvaW5nIGFnYWluLgoKWWFuZyBUc2UgKDUgQXVnIDIwMDgpCi0gQ2hhbmdlcyBkb25lIHRvIGJ1aWxkY29uZiBzY3JpcHQuIFZhbGlkYXRlIHRoYXQgYXV0b200dGUgYW5kIGF1dG9jb25mLCBhcwogIHdlbGwgYXMgYWNsb2NhbCBhbmQgYXV0b21ha2UsIHZlcnNpb25zIG1hdGNoLiBJbXByb3ZlIHJlbW92YWwgb2YgcHJldmlvdXMKICBydW4gZ2VuZXJhdGVkIGZpbGVzLiBSZW1vdmUgdmVyYm9zZSBkZWJ1ZyBsb2dnaW5nIG9mIGFjbG9jYWwgb24gU29sYXJpcy4KCkRhbmllbCBTdGVuYmVyZyAoNSBBdWcgMjAwOCkKLSBZZWhvc2h1YSBIZXJzaGJlcmcgZm91bmQgYSBwcm9ibGVtIHRoYXQgd291bGQgbWFrZSBsaWJjdXJsIHJlLXVzZSBhCiAgY29ubmVjdGlvbiB3aXRoIHRoZSBtdWx0aSBpbnRlcmZhY2UgZXZlbiBpZiBhIHByZXZpb3VzIHVzZSBvZiBpdCBjYXVzZWQgYQogIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTiB0byBnZXQgcmV0dXJuZWQuIEkgbm93IG1ha2Ugc3VyZSB0aGF0IGZhaWxlZAogIFNTTCBjb25uZWN0aW9ucyBwcm9wZXJseSBjbG9zZSB0aGUgY29ubmVjdGlvbnMuCgpEYW5pZWwgU3RlbmJlcmcgKDQgQXVnIDIwMDgpCi0gVGVzdCBjYXNlcyAxMDUxLCAxMDUyIGFuZCAxMDU1IHdlcmUgYWRkZWQgYnkgRGFuaWVsIEZhbmRyaWNoIG9uIEp1bHkgMzAgYW5kCiAgcHJvdmVkIGhvdyBQVVQgYW5kIFBPU1Qgd2l0aCBhIHJlZGlyZWN0IGNvdWxkIGxlYWQgdG8gYSAiaGFuZyIgZHVlIHRvIHRoZQogIGRhdGEgc3RyZWFtIG5vdCBiZWluZyByZXdvdW5kIHByb3Blcmx5IHdoZW4gaXQgaGFkIHRvIGluIG9yZGVyIHRvIGdldCBzZW50CiAgcHJvcGVybHkgKGFnYWluKSB0byB0aGUgc3Vic2VxdWVudCBVUkwuIFRoaXMgaXMgbm93IGZpeGVkIGFuZCB0aGVzZSB0ZXN0CiAgY2FzZXMgYXJlIG5vIGxvbmdlciBkaXNhYmxlZC4KCllhbmcgVHNlICg0IEF1ZyAyMDA4KQotIEF1dG9jb25mIDIuNjIgaGFzIGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB0aGUgQUNfQUlYIG1hY3JvIHdoaWNoIHdlIHVzZS4KICBQcmlvciB2ZXJzaW9ucyBvZiBhdXRvY29uZiBkZWZpbmVkIF9BTExfU09VUkNFIGlmIF9BSVggd2FzIGRlZmluZWQuIDIuNjIKICB2ZXJzaW9uIG9mIEFDX0FJWCBkZWZpbmVzIF9BTExfU09VUkNFIGFuZCBvdGhlciBmb3VyIHByZXByb2Nlc3NvciBzeW1ib2xzCiAgbm8gbWF0dGVyIGlmIHRoZSBzeXN0ZW0gaXMgQUlYIG9yIG5vdC4gVG8ga2VlcCB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3VyLAogIGFuZCBhbiB1bmlmb3JtIG9uZSBhY3Jvc3MgYXV0b2NvbmYgdmVyc2lvbnMgQUNfQUlYIGlzIHJlcGxhY2VkIHdpdGggb3VyCiAgb3duIGludGVybmFsIG1hY3JvIENVUkxfQ0hFQ0tfQUlYX0FMTF9TT1VSQ0UuCgpEYW5pZWwgU3RlbmJlcmcgKDQgQXVnIDIwMDgpCi0gVGVzdCBjYXNlIDEwNDEgKGFkZGVkIGJ5IERhbmllbCBGYW5kcmljaCBKdWx5IDE0dGgpIHByb3ZlZCBhIGJ1ZyB3aGVyZSBQVVQKICB3aXRoIC1DIC0gc2VudCBnYXJiYWdlIGluIHRoZSBDb250ZW50LVJhbmdlOiBoZWFkZXIuIEkgZml4ZWQgdGhpcyBwcm9ibGVtIGJ5CiAgbWFraW5nIHN1cmUgbGliY3VybCBhbHdheXMgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgX2VudGlyZV8gdXBsb2FkIGlmIGFuIGFwcAogIGF0dGVtcHMgdG8gZG8gcmVzdW1lZCB1cGxvYWRzIHNpbmNlIGxpYmN1cmwgc2ltcGx5IGNhbm5vdCBrbm93IHRoZSBzaXplIG9mCiAgd2hhdCBpcyBjdXJyZW50bHkgYXQgdGhlIHNlcnZlciBlbmQuIFRlc3QgMTA0MSBpcyBubyBsb25nZXIgZGlzYWJsZWQuCgpZYW5nIFRzZSAoMiBBdWcgMjAwOCkKLSBObyBsb25nZXIgdGVzdCBhdmFpbGFiaWxpdHkgb2YgdGhlIGdkaTMyIGxpYnJhcnksIG5vciB1c2UgaXQgZm9yIGxpbmtpbmcsIGV2ZW4KICB3aGVuIHdlIGhhdmUgYmVlbiBkb2luZyB0aGlzIHNpbmNlIHJldmlzaW9uIDEuNDcgb2YgY29uZmlndXJlLmFjIDQgeWVhcnMgYW5kCiAgNSBtb250aHMgYWdvIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGEgV2luZG93cyB0YXJnZXQuIFdlIGFjdHVhbGx5IGRvbid0IHVzZSBhbnkKICBmdW5jdGlvbiBmcm9tIHRoZSBXaW5kb3dzIEdESSAoR3JhcGhpY3MgRGV2aWNlIEludGVyZmFjZSkgcmVsYXRlZCB3aXRoIGRyYXdpbmcKICBvciBncmFwaGljcy1yZWxhdGVkIG9wZXJhdGlvbnMuCgpEYW5pZWwgRmFuZHJpY2ggKDEgQXVnIDIwMDgpCi0gQWRkZWQgc3VwcG9ydCBmb3IgLS1hcHBlbmQgb24gU0ZUUCB1cGxvYWRzLiBVbmZvcnR1bmF0ZWx5LCBPcGVuU1NIIGRvZXNuJ3QKICBzdXBwb3J0IHRoaXMgc28gaXQgZ29lcyB1bnRlc3RlZC4KCllhbmcgVHNlICgxIEF1ZyAyMDA4KQotIENvbmZpZ3VyZSBwcm9jZXNzIG5vdyBjaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfUkVFTlRSQU5UIHN5bWJvbCBpcyBhbHJlYWR5CiAgZGVmaW5lZC4gSWYgaXQgaXNuJ3QgY3VycmVudGx5IGRlZmluZWQgYSBzZXQgb2YgY2hlY2tzIGFyZSBwZXJmb3JtZWQgdG8gdGVzdAogIGlmIGl0cyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIHRvIG1ha2UgdmlzaWJsZSB0byB0aGUgY29tcGlsZXIgYSBzZXQgb2YgKl9yCiAgZnVuY3Rpb25zLiBGaW5hbGx5LCBpZiBfUkVFTlRSQU5UIGlzIGFscmVhZHkgZGVmaW5lZCBvciBuZWVkZWQgaXQgdGFrZXMgY2FyZQogIG9mIG1ha2luZyBhZGp1c3RtZW50cyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgaXQgaXMgZGVmaW5lZCBlcXVhbGx5IGZvciB0aGUKICBjb25maWd1cmUgcHJvY2VzcyB0ZXN0cyBhbmQgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlLgoKLSBSZW1vdmVkIGRlZmluaXRpb24gb2YgQ1VSTF9DSEVDS19XT1JLSU5HX1JFU09MVkVSIGZyb20gYWNpbmNsdWRlLm00IGl0IGhhcwogIG5vdCBiZWVuIGluIHVzZSBzaW5jZSByZXZpc2lvbiAxLjgxIG9mIGNvbmZpZ3VyZS5pbiA2IHllYXJzLCA5IG1vbnRocyBhZ28uCgpEYW5pZWwgRmFuZHJpY2ggKDMxIEp1bCAyMDA4KQotIEZpeGVkIHBhcnNpbmcgb2YgYW4gSVB2NiBwcm94eSBhZGRyZXNzIHRvIHN1cHBvcnQgYSBzY29wZSBpZGVudGlmaWVyLAogIGFzIHdlbGwgYXMgSVB2NCBhZGRyZXNzZXMgaW4gSVB2NiBmb3JtYXQuIEFsc28sIGJldHRlciBoYW5kbGUgdGhlIGNhc2UKICBvZiBhIG1hbGZvcm1hdHRlZCBJUHY2IGFkZHJlc3MgKGF2b2lkIGVtcHR5IGFuZCBOVUxMIHN0cmluZ3MpLgoKLSBGaXhlZCBhIHByb2JsZW0gd2l0aCBhbnkgRlRQIFVSTCBvciBhbnkgVVJMcyBjb250YWluaW5nIGFuIElQdjYgYWRkcmVzcwogIGJlaW5nIG1hbmdsZWQgd2hlbiBwYXNzZWQgdG8gcHJveGllcyB3aGVuIENVUkxPUFRfUE9SVCBpcyBhbHNvIHNldAogIChyZXBvcnRlZCBieSBQcmFtb2QgU2hhcm1hKS4KCi0gVXNlciBuYW1lcyBlbWJlZGRlZCBpbiBwcm94eSBVUkxzIHdpdGhvdXQgYSBwYXNzd29yZCB3ZXJlIHBhcnNlZAogIGluY29ycmVjdGx5LS10aGUgaG9zdCBuYW1lIGlzIHRyZWF0ZWQgYXMgcGFydCBvZiB0aGUgdXNlciBuYW1lIGFuZCB0aGUKICBwb3J0IG51bWJlciBiZWNvbWVzIHRoZSBwYXNzd29yZC4gIFRoaXMgY2FuIGJlIG9ic2VydmVkIGluIHRlc3QgMjc5CiAgKHdhcyBLTk9XTl9JU1NVRSAjNTQpLgoKRGFuaWVsIFN0ZW5iZXJnICgzMCBKdWwgMjAwOCkKLSBQaGlsIEJsdW5kZWxsIGFkZGVkIHRoZSBDVVJMT1BUX0FERFJFU1NfU0NPUEUgb3B0aW9uLCBhcyB3ZWxsIGFzIGFkanVzdGVkCiAgdGhlIFVSTCBwYXJzZXIgdG8gYWxsb3cgbnVtZXJpY2FsIElQdjYtYWRkcmVzc2VzIHRvIGJlIHNwZWNpZmllZCB3aXRoIHRoZQogIHNjb3BlIGdpdmVuLCBhcyBwZXIgUkZDNDAwNyAtIHdpdGggYSBwZXJjZW50IGxldHRlciB0aGF0IGl0c2VsZiBuZWVkcyB0byBiZQogIFVSTCBlc2NhcGVkLiBGb3IgZXhhbXBsZSwgZm9yIGFuIGFkZHJlc3Mgb2YgZmU4MDo6MTIzNCUxIHRoZSBIVFRQIFVSTCBpczoKICAiaHR0cDovL1tmZTgwOjoxMjM0JTI1MV0vIgoKLSBQSFAncyBidWcgcmVwb3J0ICM0MzE1OCAoaHR0cDovL2J1Z3MucGhwLm5ldC9idWcucGhwP2lkPTQzMTU4KSBpZGVudGlmaWVzIGEKICB0cnVlIGJ1ZyBpbiBsaWJjdXJsIGJ1aWx0IHdpdGggT3BlblNTTC4gSXQgbWFkZSBjdXJsX2Vhc3lfZ2V0aW5mbygpIG1vcmUgb3IKICBsZXNzIGFsd2F5cyByZXR1cm4gMCBmb3IgQ1VSTElORk9fU1NMX1ZFUklGWVJFU1VMVCBiZWNhdXNlIHRoZSBmdW5jdGlvbiB0aGF0CiAgd291bGQgc2V0IGl0IHRvIHNvbWV0aGluZyBub24temVybyB3b3VsZCByZXR1cm4gYmVmb3JlIHRoZSBhc3NpZ24gaW4gYWxtb3N0CiAgYWxsIGVycm9yIGNhc2VzLiBUaGUgaW50ZXJuYWwgdmFyaWFibGUgaXMgbm93IHNldCB0byBub24temVybyBmcm9tIHRoZSBzdGFydAogIG9mIHRoZSBmdW5jdGlvbiBvbmx5IHRvIGdldCBjbGVhcmVkIGxhdGVyIG9uIGlmIHRoaW5ncyB3b3JrIG91dCBmaW5lLgoKLSBNYWRlIHRoZSBjdXJsIHRvb2wncyAtdyBvcHRpb24gc3VwcG9ydCB0aGUgJXtzc2xfdmVyaWZ5X3Jlc3VsdH0gdmFyaWFibGUKCkRhbmllbCBGYW5kcmljaCAoMzAgSnVsIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDUyIHRocm91Z2ggMTA1NSB0byB0ZXN0IHVwbG9hZGluZyBkYXRhIGZyb20gZmlsZXMKICBkdXJpbmcgcmVkaXJlY3RzLiAgVGVzdCBjYXNlcyAxMDUyIGFuZCAxMDU1IHNob3cgcHJvYmxlbXMgKG1heWJlIHRoZSBzYW1lCiAgcm9vdCBjYXVzZSBhcyAxMDUxKSBhbmQgYXJlIGRpc2FibGVkLgoKLSBGaXhlZCBhIGNvdXBsZSBvZiBidWZmZXIgb3ZlcmZsb3dzIGluIHRoZSBNUy1ET1MgcG9ydCBvZiB0aGUgY3VybCB0b29sLgoKRGFuaWVsIEZhbmRyaWNoICgyOSBKdWwgMjAwOCkKLSBGaXhlZCAtLXVzZS1hc2NpaSB0byBwcm9wZXJseSBjb252ZXJ0IHRleHQgZmlsZXMgb24gU3ltYmlhbiBPUywgTVMtRE9TCiAgYW5kIE9TLzIuCgotIEFkZGVkIHRlc3QgY2FzZSAxMDUxIHRvIHRlc3QgTG9jYXRpb246IGZvbGxvd2luZyB3aXRoIFBVVCwgYXMgcmVwb3J0ZWQKICBieSBCZW4gU3V0Y2xpZmZlLiAgVGhlIHRlc3Qgd2hlbiBydW4gbWFudWFsbHkgc2hvd3MgYSBwcm9ibGVtIGluIGN1cmwKICBzbyBpdCdzIGRpc2FibGVkLgoKRGFuaWVsIEZhbmRyaWNoICgyOCBKdWwgMjAwOCkKLSBGaXhlZCBkaXNwbGF5IG9mIHRoZSBpbnRlcmZhY2UgYmluZCBhZGRyZXNzIGluIHRoZSB0cmFjZSBvdXRwdXQgd2hlbiBpdCdzCiAgYW4gSVB2NiBhZGRyZXNzLgoKLSBBZGRlZCB0ZXN0IGNhc2VzIDEwNDUgdGhyb3VnaCAxMDQ5IGFzIHNpbXBsZSB0ZXN0cyBvZiAtLWludGVyZmFjZSB1c2luZyB0aGUKICBsb2NhbGhvc3QgaW50ZXJmYWNlLgoKLSBBZGRlZCB0ZXN0IGNhc2UgMTA1MCB0byB0ZXN0IC0tZnRwLXBvcnQgd2l0aCBhbiBJUHY2IGFkZHJlc3MKCkRhbmllbCBTdGVuYmVyZyAoMjYgSnVsIDIwMDgpCi0gRGF2aWQgQmF1IGZpbGVkIGJ1ZyByZXBvcnQgIzIwMjYyNDAgIkNVUkxfUkVBREZVTkNfUEFVU0UgbGVhZHMgdG8gYnVmZmVyCiAgb3ZlcnJ1biIgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIwMjYyNDApIGlkZW50aWZ5aW5nIHR3bwogIHByb2JsZW1zLCBhbmQgcHJvdmlkaW5nIHRoZSBmaXggZm9yIHRoZW06CgogIC0gQ1VSTF9SRUFERlVOQ19QQVVTRSBkaWQgaW4gZmFjdCBub3QgcGF1c2UgdGhlIF9zZW5kaW5nXyBvZiBkYXRhIHRoYXQgaXQgaXMKICAgIGRlc2lnbmVkIGZvciBidXQgcGF1c2VkIF9yZWNlaXZpbmdfIG9mIGRhdGEhCgogIC0gbGliY3VybCBkaWRuJ3QgaW50ZXJuYWxseSBzZXQgdGhlIHJlYWQgY291bnRlciB0byB6ZXJvIHdoZW4gdGhpcyByZXR1cm4KICAgIGNvZGUgd2FzIGRldGVjdGVkLCB3aGljaCB3b3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGp1bmsgZ2V0dGluZyBzZW50IHRvCiAgICB0aGUgc2VydmVyLgoKRGFuaWVsIEZhbmRyaWNoICgyNiBKdWwgMjAwOCkKLSBBZGRlZCB0ZXN0IDEwNDQgdG8gdGVzdCBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gZnRwIHdpdGggLUkuCgotIEVsaW1pbmF0ZSBhIHVubmVjZXNzYXJ5IHNvY2tldCBjcmVhdGlvbiBpbiBDdXJsX2dldGFkZHJpbmZvIGZvciBhbiBJUHY0CiAgYWRkcmVzcyBpbiBhbiBJUHY2IGNhcGFibGUgbGliY3VybC4KCi0gQWRkZWQgZmVhdHVyZSBpbiBydW50ZXN0cy5wbCB0byBzZWxlY3QgdGVzdHMgYmFzZWQgb24ga2V5IHdvcmQuCgpEYW5pZWwgRmFuZHJpY2ggKDIzIEp1bCAyMDA4KQotIENoYW5nZWQgdGhlIGxvbmcgbG9nZmlsZSBlbGlzaW9uIGNvZGUgaW4gcnVudGVzdHMucGwgdG8gcHJvcGVybHkgaGFuZGxlCiAgbGluZXMgZW5kaW5nIGluIFxyLgoKLSBDaGFuZ2VkIHJlZmVyZW5jZXMgdG8gVFJVRSBhbmQgRkFMU0UgaW4gdGhlIGN1cmxfZWFzeV9zZXRvcHQgbWFuIHBhZ2UgdG8KICAxIGFuZCB6ZXJvLCByZXNwZWN0aXZlbHksIHNpbmNlIFRSVUUgYW5kIEZBTFNFIGFyZW4ndCBwYXJ0IG9mIHRoZQogIGxpYmN1cmwgQVBJLgoKRGFuaWVsIFN0ZW5iZXJnICgyMyBKdWwgMjAwOCkKLSBJIHdlbnQgb3ZlciB0aGUgY3VybF9lYXN5X3NldG9wdCBtYW4gcGFnZSBhbmQgcmVwbGFjZWQgbW9zdCByZWZlcmVuY2VzIHRvCiAgbm9uLXplcm8gd2l0aCB0aGUgZml4ZWQgdmFsdWUgb2YgMS4gV2Ugc2hvdWxkIHN0cml2ZSBhdCBtYWtpbmcgb3B0aW9ucwogIHN1cHBvcnQgJzEnIGZvciBlbmFibGluZyB0aGVtIG1lbnRpb25lZCBleHBsaWNpdGx5LCBhcyB0aGF0IHRoZW4gd2lsbCBhbGxvdwogIHVzIGZvciB0byBleHRlbmQgdGhlbSBpbiB0aGUgZnV0dXJlIHdpdGhvdXQgYnJlYWtpbmcgb2xkZXIgcHJvZ3JhbXMuCgogIFBvc3NpYmx5IHdlIHNob3VsZCBldmVuIGludHJvZHVjZSBhIGZhbmN5IGRlZmluZSB0byB1c2UgaW5zdGVhZCBvZiAnMScgYWxsCiAgb3Zlci4uLgoKWWFuZyBUc2UgKDIxIEp1bCAyMDA4KQotIFVzZSB0aGUgc3JlYWRmcm9tKCkgd3JhcHBlciB0byByZXBsYWNlIHJlY3Zmcm9tKCkgaW4gb3VyIGNvZGUuCgpZYW5nIFRzZSAoMjAgSnVsIDIwMDgpCi0gd2hlbiByZWN2ZnJvbSBwcm90b3R5cGUgdXNlcyBhIHZvaWQgcG9pbnRlciBmb3IgYXJndW1lbnRzIDIsIDUgb3IgNiB0aGlzIHdpbGwKICBub3cgY2F1c2UgdGhlIGRlZmluaXRpb24sIGFzIGFwcHJvcHJpYXRlLCBvZiBSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCwKICBSRUNWRlJPTV9UWVBFX0FSRzVfSVNfVk9JRCBvciBSRUNWRlJPTV9UWVBFX0FSRzZfSVNfVk9JRC4KCllhbmcgVHNlICgxNyBKdWwgMjAwOCkKLSBSRUNWRlJPTV9UWVBFX0FSRzIsIFJFQ1ZGUk9NX1RZUEVfQVJHNSBhbmQgUkVDVkZST01fVFlQRV9BUkc2IGFyZSBub3cgZGVmaW5lZAogIHRvIHRoZSBkYXRhIHR5cGUgcG9pbnRlZCBieSBpdHMgcmVzcGVjdGl2ZSBhcmd1bWVudCBhbmQgbm90IHRoZSBwb2ludGVyIHR5cGUuCgpZYW5nIFRzZSAoMTYgSnVsIDIwMDgpCi0gQ29uZmlndXJlIHByb2Nlc3Mgbm93IGNoZWNrcyBhdmFpbGFiaWxpdHkgb2YgcmVjdmZyb20oKSBzb2NrZXQgZnVuY3Rpb24gYW5kCiAgZmluZHMgb3V0IGl0cyByZXR1cm4gdHlwZSBhbmQgdGhlIHR5cGVzIG9mIGl0cyBhcmd1bWVudHMuIEFkZGVkIGRlZmluaXRpb25zCiAgZm9yIG5vbi1jb25maWd1cmUgc3lzdGVtcyBjb25maWcgZmlsZXMsIGFuZCBpbnRyb2R1Y2VkIG1hY3JvIHNyZWFkZnJvbSB3aGljaAogIHdpbGwgYmUgdXNlZCBvbiB1ZHAgc29ja2V0cyBhcyBhIHJlY3Zmcm9tKCkgd3JhcHBlci4KCllhbmcgVHNlICgxNSBKdWwgMjAwOCkKLSBBZGRlZCBkZXNjcmlwdGlvbi9jb21tZW50IHRvIGluY2x1ZGUgcGF0aHMgdXNlZCBpbiBzZXZlcmFsIE1ha2VmaWxlLmFtIGZpbGVzLgogIEFkZGVkIGF1dG9tYWtlIG9wdGlvbiBub3N0ZGluYyB0byB0ZXN0IHNlcnZlcnMgbWFrZWZpbGUgYW5kIG1vZGlmaWVkIGxpYmN1cmwKICBleHRlcm5hbCBoZWFkZXJzIGluY2x1ZGUgcGF0aCBmb3IgbGlidGVzdCBwcm9ncmFtcy4KCkRhbmllbCBGYW5kcmljaCAoMTQgSnVsIDIwMDgpCi0gQWRkZWQgdGVzdDEwNDAgdGhyb3VnaCB0ZXN0MTA0MyB0byB0ZXN0IC1DIC0gb24gSFRUUC4gVGVzdCAxMDQxIGZhaWxlZCBzbwogIGl0J3MgYWRkZWQgdG8gRElTQUJMRUQuCgpZYW5nIFRzZSAoMTQgSnVsIDIwMDgpCi0gSFRUUF9PTkxZIGRlZmluaXRpb24gY2hlY2sgaW4gbGliL3NldHVwLmggaXMgbm93IGRvbmUgb25jZSB0aGF0IGNvbmZpZ3VyYXRpb24KICBmaWxlIGhhcyBiZWVuIGluY2x1ZGVkLiBJbiB0aGlzIHdheSBpZiBzeW1ib2wgaXMgZGVmaW5lZCBpbiB0aGUgY29uZmlnIGZpbGUKICBpdCB3aWxsIG5vIGxvbmdlciBiZSBpZ25vcmVkLiAgUmVtb3ZlZCBpbmNsdXNpb24gb2YgcmVtYWluaW5nIHN5c3RlbSBoZWFkZXIKICBmaWxlcyBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE1vdmVkIF9SRUVOVFJBTlQgZGVmaW5pdGlvbiB1cC9lYXJsaWVyIGluCiAgbGliL3NldHVwLmgKCllhbmcgVHNlICgxMSBKdWwgMjAwOCkKLSBBZGRlZCBtaXNzaW5nIG11bHRpcGxlIGhlYWRlciBpbmNsdXNpb24gcHJldmVudGlvbiBkZWZpbml0aW9uIGZvciBoZWFkZXIKICBmaWxlIGNvbnRlbnRfZW5jb2RpbmcuaAoKRGFuaWVsIEZhbmRyaWNoICgxMSBKdWwgMjAwOCkKLSBGaXhlZCB0ZXN0IDU1MyB0byBwYXNzIHRoZSB0b3J0dXJlIHRlc3QuCgpEYW5pZWwgU3RlbmJlcmcgKDExIEp1bCAyMDA4KQotIERhbmllbCBGYW5kcmljaCBmb3VuZCBvdXQgd2UgZGlkbid0IHBhc3Mgb24gdGhlIHVzZXItYWdlbnQgcHJvcGVybHkgd2hlbgogIGRvaW5nICJwcm94eS10dW5uZWxzIiB3aXRoIG5vbi1IVFRQIHByb3RvdG9scyBhbmQgdGhhdCB3YXMgc2ltcGx5IGJlY2F1c2UKICB0aGUgY29kZSBhc3N1bWVkIHRoZSB1c2VyLWFnZW50IHdhcyBvbmx5IG5lZWRlZCBmb3IgSFRUUC4KCkRhbmllbCBGYW5kcmljaCAoMTAgSnVsIDIwMDgpCi0gQ2hhbmdlZCBzbGlnaHRseSB0aGUgU0ZUUCBxdW90ZSBjb21tYW5kcyBjaG1vZCwgY2hvd24gYW5kIGNoZ3JwIHRvIG9ubHkKICBzZXQgdGhlIGF0dHJpYnV0ZSB0aGF0IGhhcyBjaGFuZ2VkIGluc3RlYWQgb2YgYWxsIHBvc3NpYmxlIG9uZXMuIEhvcGVmdWxseSwKICB0aGlzIHdpbGwgc29sdmUgdGhlICJQZXJtaXNzaW9uIGRlbmllZCIgcHJvYmxlbSB0aGF0IE5hZ2FyYWphbiBTcmVlbml2YXNhbgogIHJlcG9ydGVkIHdoZW4gc2V0dGluZyBzb21lIG1vZGVzLCBidXQgcmVnYXJkbGVzcywgaXQgc2F2ZXMgYSBwcm90b2NvbAogIHJvdW5kIHRyaXAgaW4gdGhlIGNobW9kIGNhc2UuCgotIEFkZGVkIHRlc3QgY2FzZXMgMTAzOCBhbmQgMTAzOSB0byB0ZXN0IEFkcmlhbiBLcmVoZXIncyByZXBvcnQgdGhhdCBmdHAKICB1cGxvYWRzIHdpdGggLUMgLSBkaWRuJ3QgcmVzdW1lIHByb3Blcmx5LCBidXQgdGhlIHRlc3RzIHBhc3MuCgpZYW5nIFRzZSAoMTAgSnVsIDIwMDgpCi0gUGV0ZXIgTGFtYmVyZyBmaWxlZCBidWcgcmVwb3J0ICMyMDE1MTI2OiAicG9sbCBnaXZlcyBXU0FFSU5WQUwgd2hlbiBQT0xMUFJJCiAgaXMgc2V0IGluIGZkc2V0LmV2ZW50cyIgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIwMTUxMjYpIHdoaWNoCiAgZXhhY3RseSBwaW5wb2ludGVkIHRoZSBwcm9ibGVtIG9ubHkgdHJpZ2dlcmVkIG9uIFdpbmRvd3MgVmlzdGEsIHByb3ZpZGVkCiAgcmVmZXJlbmNlIHRvIGRvY3MgYW5kIGFsc28gYSBmaXguIFRoZXJlIGlzIG11Y2ggd29yayBiZWhpbmQgUGV0ZXIgTGFtYmVyZydzCiAgZXhjZWxsZW50IGJ1ZyByZXBvcnQuIFRoYW5rIFlvdSEKCkRhbmllbCBGYW5kcmljaCAoOSBKdWwgMjAwOCkKLSBBZGRlZCB0ZXN0cyAxMDM2IGFuZCAxMDM3IHRvIHZlcmlmeSByZXN1bWVkIGZ0cCBkb3dubG9hZHMgd2l0aCAtQyAtCgpEYW5pZWwgU3RlbmJlcmcgKDkgSnVsIDIwMDgpCi0gQW5kcmVhcyBTY2h1bGRlaSBpbXByb3ZlZCBQaGlsIEJsdW5kZWxsJ3MgcGF0Y2ggZm9yIElQdjYgdXNpbmcgYy1hcmVzLCBhbmQgSQogIGVkaXRlZCBpdCBzbGlnaHRseS4gTm93IHlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgSVB2NiBhZGRyZXNzZXMgZmluZSBldmVuCiAgd2l0aCBsaWJjdXJsIGJ1aWx0IHRvIHVzZSBjLWFyZXMuCgpEYW5pZWwgRmFuZHJpY2ggKDkgSnVsIDIwMDgpCi0gRml4ZWQgYW4gT09NIGhhbmRsaW5nIHByb2JsZW0gdGhhdCBjYXVzZSB0ZXN0IDExIHRvIGZhaWwgdGhlIHRvcnR1cmUgdGVzdC4KCkRhbmllbCBGYW5kcmljaCAoOCBKdWwgMjAwOCkKLSBGaXhlZCB0ZXN0IDU1NCB0byBwYXNzIHRoZSB0b3J0dXJlIHRlc3QuCgpEYW5pZWwgRmFuZHJpY2ggKDcgSnVsIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDM0ICYgMTAzNSB0byB0ZXN0IElETiBuYW1lIGNvbnZlcnNpb24gZmFpbHVyZXMuCgpEYW5pZWwgU3RlbmJlcmcgKDcgSnVsIDIwMDgpCi0gU2NvdHQgQmFycmV0dCBwcm92aWRlZCBhIHRlc3QgY2FzZSBmb3IgYSBzZWdmYXVsdCBpbiB0aGUgRlRQIGNvZGUgYW5kIHRoZQogIGZpeCBmb3IgaXQuIEl0IG9jY3VyZWQgd2hlbiB5b3UgZGlkIGEgRlRQIHRyYW5zZmVyIHVzaW5nCiAgQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0QgYW5kIHRoZW4gZGlkIGFub3RoZXIgb25lIG9uIHRoZSBzYW1lIGVhc3kgaGFuZGxlIGJ1dAogIHN3aXRjaGVkIHRvIENVUkxGVFBNRVRIT0RfTk9DV0QuIER1ZSB0byB0aGUgImRpciBkZXB0aCIgdmFyaWFibGUgbm90IGJlaW5nCiAgY2xlYXJlZCBwcm9wZXJseS4gIFNjb3R0J3MgdGVzdCBjYXNlIGlzIG5vdyBrbm93biBhcyB0ZXN0IDUzOSBhbmQgaXQKICB2ZXJpZmllcyB0aGUgZml4LgoKRGFuaWVsIFN0ZW5iZXJnICgzIEp1bCAyMDA4KQotIFBoaWwgQmx1bmRlbGwgcHJvdmlkZWQgYSBmaXggZm9yIGxpYmN1cmwncyB0cmVhdG1lbnQgb2YgdW5leHBlY3RlZCAxeHgKICByZXNwb25zZSBjb2Rlcy4gUHJldmlvdXNseSBsaWJjdXJsIHdvdWxkIGhhbmcgb24gc3VjaCBvY2N1cmFuY2VzLiBJIGFkZGVkCiAgdGVzdCBjYXNlIDEwMzMgdG8gdmVyaWZ5LgoKLSBJbnRyb2N1ZGluZyBhIG5ldyB0aW1lc3RhbXAgZm9yIGN1cmxfZWFzeV9nZXRpbmZvKCk6CiAgQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FLiBUaGlzIGlzIHNldCB3aXRoIHRoZSAiYXBwbGljYXRpb24gbGF5ZXIiCiAgaGFuZHNoYWtlL2Nvbm5lY3Rpb24gaXMgY29tcGxldGVkLiBXaGljaCB0eXBpY2FsbHkgaXMgU1NMLCBUTFMgb3IgU1NIIGFuZCBieQogIHVzaW5nIHRoaXMgeW91IGNhbiBmaWd1cmUgb3V0IHRoZSBhcHBsaWNhdGlvbiBsYXllcidzIG93biBjb25uZWN0IHRpbWUuIFlvdQogIGNhbiBleHRyYWN0IHRoZSB0aW1lIHN0YW1wIHVzaW5nIGN1cmwncyAtdyBvcHRpb24gYW5kIHRoZSBuZXcgdmFyaWFibGUgbmFtZWQKICAndGltZV9hcHBjb25uZWN0Jy4gVGhpcyBmZWF0dXJlIHdhcyBzcG9uc29yZWQgYnkgTGVubnkgUmFjaGl0c2t5IGF0IE5ldVN0YXIuCgpEYW5pZWwgRmFuZHJpY2ggKDIgSnVsIDIwMDgpCi0gU3VwcG9ydCBPcGVuIFdhdGNvbSBDIG9uIExpbnV4IChhcyB3ZWxsIGFzIFdpbmRvd3MpLgoKWWFuZyBUc2UgKDIgSnVsIDIwMDgpCi0gVGhlIHByZXZpb3VzbHkgY29tbWl0dGVkIGZpeCBmb3IgYnVnIHJlcG9ydCAjMTk5OTE4MSBwcmV2ZW50ZWQgdXNpbmcgdGhlCiAgbW9ub3RvbmljIGNsb2NrIG9uIGFueSBzeXN0ZW0gd2l0aG91dCBhbiBhbHdheXMgc3VwcG9ydGVkIFBPU0lYIGNvbXBsaWFudAogIGltcGxlbWVudGF0aW9uLiBOb3cgdGhlIFBPU0lYIGNvbXBsaWFudCBjb25maWd1cmF0aW9uIGNoZWNrIGlzIHJlbW92ZWQgYW5kCiAgd2lsbCBmYWxsYmFjayB0byBnZXR0aW1lb2ZkYXkgd2hlbiB0aGUgbW9ub3RvbmljIGNsb2NrIGlzIHVuYXZhaWxhYmxlIGF0CiAgcnVuLXRpbWUuCgotIFRoZSBjb25maWd1cmUgcHJvY2VzcyB3aWxsIG5vdyBoYWx0IHdoZW4gc2VkLCBncmVwLCBlZ3JlcCBvciBhciBwcm9ncmFtcwogIGNhbiBub3QgYmUgZm91bmQgYW1vbmcgdGhlIGRpcmVjdG9yaWVzIGluIFBBVEggdmFyaWFibGUuCgpEYW5pZWwgU3RlbmJlcmcgKDEgSnVsIDIwMDgpCi0gUm9sbGFuZCBEdWRlbWFpbmUgcHJvdmlkZWQgZml4ZXMgdG8gZ2V0IGxpYmN1cmwgdG8gYnVpbGQgZm9yIHRoZSBJTlRFR1JJVFkKICBvcGVyYXRpbmcgc3lzdGVtLgoKRGFuaWVsIFN0ZW5iZXJnICgzMCBKdW4gMjAwOCkKLSBNYWRlIHRoZSBpbnRlcm5hbCBwcmludGYoKSBzdXBwb3J0ICVsbHUgcHJvcGVybHkgdG8gcHJpbnQgdW5zaWduZWQgbG9uZyBsb25ncy4KCi0gU3RlcGhlbiBDb2xseWVyIGFuZCBUb3IgQXJudHNlbiBoZWxwZWQgaWRlbnRpZnkgYSBmbGF3IGluIHRoZSByYW5nZSBjb2RlCiAgd2hpY2ggb3V0cHV0IHRoZSByYW5nZSB1c2luZyBhIHNpZ25lZCB2YXJpYWJsZSB3aGVyZSBpdCBzaG91bGQgcmF0aGVyIHVzZQogIHVuc2lnbmVkLgoKWWFuZyBUc2UgKDI5IEp1biAyMDA4KQotIEpvaG4gTGlnaHRzZXkgZmlsZWQgYnVnIHJlcG9ydCAjMTk5OTE4MTogIkNMT0NLX01PTk9UT05JQyBhbHdheXMgZmFpbHMgb24KICBzb21lIHN5c3RlbXMiIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xOTk5MTgxKS4gVGhlIHByb2JsZW0gd2FzCiAgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkaWQgbm90IHVzZSB0aGUgX1BPU0lYX01PTk9UT05JQ19DTE9DSyBmZWF0dXJlIHRlc3QKICBtYWNybyB3aGVuIGNoZWNraW5nIG1vbm90b25pYyBjbG9jayBhdmFpbGFiaWxpdHkuIFRoaXMgaXMgbm93IGZpeGVkIGFuZCB0aGUKICBtb25vdG9uaWMgY2xvY2sgd2lsbCBub3QgYmUgdXNlZCB1bmxlc3MgdGhlIGZlYXR1cmUgdGVzdCBtYWNybyBpcyBkZWZpbmVkCiAgd2l0aCBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGluZGljYXRpbmcgYWx3YXlzIHN1cHBvcnRlZC4KCkRhbmllbCBGYW5kcmljaCAoMjUgSnVuIDIwMDgpCi0gSG9ub3VyIC0tc3RkZXJyIHdpdGggdGhlIC12IG9wdGlvbi4KCi0gRml4ZWQgYSBmaWxlIGhhbmRsZSBsZWFrIGluIHRoZSBjb21tYW5kIGxpbmUgY2xpZW50IGlmIG1vcmUgdGhhbiBvbmUKICAtLXN0ZGVyciBvcHRpb24gd2FzIGdpdmVuLgoKRGFuaWVsIFN0ZW5iZXJnICgyMiBKdW4gMjAwOCkKLSBFZHVhcmQgQmxvY2ggZmlsZWQgdGhlIGRlYmlhbiBidWcgcmVwb3J0ICM0ODc1NjcKICAoaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTQ4NzU2NykgcG9pbnRpbmcgb3V0IHRoYXQKICBsaWJjdXJsIHVzZWQgQ29udGVudC1SYW5nZTogaW5zdGVhZCBvZiBSYW5nZSB3aGVuIGRvaW5nIGEgcmFuZ2UgcmVxdWVzdCB3aXRoCiAgLS1oZWFkIChDVVJMT1BUX05PQk9EWSkuIFRoaXMgaXMgbm93IGZpeGVkIGFuZCB0ZXN0IGNhc2UgMTAzMiB3YXMgYWRkZWQgdG8KICB2ZXJpZnkuCgpEYW5pZWwgRmFuZHJpY2ggKDIxIEp1biAyMDA4KQotIFN0b3BwZWQgdXNpbmcgcmFuZ2VzIGluIHNjYW5mIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJVthLXpdKSBzaW5jZSB0aGF0CiAgaXMgbm90IEFOU0kgQywganVzdCBhIGNvbW1vbiBleHRlbnNpb24uICBUaGlzIGNhdXNlZCBwcm9ibGVtcyBvbgogIGF0IGxlYXN0IE9wZW4gV2F0Y29tIEMuCgpZYW5nIFRzZSAoMjAgSnVuIDIwMDgpCi0gTW9kaWZpZWQgY29uZmlndXJhdGlvbiBzY3JpcHQgdG8gYWN0dWFsbHkgdmVyaWZ5IGlmIHRoZSBjb21waWxlciBpcyBnb29kCiAgZW5vdWdoIGF0IGRldGVjdGluZyBjb21waWxhdGlvbiBlcnJvcnMgb3IgYXQgbGVhc3QgaXQgaGFzIGJlZW4gcHJvcGVybHkKICBjb25maWd1cmVkIHRvIGRvIHNvLiBDb25maWd1cmF0aW9uIGhlYXZpbHkgZGVwZW5kcyBvbiB0aGlzIGNhcGFiaWxpdHksIHNvCiAgaWYgdGhpcyBjb21waWxlciBzYW5pdHkgY2hlY2sgZmFpbHMgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aWxsIG5vdyBmYWlsLgoKRGFuaWVsIFN0ZW5iZXJnICgyMCBKdW4gMjAwOCkKLSBQaGlsIFBlbGxvdWNob3VkIGZvdW5kIGEgY2FzZSB3aGVyZSBsaWJjdXJsIGJ1aWx0IHdpdGggTlNTIGZhaWxlZCB0bwogIGhhbmRzaGFrZSB3aXRoIGEgU1NMdjIgc2VydmVyLCBhbmQgaXQgdHVybmVkIG91dCB0byBiZSBiZWNhdXNlIGl0IGRpZG4ndAogIHJlY29nbml6ZSB0aGUgY2lwaGVyIG5hbWVkICJyYzQtbWQ1Ii4gSW4gb3VyIGxpc3QgdGhhdCBjaXBoZXIgd2FzIG5hbWVkCiAgcGxhaW5seSAicmM0Ii4gSSd2ZSBub3cgYWRkZWQgcmM0LW1kNSB0byB3b3JrIGFzIGFuIGFsaWFzIGFzIFBoaWwgcmVwb3J0ZWQKICB0aGF0IGl0IG1hZGUgdGhpbmdzIHdvcmsgZm9yIGhpbSBhZ2Fpbi4KCi0gSGFucy1KdXJnZW4gTWF5IHBvaW50ZWQgb3V0IHRoYXQgdHJ5aW5nIFNDUCBvciBTRlRQIG92ZXIgYSBTT0NLUyBwcm94eQogIGNyYXNoZWQgbGliY3VybC4gVGhpcyBpcyBub3cgYWRkcmVzc2VkIGJ5IG1ha2luZyBzdXJlIHdlIHVzZSAicGxhaW4gc2VuZCIKICBpbnRlcm5hbGx5IHdoZW4gZG9pbmcgdGhlIHNvY2tzIGhhbmRzaGFrZSBpbnN0ZWFkIG9mIHRoZSBDdXJsX3dyaXRlKCkKICBmdW5jdGlvbiB3aGljaCBpcyBkZXNpZ25lZCB0byB1c2UgdGhlICJ0YXJnZXQiIHByb3RvY29sLiBUaGF0J3MgdGhlbiBTQ1Agb3IKICBTRlRQIGluIHRoaXMgY2FzZS4gSSBhbHNvIHRvb2sgdGhlIG9wcG9ydHVuaXR5IGFuZCBjbGVhbmVkIHVwIHNvbWUgc3NoLQogIHJlbGF0ZWQgI2lmZGVmcyBpbiB0aGUgY29kZSBmb3IgcmVhZGFiaWxpdHkuCgpEYW5pZWwgU3RlbmJlcmcgKDE5IEp1biAyMDA4KQotIENocmlzdG9waGVyIFBhbG93IGZpeGVkIGEgY3VybF9tdWx0aV9zb2NrZXQoKSBpc3N1ZSB3aGljaCBwcmV2aW91c2x5IGNhdXNlZAogIGxpYmN1cmwgdG8gbm90IHRlbGwgdGhlIGFwcCBwcm9wZXJseSB3aGVuIGEgc29ja2V0IHdhcyBjbG9zZWQgKHdoZW4gdGhlIG5hbWUKICByZXNvbHZlIGRvbmUgYnkgYy1hcmVzIGlzIGNvbXBsZXRlZCkgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmUtY3JlYXRlZCBhbmQgcHV0CiAgdG8gdXNlIGFnYWluIChmb3IgdGhlIGFjdHVhbCBjb25uZWN0aW9uKS4gU2luY2UgdGhlIGNsb3N1cmUgd2lsbCBtYWtlIHRoZQogICJ3YXRjaCBzdGF0dXMiIGdldCBsb3N0IGluIHNldmVyYWwgZXZlbnQtYmFzZWQgc3lzdGVtcyBsaWJjdXJsIHdpbGwgbmVlZCB0bwogIHRlbGwgdGhlIGFwcCBhYm91dCB0aGlzIGNsb3NlL3JlLWNyZWF0ZSBjYXNlLgoKLSBEZW5nbWlud2VuIGZvdW5kIGEgYnVnIGluIHRoZSBjb25uZWN0aW9uIHJlLXVzZSBmdW5jdGlvbiB3aGVuIHVzaW5nIHRoZQogIG11bHRpIGludGVyZmFjZSB3aXRoIHBpcGVsaW5pbmcgZW5hYmxlZCBhcyBpdCB3b3VsZCB3cm9uZ2x5IGNoZWNrIGZvciwKICBkZXRlY3QgYW5kIGNsb3NlICJkZWFkIGNvbm5lY3Rpb25zIiBldmVuIHRob3VnaCB0aGF0IGNvbm5lY3Rpb24gd2FzIGFscmVhZHkKICBpbiB1c2UhCgpEYW5pZWwgRmFuZHJpY2ggKDE4IEp1biAyMDA4KQotIEFkZGVkIFNTSCBmYWlsdXJlIHRlc3QgY2FzZXMgNjI4LTYzMgoKLSBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBjb21tYW5kLWxpbmUgdG9vbCB0aGF0IGNhdXNlZCBhIHZhbGdyaW5kIGVycm9yLgoKRGFuaWVsIFN0ZW5iZXJnICgxOCBKdW4gMjAwOCkKLSBSb2IgQ3JpdHRlbmRlbiBicm91Z2h0IGEgZml4IGZvciB0aGUgTlNTIGxheWVyIHRoYXQgbWFrZXMgbGliY3VybCBubyBsb25nZXIKICBhbHdheXMgZmlyZSB1cCBhIG5ldyBjb25uZWN0aW9uIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBleGlzdGluZyBvbmUgd2hlbiB0aGUKICBtdWx0aSBpbnRlcmZhY2UgaXMgdXNlZC4gT3JpZ2luYWwgYnVnIHJlcG9ydDoKICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTQ1MDE0MAoKWWFuZyBUc2UgKDE4IEp1biAyMDA4KQotIEludGVybmFsIGNvbmZpZ3VyZSBzY3JpcHQgaW1wcm92ZW1lbnQuIE5vIGxvbmdlciBicmVhayBvdXQgb2Ygc2hlbGwgImZvciIKICBzdGF0ZW1lbnRzIGZyb20gaW5zaWRlIEFDX0ZPT19JRkVMU0UgbWFjcm9zLCBvdGhlcndpc2UgdGVtcG9yYXJ5IG1hY3JvIGZpbGVzCiAgYXJlIG5vdCBwcm9wZXJseSByZW1vdmVkLgoKRGFuaWVsIEZhbmRyaWNoICgxMiBKdW4gMjAwOCkKLSBGaXhlZCBjdXJsLWNvbmZpZyAtLWNhIHdoaWNoIHdhc24ndCBiZWluZyBleHBvcnRlZCBieSBjb25maWd1cmUuCgpEYW5pZWwgU3RlbmJlcmcgKDExIEp1biAyMDA4KQotIEkgZGlkIGEgY2xlYW51cCBvZiB0aGUgaW50ZXJuYWwgZ2VuZXJpYyBTU0wgbGF5ZXIgYW5kIGhvdyB0aGUgdmFyaW91cyBTU0wKICBsaWJyYXJpZXMgYXJlIHN1cHBvcnRlZC4gU3RhcnRpbmcgbm93LCBlYWNoIHVuZGVybHlpbmcgU1NMIGxpYnJhcnkgc3VwcG9ydAogIGNvZGUgZG9lcyBhIHNldCBvZiBkZWZpbmVzIGZvciB0aGUgMTYgZnVuY3Rpb25zIHRoZSBnZW5lcmljIGxheWVyIChzc2xnZW4uYykKICB1c2VzIChhbGwgdGhlc2UgbmV3IGZ1bmN0aW9uIGRlZmluZXMgdXNlIHRoZSBwcmVmaXggImN1cmxzc2xfIikuIFRoaXMKICBncmVhdGx5IHNpbXBsaWZpZWQgdGhlIGdlbmVyaWMgbGF5ZXIgaW4gcmVhZGFiaWxpdHkgYnkgaW52b2x2aW5nIG11Y2ggbGVzcwogICNpZmRlZnMgYW5kIG90aGVyIHByZXByb2Nlc3NvciBzdHVmZiBhbmQgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIGZvciBwZW9wbGUgdG8KICBtYWtlIGxpYmN1cmwgd29yayB3aXRoIG5ldyBTU0wgbGlicmFyaWVzLgoKICBIb3BlZnVsbHkgSSBjYW4gbGF0ZXIgb24gZG9jdW1lbnQgdGhlc2UgMTYgZnVuY3Rpb25zIHNvbWV3aGF0IGFzIHdlbGwuCgogIEkgYWxzbyBtYWRlIG1vc3Qgb2YgdGhlIGludGVybmFsIFNTTC1kZXBlbmRlbnQgZnVuY3Rpb25zICh1c2luZyBDdXJsX3NzbF8KICBwcmVmaXgpICNkZWZpbmVkIHRvIG5vdGhpbmcgd2hlbiBubyBTU0wgc3VwcG9ydCBpcyByZXF1ZXN0ZWQgLSBwcmV2aW91c2x5CiAgdGhleSB3b3VsZCB1bm5lY2Vzc2FyaWx5IGNhbGwgbW9zdGx5IGVtcHR5IGZ1bmN0aW9ucy4KCiAgSSd2ZSBidWlsdCBsaWJjdXJsIHdpdGggT3BlblNTTCBhbmQgR251VExTIGFuZCB3aXRob3V0IFNTTCB0byB0ZXN0IHRoaXMgYW5kCiAgSSd2ZSBhbHNvIHRyaWVkIGJ1aWxkaW5nIHdpdGggTlNTIGJ1dCB0aGUgTlNTIHN1cHBvcnQgaXMgYSBteXN0ZXJ5IHRvIG1lIGFuZAogIEkgZmFpbGVkIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCB0aGUgTlNTIGxpYnJhcmllcyBJIGhhdmUgaW5zdGFsbGVkLiBXZSByZWFsbHkKICBzaG91bGQgQSkgaW1wcm92ZSBvdXIgY29uZmlndXJlIHNjcmlwdCB0byBkZXRlY3QgdW5zdWl0YWJsZSBOU1MgdmVyc2lvbnMKICBhbHJlYWR5IGF0IGNvbmZpZ3VyZSB0aW1lIGFuZCBCKSBkb2N1bWVudCBvdXIgcmVxdWlyZW1lbnRzIGJldHRlciBmb3IgdGhlCiAgU1NMIGxpYnJhcmllcy4KCkRhbmllbCBTdGVuYmVyZyAoMTAgSnVuIDIwMDgpCi0gSSBtYWRlIHRoZSBPcGVuU1NMIGNvZGUgYnVpbGQgYWdhaW4gd2l0aCBPcGVuU1NMIDAuOS42LiBUaGUgQ1JMRklMRQogIGZ1bmN0aW9uYWxpdHkga2lsbGVkIGl0IGR1ZSB0byBpdHMgdW5jb25kaXRpb25hbCB1c2Ugb2YKICBYNTA5X1NUT1JFX3NldF9mbGFncy4uLgoKRGFuaWVsIFN0ZW5iZXJnICg4IEp1biAyMDA4KQotIER1ZSB0byB0aGUgdGhyZWUgbmV3IGxpYmN1cmwgY2hhbmdlcyBhbmQgdGhlIG1hc3NpdmUgY29tbWFuZCBsaW5lIG9wdGlvbgogIGNoYW5nZSBJIGRlY2lkZWQgd2UnbGwgbWFyayBpdCBieSBidW1waW5nIHRoZSBuZXh0IHJlbGVhc2UgbnVtYmVyIHRvIDcuMTkuMCEKCi0gY3VybCB0aGUgdG9vbCBub3cgZGVhbHMgd2l0aCBpdHMgY29tbWFuZCBsaW5lIG9wdGlvbnMgc29tZXdoYXQgZGlmZmVyZW50bHkhCiAgQWxsIGJvb2xlYW4gb3B0aW9ucyAoc3VjaCBhcyAtTywgLUksIC12IGV0YyksIGJvdGggc2hvcnQgYW5kIGxvbmcgdmVyc2lvbnMsCiAgbm93IGFsd2F5cyBzd2l0Y2ggb24vZW5hYmxlIHRoZSBvcHRpb24gbmFtZWQuIFVzaW5nIHRoZSBzYW1lIG9wdGlvbiBtdWx0aXBsZQogIHRpbWVzIHRodXMgbWFrZSBubyBkaWZmZXJlbmNlLiBUbyBzd2l0Y2ggb2ZmIG9uZSBvZiB0aG9zZSBvcHRpb25zLCB5b3UgbmVlZAogIHRvIHVzZSB0aGUgbG9uZyB2ZXJzaW9uIG9mIHRoZSBvcHRpb24gYW5kIHR5cGUgLS1uby1PUFRJT04uIExpa2UgdG8gZGlzYWJsZQogIHZlcmJvc2UgbW9kZSB5b3UgdXNlIC0tbm8tdmVyYm9zZSEKCi0gQWRkZWQgLS1yZW1vdGUtbmFtZS1hbGwgdG8gY3VybCwgd2hpY2ggaWYgdXNlZCBjaGFuZ2VzIHRoZSBkZWZhdWx0IGZvciBhbGwKICBnaXZlbiBVUkxzIHRvIGJlIGRlYWx0IHdpdGggYXMgaWYgLU8gaXMgdXNlZC4gU28gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGF0CiAgZm9yIGEgc3BlY2lmaWMgVVJMIGFmdGVyIC0tcmVtb3RlLW5hbWUtYWxsIGhhcyBiZWVuIHVzZWQsIHlvdSBtdXNlIHVzZSAtbyAtCiAgb3IgLS1uby1yZW1vdGUtbmFtZS4KCkRhbmllbCBTdGVuYmVyZyAoNiBKdW4gMjAwOCkKLSBBeGVsIFRpbGxlcXVpbiBhbmQgQXJuYXVkIEViYWxhcmQgYWRkZWQgc3VwcG9ydCBmb3IgQ1VSTE9QVF9JU1NVRVJDRVJULCBmb3IKICBPcGVuU1NMLCBOU1MgYW5kIEdudVRMUy1idWlsdCBsaWJjdXJscy4KCi0gQXhlbCBUaWxsZXF1aW4gYW5kIEFybmF1ZCBFYmFsYXJkIGFkZGVkIHN1cHBvcnQgZm9yIENVUkxPUFRfQ1JMRklMRSwgZm9yCiAgT3BlblNTTCwgTlNTIGFuZCBHbnVUTFMtYnVpbHQgbGliY3VybHMuCgotIEFkZGVkIENVUkxJTkZPX1BSSU1BUllfSVAgYXMgYSBuZXcgaW5mb3JtYXRpb24gcmV0cmlldmFibGUgd2l0aAogIGN1cmxfZWFzeV9nZXRpbmZvLiBJdCByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cmluZyB3aXRoIHRoZSBtb3N0IHJlY2VudGx5CiAgdXNlZCBJUCBhZGRyZXNzLiBNb2RpZmllZCB0ZXN0IGNhc2UgNTAwIHRvIGFsc28gdmVyaWZ5IHRoaXMgZmVhdHVyZS4gVGhlCiAgaW1wbGVtZW50aW5nIG9mIHRoaXMgZmVhdHVyZSB3YXMgc3BvbnNvcmVkIGJ5IExlbm55IFJhY2hpdHNreSBhdCBOZXVTdGFyLgoKVmVyc2lvbiA3LjE4LjIgKDQgSnVuZSAyMDA4KQoKRGFuaWVsIEZhbmRyaWNoICgzIEp1biAyMDA4KQotIEZpeGVkIGEgcHJvYmxlbSB3aGVyZSB0ZWxuZXQgZGF0YSB3b3VsZCBiZSBsb3N0IGlmIGFuIEVXT1VMREJMT0NLCiAgY29uZGl0aW9uIHdlcmUgZW5jb3VudGVyZWQuCgpNYXJ0eSBLdWhydCAoMSBKdW4gMjAwOCkKLSBVcGRhdGVkIG1haW4uYyB0byByZXR1cm4gQ1VSTEVfT0sgaWYgUEFSQU1fSEVMUF9SRVFVRVNURUQgd2FzIHJldHVybmVkCiAgZnJvbSBnZXRwYXJhbWV0ZXIgaW5zdGVhZCBvZiBDVVJMRV9GQUlMRURfSU5JVC4gIE5vIHBvaW50IGluIHJldHVybmluZwogIGFuIGVycm9yIGlmIC0taGVscCBvciAtLXZlcnNpb24gd2VyZSByZXF1ZXN0ZWQuCgpEYW5pZWwgU3RlbmJlcmcgKDI4IE1heSAyMDA4KQotIEVtaWwgUm9tYW51cyBmb3VuZCBhIHByb2JsZW0gYW5kIGhlbHBlZCBtZSByZXBlYXQgaXQuIEl0IG9jY3VyZWQgd2hlbiB1c2luZwogIHRoZSBjdXJsX211bHRpX3NvY2tldCgpIEFQSSB3aXRoIEhUVFAgcGlwZWxpbmluZyBlbmFibGVkIGFuZCBjb3VsZCBsZWFkIHRvCiAgdGhlIHBpcGVsaW5lIGJhc2ljYWxseSBzdGFsbGluZyBmb3IgYSB2ZXJ5IGxvbmcgcGVyaW9kIG9mIHRpbWUgdW50aWwgaXQgdG9vawogIG9mZiBhZ2Fpbi4KCi0gSmVmZiBXZWJlciByZXBvcnRlZCBtZW1vcnkgbGVha3Mgd2l0aCBhYm9ydGVkIFNDUCBhbmQgU0ZUUCB0cmFuc2ZlcnMgYW5kCiAgcHJvdmlkZWQgZXhjZWxsZW50IHJlcGVhdCByZWNpcGVzLiBJIGZpeGVkIHRoZSBjYXNlcyBJIG1hbmFnZWQgdG8gcmVwcm9kdWNlCiAgYnV0IEplZmYgc3RpbGwgZ290IHNvbWUgKFNDUCkgcHJvYmxlbXMgZXZlbiBhZnRlciB0aGVzZSBmaXhlczoKICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDUvMDM0Mi5odG1sCgpEYW5pZWwgU3RlbmJlcmcgKDI2IE1heSAyMDA4KQotIEJ1ZyByZXBvcnQgIzE5NzMzNTIgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE5NzMzNTIpIGlkZW50aWZpZWQKICBob3cgdGhlIEhUVFAgcmVkaXJlY3QgZm9sbG93aW5nIGNvZGUgZGlkbid0IHByb3Blcmx5IGZvbGxvdyB0byBhIG5ldyBVUkwgaWYKICB0aGUgbmV3IHVybCB3YXMgYnV0IGEgcXVlcnkgc3RyaW5nIHN1Y2ggYXMgIkxvY2F0aW9uOiA/bW9vPWZvbyIuIFRlc3QgY2FzZQogIDEwMzEgd2FzIGFkZGVkIHRvIHZlcmlmeSB0aGlzIGZpeC4KCi0gQW5kcmVhcyBGYWVyYmVyIGFuZCBTY290dCBNY0NyZWFyeSBtYWRlIChsaWIpY3VybCBidWlsZCBmb3IgdGhlIEhhaWt1IE9TLgoKWWFuZyBUc2UgKDI2IE1heSAyMDA4KQotIERhdmlkIFJvc2Vuc3RyYXVjaCByZXBvcnRlZCB0aGF0IGhlYWRlciBmaWxlcyBzcG5lZ29oZWxwLmggYW5kCiAgb3BlbnNzbC9vYmplY3RzLmggd2VyZSBuZWVkZWQgdG8gY29tcGlsZSBTUE5FR08gc3VwcG9ydC4KCkRhbmllbCBGYW5kcmljaCAoMjIgTWF5IDIwMDgpCi0gTWFkZSBzdXJlIHRvIHBhc3MgbG9uZ3MgaW4gdG8gY3VybF9lYXN5X3NldG9wdCB3aGVyZSBuZWNlc3NhcnkgaW4gdGhlCiAgZXhhbXBsZSBwcm9ncmFtcyBhbmQgbGlidGVzdCBjb2RlLgoKRGFuaWVsIFN0ZW5iZXJnICgxOSBNYXkgMjAwOCkKLSBXaGVuIHRyeWluZyB0byByZXBlYXQgYSBtdWx0aSBpbnRlcmZhY2UgcHJvYmxlbSBJIGZlbGwgb3ZlciBhIGZldyBtdWx0aQogIGludGVyZmFjZSBwcm9ibGVtczoKCiAgbyB3aXRoIHBpcGVsaW5pbmcgZGlzYWJsZWQsIHRoZSBzdGF0ZSBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIFdBSVRETyBidXQKICAgIHJhdGhlciBnbyBzdHJhaWdodCB0byBETwoKICBvIHdlIGhhZCBtdWx0aXBsZSBzdGF0ZXMgZm9yIHdoaWNoIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiByZXR1cm5lZCBubyBzb2NrZXQKICAgIGF0IGFsbCB0byB3YWl0IGZvciwgd2l0aCB0aGUgZWZmZWN0IHRoYXQgbGliY3VybCBjYWxscyB0aGUgc29ja2V0IGNhbGxiYWNrCiAgICAod2hlbiBjdXJsX211bHRpX3NvY2tldCgpIGlzIHVzZWQpIHdpdGggUkVNT1ZFIHByZW1hdHVyZWx5IChhcyBpdCB3b3VsZCBiZQogICAgYWRkZWQgYWdhaW4gd2l0aGluIHZlcnkgc2hvcnRseSkKCiAgbyB3aGVuIGluIERPIGFuZCBET0lORyBzdGF0ZXMsIHRoZSBIVFRQIGFuZCBIVFRQUyBwcm90b2NvbCBoYW5kbGVyIGZ1bmN0aW9ucwogICAgZGlkbid0IHJldHVybiB0aGF0IHRoZSBzb2NrZXQgc2hvdWxkIGJlIHdhaXRlZCBmb3Igd3JpdGluZywgYnV0IGluc3RlYWQgaXQKICAgIHdhcyB0cmVhdGVkIGFzIGlmIG5vIHNvY2tldCB3YXMgbmVlZGluZyBtb25pdG9yaW5nIHNvIGFnYWluIFJFTU9WRSB3YXMKICAgIGNhbGxlZCBwcmVtYXR1cmVseS4KCkRhbmllbCBTdGVuYmVyZyAoMTMgTWF5IDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlIDU1NiB0aGF0IHVzZXMgY3VybF9lYXN5X3NlbmQoKSBhbmQgY3VybF9lYXN5X3JlY3YoKQoKRGFuaWVsIFN0ZW5iZXJnICg5IE1heSAyMDA4KQotIEludHJvZHVjaW5nIGN1cmxfZWFzeV9zZW5kKCkgYW5kIGN1cmxfZWFzeV9yZWN2KCkuIFRoZXkgY2FuIGJlIHVzZWQgdG8gc2VuZAogIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBhIGNvbm5lY3Rpb24gcHJldmlvdXNseSBzZXR1cCB3aXRoIGN1cmxfZWFzeV9wZXJmb3JtKCkKICBhbmQgaXRzIENVUkxPUFRfQ09OTkVDVF9PTkxZIG9wdGlvbi4gVGhlIHNlbmRyZWN2LmMgZXhhbXBsZSB3YXMgYWRkZWQgdG8KICBzaG93IGhvdyB0aGV5IGNhbiBiZSB1c2VkLgoKWWFuZyBUc2UgKDkgTWF5IDIwMDgpCi0gSW50ZXJuYWwgdGltZSBkaWZmZXJlbmNlcyBub3cgdXNlIG1vbm90b25pYyB0aW1lIHNvdXJjZSBpZiBhdmFpbGFibGUuCiAgVGhpcyBhbHNvIGltcGxpZXMgdGhlIHJlbW92YWwgb2YgdGhlIHdpbm1tLmxpYiBkZXBlbmRlbmN5IGZvciBXSU4zMi4KCkRhbmllbCBTdGVuYmVyZyAoOSBNYXkgMjAwOCkKLSBTdGVmYW4gS3JhdXNlIHJlcG9ydGVkIGEgYnVzeS1sb29waW5nIGNhc2Ugd2hlbiB1c2luZyB0aGUgbXVsdGkgaW50ZXJmYWNlCiAgYW5kIGRvaW5nIENPTk5FQ1QgdG8gYSBwcm94eS4gVGhlIGFwcCB3b3VsZCB0aGVuIGJ1c3ktbG9vcCB1bnRpbCB0aGUgcHJveHkKICBjb21wbGV0ZWQgaXRzIHJlc3BvbnNlLgoKTWljaGFsIE1hcmVrICg5IE1heSAyMDA4KQotIE1ha2UgQ3VybF93cml0ZSBhbmQgaXQncyBjYWxsZWVzIGFjY2VwdCBhIGNvbnN0IHBvaW50ZXIsIGluIHByZXBhcmF0aW9uCiAgb2YgdGV0ZXRlc3QncyBwYXRjaCBmb3IgY3VybF9lYXN5X3NlbmQoKQoKRGFuaWVsIFN0ZW5iZXJnICg3IE1heSAyMDA4KQotIExpYW0gSGVhbHkgZmlsZWQgdGhlIGRlYmlhbiBidWcgcmVwb3J0ICM0ODAwNDQKICAoaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTQ4MDA0NCkgaWRlbnRpZnlpbmcgYQogIHNlZ2ZhdWx0IHdoZW4gdXNpbmcga3JiNSBmdHAsIGJ1dCB0aGUga3JiNCBjb2RlIGhhZCB0aGUgc2FtZSBwcm9ibGVtLgoKWWFuZyBUc2UgKDcgTWF5IDIwMDgpCi0gQ2hyaXN0b3BoZXIgUGFsb3cgcHJvdmlkZWQgdGhlIHBhdGNoIChlZGl0ZWQgYnkgbWUpIHRoYXQgaW50cm9kdWNlcyB0aGUKICB1c2Ugb2YgbWljcm9zZWNvbmQgcmVzb2x1dGlvbiBrZXlzIGZvciBpbnRlcm5hbCBzcGxheSB0cmVlcy4KCkRhbmllbCBTdGVuYmVyZyAoNCBNYXkgMjAwOCkKLSBZdXJpeSBTb3NvdiBwb2ludGVkIG91dCBhIGNvbmZpZ3VyZSBmaXggZm9yIGRldGVjdGluZyBjLWFyZXMgd2hlbiB0aGF0IGlzCiAgYnVpbHQgZGVidWctZW5hYmxlZC4KCkRhbmllbCBTdGVuYmVyZyAoMyBNYXkgMjAwOCkKLSBCZW4gVmFuIEhvZiBmaWxlZCBidWcgcmVwb3J0ICMxOTQ1MjQwOiAibGliY3VybCBzb21ldGltZXMgc2VuZHMgYm9keSB0d2ljZQogIHdoZW4gdXNpbmcgQ1VSTF9BVVRIX0FOWSIgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE5NDUyNDApLgogIFRoZSBwcm9ibGVtIHdhcyB0aGF0IHdoZW4gbGliY3VybCByZXdvdW5kIGEgc3RyZWFtIG1lYW50IGZvciB1cGxvYWQgd2hlbiBpdAogIHdvdWxkIHByZXBhcmUgZm9yIGEgc2Vjb25kIHJlcXVlc3QsIGl0IGNvdWxkIGFjY2lkZW50YWxseSBjb250aW51ZSB0aGUKICBzZW5kaW5nIG9mIHRoZSByZXdvdW5kIGRhdGEgb24gdGhlIGZpcnN0IHJlcXVlc3QgaW5zdGVhZCBvZiBvbiB0aGUgc2Vjb25kLgogIEJlbiBhbHNvIHByb3ZpZGVkIHRlc3QgY2FzZSAxMDMwIHRoYXQgdmVyaWZpZXMgdGhpcyBmaXguCgpEYW5pZWwgU3RlbmJlcmcgKDMgTWF5IDIwMDgpCi0gSmVhbi1GcmFuY29pcyBCZXJ0cmFuZCByZXBvcnRlZCBhIGxpYmN1cmwgY3Jhc2ggd2l0aCBDVVJMT1BUX1RDUF9OT0RFTEFZCiAgc2luY2UgbGliY3VybCB1c2VkIGdldHByb3RvYnluYW1lKCkgYW5kIHRoYXQgaXNuJ3QgdGhyZWFkLXNhZmUuIFdlIG5vdwogIHN3aXRjaGVkIHRvIHVzZSBJUFBST1RPX1RDUCB1bmNvbmRpdGlvbmFsbHksIGJ1dCBwZXJoYXBzIHRoZSBwcm9wZXIgZml4IGlzCiAgdG8gZGV0ZWN0IHRoZSB0aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhbmQgdXNlIHRoYXQuCiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA4LTA1LzAwMTEuaHRtbAoKRGFuaWVsIFN0ZW5iZXJnICgxIE1heSAyMDA4KQotIEJhcnQgV2hpdGVsZXkgcHJvdmlkZWQgYSBwYXRjaCB0aGF0IG1hZGUgbGliY3VybCB3b3JrIHByb3Blcmx5IHdoZW4gYW4gYXBwCiAgdXNlcyB0aGUgQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT04gY2FsbGJhY2sgdG8gY3JlYXRlIGEgdW5peCBkb21haW4gc29ja2V0CiAgdG8gYSBodHRwIHNlcnZlci4KCkRhbmllbCBTdGVuYmVyZyAoMjkgQXByIDIwMDgpCi0gVG8gbWFrZSBpdCBlYXNpZXIgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgbG90cyBvZiBtYWdpYyBzdHVmZiBkb25lIG9uCiAgcmVkaXJlY3Rpb25zIGFuZCB0aHVzIGNhbm5vdCB1c2UgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBlYXNpbHksIHdlIG5vdwogIGludHJvZHVjZSB0aGUgbmV3IENVUkxJTkZPX1JFRElSRUNUX1VSTCBvcHRpb24gdGhhdCBsZXRzIGFwcGxpY2F0aW9ucwogIGV4dHJhY3QgdGhlIFVSTCBsaWJjdXJsIHdvdWxkJ3ZlIHJlZGlyZWN0ZWQgdG8gaWYgaXQgaGFkIGJlZW4gdG9sZCB0by4gVGhpcwogIHRoZW4gZW5hYmxlcyB0aGUgYXBwbGljYXRpb24gdG8gY29udGludWUgdG8gdGhhdCBVUkwgYXMgaXQgdGhpbmtzIGlzCiAgc3VpdGFibGUsIHdpdGhvdXQgaGF2aW5nIHRvIHJlLWltcGxlbWVudCB0aGUgbWFnaWMgb2YgY3JlYXRpbmcgdGhlIG5ldyBVUkwKICBmcm9tIHRoZSBMb2NhdGlvbjogaGVhZGVyIGV0Yy4gVGVzdCAxMDI5IHZlcmlmaWVzIGl0LgoKWWFuZyBUc2UgKDI5IEFwciAyMDA4KQotIEltcHJvdmVkIGVhc3kgaW50ZXJmYWNlIHJlc29sdmluZyB0aW1lb3V0IGhhbmRsaW5nIGluIGMtYXJlcyBlbmFibGVkIGJ1aWxkcwoKRGFuaWVsIEZhbmRyaWNoICgyOCBBcHIgMjAwOCkKLSBBZGRlZCB0ZXN0IDEwMjggdG8gdGVzdCBhbiBIVFRQIHJlZGlyZWN0IHRvIGEgRlRQIFVSTC4KCkRhbmllbCBTdGVuYmVyZyAoMjggQXByIDIwMDgpCi0gTm9yYmVydCBGcmVzZSBmaWxlZCBidWcgcmVwb3J0ICMxOTUxNTg4OiAiUHJvYmxlbSB3aXRoIGN1cmxmdHBmcyBhbmQKICBsaWJjdXJsIiAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTk1MTU4OCkgd2hpY2ggc2VlbXMgdG8gYmUgYW4KICBpZGVudGljYWwgcmVwb3J0IHRvIHdoYXQgRGVuaXMgR29sb3ZhbiByZXBvcnRlZCBpbgogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOC0wMi8wMTA4Lmh0bWwgVGhlIEZUUCBjb2RlIGRpZG4ndCByZXNldCB0aGUKICB1c2VyL3Bhc3N3b3JkIHBvaW50ZXJzIHByb3Blcmx5IGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0J3ZlIGJlZW4gYSBuZXcKICBzdHJ1Y3QvY2Nvbm5lY3Rpb24gZ2V0dGluZyB1c2VkLgoKRGFuaWVsIFN0ZW5iZXJnICgyNiBBcHIgMjAwOCkKLSBSZXZlcnRlZCBiYWNrIHRvIHVzZSBhdXRvbWFrZSAxLjkuNiBpbiB0aGUgbmV4dCByZWxlYXNlIChmcm9tIGF1dG9tYWtlCiAgMS4xMC4xKSBzaW5jZSBpdCAqc3RpbGwqIHN1ZmZlcnMgZnJvbSBTb2xhcmlzLXJlbGF0ZWQgYnVncy4gT3VyIHByZXZpb3VzCiAgYXV0b21ha2UgMS4xMCBwcm9ibGVtIHdhcyByZXBvcnRlZCBpbiBidWcgIzE3MDEzNjAKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTcwMTM2MCkgYW5kIHRoaXMgcmVjZW50IHByb2JsZW0gd2FzCiAgYnVnICMxOTQ0ODI1IChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xOTQ0ODI1KS4gSSBoYXZlIG5vdAogIHBlcnNvbmFsbHkgYXBwcm9hY2hlZCB0aGUgYXV0b21ha2UgdGVhbSBhYm91dCBlaXRoZXIgb25lIG9mIHRoZXNlIGJ1dCBJCiAgZmlndXJlIHdlIG5lZWQgYSBTb2xhcmlzIDEwIGd1eSB0byBkbyBpdCEKCllhbmcgVHNlICgyNSBBcHIgMjAwOCkKLSBBZGRlZCAndGltZW91dCcgYW5kICdkZWxheScgYXR0cmlidXRlcyBzdXBwb3J0IGZvciB0aGUgdGVzdCBoYXJuZXNzCiAgPGNvbW1hbmQ+IHN1YnNlY3Rpb24uCgpEYW5pZWwgRmFuZHJpY2ggKDI0IEFwciAyMDA4KQotIE1hZGUgLS1zdGRlcnIgYWJsZSB0byByZWRpcmVjdCBhbGwgc3RkZXJyIG1lc3NhZ2VzLgoKWWFuZyBUc2UgKDIzIEFwciAyMDA4KQotIEltcHJvdmUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGVzdCBoYXJuZXNzIHJ1bnRlc3RzLnBsIHNjcmlwdAogIGFuZCB0ZXN0IGhhcm5lc3Mgc2VydmVycyB0byBtaW5pbWl6ZSByaXNrIG9mIGZhbHNlIHRlc3QgZmFpbHVyZXMuCgpEYW5pZWwgRmFuZHJpY2ggKDIyIEFwciAyMDA4KQotIEFkZGVkIHN1cHBvcnQgZm9yIHJ1bm5pbmcgb24gU3ltYmlhbiBPUy4KCkRhbmllbCBGYW5kcmljaCAoMTggQXByIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDI2IGFuZCAxMDI3IHRvIGRvIHNvbWUgcnVkaW1lbnRhcnkgdGVzdHMgb24gdGhlIC0tbWFudWFsCiAgYW5kIC0taGVscCBvcHRpb25zLgoKTWljaGFsIE1hcmVrICgxNCBBcHIgMjAwOCkKLSBhbGxvdyBkaXNhYmxpbmcgdGhlIHR5cGVjaGVja2VyIGJ5IGRlZmluaW5nIENVUkxfRElTQUJMRV9UWVBFQ0hFQ0ssIGFzCiAgZGlzY3Vzc2VkIGluIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOC0wNC8wMjkxLmh0bWwKCkRhbmllbCBTdGVuYmVyZyAoMTQgQXByIDIwMDgpCi0gU3RlZmFuIEtyYXVzZSByZXBvcnRlZCBhIGNhc2Ugd2hlcmUgdGhlIE9wZW5TU0wgaGFuZHNoYWtlIHBoYXNlIHdhc24ndAogIHByb3Blcmx5IGFja25vd2xlZGdpbmcgdGhlIHRpbWVvdXQgdmFsdWVzLCBsaWtlIGlmIHlvdSBwdWxsZWQgdGhlIG5ldHdvcmsKICBwbHVnIGluIHRoZSBtaWRzdCBvZiBpdC4KCi0gQW5kcmUgR3VpYmVydCBkZSBCcnVldCBmaXhlZCBhIHNlY29uZCBjYXNlIG9mIG5vdCBjaGVja2luZyB0aGUgbWFsbG9jKCkKICByZXR1cm4gY29kZSBpbiB0aGUgTmVnb3RpYXRlIGNvZGUuCgotIFNhbmRvciBGZWxkaSByZXBvcnRlZCBidWcgIzE5NDIwMjIKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTk0MjAyMikgcG9pbnRpbmcgb3V0IGEgbWlzdGFrZSBpbiB0aGUKICBsaWIvTWFrZWZpbGUudmNbNjhdIG1ha2VmaWxlcycgcmVsZWFzZS1zc2wtZGxsIHRhcmdldC4KCi0gQnJvY2sgTm9sYW5kIHJlcG9ydGVkIHRoYXQgY3VybCBiZWhhdmVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGljaCBvcmRlcgogIHlvdSB1c2VkIC1pIGFuZCAtSS4KCkRhbmllbCBTdGVuYmVyZyAoMTIgQXByIDIwMDgpCi0gQW5kcmUgR3VpYmVydCBkZSBCcnVldCBmb3VuZCBhbmQgZml4ZWQgYSBjYXNlIHdoZXJlIG1hbGxvYygpIHdhcyBjYWxsZWQgYnV0CiAgd2FzIG5vdCBjaGVja2VkIGZvciBhIE5VTEwgcmV0dXJuLCBpbiB0aGUgTmVnb3RpYXRlIGNvZGUuCgpEYW5pZWwgRmFuZHJpY2ggKDkgQXByIDIwMDgpCi0gQWRkZWQgdGVzdCBjYXNlcyAxMDI0ICYgMTAyNSB0byB0ZXN0IGEgc2NlbmFyaW8gc2ltaWxhciB0byB0aGUgb25lIHJlcG9ydGVkCiAgYnkgQmVuIENvbWJlZSB3aGVyZSBsaWJjdXJsIHdvdWxkIHNlbmQgdGhlIHdyb25nIGNvb2tpZSB0byBhIHJlZGlyZWN0ZWQKICBzZXJ2ZXIuICBsaWJjdXJsIHdhcyBkb2luZyB0aGUgcmlnaHQgdGhpbmcgaW4gdGhlc2UgdGVzdCBjYXNlcy4KCk1pY2hhbCBNYXJlayAoNyBBcHIgMjAwOCkKLSBGaXggdGhlIE1JVCAvIEhlaW1kYWwgY2hlY2sgZm9yIGdvb2Q6CiAgRGVmaW5lIEhBVkVfR1NTTUlUIGlmIDxnc3NhcGkve2dzc2FwaS5oLGdzc2FwaV9nZW5lcmljLmgsZ3NzYXBpX2tyYjUuaH0+IGFyZQogIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGRlZmluZSBIQVZFX0dTU0hFSU1EQUwgaWYgPGdzc2FwaS5oPiBpcyBhdmFpbGFibGUuCgogIE9ubHkgZGVmaW5lIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFIHRvIGdzc19udF9zZXJ2aWNlX25hbWUgaWYKICBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSBpc24ndCBkZWNsYXJlZCBieSB0aGUgZ3NzYXBpIGhlYWRlcnMuIFRoaXMgc2hvdWxkCiAgYXZvaWQgYnJlYWthZ2UgaW4gY2FzZSB3ZSB3cm9uZ2x5IHJlY29nbml6ZSBIZWltZGFsIGFzIE1JVCBhZ2Fpbi4KCkRhbmllbCBTdGVuYmVyZyAoNSBBcHIgMjAwOCkKLSBBbGV4ZXkgU2ltYWsgZml4ZWQgY3VybF9lYXN5X3Jlc2V0KCkgdG8gcmVzZXQgdGhlIG1heCByZWRpcmVjdCBsaW1pdCBwcm9wZXJseQoKLSBCYXNlZCBvbiB0aGUgRGViaWFuIGJ1ZyByZXBvcnQgIzQ3NDIyNCB0aGF0IGNvbXBsYWluZWQgYWJvdXQgdGhlIEZUUCBlcnJvcgogIG1lc3NhZ2Ugd2hlbiBsaWJjdXJsIGRvZXNuJ3QgZ2V0IGEgMjIwIGJhY2sgaW1tZWRpYXRlbHkgb24gY29ubmVjdCwgSSBub3cKICBjaGFuZ2VkIGl0IHRvIGJlIG1vcmUgc3BlY2lmaWMgb24gd2hhdCB0aGUgcHJvYmxlbSBpcy4gQWxzbyB3b3J0aCBub3RpY2luZzoKICB3aGlsZSB0aGUgYnVnIHJlcG9ydCBjb250YWlucyBhbiBleGFtcGxlIHdoZXJlIHRoZSByZXNwb25zZSBpczoKCiAgICA0MjEgVGhlcmUgYXJlIHRvbyBtYW55IGNvbm5lY3RlZCB1c2VycywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcgoKICB3ZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIGVycm9yIG1lc3NhZ2Ugd2lsbCBhbHdheXMgYmUgdGhpcyByZWFkYWJsZSBub3IKICB0aGF0IGl0IGZpdHMgd2l0aGluIGEgcGFydGljdWxhciBib3VuZGFyeSBldGMuCgpEYW5pZWwgRmFuZHJpY2ggKDMgQXByIDIwMDgpCi0gQWRkZWQgdGVzdDYyNyB0byB0ZXN0IFNGVFAgd2l0aCBDVVJMT1BUX05PQk9EWQoKRGFuaWVsIFN0ZW5iZXJnICgzIEFwciAyMDA4KQotIFNldHRpbmcgQ1VSTE9QVF9OT0JPRFkgdG8gRkFMU0Ugd2lsbCBub3cgc3dpdGNoIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvCiAgR0VUIHNpbXBseSBiZWNhdXNlIHByZXZpb3VzbHkgd2hlbiB5b3Ugc2V0IENVUkxPUFRfTk9CT0RZIHRvIFRSVUUgZmlyc3QgYW5kCiAgdGhlbiBGQUxTRSB5b3UnZCBlbmQgdXAgaW4gYSBicm9rZW4gc3RhdGUgd2hlcmUgYSBIVFRQIHJlcXVlc3Qgd291bGQgZG8gYQogIEhFQUQgYnkgc3RpbGwgYWN0IGEgbG90IGxpa2UgZm9yIGEgR0VUIGFuZCBoYW5nIHdhaXRpbmcgZm9yIHRoZSBjb250ZW50IGV0Yy4KCi0gU2NvdHQgQmFycmV0dCBhZGRlZCBzdXBwb3J0IGZvciBDVVJMT1BUX05PQk9EWSBvdmVyIFNGVFAKCkRhbmllbCBGYW5kcmljaCAoMyBBcHIgMjAwOCkKLSBNYWRlIHN1cmUgdGhhdCBjdXJsX2dsb2JhbF9pbml0IGlzIGNhbGxlZCBpbiBhbGwgdGhlIG11bHRpdGhyZWFkZWQKICBleGFtcGxlIHByb2dyYW1zLgoKTWljaGFsIE1hcmVrICgzMSBNYXIgMjAwOCkKLSBSZW1vdmVkIHRoZSBnZW5lcmF0ZWQgY2EtYnVuZGxlLmggZmlsZS4gVGhlIHZlcmJhdGltIHZhbHVlIG9mICRjYSBhbmQKICAkY2FwYXRoIGlzIGtub3duIHRvIGNvbmZpZ3VyZSwgc28gaXQgY2FuIGJlIGRlZmluZWQgaW4gY29uZmlnLmggaW5zdGVhZC4KCkRhbmllbCBTdGVuYmVyZyAoMzEgTWFyIDIwMDgpCi0gQWRkZWQgQ1VSTEZPUk1fU1RSRUFNIGFzIGEgc3VwcG9ydGVkIG9wdGlvbiB0byBjdXJsX2Zvcm1hZGQoKSB0byBhbGxvdyBhbgogIGFwcGxpY2F0aW9uIHRvIHByb3ZpZGUgZGF0YSBmb3IgYSBtdWx0aXBhcnQgd2l0aCB0aGUgcmVhZCBjYWxsYmFjay4gTm90ZQogIHRoYXQgdGhlIHNpemUgbmVlZHMgdG8gYmUgcHJvdmlkZWQgd2l0aCBDVVJMRk9STV9DT05URU5UU0xFTkdUSCB3aGVuIHRoZQogIHN0cmVhbSBvcHRpb24gaXMgdXNlZC4gVGhpcyBmZWF0dXJlIGlzIHZlcmlmaWVkIGJ5IHRoZSBuZXcgdGVzdCBjYXNlCiAgNTU0LiBUaGlzIGZlYXR1cmUgd2FzIHNwb25zb3JlZCBieSBYcG9uYXV0LgoKRGFuaWVsIEZhbmRyaWNoICgzMCBNYXIgMjAwOCkKLSBDaGFuZ2VkIHRoZSBtYWtlZmlsZSBzbyB0aGUgZG9jL2V4YW1wbGVzLyBwcm9ncmFtcyBhcmUgbmV2ZXIgYnVpbHQgaW4gYQogIG5vcm1hbCBidWlsZC9pbnN0YWxsIChvbmx5IHdpdGggdGhlICdtYWtlIGNoZWNrJyB0YXJnZXQpLCBzbyB0aGF0IGEKICBidWlsZCBmYWlsdXJlIGluIHRoZSBleGFtcGxlcyBpc24ndCBmYXRhbC4KClZlcnNpb24gNy4xOC4xICgzMCBNYXJjaCAyMDA4KQoKRGFuaWVsIFN0ZW5iZXJnICgyOCBNYXIgMjAwOCkKLSBTdGVwaGVuIENvbGx5ZXIgcG9pbnRlZCBvdXQgdGhhdCBjb25maWd1cmUgLS13aXRoLWxpYnNzaDIgd2l0aG91dCBhIGdpdmVuCiAgcGF0aCBkaWRuJ3Qgd29yayBwcm9wZXJseS4KCkRhbmllbCBTdGVuYmVyZyAoMjcgTWFyIDIwMDgpCi0gQXMgZm91bmQgb3V0IGFuZCByZXBvcnRlZCBieSBEYW4gUGV0aXR0LCBsaWJjdXJsIGRpZG4ndCBzaG93IHByb2dyZXNzL2NhbGwKICB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgZm9yIHRoZSBmaXJzdCAocG90ZW50aWFsbHkgaHVnZSkgcGllY2Ugb2YgYm9keSBkYXRhCiAgc2VudCB0b2dldGhlciB3aXRoIHRoZSBQT1NUIHJlcXVlc3QgaGVhZGVycyBpbiB0aGUgaW5pdGlhbCBzZW5kKCkuCgpEYW5pZWwgU3RlbmJlcmcgKDI1IE1hciAyMDA4KQotIE1hZGUgc2V0dGluZyB0aGUgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OIG9wdGlvbiByZXR1cm4gYSBmYWlsdXJlIGluIGNhc2UKICBsaWJjdXJsIHdhc24ndCBidWlsdCB0byB1c2UgT3BlblNTTCBhcyB0aGF0IGlzIGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzCiAgb3B0aW9uIHRvIGZ1bmN0aW9uIQoKRGFuaWVsIFN0ZW5iZXJnICgyMiBNYXIgMjAwOCkKLSBGaXhlZCB0aGUgcHJvYmxlbSB3aXRoIGRvaW5nIGEgemVybyBieXRlIFNDUCB0cmFuc2ZlciwgdmVyaWZpZWQgd2l0aCB0ZXN0CiAgY2FzZSA2MTcgKHdoaWNoIHdhcyBhZGRlZCBieSBEYW5pZWwgRmFuZHJpY2ggNSBNYXIgMjAwOCkuCgpEYW5pZWwgRmFuZHJpY2ggKDIwIE1hciAyMDA4KQotIEZpeGVkIGEgcHJvYmxlbSB3aGVyZSBjdXJsLWNvbmZpZyAtLXByb3RvY29scyBjb3VsZCBlcnJvbmVvdXNseSBzaG93IExEQVBTCiAgc3VwcG9ydCB3aGVuIGN1cmwgZGlkbid0IGV2ZW4gaGF2ZSByZWd1bGFyIExEQVAgc3VwcG9ydC4gIEl0IGxvb2tzIGxpa2UKICB0aGlzIGNvdWxkIGhhcHBlbiB3aGVuIHRoZSAtLWVuYWJsZS1sZGFwcyBjb25maWd1cmUgc3dpdGNoIGlzIGdpdmVuIGJ1dAogIGNvbmZpZ3VyZSBjb3VsZG4ndCBmaW5kIHRoZSBMREFQIGhlYWRlcnMgb3IgbGlicmFyaWVzLgoKTWljaGFsIE1hcmVrICgyMCBNYXIgMjAwOCkKLSBBZGRlZCAtLXdpdGgtY2EtcGF0aD1ESVJFQ1RPUlkgY29uZmlndXJlIG9wdGlvbiB0byB1c2UgYW4gb3BlblNTTCBDQXBhdGggYnkKICBkZWZhdWx0IGluc3RlYWQgb2YgYSBjYSBidW5kbGUuIFRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgYWxzbyBsb29rIGZvciBhCiAgY2EgcGF0aCBpZiBubyBjYSBidW5kbGUgaXMgZm91bmQgYW5kIG5vIG9wdGlvbiBnaXZlbi4KCi0gRml4ZWQgZGV0ZWN0aW9uIG9mIHByZXZpb3VzbHkgaW5zdGFsbGVkIGN1cmwtY2EtYnVuZGxlLmNydAoKRGFuaWVsIEZhbmRyaWNoICgxOCBNYXIgMjAwOCkKLSBBZGRlZCB0ZXN0IDYyNiB0byByZXByb2R1Y2UgYW4gaW5maW5pdGUgbG9vcCB3aGVuIGdpdmVuIGFuIGludmFsaWQKICBTRlRQIHF1b3RlIGNvbW1hbmQgcmVwb3J0ZWQgYnkgVmluY2VudCBMZSBOb3JtYW5kLCBhbmQgZml4ZWQgaXQuCgpNaWNoYWwgTWFyZWsgKDE4IE1hciAyMDA4KQotIEFkZGVkIGN1cmxfZWFzeV9nZXRpbmZvIHR5cGVjaGVja2VyLgoKLSBBZGRlZCBtYWNyb3MgZm9yIGN1cmxfc2hhcmVfc2V0b3B0IGFuZCBjdXJsX211bHRpX3NldG9wdCB0byBjaGVjayBhdCBsZWFzdAogIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuCgpEYW5pZWwgRmFuZHJpY2ggKDEzIE1hciAyMDA4KQotIEFkZGVkIHRlc3RzIDYyMi02MjUgdG8gdGVzdCBTRlRQL1NDUCB1cGxvYWRzLiBUZXN0IDYyNSB3YXMgYW4gYXR0ZW1wdCB0bwogIHJlcHJvZHVjZSB0aGUgLS1mdHAtY3JlYXRlLWRpcnMgcHJvYmxlbSByZXBvcnRlZCBieSBCcmlhbiBVbG0sIGJ1dCB0aGF0CiAgc2VlbXMgdG8gbmVlZCBhIGNhbGwgY3VybF9lYXN5X3Jlc2V0KCkgd2hpY2ggdGhpcyB0ZXN0IGNhc2UgZG9lc24ndCBkby4KCkRhbmllbCBTdGVuYmVyZyAoMTMgTWFyIDIwMDgpCi0gQnJpYW4gVWxtIGZpZ3VyZWQgb3V0IHRoYXQgaWYgeW91IGRpZCBhbiBTRlRQIHVwbG9hZCB3aXRoCiAgQ1VSTE9QVF9GVFBfQ1JFQVRFX01JU1NJTkdfRElSUyB0byBjcmVhdGUgYSBkaXJlY3RvcnksIGFuZCB0aGVuIHJlLXVzZWQgdGhlCiAgaGFuZGxlIGFuZCB1cGxvYWRlZCBhbm90aGVyIGZpbGUgdG8gYW5vdGhlciBkaXJlY3RvcnkgdGhhdCBuZWVkZWQgdG8gYmUKICBjcmVhdGVkLCB0aGUgc2Vjb25kIHVwbG9hZCB3b3VsZCBmYWlsLiBBbm90aGVyIGNhc2Ugb2YgYSBzdGF0ZSB2YXJpYWJsZSB0aGF0CiAgd2Fzbid0IHByb3Blcmx5IHJlc2V0IGJldHdlZW4gcmVxdWVzdHMuCgotIEkgcmV3cm90ZSB0aGUgMTAwLWNvbnRpbnVlIGNvZGUgdG8gdXNlIGEgc2luZ2xlIHN0YXRlIHZhcmlhYmxlIGluc3RlYWQgb2YKICB0aGUgcHJldmlvdXMgdHdvIG9uZXMuIEkgdGhpbmsgaXQgbWFkZSB0aGUgbG9naWMgc29tZXdoYXQgY2xlYXJlci4KCkRhbmllbCBTdGVuYmVyZyAoMTEgTWFyIDIwMDgpCi0gRG1pdHJ5IFBvcG92IGZpbGVkIGJ1ZyByZXBvcnQgIzE5MTEwNjkKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTkxMTA2OSkgdGhhdCBpZGVudGlmaWVkIGEgcmFjZQogIGNvbmRpdGlvbiBpbiB0aGUgbmFtZSByZXNvbHZlciBjb2RlIHdoZW4gdGhlIEROUyBjYWNoZSBpcyBzaGFyZWQgYmV0d2VlbgogIG11bHRpcGxlIGVhc3kgaGFuZGxlcywgZWFjaCBydW5uaW5nIGluIHNpbXVsdGFuZW91cyB0aHJlYWRzIHRoYXQgY291bGQgY2F1c2UKICBjcmFzaGVzLgoKLSBBZGRlZCBhIG1hY3JvIGZvciBjdXJsX2Vhc3lfc2V0b3B0KCkgdGhhdCBhY2NlcHRzIHRocmVlIGFyZ3VtZW50cyBhbmQgc2ltcGx5CiAgZG9lcyBub3RoaW5nIHdpdGggdGhlbSwganVzdCB0byBtYWtlIHN1cmUgbGliY3VybCB1c2VycyBhbHdheXMgdXNlIHRocmVlCiAgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24uIER1ZSB0byBpdHMgdXNlIG9mIC4uLiBmb3IgdGhlIHRoaXJkIGFyZ3VtZW50LCBpdAogIGlzIG90aGVyd2lzZSBoYXJkIHRvIGRldGVjdCBhYnVzZS4KCk1pY2hhbCBNYXJlayAoMTEgTWFyIDIwMDgpCi0gQWRkZWQgYSB0eXBlIGNoZWNraW5nIG1hY3JvIGZvciBjdXJsX2Vhc3lfc2V0b3B0KCksIG5lZWRzIGdjYy00LjMgYW5kIG9ubHkKICB3b3JrcyBpbiBDIG1vZGUgYXRtIChodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDIvMDI2Ny5odG1sICwKICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDIvMDI5Mi5odG1sICkKCkRhbmllbCBGYW5kcmljaCAoMTAgTWFyIDIwMDgpCi0gQWRkZWQgdGVzdHMgNjE4LTYyMSB0byB0ZXN0IFNGVFAvU0NQIHRyYW5zZmVycyBvZiBtb3JlIHRoYW4gb25lIGZpbGUKICAodGVzdCA2MjAgdGVzdHMgdGhlIGp1c3QtZml4ZWQgcHJvYmxlbSByZXBvcnRlZCBieSBCcmlhbiBVbG0pLgoKRGFuaWVsIFN0ZW5iZXJnICg5IE1hciAyMDA4KQotIEJyaWFuIFVsbSByZXBvcnRlZCBhIGNyYXNoIHdoZW4gZG9pbmcgYSBzZWNvbmQgU0ZUUCB0cmFuc2ZlciBvbiBhIHJlLXVzZWQKICBlYXN5IGhhbmRsZSBpZiBjdXJsX2Vhc3lfcmVzZXQoKSB3YXMgdXNlZCBiZXR3ZWVuIHRoZW0uIEkgZml4ZWQgaXQgYW5kIEJyaWFuCiAgdmVyaWZpZWQgdGhhdCBpdCBjdXJlZCBoaXMgcHJvYmxlbS4KCi0gQnJpYW4gVWxtIHJlcG9ydGVkIHRoYXQgaWYgeW91IGZpcnN0IHRyaWVkIHRvIGRvd25sb2FkIGEgbm9uLWV4aXN0aW5nIFNGVFAKICBmaWxlIGFuZCB0aGVuIGZldGNoZWQgYW4gZXhpc3Rpbmcgb25lIGFuZCByZS11c2VkIHRoZSBoYW5kbGUsIGxpYmN1cmwgd291bGQKICBzdGlsbCByZXBvcnQgdGhlIHNlY29uZCBvbmUgYXMgbm9uLWV4aXN0aW5nIGFzIHdlbGwhIEkgZml4ZWQgaXQgYW5kIEJyaWFuCiAgdmVyaWZpZWQgdGhhdCBpdCBjdXJlZCBoaXMgcHJvYmxlbS4KCk1pY2hhbCBNYXJlayAoNiBNYXIgMjAwOCkKLSBGaXggdGhlIGdzc2FwaSBjb25maWd1cmUgY2hlY2sgdG8gZGV0ZWN0IG5ld2VyIE1JVCBLZXJiZXJvcyAocGF0Y2ggYnkKICBNaWNoYWVsIENhbG1lcikKCllhbmcgVHNlICg2IE1hciAyMDA4KQotIEZpeCByZWdyZXNzaW9uIG9uIEN1cmxfc29ja2V0X3JlYWR5KCkgYW5kIEN1cmxfcG9sbCgpIHNvIHRoYXQgdGhlc2Ugd2lsbAogIGFnYWluIGZhaWwgb24gc2VsZWN0L3BvbGwgZXJyb3JzIGRpZmZlcmVudCB0aGFuIEVJTlRSLgoKRGFuaWVsIEZhbmRyaWNoICg1IE1hciAyMDA4KQotIEZpeGVkIHRoZSB0ZXN0IGhhcm5lc3Mgc28gaXQgd2lsbCB3cml0ZSBvdXQgemVyby1sZW5ndGggZGF0YSBmaWxlcy4KCi0gQWRkZWQgdGVzdHMgNjE2IGFuZCA2MTcgdG8gc2VlIGhvdyBTRlRQIGFuZCBTQ1AgY29wZSB3aXRoIHplcm8tbGVuZ3RoCiAgZmlsZXMsIGFzIHF1ZXN0aW9uZWQgYnkgTWlrZSBQcm90dHMuIFNGVFAgZG9lcyBmb3IgbWUgYnV0IFNDUCBkb2Vzbid0CiAgc28gdGVzdCA2MTcgaXMgZGlzYWJsZWQgZm9yIG5vdy4KCkRhbmllbCBTICg0IE1hciAyMDA4KQotIE1pa2UgUHJvdHRzIGJyb3VnaHQgYSBwYXRjaCB0aGF0IG1ha2VzIHJlc3VtZWQgdHJhbnNmZXJzIHdvcmsgd2l0aCBTRlRQLgoKRGFuaWVsIFMgKDEgTWFyIDIwMDgpCi0gQW5hdG9saSBUdWJtYW4gZm91bmQgYW5kIGZpeGVkIGEgY3Jhc2ggd2l0aCBOZWdvdGlhdGUgYXV0aGVudGljYXRpb24gdXNlZCBvbgogIGEgcmUtdXNlZCBjb25uZWN0aW9uIHdoZXJlIGJvdGggcmVxdWVzdHMgdXNlZCBOZWdvdGlhdGUuCgpHdWVudGVyIEtuYXVmICgyNiBGZWIgMjAwOCkKLSBLYXNwYXIgQnJhbmQgcHJvdmlkZWQgYSBwYXRjaCB0byBzdXBwb3J0IHNlcnZlciBuYW1lIGluZGljYXRpb24gKFJGQyA0MzY2KS4KCkRhbmllbCBTICgyNSBGZWIgMjAwOCkKLSBLYXNwYXIgQnJhbmQgbWFkZSBHbnVUTFMtYnVpbHQgbGliY3VybCBwcm9wZXJseSBhY2tub3dsZWRnZSB0aGUgb3B0aW9uIHRoYXQKICBmb3JjZXMgaXQgdG8gcHJlZmVyIFNTTHYzLgoKRGFuaWVsIFMgKDIzIEZlYiAyMDA4KQotIFNhbSBMaXN0b3BhZCBwcm92aWRlZCBhIHBhdGNoIGluIGZlYXR1cmUtcmVxdWVzdCAjMTkwMDAxNAogIGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL2ZlYXR1cmUuY2dpP2lkPTE5MDAwMTQgdGhhdCBtYWtlcyBsaWJjdXJsIChidWlsdCB0bwogIHVzZSBPcGVuU1NMKSBzdXBwb3J0IGEgZnVsbCBjaGFpbiBvZiBjZXJ0aWZpY2F0ZXMgaW4gYSBnaXZlbiBQS0NTMTIKICBjZXJ0aWZpY2F0ZS4KCkRhbmllbCBTICgyMiBGZWIgMjAwOCkKLSBHZW9yZyBMaXBwaXRzY2ggbWFkZSB0aGUgc3JjL01ha2VmaWxlLnZjNiBtYWtlZmlsZSB1c2UgdGhlIHNhbWUgbWVtb3J5IG1vZGVsCiAgb3B0aW9ucyBhcyB0aGUgbGliL01ha2VmaWxlLnZjNiBhbHJlYWR5IGRpZC4KCkRhbmllbCBTICgyMSBGZWIgMjAwOCkKLSBabWV5IFBldHJvZmYgZm91bmQgYSBjcmFzaCB3aGVuIGxpYmN1cmwgYWNjZXNzZWQgYSBOVUxMIHBvaW50ZXIsIHdoaWNoCiAgaGFwcGVuZWQgaWYgeW91IHNldCB0aGUgY29ubmVjdGlvbiBjYWNoZSBzaXplIHRvIDEgYW5kIGZvciBleGFtcGxlIGZhaWxlZCB0bwogIGxvZ2luIHRvIGFuIEZUUCBzaXRlLiBCdWcgcmVwb3J0ICMxODk2Njk4CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE4OTY2OTgpCgpEYW5pZWwgUyAoMjAgRmViIDIwMDgpCi0gRml4ZWQgdGVzdCBjYXNlIDQwNSB0byBub3QgZmFpbCB3aGVuIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBHbnVUTFMKCi0gQmFzZWQgb24gaW5pdGlhbCB3b3JrIGRvbmUgYnkgR2F1dGFtIEthY2hyb28gdG8gYWRkcmVzcyBhIGJ1Zywgd2Ugbm93IGtlZXAKICBiZXR0ZXIgY29udHJvbCBhdCB0aGUgZXhhY3Qgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24ncyBTU0wgc3RhdHVzIHNvIHRoYXQgd2UKICBrbm93IGV4YWN0bHkgd2hlbiBpdCBoYXMgY29tcGxldGVkIHRoZSBTU0wgbmVnb3RpYXRpb24gb3Igbm90IHNvIHRoYXQgdGhlcmUKICB3b24ndCBiZSBhY2NpZGVudGFsIHJlLXVzZXMgb2YgY29ubmVjdGlvbnMgdGhhdCBhcmUgd3JvbmdseSBiZWxpZXZlZCB0byBiZQogIGluIFNTTC1jb21wbGV0ZWQtbmVnb3RpYXRlIHN0YXRlLgoKLSBXZSBubyBsb25nZXIgc3VwcG9ydCBzZXR0aW5nIHRoZSBDVVJMT1BUX1VSTCBvcHRpb24gZnJvbSBpbnNpZGUgYSBjYWxsYmFjawogIHN1Y2ggYXMgdGhlIENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTiBvbmUgdHJlYXQgdGhhdCBhcyBpZiBpdCB3YXMgYSBMb2NhdGlvbjoKICBmb2xsb3dpbmcuIFRoZSBwYXRjaCB0aGF0IGludHJvZHVjZWQgdGhpcyBmZWF0dXJlIHdhcyBkb25lIGZvciA3LjExLjAsIGJ1dAogIHRoaXMgY29kZSBhbmQgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBicm9rZW4gc2luY2UgYWJvdXQgNy4xNS40IChNYXJjaCAyMDA2KQogIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBub24tYmxvY2tpbmcgT3BlblNTTCAiY29ubmVjdHMiLgoKICBJdCB3YXMgYSBoYWNrIHRvIGJlZ2luIHdpdGggYW5kIHNpbmNlIGl0IGRvZXNuJ3Qgd29yayBhbmQgaGFzbid0IHdvcmtlZAogIGNvcnJlY3RseSBmb3IgYSBsb25nIHRpbWUgYW5kIG5vYm9keSBoYXMgZXZlbiBub3RpY2VkLCBJIGNvbnNpZGVyIGl0IGEgdmVyeQogIHN1aXRhYmxlIHN1YmplY3QgZm9yIHBsYWluIHJlbW92YWwuIEFuZCBzbyBpdCB3YXMgZG9uZS4KCkd1ZW50ZXIgS25hdWYgKDE5IEZlYiAyMDA4KQotIFdlIGRvIG5vIGxvbmdlciBzdXBwb3J0IFNTTHYyIGJ5IGRlZmF1bHQgc2luY2UgaXQgaGFzIGtub3duIGZsYXdzLgogIEthc3BhciBCcmFuZCBwcm92aWRlZCBhIHBhdGNoIGZvciBhbGwgc3VwcG9ydGVkIFNTTCB0b29sa2l0cy4KCkRhbmllbCBGYW5kcmljaCAoMTkgRmViIDIwMDgpCi0gQWRkZWQgdGVzdDMwOSB0byB0ZXN0IEhUVFAgcmVkaXJlY3QgdG8gSFRUUFMgVVJMCgpEYW5pZWwgUyAoMTggRmViIDIwMDgpCi0gV2UncmUgbm8gbG9uZ2VyIHByb3ZpZGluZyBhIHZlcnkgb2xkIGNhLWJ1bmRsZSBpbiB0aGUgY3VybCB0YXJiYWxsLiBZb3UgY2FuCiAgZ2V0IGEgZnJlc2ggb25lIGRvd25sb2FkZWQgYW5kIGNyZWF0ZWQgd2l0aCAnbWFrZSBjYS1idW5kbGUnIG9yIHlvdSBjYW4gZ2V0CiAgb25lIGZyb20gaGVyZSA9PiBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY2FleHRyYWN0Lmh0bWwgaWYgeW91IHdhbnQgYSBmcmVzaAogIG5ldyBvbmUgZXh0cmFjdGVkIGZyb20gTW96aWxsYSdzIHJlY2VudCBsaXN0IG9mIGNhIGNlcnRzLgoKICBUaGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtY2EtYnVuZGxlIG5vdyBsZXRzIHlvdSBzcGVjaWZ5IHdoYXQgZmlsZSB0byB1c2UKICBhcyBkZWZhdWx0IGNhIGJ1bmRsZSBmb3IgeW91ciBidWlsZC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKICB3aWxsIGNoZWNrIGEgZmV3IGtub3duIHN0YW5kYXJkIHBsYWNlcyBmb3IgYSBnbG9iYWwgY2EgY2VydCB0byB1c2UuCgpEYW5pZWwgUyAoMTcgRmViIDIwMDgpCi0gSmVyb21lIE11ZmZhdC1NZXJpZG9sIGhlbHBlZCBtZSBmaXggQ3VybF9kb25lKCkgdG8gY2xvc2UgdGhlIGN1cnJlbnQKICBjb25uZWN0aW9uIGJ5IGZvcmNlIHdoZW4gaXQgd2FzIGNhbGxlZCBiZWZvcmUgdGhlIGVudGlyZSByZXF1ZXN0IGlzCiAgY29tcGxldGVkLCBzaW1wbHkgYmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIHRoZSBjb25uZWN0aW9uIHJlYWxseSBjYW4gYmUKICByZS11c2VkIHNhZmVseSBhdCB0aGF0IHBvaW50LgoKLSBCYXNlZCBvbiB0aGUgc2FtZSBkZWJ1Z2dpbmcgbG9naWMsIEkndmUgYWxzbyBtYWRlIEN1cmxfaHR0cF9kb25lKCkgbm90CiAgcmV0dXJuIENVUkxFX0dPVF9OT1RISU5HIGlmIGNhbGxlZCAicHJlbWF0dXJlbHkiLiBUaGlzIHNob3VsZCBoYXZlIG5vIHJlYWwKICBlZmZlY3QgdG8gYW55dGhpbmcgYnV0IHRoZSBjb2RlIG1ha2VzIG1vcmUgc2Vuc2UgbGlrZSB0aGlzLgoKRGFuaWVsIFMgKDE1IEZlYiAyMDA4KQotIE1hZGUgdGhlIGdudXRscyBjb2RlIHBhdGggbm90IGV2ZW4gdHJ5IHRvIGdldCB0aGUgc2VydmVyIGNlcnQgaWYgbm8gcGVlcgogIHZlcmlmaWNhdGlvbiBpcyByZXF1ZXN0ZWQuIFByZXZpb3VzbHkgaXQgd291bGQgZXZlbiByZXR1cm4gZmFpbHVyZSBpZiBnbnV0bHMKICBmYWlsZWQgdG8gZ2V0IHRoZSBzZXJ2ZXIgY2VydCBldmVuIHRob3VnaCBubyB2ZXJpZmljYXRpb24gd2FzIGFza2VkIGZvci4KICBQdWJsaWMgc2VydmVyIHNob3dpbmcgdGhlIHByb2JsZW06IGh0dHBzOi8vd3d3Lm5ldDIyMi5jYWlzc2UtZXBhcmduZS5mcgoKLSBGaXggbXkgQ3VybF90aW1lbGVmdCgpIGxlZnRvdmVyIG1pc3Rha2UgaW4gdGhlIGdudXRscyBjb2RlCgotIFBvb3lhbiBNY1Nwb3JyYW4gZm91bmQgYW5kIGZpeGVkIGEgZmxhdyB3aGVyZSB5b3UgZmlyc3Qgd291bGQgZG8gYSBub3JtYWwKICBodHRwIHJlcXVlc3QgYW5kIHRoZW4geW91J2QgcmV1c2UgdGhlIGhhbmRsZSBhbmQgcmVwbGFjZSB0aGUgQWNjZXB0OiBoZWFkZXIsCiAgYXMgdGhlbiBsaWJjdXJsIHdvdWxkIHNlbmQgdHdvIEFjY2VwdDogaGVhZGVycyEKCkRhbmllbCBTICgxMSBGZWIgMjAwOCkKLSBZYW5nIFRzZSBwb2ludGVkIG91dCBhIGZldyByZW1haW5pbmcgcXVpcmtzIGZyb20gbXkgdGltZW91dCByZWZhY3RvcmluZyBmcm9tCiAgRmViIDcgdGhhdCBkaWRuJ3QgYWJvcnQgcHJvcGVybHkgb24gdGltZW91dHMuIFRoZXNlIGFyZSBhY3R1YWxseSBvbGQKICBwcm9ibGVtcyBidXQgbm93IHRoZXkgc2hvdWxkIGJlIGZpeGVkLgoKWWFuZyBUc2UgKDEwIEZlYiAyMDA4KQotIEJ1ZyByZXBvcnQgIzE4ODg5MzIgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE4ODg5MzIpIHBvaW50cyBvdXQKICBhbmQgcHJvdmlkZXMgdGVzdCBwcm9ncmFtIHRoYXQgZGVtb25zdHJhdGVzIHRoYXQgbGliY3VybCBtaWdodCBub3Qgc2V0IGVycm9yCiAgZGVzY3JpcHRpb24gbWVzc2FnZSBmb3IgZXJyb3IgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1QgZm9yIFdpbmRvd3MgdGhyZWFkZWQKICBuYW1lIHJlc29sdmVyIGJ1aWxkcy4gRml4ZWQgbm93LgoKRGFuaWVsIEZhbmRyaWNoICg4IEZlYiAyMDA4KQotIEFkZGVkIGtleSB3b3JkcyB0byBhbGwgU1NMLXVzaW5nIHRlc3RzIHNvIHRoZXkgY2FuIGJlIHNraXBwZWQgaWYgbmVjZXNzYXJ5LgogIFJlbW92ZWQgYSBmZXcgdW5uZWNlc3NhcnkgcmVxdWlyZXMgU1NMIHN0YXRlbWVudHMuCgpEYW5pZWwgUyAoOCBGZWIgMjAwOCkKLSBNaWtlIEhvbW1leSBmaWxlZCBhbmQgZml4ZWQgYnVnIHJlcG9ydCAjMTg4OTg1NgogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xODg5ODU2KTogV2hlbiB1c2luZyB0aGUgZ251dGxzIHNzbAogIGxheWVyLCBjbGVhbmluZy11cCBhbmQgcmVpbml0aWFsaXppbmcgY3VybCBlbmRzIHVwIHdpdGggaHR0cHMgcmVxdWVzdHMKICBmYWlsaW5nIHdpdGggIkFTTjEgcGFyc2VyOiBFbGVtZW50IHdhcyBub3QgZm91bmQiIGVycm9ycy4gT2J2aW91c2x5IGEKICByZWdyZXNzaW9uIGFkZGVkIGluIDcuMTYuMy4KCllhbmcgVHNlICg4IEZlYiAyMDA4KQotIEltcHJvdmVkIHRlc3QgaGFybmVzcyBTQ1AvU0ZUUCBzdGFydCB1cCBzZXJ2ZXIgdmVyaWZpY2F0aW9uLCBkb2luZyBhIHJlYWwKICBjb25uZWN0aW9uIHRvIHRoZSBzZnRwIHNlcnZlciwgYXV0aGVudGljYXRpbmcgYW5kIHJ1bm5pbmcgYSBzaW1wbGUgc2Z0cAogIHB3ZCBjb21tYW5kIHVzaW5nIHRoZSB0ZXN0IGhhcm5lc3MgZ2VuZXJhdGVkIGNvbmZpZ3VyYXRpb24gYW5kIGtleSBmaWxlcy4KCkRhbmllbCBTICg4IEZlYiAyMDA4KQotIEf8bnRlciBLbmF1ZiBhZGRlZCBsaWIvbWstY2EtYnVuZGxlLnBsIHdoaWNoIGdldHMgdGhlIEZpcmVmb3ggY2EgYnVuZGxlIGFuZAogIGNyZWF0ZXMgYSBzdWl0YWJsZSBjYS1idW5kbGUuY3J0IGZpbGUgaW4gUEVNIGZvcm1hdCBmb3IgdXNlIHdpdGggY3VybC4gVGhlCiAgcmVjb21tZW5kZWQgd2F5IHRvIHJ1biBpdCBpcyB0byB1c2UgJ21ha2UgY2EtYnVuZGxlJyBpbiB0aGUgYnVpbGQgdHJlZSByb290LgoKRGFuaWVsIEZhbmRyaWNoICg3IEZlYiAyMDA4KQotIEFkZGVkIHRlc3RzIDEwMjIgYW5kIDEwMjMgdG8gdmFsaWRhdGUgb3V0cHV0IG9mIGN1cmwtY29uZmlnIC0tdmVyc2lvbiBhbmQKICAtLXZlcm51bQoKRGFuaWVsIFMgKDcgRmViIDIwMDgpCi0gUmVmYWN0b3JlZCBhIGxvdCBvZiB0aW1lb3V0IGNvZGUgaW50byBhIGZldyBmdW5jdGlvbnMgaW4gYW4gYXR0ZW1wdCB0byBtYWtlCiAgdGhlbSBhbGwgdXNlIHRoZSBzYW1lIChob3BlZnVsbHkgY29ycmVjdCkgbG9naWMgdG8gbWFrZSBpdCBsZXNzIGVycm9yLXByb25lCiAgYW5kIGVhc2llciB0byBpbnRyb2R1Y2UgbGlicmFyeS13aWRlIHdoZXJlIGl0IHNob3VsZCBiZSB1c2VkLgoKWWFuZyBUc2UgKDYgRmViIDIwMDgpCi0gRml4IGFuIGlzc3VlIGluIHN0cmR1cCByZXBsYWNlbWVudCBmdW5jdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBhYnNvbHV0ZWx5CiAgaHVnZSBzdHJpbmdzLiBPbmx5IHN5c3RlbXMgd2l0aG91dCBhIHN0YW5kYXJkIHN0cmR1cCB3b3VsZCBiZSBhZmZlY3RlZC4KCkRhbmllbCBTICgzIEZlYiAyMDA4KQotIERtaXRyeSBLdXJvY2hraW4gY2xlYW5lZCB1cCB0aGUgcGlwZWxpbmluZyBjb2RlIGFuZCByZW1vdmVkIHRoZSBuZWVkIGZvciBhbmQKICB1c2Ugb2YgdGhlICJpc19pbl9waXBlbGluZSIgc3RydWN0IGZpZWxkLgoKLSBJIHdyb3RlIHVwIGFuZCBhZGRlZCB0aGUgdGhyZWFkZWQtc3NsLmMgZXhhbXBsZSBzb3VyY2UgY29kZSB0aGF0IHNob3dzIGhvdwogIHRvIGRvIG11bHRpLXRocmVhZGVkIGRvd25sb2FkcyBvZiBIVFRQUyBmaWxlcyB3aXRoIGEgbGliY3VybCB0aGF0IGlzIGJ1aWx0CiAgd2l0aCBPcGVuU1NMLiBJdCB1c2VzIHB0aHJlYWRzIGZvciB0aGUgdGhyZWFkaW5nLgoKRGFuaWVsIFMgKDMxIEphbiAyMDA4KQotIE5pa2xhcyBBbmdlYnJhbmQgbWFkZSB0aGUgY29va2llIHN1cHBvcnQgaW4gbGliY3VybCBwcm9wZXJseSBkZWFsIHdpdGggdGhlCiAgIkh0dHBPbmx5IiBmZWF0dXJlIGludHJvZHVjZWQgYnkgTWljcm9zb2Z0IGFuZCBhcHBhcmVudGx5IGFsc28gc3VwcG9ydGVkIGJ5CiAgRmlyZWZveDogaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzMzA0Ni5hc3B4IC4gSHR0cE9ubHkKICBpcyBub3cgc3VwcG9ydGVkIHdoZW4gcmVjZWl2ZWQgZnJvbSBzZXJ2ZXJzIGluIEhUVFAgaGVhZGVycywgd2hlbiB3cml0dGVuIHRvCiAgY29va2llIGphcnMgYW5kIHdoZW4gcmVhZCBmcm9tIGV4aXN0aW5nIGNvb2tpZSBqYXJzLgoKICBJIG1vZGlmaWVkIHRlc3QgY2FzZSAzMSBhbmQgNDYgdG8gYWxzbyBkbyBzb21lIGJhc2ljIEh0dHBPbmx5IHRlc3RpbmcuCgotIERtaXRyeSBLdXJvY2hraW4gbW92ZWQgc2V2ZXJhbCBzdHJ1Y3QgZmllbGRzIGZyb20gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB0bwogIHRoZSBTaW5nbGVSZXF1ZXN0IG9uZSB0byBtYWtlIHBpcGVsaW5pbmcgYmV0dGVyLiBJdCBpcyBhIGJpdCB0cmlja3kgdG8ga2VlcAogIHRoZW0gaW4gdGhlIHJpZ2h0IHBsYWNlLCB0byBrZWVwIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBhY3R1YWwgcmVxdWVzdCBvciB0bwogIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGUgcmlnaHQgcGxhY2UuCgpEYW5pZWwgUyAoMjkgSmFuIDIwMDgpCi0gRG1pdHJ5IEt1cm9jaGtpbiBmaXhlZCBDdXJsX2RvbmUoKSBmb3IgcGlwZWxpbmluZywgYXMgaXQgY291bGQgcHJldmlvdXNseQogIGNyYXNoIQoKLSBNaWNoYWwgTWFyZWsgZml4ZWQgbWlub3IgbWlzdGFrZSBpbiB0ZXN0IGNhc2UgNTUzIHRoYXQgcHJldmVudGVkIGl0IGZyb20KICB3b3JraW5nIG9uIG90aGVyIElQLWFkZHJlc3NlcyBvciBwb3J0IG51bWJlcnMuCgpWZXJzaW9uIDcuMTguMCAoMjggSmFudWFyeSAyMDA4KQoKRGFuaWVsIFMgKDI3IEphbiAyMDA4KQotIERtaXRyeSBLdXJvY2hraW46IEluICJyZWFsIHdvcmxkIiB0ZXN0aW5nIEkgZm91bmQgbW9yZSBidWdzIGluCiAgcGlwZWxpbmluZy4gQnJva2VuIGNvbm5lY3Rpb24gaXMgbm90IHJlc3RvcmVkIGFuZCB3ZSBnZXQgaW50byBpbmZpbml0ZQogIGxvb3AuIEl0IGhhcHBlbnMgYmVjYXVzZSBvZiB3cm9uZyBpc19pbl9waXBlbGluZSB2YWx1ZXMuCgpEYW5pZWwgUyAoMjYgSmFuIDIwMDgpCi0gS2V2aW4gUmVlZCBmaWxlZCBidWcgcmVwb3J0ICMxODc5Mzc1CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE4NzkzNzUpIHdoaWNoIGRlc2NyaWJlcyBob3cgbGliY3VybAogIGdvdCBsb3N0IGluIHRoaXMgc2NlbmFyaW86IHByb3h5IHR1bm5lbCAob3IgSFRUUFMgb3ZlciBwcm94eSksIGFzayB0byBkbyBhbnkKICBwcm94eSBhdXRoZW50aWNhdGlvbiBhbmQgdGhlIHByb3h5IHJlcGxpZXMgd2l0aCBhbiBhdXRoIChsaWtlIE5UTE0pIGFuZCB0aGVuCiAgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGFmdGVyIHRoYXQgaW5pdGlhbCBpbmZvcm1hdGlvbmFsIHJlc3BvbnNlLgoKICBsaWJjdXJsIHdvdWxkIG5vdCBwcm9wZXJseSByZS1pbml0aWFsaXplIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBhbmQKICBjb250aW51ZSB0aGUgYXV0aCBuZWdvdGlhdGlvbiBsaWtlIHN1cHBvc2VkLiBJdCBkb2VzIG5vdyBob3dldmVyLCBhcyBpdCB3aWxsCiAgbm93IGRldGVjdCBpZiBvbmUgb3IgbW9yZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHdlcmUgYXZhaWxhYmxlIGFuZCBhc2tlZAogIGZvciwgYW5kIHdpbGwgdGh1cyByZXRyeSB0aGUgY29ubmVjdGlvbiBhbmQgY29udGludWUgZnJvbSB0aGVyZS4KCi0gSSBtYWRlIHRoZSBwcm9ncmVzcyBjYWxsYmFjayBnZXQgY2FsbGVkIHByb3Blcmx5IGR1cmluZyBwcm94eSBDT05ORUNULgoKRGFuaWVsIFMgKDIzIEphbiAyMDA4KQotIElnb3IgRnJhbmNodWsgcG9pbnRlZCBvdXQgdGhhdCBDVVJMT1BUX0NPT0tJRUxJU1Qgc2V0IHRvICJBTEwiIGxlYWtlZAogIG1lbW9yeSwgYW5kIHNvIGRpZCAiU0VTUyIuIEZpeGVkIG5vdy4KCllhbmcgVHNlICgyMiBKYW4gMjAwOCkKLSBDaGVjayBwb2xsLmggYXQgY29uZmlndXJhdGlvbiB0aW1lLCBhbmQgdXNlIGl0IHdoZW4gc3lzL3BvbGwuaCB1bmF2YWlsYWJsZQoKRGFuaWVsIFMgKDIyIEphbiAyMDA4KQotIERtaXRyeSBLdXJvY2hraW4gcmVtb3ZlZCB0aGUgY2FuY2VsbGVkIHN0YXRlIGZvciBwaXBlbGluaW5nLCBhcyB3ZSBhZ3JlZWQKICB0aGF0IGl0IGlzIGJhZCBhbnl3YXkuIFN0YXJ0aW5nIG5vdywgcmVtb3ZpbmcgYSBoYW5kbGUgdGhhdCBpcyBpbiB1c2VkIGluIGEKICBwaXBlbGluZSB3aWxsIGJyZWFrIHRoZSBwaXBlbGluZSAtIGl0J2xsIGJlIHNldCBiYWNrIHVwIGFnYWluIGJ1dCBzdGlsbC4uLgoKWWFuZyBUc2UgKDIxIEphbiAyMDA4KQotIERpc2FibGUgbGRhcCBzdXBwb3J0IGZvciBjeWd3aW4gYnVpbGRzLCBzaW5jZSBpdCBicmVha3Mgd2hvbGUgYnVpbGQgcHJvY2Vzcy4KICBGaXhpbmcgaXQgd2lsbCBhZmZlY3Qgb3RoZXIgcGxhdGZvcm1zLCBzbyBpdCBpcyBwb3N0cG9uZWQgZm9yIGFub3RoZXIgcmVsZWFzZS4KCkRhbmllbCBTICgxOCBKYW4gMjAwOCkKLSBMYXUgSGFuZyBLaW4gZm91bmQgYW5kIGZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSBtdWx0aSBpbnRlcmZhY2Ugd2hlbiBkb2luZwogIENPTk5FQ1Qgb3ZlciBhIHByb3h5LiBjdXJsX211bHRpX2Zkc2V0KCkgZGlkbid0IHJlcG9ydCBiYWNrIHRoZSBzb2NrZXQKICBwcm9wZXJseSBkdXJpbmcgdGhhdCBzdGF0ZSwgZHVlIHRvIGEgbWlzc2luZyBjYXNlIGluIHRoZSBzd2l0Y2ggaW4gdGhlCiAgbXVsdGlfZ2V0c29jaygpIGZ1bmN0aW9uLgoKWWFuZyBUc2UgKDE3IEphbiAyMDA4KQotIERvbid0IGFib3J0IHRlc3RzIDUxOCBhbmQgNTM3IHdoZW4gdW5hYmxlIHRvIHJhaXNlIHRoZSBvcGVuLWZpbGUgc29mdCBsaW1pdC4KCkRhbmllbCBTICgxNiBKYW4gMjAwOCkKLSBOYXRoYW4gQ291bHRlcidzIHBhdGNoIHRoYXQgbWFrZXMgcnVudGVzdHMucGwgcmVzcGVjdCB0aGUgUEFUSCB3aGVuIGZpZ3VyaW5nCiAgb3V0IHdoYXQgdmFsZ3JpbmQgdG8gcnVuLgoKWWFuZyBUc2UgKDE2IEphbiAyMDA4KQotIEltcHJvdmVkIGhhbmRsaW5nIG9mIG91dCBvZiBtZW1vcnkgaW4gdGhlIGNvbW1hbmQgbGluZSB0b29sIHRoYXQgYWZlY3RlZAogIGRhdGEgdXJsIGVuY29kZWQgSFRUUCBQT1NUcyB3aGVuIHJlYWRpbmcgaXQgZnJvbSBhIGZpbGUuCgpEYW5pZWwgUyAoMTYgSmFuIDIwMDgpCi0gRG1pdHJ5IEt1cm9jaGtpbiB3b3JrZWQgYSBsb3Qgb24gaW1wcm92aW5nIHRoZSBIVFRQIFBpcGVsaW5pbmcgc3VwcG9ydCB0aGF0CiAgcHJldmlvdXNseSBoYWQgYSBudW1iZXIgb2YgZmxhd3MsIHBlcmhhcHMgbW9zdCBub3RhYmx5IHdoZW4gYW4gYXBwbGljYXRpb24KICBmaXJlZCB1cCBOIHRyYW5zZmVycyBhdCBvbmNlIGFzIHRoZW4gdGhleSB3b3VsZG4ndCBwaXBlbGluZSBhdCBhbGwgdGhhdAogIG5pY2VseSBhcyBhbnlvbmUgd291bGQgdGhpbmsuLi4gVGVzdCBjYXNlIDUzMCB3YXMgYWxzbyB1cGRhdGVkIHRvIHRha2UgdGhlCiAgaW1wcm92ZWQgZnVuY3Rpb25hbGl0eSBpbnRvIGFjY291bnQuCgotIENhbGxzIHRvIEN1cmxfZmFpbGYoKSBhcmUgbm90IHN1cHBvc2VkIHRvIHByb3ZpZGUgYSB0cmFpbGluZyBuZXdsaW5lIGFzIHRoZQogIGZ1bmN0aW9uIGl0c2VsZiBhZGRzIHRoYXQuIEZpeGVkIG9uIDUwIG9yIHNvbWV0aGluZyBzdHJpbmdzIQoKRGFuaWVsIFMgKDE1IEphbiAyMDA4KQotIEkgbWFkZSB0aGUgdG9ydHVyZSB0ZXN0IG9uIHRlc3QgNTMwIGdvIHRocm91Z2guIFRoaXMgd2FzIGFjdHVhbGx5IGR1ZSB0bwogIHNpbGx5IGNvZGUgbGVmdCBmcm9tIHdoZW4gd2Ugc3dpdGNoZWQgdG8gbGV0IHRoZSBtdWx0aSBoYW5kbGUgImhvbGQiIHRoZSBkbnMKICBjYWNoZSB3aGVuIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UuLi4gT2YgY291cnNlIHRoaXMgb25seSB0cmlnZ2VyZWQgd2hlbiBhCiAgY2VydGFpbiBmdW5jdGlvbiBjYWxsIHJldHVybmVkIGVycm9yIGF0IHRoZSBjb3JyZWN0IG1vbWVudC4KCkRhbmllbCBTICgxNCBKYW4gMjAwOCkKLSBKb2UgTWFsaWNraSBmaWxlZCBidWcgcmVwb3J0ICMxODcxMjY5CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE4NzEyNjkpIGFuZCB3ZSBjb3VsZCBmaXggaGlzIGhhbmctCiAgcHJvYmxlbSB0aGF0IG9jY3VycmVkIHdoZW4gZG9pbmcgYSBsYXJnZSBIVFRQIFBPU1QgcmVxdWVzdCB3aXRoIHRoZQogIHJlc3BvbnNlLWJvZHkgcmVhZCBmcm9tIGEgY2FsbGJhY2suCgpEYW5pZWwgUyAoMTIgSmFuIDIwMDgpCi0gSSByZS1hcnJhbmdlZCB0aGUgY3VybCAtLWhlbHAgb3V0cHV0LiBBbGwgdGhlIG9wdGlvbnMgYXJlIG5vdyBzb3J0ZWQgb24KICB0aGVpciBsb25nIG9wdGlvbiBuYW1lcyBhbmQgYWxsIGRlc2NyaXB0aW9ucyBhcmUgb25lLWxpbmVycy4KCi0gRXJpYyBMYW5kZXMgcHJvdmlkZWQgdGhlIHBhdGNoIChlZGl0ZWQgYnkgbWUpIHRoYXQgaW50cm9kdWNlcyB0aGUKICAtLWtlZXBhbGl2ZS10aW1lIHRvIGN1cmwgdG8gc2V0IHRoZSBrZWVwYWxpdmUgcHJvYmUgaW50ZXJ2YWwuIEkgYWxzbyB0b29rCiAgdGhlIG9wcG9ydHVuaXR5IHRvIHJlbmFtZSB0aGUgcmVjZW50bHkgYWRkZWQgbm8ta2VlcC1hbGl2ZSBvcHRpb24gdG8KICBuby1rZWVwYWxpdmUgdG8ga2VlcCBhIGNvbnNpc3RlbnQgbmFtaW5nIGFuZCB0byBhdm9pZCBnZXR0aW5nIHR3byBkYXNoZXMgaW4KICB0aGVzZSBvcHRpb24gbmFtZXMuIEVyaWMgYWxzbyBwcm92aWRlZCBhbiB1cGRhdGUgdG8gdGhlIG1hbiBwYWdlIGZvciB0aGUgbmV3CiAgb3B0aW9uLgoKRGFuaWVsIFMgKDExIEphbiAyMDA4KQotIERhbmllbCBFZ2dlciBtYWRlIENVUkxPUFRfUkFOR0Ugd29yayBvbiBmaWxlOi8vIFVSTHMgdGhlIHZlcnkgc2FtZSB3YXkgaXQKICBhbHJlYWR5IHdvcmtlZCBmb3IgRlRQOi8vIFVSTHMuCgotIEkgbWFkZSB0aGUgY3VybCB0b29sIHN3aXRjaCBmcm9tIHVzaW5nIENVUkxPUFRfSU9DVExGVU5DVElPTiB0byBub3cgdXNlIHRoZQogIHNwYW5raW5nIG5ldyBDVVJMT1BUX1NFRUtGVU5DVElPTiBzaW1wbHkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGltcHJvdmVkCiAgcGVyZm9ybWFuY2UgZm9yIHRoZSB1cGxvYWQgcmVzdW1lIGNhc2VzIHdoZXJlIHlvdSB3YW50IHRvIHVwbG9hZCB0aGUgbGFzdAogIGZldyBieXRlcyBvZiBhIHZlcnkgbGFyZ2UgZmlsZS4gVG8gaW1wbGVtZW50IHRoaXMgZGVjZW50bHksIEkgaGFkIHRvIHN3aXRjaAogIHRoZSBjbGllbnQgY29kZSBmb3IgdXBsb2FkaW5nIGZyb20gZm9wZW4oKS9mcmVhZCgpIHRvIHBsYWluIG9wZW4oKS9yZWFkKCkgc28KICB0aGF0IHdlIGNhbiB1c2UgbHNlZWsoKSB0byBkbyA+MzJiaXQgc2Vla3MgKGFzIGZzZWVrKCkgZG9lc24ndCBhbGxvdyB0aGF0KQogIG9uIHN5c3RlbXMgdGhhdCBvZmZlciBzdXBwb3J0IGZvciB0aGF0LgoKRGFuaWVsIFMgKDEwIEphbiAyMDA4KQotIE1pY2hhbCBNYXJlayBtYWRlIGN1cmwtY29uZmlnIC0tbGlicyBub3QgaW5jbHVkZSAvdXNyL2xpYjY0IGluIHRoZSBvdXRwdXQKICAoaXQgYWxyZWFkeSBiZWZvcmUgc2tpcHBlZCAvdXNyL2xpYikuICAvdXNyL2xpYjY0IGlzIHRoZSBkZWZhdWx0IGxpYnJhcnkKICBkaXJlY3Rvcnkgb24gbWFueSA2NGJpdCBzeXN0ZW1zIGFuZCBpdCdzIHVubGlrZWx5IHRoYXQgYW55b25lIHdvdWxkIHVzZSB0aGUKICBwYXRoIHByaXZhdGVseSBvbiBzeXN0ZW1zIHdoZXJlIGl0J3Mgbm90LgoKLSBHZW9yZyBMaXBwaXRzY2ggYnJvdWdodCBDVVJMT1BUX1NFRUtGVU5DVElPTiBhbmQgQ1VSTE9QVF9TRUVLREFUQSB0byBhbGxvdwogIGxpYmN1cmwgdG8gc2VlayBpbiBhIGdpdmVuIGlucHV0IHN0cmVhbS4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4KICBkb2luZyB1cGxvYWQgcmVzdW1lcyB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBhIGh1Z2UgcGFydCBvZiB0aGUgZmlsZSBwcmVzZW50CiAgcmVtb3RlbHkuIEJlZm9yZSwgYW5kIHN0aWxsIGlmIHRoaXMgY2FsbGJhY2sgaXNuJ3QgdXNlZCwgbGliY3VybCB3aWxsIHJlYWQKICBhbmQgdGhyb3VnaCBhd2F5IHRoZSBlbnRpcmUgZmlsZSB1cCB0byB0aGUgcG9pbnQgdG8gd2hlcmUgdGhlIHJlc3VtaW5nCiAgYmVnaW5zICh3aGljaCBvZiBjb3Vyc2UgY2FuIGJlIGEgc2xvdyBvcGVyZXJhdGlvbiBkZXBlbmRpbmcgb24gZmlsZSBzaXplLAogIEkvTyBiYW5kd2lkdGggYW5kIG1vcmUpLiBUaGlzIG5ldyBmdW5jdGlvbiB3aWxsIGFsc28gYmUgcHJlZmVycmVkIHRvIGdldAogIHVzZWQgaW5zdGVhZCBvZiB0aGUgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OIGZvciBzZWVraW5nIGJhY2sgaW4gYSBzdHJlYW0gd2hlbgogIGRvaW5nIG11bHRpLXN0YWdlIEhUVFAgYXV0aCB3aXRoIFBPU1QvUFVULgoKLSBOaWtpdGluc2tpdCBEbWl0cml5IGZpbGVkIGJ1ZyByZXBvcnQgIzE4NjgyNTUKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTg2ODI1NSkgd2l0aCBhIHBhdGNoLiBJdCBpZGVudGlmaWVzCiAgYW5kIGZpeGVzIGEgcHJvYmxlbSB3aXRoIHBhcnNpbmcgV1dXLUF1dGhlbnRpY2F0ZTogaGVhZGVycyB3aXRoIGFkZGl0aW9uYWwKICBzcGFjZXMgaW4gdGhlIGxpbmUgdGhhdCB0aGUgcGFyc2VyIHdhc24ndCB3cml0dGVuIHRvIGRlYWwgd2l0aC4KCkRhbmllbCBTICg4IEphbiAyMDA4KQotIEludHJvZHVjaW5nIGN1cmxfZWFzeV9wYXVzZSgpIGFuZCBuZXcgbWFnaWMgcmV0dXJuIGNvZGVzIGZvciBib3RoIHRoZSByZWFkCiAgYW5kIHRoZSB3cml0ZSBjYWxsYmFja3MgdGhhdCBub3cgY2FuIG1ha2UgYSBjb25uZWN0aW9uJ3MgcmVhZGluZyBhbmQvb3IKICB3cml0aW5nIGdldCBwYXVzZWQuCgpEYW5pZWwgUyAoNiBKYW4gMjAwOCkKLSBKZWZmIEpvaG5zb24gZmlsZWQgYnVnIHJlcG9ydCAjMTg2MzE3MQogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xODYzMTcxKSB3aGVyZSBoZSBwb2ludGVkIG91dCB0aGF0CiAgbGliY3VybCdzIGRhdGUgcGFyc2VyIGRpZG4ndCBhY2NlcHQgYSArMTMwMCB0aW1lIHpvbmUgd2hpY2ggYWN0dWFsbHkgaXMgdXNlZAogIGZhaXJseSBvZnRlbiAobGlrZSBOZXcgWmVhbGFuZCdzIERhaWxpZ2h0IFNhdmluZ3MgVGltZSksIHNvIEkgbW9kaWZpZWQgdGhlCiAgcGFyc2VyIHRvIG5vdyBhY2NlcHQgdXAgdG8gYW5kIGluY2x1ZGluZyAtMTQwMCB0byArMTQwMC4KCkRhbmllbCBTICg1IEphbiAyMDA4KQotIEJhc2VkIG9uIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvbiBjdXJsLWxpYnJhcnksIEkgcmV2ZXJ0ZWQgeWVzdGVyZGF5J3MgU09DS1M1CiAgY29kZSB0byBpbnN0ZWFkIGludHJvZHVjZSBzdXBwb3J0IGZvciBhIG5ldyBwcm94eSB0eXBlIGNhbGxlZAogIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUgdGhhdCBpcyB1c2VkIHRvIHNlbmQgdGhlIGhvc3QgbmFtZSB0byB0aGUgcHJveHkKICBpbnN0ZWFkIG9mIElQIGFkZHJlc3MgYW5kIHRoZXJlJ3MgdGh1cyBubyBsb25nZXIgYW55IG5lZWQgZm9yIGEgbmV3CiAgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbi4KCiAgVGhlIGRlZmF1bHQgU09DS1M1IHByb3h5IGlzIGFnYWluIGJhY2sgdG8gc2VuZGluZyB0aGUgSVAgYWRkcmVzcyB0byB0aGUKICBwcm94eS4gIFRoZSBuZXcgY3VybCBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciBlbmFibGluZyBzZW5kaW5nIGhvc3QgbmFtZSB0byBhCiAgU09DS1M1IHByb3h5IGlzIG5vdyAtLXNvY2tzNS1ob3N0bmFtZS4KCkRhbmllbCBTICg0IEphbiAyMDA4KQotIEJhc2VkIG9uIE1heGltIFBlcmVuZXNlbmtvJ3MgcGF0Y2gsIHdlIG5vdyBkbyBTT0NLUzUgb3BlcmF0aW9ucyBhbmQgbGV0IHRoZQogIHByb3h5IGRvIHRoZSBob3N0IG5hbWUgcmVzb2x2aW5nIGFuZCBvbmx5IGlmIC0tc29ja3M1aXAgKG9yCiAgQ1VSTE9QVF9TT0NLUzVfUkVTT0xWRV9MT0NBTCkgaXMgdXNlZCB3ZSByZXNvbHZlIHRoZSBob3N0IG5hbWUgbG9jYWxseSBhbmQKICBwYXNzIG9uIHRoZSBJUCBhZGRyZXNzIG9ubHkgdG8gdGhlIHByb3h5LgoKWWFuZyBUc2UgKDMgSmFuIDIwMDgpCi0gTW9kaWZpZWQgdGVzdCBoYXJuZXNzIHRvIGFsbG93IFNDUCwgU0ZUUCBhbmQgU09DS1M0IHRlc3RzIHRvIHJ1biB3aXRoCiAgT3BlblNTSCAyLjkuOSwgU3VuU1NIIDEuMCBvciBsYXRlciB2ZXJzaW9ucy4gU09DS1M1IHRlc3RzIG5lZWQgT3BlblNTSAogIDMuNywgU3VuU1NIIDEuMCBvciBsYXRlci4KCkRhbmllbCBTICgyIEphbiAyMDA4KQotIEkgZml4ZWQgdHdvIGNhc2VzIG9mIG1pc3NpbmcgcmV0dXJuIGNvZGUgY2hlY2tzIHdoZW4gaGFuZGxpbmcgY2h1bmtlZAogIGRlY29kaW5nIHdoZXJlIGEgd3JpdGUgZXJyb3IgKG9yIGFib3J0IHJldHVybiBmcm9tIGEgY2FsbGJhY2spIGRpZG4ndCBzdG9wCiAgbGliY3VybCdzIHByb2Nlc3NpbmcuCgotIEkgcmVtb3ZlZCB0aGUgc29ja2xlbl90IHVzZSBmcm9tIHRoZSBwdWJsaWMgY3VybC9jdXJsLmggaGVhZGVyIGFuZCBpbnN0ZWFkCiAgbWFkZSBpdCBhbiB1bnNpZ25lZCBpbnQuIFRoZSB0eXBlIHdhcyBvbmx5IHVzZWQgaW4gdGhlIGN1cmxfc29ja2FkZHIgc3RydWN0CiAgZGVmaW5pdGlvbiAob25seSB1c2VkIGJ5IHRoZSBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2spLiBPbiBhbGwgcGxhdGZvcm1zIEkKICBjb3VsZCBmaW5kIGluZm9ybWF0aW9uIGFib3V0LCBzb2NrbGVuX3QgaXMgMzIgdW5zaWduZWQgYml0cyBsYXJnZSBzbyBJIGRvbid0CiAgdGhpbmsgdGhpcyB3aWxsIGJyZWFrIHRoZSBBUEkgb3IgQUJJLiBUaGUgbWFpbiByZWFzb24gZm9yIHRoaXMgY2hhbmdlIGlzIG9mCiAgY291cnNlIGZvciBhbGwgdGhlIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgYSBzb2NrbGVuX3QgZGVmaW5pdGlvbiBpbiB0aGVpcgogIGhlYWRlcnMgdG8gYnVpbGQgZmluZSBhZ2Fpbi4gUHJvdmlkaW5nIG91ciBvd24gY29uZmlndXJlIG1hZ2ljIGFuZCBjdXN0b20KICBkZWZpbml0aW9uIG9mIHNvY2tsZW5fdCBvbiB0aG9zZSBzeXN0ZW1zIHByb3ZlZCB0byB3b3JrIGJ1dCB3YXMgYSBsb3Qgb2YKICBjcnVmdCwgY29kZSBhbmQgZXh0cmEgbWFnaWMgbmVlZGVkIC0gd2hlbiB0aGlzIHZlcnkgc21hbGwgY2hhbmdlIG9mIHR5cGUKICBzZWVtcyBoYXJtbGVzcyBhbmQgc3RpbGwgc29sdmVzIHRoZSBtaXNzaW5nIHNvY2tsZW5fdCBwcm9ibGVtLgoKLSBSaWNoYXJkIEF0dGVyZXIgYnJvdWdodCBhIHBhdGNoIHRoYXQgYWRkZWQgc3VwcG9ydCBmb3IgU09DS1M0YSBwcm94aWVzLAogIHdoaWNoIGlzIGFuIGlub2ZmaWNpYWwgUFJPWFk0IHZhcmlhbnQgdGhhdCBzZW5kcyB0aGUgaG9zdG5hbWUgdG8gdGhlIHByb3h5CiAgaW5zdGVhZCBvZiB0aGUgcmVzb2x2ZWQgYWRkcmVzcyAod2hpY2ggaXMgYWxyZWFkeSBzdXBwb3J0ZWQgYnkgU09DS1M1KS4KICAtLXNvY2tzNGEgaXMgdGhlIGN1cmwgY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgaXQgYW5kIENVUkxPUFRfUFJPWFlUWVBFIGNhbgogIG5vdyBiZSBzZXQgdG8gQ1VSTFBST1hZX1NPQ0tTNEEgYXMgd2VsbC4KCkRhbmllbCBTICgxIEphbiAyMDA4KQotIE1vaHVuIEJpc3dhcyBwb2ludGVkIG91dCB0aGF0IC0tbGliY3VybCBnZW5lcmF0ZWQgYSBzb3VyY2UgY29kZSB3aXRoIGFuIGludAogIGZ1bmN0aW9uIGJ1dCB3aXRob3V0IGEgcmV0dXJuIHN0YXRlbWVudC4gV2hpbGUgZml4aW5nIHRoYXQsIEkgYWxzbyB0b29rIGNhcmUKICBhYm91dCBhZGRpbmcgc29tZSBiZXR0ZXIgY29tbWVudHMgZm9yIHRoZSBnZW5lcmF0ZWQgY29kZS4KCg==