From 67472f3a19e0c1d924101f8568bee75b3361f760 Mon Sep 17 00:00:00 2001
From: Vidushi Gupta <55969597+Vidushi-Gupta@users.noreply.github.com>
Date: Thu, 15 Jun 2023 16:54:42 +0530
Subject: [PATCH] Updated knit html of new .Rmd file
---
4-Classification/2-Classifiers-1/solution/R/lesson_11.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/4-Classification/2-Classifiers-1/solution/R/lesson_11.html b/4-Classification/2-Classifiers-1/solution/R/lesson_11.html
index 8a6c783a1..20a9d3b90 100644
--- a/4-Classification/2-Classifiers-1/solution/R/lesson_11.html
+++ b/4-Classification/2-Classifiers-1/solution/R/lesson_11.html
@@ -2964,7 +2964,7 @@ quiz
-LS0tCnRpdGxlOiAnQnVpbGQgYSBjbGFzc2lmaWNhdGlvbiBtb2RlbDogRGVsaWNpb3VzIEFzaWFuIGFuZCBJbmRpYW4gQ3Vpc2luZXMnCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0aGVtZTogZmxhdGx5CiAgICBoaWdobGlnaHQ6IGJyZWV6ZWRhcmsKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgY29kZV9kb3dubG9hZDogeWVzCi0tLQoKIyMgQ3Vpc2luZSBjbGFzc2lmaWVycyAxCgpJbiB0aGlzIGxlc3Nvbiwgd2UnbGwgZXhwbG9yZSBhIHZhcmlldHkgb2YgY2xhc3NpZmllcnMgdG8gKnByZWRpY3QgYSBnaXZlbiBuYXRpb25hbCBjdWlzaW5lIGJhc2VkIG9uIGEgZ3JvdXAgb2YgaW5ncmVkaWVudHMuKiBXaGlsZSBkb2luZyBzbywgd2UnbGwgbGVhcm4gbW9yZSBhYm91dCBzb21lIG9mIHRoZSB3YXlzIHRoYXQgYWxnb3JpdGhtcyBjYW4gYmUgbGV2ZXJhZ2VkIGZvciBjbGFzc2lmaWNhdGlvbiB0YXNrcy4KCiMjIyBbKipQcmUtbGVjdHVyZSBxdWl6KipdKGh0dHBzOi8vZ3JheS1zYW5kLTA3YTEwZjQwMy4xLmF6dXJlc3RhdGljYXBwcy5uZXQvcXVpei8yMS8pCgojIyMgKipQcmVwYXJhdGlvbioqCgpUaGlzIGxlc3NvbiBidWlsZHMgdXAgb24gb3VyIFtwcmV2aW91cyBsZXNzb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvTUwtRm9yLUJlZ2lubmVycy9ibG9iL21haW4vNC1DbGFzc2lmaWNhdGlvbi8xLUludHJvZHVjdGlvbi9zb2x1dGlvbi9SL2xlc3Nvbl8xMC5tZCkgd2hlcmUgd2U6CgotICAgTWFkZSBhIGdlbnRsZSBpbnRyb2R1Y3Rpb24gdG8gY2xhc3NpZmljYXRpb25zIHVzaW5nIGEgZGF0YXNldCBhYm91dCBhbGwgdGhlIGJyaWxsaWFudCBjdWlzaW5lcyBvZiBBc2lhIGFuZCBJbmRpYSDwn5iLLgoKLSAgIEV4cGxvcmVkIHNvbWUgW2RwbHlyIHZlcmJzXShodHRwczovL2RwbHlyLnRpZHl2ZXJzZS5vcmcvKSB0byBwcmVwIGFuZCBjbGVhbiBvdXIgZGF0YS4KCi0gICBNYWRlIGJlYXV0aWZ1bCB2aXN1YWxpemF0aW9ucyB1c2luZyBnZ3Bsb3QyLgoKLSAgIERlbW9uc3RyYXRlZCBob3cgdG8gZGVhbCB3aXRoIGltYmFsYW5jZWQgZGF0YSBieSBwcmVwcm9jZXNzaW5nIGl0IHVzaW5nIFtyZWNpcGVzXShodHRwczovL3JlY2lwZXMudGlkeW1vZGVscy5vcmcvYXJ0aWNsZXMvU2ltcGxlX0V4YW1wbGUuaHRtbCkuCgotICAgRGVtb25zdHJhdGVkIGhvdyB0byBgcHJlcGAgYW5kIGBiYWtlYCBvdXIgcmVjaXBlIHRvIGNvbmZpcm0gdGhhdCBpdCB3aWxsIHdvcmsgYXMgc3VwcG9zZWQgdG8uCgojIyMjICoqUHJlcmVxdWlzaXRlKioKCkZvciB0aGlzIGxlc3Nvbiwgd2UnbGwgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIHRvIGNsZWFuLCBwcmVwIGFuZCB2aXN1YWxpemUgb3VyIGRhdGE6CgotICAgYHRpZHl2ZXJzZWA6IFRoZSBbdGlkeXZlcnNlXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnLykgaXMgYSBbY29sbGVjdGlvbiBvZiBSIHBhY2thZ2VzXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnL3BhY2thZ2VzKSBkZXNpZ25lZCB0byBtYWtlcyBkYXRhIHNjaWVuY2UgZmFzdGVyLCBlYXNpZXIgYW5kIG1vcmUgZnVuIQoKLSAgIGB0aWR5bW9kZWxzYDogVGhlIFt0aWR5bW9kZWxzXShodHRwczovL3d3dy50aWR5bW9kZWxzLm9yZy8pIGZyYW1ld29yayBpcyBhIFtjb2xsZWN0aW9uIG9mIHBhY2thZ2VzXShodHRwczovL3d3dy50aWR5bW9kZWxzLm9yZy9wYWNrYWdlcy8pIGZvciBtb2RlbGluZyBhbmQgbWFjaGluZSBsZWFybmluZy4KCi0gICBgRGF0YUV4cGxvcmVyYDogVGhlIFtEYXRhRXhwbG9yZXIgcGFja2FnZV0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL0RhdGFFeHBsb3Jlci92aWduZXR0ZXMvZGF0YWV4cGxvcmVyLWludHJvLmh0bWwpIGlzIG1lYW50IHRvIHNpbXBsaWZ5IGFuZCBhdXRvbWF0ZSBFREEgcHJvY2VzcyBhbmQgcmVwb3J0IGdlbmVyYXRpb24uCgotICAgYHRoZW1pc2A6IFRoZSBbdGhlbWlzIHBhY2thZ2VdKGh0dHBzOi8vdGhlbWlzLnRpZHltb2RlbHMub3JnLykgcHJvdmlkZXMgRXh0cmEgUmVjaXBlcyBTdGVwcyBmb3IgRGVhbGluZyB3aXRoIFVuYmFsYW5jZWQgRGF0YS4KCi0gICBgbm5ldGA6IFRoZSBbbm5ldCBwYWNrYWdlXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvbm5ldC9ubmV0LnBkZikgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBlc3RpbWF0aW5nIGZlZWQtZm9yd2FyZCBuZXVyYWwgbmV0d29ya3Mgd2l0aCBhIHNpbmdsZSBoaWRkZW4gbGF5ZXIsIGFuZCBmb3IgbXVsdGlub21pYWwgbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbHMuCgpZb3UgY2FuIGhhdmUgdGhlbSBpbnN0YWxsZWQgYXM6CgpgaW5zdGFsbC5wYWNrYWdlcyhjKCJ0aWR5dmVyc2UiLCAidGlkeW1vZGVscyIsICJEYXRhRXhwbG9yZXIiLCAiaGVyZSIpKWAKCkFsdGVybmF0aXZlbHksIHRoZSBzY3JpcHQgYmVsb3cgY2hlY2tzIHdoZXRoZXIgeW91IGhhdmUgdGhlIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHRoaXMgbW9kdWxlIGFuZCBpbnN0YWxscyB0aGVtIGZvciB5b3UgaW4gY2FzZSB0aGV5IGFyZSBtaXNzaW5nLgoKYGBge3IsIG1lc3NhZ2U9Riwgd2FybmluZz1GfQpzdXBwcmVzc1dhcm5pbmdzKGlmICghcmVxdWlyZSgicGFjbWFuIikpaW5zdGFsbC5wYWNrYWdlcygicGFjbWFuIikpCgpwYWNtYW46OnBfbG9hZCh0aWR5dmVyc2UsIHRpZHltb2RlbHMsIERhdGFFeHBsb3JlciwgdGhlbWlzLCBoZXJlKQpgYGAKCk5vdywgbGV0J3MgaGl0IHRoZSBncm91bmQgcnVubmluZyEKCiMjIDEuIFNwbGl0IHRoZSBkYXRhIGludG8gdHJhaW5pbmcgYW5kIHRlc3Qgc2V0cy4KCldlJ2xsIHN0YXJ0IGJ5IHBpY2tpbmcgYSBmZXcgc3RlcHMgZnJvbSBvdXIgcHJldmlvdXMgbGVzc29uLgoKIyMjIERyb3AgdGhlIG1vc3QgY29tbW9uIGluZ3JlZGllbnRzIHRoYXQgY3JlYXRlIGNvbmZ1c2lvbiBiZXR3ZWVuIGRpc3RpbmN0IGN1aXNpbmVzLCB1c2luZyBgZHBseXI6OnNlbGVjdCgpYC4KCkV2ZXJ5b25lIGxvdmVzIHJpY2UsIGdhcmxpYyBhbmQgZ2luZ2VyIQoKYGBge3IgcmVjYXBfZHJvcH0KIyBMb2FkIHRoZSBvcmlnaW5hbCBjdWlzaW5lcyBkYXRhCmRmIDwtIHJlYWRfY3N2KGZpbGUgPSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21pY3Jvc29mdC9NTC1Gb3ItQmVnaW5uZXJzL21haW4vNC1DbGFzc2lmaWNhdGlvbi9kYXRhL2N1aXNpbmVzLmNzdiIpCgojIERyb3AgaWQgY29sdW1uLCByaWNlLCBnYXJsaWMgYW5kIGdpbmdlciBmcm9tIG91ciBvcmlnaW5hbCBkYXRhIHNldApkZl9zZWxlY3QgPC0gZGYgJT4lIAogIHNlbGVjdCgtYygxLCByaWNlLCBnYXJsaWMsIGdpbmdlcikpICU+JQogICMgRW5jb2RlIGN1aXNpbmUgY29sdW1uIGFzIGNhdGVnb3JpY2FsCiAgbXV0YXRlKGN1aXNpbmUgPSBmYWN0b3IoY3Vpc2luZSkpCgojIERpc3BsYXkgbmV3IGRhdGEgc2V0CmRmX3NlbGVjdCAlPiUgCiAgc2xpY2VfaGVhZChuID0gNSkKCiMgRGlzcGxheSBkaXN0cmlidXRpb24gb2YgY3Vpc2luZXMKZGZfc2VsZWN0ICU+JSAKICBjb3VudChjdWlzaW5lKSAlPiUgCiAgYXJyYW5nZShkZXNjKG4pKQpgYGAKClBlcmZlY3QhIE5vdywgdGltZSB0byBzcGxpdCB0aGUgZGF0YSBzdWNoIHRoYXQgNzAlIG9mIHRoZSBkYXRhIGdvZXMgdG8gdHJhaW5pbmcgYW5kIDMwJSBnb2VzIHRvIHRlc3RpbmcuIFdlJ2xsIGFsc28gYXBwbHkgYSBgc3RyYXRpZmljYXRpb25gIHRlY2huaXF1ZSB3aGVuIHNwbGl0dGluZyB0aGUgZGF0YSB0byBgbWFpbnRhaW4gdGhlIHByb3BvcnRpb24gb2YgZWFjaCBjdWlzaW5lYCBpbiB0aGUgdHJhaW5pbmcgYW5kIHZhbGlkYXRpb24gZGF0YXNldHMuCgpbcnNhbXBsZV0oaHR0cHM6Ly9yc2FtcGxlLnRpZHltb2RlbHMub3JnLyksIGEgcGFja2FnZSBpbiBUaWR5bW9kZWxzLCBwcm92aWRlcyBpbmZyYXN0cnVjdHVyZSBmb3IgZWZmaWNpZW50IGRhdGEgc3BsaXR0aW5nIGFuZCByZXNhbXBsaW5nOgoKYGBge3IgZGF0YV9zcGxpdH0KIyBMb2FkIHRoZSBjb3JlIFRpZHltb2RlbHMgcGFja2FnZXMgaW50byBSIHNlc3Npb24KbGlicmFyeSh0aWR5bW9kZWxzKQoKIyBDcmVhdGUgc3BsaXQgc3BlY2lmaWNhdGlvbgpzZXQuc2VlZCgyMDU2KQpjdWlzaW5lc19zcGxpdCA8LSBpbml0aWFsX3NwbGl0KGRhdGEgPSBkZl9zZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRhID0gY3Vpc2luZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gMC43KQoKIyBFeHRyYWN0IHRoZSBkYXRhIGluIGVhY2ggc3BsaXQKY3Vpc2luZXNfdHJhaW4gPC0gdHJhaW5pbmcoY3Vpc2luZXNfc3BsaXQpCmN1aXNpbmVzX3Rlc3QgPC0gdGVzdGluZyhjdWlzaW5lc19zcGxpdCkKCiMgUHJpbnQgdGhlIG51bWJlciBvZiBjYXNlcyBpbiBlYWNoIHNwbGl0CmNhdCgiVHJhaW5pbmcgY2FzZXM6ICIsIG5yb3coY3Vpc2luZXNfdHJhaW4pLCAiXG4iLAogICAgIlRlc3QgY2FzZXM6ICIsIG5yb3coY3Vpc2luZXNfdGVzdCksIHNlcCA9ICIiKQoKIyBEaXNwbGF5IHRoZSBmaXJzdCBmZXcgcm93cyBvZiB0aGUgdHJhaW5pbmcgc2V0CmN1aXNpbmVzX3RyYWluICU+JSAKICBzbGljZV9oZWFkKG4gPSA1KQoKCiMgRGlzcGxheSBkaXN0cmlidXRpb24gb2YgY3Vpc2luZXMgaW4gdGhlIHRyYWluaW5nIHNldApjdWlzaW5lc190cmFpbiAlPiUgCiAgY291bnQoY3Vpc2luZSkgJT4lIAogIGFycmFuZ2UoZGVzYyhuKSkKCgpgYGAKCiMjIDIuIERlYWwgd2l0aCBpbWJhbGFuY2VkIGRhdGEKCkFzIHlvdSBtaWdodCBoYXZlIG5vdGljZWQgaW4gdGhlIG9yaWdpbmFsIGRhdGEgc2V0IGFzIHdlbGwgYXMgaW4gb3VyIHRyYWluaW5nIHNldCwgdGhlcmUgaXMgcXVpdGUgYW4gdW5lcXVhbCBkaXN0cmlidXRpb24gaW4gdGhlIG51bWJlciBvZiBjdWlzaW5lcy4gS29yZWFuIGN1aXNpbmVzIGFyZSAqYWxtb3N0KiAzIHRpbWVzIFRoYWkgY3Vpc2luZXMuIEltYmFsYW5jZWQgZGF0YSBvZnRlbiBoYXMgbmVnYXRpdmUgZWZmZWN0cyBvbiB0aGUgbW9kZWwgcGVyZm9ybWFuY2UuIE1hbnkgbW9kZWxzIHBlcmZvcm0gYmVzdCB3aGVuIHRoZSBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zIGlzIGVxdWFsIGFuZCwgdGh1cywgdGVuZCB0byBzdHJ1Z2dsZSB3aXRoIHVuYmFsYW5jZWQgZGF0YS4KClRoZXJlIGFyZSBtYWpvcmx5IHR3byB3YXlzIG9mIGRlYWxpbmcgd2l0aCBpbWJhbGFuY2VkIGRhdGEgc2V0czoKCi0gICBhZGRpbmcgb2JzZXJ2YXRpb25zIHRvIHRoZSBtaW5vcml0eSBjbGFzczogYE92ZXItc2FtcGxpbmdgIGUuZyB1c2luZyBhIFNNT1RFIGFsZ29yaXRobSB3aGljaCBzeW50aGV0aWNhbGx5IGdlbmVyYXRlcyBuZXcgZXhhbXBsZXMgb2YgdGhlIG1pbm9yaXR5IGNsYXNzIHVzaW5nIG5lYXJlc3QgbmVpZ2hib3JzIG9mIHRoZXNlIGNhc2VzLgoKLSAgIHJlbW92aW5nIG9ic2VydmF0aW9ucyBmcm9tIG1ham9yaXR5IGNsYXNzOiBgVW5kZXItc2FtcGxpbmdgCgpJbiBvdXIgcHJldmlvdXMgbGVzc29uLCB3ZSBkZW1vbnN0cmF0ZWQgaG93IHRvIGRlYWwgd2l0aCBpbWJhbGFuY2VkIGRhdGEgc2V0cyB1c2luZyBhIGByZWNpcGVgLiBBIHJlY2lwZSBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIGJsdWVwcmludCB0aGF0IGRlc2NyaWJlcyB3aGF0IHN0ZXBzIHNob3VsZCBiZSBhcHBsaWVkIHRvIGEgZGF0YSBzZXQgaW4gb3JkZXIgdG8gZ2V0IGl0IHJlYWR5IGZvciBkYXRhIGFuYWx5c2lzLiBJbiBvdXIgY2FzZSwgd2Ugd2FudCB0byBoYXZlIGFuIGVxdWFsIGRpc3RyaWJ1dGlvbiBpbiB0aGUgbnVtYmVyIG9mIG91ciBjdWlzaW5lcyBmb3Igb3VyIGB0cmFpbmluZyBzZXRgLiBMZXQncyBnZXQgcmlnaHQgaW50byBpdC4KCmBgYHtyIHJlY2FwX2JhbGFuY2V9CiMgTG9hZCB0aGVtaXMgcGFja2FnZSBmb3IgZGVhbGluZyB3aXRoIGltYmFsYW5jZWQgZGF0YQpsaWJyYXJ5KHRoZW1pcykKCiMgQ3JlYXRlIGEgcmVjaXBlIGZvciBwcmVwcm9jZXNzaW5nIHRyYWluaW5nIGRhdGEKY3Vpc2luZXNfcmVjaXBlIDwtIHJlY2lwZShjdWlzaW5lIH4gLiwgZGF0YSA9IGN1aXNpbmVzX3RyYWluKSAlPiUgCiAgc3RlcF9zbW90ZShjdWlzaW5lKQoKIyBQcmludCByZWNpcGUKY3Vpc2luZXNfcmVjaXBlCgpgYGAKCllvdSBjYW4gb2YgY291cnNlIGdvIGFoZWFkIGFuZCBjb25maXJtICh1c2luZyBwcmVwK2Jha2UpIHRoYXQgdGhlIHJlY2lwZSB3aWxsIHdvcmsgYXMgeW91IGV4cGVjdCBpdCAtIGFsbCB0aGUgY3Vpc2luZSBsYWJlbHMgaGF2aW5nIGA1NTlgIG9ic2VydmF0aW9ucy4KClNpbmNlIHdlJ2xsIGJlIHVzaW5nIHRoaXMgcmVjaXBlIGFzIGEgcHJlcHJvY2Vzc29yIGZvciBtb2RlbGluZywgYSBgd29ya2Zsb3coKWAgd2lsbCBkbyBhbGwgdGhlIHByZXAgYW5kIGJha2UgZm9yIHVzLCBzbyB3ZSB3b24ndCBoYXZlIHRvIG1hbnVhbGx5IGVzdGltYXRlIHRoZSByZWNpcGUuCgpOb3cgd2UgYXJlIHJlYWR5IHRvIHRyYWluIGEgbW9kZWwg8J+RqeKAjfCfkrvwn5Go4oCN8J+SuyEKCiMjIDMuIENob29zaW5nIHlvdXIgY2xhc3NpZmllcgoKIVtBcnR3b3JrIGJ5IFxAYWxsaXNvbl9ob3JzdF0oLi4vLi4vaW1hZ2VzL3BhcnNuaXAuanBnKXt3aWR0aD0iNjAwIn0KCk5vdyB3ZSBoYXZlIHRvIGRlY2lkZSB3aGljaCBhbGdvcml0aG0gdG8gdXNlIGZvciB0aGUgam9iIPCfpJQuCgpJbiBUaWR5bW9kZWxzLCB0aGUgW2BwYXJzbmlwIHBhY2thZ2VgXShodHRwczovL3BhcnNuaXAudGlkeW1vZGVscy5vcmcvaW5kZXguaHRtbCkgcHJvdmlkZXMgY29uc2lzdGVudCBpbnRlcmZhY2UgZm9yIHdvcmtpbmcgd2l0aCBtb2RlbHMgYWNyb3NzIGRpZmZlcmVudCBlbmdpbmVzIChwYWNrYWdlcykuIFBsZWFzZSBzZWUgdGhlIHBhcnNuaXAgZG9jdW1lbnRhdGlvbiB0byBleHBsb3JlIFttb2RlbCB0eXBlcyAmIGVuZ2luZXNdKGh0dHBzOi8vd3d3LnRpZHltb2RlbHMub3JnL2ZpbmQvcGFyc25pcC8jbW9kZWxzKSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBbbW9kZWwgYXJndW1lbnRzXShodHRwczovL3d3dy50aWR5bW9kZWxzLm9yZy9maW5kL3BhcnNuaXAvI21vZGVsLWFyZ3MpLiBUaGUgdmFyaWV0eSBpcyBxdWl0ZSBiZXdpbGRlcmluZyBhdCBmaXJzdCBzaWdodC4gRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYWxsIGluY2x1ZGUgY2xhc3NpZmljYXRpb24gdGVjaG5pcXVlczoKCi0gICBDNS4wIFJ1bGUtQmFzZWQgQ2xhc3NpZmljYXRpb24gTW9kZWxzCgotICAgRmxleGlibGUgRGlzY3JpbWluYW50IE1vZGVscwoKLSAgIExpbmVhciBEaXNjcmltaW5hbnQgTW9kZWxzCgotICAgUmVndWxhcml6ZWQgRGlzY3JpbWluYW50IE1vZGVscwoKLSAgIExvZ2lzdGljIFJlZ3Jlc3Npb24gTW9kZWxzCgotICAgTXVsdGlub21pYWwgUmVncmVzc2lvbiBNb2RlbHMKCi0gICBOYWl2ZSBCYXllcyBNb2RlbHMKCi0gICBTdXBwb3J0IFZlY3RvciBNYWNoaW5lcwoKLSAgIE5lYXJlc3QgTmVpZ2hib3JzCgotICAgRGVjaXNpb24gVHJlZXMKCi0gICBFbnNlbWJsZSBtZXRob2RzCgotICAgTmV1cmFsIE5ldHdvcmtzCgpUaGUgbGlzdCBnb2VzIG9uIQoKIyMjICoqV2hhdCBjbGFzc2lmaWVyIHRvIGdvIHdpdGg/KioKClNvLCB3aGljaCBjbGFzc2lmaWVyIHNob3VsZCB5b3UgY2hvb3NlPyBPZnRlbiwgcnVubmluZyB0aHJvdWdoIHNldmVyYWwgYW5kIGxvb2tpbmcgZm9yIGEgZ29vZCByZXN1bHQgaXMgYSB3YXkgdG8gdGVzdC4KCj4gQXV0b01MIHNvbHZlcyB0aGlzIHByb2JsZW0gbmVhdGx5IGJ5IHJ1bm5pbmcgdGhlc2UgY29tcGFyaXNvbnMgaW4gdGhlIGNsb3VkLCBhbGxvd2luZyB5b3UgdG8gY2hvb3NlIHRoZSBiZXN0IGFsZ29yaXRobSBmb3IgeW91ciBkYXRhLiBUcnkgaXQgW2hlcmVdKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2xlYXJuL21vZHVsZXMvYXV0b21hdGUtbW9kZWwtc2VsZWN0aW9uLXdpdGgtYXp1cmUtYXV0b21sLz9XVC5tY19pZD1hY2FkZW1pYy03Nzk1Mi1sZWVzdG90dCkKCkFsc28gdGhlIGNob2ljZSBvZiBjbGFzc2lmaWVyIGRlcGVuZHMgb24gb3VyIHByb2JsZW0uIEZvciBpbnN0YW5jZSwgd2hlbiB0aGUgb3V0Y29tZSBjYW4gYmUgY2F0ZWdvcml6ZWQgaW50byBgbW9yZSB0aGFuIHR3byBjbGFzc2VzYCwgbGlrZSBpbiBvdXIgY2FzZSwgeW91IG11c3QgdXNlIGEgYG11bHRpY2xhc3MgY2xhc3NpZmljYXRpb24gYWxnb3JpdGhtYCBhcyBvcHBvc2VkIHRvIGBiaW5hcnkgY2xhc3NpZmljYXRpb24uYAoKIyMjICoqQSBiZXR0ZXIgYXBwcm9hY2gqKgoKQSBiZXR0ZXIgd2F5IHRoYW4gd2lsZGx5IGd1ZXNzaW5nLCBob3dldmVyLCBpcyB0byBmb2xsb3cgdGhlIGlkZWFzIG9uIHRoaXMgZG93bmxvYWRhYmxlIFtNTCBDaGVhdCBzaGVldF0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvbWFjaGluZS1sZWFybmluZy9hbGdvcml0aG0tY2hlYXQtc2hlZXQ/V1QubWNfaWQ9YWNhZGVtaWMtNzc5NTItbGVlc3RvdHQpLiBIZXJlLCB3ZSBkaXNjb3ZlciB0aGF0LCBmb3Igb3VyIG11bHRpY2xhc3MgcHJvYmxlbSwgd2UgaGF2ZSBzb21lIGNob2ljZXM6CgohW0Egc2VjdGlvbiBvZiBNaWNyb3NvZnQncyBBbGdvcml0aG0gQ2hlYXQgU2hlZXQsIGRldGFpbGluZyBtdWx0aWNsYXNzIGNsYXNzaWZpY2F0aW9uIG9wdGlvbnNdKC4uLy4uL2ltYWdlcy9jaGVhdHNoZWV0LnBuZyl7d2lkdGg9IjUwMCJ9CgojIyMgKipSZWFzb25pbmcqKgoKTGV0J3Mgc2VlIGlmIHdlIGNhbiByZWFzb24gb3VyIHdheSB0aHJvdWdoIGRpZmZlcmVudCBhcHByb2FjaGVzIGdpdmVuIHRoZSBjb25zdHJhaW50cyB3ZSBoYXZlOgoKLSAgICoqRGVlcCBOZXVyYWwgbmV0d29ya3MgYXJlIHRvbyBoZWF2eSoqLiBHaXZlbiBvdXIgY2xlYW4sIGJ1dCBtaW5pbWFsIGRhdGFzZXQsIGFuZCB0aGUgZmFjdCB0aGF0IHdlIGFyZSBydW5uaW5nIHRyYWluaW5nIGxvY2FsbHkgdmlhIG5vdGVib29rcywgZGVlcCBuZXVyYWwgbmV0d29ya3MgYXJlIHRvbyBoZWF2eXdlaWdodCBmb3IgdGhpcyB0YXNrLgoKLSAgICoqTm8gdHdvLWNsYXNzIGNsYXNzaWZpZXIqKi4gV2UgZG8gbm90IHVzZSBhIHR3by1jbGFzcyBjbGFzc2lmaWVyLCBzbyB0aGF0IHJ1bGVzIG91dCBvbmUtdnMtYWxsLgoKLSAgICoqRGVjaXNpb24gdHJlZSBvciBsb2dpc3RpYyByZWdyZXNzaW9uIGNvdWxkIHdvcmsqKi4gQSBkZWNpc2lvbiB0cmVlIG1pZ2h0IHdvcmssIG9yIG11bHRpbm9taWFsIHJlZ3Jlc3Npb24vbXVsdGljbGFzcyBsb2dpc3RpYyByZWdyZXNzaW9uIGZvciBtdWx0aWNsYXNzIGRhdGEuCgotICAgKipNdWx0aWNsYXNzIEJvb3N0ZWQgRGVjaXNpb24gVHJlZXMgc29sdmUgYSBkaWZmZXJlbnQgcHJvYmxlbSoqLiBUaGUgbXVsdGljbGFzcyBib29zdGVkIGRlY2lzaW9uIHRyZWUgaXMgbW9zdCBzdWl0YWJsZSBmb3Igbm9ucGFyYW1ldHJpYyB0YXNrcywgZS5nLiB0YXNrcyBkZXNpZ25lZCB0byBidWlsZCByYW5raW5ncywgc28gaXQgaXMgbm90IHVzZWZ1bCBmb3IgdXMuCgpBbHNvLCBub3JtYWxseSBiZWZvcmUgZW1iYXJraW5nIG9uIG1vcmUgY29tcGxleCBtYWNoaW5lIGxlYXJuaW5nIG1vZGVscyBlLmcgZW5zZW1ibGUgbWV0aG9kcywgaXQncyBhIGdvb2QgaWRlYSB0byBidWlsZCB0aGUgc2ltcGxlc3QgcG9zc2libGUgbW9kZWwgdG8gZ2V0IGFuIGlkZWEgb2Ygd2hhdCBpcyBnb2luZyBvbi4gU28gZm9yIHRoaXMgbGVzc29uLCB3ZSdsbCBzdGFydCB3aXRoIGEgYG11bHRpbm9taWFsIGxvZ2lzdGljIHJlZ3Jlc3Npb25gIG1vZGVsLgoKPiBMb2dpc3RpYyByZWdyZXNzaW9uIGlzIGEgdGVjaG5pcXVlIHVzZWQgd2hlbiB0aGUgb3V0Y29tZSB2YXJpYWJsZSBpcyBjYXRlZ29yaWNhbCAob3Igbm9taW5hbCkuIEZvciBCaW5hcnkgbG9naXN0aWMgcmVncmVzc2lvbiB0aGUgbnVtYmVyIG9mIG91dGNvbWUgdmFyaWFibGVzIGlzIHR3bywgd2hlcmVhcyB0aGUgbnVtYmVyIG9mIG91dGNvbWUgdmFyaWFibGVzIGZvciBtdWx0aW5vbWlhbCBsb2dpc3RpYyByZWdyZXNzaW9uIGlzIG1vcmUgdGhhbiB0d28uIFNlZSBbQWR2YW5jZWQgUmVncmVzc2lvbiBNZXRob2RzXShodHRwczovL2Jvb2tkb3duLm9yZy9jaHVhL2JlcjY0Ml9hZHZhbmNlZF9yZWdyZXNzaW9uL211bHRpbm9taWFsLWxvZ2lzdGljLXJlZ3Jlc3Npb24uaHRtbCkgZm9yIGZ1cnRoZXIgcmVhZGluZy4KCiMjIDQuIFRyYWluIGFuZCBldmFsdWF0ZSBhIE11bHRpbm9taWFsIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWwuCgpJbiBUaWR5bW9kZWxzLCBgcGFyc25pcDo6bXVsdGlub21fcmVnKClgLCBkZWZpbmVzIGEgbW9kZWwgdGhhdCB1c2VzIGxpbmVhciBwcmVkaWN0b3JzIHRvIHByZWRpY3QgbXVsdGljbGFzcyBkYXRhIHVzaW5nIHRoZSBtdWx0aW5vbWlhbCBkaXN0cmlidXRpb24uIFNlZSBgP211bHRpbm9tX3JlZygpYCBmb3IgdGhlIGRpZmZlcmVudCB3YXlzL2VuZ2luZXMgeW91IGNhbiB1c2UgdG8gZml0IHRoaXMgbW9kZWwuCgpGb3IgdGhpcyBleGFtcGxlLCB3ZSdsbCBmaXQgYSBNdWx0aW5vbWlhbCByZWdyZXNzaW9uIG1vZGVsIHZpYSB0aGUgZGVmYXVsdCBbbm5ldF0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL25uZXQvbm5ldC5wZGYpIGVuZ2luZS4KCj4gSSBwaWNrZWQgYSB2YWx1ZSBmb3IgYHBlbmFsdHlgIHNvcnQgb2YgcmFuZG9tbHkuIFRoZXJlIGFyZSBiZXR0ZXIgd2F5cyB0byBjaG9vc2UgdGhpcyB2YWx1ZSB0aGF0IGlzLCBieSB1c2luZyBgcmVzYW1wbGluZ2AgYW5kIGB0dW5pbmdgIHRoZSBtb2RlbCB3aGljaCB3ZSdsbCBkaXNjdXNzIGxhdGVyLgo+Cj4gU2VlIFtUaWR5bW9kZWxzOiBHZXQgU3RhcnRlZF0oaHR0cHM6Ly93d3cudGlkeW1vZGVscy5vcmcvc3RhcnQvdHVuaW5nLykgaW4gY2FzZSB5b3Ugd2FudCB0byBsZWFybiBtb3JlIG9uIGhvdyB0byB0dW5lIG1vZGVsIGh5cGVycGFyYW1ldGVycy4KCmBgYHtyIG11bHRpbm9ybV9yZWd9CiMgQ3JlYXRlIGEgbXVsdGlub21pYWwgcmVncmVzc2lvbiBtb2RlbCBzcGVjaWZpY2F0aW9uCm1yX3NwZWMgPC0gbXVsdGlub21fcmVnKHBlbmFsdHkgPSAxKSAlPiUgCiAgc2V0X2VuZ2luZSgibm5ldCIsIE1heE5XdHMgPSAyMDg2KSAlPiUgCiAgc2V0X21vZGUoImNsYXNzaWZpY2F0aW9uIikKCiMgUHJpbnQgbW9kZWwgc3BlY2lmaWNhdGlvbgptcl9zcGVjCgpgYGAKCkdyZWF0IGpvYiDwn6WzISBOb3cgdGhhdCB3ZSBoYXZlIGEgcmVjaXBlIGFuZCBhIG1vZGVsIHNwZWNpZmljYXRpb24sIHdlIG5lZWQgdG8gZmluZCBhIHdheSBvZiBidW5kbGluZyB0aGVtIHRvZ2V0aGVyIGludG8gYW4gb2JqZWN0IHRoYXQgd2lsbCBmaXJzdCBwcmVwcm9jZXNzIHRoZSBkYXRhIHRoZW4gZml0IHRoZSBtb2RlbCBvbiB0aGUgcHJlcHJvY2Vzc2VkIGRhdGEgYW5kIGFsc28gYWxsb3cgZm9yIHBvdGVudGlhbCBwb3N0LXByb2Nlc3NpbmcgYWN0aXZpdGllcy4gSW4gVGlkeW1vZGVscywgdGhpcyBjb252ZW5pZW50IG9iamVjdCBpcyBjYWxsZWQgYSBbYHdvcmtmbG93YF0oaHR0cHM6Ly93b3JrZmxvd3MudGlkeW1vZGVscy5vcmcvKSBhbmQgY29udmVuaWVudGx5IGhvbGRzIHlvdXIgbW9kZWxpbmcgY29tcG9uZW50cyEgVGhpcyBpcyB3aGF0IHdlJ2QgY2FsbCAqcGlwZWxpbmVzKiBpbiAqUHl0aG9uKi4KClNvIGxldCdzIGJ1bmRsZSBldmVyeXRoaW5nIHVwIGludG8gYSB3b3JrZmxvdyHwn5OmCgpgYGB7ciB3b3JrZmxvd30KIyBCdW5kbGUgcmVjaXBlIGFuZCBtb2RlbCBzcGVjaWZpY2F0aW9uCm1yX3dmIDwtIHdvcmtmbG93KCkgJT4lIAogIGFkZF9yZWNpcGUoY3Vpc2luZXNfcmVjaXBlKSAlPiUgCiAgYWRkX21vZGVsKG1yX3NwZWMpCgojIFByaW50IG91dCB3b3JrZmxvdwptcl93ZgoKYGBgCgpXb3JrZmxvd3Mg8J+RjPCfkYwhIEEgKipgd29ya2Zsb3coKWAqKiBjYW4gYmUgZml0IGluIG11Y2ggdGhlIHNhbWUgd2F5IGEgbW9kZWwgY2FuLiBTbywgdGltZSB0byB0cmFpbiBhIG1vZGVsIQoKYGBge3IgdHJhaW59CiMgVHJhaW4gYSBtdWx0aW5vbWlhbCByZWdyZXNzaW9uIG1vZGVsCm1yX2ZpdCA8LSBmaXQob2JqZWN0ID0gbXJfd2YsIGRhdGEgPSBjdWlzaW5lc190cmFpbikKCm1yX2ZpdApgYGAKClRoZSBvdXRwdXQgc2hvd3MgdGhlIGNvZWZmaWNpZW50cyB0aGF0IHRoZSBtb2RlbCBsZWFybmVkIGR1cmluZyB0cmFpbmluZy4KCiMjIyBFdmFsdWF0ZSB0aGUgVHJhaW5lZCBNb2RlbAoKSXQncyB0aW1lIHRvIHNlZSBob3cgdGhlIG1vZGVsIHBlcmZvcm1lZCDwn5OPIGJ5IGV2YWx1YXRpbmcgaXQgb24gYSB0ZXN0IHNldCEgTGV0J3MgYmVnaW4gYnkgbWFraW5nIHByZWRpY3Rpb25zIG9uIHRoZSB0ZXN0IHNldC4KCmBgYHtyIHRlc3R9CiMgTWFrZSBwcmVkaWN0aW9ucyBvbiB0aGUgdGVzdCBzZXQKcmVzdWx0cyA8LSBjdWlzaW5lc190ZXN0ICU+JSBzZWxlY3QoY3Vpc2luZSkgJT4lIAogIGJpbmRfY29scyhtcl9maXQgJT4lIHByZWRpY3QobmV3X2RhdGEgPSBjdWlzaW5lc190ZXN0KSkKCiMgUHJpbnQgb3V0IHJlc3VsdHMKcmVzdWx0cyAlPiUgCiAgc2xpY2VfaGVhZChuID0gNSkKCmBgYAoKR3JlYXQgam9iISBJbiBUaWR5bW9kZWxzLCBldmFsdWF0aW5nIG1vZGVsIHBlcmZvcm1hbmNlIGNhbiBiZSBkb25lIHVzaW5nIFt5YXJkc3RpY2tdKGh0dHBzOi8veWFyZHN0aWNrLnRpZHltb2RlbHMub3JnLykgLSBhIHBhY2thZ2UgdXNlZCB0byBtZWFzdXJlIHRoZSBlZmZlY3RpdmVuZXNzIG9mIG1vZGVscyB1c2luZyBwZXJmb3JtYW5jZSBtZXRyaWNzLiBBcyB3ZSBkaWQgaW4gb3VyIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbGVzc29uLCBsZXQncyBiZWdpbiBieSBjb21wdXRpbmcgYSBjb25mdXNpb24gbWF0cml4LgoKYGBge3IgY29uZl9tYXR9CiMgQ29uZnVzaW9uIG1hdHJpeCBmb3IgY2F0ZWdvcmljYWwgZGF0YQpjb25mX21hdChkYXRhID0gcmVzdWx0cywgdHJ1dGggPSBjdWlzaW5lLCBlc3RpbWF0ZSA9IC5wcmVkX2NsYXNzKQoKCmBgYAoKV2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgY2xhc3NlcywgaXQncyBnZW5lcmFsbHkgbW9yZSBpbnR1aXRpdmUgdG8gdmlzdWFsaXplIHRoaXMgYXMgYSBoZWF0IG1hcCwgbGlrZSB0aGlzOgoKYGBge3IgY29uZl92aXp9CnVwZGF0ZV9nZW9tX2RlZmF1bHRzKGdlb20gPSAidGlsZSIsIG5ldyA9IGxpc3QoY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNykpCiMgVmlzdWFsaXplIGNvbmZ1c2lvbiBtYXRyaXgKcmVzdWx0cyAlPiUgCiAgY29uZl9tYXQoY3Vpc2luZSwgLnByZWRfY2xhc3MpICU+JSAKICBhdXRvcGxvdCh0eXBlID0gImhlYXRtYXAiKQpgYGAKClRoZSBkYXJrZXIgc3F1YXJlcyBpbiB0aGUgY29uZnVzaW9uIG1hdHJpeCBwbG90IGluZGljYXRlIGhpZ2ggbnVtYmVycyBvZiBjYXNlcywgYW5kIHlvdSBjYW4gaG9wZWZ1bGx5IHNlZSBhIGRpYWdvbmFsIGxpbmUgb2YgZGFya2VyIHNxdWFyZXMgaW5kaWNhdGluZyBjYXNlcyB3aGVyZSB0aGUgcHJlZGljdGVkIGFuZCBhY3R1YWwgbGFiZWwgYXJlIHRoZSBzYW1lLgoKTGV0J3Mgbm93IGNhbGN1bGF0ZSBzdW1tYXJ5IHN0YXRpc3RpY3MgZm9yIHRoZSBjb25mdXNpb24gbWF0cml4LgoKYGBge3IgY29uZl9zdGF0c30KIyBTdW1tYXJ5IHN0YXRzIGZvciBjb25mdXNpb24gbWF0cml4CmNvbmZfbWF0KGRhdGEgPSByZXN1bHRzLCB0cnV0aCA9IGN1aXNpbmUsIGVzdGltYXRlID0gLnByZWRfY2xhc3MpICU+JSBzdW1tYXJ5KCkKYGBgCgpJZiB3ZSBuYXJyb3cgZG93biB0byBzb21lIG1ldHJpY3Mgc3VjaCBhcyBhY2N1cmFjeSwgc2Vuc2l0aXZpdHksIHBwdiwgd2UgYXJlIG5vdCBiYWRseSBvZmYgZm9yIGEgc3RhcnQg8J+lsyEKCiMjIDQuIERpZ2dpbmcgRGVlcGVyCgpMZXQncyBhc2sgb25lIHN1YnRsZSBxdWVzdGlvbjogV2hhdCBjcml0ZXJpYSBpcyB1c2VkIHRvIHNldHRsZSBmb3IgYSBnaXZlbiB0eXBlIG9mIGN1aXNpbmUgYXMgdGhlIHByZWRpY3RlZCBvdXRjb21lPwoKV2VsbCwgU3RhdGlzdGljYWwgbWFjaGluZSBsZWFybmluZyBhbGdvcml0aG1zLCBsaWtlIGxvZ2lzdGljIHJlZ3Jlc3Npb24sIGFyZSBiYXNlZCBvbiBgcHJvYmFiaWxpdHlgOyBzbyB3aGF0IGFjdHVhbGx5IGdldHMgcHJlZGljdGVkIGJ5IGEgY2xhc3NpZmllciBpcyBhIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBvdmVyIGEgc2V0IG9mIHBvc3NpYmxlIG91dGNvbWVzLiBUaGUgY2xhc3Mgd2l0aCB0aGUgaGlnaGVzdCBwcm9iYWJpbGl0eSBpcyB0aGVuIGNob3NlbiBhcyB0aGUgbW9zdCBsaWtlbHkgb3V0Y29tZSBmb3IgdGhlIGdpdmVuIG9ic2VydmF0aW9ucy4KCkxldCdzIHNlZSB0aGlzIGluIGFjdGlvbiBieSBtYWtpbmcgYm90aCBoYXJkIGNsYXNzIHByZWRpY3Rpb25zIGFuZCBwcm9iYWJpbGl0aWVzLgoKYGBge3IgcHJlZF9wcm9ifQojIE1ha2UgaGFyZCBjbGFzcyBwcmVkaWN0aW9uIGFuZCBwcm9iYWJpbGl0aWVzCnJlc3VsdHNfcHJvYiA8LSBjdWlzaW5lc190ZXN0ICU+JQogIHNlbGVjdChjdWlzaW5lKSAlPiUgCiAgYmluZF9jb2xzKG1yX2ZpdCAlPiUgcHJlZGljdChuZXdfZGF0YSA9IGN1aXNpbmVzX3Rlc3QpKSAlPiUgCiAgYmluZF9jb2xzKG1yX2ZpdCAlPiUgcHJlZGljdChuZXdfZGF0YSA9IGN1aXNpbmVzX3Rlc3QsIHR5cGUgPSAicHJvYiIpKQoKIyBQcmludCBvdXQgcmVzdWx0cwpyZXN1bHRzX3Byb2IgJT4lIAogIHNsaWNlX2hlYWQobiA9IDUpCiAgCgpgYGAKCk11Y2ggYmV0dGVyIQoK4pyFIENhbiB5b3UgZXhwbGFpbiB3aHkgdGhlIG1vZGVsIGlzIHByZXR0eSBzdXJlIHRoYXQgdGhlIGZpcnN0IG9ic2VydmF0aW9uIGlzIFRoYWk/CgojIyAqKvCfmoBDaGFsbGVuZ2UqKgoKSW4gdGhpcyBsZXNzb24sIHlvdSB1c2VkIHlvdXIgY2xlYW5lZCBkYXRhIHRvIGJ1aWxkIGEgbWFjaGluZSBsZWFybmluZyBtb2RlbCB0aGF0IGNhbiBwcmVkaWN0IGEgbmF0aW9uYWwgY3Vpc2luZSBiYXNlZCBvbiBhIHNlcmllcyBvZiBpbmdyZWRpZW50cy4gVGFrZSBzb21lIHRpbWUgdG8gcmVhZCB0aHJvdWdoIHRoZSBbbWFueSBvcHRpb25zXShodHRwczovL3d3dy50aWR5bW9kZWxzLm9yZy9maW5kL3BhcnNuaXAvI21vZGVscykgVGlkeW1vZGVscyBwcm92aWRlcyB0byBjbGFzc2lmeSBkYXRhIGFuZCBbb3RoZXIgd2F5c10oaHR0cHM6Ly9wYXJzbmlwLnRpZHltb2RlbHMub3JnL2FydGljbGVzL2FydGljbGVzL0V4YW1wbGVzLmh0bWwjbXVsdGlub21fcmVnLW1vZGVscykgdG8gZml0IG11bHRpbm9taWFsIHJlZ3Jlc3Npb24uCgojIyMjIFRIQU5LIFlPVSBUTzoKCltgQWxsaXNvbiBIb3JzdGBdKGh0dHBzOi8vdHdpdHRlci5jb20vYWxsaXNvbl9ob3JzdC8pIGZvciBjcmVhdGluZyB0aGUgYW1hemluZyBpbGx1c3RyYXRpb25zIHRoYXQgbWFrZSBSIG1vcmUgd2VsY29taW5nIGFuZCBlbmdhZ2luZy4gRmluZCBtb3JlIGlsbHVzdHJhdGlvbnMgYXQgaGVyIFtnYWxsZXJ5XShodHRwczovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHBzOi8vZ2l0aHViLmNvbS9hbGxpc29uaG9yc3Qvc3RhdHMtaWxsdXN0cmF0aW9ucyZzYT1EJnNvdXJjZT1lZGl0b3JzJnVzdD0xNjI2MzgwNzcyNTMwMDAwJnVzZz1BT3ZWYXczemNmeUNpekZRWnBrU0x6eGlpUUVNKS4KCltDYXNzaWUgQnJldml1XShodHRwczovL3d3dy50d2l0dGVyLmNvbS9jYXNzaWV2aWV3KSBhbmQgW0plbiBMb29wZXJdKGh0dHBzOi8vd3d3LnR3aXR0ZXIuY29tL2plbmxvb3BlcikgZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbCBQeXRob24gdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSDimaXvuI8KCkhhcHB5IExlYXJuaW5nLAoKW0VyaWNdKGh0dHBzOi8vdHdpdHRlci5jb20vZXJpY250YXkpLCBHb2xkIE1pY3Jvc29mdCBMZWFybiBTdHVkZW50IEFtYmFzc2Fkb3IuCg==
+LS0tCnRpdGxlOiAnQnVpbGQgYSBjbGFzc2lmaWNhdGlvbiBtb2RlbDogRGVsaWNpb3VzIEFzaWFuIGFuZCBJbmRpYW4gQ3Vpc2luZXMnCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0aGVtZTogZmxhdGx5CiAgICBoaWdobGlnaHQ6IGJyZWV6ZWRhcmsKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgY29kZV9kb3dubG9hZDogeWVzCi0tLQoKIyMgQ3Vpc2luZSBjbGFzc2lmaWVycyAxCgpJbiB0aGlzIGxlc3Nvbiwgd2UnbGwgZXhwbG9yZSBhIHZhcmlldHkgb2YgY2xhc3NpZmllcnMgdG8gKnByZWRpY3QgYSBnaXZlbiBuYXRpb25hbCBjdWlzaW5lIGJhc2VkIG9uIGEgZ3JvdXAgb2YgaW5ncmVkaWVudHMuKiBXaGlsZSBkb2luZyBzbywgd2UnbGwgbGVhcm4gbW9yZSBhYm91dCBzb21lIG9mIHRoZSB3YXlzIHRoYXQgYWxnb3JpdGhtcyBjYW4gYmUgbGV2ZXJhZ2VkIGZvciBjbGFzc2lmaWNhdGlvbiB0YXNrcy4KCiMjIyBbKipQcmUtbGVjdHVyZSBxdWl6KipdKGh0dHBzOi8vZ3JheS1zYW5kLTA3YTEwZjQwMy4xLmF6dXJlc3RhdGljYXBwcy5uZXQvcXVpei8yMS8pCgojIyMgKipQcmVwYXJhdGlvbioqCgpUaGlzIGxlc3NvbiBidWlsZHMgdXAgb24gb3VyIFtwcmV2aW91cyBsZXNzb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvTUwtRm9yLUJlZ2lubmVycy9ibG9iL21haW4vNC1DbGFzc2lmaWNhdGlvbi8xLUludHJvZHVjdGlvbi9zb2x1dGlvbi9SL2xlc3Nvbl8xMC5odG1sKSB3aGVyZSB3ZToKCi0gICBNYWRlIGEgZ2VudGxlIGludHJvZHVjdGlvbiB0byBjbGFzc2lmaWNhdGlvbnMgdXNpbmcgYSBkYXRhc2V0IGFib3V0IGFsbCB0aGUgYnJpbGxpYW50IGN1aXNpbmVzIG9mIEFzaWEgYW5kIEluZGlhIPCfmIsuCgotICAgRXhwbG9yZWQgc29tZSBbZHBseXIgdmVyYnNdKGh0dHBzOi8vZHBseXIudGlkeXZlcnNlLm9yZy8pIHRvIHByZXAgYW5kIGNsZWFuIG91ciBkYXRhLgoKLSAgIE1hZGUgYmVhdXRpZnVsIHZpc3VhbGl6YXRpb25zIHVzaW5nIGdncGxvdDIuCgotICAgRGVtb25zdHJhdGVkIGhvdyB0byBkZWFsIHdpdGggaW1iYWxhbmNlZCBkYXRhIGJ5IHByZXByb2Nlc3NpbmcgaXQgdXNpbmcgW3JlY2lwZXNdKGh0dHBzOi8vcmVjaXBlcy50aWR5bW9kZWxzLm9yZy9hcnRpY2xlcy9TaW1wbGVfRXhhbXBsZS5odG1sKS4KCi0gICBEZW1vbnN0cmF0ZWQgaG93IHRvIGBwcmVwYCBhbmQgYGJha2VgIG91ciByZWNpcGUgdG8gY29uZmlybSB0aGF0IGl0IHdpbGwgd29yayBhcyBzdXBwb3NlZCB0by4KCiMjIyMgKipQcmVyZXF1aXNpdGUqKgoKRm9yIHRoaXMgbGVzc29uLCB3ZSdsbCByZXF1aXJlIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgdG8gY2xlYW4sIHByZXAgYW5kIHZpc3VhbGl6ZSBvdXIgZGF0YToKCi0gICBgdGlkeXZlcnNlYDogVGhlIFt0aWR5dmVyc2VdKGh0dHBzOi8vd3d3LnRpZHl2ZXJzZS5vcmcvKSBpcyBhIFtjb2xsZWN0aW9uIG9mIFIgcGFja2FnZXNdKGh0dHBzOi8vd3d3LnRpZHl2ZXJzZS5vcmcvcGFja2FnZXMpIGRlc2lnbmVkIHRvIG1ha2VzIGRhdGEgc2NpZW5jZSBmYXN0ZXIsIGVhc2llciBhbmQgbW9yZSBmdW4hCgotICAgYHRpZHltb2RlbHNgOiBUaGUgW3RpZHltb2RlbHNdKGh0dHBzOi8vd3d3LnRpZHltb2RlbHMub3JnLykgZnJhbWV3b3JrIGlzIGEgW2NvbGxlY3Rpb24gb2YgcGFja2FnZXNdKGh0dHBzOi8vd3d3LnRpZHltb2RlbHMub3JnL3BhY2thZ2VzLykgZm9yIG1vZGVsaW5nIGFuZCBtYWNoaW5lIGxlYXJuaW5nLgoKLSAgIGBEYXRhRXhwbG9yZXJgOiBUaGUgW0RhdGFFeHBsb3JlciBwYWNrYWdlXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvRGF0YUV4cGxvcmVyL3ZpZ25ldHRlcy9kYXRhZXhwbG9yZXItaW50cm8uaHRtbCkgaXMgbWVhbnQgdG8gc2ltcGxpZnkgYW5kIGF1dG9tYXRlIEVEQSBwcm9jZXNzIGFuZCByZXBvcnQgZ2VuZXJhdGlvbi4KCi0gICBgdGhlbWlzYDogVGhlIFt0aGVtaXMgcGFja2FnZV0oaHR0cHM6Ly90aGVtaXMudGlkeW1vZGVscy5vcmcvKSBwcm92aWRlcyBFeHRyYSBSZWNpcGVzIFN0ZXBzIGZvciBEZWFsaW5nIHdpdGggVW5iYWxhbmNlZCBEYXRhLgoKLSAgIGBubmV0YDogVGhlIFtubmV0IHBhY2thZ2VdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9ubmV0L25uZXQucGRmKSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGVzdGltYXRpbmcgZmVlZC1mb3J3YXJkIG5ldXJhbCBuZXR3b3JrcyB3aXRoIGEgc2luZ2xlIGhpZGRlbiBsYXllciwgYW5kIGZvciBtdWx0aW5vbWlhbCBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVscy4KCllvdSBjYW4gaGF2ZSB0aGVtIGluc3RhbGxlZCBhczoKCmBpbnN0YWxsLnBhY2thZ2VzKGMoInRpZHl2ZXJzZSIsICJ0aWR5bW9kZWxzIiwgIkRhdGFFeHBsb3JlciIsICJoZXJlIikpYAoKQWx0ZXJuYXRpdmVseSwgdGhlIHNjcmlwdCBiZWxvdyBjaGVja3Mgd2hldGhlciB5b3UgaGF2ZSB0aGUgcGFja2FnZXMgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhpcyBtb2R1bGUgYW5kIGluc3RhbGxzIHRoZW0gZm9yIHlvdSBpbiBjYXNlIHRoZXkgYXJlIG1pc3NpbmcuCgpgYGB7ciwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9CnN1cHByZXNzV2FybmluZ3MoaWYgKCFyZXF1aXJlKCJwYWNtYW4iKSlpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKSkKCnBhY21hbjo6cF9sb2FkKHRpZHl2ZXJzZSwgdGlkeW1vZGVscywgRGF0YUV4cGxvcmVyLCB0aGVtaXMsIGhlcmUpCmBgYAoKTm93LCBsZXQncyBoaXQgdGhlIGdyb3VuZCBydW5uaW5nIQoKIyMgMS4gU3BsaXQgdGhlIGRhdGEgaW50byB0cmFpbmluZyBhbmQgdGVzdCBzZXRzLgoKV2UnbGwgc3RhcnQgYnkgcGlja2luZyBhIGZldyBzdGVwcyBmcm9tIG91ciBwcmV2aW91cyBsZXNzb24uCgojIyMgRHJvcCB0aGUgbW9zdCBjb21tb24gaW5ncmVkaWVudHMgdGhhdCBjcmVhdGUgY29uZnVzaW9uIGJldHdlZW4gZGlzdGluY3QgY3Vpc2luZXMsIHVzaW5nIGBkcGx5cjo6c2VsZWN0KClgLgoKRXZlcnlvbmUgbG92ZXMgcmljZSwgZ2FybGljIGFuZCBnaW5nZXIhCgpgYGB7ciByZWNhcF9kcm9wfQojIExvYWQgdGhlIG9yaWdpbmFsIGN1aXNpbmVzIGRhdGEKZGYgPC0gcmVhZF9jc3YoZmlsZSA9ICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWljcm9zb2Z0L01MLUZvci1CZWdpbm5lcnMvbWFpbi80LUNsYXNzaWZpY2F0aW9uL2RhdGEvY3Vpc2luZXMuY3N2IikKCiMgRHJvcCBpZCBjb2x1bW4sIHJpY2UsIGdhcmxpYyBhbmQgZ2luZ2VyIGZyb20gb3VyIG9yaWdpbmFsIGRhdGEgc2V0CmRmX3NlbGVjdCA8LSBkZiAlPiUgCiAgc2VsZWN0KC1jKDEsIHJpY2UsIGdhcmxpYywgZ2luZ2VyKSkgJT4lCiAgIyBFbmNvZGUgY3Vpc2luZSBjb2x1bW4gYXMgY2F0ZWdvcmljYWwKICBtdXRhdGUoY3Vpc2luZSA9IGZhY3RvcihjdWlzaW5lKSkKCiMgRGlzcGxheSBuZXcgZGF0YSBzZXQKZGZfc2VsZWN0ICU+JSAKICBzbGljZV9oZWFkKG4gPSA1KQoKIyBEaXNwbGF5IGRpc3RyaWJ1dGlvbiBvZiBjdWlzaW5lcwpkZl9zZWxlY3QgJT4lIAogIGNvdW50KGN1aXNpbmUpICU+JSAKICBhcnJhbmdlKGRlc2MobikpCmBgYAoKUGVyZmVjdCEgTm93LCB0aW1lIHRvIHNwbGl0IHRoZSBkYXRhIHN1Y2ggdGhhdCA3MCUgb2YgdGhlIGRhdGEgZ29lcyB0byB0cmFpbmluZyBhbmQgMzAlIGdvZXMgdG8gdGVzdGluZy4gV2UnbGwgYWxzbyBhcHBseSBhIGBzdHJhdGlmaWNhdGlvbmAgdGVjaG5pcXVlIHdoZW4gc3BsaXR0aW5nIHRoZSBkYXRhIHRvIGBtYWludGFpbiB0aGUgcHJvcG9ydGlvbiBvZiBlYWNoIGN1aXNpbmVgIGluIHRoZSB0cmFpbmluZyBhbmQgdmFsaWRhdGlvbiBkYXRhc2V0cy4KCltyc2FtcGxlXShodHRwczovL3JzYW1wbGUudGlkeW1vZGVscy5vcmcvKSwgYSBwYWNrYWdlIGluIFRpZHltb2RlbHMsIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIGZvciBlZmZpY2llbnQgZGF0YSBzcGxpdHRpbmcgYW5kIHJlc2FtcGxpbmc6CgpgYGB7ciBkYXRhX3NwbGl0fQojIExvYWQgdGhlIGNvcmUgVGlkeW1vZGVscyBwYWNrYWdlcyBpbnRvIFIgc2Vzc2lvbgpsaWJyYXJ5KHRpZHltb2RlbHMpCgojIENyZWF0ZSBzcGxpdCBzcGVjaWZpY2F0aW9uCnNldC5zZWVkKDIwNTYpCmN1aXNpbmVzX3NwbGl0IDwtIGluaXRpYWxfc3BsaXQoZGF0YSA9IGRmX3NlbGVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGEgPSBjdWlzaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSAwLjcpCgojIEV4dHJhY3QgdGhlIGRhdGEgaW4gZWFjaCBzcGxpdApjdWlzaW5lc190cmFpbiA8LSB0cmFpbmluZyhjdWlzaW5lc19zcGxpdCkKY3Vpc2luZXNfdGVzdCA8LSB0ZXN0aW5nKGN1aXNpbmVzX3NwbGl0KQoKIyBQcmludCB0aGUgbnVtYmVyIG9mIGNhc2VzIGluIGVhY2ggc3BsaXQKY2F0KCJUcmFpbmluZyBjYXNlczogIiwgbnJvdyhjdWlzaW5lc190cmFpbiksICJcbiIsCiAgICAiVGVzdCBjYXNlczogIiwgbnJvdyhjdWlzaW5lc190ZXN0KSwgc2VwID0gIiIpCgojIERpc3BsYXkgdGhlIGZpcnN0IGZldyByb3dzIG9mIHRoZSB0cmFpbmluZyBzZXQKY3Vpc2luZXNfdHJhaW4gJT4lIAogIHNsaWNlX2hlYWQobiA9IDUpCgoKIyBEaXNwbGF5IGRpc3RyaWJ1dGlvbiBvZiBjdWlzaW5lcyBpbiB0aGUgdHJhaW5pbmcgc2V0CmN1aXNpbmVzX3RyYWluICU+JSAKICBjb3VudChjdWlzaW5lKSAlPiUgCiAgYXJyYW5nZShkZXNjKG4pKQoKCmBgYAoKIyMgMi4gRGVhbCB3aXRoIGltYmFsYW5jZWQgZGF0YQoKQXMgeW91IG1pZ2h0IGhhdmUgbm90aWNlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YSBzZXQgYXMgd2VsbCBhcyBpbiBvdXIgdHJhaW5pbmcgc2V0LCB0aGVyZSBpcyBxdWl0ZSBhbiB1bmVxdWFsIGRpc3RyaWJ1dGlvbiBpbiB0aGUgbnVtYmVyIG9mIGN1aXNpbmVzLiBLb3JlYW4gY3Vpc2luZXMgYXJlICphbG1vc3QqIDMgdGltZXMgVGhhaSBjdWlzaW5lcy4gSW1iYWxhbmNlZCBkYXRhIG9mdGVuIGhhcyBuZWdhdGl2ZSBlZmZlY3RzIG9uIHRoZSBtb2RlbCBwZXJmb3JtYW5jZS4gTWFueSBtb2RlbHMgcGVyZm9ybSBiZXN0IHdoZW4gdGhlIG51bWJlciBvZiBvYnNlcnZhdGlvbnMgaXMgZXF1YWwgYW5kLCB0aHVzLCB0ZW5kIHRvIHN0cnVnZ2xlIHdpdGggdW5iYWxhbmNlZCBkYXRhLgoKVGhlcmUgYXJlIG1ham9ybHkgdHdvIHdheXMgb2YgZGVhbGluZyB3aXRoIGltYmFsYW5jZWQgZGF0YSBzZXRzOgoKLSAgIGFkZGluZyBvYnNlcnZhdGlvbnMgdG8gdGhlIG1pbm9yaXR5IGNsYXNzOiBgT3Zlci1zYW1wbGluZ2AgZS5nIHVzaW5nIGEgU01PVEUgYWxnb3JpdGhtIHdoaWNoIHN5bnRoZXRpY2FsbHkgZ2VuZXJhdGVzIG5ldyBleGFtcGxlcyBvZiB0aGUgbWlub3JpdHkgY2xhc3MgdXNpbmcgbmVhcmVzdCBuZWlnaGJvcnMgb2YgdGhlc2UgY2FzZXMuCgotICAgcmVtb3Zpbmcgb2JzZXJ2YXRpb25zIGZyb20gbWFqb3JpdHkgY2xhc3M6IGBVbmRlci1zYW1wbGluZ2AKCkluIG91ciBwcmV2aW91cyBsZXNzb24sIHdlIGRlbW9uc3RyYXRlZCBob3cgdG8gZGVhbCB3aXRoIGltYmFsYW5jZWQgZGF0YSBzZXRzIHVzaW5nIGEgYHJlY2lwZWAuIEEgcmVjaXBlIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgYmx1ZXByaW50IHRoYXQgZGVzY3JpYmVzIHdoYXQgc3RlcHMgc2hvdWxkIGJlIGFwcGxpZWQgdG8gYSBkYXRhIHNldCBpbiBvcmRlciB0byBnZXQgaXQgcmVhZHkgZm9yIGRhdGEgYW5hbHlzaXMuIEluIG91ciBjYXNlLCB3ZSB3YW50IHRvIGhhdmUgYW4gZXF1YWwgZGlzdHJpYnV0aW9uIGluIHRoZSBudW1iZXIgb2Ygb3VyIGN1aXNpbmVzIGZvciBvdXIgYHRyYWluaW5nIHNldGAuIExldCdzIGdldCByaWdodCBpbnRvIGl0LgoKYGBge3IgcmVjYXBfYmFsYW5jZX0KIyBMb2FkIHRoZW1pcyBwYWNrYWdlIGZvciBkZWFsaW5nIHdpdGggaW1iYWxhbmNlZCBkYXRhCmxpYnJhcnkodGhlbWlzKQoKIyBDcmVhdGUgYSByZWNpcGUgZm9yIHByZXByb2Nlc3NpbmcgdHJhaW5pbmcgZGF0YQpjdWlzaW5lc19yZWNpcGUgPC0gcmVjaXBlKGN1aXNpbmUgfiAuLCBkYXRhID0gY3Vpc2luZXNfdHJhaW4pICU+JSAKICBzdGVwX3Ntb3RlKGN1aXNpbmUpCgojIFByaW50IHJlY2lwZQpjdWlzaW5lc19yZWNpcGUKCmBgYAoKWW91IGNhbiBvZiBjb3Vyc2UgZ28gYWhlYWQgYW5kIGNvbmZpcm0gKHVzaW5nIHByZXArYmFrZSkgdGhhdCB0aGUgcmVjaXBlIHdpbGwgd29yayBhcyB5b3UgZXhwZWN0IGl0IC0gYWxsIHRoZSBjdWlzaW5lIGxhYmVscyBoYXZpbmcgYDU1OWAgb2JzZXJ2YXRpb25zLgoKU2luY2Ugd2UnbGwgYmUgdXNpbmcgdGhpcyByZWNpcGUgYXMgYSBwcmVwcm9jZXNzb3IgZm9yIG1vZGVsaW5nLCBhIGB3b3JrZmxvdygpYCB3aWxsIGRvIGFsbCB0aGUgcHJlcCBhbmQgYmFrZSBmb3IgdXMsIHNvIHdlIHdvbid0IGhhdmUgdG8gbWFudWFsbHkgZXN0aW1hdGUgdGhlIHJlY2lwZS4KCk5vdyB3ZSBhcmUgcmVhZHkgdG8gdHJhaW4gYSBtb2RlbCDwn5Gp4oCN8J+Su/CfkajigI3wn5K7IQoKIyMgMy4gQ2hvb3NpbmcgeW91ciBjbGFzc2lmaWVyCgohW0FydHdvcmsgYnkgXEBhbGxpc29uX2hvcnN0XSguLi8uLi9pbWFnZXMvcGFyc25pcC5qcGcpe3dpZHRoPSI2MDAifQoKTm93IHdlIGhhdmUgdG8gZGVjaWRlIHdoaWNoIGFsZ29yaXRobSB0byB1c2UgZm9yIHRoZSBqb2Ig8J+klC4KCkluIFRpZHltb2RlbHMsIHRoZSBbYHBhcnNuaXAgcGFja2FnZWBdKGh0dHBzOi8vcGFyc25pcC50aWR5bW9kZWxzLm9yZy9pbmRleC5odG1sKSBwcm92aWRlcyBjb25zaXN0ZW50IGludGVyZmFjZSBmb3Igd29ya2luZyB3aXRoIG1vZGVscyBhY3Jvc3MgZGlmZmVyZW50IGVuZ2luZXMgKHBhY2thZ2VzKS4gUGxlYXNlIHNlZSB0aGUgcGFyc25pcCBkb2N1bWVudGF0aW9uIHRvIGV4cGxvcmUgW21vZGVsIHR5cGVzICYgZW5naW5lc10oaHR0cHM6Ly93d3cudGlkeW1vZGVscy5vcmcvZmluZC9wYXJzbmlwLyNtb2RlbHMpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIFttb2RlbCBhcmd1bWVudHNdKGh0dHBzOi8vd3d3LnRpZHltb2RlbHMub3JnL2ZpbmQvcGFyc25pcC8jbW9kZWwtYXJncykuIFRoZSB2YXJpZXR5IGlzIHF1aXRlIGJld2lsZGVyaW5nIGF0IGZpcnN0IHNpZ2h0LiBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbGwgaW5jbHVkZSBjbGFzc2lmaWNhdGlvbiB0ZWNobmlxdWVzOgoKLSAgIEM1LjAgUnVsZS1CYXNlZCBDbGFzc2lmaWNhdGlvbiBNb2RlbHMKCi0gICBGbGV4aWJsZSBEaXNjcmltaW5hbnQgTW9kZWxzCgotICAgTGluZWFyIERpc2NyaW1pbmFudCBNb2RlbHMKCi0gICBSZWd1bGFyaXplZCBEaXNjcmltaW5hbnQgTW9kZWxzCgotICAgTG9naXN0aWMgUmVncmVzc2lvbiBNb2RlbHMKCi0gICBNdWx0aW5vbWlhbCBSZWdyZXNzaW9uIE1vZGVscwoKLSAgIE5haXZlIEJheWVzIE1vZGVscwoKLSAgIFN1cHBvcnQgVmVjdG9yIE1hY2hpbmVzCgotICAgTmVhcmVzdCBOZWlnaGJvcnMKCi0gICBEZWNpc2lvbiBUcmVlcwoKLSAgIEVuc2VtYmxlIG1ldGhvZHMKCi0gICBOZXVyYWwgTmV0d29ya3MKClRoZSBsaXN0IGdvZXMgb24hCgojIyMgKipXaGF0IGNsYXNzaWZpZXIgdG8gZ28gd2l0aD8qKgoKU28sIHdoaWNoIGNsYXNzaWZpZXIgc2hvdWxkIHlvdSBjaG9vc2U/IE9mdGVuLCBydW5uaW5nIHRocm91Z2ggc2V2ZXJhbCBhbmQgbG9va2luZyBmb3IgYSBnb29kIHJlc3VsdCBpcyBhIHdheSB0byB0ZXN0LgoKPiBBdXRvTUwgc29sdmVzIHRoaXMgcHJvYmxlbSBuZWF0bHkgYnkgcnVubmluZyB0aGVzZSBjb21wYXJpc29ucyBpbiB0aGUgY2xvdWQsIGFsbG93aW5nIHlvdSB0byBjaG9vc2UgdGhlIGJlc3QgYWxnb3JpdGhtIGZvciB5b3VyIGRhdGEuIFRyeSBpdCBbaGVyZV0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vbGVhcm4vbW9kdWxlcy9hdXRvbWF0ZS1tb2RlbC1zZWxlY3Rpb24td2l0aC1henVyZS1hdXRvbWwvP1dULm1jX2lkPWFjYWRlbWljLTc3OTUyLWxlZXN0b3R0KQoKQWxzbyB0aGUgY2hvaWNlIG9mIGNsYXNzaWZpZXIgZGVwZW5kcyBvbiBvdXIgcHJvYmxlbS4gRm9yIGluc3RhbmNlLCB3aGVuIHRoZSBvdXRjb21lIGNhbiBiZSBjYXRlZ29yaXplZCBpbnRvIGBtb3JlIHRoYW4gdHdvIGNsYXNzZXNgLCBsaWtlIGluIG91ciBjYXNlLCB5b3UgbXVzdCB1c2UgYSBgbXVsdGljbGFzcyBjbGFzc2lmaWNhdGlvbiBhbGdvcml0aG1gIGFzIG9wcG9zZWQgdG8gYGJpbmFyeSBjbGFzc2lmaWNhdGlvbi5gCgojIyMgKipBIGJldHRlciBhcHByb2FjaCoqCgpBIGJldHRlciB3YXkgdGhhbiB3aWxkbHkgZ3Vlc3NpbmcsIGhvd2V2ZXIsIGlzIHRvIGZvbGxvdyB0aGUgaWRlYXMgb24gdGhpcyBkb3dubG9hZGFibGUgW01MIENoZWF0IHNoZWV0XShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9henVyZS9tYWNoaW5lLWxlYXJuaW5nL2FsZ29yaXRobS1jaGVhdC1zaGVldD9XVC5tY19pZD1hY2FkZW1pYy03Nzk1Mi1sZWVzdG90dCkuIEhlcmUsIHdlIGRpc2NvdmVyIHRoYXQsIGZvciBvdXIgbXVsdGljbGFzcyBwcm9ibGVtLCB3ZSBoYXZlIHNvbWUgY2hvaWNlczoKCiFbQSBzZWN0aW9uIG9mIE1pY3Jvc29mdCdzIEFsZ29yaXRobSBDaGVhdCBTaGVldCwgZGV0YWlsaW5nIG11bHRpY2xhc3MgY2xhc3NpZmljYXRpb24gb3B0aW9uc10oLi4vLi4vaW1hZ2VzL2NoZWF0c2hlZXQucG5nKXt3aWR0aD0iNTAwIn0KCiMjIyAqKlJlYXNvbmluZyoqCgpMZXQncyBzZWUgaWYgd2UgY2FuIHJlYXNvbiBvdXIgd2F5IHRocm91Z2ggZGlmZmVyZW50IGFwcHJvYWNoZXMgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIHdlIGhhdmU6CgotICAgKipEZWVwIE5ldXJhbCBuZXR3b3JrcyBhcmUgdG9vIGhlYXZ5KiouIEdpdmVuIG91ciBjbGVhbiwgYnV0IG1pbmltYWwgZGF0YXNldCwgYW5kIHRoZSBmYWN0IHRoYXQgd2UgYXJlIHJ1bm5pbmcgdHJhaW5pbmcgbG9jYWxseSB2aWEgbm90ZWJvb2tzLCBkZWVwIG5ldXJhbCBuZXR3b3JrcyBhcmUgdG9vIGhlYXZ5d2VpZ2h0IGZvciB0aGlzIHRhc2suCgotICAgKipObyB0d28tY2xhc3MgY2xhc3NpZmllcioqLiBXZSBkbyBub3QgdXNlIGEgdHdvLWNsYXNzIGNsYXNzaWZpZXIsIHNvIHRoYXQgcnVsZXMgb3V0IG9uZS12cy1hbGwuCgotICAgKipEZWNpc2lvbiB0cmVlIG9yIGxvZ2lzdGljIHJlZ3Jlc3Npb24gY291bGQgd29yayoqLiBBIGRlY2lzaW9uIHRyZWUgbWlnaHQgd29yaywgb3IgbXVsdGlub21pYWwgcmVncmVzc2lvbi9tdWx0aWNsYXNzIGxvZ2lzdGljIHJlZ3Jlc3Npb24gZm9yIG11bHRpY2xhc3MgZGF0YS4KCi0gICAqKk11bHRpY2xhc3MgQm9vc3RlZCBEZWNpc2lvbiBUcmVlcyBzb2x2ZSBhIGRpZmZlcmVudCBwcm9ibGVtKiouIFRoZSBtdWx0aWNsYXNzIGJvb3N0ZWQgZGVjaXNpb24gdHJlZSBpcyBtb3N0IHN1aXRhYmxlIGZvciBub25wYXJhbWV0cmljIHRhc2tzLCBlLmcuIHRhc2tzIGRlc2lnbmVkIHRvIGJ1aWxkIHJhbmtpbmdzLCBzbyBpdCBpcyBub3QgdXNlZnVsIGZvciB1cy4KCkFsc28sIG5vcm1hbGx5IGJlZm9yZSBlbWJhcmtpbmcgb24gbW9yZSBjb21wbGV4IG1hY2hpbmUgbGVhcm5pbmcgbW9kZWxzIGUuZyBlbnNlbWJsZSBtZXRob2RzLCBpdCdzIGEgZ29vZCBpZGVhIHRvIGJ1aWxkIHRoZSBzaW1wbGVzdCBwb3NzaWJsZSBtb2RlbCB0byBnZXQgYW4gaWRlYSBvZiB3aGF0IGlzIGdvaW5nIG9uLiBTbyBmb3IgdGhpcyBsZXNzb24sIHdlJ2xsIHN0YXJ0IHdpdGggYSBgbXVsdGlub21pYWwgbG9naXN0aWMgcmVncmVzc2lvbmAgbW9kZWwuCgo+IExvZ2lzdGljIHJlZ3Jlc3Npb24gaXMgYSB0ZWNobmlxdWUgdXNlZCB3aGVuIHRoZSBvdXRjb21lIHZhcmlhYmxlIGlzIGNhdGVnb3JpY2FsIChvciBub21pbmFsKS4gRm9yIEJpbmFyeSBsb2dpc3RpYyByZWdyZXNzaW9uIHRoZSBudW1iZXIgb2Ygb3V0Y29tZSB2YXJpYWJsZXMgaXMgdHdvLCB3aGVyZWFzIHRoZSBudW1iZXIgb2Ygb3V0Y29tZSB2YXJpYWJsZXMgZm9yIG11bHRpbm9taWFsIGxvZ2lzdGljIHJlZ3Jlc3Npb24gaXMgbW9yZSB0aGFuIHR3by4gU2VlIFtBZHZhbmNlZCBSZWdyZXNzaW9uIE1ldGhvZHNdKGh0dHBzOi8vYm9va2Rvd24ub3JnL2NodWEvYmVyNjQyX2FkdmFuY2VkX3JlZ3Jlc3Npb24vbXVsdGlub21pYWwtbG9naXN0aWMtcmVncmVzc2lvbi5odG1sKSBmb3IgZnVydGhlciByZWFkaW5nLgoKIyMgNC4gVHJhaW4gYW5kIGV2YWx1YXRlIGEgTXVsdGlub21pYWwgbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbC4KCkluIFRpZHltb2RlbHMsIGBwYXJzbmlwOjptdWx0aW5vbV9yZWcoKWAsIGRlZmluZXMgYSBtb2RlbCB0aGF0IHVzZXMgbGluZWFyIHByZWRpY3RvcnMgdG8gcHJlZGljdCBtdWx0aWNsYXNzIGRhdGEgdXNpbmcgdGhlIG11bHRpbm9taWFsIGRpc3RyaWJ1dGlvbi4gU2VlIGA/bXVsdGlub21fcmVnKClgIGZvciB0aGUgZGlmZmVyZW50IHdheXMvZW5naW5lcyB5b3UgY2FuIHVzZSB0byBmaXQgdGhpcyBtb2RlbC4KCkZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIGZpdCBhIE11bHRpbm9taWFsIHJlZ3Jlc3Npb24gbW9kZWwgdmlhIHRoZSBkZWZhdWx0IFtubmV0XShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvbm5ldC9ubmV0LnBkZikgZW5naW5lLgoKPiBJIHBpY2tlZCBhIHZhbHVlIGZvciBgcGVuYWx0eWAgc29ydCBvZiByYW5kb21seS4gVGhlcmUgYXJlIGJldHRlciB3YXlzIHRvIGNob29zZSB0aGlzIHZhbHVlIHRoYXQgaXMsIGJ5IHVzaW5nIGByZXNhbXBsaW5nYCBhbmQgYHR1bmluZ2AgdGhlIG1vZGVsIHdoaWNoIHdlJ2xsIGRpc2N1c3MgbGF0ZXIuCj4KPiBTZWUgW1RpZHltb2RlbHM6IEdldCBTdGFydGVkXShodHRwczovL3d3dy50aWR5bW9kZWxzLm9yZy9zdGFydC90dW5pbmcvKSBpbiBjYXNlIHlvdSB3YW50IHRvIGxlYXJuIG1vcmUgb24gaG93IHRvIHR1bmUgbW9kZWwgaHlwZXJwYXJhbWV0ZXJzLgoKYGBge3IgbXVsdGlub3JtX3JlZ30KIyBDcmVhdGUgYSBtdWx0aW5vbWlhbCByZWdyZXNzaW9uIG1vZGVsIHNwZWNpZmljYXRpb24KbXJfc3BlYyA8LSBtdWx0aW5vbV9yZWcocGVuYWx0eSA9IDEpICU+JSAKICBzZXRfZW5naW5lKCJubmV0IiwgTWF4Tld0cyA9IDIwODYpICU+JSAKICBzZXRfbW9kZSgiY2xhc3NpZmljYXRpb24iKQoKIyBQcmludCBtb2RlbCBzcGVjaWZpY2F0aW9uCm1yX3NwZWMKCmBgYAoKR3JlYXQgam9iIPCfpbMhIE5vdyB0aGF0IHdlIGhhdmUgYSByZWNpcGUgYW5kIGEgbW9kZWwgc3BlY2lmaWNhdGlvbiwgd2UgbmVlZCB0byBmaW5kIGEgd2F5IG9mIGJ1bmRsaW5nIHRoZW0gdG9nZXRoZXIgaW50byBhbiBvYmplY3QgdGhhdCB3aWxsIGZpcnN0IHByZXByb2Nlc3MgdGhlIGRhdGEgdGhlbiBmaXQgdGhlIG1vZGVsIG9uIHRoZSBwcmVwcm9jZXNzZWQgZGF0YSBhbmQgYWxzbyBhbGxvdyBmb3IgcG90ZW50aWFsIHBvc3QtcHJvY2Vzc2luZyBhY3Rpdml0aWVzLiBJbiBUaWR5bW9kZWxzLCB0aGlzIGNvbnZlbmllbnQgb2JqZWN0IGlzIGNhbGxlZCBhIFtgd29ya2Zsb3dgXShodHRwczovL3dvcmtmbG93cy50aWR5bW9kZWxzLm9yZy8pIGFuZCBjb252ZW5pZW50bHkgaG9sZHMgeW91ciBtb2RlbGluZyBjb21wb25lbnRzISBUaGlzIGlzIHdoYXQgd2UnZCBjYWxsICpwaXBlbGluZXMqIGluICpQeXRob24qLgoKU28gbGV0J3MgYnVuZGxlIGV2ZXJ5dGhpbmcgdXAgaW50byBhIHdvcmtmbG93IfCfk6YKCmBgYHtyIHdvcmtmbG93fQojIEJ1bmRsZSByZWNpcGUgYW5kIG1vZGVsIHNwZWNpZmljYXRpb24KbXJfd2YgPC0gd29ya2Zsb3coKSAlPiUgCiAgYWRkX3JlY2lwZShjdWlzaW5lc19yZWNpcGUpICU+JSAKICBhZGRfbW9kZWwobXJfc3BlYykKCiMgUHJpbnQgb3V0IHdvcmtmbG93Cm1yX3dmCgpgYGAKCldvcmtmbG93cyDwn5GM8J+RjCEgQSAqKmB3b3JrZmxvdygpYCoqIGNhbiBiZSBmaXQgaW4gbXVjaCB0aGUgc2FtZSB3YXkgYSBtb2RlbCBjYW4uIFNvLCB0aW1lIHRvIHRyYWluIGEgbW9kZWwhCgpgYGB7ciB0cmFpbn0KIyBUcmFpbiBhIG11bHRpbm9taWFsIHJlZ3Jlc3Npb24gbW9kZWwKbXJfZml0IDwtIGZpdChvYmplY3QgPSBtcl93ZiwgZGF0YSA9IGN1aXNpbmVzX3RyYWluKQoKbXJfZml0CmBgYAoKVGhlIG91dHB1dCBzaG93cyB0aGUgY29lZmZpY2llbnRzIHRoYXQgdGhlIG1vZGVsIGxlYXJuZWQgZHVyaW5nIHRyYWluaW5nLgoKIyMjIEV2YWx1YXRlIHRoZSBUcmFpbmVkIE1vZGVsCgpJdCdzIHRpbWUgdG8gc2VlIGhvdyB0aGUgbW9kZWwgcGVyZm9ybWVkIPCfk48gYnkgZXZhbHVhdGluZyBpdCBvbiBhIHRlc3Qgc2V0ISBMZXQncyBiZWdpbiBieSBtYWtpbmcgcHJlZGljdGlvbnMgb24gdGhlIHRlc3Qgc2V0LgoKYGBge3IgdGVzdH0KIyBNYWtlIHByZWRpY3Rpb25zIG9uIHRoZSB0ZXN0IHNldApyZXN1bHRzIDwtIGN1aXNpbmVzX3Rlc3QgJT4lIHNlbGVjdChjdWlzaW5lKSAlPiUgCiAgYmluZF9jb2xzKG1yX2ZpdCAlPiUgcHJlZGljdChuZXdfZGF0YSA9IGN1aXNpbmVzX3Rlc3QpKQoKIyBQcmludCBvdXQgcmVzdWx0cwpyZXN1bHRzICU+JSAKICBzbGljZV9oZWFkKG4gPSA1KQoKYGBgCgpHcmVhdCBqb2IhIEluIFRpZHltb2RlbHMsIGV2YWx1YXRpbmcgbW9kZWwgcGVyZm9ybWFuY2UgY2FuIGJlIGRvbmUgdXNpbmcgW3lhcmRzdGlja10oaHR0cHM6Ly95YXJkc3RpY2sudGlkeW1vZGVscy5vcmcvKSAtIGEgcGFja2FnZSB1c2VkIHRvIG1lYXN1cmUgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgbW9kZWxzIHVzaW5nIHBlcmZvcm1hbmNlIG1ldHJpY3MuIEFzIHdlIGRpZCBpbiBvdXIgbG9naXN0aWMgcmVncmVzc2lvbiBsZXNzb24sIGxldCdzIGJlZ2luIGJ5IGNvbXB1dGluZyBhIGNvbmZ1c2lvbiBtYXRyaXguCgpgYGB7ciBjb25mX21hdH0KIyBDb25mdXNpb24gbWF0cml4IGZvciBjYXRlZ29yaWNhbCBkYXRhCmNvbmZfbWF0KGRhdGEgPSByZXN1bHRzLCB0cnV0aCA9IGN1aXNpbmUsIGVzdGltYXRlID0gLnByZWRfY2xhc3MpCgoKYGBgCgpXaGVuIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjbGFzc2VzLCBpdCdzIGdlbmVyYWxseSBtb3JlIGludHVpdGl2ZSB0byB2aXN1YWxpemUgdGhpcyBhcyBhIGhlYXQgbWFwLCBsaWtlIHRoaXM6CgpgYGB7ciBjb25mX3Zpen0KdXBkYXRlX2dlb21fZGVmYXVsdHMoZ2VvbSA9ICJ0aWxlIiwgbmV3ID0gbGlzdChjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC43KSkKIyBWaXN1YWxpemUgY29uZnVzaW9uIG1hdHJpeApyZXN1bHRzICU+JSAKICBjb25mX21hdChjdWlzaW5lLCAucHJlZF9jbGFzcykgJT4lIAogIGF1dG9wbG90KHR5cGUgPSAiaGVhdG1hcCIpCmBgYAoKVGhlIGRhcmtlciBzcXVhcmVzIGluIHRoZSBjb25mdXNpb24gbWF0cml4IHBsb3QgaW5kaWNhdGUgaGlnaCBudW1iZXJzIG9mIGNhc2VzLCBhbmQgeW91IGNhbiBob3BlZnVsbHkgc2VlIGEgZGlhZ29uYWwgbGluZSBvZiBkYXJrZXIgc3F1YXJlcyBpbmRpY2F0aW5nIGNhc2VzIHdoZXJlIHRoZSBwcmVkaWN0ZWQgYW5kIGFjdHVhbCBsYWJlbCBhcmUgdGhlIHNhbWUuCgpMZXQncyBub3cgY2FsY3VsYXRlIHN1bW1hcnkgc3RhdGlzdGljcyBmb3IgdGhlIGNvbmZ1c2lvbiBtYXRyaXguCgpgYGB7ciBjb25mX3N0YXRzfQojIFN1bW1hcnkgc3RhdHMgZm9yIGNvbmZ1c2lvbiBtYXRyaXgKY29uZl9tYXQoZGF0YSA9IHJlc3VsdHMsIHRydXRoID0gY3Vpc2luZSwgZXN0aW1hdGUgPSAucHJlZF9jbGFzcykgJT4lIHN1bW1hcnkoKQpgYGAKCklmIHdlIG5hcnJvdyBkb3duIHRvIHNvbWUgbWV0cmljcyBzdWNoIGFzIGFjY3VyYWN5LCBzZW5zaXRpdml0eSwgcHB2LCB3ZSBhcmUgbm90IGJhZGx5IG9mZiBmb3IgYSBzdGFydCDwn6WzIQoKIyMgNC4gRGlnZ2luZyBEZWVwZXIKCkxldCdzIGFzayBvbmUgc3VidGxlIHF1ZXN0aW9uOiBXaGF0IGNyaXRlcmlhIGlzIHVzZWQgdG8gc2V0dGxlIGZvciBhIGdpdmVuIHR5cGUgb2YgY3Vpc2luZSBhcyB0aGUgcHJlZGljdGVkIG91dGNvbWU/CgpXZWxsLCBTdGF0aXN0aWNhbCBtYWNoaW5lIGxlYXJuaW5nIGFsZ29yaXRobXMsIGxpa2UgbG9naXN0aWMgcmVncmVzc2lvbiwgYXJlIGJhc2VkIG9uIGBwcm9iYWJpbGl0eWA7IHNvIHdoYXQgYWN0dWFsbHkgZ2V0cyBwcmVkaWN0ZWQgYnkgYSBjbGFzc2lmaWVyIGlzIGEgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG92ZXIgYSBzZXQgb2YgcG9zc2libGUgb3V0Y29tZXMuIFRoZSBjbGFzcyB3aXRoIHRoZSBoaWdoZXN0IHByb2JhYmlsaXR5IGlzIHRoZW4gY2hvc2VuIGFzIHRoZSBtb3N0IGxpa2VseSBvdXRjb21lIGZvciB0aGUgZ2l2ZW4gb2JzZXJ2YXRpb25zLgoKTGV0J3Mgc2VlIHRoaXMgaW4gYWN0aW9uIGJ5IG1ha2luZyBib3RoIGhhcmQgY2xhc3MgcHJlZGljdGlvbnMgYW5kIHByb2JhYmlsaXRpZXMuCgpgYGB7ciBwcmVkX3Byb2J9CiMgTWFrZSBoYXJkIGNsYXNzIHByZWRpY3Rpb24gYW5kIHByb2JhYmlsaXRpZXMKcmVzdWx0c19wcm9iIDwtIGN1aXNpbmVzX3Rlc3QgJT4lCiAgc2VsZWN0KGN1aXNpbmUpICU+JSAKICBiaW5kX2NvbHMobXJfZml0ICU+JSBwcmVkaWN0KG5ld19kYXRhID0gY3Vpc2luZXNfdGVzdCkpICU+JSAKICBiaW5kX2NvbHMobXJfZml0ICU+JSBwcmVkaWN0KG5ld19kYXRhID0gY3Vpc2luZXNfdGVzdCwgdHlwZSA9ICJwcm9iIikpCgojIFByaW50IG91dCByZXN1bHRzCnJlc3VsdHNfcHJvYiAlPiUgCiAgc2xpY2VfaGVhZChuID0gNSkKICAKCmBgYAoKTXVjaCBiZXR0ZXIhCgrinIUgQ2FuIHlvdSBleHBsYWluIHdoeSB0aGUgbW9kZWwgaXMgcHJldHR5IHN1cmUgdGhhdCB0aGUgZmlyc3Qgb2JzZXJ2YXRpb24gaXMgVGhhaT8KCiMjICoq8J+agENoYWxsZW5nZSoqCgpJbiB0aGlzIGxlc3NvbiwgeW91IHVzZWQgeW91ciBjbGVhbmVkIGRhdGEgdG8gYnVpbGQgYSBtYWNoaW5lIGxlYXJuaW5nIG1vZGVsIHRoYXQgY2FuIHByZWRpY3QgYSBuYXRpb25hbCBjdWlzaW5lIGJhc2VkIG9uIGEgc2VyaWVzIG9mIGluZ3JlZGllbnRzLiBUYWtlIHNvbWUgdGltZSB0byByZWFkIHRocm91Z2ggdGhlIFttYW55IG9wdGlvbnNdKGh0dHBzOi8vd3d3LnRpZHltb2RlbHMub3JnL2ZpbmQvcGFyc25pcC8jbW9kZWxzKSBUaWR5bW9kZWxzIHByb3ZpZGVzIHRvIGNsYXNzaWZ5IGRhdGEgYW5kIFtvdGhlciB3YXlzXShodHRwczovL3BhcnNuaXAudGlkeW1vZGVscy5vcmcvYXJ0aWNsZXMvYXJ0aWNsZXMvRXhhbXBsZXMuaHRtbCNtdWx0aW5vbV9yZWctbW9kZWxzKSB0byBmaXQgbXVsdGlub21pYWwgcmVncmVzc2lvbi4KCiMjIyMgVEhBTksgWU9VIFRPOgoKW2BBbGxpc29uIEhvcnN0YF0oaHR0cHM6Ly90d2l0dGVyLmNvbS9hbGxpc29uX2hvcnN0LykgZm9yIGNyZWF0aW5nIHRoZSBhbWF6aW5nIGlsbHVzdHJhdGlvbnMgdGhhdCBtYWtlIFIgbW9yZSB3ZWxjb21pbmcgYW5kIGVuZ2FnaW5nLiBGaW5kIG1vcmUgaWxsdXN0cmF0aW9ucyBhdCBoZXIgW2dhbGxlcnldKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cHM6Ly9naXRodWIuY29tL2FsbGlzb25ob3JzdC9zdGF0cy1pbGx1c3RyYXRpb25zJnNhPUQmc291cmNlPWVkaXRvcnMmdXN0PTE2MjYzODA3NzI1MzAwMDAmdXNnPUFPdlZhdzN6Y2Z5Q2l6RlFacGtTTHp4aWlRRU0pLgoKW0Nhc3NpZSBCcmV2aXVdKGh0dHBzOi8vd3d3LnR3aXR0ZXIuY29tL2Nhc3NpZXZpZXcpIGFuZCBbSmVuIExvb3Blcl0oaHR0cHM6Ly93d3cudHdpdHRlci5jb20vamVubG9vcGVyKSBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsIFB5dGhvbiB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlIOKZpe+4jwoKSGFwcHkgTGVhcm5pbmcsCgpbRXJpY10oaHR0cHM6Ly90d2l0dGVyLmNvbS9lcmljbnRheSksIEdvbGQgTWljcm9zb2Z0IExlYXJuIFN0dWRlbnQgQW1iYXNzYWRvci4K