From cfe-commits Wed Aug 26 06:05:25 2015 From: Alexey Bataev via cfe-commits Date: Wed, 26 Aug 2015 06:05:25 +0000 To: cfe-commits Subject: Re: [PATCH] D10599: [OPENMP 4.0] Initial support for '#pragma omp declare simd' directive. Message-Id: <5a6132f128842715e7b76415b96aa4fc () localhost ! localdomain> X-MARC-Message: https://marc.info/?l=cfe-commits&m=144056913020051 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--b1_5a6132f128842715e7b76415b96aa4fc" --b1_5a6132f128842715e7b76415b96aa4fc Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: quoted-printable ABataev updated this revision to Diff 33181. ABataev marked 7 inline comments as done. ABataev added a comment. Update after review http://reviews.llvm.org/D10599 Files: include/clang/Basic/Attr.td include/clang/Basic/AttrDocs.td include/clang/Basic/DiagnosticParseKinds.td include/clang/Basic/DiagnosticSemaKinds.td include/clang/Basic/OpenMPKinds.def include/clang/Parse/Parser.h include/clang/Sema/Sema.h lib/AST/DeclPrinter.cpp lib/Basic/OpenMPKinds.cpp lib/Parse/ParseDecl.cpp lib/Parse/ParseDeclCXX.cpp lib/Parse/ParseOpenMP.cpp lib/Parse/Parser.cpp lib/Sema/SemaOpenMP.cpp test/OpenMP/declare_simd_ast_print.c test/OpenMP/declare_simd_ast_print.cpp test/OpenMP/declare_simd_messages.cpp --b1_5a6132f128842715e7b76415b96aa4fc Content-Type: text/x-patch; charset=utf-8; name="D10599.33181.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D10599.33181.patch" SW5kZXg6IGxpYi9QYXJzZS9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGxpYi9QYXJzZS9QYXJzZXIuY3BwCisrKyBsaWIvUGFyc2Uv UGFyc2VyLmNwcApAQCAtNjU2LDggKzY1NiwxMCBAQAogICBjYXNlIHRvazo6 YW5ub3RfcHJhZ21hX29wZW5jbF9leHRlbnNpb246CiAgICAgSGFuZGxlUHJh Z21hT3BlbkNMRXh0ZW5zaW9uKCk7CiAgICAgcmV0dXJuIERlY2xHcm91cFB0 clR5KCk7Ci0gIGNhc2UgdG9rOjphbm5vdF9wcmFnbWFfb3Blbm1wOgotICAg IHJldHVybiBQYXJzZU9wZW5NUERlY2xhcmF0aXZlRGlyZWN0aXZlKCk7Cisg IGNhc2UgdG9rOjphbm5vdF9wcmFnbWFfb3Blbm1wOiB7CisgICAgQWNjZXNz U3BlY2lmaWVyIEFTID0gQVNfbm9uZTsKKyAgICByZXR1cm4gUGFyc2VPcGVu TVBEZWNsYXJhdGl2ZURpcmVjdGl2ZVdpdGhFeHREZWNsKEFTLCBhdHRycyk7 CisgIH0KICAgY2FzZSB0b2s6OmFubm90X3ByYWdtYV9tc19wb2ludGVyc190 b19tZW1iZXJzOgogICAgIEhhbmRsZVByYWdtYU1TUG9pbnRlcnNUb01lbWJl cnMoKTsKICAgICByZXR1cm4gRGVjbEdyb3VwUHRyVHkoKTsKSW5kZXg6IGxp Yi9QYXJzZS9QYXJzZU9wZW5NUC5jcHAKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gbGliL1BhcnNlL1BhcnNlT3Blbk1QLmNwcAorKysgbGliL1BhcnNl L1BhcnNlT3Blbk1QLmNwcApAQCAtMzEsNiArMzEsNyBAQAogICAvLyBFLmcu OiBPTVBEX2ZvciBPTVBEX3NpbWQgPT09PiBPTVBEX2Zvcl9zaW1kCiAgIC8v IFRPRE86IGFkZCBvdGhlciBjb21iaW5lZCBkaXJlY3RpdmVzIGluIHRvcG9s b2dpY2FsIG9yZGVyLgogICBjb25zdCBPcGVuTVBEaXJlY3RpdmVLaW5kIEZb XVszXSA9IHsKKyAgICAgIHtPTVBEX3Vua25vd24gLypkZWNsYXJlKi8sIE9N UERfc2ltZCwgT01QRF9kZWNsYXJlX3NpbWR9LAogICAgICAge09NUERfdW5r bm93biAvKmNhbmNlbGxhdGlvbiovLCBPTVBEX3Vua25vd24gLypwb2ludCov LAogICAgICAgIE9NUERfY2FuY2VsbGF0aW9uX3BvaW50fSwKICAgICAgIHtP TVBEX3RhcmdldCwgT01QRF91bmtub3duIC8qZGF0YSovLCBPTVBEX3Rhcmdl dF9kYXRhfSwKQEAgLTQ4LDExICs0OSwxMiBAQAogICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgbGx2bTo6YXJyYXlfbGVuZ3Rob2YoRik7ICsraSkgewog ICAgIGlmICghVG9rLmlzQW5ub3RhdGlvbigpICYmIERLaW5kID09IE9NUERf dW5rbm93bikgewogICAgICAgVG9rZW5NYXRjaGVkID0KLSAgICAgICAgICAo aSA9PSAwKSAmJgotICAgICAgICAgICFQLmdldFByZXByb2Nlc3NvcigpLmdl dFNwZWxsaW5nKFRvaykuY29tcGFyZSgiY2FuY2VsbGF0aW9uIik7Ci0gICAg fSBlbHNlIHsKKyAgICAgICAgICAoKGkgPT0gMCkgJiYKKyAgICAgICAgICAg IVAuZ2V0UHJlcHJvY2Vzc29yKCkuZ2V0U3BlbGxpbmcoVG9rKS5jb21wYXJl KCJkZWNsYXJlIikpIHx8CisgICAgICAgICAgKChpID09IDEpICYmCisgICAg ICAgICAgICFQLmdldFByZXByb2Nlc3NvcigpLmdldFNwZWxsaW5nKFRvayku Y29tcGFyZSgiY2FuY2VsbGF0aW9uIikpOworICAgIH0gZWxzZQogICAgICAg VG9rZW5NYXRjaGVkID0gREtpbmQgPT0gRltpXVswXSAmJiBES2luZCAhPSBP TVBEX3Vua25vd247Ci0gICAgfQogCiAgICAgaWYgKFRva2VuTWF0Y2hlZCkg ewogICAgICAgVG9rID0gUC5nZXRQcmVwcm9jZXNzb3IoKS5Mb29rQWhlYWQo MCk7CkBAIC02NCwxMiArNjYsMTEgQEAKIAogICAgICAgaWYgKCFUb2tlbklz QW5ub3RhdGlvbiAmJiBTREtpbmQgPT0gT01QRF91bmtub3duKSB7CiAgICAg ICAgIFRva2VuTWF0Y2hlZCA9Ci0gICAgICAgICAgICAoKGkgPT0gMCkgJiYK KyAgICAgICAgICAgICgoaSA9PSAxKSAmJgogICAgICAgICAgICAgICFQLmdl dFByZXByb2Nlc3NvcigpLmdldFNwZWxsaW5nKFRvaykuY29tcGFyZSgicG9p bnQiKSkgfHwKLSAgICAgICAgICAgICgoaSA9PSAxKSAmJiAhUC5nZXRQcmVw cm9jZXNzb3IoKS5nZXRTcGVsbGluZyhUb2spLmNvbXBhcmUoImRhdGEiKSk7 Ci0gICAgICB9IGVsc2UgeworICAgICAgICAgICAgKChpID09IDIpICYmICFQ LmdldFByZXByb2Nlc3NvcigpLmdldFNwZWxsaW5nKFRvaykuY29tcGFyZSgi ZGF0YSIpKTsKKyAgICAgIH0gZWxzZQogICAgICAgICBUb2tlbk1hdGNoZWQg PSBTREtpbmQgPT0gRltpXVsxXSAmJiBTREtpbmQgIT0gT01QRF91bmtub3du OwotICAgICAgfQogCiAgICAgICBpZiAoVG9rZW5NYXRjaGVkKSB7CiAgICAg ICAgIFAuQ29uc3VtZVRva2VuKCk7CkBAIC04NCw4ICs4NSwxNiBAQAogLy8v CiAvLy8gICAgICAgdGhyZWFkcHJpdmF0ZS1kaXJlY3RpdmU6CiAvLy8gICAg ICAgICBhbm5vdF9wcmFnbWFfb3Blbm1wICd0aHJlYWRwcml2YXRlJyBzaW1w bGUtdmFyaWFibGUtbGlzdAorLy8vICAgICAgICAgYW5ub3RfcHJhZ21hX29t cF9lbmQKIC8vLwotUGFyc2VyOjpEZWNsR3JvdXBQdHJUeSBQYXJzZXI6OlBh cnNlT3Blbk1QRGVjbGFyYXRpdmVEaXJlY3RpdmUoKSB7CisvLy8gICAgICAg ZGVjbGFyZS1zaW1kLWRpcmVjdGl2ZToKKy8vLyAgICAgICAgIGFubm90X3By YWdtYV9vcGVubXAgJ2RlY2xhcmUgc2ltZCcgezxjbGF1c2U+IFssXX0KKy8v LyAgICAgICAgIGFubm90X3ByYWdtYV9vbXBfZW5kCisvLy8gICAgICAgICA8 ZnVuY3Rpb24gZGVjbGFyYXRpb24vZGVmaW5pdGlvbj4KKy8vLworUGFyc2Vy OjpEZWNsR3JvdXBQdHJUeSBQYXJzZXI6OlBhcnNlT3Blbk1QRGVjbGFyYXRp dmVEaXJlY3RpdmVXaXRoRXh0RGVjbCgKKyAgICBBY2Nlc3NTcGVjaWZpZXIg JkFTLCBQYXJzZWRBdHRyaWJ1dGVzV2l0aFJhbmdlICZBdHRycywKKyAgICBE ZWNsU3BlYzo6VFNUIFRhZ1R5cGUsIERlY2wgKlRhZ0RlY2wpIHsKICAgYXNz ZXJ0KFRvay5pcyh0b2s6OmFubm90X3ByYWdtYV9vcGVubXApICYmICJOb3Qg YW4gT3Blbk1QIGRpcmVjdGl2ZSEiKTsKICAgUGFyZW5CcmFjZUJyYWNrZXRC YWxhbmNlciBCYWxhbmNlclJBSUlPYmooKnRoaXMpOwogCkBAIC0xMDksNiAr MTE4LDUwIEBACiAgICAgICByZXR1cm4gQWN0aW9ucy5BY3RPbk9wZW5NUFRo cmVhZHByaXZhdGVEaXJlY3RpdmUoTG9jLCBJZGVudGlmaWVycyk7CiAgICAg fQogICAgIGJyZWFrOworICBjYXNlIE9NUERfZGVjbGFyZV9zaW1kOiB7Cisg ICAgLy8gVGhlIHN5bnRheCBpczoKKyAgICAvLyB7ICNwcmFnbWEgb21wIGRl Y2xhcmUgc2ltZCB9CisgICAgLy8gPGZ1bmN0aW9uLWRlY2xhcmF0aW9uLW9y LWRlZmluaXRpb24+CisgICAgLy8KKworICAgIENvbnN1bWVUb2tlbigpOwor ICAgIC8vIFRoZSBsYXN0IHNlZW4gdG9rZW4gaXMgYW5ub3RfcHJhZ21hX29w ZW5tcF9lbmQgLSBuZWVkIHRvIGNoZWNrIGZvcgorICAgIC8vIGV4dHJhIHRv a2Vucy4KKyAgICBpZiAoVG9rLmlzTm90KHRvazo6YW5ub3RfcHJhZ21hX29w ZW5tcF9lbmQpKSB7CisgICAgICBEaWFnKFRvaywgZGlhZzo6d2Fybl9vbXBf ZXh0cmFfdG9rZW5zX2F0X2VvbCkKKyAgICAgICAgICA8PCBnZXRPcGVuTVBE aXJlY3RpdmVOYW1lKE9NUERfZGVjbGFyZV9zaW1kKTsKKyAgICAgIGlmICgh U2tpcFVudGlsKHRvazo6YW5ub3RfcHJhZ21hX29wZW5tcF9lbmQsIFN0b3BC ZWZvcmVNYXRjaCkpCisgICAgICAgIHJldHVybiBEZWNsR3JvdXBQdHJUeSgp OworICAgIH0KKyAgICAvLyBTa2lwIHRoZSBsYXN0IGFubm90X3ByYWdtYV9v cGVubXBfZW5kLgorICAgIENvbnN1bWVUb2tlbigpOworCisgICAgRGVjbEdy b3VwUHRyVHkgUHRyOworICAgIGlmIChUb2suaXModG9rOjphbm5vdF9wcmFn bWFfb3Blbm1wKSkgeworICAgICAgUHRyID0gUGFyc2VPcGVuTVBEZWNsYXJh dGl2ZURpcmVjdGl2ZVdpdGhFeHREZWNsKEFTLCBBdHRycywgVGFnVHlwZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUYWdEZWNsKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8g SGVyZSB3ZSBleHBlY3QgdG8gc2VlIHNvbWUgZnVuY3Rpb24gZGVjbGFyYXRp b24uCisgICAgICB3aGlsZSAoVG9rLmlzTm90KHRvazo6cl9icmFjZSkgJiYg IWlzRW9mT3JFb20oKSAmJiAhUHRyKSB7CisgICAgICAgIGlmIChBUyA9PSBB U19ub25lKSB7CisgICAgICAgICAgYXNzZXJ0KFRhZ1R5cGUgPT0gRGVjbFNw ZWM6OlRTVF91bnNwZWNpZmllZCk7CisgICAgICAgICAgTWF5YmVQYXJzZUNY WDExQXR0cmlidXRlcyhBdHRycyk7CisgICAgICAgICAgTWF5YmVQYXJzZU1p Y3Jvc29mdEF0dHJpYnV0ZXMoQXR0cnMpOworICAgICAgICAgIFBhcnNpbmdE ZWNsU3BlYyBQRFMoKnRoaXMpOworICAgICAgICAgIFB0ciA9IFBhcnNlRXh0 ZXJuYWxEZWNsYXJhdGlvbihBdHRycywgJlBEUyk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgUHRyID0gUGFyc2VDWFhDbGFzc01lbWJlckRlY2xh cmF0aW9uV2l0aFByYWdtYXMoCisgICAgICAgICAgICAgIEFTLCBBdHRycywg VGFnVHlwZSwgVGFnRGVjbCwgLypPbmx5RnVuY3Rpb25BbmRQcmFnbWFzPSov dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCFQ dHIgJiYgKGlzRW9mT3JFb20oKSB8fCBUb2suaXModG9rOjpyX2JyYWNlKSkp IHsKKyAgICAgIERpYWcoTG9jLCBkaWFnOjplcnJfb21wX2RlY2xfaW5fZGVj bGFyZV9zaW1kKTsKKyAgICAgIHJldHVybiBEZWNsR3JvdXBQdHJUeSgpOwor ICAgIH0KKworICAgIHJldHVybiBBY3Rpb25zLkFjdE9uT3Blbk1QRGVjbGFy ZVNpbWREaXJlY3RpdmUoUHRyLCBMb2MpOworICB9CiAgIGNhc2UgT01QRF91 bmtub3duOgogICAgIERpYWcoVG9rLCBkaWFnOjplcnJfb21wX3Vua25vd25f ZGlyZWN0aXZlKTsKICAgICBicmVhazsKQEAgLTMxMCw2ICszNjMsMTEgQEAK ICAgICBPTVBEaXJlY3RpdmVTY29wZS5FeGl0KCk7CiAgICAgYnJlYWs7CiAg IH0KKyAgY2FzZSBPTVBEX2RlY2xhcmVfc2ltZDoKKyAgICBEaWFnKFRvaywg ZGlhZzo6ZXJyX29tcF91bmV4cGVjdGVkX2RpcmVjdGl2ZSkKKyAgICAgICAg PDwgZ2V0T3Blbk1QRGlyZWN0aXZlTmFtZShES2luZCk7CisgICAgU2tpcFVu dGlsKHRvazo6YW5ub3RfcHJhZ21hX29wZW5tcF9lbmQpOworICAgIGJyZWFr OwogICBjYXNlIE9NUERfdW5rbm93bjoKICAgICBEaWFnKFRvaywgZGlhZzo6 ZXJyX29tcF91bmtub3duX2RpcmVjdGl2ZSk7CiAgICAgU2tpcFVudGlsKHRv azo6YW5ub3RfcHJhZ21hX29wZW5tcF9lbmQpOwpJbmRleDogbGliL1BhcnNl L1BhcnNlRGVjbENYWC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g bGliL1BhcnNlL1BhcnNlRGVjbENYWC5jcHAKKysrIGxpYi9QYXJzZS9QYXJz ZURlY2xDWFguY3BwCkBAIC0yODE1LDE1ICsyODE1LDE1IEBACiAKIFBhcnNl cjo6RGVjbEdyb3VwUHRyVHkgUGFyc2VyOjpQYXJzZUNYWENsYXNzTWVtYmVy RGVjbGFyYXRpb25XaXRoUHJhZ21hcygKICAgICBBY2Nlc3NTcGVjaWZpZXIg JkFTLCBQYXJzZWRBdHRyaWJ1dGVzV2l0aFJhbmdlICZBY2Nlc3NBdHRycywK LSAgICBEZWNsU3BlYzo6VFNUIFRhZ1R5cGUsIERlY2wgKlRhZ0RlY2wpIHsK LSAgaWYgKGdldExhbmdPcHRzKCkuTWljcm9zb2Z0RXh0ICYmCisgICAgRGVj bFNwZWM6OlRTVCBUYWdUeXBlLCBEZWNsICpUYWdEZWNsLCBib29sIE9ubHlG dW5jdGlvbkFuZFByYWdtYXMpIHsKKyAgaWYgKCFPbmx5RnVuY3Rpb25BbmRQ cmFnbWFzICYmIGdldExhbmdPcHRzKCkuTWljcm9zb2Z0RXh0ICYmCiAgICAg ICBUb2suaXNPbmVPZih0b2s6Omt3X19faWZfZXhpc3RzLCB0b2s6Omt3X19f aWZfbm90X2V4aXN0cykpIHsKICAgICBQYXJzZU1pY3Jvc29mdElmRXhpc3Rz Q2xhc3NEZWNsYXJhdGlvbihUYWdUeXBlLCBBUyk7CiAgICAgcmV0dXJuIERl Y2xHcm91cFB0clR5KCk7CiAgIH0KIAogICAvLyBDaGVjayBmb3IgZXh0cmFu ZW91cyB0b3AtbGV2ZWwgc2VtaWNvbG9uLgotICBpZiAoVG9rLmlzKHRvazo6 c2VtaSkpIHsKKyAgaWYgKCFPbmx5RnVuY3Rpb25BbmRQcmFnbWFzICYmIFRv ay5pcyh0b2s6OnNlbWkpKSB7CiAgICAgQ29uc3VtZUV4dHJhU2VtaShJbnNp ZGVTdHJ1Y3QsIFRhZ1R5cGUpOwogICAgIHJldHVybiBEZWNsR3JvdXBQdHJU eSgpOwogICB9CkBAIC0yODU5LDQ0ICsyODU5LDQ4IEBACiAgICAgcmV0dXJu IERlY2xHcm91cFB0clR5KCk7CiAgIH0KIAotICBBY2Nlc3NTcGVjaWZpZXIg TmV3QVMgPSBnZXRBY2Nlc3NTcGVjaWZpZXJJZlByZXNlbnQoKTsKLSAgaWYg KE5ld0FTICE9IEFTX25vbmUpIHsKLSAgICAvLyBDdXJyZW50IHRva2VuIGlz IGEgQysrIGFjY2VzcyBzcGVjaWZpZXIuCi0gICAgQVMgPSBOZXdBUzsKLSAg ICBTb3VyY2VMb2NhdGlvbiBBU0xvYyA9IFRvay5nZXRMb2NhdGlvbigpOwot ICAgIHVuc2lnbmVkIFRva0xlbmd0aCA9IFRvay5nZXRMZW5ndGgoKTsKLSAg ICBDb25zdW1lVG9rZW4oKTsKLSAgICBBY2Nlc3NBdHRycy5jbGVhcigpOwot ICAgIE1heWJlUGFyc2VHTlVBdHRyaWJ1dGVzKEFjY2Vzc0F0dHJzKTsKLQot ICAgIFNvdXJjZUxvY2F0aW9uIEVuZExvYzsKLSAgICBpZiAoVHJ5Q29uc3Vt ZVRva2VuKHRvazo6Y29sb24sIEVuZExvYykpIHsKLSAgICB9IGVsc2UgaWYg KFRyeUNvbnN1bWVUb2tlbih0b2s6OnNlbWksIEVuZExvYykpIHsKLSAgICAg IERpYWcoRW5kTG9jLCBkaWFnOjplcnJfZXhwZWN0ZWQpCi0gICAgICAgICAg PDwgdG9rOjpjb2xvbiA8PCBGaXhJdEhpbnQ6OkNyZWF0ZVJlcGxhY2VtZW50 KEVuZExvYywgIjoiKTsKLSAgICB9IGVsc2UgewotICAgICAgRW5kTG9jID0g QVNMb2MuZ2V0TG9jV2l0aE9mZnNldChUb2tMZW5ndGgpOwotICAgICAgRGlh ZyhFbmRMb2MsIGRpYWc6OmVycl9leHBlY3RlZCkKLSAgICAgICAgICA8PCB0 b2s6OmNvbG9uIDw8IEZpeEl0SGludDo6Q3JlYXRlSW5zZXJ0aW9uKEVuZExv YywgIjoiKTsKLSAgICB9CisgIGlmICghT25seUZ1bmN0aW9uQW5kUHJhZ21h cykgeworICAgIEFjY2Vzc1NwZWNpZmllciBOZXdBUyA9IGdldEFjY2Vzc1Nw ZWNpZmllcklmUHJlc2VudCgpOworICAgIGlmIChOZXdBUyAhPSBBU19ub25l KSB7CisgICAgICAvLyBDdXJyZW50IHRva2VuIGlzIGEgQysrIGFjY2VzcyBz cGVjaWZpZXIuCisgICAgICBBUyA9IE5ld0FTOworICAgICAgU291cmNlTG9j YXRpb24gQVNMb2MgPSBUb2suZ2V0TG9jYXRpb24oKTsKKyAgICAgIHVuc2ln bmVkIFRva0xlbmd0aCA9IFRvay5nZXRMZW5ndGgoKTsKKyAgICAgIENvbnN1 bWVUb2tlbigpOworICAgICAgQWNjZXNzQXR0cnMuY2xlYXIoKTsKKyAgICAg IE1heWJlUGFyc2VHTlVBdHRyaWJ1dGVzKEFjY2Vzc0F0dHJzKTsKIAotICAg IC8vIFRoZSBNaWNyb3NvZnQgZXh0ZW5zaW9uIF9faW50ZXJmYWNlIGRvZXMg bm90IHBlcm1pdCBub24tcHVibGljCi0gICAgLy8gYWNjZXNzIHNwZWNpZmll cnMuCi0gICAgaWYgKFRhZ1R5cGUgPT0gRGVjbFNwZWM6OlRTVF9pbnRlcmZh Y2UgJiYgQVMgIT0gQVNfcHVibGljKSB7Ci0gICAgICBEaWFnKEFTTG9jLCBk aWFnOjplcnJfYWNjZXNzX3NwZWNpZmllcl9pbnRlcmZhY2UpIDw8IChBUyA9 PSBBU19wcm90ZWN0ZWQpOwotICAgIH0KKyAgICAgIFNvdXJjZUxvY2F0aW9u IEVuZExvYzsKKyAgICAgIGlmIChUcnlDb25zdW1lVG9rZW4odG9rOjpjb2xv biwgRW5kTG9jKSkgeworICAgICAgfSBlbHNlIGlmIChUcnlDb25zdW1lVG9r ZW4odG9rOjpzZW1pLCBFbmRMb2MpKSB7CisgICAgICAgIERpYWcoRW5kTG9j LCBkaWFnOjplcnJfZXhwZWN0ZWQpCisgICAgICAgICAgICA8PCB0b2s6OmNv bG9uIDw8IEZpeEl0SGludDo6Q3JlYXRlUmVwbGFjZW1lbnQoRW5kTG9jLCAi OiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgRW5kTG9jID0gQVNMb2Mu Z2V0TG9jV2l0aE9mZnNldChUb2tMZW5ndGgpOworICAgICAgICBEaWFnKEVu ZExvYywgZGlhZzo6ZXJyX2V4cGVjdGVkKQorICAgICAgICAgICAgPDwgdG9r Ojpjb2xvbiA8PCBGaXhJdEhpbnQ6OkNyZWF0ZUluc2VydGlvbihFbmRMb2Ms ICI6Iik7CisgICAgICB9CisKKyAgICAgIC8vIFRoZSBNaWNyb3NvZnQgZXh0 ZW5zaW9uIF9faW50ZXJmYWNlIGRvZXMgbm90IHBlcm1pdCBub24tcHVibGlj CisgICAgICAvLyBhY2Nlc3Mgc3BlY2lmaWVycy4KKyAgICAgIGlmIChUYWdU eXBlID09IERlY2xTcGVjOjpUU1RfaW50ZXJmYWNlICYmIEFTICE9IEFTX3B1 YmxpYykgeworICAgICAgICBEaWFnKEFTTG9jLCBkaWFnOjplcnJfYWNjZXNz X3NwZWNpZmllcl9pbnRlcmZhY2UpCisgICAgICAgICAgICA8PCAoQVMgPT0g QVNfcHJvdGVjdGVkKTsKKyAgICAgIH0KKworICAgICAgaWYgKEFjdGlvbnMu QWN0T25BY2Nlc3NTcGVjaWZpZXIoTmV3QVMsIEFTTG9jLCBFbmRMb2MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NB dHRycy5nZXRMaXN0KCkpKSB7CisgICAgICAgIC8vIGZvdW5kIGFub3RoZXIg YXR0cmlidXRlIHRoYW4gb25seSBhbm5vdGF0aW9ucworICAgICAgICBBY2Nl c3NBdHRycy5jbGVhcigpOworICAgICAgfQogCi0gICAgaWYgKEFjdGlvbnMu QWN0T25BY2Nlc3NTcGVjaWZpZXIoTmV3QVMsIEFTTG9jLCBFbmRMb2MsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzQXR0 cnMuZ2V0TGlzdCgpKSkgewotICAgICAgLy8gZm91bmQgYW5vdGhlciBhdHRy aWJ1dGUgdGhhbiBvbmx5IGFubm90YXRpb25zCi0gICAgICBBY2Nlc3NBdHRy cy5jbGVhcigpOworICAgICAgcmV0dXJuIERlY2xHcm91cFB0clR5KCk7CiAg ICAgfQotCi0gICAgcmV0dXJuIERlY2xHcm91cFB0clR5KCk7CiAgIH0KIAog ICBpZiAoVG9rLmlzKHRvazo6YW5ub3RfcHJhZ21hX29wZW5tcCkpCi0gICAg cmV0dXJuIFBhcnNlT3Blbk1QRGVjbGFyYXRpdmVEaXJlY3RpdmUoKTsKKyAg ICByZXR1cm4gUGFyc2VPcGVuTVBEZWNsYXJhdGl2ZURpcmVjdGl2ZVdpdGhF eHREZWNsKEFTLCBBY2Nlc3NBdHRycywgVGFnVHlwZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRh Z0RlY2wpOwogCiAgIC8vIFBhcnNlIGFsbCB0aGUgY29tbWEgc2VwYXJhdGVk IGRlY2xhcmF0b3JzLgogICByZXR1cm4gUGFyc2VDWFhDbGFzc01lbWJlckRl Y2xhcmF0aW9uKEFTLCBBY2Nlc3NBdHRycy5nZXRMaXN0KCkpOwpJbmRleDog bGliL1BhcnNlL1BhcnNlRGVjbC5jcHAKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gbGliL1BhcnNlL1BhcnNlRGVjbC5jcHAKKysrIGxpYi9QYXJzZS9Q YXJzZURlY2wuY3BwCkBAIC0zNjE3LDcgKzM2MTcsOSBAQAogCiAgICAgaWYg KFRvay5pcyh0b2s6OmFubm90X3ByYWdtYV9vcGVubXApKSB7CiAgICAgICAv LyBSZXN1bHQgY2FuIGJlIGlnbm9yZWQsIGJlY2F1c2UgaXQgbXVzdCBiZSBh bHdheXMgZW1wdHkuCi0gICAgICBhdXRvIFJlcyA9IFBhcnNlT3Blbk1QRGVj bGFyYXRpdmVEaXJlY3RpdmUoKTsKKyAgICAgIEFjY2Vzc1NwZWNpZmllciBB UyA9IEFTX25vbmU7CisgICAgICBQYXJzZWRBdHRyaWJ1dGVzV2l0aFJhbmdl IEF0dHJzKEF0dHJGYWN0b3J5KTsKKyAgICAgIGF1dG8gUmVzID0gUGFyc2VP cGVuTVBEZWNsYXJhdGl2ZURpcmVjdGl2ZVdpdGhFeHREZWNsKEFTLCBBdHRy cyk7CiAgICAgICBhc3NlcnQoIVJlcyk7CiAgICAgICAvLyBTaWxlbmNlIHBv c3NpYmxlIHdhcm5pbmdzLgogICAgICAgKHZvaWQpUmVzOwpJbmRleDogbGli L0FTVC9EZWNsUHJpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gbGliL0FTVC9EZWNsUHJpbnRlci5jcHAKKysrIGxpYi9BU1QvRGVjbFBy aW50ZXIuY3BwCkBAIC05NSw3ICs5NSw3IEBACiAKICAgICB2b2lkIFByaW50 VGVtcGxhdGVQYXJhbWV0ZXJzKGNvbnN0IFRlbXBsYXRlUGFyYW1ldGVyTGlz dCAqUGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgVGVtcGxhdGVBcmd1bWVudExpc3QgKkFyZ3MgPSBudWxscHRyKTsK LSAgICB2b2lkIHByZXR0eVByaW50QXR0cmlidXRlcyhEZWNsICpEKTsKKyAg ICB2b2lkIHByZXR0eVByaW50QXR0cmlidXRlcyhEZWNsICpELCBib29sIFBy aW50UHJhZ21hcyA9IGZhbHNlKTsKICAgICB2b2lkIHByaW50RGVjbFR5cGUo UXVhbFR5cGUgVCwgU3RyaW5nUmVmIERlY2xOYW1lLCBib29sIFBhY2sgPSBm YWxzZSk7CiAgIH07CiB9CkBAIC0xOTQsMTUgKzE5NCwyNyBAQAogICByZXR1 cm4gT3V0OwogfQogCi12b2lkIERlY2xQcmludGVyOjpwcmV0dHlQcmludEF0 dHJpYnV0ZXMoRGVjbCAqRCkgewordm9pZCBEZWNsUHJpbnRlcjo6cHJldHR5 UHJpbnRBdHRyaWJ1dGVzKERlY2wgKkQsIGJvb2wgUHJpbnRQcmFnbWFzKSB7 CiAgIGlmIChQb2xpY3kuUG9saXNoRm9yRGVjbGFyYXRpb24pCiAgICAgcmV0 dXJuOwotICAKKwogICBpZiAoRC0+aGFzQXR0cnMoKSkgewogICAgIEF0dHJW ZWMgJkF0dHJzID0gRC0+Z2V0QXR0cnMoKTsKLSAgICBmb3IgKEF0dHJWZWM6 OmNvbnN0X2l0ZXJhdG9yIGk9QXR0cnMuYmVnaW4oKSwgZT1BdHRycy5lbmQo KTsgaSE9ZTsgKytpKSB7Ci0gICAgICBBdHRyICpBID0gKmk7Ci0gICAgICBB LT5wcmludFByZXR0eShPdXQsIFBvbGljeSk7CisgICAgZm9yIChhdXRvICpB IDogQXR0cnMpIHsKKyAgICAgIHN3aXRjaCAoQS0+Z2V0S2luZCgpKSB7Cisj ZGVmaW5lIEFUVFIoWCkKKyNkZWZpbmUgUFJBR01BX1NQRUxMSU5HX0FUVFIo WCkgY2FzZSBhdHRyOjpYOgorI2luY2x1ZGUgImNsYW5nL0Jhc2ljL0F0dHJM aXN0LmluYyIKKyAgICAgICAgaWYgKFByaW50UHJhZ21hcykgeworICAgICAg ICAgIEEtPnByaW50UHJldHR5KE91dCwgUG9saWN5KTsKKyAgICAgICAgICBJ bmRlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRl ZmF1bHQ6CisgICAgICAgIGlmICghUHJpbnRQcmFnbWFzKQorICAgICAgICAg IEEtPnByaW50UHJldHR5KE91dCwgUG9saWN5KTsKKyAgICAgICAgYnJlYWs7 CisgICAgICB9CiAgICAgfQogICB9CiB9CkBAIC00MDgsNiArNDIwLDEwIEBA CiB9CiAKIHZvaWQgRGVjbFByaW50ZXI6OlZpc2l0RnVuY3Rpb25EZWNsKEZ1 bmN0aW9uRGVjbCAqRCkgeworICBpZiAoIUQtPmdldERlc2NyaWJlZEZ1bmN0 aW9uVGVtcGxhdGUoKSAmJgorICAgICAgIUQtPmlzRnVuY3Rpb25UZW1wbGF0 ZVNwZWNpYWxpemF0aW9uKCkpCisgICAgcHJldHR5UHJpbnRBdHRyaWJ1dGVz KEQsIC8qUHJpbnRQcmFnbWFzPSovdHJ1ZSk7CisKICAgQ1hYQ29uc3RydWN0 b3JEZWNsICpDRGVjbCA9IGR5bl9jYXN0PENYWENvbnN0cnVjdG9yRGVjbD4o RCk7CiAgIENYWENvbnZlcnNpb25EZWNsICpDb252ZXJzaW9uRGVjbCA9IGR5 bl9jYXN0PENYWENvbnZlcnNpb25EZWNsPihEKTsKICAgaWYgKCFQb2xpY3ku U3VwcHJlc3NTcGVjaWZpZXJzKSB7CkBAIC02NDMsNiArNjU5LDcgQEAKIH0K IAogdm9pZCBEZWNsUHJpbnRlcjo6VmlzaXRGaWVsZERlY2woRmllbGREZWNs ICpEKSB7CisgIC8vIEZJWE1FOiBhZGQgcHJpbnRpbmcgb2YgcHJhZ21hIGF0 dHJpYnV0ZXMgaWYgcmVxdWlyZWQuCiAgIGlmICghUG9saWN5LlN1cHByZXNz U3BlY2lmaWVycyAmJiBELT5pc011dGFibGUoKSkKICAgICBPdXQgPDwgIm11 dGFibGUgIjsKICAgaWYgKCFQb2xpY3kuU3VwcHJlc3NTcGVjaWZpZXJzICYm IEQtPmlzTW9kdWxlUHJpdmF0ZSgpKQpAQCAtNjcyLDYgKzY4OSw3IEBACiB9 CiAKIHZvaWQgRGVjbFByaW50ZXI6OlZpc2l0VmFyRGVjbChWYXJEZWNsICpE KSB7CisgIC8vIEZJWE1FOiBhZGQgcHJpbnRpbmcgb2YgcHJhZ21hIGF0dHJp YnV0ZXMgaWYgcmVxdWlyZWQuCiAgIGlmICghUG9saWN5LlN1cHByZXNzU3Bl Y2lmaWVycykgewogICAgIFN0b3JhZ2VDbGFzcyBTQyA9IEQtPmdldFN0b3Jh Z2VDbGFzcygpOwogICAgIGlmIChTQyAhPSBTQ19Ob25lKQpAQCAtNzc5LDYg Kzc5Nyw3IEBACiB9CiAKIHZvaWQgRGVjbFByaW50ZXI6OlZpc2l0Q1hYUmVj b3JkRGVjbChDWFhSZWNvcmREZWNsICpEKSB7CisgIC8vIEZJWE1FOiBhZGQg cHJpbnRpbmcgb2YgcHJhZ21hIGF0dHJpYnV0ZXMgaWYgcmVxdWlyZWQuCiAg IGlmICghUG9saWN5LlN1cHByZXNzU3BlY2lmaWVycyAmJiBELT5pc01vZHVs ZVByaXZhdGUoKSkKICAgICBPdXQgPDwgIl9fbW9kdWxlX3ByaXZhdGVfXyAi OwogICBPdXQgPDwgRC0+Z2V0S2luZE5hbWUoKTsKQEAgLTkxNCwxMSArOTMz LDEzIEBACiAgIGlmIChQcmludEluc3RhbnRpYXRpb24pIHsKICAgICBUZW1w bGF0ZVBhcmFtZXRlckxpc3QgKlBhcmFtcyA9IEQtPmdldFRlbXBsYXRlUGFy YW1ldGVycygpOwogICAgIGZvciAoYXV0byAqSSA6IEQtPnNwZWNpYWxpemF0 aW9ucygpKSB7CisgICAgICBwcmV0dHlQcmludEF0dHJpYnV0ZXMoSSwgLypQ cmludFByYWdtYXM9Ki90cnVlKTsKICAgICAgIFByaW50VGVtcGxhdGVQYXJh bWV0ZXJzKFBhcmFtcywgSS0+Z2V0VGVtcGxhdGVTcGVjaWFsaXphdGlvbkFy Z3MoKSk7CiAgICAgICBWaXNpdChJKTsKICAgICB9CiAgIH0KIAorICBwcmV0 dHlQcmludEF0dHJpYnV0ZXMoRC0+Z2V0VGVtcGxhdGVkRGVjbCgpLCAvKlBy aW50UHJhZ21hcz0qL3RydWUpOwogICByZXR1cm4gVmlzaXRSZWRlY2xhcmFi bGVUZW1wbGF0ZURlY2woRCk7CiB9CiAKSW5kZXg6IGxpYi9TZW1hL1NlbWFP cGVuTVAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9TZW1h L1NlbWFPcGVuTVAuY3BwCisrKyBsaWIvU2VtYS9TZW1hT3Blbk1QLmNwcApA QCAtMTM0NSw2ICsxMzQ1LDcgQEAKICAgY2FzZSBPTVBEX2NhbmNlbGxhdGlv bl9wb2ludDoKICAgY2FzZSBPTVBEX2NhbmNlbDoKICAgY2FzZSBPTVBEX2Zs dXNoOgorICBjYXNlIE9NUERfZGVjbGFyZV9zaW1kOgogICAgIGxsdm1fdW5y ZWFjaGFibGUoIk9wZW5NUCBEaXJlY3RpdmUgaXMgbm90IGFsbG93ZWQiKTsK ICAgY2FzZSBPTVBEX3Vua25vd246CiAgICAgbGx2bV91bnJlYWNoYWJsZSgi VW5rbm93biBPcGVuTVAgZGlyZWN0aXZlIik7CkBAIC0yMTQ0LDYgKzIxNDUs NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFbmRMb2MpOwogICAgIGJyZWFrOwogICBjYXNlIE9NUERfdGhyZWFkcHJp dmF0ZToKKyAgY2FzZSBPTVBEX2RlY2xhcmVfc2ltZDoKICAgICBsbHZtX3Vu cmVhY2hhYmxlKCJPcGVuTVAgRGlyZWN0aXZlIGlzIG5vdCBhbGxvd2VkIik7 CiAgIGNhc2UgT01QRF91bmtub3duOgogICAgIGxsdm1fdW5yZWFjaGFibGUo IlVua25vd24gT3Blbk1QIGRpcmVjdGl2ZSIpOwpAQCAtMjE2MSw2ICsyMTYz LDMyIEBACiAgIHJldHVybiBSZXM7CiB9CiAKK1NlbWE6OkRlY2xHcm91cFB0 clR5CitTZW1hOjpBY3RPbk9wZW5NUERlY2xhcmVTaW1kRGlyZWN0aXZlKERl Y2xHcm91cFB0clR5IERHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb3VyY2VMb2NhdGlvbiBTdGFydExvYykgeworICBpZiAo IURHIHx8IERHLmdldCgpLmlzTnVsbCgpKQorICAgIHJldHVybiBEZWNsR3Jv dXBQdHJUeSgpOworCisgIGlmICghREcuZ2V0KCkuaXNTaW5nbGVEZWNsKCkp IHsKKyAgICBEaWFnKFN0YXJ0TG9jLCBkaWFnOjplcnJfb21wX3NpbmdsZV9k ZWNsX2luX2RlY2xhcmVfc2ltZCk7CisgICAgcmV0dXJuIERHOworICB9Cisg IGF1dG8gKkFEZWNsID0gREcuZ2V0KCkuZ2V0U2luZ2xlRGVjbCgpOworICBp ZiAoYXV0byAqRlREID0gZHluX2Nhc3Q8RnVuY3Rpb25UZW1wbGF0ZURlY2w+ KEFEZWNsKSkKKyAgICBBRGVjbCA9IEZURC0+Z2V0VGVtcGxhdGVkRGVjbCgp OworCisgIGlmICghaXNhPEZ1bmN0aW9uRGVjbD4oQURlY2wpKSB7CisgICAg RGlhZyhBRGVjbC0+Z2V0TG9jYXRpb24oKSwgZGlhZzo6ZXJyX29tcF9mdW5j dGlvbl9leHBlY3RlZCkKKyAgICAgICAgPDwgQURlY2wtPmdldERlY2xDb250 ZXh0KCktPmlzRmlsZUNvbnRleHQoKTsKKyAgICByZXR1cm4gRGVjbEdyb3Vw UHRyVHkoKTsKKyAgfQorCisgIGF1dG8gKk5ld0F0dHIgPSBuZXcgKENvbnRl eHQpIE9NUERlY2xhcmVTaW1kRGVjbEF0dHIoCisgICAgICBTb3VyY2VSYW5n ZShTdGFydExvYywgU3RhcnRMb2MpLCBDb250ZXh0LCAvKlNJPSovMCk7Cisg IEFEZWNsLT5hZGRBdHRyKE5ld0F0dHIpOworICByZXR1cm4gQ29udmVydERl Y2xUb0RlY2xHcm91cChBRGVjbCk7Cit9CisKIFN0bXRSZXN1bHQgU2VtYTo6 QWN0T25PcGVuTVBQYXJhbGxlbERpcmVjdGl2ZShBcnJheVJlZjxPTVBDbGF1 c2UgKj4gQ2xhdXNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdG10ICpBU3RtdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VMb2NhdGlv biBTdGFydExvYywKSW5kZXg6IGxpYi9CYXNpYy9PcGVuTVBLaW5kcy5jcHAK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL0Jhc2ljL09wZW5NUEtp bmRzLmNwcAorKysgbGliL0Jhc2ljL09wZW5NUEtpbmRzLmNwcApAQCAtMzY1 LDYgKzM2NSw4IEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgYnJlYWs7 CisgIGNhc2UgT01QRF9kZWNsYXJlX3NpbWQ6CisgICAgYnJlYWs7CiAgIGNh c2UgT01QRF91bmtub3duOgogICBjYXNlIE9NUERfdGhyZWFkcHJpdmF0ZToK ICAgY2FzZSBPTVBEX3NlY3Rpb246CkluZGV4OiBpbmNsdWRlL2NsYW5nL1Bh cnNlL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1 ZGUvY2xhbmcvUGFyc2UvUGFyc2VyLmgKKysrIGluY2x1ZGUvY2xhbmcvUGFy c2UvUGFyc2VyLmgKQEAgLTIzOTUsNyArMjM5NSw4IEBACiAgICAgICBQYXJz aW5nRGVjbFJBSUlPYmplY3QgKkRpYWdzRnJvbVRQYXJhbXMgPSBudWxscHRy KTsKICAgRGVjbEdyb3VwUHRyVHkgUGFyc2VDWFhDbGFzc01lbWJlckRlY2xh cmF0aW9uV2l0aFByYWdtYXMoCiAgICAgICBBY2Nlc3NTcGVjaWZpZXIgJkFT LCBQYXJzZWRBdHRyaWJ1dGVzV2l0aFJhbmdlICZBY2Nlc3NBdHRycywKLSAg ICAgIERlY2xTcGVjOjpUU1QgVGFnVHlwZSwgRGVjbCAqVGFnRGVjbCk7Cisg ICAgICBEZWNsU3BlYzo6VFNUIFRhZ1R5cGUsIERlY2wgKlRhZ0RlY2wsCisg ICAgICBib29sIE9ubHlGdW5jdGlvbkFuZFByYWdtYXMgPSBmYWxzZSk7CiAg IHZvaWQgUGFyc2VDb25zdHJ1Y3RvckluaXRpYWxpemVyKERlY2wgKkNvbnN0 cnVjdG9yRGVjbCk7CiAgIE1lbUluaXRSZXN1bHQgUGFyc2VNZW1Jbml0aWFs aXplcihEZWNsICpDb25zdHJ1Y3RvckRlY2wpOwogICB2b2lkIEhhbmRsZU1l bWJlckZ1bmN0aW9uRGVjbERlbGF5cyhEZWNsYXJhdG9yJiBEZWNsYXJhdG9y SW5mbywKQEAgLTI0MjQsNyArMjQyNSwxMCBAQAogICAvLz09PS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tPT09Ly8KICAgLy8gT3Blbk1QOiBEaXJlY3RpdmVz IGFuZCBjbGF1c2VzLgogICAvLy8gXGJyaWVmIFBhcnNlcyBkZWNsYXJhdGl2 ZSBPcGVuTVAgZGlyZWN0aXZlcy4KLSAgRGVjbEdyb3VwUHRyVHkgUGFyc2VP cGVuTVBEZWNsYXJhdGl2ZURpcmVjdGl2ZSgpOworICBEZWNsR3JvdXBQdHJU eSBQYXJzZU9wZW5NUERlY2xhcmF0aXZlRGlyZWN0aXZlV2l0aEV4dERlY2wo CisgICAgICBBY2Nlc3NTcGVjaWZpZXIgJkFTLCBQYXJzZWRBdHRyaWJ1dGVz V2l0aFJhbmdlICZBdHRycywKKyAgICAgIERlY2xTcGVjOjpUU1QgVGFnVHlw ZSA9IERlY2xTcGVjOjpUU1RfdW5zcGVjaWZpZWQsCisgICAgICBEZWNsICpU YWdEZWNsID0gbnVsbHB0cik7CiAgIC8vLyBcYnJpZWYgUGFyc2VzIHNpbXBs ZSBsaXN0IG9mIHZhcmlhYmxlcy4KICAgLy8vCiAgIC8vLyBccGFyYW0gS2lu ZCBLaW5kIG9mIHRoZSBkaXJlY3RpdmUuCkluZGV4OiBpbmNsdWRlL2NsYW5n L1NlbWEvU2VtYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1 ZGUvY2xhbmcvU2VtYS9TZW1hLmgKKysrIGluY2x1ZGUvY2xhbmcvU2VtYS9T ZW1hLmgKQEAgLTE0NCw2ICsxNDQsNyBAQAogICBjbGFzcyBPYmpDUHJvcGVy dHlEZWNsOwogICBjbGFzcyBPYmpDUHJvdG9jb2xEZWNsOwogICBjbGFzcyBP TVBUaHJlYWRQcml2YXRlRGVjbDsKKyAgY2xhc3MgT01QRGVjbGFyZVNpbWRE ZWNsOwogICBjbGFzcyBPTVBDbGF1c2U7CiAgIGNsYXNzIE92ZXJsb2FkQ2Fu ZGlkYXRlU2V0OwogICBjbGFzcyBPdmVybG9hZEV4cHI7CkBAIC03ODczLDYg Kzc4NzQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTb3VyY2VMb2NhdGlvbiBFbmRMb2MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3Blbk1QRGlyZWN0aXZlS2lu ZCBDYW5jZWxSZWdpb24pOwogCisgIC8vLyBcYnJpZWYgQ2FsbGVkIG9uIHdl bGwtZm9ybWVkICdcI3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1kJyBhZnRlciBw YXJzaW5nIG9mCisgIC8vLyB0aGUgYXNzb2NpYXRlZCBtZXRob2QvZnVuY3Rp b24uCisgIERlY2xHcm91cFB0clR5IEFjdE9uT3Blbk1QRGVjbGFyZVNpbWRE aXJlY3RpdmUoRGVjbEdyb3VwUHRyVHkgREcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlTG9jYXRp b24gU3RhcnRMb2MpOworCiAgIE9NUENsYXVzZSAqQWN0T25PcGVuTVBTaW5n bGVFeHByQ2xhdXNlKE9wZW5NUENsYXVzZUtpbmQgS2luZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwciAqRXhwciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291 cmNlTG9jYXRpb24gU3RhcnRMb2MsCkluZGV4OiBpbmNsdWRlL2NsYW5nL0Jh c2ljL0RpYWdub3N0aWNTZW1hS2luZHMudGQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaW5jbHVkZS9jbGFuZy9CYXNpYy9EaWFnbm9zdGljU2VtYUtp bmRzLnRkCisrKyBpbmNsdWRlL2NsYW5nL0Jhc2ljL0RpYWdub3N0aWNTZW1h S2luZHMudGQKQEAgLTc2NjAsNiArNzY2MCwxMCBAQAogICAidGhlICdjb3B5 cHJpdmF0ZScgY2xhdXNlIG11c3Qgbm90IGJlIHVzZWQgd2l0aCB0aGUgJ25v d2FpdCcgY2xhdXNlIj47CiBkZWYgbm90ZV9vbXBfbm93YWl0X2NsYXVzZV9o ZXJlIDogTm90ZTwKICAgIidub3dhaXQnIGNsYXVzZSBpcyBoZXJlIj47Citk ZWYgZXJyX29tcF9zaW5nbGVfZGVjbF9pbl9kZWNsYXJlX3NpbWQgOiBFcnJv cjwKKyAgInNpbmdsZSBkZWNsYXJhdGlvbiBpcyBleHBlY3RlZCBhZnRlciAn ZGVjbGFyZSBzaW1kJyBkaXJlY3RpdmUiPjsKK2RlZiBlcnJfb21wX2Z1bmN0 aW9uX2V4cGVjdGVkIDogRXJyb3I8CisgICInI3ByYWdtYSBvbXAgZGVjbGFy ZSBzaW1kJyBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGZ1bmN0aW9ucyI+Owog ZGVmIGVycl9vbXBfd3JvbmdfY2FuY2VsX3JlZ2lvbiA6IEVycm9yPAogICAi b25lIG9mICdmb3InLCAncGFyYWxsZWwnLCAnc2VjdGlvbnMnIG9yICd0YXNr Z3JvdXAnIGlzIGV4cGVjdGVkIj47CiBkZWYgZXJyX29tcF9wYXJlbnRfY2Fu Y2VsX3JlZ2lvbl9ub3dhaXQgOiBFcnJvcjwKSW5kZXg6IGluY2x1ZGUvY2xh bmcvQmFzaWMvRGlhZ25vc3RpY1BhcnNlS2luZHMudGQKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gaW5jbHVkZS9jbGFuZy9CYXNpYy9EaWFnbm9zdGlj UGFyc2VLaW5kcy50ZAorKysgaW5jbHVkZS9jbGFuZy9CYXNpYy9EaWFnbm9z dGljUGFyc2VLaW5kcy50ZApAQCAtOTkzLDYgKzk5Myw4IEBACiAgICInI3By YWdtYSBvbXAgJTAnIGNhbm5vdCBiZSBhbiBpbW1lZGlhdGUgc3Vic3RhdGVt ZW50Ij47CiBkZWYgZXJyX29tcF9leHBlY3RlZF9pZGVudGlmaWVyX2Zvcl9j cml0aWNhbCA6IEVycm9yPAogICAiZXhwZWN0ZWQgaWRlbnRpZmllciBzcGVj aWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSAnb21wIGNyaXRpY2FsJyBkaXJlY3Rp dmUiPjsKK2RlZiBlcnJfb21wX2RlY2xfaW5fZGVjbGFyZV9zaW1kIDogRXJy b3I8CisgICJmdW5jdGlvbiBkZWNsYXJhdGlvbiBpcyBleHBlY3RlZCBhZnRl ciAnZGVjbGFyZSBzaW1kJyBkaXJlY3RpdmUiPjsKIAogLy8gUHJhZ21hIGxv b3Agc3VwcG9ydC4KIGRlZiBlcnJfcHJhZ21hX2xvb3BfbWlzc2luZ19hcmd1 bWVudCA6IEVycm9yPApJbmRleDogaW5jbHVkZS9jbGFuZy9CYXNpYy9BdHRy RG9jcy50ZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL2Ns YW5nL0Jhc2ljL0F0dHJEb2NzLnRkCisrKyBpbmNsdWRlL2NsYW5nL0Jhc2lj L0F0dHJEb2NzLnRkCkBAIC0xNjEyLDMgKzE2MTIsMzMgQEAKIGFyZ3VtZW50 cywgd2l0aCBhcmJpdHJhcnkgb2Zmc2V0cy4KICAgfV07CiB9CisKK2RlZiBP TVBEZWNsYXJlU2ltZERvY3MgOiBEb2N1bWVudGF0aW9uIHsKKyAgbGV0IENh dGVnb3J5ID0gRG9jQ2F0U3RtdDsKKyAgbGV0IEhlYWRpbmcgPSAiI3ByYWdt YSBvbXAgZGVjbGFyZSBzaW1kIjsKKyAgbGV0IENvbnRlbnQgPSBbeworVGhl IGRlY2xhcmUgc2ltZCBjb25zdHJ1Y3QgY2FuIGJlIGFwcGxpZWQgdG8gYSBm dW5jdGlvbiB0byBlbmFibGUgdGhlIGNyZWF0aW9uIG9mIG9uZSBvciBtb3Jl IHZlcnNpb25zIHRoYXQgY2FuIHByb2Nlc3MgbXVsdGlwbGUgYXJndW1lbnRz IHVzaW5nIFNJTUQgaW5zdHJ1Y3Rpb25zIGZyb20gYSBzaW5nbGUgaW52b2Nh dGlvbiBmcm9tIGEgU0lNRCBsb29wLiBUaGUgZGVjbGFyZSBzaW1kIGRpcmVj dGl2ZSBpcyBhIGRlY2xhcmF0aXZlIGRpcmVjdGl2ZS4gVGhlcmUgbWF5IGJl IG11bHRpcGxlIGRlY2xhcmUgc2ltZCBkaXJlY3RpdmVzIGZvciBhIGZ1bmN0 aW9uLiBUaGUgdXNlIG9mIGEgZGVjbGFyZSBzaW1kIGNvbnN0cnVjdCBvbiBh IGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGNyZWF0aW9uIG9mIFNJTUQKK3ZlcnNp b25zIG9mIHRoZSBhc3NvY2lhdGVkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVz ZWQgdG8gcHJvY2VzcyBtdWx0aXBsZSBhcmd1bWVudHMgZnJvbSBhIHNpbmds ZSBpbnZvY2F0aW9uIGZyb20gYSBTSU1EIGxvb3AgY29uY3VycmVudGx5Lgor VGhlIHN5bnRheCBvZiB0aGUgZGVjbGFyZSBzaW1kIGNvbnN0cnVjdCBpcyBh cyBmb2xsb3dzOgorCisgIC4uIGNvZGUtYmxvY2s6OiBjCisKKyAgI3ByYWdt YSBvbXAgZGVjbGFyZSBzaW1kIFtjbGF1c2VbWyxdIGNsYXVzZV0gLi4uXSBu ZXctbGluZQorICBbI3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1kIFtjbGF1c2Vb WyxdIGNsYXVzZV0gLi4uXSBuZXctbGluZV0KKyAgWy4uLl0KKyAgZnVuY3Rp b24gZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbgorCit3aGVyZSBjbGF1c2Ug aXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgLi4gY29kZS1ibG9jazo6 IGMKKworICBzaW1kbGVuKGxlbmd0aCkKKyAgbGluZWFyKGFyZ3VtZW50LWxp c3RbOmNvbnN0YW50LWxpbmVhci1zdGVwXSkKKyAgYWxpZ25lZChhcmd1bWVu dC1saXN0WzphbGlnbm1lbnRdKQorICB1bmlmb3JtKGFyZ3VtZW50LWxpc3Qp CisgIGluYnJhbmNoCisgIG5vdGluYnJhbmNoCisKKyAgfV07Cit9CisKSW5k ZXg6IGluY2x1ZGUvY2xhbmcvQmFzaWMvQXR0ci50ZAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBpbmNsdWRlL2NsYW5nL0Jhc2ljL0F0dHIudGQKKysr IGluY2x1ZGUvY2xhbmcvQmFzaWMvQXR0ci50ZApAQCAtMjA4OCwzICsyMDg4 LDE3IEBACiAgIGxldCBTZW1hSGFuZGxlciA9IDA7CiAgIGxldCBEb2N1bWVu dGF0aW9uID0gW1VuZG9jdW1lbnRlZF07CiB9CisKK2RlZiBPTVBEZWNsYXJl U2ltZERlY2wgOiBBdHRyIHsKKyAgbGV0IFNwZWxsaW5ncyA9IFtQcmFnbWE8 Im9tcCIsICJkZWNsYXJlIHNpbWQiPl07CisgIGxldCBTdWJqZWN0cyA9IFN1 YmplY3RMaXN0PFtGdW5jdGlvbl0+OworICBsZXQgU2VtYUhhbmRsZXIgPSAw OworICBsZXQgSGFzQ3VzdG9tUGFyc2luZyA9IDE7CisgIGxldCBEb2N1bWVu dGF0aW9uID0gW09NUERlY2xhcmVTaW1kRG9jc107CisgIGxldCBBZGRpdGlv bmFsTWVtYmVycyA9IFt7CisgIHZvaWQgcHJpbnRQcmV0dHlQcmFnbWEocmF3 X29zdHJlYW0gJk9TLCBjb25zdCBQcmludGluZ1BvbGljeSAmUG9saWN5KSBj b25zdCB7CisgICAgT1MgPDwgIlxuIjsKKyAgfQorICB9XTsKK30KKwpJbmRl eDogaW5jbHVkZS9jbGFuZy9CYXNpYy9PcGVuTVBLaW5kcy5kZWYKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9jbGFuZy9CYXNpYy9PcGVu TVBLaW5kcy5kZWYKKysrIGluY2x1ZGUvY2xhbmcvQmFzaWMvT3Blbk1QS2lu ZHMuZGVmCkBAIC0xMDYsNiArMTA2LDcgQEAKIE9QRU5NUF9ESVJFQ1RJVkVf RVhUKHBhcmFsbGVsX3NlY3Rpb25zLCAicGFyYWxsZWwgc2VjdGlvbnMiKQog T1BFTk1QX0RJUkVDVElWRV9FWFQoZm9yX3NpbWQsICJmb3Igc2ltZCIpCiBP UEVOTVBfRElSRUNUSVZFX0VYVChjYW5jZWxsYXRpb25fcG9pbnQsICJjYW5j ZWxsYXRpb24gcG9pbnQiKQorT1BFTk1QX0RJUkVDVElWRV9FWFQoZGVjbGFy ZV9zaW1kLCAiZGVjbGFyZSBzaW1kIikKIAogLy8gT3Blbk1QIGNsYXVzZXMu CiBPUEVOTVBfQ0xBVVNFKGlmLCBPTVBJZkNsYXVzZSkKSW5kZXg6IHRlc3Qv T3Blbk1QL2RlY2xhcmVfc2ltZF9hc3RfcHJpbnQuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSB0ZXN0L09wZW5NUC9kZWNsYXJlX3NpbWRfYXN0X3By aW50LmMKKysrIHRlc3QvT3Blbk1QL2RlY2xhcmVfc2ltZF9hc3RfcHJpbnQu YwpAQCAtMCwwICsxLDE3IEBACisvLyBSVU46ICVjbGFuZ19jYzEgLXZlcmlm eSAtZm9wZW5tcCAtYXN0LXByaW50ICVzIHwgRmlsZUNoZWNrICVzCisvLyBS VU46ICVjbGFuZ19jYzEgLWZvcGVubXAgLWVtaXQtcGNoIC1vICV0ICVzCisv LyBSVU46ICVjbGFuZ19jYzEgLWZvcGVubXAgLWluY2x1ZGUtcGNoICV0IC1m c3ludGF4LW9ubHkgLXZlcmlmeSAlcyAtYXN0LXByaW50IHwgRmlsZUNoZWNr ICVzCisvLyBleHBlY3RlZC1uby1kaWFnbm9zdGljcworCisjaWZuZGVmIEhF QURFUgorI2RlZmluZSBIRUFERVIKKworI3ByYWdtYSBvbXAgZGVjbGFyZSBz aW1kCisjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKK3ZvaWQgYWRkXzEoZmxv YXQgKmQsIGZsb2F0ICpzMSwgZmxvYXQgKnMyKTsKKworLy8gQ0hFQ0s6ICNw cmFnbWEgb21wIGRlY2xhcmUgc2ltZAorLy8gQ0hFQ0stTkVYVDogI3ByYWdt YSBvbXAgZGVjbGFyZSBzaW1kCisvLyBDSEVDSy1ORVhUOiB2b2lkIGFkZF8x KGZsb2F0ICpkLCBmbG9hdCAqczEsIGZsb2F0ICpzMikKKworI2VuZGlmCklu ZGV4OiB0ZXN0L09wZW5NUC9kZWNsYXJlX3NpbWRfYXN0X3ByaW50LmNwcAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0L09wZW5NUC9kZWNsYXJl X3NpbWRfYXN0X3ByaW50LmNwcAorKysgdGVzdC9PcGVuTVAvZGVjbGFyZV9z aW1kX2FzdF9wcmludC5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8vIFJVTjog JWNsYW5nX2NjMSAtdmVyaWZ5IC1mb3Blbm1wIC14IGMrKyAtc3RkPWMrKzEx IC1hc3QtcHJpbnQgJXMgfCBGaWxlQ2hlY2sgJXMKKy8vIFJVTjogJWNsYW5n X2NjMSAtZm9wZW5tcCAteCBjKysgLXN0ZD1jKysxMSAtZW1pdC1wY2ggLW8g JXQgJXMKKy8vIFJVTjogJWNsYW5nX2NjMSAtZm9wZW5tcCAteCBjKysgLXN0 ZD1jKysxMSAtaW5jbHVkZS1wY2ggJXQgLWZzeW50YXgtb25seSAtdmVyaWZ5 ICVzIC1hc3QtcHJpbnQgfCBGaWxlQ2hlY2sgJXMKKy8vIGV4cGVjdGVkLW5v LWRpYWdub3N0aWNzCisKKyNpZm5kZWYgSEVBREVSCisjZGVmaW5lIEhFQURF UgorCisjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKK3ZvaWQgYWRkXzEoZmxv YXQgKmQpOworCisvLyBDSEVDSzogI3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1k CisvLyBDSEVDSy1ORVhUOiB2b2lkIGFkZF8xKGZsb2F0ICpkKTsKKy8vCisK KyNwcmFnbWEgb21wIGRlY2xhcmUgc2ltZAordGVtcGxhdGUgPGNsYXNzIEM+ IHZvaWQgaChDICpocCwgQyAqaHAyLCBDICpocSwgQyAqbGluKSB7Cit9CisK Ky8vIENIRUNLOiAjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKKy8vIENIRUNL LU5FWFQ6IHRlbXBsYXRlIDxjbGFzcyBDID0gaW50PiB2b2lkIGgoaW50ICpo cCwgaW50ICpocDIsIGludCAqaHEsIGludCAqbGluKSB7CisvLyBDSEVDSy1O RVhUOiBoKChmbG9hdCAqKWhwLCAoZmxvYXQgKilocDIsIChmbG9hdCAqKWhx LCAoZmxvYXQgKilsaW4pOworLy8gQ0hFQ0stTkVYVDogfQorCisvLyBDSEVD SzogI3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1kCisvLyBDSEVDSy1ORVhUOiB0 ZW1wbGF0ZSA8Y2xhc3MgQyA9IGZsb2F0PiB2b2lkIGgoZmxvYXQgKmhwLCBm bG9hdCAqaHAyLCBmbG9hdCAqaHEsIGZsb2F0ICpsaW4pIHsKKy8vIENIRUNL LU5FWFQ6IH0KKworLy8gQ0hFQ0s6ICNwcmFnbWEgb21wIGRlY2xhcmUgc2lt ZAorLy8gQ0hFQ0s6IHRlbXBsYXRlIDxjbGFzcyBDPiB2b2lkIGgoQyAqaHAs IEMgKmhwMiwgQyAqaHEsIEMgKmxpbikgeworLy8gQ0hFQ0stTkVYVDogfQor Ly8KKworLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gd2l0aCA8Qz1pbnQ+ LgorLy8gUHJhZ21hcyBuZWVkIHRvIGJlIHNhbWUsIG90aGVyd2lzZSBzdGFu ZGFyZCBzYXlzIHRoYXQncyB1bmRlZmluZWQgYmVoYXZpb3IuCisjcHJhZ21h IG9tcCBkZWNsYXJlIHNpbWQKK3RlbXBsYXRlIDw+Cit2b2lkIGgoaW50ICpo cCwgaW50ICpocDIsIGludCAqaHEsIGludCAqbGluKQoreworICAvLyBJbXBs aWNpdCBzcGVjaWFsaXphdGlvbiB3aXRoIDxDPWZsb2F0Pi4KKyAgLy8gVGhp cyBpcyBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGRpcmVjdGl2ZSBpcyBzdG9y ZWQgYnkgU2VtYSBhbmQgaXMKKyAgLy8gZ2VuZXJhdGVkIHRvZ2V0aGVyIHdp dGggdGhlIChwZW5kaW5nKSBmdW5jdGlvbiBpbnN0YXRpYXRpb24uCisgIGgo KGZsb2F0KikgaHAsIChmbG9hdCopIGhwMiwgKGZsb2F0KikgaHEsIChmbG9h dCopIGxpbik7Cit9CisKK2NsYXNzIFZWIHsKKyAgLy8gQ0hFQ0s6ICNwcmFn bWEgb21wIGRlY2xhcmUgc2ltZAorICAvLyBDSEVDSy1ORVhUOiBpbnQgYWRk KGludCBhLCBpbnQgYikgICAgIHsKKyAgLy8gQ0hFQ0stTkVYVDogcmV0dXJu IGEgKyBiOworICAvLyBDSEVDSy1ORVhUOiB9CisgICNwcmFnbWEgb21wIGRl Y2xhcmUgc2ltZAorICBpbnQgYWRkKGludCBhLCBpbnQgYikgeyByZXR1cm4g YSArIGI7IH0KKworICAvLyBDSEVDSzogI3ByYWdtYSBvbXAgZGVjbGFyZSBz aW1kCisgIC8vIENIRUNLLU5FWFQ6IGZsb2F0IHRhZGRwZihmbG9hdCAqYSwg ZmxvYXQgKmIpICAgICB7CisgIC8vIENIRUNLLU5FWFQ6IHJldHVybiAqYSAr ICpiOworICAvLyBDSEVDSy1ORVhUOiB9CisgICNwcmFnbWEgb3B0aW9ucyBh bGlnbj1wYWNrZWQKKyAgI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRl ZmF1bHQpCisgICNwcmFnbWEgb21wIGRlY2xhcmUgc2ltZAorICBmbG9hdCB0 YWRkcGYoZmxvYXQgKmEsIGZsb2F0ICpiKSB7IHJldHVybiAqYSArICpiOyB9 CisgICNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisKKy8vIENIRUNLOiAj cHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKKy8vIENIRUNLLU5FWFQ6ICNwcmFn bWEgb21wIGRlY2xhcmUgc2ltZAorLy8gQ0hFQ0stTkVYVDogaW50IHRhZGQo aW50IGIpIHsKKy8vIENIRUNLLU5FWFQ6IHJldHVybiB0aGlzLT54W2JdICsg YjsKKy8vIENIRUNLLU5FWFQ6IH0KKyAgI3ByYWdtYSBvbXAgZGVjbGFyZSBz aW1kCisgICNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQor ICAjcHJhZ21hIG9wdGlvbnMgYWxpZ249cGFja2VkCisgICNwcmFnbWEgb21w IGRlY2xhcmUgc2ltZAorICAjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAor ICBpbnQgdGFkZChpbnQgYikgeyByZXR1cm4geFtiXSArIGI7IH0KKworcHJp dmF0ZToKKyAgaW50IHhbMTBdOworfTsKKworLy8gQ0hFQ0s6IHRlbXBsYXRl IDxpbnQgWCA9IDE2PiBjbGFzcyBUVlYgeworLy8gQ0hFQ0s6ICNwcmFnbWEg b21wIGRlY2xhcmUgc2ltZAorLy8gQ0hFQ0stTkVYVDogaW50IHRhZGQoaW50 IGEsIGludCBiKTsKKy8vIENIRUNLOiAjcHJhZ21hIG9tcCBkZWNsYXJlIHNp bWQKKy8vIENIRUNLLU5FWFQ6IGZsb2F0IHRhZGRwZihmbG9hdCAqYSwgZmxv YXQgKmIpIHsKKy8vIENIRUNLLU5FWFQ6IHJldHVybiAqYSArICpiOworLy8g Q0hFQ0stTkVYVDogfQorLy8gQ0hFQ0s6ICNwcmFnbWEgb21wIGRlY2xhcmUg c2ltZAorLy8gQ0hFQ0stTkVYVDogI3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1k CisvLyBDSEVDSy1ORVhUOiBpbnQgdGFkZChpbnQgYikgeworLy8gQ0hFQ0st TkVYVDogcmV0dXJuIHRoaXMtPnhbYl0gKyBiOworLy8gQ0hFQ0stTkVYVDog fQorLy8gQ0hFQ0s6IH0KK3RlbXBsYXRlIDxpbnQgWD4KK2NsYXNzIFRWViB7 CitwdWJsaWM6CisvLyBDSEVDSzogdGVtcGxhdGUgPGludCBYPiBjbGFzcyBU VlYgeworICAjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKKyAgaW50IHRhZGQo aW50IGEsIGludCBiKSB7IHJldHVybiBhICsgYjsgfQorCisvLyBDSEVDSzog I3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1kCisvLyBDSEVDSy1ORVhUOiBpbnQg dGFkZChpbnQgYSwgaW50IGIpIHsKKy8vIENIRUNLLU5FWFQ6IHJldHVybiBh ICsgYjsKKy8vIENIRUNLLU5FWFQ6IH0KKworCisgICNwcmFnbWEgb3B0aW9u cyBhbGlnbj1wYWNrZWQKKyAgI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNo KGRlZmF1bHQpCisgICNwcmFnbWEgb21wIGRlY2xhcmUgc2ltZAorICBmbG9h dCB0YWRkcGYoZmxvYXQgKmEsIGZsb2F0ICpiKSB7IHJldHVybiAqYSArICpi OyB9CisgICNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisKKy8vIENIRUNL OiAjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKKy8vIENIRUNLLU5FWFQ6IGZs b2F0IHRhZGRwZihmbG9hdCAqYSwgZmxvYXQgKmIpIHsKKy8vIENIRUNLLU5F WFQ6IHJldHVybiAqYSArICpiOworLy8gQ0hFQ0stTkVYVDogfQorCisgICNw cmFnbWEgb21wIGRlY2xhcmUgc2ltZAorICAjcHJhZ21hIEdDQyB2aXNpYmls aXR5IHB1c2goZGVmYXVsdCkKKyAgI3ByYWdtYSBvcHRpb25zIGFsaWduPXBh Y2tlZAorICAjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKKyAgI3ByYWdtYSBH Q0MgdmlzaWJpbGl0eSBwb3AKKyAgaW50IHRhZGQoaW50IGIpIHsgcmV0dXJu IHhbYl0gKyBiOyB9CisKKy8vIENIRUNLOiAjcHJhZ21hIG9tcCBkZWNsYXJl IHNpbWQKKy8vIENIRUNLLU5FWFQ6ICNwcmFnbWEgb21wIGRlY2xhcmUgc2lt ZAorLy8gQ0hFQ0stTkVYVDogaW50IHRhZGQoaW50IGIpIHsKKy8vIENIRUNL LU5FWFQ6IHJldHVybiB0aGlzLT54W2JdICsgYjsKKy8vIENIRUNLLU5FWFQ6 IH0KKworcHJpdmF0ZToKKyAgaW50IHhbWF07Cit9OworLy8gQ0hFQ0s6IH07 CisKKy8vIENIRUNLOiBUVlY8MTY+IHQxNjsKK1RWVjwxNj4gdDE2OworCit2 b2lkIGYoKSB7CisgIGZsb2F0IGEgPSAxLjBmLCBiID0gMi4wZjsKKyAgZmxv YXQgciA9IHQxNi50YWRkcGYoJmEsICZiKTsKKyAgaW50IHJlcyA9IHQxNi50 YWRkKGIpOworfQorCisjZW5kaWYKSW5kZXg6IHRlc3QvT3Blbk1QL2RlY2xh cmVfc2ltZF9tZXNzYWdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gdGVzdC9PcGVuTVAvZGVjbGFyZV9zaW1kX21lc3NhZ2VzLmNwcAorKysg dGVzdC9PcGVuTVAvZGVjbGFyZV9zaW1kX21lc3NhZ2VzLmNwcApAQCAtMCww ICsxLDU4IEBACisvLyBSVU46ICVjbGFuZ19jYzEgLXRyaXBsZSB4ODZfNjQt YXBwbGUtbWFjb3MxMC43LjAgLXZlcmlmeSAtZm9wZW5tcCAteCBjKysgLXN0 ZD1jKysxMSAlcworCisvLyBleHBlY3RlZC1lcnJvckArMSB7e2V4cGVjdGVk IGFuIE9wZW5NUCBkaXJlY3RpdmV9fQorI3ByYWdtYSBvbXAgZGVjbGFyZQor CisvLyBleHBlY3RlZC1lcnJvckArMiB7eycjcHJhZ21hIG9tcCBkZWNsYXJl IHNpbWQnIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gZnVuY3Rpb25zfX0KKyNw cmFnbWEgb21wIGRlY2xhcmUgc2ltZAoraW50IGE7CisvLyBleHBlY3RlZC1l cnJvckArMiB7eycjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQnIGNhbiBvbmx5 IGJlIGFwcGxpZWQgdG8gZnVuY3Rpb25zfX0KKyNwcmFnbWEgb21wIGRlY2xh cmUgc2ltZAorI3ByYWdtYSBvbXAgdGhyZWFkcHJpdmF0ZShhKQoraW50IHZh cjsKKyNwcmFnbWEgb21wIHRocmVhZHByaXZhdGUodmFyKQorCisvLyBleHBl Y3RlZC1lcnJvckArMiB7e2V4cGVjdGVkIGFuIE9wZW5NUCBkaXJlY3RpdmV9 fQorI3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1kCisjcHJhZ21hIG9tcCBkZWNs YXJlCisKKyNwcmFnbWEgb21wIGRlY2xhcmUgc2ltZAorI3ByYWdtYSBvbXAg ZGVjbGFyZSBzaW1kCitpbnQgbWFpbigpOworCisvLyBleHBlY3RlZC1lcnJv ckArMSB7e3NpbmdsZSBkZWNsYXJhdGlvbiBpcyBleHBlY3RlZCBhZnRlciAn ZGVjbGFyZSBzaW1kJyBkaXJlY3RpdmV9fQorI3ByYWdtYSBvbXAgZGVjbGFy ZSBzaW1kCitpbnQgYiwgYzsKKworI3ByYWdtYSBvbXAgZGVjbGFyZSBzaW1k Cit0ZW1wbGF0ZSA8Y2xhc3MgQz4KK3ZvaWQgaChDICpocCwgQyAqaHAyLCBD ICpocSwgQyAqbGluKSB7CisgIGIgPSAwOworfQorCisjcHJhZ21hIG9tcCBk ZWNsYXJlIHNpbWQKK3RlbXBsYXRlIDw+Cit2b2lkIGgoaW50ICpocCwgaW50 ICpocDIsIGludCAqaHEsIGludCAqbGluKSB7CisgIGgoKGZsb2F0ICopaHAs IChmbG9hdCAqKWhwMiwgKGZsb2F0ICopaHEsIChmbG9hdCAqKWxpbik7Cit9 CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IFN0IHsKKyNwcmFnbWEg b21wIGRlY2xhcmUgc2ltZAorICB2b2lkIGgoVCAqaHApIHsKKy8vIGV4cGVj dGVkLWVycm9yQCsxIHt7dW5leHBlY3RlZCBPcGVuTVAgZGlyZWN0aXZlICcj cHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQnfX0KKyNwcmFnbWEgb21wIGRlY2xh cmUgc2ltZAorICAgICpocCA9ICp0OworICB9CisKK3ByaXZhdGU6CisgIFQg dDsKK307CituYW1lc3BhY2UgTiB7CisgIC8vIGV4cGVjdGVkLWVycm9yQCsx IHt7ZnVuY3Rpb24gZGVjbGFyYXRpb24gaXMgZXhwZWN0ZWQgYWZ0ZXIgJ2Rl Y2xhcmUgc2ltZCcgZGlyZWN0aXZlfX0KKyAgI3ByYWdtYSBvbXAgZGVjbGFy ZSBzaW1kCit9CisvLyBleHBlY3RlZC1lcnJvckArMSB7e2Z1bmN0aW9uIGRl Y2xhcmF0aW9uIGlzIGV4cGVjdGVkIGFmdGVyICdkZWNsYXJlIHNpbWQnIGRp cmVjdGl2ZX19CisjcHJhZ21hIG9tcCBkZWNsYXJlIHNpbWQKKy8vIGV4cGVj dGVkLWVycm9yQCsxIHt7ZnVuY3Rpb24gZGVjbGFyYXRpb24gaXMgZXhwZWN0 ZWQgYWZ0ZXIgJ2RlY2xhcmUgc2ltZCcgZGlyZWN0aXZlfX0KKyNwcmFnbWEg b21wIGRlY2xhcmUgc2ltZAo= --b1_5a6132f128842715e7b76415b96aa4fc Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KY2ZlLWNvbW1p dHMgbWFpbGluZyBsaXN0CmNmZS1jb21taXRzQGxpc3RzLmxsdm0ub3JnCmh0dHA6Ly9saXN0cy5s bHZtLm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vY2ZlLWNvbW1pdHMK --b1_5a6132f128842715e7b76415b96aa4fc--