From: Eric Hodel Date: 2010-11-30T05:36:21+09:00 Subject: [ruby-core:33469] [Ruby 1.9-Feature#4100][Open] Improve Net::HTTP documentation --mimepart_4cf40ec293046_2c1fb7ef5d016bd Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4100: Improve Net::HTTP documentation http://redmine.ruby-lang.org/issues/show/4100 Author: Eric Hodel Status: Open, Priority: Normal Category: DOC The attached patch reorganizes and further explains how to use Net::HTTP.= The patch emphasizes using the persistent connection APIs over the simple= r but more convenient non-persistent APIs. The documentation now starts with an example using start/request, continu= es to describing how to extract data from a response, follow redirects an= d make POSTs which should be the most common operations. Following that is examples for setting headers, basic authentication, str= eaming response bodies, HTTPS and proxies. HTTPS documentation was moved from net/https.rb to the appropriate locati= ons in Net::HTTP. The final examples are for the Net::HTTP class methods ::get, ::get_respo= nse and ::post_form as they do not maintain persistent connections. The HTTP request and response class sections have been modified to use rd= oc lists. The patch is on top of Mike Perham's patch in #4093 but moves the usernam= e/password Net::HTTP::Proxy example to the Net::HTTP::Proxy method. ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4cf40ec293046_2c1fb7ef5d016bd Content-Type: application/octet-stream; name=net.http.rb.doc.patch Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=net.http.rb.doc.patch SW5kZXg6IGxpYi9uZXQvaHR0cC5yYgo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBsaWIvbmV0L2h0dHAucmIJKHJldmlzaW9uIDI5OTc2KQorKysgbGli L25ldC9odHRwLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNDcgKzMyLDM1 MSBAQCBtb2R1bGUgTmV0ICAgIzpub2RvYzoKIAogICAjID09IEFuIEhUVFAg Y2xpZW50IEFQSSBmb3IgUnVieS4KICAgIwotICAjIEZvciBtb3JlIGRldGFp bHMgYWJvdXQgSFRUUCwgc2VlIFtSRkMyNjE2XShodHRwOi8vd3d3LmlldGYu b3JnL3JmYy9yZmMyNjE2LnR4dCkuCisgICMgTmV0OjpIVFRQIHByb3ZpZGVz IGEgcmljaCBsaWJyYXJ5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGJ1aWxkIEhU VFAKKyAgIyB1c2VyLWFnZW50cy4gIEZvciBtb3JlIGRldGFpbHMgYWJvdXQg SFRUUCBzZWUKKyAgIyBbUkZDMjYxNl0oaHR0cDovL3d3dy5pZXRmLm9yZy9y ZmMvcmZjMjYxNi50eHQpCiAgICMKLSAgIyA9PSBFeGFtcGxlcworICAjIE5l dDo6SFRUUCBpcyBkZXNpZ25lZCB0byB3b3JrIGNsb3NlbHkgd2l0aCBVUkku ICBVUkk6OkhUVFAjaG9zdCwKKyAgIyBVUkk6OkhUVFAjcG9ydCBhbmQgVVJJ OjpIVFRQI3JlcXVlc3RfdXJpIGFyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGgK KyAgIyBOZXQ6OkhUVFAuCiAgICMKLSAgIyA9PT0gRmV0Y2hpbmcgRG9jdW1l bnRzCisgICMgSWYgeW91IGFyZSBvbmx5IHBlcmZvcm1pbmcgYSBmZXcgR0VU IHJlcXVlc3RzIHlvdSBzaG91bGQgdHJ5IE9wZW5VUkkuCiAgICMKLSAgIyBT aW1wbGUgR0VUCisgICMgPT0gSG93IHRvIHVzZSBOZXQ6OkhUVFAKICAgIwot ICAjICAgICByZXF1aXJlICduZXQvaHR0cCcKLSAgIyAgICAgTmV0OjpIVFRQ LmdldCgnd3d3LmV4YW1wbGUuY29tJywgJy9pbmRleC5odG1sJykgPT4gU3Ry aW5nCi0gICMKLSAgIyBTaW1wbGUgR0VUIGJ5IFVSSSBvYmplY3QKLSAgIwot ICAjICAgICByZXF1aXJlICduZXQvaHR0cCcKLSAgIyAgICAgcmVxdWlyZSAn dXJpJwotICAjICAgICBOZXQ6OkhUVFAuZ2V0KFVSSS5wYXJzZSgnaHR0cDov L3d3dy5leGFtcGxlLmNvbS9pbmRleC5odG1sP2NvdW50PTEwJykpID0+IFN0 cmluZwotICAjCi0gICMgTW9yZSBnZW5lcmljIEdFVCB3aXRoIGR5bmFtaWMg cGFyYW1ldGVycwotICAjCi0gICMgICAgcmVxdWlyZSAnbmV0L2h0dHAnCi0g ICMgICAgcmVxdWlyZSAndXJpJwotICAjCi0gICMgICAgdXJpID0gVVJJLnBh cnNlKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2luZGV4Lmh0bWwnKQotICAj ICAgIHBhcmFtcyA9IHsgOmxpbWl0ID0+IDEwLCA6cGFnZSA9PiAzIH0KLSAg IyAgICB1cmkucXVlcnkgPSBVUkkuZW5jb2RlX3d3d19mb3JtKHBhcmFtcykK LSAgIyAgICByZXMgPSBOZXQ6OkhUVFAuZ2V0X3Jlc3BvbnNlKHVyaSkKLSAg IyAgICBwdXRzIHJlcy5ib2R5IGlmIHJlcy5pc19hPyhOZXQ6OkhUVFBTdWNj ZXNzKQotICAjCi0gICMgRXZlbiBtb3JlIGdlbmVyaWMgR0VUIHdpdGggQmFz aWMgQXV0aCBhbmQgY3VzdG9tIGhlYWRlcgotICAjCi0gICMgICAgcmVxdWly ZSAnbmV0L2h0dHAnCi0gICMKLSAgIyAgICB1cmkgPSBVUkkucGFyc2UoJ2h0 dHA6Ly93d3cuZXhhbXBsZS5jb20vaW5kZXguaHRtbD9rZXk9dmFsdWUnKQot ICAjICAgIHJlcSA9IE5ldDo6SFRUUDo6R2V0Lm5ldyh1cmkucmVxdWVzdF91 cmkpCi0gICMgICAgcmVxLmJhc2ljX2F1dGggJ3VzZXInLCAncGFzcycKLSAg IyAgICByZXFbJ1gtQ3VzdG9tLUhlYWRlciddID0gVGltZS5ub3cudG9faQot ICAjICAgIHJlcyA9IE5ldDo6SFRUUC5zdGFydCh1cmkuaG9zdG5hbWUsIHVy aS5wb3J0KSB7fGh0dHB8Ci0gICMgICAgICBodHRwLnJlcXVlc3QocmVxKQot ICAjICAgIH0KLSAgIyAgICBwdXRzIHJlcy5ib2R5Ci0gICMKLSAgIyBBY2Nl c3NpbmcgUmVzcG9uc2UgZGF0YToKLSAgIwotICAjICAgICByZXMgPSBOZXQ6 OkhUVFAuZ2V0X3Jlc3BvbnNlKFVSSS5wYXJzZSgnaHR0cDovL3d3dy5leGFt cGxlLmNvbS9pbmRleC5odG1sJykpCi0gICMgICAgICMgSGVhZGVycwotICAj ICAgICByZXNbJ1NldC1Db29raWUnXSAgICAgICAgICAgID0+IFN0cmluZwot ICAjICAgICByZXMuZ2V0X2ZpZWxkcygnc2V0LWNvb2tpZScpID0+IEFycmF5 Ci0gICMgICAgIHJlcy50b19oYXNoWydzZXQtY29va2llJ10gICAgPT4gQXJy YXkKLSAgIyAgICAgcHV0cyAiSGVhZGVyczogI3tyZXMudG9faGFzaC5pbnNw ZWN0fSIKLSAgIyAgICAgIyBTdGF0dXMKLSAgIyAgICAgcHV0cyByZXMuY29k ZSA9PiAnMjAwJwotICAjICAgICBwdXRzIHJlcy5tZXNzYWdlID0+ICdPSycK LSAgIyAgICAgcHV0cyByZXMuY2xhc3MubmFtZSA9PiAnSFRUUE9LJwotICAj ICAgICBwdXRzIHJlcy5ib2R5Ci0gICMKLSAgIyA9PT0gUG9zdGluZyBGb3Jt IERhdGEKLSAgIwotICAjICAgICByZXF1aXJlICduZXQvaHR0cCcKLSAgIyAg ICAgcmVxdWlyZSAndXJpJwotICAjCi0gICMgICAgICMxOiBTaW1wbGUgUE9T VAotICAjICAgICByZXMgPSBOZXQ6OkhUVFAucG9zdF9mb3JtKFVSSS5wYXJz ZSgnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zZWFyY2guY2dpJyksCi0gICMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydxJyA9PiAncnVieScs ICdtYXgnID0+ICc1MCd9KQotICAjICAgICBwdXRzIHJlcy5ib2R5Ci0gICMK LSAgIyAgICAgIzI6IFBPU1Qgd2l0aCBiYXNpYyBhdXRoZW50aWNhdGlvbgot ICAjICAgICByZXMgPSBOZXQ6OkhUVFAucG9zdF9mb3JtKFVSSS5wYXJzZSgn aHR0cDovL2phY2s6cGFzc0B3d3cuZXhhbXBsZS5jb20vdG9kby5jZ2knKSwK LSAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eydmcm9tJyA9PiAnMjAwNS0wMS0wMScsCi0gICMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAndG8nID0+ICcyMDA1LTAzLTMx J30pCi0gICMgICAgIHB1dHMgcmVzLmJvZHkKLSAgIwotICAjICAgICAjMzog RGV0YWlsZWQgY29udHJvbAotICAjICAgICB1cmkgPSBVUkkucGFyc2UoJ2h0 dHA6Ly93d3cuZXhhbXBsZS5jb20vdG9kby5jZ2knKQotICAjICAgICByZXEg PSBOZXQ6OkhUVFA6OlBvc3QubmV3KHVyaS5wYXRoKQotICAjICAgICByZXEu YmFzaWNfYXV0aCAnamFjaycsICdwYXNzJwotICAjICAgICByZXEuc2V0X2Zv cm1fZGF0YSh7J2Zyb20nID0+ICcyMDA1LTAxLTAxJywgJ3RvJyA9PiAnMjAw NS0wMy0zMSd9LCAnOycpCi0gICMgICAgIHJlcyA9IE5ldDo6SFRUUC5uZXco dXJpLmhvc3RuYW1lLCB1cmkucG9ydCkuc3RhcnQge3xodHRwfCBodHRwLnJl cXVlc3QocmVxKSB9Ci0gICMgICAgIGNhc2UgcmVzCi0gICMgICAgIHdoZW4g TmV0OjpIVFRQU3VjY2VzcywgTmV0OjpIVFRQUmVkaXJlY3Rpb24KLSAgIyAg ICAgICAjIE9LCisgICMgTmV0OjpIVFRQIHByb3ZpZGVzIHNldmVyYWwgY29u dmVuaWVuY2UgbWV0aG9kcyBmb3IgcGVyZm9ybWluZyBhIEdFVCBvbiBhCisg ICMgd2ViIHNlcnZlciB3aGljaCBhcmUgZGVzY3JpYmVkIGJlbG93LgorICAj CisgICMgQWxsIGV4YW1wbGVzIGFzc3VtZSB5b3UgaGF2ZSBsb2FkZWQgTmV0 OjpIVFRQIHdpdGg6CisgICMKKyAgIyAgIHJlcXVpcmUgJ25ldC9odHRwJwor ICAjCisgICMgVGhpcyB3aWxsIGFsc28gcmVxdWlyZSAndXJpJyBzbyB5b3Ug ZG9uJ3QgbmVlZCB0byByZXF1aXJlIGl0IHNlcGFyYXRlbHkuCisgICMKKyAg IyBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBjYW4gYmUgdXNlZCBhcyB0 aGUgYmFzaXMgb2YgYSBIVFRQIHVzZXItYWdlbnQKKyAgIyB3aGljaCB3aWxs IHBlcmZvcm0gYSB2YXJpZXR5IG9mIHJlcXVlc3QgdHlwZXMuCisgICMKKyAg IyAgIHVyaSA9IFVSSS5wYXJzZSAnaHR0cDovL2V4YW1wbGUuY29tL3NvbWVf cGF0aD9xdWVyeT1zdHJpbmcnCisgICMKKyAgIyAgIE5ldDo6SFRUUC5zdGFy dCB1cmkuaG9zdCwgdXJpLnBvcnQgZG8gfGh0dHB8CisgICMgICAgIHJlcXVl c3QgPSBOZXQ6OkhUVFA6OkdldC5uZXcgdXJpLnJlcXVlc3RfdXJpCisgICMK KyAgIyAgICAgcmVzcG9uc2UgPSBodHRwLnJlcXVlc3QgcmVxdWVzdCAjIE5l dDo6SFRUUFJlc3BvbnNlIG9iamVjdAorICAjICAgZW5kCisgICMKKyAgIyBO ZXQ6OkhUVFA6OnN0YXJ0IGltbWVkaWF0ZWx5IGNyZWF0ZXMgYSBjb25uZWN0 aW9uIHRvIGFuIEhUVFAgc2VydmVyIHdoaWNoCisgICMgaXMga2VwdCBvcGVu IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGJsb2NrLiAgVGhlIGNvbm5lY3Rp b24gd2lsbCByZW1haW4KKyAgIyBvcGVuIGZvciBtdWx0aXBsZSByZXF1ZXN0 cyBpbiB0aGUgYmxvY2sgaWYgdGhlIHNlcnZlciBpbmRpY2F0ZXMgaXQKKyAg IyBzdXBwb3J0cyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLgorICAjCisgICMg VGhlIHJlcXVlc3QgdHlwZXMgTmV0OjpIVFRQIHN1cHBvcnRzIGFyZSBsaXN0 ZWQgYmVsb3cgaW4gdGhlIHNlY3Rpb24gIkhUVFAKKyAgIyBSZXF1ZXN0IENs YXNzZXMiLgorICAjCisgICMgSWYgeW91IHdpc2ggdG8gcmUtdXNlIGEgY29u bmVjdGlvbiBhY3Jvc3MgbXVsdGlwbGUgSFRUUCByZXF1ZXN0cyB3aXRob3V0 CisgICMgYXV0b21hdGljYWxseSBjbG9zaW5nIGl0IHlvdSBjYW4gdXNlIDo6 bmV3IGluc3RlYWQgb2YgOjpzdGFydC4gICNyZXF1ZXN0CisgICMgd2lsbCBh dXRvbWF0aWNhbGx5IG9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIg aWYgb25lIGlzIG5vdCBjdXJyZW50bHkKKyAgIyBvcGVuLiAgWW91IGNhbiBt YW51YWxseSBjbG9zZSB0aGUgY29ubmVjdGlvbiB3aXRoICNjbG9zZS4KKyAg IworICAjID09PSBSZXNwb25zZSBEYXRhCisgICMKKyAgIyAgIHVyaSA9IFVS SS5wYXJzZSgnaHR0cDovL2V4YW1wbGUuY29tL2luZGV4Lmh0bWwnKQorICAj ICAgcmVzID0gTmV0OjpIVFRQLmdldF9yZXNwb25zZSh1cmkpCisgICMKKyAg IyAgICMgSGVhZGVycworICAjICAgcmVzWydTZXQtQ29va2llJ10gICAgICAg ICAgICAjID0+IFN0cmluZworICAjICAgcmVzLmdldF9maWVsZHMoJ3NldC1j b29raWUnKSAjID0+IEFycmF5CisgICMgICByZXMudG9faGFzaFsnc2V0LWNv b2tpZSddICAgICMgPT4gQXJyYXkKKyAgIyAgIHB1dHMgIkhlYWRlcnM6ICN7 cmVzLnRvX2hhc2guaW5zcGVjdH0iCisgICMKKyAgIyAgICMgU3RhdHVzCisg ICMgICBwdXRzIHJlcy5jb2RlICAgICAgICMgPT4gJzIwMCcKKyAgIyAgIHB1 dHMgcmVzLm1lc3NhZ2UgICAgIyA9PiAnT0snCisgICMgICBwdXRzIHJlcy5j bGFzcy5uYW1lICMgPT4gJ0hUVFBPSycKKyAgIworICAjICAgIyBCb2R5Cisg ICMgICBwdXRzIHJlcy5ib2R5IGlmIHJlcy5yZXNwb25zZV9ib2R5X3Blcm1p dHRlZD8KKyAgIworICAjID09PSBGb2xsb3dpbmcgUmVkaXJlY3Rpb24KKyAg IworICAjIEVhY2ggTmV0OjpIVFRQUmVzcG9uc2Ugb2JqZWN0IGJlbG9uZ3Mg dG8gYSBjbGFzcyBmb3IgaXRzIHJlc3BvbnNlIGNvZGUuCisgICMKKyAgIyBG b3IgZXhhbXBsZSwgYWxsIDJYWCByZXNwb25zZXMgYXJlIGluc3RhbmNlcyBv ZiBhIE5ldDo6SFRUUFN1Y2Nlc3MKKyAgIyBzdWJjbGFzcywgYSAzWFggcmVz cG9uc2UgaXMgYW4gaW5zdGFuY2Ugb2YgYSBOZXQ6OkhUVFBSZWRpcmVjdGlv bgorICAjIHN1YmNsYXNzIGFuZCBhIDIwMCByZXNwb25zZSBpcyBhbiBpbnN0 YW5jZSBvZiB0aGUgTmV0OjpIVFRQT0sgY2xhc3MuICBGb3IKKyAgIyBkZXRh aWxzIG9mIHJlc3BvbnNlIGNsYXNzZXMsIHNlZSB0aGUgc2VjdGlvbiAiSFRU UCBSZXNwb25zZSBDbGFzc2VzIgorICAjIGJlbG93LgorICAjCisgICMgVXNp bmcgYSBjYXNlIHN0YXRlbWVudCB5b3UgY2FuIGhhbmRsZSB2YXJpb3VzIHR5 cGVzIG9mIHJlc3BvbnNlcyBwcm9wZXJseToKKyAgIworICAjICAgZGVmIGZl dGNoKHVyaV9zdHIsIGxpbWl0ID0gMTApCisgICMgICAgICMgWW91IHNob3Vs ZCBjaG9vc2UgYSBiZXR0ZXIgZXhjZXB0aW9uLgorICAjICAgICByYWlzZSBB cmd1bWVudEVycm9yLCAndG9vIG1hbnkgSFRUUCByZWRpcmVjdHMnIGlmIGxp bWl0ID09IDAKKyAgIworICAjICAgICByZXNwb25zZSA9IE5ldDo6SFRUUC5n ZXRfcmVzcG9uc2UoVVJJLnBhcnNlKHVyaV9zdHIpKQorICAjCisgICMgICAg IGNhc2UgcmVzcG9uc2UKKyAgIyAgICAgd2hlbiBOZXQ6OkhUVFBTdWNjZXNz IHRoZW4KKyAgIyAgICAgICByZXNwb25zZQorICAjICAgICB3aGVuIE5ldDo6 SFRUUFJlZGlyZWN0aW9uIHRoZW4KKyAgIyAgICAgICBsb2NhdGlvbiA9IHJl c3BvbnNlWydsb2NhdGlvbiddCisgICMgICAgICAgd2FybiAicmVkaXJlY3Rl ZCB0byAje2xvY2F0aW9ufSIKKyAgIyAgICAgICBmZXRjaChsb2NhdGlvbiwg bGltaXQgLSAxKQogICAjICAgICBlbHNlCi0gICMgICAgICAgcmVzLmVycm9y IQorICAjICAgICAgICMgdHVybnMgYSByZXNwb25zZSBvYmplY3QgaW50byBh biBlcnJvciBjbGFzcyBhbmQgcmFpc2VzIGl0CisgICMgICAgICAgcmVzcG9u c2UuZXJyb3IhCiAgICMgICAgIGVuZAorICAjICAgZW5kCiAgICMKLSAgIyAg ICAgIzQ6IE11bHRpcGxlIHZhbHVlcwotICAjICAgICByZXMgPSBOZXQ6OkhU VFAucG9zdF9mb3JtKFVSSS5wYXJzZSgnaHR0cDovL3d3dy5leGFtcGxlLmNv bS9zZWFyY2guY2dpJyksCi0gICMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeydxJyA9PiBbJ3J1YnknLCAncGVybCddLCAnbWF4JyA9PiAnNTAn fSkKLSAgIyAgICAgcHV0cyByZXMuYm9keQorICAjICAgcHJpbnQgZmV0Y2go J2h0dHA6Ly93d3cucnVieS1sYW5nLm9yZycpCiAgICMKLSAgIyA9PT0gQWNj ZXNzaW5nIHZpYSBQcm94eQorICAjID09PSBQT1NUCiAgICMKLSAgIyBOZXQ6 OkhUVFA6OlByb3h5IGhhcyB0aGUgc2FtZSBtZXRob2RzIGFzIE5ldDo6SFRU UCBidXQgaXRzIGluc3RhbmNlcyBhbHdheXMKLSAgIyBjb25uZWN0IHZpYSB0 aGUgcHJveHksIGluc3RlYWQgb2YgZ2l2ZW4gaG9zdC4KKyAgIyBBIFBPU1Qg Y2FuIGJlIG1hZGUgdXNpbmcgdGhlIE5ldDo6SFRUUDo6UG9zdCByZXF1ZXN0 IGNsYXNzLiAgVGhpcyBleGFtcGxlCisgICMgY3JlYXRlcyBhIHVybGVuY29k ZWQgUE9TVCBib2R5OgogICAjCi0gICMgICAgIHJlcXVpcmUgJ25ldC9odHRw JworICAjICAgdXJpID0gVVJJLnBhcnNlKCdodHRwOi8vd3d3LmV4YW1wbGUu Y29tL3RvZG8uY2dpJykKKyAgIyAgIHJlcSA9IE5ldDo6SFRUUDo6UG9zdC5u ZXcodXJpLnBhdGgpCisgICMgICByZXEuc2V0X2Zvcm1fZGF0YSgnZnJvbScg PT4gJzIwMDUtMDEtMDEnLCAndG8nID0+ICcyMDA1LTAzLTMxJykKICAgIwot ICAjICAgICBwcm94eV9hZGRyID0gJ3lvdXIucHJveHkuaG9zdCcKLSAgIyAg ICAgcHJveHlfcG9ydCA9IDgwODAKLSAgIyAgICAgICAgICAgICA6Ci0gICMg ICAgIE5ldDo6SFRUUDo6UHJveHkocHJveHlfYWRkciwgcHJveHlfcG9ydCku c3RhcnQoJ3d3dy5leGFtcGxlLmNvbScpIHt8aHR0cHwKLSAgIyAgICAgICAj IGFsd2F5cyBjb25uZWN0IHRvIHlvdXIucHJveHkuYWRkcjo4MDgwCi0gICMg ICAgICAgICAgICAgOgotICAjICAgICB9Ci0gICMKLSAgIyBTaW5jZSBOZXQ6 OkhUVFA6OlByb3h5IHJldHVybnMgTmV0OjpIVFRQIGl0c2VsZiB3aGVuIHBy b3h5X2FkZHIgaXMgbmlsLAotICAjIHRoZXJlJ3Mgbm8gbmVlZCB0byBjaGFu Z2UgY29kZSBpZiB0aGVyZSdzIGEgcHJveHkgb3Igbm90LgotICAjCi0gICMg VGhlcmUgYXJlIHR3byBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW4gTmV0OjpI VFRQOjpQcm94eSB3aGljaCB5b3UgY2FuIHVzZSB0bwotICAjIHNwZWNpZnkg YSBwcm94eSB1c2VybmFtZSBhbmQgcGFzc3dvcmQ6Ci0gICMKLSAgIyAgICAg TmV0OjpIVFRQOjpQcm94eShwcm94eV9hZGRyLCBwcm94eV9wb3J0LCBwcm94 eV91c2VyID0gbmlsLCBwcm94eV9wYXNzID0gbmlsKQotICAjCi0gICMgWW91 IG1heSB1c2UgdGhlbSB0byB3b3JrIHdpdGggYXV0aG9yaXphdGlvbi1lbmFi bGVkIHByb3hpZXM6Ci0gICMKLSAgIyAgICAgcmVxdWlyZSAnbmV0L2h0dHAn Ci0gICMgICAgIHJlcXVpcmUgJ3VyaScKLSAgIwotICAjICAgICBwcm94eV9o b3N0ID0gJ3lvdXIucHJveHkuaG9zdCcKLSAgIyAgICAgcHJveHlfcG9ydCA9 IDgwODAKLSAgIyAgICAgdXJpID0gVVJJLnBhcnNlKEVOVlsnaHR0cF9wcm94 eSddKQotICAjICAgICBwcm94eV91c2VyLCBwcm94eV9wYXNzID0gdXJpLnVz ZXJpbmZvLnNwbGl0KC86LykgaWYgdXJpLnVzZXJpbmZvCi0gICMgICAgIE5l dDo6SFRUUDo6UHJveHkocHJveHlfaG9zdCwgcHJveHlfcG9ydCwKLSAgIyAg ICAgICAgICAgICAgICAgICAgICBwcm94eV91c2VyLCBwcm94eV9wYXNzKS5z dGFydCgnd3d3LmV4YW1wbGUuY29tJykge3xodHRwfAotICAjICAgICAgICMg YWx3YXlzIGNvbm5lY3QgdG8geW91ci5wcm94eS5hZGRyOjgwODAgdXNpbmcg c3BlY2lmaWVkIHVzZXJuYW1lIGFuZCBwYXNzd29yZAotICAjICAgICAgICAg ICAgIDoKLSAgIyAgICAgfQorICAjICAgcmVzID0gTmV0OjpIVFRQLm5ldyh1 cmkuaG9zdG5hbWUsIHVyaS5wb3J0KS5zdGFydCBkbyB8aHR0cHwKKyAgIyAg ICAgaHR0cC5yZXF1ZXN0KHJlcSkKKyAgIyAgIGVuZAogICAjCi0gICMgTm90 ZSB0aGF0IG5ldC9odHRwIGRvZXMgbm90IHVzZSB0aGUgSFRUUF9QUk9YWSBl bnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgIyBJZiB5b3Ugd2FudCB0byB1c2Ug YSBwcm94eSwgeW91IG11c3Qgc2V0IGl0IGV4cGxpY2l0bHkuCisgICMgICBj YXNlIHJlcworICAjICAgd2hlbiBOZXQ6OkhUVFBTdWNjZXNzLCBOZXQ6OkhU VFBSZWRpcmVjdGlvbgorICAjICAgICAjIE9LCisgICMgICBlbHNlCisgICMg ICAgIHJlcy5lcnJvciEKKyAgIyAgIGVuZAogICAjCi0gICMgPT09IEZvbGxv d2luZyBSZWRpcmVjdGlvbgorICAjIEF0IHRoaXMgdGltZSBOZXQ6OkhUVFAg ZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhLiAgVG8gc2Vu ZAorICAjIG11bHRpcGFydC9mb3JtLWRhdGEgdXNlIE5ldDo6SFRUUFJlcXVl c3QjYm9keT0gYW5kCisgICMgTmV0OjpIVFRQUmVxdWVzdCNjb250ZW50X3R5 cGU9OgorICAjCisgICMgICByZXEgPSBOZXQ6OkhUVFA6OlBvc3QubmV3KHVy aS5wYXRoKQorICAjICAgcmVxLmJvZHkgPSBtdWx0aXBhcnRfZGF0YQorICAj ICAgcmVxLmNvbnRlbnRfdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJwor ICAjCisgICMgT3RoZXIgcmVxdWVzdHMgdGhhdCBjYW4gY29udGFpbiBhIGJv ZHkgc3VjaCBhcyBQVVQgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlCisgICMgc2Ft ZSB3YXkgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcmVxdWVzdCBjbGFzcyAo TmV0OjpIVFRQOjpQdXQpLgorICAjCisgICMgPT09IFNldHRpbmcgSGVhZGVy cworICAjCisgICMgVGhlIGZvbGxvd2luZyBleGFtcGxlIHBlcmZvcm1zIGEg Y29uZGl0aW9uYWwgR0VUIHVzaW5nIHRoZQorICAjIElmLU1vZGlmaWVkLVNp bmNlIGhlYWRlci4gIElmIHRoZSBmaWxlcyBoYXMgbm90IGJlZW4gbW9kaWZp ZWQgc2luY2UgdGhlCisgICMgdGltZSBpbiB0aGUgaGVhZGVyIGEgTm90IE1v ZGlmaWVkIHJlc3BvbnNlIHdpbGwgYmUgcmV0dXJuZWQuICBTZWUgUkZDIDI2 MTYKKyAgIyBzZWN0aW9uIDkuMyBmb3IgZnVydGhlciBkZXRhaWxzLgorICAj CisgICMgICB1cmkgPSBVUkkucGFyc2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS9j YWNoZWRfcmVzcG9uc2UnKQorICAjICAgZmlsZSA9IEZpbGUuc3RhdCAnY2Fj aGVkX3Jlc3BvbnNlJworICAjCisgICMgICByZXEgPSBOZXQ6OkhUVFA6Okdl dC5uZXcodXJpLnJlcXVlc3RfdXJpKQorICAjICAgcmVxWydJZi1Nb2RpZmll ZC1TaW5jZSddID0gZmlsZS5tdGltZS5yZmMyODIyCisgICMKKyAgIyAgIHJl cyA9IE5ldDo6SFRUUC5zdGFydCh1cmkuaG9zdG5hbWUsIHVyaS5wb3J0KSB7 fGh0dHB8CisgICMgICAgIGh0dHAucmVxdWVzdChyZXEpCisgICMgICB9Cisg ICMKKyAgIyAgIG9wZW4gJ2NhY2hlZF9yZXNwb25zZScsICd3JyBkbyB8aW98 CisgICMgICAgIGlvLndyaXRlIHJlcy5ib2R5CisgICMgICBlbmQgaWYgcmVz LmlzX2E/KE5ldDo6SFRUUFN1Y2Nlc3MpCisgICMKKyAgIyA9PT0gQmFzaWMg QXV0aGVudGljYXRpb24KKyAgIworICAjIEJhc2ljIGF1dGhlbnRpY2F0aW9u IGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8KKyAgIyBbUkZDMjYxN10oaHR0 cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjYxNy50eHQpCisgICMgCisgICMg ICB1cmkgPSBVUkkucGFyc2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS9pbmRleC5o dG1sP2tleT12YWx1ZScpCisgICMKKyAgIyAgIHJlcSA9IE5ldDo6SFRUUDo6 R2V0Lm5ldyh1cmkucmVxdWVzdF91cmkpCisgICMgICByZXEuYmFzaWNfYXV0 aCAndXNlcicsICdwYXNzJworICAjCisgICMgICByZXMgPSBOZXQ6OkhUVFAu c3RhcnQodXJpLmhvc3RuYW1lLCB1cmkucG9ydCkge3xodHRwfAorICAjICAg ICBodHRwLnJlcXVlc3QocmVxKQorICAjICAgfQorICAjICAgcHV0cyByZXMu Ym9keQorICAjCisgICMgPT09IFN0cmVhbWluZyBSZXNwb25zZSBCb2RpZXMK KyAgIworICAjIEJ5IGRlZmF1bHQgTmV0OjpIVFRQIHJlYWRzIGFuIGVudGly ZSByZXNwb25zZSBpbnRvIG1lbW9yeS4gIElmIHlvdSBhcmUKKyAgIyBoYW5k bGluZyBsYXJnZSBmaWxlcyBvciB3aXNoIHRvIGltcGxlbWVudCBhIHByb2dy ZXNzIGJhciB5b3UgY2FuIGluc3RlYWQKKyAgIyBzdHJlYW0gdGhlIGJvZHkg ZGlyZWN0bHkgdG8gYW4gSU8uCiAgICMKLSAgIyAgICAgcmVxdWlyZSAnbmV0 L2h0dHAnCi0gICMgICAgIHJlcXVpcmUgJ3VyaScKKyAgIyAgIHVyaSA9IFVS SS5wYXJzZSAnaHR0cDovL2V4YW1wbGUuY29tL2xhcmdlX2ZpbGUnCiAgICMK LSAgIyAgICAgZGVmIGZldGNoKHVyaV9zdHIsIGxpbWl0ID0gMTApCi0gICMg ICAgICAgIyBZb3Ugc2hvdWxkIGNob29zZSBiZXR0ZXIgZXhjZXB0aW9uLgot ICAjICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdIVFRQIHJlZGlyZWN0 IHRvbyBkZWVwJyBpZiBsaW1pdCA9PSAwCi0gICMKLSAgIyAgICAgICByZXNw b25zZSA9IE5ldDo6SFRUUC5nZXRfcmVzcG9uc2UoVVJJLnBhcnNlKHVyaV9z dHIpKQotICAjICAgICAgIGNhc2UgcmVzcG9uc2UKLSAgIyAgICAgICB3aGVu IE5ldDo6SFRUUFN1Y2Nlc3MgICAgIHRoZW4gcmVzcG9uc2UKLSAgIyAgICAg ICB3aGVuIE5ldDo6SFRUUFJlZGlyZWN0aW9uIHRoZW4gZmV0Y2gocmVzcG9u c2VbJ2xvY2F0aW9uJ10sIGxpbWl0IC0gMSkKLSAgIyAgICAgICBlbHNlCi0g ICMgICAgICAgICByZXNwb25zZS5lcnJvciEKKyAgIyAgIE5ldDo6SFRUUC5z dGFydCB1cmkuaG9zdCwgdXJpLnBvcnQgZG8gfGh0dHB8CisgICMgICAgIHJl cXVlc3QgPSBOZXQ6OkhUVFA6OkdldC5uZXcgdXJpLnJlcXVlc3RfdXJpCisg ICMKKyAgIyAgICAgaHR0cC5yZXF1ZXN0IHJlcXVlc3QgZG8gfHJlc3BvbnNl fAorICAjICAgICAgIG9wZW4gJ2xhcmdlX2ZpbGUnLCAndycgZG8gfGlvfAor ICAjICAgICAgICAgcmVzcG9uc2UucmVhZF9ib2R5IGRvIHxjaHVua3wKKyAg IyAgICAgICAgICAgaW8ud3JpdGUgY2h1bmsKKyAgIyAgICAgICAgIGVuZAog ICAjICAgICAgIGVuZAogICAjICAgICBlbmQKKyAgIyAgIGVuZAorICAjCisg ICMgPT09IEhUVFBTCisgICMKKyAgIyBIVFRQUyBpcyBlbmFibGVkIGZvciBh biBIVFRQIGNvbm5lY3Rpb24gYnkgTmV0OjpIVFRQI3VzZV9zc2w9LgorICAj CisgICMgICB1cmkgPSBVUkkucGFyc2UgJ2h0dHBzOi8vc2VjdXJlLmV4YW1w bGUuY29tL3NvbWVfcGF0aD9xdWVyeT1zdHJpbmcnCisgICMKKyAgIyAgIE5l dDo6SFRUUC5uZXcgdXJpLmhvc3QsIHVyaS5wb3J0CisgICMgICBodHRwLnVz ZV9zc2wgPSB1cmkuc2NoZW1lID09ICdodHRwcycKKyAgIworICAjICAgaHR0 cC5zdGFydCBkbworICAjICAgICByZXF1ZXN0ID0gTmV0OjpIVFRQOjpHZXQu bmV3IHVyaS5yZXF1ZXN0X3VyaQorICAjCisgICMgICAgIHJlc3BvbnNlID0g aHR0cC5yZXF1ZXN0IHJlcXVlc3QgIyBOZXQ6OkhUVFBSZXNwb25zZSBvYmpl Y3QKKyAgIyAgIGVuZAorICAjCisgICMgSW4gcHJldmlvdXMgdmVyc2lvbnMg b2YgcnVieSB5b3Ugd291bGQgbmVlZCB0byByZXF1aXJlICduZXQvaHR0cHMn IHRvIHVzZQorICAjIEhUVFBTLiAgVGhpcyBpcyBubyBsb25nZXIgdHJ1ZS4K KyAgIworICAjID09PSBQcm94aWVzCiAgICMKLSAgIyAgICAgcHJpbnQgZmV0 Y2goJ2h0dHA6Ly93d3cucnVieS1sYW5nLm9yZycpCisgICMgTmV0OjpIVFRQ OjpQcm94eSBoYXMgdGhlIHNhbWUgbWV0aG9kcyBhcyBOZXQ6OkhUVFAgYnV0 IGl0cyBpbnN0YW5jZXMgYWx3YXlzCisgICMgY29ubmVjdCB2aWEgdGhlIHBy b3h5LCBpbnN0ZWFkIG9mIGdpdmVuIGhvc3QuCisgICMKKyAgIyAgIHByb3h5 X2FkZHIgPSAneW91ci5wcm94eS5ob3N0JworICAjICAgcHJveHlfcG9ydCA9 IDgwODAKICAgIwotICAjIE5ldDo6SFRUUFN1Y2Nlc3MgYW5kIE5ldDo6SFRU UFJlZGlyZWN0aW9uIGFyZSBIVFRQUmVzcG9uc2Ugc3ViY2xhc3Nlcy4KLSAg IyBBbGwgSFRUUFJlc3BvbnNlIG9iamVjdHMgYmVsb25nIHRvIHRoZWlyIG93 biByZXNwb25zZSBjbGFzcyB3aGljaAotICAjIGluZGljYXRlcyB0aGUgSFRU UCByZXN1bHQgc3RhdHVzLgotICAjCi0gICMgPT09IEhUVFAgUmVxdWVzdCBD bGFzc2VzCi0gICMKLSAgIyBIZXJlIGlzIEhUVFAgcmVxdWVzdCBjbGFzcyBo aWVyYXJjaHkuCi0gICMKLSAgIyAgIE5ldDo6SFRUUFJlcXVlc3QKLSAgIyAg ICAgICBOZXQ6OkhUVFA6OkdldAotICAjICAgICAgIE5ldDo6SFRUUDo6SGVh ZAotICAjICAgICAgIE5ldDo6SFRUUDo6UG9zdAotICAjICAgICAgIE5ldDo6 SFRUUDo6UHV0Ci0gICMgICAgICAgTmV0OjpIVFRQOjpQcm9wcGF0Y2gKLSAg IyAgICAgICBOZXQ6OkhUVFA6OkxvY2sKLSAgIyAgICAgICBOZXQ6OkhUVFA6 OlVubG9jawotICAjICAgICAgIE5ldDo6SFRUUDo6T3B0aW9ucwotICAjICAg ICAgIE5ldDo6SFRUUDo6UHJvcGZpbmQKLSAgIyAgICAgICBOZXQ6OkhUVFA6 OkRlbGV0ZQotICAjICAgICAgIE5ldDo6SFRUUDo6TW92ZQotICAjICAgICAg IE5ldDo6SFRUUDo6Q29weQotICAjICAgICAgIE5ldDo6SFRUUDo6TWtjb2wK LSAgIyAgICAgICBOZXQ6OkhUVFA6OlRyYWNlCi0gICMKLSAgIyA9PT0gSFRU UCBSZXNwb25zZSBDbGFzc2VzCi0gICMKLSAgIyBIZXJlIGlzIEhUVFAgcmVz cG9uc2UgY2xhc3MgaGllcmFyY2h5LgotICAjIEFsbCBjbGFzc2VzIGFyZSBk ZWZpbmVkIGluIE5ldCBtb2R1bGUuCi0gICMKLSAgIyAgIEhUVFBSZXNwb25z ZQotICAjICAgICAgIEhUVFBVbmtub3duUmVzcG9uc2UKLSAgIyAgICAgICBI VFRQSW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICMgMXh4Ci0gICMg ICAgICAgICAgIEhUVFBDb250aW51ZSAgICAgICAgICAgICAgICAgICAgICAg IyAxMDAKLSAgIyAgICAgICAgICAgSFRUUFN3aXRjaFByb3RvY29sICAgICAg ICAgICAgICAgICAjIDEwMQotICAjICAgICAgIEhUVFBTdWNjZXNzICAgICAg ICAgICAgICAgICAgICAgICAgIyAyeHgKLSAgIyAgICAgICAgICAgSFRUUE9L ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDIwMAotICAjICAgICAg ICAgICBIVFRQQ3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICMgMjAx Ci0gICMgICAgICAgICAgIEhUVFBBY2NlcHRlZCAgICAgICAgICAgICAgICAg ICAgICAgIyAyMDIKLSAgIyAgICAgICAgICAgSFRUUE5vbkF1dGhvcml0YXRp dmVJbmZvcm1hdGlvbiAgICAjIDIwMwotICAjICAgICAgICAgICBIVFRQTm9D b250ZW50ICAgICAgICAgICAgICAgICAgICAgICMgMjA0Ci0gICMgICAgICAg ICAgIEhUVFBSZXNldENvbnRlbnQgICAgICAgICAgICAgICAgICAgIyAyMDUK LSAgIyAgICAgICAgICAgSFRUUFBhcnRpYWxDb250ZW50ICAgICAgICAgICAg ICAgICAjIDIwNgotICAjICAgICAgIEhUVFBSZWRpcmVjdGlvbiAgICAgICAg ICAgICAgICAgICAgIyAzeHgKLSAgIyAgICAgICAgICAgSFRUUE11bHRpcGxl Q2hvaWNlICAgICAgICAgICAgICAgICAjIDMwMAotICAjICAgICAgICAgICBI VFRQTW92ZWRQZXJtYW5lbnRseSAgICAgICAgICAgICAgICMgMzAxCi0gICMg ICAgICAgICAgIEhUVFBGb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAg IyAzMDIKLSAgIyAgICAgICAgICAgSFRUUFNlZU90aGVyICAgICAgICAgICAg ICAgICAgICAgICAjIDMwMwotICAjICAgICAgICAgICBIVFRQTm90TW9kaWZp ZWQgICAgICAgICAgICAgICAgICAgICMgMzA0Ci0gICMgICAgICAgICAgIEhU VFBVc2VQcm94eSAgICAgICAgICAgICAgICAgICAgICAgIyAzMDUKLSAgIyAg ICAgICAgICAgSFRUUFRlbXBvcmFyeVJlZGlyZWN0ICAgICAgICAgICAgICAj IDMwNwotICAjICAgICAgIEhUVFBDbGllbnRFcnJvciAgICAgICAgICAgICAg ICAgICAgIyA0eHgKLSAgIyAgICAgICAgICAgSFRUUEJhZFJlcXVlc3QgICAg ICAgICAgICAgICAgICAgICAjIDQwMAotICAjICAgICAgICAgICBIVFRQVW5h dXRob3JpemVkICAgICAgICAgICAgICAgICAgICMgNDAxCi0gICMgICAgICAg ICAgIEhUVFBQYXltZW50UmVxdWlyZWQgICAgICAgICAgICAgICAgIyA0MDIK LSAgIyAgICAgICAgICAgSFRUUEZvcmJpZGRlbiAgICAgICAgICAgICAgICAg ICAgICAjIDQwMwotICAjICAgICAgICAgICBIVFRQTm90Rm91bmQgICAgICAg ICAgICAgICAgICAgICAgICMgNDA0Ci0gICMgICAgICAgICAgIEhUVFBNZXRo b2ROb3RBbGxvd2VkICAgICAgICAgICAgICAgIyA0MDUKLSAgIyAgICAgICAg ICAgSFRUUE5vdEFjY2VwdGFibGUgICAgICAgICAgICAgICAgICAjIDQwNgot ICAjICAgICAgICAgICBIVFRQUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVk ICAgICMgNDA3Ci0gICMgICAgICAgICAgIEhUVFBSZXF1ZXN0VGltZU91dCAg ICAgICAgICAgICAgICAgIyA0MDgKLSAgIyAgICAgICAgICAgSFRUUENvbmZs aWN0ICAgICAgICAgICAgICAgICAgICAgICAjIDQwOQotICAjICAgICAgICAg ICBIVFRQR29uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgNDEwCi0g ICMgICAgICAgICAgIEhUVFBMZW5ndGhSZXF1aXJlZCAgICAgICAgICAgICAg ICAgIyA0MTEKLSAgIyAgICAgICAgICAgSFRUUFByZWNvbmRpdGlvbkZhaWxl ZCAgICAgICAgICAgICAjIDQxMgotICAjICAgICAgICAgICBIVFRQUmVxdWVz dEVudGl0eVRvb0xhcmdlICAgICAgICAgICMgNDEzCi0gICMgICAgICAgICAg IEhUVFBSZXF1ZXN0VVJJVG9vTG9uZyAgICAgICAgICAgICAgIyA0MTQKLSAg IyAgICAgICAgICAgSFRUUFVuc3VwcG9ydGVkTWVkaWFUeXBlICAgICAgICAg ICAjIDQxNQotICAjICAgICAgICAgICBIVFRQUmVxdWVzdGVkUmFuZ2VOb3RT YXRpc2ZpYWJsZSAgICMgNDE2Ci0gICMgICAgICAgICAgIEhUVFBFeHBlY3Rh dGlvbkZhaWxlZCAgICAgICAgICAgICAgIyA0MTcKLSAgIyAgICAgICBIVFRQ U2VydmVyRXJyb3IgICAgICAgICAgICAgICAgICAgICMgNXh4Ci0gICMgICAg ICAgICAgIEhUVFBJbnRlcm5hbFNlcnZlckVycm9yICAgICAgICAgICAgIyA1 MDAKLSAgIyAgICAgICAgICAgSFRUUE5vdEltcGxlbWVudGVkICAgICAgICAg ICAgICAgICAjIDUwMQotICAjICAgICAgICAgICBIVFRQQmFkR2F0ZXdheSAg ICAgICAgICAgICAgICAgICAgICMgNTAyCi0gICMgICAgICAgICAgIEhUVFBT ZXJ2aWNlVW5hdmFpbGFibGUgICAgICAgICAgICAgIyA1MDMKLSAgIyAgICAg ICAgICAgSFRUUEdhdGV3YXlUaW1lT3V0ICAgICAgICAgICAgICAgICAjIDUw NAotICAjICAgICAgICAgICBIVFRQVmVyc2lvbk5vdFN1cHBvcnRlZCAgICAg ICAgICAgICMgNTA1CisgICMgICBOZXQ6OkhUVFA6OlByb3h5KHByb3h5X2Fk ZHIsIHByb3h5X3BvcnQpLnN0YXJ0KCd3d3cuZXhhbXBsZS5jb20nKSB7fGh0 dHB8CisgICMgICAgICMgYWx3YXlzIGNvbm5lY3QgdG8geW91ci5wcm94eS5h ZGRyOjgwODAKKyAgIyAgIH0KKyAgIworICAjIE5ldDo6SFRUUDo6UHJveHkg cmV0dXJucyBhIE5ldDo6SFRUUCBpbnN0YW5jZSB3aGVuIHByb3h5X2FkZHIg aXMgbmlsIHNvCisgICMgdGhlcmUgaXMgbm8gbmVlZCBmb3IgY29uZGl0aW9u YWwgY29kZS4KKyAgIworICAjIFNlZSBOZXQ6OkhUVFA6OlByb3h5IGZvciBm dXJ0aGVyIGRldGFpbHMgYW5kIGV4YW1wbGVzIHN1Y2ggYXMgcHJveGllcyB0 aGF0CisgICMgcmVxdWlyZSBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4KKyAg IworICAjID09IFNpbXBsZSBFeGFtcGxlcworICAjCisgICMgVGhlIE5ldDo6 SFRUUCBtZXRob2RzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgZG8gbm90 IHBlcnNpc3QKKyAgIyBjb25uZWN0aW9ucy4gIFRoZXkgYXJlIG5vdCByZWNv bW1lbmRlZCBpZiB5b3UgYXJlIHBlcmZvcm1pbmcgbWFueSBIVFRQCisgICMg cmVxdWVzdHMuCisgICMKKyAgIyA9PT0gR0VUCisgICMKKyAgIyAgIE5ldDo6 SFRUUC5nZXQoJ2V4YW1wbGUuY29tJywgJy9pbmRleC5odG1sJykgIyA9PiBT dHJpbmcKKyAgIworICAjID09PSBHRVQgYnkgVVJJCisgICMKKyAgIyAgIHVy aSA9IFVSSS5wYXJzZSgnaHR0cDovL2V4YW1wbGUuY29tL2luZGV4Lmh0bWw/ Y291bnQ9MTAnKQorICAjICAgTmV0OjpIVFRQLmdldCh1cmkpICMgPT4gU3Ry aW5nCisgICMKKyAgIyA9PT0gR0VUIHdpdGggRHluYW1pYyBQYXJhbWV0ZXJz CisgICMKKyAgIyAgIHVyaSA9IFVSSS5wYXJzZSgnaHR0cDovL2V4YW1wbGUu Y29tL2luZGV4Lmh0bWwnKQorICAjICAgcGFyYW1zID0geyA6bGltaXQgPT4g MTAsIDpwYWdlID0+IDMgfQorICAjICAgdXJpLnF1ZXJ5ID0gVVJJLmVuY29k ZV93d3dfZm9ybShwYXJhbXMpCisgICMKKyAgIyAgIHJlcyA9IE5ldDo6SFRU UC5nZXRfcmVzcG9uc2UodXJpKQorICAjICAgcHV0cyByZXMuYm9keSBpZiBy ZXMuaXNfYT8oTmV0OjpIVFRQU3VjY2VzcykKKyAgIworICAjID09PSBQT1NU CisgICMKKyAgIyAgIHVyaSA9IFVSSS5wYXJzZSgnaHR0cDovL3d3dy5leGFt cGxlLmNvbS9zZWFyY2guY2dpJykKKyAgIyAgIHJlcyA9IE5ldDo6SFRUUC5w b3N0X2Zvcm0odXJpLCAncScgPT4gJ3J1YnknLCAnbWF4JyA9PiAnNTAnKQor ICAjICAgcHV0cyByZXMuYm9keQorICAjCisgICMgPT09IFBPU1Qgd2l0aCBN dWx0aXBsZSBWYWx1ZXMKKyAgIworICAjICAgdXJpID0gVVJJLnBhcnNlKCdo dHRwOi8vd3d3LmV4YW1wbGUuY29tL3NlYXJjaC5jZ2knKQorICAjICAgcmVz ID0gTmV0OjpIVFRQLnBvc3RfZm9ybSh1cmksICdxJyA9PiBbJ3J1YnknLCAn cGVybCddLCAnbWF4JyA9PiAnNTAnKQorICAjICAgcHV0cyByZXMuYm9keQor ICAjCisgICMgPT0gSFRUUCBSZXF1ZXN0IENsYXNzZXMKKyAgIworICAjIEhl cmUgaXMgdGhlIEhUVFAgcmVxdWVzdCBjbGFzcyBoaWVyYXJjaHkuCisgICMK KyAgIyAqIE5ldDo6SFRUUFJlcXVlc3QKKyAgIyAgICogTmV0OjpIVFRQOjpH ZXQKKyAgIyAgICogTmV0OjpIVFRQOjpIZWFkCisgICMgICAqIE5ldDo6SFRU UDo6UG9zdAorICAjICAgKiBOZXQ6OkhUVFA6OlB1dAorICAjICAgKiBOZXQ6 OkhUVFA6OlByb3BwYXRjaAorICAjICAgKiBOZXQ6OkhUVFA6OkxvY2sKKyAg IyAgICogTmV0OjpIVFRQOjpVbmxvY2sKKyAgIyAgICogTmV0OjpIVFRQOjpP cHRpb25zCisgICMgICAqIE5ldDo6SFRUUDo6UHJvcGZpbmQKKyAgIyAgICog TmV0OjpIVFRQOjpEZWxldGUKKyAgIyAgICogTmV0OjpIVFRQOjpNb3ZlCisg ICMgICAqIE5ldDo6SFRUUDo6Q29weQorICAjICAgKiBOZXQ6OkhUVFA6Ok1r Y29sCisgICMgICAqIE5ldDo6SFRUUDo6VHJhY2UKKyAgIworICAjID09IEhU VFAgUmVzcG9uc2UgQ2xhc3NlcworICAjCisgICMgSGVyZSBpcyBIVFRQIHJl c3BvbnNlIGNsYXNzIGhpZXJhcmNoeS4gIEFsbCBjbGFzc2VzIGFyZSBkZWZp bmVkIGluIE5ldAorICAjIG1vZHVsZSBhbmQgYXJlIHN1YmNsYXNzZXMgb2Yg TmV0OjpIVFRQUmVzcG9uc2UuCisgICMKKyAgIyBIVFRQVW5rbm93blJlc3Bv bnNlOjogRm9yIHVuaGFuZGxlZCBIVFRQIGV4dGVuZW5zaW9ucworICAjIEhU VFBJbmZvcm1hdGlvbjo6ICAgICAgICAgICAgICAgICAgICAxeHgKKyAgIyAg IEhUVFBDb250aW51ZTo6ICAgICAgICAgICAgICAgICAgICAgICAgMTAwCisg ICMgICBIVFRQU3dpdGNoUHJvdG9jb2w6OiAgICAgICAgICAgICAgICAgIDEw MQorICAjIEhUVFBTdWNjZXNzOjogICAgICAgICAgICAgICAgICAgICAgICAy eHgKKyAgIyAgIEhUVFBPSzo6ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMjAwCisgICMgICBIVFRQQ3JlYXRlZDo6ICAgICAgICAgICAgICAgICAg ICAgICAgIDIwMQorICAjICAgSFRUUEFjY2VwdGVkOjogICAgICAgICAgICAg ICAgICAgICAgICAyMDIKKyAgIyAgIEhUVFBOb25BdXRob3JpdGF0aXZlSW5m b3JtYXRpb246OiAgICAgMjAzCisgICMgICBIVFRQTm9Db250ZW50OjogICAg ICAgICAgICAgICAgICAgICAgIDIwNAorICAjICAgSFRUUFJlc2V0Q29udGVu dDo6ICAgICAgICAgICAgICAgICAgICAyMDUKKyAgIyAgIEhUVFBQYXJ0aWFs Q29udGVudDo6ICAgICAgICAgICAgICAgICAgMjA2CisgICMgSFRUUFJlZGly ZWN0aW9uOjogICAgICAgICAgICAgICAgICAgIDN4eAorICAjICAgSFRUUE11 bHRpcGxlQ2hvaWNlOjogICAgICAgICAgICAgICAgICAzMDAKKyAgIyAgIEhU VFBNb3ZlZFBlcm1hbmVudGx5OjogICAgICAgICAgICAgICAgMzAxCisgICMg ICBIVFRQRm91bmQ6OiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMgor ICAjICAgSFRUUFNlZU90aGVyOjogICAgICAgICAgICAgICAgICAgICAgICAz MDMKKyAgIyAgIEhUVFBOb3RNb2RpZmllZDo6ICAgICAgICAgICAgICAgICAg ICAgMzA0CisgICMgICBIVFRQVXNlUHJveHk6OiAgICAgICAgICAgICAgICAg ICAgICAgIDMwNQorICAjICAgSFRUUFRlbXBvcmFyeVJlZGlyZWN0OjogICAg ICAgICAgICAgICAzMDcKKyAgIyBIVFRQQ2xpZW50RXJyb3I6OiAgICAgICAg ICAgICAgICAgICAgNHh4CisgICMgICBIVFRQQmFkUmVxdWVzdDo6ICAgICAg ICAgICAgICAgICAgICAgIDQwMAorICAjICAgSFRUUFVuYXV0aG9yaXplZDo6 ICAgICAgICAgICAgICAgICAgICA0MDEKKyAgIyAgIEhUVFBQYXltZW50UmVx dWlyZWQ6OiAgICAgICAgICAgICAgICAgNDAyCisgICMgICBIVFRQRm9yYmlk ZGVuOjogICAgICAgICAgICAgICAgICAgICAgIDQwMworICAjICAgSFRUUE5v dEZvdW5kOjogICAgICAgICAgICAgICAgICAgICAgICA0MDQKKyAgIyAgIEhU VFBNZXRob2ROb3RBbGxvd2VkOjogICAgICAgICAgICAgICAgNDA1CisgICMg ICBIVFRQTm90QWNjZXB0YWJsZTo6ICAgICAgICAgICAgICAgICAgIDQwNgor ICAjICAgSFRUUFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo6ICAgICA0 MDcKKyAgIyAgIEhUVFBSZXF1ZXN0VGltZU91dDo6ICAgICAgICAgICAgICAg ICAgNDA4CisgICMgICBIVFRQQ29uZmxpY3Q6OiAgICAgICAgICAgICAgICAg ICAgICAgIDQwOQorICAjICAgSFRUUEdvbmU6OiAgICAgICAgICAgICAgICAg ICAgICAgICAgICA0MTAKKyAgIyAgIEhUVFBMZW5ndGhSZXF1aXJlZDo6ICAg ICAgICAgICAgICAgICAgNDExCisgICMgICBIVFRQUHJlY29uZGl0aW9uRmFp bGVkOjogICAgICAgICAgICAgIDQxMgorICAjICAgSFRUUFJlcXVlc3RFbnRp dHlUb29MYXJnZTo6ICAgICAgICAgICA0MTMKKyAgIyAgIEhUVFBSZXF1ZXN0 VVJJVG9vTG9uZzo6ICAgICAgICAgICAgICAgNDE0CisgICMgICBIVFRQVW5z dXBwb3J0ZWRNZWRpYVR5cGU6OiAgICAgICAgICAgIDQxNQorICAjICAgSFRU UFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGU6OiAgICA0MTYKKyAgIyAg IEhUVFBFeHBlY3RhdGlvbkZhaWxlZDo6ICAgICAgICAgICAgICAgNDE3Cisg ICMgSFRUUFNlcnZlckVycm9yOjogICAgICAgICAgICAgICAgICAgIDV4eAor ICAjICAgSFRUUEludGVybmFsU2VydmVyRXJyb3I6OiAgICAgICAgICAgICA1 MDAKKyAgIyAgIEhUVFBOb3RJbXBsZW1lbnRlZDo6ICAgICAgICAgICAgICAg ICAgNTAxCisgICMgICBIVFRQQmFkR2F0ZXdheTo6ICAgICAgICAgICAgICAg ICAgICAgIDUwMgorICAjICAgSFRUUFNlcnZpY2VVbmF2YWlsYWJsZTo6ICAg ICAgICAgICAgICA1MDMKKyAgIyAgIEhUVFBHYXRld2F5VGltZU91dDo6ICAg ICAgICAgICAgICAgICAgNTA0CisgICMgICBIVFRQVmVyc2lvbk5vdFN1cHBv cnRlZDo6ICAgICAgICAgICAgIDUwNQorICAjCisgICMgVGhlcmUgaXMgYWxz byB0aGUgTmV0OjpIVFRQQmFkUmVzcG9uc2UgZXhjZXB0aW9uIHdoaWNoIGlz IHJhaXNlZCB3aGVuCisgICMgdGhlcmUgaXMgYSBwcm90b2NvbCBlcnJvci4K ICAgIwogICAjID09IFN3aXRjaGluZyBOZXQ6OkhUVFAgdmVyc2lvbnMKICAg IwotICAjIFlvdSBjYW4gdXNlIG5ldC9odHRwLnJiIDEuMSBmZWF0dXJlcyAo YnVuZGxlZCB3aXRoIFJ1YnkgMS42KQotICAjIGJ5IGNhbGxpbmcgSFRUUC52 ZXJzaW9uXzFfMS4gQ2FsbGluZyBOZXQ6OkhUVFAudmVyc2lvbl8xXzIKLSAg IyBhbGxvd3MgeW91IHRvIHVzZSAxLjIgZmVhdHVyZXMgYWdhaW4uCisgICMg WW91IGNhbiB1c2UgbmV0L2h0dHAucmIgMS4xIGZlYXR1cmVzIChidW5kbGVk IHdpdGggUnVieSAxLjYpIGJ5IGNhbGxpbmcKKyAgIyBIVFRQLnZlcnNpb25f MV8xLiBDYWxsaW5nIE5ldDo6SFRUUC52ZXJzaW9uXzFfMiBhbGxvd3MgeW91 IHRvIHVzZSAxLjIKKyAgIyBmZWF0dXJlcyBhZ2Fpbi4gIERvIG5vdCBjb25m dXNlIHRoaXMgd2l0aCBIVFRQIHByb3RvY29sIGZlYXR1cmVzLgogICAjCi0g ICMgICAgICMgZXhhbXBsZQotICAjICAgICBOZXQ6OkhUVFAuc3RhcnQge3xo dHRwMXwgLi4uKGh0dHAxIGhhcyAxLjIgZmVhdHVyZXMpLi4uIH0KKyAgIyAg ICMgZXhhbXBsZQorICAjICAgTmV0OjpIVFRQLnN0YXJ0IHt8aHR0cDF8IC4u LihodHRwMSBoYXMgMS4yIGZlYXR1cmVzKS4uLiB9CiAgICMKLSAgIyAgICAg TmV0OjpIVFRQLnZlcnNpb25fMV8xCi0gICMgICAgIE5ldDo6SFRUUC5zdGFy dCB7fGh0dHAyfCAuLi4oaHR0cDIgaGFzIDEuMSBmZWF0dXJlcykuLi4gfQor ICAjICAgTmV0OjpIVFRQLnZlcnNpb25fMV8xCisgICMgICBOZXQ6OkhUVFAu c3RhcnQge3xodHRwMnwgLi4uKGh0dHAyIGhhcyAxLjEgZmVhdHVyZXMpLi4u IH0KICAgIwotICAjICAgICBOZXQ6OkhUVFAudmVyc2lvbl8xXzIKLSAgIyAg ICAgTmV0OjpIVFRQLnN0YXJ0IHt8aHR0cDN8IC4uLihodHRwMyBoYXMgMS4y IGZlYXR1cmVzKS4uLiB9CisgICMgICBOZXQ6OkhUVFAudmVyc2lvbl8xXzIK KyAgIyAgIE5ldDo6SFRUUC5zdGFydCB7fGh0dHAzfCAuLi4oaHR0cDMgaGFz IDEuMiBmZWF0dXJlcykuLi4gfQogICAjCiAgICMgU3dpdGNoaW5nIHZlcnNp b25zIGlzIE5PVCB0aHJlYWQtc2FmZS4KICAgIwpAQCAtNTczLDE1ICs2Nzcs MTUgQEAgbW9kdWxlIE5ldCAgICM6bm9kb2M6CiAKICAgICBhdHRyX2FjY2Vz c29yIDpjbG9zZV9vbl9lbXB0eV9yZXNwb25zZQogCi0gICAgIyByZXR1cm5z IHRydWUgaWYgdXNlIFNTTC9UTFMgd2l0aCBIVFRQLgorICAgICMgcmV0dXJu cyB0cnVlIGlmIHRoaXMgc2Vzc2lvbiB3aWxsIHVzZSBTU0wgb3IgVExTLgog ICAgIGRlZiB1c2Vfc3NsPwogICAgICAgQHVzZV9zc2wKICAgICBlbmQKIAog ICAgICMgVHVybiBvbi9vZmYgU1NMLgotICAgICMgVGhpcyBmbGFnIG11c3Qg YmUgc2V0IGJlZm9yZSBzdGFydGluZyBzZXNzaW9uLgotICAgICMgSWYgeW91 IGNoYW5nZSB1c2Vfc3NsIHZhbHVlIGFmdGVyIHNlc3Npb24gc3RhcnRlZCwK LSAgICAjIGEgTmV0OjpIVFRQIG9iamVjdCByYWlzZXMgSU9FcnJvci4KKyAg ICAjCisgICAgIyBUaGlzIGZsYWcgbXVzdCBiZSBzZXQgYmVmb3JlIHN0YXJ0 aW5nIGEgc2Vzc2lvbi4gIElmIHlvdSBjaGFuZ2UgdXNlX3NzbAorICAgICMg dmFsdWUgYWZ0ZXIgc2Vzc2lvbiBzdGFydGVkLCBhIE5ldDo6SFRUUCBvYmpl Y3QgcmFpc2VzIElPRXJyb3IuCiAgICAgZGVmIHVzZV9zc2w9KGZsYWcpCiAg ICAgICBmbGFnID0gKGZsYWcgPyB0cnVlIDogZmFsc2UpCiAgICAgICBpZiBz dGFydGVkPyBhbmQgQHVzZV9zc2wgIT0gZmxhZwpAQCAtNTk0LDkgKzY5OCw0 OSBAQCBtb2R1bGUgTmV0ICAgIzpub2RvYzoKICAgICAgIHNzbF92ZXJzaW9u IGtleSBjZXJ0IGNhX2ZpbGUgY2FfcGF0aCBjZXJ0X3N0b3JlIGNpcGhlcnMK ICAgICAgIHZlcmlmeV9tb2RlIHZlcmlmeV9jYWxsYmFjayB2ZXJpZnlfZGVw dGggc3NsX3RpbWVvdXQKICAgICApCi0gICAgYXR0cl9hY2Nlc3NvcigqU1NM X0FUVFJJQlVURVMpCiAKLSAgICAjIHJldHVybiB0aGUgWC41MDkgY2VydGlm aWNhdGVzIHRoZSBzZXJ2ZXIgcHJlc2VudGVkLgorICAgICMgU2V0cyBwYXRo IG9mIGEgQ0EgY2VydGlmaWNhdGlvbiBmaWxlIGluIFBFTSBmb3JtYXQuCisg ICAgIworICAgICMgVGhlIGZpbGUgY2FuIGNvbnRhaW4gc2V2ZXJhbCBDQSBj ZXJ0aWZpY2F0ZXMuCisgICAgYXR0cl9hY2Nlc3NvciA6Y2FfZmlsZQorCisg ICAgIyBTZXRzIHBhdGggb2YgYSBDQSBjZXJ0aWZpY2F0aW9uIGRpcmVjdG9y eSBjb250YWluaW5nIGNlcnRpZmljYXRpb25zIGluCisgICAgIyBQRU0gZm9y bWF0LgorICAgIGF0dHJfYWNjZXNzb3IgOmNhX3BhdGgKKworICAgICMgU2V0 cyBhbiBPcGVuU1NMOjpYNTA5OjpDZXJ0aWZpY2F0ZSBvYmplY3QgYXMgY2xp ZW50IGNlcnRpZmljYXRlLgorICAgICMgKFRoaXMgbWV0aG9kIGlzIGFwcGVh cmVkIGluIE1pY2hhbCBSb2tvcydzIE9wZW5TU0wgZXh0ZW5zaW9uKS4KKyAg ICBhdHRyX2FjY2Vzc29yIDpjZXJ0CisKKyAgICAjIFNldHMgdGhlIFg1MDk6 OlN0b3JlIHRvIHZlcmlmeSBwZWVyIGNlcnRpZmljYXRlLgorICAgIGF0dHJf YWNjZXNzb3IgOmNlcnRfc3RvcmUKKworICAgICMgU2V0cyB0aGUgYXZhaWxh YmxlIGNpcGhlcnMuICBTZWUgT3BlblNTTDo6U1NMOjpTU0xDb250ZXh0I2Np cGhlcnM9CisgICAgYXR0cl9hY2Nlc3NvciA6Y2lwaGVycworCisgICAgIyBT ZXRzIGFuIE9wZW5TU0w6OlBLZXk6OlJTQSBvciBPcGVuU1NMOjpQS2V5OjpE U0Egb2JqZWN0LgorICAgICMgKFRoaXMgbWV0aG9kIGlzIGFwcGVhcmVkIGlu IE1pY2hhbCBSb2tvcydzIE9wZW5TU0wgZXh0ZW5zaW9uLikKKyAgICBhdHRy X2FjY2Vzc29yIDprZXkKKworICAgICMgU2V0cyB0aGUgU1NMIHRpbWVvdXQg c2Vjb25kcy4KKyAgICBhdHRyX2FjY2Vzc29yIDpzc2xfdGltZW91dAorCisg ICAgIyBTZXRzIHRoZSBTU0wgdmVyc2lvbi4gIFNlZSBPcGVuU1NMOjpTU0w6 OlNTTENvbnRleHQjc3NsX3ZlcnNpb249CisgICAgYXR0cl9hY2Nlc3NvciA6 c3NsX3ZlcnNpb24KKworICAgICMgU2V0cyB0aGUgdmVyaWZ5IGNhbGxiYWNr IGZvciB0aGUgc2VydmVyIGNlcnRpZmljYXRpb24gdmVyaWZpY2F0aW9uLgor ICAgIGF0dHJfYWNjZXNzb3IgOnZlcmlmeV9jYWxsYmFjaworCisgICAgIyBT ZXRzIHRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgY2VydGlmaWNhdGUgY2hh aW4gdmVyaWZpY2F0aW9uLgorICAgIGF0dHJfYWNjZXNzb3IgOnZlcmlmeV9k ZXB0aAorCisgICAgIyBTZXRzIHRoZSBmbGFncyBmb3Igc2VydmVyIHRoZSBj ZXJ0aWZpY2F0aW9uIHZlcmlmaWNhdGlvbiBhdCBiZWdpbm5pbmcgb2YKKyAg ICAjIFNTTC9UTFMgc2Vzc2lvbi4KKyAgICAjCisgICAgIyBPcGVuU1NMOjpT U0w6OlZFUklGWV9OT05FIG9yIE9wZW5TU0w6OlNTTDo6VkVSSUZZX1BFRVIg YXJlIGFjY2VwdGFibGUuCisgICAgYXR0cl9hY2Nlc3NvciA6dmVyaWZ5X21v ZGUKKworICAgICMgUmV0dXJucyB0aGUgWC41MDkgY2VydGlmaWNhdGVzIHRo ZSBzZXJ2ZXIgcHJlc2VudGVkLgogICAgIGRlZiBwZWVyX2NlcnQKICAgICAg IGlmIG5vdCB1c2Vfc3NsPyBvciBub3QgQHNvY2tldAogICAgICAgICByZXR1 cm4gbmlsCkBAIC03MDksMTkgKzg1MywzNyBAQCBtb2R1bGUgTmV0ICAgIzpu b2RvYzoKICAgICBAcHJveHlfcGFzcyA9IG5pbAogCiAgICAgIyBDcmVhdGVz IGFuIEhUVFAgcHJveHkgY2xhc3MuCisgICAgIwogICAgICMgQXJndW1lbnRz IGFyZSBhZGRyZXNzL3BvcnQgb2YgcHJveHkgaG9zdCBhbmQgdXNlcm5hbWUv cGFzc3dvcmQKLSAgICAjIGlmIGF1dGhvcml6YXRpb24gb24gcHJveHkgc2Vy dmVyIGlzIHJlcXVpcmVkLgorICAgICMgaWYgYXV0aG9yaXphdGlvbiBvbiBw cm94eSBzZXJ2ZXIgaXMgcmVxdWlyZWQuICBUaGUgcHJveHkgd2lsbCB1c2Ug dGhlCisgICAgIyAjZGVmYXVsdF9wb3J0IGlmIG5vIHByb3h5IHBvcnQgaXMg cHJvdmlkZWQuCisgICAgIwogICAgICMgWW91IGNhbiByZXBsYWNlIHRoZSBI VFRQIGNsYXNzIHdpdGggY3JlYXRlZCBwcm94eSBjbGFzcy4KICAgICAjCiAg ICAgIyBJZiBBRERSRVNTIGlzIG5pbCwgdGhpcyBtZXRob2QgcmV0dXJucyBz ZWxmIChOZXQ6OkhUVFApLgogICAgICMKLSAgICAjICAgICAjIEV4YW1wbGUK LSAgICAjICAgICBwcm94eV9jbGFzcyA9IE5ldDo6SFRUUDo6UHJveHkoJ3By b3h5LmV4YW1wbGUuY29tJywgODA4MCkKLSAgICAjICAgICAgICAgICAgICAg ICAgICAgOgotICAgICMgICAgIHByb3h5X2NsYXNzLnN0YXJ0KCd3d3cucnVi eS1sYW5nLm9yZycpIHt8aHR0cHwKLSAgICAjICAgICAgICMgY29ubmVjdGlu ZyBwcm94eS5mb28ub3JnOjgwODAKLSAgICAjICAgICAgICAgICAgICAgICAg ICAgOgotICAgICMgICAgIH0KKyAgICAjICAgIyBFeGFtcGxlCisgICAgIyAg IHByb3h5X2NsYXNzID0gTmV0OjpIVFRQOjpQcm94eSgncHJveHkuZXhhbXBs ZS5jb20nLCA4MDgwKQorICAgICMKKyAgICAjICAgcHJveHlfY2xhc3Muc3Rh cnQoJ3d3dy5ydWJ5LWxhbmcub3JnJykge3xodHRwfAorICAgICMgICAgICMg Y29ubmVjdGluZyBwcm94eS5mb28ub3JnOjgwODAKKyAgICAjICAgfQorICAg ICMKKyAgICAjIFlvdSBtYXkgdXNlIHRoZW0gdG8gd29yayB3aXRoIGF1dGhv cml6YXRpb24tZW5hYmxlZCBwcm94aWVzOgorICAgICMKKyAgICAjICAgcHJv eHlfaG9zdCA9ICd5b3VyLnByb3h5LmV4YW1wbGUnCisgICAgIyAgIHByb3h5 X3BvcnQgPSA4MDgwCisgICAgIyAgIHVyaSA9IFVSSS5wYXJzZShFTlZbJ0hU VFBfUFJPWFknXSkKKyAgICAjICAgcHJveHlfdXNlciwgcHJveHlfcGFzcyA9 IHVyaS51c2VyaW5mby5zcGxpdCgvOi8pIGlmIHVyaS51c2VyaW5mbworICAg ICMKKyAgICAjICAgcHJveHkgPSBOZXQ6OkhUVFA6OlByb3h5KHByb3h5X2hv c3QsIHByb3h5X3BvcnQsIHByb3h5X3VzZXIsIHByb3h5X3Bhc3MpCisgICAg IyAgIHByb3h5LnN0YXJ0KCd3d3cuZXhhbXBsZS5jb20nKSB7IHxodHRwfAor ICAgICMgICAgICMgYWx3YXlzIGNvbm5lY3QgdG8geW91ci5wcm94eS5leGFt cGxlOjgwODAgdXNpbmcgc3BlY2lmaWVkIHVzZXJuYW1lCisgICAgIyAgICAg IyBhbmQgcGFzc3dvcmQKKyAgICAjICAgfQorICAgICMKKyAgICAjIE5vdGUg dGhhdCBuZXQvaHR0cCBkb2VzIG5vdCB1c2UgdGhlIEhUVFBfUFJPWFkgZW52 aXJvbm1lbnQgdmFyaWFibGUuCisgICAgIyBJZiB5b3Ugd2FudCB0byB1c2Ug YSBwcm94eSwgeW91IG11c3Qgc2V0IGl0IGV4cGxpY2l0bHkuCiAgICAgIwog ICAgIGRlZiBIVFRQLlByb3h5KHBfYWRkciwgcF9wb3J0ID0gbmlsLCBwX3Vz ZXIgPSBuaWwsIHBfcGFzcyA9IG5pbCkKICAgICAgIHJldHVybiBzZWxmIHVu bGVzcyBwX2FkZHIKQEAgLTE1ODMsOSArMTc0NSw5IEBAIG1vZHVsZSBOZXQg ICAjOm5vZG9jOgogCiAgICAgYWxpYXMgY29udGVudF90eXBlPSBzZXRfY29u dGVudF90eXBlCiAKLSAgICAjIFNldCBoZWFkZXIgZmllbGRzIGFuZCBhIGJv ZHkgZnJvbSBIVE1MIGZvcm0gZGF0YS4KLSAgICAjICtwYXJhbXMrIHNob3Vs ZCBiZSBhIEhhc2ggY29udGFpbmluZyBIVE1MIGZvcm0gZGF0YS4KLSAgICAj IE9wdGlvbmFsIGFyZ3VtZW50ICtzZXArIG1lYW5zIGRhdGEgcmVjb3JkIHNl cGFyYXRvci4KKyAgICAjIFNldCBoZWFkZXIgZmllbGRzIGFuZCBhIGJvZHkg ZnJvbSBIVE1MIGZvcm0gZGF0YS4gICtwYXJhbXMrIHNob3VsZCBiZSBhCisg ICAgIyBIYXNoIGNvbnRhaW5pbmcgSFRNTCBmb3JtIGRhdGEuICBPcHRpb25h bCBhcmd1bWVudCArc2VwKyBtZWFucyBkYXRhCisgICAgIyByZWNvcmQgc2Vw YXJhdG9yLgogICAgICMKICAgICAjIFRoaXMgbWV0aG9kIGFsc28gc2V0IENv bnRlbnQtVHlwZTogaGVhZGVyIGZpZWxkIHRvCiAgICAgIyBhcHBsaWNhdGlv bi94LXd3dy1mb3JtLXVybGVuY29kZWQuCkBAIC0xOTg3LDcgKzIxNDksNyBA QCBtb2R1bGUgTmV0ICAgIzpub2RvYzoKICAgIyAgICAgeHh4ICAgICAgICBI VFRQVW5rbm93blJlc3BvbnNlCiAgICMKICAgY2xhc3MgSFRUUFJlc3BvbnNl Ci0gICAgIyB0cnVlIGlmIHRoZSByZXNwb25zZSBoYXMgYm9keS4KKyAgICAj IHRydWUgaWYgdGhlIHJlc3BvbnNlIGhhcyBhIGJvZHkuCiAgICAgZGVmIEhU VFBSZXNwb25zZS5ib2R5X3Blcm1pdHRlZD8KICAgICAgIHNlbGY6OkhBU19C T0RZCiAgICAgZW5kCkBAIC0yMzA3LDcgKzI0NjksOSBAQCBtb2R1bGUgTmV0 ICAgIzpub2RvYzoKICAgICAgIHNlbGYuY2xhc3MKICAgICBlbmQKIAotICAg IGRlZiBlcnJvciEgICAjOm5vZG9jOgorICAgICMgcmFpc2VzIHRoaXMgSFRU UFJlc3BvbnNlIGFzIGl0cyBtYXRjaGluZyBleGNlcHRpb24gdHlwZS4gIE5v dGUgdGhhdCB5b3UKKyAgICAjIG1heSBub3QgcmFpc2UgYW4gSFRUUFN1Y2Nl c3MgcmVzcG9uc2Ugc3ViY2xhc3MuCisgICAgZGVmIGVycm9yIQogICAgICAg cmFpc2UgZXJyb3JfdHlwZSgpLm5ldyhAY29kZSArICcgJyArIEBtZXNzYWdl LmR1bXAsIHNlbGYpCiAgICAgZW5kCiAKSW5kZXg6IGxpYi9uZXQvaHR0cHMu cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL25ldC9odHRwcy5y YgkocmV2aXNpb24gMjk5NzYpCisrKyBsaWIvbmV0L2h0dHBzLnJiCSh3b3Jr aW5nIGNvcHkpCkBAIC0yLDYgKzIsOSBAQAogCiA9IG5ldC9odHRwcyAtLSBT U0wvVExTIGVuaGFuY2VtZW50IGZvciBOZXQ6OkhUVFAuCiAKKyAgVGhpcyBm aWxlIGhhcyBiZWVuIG1lcmdlZCB3aXRoIG5ldC9odHRwLiAgVGhlcmUgaXMg bm8gbG9uZ2VyIGFueSBuZWVkIHRvCisgIHJlcXVpcmUgJ25ldC9odHRwcycg dG8gdXNlIEhUVFBTLgorCiA9PSBJbmZvCiAgICdPcGVuU1NMIGZvciBSdWJ5 IDInIHByb2plY3QKICAgQ29weXJpZ2h0IChDKSAyMDAxIEdPVE9VIFl1dXpv dSA8Z290b3l1em9Abm90d29yay5vcmc+CkBAIC0xMSw4MSArMTQsNiBAQAog ICBUaGlzIHByb2dyYW0gaXMgbGljZW5jZWQgdW5kZXIgdGhlIHNhbWUgbGlj ZW5jZSBhcyBSdWJ5LgogICAoU2VlIHRoZSBmaWxlICdMSUNFTkNFJy4pCiAK LT09IEV4YW1wbGUKLQotSGVyZSBpcyBhIHNpbXBsZSBIVFRQIGNsaWVudDoK LQotICAgIHJlcXVpcmUgJ25ldC9odHRwJwotICAgIHJlcXVpcmUgJ3VyaScK LQotICAgIHVyaSA9IFVSSS5wYXJzZShBUkdWWzBdIHx8ICdodHRwOi8vbG9j YWxob3N0LycpCi0gICAgaHR0cCA9IE5ldDo6SFRUUC5uZXcodXJpLmhvc3Qs IHVyaS5wb3J0KQotICAgIGh0dHAuc3RhcnQgewotICAgICAgaHR0cC5yZXF1 ZXN0X2dldCh1cmkucGF0aCkge3xyZXN8Ci0gICAgICAgIHByaW50IHJlcy5i b2R5Ci0gICAgICB9Ci0gICAgfQotCi1JdCBjYW4gYmUgcmVwbGFjZWQgYnkg dGhlIGZvbGxvd2luZyBjb2RlOgotCi0gICAgcmVxdWlyZSAnbmV0L2h0dHBz JwotICAgIHJlcXVpcmUgJ3VyaScKLQotICAgIHVyaSA9IFVSSS5wYXJzZShB UkdWWzBdIHx8ICdodHRwczovL2xvY2FsaG9zdC8nKQotICAgIGh0dHAgPSBO ZXQ6OkhUVFAubmV3KHVyaS5ob3N0LCB1cmkucG9ydCkKLSAgICBodHRwLnVz ZV9zc2wgPSB0cnVlIGlmIHVyaS5zY2hlbWUgPT0gImh0dHBzIiAgIyBlbmFi bGUgU1NML1RMUwotICAgIGh0dHAuc3RhcnQgewotICAgICAgaHR0cC5yZXF1 ZXN0X2dldCh1cmkucGF0aCkge3xyZXN8Ci0gICAgICAgIHByaW50IHJlcy5i b2R5Ci0gICAgICB9Ci0gICAgfQotCi09PSBjbGFzcyBOZXQ6OkhUVFAKLQot PT09IEluc3RhbmNlIE1ldGhvZHMKLQotOiB1c2Vfc3NsPwotICAgIHJldHVy bnMgdHJ1ZSBpZiB1c2UgU1NML1RMUyB3aXRoIEhUVFAuCi0KLTogdXNlX3Nz bD0oKHx0cnVlX29yX2ZhbHNlfCkpCi0gICAgc2V0cyB1c2Vfc3NsLgotCi06 IHBlZXJfY2VydAotICAgIHJldHVybiB0aGUgWC41MDkgY2VydGlmaWNhdGVz IHRoZSBzZXJ2ZXIgcHJlc2VudGVkLgotCi06IGtleSwga2V5PSgofGtleXwp KQotICAgIFNldHMgYW4gT3BlblNTTDo6UEtleTo6UlNBIG9yIE9wZW5TU0w6 OlBLZXk6OkRTQSBvYmplY3QuCi0gICAgKFRoaXMgbWV0aG9kIGlzIGFwcGVh cmVkIGluIE1pY2hhbCBSb2tvcydzIE9wZW5TU0wgZXh0ZW5zaW9uLikKLQot OiBjZXJ0LCBjZXJ0PSgofGNlcnR8KSkKLSAgICBTZXRzIGFuIE9wZW5TU0w6 Olg1MDk6OkNlcnRpZmljYXRlIG9iamVjdCBhcyBjbGllbnQgY2VydGlmaWNh dGUKLSAgICAoVGhpcyBtZXRob2QgaXMgYXBwZWFyZWQgaW4gTWljaGFsIFJv a29zJ3MgT3BlblNTTCBleHRlbnNpb24pLgotCi06IGNhX2ZpbGUsIGNhX2Zp bGU9KCh8cGF0aHwpKQotICAgIFNldHMgcGF0aCBvZiBhIENBIGNlcnRpZmlj YXRpb24gZmlsZSBpbiBQRU0gZm9ybWF0LgotICAgIFRoZSBmaWxlIGNhbiBj b250cmFpbiBzZXZlcmFsIENBIGNlcnRpZmljYXRlcy4KLQotOiBjYV9wYXRo LCBjYV9wYXRoPSgofHBhdGh8KSkKLSAgICBTZXRzIHBhdGggb2YgYSBDQSBj ZXJ0aWZpY2F0aW9uIGRpcmVjdG9yeSBjb250YWluaW5nIGNlcnRpZmljYXRp b25zCi0gICAgaW4gUEVNIGZvcm1hdC4KLQotOiB2ZXJpZnlfbW9kZSwgdmVy aWZ5X21vZGU9KCh8bW9kZXwpKQotICAgIFNldHMgdGhlIGZsYWdzIGZvciBz ZXJ2ZXIgdGhlIGNlcnRpZmljYXRpb24gdmVyaWZpY2F0aW9uIGF0Ci0gICAg YmVnaW5uaW5nIG9mIFNTTC9UTFMgc2Vzc2lvbi4KLSAgICBPcGVuU1NMOjpT U0w6OlZFUklGWV9OT05FIG9yIE9wZW5TU0w6OlNTTDo6VkVSSUZZX1BFRVIg aXMgYWNjZXB0YWJsZS4KLQotOiB2ZXJpZnlfY2FsbGJhY2ssIHZlcmlmeV9j YWxsYmFjaz0oKHxwcm9jfCkpCi0gICAgU2V0cyB0aGUgdmVyaWZ5IGNhbGxi YWNrIGZvciB0aGUgc2VydmVyIGNlcnRpZmljYXRpb24gdmVyaWZpY2F0aW9u LgotCi06IHZlcmlmeV9kZXB0aCwgdmVyaWZ5X2RlcHRoPSgofG51bXwpKQot ICAgIFNldHMgdGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSBjZXJ0aWZpY2F0 ZSBjaGFpbiB2ZXJpZmljYXRpb24uCi0KLTogY2VydF9zdG9yZSwgY2VydF9z dG9yZT0oKHxzdG9yZXwpKQotICAgIFNldHMgdGhlIFg1MDk6OlN0b3JlIHRv IHZlcmlmeSBwZWVyIGNlcnRpZmljYXRlLgotCi06IHNzbF90aW1lb3V0LCBz c2xfdGltZW91dD0oKHxzZWN8KSkKLSAgICBTZXRzIHRoZSBTU0wgdGltZW91 dCBzZWNvbmRzLgotCiA9ZW5kCiAKIHJlcXVpcmUgJ25ldC9odHRwJwo= --mimepart_4cf40ec293046_2c1fb7ef5d016bd--