From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f45.google.com ([209.85.221.45]) by ewsd; Sun Mar 8 19:44:28 EDT 2020 Received: by mail-wr1-f45.google.com with SMTP id n7so8829125wrt.11 for <9front@9front.org>; Sun, 08 Mar 2020 16:44:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=WJb+DPwwT7bzk/5teW1K6IMpG03V6whYK/wcHcTcOA0=; b=a2kGrW8rjFkhMPL3peq4Q8yluvyTvlMJH51oD0O0Bgw9MU7Uydl3Dpf3m6PT5wSTfp XIvcmyRn682geSAOQTYLOW9t9RxnVxEsoQWH34a5WPhKeC2q3OTTWmAeSbPvDrn4kZE3 JSREGBGMnInLPuAMmEA9U0M2uuJ/vgq1BsOTw1kAP+sfGpyX8BMXL600nTUGtaKSpmGi zJCg72up+BB2Se1gB+NLvITNV97527T7Nk51SngmKtxPM1lgsK4+8GijskWdj5VN/+rX Z3Pre3WgnIHP5z/iRJ1H7jMm0OoaFLVzbVmt0U3NLY1zajyzxY3Y3xN8rpqZUwYsgBEU Q61w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=WJb+DPwwT7bzk/5teW1K6IMpG03V6whYK/wcHcTcOA0=; b=ZXK78BA0eWzMWhPCpAZTLVv/bkQrO/vfGqtUZ4exeY0gASRDFeVGy7KE4LtyGvMrnh OOF8dwXZBdLwdriP5q/GRIJtZyJsZg4Kt27vBjDpo3vkY6ZLKAY4J8k2wXge5pRF3Yh7 qVKgwyp2v1PCoyoRnTVhNFW/L9iIDNJyRWW4RMjrvgBbpli+Lvp0eu24oVcyPasMPBSz VZKnAFbI9vgdy9pifs54C+E5s7Mchl/9K+XuccABy5oS6F1hzxbjbS1h6clKhVKzkRV+ NN5EmV1C9v1BDFjSFDbxRj06HhFmRZIuq5BSmzGxC5VcNT1d1kLg5zvZob7mo67uKUVg GBsA== X-Gm-Message-State: ANhLgQ0aLXqknzGtxBCFx1t2EPq7qXTlw3blrHaclORq9zxwhj1jv6H8 0Ni+fJNh4RHNq7BXgBqcdST4N2gIV8pGosAjnLtw7LtB X-Google-Smtp-Source: ADFU+vvvGHkFE+hHt+qDms9TJ1YaDjVspfetBYM/9x16CusqCIsYrSplZWjAsB4tRp2KwCA5PSM6IOfJv2b+hjG7NNo= X-Received: by 2002:a5d:4acc:: with SMTP id y12mr16060912wrs.385.1583711065078; Sun, 08 Mar 2020 16:44:25 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Lucas Francesco Date: Sun, 8 Mar 2020 20:44:14 -0300 Message-ID: Subject: Re: [9front] move zlib source from ghostscript to ape/lib/z and update to latest zlib To: 9front@9front.org Content-Type: multipart/mixed; boundary="00000000000076799705a060778c" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: rich-client configuration template-scale table --00000000000076799705a060778c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hey Cinap, I didn't mean harm with the patches, it was my bad to include contrib(I had a local zlib copy lingering for weeks with those contrib dirs, didn't notice I still had Pascal), I think with this one it can be made clear what changed and what didn't. This patchset doesn't move out stuff from gs for now. Most of the diff is on the INDEX and the Changelog files alongside the new ones. (gzio became 4 different files, there's a new tests dir for the tests, some bugfixes and a new test.) Take note: I've changed the mkfile cflags on this one, they seem to be fine, but its up to you guys to consider it uneeded or not, I guess this is not final. as for using APE or not, I'd love to see some separation/at least get rid of gs for page eventually, but thats a distant future. Em qui., 5 de mar. de 2020 =C3=A0s 16:18, escrev= eu: > > what i'd like to see is an actual diff of what changed in zlib. i cannot > belief there are too many changes. zlib is very old library. i'm very > curious why we need a specific version of zlib and what features did > they add. > > once we have a overview what we'r getting into, then we can move it out > of ghostscript. > > -- > cinap --00000000000076799705a060778c Content-Type: application/octet-stream; name="zlibpatch.patch" Content-Disposition: attachment; filename="zlibpatch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k7joexgy0 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHVyYW1la3VzCiMgRGF0ZSAxNTgzNzExODg4IDE0 NDAwCiMgTm9kZSBJRCBlMmQxOTM5YjFjY2M5Njc4M2M0OWExZGExMWI5ZTZhNjg2NjU3MGI5CiMg UGFyZW50ICA5YTMxNzcyMzE3OTBlMTNiZjAxZTA3MDA2Y2FhZjFjZWEzMTdiMTg5CnVwZGF0ZSB6 bGliCgpkaWZmIC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9hcGUvbGli L3ovbWtmaWxlCi0tLSBhL3N5cy9zcmMvYXBlL2xpYi96L21rZmlsZQlTdW4gTWFyIDA4IDIyOjAw OjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9hcGUvbGliL3ovbWtmaWxlCVN1biBNYXIgMDgg MTk6NTg6MDggMjAyMCAtMDQwMApAQCAtOCw3ICs4LDEwIEBACiAJY29tcHJlc3MuJE9cCiAJY3Jj MzIuJE9cCiAJZGVmbGF0ZS4kT1wKLQlnemlvLiRPXAorCWd6Y2xvc2UuJE9cCisJZ3psaWIuJE9c CisJZ3pyZWFkLiRPXAorCWd6d3JpdGUuJE9cCiAJaW5mYmFjay4kT1wKIAlpbmZmYXN0LiRPXAog CWluZmxhdGUuJE9cCkBAIC0xOCw4ICsyMSw5IEBACiAJenV0aWwuJE9cCiAKIFRBUkc9XAotCWV4 YW1wbGVcCi0JbWluaWd6aXBcCisJdGVzdC9leGFtcGxlXAorCXRlc3QvbWluaWd6aXBcCisJdGVz dC9pbmZjb3ZlclwKIAogVE9PTFM9JHtUQVJHOiU9JE8uJX0KIApAQCAtMzYsNyArNDAsNyBAQAog CiA8L3N5cy9zcmMvY21kL21rc3lzbGliCiAKLUNGTEFHUz0tYyAtRF9QT1NJWF9TT1VSQ0UgLURf Qzk5X1NOUFJJTlRGX0VYVEVOU0lPTgorQ0ZMQUdTPS1jIC1EX1BPU0lYX1NPVVJDRSAtREhBVkVf VU5JU1REX0ggLURIQVZFX1NUREFSR19IIC1ESEFWRV9NRU1DUFkgLURIQVZFX1ZTTlBSSU5URgog CiAlLiRPOiAvc3lzL3NyYy9jbWQvZ3MvemxpYi8lLmMKIAkkQ0MgJENGTEFHUyAvc3lzL3NyYy9j bWQvZ3MvemxpYi8kc3RlbS5jCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBz eXMvc3JjL2NtZC9ncy96bGliL0NoYW5nZUxvZwotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL0No YW5nZUxvZwlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQv Z3MvemxpYi9DaGFuZ2VMb2cJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0xLDYg KzEsNzU3IEBACiAKICAgICAgICAgICAgICAgICBDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitD aGFuZ2VzIGluIDEuMi4xMSAoMTUgSmFuIDIwMTcpCistIEZpeCBkZWZsYXRlIHN0b3JlZCBidWcg d2hlbiBwdWxsaW5nIGxhc3QgYmxvY2sgZnJvbSB3aW5kb3cKKy0gUGVybWl0IGltbWVkaWF0ZSBk ZWZsYXRlUGFyYW1zIGNoYW5nZXMgYmVmb3JlIGFueSBkZWZsYXRlIGlucHV0CisKK0NoYW5nZXMg aW4gMS4yLjEwICgyIEphbiAyMDE3KQorLSBBdm9pZCB3YXJuaW5ncyBvbiBzbnByaW50ZigpIHJl dHVybiB2YWx1ZQorLSBGaXggYnVnIGluIGRlZmxhdGVfc3RvcmVkKCkgZm9yIHplcm8tbGVuZ3Ro IGlucHV0CistIEZpeCBidWcgaW4gZ3p3cml0ZS5jIHRoYXQgcHJvZHVjZWQgY29ycnVwdCBnemlw IGZpbGVzCistIFJlbW92ZSBmaWxlcyB0byBiZSBpbnN0YWxsZWQgYmVmb3JlIGNvcHlpbmcgdGhl bSBpbiBNYWtlZmlsZS5pbgorLSBBZGQgd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgd2l0aCBhc3Nl bWJsZXIgY29kZQorCitDaGFuZ2VzIGluIDEuMi45ICgzMSBEZWMgMjAxNikKKy0gRml4IGNvbnRy aWIvbWluaXppcCB0byBwZXJtaXQgdW56aXBwaW5nIHdpdGggZGVza3RvcCBBUEkgW1pvdXpvdV0K Ky0gSW1wcm92ZSBjb250cmliL2JsYXN0IHRvIHJldHVybiB1bnVzZWQgYnl0ZXMKKy0gQXNzdXJl IHRoYXQgZ3pvZmZzZXQoKSBpcyBjb3JyZWN0IHdoZW4gYXBwZW5kaW5nCistIEltcHJvdmUgY29t cHJlc3MoKSBhbmQgdW5jb21wcmVzcygpIHRvIHN1cHBvcnQgbGFyZ2UgbGVuZ3RocworLSBGaXgg YnVnIGluIHRlc3QvZXhhbXBsZS5jIHdoZXJlIGVycm9yIGNvZGUgbm90IHNhdmVkCistIFJlbWVk eSBDb3Zlcml0eSB3YXJuaW5nIFtSYW5kZXJzLVBlaHJzb25dCistIEltcHJvdmUgc3BlZWQgb2Yg Z3pwcmludGYoKSBpbiB0cmFuc3BhcmVudCBtb2RlCistIEZpeCBpbmZsYXRlSW5pdDIoKSBidWcg d2hlbiB3aW5kb3dCaXRzIGlzIDE2IG9yIDMyCistIENoYW5nZSBERUJVRyBtYWNybyB0byBaTElC X0RFQlVHCistIEF2b2lkIHVuaW5pdGlhbGl6ZWQgYWNjZXNzIGJ5IGd6Y2xvc2VfdygpCistIEFs bG93IGJ1aWxkaW5nIHpsaWIgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcmVjdG9yeQorLSBGaXgg YnVnIHRoYXQgYWNjZXB0ZWQgaW52YWxpZCB6bGliIGhlYWRlciB3aGVuIHdpbmRvd0JpdHMgaXMg emVybworLSBGaXggZ3pzZWVrKCkgcHJvYmxlbSBvbiBNaW5HVyBkdWUgdG8gYnVnZ3kgX2xzZWVr aTY0IHRoZXJlCistIExvb3Agb24gd3JpdGUoKSBjYWxscyBpbiBnendyaXRlLmMgaW4gY2FzZSBv ZiBub24tYmxvY2tpbmcgSS9PCistIEFkZCAtLXdhcm4gKC13KSBvcHRpb24gdG8gLi9jb25maWd1 cmUgZm9yIG1vcmUgY29tcGlsZXIgd2FybmluZ3MKKy0gUmVqZWN0IGEgd2luZG93IHNpemUgb2Yg MjU2IGJ5dGVzIGlmIG5vdCB1c2luZyB0aGUgemxpYiB3cmFwcGVyCistIEZpeCBidWcgd2hlbiBs ZXZlbCAwIHVzZWQgd2l0aCBaX0hVRkZNQU4gb3IgWl9STEUKKy0gQWRkIC0tZGVidWcgKC1kKSBv cHRpb24gdG8gLi9jb25maWd1cmUgdG8gZGVmaW5lIFpMSUJfREVCVUcKKy0gRml4IGJ1Z3MgaW4g Y3JlYXRpbmcgYSB2ZXJ5IGxhcmdlIGd6aXAgaGVhZGVyCistIEFkZCB1bmNvbXByZXNzMigpIGZ1 bmN0aW9uLCB3aGljaCByZXR1cm5zIHRoZSBpbnB1dCBzaXplIHVzZWQKKy0gQXNzdXJlIHRoYXQg ZGVmbGF0ZVBhcmFtcygpIHdpbGwgbm90IHN3aXRjaCBmdW5jdGlvbnMgbWlkLWJsb2NrCistIERy YW1hdGljYWxseSBzcGVlZCB1cCBkZWZsYXRpb24gZm9yIGxldmVsIDAgKHN0b3JpbmcpCistIEFk ZCBnemZyZWFkKCksIGR1cGxpY2F0aW5nIHRoZSBpbnRlcmZhY2Ugb2YgZnJlYWQoKQorLSBBZGQg Z3pmd3JpdGUoKSwgZHVwbGljYXRpbmcgdGhlIGludGVyZmFjZSBvZiBmd3JpdGUoKQorLSBBZGQg ZGVmbGF0ZUdldERpY3Rpb25hcnkoKSBmdW5jdGlvbgorLSBVc2Ugc25wcmludGYoKSBmb3IgbGF0 ZXIgdmVyc2lvbnMgb2YgTWljcm9zb2Z0IEMKKy0gRml4ICpJbml0IG1hY3JvcyB0byB1c2Ugel8g cHJlZml4IHdoZW4gcmVxdWVzdGVkCistIFJlcGxhY2UgYXM0MDAgd2l0aCBvczQwMCBmb3IgT1Mv NDAwIHN1cHBvcnQgW01vbm5lcmF0XQorLSBBZGQgY3JjMzJfeigpIGFuZCBhZGxlcjMyX3ooKSBm dW5jdGlvbnMgd2l0aCBzaXplX3QgbGVuZ3RocworLSBVcGRhdGUgVmlzdWFsIFN0dWRpbyBwcm9q ZWN0IGZpbGVzIFtBcmFIYWFuXQorCitDaGFuZ2VzIGluIDEuMi44ICgyOCBBcHIgMjAxMykKKy0g VXBkYXRlIGNvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMgZm9yIFdpbmRvd3MgUlQgW1ZvbGxhbnRd CistIERvIG5vdCBmb3JjZSBaX0NPTlNUIGZvciBDKysKKy0gQ2xlYW4gdXAgY29udHJpYi92c3R1 ZGlvIFtSb8OfXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaAorLSBGaXggbWl4 ZWQgbGluZSBlbmRpbmdzIGluIGNvbnRyaWIvdnN0dWRpbworCitDaGFuZ2VzIGluIDEuMi43LjMg KDEzIEFwciAyMDEzKQorLSBGaXggdmVyc2lvbiBudW1iZXJzIGFuZCBETEwgbmFtZXMgaW4gY29u dHJpYi92c3R1ZGlvLyovemxpYi5yYworCitDaGFuZ2VzIGluIDEuMi43LjIgKDEzIEFwciAyMDEz KQorLSBDaGFuZ2UgY2hlY2sgZm9yIGEgZm91ci1ieXRlIHR5cGUgYmFjayB0byBoZXhhZGVjaW1h bAorLSBGaXggdHlwbyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gQWRkIGNhc3RzIGluIGd6d3Jp dGUuYyBmb3IgcG9pbnRlciBkaWZmZXJlbmNlcworCitDaGFuZ2VzIGluIDEuMi43LjEgKDI0IE1h ciAyMDEzKQorLSBSZXBsYWNlIHVzZSBvZiB1bnNhZmUgc3RyaW5nIGZ1bmN0aW9ucyB3aXRoIHNu cHJpbnRmIGlmIGF2YWlsYWJsZQorLSBBdm9pZCBpbmNsdWRpbmcgc3RkZGVmLmggb24gV2luZG93 cyBmb3IgWl9TT0xPIGNvbXBpbGUgW05pZXNzaW5rXQorLSBGaXggZ3pnZXRjIHVuZGVmaW5lIHdo ZW4gWl9QUkVGSVggc2V0IFtUdXJrXQorLSBFbGltaW5hdGUgdXNlIG9mIG1rdGVtcCBpbiBNYWtl ZmlsZSAobm90IGFsd2F5cyBhdmFpbGFibGUpCistIEZpeCBidWcgaW4gJ0YnIG1vZGUgZm9yIGd6 b3BlbigpCistIEFkZCBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGZ1bmN0aW9uCistIENvcnJlY3Qg Y29tbWVudCBpbiBkZWZsYXRlLmgKKy0gVXNlIF9zbnByaW50ZiBmb3Igc25wcmludGYgaW4gTWlj cm9zb2Z0IEMKKy0gT24gRGFyd2luLCBvbmx5IHVzZSAvdXNyL2Jpbi9saWJ0b29sIGlmIGxpYnRv b2wgaXMgbm90IEFwcGxlCistIERlbGV0ZSAiLS12ZXJzaW9uIiBmaWxlIGlmIGNyZWF0ZWQgYnkg ImFyIC0tdmVyc2lvbiIgW1JpY2hhcmQgRy5dCistIEZpeCBjb25maWd1cmUgY2hlY2sgZm9yIHZl cmFjaXR5IG9mIGNvbXBpbGVyIGVycm9yIHJldHVybiBjb2RlcworLSBGaXggQ01ha2UgY29tcGls YXRpb24gb2Ygc3RhdGljIGxpYiBmb3IgTVNWQzIwMTAgeDY0CistIFJlbW92ZSB1bnVzZWQgdmFy aWFibGUgaW4gaW5mYmFjazkuYworLSBGaXggYXJndW1lbnQgY2hlY2tzIGluIGd6bG9nX2NvbXBy ZXNzKCkgYW5kIGd6bG9nX3dyaXRlKCkKKy0gQ2xlYW4gdXAgdGhlIHVzYWdlIG9mIHpfY29uc3Qg YW5kIHJlc3BlY3QgY29uc3QgdXNhZ2Ugd2l0aGluIHpsaWIKKy0gQ2xlYW4gdXAgZXhhbXBsZXMv Z3psb2cuW2NoXSBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnQgdHlwZXMKKy0gQXZvaWQgc2hpZnQg ZXF1YWwgdG8gYml0cyBpbiB0eXBlIChjYXVzZWQgZW5kbGVzcyBsb29wKQorLSBGaXggdW5pbml0 aWFsaXplZCB2YWx1ZSBidWcgaW4gZ3pwdXRjKCkgaW50cm9kdWNlZCBieSBjb25zdCBwYXRjaGVz CistIEZpeCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciBpbiBleGFtcGxlcy96cmFuLmMgW05vcl0K Ky0gRml4IGJ1ZyB3aGVyZSBnem9wZW4oKSwgZ3pjbG9zZSgpIHdvdWxkIHdyaXRlIGFuIGVtcHR5 IGZpbGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlKCkgd2hlbiBnendyaXRlKCkgcnVucyBvdXQgb2Yg bWVtb3J5CistIENoZWNrIGZvciBpbnB1dCBidWZmZXIgbWFsbG9jIGZhaWx1cmUgaW4gZXhhbXBs ZXMvZ3phcHBlbmQuYworLSBBZGQgbm90ZSB0byBjb250cmliL2JsYXN0IHRvIHVzZSBiaW5hcnkg bW9kZSBpbiBzdGRpbworLSBGaXggY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50bHkgc2lnbmVkIGlu dGVnZXJzIGluIGNvbnRyaWIvYmxhc3QKKy0gQ2hlY2sgZm9yIGludmFsaWQgY29kZSBsZW5ndGgg Y29kZXMgaW4gY29udHJpYi9wdWZmCistIEZpeCBzZXJpb3VzIGJ1dCB2ZXJ5IHJhcmUgZGVjb21w cmVzc2lvbiBidWcgaW4gaW5mdHJlZXMuYworLSBVcGRhdGUgaW5mbGF0ZUJhY2soKSBjb21tZW50 cywgc2luY2UgaW5mbGF0ZSgpIGNhbiBiZSBmYXN0ZXIKKy0gVXNlIHVuZGVyc2NvcmVkIEkvTyBm dW5jdGlvbiBuYW1lcyBmb3IgV0lOQVBJX0ZBTUlMWQorLSBBZGQgX3RyX2ZsdXNoX2JpdHMgdG8g dGhlIGV4dGVybmFsIHN5bWJvbHMgcHJlZml4ZWQgYnkgLS16cHJlZml4CistIEFkZCBjb250cmli L3ZzdHVkaW8vdmMxMCBwcmUtYnVpbGQgc3RlcCBmb3Igc3RhdGljIG9ubHkKKy0gUXVvdGUgLS12 ZXJzaW9uLXNjcmlwdCBhcmd1bWVudCBpbiBDTWFrZUxpc3RzLnR4dAorLSBEb24ndCBzcGVjaWZ5 IC0tdmVyc2lvbi1zY3JpcHQgb24gQXBwbGUgcGxhdGZvcm1zIGluIENNYWtlTGlzdHMudHh0Cist IEZpeCBjYXN0aW5nIGVycm9yIGluIGNvbnRyaWIvdGVzdHpsaWIvdGVzdHpsaWIuYworLSBGaXgg dHlwZXMgaW4gY29udHJpYi9taW5pemlwIHRvIG1hdGNoIHJlc3VsdCBvZiBnZXRfY3JjX3RhYmxl KCkKKy0gU2ltcGxpZnkgY29udHJpYi92c3R1ZGlvL3ZjMTAgd2l0aCAnZCcgc3VmZml4CistIEFk ZCBUT1Agc3VwcG9ydCB0byB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gU3Vwb3J0IGk2ODYgYW5kIGFt ZDY0IGFzc2VtYmxlciBidWlsZHMgaW4gQ01ha2VMaXN0cy50eHQKKy0gRml4IHR5cG9zIGluIHRo ZSB1c2Ugb2YgX0xBUkdFRklMRTY0X1NPVVJDRSBpbiB6Y29uZi5oCistIEFkZCB2YzExIGFuZCB2 YzEyIGJ1aWxkIGZpbGVzIHRvIGNvbnRyaWIvdnN0dWRpbworLSBBZGQgZ3p2cHJpbnRmKCkgYXMg YW4gdW5kb2N1bWVudGVkIGZ1bmN0aW9uIGluIHpsaWIKKy0gRml4IGNvbmZpZ3VyZSBmb3IgU3Vu IHNoZWxsCistIFJlbW92ZSBydW50aW1lIGNoZWNrIGluIGNvbmZpZ3VyZSBmb3IgZm91ci1ieXRl IGludGVnZXIgdHlwZQorLSBBZGQgY2FzdHMgYW5kIGNvbnN0cyB0byBlYXNlIHVzZXIgY29udmVy c2lvbiB0byBDKysKKy0gQWRkIG1hbiBwYWdlcyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCist IEluIE1ha2VmaWxlIHVuaW5zdGFsbCwgZG9uJ3Qgcm0gaWYgcHJlY2VkaW5nIGNkIGZhaWxzCist IERvIG5vdCByZXR1cm4gWl9CVUZfRVJST1IgaWYgZGVmbGF0ZVBhcmFtKCkgaGFzIG5vdGhpbmcg dG8gd3JpdGUKKworQ2hhbmdlcyBpbiAxLjIuNyAoMiBNYXkgMjAxMikKKy0gUmVwbGFjZSB1c2Ug b2YgbWVtbW92ZSgpIHdpdGggYSBzaW1wbGUgY29weSBmb3IgcG9ydGFiaWxpdHkKKy0gVGVzdCBm b3IgZXhpc3RlbmNlIG9mIHN0cmVycm9yCistIFJlc3RvcmUgZ3pnZXRjXyBmb3IgYmFja3dhcmQg Y29tcGF0aWJpbGl0eSB3aXRoIDEuMi42CistIEZpeCBidWlsZCB3aXRoIG5vbi1HTlUgbWFrZSBv biBTb2xhcmlzCistIFJlcXVpcmUgZ2NjIDQuMCBvciBsYXRlciBvbiBNYWMgT1MgWCB0byB1c2Ug dGhlIGhpZGRlbiBhdHRyaWJ1dGUKKy0gSW5jbHVkZSB1bmlzdGQuaCBmb3IgV2F0Y29tIEMKKy0g VXNlIF9fV0FUQ09NQ19fIGluc3RlYWQgb2YgX19XQVRDT01fXworLSBEbyBub3QgdXNlIHRoZSB2 aXNpYmlsaXR5IGF0dHJpYnV0ZSBpZiBOT19WSVogZGVmaW5lZAorLSBJbXByb3ZlIHRoZSBkZXRl Y3Rpb24gb2Ygbm8gaGlkZGVuIHZpc2liaWxpdHkgYXR0cmlidXRlCistIEF2b2lkIHVzaW5nIF9f aW50NjQgZm9yIGdjYyBvciBzb2xvIGNvbXBpbGF0aW9uCistIENhc3QgdG8gY2hhciAqIGluIGd6 cHJpbnRmIHRvIGF2b2lkIHdhcm5pbmdzIFtaaW5zZXJdCistIEZpeCBtYWtlX3Ztcy5jb20gZm9y IFZBWCBbWmluc2VyXQorLSBEb24ndCB1c2UgbGlicmFyeSBvciBidWlsdC1pbiBieXRlIHN3YXBz CistIFNpbXBsaWZ5IHRlc3QgYW5kIHVzZSBvZiBnY2MgaGlkZGVuIGF0dHJpYnV0ZQorLSBGaXgg YnVnIGluIGd6Y2xvc2VfdygpIHdoZW4gZ3p3cml0ZSgpIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9y eQorLSBBZGQgIngiIChPX0VYQ0wpIGFuZCAiZSIgKE9fQ0xPRVhFQykgbW9kZXMgc3VwcG9ydCB0 byBnem9wZW4oKQorLSBGaXggYnVnIGluIHRlc3QvbWluaWd6aXAuYyBmb3IgY29uZmlndXJlIC0t c29sbworLSBGaXggY29udHJpYi92c3R1ZGlvIHByb2plY3QgbGluayBlcnJvcnMgW01vaGFuYXRo YXNdCistIEFkZCBhYmlsaXR5IHRvIGNob29zZSB0aGUgYnVpbGRlciBpbiBtYWtlX3Ztcy5jb20g W1NjaHdlZGFdCistIEFkZCBERVNURElSIHN1cHBvcnQgdG8gbWluZ3czMiB3aW4zMi9NYWtlZmls ZS5nY2MKKy0gRml4IGNvbW1lbnRzIGluIHdpbjMyL01ha2VmaWxlLmdjYyBmb3IgcHJvcGVyIHVz YWdlCistIEFsbG93IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbnMgZm9y IGNtYWtlCistIEdlbmVyYXRlIGFuZCBpbnN0YWxsIHRoZSBwa2ctY29uZmlnIGZpbGUgd2l0aCBj bWFrZQorLSBCdWlsZCBib3RoIGEgc3RhdGljIGFuZCBhIHNoYXJlZCB2ZXJzaW9uIG9mIHpsaWIg d2l0aCBjbWFrZQorLSBJbmNsdWRlIHZlcnNpb24gc3ltYm9scyBmb3IgY21ha2UgYnVpbGRzCist IElmIHVzaW5nIGNtYWtlIHdpdGggTVNWQywgYWRkIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvIHRo ZSBpbmNsdWRlcworLSBSZW1vdmUgdW5uZWVkZWQgRVhUUkFfQ0ZMQUdTIGZyb20gd2luMzIvTWFr ZWZpbGUuZ2NjIFtUcnV0YV0KKy0gTW92ZSBvYnNvbGV0ZSBlbXggbWFrZWZpbGUgdG8gb2xkIFtU cnV0YV0KKy0gQWxsb3cgdGhlIHVzZSBvZiAtV3VuZGVmIHdoZW4gY29tcGlsaW5nIG9yIHVzaW5n IHpsaWIKKy0gQXZvaWQgdGhlIHVzZSBvZiB0aGUgLXUgb3B0aW9uIHdpdGggbWt0ZW1wCistIElt cHJvdmUgaW5mbGF0ZSgpIGRvY3VtZW50YXRpb24gb24gdGhlIHVzZSBvZiBaX0ZJTklTSAorLSBS ZWNvZ25pemUgY2xhbmcgYXMgZ2NjCistIEFkZCBnem9wZW5fdygpIGluIFdpbmRvd3MgZm9yIHdp ZGUgY2hhcmFjdGVyIHBhdGggbmFtZXMKKy0gUmVuYW1lIHpjb25mLmggaW4gQ01ha2VMaXN0cy50 eHQgdG8gbW92ZSBpdCBvdXQgb2YgdGhlIHdheQorLSBBZGQgc291cmNlIGRpcmVjdG9yeSBpbiBD TWFrZUxpc3RzLnR4dCBmb3IgYnVpbGRpbmcgZXhhbXBsZXMKKy0gTG9vayBpbiBidWlsZCBkaXJl Y3RvcnkgZm9yIHpsaWIucGMgaW4gQ01ha2VMaXN0cy50eHQKKy0gUmVtb3ZlIGd6ZmxhZ3MgZnJv bSB6bGlidmMuZGVmIGluIHZjOSBhbmQgdmMxMAorLSBGaXggY29udHJpYi9taW5pemlwIGNvbXBp bGF0aW9uIGluIHRoZSBNaW5HVyBlbnZpcm9ubWVudAorLSBVcGRhdGUgLi9jb25maWd1cmUgZm9y IFNvbGFyaXMsIHN1cHBvcnQgLS02NCBbTW9vbmV5XQorLSBSZW1vdmUgLVIuIGZyb20gU29sYXJp cyBzaGFyZWQgYnVpbGQgKHBvc3NpYmxlIHNlY3VyaXR5IGlzc3VlKQorLSBBdm9pZCByYWNlIGNv bmRpdGlvbiBmb3IgcGFyYWxsZWwgbWFrZSAoLWopIHJ1bm5pbmcgZXhhbXBsZQorLSBGaXggdHlw ZSBtaXNtYXRjaCBiZXR3ZWVuIGdldF9jcmNfdGFibGUoKSBhbmQgY3JjX3RhYmxlCistIEZpeCBw YXJzaW5nIG9mIHZlcnNpb24gd2l0aCAiLSIgaW4gQ01ha2VMaXN0cy50eHQgW1NuaWRlciwgWmll Z2xlcl0KKy0gRml4IHRoZSBwYXRoIHRvIHpsaWIubWFwIGluIENNYWtlTGlzdHMudHh0CistIEZv cmNlIHRoZSBuYXRpdmUgbGlidG9vbCBpbiBNYWMgT1MgWCB0byBhdm9pZCBHTlUgbGlidG9vbCBb QmVlYmVdCistIEFkZCBpbnN0cnVjdGlvbnMgdG8gd2luMzIvTWFrZWZpbGUuZ2NjIGZvciBzaGFy ZWQgaW5zdGFsbCBbVG9ycmldCisKK0NoYW5nZXMgaW4gMS4yLjYuMSAoMTIgRmViIDIwMTIpCist IEF2b2lkIHRoZSB1c2Ugb2YgdGhlIE9iamVjdGl2ZS1DIHJlc2VydmVkIG5hbWUgImlkIgorLSBJ bmNsdWRlIGlvLmggaW4gZ3pndXRzLmggZm9yIE1pY3Jvc29mdCBjb21waWxlcnMKKy0gRml4IHBy b2JsZW0gd2l0aCAuL2NvbmZpZ3VyZSAtLXByZWZpeCBhbmQgZ3pnZXRjIG1hY3JvCistIEluY2x1 ZGUgZ3pfaGVhZGVyIGRlZmluaXRpb24gd2hlbiBjb21waWxpbmcgemxpYiBzb2xvCistIFB1dCBn emZsYWdzKCkgZnVuY3Rpb25hbGl0eSBiYWNrIGluIHp1dGlsLmMKKy0gQXZvaWQgbGlicmFyeSBo ZWFkZXIgaW5jbHVkZSBpbiBjcmMzMi5jIGZvciBaX1NPTE8KKy0gVXNlIG5hbWUgaW4gR0NDX0NM QVNTSUMgYXMgQyBjb21waWxlciBmb3IgY292ZXJhZ2UgdGVzdGluZywgaWYgc2V0CistIE1pbm9y IGNsZWFudXAgaW4gY29udHJpYi9taW5pemlwL3ppcC5jIFtWb2xsYW50XQorLSBVcGRhdGUgbWFr ZV92bXMuY29tIFtaaW5zZXJdCistIFJlbW92ZSB1bm5lY2Vzc2FyeSBnemdldGNfIGZ1bmN0aW9u CistIFVzZSBvcHRpbWl6ZWQgYnl0ZSBzd2FwIG9wZXJhdGlvbnMgZm9yIE1pY3Jvc29mdCBhbmQg R05VIFtTbnlkZXJdCistIEZpeCBtaW5vciB0eXBvIGluIHpsaWIuaCBjb21tZW50cyBbUnplc25p b3dpZWNraV0KKworQ2hhbmdlcyBpbiAxLjIuNiAoMjkgSmFuIDIwMTIpCistIFVwZGF0ZSB0aGUg UGFzY2FsIGludGVyZmFjZSBpbiBjb250cmliL3Bhc2NhbAorLSBGaXggZnVuY3Rpb24gbnVtYmVy cyBmb3IgZ3pnZXRjXyBpbiB6bGlidmMuZGVmIGZpbGVzCistIEZpeCBjb25maWd1cmUuYWMgZm9y IGNvbnRyaWIvbWluaXppcCBbU2NoaWZmZXJdCistIEZpeCBsYXJnZS1lbnRyeSBkZXRlY3Rpb24g aW4gbWluaXppcCBvbiA2NC1iaXQgc3lzdGVtcyBbU2NoaWZmZXJdCistIEhhdmUgLi9jb25maWd1 cmUgdXNlIHRoZSBjb21waWxlciByZXR1cm4gY29kZSBmb3IgZXJyb3IgaW5kaWNhdGlvbgorLSBG aXggQ01ha2VMaXN0cy50eHQgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIFtNY0NsdXJlXQorLSBGaXgg Y29udHJpYi9taW5pemlwL3ppcC5jIGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcyBbRGFsc25lc10K Ky0gRml4IGNvbXBpbGF0aW9uIG9mIGNvbnRyaWIvbWluaXppcCBvbiBGcmVlQlNEIFtNYXJxdWV6 XQorLSBDb3JyZWN0IHN1Z2dlc3RlZCB1c2FnZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjIFtTaGFj aGFyLCBIb3J2YXRoXQorLSBJbmNsdWRlIGlvLmggZm9yIFR1cmJvIEMgLyBCb3JsYW5kIEMgb24g YWxsIHBsYXRmb3JtcyBbVHJ1dGFdCistIE1ha2UgdmVyc2lvbiBleHBsaWNpdCBpbiBjb250cmli L21pbml6aXAvY29uZmlndXJlLmFjIFtCb3NtYW5zXQorLSBBdm9pZCB3YXJuaW5nIGZvciBubyBl bmNyeXB0aW9uIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gTWlub3IgY2xl YW51cCB1cCBjb250cmliL21pbml6aXAvdW56aXAuYyBbVm9sbGFudF0KKy0gRml4IGJ1ZyB3aGVu IGNvbXBpbGluZyBtaW5pemlwIHdpdGggQysrIFtWb2xsYW50XQorLSBQcm90ZWN0IGZvciBsb25n IG5hbWUgYW5kIGV4dHJhIGZpZWxkcyBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEF2 b2lkIHNvbWUgd2FybmluZ3MgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBZGQgLUku Li8uLiAtTC4uLy4uIHRvIENGTEFHUyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCistIEFkZCBt aXNzaW5nIGxpYnMgdG8gbWluaXppcCBsaW5rZXIgY29tbWFuZAorLSBBZGQgc3VwcG9ydCBmb3Ig VlBBVEggYnVpbGRzIGluIGNvbnRyaWIvbWluaXppcAorLSBBZGQgYW4gLS1lbmFibGUtZGVtb3Mg b3B0aW9uIHRvIGNvbnRyaWIvbWluaXppcC9jb25maWd1cmUKKy0gQWRkIHRoZSBnZW5lcmF0aW9u IG9mIGNvbmZpZ3VyZS5sb2cgYnkgLi9jb25maWd1cmUKKy0gRXhpdCB3aGVuIHJlcXVpcmVkIHBh cmFtZXRlcnMgbm90IHByb3ZpZGVkIHRvIHdpbjMyL01ha2VmaWxlLmdjYworLSBIYXZlIGd6cHV0 YyByZXR1cm4gdGhlIGNoYXJhY3RlciB3cml0dGVuIGluc3RlYWQgb2YgdGhlIGFyZ3VtZW50Cist IFVzZSB0aGUgLW0gb3B0aW9uIG9uIGxkY29uZmlnIGZvciBCU0Qgc3lzdGVtcyBbVG9iaWFzXQor LSBDb3JyZWN0IGluIHpsaWIubWFwIHdoZW4gZGVmbGF0ZVJlc2V0S2VlcCB3YXMgYWRkZWQKKwor Q2hhbmdlcyBpbiAxLjIuNS4zICgxNSBKYW4gMjAxMikKKy0gUmVzdG9yZSBnemdldGMgZnVuY3Rp b24gZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5CistIERvIG5vdCB1c2UgX2xzZWVraTY0IHVuZGVy IEJvcmxhbmQgQysrIFtUcnV0YV0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLm1zYyB0byBidWls ZCB0ZXN0LyouYyBbVHJ1dGFdCistIFJlbW92ZSBvbGQvdmlzdWFsYzYgZ2l2ZW4gQ01ha2VmaWxl IGFuZCBvdGhlciBhbHRlcm5hdGl2ZXMKKy0gVXBkYXRlIEFTNDAwIGJ1aWxkIGZpbGVzIGFuZCBk b2N1bWVudGF0aW9uIFtNb25uZXJhdF0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLmdjYyB0byBi dWlsZCB0ZXN0LyouYyBbVHJ1dGFdCistIFBlcm1pdCBzdHJvbmdlciBmbHVzaGVzIGFmdGVyIFpf QkxPQ0sgZmx1c2hlcworLSBBdm9pZCBleHRyYW5lb3VzIGVtcHR5IGJsb2NrcyB3aGVuIGRvaW5n IGVtcHR5IGZsdXNoZXMKKy0gUGVybWl0IFpfTlVMTCBhcmd1bWVudHMgdG8gZGVmbGF0ZVBlbmRp bmcKKy0gQWxsb3cgZGVmbGF0ZVByaW1lKCkgdG8gaW5zZXJ0IGJpdHMgaW4gdGhlIG1pZGRsZSBv ZiBhIHN0cmVhbQorLSBSZW1vdmUgc2Vjb25kIGVtcHR5IHN0YXRpYyBibG9jayBmb3IgWl9QQVJU SUFMX0ZMVVNICistIFdyaXRlIG91dCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBiaXRzIHdoZW4gdXNp bmcgWl9CTE9DSworLSBJbnNlcnQgdGhlIGZpcnN0IHR3byBzdHJpbmdzIGluIHRoZSBoYXNoIHRh YmxlIGFmdGVyIGEgZmx1c2gKKworQ2hhbmdlcyBpbiAxLjIuNS4yICgxNyBEZWMgMjAxMSkKKy0g Zml4IGxkIGVycm9yOiB1bmFibGUgdG8gZmluZCB2ZXJzaW9uIGRlcGVuZGVuY3kgJ1pMSUJfMS4y LjUnCistIHVzZSByZWxhdGl2ZSBzeW1saW5rcyBmb3Igc2hhcmVkIGxpYnMKKy0gQXZvaWQgc2Vh cmNoaW5nIHBhc3Qgd2luZG93IGZvciBaX1JMRSBzdHJhdGVneQorLSBBc3N1cmUgdGhhdCBoaWdo LXdhdGVyIG1hcmsgaW5pdGlhbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgaW4gZGVmbGF0ZQor LSBBZGQgYXNzZXJ0aW9ucyB0byBmaWxsX3dpbmRvdygpIGluIGRlZmxhdGUuYyB0byBtYXRjaCBj b21tZW50cworLSBVcGRhdGUgcHl0aG9uIGxpbmsgaW4gUkVBRE1FCistIENvcnJlY3Qgc3BlbGxp bmcgZXJyb3IgaW4gZ3pyZWFkLmMKKy0gRml4IGJ1ZyBpbiBnemdldHMoKSBmb3IgYSBjb25jYXRl bmF0ZWQgZW1wdHkgZ3ppcCBzdHJlYW0KKy0gQ29ycmVjdCBlcnJvciBpbiBjb21tZW50IGZvciBn el9tYWtlKCkKKy0gQ2hhbmdlIGd6cmVhZCgpIGFuZCByZWxhdGVkIHRvIGlnbm9yZSBqdW5rIGFm dGVyIGd6aXAgc3RyZWFtcworLSBBbGxvdyBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBjb250aW51 ZSBhZnRlciBnemNsZWFyZXJyKCkKKy0gQWxsb3cgZ3pyZXdpbmQoKSBhbmQgZ3pzZWVrKCkgYWZ0 ZXIgYSBwcmVtYXR1cmUgZW5kLW9mLWZpbGUKKy0gU2ltcGxpZnkgZ3pzZWVrKCkgbm93IHRoYXQg cmF3IGFmdGVyIGd6aXAgaXMgaWdub3JlZAorLSBDaGFuZ2UgZ3pnZXRjKCkgdG8gYSBtYWNybyBm b3Igc3BlZWQgKH40MCUgc3BlZWR1cCBpbiB0ZXN0aW5nKQorLSBGaXggZ3pjbG9zZSgpIHRvIHJl dHVybiB0aGUgYWN0dWFsIGVycm9yIGxhc3QgZW5jb3VudGVyZWQKKy0gQWx3YXlzIGFkZCBsYXJn ZSBmaWxlIHN1cHBvcnQgZm9yIHdpbmRvd3MKKy0gSW5jbHVkZSB6Y29uZi5oIGZvciB3aW5kb3dz IGxhcmdlIGZpbGUgc3VwcG9ydAorLSBJbmNsdWRlIHpjb25mLmguY21ha2VpbiBmb3Igd2luZG93 cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gVXBkYXRlIHpjb25mLmguY21ha2VpbiBvbiBtYWtlIGRp c3RjbGVhbgorLSBNZXJnZSB2ZXN0aWdpYWwgdnNucHJpbnRmIGRldGVybWluYXRpb24gZnJvbSB6 dXRpbC5oIHRvIGd6Z3V0cy5oCistIENsYXJpZnkgaG93IGd6b3BlbigpIGFwcGVuZHMgaW4gemxp Yi5oIGNvbW1lbnRzCistIENvcnJlY3QgZG9jdW1lbnRhdGlvbiBvZiBnemRpcmVjdCgpIHNpbmNl IGp1bmsgYXQgZW5kIG5vdyBpZ25vcmVkCistIEFkZCBhIHRyYW5zcGFyZW50IHdyaXRlIG1vZGUg dG8gZ3pvcGVuKCkgd2hlbiAnVCcgaXMgaW4gdGhlIG1vZGUKKy0gVXBkYXRlIHB5dGhvbiBsaW5r IGluIHpsaWIgbWFuIHBhZ2UKKy0gR2V0IGluZmZpeGVkLmggYW5kIE1BS0VGSVhFRCByZXN1bHQg dG8gbWF0Y2gKKy0gQWRkIGEgLi9jb25maWcgLS1zb2xvIG9wdGlvbiB0byBtYWtlIHpsaWIgc3Vi c2V0IHdpdGggbm8gbGlicmFyeSB1c2UKKy0gQWRkIHVuZG9jdW1lbnRlZCBpbmZsYXRlUmVzZXRL ZWVwKCkgZnVuY3Rpb24gZm9yIENBQiBmaWxlIGRlY29kaW5nCistIEFkZCAtLWNvdmVyIG9wdGlv biB0byAuL2NvbmZpZ3VyZSBmb3IgZ2NjIGNvdmVyYWdlIHRlc3RpbmcKKy0gQWRkICNkZWZpbmUg WkxJQl9DT05TVCBvcHRpb24gdG8gdXNlIGNvbnN0IGluIHRoZSB6X3N0cmVhbSBpbnRlcmZhY2UK Ky0gQWRkIGNvbW1lbnQgdG8gZ3pkb3BlbigpIGluIHpsaWIuaCB0byB1c2UgZHVwKCkgd2hlbiB1 c2luZyBmaWxlbm8oKQorLSBOb3RlIGJlaGF2aW9yIG9mIHVuY29tcHJlc3MoKSB0byBwcm92aWRl IGFzIG11Y2ggZGF0YSBhcyBpdCBjYW4KKy0gQWRkIGZpbGVzIGluIGNvbnRyaWIvbWluaXppcCB0 byBhaWQgaW4gYnVpbGRpbmcgbGlibWluaXppcAorLSBTcGxpdCBvZmYgQVIgb3B0aW9ucyBpbiBN YWtlZmlsZS5pbiBhbmQgY29uZmlndXJlCistIENoYW5nZSBPTiBtYWNybyB0byBaX0FSRyB0byBh dm9pZCBhcHBsaWNhdGlvbiBjb25mbGljdHMKKy0gRmFjaWxpdGF0ZSBjb21waWxhdGlvbiB3aXRo IEJvcmxhbmQgQysrIGZvciBwcmFnbWFzIGFuZCB2c25wcmludGYKKy0gSW5jbHVkZSBpby5oIGZv ciBUdXJibyBDIC8gQm9ybGFuZCBDKysKKy0gTW92ZSBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMg dG8gdGVzdC8KKy0gU2ltcGxpZnkgaW5jb21wbGV0ZSBjb2RlIHRhYmxlIGZpbGxpbmcgaW4gaW5m bGF0ZV90YWJsZSgpCistIFJlbW92ZSBjb2RlIGZyb20gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMg dGhhdCBpcyBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUKKy0gVGVzdCB0aGUgaW5mbGF0ZSBjb2RlIHdp dGggZnVsbCBjb3ZlcmFnZQorLSBBbGxvdyBkZWZsYXRlU2V0RGljdGlvbmFyeSwgaW5mbGF0ZVNl dERpY3Rpb25hcnkgYXQgYW55IHRpbWUgKGluIHJhdykKKy0gQWRkIGRlZmxhdGVSZXNldEtlZXAg YW5kIGZpeCBpbmZsYXRlUmVzZXRLZWVwIHRvIHJldGFpbiBkaWN0aW9uYXJ5CistIEZpeCBnendy aXRlLmMgdG8gYWNjb21tb2RhdGUgcmVkdWNlZCBtZW1vcnkgemxpYiBjb21waWxhdGlvbgorLSBI YXZlIGluZmxhdGUoKSB3aXRoIFpfRklOSVNIIGF2b2lkIHRoZSBhbGxvY2F0aW9uIG9mIGEgd2lu ZG93CistIERvIG5vdCBzZXQgc3RybS0+YWRsZXIgd2hlbiBkb2luZyByYXcgaW5mbGF0ZQorLSBG aXggZ3plb2YoKSB0byBiZWhhdmUganVzdCBsaWtlIGZlb2YoKSB3aGVuIHJlYWQgaXMgbm90IHBh c3QgZW5kIG9mIGZpbGUKKy0gRml4IGJ1ZyBpbiBnenJlYWQuYyB3aGVuIGVuZC1vZi1maWxlIGlz IHJlYWNoZWQKKy0gQXZvaWQgdXNlIG9mIFpfQlVGX0VSUk9SIGluIGd6KiBmdW5jdGlvbnMgZXhj ZXB0IGZvciBwcmVtYXR1cmUgRU9GCistIERvY3VtZW50IGd6cmVhZCgpIGNhcGFiaWxpdHkgdG8g cmVhZCBjb25jdXJyZW50bHkgd3JpdHRlbiBmaWxlcworLSBSZW1vdmUgaGFyZC1jb2Rpbmcgb2Yg cmVzb3VyY2UgY29tcGlsZXIgaW4gQ01ha2VMaXN0cy50eHQgW0JsYW1tb10KKworQ2hhbmdlcyBp biAxLjIuNS4xICgxMCBTZXAgMjAxMSkKKy0gVXBkYXRlIEZBUSBlbnRyeSBvbiBzaGFyZWQgYnVp bGRzICgjMTMpCistIEF2b2lkIHN5bWJvbGljIGFyZ3VtZW50IHRvIGNobW9kIGluIE1ha2VmaWxl LmluCistIEZpeCBidWcgYW5kIGFkZCBjb25zdHMgaW4gY29udHJpYi9wdWZmIFtPYmVyaHVtZXJd CistIFVwZGF0ZSBjb250cmliL3B1ZmYvemVyb3MucmF3IHRlc3QgZmlsZSB0byBoYXZlIGFsbCBi bG9jayB0eXBlcworLSBBZGQgZnVsbCBjb3ZlcmFnZSB0ZXN0IGZvciBwdWZmIGluIGNvbnRyaWIv cHVmZi9NYWtlZmlsZQorLSBGaXggc3RhdGljLW9ubHktYnVpbGQgaW5zdGFsbCBpbiBNYWtlZmls ZS5pbgorLSBGaXggYnVnIGluIHVuekdldEN1cnJlbnRGaWxlSW5mbygpIGluIGNvbnRyaWIvbWlu aXppcCBbS3Vub10KKy0gQWRkIGxpYnouYSBkZXBlbmRlbmN5IHRvIHNoYXJlZCBpbiBNYWtlZmls ZS5pbiBmb3IgcGFyYWxsZWwgYnVpbGRzCistIFNwZWxsIG91dCAibnVtYmVyIiAoaW5zdGVhZCBv ZiAibmIiKSBpbiB6bGliLmggZm9yIHRvdGFsX2luLCB0b3RhbF9vdXQKKy0gUmVwbGFjZSAkKC4u Likgd2l0aCBgLi4uYCBpbiBjb25maWd1cmUgZm9yIG5vbi1iYXNoIHNoIFtCb3dsZXJdCistIEFk ZCBkYXJ3aW4qIHRvIERhcndpbiogYW5kIHNvbGFyaXMqIHRvIFN1bk9TXCA1KiBpbiBjb25maWd1 cmUgW0dyb2ZmZW5dCistIEFkZCBzb2xhcmlzKiB0byBMaW51eCogaW4gY29uZmlndXJlIHRvIGFs bG93IGdjYyB1c2UgW0dyb2ZmZW5dCistIEFkZCAqYnNkKiB0byBMaW51eCogY2FzZSBpbiBjb25m aWd1cmUgW0Jhci1MZXZdCistIEFkZCBpbmZmYXN0Lm9iaiB0byBkZXBlbmRlbmNpZXMgaW4gd2lu MzIvTWFrZWZpbGUubXNjCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZGVmbGF0ZS5oIFtL b2hsZXJdCistIENoYW5nZSBsaWJ6ZGxsLmEgYWdhaW4gdG8gbGliei5kbGwuYSAoISkgaW4gd2lu MzIvTWFrZWZpbGUuZ2NjCistIEFkZCB0ZXN0IHRvIGNvbmZpZ3VyZSBmb3IgR05VIEMgbG9va2lu ZyBmb3IgZ2NjIGluIG91dHB1dCBvZiAkY2MgLXYKKy0gQWRkIHpsaWIucGMgZ2VuZXJhdGlvbiB0 byB3aW4zMi9NYWtlZmlsZS5nY2MgW1dlaWdlbHRdCistIEZpeCBidWcgaW4gemxpYi5oIGZvciBf RklMRV9PRkZTRVRfQklUUyBzZXQgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugbm90CistIEFkZCBj b21tZW50IGluIHpsaWIuaCB0aGF0IGFkbGVyMzJfY29tYmluZSB3aXRoIGxlbjIgPCAwIG1ha2Vz IG5vIHNlbnNlCistIE1ha2UgTk9fRElWSURFIG9wdGlvbiBpbiBhZGxlcjMyLmMgbXVjaCBmYXN0 ZXIgKHRoYW5rcyB0byBKb2huIFJlaXNlcikKKy0gTWFrZSBzdHJvbmdlciB0ZXN0IGluIHpjb25m LmggdG8gaW5jbHVkZSB1bmlzdGQuaCBmb3IgTEZTCistIEFwcGx5IERhcndpbiBwYXRjaGVzIGZv ciA2NC1iaXQgZmlsZSBvZmZzZXRzIHRvIGNvbnRyaWIvbWluaXppcCBbU2xhY2tdCistIEZpeCB6 bGliLmggTEZTIHN1cHBvcnQgd2hlbiBaX1BSRUZJWCB1c2VkCistIEFkZCB1cGRhdGVkIGFzNDAw IHN1cHBvcnQgKHJlbW92ZWQgZnJvbSBvbGQpIFtNb25uZXJhdF0KKy0gQXZvaWQgZGVmbGF0ZSBz ZW5zaXRpdml0eSB0byB2b2xhdGlsZSBpbnB1dCBkYXRhCistIEF2b2lkIGRpdmlzaW9uIGluIGFk bGVyMzJfY29tYmluZSBmb3IgTk9fRElWSURFCistIENsYXJpZnkgdGhlIHVzZSBvZiBaX0ZJTklT SCB3aXRoIGRlZmxhdGVCb3VuZCgpIGFtb3VudCBvZiBzcGFjZQorLSBTZXQgYmluYXJ5IGZvciBv dXRwdXQgZmlsZSBpbiBwdWZmLmMKKy0gVXNlIHU0IHR5cGUgZm9yIGNyY190YWJsZSB0byBhdm9p ZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFwcGx5IGNhc3RzIGluIHpsaWIuaCB0byBhdm9pZCBj b252ZXJzaW9uIHdhcm5pbmdzCistIEFkZCBPRiB0byBwcm90b3R5cGVzIGZvciBhZGxlcjMyX2Nv bWJpbmVfIGFuZCBjcmMzMl9jb21iaW5lXyBbTWlsbGVyXQorLSBJbXByb3ZlIGluZmxhdGVTeW5j KCkgZG9jdW1lbnRhdGlvbiB0byBub3RlIGluZGV0ZXJtaW5hbmN5CistIEFkZCBkZWZsYXRlUGVu ZGluZygpIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgYW1vdW50IG9mIHBlbmRpbmcgb3V0cHV0Cist IENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mICJzcGVjaWZpY2F0aW9uIiBpbiBGQVEgW1JhbmRlcnMt UGVocnNvbl0KKy0gQWRkIGEgY2hlY2sgaW4gY29uZmlndXJlIGZvciBzdGRhcmcuaCwgdXNlIGZv ciBnenByaW50ZigpCistIENoZWNrIHRoYXQgcG9pbnRlcnMgZml0IGluIGludHMgd2hlbiBnenBy aW50KCkgY29tcGlsZWQgb2xkIHN0eWxlCistIEFkZCBkdW1teSBuYW1lIGJlZm9yZSAkKFNIQVJF RExJQlYpIGluIE1ha2VmaWxlIFtCYXItTGV2LCBCb3dsZXJdCistIERlbGV0ZSBsaW5lIGluIGNv bmZpZ3VyZSB0aGF0IGFkZHMgLUwuIGxpYnouYSB0byBMREZMQUdTIFtXZWlnZWx0XQorLSBBZGQg ZGVidWcgcmVjb3JkcyBpbiBhc3NtZWJsZXIgY29kZSBbTG9uZGVyXQorLSBVcGRhdGUgUkZDIHJl ZmVyZW5jZXMgdG8gdXNlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLy4uLiBbTGldCistIEFk ZCAtLWFyY2hzIG9wdGlvbiwgdXNlIG9mIGxpYnRvb2wgdG8gY29uZmlndXJlIGZvciBNYWMgT1Mg WCBbQm9yc3RlbF0KKworQ2hhbmdlcyBpbiAxLjIuNSAoMTkgQXByIDIwMTApCistIERpc2FibGUg dmlzaWJpbGl0eSBhdHRyaWJ1dGUgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIFtCYXItTGV2XQorLSBE ZWZhdWx0IHRvIGxpYmRpciBhcyBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtOaWVkZXJdCist IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZXMgb24gbW9kaWZpZWQgc291cmNlIGZpbGVzCistIFVwZGF0 ZSB0cmVlcy5jIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgbW9kaWZpZWQgdHJlZXMuaAorLSBFeGl0 IGNvbmZpZ3VyZSBmb3IgTWluR1csIHN1Z2dlc3Rpbmcgd2luMzIvTWFrZWZpbGUuZ2NjCistIENo ZWNrIGZvciBOVUxMIHBhdGggaW4gZ3pfb3BlbiBbSG9tdXJsdV0KKworQ2hhbmdlcyBpbiAxLjIu NC41ICgxOCBBcHIgMjAxMCkKKy0gU2V0IHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW1Rvcm9r XQorLSBTZXQgTERGTEFHUyBpbiBNYWtlZmlsZS5pbiBbQmFyLUxldl0KKy0gQXZvaWQgbWtkaXIg b2JqcyByYWNlIGNvbmRpdGlvbiBpbiBNYWtlZmlsZS5pbiBbQm93bGVyXQorLSBBZGQgWkxJQl9J TlRFUk5BTCBpbiBmcm9udCBvZiBpbnRlcm5hbCBpbnRlci1tb2R1bGUgZnVuY3Rpb25zIGFuZCBh cnJheXMKKy0gRGVmaW5lIFpMSUJfSU5URVJOQUwgdG8gaGlkZSBpbnRlcm5hbCBmdW5jdGlvbnMg YW5kIGFycmF5cyBmb3IgR05VIEMKKy0gRG9uJ3QgdXNlIGhpZGRlbiBhdHRyaWJ1dGUgd2hlbiBp dCBpcyBhIHdhcm5pbmcgZ2VuZXJhdG9yIChlLmcuIFNvbGFyaXMpCisKK0NoYW5nZXMgaW4gMS4y LjQuNCAoMTggQXByIDIwMTApCistIEZpeCBDUk9TU19QUkVGSVggZXhlY3V0YWJsZSB0ZXN0aW5n LCBDSE9TVCBleHRyYWN0LCBtaW5ndyogW1Rvcm9rXQorLSBVbmRlZmluZSBfTEFSR0VGSUxFNjRf U09VUkNFIGluIHpjb25mLmggaWYgaXQgaXMgemVybywgYnV0IG5vdCBpZiBlbXB0eQorLSBUcnkg dG8gdXNlIGJhc2ggb3Iga3NoIHJlZ2FyZGxlc3Mgb2YgZnVuY3Rpb25hbGl0eSBvZiAvYmluL3No CistIEZpeCBjb25maWd1cmUgaW5jb21wYXRpYmlsaXR5IHdpdGggTmV0QlNEIHNoCistIFJlbW92 ZSBhdHRlbXB0IHRvIHJ1biB1bmRlciBiYXNoIG9yIGtzaCBzaW5jZSBoYXZlIGJldHRlciBOZXRC U0QgZml4CistIEZpeCB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIE1pbkdXIFtCYXItTGV2XQorLSBB ZGQgZGlhZ25vc3RpYyBtZXNzYWdlcyB3aGVuIHVzaW5nIENST1NTX1BSRUZJWCBpbiBjb25maWd1 cmUKKy0gQWRkZWQgLS1zaGFyZWRsaWJkaXIgb3B0aW9uIHRvIGNvbmZpZ3VyZSBbV2VpZ2VsdF0K Ky0gVXNlIGhpZGRlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZSB3aGVuIGF2YWlsYWJsZSBbRnJ5c2lu Z2VyXQorCitDaGFuZ2VzIGluIDEuMi40LjMgKDEwIEFwciAyMDEwKQorLSBPbmx5IHVzZSBDUk9T U19QUkVGSVggaW4gY29uZmlndXJlIGZvciBhciBhbmQgcmFubGliIGlmIHRoZXkgZXhpc3QKKy0g VXNlIENST1NTX1BSRUZJWCBmb3Igbm0gW0Jhci1MZXZdCistIEFzc3VtZSBfTEFSR0VGSUxFNjRf U09VUkNFIGRlZmluZWQgaXMgZXF1aXZhbGVudCB0byB0cnVlCistIEF2b2lkIHVzZSBvZiB1bmRl ZmluZWQgc3ltYm9scyBpbiAjaWYgd2l0aCAmJiBhbmQgfHwKKy0gTWFrZSAqNjQgcHJvdG90eXBl cyBpbiBnemd1dHMuaCBjb25zaXN0ZW50IHdpdGggZnVuY3Rpb25zCistIEFkZCAtc2hhcmVkIGxv YWQgb3B0aW9uIGZvciBNaW5HVyBpbiBjb25maWd1cmUgW0Jvd2xlcl0KKy0gTW92ZSB6X29mZjY0 X3QgdG8gcHVibGljIGludGVyZmFjZSwgdXNlIGluc3RlYWQgb2Ygb2ZmNjRfdAorLSBSZW1vdmUg ISBmcm9tIHNoZWxsIHRlc3QgaW4gY29uZmlndXJlIChub3QgcG9ydGFibGUgdG8gU29sYXJpcykK Ky0gQ2hhbmdlICswIG1hY3JvIHRlc3RzIHRvIC0wIGZvciBwb3NzaWJseSBpbmNyZWFzZWQgcG9y dGFiaWxpdHkKKworQ2hhbmdlcyBpbiAxLjIuNC4yICg5IEFwciAyMDEwKQorLSBBZGQgY29uc2lz dGVudCBjYXJyaWFnZSByZXR1cm5zIHRvIHJlYWRtZS50eHQncyBpbiBtYXNteDg2IGFuZCBtYXNt eDY0CistIFJlYWxseSBwcm92aWRlIHByb3RvdHlwZXMgZm9yICo2NCBmdW5jdGlvbnMgd2hlbiBi dWlsZGluZyB3aXRob3V0IExGUworLSBPbmx5IGRlZmluZSB1bmxpbmsoKSBpbiBtaW5pZ3ppcC5j IGlmIHVuaXN0ZC5oIG5vdCBpbmNsdWRlZAorLSBVcGRhdGUgUkVBRE1FIHRvIHBvaW50IHRvIGNv bnRyaWIvdnN0dWRpbyBwcm9qZWN0IGZpbGVzCistIE1vdmUgcHJvamVjdHMvdmM2IHRvIG9sZC8g YW5kIHJlbW92ZSBwcm9qZWN0cy8KKy0gSW5jbHVkZSBzdGRsaWIuaCBpbiBtaW5pZ3ppcC5jIGZv ciBzZXRtb2RlKCkgZGVmaW5pdGlvbiB1bmRlciBXaW5DRQorLSBDbGVhbiB1cCBhc3NlbWJsZXIg YnVpbGRzIGluIHdpbjMyL01ha2VmaWxlLm1zYyBbUm93ZV0KKy0gSW5jbHVkZSBzeXMvdHlwZXMu aCBmb3IgTWljcm9zb2Z0IGZvciBvZmZfdCBkZWZpbml0aW9uCistIEZpeCBtZW1vcnkgbGVhayBv biBlcnJvciBpbiBnel9vcGVuKCkKKy0gU3ltYm9saXplIG5tIGFzICROTSBpbiBjb25maWd1cmUg W1dlaWdlbHRdCistIFVzZSBURVNUX0xEU0hBUkVEIGluc3RlYWQgb2YgTERTSEFSRUQgdG8gbGlu ayB0ZXN0IHByb2dyYW1zIFtXZWlnZWx0XQorLSBBZGQgKzAgdG8gX0ZJTEVfT0ZGU0VUX0JJVFMg YW5kIF9MRlM2NF9MQVJHRUZJTEUgaW4gY2FzZSBub3QgZGVmaW5lZAorLSBGaXggYnVnIGluIGd6 ZW9mKCkgdG8gdGFrZSBpbnRvIGFjY291bnQgdW51c2VkIGlucHV0IGRhdGEKKy0gQXZvaWQgaW5p dGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlcyBpbiBwdWZmLmMKKy0gVXBk YXRlZCB3aW4zMi9SRUFETUUtV0lOMzIudHh0IFtSb3dlXQorCitDaGFuZ2VzIGluIDEuMi40LjEg KDI4IE1hciAyMDEwKQorLSBSZW1vdmUgdGhlIHVzZSBvZiBbYS16XSBjb25zdHJ1Y3RzIGZvciBz ZWQgaW4gY29uZmlndXJlIFtnZW50b28gMzEwMjI1XQorLSBSZW1vdmUgJChTSEFSRURMSUIpIGZy b20gTElCUyBpbiBNYWtlZmlsZS5pbiBbQ3JlZWNoXQorLSBSZXN0b3JlICJmb3IgZGVidWdnaW5n IiBjb21tZW50IG9uIHNwcmludGYoKSBpbiBnemxpYi5jCistIFJlbW92ZSBmZG9wZW4gZm9yIE1W UyBmcm9tIGd6Z3V0cy5oCistIFB1dCBuZXcgUkVBRE1FLVdJTjMyLnR4dCBpbiB3aW4zMiBbUm93 ZV0KKy0gQWRkIGNoZWNrIGZvciBzaGVsbCB0byBjb25maWd1cmUgYW5kIGludm9rZSBhbm90aGVy IHNoZWxsIGlmIG5lZWRlZAorLSBGaXggYmlnIGZhdCBzdGlua2luZyBidWcgaW4gZ3pzZWVrKCkg b24gdW5jb21wcmVzc2VkIGZpbGVzCistIFJlbW92ZSB2ZXN0aWdpYWwgRl9PUEVONjQgZGVmaW5l IGluIHp1dGlsLmgKKy0gU2V0IGFuZCBjaGVjayB0aGUgdmFsdWUgb2YgX0xBUkdFRklMRV9TT1VS Q0UgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKy0gQXZvaWQgZXJyb3JzIG9uIG5vbi1MRlMgc3lz dGVtcyB3aGVuIGFwcGxpY2F0aW9ucyBkZWZpbmUgTEZTIG1hY3JvcworLSBTZXQgRVhFIHRvICIu ZXhlIiBpbiBjb25maWd1cmUgZm9yIE1JTkdXIFtLYWhsZV0KKy0gTWF0Y2ggY3JjMzIoKSBpbiBj cmMzMi5jIGV4YWN0bHkgdG8gdGhlIHByb3RvdHlwZSBpbiB6bGliLmggW1NoZXJyaWxsXQorLSBB ZGQgcHJlZml4IGZvciBjcm9zcy1jb21waWxhdGlvbiBpbiB3aW4zMi9tYWtlZmlsZS5nY2MgW0Jh ci1MZXZdCistIEFkZCBETEwgaW5zdGFsbCBpbiB3aW4zMi9tYWtlZmlsZS5nY2MgW0Jhci1MZXZd CistIEFsbG93IExpbnV4KiBvciBsaW51eCogZnJvbSB1bmFtZSBpbiBjb25maWd1cmUgW0Jhci1M ZXZdCistIEFsbG93IGxkY29uZmlnIHRvIGJlIHJlZGVmaW5lZCBpbiBjb25maWd1cmUgYW5kIE1h a2VmaWxlLmluIFtCYXItTGV2XQorLSBBZGQgY3Jvc3MtY29tcGlsYXRpb24gcHJlZml4ZXMgdG8g Y29uZmlndXJlIFtCYXItTGV2XQorLSBNYXRjaCB0eXBlIGV4YWN0bHkgaW4gZ3pfbG9hZCgpIGlu dm9jYXRpb24gaW4gZ3pyZWFkLmMKKy0gTWF0Y2ggdHlwZSBleGFjdGx5IG9mIHpjYWxsb2MoKSBp biB6dXRpbC5jIHRvIHpsaWIuaCBhbGxvY19mdW5jCistIFByb3ZpZGUgcHJvdG90eXBlcyBmb3Ig KjY0IGZ1bmN0aW9ucyB3aGVuIGJ1aWxkaW5nIHpsaWIgd2l0aG91dCBMRlMKKy0gRG9uJ3QgdXNl IC1sYyB3aGVuIGxpbmtpbmcgc2hhcmVkIGxpYnJhcnkgb24gTWluR1cKKy0gUmVtb3ZlIGVycm5v LmggY2hlY2sgaW4gY29uZmlndXJlIGFuZCB2ZXN0aWdpYWwgZXJybm8gY29kZSBpbiB6dXRpbC5o CisKK0NoYW5nZXMgaW4gMS4yLjQgKDE0IE1hciAyMDEwKQorLSBGaXggVkVSMyBleHRyYWN0aW9u IGluIGNvbmZpZ3VyZSBmb3Igbm8gZm91cnRoIHN1YnZlcnNpb24KKy0gVXBkYXRlIHpsaWIuMywg YWRkIGRvY3MgdG8gTWFrZWZpbGUuaW4gdG8gbWFrZSAucGRmIG91dCBvZiBpdAorLSBBZGQgemxp Yi4zLnBkZiB0byBkaXN0cmlidXRpb24KKy0gRG9uJ3Qgc2V0IGVycm9yIGNvZGUgaW4gZ3plcnJv cigpIGlmIHBhc3NlZCBwb2ludGVyIGlzIE5VTEwKKy0gQXBwbHkgZGVzdGluYXRpb24gZGlyZWN0 b3J5IGZpeGVzIHRvIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIE1vdmUgI2NtYWtlZGVmaW5l J3MgdG8gYSBuZXcgemNvbmYuaW4uY21ha2VpbgorLSBSZXN0b3JlIHpjb25mLmggZm9yIGJ1aWxk cyB0aGF0IGRvbid0IHVzZSBjb25maWd1cmUgb3IgY21ha2UKKy0gQWRkIGRpc3RjbGVhbiB0byBk dW1teSBNYWtlZmlsZSBmb3IgY29udmVuaWVuY2UKKy0gVXBkYXRlIGFuZCBpbXByb3ZlIElOREVY LCBSRUFETUUsIGFuZCBGQVEKKy0gVXBkYXRlIENNYWtlTGlzdHMudHh0IGZvciB0aGUgcmV0dXJu IG9mIHpjb25mLmggW0xvd21hbl0KKy0gVXBkYXRlIGNvbnRyaWIvdnN0dWRpby92YzkgYW5kIHZj MTAgW1ZvbGxhbnRdCistIENoYW5nZSBsaWJ6LmRsbC5hIGJhY2sgdG8gbGliemRsbC5hIGluIHdp bjMyL01ha2VmaWxlLmdjYworLSBBcHBseSBsaWNlbnNlIGFuZCByZWFkbWUgY2hhbmdlcyB0byBj b250cmliL2FzbTY4NiBbUmFpdGVyXQorLSBDaGVjayBmaWxlIG5hbWUgbGVuZ3RocyBhbmQgYWRk IC1jIG9wdGlvbiBpbiBtaW5pZ3ppcC5jIFtMaV0KKy0gVXBkYXRlIGNvbnRyaWIvYW1kNjQgYW5k IGNvbnRyaWIvbWFzbXg4Ni8gW1ZvbGxhbnRdCistIEF2b2lkIHVzZSBvZiAiZW9mIiBwYXJhbWV0 ZXIgaW4gdHJlZXMuYyB0byBub3Qgc2hhZG93IGxpYnJhcnkgdmFyaWFibGUKKy0gVXBkYXRlIG1h a2Vfdm1zLmNvbSBmb3IgcmVtb3ZhbCBvZiB6bGliZGVmcy5oIFtaaW5zZXJdCistIFVwZGF0ZSBh c3NlbWJsZXIgY29kZSBhbmQgdnN0dWRpbyBwcm9qZWN0cyBpbiBjb250cmliIFtWb2xsYW50XQor LSBSZW1vdmUgb3V0ZGF0ZWQgYXNzZW1ibGVyIGNvZGUgY29udHJpYi9tYXNtNjg2IGFuZCBjb250 cmliL2FzbTU4NgorLSBSZW1vdmUgb2xkIHZjNyBhbmQgdmM4IGZyb20gY29udHJpYi92c3R1ZGlv CistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5tc2MsIGFkZCBaTElCX1ZFUl9TVUJSRVZJU0lPTiBb Um93ZV0KKy0gRml4IG1lbW9yeSBsZWFrcyBpbiBnemNsb3NlX3IoKSBhbmQgZ3pjbG9zZV93KCks IGZpbGUgbGVhayBpbiBnel9vcGVuKCkKKy0gQWRkIGNvbnRyaWIvZ2NjX2d2bWF0NjQgZm9yIGxv bmdlc3RfbWF0Y2ggYW5kIGluZmxhdGVfZmFzdCBbVm9sbGFudF0KKy0gUmVtb3ZlICo2NCBmdW5j dGlvbnMgZnJvbSB3aW4zMi96bGliLmRlZiAodGhleSdyZSBub3QgNjQtYml0IHlldCkKKy0gRml4 IGJ1ZyBpbiB2b2lkLXJldHVybmluZyB2c3ByaW50ZigpIGNhc2UgaW4gZ3p3cml0ZS5jCistIEZp eCBuYW1lIGNoYW5nZSBmcm9tIGluZmxhdGUuaCBpbiBjb250cmliL2luZmxhdGU4Ni9pbmZmYXM4 Ni5jCistIENoZWNrIGlmIHRlbXBvcmFyeSBmaWxlIGV4aXN0cyBiZWZvcmUgcmVtb3ZpbmcgaW4g bWFrZV92bXMuY29tIFtaaW5zZXJdCistIEZpeCBtYWtlIGluc3RhbGwgYW5kIHVuaW5zdGFsbCBm b3IgLS1zdGF0aWMgb3B0aW9uCistIEZpeCB1c2FnZSBvZiBfTVNDX1ZFUiBpbiBnemd1dHMuaCBh bmQgenV0aWwuaCBbVHJ1dGFdCistIFVwZGF0ZSByZWFkbWUudHh0IGluIGNvbnRyaWIvbWFzbXg2 NCBhbmQgbWFzbXg4NiB0byBhc3NlbWJsZQorCitDaGFuZ2VzIGluIDEuMi4zLjkgKDIxIEZlYiAy MDEwKQorLSBFeHB1bmdlIGd6aW8uYworLSBNb3ZlIGFzNDAwIGJ1aWxkIGluZm9ybWF0aW9uIHRv IG9sZAorLSBGaXggdXBkYXRlcyBpbiBjb250cmliL21pbml6aXAgYW5kIGNvbnRyaWIvdnN0dWRp bworLSBBZGQgY29uc3QgdG8gdnNucHJpbnRmIHRlc3QgaW4gY29uZmlndXJlIHRvIGF2b2lkIHdh cm5pbmdzIFtXZWlnZWx0XQorLSBEZWxldGUgemNvbmYuaCAobWFkZSBieSBjb25maWd1cmUpIFtX ZWlnZWx0XQorLSBDaGFuZ2UgemNvbmYuaW4uaCB0byB6Y29uZi5oLmluIHBlciBjb252ZW50aW9u IFtXZWlnZWx0XQorLSBDaGVjayBmb3IgTlVMTCBidWYgaW4gZ3pnZXRzKCkKKy0gUmV0dXJuIGVt cHR5IHN0cmluZyBmb3IgZ3pnZXRzKCkgd2l0aCBsZW4gPT0gMSAobGlrZSBmZ2V0cygpKQorLSBG aXggZGVzY3JpcHRpb24gb2YgZ3pnZXRzKCkgaW4gemxpYi5oIGZvciBlbmQtb2YtZmlsZSwgTlVM TCByZXR1cm4KKy0gVXBkYXRlIG1pbml6aXAgdG8gMS4xIFtWb2xsYW50XQorLSBBdm9pZCBNU1ZD IGxvc3Mgb2YgZGF0YSB3YXJuaW5ncyBpbiBnenJlYWQuYywgZ3p3cml0ZS5jCistIE5vdGUgaW4g emxpYi5oIHRoYXQgZ3plcnJvcigpIHNob3VsZCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGZyb20g RU9GCistIFJlbW92ZSB1c2Ugb2Ygc25wcmludGYoKSBmcm9tIGd6bGliLmMKKy0gRml4IGJ1ZyBp biBnenNlZWsoKQorLSBVcGRhdGUgY29udHJpYi92c3R1ZGlvLCBhZGRpbmcgdmM5IGFuZCB2YzEw IFtLdW5vLCBWb2xsYW50XQorLSBGaXggemNvbmYuaCBnZW5lcmF0aW9uIGluIENNYWtlTGlzdHMu dHh0IFtMb3dtYW5dCistIEltcHJvdmUgY29tbWVudHMgaW4gemNvbmYuaCB3aGVyZSBtb2RpZmll ZCBieSBjb25maWd1cmUKKworQ2hhbmdlcyBpbiAxLjIuMy44ICgxMyBGZWIgMjAxMCkKKy0gQ2xl YW4gdXAgdGV4dCBmaWxlcyAodGFicywgdHJhaWxpbmcgd2hpdGVzcGFjZSwgZXRjLikgW09iZXJo dW1lcl0KKy0gVXNlIHpfb2ZmNjRfdCBpbiBnel96ZXJvKCkgYW5kIGd6X3NraXAoKSB0byBtYXRj aCBzdGF0ZS0+c2tpcAorLSBBdm9pZCBjb21wYXJpc29uIHByb2JsZW0gd2hlbiBzaXplb2YoaW50 KSA9PSBzaXplb2Yoel9vZmY2NF90KQorLSBSZXZlcnQgdG8gTWFrZWZpbGUuaW4gZnJvbSAxLjIu My42IChsaXZlIHdpdGggdGhlIGNsdXR0ZXIpCistIEZpeCBtaXNzaW5nIGVycm9yIHJldHVybiBp biBnemZsdXNoKCksIGFkZCB6bGliLmggbm90ZQorLSBBZGQgKjY0IGZ1bmN0aW9ucyB0byB6bGli Lm1hcCBbTGV2aW5dCistIEZpeCBzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiBpbiBnel9jb21w KCkKKy0gVXNlIFNGTEFHUyB3aGVuIHRlc3Rpbmcgc2hhcmVkIGxpbmtpbmcgaW4gY29uZmlndXJl CistIEFkZCAtLTY0IG9wdGlvbiB0byAuL2NvbmZpZ3VyZSB0byB1c2UgLW02NCB3aXRoIGdjYwor LSBGaXggLi9jb25maWd1cmUgLS1oZWxwIHRvIGNvcnJlY3RseSBuYW1lIG9wdGlvbnMKKy0gSGF2 ZSBtYWtlIGZhaWwgaWYgYSB0ZXN0IGZhaWxzIFtMZXZpbl0KKy0gQXZvaWQgYnVmZmVyIG92ZXJy dW4gaW4gY29udHJpYi9tYXNteDY0L2d2bWF0NjQuYXNtIFtTaW1wc29uXQorLSBSZW1vdmUgYXNz ZW1ibGVyIG9iamVjdCBmaWxlcyBmcm9tIGNvbnRyaWIKKworQ2hhbmdlcyBpbiAxLjIuMy43ICgy NCBKYW4gMjAxMCkKKy0gQWx3YXlzIGd6b3BlbigpIHdpdGggT19MQVJHRUZJTEUgaWYgYXZhaWxh YmxlCistIEZpeCBnemRpcmVjdCgpIHRvIHdvcmsgaW1tZWRpYXRlbHkgYWZ0ZXIgZ3pvcGVuKCkg b3IgZ3pkb3BlbigpCistIE1ha2UgZ3pkaXJlY3QoKSBtb3JlIHByZWNpc2Ugd2hlbiB0aGUgc3Rh dGUgY2hhbmdlcyB3aGlsZSByZWFkaW5nCistIEltcHJvdmUgemxpYi5oIGRvY3VtZW50YXRpb24g aW4gbWFueSBwbGFjZXMKKy0gQ2F0Y2ggbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiBnel9v cGVuKCkKKy0gQ29tcGxldGUgY2xvc2Ugb3BlcmF0aW9uIGlmIHNlZWsgZm9yd2FyZCBpbiBnemNs b3NlX3coKSBmYWlscworLSBSZXR1cm4gWl9FUlJOTyBmcm9tIGd6Y2xvc2VfcigpIGlmIGNsb3Nl KCkgZmFpbHMKKy0gUmV0dXJuIFpfU1RSRUFNX0VSUk9SIGluc3RlYWQgb2YgRU9GIGZvciBnemNs b3NlKCkgYmVpbmcgcGFzc2VkIE5VTEwKKy0gUmV0dXJuIHplcm8gZm9yIGd6d3JpdGUoKSBlcnJv cnMgdG8gbWF0Y2ggemxpYi5oIGRlc2NyaXB0aW9uCistIFJldHVybiAtMSBvbiBnenB1dHMoKSBl cnJvciB0byBtYXRjaCB6bGliLmggZGVzY3JpcHRpb24KKy0gQWRkIHpjb25mLmluLmggdG8gYWxs b3cgcmVjb3ZlcnkgZnJvbSBjb25maWd1cmUgbW9kaWZpY2F0aW9uIFtXZWlnZWx0XQorLSBGaXgg c3RhdGljIGxpYnJhcnkgcGVybWlzc2lvbnMgaW4gTWFrZWZpbGUuaW4gW1dlaWdlbHRdCistIEF2 b2lkIHdhcm5pbmdzIGluIGNvbmZpZ3VyZSB0ZXN0cyB0aGF0IGhpZGUgZnVuY3Rpb25hbGl0eSBb V2VpZ2VsdF0KKy0gQWRkICpCU0QgYW5kIERyYWdvbkZseSB0byBMaW51eCBjYXNlIGluIGNvbmZp Z3VyZSBbZ2VudG9vIDEyMzU3MV0KKy0gQ2hhbmdlIGxpYnpkbGwuYSB0byBsaWJ6LmRsbC5hIGlu IHdpbjMyL01ha2VmaWxlLmdjYyBbZ2VudG9vIDI4ODIxMl0KKy0gQXZvaWQgYWNjZXNzIG9mIHVu aW5pdGlhbGl6ZWQgZGF0YSBmb3IgZmlyc3QgaW5mbGF0ZVJlc2V0MiBjYWxsIFtHb21lc10KKy0g S2VlcCBvYmplY3QgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgdG8gcmVkdWNlIHRoZSBjbHV0dGVy IHNvbWV3aGF0CistIFJlbW92ZSBkZWZhdWx0IE1ha2VmaWxlIGFuZCB6bGliZGVmcy5oLCBhZGQg ZHVtbXkgTWFrZWZpbGUKKy0gQWRkIG5ldyBleHRlcm5hbCBmdW5jdGlvbnMgdG8gWl9QUkVGSVgs IHJlbW92ZSBkdXBsaWNhdGVzLCB6X3pfIC0+IHpfCistIFJlbW92ZSB6bGliZGVmcy5oIGNvbXBs ZXRlbHkgLS0gbW9kaWZ5IHpjb25mLmggaW5zdGVhZAorCitDaGFuZ2VzIGluIDEuMi4zLjYgKDE3 IEphbiAyMDEwKQorLSBBdm9pZCB2b2lkICogYXJpdGhtZXRpYyBpbiBnenJlYWQuYyBhbmQgZ3p3 cml0ZS5jCistIE1ha2UgY29tcGlsZXJzIGhhcHBpZXIgd2l0aCBjb25zdCBjaGFyICogZm9yIGd6 X2Vycm9yIG1lc3NhZ2UKKy0gQXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nIGluIGluZmxh dGUuYworLSBBdm9pZCBzaWduZWQtdW5zaWduZWQgY29tcGFyaXNvbiB3YXJuaW5nIGluIGluZmxh dGUuYworLSBJbmRlbnQgI3ByYWdtYSdzIGZvciB0cmFkaXRpb25hbCBDCistIEZpeCB1c2FnZSBv ZiBzdHJ3aW5lcnJvcigpIGluIGdsaWIuYywgY2hhbmdlIHRvIGd6X3N0cndpbmVycm9yKCkKKy0g Q29ycmVjdCBlbWFpbCBhZGRyZXNzIGluIGNvbmZpZ3VyZSBmb3Igc3lzdGVtIG9wdGlvbnMKKy0g VXBkYXRlIG1ha2Vfdm1zLmNvbSBhbmQgYWRkIG1ha2Vfdm1zLmNvbSB0byBjb250cmliL21pbml6 aXAgW1ppbnNlcl0KKy0gVXBkYXRlIHpsaWIubWFwIFtCcm93bl0KKy0gRml4IE1ha2VmaWxlLmlu IGZvciBTb2xhcmlzIDEwIG1ha2Ugb2YgZXhhbXBsZTY0IGFuZCBtaW5pemlwNjQgW1Rvcm9rXQor LSBBcHBseSB2YXJpb3VzIGZpeGVzIHRvIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIEFkZCBj aGVja3Mgb24gbGVuIGluIGd6cmVhZCgpIGFuZCBnendyaXRlKCkKKy0gQWRkIGVycm9yIG1lc3Nh Z2UgZm9yIG5vIG1vcmUgcm9vbSBmb3IgZ3p1bmdldGMoKQorLSBSZW1vdmUgemxpYiB2ZXJzaW9u IGNoZWNrIGluIGd6d3JpdGUoKQorLSBEZWZlciBjb21wcmVzc2lvbiBvZiBnenByaW50ZigpIHJl c3VsdCB1bnRpbCBuZWVkIHRvCistIFVzZSBzbnByaW50ZigpIGluIGd6ZG9wZW4oKSBpZiBhdmFp bGFibGUKKy0gUmVtb3ZlIFVTRV9NTUFQIGNvbmZpZ3VyYXRpb24gZGV0ZXJtaW5hdGlvbiAob25s eSB1c2VkIGJ5IG1pbmlnemlwKQorLSBSZW1vdmUgZXhhbXBsZXMvcGlnei5jIChhdmFpbGFibGUg c2VwYXJhdGVseSkKKy0gVXBkYXRlIGV4YW1wbGVzL2d1bi5jIHRvIDEuNgorCitDaGFuZ2VzIGlu IDEuMi4zLjUgKDggSmFuIDIwMTApCistIEFkZCBzcGFjZSBhZnRlciAjaWYgaW4genV0aWwuaCBm b3Igc29tZSBjb21waWxlcnMKKy0gRml4IHJlbGF0aXZlbHkgaGFybWxlc3MgYnVnIGluIGRlZmxh dGVfZmFzdCgpIFtFeGFyZXZza3ldCistIEZpeCBzYW1lIHByb2JsZW0gaW4gZGVmbGF0ZV9zbG93 KCkKKy0gQWRkICQoU0hBUkVETElCVikgdG8gTElCUyBpbiBNYWtlZmlsZS5pbiBbQnJvd25dCist IEFkZCBkZWZsYXRlX3JsZSgpIGZvciBmYXN0ZXIgWl9STEUgc3RyYXRlZ3kgcnVuLWxlbmd0aCBl bmNvZGluZworLSBBZGQgZGVmbGF0ZV9odWZmKCkgZm9yIGZhc3RlciBaX0hVRkZNQU5fT05MWSBl bmNvZGluZworLSBDaGFuZ2UgbmFtZSBvZiAid3JpdGUiIHZhcmlhYmxlIGluIGluZmZhc3QuYyB0 byBhdm9pZCBsaWJyYXJ5IGNvbGxpc2lvbnMKKy0gRml4IHByZW1hdHVyZSBFT0YgZnJvbSBnenJl YWQoKSBpbiBnemlvLmMgW0Jyb3duXQorLSBVc2UgemxpYiBoZWFkZXIgd2luZG93IHNpemUgaWYg d2luZG93Qml0cyBpcyAwIGluIGluZmxhdGVJbml0MigpCistIFJlbW92ZSBjb21wcmVzc0JvdW5k KCkgY2FsbCBpbiBkZWZsYXRlLmMgdG8gYXZvaWQgbGlua2luZyBjb21wcmVzcy5vCistIFJlcGxh Y2UgdXNlIG9mIGVycm5vIGluIGd6KiB3aXRoIGZ1bmN0aW9ucywgc3VwcG9ydCBXaW5DRSBbQWx2 ZXNdCistIFByb3ZpZGUgYWx0ZXJuYXRpdmUgdG8gcGVycm9yKCkgaW4gbWluaWd6aXAuYyBmb3Ig V2luQ0UgW0FsdmVzXQorLSBEb24ndCB1c2UgX3ZzbnByaW50ZiBvbiBsYXRlciB2ZXJzaW9ucyBv ZiBNU1ZDIFtMb3dtYW5dCistIEFkZCBDTWFrZSBidWlsZCBzY3JpcHQgYW5kIGlucHV0IGZpbGUg W0xvd21hbl0KKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcCB0byAxLjEgW1N2ZW5zc29uLCBWb2xs YW50XQorLSBNb3ZlZCBuaW50ZW5kb2RzIGRpcmVjdG9yeSBmcm9tIGNvbnRyaWIgdG8gLgorLSBS ZXBsYWNlIGd6aW8uYyB3aXRoIGEgbmV3IHNldCBvZiByb3V0aW5lcyB3aXRoIHRoZSBzYW1lIGZ1 bmN0aW9uYWxpdHkKKy0gQWRkIGd6YnVmZmVyKCksIGd6b2Zmc2V0KCksIGd6Y2xvc2VfcigpLCBn emNsb3NlX3coKSBhcyBwYXJ0IG9mIGFib3ZlCistIFVwZGF0ZSBjb250cmliL21pbml6aXAgdG8g MS4xYgorLSBDaGFuZ2UgZ3plb2YoKSB0byByZXR1cm4gMCBvbiBlcnJvciBpbnN0ZWFkIG9mIC0x IHRvIGFncmVlIHdpdGggemxpYi5oCisKK0NoYW5nZXMgaW4gMS4yLjMuNCAoMjEgRGVjIDIwMDkp CistIFVzZSBvbGQgc2Nob29sIC5TVUZGSVhFUyBpbiBNYWtlZmlsZS5pbiBmb3IgRnJlZUJTRCBj b21wYXRpYmlsaXR5CistIFVwZGF0ZSBjb21tZW50cyBpbiBjb25maWd1cmUgYW5kIE1ha2VmaWxl LmluIGZvciBkZWZhdWx0IC0tc2hhcmVkCistIEZpeCB0ZXN0IC16J3MgaW4gY29uZmlndXJlIFtN YXJxdWVzc10KKy0gQnVpbGQgZXhhbXBsZXNoIGFuZCBtaW5pZ3ppcHNoIHdoZW4gbm90IHRlc3Rp bmcKKy0gQ2hhbmdlIE5VTEwncyB0byBaX05VTEwncyBpbiBkZWZsYXRlLmMgYW5kIGluIGNvbW1l bnRzIGluIHpsaWIuaAorLSBJbXBvcnQgTERGTEFHUyBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbiBj b25maWd1cmUKKy0gRml4IGNvbmZpZ3VyZSB0byBwb3B1bGF0ZSBTRkxBR1Mgd2l0aCBkaXNjb3Zl cmVkIENGTEFHUyBvcHRpb25zCistIEFkYXB0IG1ha2Vfdm1zLmNvbSB0byB0aGUgbmV3IE1ha2Vm aWxlLmluIFtaaW5zZXJdCistIEFkZCB6bGliMmFuc2kgc2NyaXB0IGZvciBDKysgY29tcGlsYXRp b24gW01hcnF1ZXNzXQorLSBBZGQgX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgdGVzdCB0byBtYWtlIHRl c3QgKHdoZW4gYXBwbGljYWJsZSkKKy0gQWRkIEFNRDY0IGFzc2VtYmxlciBjb2RlIGZvciBsb25n ZXN0IG1hdGNoIHRvIGNvbnRyaWIgW1RldGVyaW5dCistIEluY2x1ZGUgb3B0aW9ucyBmcm9tICRT RkxBR1Mgd2hlbiBkb2luZyAkTERTSEFSRUQKKy0gU2ltcGxpZnkgNjQtYml0IGZpbGUgc3VwcG9y dCBieSBpbnRyb2R1Y2luZyB6X29mZjY0X3QgdHlwZQorLSBNYWtlIHNoYXJlZCBvYmplY3QgZmls ZXMgaW4gb2JqcyBkaXJlY3RvcnkgdG8gd29yayBhcm91bmQgb2xkIFN1biBjYworLSBVc2Ugb25s eSB0aHJlZS1wYXJ0IHZlcnNpb24gbnVtYmVyIGZvciBEYXJ3aW4gc2hhcmVkIGNvbXBpbGVzCist IEFkZCByYyBvcHRpb24gdG8gYXIgaW4gTWFrZWZpbGUuaW4gZm9yIHdoZW4gLi9jb25maWd1cmUg bm90IHJ1bgorLSBBZGQgLVdJLC1ycGF0aCwuIHRvIExERkxBR1MgZm9yIE9TRiAxIFY0KgorLSBT ZXQgTERfTElCUkFSWU4zMl9QQVRIIGZvciBTR0kgSVJJWCBzaGFyZWQgY29tcGlsZQorLSBQcm90 ZWN0IGFnYWluc3QgX0ZJTEVfT0ZGU0VUX0JJVFMgYmVpbmcgZGVmaW5lZCB3aGVuIGNvbXBpbGlu ZyB6bGliCistIFJlbmFtZSBNYWtlZmlsZS5pbiB0YXJnZXRzIGFsbHN0YXRpYyB0byBzdGF0aWMg YW5kIGFsbHNoYXJlZCB0byBzaGFyZWQKKy0gRml4IHN0YXRpYyBhbmQgc2hhcmVkIE1ha2VmaWxl LmluIHRhcmdldHMgdG8gYmUgaW5kZXBlbmRlbnQKKy0gQ29ycmVjdCBlcnJvciByZXR1cm4gYnVn IGluIGd6X29wZW4oKSBieSBzZXR0aW5nIHN0YXRlIFtCcm93bl0KKy0gUHV0IHNwYWNlcyBiZWZv cmUgOzsncyBpbiBjb25maWd1cmUgZm9yIGJldHRlciBzaCBjb21wYXRpYmlsaXR5CistIEFkZCBw aWd6LmMgKHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGd6aXApIHRvIGV4YW1wbGVzLworLSBD b3JyZWN0IGNvbnN0YW50IGluIGNyYzMyLmMgdG8gVUwgW0xldmVudGhhbF0KKy0gUmVqZWN0IG5l Z2F0aXZlIGxlbmd0aHMgaW4gY3JjMzJfY29tYmluZSgpCistIEFkZCBpbmZsYXRlUmVzZXQyKCkg ZnVuY3Rpb24gdG8gd29yayBsaWtlIGluZmxhdGVFbmQoKS9pbmZsYXRlSW5pdDIoKQorLSBJbmNs dWRlIHN5cy90eXBlcy5oIGZvciBfTEFSR0VGSUxFNjRfU09VUkNFIFtCcm93bl0KKy0gQ29ycmVj dCB0eXBvIGluIGRvYy9hbGdvcml0aG0udHh0IFtKYW5pa10KKy0gRml4IGJ1ZyBpbiBhZGxlcjMy X2NvbWJpbmUoKSBbWmh1XQorLSBDYXRjaCBtaXNzaW5nLWVuZC1vZi1ibG9jay1jb2RlIGVycm9y IGluIGFsbCBpbmZsYXRlcyBhbmQgaW4gcHVmZgorICAgIEFzc3VyZXMgdGhhdCByYW5kb20gaW5w dXQgdG8gaW5mbGF0ZSBldmVudHVhbGx5IHJlc3VsdHMgaW4gYW4gZXJyb3IKKy0gQWRkZWQgZW5v dWdoLmMgKGNhbGN1bGF0aW9uIG9mIEVOT1VHSCBmb3IgaW5mdHJlZXMuaCkgdG8gZXhhbXBsZXMv CistIFVwZGF0ZSBFTk9VR0ggYW5kIGl0cyB1c2FnZSB0byByZWZsZWN0IGRpc2NvdmVyZWQgYm91 bmRzCistIEZpeCBnemVycm9yKCkgZXJyb3IgcmVwb3J0IG9uIGVtcHR5IGlucHV0IGZpbGUgW0Jy b3duXQorLSBBZGQgdXNoIGNhc3RzIGluIHRyZWVzLmMgdG8gYXZvaWQgcGVkYW50aWMgcnVudGlt ZSBlcnJvcnMKKy0gRml4IHR5cG8gaW4gemxpYi5oIHVuY29tcHJlc3MoKSBkZXNjcmlwdGlvbiBb UmVpc3NdCistIENvcnJlY3QgaW5mbGF0ZSgpIGNvbW1lbnRzIHdpdGggcmVnYXJkIHRvIGF1dG9t YXRpYyBoZWFkZXIgZGV0ZWN0aW9uCistIFJlbW92ZSBkZXByZWNhdGlvbiBjb21tZW50IG9uIFpf UEFSVElBTF9GTFVTSCAoaXQgc3RheXMpCistIFB1dCBuZXcgdmVyc2lvbiBvZiBnemxvZyAoMi4w KSBpbiBleGFtcGxlcyB3aXRoIGludGVycnVwdGlvbiByZWNvdmVyeQorLSBBZGQgcHVmZiBjb21w aWxlIG9wdGlvbiB0byBwZXJtaXQgaW52YWxpZCBkaXN0YW5jZS10b28tZmFyIHN0cmVhbXMKKy0g QWRkIHB1ZmYgVEVTVCBjb21tYW5kIG9wdGlvbnMsIGFiaWxpdHkgdG8gcmVhZCBwaXBlZCBpbnB1 dAorLSBQcm90b3R5cGUgdGhlICo2NCBmdW5jdGlvbnMgaW4gemxpYi5oIHdoZW4gX0ZJTEVfT0ZG U0VUX0JJVFMgPT0gNjQsIGJ1dAorICBfTEFSR0VGSUxFNjRfU09VUkNFIG5vdCBkZWZpbmVkCist IEZpeCBaX0ZVTExfRkxVU0ggdG8gdHJ1bHkgZXJhc2UgdGhlIHBhc3QgYnkgcmVzZXR0aW5nIHMt PnN0cnN0YXJ0CistIEZpeCBkZWZsYXRlU2V0RGljdGlvbmFyeSgpIHRvIHVzZSBhbGwgMzJLIGZv ciBvdXRwdXQgY29uc2lzdGVuY3kKKy0gUmVtb3ZlIGV4dHJhbmVvdXMgI2RlZmluZSBNSU5fTE9P S0FIRUFEIGluIGRlZmxhdGUuYyAoaW4gZGVmbGF0ZS5oKQorLSBDbGVhciBieXRlcyBhZnRlciBk ZWZsYXRlIGxvb2thaGVhZCB0byBhdm9pZCB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhCistIENo YW5nZSBhIGxpbWl0IGluIGluZnRyZWVzLmMgdG8gYmUgbW9yZSB0cmFuc3BhcmVudCB0byBDb3Zl cml0eSBQcmV2ZW50CistIFVwZGF0ZSB3aW4zMi96bGliLmRlZiB3aXRoIGV4cG9ydGVkIHN5bWJv bHMgZnJvbSB6bGliLmgKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvcnMgaW4gemxpYi5oIFtXaWxs ZW0sIFNvYnJhZG9dCistIEFsbG93IFpfQkxPQ0sgZm9yIGRlZmxhdGUoKSB0byBmb3JjZSBhIG5l dyBibG9jaworLSBBbGxvdyBuZWdhdGl2ZSBiaXRzIGluIGluZmxhdGVQcmltZSgpIHRvIGRlbGV0 ZSBleGlzdGluZyBiaXQgYnVmZmVyCistIEFkZCBaX1RSRUVTIGZsdXNoIG9wdGlvbiB0byBpbmZs YXRlKCkgdG8gcmV0dXJuIGF0IGVuZCBvZiB0cmVlcworLSBBZGQgaW5mbGF0ZU1hcmsoKSB0byBy ZXR1cm4gY3VycmVudCBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcmFuZG9tIGFjY2VzcworLSBBZGQg TWFrZWZpbGUgZm9yIE5pbnRlbmRvRFMgdG8gY29udHJpYiBbQ29zdGFdCistIEFkZCAtdyBpbiBj b25maWd1cmUgY29tcGlsZSB0ZXN0cyB0byBhdm9pZCBzcHVyaW91cyB3YXJuaW5ncyBbQmV1Y2xl cl0KKy0gRml4IHR5cG9zIGluIHpsaWIuaCBjb21tZW50cyBmb3IgZGVmbGF0ZVNldERpY3Rpb25h cnkoKQorLSBGaXggRU9GIGRldGVjdGlvbiBpbiB0cmFuc3BhcmVudCBnenJlYWQoKSBbTWFpZXJd CisKK0NoYW5nZXMgaW4gMS4yLjMuMyAoMiBPY3RvYmVyIDIwMDYpCistIE1ha2UgLS1zaGFyZWQg dGhlIGRlZmF1bHQgZm9yIGNvbmZpZ3VyZSwgYWRkIGEgLS1zdGF0aWMgb3B0aW9uCistIEFkZCBj b21waWxlIG9wdGlvbiB0byBwZXJtaXQgaW52YWxpZCBkaXN0YW5jZS10b28tZmFyIHN0cmVhbXMK Ky0gQWRkIGluZmxhdGVVbmRlcm1pbmUoKSBmdW5jdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byBl bmFibGUgYWJvdmUKKy0gUmVtb3ZlIHVzZSBvZiAidGhpcyIgdmFyaWFibGUgbmFtZSBmb3IgQysr IGNvbXBhdGliaWxpdHkgW01hcnF1ZXNzXQorLSBBZGQgdGVzdGluZyBvZiBzaGFyZWQgbGlicmFy eSBpbiBtYWtlIHRlc3QsIGlmIHNoYXJlZCBsaWJyYXJ5IGJ1aWx0CistIFVzZSBmdGVsbG8oKSBh bmQgZnNlZWtvKCkgaWYgYXZhaWxhYmxlIGluc3RlYWQgb2YgZnRlbGwoKSBhbmQgZnNlZWsoKQor LSBQcm92aWRlIHR3byB2ZXJzaW9ucyBvZiBhbGwgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZSB6X29m Zl90IHR5cGUgZm9yCisgIGJpbmFyeSBjb21wYXRpYmlsaXR5IC0tIGEgbm9ybWFsIHZlcnNpb24g YW5kIGEgNjQtYml0IG9mZnNldCB2ZXJzaW9uLAorICBwZXIgdGhlIExhcmdlIEZpbGUgU3VwcG9y dCBFeHRlbnNpb24gd2hlbiBfTEFSR0VGSUxFNjRfU09VUkNFIGlzCisgIGRlZmluZWQ7IHVzZSB0 aGUgNjQtYml0IHZlcnNpb25zIGJ5IGRlZmF1bHQgd2hlbiBfRklMRV9PRkZTRVRfQklUUworICBp cyBkZWZpbmVkIHRvIGJlIDY0CistIEFkZCBhIC0tdW5hbWU9IG9wdGlvbiB0byBjb25maWd1cmUg dG8gcGVyaGFwcyBoZWxwIHdpdGggY3Jvc3MtY29tcGlsaW5nCisKK0NoYW5nZXMgaW4gMS4yLjMu MiAoMyBTZXB0ZW1iZXIgMjAwNikKKy0gVHVybiBvZmYgc2lsbHkgQm9ybGFuZCB3YXJuaW5ncyBb SGF5XQorLSBVc2Ugb2ZmNjRfdCBhbmQgZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugd2hlbiBw cmVzZW50CistIEZpeCBtaXNzaW5nIGRlcGVuZGVuY3kgb24gaW5mZml4ZWQuaCBpbiBNYWtlZmls ZS5pbgorLSBSaWcgY29uZmlndXJlIC0tc2hhcmVkIHRvIGJ1aWxkIGJvdGggc2hhcmVkIGFuZCBz dGF0aWMgW1RlcmVkZXNhaSwgVHJ1dGFdCistIFJlbW92ZSB6Y29uZi5pbi5oIGFuZCBpbnN0ZWFk IGNyZWF0ZSBhIG5ldyB6bGliZGVmcy5oIGZpbGUKKy0gRml4IGNvbnRyaWIvbWluaXppcC91bnpp cC5jIG5vbi1lbmNyeXB0ZWQgYWZ0ZXIgZW5jcnlwdGVkIFtWb2xsYW50XQorLSBBZGQgdHJlZWJ1 aWxkLnhtbCAoc2VlIGh0dHA6Ly90cmVlYnVpbGQubWV0dXguZGUvKSBbV2VpZ2VsdF0KKworQ2hh bmdlcyBpbiAxLjIuMy4xICgxNiBBdWd1c3QgMjAwNikKKy0gQWRkIHdhdGNvbSBkaXJlY3Rvcnkg d2l0aCBPcGVuV2F0Y29tIG1ha2UgZmlsZXMgW0RhbmllbF0KKy0gUmVtb3ZlICN1bmRlZiBvZiBG QVIgaW4gemNvbmYuaW4uaCBmb3IgTVZTIFtGZWR0a2VdCistIFVwZGF0ZSBtYWtlX3Ztcy5jb20g W1ppbnNlcl0KKy0gVXNlIC1mUElDIGZvciBzaGFyZWQgYnVpbGQgaW4gY29uZmlndXJlIFtUZXJl ZGVzYWksIE5pY2hvbHNvbl0KKy0gVXNlIG9ubHkgbWFqb3IgdmVyc2lvbiBudW1iZXIgZm9yIGxp Ynouc28gb24gSVJJWCBhbmQgT1NGMSBbUmVpbmhvbGR0c2VuXQorLSBVc2UgZmRvcGVuKCkgKG5v dCBfZmRvcGVuKCkpIGZvciBJbnRlcml4IGluIHp1dGlsLmggW0LDpGNrXQorLSBBZGQgc29tZSBG QVEgZW50cmllcyBhYm91dCB0aGUgY29udHJpYiBkaXJlY3RvcnkKKy0gVXBkYXRlIHRoZSBNVlMg cXVlc3Rpb24gaW4gdGhlIEZBUQorLSBBdm9pZCBleHRyYW5lb3VzIHJlYWRzIGFmdGVyIEVPRiBp biBnemlvLmMgW0Jyb3duXQorLSBDb3JyZWN0IHNwZWxsaW5nIG9mICJzdWNjZXNzZnVsbHkiIGlu IGd6aW8uYyBbUmFuZGVycy1QZWhyc29uXQorLSBBZGQgY29tbWVudHMgdG8gemxpYi5oIGFib3V0 IGd6ZXJyb3IoKSB1c2FnZSBbQnJvd25dCistIFNldCBleHRyYSBmbGFncyBpbiBnemlwIGhlYWRl ciBpbiBnem9wZW4oKSBsaWtlIGRlZmxhdGUoKSBkb2VzCistIE1ha2UgY29uZmlndXJlIG9wdGlv bnMgbW9yZSBjb21wYXRpYmxlIHdpdGggZG91YmxlLWRhc2ggY29udmVudGlvbnMKKyAgW1dlaWdl bHRdCistIENsZWFuIHVwIGNvbXBpbGF0aW9uIHVuZGVyIFNvbGFyaXMgU3VuU3R1ZGlvIGNjIFtS b3dlLCBSZWluaG9sZHRzZW5dCistIEZpeCB1bmluc3RhbGwgdGFyZ2V0IGluIE1ha2VmaWxlLmlu IFtUcnV0YV0KKy0gQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IFtXZWlnZWx0XQorLSBVc2UgJChERVNU RElSKSBtYWNybyBpbiBNYWtlZmlsZS5pbiBbUmVpbmhvbGR0c2VuLCBXZWlnZWx0XQorLSBSZXBs YWNlIHNldF9kYXRhX3R5cGUoKSB3aXRoIGEgbW9yZSBhY2N1cmF0ZSBkZXRlY3RfZGF0YV90eXBl KCkgaW4KKyAgdHJlZXMuYywgYWNjb3JkaW5nIHRvIHRoZSB0eHR2c2Jpbi50eHQgZG9jdW1lbnQg W1RydXRhXQorLSBTd2FwIHRoZSBvcmRlciBvZiAjaW5jbHVkZSA8c3RkaW8uaD4gYW5kICNpbmNs dWRlICJ6bGliLmgiIGluCisgIGd6aW8uYywgZXhhbXBsZS5jIGFuZCBtaW5pZ3ppcC5jIFtUcnV0 YV0KKy0gU2h1dCB1cCBhbm5veWluZyBWUzIwMDUgd2FybmluZ3MgYWJvdXQgc3RhbmRhcmQgQyBk ZXByZWNhdGlvbiBbUm93ZSwKKyAgVHJ1dGFdICh3aGVyZT8pCistIEZpeCB0YXJnZXQgImNsZWFu IiBmcm9tIHdpbjMyL01ha2VmaWxlLmJvciBbVHJ1dGFdCistIENyZWF0ZSAucGRiIGFuZCAubWFu aWZlc3QgZmlsZXMgaW4gd2luMzIvbWFrZWZpbGUubXNjIFtaaWVnbGVyLCBSb3dlXQorLSBVcGRh dGUgemxpYiB3d3cgaG9tZSBhZGRyZXNzIGluIHdpbjMyL0RMTF9GQVEudHh0IFtUcnV0YV0KKy0g VXBkYXRlIGNvbnRyaWIvbWFzbXg4Ni9pbmZmYXMzMi5hc20gZm9yIFZTMjAwNSBbVm9sbGFudCwg VmFuIFdhc3NlbmhvdmVdCistIEVuYWJsZSBicm93c2UgaW5mbyBpbiB0aGUgIkRlYnVnIiBhbmQg IkFTTSBEZWJ1ZyIgY29uZmlndXJhdGlvbnMgaW4KKyAgdGhlIFZpc3VhbCBDKysgNiBwcm9qZWN0 LCBhbmQgc2V0IChub24tQVNNKSAiRGVidWciIGFzIGRlZmF1bHQgW1RydXRhXQorLSBBZGQgcGtn Y29uZmlnIHN1cHBvcnQgW1dlaWdlbHRdCistIEFkZCBaTElCX1ZFUl9NQUpPUiwgWkxJQl9WRVJf TUlOT1IgYW5kIFpMSUJfVkVSX1JFVklTSU9OIGluIHpsaWIuaCwKKyAgZm9yIHVzZSBpbiB3aW4z Mi96bGliMS5yYyBbUG9sdXNoaW4sIFJvd2UsIFRydXRhXQorLSBBZGQgYSBkb2N1bWVudCB0aGF0 IGV4cGxhaW5zIHRoZSBuZXcgdGV4dCBkZXRlY3Rpb24gc2NoZW1lIHRvCisgIGRvYy90eHR2c2Jp bi50eHQgW1RydXRhXQorLSBBZGQgcmZjMTk1MC50eHQsIHJmYzE5NTEudHh0IGFuZCByZmMxOTUy LnR4dCB0byBkb2MvIFtUcnV0YV0KKy0gTW92ZSBhbGdvcml0aG0udHh0IGludG8gZG9jLyBbVHJ1 dGFdCistIFN5bmNocm9uaXplIEZBUSB3aXRoIHdlYnNpdGUKKy0gRml4IGNvbXByZXNzQm91bmQo KSwgd2FzIGxvdyBmb3Igc29tZSBwYXRob2xvZ2ljYWwgY2FzZXMgW0ZlYXJubGV5XQorLSBUYWtl IGludG8gYWNjb3VudCB3cmFwcGVyIHZhcmlhdGlvbnMgaW4gZGVmbGF0ZUJvdW5kKCkKKy0gU2V0 IGV4YW1wbGVzL3pwaXBlLmMgaW5wdXQgYW5kIG91dHB1dCB0byBiaW5hcnkgbW9kZSBmb3IgV2lu ZG93cworLSBVcGRhdGUgZXhhbXBsZXMvemxpYl9ob3cuaHRtbCB3aXRoIG5ldyB6cGlwZS5jIChh bHNvIHdlYiBzaXRlKQorLSBGaXggc29tZSB3YXJuaW5ncyBpbiBleGFtcGxlcy9nemxvZy5jIGFu ZCBleGFtcGxlcy96cmFuLmMgKGl0IHNlZW1zCisgIHRoYXQgZ2NjIGJlY2FtZSBwaWNraWVyIGlu IDQuMCkKKy0gQWRkIHpsaWIubWFwIGZvciBMaW51eDogIkFsbCBzeW1ib2xzIGZyb20gemxpYi0x LjEuNCByZW1haW4KKyAgdW4tdmVyc2lvbmVkLCB0aGUgcGF0Y2ggYWRkcyB2ZXJzaW9uaW5nIG9u bHkgZm9yIHN5bWJvbHMgaW50cm9kdWNlZCBpbgorICB6bGliLTEuMi4wIG9yIGxhdGVyLiAgSXQg YWxzbyBkZWNsYXJlcyBhcyBsb2NhbCB0aG9zZSBzeW1ib2xzIHdoaWNoIGFyZQorICBub3QgZGVz aWduZWQgdG8gYmUgZXhwb3J0ZWQuIiBbTGV2aW5dCistIFVwZGF0ZSBaX1BSRUZJWCBsaXN0IGlu IHpjb25mLmluLmgsIGFkZCAtLXpwcmVmaXggb3B0aW9uIHRvIGNvbmZpZ3VyZQorLSBEbyBub3Qg aW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGljIGJ5IGRlZmF1bHQgaW4gdHJlZXMuYywgYWRkIGEgcmVz cG9uc2UKKyAgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlMgdG8gaW5pdGlhbGl6ZSB0aGVtIGlmIG5l ZWRlZCBbTWFycXVlc3NdCistIERvbid0IHVzZSBzdHJlcnJvcigpIGluIGd6aW8uYyB1bmRlciBX aW5DRSBbWWFraW1vdl0KKy0gRG9uJ3QgdXNlIGVycm5vLmggaW4genV0aWwuaCB1bmRlciBXaW5D RSBbWWFraW1vdl0KKy0gTW92ZSBhcmd1bWVudHMgZm9yIEFSIHRvIGl0cyB1c2FnZSB0byBhbGxv dyByZXBsYWNpbmcgYXIgW01hcm90XQorLSBBZGQgSEFWRV9WSVNJQklMSVRZX1BSQUdNQSBpbiB6 Y29uZi5pbi5oIGZvciBNb3ppbGxhIFtSYW5kZXJzLVBlaHJzb25dCistIEltcHJvdmUgaW5mbGF0 ZUluaXQoKSBhbmQgaW5mbGF0ZUluaXQyKCkgZG9jdW1lbnRhdGlvbgorLSBGaXggc3RydWN0dXJl IHNpemUgY29tbWVudCBpbiBpbmZsYXRlLmgKKy0gQ2hhbmdlIGNvbmZpZ3VyZSBoZWxwIG9wdGlv biBmcm9tIC0taCogdG8gLS1oZWxwIFtTYW50b3NdCisKK0NoYW5nZXMgaW4gMS4yLjMgKDE4IEp1 bHkgMjAwNSkKKy0gQXBwbHkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBmaXhlcyB0byBjb250cmli L2luZmJhY2s5IGFzIHdlbGwKKy0gQ2xlYW4gdXAgc29tZSB0ZXh0IGZpbGVzIChjYXJyaWFnZSBy ZXR1cm5zLCB0cmFpbGluZyBzcGFjZSkKKy0gVXBkYXRlIHRlc3R6bGliLCB2c3R1ZGlvLCBtYXNt eDY0LCBhbmQgbWFzbXg4NiBpbiBjb250cmliIFtWb2xsYW50XQorCitDaGFuZ2VzIGluIDEuMi4y LjQgKDExIEp1bHkgMjAwNSkKKy0gQWRkIGluZmxhdGVQcmltZSgpIGZ1bmN0aW9uIGZvciBzdGFy dGluZyBpbmZsYXRpb24gYXQgYml0IGJvdW5kYXJ5CistIEF2b2lkIHNvbWUgVmlzdWFsIEMgd2Fy bmluZ3MgaW4gZGVmbGF0ZS5jCistIEF2b2lkIG1vcmUgc2lsbHkgVmlzdWFsIEMgd2FybmluZ3Mg aW4gaW5mbGF0ZS5jIGFuZCBpbmZ0cmVlcy5jIGZvciA2NC1iaXQKKyAgY29tcGlsZQorLSBGaXgg c29tZSBzcGVsbGluZyBlcnJvcnMgaW4gY29tbWVudHMgW0JldHRzXQorLSBDb3JyZWN0IGluZmxh dGVJbml0MigpIGVycm9yIHJldHVybiBkb2N1bWVudGF0aW9uIGluIHpsaWIuaAorLSBBZGQgenJh bi5jIGV4YW1wbGUgb2YgY29tcHJlc3NlZCBkYXRhIHJhbmRvbSBhY2Nlc3MgdG8gZXhhbXBsZXMK KyAgZGlyZWN0b3J5LCBzaG93cyB1c2Ugb2YgaW5mbGF0ZVByaW1lKCkKKy0gRml4IGNhc3QgZm9y IGFzc2lnbm1lbnRzIHRvIHN0cm0tPnN0YXRlIGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jCist IEZpeCB6bGliQ29tcGlsZUZsYWdzKCkgaW4genV0aWwuYyB0byB1c2UgMUwgZm9yIGxvbmcgc2hp ZnRzIFtPYmVyaHVtZXJdCistIE1vdmUgZGVjbGFyYXRpb25zIG9mIGdmMiBmdW5jdGlvbnMgdG8g cmlnaHQgcGxhY2UgaW4gY3JjMzIuYyBbT2Jlcmh1bWVyXQorLSBBZGQgY2FzdCBpbiB0cmVlcy5j IHQgYXZvaWQgYSB3YXJuaW5nIFtPYmVyaHVtZXJdCistIEF2b2lkIHNvbWUgd2FybmluZ3MgaW4g Zml0YmxrLmMsIGd1bi5jLCBnempvaW4uYyBpbiBleGFtcGxlcyBbT2Jlcmh1bWVyXQorLSBVcGRh dGUgbWFrZV92bXMuY29tIFtaaW5zZXJdCistIEluaXRpYWxpemUgc3RhdGUtPndyaXRlIGluIGlu ZmxhdGVSZXNldCgpIHNpbmNlIGNvcGllZCBpbiBpbmZsYXRlX2Zhc3QoKQorLSBCZSBtb3JlIHN0 cmljdCBvbiBpbmNvbXBsZXRlIGNvZGUgc2V0cyBpbiBpbmZsYXRlX3RhYmxlKCkgYW5kIGluY3Jl YXNlCisgIEVOT1VHSCBhbmQgTUFYRCAtLSB0aGlzIHJlcGFpcnMgYSBwb3NzaWJsZSBzZWN1cml0 eSB2dWxuZXJhYmlsaXR5IGZvcgorICBpbnZhbGlkIGluZmxhdGUgaW5wdXQuICBUaGFua3MgdG8g VGF2aXMgT3JtYW5keSBhbmQgTWFya3VzIE9iZXJodW1lciBmb3IKKyAgZGlzY292ZXJpbmcgdGhl IHZ1bG5lcmFiaWxpdHkgYW5kIHByb3ZpZGluZyB0ZXN0IGNhc2VzLgorLSBBZGQgaWE2NCBzdXBw b3J0IHRvIGNvbmZpZ3VyZSBmb3IgSFAtVVggW1NtaXRoXQorLSBBZGQgZXJyb3IgcmV0dXJuIHRv IGd6cmVhZCgpIGZvciBmb3JtYXQgb3IgaS9vIGVycm9yIFtMZXZpbl0KKy0gVXNlIG1hbGxvYy5o IGZvciBPUy8yIFtOZWNhc2VrXQorCitDaGFuZ2VzIGluIDEuMi4yLjMgKDI3IE1heSAyMDA1KQor LSBSZXBsYWNlIDFVIGNvbnN0YW50cyBpbiBpbmZsYXRlLmMgYW5kIGluZnRyZWVzLmMgZm9yIDY0 LWJpdCBjb21waWxlCistIFR5cGVjYXN0IGZyZWFkKCkgcmV0dXJuIHZhbHVlcyBpbiBnemlvLmMg W1ZvbGxhbnRdCistIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBpbiBtaW5pZ3ppcC5jIG91dG1vZGUg KFZDKysgY2FuJ3QgZGVhbCB3aXRoIGl0KQorLSBGaXggY3JjIGNoZWNrIGJ1ZyBpbiBnenJlYWQo KSBhZnRlciBnenVuZ2V0YygpIFtIZWluZXJdCistIEFkZCB0aGUgZGVmbGF0ZVR1bmUoKSBmdW5j dGlvbiB0byBhZGp1c3QgaW50ZXJuYWwgY29tcHJlc3Npb24gcGFyYW1ldGVycworLSBBZGQgYSBm YXN0IGd6aXAgZGVjb21wcmVzc29yLCBndW4uYywgdG8gZXhhbXBsZXMgKHVzZSBvZiBpbmZsYXRl QmFjaykKKy0gUmVtb3ZlIGFuIGluY29ycmVjdCBhc3NlcnRpb24gaW4gZXhhbXBsZXMvenBpcGUu YworLSBBZGQgQysrIHdyYXBwZXIgaW4gaW5mYmFjazkuaCBbRG9uYWlzXQorLSBGaXggYnVnIGlu IGluZmxhdGVDb3B5KCkgd2hlbiBkZWNvZGluZyBmaXhlZCBjb2RlcworLSBOb3RlIGluIHpsaWIu aCBob3cgbXVjaCBkZWZsYXRlU2V0RGljdGlvbmFyeSgpIGFjdHVhbGx5IHVzZXMKKy0gUmVtb3Zl IFVTRV9ESUNUX0hFQUQgaW4gZGVmbGF0ZS5jICh3b3VsZCBtZXNzIHVwIGluZmxhdGUgaWYgdXNl ZCkKKy0gQWRkIF9XSU4zMl9XQ0UgdG8gZGVmaW5lIFdJTjMyIGluIHpjb25mLmluLmggW1NwZW5j ZXJdCistIERvbid0IGluY2x1ZGUgc3RkZXJyLmggb3IgZXJybm8uaCBmb3IgX1dJTjMyX1dDRSBp biB6dXRpbC5oIFtTcGVuY2VyXQorLSBBZGQgZ3pkaXJlY3QoKSBmdW5jdGlvbiB0byBpbmRpY2F0 ZSB0cmFuc3BhcmVudCByZWFkcworLSBVcGRhdGUgY29udHJpYi9taW5pemlwIFtWb2xsYW50XQor LSBGaXggY29tcGlsYXRpb24gb2YgZGVmbGF0ZS5jIHdoZW4gYm90aCBBU01WIGFuZCBGQVNURVNU IFtPYmVyaHVtZXJdCistIEFkZCBjYXN0cyBpbiBjcmMzMi5jIHRvIGF2b2lkIHdhcm5pbmdzIFtP YmVyaHVtZXJdCistIEFkZCBjb250cmliL21hc214NjQgW1ZvbGxhbnRdCistIFVwZGF0ZSBjb250 cmliL2FzbTU4NiwgYXNtNjg2LCBtYXNteDg2LCB0ZXN0emxpYiwgdnN0dWRpbyBbVm9sbGFudF0K KworQ2hhbmdlcyBpbiAxLjIuMi4yICgzMCBEZWNlbWJlciAyMDA0KQorLSBSZXBsYWNlIHN0cnVj dHVyZSBhc3NpZ25tZW50cyBpbiBkZWZsYXRlLmMgYW5kIGluZmxhdGUuYyB3aXRoIHptZW1jcHkg dG8KKyAgYXZvaWQgaW1wbGljaXQgbWVtY3B5IGNhbGxzIChwb3J0YWJpbGl0eSBmb3Igbm8tbGli cmFyeSBjb21waWxhdGlvbikKKy0gSW5jcmVhc2Ugc3ByaW50ZigpIGJ1ZmZlciBzaXplIGluIGd6 ZG9wZW4oKSB0byBhbGxvdyBmb3IgbGFyZ2UgbnVtYmVycworLSBBZGQgSU5GTEFURV9TVFJJQ1Qg dG8gY2hlY2sgZGlzdGFuY2VzIGFnYWluc3QgemxpYiBoZWFkZXIKKy0gSW1wcm92ZSBXaW5DRSBl cnJubyBoYW5kbGluZyBhbmQgY29tbWVudHMgW0NoYW5nXQorLSBSZW1vdmUgY29tbWVudCBhYm91 dCBubyBnemlwIGhlYWRlciBwcm9jZXNzaW5nIGluIEZBUQorLSBBZGQgWl9GSVhFRCBzdHJhdGVn eSBvcHRpb24gdG8gZGVmbGF0ZUluaXQyKCkgdG8gZm9yY2UgZml4ZWQgdHJlZXMKKy0gQWRkIHVw ZGF0ZWQgbWFrZV92bXMuY29tIFtDb2dobGFuXSwgdXBkYXRlIFJFQURNRQorLSBDcmVhdGUgYSBu ZXcgImV4YW1wbGVzIiBkaXJlY3RvcnksIG1vdmUgZ3phcHBlbmQuYyB0aGVyZSwgYWRkIHpwaXBl LmMsCisgIGZpdGJsay5jLCBnemxvZy5bY2hdLCBnempvaW4uYywgYW5kIHpsaWJfaG93Lmh0bWwu CistIEFkZCBGQVEgZW50cnkgYW5kIGNvbW1lbnRzIGluIGRlZmxhdGUuYyBvbiB1bmluaXRpYWxp emVkIG1lbW9yeSBhY2Nlc3MKKy0gQWRkIFNvbGFyaXMgOSBtYWtlIG9wdGlvbnMgaW4gY29uZmln dXJlIFtHaWxiZXJ0XQorLSBBbGxvdyBzdHJlcnJvcigpIHVzYWdlIGluIGd6aW8uYyBmb3IgU1RE QworLSBGaXggRGVjb21wcmVzc0J1ZiBpbiBjb250cmliL2RlbHBoaS9aTGliLnBhcyBbTWFuQ2hl c1Rlcl0KKy0gVXBkYXRlIGNvbnRyaWIvbWFzbXg4Ni9pbmZmYXMzMi5hc20gYW5kIGd2bWF0MzIu YXNtIFtWb2xsYW50XQorLSBVc2Ugel9vZmZfdCBmb3IgYWRsZXIzMl9jb21iaW5lKCkgYW5kIGNy YzMyX2NvbWJpbmUoKSBsZW5ndGhzCistIE1ha2UgYWRsZXIzMigpIG11Y2ggZmFzdGVyIGZvciBz bWFsbCBsZW4KKy0gVXNlIE9TX0NPREUgaW4gZGVmbGF0ZSgpIGRlZmF1bHQgZ3ppcCBoZWFkZXIK KworQ2hhbmdlcyBpbiAxLjIuMi4xICgzMSBPY3RvYmVyIDIwMDQpCistIEFsbG93IGluZmxhdGVT ZXREaWN0aW9uYXJ5KCkgY2FsbCBmb3IgcmF3IGluZmxhdGUKKy0gRml4IGluZmxhdGUgaGVhZGVy IGNyYyBjaGVjayBidWcgZm9yIGZpbGUgbmFtZXMgYW5kIGNvbW1lbnRzCistIEFkZCBkZWZsYXRl U2V0SGVhZGVyKCkgYW5kIGd6X2hlYWRlciBzdHJ1Y3R1cmUgZm9yIGN1c3RvbSBnemlwIGhlYWRl cnMKKy0gQWRkIGluZmxhdGVHZXRoZWFkZXIoKSB0byByZXRyaWV2ZSBnemlwIGhlYWRlcnMKKy0g QWRkIGNyYzMyX2NvbWJpbmUoKSBhbmQgYWRsZXIzMl9jb21iaW5lKCkgZnVuY3Rpb25zCistIEFk ZCBhbGxvY19mdW5jLCBmcmVlX2Z1bmMsIGluX2Z1bmMsIG91dF9mdW5jIHRvIFpfUFJFRklYIGxp c3QKKy0gVXNlIHpzdHJlYW1wIGNvbnNpc3RlbnRseSBpbiB6bGliLmggKGluZmxhdGVfYmFjayBm dW5jdGlvbnMpCistIFJlbW92ZSBHVU5aSVAgY29uZGl0aW9uIGZyb20gZGVmaW5pdGlvbiBvZiBp bmZsYXRlX21vZGUgaW4gaW5mbGF0ZS5oCisgIGFuZCBpbiBjb250cmliL2luZmxhdGU4Ni9pbmZm YXN0LlMgW1RydXRhLCBBbmRlcnNvbl0KKy0gQWRkIHN1cHBvcnQgZm9yIEFNRDY0IGluIGNvbnRy aWIvaW5mbGF0ZTg2L2luZmZhczg2LmMgW0FuZGVyc29uXQorLSBVcGRhdGUgcHJvamVjdHMvUkVB RE1FLnByb2plY3RzIGFuZCBwcm9qZWN0cy92aXN1YWxjNiBbVHJ1dGFdCistIFVwZGF0ZSB3aW4z Mi9ETExfRkFRLnR4dCBbVHJ1dGFdCistIEF2b2lkIHdhcm5pbmcgdW5kZXIgTk9fR1pDT01QUkVT UyBpbiBnemlvLmM7IGZpeCB0eXBvIFtUcnV0YV0KKy0gRGVwcmVjYXRlIFpfQVNDSUk7IHVzZSBa X1RFWFQgaW5zdGVhZCBbVHJ1dGFdCistIFVzZSBhIG5ldyBhbGdvcml0aG0gZm9yIHNldHRpbmcg c3RybS0+ZGF0YV90eXBlIGluIHRyZWVzLmMgW1RydXRhXQorLSBEbyBub3QgZGVmaW5lIGFuIGV4 aXQoKSBwcm90b3R5cGUgaW4genV0aWwuYyB1bmxlc3MgREVCVUcgZGVmaW5lZAorLSBSZW1vdmUg cHJvdG90eXBlIG9mIGV4aXQoKSBmcm9tIHp1dGlsLmMsIGV4YW1wbGUuYywgbWluaWd6aXAuYyBb VHJ1dGFdCistIEFkZCBjb21tZW50IGluIHpsaWIuaCBmb3IgWl9OT19GTFVTSCBwYXJhbWV0ZXIg dG8gZGVmbGF0ZSgpCistIEZpeCBEYXJ3aW4gYnVpbGQgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiBb UGV0ZXJzb25dCisKIENoYW5nZXMgaW4gMS4yLjIgKDMgT2N0b2JlciAyMDA0KQogLSBVcGRhdGUg emxpYi5oIGNvbW1lbnRzIG9uIGd6aXAgaW4tbWVtb3J5IHByb2Nlc3NpbmcKIC0gU2V0IGFkbGVy IHRvIDEgaW4gaW5mbGF0ZVJlc2V0KCkgdG8gc3VwcG9ydCBKYXZhIHRlc3Qgc3VpdGUgW1dhbGxl c10KQEAgLTQ0OSw3ICsxMjAwLDcgQEAKIENoYW5nZXMgaW4gMS4wLjYgKDE5IEphbiAxOTk4KQog LSBhZGQgZnVuY3Rpb25zIGd6cHJpbnRmLCBnenB1dGMsIGd6Z2V0YywgZ3p0ZWxsLCBnemVvZiwg Z3pzZWVrLCBnenJld2luZCBhbmQKICAgZ3pzZXRwYXJhbXMgKHRoYW5rcyB0byBSb2xhbmQgR2ll cnNpZyBhbmQgS2V2aW4gUnVsYW5kIGZvciBzb21lIG9mIHRoaXMgY29kZSkKLS0gRml4IGEgZGVm bGF0ZSBidWcgb2NjdXJpbmcgb25seSB3aXRoIGNvbXByZXNzaW9uIGxldmVsIDAgKHRoYW5rcyB0 bworLSBGaXggYSBkZWZsYXRlIGJ1ZyBvY2N1cnJpbmcgb25seSB3aXRoIGNvbXByZXNzaW9uIGxl dmVsIDAgKHRoYW5rcyB0bwogICBBbmR5IEJ1Y2tsZXIgZm9yIGZpbmRpbmcgdGhpcyBvbmUpLgog LSBJbiBtaW5pZ3ppcCwgcGFzcyB0cmFuc3BhcmVudGx5IGFsc28gdGhlIGZpcnN0IGJ5dGUgZm9y IC5aIGZpbGVzLgogLSByZXR1cm4gWl9CVUZfRVJST1IgaW5zdGVhZCBvZiBaX09LIGlmIG91dHB1 dCBidWZmZXIgZnVsbCBpbiB1bmNvbXByZXNzKCkKQEAgLTQ3MCw3ICsxMjIxLDcgQEAKICAgICAg ICAgMzg2IGFzbSBjb2RlIHJlcGxhY2luZyBsb25nZXN0X21hdGNoKCkuCiAgICBjb250cmliL2lv c3RyZWFtLyBieSBLZXZpbiBSdWxhbmQgPGtldmluQHJvZGluLnd1c3RsLmVkdT4KICAgICAgICAg QSBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlIHRvIHRoZSB6bGliIGd6KiBmdW5jdGlvbnMKLSAg IGNvbnRyaWIvaW9zdHJlYW0yLyAgYnkgVHlnZSBM+HZzZXQgPFR5Z2UuTG92c2V0QGNtci5ubz4K KyAgIGNvbnRyaWIvaW9zdHJlYW0yLyAgYnkgVHlnZSBMw7h2c2V0IDxUeWdlLkxvdnNldEBjbXIu bm8+CiAgICAgICAgIEFub3RoZXIgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZQogICAgY29udHJp Yi91bnRnei8gIGJ5ICJQZWRybyBBLiBBcmFuZGEgR3V0aVxpcnJleiIgPHBhYWdAdGlkLmVzPgog ICAgICAgICBBIHZlcnkgc2ltcGxlIHRhci5neiBmaWxlIGV4dHJhY3RvciB1c2luZyB6bGliCkBA IC01MDgsNyArMTI1OSw3IEBACiAtIHVzZSBfZmRvcGVuIGluc3RlYWQgb2YgZmRvcGVuIGZvciBN U0MgPj0gNi4wIChUaG9tYXMgRmFuc2xhdSkKIC0gYWRkZWQgbWFrZWxjYy5iYXQgZm9yIGxjYy13 aW4zMiAoVG9tIFN0IERlbmlzKQogLSBpbiBNYWtlZmlsZS5kajIsIHVzZSBjb3B5IGFuZCBkZWwg aW5zdGVhZCBvZiBpbnN0YWxsIGFuZCBybSAoRnJhbmsgRG9uYWhvZSkKLS0gQXZvaWQgZXhwYW5k ZWQgJElkOiBDaGFuZ2VMb2csdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6NDIgZ2lsZXMgRXhw ICQuIFVzZSAicmNzIC1rYiIgb3IgImN2cyBhZG1pbiAta2IiIHRvIGF2b2lkIElkIGV4cGFuc2lv bi4KKy0gQXZvaWQgZXhwYW5kZWQgJElkJC4gVXNlICJyY3MgLWtiIiBvciAiY3ZzIGFkbWluIC1r YiIgdG8gYXZvaWQgSWQgZXhwYW5zaW9uLgogLSBjaGVjayBmb3IgdW5pc3RkLmggaW4gY29uZmln dXJlIChmb3Igb2ZmX3QpCiAtIHJlbW92ZSB1c2VsZXNzIGNoZWNrIHBhcmFtZXRlciBpbiBpbmZs YXRlX2Jsb2Nrc19mcmVlCiAtIGF2b2lkIHVzZWxlc3MgYXNzaWdubWVudCBvZiBzLT5jaGVjayB0 byBpdHNlbGYgaW4gaW5mbGF0ZV9ibG9ja3NfbmV3CkBAIC01NTksNyArMTMxMCw3IEBACiAtIGZp eCBhcnJheSBvdmVybGF5IGluIGRlZmxhdGUuYyB3aGljaCBzb21ldGltZXMgY2F1c2VkIGJhZCBj b21wcmVzc2VkIGRhdGEKIC0gZml4IGluZmxhdGUgYnVnIHdpdGggZW1wdHkgc3RvcmVkIGJsb2Nr CiAtIGZpeCBNU0RPUyBtZWRpdW0gbW9kZWwgd2hpY2ggd2FzIGJyb2tlbiBpbiAwLjk5Ci0tIGZp eCBkZWZsYXRlUGFyYW1zKCkgd2hpY2ggY291bGQgZ2VuZXJhdGVkIGJhZCBjb21wcmVzc2VkIGRh dGEuCistIGZpeCBkZWZsYXRlUGFyYW1zKCkgd2hpY2ggY291bGQgZ2VuZXJhdGUgYmFkIGNvbXBy ZXNzZWQgZGF0YS4KIC0gQnl0ZWYgaXMgZGVmaW5lJ2QgaW5zdGVhZCBvZiB0eXBlZGVmJ2VkICh3 b3JrIGFyb3VuZCBCb3JsYW5kIGJ1ZykKIC0gYWRkZWQgYW4gSU5ERVggZmlsZQogLSBuZXcgbWFr ZWZpbGVzIGZvciBESkdQUCAoTWFrZWZpbGUuZGoyKSwgMzItYml0IEJvcmxhbmQgKE1ha2VmaWxl LmIzMiksCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9n cy96bGliL0ZBUQotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL0ZBUQlTdW4gTWFyIDA4IDIyOjAw OjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9GQVEJU3VuIE1hciAwOCAx OTo1ODowOCAyMDIwIC0wNDAwCkBAIC0zLDggKzMsOCBAQAogCiAKIElmIHlvdXIgcXVlc3Rpb24g aXMgbm90IHRoZXJlLCBwbGVhc2UgY2hlY2sgdGhlIHpsaWIgaG9tZSBwYWdlCi1odHRwOi8vd3d3 LnpsaWIub3JnIHdoaWNoIG1heSBoYXZlIG1vcmUgcmVjZW50IGluZm9ybWF0aW9uLgotVGhlIGxh c3Rlc3QgemxpYiBGQVEgaXMgYXQgaHR0cDovL3d3dy5nemlwLm9yZy96bGliL3psaWJfZmFxLmh0 bWwKK2h0dHA6Ly96bGliLm5ldC8gd2hpY2ggbWF5IGhhdmUgbW9yZSByZWNlbnQgaW5mb3JtYXRp b24uCitUaGUgbGFzdGVzdCB6bGliIEZBUSBpcyBhdCBodHRwOi8vemxpYi5uZXQvemxpYl9mYXEu aHRtbAogCiAKICAxLiBJcyB6bGliIFkySy1jb21wbGlhbnQ/CkBAIC0xMyw1NCArMTMsNTEgQEAK IAogIDIuIFdoZXJlIGNhbiBJIGdldCBhIFdpbmRvd3MgRExMIHZlcnNpb24/CiAKLSAgICBUaGUg emxpYiBzb3VyY2VzIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IGNoYW5nZSB0byBwcm9kdWNlIGEg RExMLgotICAgIFNlZSB0aGUgZmlsZSB3aW4zMi9ETExfRkFRLnR4dCBpbiB0aGUgemxpYiBkaXN0 cmlidXRpb24uCi0gICAgUG9pbnRlcnMgdG8gdGhlIHByZWNvbXBpbGVkIERMTCBhcmUgZm91bmQg aW4gdGhlIHpsaWIgd2ViIHNpdGUgYXQKLSAgICBodHRwOi8vd3d3LnpsaWIub3JnLgorICAgIFRo ZSB6bGliIHNvdXJjZXMgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgY2hhbmdlIHRvIHByb2R1Y2Ug YSBETEwuICBTZWUgdGhlCisgICAgZmlsZSB3aW4zMi9ETExfRkFRLnR4dCBpbiB0aGUgemxpYiBk aXN0cmlidXRpb24uICBQb2ludGVycyB0byB0aGUKKyAgICBwcmVjb21waWxlZCBETEwgYXJlIGZv dW5kIGluIHRoZSB6bGliIHdlYiBzaXRlIGF0IGh0dHA6Ly96bGliLm5ldC8gLgogCiAgMy4gV2hl cmUgY2FuIEkgZ2V0IGEgVmlzdWFsIEJhc2ljIGludGVyZmFjZSB0byB6bGliPwogCiAgICAgU2Vl Ci0gICAgICAgICogaHR0cDovL3d3dy5kb2dtYS5uZXQvbWFya24vYXJ0aWNsZXMvemxpYnRvb2wv emxpYnRvb2wuaHRtCi0gICAgICAgICogY29udHJpYi92aXN1YWwtYmFzaWMudHh0IGluIHRoZSB6 bGliIGRpc3RyaWJ1dGlvbgorICAgICAgICAqIGh0dHA6Ly9tYXJrbmVsc29uLnVzLzE5OTcvMDEv MDEvemxpYi1lbmdpbmUvCiAgICAgICAgICogd2luMzIvRExMX0ZBUS50eHQgaW4gdGhlIHpsaWIg ZGlzdHJpYnV0aW9uCiAKICA0LiBjb21wcmVzcygpIHJldHVybnMgWl9CVUZfRVJST1IuCiAKLSAg ICBNYWtlIHN1cmUgdGhhdCBiZWZvcmUgdGhlIGNhbGwgb2YgY29tcHJlc3MsIHRoZSBsZW5ndGgg b2YgdGhlIGNvbXByZXNzZWQKLSAgICBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIHRvdGFsIHNpemUg b2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyIGFuZCBub3QKLSAgICB6ZXJvLiBGb3IgVmlzdWFsIEJh c2ljLCBjaGVjayB0aGF0IHRoaXMgcGFyYW1ldGVyIGlzIHBhc3NlZCBieSByZWZlcmVuY2UKKyAg ICBNYWtlIHN1cmUgdGhhdCBiZWZvcmUgdGhlIGNhbGwgb2YgY29tcHJlc3MoKSwgdGhlIGxlbmd0 aCBvZiB0aGUgY29tcHJlc3NlZAorICAgIGJ1ZmZlciBpcyBlcXVhbCB0byB0aGUgYXZhaWxhYmxl IHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyIGFuZCBub3QKKyAgICB6ZXJvLiAgRm9yIFZp c3VhbCBCYXNpYywgY2hlY2sgdGhhdCB0aGlzIHBhcmFtZXRlciBpcyBwYXNzZWQgYnkgcmVmZXJl bmNlCiAgICAgKCJhcyBhbnkiKSwgbm90IGJ5IHZhbHVlICgiYXMgbG9uZyIpLgogCiAgNS4gZGVm bGF0ZSgpIG9yIGluZmxhdGUoKSByZXR1cm5zIFpfQlVGX0VSUk9SLgogCi0gICAgQmVmb3JlIG1h a2luZyB0aGUgY2FsbCwgbWFrZSBzdXJlIHRoYXQgYXZhaWxfaW4gYW5kIGF2YWlsX291dCBhcmUg bm90Ci0gICAgemVyby4gV2hlbiBzZXR0aW5nIHRoZSBwYXJhbWV0ZXIgZmx1c2ggZXF1YWwgdG8g Wl9GSU5JU0gsIGFsc28gbWFrZSBzdXJlCi0gICAgdGhhdCBhdmFpbF9vdXQgaXMgYmlnIGVub3Vn aCB0byBhbGxvdyBwcm9jZXNzaW5nIGFsbCBwZW5kaW5nIGlucHV0LgotICAgIE5vdGUgdGhhdCBh IFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbC0tYW5vdGhlciBjYWxsIHRvIGRlZmxhdGUoKSBvcgot ICAgIGluZmxhdGUoKSBjYW4gYmUgbWFkZSB3aXRoIG1vcmUgaW5wdXQgb3Igb3V0cHV0IHNwYWNl LiBBIFpfQlVGX0VSUk9SCi0gICAgbWF5IGluIGZhY3QgYmUgdW5hdm9pZGFibGUgZGVwZW5kaW5n IG9uIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSB1c2VkLCBzaW5jZQotICAgIGl0IGlzIG5vdCBwb3Nz aWJsZSB0byB0ZWxsIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIG1vcmUgb3V0cHV0IHBlbmRpbmcK LSAgICB3aGVuIHN0cm0uYXZhaWxfb3V0IHJldHVybnMgd2l0aCB6ZXJvLgorICAgIEJlZm9yZSBt YWtpbmcgdGhlIGNhbGwsIG1ha2Ugc3VyZSB0aGF0IGF2YWlsX2luIGFuZCBhdmFpbF9vdXQgYXJl IG5vdCB6ZXJvLgorICAgIFdoZW4gc2V0dGluZyB0aGUgcGFyYW1ldGVyIGZsdXNoIGVxdWFsIHRv IFpfRklOSVNILCBhbHNvIG1ha2Ugc3VyZSB0aGF0CisgICAgYXZhaWxfb3V0IGlzIGJpZyBlbm91 Z2ggdG8gYWxsb3cgcHJvY2Vzc2luZyBhbGwgcGVuZGluZyBpbnB1dC4gIE5vdGUgdGhhdCBhCisg ICAgWl9CVUZfRVJST1IgaXMgbm90IGZhdGFsLS1hbm90aGVyIGNhbGwgdG8gZGVmbGF0ZSgpIG9y IGluZmxhdGUoKSBjYW4gYmUKKyAgICBtYWRlIHdpdGggbW9yZSBpbnB1dCBvciBvdXRwdXQgc3Bh Y2UuICBBIFpfQlVGX0VSUk9SIG1heSBpbiBmYWN0IGJlCisgICAgdW5hdm9pZGFibGUgZGVwZW5k aW5nIG9uIGhvdyB0aGUgZnVuY3Rpb25zIGFyZSB1c2VkLCBzaW5jZSBpdCBpcyBub3QKKyAgICBw b3NzaWJsZSB0byB0ZWxsIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIG1vcmUgb3V0cHV0IHBlbmRp bmcgd2hlbgorICAgIHN0cm0uYXZhaWxfb3V0IHJldHVybnMgd2l0aCB6ZXJvLiAgU2VlIGh0dHA6 Ly96bGliLm5ldC96bGliX2hvdy5odG1sIGZvciBhCisgICAgaGVhdmlseSBhbm5vdGF0ZWQgZXhh bXBsZS4KIAogIDYuIFdoZXJlJ3MgdGhlIHpsaWIgZG9jdW1lbnRhdGlvbiAobWFuIHBhZ2VzLCBl dGMuKT8KIAotICAgIEl0J3MgaW4gemxpYi5oIGZvciB0aGUgbW9tZW50LCBhbmQgRnJhbmNpcyBT LiBMaW4gaGFzIGNvbnZlcnRlZCBpdCB0byBhCi0gICAgd2ViIHBhZ2UgemxpYi5odG1sLiBWb2x1 bnRlZXJzIHRvIHRyYW5zZm9ybSB0aGlzIHRvIFVuaXgtc3R5bGUgbWFuIHBhZ2VzLAotICAgIHBs ZWFzZSBjb250YWN0IHVzICh6bGliQGd6aXAub3JnKS4gRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBh cmUgaW4gdGhlIGZpbGVzCi0gICAgZXhhbXBsZS5jIGFuZCBtaW5pZ3ppcC5jLgorICAgIEl0J3Mg aW4gemxpYi5oIC4gIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcyB0ZXN0 L2V4YW1wbGUuYworICAgIGFuZCB0ZXN0L21pbmlnemlwLmMsIHdpdGggbW9yZSBpbiBleGFtcGxl cy8gLgogCiAgNy4gV2h5IGRvbid0IHlvdSB1c2UgR05VIGF1dG9jb25mIG9yIGxpYnRvb2wgb3Ig Li4uPwogCi0gICAgQmVjYXVzZSB3ZSB3b3VsZCBsaWtlIHRvIGtlZXAgemxpYiBhcyBhIHZlcnkg c21hbGwgYW5kIHNpbXBsZQotICAgIHBhY2thZ2UuIHpsaWIgaXMgcmF0aGVyIHBvcnRhYmxlIGFu ZCBkb2Vzbid0IG5lZWQgbXVjaCBjb25maWd1cmF0aW9uLgorICAgIEJlY2F1c2Ugd2Ugd291bGQg bGlrZSB0byBrZWVwIHpsaWIgYXMgYSB2ZXJ5IHNtYWxsIGFuZCBzaW1wbGUgcGFja2FnZS4KKyAg ICB6bGliIGlzIHJhdGhlciBwb3J0YWJsZSBhbmQgZG9lc24ndCBuZWVkIG11Y2ggY29uZmlndXJh dGlvbi4KIAogIDguIEkgZm91bmQgYSBidWcgaW4gemxpYi4KIAotICAgIE1vc3Qgb2YgdGhlIHRp bWUsIHN1Y2ggcHJvYmxlbXMgYXJlIGR1ZSB0byBhbiBpbmNvcnJlY3QgdXNhZ2Ugb2YKLSAgICB6 bGliLiBQbGVhc2UgdHJ5IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoIGEgc21hbGwgcHJv Z3JhbSBhbmQgc2VuZAotICAgIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSB0byB1cyBhdCB6bGli QGd6aXAub3JnIC4gRG8gbm90IHNlbmQKLSAgICBtdWx0aS1tZWdhYnl0ZSBkYXRhIGZpbGVzIHdp dGhvdXQgcHJpb3IgYWdyZWVtZW50LgorICAgIE1vc3Qgb2YgdGhlIHRpbWUsIHN1Y2ggcHJvYmxl bXMgYXJlIGR1ZSB0byBhbiBpbmNvcnJlY3QgdXNhZ2Ugb2YgemxpYi4KKyAgICBQbGVhc2UgdHJ5 IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoIGEgc21hbGwgcHJvZ3JhbSBhbmQgc2VuZCB0 aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSB0byB1cyBhdCB6bGliQGd6aXAub3JnIC4gIERv IG5vdCBzZW5kIG11bHRpLW1lZ2FieXRlCisgICAgZGF0YSBmaWxlcyB3aXRob3V0IHByaW9yIGFn cmVlbWVudC4KIAogIDkuIFdoeSBkbyBJIGdldCAidW5kZWZpbmVkIHJlZmVyZW5jZSB0byBnenB1 dGMiPwogCkBAIC04MiwxMyArNzksMTUgQEAKIAogMTIuIENhbiB6bGliIGhhbmRsZSAuWiBmaWxl cz8KIAotICAgIE5vLCBzb3JyeS4gWW91IGhhdmUgdG8gc3Bhd24gYW4gdW5jb21wcmVzcyBvciBn dW56aXAgc3VicHJvY2Vzcywgb3IgYWRhcHQKKyAgICBObywgc29ycnkuICBZb3UgaGF2ZSB0byBz cGF3biBhbiB1bmNvbXByZXNzIG9yIGd1bnppcCBzdWJwcm9jZXNzLCBvciBhZGFwdAogICAgIHRo ZSBjb2RlIG9mIHVuY29tcHJlc3Mgb24geW91ciBvd24uCiAKIDEzLiBIb3cgY2FuIEkgbWFrZSBh IFVuaXggc2hhcmVkIGxpYnJhcnk/CiAKLSAgICBtYWtlIGNsZWFuCi0gICAgLi9jb25maWd1cmUg LXMKKyAgICBCeSBkZWZhdWx0IGEgc2hhcmVkIChhbmQgYSBzdGF0aWMpIGxpYnJhcnkgaXMgYnVp bHQgZm9yIFVuaXguICBTbzoKKworICAgIG1ha2UgZGlzdGNsZWFuCisgICAgLi9jb25maWd1cmUK ICAgICBtYWtlCiAKIDE0LiBIb3cgZG8gSSBpbnN0YWxsIGEgc2hhcmVkIHpsaWIgbGlicmFyeSBv biBVbml4PwpAQCAtOTksOCArOTgsMTAgQEAKIAogICAgIEhvd2V2ZXIsIG1hbnkgZmxhdm9ycyBv ZiBVbml4IGNvbWUgd2l0aCBhIHNoYXJlZCB6bGliIGFscmVhZHkgaW5zdGFsbGVkLgogICAgIEJl Zm9yZSBnb2luZyB0byB0aGUgdHJvdWJsZSBvZiBjb21waWxpbmcgYSBzaGFyZWQgdmVyc2lvbiBv ZiB6bGliIGFuZAotICAgIHRyeWluZyB0byBpbnN0YWxsIGl0LCB5b3UgbWF5IHdhbnQgdG8gY2hl Y2sgaWYgaXQncyBhbHJlYWR5IHRoZXJlISBJZiB5b3UKLSAgICBjYW4gI2luY2x1ZGUgPHpsaWIu aD4sIGl0J3MgdGhlcmUuIFRoZSAtbHogb3B0aW9uIHdpbGwgcHJvYmFibHkgbGluayB0byBpdC4K KyAgICB0cnlpbmcgdG8gaW5zdGFsbCBpdCwgeW91IG1heSB3YW50IHRvIGNoZWNrIGlmIGl0J3Mg YWxyZWFkeSB0aGVyZSEgIElmIHlvdQorICAgIGNhbiAjaW5jbHVkZSA8emxpYi5oPiwgaXQncyB0 aGVyZS4gIFRoZSAtbHogb3B0aW9uIHdpbGwgcHJvYmFibHkgbGluayB0bworICAgIGl0LiAgWW91 IGNhbiBjaGVjayB0aGUgdmVyc2lvbiBhdCB0aGUgdG9wIG9mIHpsaWIuaCBvciB3aXRoIHRoZQor ICAgIFpMSUJfVkVSU0lPTiBzeW1ib2wgZGVmaW5lZCBpbiB6bGliLmggLgogCiAxNS4gSSBoYXZl IGEgcXVlc3Rpb24gYWJvdXQgT3R0b1BERi4KIApAQCAtMTA5LDggKzExMCw4IEBACiAKIDE2LiBD YW4gemxpYiBkZWNvZGUgRmxhdGUgZGF0YSBpbiBhbiBBZG9iZSBQREYgZmlsZT8KIAotICAgIFll cy4gU2VlIGh0dHA6Ly93d3cuZmFzdGlvLmNvbS8gKENsaWJQREYpLCBvciBodHRwOi8vd3d3LnBk ZmxpYi5jb20vIC4KLSAgICBUbyBtb2RpZnkgUERGIGZvcm1zLCBzZWUgaHR0cDovL3NvdXJjZWZv cmdlLm5ldC9wcm9qZWN0cy9hY3JvZm9ybXRvb2wvIC4KKyAgICBZZXMuIFNlZSBodHRwOi8vd3d3 LnBkZmxpYi5jb20vIC4gVG8gbW9kaWZ5IFBERiBmb3Jtcywgc2VlCisgICAgaHR0cDovL3NvdXJj ZWZvcmdlLm5ldC9wcm9qZWN0cy9hY3JvZm9ybXRvb2wvIC4KIAogMTcuIFdoeSBhbSBJIGdldHRp bmcgdGhpcyAicmVnaXN0ZXJfZnJhbWVfaW5mbyBub3QgZm91bmQiIGVycm9yIG9uIFNvbGFyaXM/ CiAKQEAgLTEyMSw3NCArMTIyLDY3IEBACiAgICAgICAgIHN5bWJvbCBfX3JlZ2lzdGVyX2ZyYW1l X2luZm86IHJlZmVyZW5jZWQgc3ltYm9sIG5vdCBmb3VuZAogCiAgICAgVGhlIHN5bWJvbCBfX3Jl Z2lzdGVyX2ZyYW1lX2luZm8gaXMgbm90IHBhcnQgb2YgemxpYiwgaXQgaXMgZ2VuZXJhdGVkIGJ5 Ci0gICAgdGhlIEMgY29tcGlsZXIgKGNjIG9yIGdjYykuIFlvdSBtdXN0IHJlY29tcGlsZSBhcHBs aWNhdGlvbnMgdXNpbmcgemxpYgotICAgIHdoaWNoIGhhdmUgdGhpcyBwcm9ibGVtLiBUaGlzIHBy b2JsZW0gaXMgc3BlY2lmaWMgdG8gU29sYXJpcy4gU2VlCisgICAgdGhlIEMgY29tcGlsZXIgKGNj IG9yIGdjYykuICBZb3UgbXVzdCByZWNvbXBpbGUgYXBwbGljYXRpb25zIHVzaW5nIHpsaWIKKyAg ICB3aGljaCBoYXZlIHRoaXMgcHJvYmxlbS4gIFRoaXMgcHJvYmxlbSBpcyBzcGVjaWZpYyB0byBT b2xhcmlzLiAgU2VlCiAgICAgaHR0cDovL3d3dy5zdW5mcmVld2FyZS5jb20gZm9yIFNvbGFyaXMg dmVyc2lvbnMgb2YgemxpYiBhbmQgYXBwbGljYXRpb25zCiAgICAgdXNpbmcgemxpYi4KIAogMTgu IFdoeSBkb2VzIGd6aXAgZ2l2ZSBhbiBlcnJvciBvbiBhIGZpbGUgSSBtYWtlIHdpdGggY29tcHJl c3MvZGVmbGF0ZT8KIAogICAgIFRoZSBjb21wcmVzcyBhbmQgZGVmbGF0ZSBmdW5jdGlvbnMgcHJv ZHVjZSBkYXRhIGluIHRoZSB6bGliIGZvcm1hdCwgd2hpY2gKLSAgICBpcyBkaWZmZXJlbnQgYW5k IGluY29tcGF0aWJsZSB3aXRoIHRoZSBnemlwIGZvcm1hdC4gVGhlIGd6KiBmdW5jdGlvbnMgaW4K LSAgICB6bGliIG9uIHRoZSBvdGhlciBoYW5kIHVzZSB0aGUgZ3ppcCBmb3JtYXQuIEJvdGggdGhl IHpsaWIgYW5kIGd6aXAKLSAgICBmb3JtYXRzIHVzZSB0aGUgc2FtZSBjb21wcmVzc2VkIGRhdGEg Zm9ybWF0IGludGVybmFsbHksIGJ1dCBoYXZlIGRpZmZlcmVudAotICAgIGhlYWRlcnMgYW5kIHRy YWlsZXJzIGFyb3VuZCB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgIGlzIGRpZmZlcmVudCBhbmQg aW5jb21wYXRpYmxlIHdpdGggdGhlIGd6aXAgZm9ybWF0LiAgVGhlIGd6KiBmdW5jdGlvbnMgaW4K KyAgICB6bGliIG9uIHRoZSBvdGhlciBoYW5kIHVzZSB0aGUgZ3ppcCBmb3JtYXQuICBCb3RoIHRo ZSB6bGliIGFuZCBnemlwIGZvcm1hdHMKKyAgICB1c2UgdGhlIHNhbWUgY29tcHJlc3NlZCBkYXRh IGZvcm1hdCBpbnRlcm5hbGx5LCBidXQgaGF2ZSBkaWZmZXJlbnQgaGVhZGVycworICAgIGFuZCB0 cmFpbGVycyBhcm91bmQgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAogMTkuIE9rLCBzbyB3aHkgYXJl IHRoZXJlIHR3byBkaWZmZXJlbnQgZm9ybWF0cz8KIAotICAgIFRoZSBnemlwIGZvcm1hdCB3YXMg ZGVzaWduZWQgdG8gcmV0YWluIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gYWJvdXQKLSAgICBh IHNpbmdsZSBmaWxlLCBzdWNoIGFzIHRoZSBuYW1lIGFuZCBsYXN0IG1vZGlmaWNhdGlvbiBkYXRl LiBUaGUgemxpYgotICAgIGZvcm1hdCBvbiB0aGUgb3RoZXIgaGFuZCB3YXMgZGVzaWduZWQgZm9y IGluLW1lbW9yeSBhbmQgY29tbXVuaWNhdGlvbgotICAgIGNoYW5uZWwgYXBwbGljYXRpb25zLCBh bmQgaGFzIGEgbXVjaCBtb3JlIGNvbXBhY3QgaGVhZGVyIGFuZCB0cmFpbGVyIGFuZAotICAgIHVz ZXMgYSBmYXN0ZXIgaW50ZWdyaXR5IGNoZWNrIHRoYW4gZ3ppcC4KKyAgICBUaGUgZ3ppcCBmb3Jt YXQgd2FzIGRlc2lnbmVkIHRvIHJldGFpbiB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGFib3V0 IGEKKyAgICBzaW5nbGUgZmlsZSwgc3VjaCBhcyB0aGUgbmFtZSBhbmQgbGFzdCBtb2RpZmljYXRp b24gZGF0ZS4gIFRoZSB6bGliIGZvcm1hdAorICAgIG9uIHRoZSBvdGhlciBoYW5kIHdhcyBkZXNp Z25lZCBmb3IgaW4tbWVtb3J5IGFuZCBjb21tdW5pY2F0aW9uIGNoYW5uZWwKKyAgICBhcHBsaWNh dGlvbnMsIGFuZCBoYXMgYSBtdWNoIG1vcmUgY29tcGFjdCBoZWFkZXIgYW5kIHRyYWlsZXIgYW5k IHVzZXMgYQorICAgIGZhc3RlciBpbnRlZ3JpdHkgY2hlY2sgdGhhbiBnemlwLgogCiAyMC4gV2Vs bCB0aGF0J3MgbmljZSwgYnV0IGhvdyBkbyBJIG1ha2UgYSBnemlwIGZpbGUgaW4gbWVtb3J5Pwog CiAgICAgWW91IGNhbiByZXF1ZXN0IHRoYXQgZGVmbGF0ZSB3cml0ZSB0aGUgZ3ppcCBmb3JtYXQg aW5zdGVhZCBvZiB0aGUgemxpYgotICAgIGZvcm1hdCB1c2luZyBkZWZsYXRlSW5pdDIoKS4gWW91 IGNhbiBhbHNvIHJlcXVlc3QgdGhhdCBpbmZsYXRlIGRlY29kZQotICAgIHRoZSBnemlwIGZvcm1h dCB1c2luZyBpbmZsYXRlSW5pdDIoKS4gUmVhZCB6bGliLmggZm9yIG1vcmUgZGV0YWlscy4KLQot ICAgIE5vdGUgdGhhdCB5b3UgY2Fubm90IHNwZWNpZnkgc3BlY2lhbCBnemlwIGhlYWRlciBjb250 ZW50cyAoZS5nLiBhIGZpbGUKLSAgICBuYW1lIG9yIG1vZGlmaWNhdGlvbiBkYXRlKSwgbm9yIHdp bGwgaW5mbGF0ZSB0ZWxsIHlvdSB3aGF0IHdhcyBpbiB0aGUKLSAgICBnemlwIGhlYWRlci4gSWYg eW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBoZWFkZXIgb3Igc2VlIHdoYXQncyBpbiBpdCwKLSAg ICB5b3UgY2FuIHVzZSB0aGUgcmF3IGRlZmxhdGUgYW5kIGluZmxhdGUgb3BlcmF0aW9ucyBhbmQg dGhlIGNyYzMyKCkKLSAgICBmdW5jdGlvbiBhbmQgcm9sbCB5b3VyIG93biBnemlwIGVuY29kaW5n IGFuZCBkZWNvZGluZy4gUmVhZCB0aGUgZ3ppcAotICAgIFJGQyAxOTUyIGZvciBkZXRhaWxzIG9m IHRoZSBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0LgorICAgIGZvcm1hdCB1c2luZyBkZWZsYXRl SW5pdDIoKS4gIFlvdSBjYW4gYWxzbyByZXF1ZXN0IHRoYXQgaW5mbGF0ZSBkZWNvZGUgdGhlCisg ICAgZ3ppcCBmb3JtYXQgdXNpbmcgaW5mbGF0ZUluaXQyKCkuICBSZWFkIHpsaWIuaCBmb3IgbW9y ZSBkZXRhaWxzLgogCiAyMS4gSXMgemxpYiB0aHJlYWQtc2FmZT8KIAotICAgIFllcy4gSG93ZXZl ciBhbnkgbGlicmFyeSByb3V0aW5lcyB0aGF0IHpsaWIgdXNlcyBhbmQgYW55IGFwcGxpY2F0aW9u LQotICAgIHByb3ZpZGVkIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIG11c3QgYWxzbyBiZSB0 aHJlYWQtc2FmZS4gemxpYidzIGd6KgorICAgIFllcy4gIEhvd2V2ZXIgYW55IGxpYnJhcnkgcm91 dGluZXMgdGhhdCB6bGliIHVzZXMgYW5kIGFueSBhcHBsaWNhdGlvbi0KKyAgICBwcm92aWRlZCBt ZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyBtdXN0IGFsc28gYmUgdGhyZWFkLXNhZmUuICB6bGli J3MgZ3oqCiAgICAgZnVuY3Rpb25zIHVzZSBzdGRpbyBsaWJyYXJ5IHJvdXRpbmVzLCBhbmQgbW9z dCBvZiB6bGliJ3MgZnVuY3Rpb25zIHVzZSB0aGUKLSAgICBsaWJyYXJ5IG1lbW9yeSBhbGxvY2F0 aW9uIHJvdXRpbmVzIGJ5IGRlZmF1bHQuIHpsaWIncyBJbml0IGZ1bmN0aW9ucyBhbGxvdwotICAg IGZvciB0aGUgYXBwbGljYXRpb24gdG8gcHJvdmlkZSBjdXN0b20gbWVtb3J5IGFsbG9jYXRpb24g cm91dGluZXMuCisgICAgbGlicmFyeSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyBieSBkZWZh dWx0LiAgemxpYidzICpJbml0KiBmdW5jdGlvbnMKKyAgICBhbGxvdyBmb3IgdGhlIGFwcGxpY2F0 aW9uIHRvIHByb3ZpZGUgY3VzdG9tIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgogCiAgICAg T2YgY291cnNlLCB5b3Ugc2hvdWxkIG9ubHkgb3BlcmF0ZSBvbiBhbnkgZ2l2ZW4gemxpYiBvciBn emlwIHN0cmVhbSBmcm9tIGEKICAgICBzaW5nbGUgdGhyZWFkIGF0IGEgdGltZS4KIAogMjIuIENh biBJIHVzZSB6bGliIGluIG15IGNvbW1lcmNpYWwgYXBwbGljYXRpb24/CiAKLSAgICBZZXMuIFBs ZWFzZSByZWFkIHRoZSBsaWNlbnNlIGluIHpsaWIuaC4KKyAgICBZZXMuICBQbGVhc2UgcmVhZCB0 aGUgbGljZW5zZSBpbiB6bGliLmguCiAKIDIzLiBJcyB6bGliIHVuZGVyIHRoZSBHTlUgbGljZW5z ZT8KIAotICAgIE5vLiBQbGVhc2UgcmVhZCB0aGUgbGljZW5zZSBpbiB6bGliLmguCisgICAgTm8u ICBQbGVhc2UgcmVhZCB0aGUgbGljZW5zZSBpbiB6bGliLmguCiAKIDI0LiBUaGUgbGljZW5zZSBz YXlzIHRoYXQgYWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSAicGxhaW5seSBtYXJrZWQi LiBTbwogICAgIHdoYXQgZXhhY3RseSBkbyBJIG5lZWQgdG8gZG8gdG8gbWVldCB0aGF0IHJlcXVp cmVtZW50PwogCi0gICAgWW91IG5lZWQgdG8gY2hhbmdlIHRoZSBaTElCX1ZFUlNJT04gYW5kIFpM SUJfVkVSTlVNICNkZWZpbmVzIGluIHpsaWIuaC4gSW4KKyAgICBZb3UgbmVlZCB0byBjaGFuZ2Ug dGhlIFpMSUJfVkVSU0lPTiBhbmQgWkxJQl9WRVJOVU0gI2RlZmluZXMgaW4gemxpYi5oLiAgSW4K ICAgICBwYXJ0aWN1bGFyLCB0aGUgZmluYWwgdmVyc2lvbiBudW1iZXIgbmVlZHMgdG8gYmUgY2hh bmdlZCB0byAiZiIsIGFuZCBhbgotICAgIGlkZW50aWZpY2F0aW9uIHN0cmluZyBzaG91bGQgYmUg YXBwZW5kZWQgdG8gWkxJQl9WRVJTSU9OLiBWZXJzaW9uIG51bWJlcnMKKyAgICBpZGVudGlmaWNh dGlvbiBzdHJpbmcgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIFpMSUJfVkVSU0lPTi4gIFZlcnNpb24g bnVtYmVycwogICAgIHgueC54LmYgYXJlIHJlc2VydmVkIGZvciBtb2RpZmljYXRpb25zIHRvIHps aWIgYnkgb3RoZXJzIHRoYW4gdGhlIHpsaWIKLSAgICBtYWludGFpbmVycy4gRm9yIGV4YW1wbGUs IGlmIHRoZSB2ZXJzaW9uIG9mIHRoZSBiYXNlIHpsaWIgeW91IGFyZSBhbHRlcmluZworICAgIG1h aW50YWluZXJzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB2ZXJzaW9uIG9mIHRoZSBiYXNlIHpsaWIg eW91IGFyZSBhbHRlcmluZwogICAgIGlzICIxLjIuMy40IiwgdGhlbiBpbiB6bGliLmggeW91IHNo b3VsZCBjaGFuZ2UgWkxJQl9WRVJOVU0gdG8gMHgxMjNmLCBhbmQKLSAgICBaTElCX1ZFUlNJT04g dG8gc29tZXRoaW5nIGxpa2UgIjEuMi4zLmYtemFjaGFyeS1tb2RzLXYzIi4gWW91IGNhbiBhbHNv CisgICAgWkxJQl9WRVJTSU9OIHRvIHNvbWV0aGluZyBsaWtlICIxLjIuMy5mLXphY2hhcnktbW9k cy12MyIuICBZb3UgY2FuIGFsc28KICAgICB1cGRhdGUgdGhlIHZlcnNpb24gc3RyaW5ncyBpbiBk ZWZsYXRlLmMgYW5kIGluZnRyZWVzLmMuCiAKICAgICBGb3IgYWx0ZXJlZCBzb3VyY2UgZGlzdHJp YnV0aW9ucywgeW91IHNob3VsZCBhbHNvIG5vdGUgdGhlIG9yaWdpbiBhbmQKICAgICBuYXR1cmUg b2YgdGhlIGNoYW5nZXMgaW4gemxpYi5oLCBhcyB3ZWxsIGFzIGluIENoYW5nZUxvZyBhbmQgUkVB RE1FLCBhbG9uZwotICAgIHdpdGggdGhlIGRhdGVzIG9mIHRoZSBhbHRlcmF0aW9ucy4gVGhlIG9y aWdpbiBzaG91bGQgaW5jbHVkZSBhdCBsZWFzdCB5b3VyCisgICAgd2l0aCB0aGUgZGF0ZXMgb2Yg dGhlIGFsdGVyYXRpb25zLiAgVGhlIG9yaWdpbiBzaG91bGQgaW5jbHVkZSBhdCBsZWFzdCB5b3Vy CiAgICAgbmFtZSAob3IgeW91ciBjb21wYW55J3MgbmFtZSksIGFuZCBhbiBlbWFpbCBhZGRyZXNz IHRvIGNvbnRhY3QgZm9yIGhlbHAgb3IKICAgICBpc3N1ZXMgd2l0aCB0aGUgbGlicmFyeS4KIApA QCAtMjA0LDExOSArMTk4LDEzNiBAQAogCiAyNi4gV2lsbCB6bGliIHdvcmsgb24gYSA2NC1iaXQg bWFjaGluZT8KIAotICAgIEl0IHNob3VsZC4gSXQgaGFzIGJlZW4gdGVzdGVkIG9uIDY0LWJpdCBt YWNoaW5lcywgYW5kIGhhcyBubyBkZXBlbmRlbmNlCi0gICAgb24gYW55IGRhdGEgdHlwZXMgYmVp bmcgbGltaXRlZCB0byAzMi1iaXRzIGluIGxlbmd0aC4gSWYgeW91IGhhdmUgYW55CisgICAgWWVz LiAgSXQgaGFzIGJlZW4gdGVzdGVkIG9uIDY0LWJpdCBtYWNoaW5lcywgYW5kIGhhcyBubyBkZXBl bmRlbmNlIG9uIGFueQorICAgIGRhdGEgdHlwZXMgYmVpbmcgbGltaXRlZCB0byAzMi1iaXRzIGlu IGxlbmd0aC4gIElmIHlvdSBoYXZlIGFueQogICAgIGRpZmZpY3VsdGllcywgcGxlYXNlIHByb3Zp ZGUgYSBjb21wbGV0ZSBwcm9ibGVtIHJlcG9ydCB0byB6bGliQGd6aXAub3JnCiAKIDI3LiBXaWxs IHpsaWIgZGVjb21wcmVzcyBkYXRhIGZyb20gdGhlIFBLV2FyZSBEYXRhIENvbXByZXNzaW9uIExp YnJhcnk/CiAKLSAgICBOby4gVGhlIFBLV2FyZSBEQ0wgdXNlcyBhIGNvbXBsZXRlbHkgZGlmZmVy ZW50IGNvbXByZXNzZWQgZGF0YSBmb3JtYXQKLSAgICB0aGFuIGRvZXMgUEtaSVAgYW5kIHpsaWIu IEhvd2V2ZXIsIHlvdSBjYW4gbG9vayBpbiB6bGliJ3MgY29udHJpYi9ibGFzdAorICAgIE5vLiAg VGhlIFBLV2FyZSBEQ0wgdXNlcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvbXByZXNzZWQgZGF0 YSBmb3JtYXQgdGhhbgorICAgIGRvZXMgUEtaSVAgYW5kIHpsaWIuICBIb3dldmVyLCB5b3UgY2Fu IGxvb2sgaW4gemxpYidzIGNvbnRyaWIvYmxhc3QKICAgICBkaXJlY3RvcnkgZm9yIGEgcG9zc2li bGUgc29sdXRpb24gdG8geW91ciBwcm9ibGVtLgogCiAyOC4gQ2FuIEkgYWNjZXNzIGRhdGEgcmFu ZG9tbHkgaW4gYSBjb21wcmVzc2VkIHN0cmVhbT8KIAotICAgIE5vLCBub3Qgd2l0aG91dCBzb21l IHByZXBhcmF0aW9uLiBJZiB3aGVuIGNvbXByZXNzaW5nIHlvdSBwZXJpb2RpY2FsbHkKLSAgICB1 c2UgWl9GVUxMX0ZMVVNILCBjYXJlZnVsbHkgd3JpdGUgYWxsIHRoZSBwZW5kaW5nIGRhdGEgYXQg dGhvc2UgcG9pbnRzLAotICAgIGFuZCBrZWVwIGFuIGluZGV4IG9mIHRob3NlIGxvY2F0aW9ucywg dGhlbiB5b3UgY2FuIHN0YXJ0IGRlY29tcHJlc3Npb24KLSAgICBhdCB0aG9zZSBwb2ludHMuIFlv dSBoYXZlIHRvIGJlIGNhcmVmdWwgdG8gbm90IHVzZSBaX0ZVTExfRkxVU0ggdG9vCi0gICAgb2Z0 ZW4sIHNpbmNlIGl0IGNhbiBzaWduaWZpY2FudGx5IGRlZ3JhZGUgY29tcHJlc3Npb24uCisgICAg Tm8sIG5vdCB3aXRob3V0IHNvbWUgcHJlcGFyYXRpb24uICBJZiB3aGVuIGNvbXByZXNzaW5nIHlv dSBwZXJpb2RpY2FsbHkgdXNlCisgICAgWl9GVUxMX0ZMVVNILCBjYXJlZnVsbHkgd3JpdGUgYWxs IHRoZSBwZW5kaW5nIGRhdGEgYXQgdGhvc2UgcG9pbnRzLCBhbmQKKyAgICBrZWVwIGFuIGluZGV4 IG9mIHRob3NlIGxvY2F0aW9ucywgdGhlbiB5b3UgY2FuIHN0YXJ0IGRlY29tcHJlc3Npb24gYXQg dGhvc2UKKyAgICBwb2ludHMuICBZb3UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIG5vdCB1c2UgWl9G VUxMX0ZMVVNIIHRvbyBvZnRlbiwgc2luY2UgaXQKKyAgICBjYW4gc2lnbmlmaWNhbnRseSBkZWdy YWRlIGNvbXByZXNzaW9uLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzY2FuIGEKKyAgICBkZWZs YXRlIHN0cmVhbSBvbmNlIHRvIGdlbmVyYXRlIGFuIGluZGV4LCBhbmQgdGhlbiB1c2UgdGhhdCBp bmRleCBmb3IKKyAgICByYW5kb20gYWNjZXNzLiAgU2VlIGV4YW1wbGVzL3pyYW4uYyAuCiAKIDI5 LiBEb2VzIHpsaWIgd29yayBvbiBNVlMsIE9TLzM5MCwgQ0lDUywgZXRjLj8KIAotICAgIFdlIGRv bid0IGtub3cgZm9yIHN1cmUuIFdlIGhhdmUgaGVhcmQgb2NjYXNpb25hbCByZXBvcnRzIG9mIHN1 Y2Nlc3Mgb24KLSAgICB0aGVzZSBzeXN0ZW1zLiBJZiB5b3UgZG8gdXNlIGl0IG9uIG9uZSBvZiB0 aGVzZSwgcGxlYXNlIHByb3ZpZGUgdXMgd2l0aAotICAgIGEgcmVwb3J0LCBpbnN0cnVjdGlvbnMs IGFuZCBwYXRjaGVzIHRoYXQgd2UgY2FuIHJlZmVyZW5jZSB3aGVuIHdlIGdldAotICAgIHRoZXNl IHF1ZXN0aW9ucy4gVGhhbmtzLgorICAgIEl0IGhhcyBpbiB0aGUgcGFzdCwgYnV0IHdlIGhhdmUg bm90IGhlYXJkIG9mIGFueSByZWNlbnQgZXZpZGVuY2UuICBUaGVyZQorICAgIHdlcmUgd29ya2lu ZyBwb3J0cyBvZiB6bGliIDEuMS40IHRvIE1WUywgYnV0IHRob3NlIGxpbmtzIG5vIGxvbmdlciB3 b3JrLgorICAgIElmIHlvdSBrbm93IG9mIHJlY2VudCwgc3VjY2Vzc2Z1bCBhcHBsaWNhdGlvbnMg b2YgemxpYiBvbiB0aGVzZSBvcGVyYXRpbmcKKyAgICBzeXN0ZW1zLCBwbGVhc2UgbGV0IHVzIGtu b3cuICBUaGFua3MuCiAKLTMwLiBJcyB0aGVyZSBzb21lIHNpbXBsZXIsIGVhc2llciB0byByZWFk IHZlcnNpb24gb2YgaW5mbGF0ZSBJIGNhbiBsb29rIGF0Ci0gICAgdG8gdW5kZXJzdGFuZCB0aGUg ZGVmbGF0ZSBmb3JtYXQ/CiszMC4gSXMgdGhlcmUgc29tZSBzaW1wbGVyLCBlYXNpZXIgdG8gcmVh ZCB2ZXJzaW9uIG9mIGluZmxhdGUgSSBjYW4gbG9vayBhdCB0bworICAgIHVuZGVyc3RhbmQgdGhl IGRlZmxhdGUgZm9ybWF0PwogCi0gICAgRmlyc3Qgb2ZmLCB5b3Ugc2hvdWxkIHJlYWQgUkZDIDE5 NTEuIFNlY29uZCwgeWVzLiBMb29rIGluIHpsaWIncworICAgIEZpcnN0IG9mZiwgeW91IHNob3Vs ZCByZWFkIFJGQyAxOTUxLiAgU2Vjb25kLCB5ZXMuICBMb29rIGluIHpsaWIncwogICAgIGNvbnRy aWIvcHVmZiBkaXJlY3RvcnkuCiAKIDMxLiBEb2VzIHpsaWIgaW5mcmluZ2Ugb24gYW55IHBhdGVu dHM/CiAKLSAgICBBcyBmYXIgYXMgd2Uga25vdywgbm8uIEluIGZhY3QsIHRoYXQgd2FzIG9yaWdp bmFsbHkgdGhlIHdob2xlIHBvaW50IGJlaGluZAotICAgIHpsaWIuIExvb2sgaGVyZSBmb3Igc29t ZSBtb3JlIGluZm9ybWF0aW9uOgorICAgIEFzIGZhciBhcyB3ZSBrbm93LCBuby4gIEluIGZhY3Qs IHRoYXQgd2FzIG9yaWdpbmFsbHkgdGhlIHdob2xlIHBvaW50IGJlaGluZAorICAgIHpsaWIuICBM b29rIGhlcmUgZm9yIHNvbWUgbW9yZSBpbmZvcm1hdGlvbjoKIAogICAgIGh0dHA6Ly93d3cuZ3pp cC5vcmcvI2ZhcTExCiAKIDMyLiBDYW4gemxpYiB3b3JrIHdpdGggZ3JlYXRlciB0aGFuIDQgR0Ig b2YgZGF0YT8KIAotICAgIFllcy4gaW5mbGF0ZSgpIGFuZCBkZWZsYXRlKCkgd2lsbCBwcm9jZXNz IGFueSBhbW91bnQgb2YgZGF0YSBjb3JyZWN0bHkuCisgICAgWWVzLiAgaW5mbGF0ZSgpIGFuZCBk ZWZsYXRlKCkgd2lsbCBwcm9jZXNzIGFueSBhbW91bnQgb2YgZGF0YSBjb3JyZWN0bHkuCiAgICAg RWFjaCBjYWxsIG9mIGluZmxhdGUoKSBvciBkZWZsYXRlKCkgaXMgbGltaXRlZCB0byBpbnB1dCBh bmQgb3V0cHV0IGNodW5rcwogICAgIG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgY2FuIGJlIHN0 b3JlZCBpbiB0aGUgY29tcGlsZXIncyAidW5zaWduZWQgaW50IgotICAgIHR5cGUsIGJ1dCB0aGVy ZSBpcyBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGNodW5rcy4gTm90ZSBob3dldmVyIHRoYXQg dGhlCi0gICAgc3RybS50b3RhbF9pbiBhbmQgc3RybV90b3RhbF9vdXQgY291bnRlcnMgbWF5IGJl IGxpbWl0ZWQgdG8gNCBHQi4gVGhlc2UKKyAgICB0eXBlLCBidXQgdGhlcmUgaXMgbm8gbGltaXQg dG8gdGhlIG51bWJlciBvZiBjaHVua3MuICBOb3RlIGhvd2V2ZXIgdGhhdCB0aGUKKyAgICBzdHJt LnRvdGFsX2luIGFuZCBzdHJtX3RvdGFsX291dCBjb3VudGVycyBtYXkgYmUgbGltaXRlZCB0byA0 IEdCLiAgVGhlc2UKICAgICBjb3VudGVycyBhcmUgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBh bmQgYXJlIG5vdCB1c2VkIGludGVybmFsbHkgYnkKLSAgICBpbmZsYXRlKCkgb3IgZGVmbGF0ZSgp LiBUaGUgYXBwbGljYXRpb24gY2FuIGVhc2lseSBzZXQgdXAgaXRzIG93biBjb3VudGVycworICAg IGluZmxhdGUoKSBvciBkZWZsYXRlKCkuICBUaGUgYXBwbGljYXRpb24gY2FuIGVhc2lseSBzZXQg dXAgaXRzIG93biBjb3VudGVycwogICAgIHVwZGF0ZWQgYWZ0ZXIgZWFjaCBjYWxsIG9mIGluZmxh dGUoKSBvciBkZWZsYXRlKCkgdG8gY291bnQgYmV5b25kIDQgR0IuCiAgICAgY29tcHJlc3MoKSBh bmQgdW5jb21wcmVzcygpIG1heSBiZSBsaW1pdGVkIHRvIDQgR0IsIHNpbmNlIHRoZXkgb3BlcmF0 ZSBpbiBhCi0gICAgc2luZ2xlIGNhbGwuIGd6c2VlaygpIGFuZCBnenRlbGwoKSBtYXkgYmUgbGlt aXRlZCB0byA0IEdCIGRlcGVuZGluZyBvbiBob3cKLSAgICB6bGliIGlzIGNvbXBpbGVkLiBTZWUg dGhlIHpsaWJDb21waWxlRmxhZ3MoKSBmdW5jdGlvbiBpbiB6bGliLmguCisgICAgc2luZ2xlIGNh bGwuICBnenNlZWsoKSBhbmQgZ3p0ZWxsKCkgbWF5IGJlIGxpbWl0ZWQgdG8gNCBHQiBkZXBlbmRp bmcgb24gaG93CisgICAgemxpYiBpcyBjb21waWxlZC4gIFNlZSB0aGUgemxpYkNvbXBpbGVGbGFn cygpIGZ1bmN0aW9uIGluIHpsaWIuaC4KIAotICAgIFRoZSB3b3JkICJtYXkiIGFwcGVhcnMgc2V2 ZXJhbCB0aW1lcyBhYm92ZSBzaW5jZSB0aGVyZSBpcyBhIDQgR0IgbGltaXQKLSAgICBvbmx5IGlm IHRoZSBjb21waWxlcidzICJsb25nIiB0eXBlIGlzIDMyIGJpdHMuIElmIHRoZSBjb21waWxlcidz ICJsb25nIgotICAgIHR5cGUgaXMgNjQgYml0cywgdGhlbiB0aGUgbGltaXQgaXMgMTYgZXhhYnl0 ZXMuCisgICAgVGhlIHdvcmQgIm1heSIgYXBwZWFycyBzZXZlcmFsIHRpbWVzIGFib3ZlIHNpbmNl IHRoZXJlIGlzIGEgNCBHQiBsaW1pdCBvbmx5CisgICAgaWYgdGhlIGNvbXBpbGVyJ3MgImxvbmci IHR5cGUgaXMgMzIgYml0cy4gIElmIHRoZSBjb21waWxlcidzICJsb25nIiB0eXBlIGlzCisgICAg NjQgYml0cywgdGhlbiB0aGUgbGltaXQgaXMgMTYgZXhhYnl0ZXMuCiAKIDMzLiBEb2VzIHpsaWIg aGF2ZSBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzPwogCi0gICAgVGhlIG9ubHkgb25lIHRo YXQgd2UgYXJlIGF3YXJlIG9mIGlzIHBvdGVudGlhbGx5IGluIGd6cHJpbnRmKCkuIElmIHpsaWIK LSAgICBpcyBjb21waWxlZCB0byB1c2Ugc3ByaW50ZigpIG9yIHZzcHJpbnRmKCksIHRoZW4gdGhl cmUgaXMgbm8gcHJvdGVjdGlvbgotICAgIGFnYWluc3QgYSBidWZmZXIgb3ZlcmZsb3cgb2YgYSA0 SyBzdHJpbmcgc3BhY2UsIG90aGVyIHRoYW4gdGhlIGNhbGxlciBvZgotICAgIGd6cHJpbnRmKCkg YXNzdXJpbmcgdGhhdCB0aGUgb3V0cHV0IHdpbGwgbm90IGV4Y2VlZCA0Sy4gT24gdGhlIG90aGVy Ci0gICAgaGFuZCwgaWYgemxpYiBpcyBjb21waWxlZCB0byB1c2Ugc25wcmludGYoKSBvciB2c25w cmludGYoKSwgd2hpY2ggc2hvdWxkCi0gICAgbm9ybWFsbHkgYmUgdGhlIGNhc2UsIHRoZW4gdGhl cmUgaXMgbm8gdnVsbmVyYWJpbGl0eS4gVGhlIC4vY29uZmlndXJlCi0gICAgc2NyaXB0IHdpbGwg ZGlzcGxheSB3YXJuaW5ncyBpZiBhbiBpbnNlY3VyZSB2YXJpYXRpb24gb2Ygc3ByaW50ZigpIHdp bGwKLSAgICBiZSB1c2VkIGJ5IGd6cHJpbnRmKCkuIEFsc28gdGhlIHpsaWJDb21waWxlRmxhZ3Mo KSBmdW5jdGlvbiB3aWxsIHJldHVybgotICAgIGluZm9ybWF0aW9uIG9uIHdoYXQgdmFyaWFudCBv ZiBzcHJpbnRmKCkgaXMgdXNlZCBieSBnenByaW50ZigpLgorICAgIFRoZSBvbmx5IG9uZSB0aGF0 IHdlIGFyZSBhd2FyZSBvZiBpcyBwb3RlbnRpYWxseSBpbiBnenByaW50ZigpLiAgSWYgemxpYiBp cworICAgIGNvbXBpbGVkIHRvIHVzZSBzcHJpbnRmKCkgb3IgdnNwcmludGYoKSwgdGhlbiB0aGVy ZSBpcyBubyBwcm90ZWN0aW9uCisgICAgYWdhaW5zdCBhIGJ1ZmZlciBvdmVyZmxvdyBvZiBhbiA4 SyBzdHJpbmcgc3BhY2UgKG9yIG90aGVyIHZhbHVlIGFzIHNldCBieQorICAgIGd6YnVmZmVyKCkp LCBvdGhlciB0aGFuIHRoZSBjYWxsZXIgb2YgZ3pwcmludGYoKSBhc3N1cmluZyB0aGF0IHRoZSBv dXRwdXQKKyAgICB3aWxsIG5vdCBleGNlZWQgOEsuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgemxp YiBpcyBjb21waWxlZCB0byB1c2UKKyAgICBzbnByaW50ZigpIG9yIHZzbnByaW50ZigpLCB3aGlj aCBzaG91bGQgbm9ybWFsbHkgYmUgdGhlIGNhc2UsIHRoZW4gdGhlcmUgaXMKKyAgICBubyB2dWxu ZXJhYmlsaXR5LiAgVGhlIC4vY29uZmlndXJlIHNjcmlwdCB3aWxsIGRpc3BsYXkgd2FybmluZ3Mg aWYgYW4KKyAgICBpbnNlY3VyZSB2YXJpYXRpb24gb2Ygc3ByaW50ZigpIHdpbGwgYmUgdXNlZCBi eSBnenByaW50ZigpLiAgQWxzbyB0aGUKKyAgICB6bGliQ29tcGlsZUZsYWdzKCkgZnVuY3Rpb24g d2lsbCByZXR1cm4gaW5mb3JtYXRpb24gb24gd2hhdCB2YXJpYW50IG9mCisgICAgc3ByaW50Zigp IGlzIHVzZWQgYnkgZ3pwcmludGYoKS4KIAogICAgIElmIHlvdSBkb24ndCBoYXZlIHNucHJpbnRm KCkgb3IgdnNucHJpbnRmKCkgYW5kIHdvdWxkIGxpa2Ugb25lLCB5b3UgY2FuCiAgICAgZmluZCBh IHBvcnRhYmxlIGltcGxlbWVudGF0aW9uIGhlcmU6CiAKICAgICAgICAgaHR0cDovL3d3dy5panMu c2kvc29mdHdhcmUvc25wcmludGYvCiAKLSAgICBOb3RlIHRoYXQgeW91IHNob3VsZCBiZSB1c2lu ZyB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB6bGliLiBWZXJzaW9ucwotICAgIDEuMS4zIGFu ZCBiZWZvcmUgd2VyZSBzdWJqZWN0IHRvIGEgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eS4KKyAg ICBOb3RlIHRoYXQgeW91IHNob3VsZCBiZSB1c2luZyB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBv ZiB6bGliLiAgVmVyc2lvbnMKKyAgICAxLjEuMyBhbmQgYmVmb3JlIHdlcmUgc3ViamVjdCB0byBh IGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdHksIGFuZCB2ZXJzaW9ucworICAgIDEuMi4xIGFuZCAx LjIuMiB3ZXJlIHN1YmplY3QgdG8gYW4gYWNjZXNzIGV4Y2VwdGlvbiB3aGVuIGRlY29tcHJlc3Np bmcKKyAgICBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YS4KIAogMzQuIElzIHRoZXJlIGEgSmF2YSB2 ZXJzaW9uIG9mIHpsaWI/CiAKICAgICBQcm9iYWJseSB3aGF0IHlvdSB3YW50IGlzIHRvIHVzZSB6 bGliIGluIEphdmEuIHpsaWIgaXMgYWxyZWFkeSBpbmNsdWRlZAogICAgIGFzIHBhcnQgb2YgdGhl IEphdmEgU0RLIGluIHRoZSBqYXZhLnV0aWwuemlwIHBhY2thZ2UuIElmIHlvdSByZWFsbHkgd2Fu dAogICAgIGEgdmVyc2lvbiBvZiB6bGliIHdyaXR0ZW4gaW4gdGhlIEphdmEgbGFuZ3VhZ2UsIGxv b2sgb24gdGhlIHpsaWIgaG9tZQotICAgIHBhZ2UgZm9yIGxpbmtzOiBodHRwOi8vd3d3LnpsaWIu b3JnLworICAgIHBhZ2UgZm9yIGxpbmtzOiBodHRwOi8vemxpYi5uZXQvIC4KIAogMzUuIEkgZ2V0 IHRoaXMgb3IgdGhhdCBjb21waWxlciBvciBzb3VyY2UtY29kZSBzY2FubmVyIHdhcm5pbmcgd2hl biBJIGNyYW5rIGl0CiAgICAgdXAgdG8gbWF4aW1hbGx5LXBlZGFudGljLiBDYW4ndCB5b3UgZ3V5 cyB3cml0ZSBwcm9wZXIgY29kZT8KIAogICAgIE1hbnkgeWVhcnMgYWdvLCB3ZSBnYXZlIHVwIGF0 dGVtcHRpbmcgdG8gYXZvaWQgd2FybmluZ3Mgb24gZXZlcnkgY29tcGlsZXIKLSAgICBpbiB0aGUg dW5pdmVyc2UuIEl0IGp1c3QgZ290IHRvIGJlIGEgd2FzdGUgb2YgdGltZSwgYW5kIHNvbWUgY29t cGlsZXJzCi0gICAgd2VyZSBkb3ducmlnaHQgc2lsbHkuIFNvIG5vdywgd2Ugc2ltcGx5IG1ha2Ug c3VyZSB0aGF0IHRoZSBjb2RlIGFsd2F5cwotICAgIHdvcmtzLgorICAgIGluIHRoZSB1bml2ZXJz ZS4gIEl0IGp1c3QgZ290IHRvIGJlIGEgd2FzdGUgb2YgdGltZSwgYW5kIHNvbWUgY29tcGlsZXJz CisgICAgd2VyZSBkb3ducmlnaHQgc2lsbHkgYXMgd2VsbCBhcyBjb250cmFkaWN0ZWQgZWFjaCBv dGhlci4gIFNvIG5vdywgd2Ugc2ltcGx5CisgICAgbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgYWx3 YXlzIHdvcmtzLgogCi0zNi4gV2lsbCB6bGliIHJlYWQgdGhlIChpbnNlcnQgYW55IGFuY2llbnQg b3IgYXJjYW5lIGZvcm1hdCBoZXJlKSBjb21wcmVzc2VkCiszNi4gVmFsZ3JpbmQgKG9yIHNvbWUg c2ltaWxhciBtZW1vcnkgYWNjZXNzIGNoZWNrZXIpIHNheXMgdGhhdCBkZWZsYXRlIGlzCisgICAg cGVyZm9ybWluZyBhIGNvbmRpdGlvbmFsIGp1bXAgdGhhdCBkZXBlbmRzIG9uIGFuIHVuaW5pdGlh bGl6ZWQgdmFsdWUuCisgICAgSXNuJ3QgdGhhdCBhIGJ1Zz8KKworICAgIE5vLiAgVGhhdCBpcyBp bnRlbnRpb25hbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgYW5kIHRoZSBvdXRwdXQgb2YgZGVm bGF0ZQorICAgIGlzIG5vdCBhZmZlY3RlZC4gIFRoaXMgb25seSBzdGFydGVkIHNob3dpbmcgdXAg cmVjZW50bHkgc2luY2UgemxpYiAxLjIueAorICAgIHVzZXMgbWFsbG9jKCkgYnkgZGVmYXVsdCBm b3IgYWxsb2NhdGlvbnMsIHdoZXJlYXMgZWFybGllciB2ZXJzaW9ucyB1c2VkCisgICAgY2FsbG9j KCksIHdoaWNoIHplcm9zIG91dCB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gIEV2ZW4gdGhvdWdoIHRo ZSBjb2RlIHdhcworICAgIGNvcnJlY3QsIHZlcnNpb25zIDEuMi40IGFuZCBsYXRlciB3YXMgY2hh bmdlZCB0byBub3Qgc3RpbXVsYXRlIHRoZXNlCisgICAgY2hlY2tlcnMuCisKKzM3LiBXaWxsIHps aWIgcmVhZCB0aGUgKGluc2VydCBhbnkgYW5jaWVudCBvciBhcmNhbmUgZm9ybWF0IGhlcmUpIGNv bXByZXNzZWQKICAgICBkYXRhIGZvcm1hdD8KIAogICAgIFByb2JhYmx5IG5vdC4gTG9vayBpbiB0 aGUgY29tcC5jb21wcmVzc2lvbiBGQVEgZm9yIHBvaW50ZXJzIHRvIHZhcmlvdXMKICAgICBmb3Jt YXRzIGFuZCBhc3NvY2lhdGVkIHNvZnR3YXJlLgogCi0zNy4gSG93IGNhbiBJIGVuY3J5cHQvZGVj cnlwdCB6aXAgZmlsZXMgd2l0aCB6bGliPworMzguIEhvdyBjYW4gSSBlbmNyeXB0L2RlY3J5cHQg emlwIGZpbGVzIHdpdGggemxpYj8KIAotICAgIHpsaWIgZG9lc24ndCBzdXBwb3J0IGVuY3J5cHRp b24uIFRoZSBvcmlnaW5hbCBQS1pJUCBlbmNyeXB0aW9uIGlzIHZlcnkgd2VhawotICAgIGFuZCBj YW4gYmUgYnJva2VuIHdpdGggZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtcy4gVG8gZ2V0IHN0cm9u ZyBlbmNyeXB0aW9uLAotICAgIHVzZSBHbnVQRywgaHR0cDovL3d3dy5nbnVwZy5vcmcvICwgd2hp Y2ggYWxyZWFkeSBpbmNsdWRlcyB6bGliIGNvbXByZXNzaW9uLgotICAgIEZvciBQS1pJUCBjb21w YXRpYmxlICJlbmNyeXB0aW9uIiwgbG9vayBhdCBodHRwOi8vd3d3LmluZm8temlwLm9yZy8KKyAg ICB6bGliIGRvZXNuJ3Qgc3VwcG9ydCBlbmNyeXB0aW9uLiAgVGhlIG9yaWdpbmFsIFBLWklQIGVu Y3J5cHRpb24gaXMgdmVyeQorICAgIHdlYWsgYW5kIGNhbiBiZSBicm9rZW4gd2l0aCBmcmVlbHkg YXZhaWxhYmxlIHByb2dyYW1zLiAgVG8gZ2V0IHN0cm9uZworICAgIGVuY3J5cHRpb24sIHVzZSBH bnVQRywgaHR0cDovL3d3dy5nbnVwZy5vcmcvICwgd2hpY2ggYWxyZWFkeSBpbmNsdWRlcyB6bGli CisgICAgY29tcHJlc3Npb24uICBGb3IgUEtaSVAgY29tcGF0aWJsZSAiZW5jcnlwdGlvbiIsIGxv b2sgYXQKKyAgICBodHRwOi8vd3d3LmluZm8temlwLm9yZy8KIAotMzguIFdoYXQncyB0aGUgZGlm ZmVyZW5jZSBiZXR3ZWVuIHRoZSAiZ3ppcCIgYW5kICJkZWZsYXRlIiBIVFRQIDEuMSBlbmNvZGlu Z3M/CiszOS4gV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlICJnemlwIiBhbmQgImRl ZmxhdGUiIEhUVFAgMS4xIGVuY29kaW5ncz8KIAotICAgICJnemlwIiBpcyB0aGUgZ3ppcCBmb3Jt YXQsIGFuZCAiZGVmbGF0ZSIgaXMgdGhlIHpsaWIgZm9ybWF0LiBUaGV5IHNob3VsZAotICAgIHBy b2JhYmx5IGhhdmUgY2FsbGVkIHRoZSBzZWNvbmQgb25lICJ6bGliIiBpbnN0ZWFkIHRvIGF2b2lk IGNvbmZ1c2lvbgotICAgIHdpdGggdGhlIHJhdyBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBmb3Jt YXQuIFdoaWxlIHRoZSBIVFRQIDEuMSBSRkMgMjYxNgorICAgICJnemlwIiBpcyB0aGUgZ3ppcCBm b3JtYXQsIGFuZCAiZGVmbGF0ZSIgaXMgdGhlIHpsaWIgZm9ybWF0LiAgVGhleSBzaG91bGQKKyAg ICBwcm9iYWJseSBoYXZlIGNhbGxlZCB0aGUgc2Vjb25kIG9uZSAiemxpYiIgaW5zdGVhZCB0byBh dm9pZCBjb25mdXNpb24gd2l0aAorICAgIHRoZSByYXcgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEg Zm9ybWF0LiAgV2hpbGUgdGhlIEhUVFAgMS4xIFJGQyAyNjE2CiAgICAgY29ycmVjdGx5IHBvaW50 cyB0byB0aGUgemxpYiBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUwIGZvciB0aGUgImRlZmxhdGUi CiAgICAgdHJhbnNmZXIgZW5jb2RpbmcsIHRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIG9mIHNlcnZl cnMgYW5kIGJyb3dzZXJzIHRoYXQKICAgICBpbmNvcnJlY3RseSBwcm9kdWNlIG9yIGV4cGVjdCBy YXcgZGVmbGF0ZSBkYXRhIHBlciB0aGUgZGVmbGF0ZQotICAgIHNwZWNmaWNpYXRpb24gaW4gUkZD IDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuIFNvIGV2ZW4gdGhvdWdoIHRoZQorICAgIHNw ZWNpZmljYXRpb24gaW4gUkZDIDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuICBTbyBldmVu IHRob3VnaCB0aGUKICAgICAiZGVmbGF0ZSIgdHJhbnNmZXIgZW5jb2RpbmcgdXNpbmcgdGhlIHps aWIgZm9ybWF0IHdvdWxkIGJlIHRoZSBtb3JlCiAgICAgZWZmaWNpZW50IGFwcHJvYWNoIChhbmQg aW4gZmFjdCBleGFjdGx5IHdoYXQgdGhlIHpsaWIgZm9ybWF0IHdhcyBkZXNpZ25lZAogICAgIGZv ciksIHVzaW5nIHRoZSAiZ3ppcCIgdHJhbnNmZXIgZW5jb2RpbmcgaXMgcHJvYmFibHkgbW9yZSBy ZWxpYWJsZSBkdWUgdG8KQEAgLTMyNCwxNCArMzM1LDM0IEBACiAKICAgICBCb3R0b20gbGluZTog dXNlIHRoZSBnemlwIGZvcm1hdCBmb3IgSFRUUCAxLjEgZW5jb2RpbmcuCiAKLTM5LiBEb2VzIHps aWIgc3VwcG9ydCB0aGUgbmV3ICJEZWZsYXRlNjQiIGZvcm1hdCBpbnRyb2R1Y2VkIGJ5IFBLV2Fy ZT8KKzQwLiBEb2VzIHpsaWIgc3VwcG9ydCB0aGUgbmV3ICJEZWZsYXRlNjQiIGZvcm1hdCBpbnRy b2R1Y2VkIGJ5IFBLV2FyZT8KIAotICAgIE5vLiBQS1dhcmUgaGFzIGFwcGFyZW50bHkgZGVjaWRl ZCB0byBrZWVwIHRoYXQgZm9ybWF0IHByb3ByaWV0YXJ5LCBzaW5jZQotICAgIHRoZXkgaGF2ZSBu b3QgZG9jdW1lbnRlZCBpdCBhcyB0aGV5IGhhdmUgcHJldmlvdXMgY29tcHJlc3Npb24gZm9ybWF0 cy4KLSAgICBJbiBhbnkgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGltcHJvdmVtZW50cyBhcmUgc28g bW9kZXN0IGNvbXBhcmVkIHRvIG90aGVyCi0gICAgbW9yZSBtb2Rlcm4gYXBwcm9hY2hlcywgdGhh dCBpdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IHRvIGltcGxlbWVudC4KKyAgICBOby4gIFBLV2Fy ZSBoYXMgYXBwYXJlbnRseSBkZWNpZGVkIHRvIGtlZXAgdGhhdCBmb3JtYXQgcHJvcHJpZXRhcnks IHNpbmNlCisgICAgdGhleSBoYXZlIG5vdCBkb2N1bWVudGVkIGl0IGFzIHRoZXkgaGF2ZSBwcmV2 aW91cyBjb21wcmVzc2lvbiBmb3JtYXRzLiAgSW4KKyAgICBhbnkgY2FzZSwgdGhlIGNvbXByZXNz aW9uIGltcHJvdmVtZW50cyBhcmUgc28gbW9kZXN0IGNvbXBhcmVkIHRvIG90aGVyIG1vcmUKKyAg ICBtb2Rlcm4gYXBwcm9hY2hlcywgdGhhdCBpdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IHRvIGlt cGxlbWVudC4KIAotNDAuIENhbiB5b3UgcGxlYXNlIHNpZ24gdGhlc2UgbGVuZ3RoeSBsZWdhbCBk b2N1bWVudHMgYW5kIGZheCB0aGVtIGJhY2sgdG8gdXMKKzQxLiBJJ20gaGF2aW5nIGEgcHJvYmxl bSB3aXRoIHRoZSB6aXAgZnVuY3Rpb25zIGluIHpsaWIsIGNhbiB5b3UgaGVscD8KKworICAgIFRo ZXJlIGFyZSBubyB6aXAgZnVuY3Rpb25zIGluIHpsaWIuICBZb3UgYXJlIHByb2JhYmx5IHVzaW5n IG1pbml6aXAgYnkKKyAgICBHaWxlcyBWb2xsYW50LCB3aGljaCBpcyBmb3VuZCBpbiB0aGUgY29u dHJpYiBkaXJlY3Rvcnkgb2YgemxpYi4gIEl0IGlzIG5vdAorICAgIHBhcnQgb2YgemxpYi4gIElu IGZhY3Qgbm9uZSBvZiB0aGUgc3R1ZmYgaW4gY29udHJpYiBpcyBwYXJ0IG9mIHpsaWIuICBUaGUK KyAgICBmaWxlcyBpbiB0aGVyZSBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgemxpYiBhdXRob3Jz LiAgWW91IG5lZWQgdG8gY29udGFjdAorICAgIHRoZSBhdXRob3JzIG9mIHRoZSByZXNwZWN0aXZl IGNvbnRyaWJ1dGlvbiBmb3IgaGVscC4KKworNDIuIFRoZSBtYXRjaC5hc20gY29kZSBpbiBjb250 cmliIGlzIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAgICBTaW5jZSBp dCdzIHBhcnQgb2YgemxpYiwgZG9lc24ndCB0aGF0IG1lYW4gdGhhdCBhbGwgb2YgemxpYiBmYWxs cyB1bmRlciB0aGUKKyAgICBHTlUgR1BMPworCisgICAgTm8uICBUaGUgZmlsZXMgaW4gY29udHJp YiBhcmUgbm90IHBhcnQgb2YgemxpYi4gIFRoZXkgd2VyZSBjb250cmlidXRlZCBieQorICAgIG90 aGVyIGF1dGhvcnMgYW5kIGFyZSBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlIHRvIHRoZSB1c2Vy IHdpdGhpbiB0aGUgemxpYgorICAgIGRpc3RyaWJ1dGlvbi4gIEVhY2ggaXRlbSBpbiBjb250cmli IGhhcyBpdHMgb3duIGxpY2Vuc2UuCisKKzQzLiBJcyB6bGliIHN1YmplY3QgdG8gZXhwb3J0IGNv bnRyb2xzPyAgV2hhdCBpcyBpdHMgRUNDTj8KKworICAgIHpsaWIgaXMgbm90IHN1YmplY3QgdG8g ZXhwb3J0IGNvbnRyb2xzLCBhbmQgc28gaXMgY2xhc3NpZmllZCBhcyBFQVI5OS4KKworNDQuIENh biB5b3UgcGxlYXNlIHNpZ24gdGhlc2UgbGVuZ3RoeSBsZWdhbCBkb2N1bWVudHMgYW5kIGZheCB0 aGVtIGJhY2sgdG8gdXMKICAgICBzbyB0aGF0IHdlIGNhbiB1c2UgeW91ciBzb2Z0d2FyZSBpbiBv dXIgcHJvZHVjdD8KIAogICAgIE5vLiBHbyBhd2F5LiBTaG9vLgpkaWZmIC1yIDlhMzE3NzIzMTc5 MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9JTkRFWAotLS0gYS9zeXMvc3Jj L2NtZC9ncy96bGliL0lOREVYCVN1biBNYXIgMDggMjI6MDA6MjMgMjAyMCArMDEwMAorKysgYi9z eXMvc3JjL2NtZC9ncy96bGliL0lOREVYCVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApA QCAtMSwyMyArMSwzNyBAQAorQ01ha2VMaXN0cy50eHQgIGNtYWtlIGJ1aWxkIGZpbGUKIENoYW5n ZUxvZyAgICAgICBoaXN0b3J5IG9mIGNoYW5nZXMKIEZBUSAgICAgICAgICAgICBGcmVxdWVudGx5 IEFza2VkIFF1ZXN0aW9ucyBhYm91dCB6bGliCiBJTkRFWCAgICAgICAgICAgdGhpcyBmaWxlCi1N YWtlZmlsZSAgICAgICAgbWFrZWZpbGUgZm9yIFVuaXggKGdlbmVyYXRlZCBieSBjb25maWd1cmUp Ci1NYWtlZmlsZS5pbiAgICAgbWFrZWZpbGUgZm9yIFVuaXggKHRlbXBsYXRlIGZvciBjb25maWd1 cmUpCitNYWtlZmlsZSAgICAgICAgZHVtbXkgTWFrZWZpbGUgdGhhdCB0ZWxscyB5b3UgdG8gLi9j b25maWd1cmUKK01ha2VmaWxlLmluICAgICB0ZW1wbGF0ZSBmb3IgVW5peCBNYWtlZmlsZQogUkVB RE1FICAgICAgICAgIGd1ZXNzIHdoYXQKLWFsZ29yaXRobS50eHQgICBkZXNjcmlwdGlvbiBvZiB0 aGUgKGRlKWNvbXByZXNzaW9uIGFsZ29yaXRobQogY29uZmlndXJlICAgICAgIGNvbmZpZ3VyZSBz Y3JpcHQgZm9yIFVuaXgKLXpjb25mLmluLmggICAgICB0ZW1wbGF0ZSBmb3IgemNvbmYuaCAodXNl ZCBieSBjb25maWd1cmUpCittYWtlX3Ztcy5jb20gICAgbWFrZWZpbGUgZm9yIFZNUwordGVzdC9l eGFtcGxlLmMgIHpsaWIgdXNhZ2VzIGV4YW1wbGVzIGZvciBidWlsZCB0ZXN0aW5nCit0ZXN0L21p bmlnemlwLmMgbWluaW1hbCBnemlwLWxpa2UgZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGQgdGVzdGlu ZwordGVzdC9pbmZjb3Zlci5jIGluZiouYyBjb2RlIGNvdmVyYWdlIGZvciBidWlsZCBjb3ZlcmFn ZSB0ZXN0aW5nCit0cmVlYnVpbGQueG1sICAgWE1MIGRlc2NyaXB0aW9uIG9mIHNvdXJjZSBmaWxl IGRlcGVuZGVuY2llcworemNvbmYuaC5jbWFrZWluIHpjb25mLmggdGVtcGxhdGUgZm9yIGNtYWtl Cit6Y29uZi5oLmluICAgICAgemNvbmYuaCB0ZW1wbGF0ZSBmb3IgY29uZmlndXJlCit6bGliLjMg ICAgICAgICAgTWFuIHBhZ2UgZm9yIHpsaWIKK3psaWIuMy5wZGYgICAgICBNYW4gcGFnZSBpbiBQ REYgZm9ybWF0Cit6bGliLm1hcCAgICAgICAgTGludXggc3ltYm9sIGluZm9ybWF0aW9uCit6bGli LnBjLmluICAgICAgVGVtcGxhdGUgZm9yIHBrZy1jb25maWcgZGVzY3JpcHRvcgoremxpYi5wYy5j bWFrZWluIHpsaWIucGMgdGVtcGxhdGUgZm9yIGNtYWtlCit6bGliMmFuc2kgICAgICAgcGVybCBz Y3JpcHQgdG8gY29udmVydCBzb3VyY2UgZmlsZXMgZm9yIEMrKyBjb21waWxhdGlvbgogCiBhbWln YS8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBbWlnYSBTQVMgQwotYXM0MDAvICAgICAgICAgIG1h a2VmaWxlcyBmb3IgSUJNIEFTLzQwMAorYXM0MDAvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQVMv NDAwCitkb2MvICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0cyBhbmQgYWxnb3Jp dGhtcwogbXNkb3MvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgTVNET1MKK25pbnRlbmRvZHMvICAg ICBtYWtlZmlsZSBmb3IgTmludGVuZG8gRFMKIG9sZC8gICAgICAgICAgICBtYWtlZmlsZXMgZm9y IHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyBhbmQgemxpYiBkb2N1bWVudGF0aW9uCiAgICAgICAgICAg ICAgICAgZmlsZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiB1cGRhdGVkIGZvciB6bGliIDEuMi54 Ci1wcm9qZWN0cy8gICAgICAgcHJvamVjdHMgZm9yIHZhcmlvdXMgSW50ZWdyYXRlZCBEZXZlbG9w bWVudCBFbnZpcm9ubWVudHMKIHFueC8gICAgICAgICAgICBtYWtlZmlsZXMgZm9yIFFOWAord2F0 Y29tLyAgICAgICAgIG1ha2VmaWxlcyBmb3IgT3BlbldhdGNvbQogd2luMzIvICAgICAgICAgIG1h a2VmaWxlcyBmb3IgV2luZG93cwogCi0gICAgICAgICAgICAgICAgemxpYiBwdWJsaWMgaGVhZGVy IGZpbGVzIChtdXN0IGJlIGtlcHQpOgorICAgICAgICAgICAgICAgIHpsaWIgcHVibGljIGhlYWRl ciBmaWxlcyAocmVxdWlyZWQgZm9yIGxpYnJhcnkgdXNlKToKIHpjb25mLmgKIHpsaWIuaAogCkBA IC0yOCw3ICs0MiwxMSBAQAogY3JjMzIuaAogZGVmbGF0ZS5jCiBkZWZsYXRlLmgKLWd6aW8uYwor Z3pjbG9zZS5jCitnemd1dHMuaAorZ3psaWIuYworZ3pyZWFkLmMKK2d6d3JpdGUuYwogaW5mYmFj ay5jCiBpbmZmYXN0LmMKIGluZmZhc3QuaApAQCAtNDMsOSArNjEsOCBAQAogenV0aWwuYwogenV0 aWwuaAogCi0gICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGZvciBzYW1wbGUgcHJvZ3JhbXM6 Ci1leGFtcGxlLmMKLW1pbmlnemlwLmMKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9y IHNhbXBsZSBwcm9ncmFtcworU2VlIGV4YW1wbGVzL1JFQURNRS5leGFtcGxlcwogCi0gICAgICAg ICAgICAgICAgdW5zdXBwb3J0ZWQgY29udHJpYnV0aW9uIGJ5IHRoaXJkIHBhcnRpZXMKKyAgICAg ICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb25zIGJ5IHRoaXJkIHBhcnRpZXMKIFNl ZSBjb250cmliL1JFQURNRS5jb250cmliCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5Mzli MWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL01ha2VmaWxlCi0tLSBhL3N5cy9zcmMvY21kL2dzL3ps aWIvTWFrZWZpbGUJU3VuIE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyAvZGV2L251bGwJ VGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCkBAIC0xLDE1NCArMCwwIEBACi0jIE1ha2Vm aWxlIGZvciB6bGliCi0jIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEplYW4tbG91cCBHYWlsbHku Ci0jIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0 IG5vdGljZSBpbiB6bGliLmgKLQotIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgotIyAgICAu L2NvbmZpZ3VyZTsgbWFrZSB0ZXN0Ci0jIFRoZSBjYWxsIG9mIGNvbmZpZ3VyZSBpcyBvcHRpb25h bCBpZiB5b3UgZG9uJ3QgaGF2ZSBzcGVjaWFsIHJlcXVpcmVtZW50cwotIyBJZiB5b3Ugd2lzaCB0 byBidWlsZCB6bGliIGFzIGEgc2hhcmVkIGxpYnJhcnksIHVzZTogLi9jb25maWd1cmUgLXMKLQot IyBUbyB1c2UgdGhlIGFzbSBjb2RlLCB0eXBlOgotIyAgICBjcCBjb250cmliL2FzbT84Ni9tYXRj aC5TIC4vbWF0Y2guUwotIyAgICBtYWtlIExPQz0tREFTTVYgT0JKQT1tYXRjaC5vCi0KLSMgVG8g aW5zdGFsbCAvdXNyL2xvY2FsL2xpYi9saWJ6LiogYW5kIC91c3IvbG9jYWwvaW5jbHVkZS96bGli LmgsIHR5cGU6Ci0jICAgIG1ha2UgaW5zdGFsbAotIyBUbyBpbnN0YWxsIGluICRIT01FIGluc3Rl YWQgb2YgL3Vzci9sb2NhbCwgdXNlOgotIyAgICBtYWtlIGluc3RhbGwgcHJlZml4PSRIT01FCi0K LUNDPWNjCi0KLUNGTEFHUz0tTwotI0NGTEFHUz0tTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1f TEVWRUw9NwotI0NGTEFHUz0tZyAtRERFQlVHCi0jQ0ZMQUdTPS1PMyAtV2FsbCAtV3dyaXRlLXN0 cmluZ3MgLVdwb2ludGVyLWFyaXRoIC1XY29udmVyc2lvbiBcCi0jICAgICAgICAgICAtV3N0cmlj dC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzCi0KLUxERkxBR1M9bGliei5hCi1MRFNI QVJFRD0kKENDKQotQ1BQPSQoQ0MpIC1FCi0KLUxJQlM9bGliei5hCi1TSEFSRURMSUI9bGliei5z bwotU0hBUkVETElCVj1saWJ6LnNvLjEuMi4yCi1TSEFSRURMSUJNPWxpYnouc28uMQotCi1BUj1h ciByYwotUkFOTElCPXJhbmxpYgotVEFSPXRhcgotU0hFTEw9L2Jpbi9zaAotRVhFPQotCi1wcmVm aXggPSAvdXNyL2xvY2FsCi1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQotbGliZGlyID0gJHtleGVj X3ByZWZpeH0vbGliCi1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKLW1hbmRpciA9ICR7 cHJlZml4fS9zaGFyZS9tYW4KLW1hbjNkaXIgPSAke21hbmRpcn0vbWFuMwotCi1PQkpTID0gYWRs ZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBnemlvLm8gdW5jb21wci5vIGRlZmxhdGUubyB0cmVl cy5vIFwKLSAgICAgICB6dXRpbC5vIGluZmxhdGUubyBpbmZiYWNrLm8gaW5mdHJlZXMubyBpbmZm YXN0Lm8KLQotT0JKQSA9Ci0jIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5v Ci0KLVRFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCi0KLWFsbDogZXhhbXBsZSQoRVhF KSBtaW5pZ3ppcCQoRVhFKQotCi1jaGVjazogdGVzdAotdGVzdDogYWxsCi0JQExEX0xJQlJBUllf UEFUSD0uOiQoTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg7IFwKLQll Y2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgfHwgXAotCSAgZWNo byAnCQkqKiogbWluaWd6aXAgdGVzdCBGQUlMRUQgKioqJyA7IFwKLQlpZiAuL2V4YW1wbGU7IHRo ZW4gXAotCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKLQllbHNlIFwKLQkgIGVj aG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgXAotCWZpCi0KLWxpYnouYTogJChPQkpT KSAkKE9CSkEpCi0JJChBUikgJEAgJChPQkpTKSAkKE9CSkEpCi0JLUAgKCQoUkFOTElCKSAkQCB8 fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKLQotbWF0Y2gubzogbWF0Y2guUwotCSQoQ1BQKSBtYXRj aC5TID4gX21hdGNoLnMKLQkkKENDKSAtYyBfbWF0Y2gucwotCW12IF9tYXRjaC5vIG1hdGNoLm8K LQlybSAtZiBfbWF0Y2gucwotCi0kKFNIQVJFRExJQlYpOiAkKE9CSlMpCi0JJChMRFNIQVJFRCkg LW8gJEAgJChPQkpTKQotCXJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pCi0JbG4gLXMg JEAgJChTSEFSRURMSUIpCi0JbG4gLXMgJEAgJChTSEFSRURMSUJNKQotCi1leGFtcGxlJChFWEUp OiBleGFtcGxlLm8gJChMSUJTKQotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChM REZMQUdTKQotCi1taW5pZ3ppcCQoRVhFKTogbWluaWd6aXAubyAkKExJQlMpCi0JJChDQykgJChD RkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChMREZMQUdTKQotCi1pbnN0YWxsOiAkKExJQlMpCi0J LUBpZiBbICEgLWQgJChleGVjX3ByZWZpeCkgXTsgdGhlbiBta2RpciAtcCAkKGV4ZWNfcHJlZml4 KTsgZmkKLQktQGlmIFsgISAtZCAkKGluY2x1ZGVkaXIpICBdOyB0aGVuIG1rZGlyIC1wICQoaW5j bHVkZWRpcik7IGZpCi0JLUBpZiBbICEgLWQgJChsaWJkaXIpICAgICAgXTsgdGhlbiBta2RpciAt cCAkKGxpYmRpcik7IGZpCi0JLUBpZiBbICEgLWQgJChtYW4zZGlyKSAgICAgXTsgdGhlbiBta2Rp ciAtcCAkKG1hbjNkaXIpOyBmaQotCWNwIHpsaWIuaCB6Y29uZi5oICQoaW5jbHVkZWRpcikKLQlj aG1vZCA2NDQgJChpbmNsdWRlZGlyKS96bGliLmggJChpbmNsdWRlZGlyKS96Y29uZi5oCi0JY3Ag JChMSUJTKSAkKGxpYmRpcikKLQljZCAkKGxpYmRpcik7IGNobW9kIDc1NSAkKExJQlMpCi0JLUAo Y2QgJChsaWJkaXIpOyAkKFJBTkxJQikgbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQot CWNkICQobGliZGlyKTsgaWYgdGVzdCAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKLQkgIHJtIC1m ICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQo U0hBUkVETElCKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCi0J ICAobGRjb25maWcgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAotCWZpCi0JY3AgemxpYi4z ICQobWFuM2RpcikKLQljaG1vZCA2NDQgJChtYW4zZGlyKS96bGliLjMKLSMgVGhlIHJhbmxpYiBp biBpbnN0YWxsIGlzIG5lZWRlZCBvbiBOZVhUU1RFUCB3aGljaCBjaGVja3MgZmlsZSB0aW1lcwot IyBsZGNvbmZpZyBpcyBmb3IgTGludXgKLQotdW5pbnN0YWxsOgotCWNkICQoaW5jbHVkZWRpcik7 IFwKLQljZCAkKGxpYmRpcik7IHJtIC1mIGxpYnouYTsgXAotCWlmIHRlc3QgLWYgJChTSEFSRURM SUJWKTsgdGhlbiBcCi0JICBybSAtZiAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKSAkKFNIQVJF RExJQk0pOyBcCi0JZmkKLQljZCAkKG1hbjNkaXIpOyBybSAtZiB6bGliLjMKLQotbW9zdGx5Y2xl YW46IGNsZWFuCi1jbGVhbjoKLQlybSAtZiAqLm8gKn4gZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQo RVhFKSBcCi0JICAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAotCSAgIF9tYXRjaC5zIG1h a2V0cmVlIGNvbnRyaWIvaW5mYmFjazkvKi5vCi0KLW1haW50YWluZXItY2xlYW46IGRpc3RjbGVh bgotZGlzdGNsZWFuOiBjbGVhbgotCWNwIC1wIE1ha2VmaWxlLmluIE1ha2VmaWxlCi0JY3AgLXAg emNvbmYuaW4uaCB6Y29uZi5oCi0Jcm0gLWYgLkRTX1N0b3JlCi0KLXRhZ3M6Ci0JZXRhZ3MgKi5b Y2hdCi0KLWRlcGVuZDoKLQltYWtlZGVwZW5kIC0tICQoQ0ZMQUdTKSAtLSAqLltjaF0KLQotIyBE TyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1h ZGxlcjMyLm86IHpsaWIuaCB6Y29uZi5oCi1jb21wcmVzcy5vOiB6bGliLmggemNvbmYuaAotY3Jj MzIubzogY3JjMzIuaCB6bGliLmggemNvbmYuaAotZGVmbGF0ZS5vOiBkZWZsYXRlLmggenV0aWwu aCB6bGliLmggemNvbmYuaAotZXhhbXBsZS5vOiB6bGliLmggemNvbmYuaAotZ3ppby5vOiB6dXRp bC5oIHpsaWIuaCB6Y29uZi5oCi1pbmZmYXN0Lm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5m dHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCi1pbmZsYXRlLm86IHp1dGlsLmggemxpYi5oIHpj b25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCi1pbmZiYWNrLm86IHp1dGlsLmgg emxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCi1pbmZ0cmVlcy5v OiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKLW1pbmlnemlwLm86IHpsaWIuaCB6 Y29uZi5oCi10cmVlcy5vOiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaCB0cmVlcy5o Ci11bmNvbXByLm86IHpsaWIuaCB6Y29uZi5oCi16dXRpbC5vOiB6dXRpbC5oIHpsaWIuaCB6Y29u Zi5oCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96 bGliL01ha2VmaWxlLmluCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvTWFrZWZpbGUuaW4JU3Vu IE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyAvZGV2L251bGwJVGh1IEphbiAwMSAwMDow MDowMCAxOTcwICswMDAwCkBAIC0xLDE1NCArMCwwIEBACi0jIE1ha2VmaWxlIGZvciB6bGliCi0j IENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEplYW4tbG91cCBHYWlsbHkuCi0jIEZvciBjb25kaXRp b25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGli LmgKLQotIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgotIyAgICAuL2NvbmZpZ3VyZTsgbWFr ZSB0ZXN0Ci0jIFRoZSBjYWxsIG9mIGNvbmZpZ3VyZSBpcyBvcHRpb25hbCBpZiB5b3UgZG9uJ3Qg aGF2ZSBzcGVjaWFsIHJlcXVpcmVtZW50cwotIyBJZiB5b3Ugd2lzaCB0byBidWlsZCB6bGliIGFz IGEgc2hhcmVkIGxpYnJhcnksIHVzZTogLi9jb25maWd1cmUgLXMKLQotIyBUbyB1c2UgdGhlIGFz bSBjb2RlLCB0eXBlOgotIyAgICBjcCBjb250cmliL2FzbT84Ni9tYXRjaC5TIC4vbWF0Y2guUwot IyAgICBtYWtlIExPQz0tREFTTVYgT0JKQT1tYXRjaC5vCi0KLSMgVG8gaW5zdGFsbCAvdXNyL2xv Y2FsL2xpYi9saWJ6LiogYW5kIC91c3IvbG9jYWwvaW5jbHVkZS96bGliLmgsIHR5cGU6Ci0jICAg IG1ha2UgaW5zdGFsbAotIyBUbyBpbnN0YWxsIGluICRIT01FIGluc3RlYWQgb2YgL3Vzci9sb2Nh bCwgdXNlOgotIyAgICBtYWtlIGluc3RhbGwgcHJlZml4PSRIT01FCi0KLUNDPWNjCi0KLUNGTEFH Uz0tTwotI0NGTEFHUz0tTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NwotI0NGTEFH Uz0tZyAtRERFQlVHCi0jQ0ZMQUdTPS1PMyAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVy LWFyaXRoIC1XY29udmVyc2lvbiBcCi0jICAgICAgICAgICAtV3N0cmljdC1wcm90b3R5cGVzIC1X bWlzc2luZy1wcm90b3R5cGVzCi0KLUxERkxBR1M9bGliei5hCi1MRFNIQVJFRD0kKENDKQotQ1BQ PSQoQ0MpIC1FCi0KLUxJQlM9bGliei5hCi1TSEFSRURMSUI9bGliei5zbwotU0hBUkVETElCVj1s aWJ6LnNvLjEuMi4yCi1TSEFSRURMSUJNPWxpYnouc28uMQotCi1BUj1hciByYwotUkFOTElCPXJh bmxpYgotVEFSPXRhcgotU0hFTEw9L2Jpbi9zaAotRVhFPQotCi1wcmVmaXggPSAvdXNyL2xvY2Fs Ci1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQotbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCi1p bmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKLW1hbmRpciA9ICR7cHJlZml4fS9zaGFyZS9t YW4KLW1hbjNkaXIgPSAke21hbmRpcn0vbWFuMwotCi1PQkpTID0gYWRsZXIzMi5vIGNvbXByZXNz Lm8gY3JjMzIubyBnemlvLm8gdW5jb21wci5vIGRlZmxhdGUubyB0cmVlcy5vIFwKLSAgICAgICB6 dXRpbC5vIGluZmxhdGUubyBpbmZiYWNrLm8gaW5mdHJlZXMubyBpbmZmYXN0Lm8KLQotT0JKQSA9 Ci0jIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vCi0KLVRFU1RfT0JKUyA9 IGV4YW1wbGUubyBtaW5pZ3ppcC5vCi0KLWFsbDogZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhF KQotCi1jaGVjazogdGVzdAotdGVzdDogYWxsCi0JQExEX0xJQlJBUllfUEFUSD0uOiQoTERfTElC UkFSWV9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg7IFwKLQllY2hvIGhlbGxvIHdvcmxk IHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgfHwgXAotCSAgZWNobyAnCQkqKiogbWluaWd6 aXAgdGVzdCBGQUlMRUQgKioqJyA7IFwKLQlpZiAuL2V4YW1wbGU7IHRoZW4gXAotCSAgZWNobyAn CQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKLQllbHNlIFwKLQkgIGVjaG8gJwkJKioqIHpsaWIg dGVzdCBGQUlMRUQgKioqJzsgXAotCWZpCi0KLWxpYnouYTogJChPQkpTKSAkKE9CSkEpCi0JJChB UikgJEAgJChPQkpTKSAkKE9CSkEpCi0JLUAgKCQoUkFOTElCKSAkQCB8fCB0cnVlKSA+L2Rldi9u dWxsIDI+JjEKLQotbWF0Y2gubzogbWF0Y2guUwotCSQoQ1BQKSBtYXRjaC5TID4gX21hdGNoLnMK LQkkKENDKSAtYyBfbWF0Y2gucwotCW12IF9tYXRjaC5vIG1hdGNoLm8KLQlybSAtZiBfbWF0Y2gu cwotCi0kKFNIQVJFRExJQlYpOiAkKE9CSlMpCi0JJChMRFNIQVJFRCkgLW8gJEAgJChPQkpTKQot CXJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pCi0JbG4gLXMgJEAgJChTSEFSRURMSUIp Ci0JbG4gLXMgJEAgJChTSEFSRURMSUJNKQotCi1leGFtcGxlJChFWEUpOiBleGFtcGxlLm8gJChM SUJTKQotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChMREZMQUdTKQotCi1taW5p Z3ppcCQoRVhFKTogbWluaWd6aXAubyAkKExJQlMpCi0JJChDQykgJChDRkxBR1MpIC1vICRAIG1p bmlnemlwLm8gJChMREZMQUdTKQotCi1pbnN0YWxsOiAkKExJQlMpCi0JLUBpZiBbICEgLWQgJChl eGVjX3ByZWZpeCkgXTsgdGhlbiBta2RpciAtcCAkKGV4ZWNfcHJlZml4KTsgZmkKLQktQGlmIFsg ISAtZCAkKGluY2x1ZGVkaXIpICBdOyB0aGVuIG1rZGlyIC1wICQoaW5jbHVkZWRpcik7IGZpCi0J LUBpZiBbICEgLWQgJChsaWJkaXIpICAgICAgXTsgdGhlbiBta2RpciAtcCAkKGxpYmRpcik7IGZp Ci0JLUBpZiBbICEgLWQgJChtYW4zZGlyKSAgICAgXTsgdGhlbiBta2RpciAtcCAkKG1hbjNkaXIp OyBmaQotCWNwIHpsaWIuaCB6Y29uZi5oICQoaW5jbHVkZWRpcikKLQljaG1vZCA2NDQgJChpbmNs dWRlZGlyKS96bGliLmggJChpbmNsdWRlZGlyKS96Y29uZi5oCi0JY3AgJChMSUJTKSAkKGxpYmRp cikKLQljZCAkKGxpYmRpcik7IGNobW9kIDc1NSAkKExJQlMpCi0JLUAoY2QgJChsaWJkaXIpOyAk KFJBTkxJQikgbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQotCWNkICQobGliZGlyKTsg aWYgdGVzdCAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKLQkgIHJtIC1mICQoU0hBUkVETElCKSAk KFNIQVJFRExJQk0pOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKTsgXAot CSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCi0JICAobGRjb25maWcgfHwg dHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAotCWZpCi0JY3AgemxpYi4zICQobWFuM2RpcikKLQlj aG1vZCA2NDQgJChtYW4zZGlyKS96bGliLjMKLSMgVGhlIHJhbmxpYiBpbiBpbnN0YWxsIGlzIG5l ZWRlZCBvbiBOZVhUU1RFUCB3aGljaCBjaGVja3MgZmlsZSB0aW1lcwotIyBsZGNvbmZpZyBpcyBm b3IgTGludXgKLQotdW5pbnN0YWxsOgotCWNkICQoaW5jbHVkZWRpcik7IFwKLQljZCAkKGxpYmRp cik7IHJtIC1mIGxpYnouYTsgXAotCWlmIHRlc3QgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCi0J ICBybSAtZiAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCi0JZmkK LQljZCAkKG1hbjNkaXIpOyBybSAtZiB6bGliLjMKLQotbW9zdGx5Y2xlYW46IGNsZWFuCi1jbGVh bjoKLQlybSAtZiAqLm8gKn4gZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKSBcCi0JICAgbGli ei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAotCSAgIF9tYXRjaC5zIG1ha2V0cmVlIGNvbnRyaWIv aW5mYmFjazkvKi5vCi0KLW1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgotZGlzdGNsZWFuOiBj bGVhbgotCWNwIC1wIE1ha2VmaWxlLmluIE1ha2VmaWxlCi0JY3AgLXAgemNvbmYuaW4uaCB6Y29u Zi5oCi0Jcm0gLWYgLkRTX1N0b3JlCi0KLXRhZ3M6Ci0JZXRhZ3MgKi5bY2hdCi0KLWRlcGVuZDoK LQltYWtlZGVwZW5kIC0tICQoQ0ZMQUdTKSAtLSAqLltjaF0KLQotIyBETyBOT1QgREVMRVRFIFRI SVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotCi1hZGxlcjMyLm86IHpsaWIu aCB6Y29uZi5oCi1jb21wcmVzcy5vOiB6bGliLmggemNvbmYuaAotY3JjMzIubzogY3JjMzIuaCB6 bGliLmggemNvbmYuaAotZGVmbGF0ZS5vOiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYu aAotZXhhbXBsZS5vOiB6bGliLmggemNvbmYuaAotZ3ppby5vOiB6dXRpbC5oIHpsaWIuaCB6Y29u Zi5oCi1pbmZmYXN0Lm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRl LmggaW5mZmFzdC5oCi1pbmZsYXRlLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMu aCBpbmZsYXRlLmggaW5mZmFzdC5oCi1pbmZiYWNrLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmgg aW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCi1pbmZ0cmVlcy5vOiB6dXRpbC5oIHpsaWIu aCB6Y29uZi5oIGluZnRyZWVzLmgKLW1pbmlnemlwLm86IHpsaWIuaCB6Y29uZi5oCi10cmVlcy5v OiBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaCB0cmVlcy5oCi11bmNvbXByLm86IHps aWIuaCB6Y29uZi5oCi16dXRpbC5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCmRpZmYgLXIgOWEz MTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL1JFQURNRQotLS0g YS9zeXMvc3JjL2NtZC9ncy96bGliL1JFQURNRQlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAx MDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9SRUFETUUJU3VuIE1hciAwOCAxOTo1ODowOCAy MDIwIC0wNDAwCkBAIC0xLDU3ICsxLDUyIEBACiBaTElCIERBVEEgQ09NUFJFU1NJT04gTElCUkFS WQogCi16bGliIDEuMi4yIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGli cmFyeS4gIEFsbCB0aGUgY29kZSBpcworemxpYiAxLjIuMTEgaXMgYSBnZW5lcmFsIHB1cnBvc2Ug ZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCiB0aHJlYWQgc2FmZS4g IFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5 IFJGQ3MKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcwot aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKHpsaWIgZm9ybWF0KSwgcmZjMTk1 MS50eHQgKGRlZmxhdGUgZm9ybWF0KQotYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuIFRo ZXNlIGRvY3VtZW50cyBhcmUgYWxzbyBhdmFpbGFibGUgaW4gb3RoZXIKLWZvcm1hdHMgZnJvbSBm dHA6Ly9mdHAudXUubmV0L2dyYXBoaWNzL3BuZy9kb2N1bWVudHMvemxpYi96ZG9jLWluZGV4Lmh0 bWwKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAgKHpsaWIgZm9ybWF0KSwgcmZj MTk1MSAoZGVmbGF0ZSBmb3JtYXQpIGFuZAorcmZjMTk1MiAoZ3ppcCBmb3JtYXQpLgogCiBBbGwg ZnVuY3Rpb25zIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFyZSBkb2N1bWVudGVkIGluIHRo ZSBmaWxlIHpsaWIuaAotKHZvbHVudGVlciB0byB3cml0ZSBtYW4gcGFnZXMgd2VsY29tZSwgY29u dGFjdCB6bGliQGd6aXAub3JnKS4gQSB1c2FnZSBleGFtcGxlCi1vZiB0aGUgbGlicmFyeSBpcyBn aXZlbiBpbiB0aGUgZmlsZSBleGFtcGxlLmMgd2hpY2ggYWxzbyB0ZXN0cyB0aGF0IHRoZSBsaWJy YXJ5Ci1pcyB3b3JraW5nIGNvcnJlY3RseS4gQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRo ZSBmaWxlIG1pbmlnemlwLmMuIFRoZQotY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29t cG9zZWQgb2YgYWxsIHNvdXJjZSBmaWxlcyBleGNlcHQgZXhhbXBsZS5jIGFuZAotbWluaWd6aXAu Yy4KKyh2b2x1bnRlZXIgdG8gd3JpdGUgbWFuIHBhZ2VzIHdlbGNvbWUsIGNvbnRhY3QgemxpYkBn emlwLm9yZykuICBBIHVzYWdlIGV4YW1wbGUKK29mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRo ZSBmaWxlIHRlc3QvZXhhbXBsZS5jIHdoaWNoIGFsc28gdGVzdHMgdGhhdAordGhlIGxpYnJhcnkg aXMgd29ya2luZyBjb3JyZWN0bHkuICBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGZp bGUKK3Rlc3QvbWluaWd6aXAuYy4gIFRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGl0c2VsZiBpcyBj b21wb3NlZCBvZiBhbGwgc291cmNlCitmaWxlcyBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuCiAKIFRv IGNvbXBpbGUgYWxsIGZpbGVzIGFuZCBydW4gdGhlIHRlc3QgcHJvZ3JhbSwgZm9sbG93IHRoZSBp bnN0cnVjdGlvbnMgZ2l2ZW4gYXQKLXRoZSB0b3Agb2YgTWFrZWZpbGUuIEluIHNob3J0ICJtYWtl IHRlc3Q7IG1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QKLW1hY2hpbmVzLiBGb3Ig VW5peDogIi4vY29uZmlndXJlOyBtYWtlIHRlc3Q7IG1ha2UgaW5zdGFsbCIgRm9yIE1TRE9TLCB1 c2Ugb25lCi1vZiB0aGUgc3BlY2lhbCBtYWtlZmlsZXMgc3VjaCBhcyBNYWtlZmlsZS5tc2MuIEZv ciBWTVMsIHVzZSBNYWtlX3Ztcy5jb20gb3IKLWRlc2NyaXAubW1zLgordGhlIHRvcCBvZiBNYWtl ZmlsZS5pbi4gIEluIHNob3J0ICIuL2NvbmZpZ3VyZTsgbWFrZSB0ZXN0IiwgYW5kIGlmIHRoYXQg Z29lcword2VsbCwgIm1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QgZmxhdm9ycyBv ZiBVbml4LiAgRm9yIFdpbmRvd3MsIHVzZQorb25lIG9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBp biB3aW4zMi8gb3IgY29udHJpYi92c3R1ZGlvLyAuICBGb3IgVk1TLCB1c2UKK21ha2Vfdm1zLmNv bS4KIAogUXVlc3Rpb25zIGFib3V0IHpsaWIgc2hvdWxkIGJlIHNlbnQgdG8gPHpsaWJAZ3ppcC5v cmc+LCBvciB0byBHaWxsZXMgVm9sbGFudAotPGluZm9Ad2luaW1hZ2UuY29tPiBmb3IgdGhlIFdp bmRvd3MgRExMIHZlcnNpb24uIFRoZSB6bGliIGhvbWUgcGFnZSBpcwotaHR0cDovL3d3dy56bGli Lm9yZyBvciBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvIEJlZm9yZSByZXBvcnRpbmcgYSBwcm9i bGVtLAotcGxlYXNlIGNoZWNrIHRoaXMgc2l0ZSB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSB0aGUg bGF0ZXN0IHZlcnNpb24gb2YgemxpYjsKLW90aGVyd2lzZSBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9u IGFuZCBjaGVjayB3aGV0aGVyIHRoZSBwcm9ibGVtIHN0aWxsIGV4aXN0cyBvcgotbm90LgorPGlu Zm9Ad2luaW1hZ2UuY29tPiBmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24uICBUaGUgemxpYiBo b21lIHBhZ2UgaXMKK2h0dHA6Ly96bGliLm5ldC8gLiAgQmVmb3JlIHJlcG9ydGluZyBhIHByb2Js ZW0sIHBsZWFzZSBjaGVjayB0aGlzIHNpdGUgdG8KK3ZlcmlmeSB0aGF0IHlvdSBoYXZlIHRoZSBs YXRlc3QgdmVyc2lvbiBvZiB6bGliOyBvdGhlcndpc2UgZ2V0IHRoZSBsYXRlc3QKK3ZlcnNpb24g YW5kIGNoZWNrIHdoZXRoZXIgdGhlIHByb2JsZW0gc3RpbGwgZXhpc3RzIG9yIG5vdC4KIAotUExF QVNFIHJlYWQgdGhlIHpsaWIgRkFRIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi96bGliX2ZhcS5o dG1sIGJlZm9yZSBhc2tpbmcKLWZvciBoZWxwLgorUExFQVNFIHJlYWQgdGhlIHpsaWIgRkFRIGh0 dHA6Ly96bGliLm5ldC96bGliX2ZhcS5odG1sIGJlZm9yZSBhc2tpbmcgZm9yIGhlbHAuCiAKLU1h cmsgTmVsc29uIDxtYXJrbkBpZWVlLm9yZz4gd3JvdGUgYW4gYXJ0aWNsZSBhYm91dCB6bGliIGZv ciB0aGUgSmFuLiAxOTk3Ci1pc3N1ZSBvZiAgRHIuIERvYmIncyBKb3VybmFsOyBhIGNvcHkgb2Yg dGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGluCi1odHRwOi8vZG9nbWEubmV0L21hcmtuL2FydGlj bGVzL3psaWJ0b29sL3psaWJ0b29sLmh0bQorTWFyayBOZWxzb24gPG1hcmtuQGllZWUub3JnPiB3 cm90ZSBhbiBhcnRpY2xlIGFib3V0IHpsaWIgZm9yIHRoZSBKYW4uICAxOTk3Citpc3N1ZSBvZiBE ci4gIERvYmIncyBKb3VybmFsOyBhIGNvcHkgb2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0 CitodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLyAuCiAKLVRoZSBj aGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuMiBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBD aGFuZ2VMb2cuCitUaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjExIGFyZSBkb2N1bWVu dGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAotVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29u dHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5ICJjb250cmliIi4KK1Vuc3VwcG9y dGVkIHRoaXJkIHBhcnR5IGNvbnRyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkIGluIGRpcmVjdG9yeSBj b250cmliLyAuCiAKLUEgSmF2YSBpbXBsZW1lbnRhdGlvbiBvZiB6bGliIGlzIGF2YWlsYWJsZSBp biB0aGUgSmF2YSBEZXZlbG9wbWVudCBLaXQKLWh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQu Mi9kb2NzL2FwaS9qYXZhL3V0aWwvemlwL3BhY2thZ2Utc3VtbWFyeS5odG1sCi1TZWUgdGhlIHps aWIgaG9tZSBwYWdlIGh0dHA6Ly93d3cuemxpYi5vcmcgZm9yIGRldGFpbHMuCit6bGliIGlzIGF2 YWlsYWJsZSBpbiBKYXZhIHVzaW5nIHRoZSBqYXZhLnV0aWwuemlwIHBhY2thZ2UsIGRvY3VtZW50 ZWQgYXQKK2h0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL3RlY2huaWNhbEFydGljbGVzL1By b2dyYW1taW5nL2NvbXByZXNzaW9uLyAuCiAKLUEgUGVybCBpbnRlcmZhY2UgdG8gemxpYiB3cml0 dGVuIGJ5IFBhdWwgTWFycXVlc3MgPHBtcXNAY3Bhbi5vcmc+IGlzIGluIHRoZQotQ1BBTiAoQ29t cHJlaGVuc2l2ZSBQZXJsIEFyY2hpdmUgTmV0d29yaykgc2l0ZXMKLWh0dHA6Ly93d3cuY3Bhbi5v cmcvbW9kdWxlcy9ieS1tb2R1bGUvQ29tcHJlc3MvCitBIFBlcmwgaW50ZXJmYWNlIHRvIHpsaWIg d3JpdHRlbiBieSBQYXVsIE1hcnF1ZXNzIDxwbXFzQGNwYW4ub3JnPiBpcyBhdmFpbGFibGUKK2F0 IENQQU4gKENvbXByZWhlbnNpdmUgUGVybCBBcmNoaXZlIE5ldHdvcmspIHNpdGVzLCBpbmNsdWRp bmcKK2h0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfnBtcXMvSU8tQ29tcHJlc3MtWmxpYi8gLgogCiBB IFB5dGhvbiBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgPGFta0Bh bWsuY2E+IGlzCiBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnMsIHNl ZQotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbAoraHR0cDov L2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3psaWIuaHRtbCAuCiAKLUEgemxpYiBiaW5kaW5nIGZv ciBUQ0wgd3JpdHRlbiBieSBBbmRyZWFzIEt1cHJpZXMgPGEua3Vwcmllc0B3ZXN0ZW5kLmNvbT4g aXMKLWF2YWlsbGFibGUgYXQgaHR0cDovL3d3dy5vY2hlLmRlL35ha3Vwcmllcy9zb2Z0L3RyZi90 cmZfemlwLmh0bWwKK3psaWIgaXMgYnVpbHQgaW50byB0Y2w6IGh0dHA6Ly93aWtpLnRjbC50ay80 NjEwIC4KIAogQW4gZXhwZXJpbWVudGFsIHBhY2thZ2UgdG8gcmVhZCBhbmQgd3JpdGUgZmlsZXMg aW4gLnppcCBmb3JtYXQsIHdyaXR0ZW4gb24gdG9wCiBvZiB6bGliIGJ5IEdpbGxlcyBWb2xsYW50 IDxpbmZvQHdpbmltYWdlLmNvbT4sIGlzIGF2YWlsYWJsZSBpbiB0aGUKQEAgLTc1LDI1ICs3MCwy MSBAQAogLSB6bGliIGRvZXNuJ3Qgd29yayBvbiBIUC1VWCA5LjA1IHdpdGggc29tZSB2ZXJzaW9u cyBvZiAvYmluL2NjLiBJdCB3b3JrcyB3aXRoCiAgIG90aGVyIGNvbXBpbGVycy4gVXNlICJtYWtl IHRlc3QiIHRvIGNoZWNrIHlvdXIgY29tcGlsZXIuCiAKLS0gZ3pkb3BlbiBpcyBub3Qgc3VwcG9y dGVkIG9uIFJJU0NPUywgQkVPUyBhbmQgYnkgc29tZSBNYWMgY29tcGlsZXJzLgorLSBnemRvcGVu IGlzIG5vdCBzdXBwb3J0ZWQgb24gUklTQ09TIG9yIEJFT1MuCiAKIC0gRm9yIFBhbG1Pcywgc2Vl IGh0dHA6Ly9wYWxtemxpYi5zb3VyY2Vmb3JnZS5uZXQvCiAKLS0gV2hlbiBidWlsZGluZyBhIHNo YXJlZCwgaS5lLiBkeW5hbWljIGxpYnJhcnkgb24gTWFjIE9TIFgsIHRoZSBsaWJyYXJ5IG11c3Qg YmUKLSAgaW5zdGFsbGVkIGJlZm9yZSB0ZXN0aW5nIChkbyAibWFrZSBpbnN0YWxsIiBiZWZvcmUg Im1ha2UgdGVzdCIpLCBzaW5jZSB0aGUKLSAgbGlicmFyeSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQg aW4gdGhlIGxpYnJhcnkuCi0KIAogQWNrbm93bGVkZ21lbnRzOgogCi0gIFRoZSBkZWZsYXRlIGZv cm1hdCB1c2VkIGJ5IHpsaWIgd2FzIGRlZmluZWQgYnkgUGhpbCBLYXR6LiBUaGUgZGVmbGF0ZQot ICBhbmQgemxpYiBzcGVjaWZpY2F0aW9ucyB3ZXJlIHdyaXR0ZW4gYnkgTC4gUGV0ZXIgRGV1dHNj aC4gVGhhbmtzIHRvIGFsbCB0aGUKLSAgcGVvcGxlIHdobyByZXBvcnRlZCBwcm9ibGVtcyBhbmQg c3VnZ2VzdGVkIHZhcmlvdXMgaW1wcm92ZW1lbnRzIGluIHpsaWI7Ci0gIHRoZXkgYXJlIHRvbyBu dW1lcm91cyB0byBjaXRlIGhlcmUuCisgIFRoZSBkZWZsYXRlIGZvcm1hdCB1c2VkIGJ5IHpsaWIg d2FzIGRlZmluZWQgYnkgUGhpbCBLYXR6LiAgVGhlIGRlZmxhdGUgYW5kCisgIHpsaWIgc3BlY2lm aWNhdGlvbnMgd2VyZSB3cml0dGVuIGJ5IEwuICBQZXRlciBEZXV0c2NoLiAgVGhhbmtzIHRvIGFs bCB0aGUKKyAgcGVvcGxlIHdobyByZXBvcnRlZCBwcm9ibGVtcyBhbmQgc3VnZ2VzdGVkIHZhcmlv dXMgaW1wcm92ZW1lbnRzIGluIHpsaWI7IHRoZXkKKyAgYXJlIHRvbyBudW1lcm91cyB0byBjaXRl IGhlcmUuCiAKIENvcHlyaWdodCBub3RpY2U6CiAKLSAoQykgMTk5NS0yMDA0IEplYW4tbG91cCBH YWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5k IE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhv dXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwg dGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCkBAIC0xMTQsMTMgKzEw NSwxMSBAQAogICBKZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCiAgIGpsb3VwQGd6 aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKIAotSWYgeW91IHVzZSB0 aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgd2Ugd291bGQgYXBwcmVjaWF0ZSAqbm90Kgot cmVjZWl2aW5nIGxlbmd0aHkgbGVnYWwgZG9jdW1lbnRzIHRvIHNpZ24uIFRoZSBzb3VyY2VzIGFy ZSBwcm92aWRlZAotZm9yIGZyZWUgYnV0IHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQuICBU aGUgbGlicmFyeSBoYXMgYmVlbgotZW50aXJlbHkgd3JpdHRlbiBieSBKZWFuLWxvdXAgR2FpbGx5 IGFuZCBNYXJrIEFkbGVyOyBpdCBkb2VzIG5vdAotaW5jbHVkZSB0aGlyZC1wYXJ0eSBjb2RlLgor SWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgd2Ugd291bGQgYXBwcmVj aWF0ZSAqbm90KiByZWNlaXZpbmcKK2xlbmd0aHkgbGVnYWwgZG9jdW1lbnRzIHRvIHNpZ24uICBU aGUgc291cmNlcyBhcmUgcHJvdmlkZWQgZm9yIGZyZWUgYnV0IHdpdGhvdXQKK3dhcnJhbnR5IG9m IGFueSBraW5kLiAgVGhlIGxpYnJhcnkgaGFzIGJlZW4gZW50aXJlbHkgd3JpdHRlbiBieSBKZWFu LWxvdXAKK0dhaWxseSBhbmQgTWFyayBBZGxlcjsgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGlyZC1w YXJ0eSBjb2RlLgogCi1JZiB5b3UgcmVkaXN0cmlidXRlIG1vZGlmaWVkIHNvdXJjZXMsIHdlIHdv dWxkIGFwcHJlY2lhdGUgdGhhdCB5b3UgaW5jbHVkZQotaW4gdGhlIGZpbGUgQ2hhbmdlTG9nIGhp c3RvcnkgaW5mb3JtYXRpb24gZG9jdW1lbnRpbmcgeW91ciBjaGFuZ2VzLiBQbGVhc2UKLXJlYWQg dGhlIEZBUSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlm aWVkIHNvdXJjZQotdmVyc2lvbnMuCitJZiB5b3UgcmVkaXN0cmlidXRlIG1vZGlmaWVkIHNvdXJj ZXMsIHdlIHdvdWxkIGFwcHJlY2lhdGUgdGhhdCB5b3UgaW5jbHVkZSBpbgordGhlIGZpbGUgQ2hh bmdlTG9nIGhpc3RvcnkgaW5mb3JtYXRpb24gZG9jdW1lbnRpbmcgeW91ciBjaGFuZ2VzLiAgUGxl YXNlIHJlYWQKK3RoZSBGQVEgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGRpc3RyaWJ1dGlv biBvZiBtb2RpZmllZCBzb3VyY2UgdmVyc2lvbnMuCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUy ZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL2FkbGVyMzIuYwotLS0gYS9zeXMvc3JjL2Nt ZC9ncy96bGliL2FkbGVyMzIuYwlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIGIv c3lzL3NyYy9jbWQvZ3MvemxpYi9hZGxlcjMyLmMJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0w NDAwCkBAIC0xLDc0ICsxLDE4NiBAQAogLyogYWRsZXIzMi5jIC0tIGNvbXB1dGUgdGhlIEFkbGVy LTMyIGNoZWNrc3VtIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAz IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExLCAyMDE2IE1hcmsgQWRsZXIK ICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0 IG5vdGljZSBpbiB6bGliLmgKICAqLwogCi0vKiBAKCMpICRJZDogYWRsZXIzMi5jLHYgMS4xLjEu MSAyMDA1LzA0LzI0IDIxOjM5OjM4IGdpbGVzIEV4cCAkICovCisvKiBAKCMpICRJZCQgKi8KIAot I2RlZmluZSBaTElCX0lOVEVSTkFMCi0jaW5jbHVkZSAiemxpYi5oIgorI2luY2x1ZGUgInp1dGls LmgiCiAKLSNkZWZpbmUgQkFTRSA2NTUyMVVMICAgIC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0 aGFuIDY1NTM2ICovCitsb2NhbCB1TG9uZyBhZGxlcjMyX2NvbWJpbmVfIE9GKCh1TG9uZyBhZGxl cjEsIHVMb25nIGFkbGVyMiwgel9vZmY2NF90IGxlbjIpKTsKKworI2RlZmluZSBCQVNFIDY1NTIx VSAgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KICNkZWZpbmUgTk1B WCA1NTUyCiAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsg KG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KIAotI2RlZmluZSBETzEoYnVmLGkpICB7czEgKz0g YnVmW2ldOyBzMiArPSBzMTt9CisjZGVmaW5lIERPMShidWYsaSkgIHthZGxlciArPSAoYnVmKVtp XTsgc3VtMiArPSBhZGxlcjt9CiAjZGVmaW5lIERPMihidWYsaSkgIERPMShidWYsaSk7IERPMShi dWYsaSsxKTsKICNkZWZpbmUgRE80KGJ1ZixpKSAgRE8yKGJ1ZixpKTsgRE8yKGJ1ZixpKzIpOwog I2RlZmluZSBETzgoYnVmLGkpICBETzQoYnVmLGkpOyBETzQoYnVmLGkrNCk7CiAjZGVmaW5lIERP MTYoYnVmKSAgIERPOChidWYsMCk7IERPOChidWYsOCk7CiAKKy8qIHVzZSBOT19ESVZJREUgaWYg eW91ciBwcm9jZXNzb3IgZG9lcyBub3QgZG8gZGl2aXNpb24gaW4gaGFyZHdhcmUgLS0KKyAgIHRy eSBpdCBib3RoIHdheXMgdG8gc2VlIHdoaWNoIGlzIGZhc3RlciAqLwogI2lmZGVmIE5PX0RJVklE RQorLyogbm90ZSB0aGF0IHRoaXMgYXNzdW1lcyBCQVNFIGlzIDY1NTIxLCB3aGVyZSA2NTUzNiAl IDY1NTIxID09IDE1CisgICAodGhhbmsgeW91IHRvIEpvaG4gUmVpc2VyIGZvciBwb2ludGluZyB0 aGlzIG91dCkgKi8KKyMgIGRlZmluZSBDSE9QKGEpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgdW5z aWduZWQgbG9uZyB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmVUw7IFwKKyAg ICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmlu ZSBNT0QyOChhKSBcCisgICAgZG8geyBcCisgICAgICAgIENIT1AoYSk7IFwKKyAgICAgICAgaWYg KGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCisgICAgfSB3aGlsZSAoMCkKICMgIGRlZmluZSBNT0Qo YSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNikpIGEgLT0gKEJB U0UgPDwgMTYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE1KSkgYSAtPSAoQkFTRSA8 PCAxNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTQpKSBhIC09IChCQVNFIDw8IDE0 KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMykpIGEgLT0gKEJBU0UgPDwgMTMpOyBc Ci0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEyKSkgYSAtPSAoQkFTRSA8PCAxMik7IFwKLSAg ICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTEpKSBhIC09IChCQVNFIDw8IDExKTsgXAotICAgICAg ICBpZiAoYSA+PSAoQkFTRSA8PCAxMCkpIGEgLT0gKEJBU0UgPDwgMTApOyBcCi0gICAgICAgIGlm IChhID49IChCQVNFIDw8IDkpKSBhIC09IChCQVNFIDw8IDkpOyBcCi0gICAgICAgIGlmIChhID49 IChCQVNFIDw8IDgpKSBhIC09IChCQVNFIDw8IDgpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNF IDw8IDcpKSBhIC09IChCQVNFIDw8IDcpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDYp KSBhIC09IChCQVNFIDw8IDYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDUpKSBhIC09 IChCQVNFIDw8IDUpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDQpKSBhIC09IChCQVNF IDw8IDQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDMpKSBhIC09IChCQVNFIDw8IDMp OyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDIpKSBhIC09IChCQVNFIDw8IDIpOyBcCi0g ICAgICAgIGlmIChhID49IChCQVNFIDw8IDEpKSBhIC09IChCQVNFIDw8IDEpOyBcCisgICAgICAg IENIT1AoYSk7IFwKKyAgICAgICAgTU9EMjgoYSk7IFwKKyAgICB9IHdoaWxlICgwKQorIyAgZGVm aW5lIE1PRDYzKGEpIFwKKyAgICBkbyB7IC8qIHRoaXMgYXNzdW1lcyBhIGlzIG5vdCBuZWdhdGl2 ZSAqLyBcCisgICAgICAgIHpfb2ZmNjRfdCB0bXAgPSBhID4+IDMyOyBcCisgICAgICAgIGEgJj0g MHhmZmZmZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDgpIC0gKHRtcCA8PCA1KSArIHRt cDsgXAorICAgICAgICB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmTDsgXAor ICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsg XAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1w OyBcCiAgICAgICAgIGlmIChhID49IEJBU0UpIGEgLT0gQkFTRTsgXAogICAgIH0gd2hpbGUgKDAp CiAjZWxzZQogIyAgZGVmaW5lIE1PRChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0QyOChhKSBh ICU9IEJBU0UKKyMgIGRlZmluZSBNT0Q2MyhhKSBhICU9IEJBU0UKICNlbmRpZgogCiAvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ICovCit1TG9uZyBaRVhQT1JUIGFkbGVyMzJfeihhZGxlciwgYnVmLCBsZW4p CisgICAgdUxvbmcgYWRsZXI7CisgICAgY29uc3QgQnl0ZWYgKmJ1ZjsKKyAgICB6X3NpemVfdCBs ZW47Cit7CisgICAgdW5zaWduZWQgbG9uZyBzdW0yOworICAgIHVuc2lnbmVkIG47CisKKyAgICAv KiBzcGxpdCBBZGxlci0zMiBpbnRvIGNvbXBvbmVudCBzdW1zICovCisgICAgc3VtMiA9IChhZGxl ciA+PiAxNikgJiAweGZmZmY7CisgICAgYWRsZXIgJj0gMHhmZmZmOworCisgICAgLyogaW4gY2Fz ZSB1c2VyIGxpa2VzIGRvaW5nIGEgYnl0ZSBhdCBhIHRpbWUsIGtlZXAgaXQgZmFzdCAqLworICAg IGlmIChsZW4gPT0gMSkgeworICAgICAgICBhZGxlciArPSBidWZbMF07CisgICAgICAgIGlmIChh ZGxlciA+PSBCQVNFKQorICAgICAgICAgICAgYWRsZXIgLT0gQkFTRTsKKyAgICAgICAgc3VtMiAr PSBhZGxlcjsKKyAgICAgICAgaWYgKHN1bTIgPj0gQkFTRSkKKyAgICAgICAgICAgIHN1bTIgLT0g QkFTRTsKKyAgICAgICAgcmV0dXJuIGFkbGVyIHwgKHN1bTIgPDwgMTYpOworICAgIH0KKworICAg IC8qIGluaXRpYWwgQWRsZXItMzIgdmFsdWUgKGRlZmVycmVkIGNoZWNrIGZvciBsZW4gPT0gMSBz cGVlZCkgKi8KKyAgICBpZiAoYnVmID09IFpfTlVMTCkKKyAgICAgICAgcmV0dXJuIDFMOworCisg ICAgLyogaW4gY2FzZSBzaG9ydCBsZW5ndGhzIGFyZSBwcm92aWRlZCwga2VlcCBpdCBzb21ld2hh dCBmYXN0ICovCisgICAgaWYgKGxlbiA8IDE2KSB7CisgICAgICAgIHdoaWxlIChsZW4tLSkgewor ICAgICAgICAgICAgYWRsZXIgKz0gKmJ1ZisrOworICAgICAgICAgICAgc3VtMiArPSBhZGxlcjsK KyAgICAgICAgfQorICAgICAgICBpZiAoYWRsZXIgPj0gQkFTRSkKKyAgICAgICAgICAgIGFkbGVy IC09IEJBU0U7CisgICAgICAgIE1PRDI4KHN1bTIpOyAgICAgICAgICAgIC8qIG9ubHkgYWRkZWQg c28gbWFueSBCQVNFJ3MgKi8KKyAgICAgICAgcmV0dXJuIGFkbGVyIHwgKHN1bTIgPDwgMTYpOwor ICAgIH0KKworICAgIC8qIGRvIGxlbmd0aCBOTUFYIGJsb2NrcyAtLSByZXF1aXJlcyBqdXN0IG9u ZSBtb2R1bG8gb3BlcmF0aW9uICovCisgICAgd2hpbGUgKGxlbiA+PSBOTUFYKSB7CisgICAgICAg IGxlbiAtPSBOTUFYOworICAgICAgICBuID0gTk1BWCAvIDE2OyAgICAgICAgICAvKiBOTUFYIGlz IGRpdmlzaWJsZSBieSAxNiAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICBETzE2KGJ1Zik7 ICAgICAgICAgIC8qIDE2IHN1bXMgdW5yb2xsZWQgKi8KKyAgICAgICAgICAgIGJ1ZiArPSAxNjsK KyAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgTU9EKGFkbGVyKTsKKyAgICAgICAgTU9E KHN1bTIpOworICAgIH0KKworICAgIC8qIGRvIHJlbWFpbmluZyBieXRlcyAobGVzcyB0aGFuIE5N QVgsIHN0aWxsIGp1c3Qgb25lIG1vZHVsbykgKi8KKyAgICBpZiAobGVuKSB7ICAgICAgICAgICAg ICAgICAgLyogYXZvaWQgbW9kdWxvcyBpZiBub25lIHJlbWFpbmluZyAqLworICAgICAgICB3aGls ZSAobGVuID49IDE2KSB7CisgICAgICAgICAgICBsZW4gLT0gMTY7CisgICAgICAgICAgICBETzE2 KGJ1Zik7CisgICAgICAgICAgICBidWYgKz0gMTY7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg KGxlbi0tKSB7CisgICAgICAgICAgICBhZGxlciArPSAqYnVmKys7CisgICAgICAgICAgICBzdW0y ICs9IGFkbGVyOworICAgICAgICB9CisgICAgICAgIE1PRChhZGxlcik7CisgICAgICAgIE1PRChz dW0yKTsKKyAgICB9CisKKyAgICAvKiByZXR1cm4gcmVjb21iaW5lZCBzdW1zICovCisgICAgcmV0 dXJuIGFkbGVyIHwgKHN1bTIgPDwgMTYpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiB1 TG9uZyBaRVhQT1JUIGFkbGVyMzIoYWRsZXIsIGJ1ZiwgbGVuKQogICAgIHVMb25nIGFkbGVyOwog ICAgIGNvbnN0IEJ5dGVmICpidWY7CiAgICAgdUludCBsZW47CiB7Ci0gICAgdW5zaWduZWQgbG9u ZyBzMSA9IGFkbGVyICYgMHhmZmZmOwotICAgIHVuc2lnbmVkIGxvbmcgczIgPSAoYWRsZXIgPj4g MTYpICYgMHhmZmZmOwotICAgIGludCBrOworICAgIHJldHVybiBhZGxlcjMyX3ooYWRsZXIsIGJ1 ZiwgbGVuKTsKK30KIAotICAgIGlmIChidWYgPT0gWl9OVUxMKSByZXR1cm4gMUw7CisvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ICovCitsb2NhbCB1TG9uZyBhZGxlcjMyX2NvbWJpbmVfKGFkbGVyMSwgYWRs ZXIyLCBsZW4yKQorICAgIHVMb25nIGFkbGVyMTsKKyAgICB1TG9uZyBhZGxlcjI7CisgICAgel9v ZmY2NF90IGxlbjI7Cit7CisgICAgdW5zaWduZWQgbG9uZyBzdW0xOworICAgIHVuc2lnbmVkIGxv bmcgc3VtMjsKKyAgICB1bnNpZ25lZCByZW07CiAKLSAgICB3aGlsZSAobGVuID4gMCkgewotICAg ICAgICBrID0gbGVuIDwgTk1BWCA/IChpbnQpbGVuIDogTk1BWDsKLSAgICAgICAgbGVuIC09IGs7 Ci0gICAgICAgIHdoaWxlIChrID49IDE2KSB7Ci0gICAgICAgICAgICBETzE2KGJ1Zik7Ci0gICAg ICAgICAgICBidWYgKz0gMTY7Ci0gICAgICAgICAgICBrIC09IDE2OwotICAgICAgICB9Ci0gICAg ICAgIGlmIChrICE9IDApIGRvIHsKLSAgICAgICAgICAgIHMxICs9ICpidWYrKzsKLSAgICAgICAg ICAgIHMyICs9IHMxOwotICAgICAgICB9IHdoaWxlICgtLWspOwotICAgICAgICBNT0QoczEpOwot ICAgICAgICBNT0QoczIpOwotICAgIH0KLSAgICByZXR1cm4gKHMyIDw8IDE2KSB8IHMxOworICAg IC8qIGZvciBuZWdhdGl2ZSBsZW4sIHJldHVybiBpbnZhbGlkIGFkbGVyMzIgYXMgYSBjbHVlIGZv ciBkZWJ1Z2dpbmcgKi8KKyAgICBpZiAobGVuMiA8IDApCisgICAgICAgIHJldHVybiAweGZmZmZm ZmZmVUw7CisKKyAgICAvKiB0aGUgZGVyaXZhdGlvbiBvZiB0aGlzIGZvcm11bGEgaXMgbGVmdCBh cyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlciAqLworICAgIE1PRDYzKGxlbjIpOyAgICAgICAg ICAgICAgICAvKiBhc3N1bWVzIGxlbjIgPj0gMCAqLworICAgIHJlbSA9ICh1bnNpZ25lZClsZW4y OworICAgIHN1bTEgPSBhZGxlcjEgJiAweGZmZmY7CisgICAgc3VtMiA9IHJlbSAqIHN1bTE7Cisg ICAgTU9EKHN1bTIpOworICAgIHN1bTEgKz0gKGFkbGVyMiAmIDB4ZmZmZikgKyBCQVNFIC0gMTsK KyAgICBzdW0yICs9ICgoYWRsZXIxID4+IDE2KSAmIDB4ZmZmZikgKyAoKGFkbGVyMiA+PiAxNikg JiAweGZmZmYpICsgQkFTRSAtIHJlbTsKKyAgICBpZiAoc3VtMSA+PSBCQVNFKSBzdW0xIC09IEJB U0U7CisgICAgaWYgKHN1bTEgPj0gQkFTRSkgc3VtMSAtPSBCQVNFOworICAgIGlmIChzdW0yID49 ICgodW5zaWduZWQgbG9uZylCQVNFIDw8IDEpKSBzdW0yIC09ICgodW5zaWduZWQgbG9uZylCQVNF IDw8IDEpOworICAgIGlmIChzdW0yID49IEJBU0UpIHN1bTIgLT0gQkFTRTsKKyAgICByZXR1cm4g c3VtMSB8IChzdW0yIDw8IDE2KTsKIH0KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordUxvbmcg WkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUoYWRsZXIxLCBhZGxlcjIsIGxlbjIpCisgICAgdUxvbmcg YWRsZXIxOworICAgIHVMb25nIGFkbGVyMjsKKyAgICB6X29mZl90IGxlbjI7Cit7CisgICAgcmV0 dXJuIGFkbGVyMzJfY29tYmluZV8oYWRsZXIxLCBhZGxlcjIsIGxlbjIpOworfQorCit1TG9uZyBa RVhQT1JUIGFkbGVyMzJfY29tYmluZTY0KGFkbGVyMSwgYWRsZXIyLCBsZW4yKQorICAgIHVMb25n IGFkbGVyMTsKKyAgICB1TG9uZyBhZGxlcjI7CisgICAgel9vZmY2NF90IGxlbjI7Cit7CisgICAg cmV0dXJuIGFkbGVyMzJfY29tYmluZV8oYWRsZXIxLCBhZGxlcjIsIGxlbjIpOworfQpkaWZmIC1y IDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9hbGdvcml0 aG0udHh0Ci0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvYWxnb3JpdGhtLnR4dAlTdW4gTWFyIDA4 IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5 NzAgKzAwMDAKQEAgLTEsMjA5ICswLDAgQEAKLTEuIENvbXByZXNzaW9uIGFsZ29yaXRobSAoZGVm bGF0ZSkKLQotVGhlIGRlZmxhdGlvbiBhbGdvcml0aG0gdXNlZCBieSBnemlwIChhbHNvIHppcCBh bmQgemxpYikgaXMgYSB2YXJpYXRpb24gb2YKLUxaNzcgKExlbXBlbC1aaXYgMTk3Nywgc2VlIHJl ZmVyZW5jZSBiZWxvdykuIEl0IGZpbmRzIGR1cGxpY2F0ZWQgc3RyaW5ncyBpbgotdGhlIGlucHV0 IGRhdGEuICBUaGUgc2Vjb25kIG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgaXMgcmVwbGFjZWQgYnkg YQotcG9pbnRlciB0byB0aGUgcHJldmlvdXMgc3RyaW5nLCBpbiB0aGUgZm9ybSBvZiBhIHBhaXIg KGRpc3RhbmNlLAotbGVuZ3RoKS4gIERpc3RhbmNlcyBhcmUgbGltaXRlZCB0byAzMksgYnl0ZXMs IGFuZCBsZW5ndGhzIGFyZSBsaW1pdGVkCi10byAyNTggYnl0ZXMuIFdoZW4gYSBzdHJpbmcgZG9l cyBub3Qgb2NjdXIgYW55d2hlcmUgaW4gdGhlIHByZXZpb3VzCi0zMksgYnl0ZXMsIGl0IGlzIGVt aXR0ZWQgYXMgYSBzZXF1ZW5jZSBvZiBsaXRlcmFsIGJ5dGVzLiAgKEluIHRoaXMKLWRlc2NyaXB0 aW9uLCBgc3RyaW5nJyBtdXN0IGJlIHRha2VuIGFzIGFuIGFyYml0cmFyeSBzZXF1ZW5jZSBvZiBi eXRlcywKLWFuZCBpcyBub3QgcmVzdHJpY3RlZCB0byBwcmludGFibGUgY2hhcmFjdGVycy4pCi0K LUxpdGVyYWxzIG9yIG1hdGNoIGxlbmd0aHMgYXJlIGNvbXByZXNzZWQgd2l0aCBvbmUgSHVmZm1h biB0cmVlLCBhbmQKLW1hdGNoIGRpc3RhbmNlcyBhcmUgY29tcHJlc3NlZCB3aXRoIGFub3RoZXIg dHJlZS4gVGhlIHRyZWVzIGFyZSBzdG9yZWQKLWluIGEgY29tcGFjdCBmb3JtIGF0IHRoZSBzdGFy dCBvZiBlYWNoIGJsb2NrLiBUaGUgYmxvY2tzIGNhbiBoYXZlIGFueQotc2l6ZSAoZXhjZXB0IHRo YXQgdGhlIGNvbXByZXNzZWQgZGF0YSBmb3Igb25lIGJsb2NrIG11c3QgZml0IGluCi1hdmFpbGFi bGUgbWVtb3J5KS4gQSBibG9jayBpcyB0ZXJtaW5hdGVkIHdoZW4gZGVmbGF0ZSgpIGRldGVybWlu ZXMgdGhhdAotaXQgd291bGQgYmUgdXNlZnVsIHRvIHN0YXJ0IGFub3RoZXIgYmxvY2sgd2l0aCBm cmVzaCB0cmVlcy4gKFRoaXMgaXMKLXNvbWV3aGF0IHNpbWlsYXIgdG8gdGhlIGJlaGF2aW9yIG9m IExaVy1iYXNlZCBfY29tcHJlc3NfLikKLQotRHVwbGljYXRlZCBzdHJpbmdzIGFyZSBmb3VuZCB1 c2luZyBhIGhhc2ggdGFibGUuIEFsbCBpbnB1dCBzdHJpbmdzIG9mCi1sZW5ndGggMyBhcmUgaW5z ZXJ0ZWQgaW4gdGhlIGhhc2ggdGFibGUuIEEgaGFzaCBpbmRleCBpcyBjb21wdXRlZCBmb3IKLXRo ZSBuZXh0IDMgYnl0ZXMuIElmIHRoZSBoYXNoIGNoYWluIGZvciB0aGlzIGluZGV4IGlzIG5vdCBl bXB0eSwgYWxsCi1zdHJpbmdzIGluIHRoZSBjaGFpbiBhcmUgY29tcGFyZWQgd2l0aCB0aGUgY3Vy cmVudCBpbnB1dCBzdHJpbmcsIGFuZAotdGhlIGxvbmdlc3QgbWF0Y2ggaXMgc2VsZWN0ZWQuCi0K LVRoZSBoYXNoIGNoYWlucyBhcmUgc2VhcmNoZWQgc3RhcnRpbmcgd2l0aCB0aGUgbW9zdCByZWNl bnQgc3RyaW5ncywgdG8KLWZhdm9yIHNtYWxsIGRpc3RhbmNlcyBhbmQgdGh1cyB0YWtlIGFkdmFu dGFnZSBvZiB0aGUgSHVmZm1hbiBlbmNvZGluZy4KLVRoZSBoYXNoIGNoYWlucyBhcmUgc2luZ2x5 IGxpbmtlZC4gVGhlcmUgYXJlIG5vIGRlbGV0aW9ucyBmcm9tIHRoZQotaGFzaCBjaGFpbnMsIHRo ZSBhbGdvcml0aG0gc2ltcGx5IGRpc2NhcmRzIG1hdGNoZXMgdGhhdCBhcmUgdG9vIG9sZC4KLQot VG8gYXZvaWQgYSB3b3JzdC1jYXNlIHNpdHVhdGlvbiwgdmVyeSBsb25nIGhhc2ggY2hhaW5zIGFy ZSBhcmJpdHJhcmlseQotdHJ1bmNhdGVkIGF0IGEgY2VydGFpbiBsZW5ndGgsIGRldGVybWluZWQg YnkgYSBydW50aW1lIG9wdGlvbiAobGV2ZWwKLXBhcmFtZXRlciBvZiBkZWZsYXRlSW5pdCkuIFNv IGRlZmxhdGUoKSBkb2VzIG5vdCBhbHdheXMgZmluZCB0aGUgbG9uZ2VzdAotcG9zc2libGUgbWF0 Y2ggYnV0IGdlbmVyYWxseSBmaW5kcyBhIG1hdGNoIHdoaWNoIGlzIGxvbmcgZW5vdWdoLgotCi1k ZWZsYXRlKCkgYWxzbyBkZWZlcnMgdGhlIHNlbGVjdGlvbiBvZiBtYXRjaGVzIHdpdGggYSBsYXp5 IGV2YWx1YXRpb24KLW1lY2hhbmlzbS4gQWZ0ZXIgYSBtYXRjaCBvZiBsZW5ndGggTiBoYXMgYmVl biBmb3VuZCwgZGVmbGF0ZSgpIHNlYXJjaGVzIGZvcgotYSBsb25nZXIgbWF0Y2ggYXQgdGhlIG5l eHQgaW5wdXQgYnl0ZS4gSWYgYSBsb25nZXIgbWF0Y2ggaXMgZm91bmQsIHRoZQotcHJldmlvdXMg bWF0Y2ggaXMgdHJ1bmNhdGVkIHRvIGEgbGVuZ3RoIG9mIG9uZSAodGh1cyBwcm9kdWNpbmcgYSBz aW5nbGUKLWxpdGVyYWwgYnl0ZSkgYW5kIHRoZSBwcm9jZXNzIG9mIGxhenkgZXZhbHVhdGlvbiBi ZWdpbnMgYWdhaW4uIE90aGVyd2lzZSwKLXRoZSBvcmlnaW5hbCBtYXRjaCBpcyBrZXB0LCBhbmQg dGhlIG5leHQgbWF0Y2ggc2VhcmNoIGlzIGF0dGVtcHRlZCBvbmx5IE4KLXN0ZXBzIGxhdGVyLgot Ci1UaGUgbGF6eSBtYXRjaCBldmFsdWF0aW9uIGlzIGFsc28gc3ViamVjdCB0byBhIHJ1bnRpbWUg cGFyYW1ldGVyLiBJZgotdGhlIGN1cnJlbnQgbWF0Y2ggaXMgbG9uZyBlbm91Z2gsIGRlZmxhdGUo KSByZWR1Y2VzIHRoZSBzZWFyY2ggZm9yIGEgbG9uZ2VyCi1tYXRjaCwgdGh1cyBzcGVlZGluZyB1 cCB0aGUgd2hvbGUgcHJvY2Vzcy4gSWYgY29tcHJlc3Npb24gcmF0aW8gaXMgbW9yZQotaW1wb3J0 YW50IHRoYW4gc3BlZWQsIGRlZmxhdGUoKSBhdHRlbXB0cyBhIGNvbXBsZXRlIHNlY29uZCBzZWFy Y2ggZXZlbiBpZgotdGhlIGZpcnN0IG1hdGNoIGlzIGFscmVhZHkgbG9uZyBlbm91Z2guCi0KLVRo ZSBsYXp5IG1hdGNoIGV2YWx1YXRpb24gaXMgbm90IHBlcmZvcm1lZCBmb3IgdGhlIGZhc3Rlc3Qg Y29tcHJlc3Npb24KLW1vZGVzIChsZXZlbCBwYXJhbWV0ZXIgMSB0byAzKS4gRm9yIHRoZXNlIGZh c3QgbW9kZXMsIG5ldyBzdHJpbmdzCi1hcmUgaW5zZXJ0ZWQgaW4gdGhlIGhhc2ggdGFibGUgb25s eSB3aGVuIG5vIG1hdGNoIHdhcyBmb3VuZCwgb3IKLXdoZW4gdGhlIG1hdGNoIGlzIG5vdCB0b28g bG9uZy4gVGhpcyBkZWdyYWRlcyB0aGUgY29tcHJlc3Npb24gcmF0aW8KLWJ1dCBzYXZlcyB0aW1l IHNpbmNlIHRoZXJlIGFyZSBib3RoIGZld2VyIGluc2VydGlvbnMgYW5kIGZld2VyIHNlYXJjaGVz LgotCi0KLTIuIERlY29tcHJlc3Npb24gYWxnb3JpdGhtIChpbmZsYXRlKQotCi0yLjEgSW50cm9k dWN0aW9uCi0KLVRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRvIHJlcHJlc2VudCBhIEh1ZmZtYW4g Y29kZSAob3IgYW55IHByZWZpeCBjb2RlKSBzbwotdGhhdCB5b3UgY2FuIGRlY29kZSBmYXN0LiAg VGhlIG1vc3QgaW1wb3J0YW50IGNoYXJhY3RlcmlzdGljIGlzIHRoYXQgc2hvcnRlcgotY29kZXMg YXJlIG11Y2ggbW9yZSBjb21tb24gdGhhbiBsb25nZXIgY29kZXMsIHNvIHBheSBhdHRlbnRpb24g dG8gZGVjb2RpbmcgdGhlCi1zaG9ydCBjb2RlcyBmYXN0LCBhbmQgbGV0IHRoZSBsb25nIGNvZGVz IHRha2UgbG9uZ2VyIHRvIGRlY29kZS4KLQotaW5mbGF0ZSgpIHNldHMgdXAgYSBmaXJzdCBsZXZl bCB0YWJsZSB0aGF0IGNvdmVycyBzb21lIG51bWJlciBvZiBiaXRzIG9mCi1pbnB1dCBsZXNzIHRo YW4gdGhlIGxlbmd0aCBvZiBsb25nZXN0IGNvZGUuICBJdCBnZXRzIHRoYXQgbWFueSBiaXRzIGZy b20gdGhlCi1zdHJlYW0sIGFuZCBsb29rcyBpdCB1cCBpbiB0aGUgdGFibGUuICBUaGUgdGFibGUg d2lsbCB0ZWxsIGlmIHRoZSBuZXh0Ci1jb2RlIGlzIHRoYXQgbWFueSBiaXRzIG9yIGxlc3MgYW5k IGhvdyBtYW55LCBhbmQgaWYgaXQgaXMsIGl0IHdpbGwgdGVsbAotdGhlIHZhbHVlLCBlbHNlIGl0 IHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgbGV2ZWwgdGFibGUgZm9yIHdoaWNoIGluZmxhdGUoKQot Z3JhYnMgbW9yZSBiaXRzIGFuZCB0cmllcyB0byBkZWNvZGUgYSBsb25nZXIgY29kZS4KLQotSG93 IG1hbnkgYml0cyB0byBtYWtlIHRoZSBmaXJzdCBsb29rdXAgaXMgYSB0cmFkZW9mZiBiZXR3ZWVu IHRoZSB0aW1lIGl0Ci10YWtlcyB0byBkZWNvZGUgYW5kIHRoZSB0aW1lIGl0IHRha2VzIHRvIGJ1 aWxkIHRoZSB0YWJsZS4gIElmIGJ1aWxkaW5nIHRoZQotdGFibGUgdG9vayBubyB0aW1lIChhbmQg aWYgeW91IGhhZCBpbmZpbml0ZSBtZW1vcnkpLCB0aGVuIHRoZXJlIHdvdWxkIG9ubHkKLWJlIGEg Zmlyc3QgbGV2ZWwgdGFibGUgdG8gY292ZXIgYWxsIHRoZSB3YXkgdG8gdGhlIGxvbmdlc3QgY29k ZS4gIEhvd2V2ZXIsCi1idWlsZGluZyB0aGUgdGFibGUgZW5kcyB1cCB0YWtpbmcgYSBsb3QgbG9u Z2VyIGZvciBtb3JlIGJpdHMgc2luY2Ugc2hvcnQKLWNvZGVzIGFyZSByZXBsaWNhdGVkIG1hbnkg dGltZXMgaW4gc3VjaCBhIHRhYmxlLiAgV2hhdCBpbmZsYXRlKCkgZG9lcyBpcwotc2ltcGx5IHRv IG1ha2UgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBmaXJzdCB0YWJsZSBhIHZhcmlhYmxlLCBh bmQgIHRoZW4KLXRvIHNldCB0aGF0IHZhcmlhYmxlIGZvciB0aGUgbWF4aW11bSBzcGVlZC4KLQot Rm9yIGluZmxhdGUsIHdoaWNoIGhhcyAyODYgcG9zc2libGUgY29kZXMgZm9yIHRoZSBsaXRlcmFs L2xlbmd0aCB0cmVlLCB0aGUgc2l6ZQotb2YgdGhlIGZpcnN0IHRhYmxlIGlzIG5pbmUgYml0cy4g IEFsc28gdGhlIGRpc3RhbmNlIHRyZWVzIGhhdmUgMzAgcG9zc2libGUKLXZhbHVlcywgYW5kIHRo ZSBzaXplIG9mIHRoZSBmaXJzdCB0YWJsZSBpcyBzaXggYml0cy4gIE5vdGUgdGhhdCBmb3IgZWFj aCBvZgotdGhvc2UgY2FzZXMsIHRoZSB0YWJsZSBlbmRlZCB1cCBvbmUgYml0IGxvbmdlciB0aGFu IHRoZSBgYGF2ZXJhZ2UnJyBjb2RlCi1sZW5ndGgsIGkuZS4gdGhlIGNvZGUgbGVuZ3RoIG9mIGFu IGFwcHJveGltYXRlbHkgZmxhdCBjb2RlIHdoaWNoIHdvdWxkIGJlIGEKLWxpdHRsZSBtb3JlIHRo YW4gZWlnaHQgYml0cyBmb3IgMjg2IHN5bWJvbHMgYW5kIGEgbGl0dGxlIGxlc3MgdGhhbiBmaXZl IGJpdHMKLWZvciAzMCBzeW1ib2xzLgotCi0KLTIuMiBNb3JlIGRldGFpbHMgb24gdGhlIGluZmxh dGUgdGFibGUgbG9va3VwCi0KLU9rLCB5b3Ugd2FudCB0byBrbm93IHdoYXQgdGhpcyBjbGV2ZXJs eSBvYmZ1c2NhdGVkIGluZmxhdGUgdHJlZSBhY3R1YWxseQotbG9va3MgbGlrZS4gIFlvdSBhcmUg Y29ycmVjdCB0aGF0IGl0J3Mgbm90IGEgSHVmZm1hbiB0cmVlLiAgSXQgaXMgc2ltcGx5IGEKLWxv b2t1cCB0YWJsZSBmb3IgdGhlIGZpcnN0LCBsZXQncyBzYXksIG5pbmUgYml0cyBvZiBhIEh1ZmZt YW4gc3ltYm9sLiAgVGhlCi1zeW1ib2wgY291bGQgYmUgYXMgc2hvcnQgYXMgb25lIGJpdCBvciBh cyBsb25nIGFzIDE1IGJpdHMuICBJZiBhIHBhcnRpY3VsYXIKLXN5bWJvbCBpcyBzaG9ydGVyIHRo YW4gbmluZSBiaXRzLCB0aGVuIHRoYXQgc3ltYm9sJ3MgdHJhbnNsYXRpb24gaXMgZHVwbGljYXRl ZAotaW4gYWxsIHRob3NlIGVudHJpZXMgdGhhdCBzdGFydCB3aXRoIHRoYXQgc3ltYm9sJ3MgYml0 cy4gIEZvciBleGFtcGxlLCBpZiB0aGUKLXN5bWJvbCBpcyBmb3VyIGJpdHMsIHRoZW4gaXQncyBk dXBsaWNhdGVkIDMyIHRpbWVzIGluIGEgbmluZS1iaXQgdGFibGUuICBJZiBhCi1zeW1ib2wgaXMg bmluZSBiaXRzIGxvbmcsIGl0IGFwcGVhcnMgaW4gdGhlIHRhYmxlIG9uY2UuCi0KLUlmIHRoZSBz eW1ib2wgaXMgbG9uZ2VyIHRoYW4gbmluZSBiaXRzLCB0aGVuIHRoYXQgZW50cnkgaW4gdGhlIHRh YmxlIHBvaW50cwotdG8gYW5vdGhlciBzaW1pbGFyIHRhYmxlIGZvciB0aGUgcmVtYWluaW5nIGJp dHMuICBBZ2FpbiwgdGhlcmUgYXJlIGR1cGxpY2F0ZWQKLWVudHJpZXMgYXMgbmVlZGVkLiAgVGhl IGlkZWEgaXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHRoZSBzeW1ib2wgd2lsbCBiZSBzaG9ydAot YW5kIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgdGFibGUgbG9vayB1cC4gIChUaGF0J3Mgd2hvbGUg aWRlYSBiZWhpbmQgZGF0YQotY29tcHJlc3Npb24gaW4gdGhlIGZpcnN0IHBsYWNlLikgIEZvciB0 aGUgbGVzcyBmcmVxdWVudCBsb25nIHN5bWJvbHMsIHRoZXJlCi13aWxsIGJlIHR3byBsb29rdXBz LiAgSWYgeW91IGhhZCBhIGNvbXByZXNzaW9uIG1ldGhvZCB3aXRoIHJlYWxseSBsb25nCi1zeW1i b2xzLCB5b3UgY291bGQgaGF2ZSBhcyBtYW55IGxldmVscyBvZiBsb29rdXBzIGFzIGlzIGVmZmlj aWVudC4gIEZvcgotaW5mbGF0ZSwgdHdvIGlzIGVub3VnaC4KLQotU28gYSB0YWJsZSBlbnRyeSBl aXRoZXIgcG9pbnRzIHRvIGFub3RoZXIgdGFibGUgKGluIHdoaWNoIGNhc2UgbmluZSBiaXRzIGlu Ci10aGUgYWJvdmUgZXhhbXBsZSBhcmUgZ29iYmxlZCksIG9yIGl0IGNvbnRhaW5zIHRoZSB0cmFu c2xhdGlvbiBmb3IgdGhlIHN5bWJvbAotYW5kIHRoZSBudW1iZXIgb2YgYml0cyB0byBnb2JibGUu ICBUaGVuIHlvdSBzdGFydCBhZ2FpbiB3aXRoIHRoZSBuZXh0Ci11bmdvYmJsZWQgYml0LgotCi1Z b3UgbWF5IHdvbmRlcjogd2h5IG5vdCBqdXN0IGhhdmUgb25lIGxvb2t1cCB0YWJsZSBmb3IgaG93 IGV2ZXIgbWFueSBiaXRzIHRoZQotbG9uZ2VzdCBzeW1ib2wgaXM/ICBUaGUgcmVhc29uIGlzIHRo YXQgaWYgeW91IGRvIHRoYXQsIHlvdSBlbmQgdXAgc3BlbmRpbmcKLW1vcmUgdGltZSBmaWxsaW5n IGluIGR1cGxpY2F0ZSBzeW1ib2wgZW50cmllcyB0aGFuIHlvdSBkbyBhY3R1YWxseSBkZWNvZGlu Zy4KLUF0IGxlYXN0IGZvciBkZWZsYXRlJ3Mgb3V0cHV0IHRoYXQgZ2VuZXJhdGVzIG5ldyB0cmVl cyBldmVyeSBzZXZlcmFsIDEwJ3Mgb2YKLWtieXRlcy4gIFlvdSBjYW4gaW1hZ2luZSB0aGF0IGZp bGxpbmcgaW4gYSAyXjE1IGVudHJ5IHRhYmxlIGZvciBhIDE1LWJpdCBjb2RlCi13b3VsZCB0YWtl IHRvbyBsb25nIGlmIHlvdSdyZSBvbmx5IGRlY29kaW5nIHNldmVyYWwgdGhvdXNhbmQgc3ltYm9s cy4gIEF0IHRoZQotb3RoZXIgZXh0cmVtZSwgeW91IGNvdWxkIG1ha2UgYSBuZXcgdGFibGUgZm9y IGV2ZXJ5IGJpdCBpbiB0aGUgY29kZS4gIEluIGZhY3QsCi10aGF0J3MgZXNzZW50aWFsbHkgYSBI dWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdHdvIG11Y2ggdGltZQotdHJhdmVyc2lu ZyB0aGUgdHJlZSB3aGlsZSBkZWNvZGluZywgZXZlbiBmb3Igc2hvcnQgc3ltYm9scy4KLQotU28g dGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgZmlyc3QgbG9va3VwIHRhYmxlIGlzIGEgdHJhZGUg b2YgdGhlIHRpbWUgdG8KLWZpbGwgb3V0IHRoZSB0YWJsZSB2cy4gdGhlIHRpbWUgc3BlbnQgbG9v a2luZyBhdCB0aGUgc2Vjb25kIGxldmVsIGFuZCBhYm92ZSBvZgotdGhlIHRhYmxlLgotCi1IZXJl IGlzIGFuIGV4YW1wbGUsIHNjYWxlZCBkb3duOgotCi1UaGUgY29kZSBiZWluZyBkZWNvZGVkLCB3 aXRoIDEwIHN5bWJvbHMsIGZyb20gMSB0byA2IGJpdHMgbG9uZzoKLQotQTogMAotQjogMTAKLUM6 IDExMDAKLUQ6IDExMDEwCi1FOiAxMTAxMQotRjogMTExMDAKLUc6IDExMTAxCi1IOiAxMTExMAot STogMTExMTEwCi1KOiAxMTExMTEKLQotTGV0J3MgbWFrZSB0aGUgZmlyc3QgdGFibGUgdGhyZWUg Yml0cyBsb25nIChlaWdodCBlbnRyaWVzKToKLQotMDAwOiBBLDEKLTAwMTogQSwxCi0wMTA6IEEs MQotMDExOiBBLDEKLTEwMDogQiwyCi0xMDE6IEIsMgotMTEwOiAtPiB0YWJsZSBYIChnb2JibGUg MyBiaXRzKQotMTExOiAtPiB0YWJsZSBZIChnb2JibGUgMyBiaXRzKQotCi1FYWNoIGVudHJ5IGlz IHdoYXQgdGhlIGJpdHMgZGVjb2RlIGFzIGFuZCBob3cgbWFueSBiaXRzIHRoYXQgaXMsIGkuZS4g aG93Ci1tYW55IGJpdHMgdG8gZ29iYmxlLiAgT3IgdGhlIGVudHJ5IHBvaW50cyB0byBhbm90aGVy IHRhYmxlLCB3aXRoIHRoZSBudW1iZXIgb2YKLWJpdHMgdG8gZ29iYmxlIGltcGxpY2l0IGluIHRo ZSBzaXplIG9mIHRoZSB0YWJsZS4KLQotVGFibGUgWCBpcyB0d28gYml0cyBsb25nIHNpbmNlIHRo ZSBsb25nZXN0IGNvZGUgc3RhcnRpbmcgd2l0aCAxMTAgaXMgZml2ZSBiaXRzCi1sb25nOgotCi0w MDogQywxCi0wMTogQywxCi0xMDogRCwyCi0xMTogRSwyCi0KLVRhYmxlIFkgaXMgdGhyZWUgYml0 cyBsb25nIHNpbmNlIHRoZSBsb25nZXN0IGNvZGUgc3RhcnRpbmcgd2l0aCAxMTEgaXMgc2l4Ci1i aXRzIGxvbmc6Ci0KLTAwMDogRiwyCi0wMDE6IEYsMgotMDEwOiBHLDIKLTAxMTogRywyCi0xMDA6 IEgsMgotMTAxOiBILDIKLTExMDogSSwzCi0xMTE6IEosMwotCi1TbyB3aGF0IHdlIGhhdmUgaGVy ZSBhcmUgdGhyZWUgdGFibGVzIHdpdGggYSB0b3RhbCBvZiAyMCBlbnRyaWVzIHRoYXQgaGFkIHRv Ci1iZSBjb25zdHJ1Y3RlZC4gIFRoYXQncyBjb21wYXJlZCB0byA2NCBlbnRyaWVzIGZvciBhIHNp bmdsZSB0YWJsZS4gIE9yCi1jb21wYXJlZCB0byAxNiBlbnRyaWVzIGZvciBhIEh1ZmZtYW4gdHJl ZSAoc2l4IHR3byBlbnRyeSB0YWJsZXMgYW5kIG9uZSBmb3VyCi1lbnRyeSB0YWJsZSkuICBBc3N1 bWluZyB0aGF0IHRoZSBjb2RlIGlkZWFsbHkgcmVwcmVzZW50cyB0aGUgcHJvYmFiaWxpdHkgb2YK LXRoZSBzeW1ib2xzLCBpdCB0YWtlcyBvbiB0aGUgYXZlcmFnZSAxLjI1IGxvb2t1cHMgcGVyIHN5 bWJvbC4gIFRoYXQncyBjb21wYXJlZAotdG8gb25lIGxvb2t1cCBmb3IgdGhlIHNpbmdsZSB0YWJs ZSwgb3IgMS42NiBsb29rdXBzIHBlciBzeW1ib2wgZm9yIHRoZQotSHVmZm1hbiB0cmVlLgotCi1U aGVyZSwgSSB0aGluayB0aGF0IGdpdmVzIHlvdSBhIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9u LiAgRm9yIGluZmxhdGUsIHRoZQotbWVhbmluZyBvZiBhIHBhcnRpY3VsYXIgc3ltYm9sIGlzIG9m dGVuIG1vcmUgdGhhbiBqdXN0IGEgbGV0dGVyLiAgSXQgY2FuIGJlIGEKLWJ5dGUgKGEgImxpdGVy YWwiKSwgb3IgaXQgY2FuIGJlIGVpdGhlciBhIGxlbmd0aCBvciBhIGRpc3RhbmNlIHdoaWNoCi1p bmRpY2F0ZXMgYSBiYXNlIHZhbHVlIGFuZCBhIG51bWJlciBvZiBiaXRzIHRvIGZldGNoIGFmdGVy IHRoZSBjb2RlIHRoYXQgaXMKLWFkZGVkIHRvIHRoZSBiYXNlIHZhbHVlLiAgT3IgaXQgbWlnaHQg YmUgdGhlIHNwZWNpYWwgZW5kLW9mLWJsb2NrIGNvZGUuICBUaGUKLWRhdGEgc3RydWN0dXJlcyBj cmVhdGVkIGluIGluZnRyZWVzLmMgdHJ5IHRvIGVuY29kZSBhbGwgdGhhdCBpbmZvcm1hdGlvbgot Y29tcGFjdGx5IGluIHRoZSB0YWJsZXMuCi0KLQotSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFy ayBBZGxlcgotamxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVk dQotCi0KLVJlZmVyZW5jZXM6Ci0KLVtMWjc3XSBaaXYgSi4sIExlbXBlbCBBLiwgYGBBIFVuaXZl cnNhbCBBbGdvcml0aG0gZm9yIFNlcXVlbnRpYWwgRGF0YQotQ29tcHJlc3Npb24sJycgSUVFRSBU cmFuc2FjdGlvbnMgb24gSW5mb3JtYXRpb24gVGhlb3J5LCBWb2wuIDIzLCBOby4gMywKLXBwLiAz MzctMzQzLgotCi1gYERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9u JycgYXZhaWxhYmxlIGluCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dApkaWZm IC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9jb21w cmVzcy5jCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvY29tcHJlc3MuYwlTdW4gTWFyIDA4IDIy OjAwOjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9jb21wcmVzcy5jCVN1 biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtMSw5ICsxLDkgQEAKIC8qIGNvbXByZXNz LmMgLS0gY29tcHJlc3MgYSBtZW1vcnkgYnVmZmVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAw MiBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTQsIDIw MTYgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlz dHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAK LS8qIEAoIykgJElkOiBjb21wcmVzcy5jLHYgMS4xLjEuMSAyMDA1LzA0LzI0IDIxOjM5OjM4IGdp bGVzIEV4cCAkICovCisvKiBAKCMpICRJZCQgKi8KIAogI2RlZmluZSBaTElCX0lOVEVSTkFMCiAj aW5jbHVkZSAiemxpYi5oIgpAQCAtMjgsMTYgKzI4LDExIEBACiB7CiAgICAgel9zdHJlYW0gc3Ry ZWFtOwogICAgIGludCBlcnI7CisgICAgY29uc3QgdUludCBtYXggPSAodUludCktMTsKKyAgICB1 TG9uZyBsZWZ0OwogCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKLSAgICBz dHJlYW0uYXZhaWxfaW4gPSAodUludClzb3VyY2VMZW47Ci0jaWZkZWYgTUFYU0VHXzY0SwotICAg IC8qIENoZWNrIGZvciBzb3VyY2UgPiA2NEsgb24gMTYtYml0IG1hY2hpbmU6ICovCi0gICAgaWYg KCh1TG9uZylzdHJlYW0uYXZhaWxfaW4gIT0gc291cmNlTGVuKSByZXR1cm4gWl9CVUZfRVJST1I7 Ci0jZW5kaWYKLSAgICBzdHJlYW0ubmV4dF9vdXQgPSBkZXN0OwotICAgIHN0cmVhbS5hdmFpbF9v dXQgPSAodUludCkqZGVzdExlbjsKLSAgICBpZiAoKHVMb25nKXN0cmVhbS5hdmFpbF9vdXQgIT0g KmRlc3RMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICBsZWZ0ID0gKmRlc3RMZW47CisgICAg KmRlc3RMZW4gPSAwOwogCiAgICAgc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7CiAgICAg c3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOwpAQCAtNDYsMTUgKzQxLDI2IEBACiAgICAgZXJy ID0gZGVmbGF0ZUluaXQoJnN0cmVhbSwgbGV2ZWwpOwogICAgIGlmIChlcnIgIT0gWl9PSykgcmV0 dXJuIGVycjsKIAotICAgIGVyciA9IGRlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOwotICAgIGlm IChlcnIgIT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIGRlZmxhdGVFbmQoJnN0cmVhbSk7Ci0g ICAgICAgIHJldHVybiBlcnIgPT0gWl9PSyA/IFpfQlVGX0VSUk9SIDogZXJyOwotICAgIH0KKyAg ICBzdHJlYW0ubmV4dF9vdXQgPSBkZXN0OworICAgIHN0cmVhbS5hdmFpbF9vdXQgPSAwOworICAg IHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CisgICAgc3RyZWFtLmF2 YWlsX2luID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgaWYgKHN0cmVhbS5hdmFpbF9vdXQgPT0g MCkgeworICAgICAgICAgICAgc3RyZWFtLmF2YWlsX291dCA9IGxlZnQgPiAodUxvbmcpbWF4ID8g bWF4IDogKHVJbnQpbGVmdDsKKyAgICAgICAgICAgIGxlZnQgLT0gc3RyZWFtLmF2YWlsX291dDsK KyAgICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtLmF2YWlsX2luID09IDApIHsKKyAgICAgICAg ICAgIHN0cmVhbS5hdmFpbF9pbiA9IHNvdXJjZUxlbiA+ICh1TG9uZyltYXggPyBtYXggOiAodUlu dClzb3VyY2VMZW47CisgICAgICAgICAgICBzb3VyY2VMZW4gLT0gc3RyZWFtLmF2YWlsX2luOwor ICAgICAgICB9CisgICAgICAgIGVyciA9IGRlZmxhdGUoJnN0cmVhbSwgc291cmNlTGVuID8gWl9O T19GTFVTSCA6IFpfRklOSVNIKTsKKyAgICB9IHdoaWxlIChlcnIgPT0gWl9PSyk7CisKICAgICAq ZGVzdExlbiA9IHN0cmVhbS50b3RhbF9vdXQ7Ci0KLSAgICBlcnIgPSBkZWZsYXRlRW5kKCZzdHJl YW0pOwotICAgIHJldHVybiBlcnI7CisgICAgZGVmbGF0ZUVuZCgmc3RyZWFtKTsKKyAgICByZXR1 cm4gZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBlcnI7CiB9CiAKIC8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpAQCAtNzUsNSArODEsNiBAQAogdUxvbmcgWkVYUE9SVCBjb21wcmVzc0JvdW5kIChz b3VyY2VMZW4pCiAgICAgdUxvbmcgc291cmNlTGVuOwogewotICAgIHJldHVybiBzb3VyY2VMZW4g KyAoc291cmNlTGVuID4+IDEyKSArIChzb3VyY2VMZW4gPj4gMTQpICsgMTE7CisgICAgcmV0dXJu IHNvdXJjZUxlbiArIChzb3VyY2VMZW4gPj4gMTIpICsgKHNvdXJjZUxlbiA+PiAxNCkgKworICAg ICAgICAgICAoc291cmNlTGVuID4+IDI1KSArIDEzOwogfQpkaWZmIC1yIDlhMzE3NzIzMTc5MCAt ciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9jb25maWd1cmUKLS0tIGEvc3lzL3Ny Yy9jbWQvZ3MvemxpYi9jb25maWd1cmUJU3VuIE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisr KyAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCkBAIC0xLDQ0MyArMCww IEBACi0jIS9iaW4vc2gKLSMgY29uZmlndXJlIHNjcmlwdCBmb3IgemxpYi4gVGhpcyBzY3JpcHQg aXMgbmVlZGVkIG9ubHkgaWYKLSMgeW91IHdpc2ggdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeSBh bmQgeW91ciBzeXN0ZW0gc3VwcG9ydHMgdGhlbSwKLSMgb2YgaWYgeW91IG5lZWQgc3BlY2lhbCBj b21waWxlciwgZmxhZ3Mgb3IgaW5zdGFsbCBkaXJlY3RvcnkuCi0jIE90aGVyd2lzZSwgeW91IGNh biBqdXN0IHVzZSBkaXJlY3RseSAibWFrZSB0ZXN0OyBtYWtlIGluc3RhbGwiCi0jCi0jIFRvIGNy ZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LCB1c2UgImNvbmZpZ3VyZSAtLXNoYXJlZCI7IGJ5IGRlZmF1 bHQgYSBzdGF0aWMKLSMgbGlicmFyeSBpcyBjcmVhdGVkLiBJZiB0aGUgcHJpbWl0aXZlIHNoYXJl ZCBsaWJyYXJ5IHN1cHBvcnQgcHJvdmlkZWQgaGVyZQotIyBkb2VzIG5vdCB3b3JrLCB1c2UgZnRw Oi8vcHJlcC5haS5taXQuZWR1L3B1Yi9nbnUvbGlidG9vbC0qLnRhci5negotIwotIyBUbyBpbXBv c2Ugc3BlY2lmaWMgY29tcGlsZXIgb3IgZmxhZ3Mgb3IgaW5zdGFsbCBkaXJlY3RvcnksIHVzZSBm b3IgZXhhbXBsZToKLSMgICAgcHJlZml4PSRIT01FIENDPWNjIENGTEFHUz0iLU80IiAuL2NvbmZp Z3VyZQotIyBvciBmb3IgY3NoL3Rjc2ggdXNlcnM6Ci0jICAgIChzZXRlbnYgcHJlZml4ICRIT01F OyBzZXRlbnYgQ0MgY2M7IHNldGVudiBDRkxBR1MgIi1PNCI7IC4vY29uZmlndXJlKQotIyBMRFNI QVJFRCBpcyB0aGUgY29tbWFuZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5 Ci0KLSMgSW5jb3JyZWN0IHNldHRpbmdzIG9mIENDIG9yIENGTEFHUyBtYXkgcHJldmVudCBjcmVh dGluZyBhIHNoYXJlZCBsaWJyYXJ5LgotIyBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgdHJ5IHdpdGhv dXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUyBiZWZvcmUgcmVwb3J0aW5nCi0jIGFuIGVycm9yLgot Ci1MSUJTPWxpYnouYQotTERGTEFHUz0iLUwuICR7TElCU30iCi1WRVI9YHNlZCAtbiAtZSAnL1ZF UlNJT04gIi9zLy4qIlwoLipcKSIuKi9cMS9wJyA8IHpsaWIuaGAKLVZFUjI9YHNlZCAtbiAtZSAn L1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXFwuWzAtOV0qXClcXC4uKi9cMS9wJyA8IHpsaWIuaGAK LVZFUjE9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXClcXC4uKi9cMS9wJyA8 IHpsaWIuaGAKLUFSPSR7QVItImFyIHJjIn0KLVJBTkxJQj0ke1JBTkxJQi0icmFubGliIn0KLXBy ZWZpeD0ke3ByZWZpeC0vdXNyL2xvY2FsfQotZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeC0nJHtw cmVmaXh9J30KLWxpYmRpcj0ke2xpYmRpci0nJHtleGVjX3ByZWZpeH0vbGliJ30KLWluY2x1ZGVk aXI9JHtpbmNsdWRlZGlyLScke3ByZWZpeH0vaW5jbHVkZSd9Ci1tYW5kaXI9JHttYW5kaXItJyR7 cHJlZml4fS9zaGFyZS9tYW4nfQotc2hhcmVkX2V4dD0nLnNvJwotc2hhcmVkPTAKLWdjYz0wCi1v bGRfY2M9IiRDQyIKLW9sZF9jZmxhZ3M9IiRDRkxBR1MiCi0KLXdoaWxlIHRlc3QgJCMgLWdlIDEK LWRvCi1jYXNlICIkMSIgaW4KLSAgICAtaCogfCAtLWgqKQotICAgICAgZWNobyAndXNhZ2U6Jwot ICAgICAgZWNobyAnICBjb25maWd1cmUgWy0tc2hhcmVkXSBbLS1wcmVmaXg9UFJFRklYXSAgWy0t ZXhlY19wcmVmaXg9RVhQUkVGSVhdJwotICAgICAgZWNobyAnICAgICBbLS1saWJkaXI9TElCRElS XSBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdJwotICAgICAgICBleGl0IDA7OwotICAgIC1wKj0q IHwgLS1wKj0qKSBwcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvWy1hLXpfXSo9Ly8nYDsgc2hpZnQ7 OwotICAgIC1lKj0qIHwgLS1lKj0qKSBleGVjX3ByZWZpeD1gZWNobyAkMSB8IHNlZCAncy9bLWEt el9dKj0vLydgOyBzaGlmdDs7Ci0gICAgLWwqPSogfCAtLWxpYmRpcj0qKSBsaWJkaXI9YGVjaG8g JDEgfCBzZWQgJ3MvWy1hLXpfXSo9Ly8nYDsgc2hpZnQ7OwotICAgIC1pKj0qIHwgLS1pbmNsdWRl ZGlyPSopIGluY2x1ZGVkaXI9YGVjaG8gJDEgfCBzZWQgJ3MvWy1hLXpfXSo9Ly8nYDtzaGlmdDs7 Ci0gICAgLXAqIHwgLS1wKikgcHJlZml4PSIkMiI7IHNoaWZ0OyBzaGlmdDs7Ci0gICAgLWUqIHwg LS1lKikgZXhlY19wcmVmaXg9IiQyIjsgc2hpZnQ7IHNoaWZ0OzsKLSAgICAtbCogfCAtLWwqKSBs aWJkaXI9IiQyIjsgc2hpZnQ7IHNoaWZ0OzsKLSAgICAtaSogfCAtLWkqKSBpbmNsdWRlZGlyPSIk MiI7IHNoaWZ0OyBzaGlmdDs7Ci0gICAgLXMqIHwgLS1zKikgc2hhcmVkPTE7IHNoaWZ0OzsKLSAg ICAqKSBlY2hvICJ1bmtub3duIG9wdGlvbjogJDEiOyBlY2hvICIkMCAtLWhlbHAgZm9yIGhlbHAi OyBleGl0IDE7OwotICAgIGVzYWMKLWRvbmUKLQotdGVzdD16dGVzdCQkCi1jYXQgPiAkdGVzdC5j IDw8RU9GCi1leHRlcm4gaW50IGdldGNoYXIoKTsKLWludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hh cigpO30KLUVPRgotCi10ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yIGdjYy4uLgot Y2M9JHtDQy1nY2N9Ci1jZmxhZ3M9JHtDRkxBR1MtIi1PMyJ9Ci0jIHRvIGZvcmNlIHRoZSBhc20g dmVyc2lvbiB1c2U6IENGTEFHUz0iLU8zIC1EQVNNViIgLi9jb25maWd1cmUKLWNhc2UgIiRjYyIg aW4KLSAgKmdjYyopIGdjYz0xOzsKLWVzYWMKLQotaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRj YyAtYyAkY2ZsYWdzICR0ZXN0LmMpIDI+L2Rldi9udWxsOyB0aGVuCi0gIENDPSIkY2MiCi0gIFNG TEFHUz0ke0NGTEFHUy0iLWZQSUMgLU8zIn0KLSAgQ0ZMQUdTPSIkY2ZsYWdzIgotICBjYXNlIGAo dW5hbWUgLXMgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KLSAgTGludXggfCBsaW51 eCB8IEdOVSB8IEdOVS8qKSBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNv bmFtZSxsaWJ6LnNvLjEifTs7Ci0gIENZR1dJTiogfCBDeWd3aW4qIHwgY3lnd2luKiB8IE9TLzIq ICkKLSAgICAgICAgICAgICBFWEU9Jy5leGUnOzsKLSAgUU5YKikgICMgVGhpcyBpcyBmb3IgUU5Y Ni4gSSBzdXBwb3NlIHRoYXQgdGhlIFFOWCBydWxlIGJlbG93IGlzIGZvciBRTlgyLFFOWDQKLSAg ICAgICAgICMgKGFsYWluLmJvbm5lZm95QGljYnQuY29tKQotICAgICAgICAgICAgICAgICBMRFNI QVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLWhsaWJ6LnNvLjEifTs7Ci0gIEhQLVVY KikgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkICRTRkxBR1MifQotICAg ICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc2wnCi0gICAgICAgICAgICAgICAgIFNIQVJFRExJ Qj0nbGliei5zbCc7OwotICBEYXJ3aW4qKSAgIHNoYXJlZF9leHQ9Jy5keWxpYicKLSAgICAgICAg ICAgICBTSEFSRURMSUI9bGlieiRzaGFyZWRfZXh0Ci0gICAgICAgICAgICAgU0hBUkVETElCVj1s aWJ6LiRWRVIkc2hhcmVkX2V4dAotICAgICAgICAgICAgIFNIQVJFRExJQk09bGliei4kVkVSMSRz aGFyZWRfZXh0Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1keW5hbWlj bGliIC1pbnN0YWxsX25hbWUgJGxpYmRpci8kU0hBUkVETElCViAtY29tcGF0aWJpbGl0eV92ZXJz aW9uICRWRVIyIC1jdXJyZW50X3ZlcnNpb24gJFZFUiJ9OzsKLSAgKikgICAgICAgICAgICAgTERT SEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifTs7Ci0gIGVzYWMKLWVsc2UKLSAgIyBmaW5k IHN5c3RlbSBuYW1lIGFuZCBjb3JyZXNwb25kaW5nIGNjIG9wdGlvbnMKLSAgQ0M9JHtDQy1jY30K LSAgY2FzZSBgKHVuYW1lIC1zciB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgotICBI UC1VWCopICAgIFNGTEFHUz0ke0NGTEFHUy0iLU8gK3oifQotICAgICAgICAgICAgIENGTEFHUz0k e0NGTEFHUy0iLU8ifQotIyAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImxkIC1iICt2 bm9jb21wYXR3YXJuaW5ncyJ9Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQg LWIifQotICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5zbCcKLSAgICAgICAgICAgICBTSEFSRURM SUI9J2xpYnouc2wnOzsKLSAgSVJJWCopICAgICBTRkxBR1M9JHtDRkxBR1MtIi1hbnNpIC1PMiAt cnBhdGggLiJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItYW5zaSAtTzIifQotICAg ICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQifTs7Ci0gIE9TRjFcIFY0 KikgU0ZMQUdTPSR7Q0ZMQUdTLSItTyAtc3RkMSJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZM QUdTLSItTyAtc3RkMSJ9Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLXNo YXJlZCAgLVdsLC1zb25hbWUsbGliei5zbyAtV2wsLW1zeW0gLVdsLC1ycGF0aCwkKGxpYmRpcikg LVdsLC1zZXRfdmVyc2lvbiwke1ZFUn06MS4wIn07OwotICBPU0YxKikgICAgIFNGTEFHUz0ke0NG TEFHUy0iLU8gLXN0ZDEifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8gLXN0ZDEi fQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQifTs7Ci0gIFFO WCopICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItNCAtTyJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7 Q0ZMQUdTLSItNCAtTyJ9Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MifQot ICAgICAgICAgICAgIFJBTkxJQj0ke1JBTkxJQi0idHJ1ZSJ9Ci0gICAgICAgICAgICAgQVI9ImNj IC1BIjs7Ci0gIFNDT19TVlwgMy4yKikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzMgLWR5IC1LUElDICJ9 Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzMifQotICAgICAgICAgICAgIExEU0hB UkVEPSR7TERTSEFSRUQtImNjIC1keSAtS1BJQyAtRyJ9OzsKLSAgU3VuT1NcIDUqKSBTRkxBR1M9 JHtDRkxBR1MtIi1mYXN0IC14Y2c4OSAtS1BJQyAtUi4ifQotICAgICAgICAgICAgIENGTEFHUz0k e0NGTEFHUy0iLWZhc3QgLXhjZzg5In0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVE LSJjYyAtRyJ9OzsKLSAgU3VuT1NcIDQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMiAtUElDIn0KLSAg ICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMiJ9Ci0gICAgICAgICAgICAgTERTSEFSRUQ9 JHtMRFNIQVJFRC0ibGQifTs7Ci0gIFVOSVhfU3lzdGVtX1ZcIDQuMi4wKQotICAgICAgICAgICAg IFNGTEFHUz0ke0NGTEFHUy0iLUtQSUMgLU8ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFH Uy0iLU8ifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn07OwotICBV TklYX1NWXCA0LjJNUCkKLSAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1LY29uZm9ybV9w aWMgLU8ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8ifQotICAgICAgICAgICAg IExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn07OwotICBPcGVuVU5JWFwgNSkKLSAgICAgICAg ICAgICBTRkxBR1M9JHtDRkxBR1MtIi1LUElDIC1PIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtD RkxBR1MtIi1PIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9OzsK LSAgQUlYKikgICMgQ291cnRlc3kgb2YgZGJha2tlckBhcnJheWFzb2x1dGlvbnMuY29tCi0gICAg ICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItTyAtcW1heG1lbT04MTkyIn0KLSAgICAgICAgICAg ICBDRkxBR1M9JHtDRkxBR1MtIi1PIC1xbWF4bWVtPTgxOTIifQotICAgICAgICAgICAgIExEU0hB UkVEPSR7TERTSEFSRUQtInhsYyAtRyJ9OzsKLSAgIyBzZW5kIHdvcmtpbmcgb3B0aW9ucyBmb3Ig b3RoZXIgc3lzdGVtcyB0byBzdXBwb3J0QGd6aXAub3JnCi0gICopICAgICAgICAgU0ZMQUdTPSR7 Q0ZMQUdTLSItTyJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTyJ9Ci0gICAgICAg ICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLXNoYXJlZCJ9OzsKLSAgZXNhYwotZmkKLQot U0hBUkVETElCPSR7U0hBUkVETElCLSJsaWJ6JHNoYXJlZF9leHQifQotU0hBUkVETElCVj0ke1NI QVJFRExJQlYtImxpYnokc2hhcmVkX2V4dC4kVkVSIn0KLVNIQVJFRExJQk09JHtTSEFSRURMSUJN LSJsaWJ6JHNoYXJlZF9leHQuJFZFUjEifQotCi1pZiB0ZXN0ICRzaGFyZWQgLWVxIDE7IHRoZW4K LSAgZWNobyBDaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4uLgotICAjIHdlIG11 c3QgdGVzdCBpbiB0d28gc3RlcHMgKGNjIHRoZW4gbGQpLCByZXF1aXJlZCBhdCBsZWFzdCBvbiBT dW5PUyA0LngKLSAgaWYgdGVzdCAiYCgkQ0MgLWMgJFNGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAi IiAmJgotICAgICB0ZXN0ICJgKCRMRFNIQVJFRCAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8p IDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgQ0ZMQUdTPSIkU0ZMQUdTIgotICAgIExJQlM9IiRTSEFS RURMSUJWIgotICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQlYgd2l0 aCAkQ0MuCi0gIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEgLXogIiRvbGRfY2ZsYWdzIjsgdGhl bgotICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KLSAgICBzaGFyZWQ9MDsKLSAg ZWxzZQotICAgIGVjaG8gJ05vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQ7IHRyeSB3aXRob3V0IGRl ZmluaW5nIENDIGFuZCBDRkxBR1MnCi0gICAgc2hhcmVkPTA7Ci0gIGZpCi1maQotaWYgdGVzdCAk c2hhcmVkIC1lcSAwOyB0aGVuCi0gIExEU0hBUkVEPSIkQ0MiCi0gIGVjaG8gQnVpbGRpbmcgc3Rh dGljIGxpYnJhcnkgJExJQlMgdmVyc2lvbiAkVkVSIHdpdGggJENDLgotZWxzZQotICBMREZMQUdT PSItTC4gJHtTSEFSRURMSUJWfSIKLWZpCi0KLWNhdCA+ICR0ZXN0LmMgPDxFT0YKLSNpbmNsdWRl IDx1bmlzdGQuaD4KLWludCBtYWluKCkgeyByZXR1cm4gMDsgfQotRU9GCi1pZiB0ZXN0ICJgKCRD QyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gIHNlZCA8IHpjb25mLmlu LmggIi9IQVZFX1VOSVNURF9IL3MlMCUxJSIgPiB6Y29uZi5oCi0gIGVjaG8gIkNoZWNraW5nIGZv ciB1bmlzdGQuaC4uLiBZZXMuIgotZWxzZQotICBjcCAtcCB6Y29uZi5pbi5oIHpjb25mLmgKLSAg ZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIE5vLiIKLWZpCi0KLWNhdCA+ICR0ZXN0LmMg PDxFT0YKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUg Inpjb25mLmgiCi0KLWludCBtYWluKCkKLXsKLSNpZm5kZWYgU1REQwotICBjaG9rZSBtZQotI2Vu ZGlmCi0KLSAgcmV0dXJuIDA7Ci19Ci1FT0YKLQotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAk dGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVz ZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpIgot Ci0gIGNhdCA+ICR0ZXN0LmMgPDxFT0YKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0 ZGFyZy5oPgotCi1pbnQgbXl0ZXN0KGNoYXIgKmZtdCwgLi4uKQotewotICBjaGFyIGJ1ZlsyMF07 Ci0gIHZhX2xpc3QgYXA7Ci0KLSAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0gIHZzbnByaW50ZihidWYs IHNpemVvZihidWYpLCBmbXQsIGFwKTsKLSAgdmFfZW5kKGFwKTsKLSAgcmV0dXJuIDA7Ci19Ci0K LWludCBtYWluKCkKLXsKLSAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKLX0KLUVP RgotCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0g IiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4u LiBZZXMuIgotCi0gICAgY2F0ID4kdGVzdC5jIDw8RU9GCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp bmNsdWRlIDxzdGRhcmcuaD4KLQotaW50IG15dGVzdChjaGFyICpmbXQsIC4uLikKLXsKLSAgaW50 IG47Ci0gIGNoYXIgYnVmWzIwXTsKLSAgdmFfbGlzdCBhcDsKLQotICB2YV9zdGFydChhcCwgZm10 KTsKLSAgbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKLSAgdmFfZW5k KGFwKTsKLSAgcmV0dXJuIG47Ci19Ci0KLWludCBtYWluKCkKLXsKLSAgcmV0dXJuIChteXRlc3Qo IkhlbGxvJWRcbiIsIDEpKTsKLX0KLUVPRgotCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFH UyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJl dHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBZZXMuIgotICAgIGVsc2UKLSAgICAgIENGTEFH Uz0iJENGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZv ciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJO SU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGli IgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBz dHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgot ICAgIGZpCi0gIGVsc2UKLSAgICBDRkxBR1M9IiRDRkxBR1MgLUROT192c25wcmludGYiCi0gICAg ZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIgotICAgIGVj aG8gIiAgV0FSTklORzogdnNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdnNw cmludGYoKS4gemxpYiIKLSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRv IHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFi aWxpdGllcy4iCi0KLSAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKLSNpbmNsdWRlIDxzdGRpby5oPgot I2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQgbXl0ZXN0KGNoYXIgKmZtdCwgLi4uKQotewotICBp bnQgbjsKLSAgY2hhciBidWZbMjBdOwotICB2YV9saXN0IGFwOwotCi0gIHZhX3N0YXJ0KGFwLCBm bXQpOwotICBuID0gdnNwcmludGYoYnVmLCBmbXQsIGFwKTsKLSAgdmFfZW5kKGFwKTsKLSAgcmV0 dXJuIG47Ci19Ci0KLWludCBtYWluKCkKLXsKLSAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIs IDEpKTsKLX0KLUVPRgotCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAy PiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBv ZiB2c3ByaW50ZigpLi4uIFllcy4iCi0gICAgZWxzZQotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1E SEFTX3ZzcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVl IG9mIHZzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5 IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIg IGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2Vj dXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCi0gICAgZmkKLSAgZmkKLWVs c2UKLSAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25d cHJpbnRmKCkuLi4gdXNpbmcgc1tuXXByaW50ZigpIgotCi0gIGNhdCA+JHRlc3QuYyA8PEVPRgot I2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludCBteXRlc3QoKQotewotICBjaGFyIGJ1ZlsyMF07Ci0K LSAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOwotICByZXR1cm4gMDsK LX0KLQotaW50IG1haW4oKQotewotICByZXR1cm4gKG15dGVzdCgpKTsKLX0KLUVPRgotCi0gIGlm IHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4K LSAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCi0K LSAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKLSNpbmNsdWRlIDxzdGRpby5oPgotCi1pbnQgbXl0ZXN0 KCkKLXsKLSAgY2hhciBidWZbMjBdOwotCi0gIHJldHVybiBzbnByaW50ZihidWYsIHNpemVvZihi dWYpLCAiJXMiLCAiZm9vIik7Ci19Ci0KLWludCBtYWluKCkKLXsKLSAgcmV0dXJuIChteXRlc3Qo KSk7Ci19Ci1FT0YKLQotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4m MWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Yg c25wcmludGYoKS4uLiBZZXMuIgotICAgIGVsc2UKLSAgICAgIENGTEFHUz0iJENGTEFHUyAtREhB U19zbnByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBv ZiBzbnByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBz bnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBj YW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3Vy aXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgotICAgIGZpCi0gIGVsc2UKLSAg ICBDRkxBR1M9IiRDRkxBR1MgLUROT19zbnByaW50ZiIKLSAgICBlY2hvICJDaGVja2luZyBmb3Ig c25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIKLSAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJp bnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIgotICAgIGVj aG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJm bG93IHNlY3VyaXR5IgotICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKLQotICAgIGNhdCA+ JHRlc3QuYyA8PEVPRgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludCBteXRlc3QoKQotewotICBj aGFyIGJ1ZlsyMF07Ci0KLSAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCAiZm9vIik7Ci19Ci0K LWludCBtYWluKCkKLXsKLSAgcmV0dXJuIChteXRlc3QoKSk7Ci19Ci1FT0YKLQotICAgIGlmIHRl c3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVj aG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iCi0gICAg ZWxzZQotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKLSAgICAgIGVj aG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIKLSAgICAg IGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEg dmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRv IHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFi aWxpdGllcy4iCi0gICAgZmkKLSAgZmkKLWZpCi0KLWNhdCA+JHRlc3QuYyA8PEVPRgotI2luY2x1 ZGUgPGVycm5vLmg+Ci1pbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KLUVPRgotaWYgdGVzdCAiYCgk Q0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICBlY2hvICJDaGVja2lu ZyBmb3IgZXJybm8uaC4uLiBZZXMuIgotZWxzZQotICBlY2hvICJDaGVja2luZyBmb3IgZXJybm8u aC4uLiBOby4iCi0gIENGTEFHUz0iJENGTEFHUyAtRE5PX0VSUk5PX0giCi1maQotCi1jYXQgPiAk dGVzdC5jIDw8RU9GCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4u aD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotY2FkZHJfdCBoZWxsbygpIHsKLSAgcmV0dXJuIG1t YXAoKGNhZGRyX3QpMCwgKG9mZl90KTAsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgMCwgKG9mZl90 KTApOwotfQotRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9 ICIiOyB0aGVuCi0gIENGTEFHUz0iJENGTEFHUyAtRFVTRV9NTUFQIgotICBlY2hvIENoZWNraW5n IGZvciBtbWFwIHN1cHBvcnQuLi4gWWVzLgotZWxzZQotICBlY2hvIENoZWNraW5nIGZvciBtbWFw IHN1cHBvcnQuLi4gTm8uCi1maQotCi1DUFA9JHtDUFAtIiRDQyAtRSJ9Ci1jYXNlICRDRkxBR1Mg aW4KLSAgKkFTTVYqKQotICAgIGlmIHRlc3QgImBubSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG9gIiA9 ICIiOyB0aGVuCi0gICAgICBDUFA9IiRDUFAgLUROT19VTkRFUkxJTkUiCi0gICAgICBlY2hvIENo ZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gTm8uCi0gICAgZWxzZQot ICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFll cy4KLSAgICBmaTs7Ci1lc2FjCi0KLXJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVk X2V4dAotCi0jIHVkcGF0ZSBNYWtlZmlsZQotc2VkIDwgTWFrZWZpbGUuaW4gIgotL15DQyAqPS9z Iz0uKiM9JENDIwotL15DRkxBR1MgKj0vcyM9LiojPSRDRkxBR1MjCi0vXkNQUCAqPS9zIz0uKiM9 JENQUCMKLS9eTERTSEFSRUQgKj0vcyM9LiojPSRMRFNIQVJFRCMKLS9eTElCUyAqPS9zIz0uKiM9 JExJQlMjCi0vXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKLS9eU0hBUkVETElCViAq PS9zIz0uKiM9JFNIQVJFRExJQlYjCi0vXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJN IwotL15BUiAqPS9zIz0uKiM9JEFSIwotL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCi0vXkVY RSAqPS9zIz0uKiM9JEVYRSMKLS9ecHJlZml4ICo9L3MjPS4qIz0kcHJlZml4IwotL15leGVjX3By ZWZpeCAqPS9zIz0uKiM9JGV4ZWNfcHJlZml4IwotL15saWJkaXIgKj0vcyM9LiojPSRsaWJkaXIj Ci0vXmluY2x1ZGVkaXIgKj0vcyM9LiojPSRpbmNsdWRlZGlyIwotL15tYW5kaXIgKj0vcyM9Lioj PSRtYW5kaXIjCi0vXkxERkxBR1MgKj0vcyM9LiojPSRMREZMQUdTIwotIiA+IE1ha2VmaWxlCmRp ZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL2Ny YzMyLmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9jcmMzMi5jCVN1biBNYXIgMDggMjI6MDA6 MjMgMjAyMCArMDEwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2NyYzMyLmMJU3VuIE1hciAw OCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0xLDE1ICsxLDE1IEBACiAvKiBjcmMzMi5jIC0tIGNv bXB1dGUgdGhlIENSQy0zMiBvZiBhIGRhdGEgc3RyZWFtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUt MjAwMyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSwg MjAxMiwgMjAxNiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24g YW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKgogICogVGhhbmtzIHRv IFJvZG5leSBCcm93biA8cmJyb3duNjRAY3NjLmNvbS5hdT4gZm9yIGhpcyBjb250cmlidXRpb24g b2YgZmFzdGVyCiAgKiBDUkMgbWV0aG9kczogZXhjbHVzaXZlLW9yaW5nIDMyIGJpdHMgb2YgZGF0 YSBhdCBhIHRpbWUsIGFuZCBwcmUtY29tcHV0aW5nCiAgKiB0YWJsZXMgZm9yIHVwZGF0aW5nIHRo ZSBzaGlmdCByZWdpc3RlciBpbiBvbmUgc3RlcCB3aXRoIHRocmVlIGV4Y2x1c2l2ZS1vcnMKLSAq IGluc3RlYWQgb2YgZm91ciBzdGVwcyB3aXRoIGZvdXIgZXhjbHVzaXZlLW9ycy4gIFRoaXMgcmVz dWx0cyBhYm91dCBhIGZhY3RvcgotICogb2YgdHdvIGluY3JlYXNlIGluIHNwZWVkIG9uIGEgUG93 ZXIgUEMgRzQgKFBQQzc0NTUpIHVzaW5nIGdjYyAtTzMuCisgKiBpbnN0ZWFkIG9mIGZvdXIgc3Rl cHMgd2l0aCBmb3VyIGV4Y2x1c2l2ZS1vcnMuICBUaGlzIHJlc3VsdHMgaW4gYWJvdXQgYQorICog ZmFjdG9yIG9mIHR3byBpbmNyZWFzZSBpbiBzcGVlZCBvbiBhIFBvd2VyIFBDIEc0IChQUEM3NDU1 KSB1c2luZyBnY2MgLU8zLgogICovCiAKLS8qIEAoIykgJElkOiBjcmMzMi5jLHYgMS4xLjEuMSAy MDA1LzA0LzI0IDIxOjM5OjM3IGdpbGVzIEV4cCAkICovCisvKiBAKCMpICRJZCQgKi8KIAogLyoK ICAgTm90ZSBvbiB0aGUgdXNlIG9mIERZTkFNSUNfQ1JDX1RBQkxFOiB0aGVyZSBpcyBubyBtdXRl eCBvciBzZW1hcGhvcmUKQEAgLTE3LDYgKzE3LDggQEAKICAgb2YgdGhlIGNyYyB0YWJsZXMuICBU aGVyZWZvcmUsIGlmIHlvdSAjZGVmaW5lIERZTkFNSUNfQ1JDX1RBQkxFLCB5b3Ugc2hvdWxkCiAg IGZpcnN0IGNhbGwgZ2V0X2NyY190YWJsZSgpIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlcyBiZWZv cmUgYWxsb3dpbmcgbW9yZSB0aGFuCiAgIG9uZSB0aHJlYWQgdG8gdXNlIGNyYzMyKCkuCisKKyAg RFlOQU1JQ19DUkNfVEFCTEUgYW5kIE1BS0VDUkNIIGNhbiBiZSAjZGVmaW5lZCB0byB3cml0ZSBv dXQgY3JjMzIuaC4KICAqLwogCiAjaWZkZWYgTUFLRUNSQ0gKQEAgLTI4LDUxICszMCwzNSBAQAog CiAjaW5jbHVkZSAienV0aWwuaCIgICAgICAvKiBmb3IgU1REQyBhbmQgRkFSIGRlZmluaXRpb25z ICovCiAKLSNkZWZpbmUgbG9jYWwgc3RhdGljCi0KLS8qIEZpbmQgYSBmb3VyLWJ5dGUgaW50ZWdl ciB0eXBlIGZvciBjcmMzMl9saXR0bGUoKSBhbmQgY3JjMzJfYmlnKCkuICovCi0jaWZuZGVmIE5P QllGT1VSCi0jICBpZmRlZiBTVERDICAgICAgICAgICAvKiBuZWVkIEFOU0kgQyBsaW1pdHMuaCB0 byBkZXRlcm1pbmUgc2l6ZXMgKi8KLSMgICAgaW5jbHVkZSA8bGltaXRzLmg+Ci0jICAgIGRlZmlu ZSBCWUZPVVIKLSMgICAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICB0eXBl ZGVmIHVuc2lnbmVkIGludCB1NDsKLSMgICAgZWxzZQotIyAgICAgIGlmIChVTE9OR19NQVggPT0g MHhmZmZmZmZmZlVMKQotICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHU0OwotIyAgICAg IGVsc2UKLSMgICAgICAgIGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgICAg ICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHU0OwotIyAgICAgICAgZWxzZQotIyAgICAgICAgICB1 bmRlZiBCWUZPVVIgICAgIC8qIGNhbid0IGZpbmQgYSBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlISAq LwotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYgLyog U1REQyAqLwotI2VuZGlmIC8qICFOT0JZRk9VUiAqLwotCiAvKiBEZWZpbml0aW9ucyBmb3IgZG9p bmcgdGhlIGNyYyBmb3VyIGRhdGEgYnl0ZXMgYXQgYSB0aW1lLiAqLworI2lmICFkZWZpbmVkKE5P QllGT1VSKSAmJiBkZWZpbmVkKFpfVTQpCisjICBkZWZpbmUgQllGT1VSCisjZW5kaWYKICNpZmRl ZiBCWUZPVVIKLSMgIGRlZmluZSBSRVYodykgKCgodyk+PjI0KSsoKCh3KT4+OCkmMHhmZjAwKSsg XAotICAgICAgICAgICAgICAgICgoKHcpJjB4ZmYwMCk8PDgpKygoKHcpJjB4ZmYpPDwyNCkpCiAg ICBsb2NhbCB1bnNpZ25lZCBsb25nIGNyYzMyX2xpdHRsZSBPRigodW5zaWduZWQgbG9uZywKLSAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVk KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqLCB6 X3NpemVfdCkpOwogICAgbG9jYWwgdW5zaWduZWQgbG9uZyBjcmMzMl9iaWcgT0YoKHVuc2lnbmVk IGxvbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAq LCB1bnNpZ25lZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciBGQVIgKiwgel9zaXplX3QpKTsKICMgIGRlZmluZSBUQkxTIDgKICNlbHNlCiAjICBkZWZpbmUg VEJMUyAxCiAjZW5kaWYgLyogQllGT1VSICovCiAKKy8qIExvY2FsIGZ1bmN0aW9ucyBmb3IgY3Jj IGNvbmNhdGVuYXRpb24gKi8KK2xvY2FsIHVuc2lnbmVkIGxvbmcgZ2YyX21hdHJpeF90aW1lcyBP RigodW5zaWduZWQgbG9uZyAqbWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHZlYykpOworbG9jYWwgdm9pZCBnZjJfbWF0cml4X3NxdWFy ZSBPRigodW5zaWduZWQgbG9uZyAqc3F1YXJlLCB1bnNpZ25lZCBsb25nICptYXQpKTsKK2xvY2Fs IHVMb25nIGNyYzMyX2NvbWJpbmVfIE9GKCh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0 X3QgbGVuMikpOworCisKICNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQogCiBsb2NhbCB2b2xhdGls ZSBpbnQgY3JjX3RhYmxlX2VtcHR5ID0gMTsKLWxvY2FsIHVuc2lnbmVkIGxvbmcgRkFSIGNyY190 YWJsZVtUQkxTXVsyNTZdOworbG9jYWwgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl07 CiBsb2NhbCB2b2lkIG1ha2VfY3JjX3RhYmxlIE9GKCh2b2lkKSk7CiAjaWZkZWYgTUFLRUNSQ0gK LSAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3QgdW5zaWduZWQgbG9u ZyBGQVIgKikpOworICAgbG9jYWwgdm9pZCB3cml0ZV90YWJsZSBPRigoRklMRSAqLCBjb25zdCB6 X2NyY190IEZBUiAqKSk7CiAjZW5kaWYgLyogTUFLRUNSQ0ggKi8KLQogLyoKICAgR2VuZXJhdGUg dGFibGVzIGZvciBhIGJ5dGUtd2lzZSAzMi1iaXQgQ1JDIGNhbGN1bGF0aW9uIG9uIHRoZSBwb2x5 bm9taWFsOgogICB4XjMyK3heMjYreF4yMyt4XjIyK3heMTYreF4xMit4XjExK3heMTAreF44K3he Nyt4XjUreF40K3heMit4KzEuCkBAIC0xMDEsOSArODcsOSBAQAogKi8KIGxvY2FsIHZvaWQgbWFr ZV9jcmNfdGFibGUoKQogewotICAgIHVuc2lnbmVkIGxvbmcgYzsKKyAgICB6X2NyY190IGM7CiAg ICAgaW50IG4sIGs7Ci0gICAgdW5zaWduZWQgbG9uZyBwb2x5OyAgICAgICAgICAgICAgICAgLyog cG9seW5vbWlhbCBleGNsdXNpdmUtb3IgcGF0dGVybiAqLworICAgIHpfY3JjX3QgcG9seTsgICAg ICAgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8K ICAgICAvKiB0ZXJtcyBvZiBwb2x5bm9taWFsIGRlZmluaW5nIHRoaXMgY3JjIChleGNlcHQgeF4z Mik6ICovCiAgICAgc3RhdGljIHZvbGF0aWxlIGludCBmaXJzdCA9IDE7ICAgICAgLyogZmxhZyB0 byBsaW1pdCBjb25jdXJyZW50IG1ha2luZyAqLwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHBbXSA9IHswLDEsMiw0LDUsNyw4LDEwLDExLDEyLDE2LDIyLDIzLDI2fTsKQEAgLTExNSwx MyArMTAxLDEzIEBACiAgICAgICAgIGZpcnN0ID0gMDsKIAogICAgICAgICAvKiBtYWtlIGV4Y2x1 c2l2ZS1vciBwYXR0ZXJuIGZyb20gcG9seW5vbWlhbCAoMHhlZGI4ODMyMFVMKSAqLwotICAgICAg ICBwb2x5ID0gMFVMOwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHApL3NpemVvZih1 bnNpZ25lZCBjaGFyKTsgbisrKQotICAgICAgICAgICAgcG9seSB8PSAxVUwgPDwgKDMxIC0gcFtu XSk7CisgICAgICAgIHBvbHkgPSAwOworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKGludCkoc2l6 ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKSk7IG4rKykKKyAgICAgICAgICAgIHBvbHkgfD0g KHpfY3JjX3QpMSA8PCAoMzEgLSBwW25dKTsKIAogICAgICAgICAvKiBnZW5lcmF0ZSBhIGNyYyBm b3IgZXZlcnkgOC1iaXQgdmFsdWUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1Njsgbisr KSB7Ci0gICAgICAgICAgICBjID0gKHVuc2lnbmVkIGxvbmcpbjsKKyAgICAgICAgICAgIGMgPSAo el9jcmNfdCluOwogICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDg7IGsrKykKICAgICAgICAg ICAgICAgICBjID0gYyAmIDEgPyBwb2x5IF4gKGMgPj4gMSkgOiBjID4+IDE7CiAgICAgICAgICAg ICBjcmNfdGFibGVbMF1bbl0gPSBjOwpAQCAtMTMyLDExICsxMTgsMTEgQEAKICAgICAgICAgICAg YW5kIHRoZW4gdGhlIGJ5dGUgcmV2ZXJzYWwgb2YgdGhvc2UgYXMgd2VsbCBhcyB0aGUgZmlyc3Qg dGFibGUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICAg ICBjID0gY3JjX3RhYmxlWzBdW25dOwotICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gUkVW KGMpOworICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAg ICAgIGZvciAoayA9IDE7IGsgPCA0OyBrKyspIHsKICAgICAgICAgICAgICAgICBjID0gY3JjX3Rh YmxlWzBdW2MgJiAweGZmXSBeIChjID4+IDgpOwogICAgICAgICAgICAgICAgIGNyY190YWJsZVtr XVtuXSA9IGM7Ci0gICAgICAgICAgICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFJFVihjKTsK KyAgICAgICAgICAgICAgICBjcmNfdGFibGVbayArIDRdW25dID0gWlNXQVAzMihjKTsKICAgICAg ICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmIC8qIEJZRk9VUiAqLwpAQCAtMTU4LDcgKzE0NCw3 IEBACiAgICAgICAgIGlmIChvdXQgPT0gTlVMTCkgcmV0dXJuOwogICAgICAgICBmcHJpbnRmKG91 dCwgIi8qIGNyYzMyLmggLS0gdGFibGVzIGZvciByYXBpZCBDUkMgY2FsY3VsYXRpb25cbiIpOwog ICAgICAgICBmcHJpbnRmKG91dCwgIiAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNyYzMy LmNcbiAqL1xuXG4iKTsKLSAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB1bnNpZ25l ZCBsb25nIEZBUiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB6X2NyY190 IEZBUiAiKTsKICAgICAgICAgZnByaW50ZihvdXQsICJjcmNfdGFibGVbVEJMU11bMjU2XSA9XG57 XG4gIHtcbiIpOwogICAgICAgICB3cml0ZV90YWJsZShvdXQsIGNyY190YWJsZVswXSk7CiAjICBp ZmRlZiBCWUZPVVIKQEAgLTE3OCwxMiArMTY0LDEzIEBACiAjaWZkZWYgTUFLRUNSQ0gKIGxvY2Fs IHZvaWQgd3JpdGVfdGFibGUob3V0LCB0YWJsZSkKICAgICBGSUxFICpvdXQ7Ci0gICAgY29uc3Qg dW5zaWduZWQgbG9uZyBGQVIgKnRhYmxlOworICAgIGNvbnN0IHpfY3JjX3QgRkFSICp0YWJsZTsK IHsKICAgICBpbnQgbjsKIAogICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKLSAgICAgICAg ZnByaW50ZihvdXQsICIlczB4JTA4bHhVTCVzIiwgbiAlIDUgPyAiIiA6ICIgICAgIiwgdGFibGVb bl0sCisgICAgICAgIGZwcmludGYob3V0LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAi ICAgICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHRhYmxlW25dKSwKICAgICAg ICAgICAgICAgICBuID09IDI1NSA/ICJcbiIgOiAobiAlIDUgPT0gNCA/ICIsXG4iIDogIiwgIikp OwogfQogI2VuZGlmIC8qIE1BS0VDUkNIICovCkBAIC0xOTgsMTMgKzE4NSwxMyBAQAogLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQogICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBhc20gdmVyc2lv bnMgb2YgY3JjMzIoKQogICovCi1jb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqIFpFWFBPUlQgZ2V0 X2NyY190YWJsZSgpCitjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgp CiB7CiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKICAgICBpZiAoY3JjX3RhYmxlX2VtcHR5KQog ICAgICAgICBtYWtlX2NyY190YWJsZSgpOwogI2VuZGlmIC8qIERZTkFNSUNfQ1JDX1RBQkxFICov Ci0gICAgcmV0dXJuIChjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqKWNyY190YWJsZTsKKyAgICBy ZXR1cm4gKGNvbnN0IHpfY3JjX3QgRkFSICopY3JjX3RhYmxlOwogfQogCiAvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ICovCkBAIC0yMTIsMTAgKzE5OSwxMCBAQAogI2RlZmluZSBETzggRE8xOyBETzE7IERP MTsgRE8xOyBETzE7IERPMTsgRE8xOyBETzEKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotdW5z aWduZWQgbG9uZyBaRVhQT1JUIGNyYzMyKGNyYywgYnVmLCBsZW4pCit1bnNpZ25lZCBsb25nIFpF WFBPUlQgY3JjMzJfeihjcmMsIGJ1ZiwgbGVuKQogICAgIHVuc2lnbmVkIGxvbmcgY3JjOwogICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7Ci0gICAgdW5zaWduZWQgbGVuOworICAgIHpf c2l6ZV90IGxlbjsKIHsKICAgICBpZiAoYnVmID09IFpfTlVMTCkgcmV0dXJuIDBVTDsKIApAQCAt MjI2LDcgKzIxMyw3IEBACiAKICNpZmRlZiBCWUZPVVIKICAgICBpZiAoc2l6ZW9mKHZvaWQgKikg PT0gc2l6ZW9mKHB0cmRpZmZfdCkpIHsKLSAgICAgICAgdTQgZW5kaWFuOworICAgICAgICB6X2Ny Y190IGVuZGlhbjsKIAogICAgICAgICBlbmRpYW4gPSAxOwogICAgICAgICBpZiAoKigodW5zaWdu ZWQgY2hhciAqKSgmZW5kaWFuKSkpCkBAIC0yNDYsOCArMjMzLDI5IEBACiAgICAgcmV0dXJuIGNy YyBeIDB4ZmZmZmZmZmZVTDsKIH0KIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordW5zaWduZWQg bG9uZyBaRVhQT1JUIGNyYzMyKGNyYywgYnVmLCBsZW4pCisgICAgdW5zaWduZWQgbG9uZyBjcmM7 CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKKyAgICB1SW50IGxlbjsKK3sKKyAg ICByZXR1cm4gY3JjMzJfeihjcmMsIGJ1ZiwgbGVuKTsKK30KKwogI2lmZGVmIEJZRk9VUgogCisv KgorICAgVGhpcyBCWUZPVVIgY29kZSBhY2Nlc3NlcyB0aGUgcGFzc2VkIHVuc2lnbmVkIGNoYXIg KiBidWZmZXIgd2l0aCBhIDMyLWJpdAorICAgaW50ZWdlciBwb2ludGVyIHR5cGUuIFRoaXMgdmlv bGF0ZXMgdGhlIHN0cmljdCBhbGlhc2luZyBydWxlLCB3aGVyZSBhCisgICBjb21waWxlciBjYW4g YXNzdW1lLCBmb3Igb3B0aW1pemF0aW9uIHB1cnBvc2VzLCB0aGF0IHR3byBwb2ludGVycyB0bwor ICAgZnVuZGFtZW50YWxseSBkaWZmZXJlbnQgdHlwZXMgd29uJ3QgZXZlciBwb2ludCB0byB0aGUg c2FtZSBtZW1vcnkuIFRoaXMgY2FuCisgICBtYW5pZmVzdCBhcyBhIHByb2JsZW0gb25seSBpZiBv bmUgb2YgdGhlIHBvaW50ZXJzIGlzIHdyaXR0ZW4gdG8uIFRoaXMgY29kZQorICAgb25seSByZWFk cyBmcm9tIHRob3NlIHBvaW50ZXJzLiBTbyBsb25nIGFzIHRoaXMgY29kZSByZW1haW5zIGlzb2xh dGVkIGluCisgICB0aGlzIGNvbXBpbGF0aW9uIHVuaXQsIHRoZXJlIHdvbid0IGJlIGEgcHJvYmxl bS4gRm9yIHRoaXMgcmVhc29uLCB0aGlzIGNvZGUKKyAgIHNob3VsZCBub3QgYmUgY29waWVkIGFu ZCBwYXN0ZWQgaW50byBhIGNvbXBpbGF0aW9uIHVuaXQgaW4gd2hpY2ggb3RoZXIgY29kZQorICAg d3JpdGVzIHRvIHRoZSBidWZmZXIgdGhhdCBpcyBwYXNzZWQgdG8gdGhlc2Ugcm91dGluZXMuCisg Ki8KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogI2RlZmluZSBET0xJVDQgYyBePSAqYnVmNCsr OyBcCiAgICAgICAgIGMgPSBjcmNfdGFibGVbM11bYyAmIDB4ZmZdIF4gY3JjX3RhYmxlWzJdWyhj ID4+IDgpICYgMHhmZl0gXiBcCkBAIC0yNTgsMTkgKzI2NiwxOSBAQAogbG9jYWwgdW5zaWduZWQg bG9uZyBjcmMzMl9saXR0bGUoY3JjLCBidWYsIGxlbikKICAgICB1bnNpZ25lZCBsb25nIGNyYzsK ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKKyAg ICB6X3NpemVfdCBsZW47CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25z dCB1NCBGQVIgKmJ1ZjQ7CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNv bnN0IHpfY3JjX3QgRkFSICpidWY0OwogCi0gICAgYyA9ICh1NCljcmM7CisgICAgYyA9ICh6X2Ny Y190KWNyYzsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYg JiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzBdWyhjIF4gKmJ1ZisrKSAmIDB4ZmZdIF4g KGMgPj4gOCk7CiAgICAgICAgIGxlbi0tOwogICAgIH0KIAotICAgIGJ1ZjQgPSAoY29uc3QgdTQg RkFSICopYnVmOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBG QVIgKilidWY7CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0xJVDMyOwogICAg ICAgICBsZW4gLT0gMzI7CkBAIC0yODksNyArMjk3LDcgQEAKIH0KIAogLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSAqLwotI2RlZmluZSBET0JJRzQgYyBePSAqKytidWY0OyBcCisjZGVmaW5lIERPQklHNCBj IF49ICpidWY0Kys7IFwKICAgICAgICAgYyA9IGNyY190YWJsZVs0XVtjICYgMHhmZl0gXiBjcmNf dGFibGVbNV1bKGMgPj4gOCkgJiAweGZmXSBeIFwKICAgICAgICAgICAgIGNyY190YWJsZVs2XVso YyA+PiAxNikgJiAweGZmXSBeIGNyY190YWJsZVs3XVtjID4+IDI0XQogI2RlZmluZSBET0JJRzMy IERPQklHNDsgRE9CSUc0OyBET0JJRzQ7IERPQklHNDsgRE9CSUc0OyBET0JJRzQ7IERPQklHNDsg RE9CSUc0CkBAIC0yOTgsMjAgKzMwNiwxOSBAQAogbG9jYWwgdW5zaWduZWQgbG9uZyBjcmMzMl9i aWcoY3JjLCBidWYsIGxlbikKICAgICB1bnNpZ25lZCBsb25nIGNyYzsKICAgICBjb25zdCB1bnNp Z25lZCBjaGFyIEZBUiAqYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKKyAgICB6X3NpemVfdCBsZW47 CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7 CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNvbnN0IHpfY3JjX3QgRkFS ICpidWY0OwogCi0gICAgYyA9IFJFVigodTQpY3JjKTsKKyAgICBjID0gWlNXQVAzMigoel9jcmNf dCljcmMpOwogICAgIGMgPSB+YzsKICAgICB3aGlsZSAobGVuICYmICgocHRyZGlmZl90KWJ1ZiAm IDMpKSB7CiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChj IDw8IDgpOwogICAgICAgICBsZW4tLTsKICAgICB9CiAKLSAgICBidWY0ID0gKGNvbnN0IHU0IEZB UiAqKWJ1ZjsKLSAgICBidWY0LS07CisgICAgYnVmNCA9IChjb25zdCB6X2NyY190IEZBUiAqKShj b25zdCB2b2lkIEZBUiAqKWJ1ZjsKICAgICB3aGlsZSAobGVuID49IDMyKSB7CiAgICAgICAgIERP QklHMzI7CiAgICAgICAgIGxlbiAtPSAzMjsKQEAgLTMyMCwxNCArMzI3LDExNiBAQAogICAgICAg ICBET0JJRzQ7CiAgICAgICAgIGxlbiAtPSA0OwogICAgIH0KLSAgICBidWY0Kys7CiAgICAgYnVm ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICopYnVmNDsKIAogICAgIGlmIChsZW4pIGRvIHsK ICAgICAgICAgYyA9IGNyY190YWJsZVs0XVsoYyA+PiAyNCkgXiAqYnVmKytdIF4gKGMgPDwgOCk7 CiAgICAgfSB3aGlsZSAoLS1sZW4pOwogICAgIGMgPSB+YzsKLSAgICByZXR1cm4gKHVuc2lnbmVk IGxvbmcpKFJFVihjKSk7CisgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShaU1dBUDMyKGMpKTsK IH0KIAogI2VuZGlmIC8qIEJZRk9VUiAqLworCisjZGVmaW5lIEdGMl9ESU0gMzIgICAgICAvKiBk aW1lbnNpb24gb2YgR0YoMikgdmVjdG9ycyAobGVuZ3RoIG9mIENSQykgKi8KKworLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSAqLworbG9jYWwgdW5zaWduZWQgbG9uZyBnZjJfbWF0cml4X3RpbWVzKG1hdCwg dmVjKQorICAgIHVuc2lnbmVkIGxvbmcgKm1hdDsKKyAgICB1bnNpZ25lZCBsb25nIHZlYzsKK3sK KyAgICB1bnNpZ25lZCBsb25nIHN1bTsKKworICAgIHN1bSA9IDA7CisgICAgd2hpbGUgKHZlYykg eworICAgICAgICBpZiAodmVjICYgMSkKKyAgICAgICAgICAgIHN1bSBePSAqbWF0OworICAgICAg ICB2ZWMgPj49IDE7CisgICAgICAgIG1hdCsrOworICAgIH0KKyAgICByZXR1cm4gc3VtOworfQor CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ICovCitsb2NhbCB2b2lkIGdmMl9tYXRyaXhfc3F1YXJlKHNx dWFyZSwgbWF0KQorICAgIHVuc2lnbmVkIGxvbmcgKnNxdWFyZTsKKyAgICB1bnNpZ25lZCBsb25n ICptYXQ7Cit7CisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgR0YyX0RJTTsgbisr KQorICAgICAgICBzcXVhcmVbbl0gPSBnZjJfbWF0cml4X3RpbWVzKG1hdCwgbWF0W25dKTsKK30K KworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSAqLworbG9jYWwgdUxvbmcgY3JjMzJfY29tYmluZV8oY3Jj MSwgY3JjMiwgbGVuMikKKyAgICB1TG9uZyBjcmMxOworICAgIHVMb25nIGNyYzI7CisgICAgel9v ZmY2NF90IGxlbjI7Cit7CisgICAgaW50IG47CisgICAgdW5zaWduZWQgbG9uZyByb3c7CisgICAg dW5zaWduZWQgbG9uZyBldmVuW0dGMl9ESU1dOyAgICAvKiBldmVuLXBvd2VyLW9mLXR3byB6ZXJv cyBvcGVyYXRvciAqLworICAgIHVuc2lnbmVkIGxvbmcgb2RkW0dGMl9ESU1dOyAgICAgLyogb2Rk LXBvd2VyLW9mLXR3byB6ZXJvcyBvcGVyYXRvciAqLworCisgICAgLyogZGVnZW5lcmF0ZSBjYXNl IChhbHNvIGRpc2FsbG93IG5lZ2F0aXZlIGxlbmd0aHMpICovCisgICAgaWYgKGxlbjIgPD0gMCkK KyAgICAgICAgcmV0dXJuIGNyYzE7CisKKyAgICAvKiBwdXQgb3BlcmF0b3IgZm9yIG9uZSB6ZXJv IGJpdCBpbiBvZGQgKi8KKyAgICBvZGRbMF0gPSAweGVkYjg4MzIwVUw7ICAgICAgICAgIC8qIENS Qy0zMiBwb2x5bm9taWFsICovCisgICAgcm93ID0gMTsKKyAgICBmb3IgKG4gPSAxOyBuIDwgR0Yy X0RJTTsgbisrKSB7CisgICAgICAgIG9kZFtuXSA9IHJvdzsKKyAgICAgICAgcm93IDw8PSAxOwor ICAgIH0KKworICAgIC8qIHB1dCBvcGVyYXRvciBmb3IgdHdvIHplcm8gYml0cyBpbiBldmVuICov CisgICAgZ2YyX21hdHJpeF9zcXVhcmUoZXZlbiwgb2RkKTsKKworICAgIC8qIHB1dCBvcGVyYXRv ciBmb3IgZm91ciB6ZXJvIGJpdHMgaW4gb2RkICovCisgICAgZ2YyX21hdHJpeF9zcXVhcmUob2Rk LCBldmVuKTsKKworICAgIC8qIGFwcGx5IGxlbjIgemVyb3MgdG8gY3JjMSAoZmlyc3Qgc3F1YXJl IHdpbGwgcHV0IHRoZSBvcGVyYXRvciBmb3Igb25lCisgICAgICAgemVybyBieXRlLCBlaWdodCB6 ZXJvIGJpdHMsIGluIGV2ZW4pICovCisgICAgZG8geworICAgICAgICAvKiBhcHBseSB6ZXJvcyBv cGVyYXRvciBmb3IgdGhpcyBiaXQgb2YgbGVuMiAqLworICAgICAgICBnZjJfbWF0cml4X3NxdWFy ZShldmVuLCBvZGQpOworICAgICAgICBpZiAobGVuMiAmIDEpCisgICAgICAgICAgICBjcmMxID0g Z2YyX21hdHJpeF90aW1lcyhldmVuLCBjcmMxKTsKKyAgICAgICAgbGVuMiA+Pj0gMTsKKworICAg ICAgICAvKiBpZiBubyBtb3JlIGJpdHMgc2V0LCB0aGVuIGRvbmUgKi8KKyAgICAgICAgaWYgKGxl bjIgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIGFub3RoZXIgaXRlcmF0 aW9uIG9mIHRoZSBsb29wIHdpdGggb2RkIGFuZCBldmVuIHN3YXBwZWQgKi8KKyAgICAgICAgZ2Yy X21hdHJpeF9zcXVhcmUob2RkLCBldmVuKTsKKyAgICAgICAgaWYgKGxlbjIgJiAxKQorICAgICAg ICAgICAgY3JjMSA9IGdmMl9tYXRyaXhfdGltZXMob2RkLCBjcmMxKTsKKyAgICAgICAgbGVuMiA+ Pj0gMTsKKworICAgICAgICAvKiBpZiBubyBtb3JlIGJpdHMgc2V0LCB0aGVuIGRvbmUgKi8KKyAg ICB9IHdoaWxlIChsZW4yICE9IDApOworCisgICAgLyogcmV0dXJuIGNvbWJpbmVkIGNyYyAqLwor ICAgIGNyYzEgXj0gY3JjMjsKKyAgICByZXR1cm4gY3JjMTsKK30KKworLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSAqLwordUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lKGNyYzEsIGNyYzIsIGxlbjIpCisg ICAgdUxvbmcgY3JjMTsKKyAgICB1TG9uZyBjcmMyOworICAgIHpfb2ZmX3QgbGVuMjsKK3sKKyAg ICByZXR1cm4gY3JjMzJfY29tYmluZV8oY3JjMSwgY3JjMiwgbGVuMik7Cit9CisKK3VMb25nIFpF WFBPUlQgY3JjMzJfY29tYmluZTY0KGNyYzEsIGNyYzIsIGxlbjIpCisgICAgdUxvbmcgY3JjMTsK KyAgICB1TG9uZyBjcmMyOworICAgIHpfb2ZmNjRfdCBsZW4yOworeworICAgIHJldHVybiBjcmMz Ml9jb21iaW5lXyhjcmMxLCBjcmMyLCBsZW4yKTsKK30KZGlmZiAtciA5YTMxNzcyMzE3OTAgLXIg ZTJkMTkzOWIxY2NjIHN5cy9zcmMvY21kL2dzL3psaWIvY3JjMzIuaAotLS0gYS9zeXMvc3JjL2Nt ZC9ncy96bGliL2NyYzMyLmgJU3VuIE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyBiL3N5 cy9zcmMvY21kL2dzL3psaWIvY3JjMzIuaAlTdW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0MDAK QEAgLTIsNyArMiw3IEBACiAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jCiAg Ki8KIAotbG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0g PQorbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQogewogICB7 CiAgICAgMHgwMDAwMDAwMFVMLCAweDc3MDczMDk2VUwsIDB4ZWUwZTYxMmNVTCwgMHg5OTA5NTFi YVVMLCAweDA3NmRjNDE5VUwsCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBz eXMvc3JjL2NtZC9ncy96bGliL2RlZmxhdGUuYwotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL2Rl ZmxhdGUuYwlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQv Z3MvemxpYi9kZWZsYXRlLmMJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0xLDUg KzEsNSBAQAogLyogZGVmbGF0ZS5jIC0tIGNvbXByZXNzIGRhdGEgdXNpbmcgdGhlIGRlZmxhdGlv biBhbGdvcml0aG0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA0IEplYW4tbG91cCBHYWlsbHku CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFk bGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHly aWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMzcsNyArMzcsNyBAQAogICogIFJFRkVS RU5DRVMKICAqCiAgKiAgICAgIERldXRzY2gsIEwuUC4sIkRFRkxBVEUgQ29tcHJlc3NlZCBEYXRh IEZvcm1hdCBTcGVjaWZpY2F0aW9uIi4KLSAqICAgICAgQXZhaWxhYmxlIGluIGh0dHA6Ly93d3cu aWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CisgKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vdG9v bHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCiAgKgogICogICAgICBBIGRlc2NyaXB0aW9uIG9mIHRo ZSBSYWJpbiBhbmQgS2FycCBhbGdvcml0aG0gaXMgZ2l2ZW4gaW4gdGhlIGJvb2sKICAqICAgICAg ICAgIkFsZ29yaXRobXMiIGJ5IFIuIFNlZGdld2ljaywgQWRkaXNvbi1XZXNsZXksIHAyNTIuCkBA IC00NywxMiArNDcsMTIgQEAKICAqCiAgKi8KIAotLyogQCgjKSAkSWQ6IGRlZmxhdGUuYyx2IDEu MS4xLjEgMjAwNS8wNC8yNCAyMTozOTo0MCBnaWxlcyBFeHAgJCAqLworLyogQCgjKSAkSWQkICov CiAKICNpbmNsdWRlICJkZWZsYXRlLmgiCiAKIGNvbnN0IGNoYXIgZGVmbGF0ZV9jb3B5cmlnaHRb XSA9Ci0gICAiIGRlZmxhdGUgMS4yLjIgQ29weXJpZ2h0IDE5OTUtMjAwNCBKZWFuLWxvdXAgR2Fp bGx5ICI7CisgICAiIGRlZmxhdGUgMS4yLjExIENvcHlyaWdodCAxOTk1LTIwMTcgSmVhbi1sb3Vw IEdhaWxseSBhbmQgTWFyayBBZGxlciAiOwogLyoKICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJy YXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUg ZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fu bm90CkBAIC03MywyNyArNzMsMjkgQEAKIHR5cGVkZWYgYmxvY2tfc3RhdGUgKCpjb21wcmVzc19m dW5jKSBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7CiAvKiBDb21wcmVzc2lvbiBm dW5jdGlvbi4gUmV0dXJucyB0aGUgYmxvY2sgc3RhdGUgYWZ0ZXIgdGhlIGNhbGwuICovCiAKK2xv Y2FsIGludCBkZWZsYXRlU3RhdGVDaGVjayAgICAgIE9GKCh6X3N0cmVhbXAgc3RybSkpOworbG9j YWwgdm9pZCBzbGlkZV9oYXNoICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdm9p ZCBmaWxsX3dpbmRvdyAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgYmxvY2tfc3Rh dGUgZGVmbGF0ZV9zdG9yZWQgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBmbHVzaCkpOwogbG9j YWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9mYXN0ICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBm bHVzaCkpOwogI2lmbmRlZiBGQVNURVNUCiBsb2NhbCBibG9ja19zdGF0ZSBkZWZsYXRlX3Nsb3cg ICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7CiAjZW5kaWYKK2xvY2FsIGJsb2Nr X3N0YXRlIGRlZmxhdGVfcmxlICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsK K2xvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfaHVmZiAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBp bnQgZmx1c2gpKTsKIGxvY2FsIHZvaWQgbG1faW5pdCAgICAgICAgT0YoKGRlZmxhdGVfc3RhdGUg KnMpKTsKIGxvY2FsIHZvaWQgcHV0U2hvcnRNU0IgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIHVJ bnQgYikpOwogbG9jYWwgdm9pZCBmbHVzaF9wZW5kaW5nICBPRigoel9zdHJlYW1wIHN0cm0pKTsK LWxvY2FsIGludCByZWFkX2J1ZiAgICAgICAgT0YoKHpfc3RyZWFtcCBzdHJtLCBCeXRlZiAqYnVm LCB1bnNpZ25lZCBzaXplKSk7Ci0jaWZuZGVmIEZBU1RFU1QKK2xvY2FsIHVuc2lnbmVkIHJlYWRf YnVmICAgT0YoKHpfc3RyZWFtcCBzdHJtLCBCeXRlZiAqYnVmLCB1bnNpZ25lZCBzaXplKSk7CiAj aWZkZWYgQVNNVgorIyAgcHJhZ21hIG1lc3NhZ2UoIkFzc2VtYmxlciBjb2RlIG1heSBoYXZlIGJ1 Z3MgLS0gdXNlIGF0IHlvdXIgb3duIHJpc2siKQogICAgICAgdm9pZCBtYXRjaF9pbml0IE9GKCh2 b2lkKSk7IC8qIGFzbSBjb2RlIGluaXRpYWxpemF0aW9uICovCiAgICAgICB1SW50IGxvbmdlc3Rf bWF0Y2ggIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwogI2Vsc2UKIGxv Y2FsIHVJbnQgbG9uZ2VzdF9tYXRjaCAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIElQb3MgY3VyX21h dGNoKSk7CiAjZW5kaWYKLSNlbmRpZgotbG9jYWwgdUludCBsb25nZXN0X21hdGNoX2Zhc3QgT0Yo KGRlZmxhdGVfc3RhdGUgKnMsIElQb3MgY3VyX21hdGNoKSk7CiAKLSNpZmRlZiBERUJVRworI2lm ZGVmIFpMSUJfREVCVUcKIGxvY2FsICB2b2lkIGNoZWNrX21hdGNoIE9GKChkZWZsYXRlX3N0YXRl ICpzLCBJUG9zIHN0YXJ0LCBJUG9zIG1hdGNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBsZW5ndGgpKTsKICNlbmRpZgpAQCAtMTEwLDExICsxMTIsNiBAQAogI2VuZGlmCiAvKiBN YXRjaGVzIG9mIGxlbmd0aCAzIGFyZSBkaXNjYXJkZWQgaWYgdGhlaXIgZGlzdGFuY2UgZXhjZWVk cyBUT09fRkFSICovCiAKLSNkZWZpbmUgTUlOX0xPT0tBSEVBRCAoTUFYX01BVENIK01JTl9NQVRD SCsxKQotLyogTWluaW11bSBhbW91bnQgb2YgbG9va2FoZWFkLCBleGNlcHQgYXQgdGhlIGVuZCBv ZiB0aGUgaW5wdXQgZmlsZS4KLSAqIFNlZSBkZWZsYXRlLmMgZm9yIGNvbW1lbnRzIGFib3V0IHRo ZSBNSU5fTUFUQ0grMS4KLSAqLwotCiAvKiBWYWx1ZXMgZm9yIG1heF9sYXp5X21hdGNoLCBnb29k X21hdGNoIGFuZCBtYXhfY2hhaW5fbGVuZ3RoLCBkZXBlbmRpbmcgb24KICAqIHRoZSBkZXNpcmVk IHBhY2sgbGV2ZWwgKDAuLjkpLiBUaGUgdmFsdWVzIGdpdmVuIGJlbG93IGhhdmUgYmVlbiB0dW5l ZCB0bwogICogZXhjbHVkZSB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIGZvciBwYXRob2xvZ2ljYWwg ZmlsZXMuIEJldHRlciB2YWx1ZXMgbWF5IGJlCkBAIC0xNTQsMTggKzE1MSwxNCBAQAogICogbWVh bmluZy4KICAqLwogCi0jZGVmaW5lIEVRVUFMIDAKLS8qIHJlc3VsdCBvZiBtZW1jbXAgZm9yIGVx dWFsIHN0cmluZ3MgKi8KLQotI2lmbmRlZiBOT19EVU1NWV9ERUNMCi1zdHJ1Y3Qgc3RhdGljX3Ry ZWVfZGVzY19zIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwotI2VuZGlm CisvKiByYW5rIFpfQkxPQ0sgYmV0d2VlbiBaX05PX0ZMVVNIIGFuZCBaX1BBUlRJQUxfRkxVU0gg Ki8KKyNkZWZpbmUgUkFOSyhmKSAoKChmKSAqIDIpIC0gKChmKSA+IDQgPyA5IDogMCkpCiAKIC8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQogICogVXBkYXRlIGEgaGFzaCB2YWx1ZSB3aXRoIHRoZSBnaXZl biBpbnB1dCBieXRlCi0gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gdG8gVVBEQVRFX0hB U0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQotICogICAgaW5wdXQgY2hhcmFjdGVycywgc28g dGhhdCBhIHJ1bm5pbmcgaGFzaCBrZXkgY2FuIGJlIGNvbXB1dGVkIGZyb20gdGhlCi0gKiAgICBw cmV2aW91cyBrZXkgaW5zdGVhZCBvZiBjb21wbGV0ZSByZWNhbGN1bGF0aW9uIGVhY2ggdGltZS4K KyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRo IGNvbnNlY3V0aXZlIGlucHV0CisgKiAgICBjaGFyYWN0ZXJzLCBzbyB0aGF0IGEgcnVubmluZyBo YXNoIGtleSBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUgcHJldmlvdXMKKyAqICAgIGtleSBpbnN0 ZWFkIG9mIGNvbXBsZXRlIHJlY2FsY3VsYXRpb24gZWFjaCB0aW1lLgogICovCiAjZGVmaW5lIFVQ REFURV9IQVNIKHMsaCxjKSAoaCA9ICgoKGgpPDxzLT5oYXNoX3NoaWZ0KSBeIChjKSkgJiBzLT5o YXNoX21hc2spCiAKQEAgLTE3Niw5ICsxNjksOSBAQAogICogdGhlIHByZXZpb3VzIGxlbmd0aCBv ZiB0aGUgaGFzaCBjaGFpbi4KICAqIElmIHRoaXMgZmlsZSBpcyBjb21waWxlZCB3aXRoIC1ERkFT VEVTVCwgdGhlIGNvbXByZXNzaW9uIGxldmVsIGlzIGZvcmNlZAogICogdG8gMSwgYW5kIG5vIGhh c2ggY2hhaW5zIGFyZSBtYWludGFpbmVkLgotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRv IHRvIElOU0VSVF9TVFJJTkcgYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQotICogICAgaW5wdXQg Y2hhcmFjdGVycyBhbmQgdGhlIGZpcnN0IE1JTl9NQVRDSCBieXRlcyBvZiBzdHIgYXJlIHZhbGlk Ci0gKiAgICAoZXhjZXB0IGZvciB0aGUgbGFzdCBNSU5fTUFUQ0gtMSBieXRlcyBvZiB0aGUgaW5w dXQgZmlsZSkuCisgKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gSU5TRVJUX1NUUklORyBh cmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlIGlucHV0CisgKiAgICBjaGFyYWN0ZXJzIGFuZCB0aGUg Zmlyc3QgTUlOX01BVENIIGJ5dGVzIG9mIHN0ciBhcmUgdmFsaWQgKGV4Y2VwdCBmb3IKKyAqICAg IHRoZSBsYXN0IE1JTl9NQVRDSC0xIGJ5dGVzIG9mIHRoZSBpbnB1dCBmaWxlKS4KICAqLwogI2lm ZGVmIEZBU1RFU1QKICNkZWZpbmUgSU5TRVJUX1NUUklORyhzLCBzdHIsIG1hdGNoX2hlYWQpIFwK QEAgLTIwMCw2ICsxOTMsMzcgQEAKICAgICBzLT5oZWFkW3MtPmhhc2hfc2l6ZS0xXSA9IE5JTDsg XAogICAgIHptZW16ZXJvKChCeXRlZiAqKXMtPmhlYWQsICh1bnNpZ25lZCkocy0+aGFzaF9zaXpl LTEpKnNpemVvZigqcy0+aGVhZCkpOwogCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFNsaWRl IHRoZSBoYXNoIHRhYmxlIHdoZW4gc2xpZGluZyB0aGUgd2luZG93IGRvd24gKGNvdWxkIGJlIGF2 b2lkZWQgd2l0aCAzMgorICogYml0IHZhbHVlcyBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNh Z2UpLiBXZSBzbGlkZSBldmVuIHdoZW4gbGV2ZWwgPT0gMCB0bworICoga2VlcCB0aGUgaGFzaCB0 YWJsZSBjb25zaXN0ZW50IGlmIHdlIHN3aXRjaCBiYWNrIHRvIGxldmVsID4gMCBsYXRlci4KKyAq LworbG9jYWwgdm9pZCBzbGlkZV9oYXNoKHMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKK3sKKyAg ICB1bnNpZ25lZCBuLCBtOworICAgIFBvc2YgKnA7CisgICAgdUludCB3c2l6ZSA9IHMtPndfc2l6 ZTsKKworICAgIG4gPSBzLT5oYXNoX3NpemU7CisgICAgcCA9ICZzLT5oZWFkW25dOworICAgIGRv IHsKKyAgICAgICAgbSA9ICotLXA7CisgICAgICAgICpwID0gKFBvcykobSA+PSB3c2l6ZSA/IG0g LSB3c2l6ZSA6IE5JTCk7CisgICAgfSB3aGlsZSAoLS1uKTsKKyAgICBuID0gd3NpemU7CisjaWZu ZGVmIEZBU1RFU1QKKyAgICBwID0gJnMtPnByZXZbbl07CisgICAgZG8geworICAgICAgICBtID0g Ki0tcDsKKyAgICAgICAgKnAgPSAoUG9zKShtID49IHdzaXplID8gbSAtIHdzaXplIDogTklMKTsK KyAgICAgICAgLyogSWYgbiBpcyBub3Qgb24gYW55IGhhc2ggY2hhaW4sIHByZXZbbl0gaXMgZ2Fy YmFnZSBidXQKKyAgICAgICAgICogaXRzIHZhbHVlIHdpbGwgbmV2ZXIgYmUgdXNlZC4KKyAgICAg ICAgICovCisgICAgfSB3aGlsZSAoLS1uKTsKKyNlbmRpZgorfQorCiAvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdF8oc3RybSwgbGV2ZWwsIHZlcnNpb24sIHN0 cmVhbV9zaXplKQogICAgIHpfc3RyZWFtcCBzdHJtOwpAQCAtMjQxLDEwICsyNjUsMTkgQEAKIAog ICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19m dW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwor I2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3Bh cXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAo ZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9 PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9F UlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAKICNp ZmRlZiBGQVNURVNUCiAgICAgaWYgKGxldmVsICE9IDApIGxldmVsID0gMTsKQEAgLTI2NCw3ICsy OTcsNyBAQAogI2VuZGlmCiAgICAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9N RU1fTEVWRUwgfHwgbWV0aG9kICE9IFpfREVGTEFURUQgfHwKICAgICAgICAgd2luZG93Qml0cyA8 IDggfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBsZXZlbCA+IDkgfHwKLSAgICAg ICAgc3RyYXRlZ3kgPCAwIHx8IHN0cmF0ZWd5ID4gWl9STEUpIHsKKyAgICAgICAgc3RyYXRlZ3kg PCAwIHx8IHN0cmF0ZWd5ID4gWl9GSVhFRCB8fCAod2luZG93Qml0cyA9PSA4ICYmIHdyYXAgIT0g MSkpIHsKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIH0KICAgICBpZiAod2lu ZG93Qml0cyA9PSA4KSB3aW5kb3dCaXRzID0gOTsgIC8qIHVudGlsIDI1Ni1ieXRlIHdpbmRvdyBi dWcgZml4ZWQgKi8KQEAgLTI3MiwxMyArMzA1LDE1IEBACiAgICAgaWYgKHMgPT0gWl9OVUxMKSBy ZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgc3RybS0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0 YXRlIEZBUiAqKXM7CiAgICAgcy0+c3RybSA9IHN0cm07CisgICAgcy0+c3RhdHVzID0gSU5JVF9T VEFURTsgICAgIC8qIHRvIHBhc3Mgc3RhdGUgdGVzdCBpbiBkZWZsYXRlUmVzZXQoKSAqLwogCiAg ICAgcy0+d3JhcCA9IHdyYXA7Ci0gICAgcy0+d19iaXRzID0gd2luZG93Qml0czsKKyAgICBzLT5n emhlYWQgPSBaX05VTEw7CisgICAgcy0+d19iaXRzID0gKHVJbnQpd2luZG93Qml0czsKICAgICBz LT53X3NpemUgPSAxIDw8IHMtPndfYml0czsKICAgICBzLT53X21hc2sgPSBzLT53X3NpemUgLSAx OwogCi0gICAgcy0+aGFzaF9iaXRzID0gbWVtTGV2ZWwgKyA3OworICAgIHMtPmhhc2hfYml0cyA9 ICh1SW50KW1lbUxldmVsICsgNzsKICAgICBzLT5oYXNoX3NpemUgPSAxIDw8IHMtPmhhc2hfYml0 czsKICAgICBzLT5oYXNoX21hc2sgPSBzLT5oYXNoX3NpemUgLSAxOwogICAgIHMtPmhhc2hfc2hp ZnQgPSAgKChzLT5oYXNoX2JpdHMrTUlOX01BVENILTEpL01JTl9NQVRDSCk7CkBAIC0yODcsNiAr MzIyLDggQEAKICAgICBzLT5wcmV2ICAgPSAoUG9zZiAqKSAgWkFMTE9DKHN0cm0sIHMtPndfc2l6 ZSwgc2l6ZW9mKFBvcykpOwogICAgIHMtPmhlYWQgICA9IChQb3NmICopICBaQUxMT0Moc3RybSwg cy0+aGFzaF9zaXplLCBzaXplb2YoUG9zKSk7CiAKKyAgICBzLT5oaWdoX3dhdGVyID0gMDsgICAg ICAvKiBub3RoaW5nIHdyaXR0ZW4gdG8gcy0+d2luZG93IHlldCAqLworCiAgICAgcy0+bGl0X2J1 ZnNpemUgPSAxIDw8IChtZW1MZXZlbCArIDYpOyAvKiAxNksgZWxlbWVudHMgYnkgZGVmYXVsdCAq LwogCiAgICAgb3ZlcmxheSA9ICh1c2hmICopIFpBTExPQyhzdHJtLCBzLT5saXRfYnVmc2l6ZSwg c2l6ZW9mKHVzaCkrMik7CkBAIC0yOTYsNyArMzMzLDcgQEAKICAgICBpZiAocy0+d2luZG93ID09 IFpfTlVMTCB8fCBzLT5wcmV2ID09IFpfTlVMTCB8fCBzLT5oZWFkID09IFpfTlVMTCB8fAogICAg ICAgICBzLT5wZW5kaW5nX2J1ZiA9PSBaX05VTEwpIHsKICAgICAgICAgcy0+c3RhdHVzID0gRklO SVNIX1NUQVRFOwotICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciopRVJSX01TRyhaX01FTV9FUlJP Uik7CisgICAgICAgIHN0cm0tPm1zZyA9IEVSUl9NU0coWl9NRU1fRVJST1IpOwogICAgICAgICBk ZWZsYXRlRW5kIChzdHJtKTsKICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIH0KQEAg LTMxMCw2ICszNDcsMzEgQEAKICAgICByZXR1cm4gZGVmbGF0ZVJlc2V0KHN0cm0pOwogfQogCisv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisgKiBDaGVjayBmb3IgYSB2YWxpZCBkZWZsYXRlIHN0cmVhbSBz dGF0ZS4gUmV0dXJuIDAgaWYgb2ssIDEgaWYgbm90LgorICovCitsb2NhbCBpbnQgZGVmbGF0ZVN0 YXRlQ2hlY2sgKHN0cm0pCisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgZGVmbGF0ZV9zdGF0 ZSAqczsKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwKKyAgICAgICAgc3RybS0+emFsbG9jID09 IChhbGxvY19mdW5jKTAgfHwgc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorICAgICAgICBy ZXR1cm4gMTsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgaWYgKHMgPT0gWl9OVUxMIHx8IHMt PnN0cm0gIT0gc3RybSB8fCAocy0+c3RhdHVzICE9IElOSVRfU1RBVEUgJiYKKyNpZmRlZiBHWklQ CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9 IEdaSVBfU1RBVEUgJiYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMtPnN0YXR1cyAhPSBFWFRSQV9TVEFURSAmJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBOQU1FX1NUQVRFICYmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9IENPTU1F TlRfU1RBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LT5zdGF0dXMgIT0gSENSQ19TVEFURSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBCVVNZX1NUQVRFICYmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9IEZJTklTSF9TVEFURSkpCisg ICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCiAvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0RGljdGlvbmFyeSAoc3RybSwgZGljdGlvbmFyeSwg ZGljdExlbmd0aCkKICAgICB6X3N0cmVhbXAgc3RybTsKQEAgLTMxNyw1MSArMzc5LDk3IEBACiAg ICAgdUludCAgZGljdExlbmd0aDsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIHVJbnQg bGVuZ3RoID0gZGljdExlbmd0aDsKLSAgICB1SW50IG47Ci0gICAgSVBvcyBoYXNoX2hlYWQgPSAw OworICAgIHVJbnQgc3RyLCBuOworICAgIGludCB3cmFwOworICAgIHVuc2lnbmVkIGF2YWlsOwor ICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciAqbmV4dDsKIAotICAgIGlmIChzdHJtID09IFpfTlVM TCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwgfHwKLSAg ICAgICAgc3RybS0+c3RhdGUtPndyYXAgPT0gMiB8fAotICAgICAgICAoc3RybS0+c3RhdGUtPndy YXAgPT0gMSAmJiBzdHJtLT5zdGF0ZS0+c3RhdHVzICE9IElOSVRfU1RBVEUpKQorICAgIGlmIChk ZWZsYXRlU3RhdGVDaGVjayhzdHJtKSB8fCBkaWN0aW9uYXJ5ID09IFpfTlVMTCkKKyAgICAgICAg cmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICB3cmFwID0g cy0+d3JhcDsKKyAgICBpZiAod3JhcCA9PSAyIHx8ICh3cmFwID09IDEgJiYgcy0+c3RhdHVzICE9 IElOSVRfU1RBVEUpIHx8IHMtPmxvb2thaGVhZCkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VS Uk9SOwogCi0gICAgcyA9IHN0cm0tPnN0YXRlOwotICAgIGlmIChzLT53cmFwKQorICAgIC8qIHdo ZW4gdXNpbmcgemxpYiB3cmFwcGVycywgY29tcHV0ZSBBZGxlci0zMiBmb3IgcHJvdmlkZWQgZGlj dGlvbmFyeSAqLworICAgIGlmICh3cmFwID09IDEpCiAgICAgICAgIHN0cm0tPmFkbGVyID0gYWRs ZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7CisgICAgcy0+d3JhcCA9 IDA7ICAgICAgICAgICAgICAgICAgICAvKiBhdm9pZCBjb21wdXRpbmcgQWRsZXItMzIgaW4gcmVh ZF9idWYgKi8KIAotICAgIGlmIChsZW5ndGggPCBNSU5fTUFUQ0gpIHJldHVybiBaX09LOwotICAg IGlmIChsZW5ndGggPiBNQVhfRElTVChzKSkgewotICAgICAgICBsZW5ndGggPSBNQVhfRElTVChz KTsKLSNpZm5kZWYgVVNFX0RJQ1RfSEVBRAotICAgICAgICBkaWN0aW9uYXJ5ICs9IGRpY3RMZW5n dGggLSBsZW5ndGg7IC8qIHVzZSB0aGUgdGFpbCBvZiB0aGUgZGljdGlvbmFyeSAqLworICAgIC8q IGlmIGRpY3Rpb25hcnkgd291bGQgZmlsbCB3aW5kb3csIGp1c3QgcmVwbGFjZSB0aGUgaGlzdG9y eSAqLworICAgIGlmIChkaWN0TGVuZ3RoID49IHMtPndfc2l6ZSkgeworICAgICAgICBpZiAod3Jh cCA9PSAwKSB7ICAgICAgICAgICAgLyogYWxyZWFkeSBlbXB0eSBvdGhlcndpc2UgKi8KKyAgICAg ICAgICAgIENMRUFSX0hBU0gocyk7CisgICAgICAgICAgICBzLT5zdHJzdGFydCA9IDA7CisgICAg ICAgICAgICBzLT5ibG9ja19zdGFydCA9IDBMOworICAgICAgICAgICAgcy0+aW5zZXJ0ID0gMDsK KyAgICAgICAgfQorICAgICAgICBkaWN0aW9uYXJ5ICs9IGRpY3RMZW5ndGggLSBzLT53X3NpemU7 ICAvKiB1c2UgdGhlIHRhaWwgKi8KKyAgICAgICAgZGljdExlbmd0aCA9IHMtPndfc2l6ZTsKKyAg ICB9CisKKyAgICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqLwor ICAgIGF2YWlsID0gc3RybS0+YXZhaWxfaW47CisgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47Cisg ICAgc3RybS0+YXZhaWxfaW4gPSBkaWN0TGVuZ3RoOworICAgIHN0cm0tPm5leHRfaW4gPSAoel9j b25zdCBCeXRlZiAqKWRpY3Rpb25hcnk7CisgICAgZmlsbF93aW5kb3cocyk7CisgICAgd2hpbGUg KHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgc3RyID0gcy0+c3Ryc3RhcnQ7 CisgICAgICAgIG4gPSBzLT5sb29rYWhlYWQgLSAoTUlOX01BVENILTEpOworICAgICAgICBkbyB7 CisgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1J Tl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgIHMtPnByZXZbc3RyICYg cy0+d19tYXNrXSA9IHMtPmhlYWRbcy0+aW5zX2hdOwogI2VuZGlmCisgICAgICAgICAgICBzLT5o ZWFkW3MtPmluc19oXSA9IChQb3Mpc3RyOworICAgICAgICAgICAgc3RyKys7CisgICAgICAgIH0g d2hpbGUgKC0tbik7CisgICAgICAgIHMtPnN0cnN0YXJ0ID0gc3RyOworICAgICAgICBzLT5sb29r YWhlYWQgPSBNSU5fTUFUQ0gtMTsKKyAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgfQotICAg IHptZW1jcHkocy0+d2luZG93LCBkaWN0aW9uYXJ5LCBsZW5ndGgpOwotICAgIHMtPnN0cnN0YXJ0 ID0gbGVuZ3RoOwotICAgIHMtPmJsb2NrX3N0YXJ0ID0gKGxvbmcpbGVuZ3RoOwotCi0gICAgLyog SW5zZXJ0IGFsbCBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIChleGNlcHQgZm9yIHRoZSBsYXN0 IHR3byBieXRlcykuCi0gICAgICogcy0+bG9va2FoZWFkIHN0YXlzIG51bGwsIHNvIHMtPmluc19o IHdpbGwgYmUgcmVjb21wdXRlZCBhdCB0aGUgbmV4dAotICAgICAqIGNhbGwgb2YgZmlsbF93aW5k b3cuCi0gICAgICovCi0gICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbMF07Ci0gICAgVVBEQVRFX0hB U0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1sxXSk7Ci0gICAgZm9yIChuID0gMDsgbiA8PSBsZW5n dGggLSBNSU5fTUFUQ0g7IG4rKykgewotICAgICAgICBJTlNFUlRfU1RSSU5HKHMsIG4sIGhhc2hf aGVhZCk7Ci0gICAgfQotICAgIGlmIChoYXNoX2hlYWQpIGhhc2hfaGVhZCA9IDA7ICAvKiB0byBt YWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgcy0+c3Ryc3RhcnQgKz0gcy0+bG9va2FoZWFkOwor ICAgIHMtPmJsb2NrX3N0YXJ0ID0gKGxvbmcpcy0+c3Ryc3RhcnQ7CisgICAgcy0+aW5zZXJ0ID0g cy0+bG9va2FoZWFkOworICAgIHMtPmxvb2thaGVhZCA9IDA7CisgICAgcy0+bWF0Y2hfbGVuZ3Ro ID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKKyAgICBzLT5tYXRjaF9hdmFpbGFibGUg PSAwOworICAgIHN0cm0tPm5leHRfaW4gPSBuZXh0OworICAgIHN0cm0tPmF2YWlsX2luID0gYXZh aWw7CisgICAgcy0+d3JhcCA9IHdyYXA7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKIC8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0gKi8KLWludCBaRVhQT1JUIGRlZmxhdGVSZXNldCAoc3RybSkKK2ludCBaRVhQ T1JUIGRlZmxhdGVHZXREaWN0aW9uYXJ5IChzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQor ICAgIHpfc3RyZWFtcCBzdHJtOworICAgIEJ5dGVmICpkaWN0aW9uYXJ5OworICAgIHVJbnQgICpk aWN0TGVuZ3RoOworeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgdUludCBsZW47CisKKyAg ICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9F UlJPUjsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgbGVuID0gcy0+c3Ryc3RhcnQgKyBzLT5s b29rYWhlYWQ7CisgICAgaWYgKGxlbiA+IHMtPndfc2l6ZSkKKyAgICAgICAgbGVuID0gcy0+d19z aXplOworICAgIGlmIChkaWN0aW9uYXJ5ICE9IFpfTlVMTCAmJiBsZW4pCisgICAgICAgIHptZW1j cHkoZGljdGlvbmFyeSwgcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQgLSBs ZW4sIGxlbik7CisgICAgaWYgKGRpY3RMZW5ndGggIT0gWl9OVUxMKQorICAgICAgICAqZGljdExl bmd0aCA9IGxlbjsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAq LworaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCAoc3RybSkKICAgICB6X3N0cmVhbXAgc3Ry bTsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8 IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fAotICAgICAgICBzdHJtLT56YWxsb2MgPT0gKGFsbG9j X2Z1bmMpMCB8fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHsKKyAgICBpZiAoZGVmbGF0 ZVN0YXRlQ2hlY2soc3RybSkpIHsKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAg IH0KIApAQCAtMzc2LDcgKzQ4NCwxMSBAQAogICAgIGlmIChzLT53cmFwIDwgMCkgewogICAgICAg ICBzLT53cmFwID0gLXMtPndyYXA7IC8qIHdhcyBtYWRlIG5lZ2F0aXZlIGJ5IGRlZmxhdGUoLi4u LCBaX0ZJTklTSCk7ICovCiAgICAgfQotICAgIHMtPnN0YXR1cyA9IHMtPndyYXAgPyBJTklUX1NU QVRFIDogQlVTWV9TVEFURTsKKyAgICBzLT5zdGF0dXMgPQorI2lmZGVmIEdaSVAKKyAgICAgICAg cy0+d3JhcCA9PSAyID8gR1pJUF9TVEFURSA6CisjZW5kaWYKKyAgICAgICAgcy0+d3JhcCA/IElO SVRfU1RBVEUgOiBCVVNZX1NUQVRFOwogICAgIHN0cm0tPmFkbGVyID0KICNpZmRlZiBHWklQCiAg ICAgICAgIHMtPndyYXAgPT0gMiA/IGNyYzMyKDBMLCBaX05VTEwsIDApIDoKQEAgLTM4NSwyMCAr NDk3LDcwIEBACiAgICAgcy0+bGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7CiAKICAgICBfdHJfaW5p dChzKTsKLSAgICBsbV9pbml0KHMpOwogCiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKIC8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVSZXNldCAoc3RybSkKKyAgICB6X3N0 cmVhbXAgc3RybTsKK3sKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gZGVmbGF0ZVJlc2V0S2Vl cChzdHJtKTsKKyAgICBpZiAocmV0ID09IFpfT0spCisgICAgICAgIGxtX2luaXQoc3RybS0+c3Rh dGUpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBa RVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgKHN0cm0sIGhlYWQpCisgICAgel9zdHJlYW1wIHN0cm07 CisgICAgZ3pfaGVhZGVycCBoZWFkOworeworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJt KSB8fCBzdHJtLT5zdGF0ZS0+d3JhcCAhPSAyKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJS T1I7CisgICAgc3RybS0+c3RhdGUtPmd6aGVhZCA9IGhlYWQ7CisgICAgcmV0dXJuIFpfT0s7Cit9 CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIChz dHJtLCBwZW5kaW5nLCBiaXRzKQorICAgIHVuc2lnbmVkICpwZW5kaW5nOworICAgIGludCAqYml0 czsKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3Ry bSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAocGVuZGluZyAhPSBaX05VTEwpCisg ICAgICAgICpwZW5kaW5nID0gc3RybS0+c3RhdGUtPnBlbmRpbmc7CisgICAgaWYgKGJpdHMgIT0g Wl9OVUxMKQorICAgICAgICAqYml0cyA9IHN0cm0tPnN0YXRlLT5iaV92YWxpZDsKKyAgICByZXR1 cm4gWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0 ZVByaW1lIChzdHJtLCBiaXRzLCB2YWx1ZSkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBpbnQg Yml0czsKICAgICBpbnQgdmFsdWU7CiB7Ci0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0t PnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIHN0cm0tPnN0YXRl LT5iaV92YWxpZCA9IGJpdHM7Ci0gICAgc3RybS0+c3RhdGUtPmJpX2J1ZiA9ICh1c2gpKHZhbHVl ICYgKCgxIDw8IGJpdHMpIC0gMSkpOworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IHB1 dDsKKworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VS Uk9SOworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICBpZiAoKEJ5dGVmICopKHMtPmRfYnVmKSA8 IHMtPnBlbmRpbmdfb3V0ICsgKChCdWZfc2l6ZSArIDcpID4+IDMpKQorICAgICAgICByZXR1cm4g Wl9CVUZfRVJST1I7CisgICAgZG8geworICAgICAgICBwdXQgPSBCdWZfc2l6ZSAtIHMtPmJpX3Zh bGlkOworICAgICAgICBpZiAocHV0ID4gYml0cykKKyAgICAgICAgICAgIHB1dCA9IGJpdHM7Cisg ICAgICAgIHMtPmJpX2J1ZiB8PSAodXNoKSgodmFsdWUgJiAoKDEgPDwgcHV0KSAtIDEpKSA8PCBz LT5iaV92YWxpZCk7CisgICAgICAgIHMtPmJpX3ZhbGlkICs9IHB1dDsKKyAgICAgICAgX3RyX2Zs dXNoX2JpdHMocyk7CisgICAgICAgIHZhbHVlID4+PSBwdXQ7CisgICAgICAgIGJpdHMgLT0gcHV0 OworICAgIH0gd2hpbGUgKGJpdHMpOwogICAgIHJldHVybiBaX09LOwogfQogCkBAIC00MTAsOSAr NTcyLDggQEAKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGNvbXByZXNzX2Z1bmMgZnVu YzsKLSAgICBpbnQgZXJyID0gWl9PSzsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJt LT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoZGVmbGF0 ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzID0gc3RybS0+ c3RhdGU7CiAKICNpZmRlZiBGQVNURVNUCkBAIC00MjAsMTYgKzU4MSwyOCBAQAogI2Vsc2UKICAg ICBpZiAobGV2ZWwgPT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSBsZXZlbCA9IDY7CiAjZW5kaWYK LSAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gOSB8fCBzdHJhdGVneSA8IDAgfHwgc3RyYXRl Z3kgPiBaX1JMRSkgeworICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8IHN0cmF0ZWd5 IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VS Uk9SOwogICAgIH0KICAgICBmdW5jID0gY29uZmlndXJhdGlvbl90YWJsZVtzLT5sZXZlbF0uZnVu YzsKIAotICAgIGlmIChmdW5jICE9IGNvbmZpZ3VyYXRpb25fdGFibGVbbGV2ZWxdLmZ1bmMgJiYg c3RybS0+dG90YWxfaW4gIT0gMCkgeworICAgIGlmICgoc3RyYXRlZ3kgIT0gcy0+c3RyYXRlZ3kg fHwgZnVuYyAhPSBjb25maWd1cmF0aW9uX3RhYmxlW2xldmVsXS5mdW5jKSAmJgorICAgICAgICBz LT5oaWdoX3dhdGVyKSB7CiAgICAgICAgIC8qIEZsdXNoIHRoZSBsYXN0IGJ1ZmZlcjogKi8KLSAg ICAgICAgZXJyID0gZGVmbGF0ZShzdHJtLCBaX1BBUlRJQUxfRkxVU0gpOworICAgICAgICBpbnQg ZXJyID0gZGVmbGF0ZShzdHJtLCBaX0JMT0NLKTsKKyAgICAgICAgaWYgKGVyciA9PSBaX1NUUkVB TV9FUlJPUikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIGlmIChzdHJtLT5hdmFp bF9vdXQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKICAgICB9CiAgICAg aWYgKHMtPmxldmVsICE9IGxldmVsKSB7CisgICAgICAgIGlmIChzLT5sZXZlbCA9PSAwICYmIHMt Pm1hdGNoZXMgIT0gMCkgeworICAgICAgICAgICAgaWYgKHMtPm1hdGNoZXMgPT0gMSkKKyAgICAg ICAgICAgICAgICBzbGlkZV9oYXNoKHMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgIENMRUFSX0hBU0gocyk7CisgICAgICAgICAgICBzLT5tYXRjaGVzID0gMDsKKyAgICAgICAg fQogICAgICAgICBzLT5sZXZlbCA9IGxldmVsOwogICAgICAgICBzLT5tYXhfbGF6eV9tYXRjaCAg ID0gY29uZmlndXJhdGlvbl90YWJsZVtsZXZlbF0ubWF4X2xhenk7CiAgICAgICAgIHMtPmdvb2Rf bWF0Y2ggICAgICAgPSBjb25maWd1cmF0aW9uX3RhYmxlW2xldmVsXS5nb29kX2xlbmd0aDsKQEAg LTQzNyw3ICs2MTAsMjYgQEAKICAgICAgICAgcy0+bWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3Vy YXRpb25fdGFibGVbbGV2ZWxdLm1heF9jaGFpbjsKICAgICB9CiAgICAgcy0+c3RyYXRlZ3kgPSBz dHJhdGVneTsKLSAgICByZXR1cm4gZXJyOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlVHVuZShzdHJtLCBnb29kX2xlbmd0 aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4pCisgICAgel9zdHJlYW1wIHN0cm07 CisgICAgaW50IGdvb2RfbGVuZ3RoOworICAgIGludCBtYXhfbGF6eTsKKyAgICBpbnQgbmljZV9s ZW5ndGg7CisgICAgaW50IG1heF9jaGFpbjsKK3sKKyAgICBkZWZsYXRlX3N0YXRlICpzOworCisg ICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Cisg ICAgcyA9IHN0cm0tPnN0YXRlOworICAgIHMtPmdvb2RfbWF0Y2ggPSAodUludClnb29kX2xlbmd0 aDsKKyAgICBzLT5tYXhfbGF6eV9tYXRjaCA9ICh1SW50KW1heF9sYXp5OworICAgIHMtPm5pY2Vf bWF0Y2ggPSBuaWNlX2xlbmd0aDsKKyAgICBzLT5tYXhfY2hhaW5fbGVuZ3RoID0gKHVJbnQpbWF4 X2NoYWluOworICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC00 NTIsMzMgKzY0NCw2OCBAQAogICogcmVzdWx0aW5nIGZyb20gdXNpbmcgZml4ZWQgYmxvY2tzIGlu c3RlYWQgb2Ygc3RvcmVkIGJsb2Nrcywgd2hpY2ggZGVmbGF0ZQogICogY2FuIGVtaXQgb24gY29t cHJlc3NlZCBkYXRhIGZvciBzb21lIGNvbWJpbmF0aW9ucyBvZiB0aGUgcGFyYW1ldGVycy4KICAq Ci0gKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZCB0byBwcm92aWRl IGNsb3NlciB1cHBlciBib3VuZHMKLSAqIGZvciBldmVyeSBjb21iaW5hdGlvbiBvZiB3aW5kb3dC aXRzIGFuZCBtZW1MZXZlbCwgYXMgd2VsbCBhcyB3cmFwLgotICogQnV0IGV2ZW4gdGhlIGNvbnNl cnZhdGl2ZSB1cHBlciBib3VuZCBvZiBhYm91dCAxNCUgZXhwYW5zaW9uIGRvZXMgbm90Ci0gKiBz ZWVtIG9uZXJvdXMgZm9yIG91dHB1dCBidWZmZXIgYWxsb2NhdGlvbi4KKyAqIFRoaXMgZnVuY3Rp b24gY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkIHRvIHByb3ZpZGUgY2xvc2VyIHVwcGVyIGJv dW5kcyBmb3IKKyAqIGV2ZXJ5IGNvbWJpbmF0aW9uIG9mIHdpbmRvd0JpdHMgYW5kIG1lbUxldmVs LiAgQnV0IGV2ZW4gdGhlIGNvbnNlcnZhdGl2ZQorICogdXBwZXIgYm91bmQgb2YgYWJvdXQgMTQl IGV4cGFuc2lvbiBkb2VzIG5vdCBzZWVtIG9uZXJvdXMgZm9yIG91dHB1dCBidWZmZXIKKyAqIGFs bG9jYXRpb24uCiAgKi8KIHVMb25nIFpFWFBPUlQgZGVmbGF0ZUJvdW5kKHN0cm0sIHNvdXJjZUxl bikKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICB1TG9uZyBzb3VyY2VMZW47CiB7CiAgICAgZGVm bGF0ZV9zdGF0ZSAqczsKLSAgICB1TG9uZyBkZXN0TGVuOworICAgIHVMb25nIGNvbXBsZW4sIHdy YXBsZW47CiAKLSAgICAvKiBjb25zZXJ2YXRpdmUgdXBwZXIgYm91bmQgKi8KLSAgICBkZXN0TGVu ID0gc291cmNlTGVuICsKLSAgICAgICAgICAgICAgKChzb3VyY2VMZW4gKyA3KSA+PiAzKSArICgo c291cmNlTGVuICsgNjMpID4+IDYpICsgMTE7CisgICAgLyogY29uc2VydmF0aXZlIHVwcGVyIGJv dW5kIGZvciBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICBjb21wbGVuID0gc291cmNlTGVuICsKKyAg ICAgICAgICAgICAgKChzb3VyY2VMZW4gKyA3KSA+PiAzKSArICgoc291cmNlTGVuICsgNjMpID4+ IDYpICsgNTsKIAotICAgIC8qIGlmIGNhbid0IGdldCBwYXJhbWV0ZXJzLCByZXR1cm4gY29uc2Vy dmF0aXZlIGJvdW5kICovCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09 IFpfTlVMTCkKLSAgICAgICAgcmV0dXJuIGRlc3RMZW47CisgICAgLyogaWYgY2FuJ3QgZ2V0IHBh cmFtZXRlcnMsIHJldHVybiBjb25zZXJ2YXRpdmUgYm91bmQgcGx1cyB6bGliIHdyYXBwZXIgKi8K KyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpCisgICAgICAgIHJldHVybiBjb21wbGVu ICsgNjsKKworICAgIC8qIGNvbXB1dGUgd3JhcHBlciBsZW5ndGggKi8KKyAgICBzID0gc3RybS0+ c3RhdGU7CisgICAgc3dpdGNoIChzLT53cmFwKSB7CisgICAgY2FzZSAwOiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHJhdyBkZWZsYXRlICovCisgICAgICAgIHdyYXBsZW4gPSAw OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogemxpYiB3cmFwcGVyICovCisgICAgICAgIHdyYXBsZW4gPSA2ICsgKHMtPnN0cnN0 YXJ0ID8gNCA6IDApOworICAgICAgICBicmVhazsKKyNpZmRlZiBHWklQCisgICAgY2FzZSAyOiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgd3JhcHBlciAqLworICAgICAg ICB3cmFwbGVuID0gMTg7CisgICAgICAgIGlmIChzLT5nemhlYWQgIT0gWl9OVUxMKSB7ICAgICAg ICAgIC8qIHVzZXItc3VwcGxpZWQgZ3ppcCBoZWFkZXIgKi8KKyAgICAgICAgICAgIEJ5dGVmICpz dHI7CisgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBaX05VTEwpCisgICAgICAg ICAgICAgICAgd3JhcGxlbiArPSAyICsgcy0+Z3poZWFkLT5leHRyYV9sZW47CisgICAgICAgICAg ICBzdHIgPSBzLT5nemhlYWQtPm5hbWU7CisgICAgICAgICAgICBpZiAoc3RyICE9IFpfTlVMTCkK KyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIHdyYXBsZW4rKzsKKyAg ICAgICAgICAgICAgICB9IHdoaWxlICgqc3RyKyspOworICAgICAgICAgICAgc3RyID0gcy0+Z3po ZWFkLT5jb21tZW50OworICAgICAgICAgICAgaWYgKHN0ciAhPSBaX05VTEwpCisgICAgICAgICAg ICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB3cmFwbGVuKys7CisgICAgICAgICAgICAg ICAgfSB3aGlsZSAoKnN0cisrKTsKKyAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMpCisg ICAgICAgICAgICAgICAgd3JhcGxlbiArPSAyOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor I2VuZGlmCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZv ciBjb21waWxlciBoYXBwaW5lc3MgKi8KKyAgICAgICAgd3JhcGxlbiA9IDY7CisgICAgfQogCiAg ICAgLyogaWYgbm90IGRlZmF1bHQgcGFyYW1ldGVycywgcmV0dXJuIGNvbnNlcnZhdGl2ZSBib3Vu ZCAqLwotICAgIHMgPSBzdHJtLT5zdGF0ZTsKICAgICBpZiAocy0+d19iaXRzICE9IDE1IHx8IHMt Pmhhc2hfYml0cyAhPSA4ICsgNykKLSAgICAgICAgcmV0dXJuIGRlc3RMZW47CisgICAgICAgIHJl dHVybiBjb21wbGVuICsgd3JhcGxlbjsKIAogICAgIC8qIGRlZmF1bHQgc2V0dGluZ3M6IHJldHVy biB0aWdodCBib3VuZCBmb3IgdGhhdCBjYXNlICovCi0gICAgcmV0dXJuIGNvbXByZXNzQm91bmQo c291cmNlTGVuKTsKKyAgICByZXR1cm4gc291cmNlTGVuICsgKHNvdXJjZUxlbiA+PiAxMikgKyAo c291cmNlTGVuID4+IDE0KSArCisgICAgICAgICAgIChzb3VyY2VMZW4gPj4gMjUpICsgMTMgLSA2 ICsgd3JhcGxlbjsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDk1LDMwICs3MjIsNDMg QEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91 dHB1dCBhcyBwb3NzaWJsZS4gQWxsIGRlZmxhdGUoKSBvdXRwdXQgZ29lcwotICogdGhyb3VnaCB0 aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdAot ICogdG8gYXZvaWQgYWxsb2NhdGluZyBhIGxhcmdlIHN0cm0tPm5leHRfb3V0IGJ1ZmZlciBhbmQg Y29weWluZyBpbnRvIGl0LgotICogKFNlZSBhbHNvIHJlYWRfYnVmKCkpLgorICogRmx1c2ggYXMg bXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZS4gQWxsIGRlZmxhdGUoKSBvdXRwdXQsIGV4 Y2VwdCBmb3IKKyAqIHNvbWUgZGVmbGF0ZV9zdG9yZWQoKSBvdXRwdXQsIGdvZXMgdGhyb3VnaCB0 aGlzIGZ1bmN0aW9uIHNvIHNvbWUKKyAqIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkg aXQgdG8gYXZvaWQgYWxsb2NhdGluZyBhIGxhcmdlCisgKiBzdHJtLT5uZXh0X291dCBidWZmZXIg YW5kIGNvcHlpbmcgaW50byBpdC4gKFNlZSBhbHNvIHJlYWRfYnVmKCkpLgogICovCiBsb2NhbCB2 b2lkIGZsdXNoX3BlbmRpbmcoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKLSAgICB1bnNp Z25lZCBsZW4gPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICB1bnNpZ25lZCBsZW47CisgICAg ZGVmbGF0ZV9zdGF0ZSAqcyA9IHN0cm0tPnN0YXRlOwogCisgICAgX3RyX2ZsdXNoX2JpdHMocyk7 CisgICAgbGVuID0gcy0+cGVuZGluZzsKICAgICBpZiAobGVuID4gc3RybS0+YXZhaWxfb3V0KSBs ZW4gPSBzdHJtLT5hdmFpbF9vdXQ7CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CiAKLSAgICB6 bWVtY3B5KHN0cm0tPm5leHRfb3V0LCBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQsIGxlbik7Cisg ICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgcy0+cGVuZGluZ19vdXQsIGxlbik7CiAgICAgc3Ry bS0+bmV4dF9vdXQgICs9IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQgICs9IGxl bjsKKyAgICBzLT5wZW5kaW5nX291dCAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX291dCArPSBs ZW47Ci0gICAgc3RybS0+YXZhaWxfb3V0ICAtPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRp bmcgLT0gbGVuOwotICAgIGlmIChzdHJtLT5zdGF0ZS0+cGVuZGluZyA9PSAwKSB7Ci0gICAgICAg IHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nX2J1ZjsKKyAg ICBzdHJtLT5hdmFpbF9vdXQgLT0gbGVuOworICAgIHMtPnBlbmRpbmcgICAgICAtPSBsZW47Cisg ICAgaWYgKHMtPnBlbmRpbmcgPT0gMCkgeworICAgICAgICBzLT5wZW5kaW5nX291dCA9IHMtPnBl bmRpbmdfYnVmOwogICAgIH0KIH0KIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVcGRhdGUg dGhlIGhlYWRlciBDUkMgd2l0aCB0aGUgYnl0ZXMgcy0+cGVuZGluZ19idWZbYmVnLi5zLT5wZW5k aW5nIC0gMV0uCisgKi8KKyNkZWZpbmUgSENSQ19VUERBVEUoYmVnKSBcCisgICAgZG8geyBcCisg ICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMgJiYgcy0+cGVuZGluZyA+IChiZWcpKSBcCisgICAg ICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzLT5wZW5kaW5nX2J1ZiAr IChiZWcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnBlbmRpbmcgLSAo YmVnKSk7IFwKKyAgICB9IHdoaWxlICgwKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQg WkVYUE9SVCBkZWZsYXRlIChzdHJtLCBmbHVzaCkKICAgICB6X3N0cmVhbXAgc3RybTsKQEAgLTUy Nyw3MiArNzY3LDIxIEBACiAgICAgaW50IG9sZF9mbHVzaDsgLyogdmFsdWUgb2YgZmx1c2ggcGFy YW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqLwogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAK LSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8Ci0gICAg ICAgIGZsdXNoID4gWl9GSU5JU0ggfHwgZmx1c2ggPCAwKSB7CisgICAgaWYgKGRlZmxhdGVTdGF0 ZUNoZWNrKHN0cm0pIHx8IGZsdXNoID4gWl9CTE9DSyB8fCBmbHVzaCA8IDApIHsKICAgICAgICAg cmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIH0KICAgICBzID0gc3RybS0+c3RhdGU7CiAKICAg ICBpZiAoc3RybS0+bmV4dF9vdXQgPT0gWl9OVUxMIHx8Ci0gICAgICAgIChzdHJtLT5uZXh0X2lu ID09IFpfTlVMTCAmJiBzdHJtLT5hdmFpbF9pbiAhPSAwKSB8fAorICAgICAgICAoc3RybS0+YXZh aWxfaW4gIT0gMCAmJiBzdHJtLT5uZXh0X2luID09IFpfTlVMTCkgfHwKICAgICAgICAgKHMtPnN0 YXR1cyA9PSBGSU5JU0hfU1RBVEUgJiYgZmx1c2ggIT0gWl9GSU5JU0gpKSB7CiAgICAgICAgIEVS Ul9SRVRVUk4oc3RybSwgWl9TVFJFQU1fRVJST1IpOwogICAgIH0KICAgICBpZiAoc3RybS0+YXZh aWxfb3V0ID09IDApIEVSUl9SRVRVUk4oc3RybSwgWl9CVUZfRVJST1IpOwogCi0gICAgcy0+c3Ry bSA9IHN0cm07IC8qIGp1c3QgaW4gY2FzZSAqLwogICAgIG9sZF9mbHVzaCA9IHMtPmxhc3RfZmx1 c2g7CiAgICAgcy0+bGFzdF9mbHVzaCA9IGZsdXNoOwogCi0gICAgLyogV3JpdGUgdGhlIGhlYWRl ciAqLwotICAgIGlmIChzLT5zdGF0dXMgPT0gSU5JVF9TVEFURSkgewotI2lmZGVmIEdaSVAKLSAg ICAgICAgaWYgKHMtPndyYXAgPT0gMikgewotICAgICAgICAgICAgcHV0X2J5dGUocywgMzEpOwot ICAgICAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKLSAgICAgICAgICAgIHB1dF9ieXRlKHMsIDgp OwotICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7Ci0gICAgICAgICAgICBwdXRfYnl0ZShzLCAw KTsKLSAgICAgICAgICAgIHB1dF9ieXRlKHMsIDApOwotICAgICAgICAgICAgcHV0X2J5dGUocywg MCk7Ci0gICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgIHB1dF9ieXRlKHMs IHMtPmxldmVsID09IDkgPyAyIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIChzLT5zdHJhdGVn eSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8IDIgPwotICAgICAgICAgICAgICAgICAg ICAgICAgIDQgOiAwKSk7Ci0gICAgICAgICAgICBwdXRfYnl0ZShzLCAyNTUpOwotICAgICAgICAg ICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3Jj MzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAg ICAgIHsKLSAgICAgICAgICAgIHVJbnQgaGVhZGVyID0gKFpfREVGTEFURUQgKyAoKHMtPndfYml0 cy04KTw8NCkpIDw8IDg7Ci0gICAgICAgICAgICB1SW50IGxldmVsX2ZsYWdzOwotCi0gICAgICAg ICAgICBpZiAocy0+c3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy0+bGV2ZWwgPCAyKQot ICAgICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHMt PmxldmVsIDwgNikKLSAgICAgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDE7Ci0gICAgICAgICAg ICBlbHNlIGlmIChzLT5sZXZlbCA9PSA2KQotICAgICAgICAgICAgICAgIGxldmVsX2ZsYWdzID0g MjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDM7Ci0g ICAgICAgICAgICBoZWFkZXIgfD0gKGxldmVsX2ZsYWdzIDw8IDYpOwotICAgICAgICAgICAgaWYg KHMtPnN0cnN0YXJ0ICE9IDApIGhlYWRlciB8PSBQUkVTRVRfRElDVDsKLSAgICAgICAgICAgIGhl YWRlciArPSAzMSAtIChoZWFkZXIgJSAzMSk7Ci0KLSAgICAgICAgICAgIHMtPnN0YXR1cyA9IEJV U1lfU1RBVEU7Ci0gICAgICAgICAgICBwdXRTaG9ydE1TQihzLCBoZWFkZXIpOwotCi0gICAgICAg ICAgICAvKiBTYXZlIHRoZSBhZGxlcjMyIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeTogKi8KLSAg ICAgICAgICAgIGlmIChzLT5zdHJzdGFydCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcHV0U2hv cnRNU0IocywgKHVJbnQpKHN0cm0tPmFkbGVyID4+IDE2KSk7Ci0gICAgICAgICAgICAgICAgcHV0 U2hvcnRNU0IocywgKHVJbnQpKHN0cm0tPmFkbGVyICYgMHhmZmZmKSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAg ICAgIH0KLSAgICB9Ci0KICAgICAvKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBv c3NpYmxlICovCiAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgewogICAgICAgICBmbHVzaF9wZW5k aW5nKHN0cm0pOwpAQCAtNjExLDcgKzgwMCw3IEBACiAgICAgICogZmx1c2hlcy4gRm9yIHJlcGVh dGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXAKICAgICAgKiByZXR1 cm5pbmcgWl9TVFJFQU1fRU5EIGluc3RlYWQgb2YgWl9CVUZfRVJST1IuCiAgICAgICovCi0gICAg fSBlbHNlIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGZsdXNoIDw9IG9sZF9mbHVzaCAmJgor ICAgIH0gZWxzZSBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBSQU5LKGZsdXNoKSA8PSBSQU5L KG9sZF9mbHVzaCkgJiYKICAgICAgICAgICAgICAgIGZsdXNoICE9IFpfRklOSVNIKSB7CiAgICAg ICAgIEVSUl9SRVRVUk4oc3RybSwgWl9CVUZfRVJST1IpOwogICAgIH0KQEAgLTYyMSwxMyArODEw LDE5NyBAQAogICAgICAgICBFUlJfUkVUVVJOKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICB9CiAK KyAgICAvKiBXcml0ZSB0aGUgaGVhZGVyICovCisgICAgaWYgKHMtPnN0YXR1cyA9PSBJTklUX1NU QVRFKSB7CisgICAgICAgIC8qIHpsaWIgaGVhZGVyICovCisgICAgICAgIHVJbnQgaGVhZGVyID0g KFpfREVGTEFURUQgKyAoKHMtPndfYml0cy04KTw8NCkpIDw8IDg7CisgICAgICAgIHVJbnQgbGV2 ZWxfZmxhZ3M7CisKKyAgICAgICAgaWYgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8 IHMtPmxldmVsIDwgMikKKyAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMDsKKyAgICAgICAgZWxz ZSBpZiAocy0+bGV2ZWwgPCA2KQorICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAxOworICAgICAg ICBlbHNlIGlmIChzLT5sZXZlbCA9PSA2KQorICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyOwor ICAgICAgICBlbHNlCisgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDM7CisgICAgICAgIGhlYWRl ciB8PSAobGV2ZWxfZmxhZ3MgPDwgNik7CisgICAgICAgIGlmIChzLT5zdHJzdGFydCAhPSAwKSBo ZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7CisgICAgICAgIGhlYWRlciArPSAzMSAtIChoZWFkZXIgJSAz MSk7CisKKyAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKKworICAgICAgICAvKiBTYXZl IHRoZSBhZGxlcjMyIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeTogKi8KKyAgICAgICAgaWYgKHMt PnN0cnN0YXJ0ICE9IDApIHsKKyAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJt LT5hZGxlciA+PiAxNikpOworICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgKHVJbnQpKHN0cm0t PmFkbGVyICYgMHhmZmZmKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxl cjMyKDBMLCBaX05VTEwsIDApOworICAgICAgICBzLT5zdGF0dXMgPSBCVVNZX1NUQVRFOworCisg ICAgICAgIC8qIENvbXByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBwZW5kaW5nIGJ1 ZmZlciAqLworICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICBpZiAocy0+cGVu ZGluZyAhPSAwKSB7CisgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7CisgICAgICAgICAg ICByZXR1cm4gWl9PSzsKKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBHWklQCisgICAgaWYgKHMt PnN0YXR1cyA9PSBHWklQX1NUQVRFKSB7CisgICAgICAgIC8qIGd6aXAgaGVhZGVyICovCisgICAg ICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgIHB1dF9ieXRl KHMsIDMxKTsKKyAgICAgICAgcHV0X2J5dGUocywgMTM5KTsKKyAgICAgICAgcHV0X2J5dGUocywg OCk7CisgICAgICAgIGlmIChzLT5nemhlYWQgPT0gWl9OVUxMKSB7CisgICAgICAgICAgICBwdXRf Ynl0ZShzLCAwKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIDApOworICAgICAgICAgICAgcHV0 X2J5dGUocywgMCk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKKyAgICAgICAgICAgIHB1 dF9ieXRlKHMsIDApOworICAgICAgICAgICAgcHV0X2J5dGUocywgcy0+bGV2ZWwgPT0gOSA/IDIg OgorICAgICAgICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8 IHMtPmxldmVsIDwgMiA/CisgICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTsKKyAgICAgICAg ICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpOworICAgICAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9T VEFURTsKKworICAgICAgICAgICAgLyogQ29tcHJlc3Npb24gbXVzdCBzdGFydCB3aXRoIGFuIGVt cHR5IHBlbmRpbmcgYnVmZmVyICovCisgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwor ICAgICAgICAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgeworICAgICAgICAgICAgICAgIHMtPmxh c3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChz LT5nemhlYWQtPnRleHQgPyAxIDogMCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVh ZC0+aGNyYyA/IDIgOiAwKSArCisgICAgICAgICAgICAgICAgICAgICAocy0+Z3poZWFkLT5leHRy YSA9PSBaX05VTEwgPyAwIDogNCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+ bmFtZSA9PSBaX05VTEwgPyAwIDogOCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVh ZC0+Y29tbWVudCA9PSBaX05VTEwgPyAwIDogMTYpCisgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKHMtPmd6aGVhZC0+dGltZSAmIDB4ZmYpKTsK KyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDgpICYg MHhmZikpOworICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzLT5nemhlYWQtPnRpbWUg Pj4gMTYpICYgMHhmZikpOworICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzLT5nemhl YWQtPnRpbWUgPj4gMjQpICYgMHhmZikpOworICAgICAgICAgICAgcHV0X2J5dGUocywgcy0+bGV2 ZWwgPT0gOSA/IDIgOgorICAgICAgICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID49IFpfSFVG Rk1BTl9PTkxZIHx8IHMtPmxldmVsIDwgMiA/CisgICAgICAgICAgICAgICAgICAgICAgNCA6IDAp KTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6aGVhZC0+b3MgJiAweGZmKTsKKyAgICAg ICAgICAgIGlmIChzLT5nemhlYWQtPmV4dHJhICE9IFpfTlVMTCkgeworICAgICAgICAgICAgICAg IHB1dF9ieXRlKHMsIHMtPmd6aGVhZC0+ZXh0cmFfbGVuICYgMHhmZik7CisgICAgICAgICAgICAg ICAgcHV0X2J5dGUocywgKHMtPmd6aGVhZC0+ZXh0cmFfbGVuID4+IDgpICYgMHhmZik7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjKQorICAgICAgICAgICAg ICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHMtPnBlbmRpbmdfYnVmLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cGVuZGluZyk7CisgICAgICAgICAg ICBzLT5nemluZGV4ID0gMDsKKyAgICAgICAgICAgIHMtPnN0YXR1cyA9IEVYVFJBX1NUQVRFOwor ICAgICAgICB9CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gRVhUUkFfU1RBVEUpIHsKKyAg ICAgICAgaWYgKHMtPmd6aGVhZC0+ZXh0cmEgIT0gWl9OVUxMKSB7CisgICAgICAgICAgICB1bGcg YmVnID0gcy0+cGVuZGluZzsgICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovCisg ICAgICAgICAgICB1SW50IGxlZnQgPSAocy0+Z3poZWFkLT5leHRyYV9sZW4gJiAweGZmZmYpIC0g cy0+Z3ppbmRleDsKKyAgICAgICAgICAgIHdoaWxlIChzLT5wZW5kaW5nICsgbGVmdCA+IHMtPnBl bmRpbmdfYnVmX3NpemUpIHsKKyAgICAgICAgICAgICAgICB1SW50IGNvcHkgPSBzLT5wZW5kaW5n X2J1Zl9zaXplIC0gcy0+cGVuZGluZzsKKyAgICAgICAgICAgICAgICB6bWVtY3B5KHMtPnBlbmRp bmdfYnVmICsgcy0+cGVuZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmd6aGVhZC0+ ZXh0cmEgKyBzLT5nemluZGV4LCBjb3B5KTsKKyAgICAgICAgICAgICAgICBzLT5wZW5kaW5nID0g cy0+cGVuZGluZ19idWZfc2l6ZTsKKyAgICAgICAgICAgICAgICBIQ1JDX1VQREFURShiZWcpOwor ICAgICAgICAgICAgICAgIHMtPmd6aW5kZXggKz0gY29weTsKKyAgICAgICAgICAgICAgICBmbHVz aF9wZW5kaW5nKHN0cm0pOworICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsK KyAgICAgICAgICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmVn ID0gMDsKKyAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICB6bWVtY3B5KHMtPnBlbmRpbmdfYnVmICsgcy0+cGVuZGluZywKKyAgICAgICAgICAg ICAgICAgICAgcy0+Z3poZWFkLT5leHRyYSArIHMtPmd6aW5kZXgsIGxlZnQpOworICAgICAgICAg ICAgcy0+cGVuZGluZyArPSBsZWZ0OworICAgICAgICAgICAgSENSQ19VUERBVEUoYmVnKTsKKyAg ICAgICAgICAgIHMtPmd6aW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIHMtPnN0YXR1cyA9 IE5BTUVfU1RBVEU7CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gTkFNRV9TVEFURSkgewor ICAgICAgICBpZiAocy0+Z3poZWFkLT5uYW1lICE9IFpfTlVMTCkgeworICAgICAgICAgICAgdWxn IGJlZyA9IHMtPnBlbmRpbmc7ICAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwor ICAgICAgICAgICAgaW50IHZhbDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBp ZiAocy0+cGVuZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7CisgICAgICAgICAgICAgICAg ICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAgICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmco c3RybSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBaX09LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIGJlZyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbCA9 IHMtPmd6aGVhZC0+bmFtZVtzLT5nemluZGV4KytdOworICAgICAgICAgICAgICAgIHB1dF9ieXRl KHMsIHZhbCk7CisgICAgICAgICAgICB9IHdoaWxlICh2YWwgIT0gMCk7CisgICAgICAgICAgICBI Q1JDX1VQREFURShiZWcpOworICAgICAgICAgICAgcy0+Z3ppbmRleCA9IDA7CisgICAgICAgIH0K KyAgICAgICAgcy0+c3RhdHVzID0gQ09NTUVOVF9TVEFURTsKKyAgICB9CisgICAgaWYgKHMtPnN0 YXR1cyA9PSBDT01NRU5UX1NUQVRFKSB7CisgICAgICAgIGlmIChzLT5nemhlYWQtPmNvbW1lbnQg IT0gWl9OVUxMKSB7CisgICAgICAgICAgICB1bGcgYmVnID0gcy0+cGVuZGluZzsgICAvKiBzdGFy dCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovCisgICAgICAgICAgICBpbnQgdmFsOworICAgICAg ICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChzLT5wZW5kaW5nID09IHMtPnBlbmRpbmdf YnVmX3NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgSENSQ19VUERBVEUoYmVnKTsKKyAgICAg ICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKHMtPnBlbmRpbmcgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy0+bGFzdF9m bHVzaCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYmVnID0gMDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgdmFsID0gcy0+Z3poZWFkLT5jb21tZW50W3MtPmd6aW5k ZXgrK107CisgICAgICAgICAgICAgICAgcHV0X2J5dGUocywgdmFsKTsKKyAgICAgICAgICAgIH0g d2hpbGUgKHZhbCAhPSAwKTsKKyAgICAgICAgICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAg IH0KKyAgICAgICAgcy0+c3RhdHVzID0gSENSQ19TVEFURTsKKyAgICB9CisgICAgaWYgKHMtPnN0 YXR1cyA9PSBIQ1JDX1NUQVRFKSB7CisgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMpIHsKKyAg ICAgICAgICAgIGlmIChzLT5wZW5kaW5nICsgMiA+IHMtPnBlbmRpbmdfYnVmX3NpemUpIHsKKyAg ICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICAgICAgICAgIGlmIChz LT5wZW5kaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0x OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gWl9PSzsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoc3RybS0+YWRsZXIg JiAweGZmKSk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHN0cm0tPmFkbGVyID4+ IDgpICYgMHhmZikpOworICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMigwTCwgWl9OVUxM LCAwKTsKKyAgICAgICAgfQorICAgICAgICBzLT5zdGF0dXMgPSBCVVNZX1NUQVRFOworCisgICAg ICAgIC8qIENvbXByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBwZW5kaW5nIGJ1ZmZl ciAqLworICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAgICAgICBpZiAocy0+cGVuZGlu ZyAhPSAwKSB7CisgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7CisgICAgICAgICAgICBy ZXR1cm4gWl9PSzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgLyogU3RhcnQgYSBu ZXcgYmxvY2sgb3IgY29udGludWUgdGhlIGN1cnJlbnQgb25lLgogICAgICAqLwogICAgIGlmIChz dHJtLT5hdmFpbF9pbiAhPSAwIHx8IHMtPmxvb2thaGVhZCAhPSAwIHx8CiAgICAgICAgIChmbHVz aCAhPSBaX05PX0ZMVVNIICYmIHMtPnN0YXR1cyAhPSBGSU5JU0hfU1RBVEUpKSB7CiAgICAgICAg IGJsb2NrX3N0YXRlIGJzdGF0ZTsKIAotICAgICAgICBic3RhdGUgPSAoKihjb25maWd1cmF0aW9u X3RhYmxlW3MtPmxldmVsXS5mdW5jKSkocywgZmx1c2gpOworICAgICAgICBic3RhdGUgPSBzLT5s ZXZlbCA9PSAwID8gZGVmbGF0ZV9zdG9yZWQocywgZmx1c2gpIDoKKyAgICAgICAgICAgICAgICAg cy0+c3RyYXRlZ3kgPT0gWl9IVUZGTUFOX09OTFkgPyBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIDoK KyAgICAgICAgICAgICAgICAgcy0+c3RyYXRlZ3kgPT0gWl9STEUgPyBkZWZsYXRlX3JsZShzLCBm bHVzaCkgOgorICAgICAgICAgICAgICAgICAoKihjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVs XS5mdW5jKSkocywgZmx1c2gpOwogCiAgICAgICAgIGlmIChic3RhdGUgPT0gZmluaXNoX3N0YXJ0 ZWQgfHwgYnN0YXRlID09IGZpbmlzaF9kb25lKSB7CiAgICAgICAgICAgICBzLT5zdGF0dXMgPSBG SU5JU0hfU1RBVEU7CkBAIC02NDgsMTMgKzEwMjEsMTggQEAKICAgICAgICAgaWYgKGJzdGF0ZSA9 PSBibG9ja19kb25lKSB7CiAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9QQVJUSUFMX0ZMVVNI KSB7CiAgICAgICAgICAgICAgICAgX3RyX2FsaWduKHMpOwotICAgICAgICAgICAgfSBlbHNlIHsg LyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGZs dXNoICE9IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovCiAgICAgICAg ICAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCAoY2hhciopMCwgMEwsIDApOwogICAgICAgICAg ICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNv Z25pemVkCiAgICAgICAgICAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZsYXRl X3N5bmMoKS4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAoZmx1c2gg PT0gWl9GVUxMX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgICAgIENMRUFSX0hBU0gocyk7ICAg ICAgICAgICAgIC8qIGZvcmdldCBoaXN0b3J5ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChz LT5sb29rYWhlYWQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3Ryc3RhcnQg PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmbHVzaF9wZW5k aW5nKHN0cm0pOwpAQCAtNjY0LDcgKzEwNDIsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9 CiAgICAgfQotICAgIEFzc2VydChzdHJtLT5hdmFpbF9vdXQgPiAwLCAiYnVnMiIpOwogCiAgICAg aWYgKGZsdXNoICE9IFpfRklOSVNIKSByZXR1cm4gWl9PSzsKICAgICBpZiAocy0+d3JhcCA8PSAw KSByZXR1cm4gWl9TVFJFQU1fRU5EOwpAQCAtNzAxLDEzICsxMDc4LDkgQEAKIHsKICAgICBpbnQg c3RhdHVzOwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVM TCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJt KSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCiAgICAgc3RhdHVzID0gc3RybS0+c3RhdGUtPnN0 YXR1czsKLSAgICBpZiAoc3RhdHVzICE9IElOSVRfU1RBVEUgJiYgc3RhdHVzICE9IEJVU1lfU1RB VEUgJiYKLSAgICAgICAgc3RhdHVzICE9IEZJTklTSF9TVEFURSkgewotICAgICAgcmV0dXJuIFpf U1RSRUFNX0VSUk9SOwotICAgIH0KIAogICAgIC8qIERlYWxsb2NhdGUgaW4gcmV2ZXJzZSBvcmRl ciBvZiBhbGxvY2F0aW9uczogKi8KICAgICBUUllfRlJFRShzdHJtLCBzdHJtLT5zdGF0ZS0+cGVu ZGluZ19idWYpOwpAQCAtNzM4LDE4ICsxMTExLDE4IEBACiAgICAgdXNoZiAqb3ZlcmxheTsKIAog Ci0gICAgaWYgKHNvdXJjZSA9PSBaX05VTEwgfHwgZGVzdCA9PSBaX05VTEwgfHwgc291cmNlLT5z dGF0ZSA9PSBaX05VTEwpIHsKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc291cmNlKSB8fCBk ZXN0ID09IFpfTlVMTCkgewogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgfQog CiAgICAgc3MgPSBzb3VyY2UtPnN0YXRlOwogCi0gICAgKmRlc3QgPSAqc291cmNlOworICAgIHpt ZW1jcHkoKHZvaWRwZilkZXN0LCAodm9pZHBmKXNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CiAK ICAgICBkcyA9IChkZWZsYXRlX3N0YXRlICopIFpBTExPQyhkZXN0LCAxLCBzaXplb2YoZGVmbGF0 ZV9zdGF0ZSkpOwogICAgIGlmIChkcyA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKICAg ICBkZXN0LT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopIGRzOwotICAgICpk cyA9ICpzczsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMsICh2b2lkcGYpc3MsIHNpemVvZihkZWZs YXRlX3N0YXRlKSk7CiAgICAgZHMtPnN0cm0gPSBkZXN0OwogCiAgICAgZHMtPndpbmRvdyA9IChC eXRlZiAqKSBaQUxMT0MoZGVzdCwgZHMtPndfc2l6ZSwgMipzaXplb2YoQnl0ZSkpOwpAQCAtNzY1 LDggKzExMzgsOCBAQAogICAgIH0KICAgICAvKiBmb2xsb3dpbmcgem1lbWNweSBkbyBub3Qgd29y ayBmb3IgMTYtYml0IE1TRE9TICovCiAgICAgem1lbWNweShkcy0+d2luZG93LCBzcy0+d2luZG93 LCBkcy0+d19zaXplICogMiAqIHNpemVvZihCeXRlKSk7Ci0gICAgem1lbWNweShkcy0+cHJldiwg c3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7Ci0gICAgem1lbWNweShkcy0+aGVh ZCwgc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgo dm9pZHBmKWRzLT5wcmV2LCAodm9pZHBmKXNzLT5wcmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBv cykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+aGVhZCwgKHZvaWRwZilzcy0+aGVhZCwgZHMt Pmhhc2hfc2l6ZSAqIHNpemVvZihQb3MpKTsKICAgICB6bWVtY3B5KGRzLT5wZW5kaW5nX2J1Ziwg c3MtPnBlbmRpbmdfYnVmLCAodUludClkcy0+cGVuZGluZ19idWZfc2l6ZSk7CiAKICAgICBkcy0+ cGVuZGluZ19vdXQgPSBkcy0+cGVuZGluZ19idWYgKyAoc3MtPnBlbmRpbmdfb3V0IC0gc3MtPnBl bmRpbmdfYnVmKTsKQEAgLTc4OCw3ICsxMTYxLDcgQEAKICAqIGFsbG9jYXRpbmcgYSBsYXJnZSBz dHJtLT5uZXh0X2luIGJ1ZmZlciBhbmQgY29weWluZyBmcm9tIGl0LgogICogKFNlZSBhbHNvIGZs dXNoX3BlbmRpbmcoKSkuCiAgKi8KLWxvY2FsIGludCByZWFkX2J1ZihzdHJtLCBidWYsIHNpemUp Citsb2NhbCB1bnNpZ25lZCByZWFkX2J1ZihzdHJtLCBidWYsIHNpemUpCiAgICAgel9zdHJlYW1w IHN0cm07CiAgICAgQnl0ZWYgKmJ1ZjsKICAgICB1bnNpZ25lZCBzaXplOwpAQCAtODAwLDE5ICsx MTczLDE5IEBACiAKICAgICBzdHJtLT5hdmFpbF9pbiAgLT0gbGVuOwogCisgICAgem1lbWNweShi dWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgICAgaWYgKHN0cm0tPnN0YXRlLT53cmFwID09IDEp IHsKLSAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBzdHJtLT5uZXh0 X2luLCBsZW4pOworICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIGJ1 ZiwgbGVuKTsKICAgICB9CiAjaWZkZWYgR1pJUAogICAgIGVsc2UgaWYgKHN0cm0tPnN0YXRlLT53 cmFwID09IDIpIHsKLSAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgc3Ry bS0+bmV4dF9pbiwgbGVuKTsKKyAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxl ciwgYnVmLCBsZW4pOwogICAgIH0KICNlbmRpZgotICAgIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0 X2luLCBsZW4pOwogICAgIHN0cm0tPm5leHRfaW4gICs9IGxlbjsKICAgICBzdHJtLT50b3RhbF9p biArPSBsZW47CiAKLSAgICByZXR1cm4gKGludClsZW47CisgICAgcmV0dXJuIGxlbjsKIH0KIAog LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CkBAIC04MzUsMTIgKzEyMDgsMTUgQEAKICAgICBzLT5zdHJz dGFydCA9IDA7CiAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKICAgICBzLT5sb29rYWhlYWQgPSAw OworICAgIHMtPmluc2VydCA9IDA7CiAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5n dGggPSBNSU5fTUFUQ0gtMTsKICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgIHMtPmlu c19oID0gMDsKKyNpZm5kZWYgRkFTVEVTVAogI2lmZGVmIEFTTVYKICAgICBtYXRjaF9pbml0KCk7 IC8qIGluaXRpYWxpemUgdGhlIGFzbSBjb2RlICovCiAjZW5kaWYKKyNlbmRpZgogfQogCiAjaWZu ZGVmIEZBU1RFU1QKQEAgLTg2Myw5ICsxMjM5LDkgQEAKIHsKICAgICB1bnNpZ25lZCBjaGFpbl9s ZW5ndGggPSBzLT5tYXhfY2hhaW5fbGVuZ3RoOy8qIG1heCBoYXNoIGNoYWluIGxlbmd0aCAqLwog ICAgIHJlZ2lzdGVyIEJ5dGVmICpzY2FuID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQ7IC8qIGN1 cnJlbnQgc3RyaW5nICovCi0gICAgcmVnaXN0ZXIgQnl0ZWYgKm1hdGNoOyAgICAgICAgICAgICAg ICAgICAgICAgLyogbWF0Y2hlZCBzdHJpbmcgKi8KKyAgICByZWdpc3RlciBCeXRlZiAqbWF0Y2g7 ICAgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoZWQgc3RyaW5nICovCiAgICAgcmVnaXN0ZXIg aW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBt YXRjaCAqLwotICAgIGludCBiZXN0X2xlbiA9IHMtPnByZXZfbGVuZ3RoOyAgICAgICAgICAgICAg LyogYmVzdCBtYXRjaCBsZW5ndGggc28gZmFyICovCisgICAgaW50IGJlc3RfbGVuID0gKGludClz LT5wcmV2X2xlbmd0aDsgICAgICAgICAvKiBiZXN0IG1hdGNoIGxlbmd0aCBzbyBmYXIgKi8KICAg ICBpbnQgbmljZV9tYXRjaCA9IHMtPm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYg bWF0Y2ggbG9uZyBlbm91Z2ggKi8KICAgICBJUG9zIGxpbWl0ID0gcy0+c3Ryc3RhcnQgPiAoSVBv cylNQVhfRElTVChzKSA/CiAgICAgICAgIHMtPnN0cnN0YXJ0IC0gKElQb3MpTUFYX0RJU1Qocykg OiBOSUw7CkBAIC05MDAsNyArMTI3Niw3IEBACiAgICAgLyogRG8gbm90IGxvb2sgZm9yIG1hdGNo ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0LiBUaGlzIGlzIG5lY2Vzc2FyeQogICAgICAq IHRvIG1ha2UgZGVmbGF0ZSBkZXRlcm1pbmlzdGljLgogICAgICAqLwotICAgIGlmICgodUludClu aWNlX21hdGNoID4gcy0+bG9va2FoZWFkKSBuaWNlX21hdGNoID0gcy0+bG9va2FoZWFkOworICAg IGlmICgodUludCluaWNlX21hdGNoID4gcy0+bG9va2FoZWFkKSBuaWNlX21hdGNoID0gKGludClz LT5sb29rYWhlYWQ7CiAKICAgICBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3df c2l6ZS1NSU5fTE9PS0FIRUFELCAibmVlZCBsb29rYWhlYWQiKTsKIApAQCAtOTA5LDcgKzEyODUs MTIgQEAKICAgICAgICAgbWF0Y2ggPSBzLT53aW5kb3cgKyBjdXJfbWF0Y2g7CiAKICAgICAgICAg LyogU2tpcCB0byBuZXh0IG1hdGNoIGlmIHRoZSBtYXRjaCBsZW5ndGggY2Fubm90IGluY3JlYXNl Ci0gICAgICAgICAqIG9yIGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbGVzcyB0aGFuIDI6CisgICAg ICAgICAqIG9yIGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbGVzcyB0aGFuIDIuICBOb3RlIHRoYXQg dGhlIGNoZWNrcyBiZWxvdworICAgICAgICAgKiBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBv bmx5IG9jY3VyIG9jY2FzaW9uYWxseSBmb3IgcGVyZm9ybWFuY2UKKyAgICAgICAgICogcmVhc29u cy4gIFRoZXJlZm9yZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aWxsIGJlIGFjY2Vzc2VkLCBhbmQK KyAgICAgICAgICogY29uZGl0aW9uYWwganVtcHMgd2lsbCBiZSBtYWRlIHRoYXQgZGVwZW5kIG9u IHRob3NlIHZhbHVlcy4KKyAgICAgICAgICogSG93ZXZlciB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRj aCBpcyBsaW1pdGVkIHRvIHRoZSBsb29rYWhlYWQsIHNvCisgICAgICAgICAqIHRoZSBvdXRwdXQg b2YgZGVmbGF0ZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgog ICAgICAgICAgKi8KICNpZiAoZGVmaW5lZChVTkFMSUdORURfT0spICYmIE1BWF9NQVRDSCA9PSAy NTgpCiAgICAgICAgIC8qIFRoaXMgY29kZSBhc3N1bWVzIHNpemVvZih1bnNpZ25lZCBzaG9ydCkg PT0gMi4gRG8gbm90IHVzZQpAQCAtOTk1LDEyICsxMzc2LDEzIEBACiAgICAgcmV0dXJuIHMtPmxv b2thaGVhZDsKIH0KICNlbmRpZiAvKiBBU01WICovCi0jZW5kaWYgLyogRkFTVEVTVCAqLworCisj ZWxzZSAvKiBGQVNURVNUICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT3B0aW1pemVk IHZlcnNpb24gZm9yIGxldmVsID09IDEgb3Igc3RyYXRlZ3kgPT0gWl9STEUgb25seQorICogT3B0 aW1pemVkIHZlcnNpb24gZm9yIEZBU1RFU1Qgb25seQogICovCi1sb2NhbCB1SW50IGxvbmdlc3Rf bWF0Y2hfZmFzdChzLCBjdXJfbWF0Y2gpCitsb2NhbCB1SW50IGxvbmdlc3RfbWF0Y2gocywgY3Vy X21hdGNoKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgSVBvcyBjdXJfbWF0Y2g7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG1hdGNoICovCiB7CkBAIC0xMDUzLDcg KzE0MzUsMTMgQEAKICAgICByZXR1cm4gKHVJbnQpbGVuIDw9IHMtPmxvb2thaGVhZCA/ICh1SW50 KWxlbiA6IHMtPmxvb2thaGVhZDsKIH0KIAotI2lmZGVmIERFQlVHCisjZW5kaWYgLyogRkFTVEVT VCAqLworCisjaWZkZWYgWkxJQl9ERUJVRworCisjZGVmaW5lIEVRVUFMIDAKKy8qIHJlc3VsdCBv ZiBtZW1jbXAgZm9yIGVxdWFsIHN0cmluZ3MgKi8KKwogLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAg KiBDaGVjayB0aGF0IHRoZSBtYXRjaCBhdCBtYXRjaF9zdGFydCBpcyBpbmRlZWQgYSBtYXRjaC4K ICAqLwpAQCAtMTA3OSw3ICsxNDY3LDcgQEAKIH0KICNlbHNlCiAjICBkZWZpbmUgY2hlY2tfbWF0 Y2gocywgc3RhcnQsIG1hdGNoLCBsZW5ndGgpCi0jZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAv KiBaTElCX0RFQlVHICovCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogRmlsbCB0aGUgd2lu ZG93IHdoZW4gdGhlIGxvb2thaGVhZCBiZWNvbWVzIGluc3VmZmljaWVudC4KQEAgLTEwOTQsMTEg KzE0ODIsMTIgQEAKIGxvY2FsIHZvaWQgZmlsbF93aW5kb3cocykKICAgICBkZWZsYXRlX3N0YXRl ICpzOwogewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIG4sIG07Ci0gICAgcmVnaXN0ZXIgUG9zZiAq cDsKKyAgICB1bnNpZ25lZCBuOwogICAgIHVuc2lnbmVkIG1vcmU7ICAgIC8qIEFtb3VudCBvZiBm cmVlIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4gKi8KICAgICB1SW50IHdzaXplID0g cy0+d19zaXplOwogCisgICAgQXNzZXJ0KHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQsICJh bHJlYWR5IGVub3VnaCBsb29rYWhlYWQiKTsKKwogICAgIGRvIHsKICAgICAgICAgbW9yZSA9ICh1 bnNpZ25lZCkocy0+d2luZG93X3NpemUgLSh1bGcpcy0+bG9va2FoZWFkIC0odWxnKXMtPnN0cnN0 YXJ0KTsKIApAQCAtMTEyMCwzOCArMTUwOSwxNCBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYg KHMtPnN0cnN0YXJ0ID49IHdzaXplK01BWF9ESVNUKHMpKSB7CiAKLSAgICAgICAgICAgIHptZW1j cHkocy0+d2luZG93LCBzLT53aW5kb3crd3NpemUsICh1bnNpZ25lZCl3c2l6ZSk7CisgICAgICAg ICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93K3dzaXplLCAodW5zaWduZWQpd3NpemUg LSBtb3JlKTsKICAgICAgICAgICAgIHMtPm1hdGNoX3N0YXJ0IC09IHdzaXplOwogICAgICAgICAg ICAgcy0+c3Ryc3RhcnQgICAgLT0gd3NpemU7IC8qIHdlIG5vdyBoYXZlIHN0cnN0YXJ0ID49IE1B WF9ESVNUICovCiAgICAgICAgICAgICBzLT5ibG9ja19zdGFydCAtPSAobG9uZykgd3NpemU7Ci0K LSAgICAgICAgICAgIC8qIFNsaWRlIHRoZSBoYXNoIHRhYmxlIChjb3VsZCBiZSBhdm9pZGVkIHdp dGggMzIgYml0IHZhbHVlcwotICAgICAgICAgICAgICAgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5 IHVzYWdlKS4gV2Ugc2xpZGUgZXZlbiB3aGVuIGxldmVsID09IDAKLSAgICAgICAgICAgICAgIHRv IGtlZXAgdGhlIGhhc2ggdGFibGUgY29uc2lzdGVudCBpZiB3ZSBzd2l0Y2ggYmFjayB0byBsZXZl bCA+IDAKLSAgICAgICAgICAgICAgIGxhdGVyLiAoVXNpbmcgbGV2ZWwgMCBwZXJtYW5lbnRseSBp cyBub3QgYW4gb3B0aW1hbCB1c2FnZSBvZgotICAgICAgICAgICAgICAgemxpYiwgc28gd2UgZG9u J3QgY2FyZSBhYm91dCB0aGlzIHBhdGhvbG9naWNhbCBjYXNlLikKLSAgICAgICAgICAgICAqLwot ICAgICAgICAgICAgbiA9IHMtPmhhc2hfc2l6ZTsKLSAgICAgICAgICAgIHAgPSAmcy0+aGVhZFtu XTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBtID0gKi0tcDsKLSAgICAgICAg ICAgICAgICAqcCA9IChQb3MpKG0gPj0gd3NpemUgPyBtLXdzaXplIDogTklMKTsKLSAgICAgICAg ICAgIH0gd2hpbGUgKC0tbik7Ci0KLSAgICAgICAgICAgIG4gPSB3c2l6ZTsKLSNpZm5kZWYgRkFT VEVTVAotICAgICAgICAgICAgcCA9ICZzLT5wcmV2W25dOwotICAgICAgICAgICAgZG8gewotICAg ICAgICAgICAgICAgIG0gPSAqLS1wOwotICAgICAgICAgICAgICAgICpwID0gKFBvcykobSA+PSB3 c2l6ZSA/IG0td3NpemUgOiBOSUwpOwotICAgICAgICAgICAgICAgIC8qIElmIG4gaXMgbm90IG9u IGFueSBoYXNoIGNoYWluLCBwcmV2W25dIGlzIGdhcmJhZ2UgYnV0Ci0gICAgICAgICAgICAgICAg ICogaXRzIHZhbHVlIHdpbGwgbmV2ZXIgYmUgdXNlZC4KLSAgICAgICAgICAgICAgICAgKi8KLSAg ICAgICAgICAgIH0gd2hpbGUgKC0tbik7Ci0jZW5kaWYKKyAgICAgICAgICAgIHNsaWRlX2hhc2go cyk7CiAgICAgICAgICAgICBtb3JlICs9IHdzaXplOwogICAgICAgICB9Ci0gICAgICAgIGlmIChz LT5zdHJtLT5hdmFpbF9pbiA9PSAwKSByZXR1cm47CisgICAgICAgIGlmIChzLT5zdHJtLT5hdmFp bF9pbiA9PSAwKSBicmVhazsKIAogICAgICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzoK ICAgICAgICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQg PD0gTUlOX0xPT0tBSEVBRCAtIDEgJiYKQEAgLTExNzAsOTkgKzE1MzUsMjgzIEBACiAgICAgICAg IHMtPmxvb2thaGVhZCArPSBuOwogCiAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGhhc2ggdmFs dWUgbm93IHRoYXQgd2UgaGF2ZSBzb21lIGlucHV0OiAqLwotICAgICAgICBpZiAocy0+bG9va2Fo ZWFkID49IE1JTl9NQVRDSCkgewotICAgICAgICAgICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbcy0+ c3Ryc3RhcnRdOwotICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRv d1tzLT5zdHJzdGFydCsxXSk7CisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgKyBzLT5pbnNlcnQg Pj0gTUlOX01BVENIKSB7CisgICAgICAgICAgICB1SW50IHN0ciA9IHMtPnN0cnN0YXJ0IC0gcy0+ aW5zZXJ0OworICAgICAgICAgICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbc3RyXTsKKyAgICAgICAg ICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgMV0pOwogI2lmIE1J Tl9NQVRDSCAhPSAzCiAgICAgICAgICAgICBDYWxsIFVQREFURV9IQVNIKCkgTUlOX01BVENILTMg bW9yZSB0aW1lcwogI2VuZGlmCisgICAgICAgICAgICB3aGlsZSAocy0+aW5zZXJ0KSB7CisgICAg ICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5f TUFUQ0gtMV0pOworI2lmbmRlZiBGQVNURVNUCisgICAgICAgICAgICAgICAgcy0+cHJldltzdHIg JiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNfaF07CisjZW5kaWYKKyAgICAgICAgICAgICAg ICBzLT5oZWFkW3MtPmluc19oXSA9IChQb3Mpc3RyOworICAgICAgICAgICAgICAgIHN0cisrOwor ICAgICAgICAgICAgICAgIHMtPmluc2VydC0tOworICAgICAgICAgICAgICAgIGlmIChzLT5sb29r YWhlYWQgKyBzLT5pbnNlcnQgPCBNSU5fTUFUQ0gpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qIElmIHRoZSB3aG9sZSBpbnB1 dCBoYXMgbGVzcyB0aGFuIE1JTl9NQVRDSCBieXRlcywgaW5zX2ggaXMgZ2FyYmFnZSwKICAgICAg ICAgICogYnV0IHRoaXMgaXMgbm90IGltcG9ydGFudCBzaW5jZSBvbmx5IGxpdGVyYWwgYnl0ZXMg d2lsbCBiZSBlbWl0dGVkLgogICAgICAgICAgKi8KIAogICAgIH0gd2hpbGUgKHMtPmxvb2thaGVh ZCA8IE1JTl9MT09LQUhFQUQgJiYgcy0+c3RybS0+YXZhaWxfaW4gIT0gMCk7CisKKyAgICAvKiBJ ZiB0aGUgV0lOX0lOSVQgYnl0ZXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBkYXRhIGhh dmUgbmV2ZXIgYmVlbgorICAgICAqIHdyaXR0ZW4sIHRoZW4gemVybyB0aG9zZSBieXRlcyBpbiBv cmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgcmVwb3J0cyBvZgorICAgICAqIHRoZSB1c2Ugb2Yg dW5pbml0aWFsaXplZCAob3IgdW5pbml0aWFsaXNlZCBhcyBKdWxpYW4gd3JpdGVzKSBieXRlcyBi eQorICAgICAqIHRoZSBsb25nZXN0IG1hdGNoIHJvdXRpbmVzLiAgVXBkYXRlIHRoZSBoaWdoIHdh dGVyIG1hcmsgZm9yIHRoZSBuZXh0CisgICAgICogdGltZSB0aHJvdWdoIGhlcmUuICBXSU5fSU5J VCBpcyBzZXQgdG8gTUFYX01BVENIIHNpbmNlIHRoZSBsb25nZXN0IG1hdGNoCisgICAgICogcm91 dGluZXMgYWxsb3cgc2Nhbm5pbmcgdG8gc3Ryc3RhcnQgKyBNQVhfTUFUQ0gsIGlnbm9yaW5nIGxv b2thaGVhZC4KKyAgICAgKi8KKyAgICBpZiAocy0+aGlnaF93YXRlciA8IHMtPndpbmRvd19zaXpl KSB7CisgICAgICAgIHVsZyBjdXJyID0gcy0+c3Ryc3RhcnQgKyAodWxnKShzLT5sb29rYWhlYWQp OworICAgICAgICB1bGcgaW5pdDsKKworICAgICAgICBpZiAocy0+aGlnaF93YXRlciA8IGN1cnIp IHsKKyAgICAgICAgICAgIC8qIFByZXZpb3VzIGhpZ2ggd2F0ZXIgbWFyayBiZWxvdyBjdXJyZW50 IGRhdGEgLS0gemVybyBXSU5fSU5JVAorICAgICAgICAgICAgICogYnl0ZXMgb3IgdXAgdG8gZW5k IG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuCisgICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgIGluaXQgPSBzLT53aW5kb3dfc2l6ZSAtIGN1cnI7CisgICAgICAgICAgICBpZiAoaW5pdCA+ IFdJTl9JTklUKQorICAgICAgICAgICAgICAgIGluaXQgPSBXSU5fSU5JVDsKKyAgICAgICAgICAg IHptZW16ZXJvKHMtPndpbmRvdyArIGN1cnIsICh1bnNpZ25lZClpbml0KTsKKyAgICAgICAgICAg IHMtPmhpZ2hfd2F0ZXIgPSBjdXJyICsgaW5pdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm IChzLT5oaWdoX3dhdGVyIDwgKHVsZyljdXJyICsgV0lOX0lOSVQpIHsKKyAgICAgICAgICAgIC8q IEhpZ2ggd2F0ZXIgbWFyayBhdCBvciBhYm92ZSBjdXJyZW50IGRhdGEsIGJ1dCBiZWxvdyBjdXJy ZW50IGRhdGEKKyAgICAgICAgICAgICAqIHBsdXMgV0lOX0lOSVQgLS0gemVybyBvdXQgdG8gY3Vy cmVudCBkYXRhIHBsdXMgV0lOX0lOSVQsIG9yIHVwCisgICAgICAgICAgICAgKiB0byBlbmQgb2Yg d2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg aW5pdCA9ICh1bGcpY3VyciArIFdJTl9JTklUIC0gcy0+aGlnaF93YXRlcjsKKyAgICAgICAgICAg IGlmIChpbml0ID4gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyKQorICAgICAgICAgICAg ICAgIGluaXQgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXI7CisgICAgICAgICAgICB6 bWVtemVybyhzLT53aW5kb3cgKyBzLT5oaWdoX3dhdGVyLCAodW5zaWduZWQpaW5pdCk7CisgICAg ICAgICAgICBzLT5oaWdoX3dhdGVyICs9IGluaXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBB c3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQs CisgICAgICAgICAgICJub3QgZW5vdWdoIHJvb20gZm9yIHNlYXJjaCIpOwogfQogCiAvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KICAqIEZsdXNoIHRoZSBjdXJyZW50IGJsb2NrLCB3aXRoIGdpdmVuIGVu ZC1vZi1maWxlIGZsYWcuCiAgKiBJTiBhc3NlcnRpb246IHN0cnN0YXJ0IGlzIHNldCB0byB0aGUg ZW5kIG9mIHRoZSBjdXJyZW50IG1hdGNoLgogICovCi0jZGVmaW5lIEZMVVNIX0JMT0NLX09OTFko cywgZW9mKSB7IFwKKyNkZWZpbmUgRkxVU0hfQkxPQ0tfT05MWShzLCBsYXN0KSB7IFwKICAgIF90 cl9mbHVzaF9ibG9jayhzLCAocy0+YmxvY2tfc3RhcnQgPj0gMEwgPyBcCiAgICAgICAgICAgICAg ICAgICAgKGNoYXJmICopJnMtPndpbmRvd1sodW5zaWduZWQpcy0+YmxvY2tfc3RhcnRdIDogXAog ICAgICAgICAgICAgICAgICAgIChjaGFyZiAqKVpfTlVMTCksIFwKICAgICAgICAgICAgICAgICAo dWxnKSgobG9uZylzLT5zdHJzdGFydCAtIHMtPmJsb2NrX3N0YXJ0KSwgXAotICAgICAgICAgICAg ICAgIChlb2YpKTsgXAorICAgICAgICAgICAgICAgIChsYXN0KSk7IFwKICAgIHMtPmJsb2NrX3N0 YXJ0ID0gcy0+c3Ryc3RhcnQ7IFwKICAgIGZsdXNoX3BlbmRpbmcocy0+c3RybSk7IFwKICAgIFRy YWNldigoc3RkZXJyLCJbRkxVU0hdIikpOyBcCiB9CiAKIC8qIFNhbWUgYnV0IGZvcmNlIHByZW1h dHVyZSBleGl0IGlmIG5lY2Vzc2FyeS4gKi8KLSNkZWZpbmUgRkxVU0hfQkxPQ0socywgZW9mKSB7 IFwKLSAgIEZMVVNIX0JMT0NLX09OTFkocywgZW9mKTsgXAotICAgaWYgKHMtPnN0cm0tPmF2YWls X291dCA9PSAwKSByZXR1cm4gKGVvZikgPyBmaW5pc2hfc3RhcnRlZCA6IG5lZWRfbW9yZTsgXAor I2RlZmluZSBGTFVTSF9CTE9DSyhzLCBsYXN0KSB7IFwKKyAgIEZMVVNIX0JMT0NLX09OTFkocywg bGFzdCk7IFwKKyAgIGlmIChzLT5zdHJtLT5hdmFpbF9vdXQgPT0gMCkgcmV0dXJuIChsYXN0KSA/ IGZpbmlzaF9zdGFydGVkIDogbmVlZF9tb3JlOyBcCiB9CiAKKy8qIE1heGltdW0gc3RvcmVkIGJs b2NrIGxlbmd0aCBpbiBkZWZsYXRlIGZvcm1hdCAobm90IGluY2x1ZGluZyBoZWFkZXIpLiAqLwor I2RlZmluZSBNQVhfU1RPUkVEIDY1NTM1CisKKy8qIE1pbmltdW0gb2YgYSBhbmQgYi4gKi8KKyNk ZWZpbmUgTUlOKGEsIGIpICgoYSkgPiAoYikgPyAoYikgOiAoYSkpCisKIC8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQogICogQ29weSB3aXRob3V0IGNvbXByZXNzaW9uIGFzIG11Y2ggYXMgcG9zc2libGUg ZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCByZXR1cm4KICAqIHRoZSBjdXJyZW50IGJsb2NrIHN0YXRl LgotICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGRp Y3Rpb25hcnkgc2luY2UKLSAqIHVuY29tcHJlc3NpYmxlIGRhdGEgaXMgcHJvYmFibHkgbm90IHVz ZWZ1bC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkCi0gKiBvbmx5IGZvciB0aGUgbGV2ZWw9MCBjb21w cmVzc2lvbiBvcHRpb24uCi0gKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvcHRpbWl6 ZWQgdG8gYXZvaWQgZXh0cmEgY29weWluZyBmcm9tCi0gKiB3aW5kb3cgdG8gcGVuZGluZ19idWYu CisgKgorICogSW4gY2FzZSBkZWZsYXRlUGFyYW1zKCkgaXMgdXNlZCB0byBsYXRlciBzd2l0Y2gg dG8gYSBub24temVybyBjb21wcmVzc2lvbgorICogbGV2ZWwsIHMtPm1hdGNoZXMgKG90aGVyd2lz ZSB1bnVzZWQgd2hlbiBzdG9yaW5nKSBrZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyCisgKiBvZiBo YXNoIHRhYmxlIHNsaWRlcyB0byBwZXJmb3JtLiBJZiBzLT5tYXRjaGVzIGlzIDEsIHRoZW4gb25l IGhhc2ggdGFibGUKKyAqIHNsaWRlIHdpbGwgYmUgZG9uZSB3aGVuIHN3aXRjaGluZy4gSWYgcy0+ bWF0Y2hlcyBpcyAyLCB0aGUgbWF4aW11bSB2YWx1ZQorICogYWxsb3dlZCBoZXJlLCB0aGVuIHRo ZSBoYXNoIHRhYmxlIHdpbGwgYmUgY2xlYXJlZCwgc2luY2UgdHdvIG9yIG1vcmUgc2xpZGVzCisg KiBpcyB0aGUgc2FtZSBhcyBhIGNsZWFyLgorICoKKyAqIGRlZmxhdGVfc3RvcmVkKCkgaXMgd3Jp dHRlbiB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHRpbWVzIGFuIGlucHV0IGJ5dGUgaXMKKyAq IGNvcGllZC4gSXQgaXMgbW9zdCBlZmZpY2llbnQgd2l0aCBsYXJnZSBpbnB1dCBhbmQgb3V0cHV0 IGJ1ZmZlcnMsIHdoaWNoCisgKiBtYXhpbWl6ZXMgdGhlIG9wcG9ydHVuaXRlcyB0byBoYXZlIGEg c2luZ2xlIGNvcHkgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0LgogICovCiBsb2NhbCBibG9ja19z dGF0ZSBkZWZsYXRlX3N0b3JlZChzLCBmbHVzaCkKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAg IGludCBmbHVzaDsKIHsKLSAgICAvKiBTdG9yZWQgYmxvY2tzIGFyZSBsaW1pdGVkIHRvIDB4ZmZm ZiBieXRlcywgcGVuZGluZ19idWYgaXMgbGltaXRlZAotICAgICAqIHRvIHBlbmRpbmdfYnVmX3Np emUsIGFuZCBlYWNoIHN0b3JlZCBibG9jayBoYXMgYSA1IGJ5dGUgaGVhZGVyOgorICAgIC8qIFNt YWxsZXN0IHdvcnRoeSBibG9jayBzaXplIHdoZW4gbm90IGZsdXNoaW5nIG9yIGZpbmlzaGluZy4g QnkgZGVmYXVsdAorICAgICAqIHRoaXMgaXMgMzJLLiBUaGlzIGNhbiBiZSBhcyBzbWFsbCBhcyA1 MDcgYnl0ZXMgZm9yIG1lbUxldmVsID09IDEuIEZvcgorICAgICAqIGxhcmdlIGlucHV0IGFuZCBv dXRwdXQgYnVmZmVycywgdGhlIHN0b3JlZCBibG9jayBzaXplIHdpbGwgYmUgbGFyZ2VyLgogICAg ICAqLwotICAgIHVsZyBtYXhfYmxvY2tfc2l6ZSA9IDB4ZmZmZjsKLSAgICB1bGcgbWF4X3N0YXJ0 OworICAgIHVuc2lnbmVkIG1pbl9ibG9jayA9IE1JTihzLT5wZW5kaW5nX2J1Zl9zaXplIC0gNSwg cy0+d19zaXplKTsKIAotICAgIGlmIChtYXhfYmxvY2tfc2l6ZSA+IHMtPnBlbmRpbmdfYnVmX3Np emUgLSA1KSB7Ci0gICAgICAgIG1heF9ibG9ja19zaXplID0gcy0+cGVuZGluZ19idWZfc2l6ZSAt IDU7CisgICAgLyogQ29weSBhcyBtYW55IG1pbl9ibG9jayBvciBsYXJnZXIgc3RvcmVkIGJsb2Nr cyBkaXJlY3RseSB0byBuZXh0X291dCBhcworICAgICAqIHBvc3NpYmxlLiBJZiBmbHVzaGluZywg Y29weSB0aGUgcmVtYWluaW5nIGF2YWlsYWJsZSBpbnB1dCB0byBuZXh0X291dCBhcworICAgICAq IHN0b3JlZCBibG9ja3MsIGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZS4KKyAgICAgKi8KKyAgICB1 bnNpZ25lZCBsZW4sIGxlZnQsIGhhdmUsIGxhc3QgPSAwOworICAgIHVuc2lnbmVkIHVzZWQgPSBz LT5zdHJtLT5hdmFpbF9pbjsKKyAgICBkbyB7CisgICAgICAgIC8qIFNldCBsZW4gdG8gdGhlIG1h eGltdW0gc2l6ZSBibG9jayB0aGF0IHdlIGNhbiBjb3B5IGRpcmVjdGx5IHdpdGggdGhlCisgICAg ICAgICAqIGF2YWlsYWJsZSBpbnB1dCBkYXRhIGFuZCBvdXRwdXQgc3BhY2UuIFNldCBsZWZ0IHRv IGhvdyBtdWNoIG9mIHRoYXQKKyAgICAgICAgICogd291bGQgYmUgY29waWVkIGZyb20gd2hhdCdz IGxlZnQgaW4gdGhlIHdpbmRvdy4KKyAgICAgICAgICovCisgICAgICAgIGxlbiA9IE1BWF9TVE9S RUQ7ICAgICAgIC8qIG1heGltdW0gZGVmbGF0ZSBzdG9yZWQgYmxvY2sgbGVuZ3RoICovCisgICAg ICAgIGhhdmUgPSAocy0+YmlfdmFsaWQgKyA0MikgPj4gMzsgICAgICAgICAvKiBudW1iZXIgb2Yg aGVhZGVyIGJ5dGVzICovCisgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9vdXQgPCBoYXZlKSAg ICAgICAgICAvKiBuZWVkIHJvb20gZm9yIGhlYWRlciAqLworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAvKiBtYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggdGhhdCB3aWxsIGZpdCBp biBhdmFpbF9vdXQ6ICovCisgICAgICAgIGhhdmUgPSBzLT5zdHJtLT5hdmFpbF9vdXQgLSBoYXZl OworICAgICAgICBsZWZ0ID0gcy0+c3Ryc3RhcnQgLSBzLT5ibG9ja19zdGFydDsgICAgLyogYnl0 ZXMgbGVmdCBpbiB3aW5kb3cgKi8KKyAgICAgICAgaWYgKGxlbiA+ICh1bGcpbGVmdCArIHMtPnN0 cm0tPmF2YWlsX2luKQorICAgICAgICAgICAgbGVuID0gbGVmdCArIHMtPnN0cm0tPmF2YWlsX2lu OyAgICAgLyogbGltaXQgbGVuIHRvIHRoZSBpbnB1dCAqLworICAgICAgICBpZiAobGVuID4gaGF2 ZSkKKyAgICAgICAgICAgIGxlbiA9IGhhdmU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxp bWl0IGxlbiB0byB0aGUgb3V0cHV0ICovCisKKyAgICAgICAgLyogSWYgdGhlIHN0b3JlZCBibG9j ayB3b3VsZCBiZSBsZXNzIHRoYW4gbWluX2Jsb2NrIGluIGxlbmd0aCwgb3IgaWYKKyAgICAgICAg ICogdW5hYmxlIHRvIGNvcHkgYWxsIG9mIHRoZSBhdmFpbGFibGUgaW5wdXQgd2hlbiBmbHVzaGlu ZywgdGhlbiB0cnkKKyAgICAgICAgICogY29weWluZyB0byB0aGUgd2luZG93IGFuZCB0aGUgcGVu ZGluZyBidWZmZXIgaW5zdGVhZC4gQWxzbyBkb24ndAorICAgICAgICAgKiB3cml0ZSBhbiBlbXB0 eSBibG9jayB3aGVuIGZsdXNoaW5nIC0tIGRlZmxhdGUoKSBkb2VzIHRoYXQuCisgICAgICAgICAq LworICAgICAgICBpZiAobGVuIDwgbWluX2Jsb2NrICYmICgobGVuID09IDAgJiYgZmx1c2ggIT0g Wl9GSU5JU0gpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoID09IFpf Tk9fRkxVU0ggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuICE9IGxlZnQg KyBzLT5zdHJtLT5hdmFpbF9pbikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBN YWtlIGEgZHVtbXkgc3RvcmVkIGJsb2NrIGluIHBlbmRpbmcgdG8gZ2V0IHRoZSBoZWFkZXIgYnl0 ZXMsCisgICAgICAgICAqIGluY2x1ZGluZyBhbnkgcGVuZGluZyBiaXRzLiBUaGlzIGFsc28gdXBk YXRlcyB0aGUgZGVidWdnaW5nIGNvdW50cy4KKyAgICAgICAgICovCisgICAgICAgIGxhc3QgPSBm bHVzaCA9PSBaX0ZJTklTSCAmJiBsZW4gPT0gbGVmdCArIHMtPnN0cm0tPmF2YWlsX2luID8gMSA6 IDA7CisgICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgKGNoYXIgKikwLCAwTCwgbGFzdCk7CisK KyAgICAgICAgLyogUmVwbGFjZSB0aGUgbGVuZ3RocyBpbiB0aGUgZHVtbXkgc3RvcmVkIGJsb2Nr IHdpdGggbGVuLiAqLworICAgICAgICBzLT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gNF0gPSBs ZW47CisgICAgICAgIHMtPnBlbmRpbmdfYnVmW3MtPnBlbmRpbmcgLSAzXSA9IGxlbiA+PiA4Owor ICAgICAgICBzLT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gMl0gPSB+bGVuOworICAgICAgICBz LT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gMV0gPSB+bGVuID4+IDg7CisKKyAgICAgICAgLyog V3JpdGUgdGhlIHN0b3JlZCBibG9jayBoZWFkZXIgYnl0ZXMuICovCisgICAgICAgIGZsdXNoX3Bl bmRpbmcocy0+c3RybSk7CisKKyNpZmRlZiBaTElCX0RFQlVHCisgICAgICAgIC8qIFVwZGF0ZSBk ZWJ1Z2dpbmcgY291bnRzIGZvciB0aGUgZGF0YSBhYm91dCB0byBiZSBjb3BpZWQuICovCisgICAg ICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IGxlbiA8PCAzOworICAgICAgICBzLT5iaXRzX3NlbnQg Kz0gbGVuIDw8IDM7CisjZW5kaWYKKworICAgICAgICAvKiBDb3B5IHVuY29tcHJlc3NlZCBieXRl cyBmcm9tIHRoZSB3aW5kb3cgdG8gbmV4dF9vdXQuICovCisgICAgICAgIGlmIChsZWZ0KSB7Cisg ICAgICAgICAgICBpZiAobGVmdCA+IGxlbikKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbGVuOwor ICAgICAgICAgICAgem1lbWNweShzLT5zdHJtLT5uZXh0X291dCwgcy0+d2luZG93ICsgcy0+Ymxv Y2tfc3RhcnQsIGxlZnQpOworICAgICAgICAgICAgcy0+c3RybS0+bmV4dF9vdXQgKz0gbGVmdDsK KyAgICAgICAgICAgIHMtPnN0cm0tPmF2YWlsX291dCAtPSBsZWZ0OworICAgICAgICAgICAgcy0+ c3RybS0+dG90YWxfb3V0ICs9IGxlZnQ7CisgICAgICAgICAgICBzLT5ibG9ja19zdGFydCArPSBs ZWZ0OworICAgICAgICAgICAgbGVuIC09IGxlZnQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBD b3B5IHVuY29tcHJlc3NlZCBieXRlcyBkaXJlY3RseSBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQs IHVwZGF0aW5nCisgICAgICAgICAqIHRoZSBjaGVjayB2YWx1ZS4KKyAgICAgICAgICovCisgICAg ICAgIGlmIChsZW4pIHsKKyAgICAgICAgICAgIHJlYWRfYnVmKHMtPnN0cm0sIHMtPnN0cm0tPm5l eHRfb3V0LCBsZW4pOworICAgICAgICAgICAgcy0+c3RybS0+bmV4dF9vdXQgKz0gbGVuOworICAg ICAgICAgICAgcy0+c3RybS0+YXZhaWxfb3V0IC09IGxlbjsKKyAgICAgICAgICAgIHMtPnN0cm0t PnRvdGFsX291dCArPSBsZW47CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChsYXN0ID09IDApOwor CisgICAgLyogVXBkYXRlIHRoZSBzbGlkaW5nIHdpbmRvdyB3aXRoIHRoZSBsYXN0IHMtPndfc2l6 ZSBieXRlcyBvZiB0aGUgY29waWVkCisgICAgICogZGF0YSwgb3IgYXBwZW5kIGFsbCBvZiB0aGUg Y29waWVkIGRhdGEgdG8gdGhlIGV4aXN0aW5nIHdpbmRvdyBpZiBsZXNzCisgICAgICogdGhhbiBz LT53X3NpemUgYnl0ZXMgd2VyZSBjb3BpZWQuIEFsc28gdXBkYXRlIHRoZSBudW1iZXIgb2YgYnl0 ZXMgdG8KKyAgICAgKiBpbnNlcnQgaW4gdGhlIGhhc2ggdGFibGVzLCBpbiB0aGUgZXZlbnQgdGhh dCBkZWZsYXRlUGFyYW1zKCkgc3dpdGNoZXMgdG8KKyAgICAgKiBhIG5vbi16ZXJvIGNvbXByZXNz aW9uIGxldmVsLgorICAgICAqLworICAgIHVzZWQgLT0gcy0+c3RybS0+YXZhaWxfaW47ICAgICAg LyogbnVtYmVyIG9mIGlucHV0IGJ5dGVzIGRpcmVjdGx5IGNvcGllZCAqLworICAgIGlmICh1c2Vk KSB7CisgICAgICAgIC8qIElmIGFueSBpbnB1dCB3YXMgdXNlZCwgdGhlbiBubyB1bnVzZWQgaW5w dXQgcmVtYWlucyBpbiB0aGUgd2luZG93LAorICAgICAgICAgKiB0aGVyZWZvcmUgcy0+YmxvY2tf c3RhcnQgPT0gcy0+c3Ryc3RhcnQuCisgICAgICAgICAqLworICAgICAgICBpZiAodXNlZCA+PSBz LT53X3NpemUpIHsgICAgLyogc3VwcGxhbnQgdGhlIHByZXZpb3VzIGhpc3RvcnkgKi8KKyAgICAg ICAgICAgIHMtPm1hdGNoZXMgPSAyOyAgICAgICAgIC8qIGNsZWFyIGhhc2ggKi8KKyAgICAgICAg ICAgIHptZW1jcHkocy0+d2luZG93LCBzLT5zdHJtLT5uZXh0X2luIC0gcy0+d19zaXplLCBzLT53 X3NpemUpOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSBzLT53X3NpemU7CisgICAgICAgIH0K KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAocy0+d2luZG93X3NpemUgLSBzLT5zdHJz dGFydCA8PSB1c2VkKSB7CisgICAgICAgICAgICAgICAgLyogU2xpZGUgdGhlIHdpbmRvdyBkb3du LiAqLworICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0IC09IHMtPndfc2l6ZTsKKyAgICAgICAg ICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93ICsgcy0+d19zaXplLCBzLT5zdHJz dGFydCk7CisgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoZXMgPCAyKQorICAgICAgICAgICAg ICAgICAgICBzLT5tYXRjaGVzKys7ICAgLyogYWRkIGEgcGVuZGluZyBzbGlkZV9oYXNoKCkgKi8K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptZW1jcHkocy0+d2luZG93ICsgcy0+c3Ryc3Rh cnQsIHMtPnN0cm0tPm5leHRfaW4gLSB1c2VkLCB1c2VkKTsKKyAgICAgICAgICAgIHMtPnN0cnN0 YXJ0ICs9IHVzZWQ7CisgICAgICAgIH0KKyAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSBzLT5zdHJz dGFydDsKKyAgICAgICAgcy0+aW5zZXJ0ICs9IE1JTih1c2VkLCBzLT53X3NpemUgLSBzLT5pbnNl cnQpOworICAgIH0KKyAgICBpZiAocy0+aGlnaF93YXRlciA8IHMtPnN0cnN0YXJ0KQorICAgICAg ICBzLT5oaWdoX3dhdGVyID0gcy0+c3Ryc3RhcnQ7CisKKyAgICAvKiBJZiB0aGUgbGFzdCBibG9j ayB3YXMgd3JpdHRlbiB0byBuZXh0X291dCwgdGhlbiBkb25lLiAqLworICAgIGlmIChsYXN0KQor ICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisKKyAgICAvKiBJZiBmbHVzaGluZyBhbmQgYWxs IGlucHV0IGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGRvbmUuICovCisgICAgaWYgKGZsdXNoICE9 IFpfTk9fRkxVU0ggJiYgZmx1c2ggIT0gWl9GSU5JU0ggJiYKKyAgICAgICAgcy0+c3RybS0+YXZh aWxfaW4gPT0gMCAmJiAobG9uZylzLT5zdHJzdGFydCA9PSBzLT5ibG9ja19zdGFydCkKKyAgICAg ICAgcmV0dXJuIGJsb2NrX2RvbmU7CisKKyAgICAvKiBGaWxsIHRoZSB3aW5kb3cgd2l0aCBhbnkg cmVtYWluaW5nIGlucHV0LiAqLworICAgIGhhdmUgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPnN0cnN0 YXJ0IC0gMTsKKyAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPiBoYXZlICYmIHMtPmJsb2NrX3N0 YXJ0ID49IChsb25nKXMtPndfc2l6ZSkgeworICAgICAgICAvKiBTbGlkZSB0aGUgd2luZG93IGRv d24uICovCisgICAgICAgIHMtPmJsb2NrX3N0YXJ0IC09IHMtPndfc2l6ZTsKKyAgICAgICAgcy0+ c3Ryc3RhcnQgLT0gcy0+d19zaXplOworICAgICAgICB6bWVtY3B5KHMtPndpbmRvdywgcy0+d2lu ZG93ICsgcy0+d19zaXplLCBzLT5zdHJzdGFydCk7CisgICAgICAgIGlmIChzLT5tYXRjaGVzIDwg MikKKyAgICAgICAgICAgIHMtPm1hdGNoZXMrKzsgICAgICAgICAgIC8qIGFkZCBhIHBlbmRpbmcg c2xpZGVfaGFzaCgpICovCisgICAgICAgIGhhdmUgKz0gcy0+d19zaXplOyAgICAgICAgICAvKiBt b3JlIHNwYWNlIG5vdyAqLworICAgIH0KKyAgICBpZiAoaGF2ZSA+IHMtPnN0cm0tPmF2YWlsX2lu KQorICAgICAgICBoYXZlID0gcy0+c3RybS0+YXZhaWxfaW47CisgICAgaWYgKGhhdmUpIHsKKyAg ICAgICAgcmVhZF9idWYocy0+c3RybSwgcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQsIGhhdmUpOwor ICAgICAgICBzLT5zdHJzdGFydCArPSBoYXZlOworICAgIH0KKyAgICBpZiAocy0+aGlnaF93YXRl ciA8IHMtPnN0cnN0YXJ0KQorICAgICAgICBzLT5oaWdoX3dhdGVyID0gcy0+c3Ryc3RhcnQ7CisK KyAgICAvKiBUaGVyZSB3YXMgbm90IGVub3VnaCBhdmFpbF9vdXQgdG8gd3JpdGUgYSBjb21wbGV0 ZSB3b3J0aHkgb3IgZmx1c2hlZAorICAgICAqIHN0b3JlZCBibG9jayB0byBuZXh0X291dC4gV3Jp dGUgYSBzdG9yZWQgYmxvY2sgdG8gcGVuZGluZyBpbnN0ZWFkLCBpZiB3ZQorICAgICAqIGhhdmUg ZW5vdWdoIGlucHV0IGZvciBhIHdvcnRoeSBibG9jaywgb3IgaWYgZmx1c2hpbmcgYW5kIHRoZXJl IGlzIGVub3VnaAorICAgICAqIHJvb20gZm9yIHRoZSByZW1haW5pbmcgaW5wdXQgYXMgYSBzdG9y ZWQgYmxvY2sgaW4gdGhlIHBlbmRpbmcgYnVmZmVyLgorICAgICAqLworICAgIGhhdmUgPSAocy0+ YmlfdmFsaWQgKyA0MikgPj4gMzsgICAgICAgICAvKiBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzICov CisgICAgICAgIC8qIG1heGltdW0gc3RvcmVkIGJsb2NrIGxlbmd0aCB0aGF0IHdpbGwgZml0IGlu IHBlbmRpbmc6ICovCisgICAgaGF2ZSA9IE1JTihzLT5wZW5kaW5nX2J1Zl9zaXplIC0gaGF2ZSwg TUFYX1NUT1JFRCk7CisgICAgbWluX2Jsb2NrID0gTUlOKGhhdmUsIHMtPndfc2l6ZSk7CisgICAg bGVmdCA9IHMtPnN0cnN0YXJ0IC0gcy0+YmxvY2tfc3RhcnQ7CisgICAgaWYgKGxlZnQgPj0gbWlu X2Jsb2NrIHx8CisgICAgICAgICgobGVmdCB8fCBmbHVzaCA9PSBaX0ZJTklTSCkgJiYgZmx1c2gg IT0gWl9OT19GTFVTSCAmJgorICAgICAgICAgcy0+c3RybS0+YXZhaWxfaW4gPT0gMCAmJiBsZWZ0 IDw9IGhhdmUpKSB7CisgICAgICAgIGxlbiA9IE1JTihsZWZ0LCBoYXZlKTsKKyAgICAgICAgbGFz dCA9IGZsdXNoID09IFpfRklOSVNIICYmIHMtPnN0cm0tPmF2YWlsX2luID09IDAgJiYKKyAgICAg ICAgICAgICAgIGxlbiA9PSBsZWZ0ID8gMSA6IDA7CisgICAgICAgIF90cl9zdG9yZWRfYmxvY2so cywgKGNoYXJmICopcy0+d2luZG93ICsgcy0+YmxvY2tfc3RhcnQsIGxlbiwgbGFzdCk7CisgICAg ICAgIHMtPmJsb2NrX3N0YXJ0ICs9IGxlbjsKKyAgICAgICAgZmx1c2hfcGVuZGluZyhzLT5zdHJt KTsKICAgICB9CiAKLSAgICAvKiBDb3B5IGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSBpbnB1dCB0 byBvdXRwdXQ6ICovCi0gICAgZm9yICg7OykgewotICAgICAgICAvKiBGaWxsIHRoZSB3aW5kb3cg YXMgbXVjaCBhcyBwb3NzaWJsZTogKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSAxKSB7 Ci0KLSAgICAgICAgICAgIEFzc2VydChzLT5zdHJzdGFydCA8IHMtPndfc2l6ZStNQVhfRElTVChz KSB8fAotICAgICAgICAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID49IChsb25nKXMtPndfc2l6 ZSwgInNsaWRlIHRvbyBsYXRlIik7Ci0KLSAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwotICAg ICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHJl dHVybiBuZWVkX21vcmU7Ci0KLSAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgYnJl YWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCi0gICAgICAgIH0KLSAgICAgICAgQXNz ZXJ0KHMtPmJsb2NrX3N0YXJ0ID49IDBMLCAiYmxvY2sgZ29uZSIpOwotCi0gICAgICAgIHMtPnN0 cnN0YXJ0ICs9IHMtPmxvb2thaGVhZDsKLSAgICAgICAgcy0+bG9va2FoZWFkID0gMDsKLQotICAg ICAgICAvKiBFbWl0IGEgc3RvcmVkIGJsb2NrIGlmIHBlbmRpbmdfYnVmIHdpbGwgYmUgZnVsbDog Ki8KLSAgICAgICAgbWF4X3N0YXJ0ID0gcy0+YmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTsK LSAgICAgICAgaWYgKHMtPnN0cnN0YXJ0ID09IDAgfHwgKHVsZylzLT5zdHJzdGFydCA+PSBtYXhf c3RhcnQpIHsKLSAgICAgICAgICAgIC8qIHN0cnN0YXJ0ID09IDAgaXMgcG9zc2libGUgd2hlbiB3 cmFwYXJvdW5kIG9uIDE2LWJpdCBtYWNoaW5lICovCi0gICAgICAgICAgICBzLT5sb29rYWhlYWQg PSAodUludCkocy0+c3Ryc3RhcnQgLSBtYXhfc3RhcnQpOwotICAgICAgICAgICAgcy0+c3Ryc3Rh cnQgPSAodUludCltYXhfc3RhcnQ7Ci0gICAgICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKLSAg ICAgICAgfQotICAgICAgICAvKiBGbHVzaCBpZiB3ZSBtYXkgaGF2ZSB0byBzbGlkZSwgb3RoZXJ3 aXNlIGJsb2NrX3N0YXJ0IG1heSBiZWNvbWUKLSAgICAgICAgICogbmVnYXRpdmUgYW5kIHRoZSBk YXRhIHdpbGwgYmUgZ29uZToKLSAgICAgICAgICovCi0gICAgICAgIGlmIChzLT5zdHJzdGFydCAt ICh1SW50KXMtPmJsb2NrX3N0YXJ0ID49IE1BWF9ESVNUKHMpKSB7Ci0gICAgICAgICAgICBGTFVT SF9CTE9DSyhzLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVz aCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2Rv bmUgOiBibG9ja19kb25lOworICAgIC8qIFdlJ3ZlIGRvbmUgYWxsIHdlIGNhbiB3aXRoIHRoZSBh dmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dC4gKi8KKyAgICByZXR1cm4gbGFzdCA/IGZpbmlzaF9z dGFydGVkIDogbmVlZF9tb3JlOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEyNzYs NyArMTgyNSw3IEBACiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICBpbnQgZmx1c2g7CiB7Ci0g ICAgSVBvcyBoYXNoX2hlYWQgPSBOSUw7IC8qIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKi8KKyAg ICBJUG9zIGhhc2hfaGVhZDsgICAgICAgLyogaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiAqLwogICAg IGludCBiZmx1c2g7ICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZs dXNoZWQgKi8KIAogICAgIGZvciAoOzspIHsKQEAgLTEyOTYsNiArMTg0NSw3IEBACiAgICAgICAg IC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0 aGUKICAgICAgICAgICogZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQgdG8gdGhlIGhlYWQg b2YgdGhlIGhhc2ggY2hhaW46CiAgICAgICAgICAqLworICAgICAgICBoYXNoX2hlYWQgPSBOSUw7 CiAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAgICBJ TlNFUlRfU1RSSU5HKHMsIHMtPnN0cnN0YXJ0LCBoYXNoX2hlYWQpOwogICAgICAgICB9CkBAIC0x MzA4LDE5ICsxODU4LDggQEAKICAgICAgICAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBw YXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaAogICAgICAgICAgICAgICogb2YgdGhl IHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLgogICAg ICAgICAgICAgICovCi0jaWZkZWYgRkFTVEVTVAotICAgICAgICAgICAgaWYgKChzLT5zdHJhdGVn eSA8IFpfSFVGRk1BTl9PTkxZKSB8fAotICAgICAgICAgICAgICAgIChzLT5zdHJhdGVneSA9PSBa X1JMRSAmJiBzLT5zdHJzdGFydCAtIGhhc2hfaGVhZCA9PSAxKSkgewotICAgICAgICAgICAgICAg IHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2hfZmFzdCAocywgaGFzaF9oZWFkKTsKLSAg ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBpZiAocy0+c3RyYXRlZ3kgPCBaX0hVRkZN QU5fT05MWSkgewotICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0 Y2ggKHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09 IFpfUkxFICYmIHMtPnN0cnN0YXJ0IC0gaGFzaF9oZWFkID09IDEpIHsKLSAgICAgICAgICAgICAg ICBzLT5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoX2Zhc3QgKHMsIGhhc2hfaGVhZCk7Ci0g ICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBvciBs b25nZXN0X21hdGNoX2Zhc3QoKSBzZXRzIG1hdGNoX3N0YXJ0ICovCisgICAgICAgICAgICBzLT5t YXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoIChzLCBoYXNoX2hlYWQpOworICAgICAgICAgICAg LyogbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQgKi8KICAgICAgICAgfQogICAgICAg ICBpZiAocy0+bWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgY2hlY2tf bWF0Y2gocywgcy0+c3Ryc3RhcnQsIHMtPm1hdGNoX3N0YXJ0LCBzLT5tYXRjaF9sZW5ndGgpOwpA QCAtMTM2OCw4ICsxOTA3LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJmbHVzaCkgRkxV U0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklO SVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2Nr X2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0 cnN0YXJ0IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAg ICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAg fQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAg cmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAKICNpZm5kZWYgRkFTVEVTVApAQCAtMTM4Miw3ICsxOTI3 LDcgQEAKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGludCBmbHVzaDsKIHsKLSAgICBJUG9z IGhhc2hfaGVhZCA9IE5JTDsgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICovCisgICAgSVBvcyBo YXNoX2hlYWQ7ICAgICAgICAgIC8qIGhlYWQgb2YgaGFzaCBjaGFpbiAqLwogICAgIGludCBiZmx1 c2g7ICAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQg Ki8KIAogICAgIC8qIFByb2Nlc3MgdGhlIGlucHV0IGJsb2NrLiAqLwpAQCAtMTQwMyw2ICsxOTQ4 LDcgQEAKICAgICAgICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0 cnN0YXJ0KzJdIGluIHRoZQogICAgICAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVh ZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjoKICAgICAgICAgICovCisgICAgICAgIGhh c2hfaGVhZCA9IE5JTDsKICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsK ICAgICAgICAgICAgIElOU0VSVF9TVFJJTkcocywgcy0+c3Ryc3RhcnQsIGhhc2hfaGVhZCk7CiAg ICAgICAgIH0KQEAgLTE0MTgsMTIgKzE5NjQsOCBAQAogICAgICAgICAgICAgICogb2Ygd2luZG93 IGluZGV4IDAgKGluIHBhcnRpY3VsYXIgd2UgaGF2ZSB0byBhdm9pZCBhIG1hdGNoCiAgICAgICAg ICAgICAgKiBvZiB0aGUgc3RyaW5nIHdpdGggaXRzZWxmIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5w dXQgZmlsZSkuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChzLT5zdHJhdGVneSA8 IFpfSFVGRk1BTl9PTkxZKSB7Ci0gICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gbG9u Z2VzdF9tYXRjaCAocywgaGFzaF9oZWFkKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocy0+c3Ry YXRlZ3kgPT0gWl9STEUgJiYgcy0+c3Ryc3RhcnQgLSBoYXNoX2hlYWQgPT0gMSkgewotICAgICAg ICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2hfZmFzdCAocywgaGFzaF9o ZWFkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBvciBs b25nZXN0X21hdGNoX2Zhc3QoKSBzZXRzIG1hdGNoX3N0YXJ0ICovCisgICAgICAgICAgICBzLT5t YXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoIChzLCBoYXNoX2hlYWQpOworICAgICAgICAgICAg LyogbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQgKi8KIAogICAgICAgICAgICAgaWYg KHMtPm1hdGNoX2xlbmd0aCA8PSA1ICYmIChzLT5zdHJhdGVneSA9PSBaX0ZJTFRFUkVECiAjaWYg VE9PX0ZBUiA8PSAzMjc2NwpAQCAtMTQ5Niw3ICsyMDM4LDEyNiBAQAogICAgICAgICBfdHJfdGFs bHlfbGl0KHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSwgYmZsdXNoKTsKICAgICAgICAgcy0+ bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0g Wl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDog YmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSBzLT5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8g cy0+c3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsK KyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsK KyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsK KyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KICNlbmRpZiAvKiBGQVNURVNUICovCisKKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorICogRm9yIFpfUkxFLCBzaW1wbHkgbG9vayBmb3IgcnVucyBvZiBi eXRlcywgZ2VuZXJhdGUgbWF0Y2hlcyBvbmx5IG9mIGRpc3RhbmNlCisgKiBvbmUuICBEbyBub3Qg bWFpbnRhaW4gYSBoYXNoIHRhYmxlLiAgKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBy dW4gb2YKKyAqIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIFpfUkxFLikKKyAqLworbG9jYWwg YmxvY2tfc3RhdGUgZGVmbGF0ZV9ybGUocywgZmx1c2gpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsK KyAgICBpbnQgZmx1c2g7Cit7CisgICAgaW50IGJmbHVzaDsgICAgICAgICAgICAgLyogc2V0IGlm IGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovCisgICAgdUludCBwcmV2OyAgICAgICAg ICAgICAgLyogYnl0ZSBhdCBkaXN0YW5jZSBvbmUgdG8gbWF0Y2ggKi8KKyAgICBCeXRlZiAqc2Nh biwgKnN0cmVuZDsgICAvKiBzY2FuIGdvZXMgdXAgdG8gc3RyZW5kIGZvciBsZW5ndGggb2YgcnVu ICovCisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5 cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdAorICAgICAgICAgKiBhdCB0aGUgZW5kIG9m IHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcworICAgICAgICAgKiBmb3Ig dGhlIGxvbmdlc3QgcnVuLCBwbHVzIG9uZSBmb3IgdGhlIHVucm9sbGVkIGxvb3AuCisgICAgICAg ICAqLworICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgeworICAgICAgICAg ICAgZmlsbF93aW5kb3cocyk7CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9N QVRDSCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5l ZWRfbW9yZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0g MCkgYnJlYWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCisgICAgICAgIH0KKworICAg ICAgICAvKiBTZWUgaG93IG1hbnkgdGltZXMgdGhlIHByZXZpb3VzIGJ5dGUgcmVwZWF0cyAqLwor ICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSAwOworICAgICAgICBpZiAocy0+bG9va2FoZWFkID49 IE1JTl9NQVRDSCAmJiBzLT5zdHJzdGFydCA+IDApIHsKKyAgICAgICAgICAgIHNjYW4gPSBzLT53 aW5kb3cgKyBzLT5zdHJzdGFydCAtIDE7CisgICAgICAgICAgICBwcmV2ID0gKnNjYW47CisgICAg ICAgICAgICBpZiAocHJldiA9PSAqKytzY2FuICYmIHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09 ICorK3NjYW4pIHsKKyAgICAgICAgICAgICAgICBzdHJlbmQgPSBzLT53aW5kb3cgKyBzLT5zdHJz dGFydCArIE1BWF9NQVRDSDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAg fSB3aGlsZSAocHJldiA9PSAqKytzY2FuICYmIHByZXYgPT0gKisrc2NhbiAmJgorICAgICAgICAg ICAgICAgICAgICAgICAgIHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYKKyAg ICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2Fu ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9PSAqKytzY2FuICYmIHByZXYgPT0g Kisrc2NhbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpOworICAg ICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtICh1SW50KShzdHJlbmQg LSBzY2FuKTsKKyAgICAgICAgICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID4gcy0+bG9va2Fo ZWFkKQorICAgICAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5sb29rYWhlYWQ7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVJ bnQpKHMtPndpbmRvd19zaXplLTEpLCAid2lsZCBzY2FuIik7CisgICAgICAgIH0KKworICAgICAg ICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25nZXIsIGVsc2Ug ZW1pdCBsaXRlcmFsICovCisgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENI KSB7CisgICAgICAgICAgICBjaGVja19tYXRjaChzLCBzLT5zdHJzdGFydCwgcy0+c3Ryc3RhcnQg LSAxLCBzLT5tYXRjaF9sZW5ndGgpOworCisgICAgICAgICAgICBfdHJfdGFsbHlfZGlzdChzLCAx LCBzLT5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7CisKKyAgICAgICAgICAgIHMt Pmxvb2thaGVhZCAtPSBzLT5tYXRjaF9sZW5ndGg7CisgICAgICAgICAgICBzLT5zdHJzdGFydCAr PSBzLT5tYXRjaF9sZW5ndGg7CisgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSAwOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogTm8gbWF0Y2gsIG91dHB1dCBhIGxpdGVyYWwg Ynl0ZSAqLworICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCIlYyIsIHMtPndpbmRvd1tzLT5z dHJzdGFydF0pKTsKKyAgICAgICAgICAgIF90cl90YWxseV9saXQgKHMsIHMtPndpbmRvd1tzLT5z dHJzdGFydF0sIGJmbHVzaCk7CisgICAgICAgICAgICBzLT5sb29rYWhlYWQtLTsKKyAgICAgICAg ICAgIHMtPnN0cnN0YXJ0Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hf QkxPQ0socywgMCk7CisgICAgfQorICAgIHMtPmluc2VydCA9IDA7CisgICAgaWYgKGZsdXNoID09 IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4g ZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hf QkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7Cit9CisKKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorICogRm9yIFpfSFVGRk1BTl9PTkxZLCBkbyBub3QgbG9vayBmb3IgbWF0Y2hlcy4g IERvIG5vdCBtYWludGFpbiBhIGhhc2ggdGFibGUuCisgKiAoSXQgd2lsbCBiZSByZWdlbmVyYXRl ZCBpZiB0aGlzIHJ1biBvZiBkZWZsYXRlIHN3aXRjaGVzIGF3YXkgZnJvbSBIdWZmbWFuLikKKyAq LworbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9odWZmKHMsIGZsdXNoKQorICAgIGRlZmxhdGVf c3RhdGUgKnM7CisgICAgaW50IGZsdXNoOworeworICAgIGludCBiZmx1c2g7ICAgICAgICAgICAg IC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqLworCisgICAgZm9yICg7 OykgeworICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgbGl0ZXJhbCB0byB3cml0 ZS4gKi8KKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSB7CisgICAgICAgICAgICBmaWxs X3dpbmRvdyhzKTsKKyAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgeworICAgICAg ICAgICAgICAgIGlmIChmbHVzaCA9PSBaX05PX0ZMVVNIKQorICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gbmVlZF9tb3JlOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgIC8qIGZsdXNoIHRo ZSBjdXJyZW50IGJsb2NrICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv KiBPdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi8KKyAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gMDsK KyAgICAgICAgVHJhY2V2digoc3RkZXJyLCIlYyIsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0pKTsK KyAgICAgICAgX3RyX3RhbGx5X2xpdCAocywgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSwgYmZsdXNo KTsKKyAgICAgICAgcy0+bG9va2FoZWFkLS07CisgICAgICAgIHMtPnN0cnN0YXJ0Kys7CisgICAg ICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOworICAgIH0KKyAgICBzLT5pbnNlcnQg PSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhz LCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFz dF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25l OworfQpkaWZmIC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3Mv emxpYi9kZWZsYXRlLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9kZWZsYXRlLmgJU3VuIE1h ciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIvZGVmbGF0 ZS5oCVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qIGRl ZmxhdGUuaCAtLSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZQotICogQ29weXJpZ2h0IChDKSAx OTk1LTIwMDIgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTYgSmVh bi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2Us IHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTgsNyArOCw3IEBACiAg ICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmgu CiAgKi8KIAotLyogQCgjKSAkSWQ6IGRlZmxhdGUuaCx2IDEuMS4xLjEgMjAwNS8wNC8yNCAyMToz OTo0MCBnaWxlcyBFeHAgJCAqLworLyogQCgjKSAkSWQkICovCiAKICNpZm5kZWYgREVGTEFURV9I CiAjZGVmaW5lIERFRkxBVEVfSApAQCAtNDgsOSArNDgsMTkgQEAKICNkZWZpbmUgTUFYX0JJVFMg MTUKIC8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqLwogCi0jZGVm aW5lIElOSVRfU1RBVEUgICAgNDIKLSNkZWZpbmUgQlVTWV9TVEFURSAgIDExMwotI2RlZmluZSBG SU5JU0hfU1RBVEUgNjY2CisjZGVmaW5lIEJ1Zl9zaXplIDE2CisvKiBzaXplIG9mIGJpdCBidWZm ZXIgaW4gYmlfYnVmICovCisKKyNkZWZpbmUgSU5JVF9TVEFURSAgICA0MiAgICAvKiB6bGliIGhl YWRlciAtPiBCVVNZX1NUQVRFICovCisjaWZkZWYgR1pJUAorIyAgZGVmaW5lIEdaSVBfU1RBVEUg IDU3ICAgIC8qIGd6aXAgaGVhZGVyIC0+IEJVU1lfU1RBVEUgfCBFWFRSQV9TVEFURSAqLworI2Vu ZGlmCisjZGVmaW5lIEVYVFJBX1NUQVRFICAgNjkgICAgLyogZ3ppcCBleHRyYSBibG9jayAtPiBO QU1FX1NUQVRFICovCisjZGVmaW5lIE5BTUVfU1RBVEUgICAgNzMgICAgLyogZ3ppcCBmaWxlIG5h bWUgLT4gQ09NTUVOVF9TVEFURSAqLworI2RlZmluZSBDT01NRU5UX1NUQVRFIDkxICAgIC8qIGd6 aXAgY29tbWVudCAtPiBIQ1JDX1NUQVRFICovCisjZGVmaW5lIEhDUkNfU1RBVEUgICAxMDMgICAg LyogZ3ppcCBoZWFkZXIgQ1JDIC0+IEJVU1lfU1RBVEUgKi8KKyNkZWZpbmUgQlVTWV9TVEFURSAg IDExMyAgICAvKiBkZWZsYXRlIC0+IEZJTklTSF9TVEFURSAqLworI2RlZmluZSBGSU5JU0hfU1RB VEUgNjY2ICAgIC8qIHN0cmVhbSBjb21wbGV0ZSAqLwogLyogU3RyZWFtIHN0YXR1cyAqLwogCiAK QEAgLTc2LDcgKzg2LDcgQEAKIHR5cGVkZWYgc3RydWN0IHRyZWVfZGVzY19zIHsKICAgICBjdF9k YXRhICpkeW5fdHJlZTsgICAgICAgICAgIC8qIHRoZSBkeW5hbWljIHRyZWUgKi8KICAgICBpbnQg ICAgIG1heF9jb2RlOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZy ZXF1ZW5jeSAqLwotICAgIHN0YXRpY190cmVlX2Rlc2MgKnN0YXRfZGVzYzsgLyogdGhlIGNvcnJl c3BvbmRpbmcgc3RhdGljIHRyZWUgKi8KKyAgICBjb25zdCBzdGF0aWNfdHJlZV9kZXNjICpzdGF0 X2Rlc2M7ICAvKiB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdHJlZSAqLwogfSBGQVIgdHJlZV9k ZXNjOwogCiB0eXBlZGVmIHVzaCBQb3M7CkBAIC05Myw5ICsxMDMsMTEgQEAKICAgICBCeXRlZiAq cGVuZGluZ19idWY7ICAvKiBvdXRwdXQgc3RpbGwgcGVuZGluZyAqLwogICAgIHVsZyAgIHBlbmRp bmdfYnVmX3NpemU7IC8qIHNpemUgb2YgcGVuZGluZ19idWYgKi8KICAgICBCeXRlZiAqcGVuZGlu Z19vdXQ7ICAvKiBuZXh0IHBlbmRpbmcgYnl0ZSB0byBvdXRwdXQgdG8gdGhlIHN0cmVhbSAqLwot ICAgIGludCAgIHBlbmRpbmc7ICAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBwZW5kaW5nIGJ1 ZmZlciAqLworICAgIHVsZyAgIHBlbmRpbmc7ICAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBw ZW5kaW5nIGJ1ZmZlciAqLwogICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJpdCAwIHRydWUg Zm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KLSAgICBCeXRlICBtZXRob2Q7ICAgICAg ICAvKiBTVE9SRUQgKGZvciB6aXAgb25seSkgb3IgREVGTEFURUQgKi8KKyAgICBnel9oZWFkZXJw ICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLworICAgIHVs ZyAgIGd6aW5kZXg7ICAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICov CisgICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi8KICAg ICBpbnQgICBsYXN0X2ZsdXNoOyAgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlv dXMgZGVmbGF0ZSBjYWxsICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IGRlZmxhdGUu YzogKi8KQEAgLTE4Miw3ICsxOTQsNyBAQAogICAgIGludCBuaWNlX21hdGNoOyAvKiBTdG9wIHNl YXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovCiAKICAgICAgICAgICAg ICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovCi0gICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5 cGVkZWYgYmVsb3cgdG8gc3VwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisgICAgLyogRGlkbid0 IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAq LwogICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJh bCBhbmQgbGVuZ3RoIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9kdHJlZVsyKkRf Q09ERVMrMV07IC8qIGRpc3RhbmNlIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGJsX3Ry ZWVbMipCTF9DT0RFUysxXTsgIC8qIEh1ZmZtYW4gdHJlZSBmb3IgYml0IGxlbmd0aHMgKi8KQEAg LTIzOCw5ICsyNTAsOSBAQAogICAgIHVsZyBvcHRfbGVuOyAgICAgICAgLyogYml0IGxlbmd0aCBv ZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqLwogICAgIHVsZyBzdGF0aWNfbGVu OyAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICov CiAgICAgdUludCBtYXRjaGVzOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4g Y3VycmVudCBibG9jayAqLwotICAgIGludCBsYXN0X2VvYl9sZW47ICAgLyogYml0IGxlbmd0aCBv ZiBFT0IgY29kZSBmb3IgbGFzdCBibG9jayAqLworICAgIHVJbnQgaW5zZXJ0OyAgICAgICAgLyog Ynl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqLwogCi0jaWZkZWYgREVCVUcK KyNpZmRlZiBaTElCX0RFQlVHCiAgICAgdWxnIGNvbXByZXNzZWRfbGVuOyAvKiB0b3RhbCBiaXQg bGVuZ3RoIG9mIGNvbXByZXNzZWQgZmlsZSBtb2QgMl4zMiAqLwogICAgIHVsZyBiaXRzX3NlbnQ7 ICAgICAgLyogYml0IGxlbmd0aCBvZiBjb21wcmVzc2VkIGRhdGEgc2VudCBtb2QgMl4zMiAqLwog I2VuZGlmCkBAIC0yNTQsMTIgKzI2NiwxOSBAQAogICAgICAqIGFyZSBhbHdheXMgemVyby4KICAg ICAgKi8KIAorICAgIHVsZyBoaWdoX3dhdGVyOworICAgIC8qIEhpZ2ggd2F0ZXIgbWFyayBvZmZz ZXQgaW4gd2luZG93IGZvciBpbml0aWFsaXplZCBieXRlcyAtLSBieXRlcyBhYm92ZQorICAgICAq IHRoaXMgYXJlIHNldCB0byB6ZXJvIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayB3YXJu aW5ncyB3aGVuCisgICAgICogbG9uZ2VzdCBtYXRjaCByb3V0aW5lcyBhY2Nlc3MgYnl0ZXMgcGFz dCB0aGUgaW5wdXQuICBUaGlzIGlzIHRoZW4KKyAgICAgKiB1cGRhdGVkIHRvIHRoZSBuZXcgaGln aCB3YXRlciBtYXJrLgorICAgICAqLworCiB9IEZBUiBkZWZsYXRlX3N0YXRlOwogCiAvKiBPdXRw dXQgYSBieXRlIG9uIHRoZSBzdHJlYW0uCiAgKiBJTiBhc3NlcnRpb246IHRoZXJlIGlzIGVub3Vn aCByb29tIGluIHBlbmRpbmdfYnVmLgogICovCi0jZGVmaW5lIHB1dF9ieXRlKHMsIGMpIHtzLT5w ZW5kaW5nX2J1ZltzLT5wZW5kaW5nKytdID0gKGMpO30KKyNkZWZpbmUgcHV0X2J5dGUocywgYykg e3MtPnBlbmRpbmdfYnVmW3MtPnBlbmRpbmcrK10gPSAoQnl0ZWYpKGMpO30KIAogCiAjZGVmaW5l IE1JTl9MT09LQUhFQUQgKE1BWF9NQVRDSCtNSU5fTUFUQ0grMSkKQEAgLTI3MiwxNCArMjkxLDE5 IEBACiAgKiBkaXN0YW5jZXMgYXJlIGxpbWl0ZWQgdG8gTUFYX0RJU1QgaW5zdGVhZCBvZiBXU0la RS4KICAqLwogCisjZGVmaW5lIFdJTl9JTklUIE1BWF9NQVRDSAorLyogTnVtYmVyIG9mIGJ5dGVz IGFmdGVyIGVuZCBvZiBkYXRhIGluIHdpbmRvdyB0byBpbml0aWFsaXplIGluIG9yZGVyIHRvIGF2 b2lkCisgICBtZW1vcnkgY2hlY2tlciBlcnJvcnMgZnJvbSBsb25nZXN0IG1hdGNoIHJvdXRpbmVz ICovCisKICAgICAgICAgLyogaW4gdHJlZXMuYyAqLwotdm9pZCBfdHJfaW5pdCAgICAgICAgIE9G KChkZWZsYXRlX3N0YXRlICpzKSk7Ci1pbnQgIF90cl90YWxseSAgICAgICAgT0YoKGRlZmxhdGVf c3RhdGUgKnMsIHVuc2lnbmVkIGRpc3QsIHVuc2lnbmVkIGxjKSk7Ci12b2lkIF90cl9mbHVzaF9i bG9jayAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsIHVsZyBzdG9yZWRfbGVuLAot ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW9mKSk7Ci12b2lkIF90cl9hbGlnbiAgICAg ICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLXZvaWQgX3RyX3N0b3JlZF9ibG9jayBPRigoZGVm bGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwgdWxnIHN0b3JlZF9sZW4sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBlb2YpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfaW5pdCBPRigo ZGVmbGF0ZV9zdGF0ZSAqcykpOworaW50IFpMSUJfSU5URVJOQUwgX3RyX3RhbGx5IE9GKChkZWZs YXRlX3N0YXRlICpzLCB1bnNpZ25lZCBkaXN0LCB1bnNpZ25lZCBsYykpOwordm9pZCBaTElCX0lO VEVSTkFMIF90cl9mbHVzaF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwK KyAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOwordm9p ZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9iaXRzIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Cit2 b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Cit2b2lk IFpMSUJfSU5URVJOQUwgX3RyX3N0b3JlZF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hh cmYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFz dCkpOwogCiAjZGVmaW5lIGRfY29kZShkaXN0KSBcCiAgICAoKGRpc3QpIDwgMjU2ID8gX2Rpc3Rf Y29kZVtkaXN0XSA6IF9kaXN0X2NvZGVbMjU2KygoZGlzdCk+PjcpXSkKQEAgLTI4OCwxNSArMzEy LDE1IEBACiAgKiB1c2VkLgogICovCiAKLSNpZm5kZWYgREVCVUcKKyNpZm5kZWYgWkxJQl9ERUJV RwogLyogSW5saW5lIHZlcnNpb25zIG9mIF90cl90YWxseSBmb3Igc3BlZWQ6ICovCiAKICNpZiBk ZWZpbmVkKEdFTl9UUkVFU19IKSB8fCAhZGVmaW5lZChTVERDKQotICBleHRlcm4gdWNoIF9sZW5n dGhfY29kZVtdOwotICBleHRlcm4gdWNoIF9kaXN0X2NvZGVbXTsKKyAgZXh0ZXJuIHVjaCBaTElC X0lOVEVSTkFMIF9sZW5ndGhfY29kZVtdOworICBleHRlcm4gdWNoIFpMSUJfSU5URVJOQUwgX2Rp c3RfY29kZVtdOwogI2Vsc2UKLSAgZXh0ZXJuIGNvbnN0IHVjaCBfbGVuZ3RoX2NvZGVbXTsKLSAg ZXh0ZXJuIGNvbnN0IHVjaCBfZGlzdF9jb2RlW107CisgIGV4dGVybiBjb25zdCB1Y2ggWkxJQl9J TlRFUk5BTCBfbGVuZ3RoX2NvZGVbXTsKKyAgZXh0ZXJuIGNvbnN0IHVjaCBaTElCX0lOVEVSTkFM IF9kaXN0X2NvZGVbXTsKICNlbmRpZgogCiAjIGRlZmluZSBfdHJfdGFsbHlfbGl0KHMsIGMsIGZs dXNoKSBcCkBAIC0zMDcsOCArMzMxLDggQEAKICAgICBmbHVzaCA9IChzLT5sYXN0X2xpdCA9PSBz LT5saXRfYnVmc2l6ZS0xKTsgXAogICAgfQogIyBkZWZpbmUgX3RyX3RhbGx5X2Rpc3QocywgZGlz dGFuY2UsIGxlbmd0aCwgZmx1c2gpIFwKLSAgeyB1Y2ggbGVuID0gKGxlbmd0aCk7IFwKLSAgICB1 c2ggZGlzdCA9IChkaXN0YW5jZSk7IFwKKyAgeyB1Y2ggbGVuID0gKHVjaCkobGVuZ3RoKTsgXAor ICAgIHVzaCBkaXN0ID0gKHVzaCkoZGlzdGFuY2UpOyBcCiAgICAgcy0+ZF9idWZbcy0+bGFzdF9s aXRdID0gZGlzdDsgXAogICAgIHMtPmxfYnVmW3MtPmxhc3RfbGl0KytdID0gbGVuOyBcCiAgICAg ZGlzdC0tOyBcCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2Nt ZC9ncy96bGliL2V4YW1wbGUuYwotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL2V4YW1wbGUuYwlT dW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAw OjAwOjAwIDE5NzAgKzAwMDAKQEAgLTEsNTY3ICswLDAgQEAKLS8qIGV4YW1wbGUuYyAtLSB1c2Fn ZSBleGFtcGxlIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAo QykgMTk5NS0yMDAzIEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0 cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKi8KLQot LyogQCgjKSAkSWQ6IGV4YW1wbGUuYyx2IDEuMS4xLjEgMjAwNS8wNC8yNCAyMTozOTozNyBnaWxl cyBFeHAgJCAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJ6bGliLmgiCi0KLSNp ZmRlZiBTVERDCi0jICBpbmNsdWRlIDxzdHJpbmcuaD4KLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgot I2Vsc2UKLSAgIGV4dGVybiB2b2lkIGV4aXQgIE9GKChpbnQpKTsKLSNlbmRpZgotCi0jaWYgZGVm aW5lZChWTVMpIHx8IGRlZmluZWQoUklTQ09TKQotIyAgZGVmaW5lIFRFU1RGSUxFICJmb28tZ3oi Ci0jZWxzZQotIyAgZGVmaW5lIFRFU1RGSUxFICJmb28uZ3oiCi0jZW5kaWYKLQotI2RlZmluZSBD SEVDS19FUlIoZXJyLCBtc2cpIHsgXAotICAgIGlmIChlcnIgIT0gWl9PSykgeyBcCi0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiJXMgZXJyb3I6ICVkXG4iLCBtc2csIGVycik7IFwKLSAgICAgICAg ZXhpdCgxKTsgXAotICAgIH0gXAotfQotCi1jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhl bGxvISI7Ci0vKiAiaGVsbG8gd29ybGQiIHdvdWxkIGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUg cmVwZWF0ZWQgImhlbGxvIgotICogc3RyZXNzZXMgdGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVy LCBzb3JyeS4uLgotICovCi0KLWNvbnN0IGNoYXIgZGljdGlvbmFyeVtdID0gImhlbGxvIjsKLXVM b25nIGRpY3RJZDsgLyogQWRsZXIzMiB2YWx1ZSBvZiB0aGUgZGljdGlvbmFyeSAqLwotCi12b2lk IHRlc3RfY29tcHJlc3MgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4p KTsKLXZvaWQgdGVzdF9nemlvICAgICAgICAgIE9GKChjb25zdCBjaGFyICpmbmFtZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7 Ci12b2lkIHRlc3RfZGVmbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVu KSk7Ci12b2lkIHRlc3RfaW5mbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXBy TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVu Y29tcHJMZW4pKTsKLXZvaWQgdGVzdF9sYXJnZV9kZWZsYXRlIE9GKChCeXRlICpjb21wciwgdUxv bmcgY29tcHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwg dUxvbmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0X2xhcmdlX2luZmxhdGUgT0YoKEJ5dGUgKmNv bXByLCB1TG9uZyBjb21wckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1 bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Ci12b2lkIHRlc3RfZmx1c2ggICAgICAgICBPRigo Qnl0ZSAqY29tcHIsIHVMb25nICpjb21wckxlbikpOwotdm9pZCB0ZXN0X3N5bmMgICAgICAgICAg T0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Ci12b2lkIHRlc3RfZGljdF9k ZWZsYXRlICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuKSk7Ci12b2lkIHRlc3RfZGlj dF9pbmZsYXRlICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKLWludCAg bWFpbiAgICAgICAgICAgICAgIE9GKChpbnQgYXJnYywgY2hhciAqYXJndltdKSk7Ci0KLS8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotICogVGVzdCBjb21wcmVzcygpIGFuZCB1bmNvbXByZXNzKCkKLSAq Lwotdm9pZCB0ZXN0X2NvbXByZXNzKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxl bikKLSAgICBCeXRlICpjb21wciwgKnVuY29tcHI7Ci0gICAgdUxvbmcgY29tcHJMZW4sIHVuY29t cHJMZW47Ci17Ci0gICAgaW50IGVycjsKLSAgICB1TG9uZyBsZW4gPSAodUxvbmcpc3RybGVuKGhl bGxvKSsxOwotCi0gICAgZXJyID0gY29tcHJlc3MoY29tcHIsICZjb21wckxlbiwgKGNvbnN0IEJ5 dGVmKiloZWxsbywgbGVuKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiY29tcHJlc3MiKTsKLQotICAg IHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKLQotICAgIGVyciA9IHVuY29tcHJl c3ModW5jb21wciwgJnVuY29tcHJMZW4sIGNvbXByLCBjb21wckxlbik7Ci0gICAgQ0hFQ0tfRVJS KGVyciwgInVuY29tcHJlc3MiKTsKLQotICAgIGlmIChzdHJjbXAoKGNoYXIqKXVuY29tcHIsIGhl bGxvKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJhZCB1bmNvbXByZXNzXG4iKTsKLSAg ICAgICAgZXhpdCgxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoInVuY29tcHJlc3Mo KTogJXNcbiIsIChjaGFyICopdW5jb21wcik7Ci0gICAgfQotfQotCi0vKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSAqIFRlc3QgcmVhZC93cml0ZSBvZiAuZ3ogZmlsZXMKLSAqLwotdm9pZCB0ZXN0X2d6 aW8oZm5hbWUsIHVuY29tcHIsIHVuY29tcHJMZW4pCi0gICAgY29uc3QgY2hhciAqZm5hbWU7IC8q IGNvbXByZXNzZWQgZmlsZSBuYW1lICovCi0gICAgQnl0ZSAqdW5jb21wcjsKLSAgICB1TG9uZyB1 bmNvbXByTGVuOwotewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICBmcHJpbnRmKHN0ZGVyciwg Ik5PX0daQ09NUFJFU1MgLS0gZ3oqIGZ1bmN0aW9ucyBjYW5ub3QgY29tcHJlc3NcbiIpOwotI2Vs c2UKLSAgICBpbnQgZXJyOwotICAgIGludCBsZW4gPSAoaW50KXN0cmxlbihoZWxsbykrMTsKLSAg ICBnekZpbGUgZmlsZTsKLSAgICB6X29mZl90IHBvczsKLQotICAgIGZpbGUgPSBnem9wZW4oZm5h bWUsICJ3YiIpOwotICAgIGlmIChmaWxlID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJnem9wZW4gZXJyb3JcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBnenB1 dGMoZmlsZSwgJ2gnKTsKLSAgICBpZiAoZ3pwdXRzKGZpbGUsICJlbGxvIikgIT0gNCkgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgImd6cHV0cyBlcnI6ICVzXG4iLCBnemVycm9yKGZpbGUsICZl cnIpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgaWYgKGd6cHJpbnRmKGZpbGUsICIs ICVzISIsICJoZWxsbyIpICE9IDgpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJnenByaW50 ZiBlcnI6ICVzXG4iLCBnemVycm9yKGZpbGUsICZlcnIpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAg ICB9Ci0gICAgZ3pzZWVrKGZpbGUsIDFMLCBTRUVLX0NVUik7IC8qIGFkZCBvbmUgemVybyBieXRl ICovCi0gICAgZ3pjbG9zZShmaWxlKTsKLQotICAgIGZpbGUgPSBnem9wZW4oZm5hbWUsICJyYiIp OwotICAgIGlmIChmaWxlID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJnem9w ZW4gZXJyb3JcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBzdHJjcHkoKGNoYXIq KXVuY29tcHIsICJnYXJiYWdlIik7Ci0KLSAgICBpZiAoZ3pyZWFkKGZpbGUsIHVuY29tcHIsICh1 bnNpZ25lZCl1bmNvbXByTGVuKSAhPSBsZW4pIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJn enJlYWQgZXJyOiAlc1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7Ci0gICAgICAgIGV4aXQoMSk7 Ci0gICAgfQotICAgIGlmIChzdHJjbXAoKGNoYXIqKXVuY29tcHIsIGhlbGxvKSkgewotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImJhZCBnenJlYWQ6ICVzXG4iLCAoY2hhciopdW5jb21wcik7Ci0g ICAgICAgIGV4aXQoMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJnenJlYWQoKTog JXNcbiIsIChjaGFyKil1bmNvbXByKTsKLSAgICB9Ci0KLSAgICBwb3MgPSBnenNlZWsoZmlsZSwg LThMLCBTRUVLX0NVUik7Ci0gICAgaWYgKHBvcyAhPSA2IHx8IGd6dGVsbChmaWxlKSAhPSBwb3Mp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJnenNlZWsgZXJyb3IsIHBvcz0lbGQsIGd6dGVs bD0lbGRcbiIsCi0gICAgICAgICAgICAgICAgKGxvbmcpcG9zLCAobG9uZylnenRlbGwoZmlsZSkp OwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmIChnemdldGMoZmlsZSkgIT0gJyAn KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pnZXRjIGVycm9yXG4iKTsKLSAgICAgICAg ZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoZ3p1bmdldGMoJyAnLCBmaWxlKSAhPSAnICcpIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJnenVuZ2V0YyBlcnJvclxuIik7Ci0gICAgICAgIGV4 aXQoMSk7Ci0gICAgfQotCi0gICAgZ3pnZXRzKGZpbGUsIChjaGFyKil1bmNvbXByLCAoaW50KXVu Y29tcHJMZW4pOwotICAgIGlmIChzdHJsZW4oKGNoYXIqKXVuY29tcHIpICE9IDcpIHsgLyogIiBo ZWxsbyEiICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pnZXRzIGVyciBhZnRlciBnenNl ZWs6ICVzXG4iLCBnemVycm9yKGZpbGUsICZlcnIpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9 Ci0gICAgaWYgKHN0cmNtcCgoY2hhciopdW5jb21wciwgaGVsbG8gKyA2KSkgewotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImJhZCBnemdldHMgYWZ0ZXIgZ3pzZWVrXG4iKTsKLSAgICAgICAgZXhp dCgxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoImd6Z2V0cygpIGFmdGVyIGd6c2Vl azogJXNcbiIsIChjaGFyKil1bmNvbXByKTsKLSAgICB9Ci0KLSAgICBnemNsb3NlKGZpbGUpOwot I2VuZGlmCi19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGVzdCBkZWZsYXRlKCkgd2l0 aCBzbWFsbCBidWZmZXJzCi0gKi8KLXZvaWQgdGVzdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbikK LSAgICBCeXRlICpjb21wcjsKLSAgICB1TG9uZyBjb21wckxlbjsKLXsKLSAgICB6X3N0cmVhbSBj X3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCi0gICAgaW50IGVycjsKLSAgICB1TG9u ZyBsZW4gPSAodUxvbmcpc3RybGVuKGhlbGxvKSsxOwotCi0gICAgY19zdHJlYW0uemFsbG9jID0g KGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBj X3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7Ci0KLSAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19z dHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxh dGVJbml0Iik7Ci0KLSAgICBjX3N0cmVhbS5uZXh0X2luICA9IChCeXRlZiopaGVsbG87Ci0gICAg Y19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKLQotICAgIHdoaWxlIChjX3N0cmVhbS50b3RhbF9p biAhPSBsZW4gJiYgY19zdHJlYW0udG90YWxfb3V0IDwgY29tcHJMZW4pIHsKLSAgICAgICAgY19z dHJlYW0uYXZhaWxfaW4gPSBjX3N0cmVhbS5hdmFpbF9vdXQgPSAxOyAvKiBmb3JjZSBzbWFsbCBi dWZmZXJzICovCi0gICAgICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX05PX0ZMVVNIKTsK LSAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKLSAgICB9Ci0gICAgLyogRmluaXNo IHRoZSBzdHJlYW0sIHN0aWxsIGZvcmNpbmcgc21hbGwgYnVmZmVyczogKi8KLSAgICBmb3IgKDs7 KSB7Ci0gICAgICAgIGNfc3RyZWFtLmF2YWlsX291dCA9IDE7Ci0gICAgICAgIGVyciA9IGRlZmxh dGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7Ci0gICAgICAgIGlmIChlcnIgPT0gWl9TVFJFQU1fRU5E KSBicmVhazsKLSAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKLSAgICB9Ci0KLSAg ICBlcnIgPSBkZWZsYXRlRW5kKCZjX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxh dGVFbmQiKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUZXN0IGluZmxhdGUoKSB3 aXRoIHNtYWxsIGJ1ZmZlcnMKLSAqLwotdm9pZCB0ZXN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVu LCB1bmNvbXByLCB1bmNvbXByTGVuKQotICAgIEJ5dGUgKmNvbXByLCAqdW5jb21wcjsKLSAgICB1 TG9uZyBjb21wckxlbiwgdW5jb21wckxlbjsKLXsKLSAgICBpbnQgZXJyOwotICAgIHpfc3RyZWFt IGRfc3RyZWFtOyAvKiBkZWNvbXByZXNzaW9uIHN0cmVhbSAqLwotCi0gICAgc3RyY3B5KChjaGFy Kil1bmNvbXByLCAiZ2FyYmFnZSIpOwotCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1 bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS5v cGFxdWUgPSAodm9pZHBmKTA7Ci0KLSAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwotICAg IGRfc3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICBkX3N0cmVhbS5uZXh0X291dCA9IHVuY29tcHI7 Ci0KLSAgICBlcnIgPSBpbmZsYXRlSW5pdCgmZF9zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIs ICJpbmZsYXRlSW5pdCIpOwotCi0gICAgd2hpbGUgKGRfc3RyZWFtLnRvdGFsX291dCA8IHVuY29t cHJMZW4gJiYgZF9zdHJlYW0udG90YWxfaW4gPCBjb21wckxlbikgewotICAgICAgICBkX3N0cmVh bS5hdmFpbF9pbiA9IGRfc3RyZWFtLmF2YWlsX291dCA9IDE7IC8qIGZvcmNlIHNtYWxsIGJ1ZmZl cnMgKi8KLSAgICAgICAgZXJyID0gaW5mbGF0ZSgmZF9zdHJlYW0sIFpfTk9fRkxVU0gpOwotICAg ICAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0gICAgICAgIENIRUNLX0VSUihl cnIsICJpbmZsYXRlIik7Ci0gICAgfQotCi0gICAgZXJyID0gaW5mbGF0ZUVuZCgmZF9zdHJlYW0p OwotICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlRW5kIik7Ci0KLSAgICBpZiAoc3RyY21wKChj aGFyKil1bmNvbXByLCBoZWxsbykpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgaW5m bGF0ZVxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRm KCJpbmZsYXRlKCk6ICVzXG4iLCAoY2hhciAqKXVuY29tcHIpOwotICAgIH0KLX0KLQotLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0gKiBUZXN0IGRlZmxhdGUoKSB3aXRoIGxhcmdlIGJ1ZmZlcnMgYW5k IGR5bmFtaWMgY2hhbmdlIG9mIGNvbXByZXNzaW9uIGxldmVsCi0gKi8KLXZvaWQgdGVzdF9sYXJn ZV9kZWZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbikKLSAgICBCeXRl ICpjb21wciwgKnVuY29tcHI7Ci0gICAgdUxvbmcgY29tcHJMZW4sIHVuY29tcHJMZW47Ci17Ci0g ICAgel9zdHJlYW0gY19zdHJlYW07IC8qIGNvbXByZXNzaW9uIHN0cmVhbSAqLwotICAgIGludCBl cnI7Ci0KLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFt LnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsK LQotICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9CRVNUX1NQRUVEKTsKLSAgICBD SEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKLQotICAgIGNfc3RyZWFtLm5leHRfb3V0ID0g Y29tcHI7Ci0gICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpY29tcHJMZW47Ci0KLSAgICAv KiBBdCB0aGlzIHBvaW50LCB1bmNvbXByIGlzIHN0aWxsIG1vc3RseSB6ZXJvZXMsIHNvIGl0IHNo b3VsZCBjb21wcmVzcwotICAgICAqIHZlcnkgd2VsbDoKLSAgICAgKi8KLSAgICBjX3N0cmVhbS5u ZXh0X2luID0gdW5jb21wcjsKLSAgICBjX3N0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXVuY29tcHJM ZW47Ci0gICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfTk9fRkxVU0gpOwotICAgIENIRUNL X0VSUihlcnIsICJkZWZsYXRlIik7Ci0gICAgaWYgKGNfc3RyZWFtLmF2YWlsX2luICE9IDApIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJkZWZsYXRlIG5vdCBncmVlZHlcbiIpOwotICAgICAg ICBleGl0KDEpOwotICAgIH0KLQotICAgIC8qIEZlZWQgaW4gYWxyZWFkeSBjb21wcmVzc2VkIGRh dGEgYW5kIHN3aXRjaCB0byBubyBjb21wcmVzc2lvbjogKi8KLSAgICBkZWZsYXRlUGFyYW1zKCZj X3N0cmVhbSwgWl9OT19DT01QUkVTU0lPTiwgWl9ERUZBVUxUX1NUUkFURUdZKTsKLSAgICBjX3N0 cmVhbS5uZXh0X2luID0gY29tcHI7Ci0gICAgY19zdHJlYW0uYXZhaWxfaW4gPSAodUludCljb21w ckxlbi8yOwotICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX05PX0ZMVVNIKTsKLSAgICBD SEVDS19FUlIoZXJyLCAiZGVmbGF0ZSIpOwotCi0gICAgLyogU3dpdGNoIGJhY2sgdG8gY29tcHJl c3NpbmcgbW9kZTogKi8KLSAgICBkZWZsYXRlUGFyYW1zKCZjX3N0cmVhbSwgWl9CRVNUX0NPTVBS RVNTSU9OLCBaX0ZJTFRFUkVEKTsKLSAgICBjX3N0cmVhbS5uZXh0X2luID0gdW5jb21wcjsKLSAg ICBjX3N0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXVuY29tcHJMZW47Ci0gICAgZXJyID0gZGVmbGF0 ZSgmY19zdHJlYW0sIFpfTk9fRkxVU0gpOwotICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlIik7 Ci0KLSAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9GSU5JU0gpOwotICAgIGlmIChlcnIg IT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZGVmbGF0ZSBzaG91 bGQgcmVwb3J0IFpfU1RSRUFNX0VORFxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAg IGVyciA9IGRlZmxhdGVFbmQoJmNfc3RyZWFtKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0 ZUVuZCIpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRlc3QgaW5mbGF0ZSgpIHdp dGggbGFyZ2UgYnVmZmVycwotICovCi12b2lkIHRlc3RfbGFyZ2VfaW5mbGF0ZShjb21wciwgY29t cHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCi0gICAgQnl0ZSAqY29tcHIsICp1bmNvbXByOwot ICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOwotewotICAgIGludCBlcnI7Ci0gICAgel9z dHJlYW0gZF9zdHJlYW07IC8qIGRlY29tcHJlc3Npb24gc3RyZWFtICovCi0KLSAgICBzdHJjcHko KGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7Ci0KLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxs b2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIGRfc3Ry ZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKLQotICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7 Ci0gICAgZF9zdHJlYW0uYXZhaWxfaW4gPSAodUludCljb21wckxlbjsKLQotICAgIGVyciA9IGlu ZmxhdGVJbml0KCZkX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGVJbml0Iik7 Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGRfc3RyZWFtLm5leHRfb3V0ID0gdW5jb21wcjsg ICAgICAgICAgICAvKiBkaXNjYXJkIHRoZSBvdXRwdXQgKi8KLSAgICAgICAgZF9zdHJlYW0uYXZh aWxfb3V0ID0gKHVJbnQpdW5jb21wckxlbjsKLSAgICAgICAgZXJyID0gaW5mbGF0ZSgmZF9zdHJl YW0sIFpfTk9fRkxVU0gpOwotICAgICAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCkgYnJlYWs7 Ci0gICAgICAgIENIRUNLX0VSUihlcnIsICJsYXJnZSBpbmZsYXRlIik7Ci0gICAgfQotCi0gICAg ZXJyID0gaW5mbGF0ZUVuZCgmZF9zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRl RW5kIik7Ci0KLSAgICBpZiAoZF9zdHJlYW0udG90YWxfb3V0ICE9IDIqdW5jb21wckxlbiArIGNv bXByTGVuLzIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgbGFyZ2UgaW5mbGF0ZTog JWxkXG4iLCBkX3N0cmVhbS50b3RhbF9vdXQpOwotICAgICAgICBleGl0KDEpOwotICAgIH0gZWxz ZSB7Ci0gICAgICAgIHByaW50ZigibGFyZ2VfaW5mbGF0ZSgpOiBPS1xuIik7Ci0gICAgfQotfQot Ci0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggZnVsbCBmbHVz aAotICovCi12b2lkIHRlc3RfZmx1c2goY29tcHIsIGNvbXByTGVuKQotICAgIEJ5dGUgKmNvbXBy OwotICAgIHVMb25nICpjb21wckxlbjsKLXsKLSAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29t cHJlc3Npb24gc3RyZWFtICovCi0gICAgaW50IGVycjsKLSAgICB1SW50IGxlbiA9ICh1SW50KXN0 cmxlbihoZWxsbykrMTsKLQotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0g ICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0gICAgY19zdHJlYW0ub3BhcXVlID0g KHZvaWRwZikwOwotCi0gICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRf Q09NUFJFU1NJT04pOwotICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwotCi0gICAg Y19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOwotICAgIGNfc3RyZWFtLm5leHRfb3V0 ID0gY29tcHI7Ci0gICAgY19zdHJlYW0uYXZhaWxfaW4gPSAzOwotICAgIGNfc3RyZWFtLmF2YWls X291dCA9ICh1SW50KSpjb21wckxlbjsKLSAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9G VUxMX0ZMVVNIKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZSIpOwotCi0gICAgY29tcHJb M10rKzsgLyogZm9yY2UgYW4gZXJyb3IgaW4gZmlyc3QgY29tcHJlc3NlZCBibG9jayAqLwotICAg IGNfc3RyZWFtLmF2YWlsX2luID0gbGVuIC0gMzsKLQotICAgIGVyciA9IGRlZmxhdGUoJmNfc3Ry ZWFtLCBaX0ZJTklTSCk7Ci0gICAgaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAg Q0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKLSAgICB9Ci0gICAgZXJyID0gZGVmbGF0ZUVuZCgm Y19zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlRW5kIik7Ci0KLSAgICAqY29t cHJMZW4gPSBjX3N0cmVhbS50b3RhbF9vdXQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot ICogVGVzdCBpbmZsYXRlU3luYygpCi0gKi8KLXZvaWQgdGVzdF9zeW5jKGNvbXByLCBjb21wckxl biwgdW5jb21wciwgdW5jb21wckxlbikKLSAgICBCeXRlICpjb21wciwgKnVuY29tcHI7Ci0gICAg dUxvbmcgY29tcHJMZW4sIHVuY29tcHJMZW47Ci17Ci0gICAgaW50IGVycjsKLSAgICB6X3N0cmVh bSBkX3N0cmVhbTsgLyogZGVjb21wcmVzc2lvbiBzdHJlYW0gKi8KLQotICAgIHN0cmNweSgoY2hh ciopdW5jb21wciwgImdhcmJhZ2UiKTsKLQotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19m dW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0gICAgZF9zdHJlYW0u b3BhcXVlID0gKHZvaWRwZikwOwotCi0gICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKLSAg ICBkX3N0cmVhbS5hdmFpbF9pbiA9IDI7IC8qIGp1c3QgcmVhZCB0aGUgemxpYiBoZWFkZXIgKi8K LQotICAgIGVyciA9IGluZmxhdGVJbml0KCZkX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwg ImluZmxhdGVJbml0Iik7Ci0KLSAgICBkX3N0cmVhbS5uZXh0X291dCA9IHVuY29tcHI7Ci0gICAg ZF9zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpdW5jb21wckxlbjsKLQotICAgIGluZmxhdGUoJmRf c3RyZWFtLCBaX05PX0ZMVVNIKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZSIpOwotCi0g ICAgZF9zdHJlYW0uYXZhaWxfaW4gPSAodUludCljb21wckxlbi0yOyAgIC8qIHJlYWQgYWxsIGNv bXByZXNzZWQgZGF0YSAqLwotICAgIGVyciA9IGluZmxhdGVTeW5jKCZkX3N0cmVhbSk7ICAgICAg ICAgICAvKiBidXQgc2tpcCB0aGUgZGFtYWdlZCBwYXJ0ICovCi0gICAgQ0hFQ0tfRVJSKGVyciwg ImluZmxhdGVTeW5jIik7Ci0KLSAgICBlcnIgPSBpbmZsYXRlKCZkX3N0cmVhbSwgWl9GSU5JU0gp OwotICAgIGlmIChlcnIgIT0gWl9EQVRBX0VSUk9SKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy LCAiaW5mbGF0ZSBzaG91bGQgcmVwb3J0IERBVEFfRVJST1JcbiIpOwotICAgICAgICAvKiBCZWNh dXNlIG9mIGluY29ycmVjdCBhZGxlcjMyICovCi0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAg IGVyciA9IGluZmxhdGVFbmQoJmRfc3RyZWFtKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0 ZUVuZCIpOwotCi0gICAgcHJpbnRmKCJhZnRlciBpbmZsYXRlU3luYygpOiBoZWwlc1xuIiwgKGNo YXIgKil1bmNvbXByKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUZXN0IGRlZmxh dGUoKSB3aXRoIHByZXNldCBkaWN0aW9uYXJ5Ci0gKi8KLXZvaWQgdGVzdF9kaWN0X2RlZmxhdGUo Y29tcHIsIGNvbXByTGVuKQotICAgIEJ5dGUgKmNvbXByOwotICAgIHVMb25nIGNvbXByTGVuOwot ewotICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KLSAgICBp bnQgZXJyOwotCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0 cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBm KTA7Ci0KLSAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lP Tik7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVJbml0Iik7Ci0KLSAgICBlcnIgPSBkZWZs YXRlU2V0RGljdGlvbmFyeSgmY19zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LCBzaXplb2YoZGljdGlvbmFyeSkpOwotICAgIENI RUNLX0VSUihlcnIsICJkZWZsYXRlU2V0RGljdGlvbmFyeSIpOwotCi0gICAgZGljdElkID0gY19z dHJlYW0uYWRsZXI7Ci0gICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKLSAgICBjX3N0cmVh bS5hdmFpbF9vdXQgPSAodUludCljb21wckxlbjsKLQotICAgIGNfc3RyZWFtLm5leHRfaW4gPSAo Qnl0ZWYqKWhlbGxvOwotICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc3RybGVuKGhlbGxv KSsxOwotCi0gICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRklOSVNIKTsKLSAgICBpZiAo ZXJyICE9IFpfU1RSRUFNX0VORCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImRlZmxhdGUg c2hvdWxkIHJlcG9ydCBaX1NUUkVBTV9FTkRcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0K LSAgICBlcnIgPSBkZWZsYXRlRW5kKCZjX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImRl ZmxhdGVFbmQiKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUZXN0IGluZmxhdGUo KSB3aXRoIGEgcHJlc2V0IGRpY3Rpb25hcnkKLSAqLwotdm9pZCB0ZXN0X2RpY3RfaW5mbGF0ZShj b21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCi0gICAgQnl0ZSAqY29tcHIsICp1 bmNvbXByOwotICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOwotewotICAgIGludCBlcnI7 Ci0gICAgel9zdHJlYW0gZF9zdHJlYW07IC8qIGRlY29tcHJlc3Npb24gc3RyZWFtICovCi0KLSAg ICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7Ci0KLSAgICBkX3N0cmVhbS56YWxs b2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOwot ICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKLQotICAgIGRfc3RyZWFtLm5leHRfaW4g ID0gY29tcHI7Ci0gICAgZF9zdHJlYW0uYXZhaWxfaW4gPSAodUludCljb21wckxlbjsKLQotICAg IGVyciA9IGluZmxhdGVJbml0KCZkX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImluZmxh dGVJbml0Iik7Ci0KLSAgICBkX3N0cmVhbS5uZXh0X291dCA9IHVuY29tcHI7Ci0gICAgZF9zdHJl YW0uYXZhaWxfb3V0ID0gKHVJbnQpdW5jb21wckxlbjsKLQotICAgIGZvciAoOzspIHsKLSAgICAg ICAgZXJyID0gaW5mbGF0ZSgmZF9zdHJlYW0sIFpfTk9fRkxVU0gpOwotICAgICAgICBpZiAoZXJy ID09IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0gICAgICAgIGlmIChlcnIgPT0gWl9ORUVEX0RJQ1Qp IHsKLSAgICAgICAgICAgIGlmIChkX3N0cmVhbS5hZGxlciAhPSBkaWN0SWQpIHsKLSAgICAgICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuZXhwZWN0ZWQgZGljdGlvbmFyeSIpOwotICAgICAg ICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBpbmZs YXRlU2V0RGljdGlvbmFyeSgmZF9zdHJlYW0sIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkaWN0aW9uYXJ5KSk7 Ci0gICAgICAgIH0KLSAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUgd2l0aCBkaWN0Iik7 Ci0gICAgfQotCi0gICAgZXJyID0gaW5mbGF0ZUVuZCgmZF9zdHJlYW0pOwotICAgIENIRUNLX0VS UihlcnIsICJpbmZsYXRlRW5kIik7Ci0KLSAgICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBo ZWxsbykpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgaW5mbGF0ZSB3aXRoIGRpY3Rc biIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigiaW5m bGF0ZSB3aXRoIGRpY3Rpb25hcnk6ICVzXG4iLCAoY2hhciAqKXVuY29tcHIpOwotICAgIH0KLX0K LQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVc2FnZTogIGV4YW1wbGUgW291dHB1dC5neiAg W2lucHV0Lmd6XV0KLSAqLwotCi1pbnQgbWFpbihhcmdjLCBhcmd2KQotICAgIGludCBhcmdjOwot ICAgIGNoYXIgKmFyZ3ZbXTsKLXsKLSAgICBCeXRlICpjb21wciwgKnVuY29tcHI7Ci0gICAgdUxv bmcgY29tcHJMZW4gPSAxMDAwMCpzaXplb2YoaW50KTsgLyogZG9uJ3Qgb3ZlcmZsb3cgb24gTVNE T1MgKi8KLSAgICB1TG9uZyB1bmNvbXByTGVuID0gY29tcHJMZW47Ci0gICAgc3RhdGljIGNvbnN0 IGNoYXIqIG15VmVyc2lvbiA9IFpMSUJfVkVSU0lPTjsKLQotICAgIGlmICh6bGliVmVyc2lvbigp WzBdICE9IG15VmVyc2lvblswXSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluY29tcGF0 aWJsZSB6bGliIHZlcnNpb25cbiIpOwotICAgICAgICBleGl0KDEpOwotCi0gICAgfSBlbHNlIGlm IChzdHJjbXAoemxpYlZlcnNpb24oKSwgWkxJQl9WRVJTSU9OKSAhPSAwKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAid2FybmluZzogZGlmZmVyZW50IHpsaWIgdmVyc2lvblxuIik7Ci0gICAg fQotCi0gICAgcHJpbnRmKCJ6bGliIHZlcnNpb24gJXMgPSAweCUwNHgsIGNvbXBpbGUgZmxhZ3Mg PSAweCVseFxuIiwKLSAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgWkxJQl9WRVJOVU0sIHpsaWJD b21waWxlRmxhZ3MoKSk7Ci0KLSAgICBjb21wciAgICA9IChCeXRlKiljYWxsb2MoKHVJbnQpY29t cHJMZW4sIDEpOwotICAgIHVuY29tcHIgID0gKEJ5dGUqKWNhbGxvYygodUludCl1bmNvbXByTGVu LCAxKTsKLSAgICAvKiBjb21wciBhbmQgdW5jb21wciBhcmUgY2xlYXJlZCB0byBhdm9pZCByZWFk aW5nIHVuaW5pdGlhbGl6ZWQKLSAgICAgKiBkYXRhIGFuZCB0byBlbnN1cmUgdGhhdCB1bmNvbXBy IGNvbXByZXNzZXMgd2VsbC4KLSAgICAgKi8KLSAgICBpZiAoY29tcHIgPT0gWl9OVUxMIHx8IHVu Y29tcHIgPT0gWl9OVUxMKSB7Ci0gICAgICAgIHByaW50Zigib3V0IG9mIG1lbW9yeVxuIik7Ci0g ICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIHRlc3RfY29tcHJlc3MoY29tcHIsIGNvbXByTGVu LCB1bmNvbXByLCB1bmNvbXByTGVuKTsKLQotICAgIHRlc3RfZ3ppbygoYXJnYyA+IDEgPyBhcmd2 WzFdIDogVEVTVEZJTEUpLAotICAgICAgICAgICAgICB1bmNvbXByLCB1bmNvbXByTGVuKTsKLQot ICAgIHRlc3RfZGVmbGF0ZShjb21wciwgY29tcHJMZW4pOwotICAgIHRlc3RfaW5mbGF0ZShjb21w ciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwotCi0gICAgdGVzdF9sYXJnZV9kZWZs YXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7Ci0gICAgdGVzdF9sYXJn ZV9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7Ci0KLSAgICB0 ZXN0X2ZsdXNoKGNvbXByLCAmY29tcHJMZW4pOwotICAgIHRlc3Rfc3luYyhjb21wciwgY29tcHJM ZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwotICAgIGNvbXByTGVuID0gdW5jb21wckxlbjsKLQot ICAgIHRlc3RfZGljdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbik7Ci0gICAgdGVzdF9kaWN0X2lu ZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKLQotICAgIGZyZWUo Y29tcHIpOwotICAgIGZyZWUodW5jb21wcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtciA5 YTMxNzcyMzE3OTAgLXIgZTJkMTkzOWIxY2NjIHN5cy9zcmMvY21kL2dzL3psaWIvZ3pjbG9zZS5j Ci0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3N5cy9z cmMvY21kL2dzL3psaWIvZ3pjbG9zZS5jCVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApA QCAtMCwwICsxLDI1IEBACisvKiBnemNsb3NlLmMgLS0gemxpYiBnemNsb3NlKCkgZnVuY3Rpb24K KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9u cyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5o CisgKi8KKworI2luY2x1ZGUgImd6Z3V0cy5oIgorCisvKiBnemNsb3NlKCkgaXMgaW4gYSBzZXBh cmF0ZSBmaWxlIHNvIHRoYXQgaXQgaXMgbGlua2VkIGluIG9ubHkgaWYgaXQgaXMgdXNlZC4KKyAg IFRoYXQgd2F5IHRoZSBvdGhlciBnemNsb3NlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBpbnN0ZWFk IHRvIGF2b2lkIGxpbmtpbmcgaW4KKyAgIHVubmVlZGVkIGNvbXByZXNzaW9uIG9yIGRlY29tcHJl c3Npb24gcm91dGluZXMuICovCitpbnQgWkVYUE9SVCBnemNsb3NlKGZpbGUpCisgICAgZ3pGaWxl IGZpbGU7Cit7CisjaWZuZGVmIE5PX0daQ09NUFJFU1MKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisK KyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Cisg ICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0g R1pfUkVBRCA/IGd6Y2xvc2VfcihmaWxlKSA6IGd6Y2xvc2VfdyhmaWxlKTsKKyNlbHNlCisgICAg cmV0dXJuIGd6Y2xvc2VfcihmaWxlKTsKKyNlbmRpZgorfQpkaWZmIC1yIDlhMzE3NzIzMTc5MCAt ciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9nemd1dHMuaAotLS0gL2Rldi9udWxs CVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGli L2d6Z3V0cy5oCVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtMCwwICsxLDIxOCBA QAorLyogZ3pndXRzLmggLS0gemxpYiBpbnRlcm5hbCBoZWFkZXIgZGVmaW5pdGlvbnMgZm9yIGd6 KiBvcGVyYXRpb25zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIw MTIsIDIwMTMsIDIwMTYgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0 aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpZmRl ZiBfTEFSR0VGSUxFNjRfU09VUkNFCisjICBpZm5kZWYgX0xBUkdFRklMRV9TT1VSQ0UKKyMgICAg ZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEKKyMgIGVuZGlmCisjICBpZmRlZiBfRklMRV9PRkZT RVRfQklUUworIyAgICB1bmRlZiBfRklMRV9PRkZTRVRfQklUUworIyAgZW5kaWYKKyNlbmRpZgor CisjaWZkZWYgSEFWRV9ISURERU4KKyMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRl X18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCisjZWxzZQorIyAgZGVmaW5lIFpMSUJfSU5URVJO QUwKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ6bGliLmgiCisjaWZk ZWYgU1REQworIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMg IGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpZm5kZWYgX1BPU0lYX1NPVVJDRQorIyAg ZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpZmRl ZiBfV0lOMzIKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9f VFVSQk9DX18pIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX1dJTjMyKQorIyAgaW5j bHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19D WUdXSU5fXykKKyMgIGRlZmluZSBXSURFQ0hBUgorI2VuZGlmCisKKyNpZmRlZiBXSU5BUElfRkFN SUxZCisjICBkZWZpbmUgb3BlbiBfb3BlbgorIyAgZGVmaW5lIHJlYWQgX3JlYWQKKyMgIGRlZmlu ZSB3cml0ZSBfd3JpdGUKKyMgIGRlZmluZSBjbG9zZSBfY2xvc2UKKyNlbmRpZgorCisjaWZkZWYg Tk9fREVGTEFURSAgICAgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBkZWZpbml0aW9u ICovCisjICBkZWZpbmUgTk9fR1pDT01QUkVTUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREM5 OSkgfHwgKGRlZmluZWQoX19UVVJCT0NfXykgJiYgX19UVVJCT0NfXyA+PSAweDU1MCkKKyMgIGlm bmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlm CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgIGlmbmRlZiBIQVZFX1ZTTlBS SU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lm IGRlZmluZWQoTVNET1MpICYmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoQk9STEFOREMgPiAw eDQxMCkKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklO VEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgaWZkZWYg TVNET1MKKy8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChE SkdQUD8pLAorICAgYnV0IGZvciBub3cgd2UganVzdCBhc3N1bWUgaXQgZG9lc24ndC4gKi8KKyMg ICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fVFVSQk9DX18KKyMg ICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIFdJTjMyCisvKiBJbiBX aW4zMiwgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSBhcyB0aGUgIm5vbi1BTlNJIiBfdnNucHJpbnRm LiAqLworIyAgICBpZiAhZGVmaW5lZCh2c25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50 ZikKKyMgICAgICBpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKCBkZWZpbmVkKF9NU0NfVkVSKSAm JiBfTVNDX1ZFUiA8IDE1MDAgKQorIyAgICAgICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50 ZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX19TQVNDCisj ICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBWTVMKKyMgICAgZGVm aW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fT1M0MDBfXworIyAgICBkZWZp bmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19NVlNfXworIyAgICBkZWZpbmUg Tk9fdnNucHJpbnRmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIHVubGlrZSBzbnByaW50ZiAod2hp Y2ggaXMgcmVxdWlyZWQgaW4gQzk5KSwgX3NucHJpbnRmIGRvZXMgbm90IGd1YXJhbnRlZQorICAg bnVsbCB0ZXJtaW5hdGlvbiBvZiB0aGUgcmVzdWx0IC0tIGhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVz ZWQgaW4gZ3psaWIuYyB3aGVyZQorICAgdGhlIHJlc3VsdCBpcyBhc3N1cmVkIHRvIGZpdCBpbiB0 aGUgc3BhY2UgcHJvdmlkZWQgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8 IDE5MDAKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCisjaWZuZGVmIGxv Y2FsCisjICBkZWZpbmUgbG9jYWwgc3RhdGljCisjZW5kaWYKKy8qIHNpbmNlICJzdGF0aWMiIGlz IHVzZWQgdG8gbWVhbiB0d28gY29tcGxldGVseSBkaWZmZXJlbnQgdGhpbmdzIGluIEMsIHdlCisg ICBkZWZpbmUgImxvY2FsIiBmb3IgdGhlIG5vbi1zdGF0aWMgbWVhbmluZyBvZiAic3RhdGljIiwg Zm9yIHJlYWRhYmlsaXR5CisgICAoY29tcGlsZSB3aXRoIC1EbG9jYWwgaWYgeW91ciBkZWJ1Z2dl ciBjYW4ndCBmaW5kIHN0YXRpYyBzeW1ib2xzKSAqLworCisvKiBneiogZnVuY3Rpb25zIGFsd2F5 cyB1c2UgbGlicmFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAqLworI2lmbmRlZiBTVERDCisgIGV4 dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKKyAgZXh0ZXJuIHZvaWQgICBmcmVl ICAgT0YoKHZvaWRwZiBwdHIpKTsKKyNlbmRpZgorCisvKiBnZXQgZXJybm8gYW5kIHN0cmVycm9y IGRlZmluaXRpb24gKi8KKyNpZiBkZWZpbmVkIFVOREVSX0NFCisjICBpbmNsdWRlIDx3aW5kb3dz Lmg+CisjICBkZWZpbmUgenN0cmVycm9yKCkgZ3pfc3Ryd2luZXJyb3IoKERXT1JEKUdldExhc3RF cnJvcigpKQorI2Vsc2UKKyMgIGlmbmRlZiBOT19TVFJFUlJPUgorIyAgICBpbmNsdWRlIDxlcnJu by5oPgorIyAgICBkZWZpbmUgenN0cmVycm9yKCkgc3RyZXJyb3IoZXJybm8pCisjICBlbHNlCisj ICAgIGRlZmluZSB6c3RyZXJyb3IoKSAic3RkaW8gZXJyb3IgKGNvbnN1bHQgZXJybm8pIgorIyAg ZW5kaWYKKyNlbmRpZgorCisvKiBwcm92aWRlIHByb3RvdHlwZXMgZm9yIHRoZXNlIHdoZW4gYnVp bGRpbmcgemxpYiB3aXRob3V0IExGUyAqLworI2lmICFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VS Q0UpIHx8IF9MRlM2NF9MQVJHRUZJTEUtMCA9PSAwCisgICAgWkVYVEVSTiBnekZpbGUgWkVYUE9S VCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKyAgICBaRVhURVJO IHpfb2ZmNjRfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmNjRfdCwgaW50KSk7 CisgICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7Cisg ICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0IE9GKChnekZpbGUpKTsKKyNl bmRpZgorCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisjaWYgTUFYX01FTV9MRVZFTCA+PSA4Cisj ICBkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjZWxzZQorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwg IE1BWF9NRU1fTEVWRUwKKyNlbmRpZgorCisvKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBk b3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAodGhpcyBhbmQKKyAgIHR3aWNlIHRo aXMgbXVzdCBiZSBhYmxlIHRvIGZpdCBpbiBhbiB1bnNpZ25lZCB0eXBlKSAqLworI2RlZmluZSBH WkJVRlNJWkUgODE5MgorCisvKiBnemlwIG1vZGVzLCBhbHNvIHByb3ZpZGUgYSBsaXR0bGUgaW50 ZWdyaXR5IGNoZWNrIG9uIHRoZSBwYXNzZWQgc3RydWN0dXJlICovCisjZGVmaW5lIEdaX05PTkUg MAorI2RlZmluZSBHWl9SRUFEIDcyNDcKKyNkZWZpbmUgR1pfV1JJVEUgMzExNTMKKyNkZWZpbmUg R1pfQVBQRU5EIDEgICAgIC8qIG1vZGUgc2V0IHRvIEdaX1dSSVRFIGFmdGVyIHRoZSBmaWxlIGlz IG9wZW5lZCAqLworCisvKiB2YWx1ZXMgZm9yIGd6X3N0YXRlIGhvdyAqLworI2RlZmluZSBMT09L IDAgICAgICAvKiBsb29rIGZvciBhIGd6aXAgaGVhZGVyICovCisjZGVmaW5lIENPUFkgMSAgICAg IC8qIGNvcHkgaW5wdXQgZGlyZWN0bHkgKi8KKyNkZWZpbmUgR1pJUCAyICAgICAgLyogZGVjb21w cmVzcyBhIGd6aXAgc3RyZWFtICovCisKKy8qIGludGVybmFsIGd6aXAgZmlsZSBzdGF0ZSBkYXRh IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvKiBleHBvc2VkIGNvbnRl bnRzIGZvciBnemdldGMoKSBtYWNybyAqLworICAgIHN0cnVjdCBnekZpbGVfcyB4OyAgICAgIC8q ICJ4IiBmb3IgZXhwb3NlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHguaGF2 ZTogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCB4Lm5leHQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB4Lm5leHQ6IG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3 cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgucG9zOiBjdXJyZW50IHBv c2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgICAgIC8qIHVzZWQgZm9yIGJvdGgg cmVhZGluZyBhbmQgd3JpdGluZyAqLworICAgIGludCBtb2RlOyAgICAgICAgICAgICAgIC8qIHNl ZSBnemlwIG1vZGVzIGFib3ZlICovCisgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgLyogZmls ZSBkZXNjcmlwdG9yICovCisgICAgY2hhciAqcGF0aDsgICAgICAgICAgICAgLyogcGF0aCBvciBm ZCBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICB1bnNpZ25lZCBzaXplOyAgICAgICAgICAvKiBi dWZmZXIgc2l6ZSwgemVybyBpZiBub3QgYWxsb2NhdGVkIHlldCAqLworICAgIHVuc2lnbmVkIHdh bnQ7ICAgICAgICAgIC8qIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgZGVmYXVsdCBpcyBHWkJVRlNJ WkUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbjsgICAgICAvKiBpbnB1dCBidWZmZXIgKGRvdWJs ZS1zaXplZCB3aGVuIHdyaXRpbmcpICovCisgICAgdW5zaWduZWQgY2hhciAqb3V0OyAgICAgLyog b3V0cHV0IGJ1ZmZlciAoZG91YmxlLXNpemVkIHdoZW4gcmVhZGluZykgKi8KKyAgICBpbnQgZGly ZWN0OyAgICAgICAgICAgICAvKiAwIGlmIHByb2Nlc3NpbmcgZ3ppcCwgMSBpZiB0cmFuc3BhcmVu dCAqLworICAgICAgICAvKiBqdXN0IGZvciByZWFkaW5nICovCisgICAgaW50IGhvdzsgICAgICAg ICAgICAgICAgLyogMDogZ2V0IGhlYWRlciwgMTogY29weSwgMjogZGVjb21wcmVzcyAqLworICAg IHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwg Zm9yIHJld2luZGluZyAqLworICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYg ZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLworICAgIGludCBwYXN0OyAgICAgICAgICAgICAg IC8qIHRydWUgaWYgcmVhZCByZXF1ZXN0ZWQgcGFzdCBlbmQgKi8KKyAgICAgICAgLyoganVzdCBm b3Igd3JpdGluZyAqLworICAgIGludCBsZXZlbDsgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9u IGxldmVsICovCisgICAgaW50IHN0cmF0ZWd5OyAgICAgICAgICAgLyogY29tcHJlc3Npb24gc3Ry YXRlZ3kgKi8KKyAgICAgICAgLyogc2VlayByZXF1ZXN0ICovCisgICAgel9vZmY2NF90IHNraXA7 ICAgICAgICAgLyogYW1vdW50IHRvIHNraXAgKGFscmVhZHkgcmV3b3VuZCBpZiBiYWNrd2FyZHMp ICovCisgICAgaW50IHNlZWs7ICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBzZWVrIHJlcXVlc3Qg cGVuZGluZyAqLworICAgICAgICAvKiBlcnJvciBpbmZvcm1hdGlvbiAqLworICAgIGludCBlcnI7 ICAgICAgICAgICAgICAgIC8qIGVycm9yIGNvZGUgKi8KKyAgICBjaGFyICptc2c7ICAgICAgICAg ICAgICAvKiBlcnJvciBtZXNzYWdlICovCisgICAgICAgIC8qIHpsaWIgaW5mbGF0ZSBvciBkZWZs YXRlIHN0cmVhbSAqLworICAgIHpfc3RyZWFtIHN0cm07ICAgICAgICAgIC8qIHN0cmVhbSBzdHJ1 Y3R1cmUgaW4tcGxhY2UgKG5vdCBhIHBvaW50ZXIpICovCit9IGd6X3N0YXRlOwordHlwZWRlZiBn el9zdGF0ZSBGQVIgKmd6X3N0YXRlcDsKKworLyogc2hhcmVkIGZ1bmN0aW9ucyAqLwordm9pZCBa TElCX0lOVEVSTkFMIGd6X2Vycm9yIE9GKChnel9zdGF0ZXAsIGludCwgY29uc3QgY2hhciAqKSk7 CisjaWYgZGVmaW5lZCBVTkRFUl9DRQorY2hhciBaTElCX0lOVEVSTkFMICpnel9zdHJ3aW5lcnJv ciBPRigoRFdPUkQgZXJyb3IpKTsKKyNlbmRpZgorCisvKiBHVF9PRkYoeCksIHdoZXJlIHggaXMg YW4gdW5zaWduZWQgdmFsdWUsIGlzIHRydWUgaWYgeCA+IG1heGltdW0gel9vZmY2NF90CisgICB2 YWx1ZSAtLSBuZWVkZWQgd2hlbiBjb21wYXJpbmcgdW5zaWduZWQgdG8gel9vZmY2NF90LCB3aGlj aCBpcyBzaWduZWQKKyAgIChwb3NzaWJsZSB6X29mZjY0X3QgdHlwZXMgb2ZmX3QsIG9mZjY0X3Qs IGFuZCBsb25nIGFyZSBhbGwgc2lnbmVkKSAqLworI2lmZGVmIElOVF9NQVgKKyMgIGRlZmluZSBH VF9PRkYoeCkgKHNpemVvZihpbnQpID09IHNpemVvZih6X29mZjY0X3QpICYmICh4KSA+IElOVF9N QVgpCisjZWxzZQordW5zaWduZWQgWkxJQl9JTlRFUk5BTCBnel9pbnRtYXggT0YoKHZvaWQpKTsK KyMgIGRlZmluZSBHVF9PRkYoeCkgKHNpemVvZihpbnQpID09IHNpemVvZih6X29mZjY0X3QpICYm ICh4KSA+IGd6X2ludG1heCgpKQorI2VuZGlmCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5 MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL2d6aW8uYwotLS0gYS9zeXMvc3JjL2NtZC9ncy96 bGliL2d6aW8uYwlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIC9kZXYvbnVsbAlU aHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKQEAgLTEsMTAwOSArMCwwIEBACi0vKiBnemlv LmMgLS0gSU8gb24gLmd6IGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxv dXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNl ZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICoKLSAqIENvbXBpbGUgdGhpcyBmaWxlIHdp dGggLUROT19HWkNPTVBSRVNTIHRvIGF2b2lkIHRoZSBjb21wcmVzc2lvbiBjb2RlLgotICovCi0K LS8qIEAoIykgJElkOiBnemlvLmMsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6MzkgZ2lsZXMg RXhwICQgKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJ6dXRpbC5oIgotCi0j aWZkZWYgTk9fREVGTEFURSAgICAgICAvKiBmb3IgY29tcGF0aWJsaXR5IHdpdGggb2xkIGRlZmlu aXRpb24gKi8KLSMgIGRlZmluZSBOT19HWkNPTVBSRVNTCi0jZW5kaWYKLQotI2lmbmRlZiBOT19E VU1NWV9ERUNMCi1zdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OyAvKiBmb3IgYnVn Z3kgY29tcGlsZXJzICovCi0jZW5kaWYKLQotI2lmbmRlZiBaX0JVRlNJWkUKLSMgIGlmZGVmIE1B WFNFR182NEsKLSMgICAgZGVmaW5lIFpfQlVGU0laRSA0MDk2IC8qIG1pbmltaXplIG1lbW9yeSB1 c2FnZSBmb3IgMTYtYml0IERPUyAqLwotIyAgZWxzZQotIyAgICBkZWZpbmUgWl9CVUZTSVpFIDE2 Mzg0Ci0jICBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIFpfUFJJTlRGX0JVRlNJWkUKLSMgIGRlZmlu ZSBaX1BSSU5URl9CVUZTSVpFIDQwOTYKLSNlbmRpZgotCi0jaWZkZWYgX19NVlNfXwotIyAgcHJh Z21hIG1hcCAoZmRvcGVuICwgIlwxNzRcMTc0RkRPUEVOIikKLSAgIEZJTEUgKmZkb3BlbihpbnQs IGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKLQotI2lmbmRlZiBTVERDCi1leHRlcm4gdm9pZHAgIG1h bGxvYyBPRigodUludCBzaXplKSk7Ci1leHRlcm4gdm9pZCAgIGZyZWUgICBPRigodm9pZHBmIHB0 cikpOwotI2VuZGlmCi0KLSNkZWZpbmUgQUxMT0Moc2l6ZSkgbWFsbG9jKHNpemUpCi0jZGVmaW5l IFRSWUZSRUUocCkge2lmIChwKSBmcmVlKHApO30KLQotc3RhdGljIGludCBjb25zdCBnel9tYWdp Y1syXSA9IHsweDFmLCAweDhifTsgLyogZ3ppcCBtYWdpYyBoZWFkZXIgKi8KLQotLyogZ3ppcCBm bGFnIGJ5dGUgKi8KLSNkZWZpbmUgQVNDSUlfRkxBRyAgIDB4MDEgLyogYml0IDAgc2V0OiBmaWxl IHByb2JhYmx5IGFzY2lpIHRleHQgKi8KLSNkZWZpbmUgSEVBRF9DUkMgICAgIDB4MDIgLyogYml0 IDEgc2V0OiBoZWFkZXIgQ1JDIHByZXNlbnQgKi8KLSNkZWZpbmUgRVhUUkFfRklFTEQgIDB4MDQg LyogYml0IDIgc2V0OiBleHRyYSBmaWVsZCBwcmVzZW50ICovCi0jZGVmaW5lIE9SSUdfTkFNRSAg ICAweDA4IC8qIGJpdCAzIHNldDogb3JpZ2luYWwgZmlsZSBuYW1lIHByZXNlbnQgKi8KLSNkZWZp bmUgQ09NTUVOVCAgICAgIDB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAq LwotI2RlZmluZSBSRVNFUlZFRCAgICAgMHhFMCAvKiBiaXRzIDUuLjc6IHJlc2VydmVkICovCi0K LXR5cGVkZWYgc3RydWN0IGd6X3N0cmVhbSB7Ci0gICAgel9zdHJlYW0gc3RyZWFtOwotICAgIGlu dCAgICAgIHpfZXJyOyAgIC8qIGVycm9yIGNvZGUgZm9yIGxhc3Qgc3RyZWFtIG9wZXJhdGlvbiAq LwotICAgIGludCAgICAgIHpfZW9mOyAgIC8qIHNldCBpZiBlbmQgb2YgaW5wdXQgZmlsZSAqLwot ICAgIEZJTEUgICAgICpmaWxlOyAgIC8qIC5neiBmaWxlICovCi0gICAgQnl0ZSAgICAgKmluYnVm OyAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgQnl0ZSAgICAgKm91dGJ1ZjsgLyogb3V0cHV0IGJ1 ZmZlciAqLwotICAgIHVMb25nICAgIGNyYzsgICAgIC8qIGNyYzMyIG9mIHVuY29tcHJlc3NlZCBk YXRhICovCi0gICAgY2hhciAgICAgKm1zZzsgICAgLyogZXJyb3IgbWVzc2FnZSAqLwotICAgIGNo YXIgICAgICpwYXRoOyAgIC8qIHBhdGggbmFtZSBmb3IgZGVidWdnaW5nIG9ubHkgKi8KLSAgICBp bnQgICAgICB0cmFuc3BhcmVudDsgLyogMSBpZiBpbnB1dCBmaWxlIGlzIG5vdCBhIC5neiBmaWxl ICovCi0gICAgY2hhciAgICAgbW9kZTsgICAgLyogJ3cnIG9yICdyJyAqLwotICAgIHpfb2ZmX3Qg IHN0YXJ0OyAgIC8qIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSBpbiBmaWxlIChoZWFkZXIgc2tp cHBlZCkgKi8KLSAgICB6X29mZl90ICBpbjsgICAgICAvKiBieXRlcyBpbnRvIGRlZmxhdGUgb3Ig aW5mbGF0ZSAqLwotICAgIHpfb2ZmX3QgIG91dDsgICAgIC8qIGJ5dGVzIG91dCBvZiBkZWZsYXRl IG9yIGluZmxhdGUgKi8KLSAgICBpbnQgICAgICBiYWNrOyAgICAvKiBvbmUgY2hhcmFjdGVyIHB1 c2gtYmFjayAqLwotICAgIGludCAgICAgIGxhc3Q7ICAgIC8qIHRydWUgaWYgcHVzaC1iYWNrIGlz IGxhc3QgY2hhcmFjdGVyICovCi19IGd6X3N0cmVhbTsKLQotCi1sb2NhbCBnekZpbGUgZ3pfb3Bl biAgICAgIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgIGZkKSk7 Ci1sb2NhbCBpbnQgZG9fZmx1c2ggICAgICAgIE9GKChnekZpbGUgZmlsZSwgaW50IGZsdXNoKSk7 Ci1sb2NhbCBpbnQgICAgZ2V0X2J5dGUgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZv aWQgICBjaGVja19oZWFkZXIgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgaW50ICAgIGRlc3Ry b3kgICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCB2b2lkICAgcHV0TG9uZyAgICAgIE9G KChGSUxFICpmaWxlLCB1TG9uZyB4KSk7Ci1sb2NhbCB1TG9uZyAgZ2V0TG9uZyAgICAgIE9GKChn el9zdHJlYW0gKnMpKTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3pp cCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuIFRoZSBtb2RlIHBhcmFtZXRlcgot ICAgaXMgYXMgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikuIFRoZSBmaWxlIGlzIGdpdmVuIGVpdGhl ciBieSBmaWxlIGRlc2NyaXB0b3IKLSAgIG9yIHBhdGggbmFtZSAoaWYgZmQgPT0gLTEpLgotICAg ICBnel9vcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkIG9y IGlmIHRoZXJlIHdhcwotICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgKGRl KWNvbXByZXNzaW9uIHN0YXRlOyBlcnJubwotICAgY2FuIGJlIGNoZWNrZWQgdG8gZGlzdGluZ3Vp c2ggdGhlIHR3byBjYXNlcyAoaWYgZXJybm8gaXMgemVybywgdGhlCi0gICB6bGliIGVycm9yIGlz IFpfTUVNX0VSUk9SKS4KLSovCi1sb2NhbCBnekZpbGUgZ3pfb3BlbiAocGF0aCwgbW9kZSwgZmQp Ci0gICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotICAgIGludCAg ZmQ7Ci17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJ T047IC8qIGNvbXByZXNzaW9uIGxldmVsICovCi0gICAgaW50IHN0cmF0ZWd5ID0gWl9ERUZBVUxU X1NUUkFURUdZOyAvKiBjb21wcmVzc2lvbiBzdHJhdGVneSAqLwotICAgIGNoYXIgKnAgPSAoY2hh ciopbW9kZTsKLSAgICBnel9zdHJlYW0gKnM7Ci0gICAgY2hhciBmbW9kZVs4MF07IC8qIGNvcHkg b2YgbW9kZSwgd2l0aG91dCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKi8KLSAgICBjaGFyICptID0g Zm1vZGU7Ci0KLSAgICBpZiAoIXBhdGggfHwgIW1vZGUpIHJldHVybiBaX05VTEw7Ci0KLSAgICBz ID0gKGd6X3N0cmVhbSAqKUFMTE9DKHNpemVvZihnel9zdHJlYW0pKTsKLSAgICBpZiAoIXMpIHJl dHVybiBaX05VTEw7Ci0KLSAgICBzLT5zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAg ICBzLT5zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0gICAgcy0+c3RyZWFtLm9wYXF1ZSA9 ICh2b2lkcGYpMDsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmID0gWl9OVUxMOwot ICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZiA9IFpfTlVMTDsKLSAgICBzLT5zdHJl YW0uYXZhaWxfaW4gPSBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gMDsKLSAgICBzLT5maWxlID0gTlVM TDsKLSAgICBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHMtPmluID0g MDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgcy0+Y3JjID0gY3Jj MzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgcy0+bXNnID0gTlVMTDsKLSAgICBzLT50cmFuc3BhcmVu dCA9IDA7Ci0KLSAgICBzLT5wYXRoID0gKGNoYXIqKUFMTE9DKHN0cmxlbihwYXRoKSsxKTsKLSAg ICBpZiAocy0+cGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pG aWxlKVpfTlVMTDsKLSAgICB9Ci0gICAgc3RyY3B5KHMtPnBhdGgsIHBhdGgpOyAvKiBkbyB0aGlz IGVhcmx5IGZvciBkZWJ1Z2dpbmcgKi8KLQotICAgIHMtPm1vZGUgPSAnXDAnOwotICAgIGRvIHsK LSAgICAgICAgaWYgKCpwID09ICdyJykgcy0+bW9kZSA9ICdyJzsKLSAgICAgICAgaWYgKCpwID09 ICd3JyB8fCAqcCA9PSAnYScpIHMtPm1vZGUgPSAndyc7Ci0gICAgICAgIGlmICgqcCA+PSAnMCcg JiYgKnAgPD0gJzknKSB7Ci0gICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOwotICAgICAgICB9 IGVsc2UgaWYgKCpwID09ICdmJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9GSUxURVJFRDsK LSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnaCcpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpf SFVGRk1BTl9PTkxZOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdSJykgewotICAgICAgICAg IHN0cmF0ZWd5ID0gWl9STEU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqbSsrID0g KnA7IC8qIGNvcHkgdGhlIG1vZGUgKi8KLSAgICAgICAgfQotICAgIH0gd2hpbGUgKCpwKysgJiYg bSAhPSBmbW9kZSArIHNpemVvZihmbW9kZSkpOwotICAgIGlmIChzLT5tb2RlID09ICdcMCcpIHJl dHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLQotICAgIGlmIChzLT5tb2RlID09ICd3 JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgZXJyID0gWl9TVFJFQU1fRVJST1I7 Ci0jZWxzZQotICAgICAgICBlcnIgPSBkZWZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCBsZXZlbCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfREVGTEFURUQsIC1NQVhfV0JJVFMsIERFRl9N RU1fTEVWRUwsIHN0cmF0ZWd5KTsKLSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAw IHRvIHN1cHByZXNzIHpsaWIgaGVhZGVyICovCi0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0 ID0gcy0+b3V0YnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0jZW5kaWYKLSAgICAgICAg aWYgKGVyciAhPSBaX09LIHx8IHMtPm91dGJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJl dHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7 Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luICA9IHMtPmluYnVmID0gKEJ5dGUqKUFMTE9DKFpf QlVGU0laRSk7Ci0KLSAgICAgICAgZXJyID0gaW5mbGF0ZUluaXQyKCYocy0+c3RyZWFtKSwgLU1B WF9XQklUUyk7Ci0gICAgICAgIC8qIHdpbmRvd0JpdHMgaXMgcGFzc2VkIDwgMCB0byB0ZWxsIHRo YXQgdGhlcmUgaXMgbm8gemxpYiBoZWFkZXIuCi0gICAgICAgICAqIE5vdGUgdGhhdCBpbiB0aGlz IGNhc2UgaW5mbGF0ZSAqcmVxdWlyZXMqIGFuIGV4dHJhICJkdW1teSIgYnl0ZQotICAgICAgICAg KiBhZnRlciB0aGUgY29tcHJlc3NlZCBzdHJlYW0gaW4gb3JkZXIgdG8gY29tcGxldGUgZGVjb21w cmVzc2lvbiBhbmQKLSAgICAgICAgICogcmV0dXJuIFpfU1RSRUFNX0VORC4gSGVyZSB0aGUgZ3pp cCBDUkMzMiBlbnN1cmVzIHRoYXQgNCBieXRlcyBhcmUKLSAgICAgICAgICogcHJlc2VudCBhZnRl ciB0aGUgY29tcHJlc3NlZCBzdHJlYW0uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoZXJyICE9 IFpfT0sgfHwgcy0+aW5idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzdHJv eShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2 YWlsX291dCA9IFpfQlVGU0laRTsKLQotICAgIGVycm5vID0gMDsKLSAgICBzLT5maWxlID0gZmQg PCAwID8gRl9PUEVOKHBhdGgsIGZtb2RlKSA6IChGSUxFKilmZG9wZW4oZmQsIGZtb2RlKTsKLQot ICAgIGlmIChzLT5maWxlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChn ekZpbGUpWl9OVUxMOwotICAgIH0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSAgICAgICAg LyogV3JpdGUgYSB2ZXJ5IHNpbXBsZSAuZ3ogaGVhZGVyOgotICAgICAgICAgKi8KLSAgICAgICAg ZnByaW50ZihzLT5maWxlLCAiJWMlYyVjJWMlYyVjJWMlYyVjJWMiLCBnel9tYWdpY1swXSwgZ3pf bWFnaWNbMV0sCi0gICAgICAgICAgICAgWl9ERUZMQVRFRCwgMCAvKmZsYWdzKi8sIDAsMCwwLDAg Lyp0aW1lKi8sIDAgLyp4ZmxhZ3MqLywgT1NfQ09ERSk7Ci0gICAgICAgIHMtPnN0YXJ0ID0gMTBM OwotICAgICAgICAvKiBXZSB1c2UgMTBMIGluc3RlYWQgb2YgZnRlbGwocy0+ZmlsZSkgdG8gYmVj YXVzZSBmdGVsbCBjYXVzZXMgYW4KLSAgICAgICAgICogZmZsdXNoIG9uIHNvbWUgc3lzdGVtcy4g VGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXNuJ3QgdXNlCi0gICAgICAgICAqIHN0YXJ0 IGFueXdheSBpbiB3cml0ZSBtb2RlLCBzbyB0aGlzIGluaXRpYWxpemF0aW9uIGlzIG5vdAotICAg ICAgICAgKiBuZWNlc3NhcnkuCi0gICAgICAgICAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNo ZWNrX2hlYWRlcihzKTsgLyogc2tpcCB0aGUgLmd6IGhlYWRlciAqLwotICAgICAgICBzLT5zdGFy dCA9IGZ0ZWxsKHMtPmZpbGUpIC0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgIH0KLQotICAgIHJl dHVybiAoZ3pGaWxlKXM7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBPcGVucyBh IGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLgotKi8KLWd6RmlsZSBaRVhQ T1JUIGd6b3BlbiAocGF0aCwgbW9kZSkKLSAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNvbnN0 IGNoYXIgKm1vZGU7Ci17Ci0gICAgcmV0dXJuIGd6X29wZW4gKHBhdGgsIG1vZGUsIC0xKTsKLX0K LQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEFzc29jaWF0ZSBhIGd6RmlsZSB3aXRoIHRo ZSBmaWxlIGRlc2NyaXB0b3IgZmQuIGZkIGlzIG5vdCBkdXAnZWQgaGVyZQotICAgdG8gbWltaWMg dGhlIGJlaGF2aW8odSlyIG9mIGZkb3Blbi4KLSovCi1nekZpbGUgWkVYUE9SVCBnemRvcGVuIChm ZCwgbW9kZSkKLSAgICBpbnQgZmQ7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLXsKLSAgICBjaGFy IG5hbWVbMjBdOwotCi0gICAgaWYgKGZkIDwgMCkgcmV0dXJuIChnekZpbGUpWl9OVUxMOwotICAg IHNwcmludGYobmFtZSwgIjxmZDolZD4iLCBmZCk7IC8qIGZvciBkZWJ1Z2dpbmcgKi8KLQotICAg IHJldHVybiBnel9vcGVuIChuYW1lLCBtb2RlLCBmZCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotICogVXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgc3RyYXRlZ3kKLSAqLwot aW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMgKGZpbGUsIGxldmVsLCBzdHJhdGVneSkKLSAgICBnekZp bGUgZmlsZTsKLSAgICBpbnQgbGV2ZWw7Ci0gICAgaW50IHN0cmF0ZWd5OwotewotICAgIGd6X3N0 cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1v ZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICAvKiBNYWtlIHJvb20gdG8g YWxsb3cgZmx1c2hpbmcgKi8KLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCA9PSAwKSB7Ci0K LSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICBpZiAoZndy aXRlKHMtPm91dGJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAg ICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgfQotICAgICAgICBzLT5zdHJl YW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgIH0KLQotICAgIHJldHVybiBkZWZsYXRlUGFy YW1zICgmKHMtPnN0cmVhbSksIGxldmVsLCBzdHJhdGVneSk7Ci19Ci0KLS8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotICAgICBSZWFkIGEgYnl0ZSBmcm9tIGEgZ3pfc3RyZWFtOyB1cGRhdGUgbmV4dF9p biBhbmQgYXZhaWxfaW4uIFJldHVybiBFT0YKLSAgIGZvciBlbmQgb2YgZmlsZS4KLSAgIElOIGFz c2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBiZWVuIHN1Y2Vzc2Z1bGx5IG9wZW5lZCBmb3IgcmVh ZGluZy4KLSovCi1sb2NhbCBpbnQgZ2V0X2J5dGUocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0g ICAgaWYgKHMtPnpfZW9mKSByZXR1cm4gRU9GOwotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4g PT0gMCkgewotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9 IGZyZWFkKHMtPmluYnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpOwotICAgICAgICBpZiAocy0+ c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgIHMtPnpfZW9mID0gMTsKLSAgICAg ICAgICAgIGlmIChmZXJyb3Iocy0+ZmlsZSkpIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAg ICAgIHJldHVybiBFT0Y7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBz LT5pbmJ1ZjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luLS07Ci0gICAgcmV0dXJuICoo cy0+c3RyZWFtLm5leHRfaW4pKys7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAg Q2hlY2sgdGhlIGd6aXAgaGVhZGVyIG9mIGEgZ3pfc3RyZWFtIG9wZW5lZCBmb3IgcmVhZGluZy4g U2V0IHRoZSBzdHJlYW0KLSAgICBtb2RlIHRvIHRyYW5zcGFyZW50IGlmIHRoZSBnemlwIG1hZ2lj IGhlYWRlciBpcyBub3QgcHJlc2VudDsgc2V0IHMtPmVycgotICAgIHRvIFpfREFUQV9FUlJPUiBp ZiB0aGUgbWFnaWMgaGVhZGVyIGlzIHByZXNlbnQgYnV0IHRoZSByZXN0IG9mIHRoZSBoZWFkZXIK LSAgICBpcyBpbmNvcnJlY3QuCi0gICAgSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHMgaGFzIGFs cmVhZHkgYmVlbiBjcmVhdGVkIHN1Y2Vzc2Z1bGx5OwotICAgICAgIHMtPnN0cmVhbS5hdmFpbF9p biBpcyB6ZXJvIGZvciB0aGUgZmlyc3QgdGltZSwgYnV0IG1heSBiZSBub24temVybwotICAgICAg IGZvciBjb25jYXRlbmF0ZWQgLmd6IGZpbGVzLgotKi8KLWxvY2FsIHZvaWQgY2hlY2tfaGVhZGVy KHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGludCBtZXRob2Q7IC8qIG1ldGhvZCBieXRl ICovCi0gICAgaW50IGZsYWdzOyAgLyogZmxhZ3MgYnl0ZSAqLwotICAgIHVJbnQgbGVuOwotICAg IGludCBjOwotCi0gICAgLyogQXNzdXJlIHR3byBieXRlcyBpbiB0aGUgYnVmZmVyIHNvIHdlIGNh biBwZWVrIGFoZWFkIC0tIGhhbmRsZSBjYXNlCi0gICAgICAgd2hlcmUgZmlyc3QgYnl0ZSBvZiBo ZWFkZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoZSBsYXN0Ci0gICAgICAg Z3ppcCBzZWdtZW50ICovCi0gICAgbGVuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgIGlmIChs ZW4gPCAyKSB7Ci0gICAgICAgIGlmIChsZW4pIHMtPmluYnVmWzBdID0gcy0+c3RyZWFtLm5leHRf aW5bMF07Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbGVuID0gZnJlYWQocy0+aW5idWYg KyBsZW4sIDEsIFpfQlVGU0laRSA+PiBsZW4sIHMtPmZpbGUpOwotICAgICAgICBpZiAobGVuID09 IDAgJiYgZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIHMtPnN0 cmVhbS5hdmFpbF9pbiArPSBsZW47Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5i dWY7Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPCAyKSB7Ci0gICAgICAgICAgICBz LT50cmFuc3BhcmVudCA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgICAgIHJldHVybjsK LSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFBlZWsgYWhlYWQgdG8gY2hlY2sgdGhlIGd6aXAg bWFnaWMgaGVhZGVyICovCi0gICAgaWYgKHMtPnN0cmVhbS5uZXh0X2luWzBdICE9IGd6X21hZ2lj WzBdIHx8Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luWzFdICE9IGd6X21hZ2ljWzFdKSB7Ci0g ICAgICAgIHMtPnRyYW5zcGFyZW50ID0gMTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBz LT5zdHJlYW0uYXZhaWxfaW4gLT0gMjsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiArPSAyOwotCi0g ICAgLyogQ2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGd6aXAgaGVhZGVyICovCi0gICAgbWV0aG9kID0g Z2V0X2J5dGUocyk7Ci0gICAgZmxhZ3MgPSBnZXRfYnl0ZShzKTsKLSAgICBpZiAobWV0aG9kICE9 IFpfREVGTEFURUQgfHwgKGZsYWdzICYgUkVTRVJWRUQpICE9IDApIHsKLSAgICAgICAgcy0+el9l cnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBEaXNj YXJkIHRpbWUsIHhmbGFncyBhbmQgT1MgY29kZTogKi8KLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8 IDY7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLQotICAgIGlmICgoZmxhZ3MgJiBFWFRSQV9G SUVMRCkgIT0gMCkgeyAvKiBza2lwIHRoZSBleHRyYSBmaWVsZCAqLwotICAgICAgICBsZW4gID0g ICh1SW50KWdldF9ieXRlKHMpOwotICAgICAgICBsZW4gKz0gKCh1SW50KWdldF9ieXRlKHMpKTw8 ODsKLSAgICAgICAgLyogbGVuIGlzIGdhcmJhZ2UgaWYgRU9GIGJ1dCB0aGUgbG9vcCBiZWxvdyB3 aWxsIHF1aXQgYW55d2F5ICovCi0gICAgICAgIHdoaWxlIChsZW4tLSAhPSAwICYmIGdldF9ieXRl KHMpICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYgT1JJR19OQU1FKSAhPSAwKSB7 IC8qIHNraXAgdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSAqLwotICAgICAgICB3aGlsZSAoKGMgPSBn ZXRfYnl0ZShzKSkgIT0gMCAmJiBjICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYg Q09NTUVOVCkgIT0gMCkgeyAgIC8qIHNraXAgdGhlIC5neiBmaWxlIGNvbW1lbnQgKi8KLSAgICAg ICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykpICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0g ICAgaWYgKChmbGFncyAmIEhFQURfQ1JDKSAhPSAwKSB7ICAvKiBza2lwIHRoZSBoZWFkZXIgY3Jj ICovCi0gICAgICAgIGZvciAobGVuID0gMDsgbGVuIDwgMjsgbGVuKyspICh2b2lkKWdldF9ieXRl KHMpOwotICAgIH0KLSAgICBzLT56X2VyciA9IHMtPnpfZW9mID8gWl9EQVRBX0VSUk9SIDogWl9P SzsKLX0KLQotIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xlYW51cCB0aGVuIGZyZWUgdGhl IGdpdmVuIGd6X3N0cmVhbS4gUmV0dXJuIGEgemxpYiBlcnJvciBjb2RlLgotICAgVHJ5IGZyZWVp bmcgaW4gdGhlIHJldmVyc2Ugb3JkZXIgb2YgYWxsb2NhdGlvbnMuCi0gKi8KLWxvY2FsIGludCBk ZXN0cm95IChzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgZXJyID0gWl9PSzsKLQot ICAgIGlmICghcykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgVFJZRlJFRShzLT5tc2cp OwotCi0gICAgaWYgKHMtPnN0cmVhbS5zdGF0ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChzLT5t b2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgICAgIGVyciA9IFpf U1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgICAgIGVyciA9IGRlZmxhdGVFbmQoJihzLT5z dHJlYW0pKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UgaWYgKHMtPm1vZGUgPT0gJ3InKSB7Ci0g ICAgICAgICAgICBlcnIgPSBpbmZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKHMtPmZpbGUgIT0gTlVMTCAmJiBmY2xvc2Uocy0+ZmlsZSkpIHsKLSNpZmRl ZiBFU1BJUEUKLSAgICAgICAgaWYgKGVycm5vICE9IEVTUElQRSkgLyogZmNsb3NlIGlzIGJyb2tl biBmb3IgcGlwZXMgaW4gSFAvVVggKi8KLSNlbmRpZgotICAgICAgICAgICAgZXJyID0gWl9FUlJO TzsKLSAgICB9Ci0gICAgaWYgKHMtPnpfZXJyIDwgMCkgZXJyID0gcy0+el9lcnI7Ci0KLSAgICBU UllGUkVFKHMtPmluYnVmKTsKLSAgICBUUllGUkVFKHMtPm91dGJ1Zik7Ci0gICAgVFJZRlJFRShz LT5wYXRoKTsKLSAgICBUUllGUkVFKHMpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3Nl ZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenJlYWQgcmV0dXJucyB0aGUg bnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQgKDAgZm9yIGVuZCBvZiBmaWxlKS4KLSovCi1p bnQgWkVYUE9SVCBnenJlYWQgKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAg IHZvaWRwIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6 X3N0cmVhbSopZmlsZTsKLSAgICBCeXRlZiAqc3RhcnQgPSAoQnl0ZWYqKWJ1ZjsgLyogc3RhcnRp bmcgcG9pbnQgZm9yIGNyYyBjb21wdXRhdGlvbiAqLwotICAgIEJ5dGUgICpuZXh0X291dDsgLyog PT0gc3RyZWFtLm5leHRfb3V0IGJ1dCBub3QgZm9yY2VkIGZhciAoZm9yIE1TRE9TKSAqLwotCi0g ICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIFpfU1RSRUFNX0VSUk9S OwotCi0gICAgaWYgKHMtPnpfZXJyID09IFpfREFUQV9FUlJPUiB8fCBzLT56X2VyciA9PSBaX0VS Uk5PKSByZXR1cm4gLTE7Ci0gICAgaWYgKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCkgcmV0dXJu IDA7ICAvKiBFT0YgKi8KLQotICAgIG5leHRfb3V0ID0gKEJ5dGUqKWJ1ZjsKLSAgICBzLT5zdHJl YW0ubmV4dF9vdXQgPSAoQnl0ZWYqKWJ1ZjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gbGVu OwotCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgJiYgcy0+YmFjayAhPSBFT0YpIHsKLSAg ICAgICAgKm5leHRfb3V0KysgPSBzLT5iYWNrOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQr KzsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dC0tOwotICAgICAgICBzLT5iYWNrID0gRU9G OwotICAgICAgICBzLT5vdXQrKzsKLSAgICAgICAgaWYgKHMtPmxhc3QpIHsKLSAgICAgICAgICAg IHMtPnpfZXJyID0gWl9TVFJFQU1fRU5EOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAg IH0KLSAgICB9Ci0KLSAgICB3aGlsZSAocy0+c3RyZWFtLmF2YWlsX291dCAhPSAwKSB7Ci0KLSAg ICAgICAgaWYgKHMtPnRyYW5zcGFyZW50KSB7Ci0gICAgICAgICAgICAvKiBDb3B5IGZpcnN0IHRo ZSBsb29rYWhlYWQgYnl0ZXM6ICovCi0gICAgICAgICAgICB1SW50IG4gPSBzLT5zdHJlYW0uYXZh aWxfaW47Ci0gICAgICAgICAgICBpZiAobiA+IHMtPnN0cmVhbS5hdmFpbF9vdXQpIG4gPSBzLT5z dHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAgICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgICAgICAg ICAgem1lbWNweShzLT5zdHJlYW0ubmV4dF9vdXQsIHMtPnN0cmVhbS5uZXh0X2luLCBuKTsKLSAg ICAgICAgICAgICAgICBuZXh0X291dCArPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5u ZXh0X291dCA9IG5leHRfb3V0OwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luICAg Kz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0IC09IG47Ci0gICAgICAg ICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luICAtPSBuOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcy0+ c3RyZWFtLmF2YWlsX291dCAtPSBmcmVhZChuZXh0X291dCwgMSwgcy0+c3RyZWFtLmF2YWlsX291 dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmZpbGUp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuIC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7 Ci0gICAgICAgICAgICBzLT5pbiAgKz0gbGVuOwotICAgICAgICAgICAgcy0+b3V0ICs9IGxlbjsK LSAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgcmV0 dXJuIChpbnQpbGVuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4g PT0gMCAmJiAhcy0+el9lb2YpIHsKLQotICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAg ICAgcy0+c3RyZWFtLmF2YWlsX2luID0gZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ ZmlsZSk7Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAg ICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5m aWxlKSkgewotICAgICAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp ZiAoZmVvZihzLT5maWxlKSkgeyAgICAgICAgLyogYXZvaWQgZXJyb3IgZm9yIGVtcHR5IGZpbGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIH0KLSAgICAg ICAgcy0+aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3Ry ZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBpbmZsYXRlKCYocy0+c3RyZWFtKSwg Wl9OT19GTFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAg ICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJy ID09IFpfU1RSRUFNX0VORCkgewotICAgICAgICAgICAgLyogQ2hlY2sgQ1JDIGFuZCBvcmlnaW5h bCBzaXplICovCi0gICAgICAgICAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUlu dCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gcy0+ c3RyZWFtLm5leHRfb3V0OwotCi0gICAgICAgICAgICBpZiAoZ2V0TG9uZyhzKSAhPSBzLT5jcmMp IHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZ2V0TG9uZyhzKTsKLSAgICAgICAgICAg ICAgICAvKiBUaGUgdW5jb21wcmVzc2VkIGxlbmd0aCByZXR1cm5lZCBieSBhYm92ZSBnZXRsb25n KCkgbWF5IGJlCi0gICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGZyb20gcy0+b3V0IGluIGNh c2Ugb2YgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgKiBDaGVjayBm b3Igc3VjaCBmaWxlczoKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjaGVj a19oZWFkZXIocyk7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfT0spIHsKLSAg ICAgICAgICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KCYocy0+c3RyZWFtKSk7Ci0gICAgICAgICAg ICAgICAgICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9P SyB8fCBzLT56X2VvZikgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywg c3RhcnQsICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotCi0gICAgcmV0dXJu IChpbnQpKGxlbiAtIHMtPnN0cmVhbS5hdmFpbF9vdXQpOwotfQotCi0KLS8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiBn emdldGMgcmV0dXJucyB0aGlzIGJ5dGUKLSAgIG9yIC0xIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUg b3IgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7 Ci17Ci0gICAgdW5zaWduZWQgY2hhciBjOwotCi0gICAgcmV0dXJuIGd6cmVhZChmaWxlLCAmYywg MSkgPT0gMSA/IGMgOiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFB1 c2ggb25lIGJ5dGUgYmFjayBvbnRvIHRoZSBzdHJlYW0uCi0qLwotaW50IFpFWFBPUlQgZ3p1bmdl dGMoYywgZmlsZSkKLSAgICBpbnQgYzsKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJl YW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2Rl ICE9ICdyJyB8fCBjID09IEVPRiB8fCBzLT5iYWNrICE9IEVPRikgcmV0dXJuIEVPRjsKLSAgICBz LT5iYWNrID0gYzsKLSAgICBzLT5vdXQtLTsKLSAgICBzLT5sYXN0ID0gKHMtPnpfZXJyID09IFpf U1RSRUFNX0VORCk7Ci0gICAgaWYgKHMtPmxhc3QpIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56 X2VvZiA9IDA7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g ICAgICBSZWFkcyBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgdW50aWwgbGVuLTEgY2hh cmFjdGVycyBhcmUKLSAgIHJlYWQsIG9yIGEgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQg dHJhbnNmZXJyZWQgdG8gYnVmLCBvciBhbgotICAgZW5kLW9mLWZpbGUgY29uZGl0aW9uIGlzIGVu Y291bnRlcmVkLiAgVGhlIHN0cmluZyBpcyB0aGVuIHRlcm1pbmF0ZWQKLSAgIHdpdGggYSBudWxs IGNoYXJhY3Rlci4KLSAgICAgIGd6Z2V0cyByZXR1cm5zIGJ1Ziwgb3IgWl9OVUxMIGluIGNhc2Ug b2YgZXJyb3IuCi0KLSAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG5vdCBvcHRp bWl6ZWQgYXQgYWxsLgotKi8KLWNoYXIgKiBaRVhQT1JUIGd6Z2V0cyhmaWxlLCBidWYsIGxlbikK LSAgICBnekZpbGUgZmlsZTsKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IGxlbjsKLXsKLSAgICBj aGFyICpiID0gYnVmOwotICAgIGlmIChidWYgPT0gWl9OVUxMIHx8IGxlbiA8PSAwKSByZXR1cm4g Wl9OVUxMOwotCi0gICAgd2hpbGUgKC0tbGVuID4gMCAmJiBnenJlYWQoZmlsZSwgYnVmLCAxKSA9 PSAxICYmICpidWYrKyAhPSAnXG4nKSA7Ci0gICAgKmJ1ZiA9ICdcMCc7Ci0gICAgcmV0dXJuIGIg PT0gYnVmICYmIGxlbiA+IDAgPyBaX05VTEwgOiBiOwotfQotCi0KLSNpZm5kZWYgTk9fR1pDT01Q UkVTUwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVtYmVy IG9mIHVuY29tcHJlc3NlZCBieXRlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnendy aXRlIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuICgwIGluIGNh c2Ugb2YgZXJyb3IpLgotKi8KLWludCBaRVhQT1JUIGd6d3JpdGUgKGZpbGUsIGJ1ZiwgbGVuKQot ICAgIGd6RmlsZSBmaWxlOwotICAgIHZvaWRwYyBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewot ICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxM IHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJl YW0ubmV4dF9pbiA9IChCeXRlZiopYnVmOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IGxlbjsK LQotICAgIHdoaWxlIChzLT5zdHJlYW0uYXZhaWxfaW4gIT0gMCkgewotCi0gICAgICAgIGlmIChz LT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKLQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRf b3V0ID0gcy0+b3V0YnVmOwotICAgICAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpf QlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9l cnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAg ICAgICBzLT5pbiArPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCArPSBzLT5z dHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0p LCBaX05PX0ZMVVNIKTsKLSAgICAgICAgcy0+aW4gLT0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAg ICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgaWYgKHMtPnpfZXJy ICE9IFpfT0spIGJyZWFrOwotICAgIH0KLSAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIChjb25z dCBCeXRlZiAqKWJ1ZiwgbGVuKTsKLQotICAgIHJldHVybiAoaW50KShsZW4gLSBzLT5zdHJlYW0u YXZhaWxfaW4pOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDb252ZXJ0cywg Zm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJncyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVy Ci0gICBjb250cm9sIG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiBnenByaW50 ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKLSAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3 cml0dGVuICgwIGluIGNhc2Ugb2YgZXJyb3IpLgotKi8KLSNpZmRlZiBTVERDCi0jaW5jbHVkZSA8 c3RkYXJnLmg+Ci0KLWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGd6RmlsZSBmaWxlLCBjb25zdCBj aGFyICpmb3JtYXQsIC8qIGFyZ3MgKi8gLi4uKQotewotICAgIGNoYXIgYnVmW1pfUFJJTlRGX0JV RlNJWkVdOwotICAgIHZhX2xpc3QgdmE7Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2Yo YnVmKSAtIDFdID0gMDsKLSAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSNpZmRlZiBOT192c25w cmludGYKLSMgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNwcmludGYoYnVm LCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGZvciAobGVuID0gMDsgbGVuIDwg c2l6ZW9mKGJ1Zik7IGxlbisrKQotICAgICAgICBpZiAoYnVmW2xlbl0gPT0gMCkgYnJlYWs7Ci0j ICBlbHNlCi0gICAgbGVuID0gdnNwcmludGYoYnVmLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQo dmEpOwotIyAgZW5kaWYKLSNlbHNlCi0jICBpZmRlZiBIQVNfdnNucHJpbnRmX3ZvaWQKLSAgICAo dm9pZCl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5k KHZhKTsKLSAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSMgIGVsc2UKLSAgICBsZW4gPSB2c25wcmlu dGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSMgIGVu ZGlmCi0jZW5kaWYKLSAgICBpZiAobGVuIDw9IDAgfHwgbGVuID49IChpbnQpc2l6ZW9mKGJ1Zikg fHwgYnVmW3NpemVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0 dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCAodW5zaWduZWQpbGVuKTsKLX0KLSNlbHNlIC8qIG5vdCBB TlNJIEMgKi8KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZmlsZSwgZm9ybWF0LCBhMSwgYTIs IGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCi0gICAgICAgICAgICAgICAgICAgICAg IGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCkKLSAgICBn ekZpbGUgZmlsZTsKLSAgICBjb25zdCBjaGFyICpmb3JtYXQ7Ci0gICAgaW50IGExLCBhMiwgYTMs IGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgYTExLCBhMTIsIGExMywgYTE0 LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwOwotewotICAgIGNoYXIgYnVmW1pfUFJJTlRG X0JVRlNJWkVdOwotICAgIGludCBsZW47Ci0KLSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7 Ci0jaWZkZWYgTk9fc25wcmludGYKLSMgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICBzcHJp bnRmKGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAg ICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5 LCBhMjApOwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZW9mKGJ1Zik7IGxlbisrKQotICAg ICAgICBpZiAoYnVmW2xlbl0gPT0gMCkgYnJlYWs7Ci0jICBlbHNlCi0gICAgbGVuID0gc3ByaW50 ZihidWYsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAg ICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBh MTksIGEyMCk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0g ICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUs IGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBh MTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSMg IGVsc2UKLSAgICBsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBh MiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICAgYTksIGExMCwgYTEx LCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSMgIGVuZGlm Ci0jZW5kaWYKLSAgICBpZiAobGVuIDw9IDAgfHwgbGVuID49IHNpemVvZihidWYpIHx8IGJ1Zltz aXplb2YoYnVmKSAtIDFdICE9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnendy aXRlKGZpbGUsIGJ1ZiwgbGVuKTsKLX0KLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSAgICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUg Y29tcHJlc3NlZCBmaWxlLgotICAgZ3pwdXRjIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdy aXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pwdXRjKGZp bGUsIGMpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGM7Ci17Ci0gICAgdW5zaWduZWQgY2hh ciBjYyA9ICh1bnNpZ25lZCBjaGFyKSBjOyAvKiByZXF1aXJlZCBmb3IgYmlnIGVuZGlhbiBzeXN0 ZW1zICovCi0KLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCAmY2MsIDEpID09IDEgPyAoaW50KWNj IDogLTE7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBXcml0ZXMgdGhlIGdp dmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSwgZXhjbHVk aW5nCi0gICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCi0gICAgICBnenB1dHMgcmV0 dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBl cnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dHMoZmlsZSwgcykKLSAgICBnekZpbGUgZmlsZTsK LSAgICBjb25zdCBjaGFyICpzOwotewotICAgIHJldHVybiBnendyaXRlKGZpbGUsIChjaGFyKilz LCAodW5zaWduZWQpc3RybGVuKHMpKTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAg ICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiBU aGUgcGFyYW1ldGVyCi0gICBmbHVzaCBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLgot Ki8KLWxvY2FsIGludCBkb19mbHVzaCAoZmlsZSwgZmx1c2gpCi0gICAgZ3pGaWxlIGZpbGU7Ci0g ICAgaW50IGZsdXNoOwotewotICAgIHVJbnQgbGVuOwotICAgIGludCBkb25lID0gMDsKLSAgICBn el9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBz LT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgcy0+c3RyZWFtLmF2 YWlsX2luID0gMDsgLyogc2hvdWxkIGJlIHplcm8gYWxyZWFkeSBhbnl3YXkgKi8KLQotICAgIGZv ciAoOzspIHsKLSAgICAgICAgbGVuID0gWl9CVUZTSVpFIC0gcy0+c3RyZWFtLmF2YWlsX291dDsK LQotICAgICAgICBpZiAobGVuICE9IDApIHsKLSAgICAgICAgICAgIGlmICgodUludClmd3JpdGUo cy0+b3V0YnVmLCAxLCBsZW4sIHMtPmZpbGUpICE9IGxlbikgewotICAgICAgICAgICAgICAgIHMt PnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgICAgICByZXR1cm4gWl9FUlJOTzsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAg ICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKGRvbmUpIGJyZWFrOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWls X291dDsKLSAgICAgICAgcy0+el9lcnIgPSBkZWZsYXRlKCYocy0+c3RyZWFtKSwgZmx1c2gpOwot ICAgICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLQotICAgICAgICAvKiBJZ25v cmUgdGhlIHNlY29uZCBvZiB0d28gY29uc2VjdXRpdmUgZmx1c2hlczogKi8KLSAgICAgICAgaWYg KGxlbiA9PSAwICYmIHMtPnpfZXJyID09IFpfQlVGX0VSUk9SKSBzLT56X2VyciA9IFpfT0s7Ci0K LSAgICAgICAgLyogZGVmbGF0ZSBoYXMgZmluaXNoZWQgZmx1c2hpbmcgb25seSB3aGVuIGl0IGhh c24ndCB1c2VkIHVwCi0gICAgICAgICAqIGFsbCB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBv dXRwdXQgYnVmZmVyOgotICAgICAgICAgKi8KLSAgICAgICAgZG9uZSA9IChzLT5zdHJlYW0uYXZh aWxfb3V0ICE9IDAgfHwgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKTsKLQotICAgICAgICBpZiAo cy0+el9lcnIgIT0gWl9PSyAmJiBzLT56X2VyciAhPSBaX1NUUkVBTV9FTkQpIGJyZWFrOwotICAg IH0KLSAgICByZXR1cm4gIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBzLT56X2Vy cjsKLX0KLQotaW50IFpFWFBPUlQgZ3pmbHVzaCAoZmlsZSwgZmx1c2gpCi0gICAgIGd6RmlsZSBm aWxlOwotICAgICBpbnQgZmx1c2g7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSop ZmlsZTsKLSAgICBpbnQgZXJyID0gZG9fZmx1c2ggKGZpbGUsIGZsdXNoKTsKLQotICAgIGlmIChl cnIpIHJldHVybiBlcnI7Ci0gICAgZmZsdXNoKHMtPmZpbGUpOwotICAgIHJldHVybiAgcy0+el9l cnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJyOwotfQotI2VuZGlmIC8qIE5PX0da Q09NUFJFU1MgKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBTZXRzIHRoZSBzdGFy dGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlIGdpdmVu Ci0gICBjb21wcmVzc2VkIGZpbGUuIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBi eXRlcyBpbiB0aGUKLSAgICAgIGd6c2VlayByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGxv Y2F0aW9uIGFzIG1lYXN1cmVkIGluIGJ5dGVzIGZyb20KLSAgIHRoZSBiZWdpbm5pbmcgb2YgdGhl IHVuY29tcHJlc3NlZCBzdHJlYW0sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgICBTRUVL X0VORCBpcyBub3QgaW1wbGVtZW50ZWQsIHJldHVybnMgZXJyb3IuCi0gICAgICBJbiB0aGlzIHZl cnNpb24gb2YgdGhlIGxpYnJhcnksIGd6c2VlayBjYW4gYmUgZXh0cmVtZWx5IHNsb3cuCi0qLwot el9vZmZfdCBaRVhQT1JUIGd6c2VlayAoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpCi0gICAgZ3pGaWxl IGZpbGU7Ci0gICAgel9vZmZfdCBvZmZzZXQ7Ci0gICAgaW50IHdoZW5jZTsKLXsKLSAgICBnel9z dHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCB3aGVu Y2UgPT0gU0VFS19FTkQgfHwKLSAgICAgICAgcy0+el9lcnIgPT0gWl9FUlJOTyB8fCBzLT56X2Vy ciA9PSBaX0RBVEFfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0KLSAgICBp ZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVy biAtMUw7Ci0jZWxzZQotICAgICAgICBpZiAod2hlbmNlID09IFNFRUtfU0VUKSB7Ci0gICAgICAg ICAgICBvZmZzZXQgLT0gcy0+aW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldCA8IDAp IHJldHVybiAtMUw7Ci0KLSAgICAgICAgLyogQXQgdGhpcyBwb2ludCwgb2Zmc2V0IGlzIHRoZSBu dW1iZXIgb2YgemVybyBieXRlcyB0byB3cml0ZS4gKi8KLSAgICAgICAgaWYgKHMtPmluYnVmID09 IFpfTlVMTCkgewotICAgICAgICAgICAgcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpF KTsgLyogZm9yIHNlZWtpbmcgKi8KLSAgICAgICAgICAgIGlmIChzLT5pbmJ1ZiA9PSBaX05VTEwp IHJldHVybiAtMUw7Ci0gICAgICAgICAgICB6bWVtemVybyhzLT5pbmJ1ZiwgWl9CVUZTSVpFKTsK LSAgICAgICAgfQotICAgICAgICB3aGlsZSAob2Zmc2V0ID4gMCkgIHsKLSAgICAgICAgICAgIHVJ bnQgc2l6ZSA9IFpfQlVGU0laRTsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPCBaX0JVRlNJWkUp IHNpemUgPSAodUludClvZmZzZXQ7Ci0KLSAgICAgICAgICAgIHNpemUgPSBnendyaXRlKGZpbGUs IHMtPmluYnVmLCBzaXplKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiAtMUw7 Ci0KLSAgICAgICAgICAgIG9mZnNldCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy biBzLT5pbjsKLSNlbmRpZgotICAgIH0KLSAgICAvKiBSZXN0IG9mIGZ1bmN0aW9uIGlzIGZvciBy ZWFkaW5nIG9ubHkgKi8KLQotICAgIC8qIGNvbXB1dGUgYWJzb2x1dGUgcG9zaXRpb24gKi8KLSAg ICBpZiAod2hlbmNlID09IFNFRUtfQ1VSKSB7Ci0gICAgICAgIG9mZnNldCArPSBzLT5vdXQ7Ci0g ICAgfQotICAgIGlmIChvZmZzZXQgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgaWYgKHMtPnRyYW5z cGFyZW50KSB7Ci0gICAgICAgIC8qIG1hcCB0byBmc2VlayAqLwotICAgICAgICBzLT5iYWNrID0g RU9GOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgICAgICBzLT5zdHJlYW0u bmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICBpZiAoZnNlZWsocy0+ZmlsZSwgb2Zmc2V0LCBT RUVLX1NFVCkgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgICAgIHMtPmluID0gcy0+b3V0ID0gb2Zm c2V0OwotICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgIH0KLQotICAgIC8qIEZvciBhIG5lZ2F0 aXZlIHNlZWssIHJld2luZCBhbmQgdXNlIHBvc2l0aXZlIHNlZWsgKi8KLSAgICBpZiAob2Zmc2V0 ID49IHMtPm91dCkgewotICAgICAgICBvZmZzZXQgLT0gcy0+b3V0OwotICAgIH0gZWxzZSBpZiAo Z3pyZXdpbmQoZmlsZSkgPCAwKSB7Ci0gICAgICAgIHJldHVybiAtMUw7Ci0gICAgfQotICAgIC8q IG9mZnNldCBpcyBub3cgdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwLiAqLwotCi0gICAgaWYg KG9mZnNldCAhPSAwICYmIHMtPm91dGJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgcy0+b3V0YnVm ID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0gICAgICAgIGlmIChzLT5vdXRidWYgPT0gWl9O VUxMKSByZXR1cm4gLTFMOwotICAgIH0KLSAgICBpZiAob2Zmc2V0ICYmIHMtPmJhY2sgIT0gRU9G KSB7Ci0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPm91dCsrOwotICAgICAgICBv ZmZzZXQtLTsKLSAgICAgICAgaWYgKHMtPmxhc3QpIHMtPnpfZXJyID0gWl9TVFJFQU1fRU5EOwot ICAgIH0KLSAgICB3aGlsZSAob2Zmc2V0ID4gMCkgIHsKLSAgICAgICAgaW50IHNpemUgPSBaX0JV RlNJWkU7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBaX0JVRlNJWkUpIHNpemUgPSAoaW50KW9mZnNl dDsKLQotICAgICAgICBzaXplID0gZ3pyZWFkKGZpbGUsIHMtPm91dGJ1ZiwgKHVJbnQpc2l6ZSk7 Ci0gICAgICAgIGlmIChzaXplIDw9IDApIHJldHVybiAtMUw7Ci0gICAgICAgIG9mZnNldCAtPSBz aXplOwotICAgIH0KLSAgICByZXR1cm4gcy0+b3V0OwotfQotCi0vKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSAgICAgUmV3aW5kcyBpbnB1dCBmaWxlLgotKi8KLWludCBaRVhQT1JUIGd6cmV3aW5kIChm aWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0q KWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gLTE7 Ci0KLSAgICBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHMtPmJhY2sg PSBFT0Y7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICBzLT5zdHJlYW0ubmV4dF9p biA9IHMtPmluYnVmOwotICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgIGlm ICghcy0+dHJhbnNwYXJlbnQpICh2b2lkKWluZmxhdGVSZXNldCgmcy0+c3RyZWFtKTsKLSAgICBz LT5pbiA9IDA7Ci0gICAgcy0+b3V0ID0gMDsKLSAgICByZXR1cm4gZnNlZWsocy0+ZmlsZSwgcy0+ c3RhcnQsIFNFRUtfU0VUKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVy bnMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBv biB0aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gVGhpcyBwb3NpdGlvbiByZXByZXNlbnRz IGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLgot Ki8KLXpfb2ZmX3QgWkVYUE9SVCBnenRlbGwgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0g ICAgcmV0dXJuIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpOwotfQotCi0vKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSAgICAgUmV0dXJucyAxIHdoZW4gRU9GIGhhcyBwcmV2aW91c2x5IGJlZW4gZGV0 ZWN0ZWQgcmVhZGluZyB0aGUgZ2l2ZW4KLSAgIGlucHV0IHN0cmVhbSwgb3RoZXJ3aXNlIHplcm8u Ci0qLwotaW50IFpFWFBPUlQgZ3plb2YgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAg Z3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIC8qIFdpdGggY29uY2F0ZW5h dGVkIGNvbXByZXNzZWQgZmlsZXMgdGhhdCBjYW4gaGF2ZSBlbWJlZGRlZAotICAgICAqIGNyYyB0 cmFpbGVycywgel9lb2YgaXMgbm8gbG9uZ2VyIHRoZSBvbmx5L2Jlc3QgaW5kaWNhdG9yIG9mIEVP RgotICAgICAqIG9uIGEgZ3pfc3RyZWFtLiBIYW5kbGUgZW5kLW9mLXN0cmVhbSBlcnJvciBleHBs aWNpdGx5IGhlcmUuCi0gICAgICovCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdy JykgcmV0dXJuIDA7Ci0gICAgaWYgKHMtPnpfZW9mKSByZXR1cm4gMTsKLSAgICByZXR1cm4gcy0+ el9lcnIgPT0gWl9TVFJFQU1fRU5EOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgIE91 dHB1dHMgYSBsb25nIGluIExTQiBvcmRlciB0byB0aGUgZ2l2ZW4gZmlsZQotKi8KLWxvY2FsIHZv aWQgcHV0TG9uZyAoZmlsZSwgeCkKLSAgICBGSUxFICpmaWxlOwotICAgIHVMb25nIHg7Ci17Ci0g ICAgaW50IG47Ci0gICAgZm9yIChuID0gMDsgbiA8IDQ7IG4rKykgewotICAgICAgICBmcHV0Yygo aW50KSh4ICYgMHhmZiksIGZpbGUpOwotICAgICAgICB4ID4+PSA4OwotICAgIH0KLX0KLQotLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0gICBSZWFkcyBhIGxvbmcgaW4gTFNCIG9yZGVyIGZyb20gdGhl IGdpdmVuIGd6X3N0cmVhbS4gU2V0cyB6X2VyciBpbiBjYXNlCi0gICBvZiBlcnJvci4KLSovCi1s b2NhbCB1TG9uZyBnZXRMb25nIChzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICB1TG9uZyB4 ID0gKHVMb25nKWdldF9ieXRlKHMpOwotICAgIGludCBjOwotCi0gICAgeCArPSAoKHVMb25nKWdl dF9ieXRlKHMpKTw8ODsKLSAgICB4ICs9ICgodUxvbmcpZ2V0X2J5dGUocykpPDwxNjsKLSAgICBj ID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKGMgPT0gRU9GKSBzLT56X2VyciA9IFpfREFUQV9FUlJP UjsKLSAgICB4ICs9ICgodUxvbmcpYyk8PDI0OwotICAgIHJldHVybiB4OwotfQotCi0vKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaWYgbmVjZXNz YXJ5LCBjbG9zZXMgdGhlIGNvbXByZXNzZWQgZmlsZQotICAgYW5kIGRlYWxsb2NhdGVzIGFsbCB0 aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLgotKi8KLWludCBaRVhQT1JUIGd6Y2xvc2UgKGZpbGUp Ci0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgaW50IGVycjsKLSAgICBnel9zdHJlYW0gKnMgPSAo Z3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VS Uk9SOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwot ICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0jZWxzZQotICAgICAgICBlcnIgPSBkb19m bHVzaCAoZmlsZSwgWl9GSU5JU0gpOwotICAgICAgICBpZiAoZXJyICE9IFpfT0spIHJldHVybiBk ZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotCi0gICAgICAgIHB1dExvbmcgKHMtPmZpbGUsIHMt PmNyYyk7Ci0gICAgICAgIHB1dExvbmcgKHMtPmZpbGUsICh1TG9uZykocy0+aW4gJiAweGZmZmZm ZmZmKSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIGRlc3Ryb3koKGd6X3N0cmVhbSopZmls ZSk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIHRoZSBlcnJvciBt ZXNzYWdlIGZvciB0aGUgbGFzdCBlcnJvciB3aGljaCBvY2N1cmVkIG9uIHRoZQotICAgZ2l2ZW4g Y29tcHJlc3NlZCBmaWxlLiBlcnJudW0gaXMgc2V0IHRvIHpsaWIgZXJyb3IgbnVtYmVyLiBJZiBh bgotICAgZXJyb3Igb2NjdXJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29t cHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFw cGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNv ZGUuCi0qLwotY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciAoZmlsZSwgZXJybnVtKQotICAg IGd6RmlsZSBmaWxlOwotICAgIGludCAqZXJybnVtOwotewotICAgIGNoYXIgKm07Ci0gICAgZ3pf c3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHsKLSAg ICAgICAgKmVycm51bSA9IFpfU1RSRUFNX0VSUk9SOwotICAgICAgICByZXR1cm4gKGNvbnN0IGNo YXIqKUVSUl9NU0coWl9TVFJFQU1fRVJST1IpOwotICAgIH0KLSAgICAqZXJybnVtID0gcy0+el9l cnI7Ci0gICAgaWYgKCplcnJudW0gPT0gWl9PSykgcmV0dXJuIChjb25zdCBjaGFyKikiIjsKLQot ICAgIG0gPSAoY2hhciopKCplcnJudW0gPT0gWl9FUlJOTyA/IHpzdHJlcnJvcihlcnJubykgOiBz LT5zdHJlYW0ubXNnKTsKLQotICAgIGlmIChtID09IE5VTEwgfHwgKm0gPT0gJ1wwJykgbSA9IChj aGFyKilFUlJfTVNHKHMtPnpfZXJyKTsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLSAgICBzLT5t c2cgPSAoY2hhciopQUxMT0Moc3RybGVuKHMtPnBhdGgpICsgc3RybGVuKG0pICsgMyk7Ci0gICAg aWYgKHMtPm1zZyA9PSBaX05VTEwpIHJldHVybiAoY29uc3QgY2hhciopRVJSX01TRyhaX01FTV9F UlJPUik7Ci0gICAgc3RyY3B5KHMtPm1zZywgcy0+cGF0aCk7Ci0gICAgc3RyY2F0KHMtPm1zZywg IjogIik7Ci0gICAgc3RyY2F0KHMtPm1zZywgbSk7Ci0gICAgcmV0dXJuIChjb25zdCBjaGFyKilz LT5tc2c7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDbGVhciB0aGUgZXJyb3Ig YW5kIGVuZC1vZi1maWxlIGZsYWdzLCBhbmQgZG8gdGhlIHNhbWUgZm9yIHRoZSByZWFsIGZpbGUu Ci0qLwotdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17 Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5V TEwpIHJldHVybjsKLSAgICBpZiAocy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBzLT56X2VyciA9 IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIGNsZWFyZXJyKHMtPmZpbGUpOwotfQpkaWZm IC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9nemxp Yi5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3N5 cy9zcmMvY21kL2dzL3psaWIvZ3psaWIuYwlTdW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0MDAK QEAgLTAsMCArMSw2MzcgQEAKKy8qIGd6bGliLmMgLS0gemxpYiBmdW5jdGlvbnMgY29tbW9uIHRv IHJlYWRpbmcgYW5kIHdyaXRpbmcgZ3ppcCBmaWxlcworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw MTcgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2Us IHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJnemd1dHMu aCIKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFk ZWZpbmVkKF9fTUlOR1czMl9fKQorIyAgZGVmaW5lIExTRUVLIF9sc2Vla2k2NAorI2Vsc2UKKyNp ZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAg ZGVmaW5lIExTRUVLIGxzZWVrNjQKKyNlbHNlCisjICBkZWZpbmUgTFNFRUsgbHNlZWsKKyNlbmRp ZgorI2VuZGlmCisKKy8qIExvY2FsIGZ1bmN0aW9ucyAqLworbG9jYWwgdm9pZCBnel9yZXNldCBP RigoZ3pfc3RhdGVwKSk7Citsb2NhbCBnekZpbGUgZ3pfb3BlbiBPRigoY29uc3Qgdm9pZCAqLCBp bnQsIGNvbnN0IGNoYXIgKikpOworCisjaWYgZGVmaW5lZCBVTkRFUl9DRQorCisvKiBNYXAgdGhl IFdpbmRvd3MgZXJyb3IgbnVtYmVyIGluIEVSUk9SIHRvIGEgbG9jYWxlLWRlcGVuZGVudCBlcnJv ciBtZXNzYWdlCisgICBzdHJpbmcgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuICBUeXBpY2Fs bHksIHRoZSB2YWx1ZXMgZm9yIEVSUk9SIGNvbWUKKyAgIGZyb20gR2V0TGFzdEVycm9yLgorCisg ICBUaGUgc3RyaW5nIHBvaW50ZWQgdG8gc2hhbGwgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBhcHBs aWNhdGlvbiwgYnV0IG1heSBiZQorICAgb3ZlcndyaXR0ZW4gYnkgYSBzdWJzZXF1ZW50IGNhbGwg dG8gZ3pfc3Ryd2luZXJyb3IKKworICAgVGhlIGd6X3N0cndpbmVycm9yIGZ1bmN0aW9uIGRvZXMg bm90IGNoYW5nZSB0aGUgY3VycmVudCBzZXR0aW5nIG9mCisgICBHZXRMYXN0RXJyb3IuICovCitj aGFyIFpMSUJfSU5URVJOQUwgKmd6X3N0cndpbmVycm9yIChlcnJvcikKKyAgICAgRFdPUkQgZXJy b3I7Cit7CisgICAgc3RhdGljIGNoYXIgYnVmWzEwMjRdOworCisgICAgd2NoYXJfdCAqbXNnYnVm OworICAgIERXT1JEIGxhc3RlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBEV09SRCBjaGFycyA9 IEZvcm1hdE1lc3NhZ2UoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0KKyAgICAgICAgfCBGT1JN QVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIsCisgICAgICAgIE5VTEwsCisgICAgICAgIGVycm9y LAorICAgICAgICAwLCAvKiBEZWZhdWx0IGxhbmd1YWdlICovCisgICAgICAgIChMUFZPSUQpJm1z Z2J1ZiwKKyAgICAgICAgMCwKKyAgICAgICAgTlVMTCk7CisgICAgaWYgKGNoYXJzICE9IDApIHsK KyAgICAgICAgLyogSWYgdGhlcmUgaXMgYW4gXHJcbiBhcHBlbmRlZCwgemFwIGl0LiAgKi8KKyAg ICAgICAgaWYgKGNoYXJzID49IDIKKyAgICAgICAgICAgICYmIG1zZ2J1ZltjaGFycyAtIDJdID09 ICdccicgJiYgbXNnYnVmW2NoYXJzIC0gMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgY2hhcnMg LT0gMjsKKyAgICAgICAgICAgIG1zZ2J1ZltjaGFyc10gPSAwOworICAgICAgICB9CisKKyAgICAg ICAgaWYgKGNoYXJzID4gc2l6ZW9mIChidWYpIC0gMSkgeworICAgICAgICAgICAgY2hhcnMgPSBz aXplb2YgKGJ1ZikgLSAxOworICAgICAgICAgICAgbXNnYnVmW2NoYXJzXSA9IDA7CisgICAgICAg IH0KKworICAgICAgICB3Y3N0b21icyhidWYsIG1zZ2J1ZiwgY2hhcnMgKyAxKTsKKyAgICAgICAg TG9jYWxGcmVlKG1zZ2J1Zik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzcHJpbnRmKGJ1 ZiwgInVua25vd24gd2luMzIgZXJyb3IgKCVsZCkiLCBlcnJvcik7CisgICAgfQorCisgICAgU2V0 TGFzdEVycm9yKGxhc3RlcnIpOworICAgIHJldHVybiBidWY7Cit9CisKKyNlbmRpZiAvKiBVTkRF Ul9DRSAqLworCisvKiBSZXNldCBnemlwIGZpbGUgc3RhdGUgKi8KK2xvY2FsIHZvaWQgZ3pfcmVz ZXQoc3RhdGUpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworeworICAgIHN0YXRlLT54LmhhdmUgPSAw OyAgICAgICAgICAgICAgLyogbm8gb3V0cHV0IGRhdGEgYXZhaWxhYmxlICovCisgICAgaWYgKHN0 YXRlLT5tb2RlID09IEdaX1JFQUQpIHsgICAvKiBmb3IgcmVhZGluZyAuLi4gKi8KKyAgICAgICAg c3RhdGUtPmVvZiA9IDA7ICAgICAgICAgICAgIC8qIG5vdCBhdCBlbmQgb2YgZmlsZSAqLworICAg ICAgICBzdGF0ZS0+cGFzdCA9IDA7ICAgICAgICAgICAgLyogaGF2ZSBub3QgcmVhZCBwYXN0IGVu ZCB5ZXQgKi8KKyAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7ICAgICAgICAgIC8qIGxvb2sgZm9y IGd6aXAgaGVhZGVyICovCisgICAgfQorICAgIHN0YXRlLT5zZWVrID0gMDsgICAgICAgICAgICAg ICAgLyogbm8gc2VlayByZXF1ZXN0IHBlbmRpbmcgKi8KKyAgICBnel9lcnJvcihzdGF0ZSwgWl9P SywgTlVMTCk7ICAgIC8qIGNsZWFyIGVycm9yICovCisgICAgc3RhdGUtPngucG9zID0gMDsgICAg ICAgICAgICAgICAvKiBubyB1bmNvbXByZXNzZWQgZGF0YSB5ZXQgKi8KKyAgICBzdGF0ZS0+c3Ry bS5hdmFpbF9pbiA9IDA7ICAgICAgIC8qIG5vIGlucHV0IGRhdGEgeWV0ICovCit9CisKKy8qIE9w ZW4gYSBnemlwIGZpbGUgZWl0aGVyIGJ5IG5hbWUgb3IgZmlsZSBkZXNjcmlwdG9yLiAqLworbG9j YWwgZ3pGaWxlIGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpCisgICAgY29uc3Qgdm9pZCAqcGF0aDsK KyAgICBpbnQgZmQ7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICBnel9zdGF0ZXAgc3Rh dGU7CisgICAgel9zaXplX3QgbGVuOworICAgIGludCBvZmxhZzsKKyNpZmRlZiBPX0NMT0VYRUMK KyAgICBpbnQgY2xvZXhlYyA9IDA7CisjZW5kaWYKKyNpZmRlZiBPX0VYQ0wKKyAgICBpbnQgZXhj bHVzaXZlID0gMDsKKyNlbmRpZgorCisgICAgLyogY2hlY2sgaW5wdXQgKi8KKyAgICBpZiAocGF0 aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIGFsbG9jYXRlIGd6Rmls ZSBzdHJ1Y3R1cmUgdG8gcmV0dXJuICovCisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKW1hbGxvYyhz aXplb2YoZ3pfc3RhdGUpKTsKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgc3RhdGUtPnNpemUgPSAwOyAgICAgICAgICAgIC8qIG5vIGJ1ZmZlcnMgYWxs b2NhdGVkIHlldCAqLworICAgIHN0YXRlLT53YW50ID0gR1pCVUZTSVpFOyAgICAvKiByZXF1ZXN0 ZWQgYnVmZmVyIHNpemUgKi8KKyAgICBzdGF0ZS0+bXNnID0gTlVMTDsgICAgICAgICAgLyogbm8g ZXJyb3IgbWVzc2FnZSB5ZXQgKi8KKworICAgIC8qIGludGVycHJldCBtb2RlICovCisgICAgc3Rh dGUtPm1vZGUgPSBHWl9OT05FOworICAgIHN0YXRlLT5sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVT U0lPTjsKKyAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7CisgICAgc3Rh dGUtPmRpcmVjdCA9IDA7CisgICAgd2hpbGUgKCptb2RlKSB7CisgICAgICAgIGlmICgqbW9kZSA+ PSAnMCcgJiYgKm1vZGUgPD0gJzknKQorICAgICAgICAgICAgc3RhdGUtPmxldmVsID0gKm1vZGUg LSAnMCc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN3aXRjaCAoKm1vZGUpIHsKKyAgICAg ICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gR1pfUkVBRDsK KyAgICAgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTk9fR1pDT01QUkVTUworICAgICAgICAg ICAgY2FzZSAndyc6CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBHWl9XUklURTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAg ICAgIHN0YXRlLT5tb2RlID0gR1pfQVBQRU5EOworICAgICAgICAgICAgICAgIGJyZWFrOworI2Vu ZGlmCisgICAgICAgICAgICBjYXNlICcrJzogICAgICAgLyogY2FuJ3QgcmVhZCBhbmQgd3JpdGUg YXQgdGhlIHNhbWUgdGltZSAqLworICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAg ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgY2FzZSAnYic6ICAgICAgIC8qIGln bm9yZSAtLSB3aWxsIHJlcXVlc3QgYmluYXJ5IGFueXdheSAqLworICAgICAgICAgICAgICAgIGJy ZWFrOworI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAgICAgY2FzZSAnZSc6CisgICAgICAgICAg ICAgICAgY2xvZXhlYyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRl ZiBPX0VYQ0wKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgICAgIGV4Y2x1c2l2 ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2Ug J2YnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfRklMVEVSRUQ7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAg ICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0hVRkZNQU5fT05MWTsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIGNhc2UgJ1InOgorICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVn eSA9IFpfUkxFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnRic6 CisgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSVhFRDsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgICAgIHN0YXRl LT5kaXJlY3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs dDogICAgICAgIC8qIGNvdWxkIGNvbnNpZGVyIGFzIGFuIGVycm9yLCBidXQganVzdCBpZ25vcmUg Ki8KKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICB9CisgICAgICAgIG1vZGUrKzsKKyAg ICB9CisKKyAgICAvKiBtdXN0IHByb3ZpZGUgYW4gInIiLCAidyIsIG9yICJhIiAqLworICAgIGlm IChzdGF0ZS0+bW9kZSA9PSBHWl9OT05FKSB7CisgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAg ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBjYW4ndCBmb3JjZSB0cmFuc3BhcmVudCBy ZWFkICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKKyAgICAgICAgaWYgKHN0 YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7ICAgICAgLyog Zm9yIGVtcHR5IGZpbGUgKi8KKyAgICB9CisKKyAgICAvKiBzYXZlIHRoZSBwYXRoIG5hbWUgZm9y IGVycm9yIG1lc3NhZ2VzICovCisjaWZkZWYgV0lERUNIQVIKKyAgICBpZiAoZmQgPT0gLTIpIHsK KyAgICAgICAgbGVuID0gd2NzdG9tYnMoTlVMTCwgcGF0aCwgMCk7CisgICAgICAgIGlmIChsZW4g PT0gKHpfc2l6ZV90KS0xKQorICAgICAgICAgICAgbGVuID0gMDsKKyAgICB9CisgICAgZWxzZQor I2VuZGlmCisgICAgICAgIGxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKXBhdGgpOworICAgIHN0 YXRlLT5wYXRoID0gKGNoYXIgKiltYWxsb2MobGVuICsgMSk7CisgICAgaWYgKHN0YXRlLT5wYXRo ID09IE5VTEwpIHsKKyAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgIHJldHVybiBOVUxMOwor ICAgIH0KKyNpZmRlZiBXSURFQ0hBUgorICAgIGlmIChmZCA9PSAtMikKKyAgICAgICAgaWYgKGxl bikKKyAgICAgICAgICAgIHdjc3RvbWJzKHN0YXRlLT5wYXRoLCBwYXRoLCBsZW4gKyAxKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgKihzdGF0ZS0+cGF0aCkgPSAwOworICAgIGVsc2UKKyNl bmRpZgorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYp CisgICAgICAgICh2b2lkKXNucHJpbnRmKHN0YXRlLT5wYXRoLCBsZW4gKyAxLCAiJXMiLCAoY29u c3QgY2hhciAqKXBhdGgpOworI2Vsc2UKKyAgICAgICAgc3RyY3B5KHN0YXRlLT5wYXRoLCBwYXRo KTsKKyNlbmRpZgorCisgICAgLyogY29tcHV0ZSB0aGUgZmxhZ3MgZm9yIG9wZW4oKSAqLworICAg IG9mbGFnID0KKyNpZmRlZiBPX0xBUkdFRklMRQorICAgICAgICBPX0xBUkdFRklMRSB8CisjZW5k aWYKKyNpZmRlZiBPX0JJTkFSWQorICAgICAgICBPX0JJTkFSWSB8CisjZW5kaWYKKyNpZmRlZiBP X0NMT0VYRUMKKyAgICAgICAgKGNsb2V4ZWMgPyBPX0NMT0VYRUMgOiAwKSB8CisjZW5kaWYKKyAg ICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPworICAgICAgICAgT19SRE9OTFkgOgorICAg ICAgICAgKE9fV1JPTkxZIHwgT19DUkVBVCB8CisjaWZkZWYgT19FWENMCisgICAgICAgICAgKGV4 Y2x1c2l2ZSA/IE9fRVhDTCA6IDApIHwKKyNlbmRpZgorICAgICAgICAgIChzdGF0ZS0+bW9kZSA9 PSBHWl9XUklURSA/CisgICAgICAgICAgIE9fVFJVTkMgOgorICAgICAgICAgICBPX0FQUEVORCkp KTsKKworICAgIC8qIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgKG9y IGp1c3QgdXNlIGZkKSAqLworICAgIHN0YXRlLT5mZCA9IGZkID4gLTEgPyBmZCA6ICgKKyNpZmRl ZiBXSURFQ0hBUgorICAgICAgICBmZCA9PSAtMiA/IF93b3BlbihwYXRoLCBvZmxhZywgMDY2Nikg OgorI2VuZGlmCisgICAgICAgIG9wZW4oKGNvbnN0IGNoYXIgKilwYXRoLCBvZmxhZywgMDY2Nikp OworICAgIGlmIChzdGF0ZS0+ZmQgPT0gLTEpIHsKKyAgICAgICAgZnJlZShzdGF0ZS0+cGF0aCk7 CisgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAg aWYgKHN0YXRlLT5tb2RlID09IEdaX0FQUEVORCkgeworICAgICAgICBMU0VFSyhzdGF0ZS0+ZmQs IDAsIFNFRUtfRU5EKTsgIC8qIHNvIGd6b2Zmc2V0KCkgaXMgY29ycmVjdCAqLworICAgICAgICBz dGF0ZS0+bW9kZSA9IEdaX1dSSVRFOyAgICAgICAgIC8qIHNpbXBsaWZ5IGxhdGVyIGNoZWNrcyAq LworICAgIH0KKworICAgIC8qIHNhdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gZm9yIHJld2luZGlu ZyAob25seSBpZiByZWFkaW5nKSAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7 CisgICAgICAgIHN0YXRlLT5zdGFydCA9IExTRUVLKHN0YXRlLT5mZCwgMCwgU0VFS19DVVIpOwor ICAgICAgICBpZiAoc3RhdGUtPnN0YXJ0ID09IC0xKSBzdGF0ZS0+c3RhcnQgPSAwOworICAgIH0K KworICAgIC8qIGluaXRpYWxpemUgc3RyZWFtICovCisgICAgZ3pfcmVzZXQoc3RhdGUpOworCisg ICAgLyogcmV0dXJuIHN0cmVhbSAqLworICAgIHJldHVybiAoZ3pGaWxlKXN0YXRlOworfQorCisv KiAtLSBzZWUgemxpYi5oIC0tICovCitnekZpbGUgWkVYUE9SVCBnem9wZW4ocGF0aCwgbW9kZSkK KyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0 dXJuIGd6X29wZW4ocGF0aCwgLTEsIG1vZGUpOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICov CitnekZpbGUgWkVYUE9SVCBnem9wZW42NChwYXRoLCBtb2RlKQorICAgIGNvbnN0IGNoYXIgKnBh dGg7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAt MSwgbW9kZSk7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2d6RmlsZSBaRVhQT1JUIGd6 ZG9wZW4oZmQsIG1vZGUpCisgICAgaW50IGZkOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7Cisg ICAgY2hhciAqcGF0aDsgICAgICAgICAvKiBpZGVudGlmaWVyIGZvciBlcnJvciBtZXNzYWdlcyAq LworICAgIGd6RmlsZSBnejsKKworICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IChjaGFyICop bWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVM TDsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQor ICAgICh2b2lkKXNucHJpbnRmKHBhdGgsIDcgKyAzICogc2l6ZW9mKGludCksICI8ZmQ6JWQ+Iiwg ZmQpOworI2Vsc2UKKyAgICBzcHJpbnRmKHBhdGgsICI8ZmQ6JWQ+IiwgZmQpOyAgIC8qIGZvciBk ZWJ1Z2dpbmcgKi8KKyNlbmRpZgorICAgIGd6ID0gZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSk7Cisg ICAgZnJlZShwYXRoKTsKKyAgICByZXR1cm4gZ3o7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0g Ki8KKyNpZmRlZiBXSURFQ0hBUgorZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuX3cocGF0aCwgbW9kZSkK KyAgICBjb25zdCB3Y2hhcl90ICpwYXRoOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAg cmV0dXJuIGd6X29wZW4ocGF0aCwgLTIsIG1vZGUpOworfQorI2VuZGlmCisKKy8qIC0tIHNlZSB6 bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6YnVmZmVyKGZpbGUsIHNpemUpCisgICAgZ3pGaWxl IGZpbGU7CisgICAgdW5zaWduZWQgc2l6ZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAg ICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBp ZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3Rh dGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUg IT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBo YXZlbid0IGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSAh PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjaGVjayBhbmQgc2V0IHJlcXVlc3Rl ZCBzaXplICovCisgICAgaWYgKChzaXplIDw8IDEpIDwgc2l6ZSkKKyAgICAgICAgcmV0dXJuIC0x OyAgICAgICAgICAgICAgLyogbmVlZCB0byBiZSBhYmxlIHRvIGRvdWJsZSBpdCAqLworICAgIGlm IChzaXplIDwgMikKKyAgICAgICAgc2l6ZSA9IDI7ICAgICAgICAgICAgICAgLyogbmVlZCB0d28g Ynl0ZXMgdG8gY2hlY2sgbWFnaWMgaGVhZGVyICovCisgICAgc3RhdGUtPndhbnQgPSBzaXplOwor ICAgIHJldHVybiAwOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBn enJld2luZChmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsK KworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxM KQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAg ICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAq LworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgICAgICAoc3RhdGUt PmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQorICAgICAgICByZXR1 cm4gLTE7CisKKyAgICAvKiBiYWNrIHVwIGFuZCBzdGFydCBvdmVyICovCisgICAgaWYgKExTRUVL KHN0YXRlLT5mZCwgc3RhdGUtPnN0YXJ0LCBTRUVLX1NFVCkgPT0gLTEpCisgICAgICAgIHJldHVy biAtMTsKKyAgICBnel9yZXNldChzdGF0ZSk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIC0tIHNl ZSB6bGliLmggLS0gKi8KK3pfb2ZmNjRfdCBaRVhQT1JUIGd6c2VlazY0KGZpbGUsIG9mZnNldCwg d2hlbmNlKQorICAgIGd6RmlsZSBmaWxlOworICAgIHpfb2ZmNjRfdCBvZmZzZXQ7CisgICAgaW50 IHdoZW5jZTsKK3sKKyAgICB1bnNpZ25lZCBuOworICAgIHpfb2ZmNjRfdCByZXQ7CisgICAgZ3pf c3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSBhbmQgY2hlY2sg aW50ZWdyaXR5ICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9S RUFEICYmIHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFKQorICAgICAgICByZXR1cm4gLTE7CisKKyAg ICAvKiBjaGVjayB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPmVyciAh PSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHJldHVybiAtMTsK KworICAgIC8qIGNhbiBvbmx5IHNlZWsgZnJvbSBzdGFydCBvciByZWxhdGl2ZSB0byBjdXJyZW50 IHBvc2l0aW9uICovCisgICAgaWYgKHdoZW5jZSAhPSBTRUVLX1NFVCAmJiB3aGVuY2UgIT0gU0VF S19DVVIpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIG5vcm1hbGl6ZSBvZmZzZXQgdG8g YSBTRUVLX0NVUiBzcGVjaWZpY2F0aW9uICovCisgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkK KyAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT54LnBvczsKKyAgICBlbHNlIGlmIChzdGF0ZS0+c2Vl aykKKyAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT5za2lwOworICAgIHN0YXRlLT5zZWVrID0gMDsK KworICAgIC8qIGlmIHdpdGhpbiByYXcgYXJlYSB3aGlsZSByZWFkaW5nLCBqdXN0IGdvIHRoZXJl ICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgJiYgc3RhdGUtPmhvdyA9PSBDT1BZ ICYmCisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKyBvZmZzZXQgPj0gMCkgeworICAgICAgICBy ZXQgPSBMU0VFSyhzdGF0ZS0+ZmQsIG9mZnNldCAtIHN0YXRlLT54LmhhdmUsIFNFRUtfQ1VSKTsK KyAgICAgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg c3RhdGUtPnguaGF2ZSA9IDA7CisgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0 ZS0+cGFzdCA9IDA7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgZ3pfZXJyb3Io c3RhdGUsIFpfT0ssIE5VTEwpOworICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7Cisg ICAgICAgIHN0YXRlLT54LnBvcyArPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiBzdGF0ZS0+eC5w b3M7CisgICAgfQorCisgICAgLyogY2FsY3VsYXRlIHNraXAgYW1vdW50LCByZXdpbmRpbmcgaWYg bmVlZGVkIGZvciBiYWNrIHNlZWsgd2hlbiByZWFkaW5nICovCisgICAgaWYgKG9mZnNldCA8IDAp IHsKKyAgICAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpICAgICAgICAgLyogd3JpdGlu ZyAtLSBjYW4ndCBnbyBiYWNrd2FyZHMgKi8KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgb2Zmc2V0ICs9IHN0YXRlLT54LnBvczsKKyAgICAgICAgaWYgKG9mZnNldCA8IDApICAgICAg ICAgICAgICAgICAgICAgLyogYmVmb3JlIHN0YXJ0IG9mIGZpbGUhICovCisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgIGlmIChnenJld2luZChmaWxlKSA9PSAtMSkgICAgICAgICAgIC8q IHJld2luZCwgdGhlbiBza2lwIHRvIG9mZnNldCAqLworICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICAgIC8qIGlmIHJlYWRpbmcsIHNraXAgd2hhdCdzIGluIG91dHB1dCBidWZmZXIg KG9uZSBsZXNzIGd6Z2V0YygpIGNoZWNrKSAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9S RUFEKSB7CisgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClz dGF0ZS0+eC5oYXZlID4gb2Zmc2V0ID8KKyAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBz dGF0ZS0+eC5oYXZlOworICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgIHN0YXRl LT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CisgICAgICAgIG9mZnNl dCAtPSBuOworICAgIH0KKworICAgIC8qIHJlcXVlc3Qgc2tpcCAoaWYgbm90IHplcm8pICovCisg ICAgaWYgKG9mZnNldCkgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDE7CisgICAgICAgIHN0YXRl LT5za2lwID0gb2Zmc2V0OworICAgIH0KKyAgICByZXR1cm4gc3RhdGUtPngucG9zICsgb2Zmc2V0 OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X29mZl90IFpFWFBPUlQgZ3pzZWVrKGZp bGUsIG9mZnNldCwgd2hlbmNlKQorICAgIGd6RmlsZSBmaWxlOworICAgIHpfb2ZmX3Qgb2Zmc2V0 OworICAgIGludCB3aGVuY2U7Cit7CisgICAgel9vZmY2NF90IHJldDsKKworICAgIHJldCA9IGd6 c2VlazY0KGZpbGUsICh6X29mZjY0X3Qpb2Zmc2V0LCB3aGVuY2UpOworICAgIHJldHVybiByZXQg PT0gKHpfb2ZmX3QpcmV0ID8gKHpfb2ZmX3QpcmV0IDogLTE7Cit9CisKKy8qIC0tIHNlZSB6bGli LmggLS0gKi8KK3pfb2ZmNjRfdCBaRVhQT1JUIGd6dGVsbDY0KGZpbGUpCisgICAgZ3pGaWxlIGZp bGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVj dHVyZSBhbmQgY2hlY2sgaW50ZWdyaXR5ICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIGlmIChzdGF0 ZS0+bW9kZSAhPSBHWl9SRUFEICYmIHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFKQorICAgICAgICBy ZXR1cm4gLTE7CisKKyAgICAvKiByZXR1cm4gcG9zaXRpb24gKi8KKyAgICByZXR1cm4gc3RhdGUt PngucG9zICsgKHN0YXRlLT5zZWVrID8gc3RhdGUtPnNraXAgOiAwKTsKK30KKworLyogLS0gc2Vl IHpsaWIuaCAtLSAqLworel9vZmZfdCBaRVhQT1JUIGd6dGVsbChmaWxlKQorICAgIGd6RmlsZSBm aWxlOworeworICAgIHpfb2ZmNjRfdCByZXQ7CisKKyAgICByZXQgPSBnenRlbGw2NChmaWxlKTsK KyAgICByZXR1cm4gcmV0ID09ICh6X29mZl90KXJldCA/ICh6X29mZl90KXJldCA6IC0xOworfQor CisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0KGZp bGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgel9vZmY2NF90IG9mZnNldDsKKyAgICBnel9z dGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBp bnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7Cisg ICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JF QUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiAtMTsKKworICAg IC8qIGNvbXB1dGUgYW5kIHJldHVybiBlZmZlY3RpdmUgb2Zmc2V0IGluIGZpbGUgKi8KKyAgICBv ZmZzZXQgPSBMU0VFSyhzdGF0ZS0+ZmQsIDAsIFNFRUtfQ1VSKTsKKyAgICBpZiAob2Zmc2V0ID09 IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQp ICAgICAgICAgICAgIC8qIHJlYWRpbmcgKi8KKyAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT5zdHJt LmF2YWlsX2luOyAgICAgLyogZG9uJ3QgY291bnQgYnVmZmVyZWQgaW5wdXQgKi8KKyAgICByZXR1 cm4gb2Zmc2V0OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X29mZl90IFpFWFBPUlQg Z3pvZmZzZXQoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICB6X29mZjY0X3QgcmV0Owor CisgICAgcmV0ID0gZ3pvZmZzZXQ2NChmaWxlKTsKKyAgICByZXR1cm4gcmV0ID09ICh6X29mZl90 KXJldCA/ICh6X29mZl90KXJldCA6IC0xOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitp bnQgWkVYUE9SVCBnemVvZihmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAgIGd6X3N0YXRl cCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGNoZWNrIGludGVn cml0eSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0 YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEICYm IHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHJl dHVybiBlbmQtb2YtZmlsZSBzdGF0ZSAqLworICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9S RUFEID8gc3RhdGUtPnBhc3QgOiAwOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitjb25z dCBjaGFyICogWkVYUE9SVCBnemVycm9yKGZpbGUsIGVycm51bSkKKyAgICBnekZpbGUgZmlsZTsK KyAgICBpbnQgKmVycm51bTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQg aW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9 PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmls ZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCAmJiBzdGF0ZS0+bW9kZSAhPSBHWl9X UklURSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiByZXR1cm4gZXJyb3IgaW5mb3Jt YXRpb24gKi8KKyAgICBpZiAoZXJybnVtICE9IE5VTEwpCisgICAgICAgICplcnJudW0gPSBzdGF0 ZS0+ZXJyOworICAgIHJldHVybiBzdGF0ZS0+ZXJyID09IFpfTUVNX0VSUk9SID8gIm91dCBvZiBt ZW1vcnkiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS0+ bXNnID09IE5VTEwgPyAiIiA6IHN0YXRlLT5tc2cpOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0t ICovCit2b2lkIFpFWFBPUlQgZ3pjbGVhcmVycihmaWxlKQorICAgIGd6RmlsZSBmaWxlOworewor ICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5k IGNoZWNrIGludGVncml0eSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVy bjsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0g R1pfUkVBRCAmJiBzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuOworCisg ICAgLyogY2xlYXIgZXJyb3IgYW5kIGVuZC1vZi1maWxlICovCisgICAgaWYgKHN0YXRlLT5tb2Rl ID09IEdaX1JFQUQpIHsKKyAgICAgICAgc3RhdGUtPmVvZiA9IDA7CisgICAgICAgIHN0YXRlLT5w YXN0ID0gMDsKKyAgICB9CisgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOworfQorCisv KiBDcmVhdGUgYW4gZXJyb3IgbWVzc2FnZSBpbiBhbGxvY2F0ZWQgbWVtb3J5IGFuZCBzZXQgc3Rh dGUtPmVyciBhbmQKKyAgIHN0YXRlLT5tc2cgYWNjb3JkaW5nbHkuICBGcmVlIGFueSBwcmV2aW91 cyBlcnJvciBtZXNzYWdlIGFscmVhZHkgdGhlcmUuICBEbworICAgbm90IHRyeSB0byBmcmVlIG9y IGFsbG9jYXRlIHNwYWNlIGlmIHRoZSBlcnJvciBpcyBaX01FTV9FUlJPUiAob3V0IG9mCisgICBt ZW1vcnkpLiAgU2ltcGx5IHNhdmUgdGhlIGVycm9yIG1lc3NhZ2UgYXMgYSBzdGF0aWMgc3RyaW5n LiAgSWYgdGhlcmUgaXMgYW4KKyAgIGFsbG9jYXRpb24gZmFpbHVyZSBjb25zdHJ1Y3RpbmcgdGhl IGVycm9yIG1lc3NhZ2UsIHRoZW4gY29udmVydCB0aGUgZXJyb3IgdG8KKyAgIG91dCBvZiBtZW1v cnkuICovCit2b2lkIFpMSUJfSU5URVJOQUwgZ3pfZXJyb3Ioc3RhdGUsIGVyciwgbXNnKQorICAg IGd6X3N0YXRlcCBzdGF0ZTsKKyAgICBpbnQgZXJyOworICAgIGNvbnN0IGNoYXIgKm1zZzsKK3sK KyAgICAvKiBmcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lc3NhZ2UgYW5kIGNsZWFyICovCisg ICAgaWYgKHN0YXRlLT5tc2cgIT0gTlVMTCkgeworICAgICAgICBpZiAoc3RhdGUtPmVyciAhPSBa X01FTV9FUlJPUikKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm1zZyk7CisgICAgICAgIHN0YXRl LT5tc2cgPSBOVUxMOworICAgIH0KKworICAgIC8qIGlmIGZhdGFsLCBzZXQgc3RhdGUtPnguaGF2 ZSB0byAwIHNvIHRoYXQgdGhlIGd6Z2V0YygpIG1hY3JvIGZhaWxzICovCisgICAgaWYgKGVyciAh PSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7 CisKKyAgICAvKiBzZXQgZXJyb3IgY29kZSwgYW5kIGlmIG5vIG1lc3NhZ2UsIHRoZW4gZG9uZSAq LworICAgIHN0YXRlLT5lcnIgPSBlcnI7CisgICAgaWYgKG1zZyA9PSBOVUxMKQorICAgICAgICBy ZXR1cm47CisKKyAgICAvKiBmb3IgYW4gb3V0IG9mIG1lbW9yeSBlcnJvciwgcmV0dXJuIGxpdGVy YWwgc3RyaW5nIHdoZW4gcmVxdWVzdGVkICovCisgICAgaWYgKGVyciA9PSBaX01FTV9FUlJPUikK KyAgICAgICAgcmV0dXJuOworCisgICAgLyogY29uc3RydWN0IGVycm9yIG1lc3NhZ2Ugd2l0aCBw YXRoICovCisgICAgaWYgKChzdGF0ZS0+bXNnID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHN0YXRl LT5wYXRoKSArIHN0cmxlbihtc2cpICsgMykpID09CisgICAgICAgICAgICBOVUxMKSB7CisgICAg ICAgIHN0YXRlLT5lcnIgPSBaX01FTV9FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNp ZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgICh2 b2lkKXNucHJpbnRmKHN0YXRlLT5tc2csIHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNn KSArIDMsCisgICAgICAgICAgICAgICAgICAgIiVzJXMlcyIsIHN0YXRlLT5wYXRoLCAiOiAiLCBt c2cpOworI2Vsc2UKKyAgICBzdHJjcHkoc3RhdGUtPm1zZywgc3RhdGUtPnBhdGgpOworICAgIHN0 cmNhdChzdGF0ZS0+bXNnLCAiOiAiKTsKKyAgICBzdHJjYXQoc3RhdGUtPm1zZywgbXNnKTsKKyNl bmRpZgorfQorCisjaWZuZGVmIElOVF9NQVgKKy8qIHBvcnRhYmx5IHJldHVybiBtYXhpbXVtIHZh bHVlIGZvciBhbiBpbnQgKHdoZW4gbGltaXRzLmggcHJlc3VtZWQgbm90CisgICBhdmFpbGFibGUp IC0tIHdlIG5lZWQgdG8gZG8gdGhpcyB0byBjb3ZlciBjYXNlcyB3aGVyZSAyJ3MgY29tcGxlbWVu dCBub3QKKyAgIHVzZWQsIHNpbmNlIEMgc3RhbmRhcmQgcGVybWl0cyAxJ3MgY29tcGxlbWVudCBh bmQgc2lnbi1iaXQgcmVwcmVzZW50YXRpb25zLAorICAgb3RoZXJ3aXNlIHdlIGNvdWxkIGp1c3Qg dXNlICgodW5zaWduZWQpLTEpID4+IDEgKi8KK3Vuc2lnbmVkIFpMSUJfSU5URVJOQUwgZ3pfaW50 bWF4KCkKK3sKKyAgICB1bnNpZ25lZCBwLCBxOworCisgICAgcCA9IDE7CisgICAgZG8geworICAg ICAgICBxID0gcDsKKyAgICAgICAgcCA8PD0gMTsKKyAgICAgICAgcCsrOworICAgIH0gd2hpbGUg KHAgPiBxKTsKKyAgICByZXR1cm4gcSA+PiAxOworfQorI2VuZGlmCmRpZmYgLXIgOWEzMTc3MjMx NzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL2d6cmVhZC5jCi0tLSAvZGV2 L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3N5cy9zcmMvY21kL2dz L3psaWIvZ3pyZWFkLmMJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0wLDAgKzEs NjU0IEBACisvKiBnenJlYWQuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBnemlwIGZp bGVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMs IDIwMTYgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1 c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJnemd1 dHMuaCIKKworLyogTG9jYWwgZnVuY3Rpb25zICovCitsb2NhbCBpbnQgZ3pfbG9hZCBPRigoZ3pf c3RhdGVwLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCB1bnNpZ25lZCAqKSk7Citsb2NhbCBp bnQgZ3pfYXZhaWwgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X2xvb2sgT0YoKGd6X3N0 YXRlcCkpOworbG9jYWwgaW50IGd6X2RlY29tcCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQg Z3pfZmV0Y2ggT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X3NraXAgT0YoKGd6X3N0YXRl cCwgel9vZmY2NF90KSk7Citsb2NhbCB6X3NpemVfdCBnel9yZWFkIE9GKChnel9zdGF0ZXAsIHZv aWRwLCB6X3NpemVfdCkpOworCisvKiBVc2UgcmVhZCgpIHRvIGxvYWQgYSBidWZmZXIgLS0gcmV0 dXJuIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIFJlYWQgZnJvbQorICAgc3RhdGUtPmZkLCBh bmQgdXBkYXRlIHN0YXRlLT5lb2YsIHN0YXRlLT5lcnIsIGFuZCBzdGF0ZS0+bXNnIGFzIGFwcHJv cHJpYXRlLgorICAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBsb29wIG9uIHJlYWQoKSwgc2luY2Ug cmVhZCgpIGlzIG5vdCBndWFyYW50ZWVkIHRvCisgICByZWFkIHRoZSBudW1iZXIgb2YgYnl0ZXMg cmVxdWVzdGVkLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZGVzY3JpcHRvci4gKi8KK2xvY2Fs IGludCBnel9sb2FkKHN0YXRlLCBidWYsIGxlbiwgaGF2ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7 CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKKyAgICB1bnNpZ25l ZCAqaGF2ZTsKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGdldCwgbWF4ID0gKCh1bnNp Z25lZCktMSA+PiAyKSArIDE7CisKKyAgICAqaGF2ZSA9IDA7CisgICAgZG8geworICAgICAgICBn ZXQgPSBsZW4gLSAqaGF2ZTsKKyAgICAgICAgaWYgKGdldCA+IG1heCkKKyAgICAgICAgICAgIGdl dCA9IG1heDsKKyAgICAgICAgcmV0ID0gcmVhZChzdGF0ZS0+ZmQsIGJ1ZiArICpoYXZlLCBnZXQp OworICAgICAgICBpZiAocmV0IDw9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKmhh dmUgKz0gKHVuc2lnbmVkKXJldDsKKyAgICB9IHdoaWxlICgqaGF2ZSA8IGxlbik7CisgICAgaWYg KHJldCA8IDApIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigp KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocmV0ID09IDApCisgICAgICAg IHN0YXRlLT5lb2YgPSAxOworICAgIHJldHVybiAwOworfQorCisvKiBMb2FkIHVwIGlucHV0IGJ1 ZmZlciBhbmQgc2V0IGVvZiBmbGFnIGlmIGxhc3QgZGF0YSBsb2FkZWQgLS0gcmV0dXJuIC0xIG9u CisgICBlcnJvciwgMCBvdGhlcndpc2UuICBOb3RlIHRoYXQgdGhlIGVvZiBmbGFnIGlzIHNldCB3 aGVuIHRoZSBlbmQgb2YgdGhlIGlucHV0CisgICBmaWxlIGlzIHJlYWNoZWQsIGV2ZW4gdGhvdWdo IHRoZXJlIG1heSBiZSB1bnVzZWQgZGF0YSBpbiB0aGUgYnVmZmVyLiAgT25jZQorICAgdGhhdCBk YXRhIGhhcyBiZWVuIHVzZWQsIG5vIG1vcmUgYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlYWQg dGhlIGZpbGUuCisgICBJZiBzdHJtLT5hdmFpbF9pbiAhPSAwLCB0aGVuIHRoZSBjdXJyZW50IGRh dGEgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZgorICAgdGhlIGlucHV0IGJ1ZmZlciwgYW5k IHRoZW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCB3aXRoIHRoZQorICAg YXZhaWxhYmxlIGRhdGEgZnJvbSB0aGUgaW5wdXQgZmlsZS4gKi8KK2xvY2FsIGludCBnel9hdmFp bChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgdW5zaWduZWQgZ290OworICAg IHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICBpZiAoc3RhdGUtPmVyciAh PSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHJldHVybiAtMTsK KyAgICBpZiAoc3RhdGUtPmVvZiA9PSAwKSB7CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbikg eyAgICAgICAvKiBjb3B5IHdoYXQncyB0aGVyZSB0byB0aGUgc3RhcnQgKi8KKyAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKnAgPSBzdGF0ZS0+aW47CisgICAgICAgICAgICB1bnNpZ25lZCBjb25z dCBjaGFyICpxID0gc3RybS0+bmV4dF9pbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG4gPSBzdHJt LT5hdmFpbF9pbjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqcCsrID0gKnEr KzsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGd6 X2xvYWQoc3RhdGUsIHN0YXRlLT5pbiArIHN0cm0tPmF2YWlsX2luLAorICAgICAgICAgICAgICAg ICAgICBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luLCAmZ290KSA9PSAtMSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gZ290OworICAgICAgICBz dHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyog TG9vayBmb3IgZ3ppcCBoZWFkZXIsIHNldCB1cCBmb3IgaW5mbGF0ZSBvciBjb3B5LiAgc3RhdGUt PnguaGF2ZSBtdXN0IGJlIDAuCisgICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluLCBhbGxv Y2F0ZSByZXF1aXJlZCBtZW1vcnkuICBzdGF0ZS0+aG93IHdpbGwgYmUKKyAgIGxlZnQgdW5jaGFu Z2VkIGlmIHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgZGF0YSBhdmFpbGFibGUsIHdpbGwgYmUgc2V0 IHRvIENPUFkKKyAgIGlmIHRoZXJlIGlzIG5vIGd6aXAgaGVhZGVyIGFuZCBkaXJlY3QgY29weWlu ZyB3aWxsIGJlIHBlcmZvcm1lZCwgb3IgaXQgd2lsbAorICAgYmUgc2V0IHRvIEdaSVAgZm9yIGRl Y29tcHJlc3Npb24uICBJZiBkaXJlY3QgY29weWluZywgdGhlbiBsZWZ0b3ZlciBpbnB1dAorICAg ZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBi dWZmZXIuICBJbiB0aGF0CisgICBjYXNlLCBhbGwgZnVydGhlciBmaWxlIHJlYWRzIHdpbGwgYmUg ZGlyZWN0bHkgdG8gZWl0aGVyIHRoZSBvdXRwdXQgYnVmZmVyIG9yCisgICBhIHVzZXIgYnVmZmVy LiAgSWYgZGVjb21wcmVzc2luZywgdGhlIGluZmxhdGUgc3RhdGUgd2lsbCBiZSBpbml0aWFsaXpl ZC4KKyAgIGd6X2xvb2soKSB3aWxsIHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVy ZS4gKi8KK2xvY2FsIGludCBnel9sb29rKHN0YXRlKQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKK3sK KyAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogYWxsb2NhdGUg cmVhZCBidWZmZXJzIGFuZCBpbmZsYXRlIG1lbW9yeSAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSA9 PSAwKSB7CisgICAgICAgIC8qIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KKyAgICAgICAgc3RhdGUtPmlu ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgICAgICBzdGF0ZS0+ b3V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CisgICAgICAg IGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKKyAgICAgICAg ICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAg ICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7Cisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPnNpemUgPSBz dGF0ZS0+d2FudDsKKworICAgICAgICAvKiBhbGxvY2F0ZSBpbmZsYXRlIG1lbW9yeSAqLworICAg ICAgICBzdGF0ZS0+c3RybS56YWxsb2MgPSBaX05VTEw7CisgICAgICAgIHN0YXRlLT5zdHJtLnpm cmVlID0gWl9OVUxMOworICAgICAgICBzdGF0ZS0+c3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAg ICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsKKyAgICAgICAgc3RhdGUtPnN0cm0ubmV4dF9p biA9IFpfTlVMTDsKKyAgICAgICAgaWYgKGluZmxhdGVJbml0MigmKHN0YXRlLT5zdHJtKSwgMTUg KyAxNikgIT0gWl9PSykgeyAgICAvKiBndW56aXAgKi8KKyAgICAgICAgICAgIGZyZWUoc3RhdGUt Pm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBzdGF0ZS0+ c2l6ZSA9IDA7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQg b2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisK KyAgICAvKiBnZXQgYXQgbGVhc3QgdGhlIG1hZ2ljIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIg Ki8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPCAyKSB7CisgICAgICAgIGlmIChnel9hdmFpbChz dGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzdHJtLT5h dmFpbF9pbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogbG9v ayBmb3IgZ3ppcCBtYWdpYyBieXRlcyAtLSBpZiB0aGVyZSwgZG8gZ3ppcCBkZWNvZGluZyAobm90 ZTogdGhlcmUgaXMKKyAgICAgICBhIGxvZ2ljYWwgZGlsZW1tYSBoZXJlIHdoZW4gY29uc2lkZXJp bmcgdGhlIGNhc2Ugb2YgYSBwYXJ0aWFsbHkgd3JpdHRlbgorICAgICAgIGd6aXAgZmlsZSwgdG8g d2l0LCBpZiBhIHNpbmdsZSAzMSBieXRlIGlzIHdyaXR0ZW4sIHRoZW4gd2UgY2Fubm90IHRlbGwK KyAgICAgICB3aGV0aGVyIHRoaXMgaXMgYSBzaW5nbGUtYnl0ZSBmaWxlLCBvciBqdXN0IGEgcGFy dGlhbGx5IHdyaXR0ZW4gZ3ppcAorICAgICAgIGZpbGUgLS0gZm9yIGhlcmUgd2UgYXNzdW1lIHRo YXQgaWYgYSBnemlwIGZpbGUgaXMgYmVpbmcgd3JpdHRlbiwgdGhlbgorICAgICAgIHRoZSBoZWFk ZXIgd2lsbCBiZSB3cml0dGVuIGluIGEgc2luZ2xlIG9wZXJhdGlvbiwgc28gdGhhdCByZWFkaW5n IGEKKyAgICAgICBzaW5nbGUgYnl0ZSBpcyBzdWZmaWNpZW50IGluZGljYXRpb24gdGhhdCBpdCBp cyBub3QgYSBnemlwIGZpbGUpICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luID4gMSAmJgorICAg ICAgICAgICAgc3RybS0+bmV4dF9pblswXSA9PSAzMSAmJiBzdHJtLT5uZXh0X2luWzFdID09IDEz OSkgeworICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgICAgIHN0YXRlLT5ob3cgPSBH WklQOworICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgICAgLyogbm8gZ3ppcCBoZWFkZXIgLS0gaWYgd2Ugd2VyZSBkZWNvZGluZyBnemlwIGJl Zm9yZSwgdGhlbiB0aGlzIGlzIHRyYWlsaW5nCisgICAgICAgZ2FyYmFnZS4gIElnbm9yZSB0aGUg dHJhaWxpbmcgZ2FyYmFnZSBhbmQgZmluaXNoLiAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0ID09 IDApIHsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgICAgICBzdGF0ZS0+ZW9mID0g MTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0K KworICAgIC8qIGRvaW5nIHJhdyBpL28sIGNvcHkgYW55IGxlZnRvdmVyIGlucHV0IHRvIG91dHB1 dCAtLSB0aGlzIGFzc3VtZXMgdGhhdAorICAgICAgIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGxhcmdl ciB0aGFuIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNoIGFsc28gYXNzdXJlcworICAgICAgIHNwYWNl IGZvciBnenVuZ2V0YygpICovCisgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CisgICAg aWYgKHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgIG1lbWNweShzdGF0ZS0+eC5uZXh0LCBzdHJt LT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSBzdHJt LT5hdmFpbF9pbjsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgIH0KKyAgICBzdGF0 ZS0+aG93ID0gQ09QWTsKKyAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsKKyAgICByZXR1cm4gMDsKK30K KworLyogRGVjb21wcmVzcyBmcm9tIGlucHV0IHRvIHRoZSBwcm92aWRlZCBuZXh0X291dCBhbmQg YXZhaWxfb3V0IGluIHRoZSBzdGF0ZS4KKyAgIE9uIHJldHVybiwgc3RhdGUtPnguaGF2ZSBhbmQg c3RhdGUtPngubmV4dCBwb2ludCB0byB0aGUganVzdCBkZWNvbXByZXNzZWQKKyAgIGRhdGEuICBJ ZiB0aGUgZ3ppcCBzdHJlYW0gY29tcGxldGVzLCBzdGF0ZS0+aG93IGlzIHJlc2V0IHRvIExPT0sg dG8gbG9vayBmb3IKKyAgIHRoZSBuZXh0IGd6aXAgc3RyZWFtIG9yIHJhdyBkYXRhLCBvbmNlIHN0 YXRlLT54LmhhdmUgaXMgZGVwbGV0ZWQuICBSZXR1cm5zIDAKKyAgIG9uIHN1Y2Nlc3MsIC0xIG9u IGZhaWx1cmUuICovCitsb2NhbCBpbnQgZ3pfZGVjb21wKHN0YXRlKQorICAgIGd6X3N0YXRlcCBz dGF0ZTsKK3sKKyAgICBpbnQgcmV0ID0gWl9PSzsKKyAgICB1bnNpZ25lZCBoYWQ7CisgICAgel9z dHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGZpbGwgb3V0cHV0IGJ1ZmZl ciB1cCB0byBlbmQgb2YgZGVmbGF0ZSBzdHJlYW0gKi8KKyAgICBoYWQgPSBzdHJtLT5hdmFpbF9v dXQ7CisgICAgZG8geworICAgICAgICAvKiBnZXQgbW9yZSBpbnB1dCBmb3IgaW5mbGF0ZSgpICov CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAt MSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09 IDApIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInVuZXhwZWN0 ZWQgZW5kIG9mIGZpbGUiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg ICAgLyogZGVjb21wcmVzcyBhbmQgaGFuZGxlIGVycm9ycyAqLworICAgICAgICByZXQgPSBpbmZs YXRlKHN0cm0sIFpfTk9fRkxVU0gpOworICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VSUk9S IHx8IHJldCA9PSBaX05FRURfRElDVCkgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpf U1RSRUFNX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZs YXRlIHN0cmVhbSBjb3JydXB0Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K KyAgICAgICAgaWYgKHJldCA9PSBaX01FTV9FUlJPUikgeworICAgICAgICAgICAgZ3pfZXJyb3Io c3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKSB7ICAgICAg ICAgICAgICAvKiBkZWZsYXRlIHN0cmVhbSBpbnZhbGlkICovCisgICAgICAgICAgICBnel9lcnJv cihzdGF0ZSwgWl9EQVRBX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID09 IE5VTEwgPyAiY29tcHJlc3NlZCBkYXRhIGVycm9yIiA6IHN0cm0tPm1zZyk7CisgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgJiYg cmV0ICE9IFpfU1RSRUFNX0VORCk7CisKKyAgICAvKiB1cGRhdGUgYXZhaWxhYmxlIG91dHB1dCAq LworICAgIHN0YXRlLT54LmhhdmUgPSBoYWQgLSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgc3RhdGUt PngubmV4dCA9IHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPnguaGF2ZTsKKworICAgIC8qIGlmIHRo ZSBnemlwIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBsb29rIGZvciBhbm90aGVyICov CisgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgIHN0YXRlLT5ob3cgPSBMT09L OworCisgICAgLyogZ29vZCBkZWNvbXByZXNzaW9uICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8q IEZldGNoIGRhdGEgYW5kIHB1dCBpdCBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4gIEFzc3VtZXMgc3Rh dGUtPnguaGF2ZSBpcyAwLgorICAgRGF0YSBpcyBlaXRoZXIgY29waWVkIGZyb20gdGhlIGlucHV0 IGZpbGUgb3IgZGVjb21wcmVzc2VkIGZyb20gdGhlIGlucHV0CisgICBmaWxlIGRlcGVuZGluZyBv biBzdGF0ZS0+aG93LiAgSWYgc3RhdGUtPmhvdyBpcyBMT09LLCB0aGVuIGEgZ3ppcCBoZWFkZXIg aXMKKyAgIGxvb2tlZCBmb3IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY29weSBvciBkZWNvbXBy ZXNzLiAgUmV0dXJucyAtMSBvbiBlcnJvciwKKyAgIG90aGVyd2lzZSAwLiAgZ3pfZmV0Y2goKSB3 aWxsIGxlYXZlIHN0YXRlLT5ob3cgYXMgQ09QWSBvciBHWklQIHVubGVzcyB0aGUKKyAgIGVuZCBv ZiB0aGUgaW5wdXQgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGFuZCBhbGwgZGF0YSBoYXMgYmVlbiBw cm9jZXNzZWQuICAqLworbG9jYWwgaW50IGd6X2ZldGNoKHN0YXRlKQorICAgIGd6X3N0YXRlcCBz dGF0ZTsKK3sKKyAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgZG8g eworICAgICAgICBzd2l0Y2goc3RhdGUtPmhvdykgeworICAgICAgICBjYXNlIExPT0s6ICAgICAg LyogLT4gTE9PSywgQ09QWSAob25seSBpZiBuZXZlciBHWklQKSwgb3IgR1pJUCAqLworICAgICAg ICAgICAgaWYgKGd6X2xvb2soc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aG93ID09IExPT0spCisgICAgICAgICAgICAgICAg cmV0dXJuIDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT1BZOiAgICAgIC8q IC0+IENPUFkgKi8KKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+b3V0LCBz dGF0ZS0+c2l6ZSA8PCAxLCAmKHN0YXRlLT54LmhhdmUpKQorICAgICAgICAgICAgICAgICAgICA9 PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBzdGF0ZS0+eC5u ZXh0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEda SVA6ICAgICAgLyogLT4gR1pJUCBvciBMT09LIChpZiBlbmQgb2YgZ3ppcCBzdHJlYW0pICovCisg ICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZSA8PCAxOworICAgICAgICAg ICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgICAgICAgICAgaWYgKGd6X2RlY29t cChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg ICAgfSB3aGlsZSAoc3RhdGUtPnguaGF2ZSA9PSAwICYmICghc3RhdGUtPmVvZiB8fCBzdHJtLT5h dmFpbF9pbikpOworICAgIHJldHVybiAwOworfQorCisvKiBTa2lwIGxlbiB1bmNvbXByZXNzZWQg Ynl0ZXMgb2Ygb3V0cHV0LiAgUmV0dXJuIC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuICovCits b2NhbCBpbnQgZ3pfc2tpcChzdGF0ZSwgbGVuKQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6 X29mZjY0X3QgbGVuOworeworICAgIHVuc2lnbmVkIG47CisKKyAgICAvKiBza2lwIG92ZXIgbGVu IGJ5dGVzIG9yIHJlYWNoIGVuZC1vZi1maWxlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QgKi8KKyAg ICB3aGlsZSAobGVuKQorICAgICAgICAvKiBza2lwIG92ZXIgd2hhdGV2ZXIgaXMgaW4gb3V0cHV0 IGJ1ZmZlciAqLworICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICAgICAgbiA9 IEdUX09GRihzdGF0ZS0+eC5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT54LmhhdmUgPiBsZW4g PworICAgICAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+eC5oYXZlOworICAgICAg ICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBu OworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IG47CisgICAgICAgICAgICBsZW4gLT0gbjsK KyAgICAgICAgfQorCisgICAgICAgIC8qIG91dHB1dCBidWZmZXIgZW1wdHkgLS0gcmV0dXJuIGlm IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0ICovCisgICAgICAgIGVsc2UgaWYgKHN0YXRl LT5lb2YgJiYgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgIC8qIG5lZWQgbW9yZSBkYXRhIHRvIHNraXAgLS0gbG9hZCB1cCBvdXRwdXQgYnVm ZmVyICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogZ2V0IG1vcmUgb3V0cHV0LCBs b29raW5nIGZvciBoZWFkZXIgaWYgcmVxdWlyZWQgKi8KKyAgICAgICAgICAgIGlmIChnel9mZXRj aChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg ICAgcmV0dXJuIDA7Cit9CisKKy8qIFJlYWQgbGVuIGJ5dGVzIGludG8gYnVmIGZyb20gZmlsZSwg b3IgbGVzcyB0aGFuIGxlbiB1cCB0byB0aGUgZW5kIG9mIHRoZQorICAgaW5wdXQuICBSZXR1cm4g dGhlIG51bWJlciBvZiBieXRlcyByZWFkLiAgSWYgemVybyBpcyByZXR1cm5lZCwgZWl0aGVyIHRo ZQorICAgZW5kIG9mIGZpbGUgd2FzIHJlYWNoZWQsIG9yIHRoZXJlIHdhcyBhbiBlcnJvci4gIHN0 YXRlLT5lcnIgbXVzdCBiZQorICAgY29uc3VsdGVkIGluIHRoYXQgY2FzZSB0byBkZXRlcm1pbmUg d2hpY2guICovCitsb2NhbCB6X3NpemVfdCBnel9yZWFkKHN0YXRlLCBidWYsIGxlbikKKyAgICBn el9zdGF0ZXAgc3RhdGU7CisgICAgdm9pZHAgYnVmOworICAgIHpfc2l6ZV90IGxlbjsKK3sKKyAg ICB6X3NpemVfdCBnb3Q7CisgICAgdW5zaWduZWQgbjsKKworICAgIC8qIGlmIGxlbiBpcyB6ZXJv LCBhdm9pZCB1bm5lY2Vzc2FyeSBvcGVyYXRpb25zICovCisgICAgaWYgKGxlbiA9PSAwKQorICAg ICAgICByZXR1cm4gMDsKKworICAgIC8qIHByb2Nlc3MgYSBza2lwIHJlcXVlc3QgKi8KKyAgICBp ZiAoc3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAo Z3pfc2tpcChzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgfQorCisgICAgLyogZ2V0IGxlbiBieXRlcyB0byBidWYsIG9yIGxlc3MgdGhhbiBsZW4g aWYgYXQgdGhlIGVuZCAqLworICAgIGdvdCA9IDA7CisgICAgZG8geworICAgICAgICAvKiBzZXQg biB0byB0aGUgbWF4aW11bSBhbW91bnQgb2YgbGVuIHRoYXQgZml0cyBpbiBhbiB1bnNpZ25lZCBp bnQgKi8KKyAgICAgICAgbiA9IC0xOworICAgICAgICBpZiAobiA+IGxlbikKKyAgICAgICAgICAg IG4gPSBsZW47CisKKyAgICAgICAgLyogZmlyc3QganVzdCB0cnkgY29weWluZyBkYXRhIGZyb20g dGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAg ICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlIDwgbikKKyAgICAgICAgICAgICAgICBuID0gc3RhdGUt PnguaGF2ZTsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAg ICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAt PSBuOworICAgICAgICB9CisKKyAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciBlbXB0eSAtLSByZXR1 cm4gaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgKi8KKyAgICAgICAgZWxzZSBpZiAo c3RhdGUtPmVvZiAmJiBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBz dGF0ZS0+cGFzdCA9IDE7ICAgICAgICAvKiB0cmllZCB0byByZWFkIHBhc3QgZW5kICovCisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5lZWQgb3V0cHV0IGRhdGEg LS0gZm9yIHNtYWxsIGxlbiBvciBuZXcgc3RyZWFtIGxvYWQgdXAgb3VyIG91dHB1dAorICAgICAg ICAgICBidWZmZXIgKi8KKyAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBMT09LIHx8IG4g PCAoc3RhdGUtPnNpemUgPDwgMSkpIHsKKyAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwg bG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCisgICAgICAgICAgICBpZiAoZ3pfZmV0 Y2goc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg Y29udGludWU7ICAgICAgIC8qIG5vIHByb2dyZXNzIHlldCAtLSBnbyBiYWNrIHRvIGNvcHkgYWJv dmUgKi8KKyAgICAgICAgICAgIC8qIHRoZSBjb3B5IGFib3ZlIGFzc3VyZXMgdGhhdCB3ZSB3aWxs IGxlYXZlIHdpdGggc3BhY2UgaW4gdGhlCisgICAgICAgICAgICAgICBvdXRwdXQgYnVmZmVyLCBh bGxvd2luZyBhdCBsZWFzdCBvbmUgZ3p1bmdldGMoKSB0byBzdWNjZWVkICovCisgICAgICAgIH0K KworICAgICAgICAvKiBsYXJnZSBsZW4gLS0gcmVhZCBkaXJlY3RseSBpbnRvIHVzZXIgYnVmZmVy ICovCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gQ09QWSkgeyAgICAgIC8qIHJlYWQg ZGlyZWN0bHkgKi8KKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCAodW5zaWduZWQgY2hh ciAqKWJ1ZiwgbiwgJm4pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9CisKKyAgICAgICAgLyogbGFyZ2UgbGVuIC0tIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1 c2VyIGJ1ZmZlciAqLworICAgICAgICBlbHNlIHsgIC8qIHN0YXRlLT5ob3cgPT0gR1pJUCAqLwor ICAgICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfb3V0ID0gbjsKKyAgICAgICAgICAgIHN0YXRl LT5zdHJtLm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CisgICAgICAgICAgICBpZiAo Z3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg ICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7 CisgICAgICAgIH0KKworICAgICAgICAvKiB1cGRhdGUgcHJvZ3Jlc3MgKi8KKyAgICAgICAgbGVu IC09IG47CisgICAgICAgIGJ1ZiA9IChjaGFyICopYnVmICsgbjsKKyAgICAgICAgZ290ICs9IG47 CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOworICAgIH0gd2hpbGUgKGxlbik7CisKKyAgICAv KiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byB1c2VyIGJ1ZmZlciAqLworICAgIHJl dHVybiBnb3Q7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cmVh ZChmaWxlLCBidWYsIGxlbikKKyAgICBnekZpbGUgZmlsZTsKKyAgICB2b2lkcCBidWY7CisgICAg dW5zaWduZWQgbGVuOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRl cm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4g LTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdl J3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBp ZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0g Wl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4g b25lLCBvdGhlcndpc2UgcmV0dXJuCisgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMg YSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCisgICAgaWYgKChpbnQpbGVuIDwgMCkgeworICAg ICAgICBnel9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsICJyZXF1ZXN0IGRvZXMgbm90IGZp dCBpbiBhbiBpbnQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIHJlYWQg bGVuIG9yIGZld2VyIGJ5dGVzIHRvIGJ1ZiAqLworICAgIGxlbiA9IGd6X3JlYWQoc3RhdGUsIGJ1 ZiwgbGVuKTsKKworICAgIC8qIGNoZWNrIGZvciBhbiBlcnJvciAqLworICAgIGlmIChsZW4gPT0g MCAmJiBzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikKKyAg ICAgICAgcmV0dXJuIC0xOworCisgICAgLyogcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVh ZCAodGhpcyBpcyBhc3N1cmVkIHRvIGZpdCBpbiBhbiBpbnQpICovCisgICAgcmV0dXJuIChpbnQp bGVuOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X3NpemVfdCBaRVhQT1JUIGd6ZnJl YWQoYnVmLCBzaXplLCBuaXRlbXMsIGZpbGUpCisgICAgdm9pZHAgYnVmOworICAgIHpfc2l6ZV90 IHNpemU7CisgICAgel9zaXplX3Qgbml0ZW1zOworICAgIGd6RmlsZSBmaWxlOworeworICAgIHpf c2l6ZV90IGxlbjsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwg c3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJl YWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3Rh dGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAm JiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAv KiBjb21wdXRlIGJ5dGVzIHRvIHJlYWQgLS0gZXJyb3Igb24gb3ZlcmZsb3cgKi8KKyAgICBsZW4g PSBuaXRlbXMgKiBzaXplOworICAgIGlmIChzaXplICYmIGxlbiAvIHNpemUgIT0gbml0ZW1zKSB7 CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJPUiwgInJlcXVlc3QgZG9lcyBu b3QgZml0IGluIGEgc2l6ZV90Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8q IHJlYWQgbGVuIG9yIGZld2VyIGJ5dGVzIHRvIGJ1ZiwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZnVs bCBpdGVtcyByZWFkICovCisgICAgcmV0dXJuIGxlbiA/IGd6X3JlYWQoc3RhdGUsIGJ1ZiwgbGVu KSAvIHNpemUgOiAwOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCisjaWZkZWYgWl9QUkVG SVhfU0VUCisjICB1bmRlZiB6X2d6Z2V0YworI2Vsc2UKKyMgIHVuZGVmIGd6Z2V0YworI2VuZGlm CitpbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBpbnQg cmV0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzFdOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKwor ICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAv KiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykg ZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3Rh dGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQorICAgICAgICBy ZXR1cm4gLTE7CisKKyAgICAvKiB0cnkgb3V0cHV0IGJ1ZmZlciAobm8gbmVlZCB0byBjaGVjayBm b3Igc2tpcCByZXF1ZXN0KSAqLworICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgIHN0 YXRlLT54LmhhdmUtLTsKKyAgICAgICAgc3RhdGUtPngucG9zKys7CisgICAgICAgIHJldHVybiAq KHN0YXRlLT54Lm5leHQpKys7CisgICAgfQorCisgICAgLyogbm90aGluZyB0aGVyZSAtLSB0cnkg Z3pfcmVhZCgpICovCisgICAgcmV0ID0gZ3pfcmVhZChzdGF0ZSwgYnVmLCAxKTsKKyAgICByZXR1 cm4gcmV0IDwgMSA/IC0xIDogYnVmWzBdOworfQorCitpbnQgWkVYUE9SVCBnemdldGNfKGZpbGUp CitnekZpbGUgZmlsZTsKK3sKKyAgICByZXR1cm4gZ3pnZXRjKGZpbGUpOworfQorCisvKiAtLSBz ZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQorICAgIGludCBj OworICAgIGd6RmlsZSBmaWxlOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdl dCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICBy ZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0 aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8K KyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAh PSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQorICAgICAgICByZXR1cm4gLTE7 CisKKyAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVr KSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3NraXAoc3RhdGUs IHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAg ICAvKiBjYW4ndCBwdXNoIEVPRiAqLworICAgIGlmIChjIDwgMCkKKyAgICAgICAgcmV0dXJuIC0x OworCisgICAgLyogaWYgb3V0cHV0IGJ1ZmZlciBlbXB0eSwgcHV0IGJ5dGUgYXQgZW5kIChhbGxv d3MgbW9yZSBwdXNoaW5nKSAqLworICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsKKyAgICAg ICAgc3RhdGUtPnguaGF2ZSA9IDE7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0 ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKKyAgICAgICAgc3RhdGUtPngubmV4dFswXSA9ICh1 bnNpZ25lZCBjaGFyKWM7CisgICAgICAgIHN0YXRlLT54LnBvcy0tOworICAgICAgICBzdGF0ZS0+ cGFzdCA9IDA7CisgICAgICAgIHJldHVybiBjOworICAgIH0KKworICAgIC8qIGlmIG5vIHJvb20s IGdpdmUgdXAgKG11c3QgaGF2ZSBhbHJlYWR5IGRvbmUgYSBnenVuZ2V0YygpKSAqLworICAgIGlm IChzdGF0ZS0+eC5oYXZlID09IChzdGF0ZS0+c2l6ZSA8PCAxKSkgeworICAgICAgICBnel9lcnJv cihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7 CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBzbGlkZSBvdXRwdXQgZGF0YSBp ZiBuZWVkZWQgYW5kIGluc2VydCBieXRlIGJlZm9yZSBleGlzdGluZyBkYXRhICovCisgICAgaWYg KHN0YXRlLT54Lm5leHQgPT0gc3RhdGUtPm91dCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpz cmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAq ZGVzdCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSk7CisgICAgICAgIHdoaWxlIChz cmMgPiBzdGF0ZS0+b3V0KQorICAgICAgICAgICAgKi0tZGVzdCA9ICotLXNyYzsKKyAgICAgICAg c3RhdGUtPngubmV4dCA9IGRlc3Q7CisgICAgfQorICAgIHN0YXRlLT54LmhhdmUrKzsKKyAgICBz dGF0ZS0+eC5uZXh0LS07CisgICAgc3RhdGUtPngubmV4dFswXSA9ICh1bnNpZ25lZCBjaGFyKWM7 CisgICAgc3RhdGUtPngucG9zLS07CisgICAgc3RhdGUtPnBhc3QgPSAwOworICAgIHJldHVybiBj OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitjaGFyICogWkVYUE9SVCBnemdldHMoZmls ZSwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgY2hhciAqYnVmOworICAgIGludCBs ZW47Cit7CisgICAgdW5zaWduZWQgbGVmdCwgbjsKKyAgICBjaGFyICpzdHI7CisgICAgdW5zaWdu ZWQgY2hhciAqZW9sOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGNoZWNrIHBhcmFt ZXRlcnMgYW5kIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxM IHx8IGJ1ZiA9PSBOVUxMIHx8IGxlbiA8IDEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0 YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5n IGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5t b2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBwcm9j ZXNzIGEgc2tpcCByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0 YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3NraXAoc3RhdGUsIHN0YXRlLT5za2lwKSA9 PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIGNvcHkgb3V0 cHV0IGJ5dGVzIHVwIHRvIG5ldyBsaW5lIG9yIGxlbiAtIDEsIHdoaWNoZXZlciBjb21lcyBmaXJz dCAtLQorICAgICAgIGFwcGVuZCBhIHRlcm1pbmF0aW5nIHplcm8gdG8gdGhlIHN0cmluZyAod2Ug ZG9uJ3QgY2hlY2sgZm9yIGEgemVybyBpbgorICAgICAgIHRoZSBjb250ZW50cywgbGV0IHRoZSB1 c2VyIHdvcnJ5IGFib3V0IHRoYXQpICovCisgICAgc3RyID0gYnVmOworICAgIGxlZnQgPSAodW5z aWduZWQpbGVuIC0gMTsKKyAgICBpZiAobGVmdCkgZG8geworICAgICAgICAvKiBhc3N1cmUgdGhh dCBzb21ldGhpbmcgaXMgaW4gdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgaWYgKHN0YXRl LT54LmhhdmUgPT0gMCAmJiBnel9mZXRjaChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1 cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54 LmhhdmUgPT0gMCkgeyAgICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgICAgc3RhdGUt PnBhc3QgPSAxOyAgICAgICAgICAgIC8qIHJlYWQgcGFzdCBlbmQgKi8KKyAgICAgICAgICAgIGJy ZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gd2hhdCB3ZSBoYXZlICovCisgICAg ICAgIH0KKworICAgICAgICAvKiBsb29rIGZvciBlbmQtb2YtbGluZSBpbiBjdXJyZW50IG91dHB1 dCBidWZmZXIgKi8KKyAgICAgICAgbiA9IHN0YXRlLT54LmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0 YXRlLT54LmhhdmU7CisgICAgICAgIGVvbCA9ICh1bnNpZ25lZCBjaGFyICopbWVtY2hyKHN0YXRl LT54Lm5leHQsICdcbicsIG4pOworICAgICAgICBpZiAoZW9sICE9IE5VTEwpCisgICAgICAgICAg ICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+eC5uZXh0KSArIDE7CisKKyAgICAgICAgLyog Y29weSB0aHJvdWdoIGVuZC1vZi1saW5lLCBvciByZW1haW5kZXIgaWYgbm90IGZvdW5kICovCisg ICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICBzdGF0ZS0+eC5o YXZlIC09IG47CisgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngu cG9zICs9IG47CisgICAgICAgIGxlZnQgLT0gbjsKKyAgICAgICAgYnVmICs9IG47CisgICAgfSB3 aGlsZSAobGVmdCAmJiBlb2wgPT0gTlVMTCk7CisKKyAgICAvKiByZXR1cm4gdGVybWluYXRlZCBz dHJpbmcsIG9yIGlmIG5vdGhpbmcsIGVuZCBvZiBmaWxlICovCisgICAgaWYgKGJ1ZiA9PSBzdHIp CisgICAgICAgIHJldHVybiBOVUxMOworICAgIGJ1ZlswXSA9IDA7CisgICAgcmV0dXJuIHN0cjsK K30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pkaXJlY3QoZmlsZSkK KyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQg aW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0 dXJuIDA7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBpZiB0aGUgc3Rh dGUgaXMgbm90IGtub3duLCBidXQgd2UgY2FuIGZpbmQgb3V0LCB0aGVuIGRvIHNvICh0aGlzIGlz CisgICAgICAgbWFpbmx5IGZvciByaWdodCBhZnRlciBhIGd6b3BlbigpIG9yIGd6ZG9wZW4oKSkg Ki8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IExPT0sg JiYgc3RhdGUtPnguaGF2ZSA9PSAwKQorICAgICAgICAodm9pZClnel9sb29rKHN0YXRlKTsKKwor ICAgIC8qIHJldHVybiAxIGlmIHRyYW5zcGFyZW50LCAwIGlmIHByb2Nlc3NpbmcgYSBnemlwIHN0 cmVhbSAqLworICAgIHJldHVybiBzdGF0ZS0+ZGlyZWN0OworfQorCisvKiAtLSBzZWUgemxpYi5o IC0tICovCitpbnQgWkVYUE9SVCBnemNsb3NlX3IoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sK KyAgICBpbnQgcmV0LCBlcnI7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGlu dGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVy biBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8q IGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9S RUFEKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisKKyAgICAvKiBmcmVlIG1lbW9y eSBhbmQgY2xvc2UgZmlsZSAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpbmZs YXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKKyAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAg ICAgZnJlZShzdGF0ZS0+aW4pOworICAgIH0KKyAgICBlcnIgPSBzdGF0ZS0+ZXJyID09IFpfQlVG X0VSUk9SID8gWl9CVUZfRVJST1IgOiBaX09LOworICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBO VUxMKTsKKyAgICBmcmVlKHN0YXRlLT5wYXRoKTsKKyAgICByZXQgPSBjbG9zZShzdGF0ZS0+ZmQp OworICAgIGZyZWUoc3RhdGUpOworICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogZXJyOworfQpk aWZmIC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9n endyaXRlLmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysr IGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9nendyaXRlLmMJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIw IC0wNDAwCkBAIC0wLDAgKzEsNjY1IEBACisvKiBnendyaXRlLmMgLS0gemxpYiBmdW5jdGlvbnMg Zm9yIHdyaXRpbmcgZ3ppcCBmaWxlcworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgTWFyayBB ZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5 cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJnemd1dHMuaCIKKworLyog TG9jYWwgZnVuY3Rpb25zICovCitsb2NhbCBpbnQgZ3pfaW5pdCBPRigoZ3pfc3RhdGVwKSk7Cits b2NhbCBpbnQgZ3pfY29tcCBPRigoZ3pfc3RhdGVwLCBpbnQpKTsKK2xvY2FsIGludCBnel96ZXJv IE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRfdCkpOworbG9jYWwgel9zaXplX3QgZ3pfd3JpdGUgT0Yo KGd6X3N0YXRlcCwgdm9pZHBjLCB6X3NpemVfdCkpOworCisvKiBJbml0aWFsaXplIHN0YXRlIGZv ciB3cml0aW5nIGEgZ3ppcCBmaWxlLiAgTWFyayBpbml0aWFsaXphdGlvbiBieSBzZXR0aW5nCisg ICBzdGF0ZS0+c2l6ZSB0byBub24temVyby4gIFJldHVybiAtMSBvbiBhIG1lbW9yeSBhbGxvY2F0 aW9uIGZhaWx1cmUsIG9yIDAgb24KKyAgIHN1Y2Nlc3MuICovCitsb2NhbCBpbnQgZ3pfaW5pdChz dGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgaW50IHJldDsKKyAgICB6X3N0cmVh bXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogYWxsb2NhdGUgaW5wdXQgYnVmZmVy IChkb3VibGUgc2l6ZSBmb3IgZ3pwcmludGYpICovCisgICAgc3RhdGUtPmluID0gKHVuc2lnbmVk IGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CisgICAgaWYgKHN0YXRlLT5pbiA9PSBO VUxMKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1v cnkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIG9ubHkgbmVlZCBvdXRw dXQgYnVmZmVyIGFuZCBkZWZsYXRlIHN0YXRlIGlmIGNvbXByZXNzaW5nICovCisgICAgaWYgKCFz dGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIC8qIGFsbG9jYXRlIG91dHB1dCBidWZmZXIgKi8KKyAg ICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsK KyAgICAgICAgaWYgKHN0YXRlLT5vdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZShzdGF0 ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9m IG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAg LyogYWxsb2NhdGUgZGVmbGF0ZSBtZW1vcnksIHNldCB1cCBmb3IgZ3ppcCBjb21wcmVzc2lvbiAq LworICAgICAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPnpmcmVlID0g Wl9OVUxMOworICAgICAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7CisgICAgICAgIHJldCA9IGRl ZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBNQVhfV0JJVFMgKyAxNiwgREVGX01FTV9MRVZFTCwgc3RhdGUtPnN0cmF0 ZWd5KTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRl LT5vdXQpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJy b3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBOVUxMOworICAgIH0K KworICAgIC8qIG1hcmsgc3RhdGUgYXMgaW5pdGlhbGl6ZWQgKi8KKyAgICBzdGF0ZS0+c2l6ZSA9 IHN0YXRlLT53YW50OworCisgICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgaWYgY29tcHJl c3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgc3RybS0+YXZhaWxf b3V0ID0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsK KyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIH0KKyAgICByZXR1 cm4gMDsKK30KKworLyogQ29tcHJlc3Mgd2hhdGV2ZXIgaXMgYXQgYXZhaWxfaW4gYW5kIG5leHRf aW4gYW5kIHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZS4KKyAgIFJldHVybiAtMSBpZiB0aGVyZSBp cyBhbiBlcnJvciB3cml0aW5nIHRvIHRoZSBvdXRwdXQgZmlsZSBvciBpZiBnel9pbml0KCkKKyAg IGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSwgb3RoZXJ3aXNlIDAuICBmbHVzaCBpcyBhc3N1bWVk IHRvIGJlIGEgdmFsaWQKKyAgIGRlZmxhdGUoKSBmbHVzaCB2YWx1ZS4gIElmIGZsdXNoIGlzIFpf RklOSVNILCB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMKKyAgIHJlc2V0IHRvIHN0YXJ0IGEg bmV3IGd6aXAgc3RyZWFtLiAgSWYgZ3otPmRpcmVjdCBpcyB0cnVlLCB0aGVuIHNpbXBseSB3cml0 ZQorICAgdG8gdGhlIG91dHB1dCBmaWxlIHdpdGhvdXQgY29tcHJlc3NpbmcsIGFuZCBpZ25vcmUg Zmx1c2guICovCitsb2NhbCBpbnQgZ3pfY29tcChzdGF0ZSwgZmx1c2gpCisgICAgZ3pfc3RhdGVw IHN0YXRlOworICAgIGludCBmbHVzaDsKK3sKKyAgICBpbnQgcmV0LCB3cml0OworICAgIHVuc2ln bmVkIGhhdmUsIHB1dCwgbWF4ID0gKCh1bnNpZ25lZCktMSA+PiAyKSArIDE7CisgICAgel9zdHJl YW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBpZiB0 aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0g MCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyog d3JpdGUgZGlyZWN0bHkgaWYgcmVxdWVzdGVkICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsK KyAgICAgICAgd2hpbGUgKHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgICAgICBwdXQgPSBzdHJt LT5hdmFpbF9pbiA+IG1heCA/IG1heCA6IHN0cm0tPmF2YWlsX2luOworICAgICAgICAgICAgd3Jp dCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RybS0+bmV4dF9pbiwgcHV0KTsKKyAgICAgICAgICAgIGlm ICh3cml0IDwgMCkgeworICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6 c3RyZXJyb3IoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gLT0gKHVuc2lnbmVkKXdyaXQ7CisgICAgICAgICAg ICBzdHJtLT5uZXh0X2luICs9IHdyaXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgfQorCisgICAgLyogcnVuIGRlZmxhdGUoKSBvbiBwcm92aWRlZCBpbnB1dCB1bnRpbCBpdCBw cm9kdWNlcyBubyBtb3JlIG91dHB1dCAqLworICAgIHJldCA9IFpfT0s7CisgICAgZG8geworICAg ICAgICAvKiB3cml0ZSBvdXQgY3VycmVudCBidWZmZXIgY29udGVudHMgaWYgZnVsbCwgb3IgaWYg Zmx1c2hpbmcsIGJ1dCBpZgorICAgICAgICAgICBkb2luZyBaX0ZJTklTSCB0aGVuIGRvbid0IHdy aXRlIHVudGlsIHdlIGdldCB0byBaX1NUUkVBTV9FTkQgKi8KKyAgICAgICAgaWYgKHN0cm0tPmF2 YWlsX291dCA9PSAwIHx8IChmbHVzaCAhPSBaX05PX0ZMVVNIICYmCisgICAgICAgICAgICAoZmx1 c2ggIT0gWl9GSU5JU0ggfHwgcmV0ID09IFpfU1RSRUFNX0VORCkpKSB7CisgICAgICAgICAgICB3 aGlsZSAoc3RybS0+bmV4dF9vdXQgPiBzdGF0ZS0+eC5uZXh0KSB7CisgICAgICAgICAgICAgICAg cHV0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5uZXh0ID4gKGludCltYXggPyBtYXggOgor ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+ eC5uZXh0KTsKKyAgICAgICAgICAgICAgICB3cml0ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+ eC5uZXh0LCBwdXQpOworICAgICAgICAgICAgICAgIGlmICh3cml0IDwgMCkgeworICAgICAgICAg ICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOworICAgICAg ICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHN0YXRlLT54Lm5leHQgKz0gd3JpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChzdHJtLT5hdmFpbF9vdXQgPT0gMCkgeworICAgICAgICAgICAgICAgIHN0cm0tPmF2YWlsX291 dCA9IHN0YXRlLT5zaXplOworICAgICAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUt Pm91dDsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIGNvbXByZXNzICovCisgICAgICAgIGhh dmUgPSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgICAgIHJldCA9IGRlZmxhdGUoc3RybSwgZmx1c2gp OworICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VSUk9SKSB7CisgICAgICAgICAgICBnel9l cnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgImludGVy bmFsIGVycm9yOiBkZWZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CisgICAgICAgICAgICByZXR1cm4g LTE7CisgICAgICAgIH0KKyAgICAgICAgaGF2ZSAtPSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgfSB3 aGlsZSAoaGF2ZSk7CisKKyAgICAvKiBpZiB0aGF0IGNvbXBsZXRlZCBhIGRlZmxhdGUgc3RyZWFt LCBhbGxvdyBhbm90aGVyIHRvIHN0YXJ0ICovCisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKQor ICAgICAgICBkZWZsYXRlUmVzZXQoc3RybSk7CisKKyAgICAvKiBhbGwgZG9uZSwgbm8gZXJyb3Jz ICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIENvbXByZXNzIGxlbiB6ZXJvcyB0byBvdXRwdXQu ICBSZXR1cm4gLTEgb24gYSB3cml0ZSBlcnJvciBvciBtZW1vcnkKKyAgIGFsbG9jYXRpb24gZmFp bHVyZSBieSBnel9jb21wKCksIG9yIDAgb24gc3VjY2Vzcy4gKi8KK2xvY2FsIGludCBnel96ZXJv KHN0YXRlLCBsZW4pCisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpfb2ZmNjRfdCBsZW47Cit7 CisgICAgaW50IGZpcnN0OworICAgIHVuc2lnbmVkIG47CisgICAgel9zdHJlYW1wIHN0cm0gPSAm KHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGNvbnN1bWUgd2hhdGV2ZXIncyBsZWZ0IGluIHRoZSBp bnB1dCBidWZmZXIgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgZ3pfY29tcChzdGF0ZSwg Wl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNvbXByZXNz IGxlbiB6ZXJvcyAobGVuIGd1YXJhbnRlZWQgPiAwKSAqLworICAgIGZpcnN0ID0gMTsKKyAgICB3 aGlsZSAobGVuKSB7CisgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnNpemUpIHx8ICh6X29mZjY0 X3Qpc3RhdGUtPnNpemUgPiBsZW4gPworICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRl LT5zaXplOworICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGF0ZS0+ aW4sIDAsIG4pOworICAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICB9CisgICAgICAgIHN0 cm0tPmF2YWlsX2luID0gbjsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAg ICAgICAgc3RhdGUtPngucG9zICs9IG47CisgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05P X0ZMVVNIKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgbGVuIC09IG47 CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBXcml0ZSBsZW4gYnl0ZXMgZnJvbSBidWYg dG8gZmlsZS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uICBJZgorICAgdGhl IHJldHVybmVkIHZhbHVlIGlzIGxlc3MgdGhhbiBsZW4sIHRoZW4gdGhlcmUgd2FzIGFuIGVycm9y LiAqLworbG9jYWwgel9zaXplX3QgZ3pfd3JpdGUoc3RhdGUsIGJ1ZiwgbGVuKQorICAgIGd6X3N0 YXRlcCBzdGF0ZTsKKyAgICB2b2lkcGMgYnVmOworICAgIHpfc2l6ZV90IGxlbjsKK3sKKyAgICB6 X3NpemVfdCBwdXQgPSBsZW47CisKKyAgICAvKiBpZiBsZW4gaXMgemVybywgYXZvaWQgdW5uZWNl c3Nhcnkgb3BlcmF0aW9ucyAqLworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7 CisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aHJv dWdoICovCisgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEp CisgICAgICAgIHJldHVybiAwOworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLwor ICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAg IGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1 cm4gMDsKKyAgICB9CisKKyAgICAvKiBmb3Igc21hbGwgbGVuLCBjb3B5IHRvIGlucHV0IGJ1ZmZl ciwgb3RoZXJ3aXNlIGNvbXByZXNzIGRpcmVjdGx5ICovCisgICAgaWYgKGxlbiA8IHN0YXRlLT5z aXplKSB7CisgICAgICAgIC8qIGNvcHkgdG8gaW5wdXQgYnVmZmVyLCBjb21wcmVzcyB3aGVuIGZ1 bGwgKi8KKyAgICAgICAgZG8geworICAgICAgICAgICAgdW5zaWduZWQgaGF2ZSwgY29weTsKKwor ICAgICAgICAgICAgaWYgKHN0YXRlLT5zdHJtLmF2YWlsX2luID09IDApCisgICAgICAgICAgICAg ICAgc3RhdGUtPnN0cm0ubmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICAgICAgICAgIGhhdmUgPSAo dW5zaWduZWQpKChzdGF0ZS0+c3RybS5uZXh0X2luICsgc3RhdGUtPnN0cm0uYXZhaWxfaW4pIC0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5pbik7CisgICAgICAgICAgICBj b3B5ID0gc3RhdGUtPnNpemUgLSBoYXZlOworICAgICAgICAgICAgaWYgKGNvcHkgPiBsZW4pCisg ICAgICAgICAgICAgICAgY29weSA9IGxlbjsKKyAgICAgICAgICAgIG1lbWNweShzdGF0ZS0+aW4g KyBoYXZlLCBidWYsIGNvcHkpOworICAgICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gKz0g Y29weTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBjb3B5OworICAgICAgICAgICAgYnVm ID0gKGNvbnN0IGNoYXIgKilidWYgKyBjb3B5OworICAgICAgICAgICAgbGVuIC09IGNvcHk7Cisg ICAgICAgICAgICBpZiAobGVuICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQor ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IHdoaWxlIChsZW4pOworICAgIH0K KyAgICBlbHNlIHsKKyAgICAgICAgLyogY29uc3VtZSB3aGF0ZXZlcidzIGxlZnQgaW4gdGhlIGlu cHV0IGJ1ZmZlciAqLworICAgICAgICBpZiAoc3RhdGUtPnN0cm0uYXZhaWxfaW4gJiYgZ3pfY29t cChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAg ICAgICAvKiBkaXJlY3RseSBjb21wcmVzcyB1c2VyIGJ1ZmZlciB0byBmaWxlICovCisgICAgICAg IHN0YXRlLT5zdHJtLm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKWJ1ZjsKKyAgICAgICAgZG8g eworICAgICAgICAgICAgdW5zaWduZWQgbiA9ICh1bnNpZ25lZCktMTsKKyAgICAgICAgICAgIGlm IChuID4gbGVuKQorICAgICAgICAgICAgICAgIG4gPSBsZW47CisgICAgICAgICAgICBzdGF0ZS0+ c3RybS5hdmFpbF9pbiA9IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKKyAgICAg ICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGxlbiAtPSBuOworICAgICAgICB9IHdoaWxlIChs ZW4pOworICAgIH0KKworICAgIC8qIGlucHV0IHdhcyBhbGwgYnVmZmVyZWQgb3IgY29tcHJlc3Nl ZCAqLworICAgIHJldHVybiBwdXQ7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBa RVhQT1JUIGd6d3JpdGUoZmlsZSwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgdm9p ZHBjIGJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisg ICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisg ICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyog Y2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAg ICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAg ICAgICByZXR1cm4gMDsKKworICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBz dXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAgIHdpdGggYW4gZXJy b3IgKHRoaXMgYXZvaWRzIGEgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLworICAgIGlmICgoaW50 KWxlbiA8IDApIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVl c3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgICAvKiB3cml0ZSBsZW4gYnl0ZXMgZnJvbSBidWYgKHRoZSByZXR1cm4gdmFsdWUg d2lsbCBmaXQgaW4gYW4gaW50KSAqLworICAgIHJldHVybiAoaW50KWd6X3dyaXRlKHN0YXRlLCBi dWYsIGxlbik7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK3pfc2l6ZV90IFpFWFBPUlQg Z3pmd3JpdGUoYnVmLCBzaXplLCBuaXRlbXMsIGZpbGUpCisgICAgdm9pZHBjIGJ1ZjsKKyAgICB6 X3NpemVfdCBzaXplOworICAgIHpfc2l6ZV90IG5pdGVtczsKKyAgICBnekZpbGUgZmlsZTsKK3sK KyAgICB6X3NpemVfdCBsZW47CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGlu dGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVy biAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3 ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUt Pm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4g MDsKKworICAgIC8qIGNvbXB1dGUgYnl0ZXMgdG8gcmVhZCAtLSBlcnJvciBvbiBvdmVyZmxvdyAq LworICAgIGxlbiA9IG5pdGVtcyAqIHNpemU7CisgICAgaWYgKHNpemUgJiYgbGVuIC8gc2l6ZSAh PSBuaXRlbXMpIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLCAicmVx dWVzdCBkb2VzIG5vdCBmaXQgaW4gYSBzaXplX3QiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgICAgLyogd3JpdGUgbGVuIGJ5dGVzIHRvIGJ1ZiwgcmV0dXJuIHRoZSBudW1iZXIgb2Yg ZnVsbCBpdGVtcyB3cml0dGVuICovCisgICAgcmV0dXJuIGxlbiA/IGd6X3dyaXRlKHN0YXRlLCBi dWYsIGxlbikgLyBzaXplIDogMDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpF WFBPUlQgZ3pwdXRjKGZpbGUsIGMpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgaW50IGM7Cit7Cisg ICAgdW5zaWduZWQgaGF2ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxXTsKKyAgICBnel9zdGF0 ZXAgc3RhdGU7CisgICAgel9zdHJlYW1wIHN0cm07CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3Ry dWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAg IHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKwor ICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9y ICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9P SykKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAq LworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAg ICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogdHJ5IHdyaXRpbmcgdG8gaW5wdXQgYnVmZmVyIGZv ciBzcGVlZCAoc3RhdGUtPnNpemUgPT0gMCBpZiBidWZmZXIgbm90CisgICAgICAgaW5pdGlhbGl6 ZWQpICovCisgICAgaWYgKHN0YXRlLT5zaXplKSB7CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9p biA9PSAwKQorICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICAgICAg aGF2ZSA9ICh1bnNpZ25lZCkoKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbikgLSBzdGF0 ZS0+aW4pOworICAgICAgICBpZiAoaGF2ZSA8IHN0YXRlLT5zaXplKSB7CisgICAgICAgICAgICBz dGF0ZS0+aW5baGF2ZV0gPSAodW5zaWduZWQgY2hhciljOworICAgICAgICAgICAgc3RybS0+YXZh aWxfaW4rKzsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcysrOworICAgICAgICAgICAgcmV0dXJu IGMgJiAweGZmOworICAgICAgICB9CisgICAgfQorCisgICAgLyogbm8gcm9vbSBpbiBidWZmZXIg b3Igbm90IGluaXRpYWxpemVkLCB1c2UgZ3pfd3JpdGUoKSAqLworICAgIGJ1ZlswXSA9ICh1bnNp Z25lZCBjaGFyKWM7CisgICAgaWYgKGd6X3dyaXRlKHN0YXRlLCBidWYsIDEpICE9IDEpCisgICAg ICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gYyAmIDB4ZmY7Cit9CisKKy8qIC0tIHNlZSB6bGli LmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cHV0cyhmaWxlLCBzdHIpCisgICAgZ3pGaWxlIGZpbGU7 CisgICAgY29uc3QgY2hhciAqc3RyOworeworICAgIGludCByZXQ7CisgICAgel9zaXplX3QgbGVu OworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUg Ki8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUg PSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5k IHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklU RSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHdy aXRlIHN0cmluZyAqLworICAgIGxlbiA9IHN0cmxlbihzdHIpOworICAgIHJldCA9IGd6X3dyaXRl KHN0YXRlLCBzdHIsIGxlbik7CisgICAgcmV0dXJuIHJldCA9PSAwICYmIGxlbiAhPSAwID8gLTEg OiByZXQ7Cit9CisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19I KQorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVY UE9SVFZBIGd6dnByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0 IHZhKQoreworICAgIGludCBsZW47CisgICAgdW5zaWduZWQgbGVmdDsKKyAgICBjaGFyICpuZXh0 OworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X3N0cmVhbXAgc3RybTsKKworICAgIC8qIGdl dCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICBy ZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAg c3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5n IGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pf V1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJS T1I7CisKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBzb21lIGJ1ZmZlciBzcGFjZSAqLworICAg IGlmIChzdGF0ZS0+c2l6ZSA9PSAwICYmIGd6X2luaXQoc3RhdGUpID09IC0xKQorICAgICAgICBy ZXR1cm4gc3RhdGUtPmVycjsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAg ICBpZiAoc3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBp ZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJu IHN0YXRlLT5lcnI7CisgICAgfQorCisgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlu cHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gLS0gdGhlIGlucHV0CisgICAgICAgYnVmZmVy IGlzIGRvdWJsZS1zaXplZCBqdXN0IGZvciB0aGlzIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBndWFy YW50ZWVkIHRvCisgICAgICAgYmUgc3RhdGUtPnNpemUgYnl0ZXMgYXZhaWxhYmxlIGFmdGVyIHRo ZSBjdXJyZW50IGNvbnRlbnRzICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCisgICAg ICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgbmV4dCA9IChjaGFyICopKHN0YXRl LT5pbiArIChzdHJtLT5uZXh0X2luIC0gc3RhdGUtPmluKSArIHN0cm0tPmF2YWlsX2luKTsKKyAg ICBuZXh0W3N0YXRlLT5zaXplIC0gMV0gPSAwOworI2lmZGVmIE5PX3ZzbnByaW50ZgorIyAgaWZk ZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKKyAgICAodm9pZCl2c3ByaW50ZihuZXh0LCBmb3JtYXQsIHZh KTsKKyAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHN0YXRlLT5zaXplOyBsZW4rKykKKyAgICAgICAg aWYgKG5leHRbbGVuXSA9PSAwKSBicmVhazsKKyMgIGVsc2UKKyAgICBsZW4gPSB2c3ByaW50Zihu ZXh0LCBmb3JtYXQsIHZhKTsKKyMgIGVuZGlmCisjZWxzZQorIyAgaWZkZWYgSEFTX3ZzbnByaW50 Zl92b2lkCisgICAgKHZvaWQpdnNucHJpbnRmKG5leHQsIHN0YXRlLT5zaXplLCBmb3JtYXQsIHZh KTsKKyAgICBsZW4gPSBzdHJsZW4obmV4dCk7CisjICBlbHNlCisgICAgbGVuID0gdnNucHJpbnRm KG5leHQsIHN0YXRlLT5zaXplLCBmb3JtYXQsIHZhKTsKKyMgIGVuZGlmCisjZW5kaWYKKworICAg IC8qIGNoZWNrIHRoYXQgcHJpbnRmKCkgcmVzdWx0cyBmaXQgaW4gYnVmZmVyICovCisgICAgaWYg KGxlbiA9PSAwIHx8ICh1bnNpZ25lZClsZW4gPj0gc3RhdGUtPnNpemUgfHwgbmV4dFtzdGF0ZS0+ c2l6ZSAtIDFdICE9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogdXBkYXRlIGJ1ZmZl ciBhbmQgcG9zaXRpb24sIGNvbXByZXNzIGZpcnN0IGhhbGYgaWYgcGFzdCB0aGF0ICovCisgICAg c3RybS0+YXZhaWxfaW4gKz0gKHVuc2lnbmVkKWxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVu OworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA+PSBzdGF0ZS0+c2l6ZSkgeworICAgICAgICBsZWZ0 ID0gc3RybS0+YXZhaWxfaW4gLSBzdGF0ZS0+c2l6ZTsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4g PSBzdGF0ZS0+c2l6ZTsKKyAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09 IC0xKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnI7CisgICAgICAgIG1lbWNweShzdGF0 ZS0+aW4sIHN0YXRlLT5pbiArIHN0YXRlLT5zaXplLCBsZWZ0KTsKKyAgICAgICAgc3RybS0+bmV4 dF9pbiA9IHN0YXRlLT5pbjsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBsZWZ0OworICAgIH0K KyAgICByZXR1cm4gbGVuOworfQorCitpbnQgWkVYUE9SVFZBIGd6cHJpbnRmKGd6RmlsZSBmaWxl LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGludCBy ZXQ7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICByZXQgPSBnenZwcmludGYoZmls ZSwgZm9ybWF0LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKKyAgICByZXR1cm4gcmV0OworfQorCisj ZWxzZSAvKiAhU1REQyAmJiAhWl9IQVZFX1NUREFSR19IICovCisKKy8qIC0tIHNlZSB6bGliLmgg LS0gKi8KK2ludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywg YTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAorICAgICAgICAgICAgICAgICAgICAgICBhMTEs IGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApCisgICAgZ3pGaWxl IGZpbGU7CisgICAgY29uc3QgY2hhciAqZm9ybWF0OworICAgIGludCBhMSwgYTIsIGEzLCBhNCwg YTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCisgICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1 LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMDsKK3sKKyAgICB1bnNpZ25lZCBsZW4sIGxlZnQ7Cisg ICAgY2hhciAqbmV4dDsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgel9zdHJlYW1wIHN0cm07 CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVM TCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKGd6X3N0YXRl cClmaWxlOworICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGNoZWNrIHRoYXQg Y2FuIHJlYWxseSBwYXNzIHBvaW50ZXIgaW4gaW50cyAqLworICAgIGlmIChzaXplb2YoaW50KSAh PSBzaXplb2Yodm9pZCAqKSkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAg LyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8K KyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQor ICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2 ZSBzb21lIGJ1ZmZlciBzcGFjZSAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSA9PSAwICYmIGd6X2lu aXQoc3RhdGUpID09IC0xKQorICAgICAgICByZXR1cm4gc3RhdGUtPmVycm9yOworCisgICAgLyog Y2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAg ICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tp cCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycm9yOworICAgIH0KKworICAg IC8qIGRvIHRoZSBwcmludGYoKSBpbnRvIHRoZSBpbnB1dCBidWZmZXIsIHB1dCBsZW5ndGggaW4g bGVuIC0tIHRoZSBpbnB1dAorICAgICAgIGJ1ZmZlciBpcyBkb3VibGUtc2l6ZWQganVzdCBmb3Ig dGhpcyBmdW5jdGlvbiwgc28gdGhlcmUgaXMgZ3VhcmFudGVlZCB0bworICAgICAgIGJlIHN0YXRl LT5zaXplIGJ5dGVzIGF2YWlsYWJsZSBhZnRlciB0aGUgY3VycmVudCBjb250ZW50cyAqLworICAg IGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUt PmluOworICAgIG5leHQgPSAoY2hhciAqKShzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4p OworICAgIG5leHRbc3RhdGUtPnNpemUgLSAxXSA9IDA7CisjaWZkZWYgTk9fc25wcmludGYKKyMg IGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKKyAgICBzcHJpbnRmKG5leHQsIGZvcm1hdCwgYTEsIGEy LCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLCBhMTEsIGExMiwKKyAgICAgICAgICAg IGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyAgICBmb3IgKGxlbiA9 IDA7IGxlbiA8IHNpemU7IGxlbisrKQorICAgICAgICBpZiAobmV4dFtsZW5dID09IDApCisgICAg ICAgICAgICBicmVhazsKKyMgIGVsc2UKKyAgICBsZW4gPSBzcHJpbnRmKG5leHQsIGZvcm1hdCwg YTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLCBhMTEsCisgICAgICAgICAg ICAgICAgICBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyMg IGVuZGlmCisjZWxzZQorIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKKyAgICBzbnByaW50Zihu ZXh0LCBzdGF0ZS0+c2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgs IGE5LAorICAgICAgICAgICAgIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3 LCBhMTgsIGExOSwgYTIwKTsKKyAgICBsZW4gPSBzdHJsZW4obmV4dCk7CisjICBlbHNlCisgICAg bGVuID0gc25wcmludGYobmV4dCwgc3RhdGUtPnNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQs IGE1LCBhNiwgYTcsIGE4LAorICAgICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBh MTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisjICBlbmRpZgorI2VuZGlm CisKKyAgICAvKiBjaGVjayB0aGF0IHByaW50ZigpIHJlc3VsdHMgZml0IGluIGJ1ZmZlciAqLwor ICAgIGlmIChsZW4gPT0gMCB8fCBsZW4gPj0gc3RhdGUtPnNpemUgfHwgbmV4dFtzdGF0ZS0+c2l6 ZSAtIDFdICE9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogdXBkYXRlIGJ1ZmZlciBh bmQgcG9zaXRpb24sIGNvbXByZXNzIGZpcnN0IGhhbGYgaWYgcGFzdCB0aGF0ICovCisgICAgc3Ry bS0+YXZhaWxfaW4gKz0gbGVuOworICAgIHN0YXRlLT54LnBvcyArPSBsZW47CisgICAgaWYgKHN0 cm0tPmF2YWlsX2luID49IHN0YXRlLT5zaXplKSB7CisgICAgICAgIGxlZnQgPSBzdHJtLT5hdmFp bF9pbiAtIHN0YXRlLT5zaXplOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IHN0YXRlLT5zaXpl OworICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAg ICAgICByZXR1cm4gc3RhdGUtPmVycjsKKyAgICAgICAgbWVtY3B5KHN0YXRlLT5pbiwgc3RhdGUt PmluICsgc3RhdGUtPnNpemUsIGxlZnQpOworICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUt PmluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlZnQ7CisgICAgfQorICAgIHJldHVybiAo aW50KWxlbjsKK30KKworI2VuZGlmCisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQ T1JUIGd6Zmx1c2goZmlsZSwgZmx1c2gpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgaW50IGZsdXNo OworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1 cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJS T1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdl J3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+ bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiBa X1NUUkVBTV9FUlJPUjsKKworICAgIC8qIGNoZWNrIGZsdXNoIHBhcmFtZXRlciAqLworICAgIGlm IChmbHVzaCA8IDAgfHwgZmx1c2ggPiBaX0ZJTklTSCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFN X0VSUk9SOworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLworICAgIGlmIChzdGF0 ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel96ZXJv KHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVy cjsKKyAgICB9CisKKyAgICAvKiBjb21wcmVzcyByZW1haW5pbmcgZGF0YSB3aXRoIHJlcXVlc3Rl ZCBmbHVzaCAqLworICAgICh2b2lkKWd6X2NvbXAoc3RhdGUsIGZsdXNoKTsKKyAgICByZXR1cm4g c3RhdGUtPmVycjsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pz ZXRwYXJhbXMoZmlsZSwgbGV2ZWwsIHN0cmF0ZWd5KQorICAgIGd6RmlsZSBmaWxlOworICAgIGlu dCBsZXZlbDsKKyAgICBpbnQgc3RyYXRlZ3k7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAg IHpfc3RyZWFtcCBzdHJtOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAg IGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBz dGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAg ICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAq LworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0sp CisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIGlmIG5vIGNoYW5nZSBp cyByZXF1ZXN0ZWQsIHRoZW4gZG8gbm90aGluZyAqLworICAgIGlmIChsZXZlbCA9PSBzdGF0ZS0+ bGV2ZWwgJiYgc3RyYXRlZ3kgPT0gc3RhdGUtPnN0cmF0ZWd5KQorICAgICAgICByZXR1cm4gWl9P SzsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNl ZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0 ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnI7Cisg ICAgfQorCisgICAgLyogY2hhbmdlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgZm9yIHN1YnNlcXVl bnQgaW5wdXQgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgLyogZmx1c2ggcHJl dmlvdXMgaW5wdXQgd2l0aCBwcmV2aW91cyBwYXJhbWV0ZXJzIGJlZm9yZSBjaGFuZ2luZyAqLwor ICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9CTE9DSykgPT0g LTEpCisgICAgICAgICAgICByZXR1cm4gc3RhdGUtPmVycjsKKyAgICAgICAgZGVmbGF0ZVBhcmFt cyhzdHJtLCBsZXZlbCwgc3RyYXRlZ3kpOworICAgIH0KKyAgICBzdGF0ZS0+bGV2ZWwgPSBsZXZl bDsKKyAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBzdHJhdGVneTsKKyAgICByZXR1cm4gWl9PSzsKK30K KworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pjbG9zZV93KGZpbGUpCisg ICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgaW50IHJldCA9IFpfT0s7CisgICAgZ3pfc3RhdGVwIHN0 YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09 IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChnel9z dGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyAqLworICAgIGlm IChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9S OworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2Vl aykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRl LCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOworICAg IH0KKworICAgIC8qIGZsdXNoLCBmcmVlIG1lbW9yeSwgYW5kIGNsb3NlIGZpbGUgKi8KKyAgICBp ZiAoZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpID09IC0xKQorICAgICAgICByZXQgPSBzdGF0ZS0+ ZXJyOworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoIXN0YXRlLT5kaXJlY3Qp IHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOworICAgICAg ICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHN0YXRlLT5p bik7CisgICAgfQorICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKKyAgICBmcmVlKHN0 YXRlLT5wYXRoKTsKKyAgICBpZiAoY2xvc2Uoc3RhdGUtPmZkKSA9PSAtMSkKKyAgICAgICAgcmV0 ID0gWl9FUlJOTzsKKyAgICBmcmVlKHN0YXRlKTsKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC1y IDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZiYWNr LmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZiYWNrLmMJU3VuIE1hciAwOCAyMjowMDoy MyAyMDIwICswMTAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mYmFjay5jCVN1biBNYXIg MDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmJhY2suYyAtLSBp bmZsYXRlIHVzaW5nIGEgY2FsbC1iYWNrIGludGVyZmFjZQotICogQ29weXJpZ2h0IChDKSAxOTk1 LTIwMDMgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTYgTWFyayBBZGxlcgog ICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQg bm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgIHdpbmRvdyBhbmQg b3V0cHV0IGJ1ZmZlciB0aGF0IGlzIDIqKndpbmRvd0JpdHMgYnl0ZXMuCiAgKi8KIGludCBaRVhQ T1JUIGluZmxhdGVCYWNrSW5pdF8oc3RybSwgd2luZG93Qml0cywgd2luZG93LCB2ZXJzaW9uLCBz dHJlYW1fc2l6ZSkKLXpfc3RyZWFtIEZBUiAqc3RybTsKK3pfc3RyZWFtcCBzdHJtOwogaW50IHdp bmRvd0JpdHM7CiB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OwogY29uc3QgY2hhciAqdmVyc2lv bjsKQEAgLTQyLDE5ICs0MiwyOSBAQAogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAg ICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB3ZSByZXR1 cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsK KyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAg ICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZv aWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5j KTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9m dW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNl bHNlCisgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1 Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilaQUxMT0Moc3RybSwgMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRl KSk7CiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIFRy YWNldigoc3RkZXJyLCAiaW5mbGF0ZTogYWxsb2NhdGVkXG4iKSk7Ci0gICAgc3RybS0+c3RhdGUg PSAodm9pZHBmKXN0YXRlOwotICAgIHN0YXRlLT53Yml0cyA9IHdpbmRvd0JpdHM7CisgICAgc3Ry bS0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKXN0YXRlOworICAgIHN0YXRl LT5kbWF4ID0gMzI3NjhVOworICAgIHN0YXRlLT53Yml0cyA9ICh1SW50KXdpbmRvd0JpdHM7CiAg ICAgc3RhdGUtPndzaXplID0gMVUgPDwgd2luZG93Qml0czsKICAgICBzdGF0ZS0+d2luZG93ID0g d2luZG93OwotICAgIHN0YXRlLT53cml0ZSA9IDA7CisgICAgc3RhdGUtPnduZXh0ID0gMDsKICAg ICBzdGF0ZS0+d2hhdmUgPSAwOwogICAgIHJldHVybiBaX09LOwogfQpAQCAtMjM4LDIxICsyNDgs MjEgQEAKICAgIGFyZSBub3QgY29ycmVjdCwgaS5lLiBzdHJtIGlzIFpfTlVMTCBvciB0aGUgc3Rh dGUgd2FzIG5vdCBpbml0aWFsaXplZC4KICAqLwogaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2soc3Ry bSwgaW4sIGluX2Rlc2MsIG91dCwgb3V0X2Rlc2MpCi16X3N0cmVhbSBGQVIgKnN0cm07Cit6X3N0 cmVhbXAgc3RybTsKIGluX2Z1bmMgaW47CiB2b2lkIEZBUiAqaW5fZGVzYzsKIG91dF9mdW5jIG91 dDsKIHZvaWQgRkFSICpvdXRfZGVzYzsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIg KnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICov CisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAq LwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwogICAg IHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1 dCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCiAg ICAgdW5zaWduZWQgYml0czsgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLwog ICAgIHVuc2lnbmVkIGNvcHk7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc3RvcmVkIG9yIG1h dGNoIGJ5dGVzIHRvIGNvcHkgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZnJvbTsgICAgLyog d2hlcmUgdG8gY29weSBtYXRjaCBieXRlcyBmcm9tICovCi0gICAgY29kZSB0aGlzOyAgICAgICAg ICAgICAgICAgIC8qIGN1cnJlbnQgZGVjb2RpbmcgdGFibGUgZW50cnkgKi8KKyAgICBjb2RlIGhl cmU7ICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqLwog ICAgIGNvZGUgbGFzdDsgICAgICAgICAgICAgICAgICAvKiBwYXJlbnQgdGFibGUgZW50cnkgKi8K ICAgICB1bnNpZ25lZCBsZW47ICAgICAgICAgICAgICAgLyogbGVuZ3RoIHRvIGNvcHkgZm9yIHJl cGVhdHMsIGJpdHMgdG8gZHJvcCAqLwogICAgIGludCByZXQ7ICAgICAgICAgICAgICAgICAgICAv KiByZXR1cm4gY29kZSAqLwpAQCAtMzg4LDE5ICszOTgsMTggQEAKICAgICAgICAgICAgIHN0YXRl LT5oYXZlID0gMDsKICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IHN0YXRlLT5ubGVu ICsgc3RhdGUtPm5kaXN0KSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAg ICAgICAgICAgICB0aGlzID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOwot ICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0 ZS0+bGVuYml0cyldOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJp dHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy52YWwgPCAxNikgewotICAg ICAgICAgICAgICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgICAgICAg ICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tz dGF0ZS0+aGF2ZSsrXSA9IHRoaXMudmFsOworICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8 IDE2KSB7CisgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAg ICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg ICBpZiAodGhpcy52YWwgPT0gMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRT KHRoaXMuYml0cyArIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFModGhpcy5i aXRzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsID09IDE2KSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoc3RhdGUtPmhhdmUgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0t Pm1zZyA9IChjaGFyICopImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwpAQCAtNDEwLDE2ICs0MTksMTYgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgQklUUygyKTsKICAgICAgICAgICAg ICAgICAgICAgICAgIERST1BCSVRTKDIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsID09IDE3KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMgKyAzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IERST1BCSVRTKHRoaXMuYml0cyk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhlcmUu dmFsID09IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMg KyAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAg ICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgY29w eSA9IDMgKyBCSVRTKDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoMyk7CiAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMgKyA3KTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBO RUVEQklUUyhoZXJlLmJpdHMgKyA3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRT KGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAg ICAgICAgICAgICAgICAgY29weSA9IDExICsgQklUUyg3KTsKICAgICAgICAgICAgICAgICAgICAg ICAgIERST1BCSVRTKDcpOwpAQCAtNDM3LDcgKzQ0NiwxNiBAQAogICAgICAgICAgICAgLyogaGFu ZGxlIGVycm9yIGJyZWFrcyBpbiB3aGlsZSAqLwogICAgICAgICAgICAgaWYgKHN0YXRlLT5tb2Rl ID09IEJBRCkgYnJlYWs7CiAKLSAgICAgICAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzICovCisg ICAgICAgICAgICAvKiBjaGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9u ZSkgKi8KKyAgICAgICAgICAgIGlmIChzdGF0ZS0+bGVuc1syNTZdID09IDApIHsKKyAgICAgICAg ICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQt b2YtYmxvY2siOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBidWlsZCBjb2Rl IHRhYmxlcyAtLSBub3RlOiBkbyBub3QgY2hhbmdlIHRoZSBsZW5iaXRzIG9yIGRpc3RiaXRzCisg ICAgICAgICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBj b21tZW50cyBpbiBpbmZ0cmVlcy5oCisgICAgICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9V R0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovCiAgICAgICAgICAg ICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKICAgICAgICAgICAgIHN0YXRlLT5sZW5jb2Rl ID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5s ZW5iaXRzID0gOTsKQEAgLTQ3MywyOCArNDkxLDI4IEBACiAKICAgICAgICAgICAgIC8qIGdldCBh IGxpdGVyYWwsIGxlbmd0aCwgb3IgZW5kLW9mLWJsb2NrIGNvZGUgKi8KICAgICAgICAgICAgIGZv ciAoOzspIHsKLSAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0 ZS0+bGVuYml0cyldOwotICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykg PD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5sZW5jb2RlW0JJ VFMoc3RhdGUtPmxlbmJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJl LmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5vcCAmJiAodGhpcy5vcCAmIDB4ZjApID09 IDApIHsKLSAgICAgICAgICAgICAgICBsYXN0ID0gdGhpczsKKyAgICAgICAgICAgIGlmIChoZXJl Lm9wICYmIChoZXJlLm9wICYgMHhmMCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGxhc3QgPSBo ZXJlOwogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp cyA9IHN0YXRlLT5sZW5jb2RlW2xhc3QudmFsICsKKyAgICAgICAgICAgICAgICAgICAgaGVyZSA9 IHN0YXRlLT5sZW5jb2RlW2xhc3QudmFsICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo QklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSA+PiBsYXN0LmJpdHMpXTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgdGhpcy5iaXRzKSA8PSBiaXRzKSBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgaGVyZS5i aXRzKSA8PSBiaXRzKSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgRFJPUEJJVFMobGFzdC5iaXRzKTsKICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAg ICBzdGF0ZS0+bGVuZ3RoID0gKHVuc2lnbmVkKXRoaXMudmFsOworICAgICAgICAgICAgRFJPUEJJ VFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAodW5zaWduZWQpaGVy ZS52YWw7CiAKICAgICAgICAgICAgIC8qIHByb2Nlc3MgbGl0ZXJhbCAqLwotICAgICAgICAgICAg aWYgKHRoaXMub3AgPT0gMCkgewotICAgICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgdGhp cy52YWwgPj0gMHgyMCAmJiB0aGlzLnZhbCA8IDB4N2YgPworICAgICAgICAgICAgaWYgKGhlcmUu b3AgPT0gMCkgeworICAgICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0g MHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgPwogICAgICAgICAgICAgICAgICAgICAgICAgImluZmxh dGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXG4iIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICJp bmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XG4iLCB0aGlzLnZhbCkpOworICAgICAgICAg ICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIGhlcmUu dmFsKSk7CiAgICAgICAgICAgICAgICAgUk9PTSgpOwogICAgICAgICAgICAgICAgICpwdXQrKyA9 ICh1bnNpZ25lZCBjaGFyKShzdGF0ZS0+bGVuZ3RoKTsKICAgICAgICAgICAgICAgICBsZWZ0LS07 CkBAIC01MDMsMjEgKzUyMSwyMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBw cm9jZXNzIGVuZCBvZiBibG9jayAqLwotICAgICAgICAgICAgaWYgKHRoaXMub3AgJiAzMikgewor ICAgICAgICAgICAgaWYgKGhlcmUub3AgJiAzMikgewogICAgICAgICAgICAgICAgIFRyYWNldnYo KHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZW5kIG9mIGJsb2NrXG4iKSk7CiAgICAgICAgICAg ICAgICAgc3RhdGUtPm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgfQogCiAgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgKi8KLSAgICAgICAgICAgIGlm ICh0aGlzLm9wICYgNjQpIHsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgNjQpIHsKICAgICAg ICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNv ZGUiOwogICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBsZW5ndGggY29kZSAtLSBn ZXQgZXh0cmEgYml0cywgaWYgYW55ICovCi0gICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5z aWduZWQpKHRoaXMub3ApICYgMTU7CisgICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5zaWdu ZWQpKGhlcmUub3ApICYgMTU7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmV4dHJhICE9IDApIHsK ICAgICAgICAgICAgICAgICBORUVEQklUUyhzdGF0ZS0+ZXh0cmEpOwogICAgICAgICAgICAgICAg IHN0YXRlLT5sZW5ndGggKz0gQklUUyhzdGF0ZS0+ZXh0cmEpOwpAQCAtNTI3LDMwICs1NDUsMzAg QEAKIAogICAgICAgICAgICAgLyogZ2V0IGRpc3RhbmNlIGNvZGUgKi8KICAgICAgICAgICAgIGZv ciAoOzspIHsKLSAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmRpc3Rjb2RlW0JJVFMoc3Rh dGUtPmRpc3RiaXRzKV07Ci0gICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkodGhpcy5iaXRz KSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmRpc3Rjb2Rl W0JJVFMoc3RhdGUtPmRpc3RiaXRzKV07CisgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCko aGVyZS5iaXRzKSA8PSBiaXRzKSBicmVhazsKICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwog ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh0aGlzLm9wICYgMHhmMCkgPT0gMCkgewot ICAgICAgICAgICAgICAgIGxhc3QgPSB0aGlzOworICAgICAgICAgICAgaWYgKChoZXJlLm9wICYg MHhmMCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGxhc3QgPSBoZXJlOwogICAgICAgICAgICAg ICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5kaXN0Y29k ZVtsYXN0LnZhbCArCisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+ZGlzdGNvZGVb bGFzdC52YWwgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVRTKGxhc3QuYml0cyAr IGxhc3Qub3ApID4+IGxhc3QuYml0cyldOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2ln bmVkKShsYXN0LmJpdHMgKyB0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyBoZXJlLmJpdHMpIDw9IGJpdHMpIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICBEUk9QQklUUyhsYXN0LmJpdHMpOwogICAgICAgICAgICAgfQotICAg ICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYg NjQpIHsKKyAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICBpZiAo aGVyZS5vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52 YWxpZCBkaXN0YW5jZSBjb2RlIjsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsK ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRl LT5vZmZzZXQgPSAodW5zaWduZWQpdGhpcy52YWw7CisgICAgICAgICAgICBzdGF0ZS0+b2Zmc2V0 ID0gKHVuc2lnbmVkKWhlcmUudmFsOwogCiAgICAgICAgICAgICAvKiBnZXQgZGlzdGFuY2UgZXh0 cmEgYml0cywgaWYgYW55ICovCi0gICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5zaWduZWQp KHRoaXMub3ApICYgMTU7CisgICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5zaWduZWQpKGhl cmUub3ApICYgMTU7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmV4dHJhICE9IDApIHsKICAgICAg ICAgICAgICAgICBORUVEQklUUyhzdGF0ZS0+ZXh0cmEpOwogICAgICAgICAgICAgICAgIHN0YXRl LT5vZmZzZXQgKz0gQklUUyhzdGF0ZS0+ZXh0cmEpOwpAQCAtNjExLDcgKzYyOSw3IEBACiB9CiAK IGludCBaRVhQT1JUIGluZmxhdGVCYWNrRW5kKHN0cm0pCi16X3N0cmVhbSBGQVIgKnN0cm07Cit6 X3N0cmVhbXAgc3RybTsKIHsKICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUg PT0gWl9OVUxMIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKICAgICAgICAgcmV0dXJu IFpfU1RSRUFNX0VSUk9SOwpkaWZmIC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lz L3NyYy9jbWQvZ3MvemxpYi9pbmZmYXN0LmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZm YXN0LmMJU3VuIE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyBiL3N5cy9zcmMvY21kL2dz L3psaWIvaW5mZmFzdC5jCVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtMSw1ICsx LDUgQEAKIC8qIGluZmZhc3QuYyAtLSBmYXN0IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5 OTUtMjAwNCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBNYXJrIEFkbGVy CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdo dCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCwyNiArOCw5IEBACiAjaW5jbHVkZSAiaW5m bGF0ZS5oIgogI2luY2x1ZGUgImluZmZhc3QuaCIKIAotI2lmbmRlZiBBU01JTkYKLQotLyogQWxs b3cgbWFjaGluZSBkZXBlbmRlbnQgb3B0aW1pemF0aW9uIGZvciBwb3N0LWluY3JlbWVudCBvciBw cmUtaW5jcmVtZW50LgotICAgQmFzZWQgb24gdGVzdGluZyB0byBkYXRlLAotICAgUHJlLWluY3Jl bWVudCBwcmVmZXJyZWQgZm9yOgotICAgLSBQb3dlclBDIEczIChBZGxlcikKLSAgIC0gTUlQUyBS NTAwMCAoUmFuZGVycy1QZWhyc29uKQotICAgUG9zdC1pbmNyZW1lbnQgcHJlZmVycmVkIGZvcjoK LSAgIC0gbm9uZQotICAgTm8gbWVhc3VyYWJsZSBkaWZmZXJlbmNlOgotICAgLSBQZW50aXVtIElJ SSAoQW5kZXJzb24pCi0gICAtIE02ODA2MCAoTmlrbCkKLSAqLwotI2lmZGVmIFBPU1RJTkMKLSMg IGRlZmluZSBPRkYgMAotIyAgZGVmaW5lIFBVUChhKSAqKGEpKysKKyNpZmRlZiBBU01JTkYKKyMg IHByYWdtYSBtZXNzYWdlKCJBc3NlbWJsZXIgY29kZSBtYXkgaGF2ZSBidWdzIC0tIHVzZSBhdCB5 b3VyIG93biByaXNrIikKICNlbHNlCi0jICBkZWZpbmUgT0ZGIDEKLSMgIGRlZmluZSBQVVAoYSkg KisrKGEpCi0jZW5kaWYKIAogLyoKICAgIERlY29kZSBsaXRlcmFsLCBsZW5ndGgsIGFuZCBkaXN0 YW5jZSBjb2RlcyBhbmQgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcKQEAgLTY0LDE5ICs0NywyMiBA QAogICAgICAgcmVxdWlyZXMgc3RybS0+YXZhaWxfb3V0ID49IDI1OCBmb3IgZWFjaCBsb29wIHRv IGF2b2lkIGNoZWNraW5nIGZvcgogICAgICAgb3V0cHV0IHNwYWNlLgogICovCi12b2lkIGluZmxh dGVfZmFzdChzdHJtLCBzdGFydCkKK3ZvaWQgWkxJQl9JTlRFUk5BTCBpbmZsYXRlX2Zhc3Qoc3Ry bSwgc3RhcnQpCiB6X3N0cmVhbXAgc3RybTsKIHVuc2lnbmVkIHN0YXJ0OyAgICAgICAgIC8qIGlu ZmxhdGUoKSdzIHN0YXJ0aW5nIHZhbHVlIGZvciBzdHJtLT5hdmFpbF9vdXQgKi8KIHsKICAgICBz dHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpp bjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCi0gICAgdW5zaWduZWQgY2hhciBGQVIg Kmxhc3Q7ICAgIC8qIHdoaWxlIGluIDwgbGFzdCwgZW5vdWdoIGlucHV0IGF2YWlsYWJsZSAqLwor ICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmluOyAgICAgIC8qIGxvY2FsIHN0cm0tPm5l eHRfaW4gKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAvKiBoYXZl IGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAq b3V0OyAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZB UiAqYmVnOyAgICAgLyogaW5mbGF0ZSgpJ3MgaW5pdGlhbCBzdHJtLT5uZXh0X291dCAqLwogICAg IHVuc2lnbmVkIGNoYXIgRkFSICplbmQ7ICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBz cGFjZSBhdmFpbGFibGUgKi8KKyNpZmRlZiBJTkZMQVRFX1NUUklDVAorICAgIHVuc2lnbmVkIGRt YXg7ICAgICAgICAgICAgICAvKiBtYXhpbXVtIGRpc3RhbmNlIGZyb20gemxpYiBoZWFkZXIgKi8K KyNlbmRpZgogICAgIHVuc2lnbmVkIHdzaXplOyAgICAgICAgICAgICAvKiB3aW5kb3cgc2l6ZSBv ciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi8KICAgICB1bnNpZ25lZCB3aGF2ZTsgICAgICAg ICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqLwotICAgIHVuc2lnbmVkIHdyaXRl OyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi8KKyAgICB1bnNpZ25lZCB3bmV4 dDsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovCiAgICAgdW5zaWduZWQgY2hh ciBGQVIgKndpbmRvdzsgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYgd3NpemUgIT0g MCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBsb2NhbCBzdHJtLT5ob2xk ICovCiAgICAgdW5zaWduZWQgYml0czsgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0tPmJpdHMg Ki8KQEAgLTg0LDcgKzcwLDcgQEAKICAgICBjb2RlIGNvbnN0IEZBUiAqZGNvZGU7ICAgICAgLyog bG9jYWwgc3RybS0+ZGlzdGNvZGUgKi8KICAgICB1bnNpZ25lZCBsbWFzazsgICAgICAgICAgICAg LyogbWFzayBmb3IgZmlyc3QgbGV2ZWwgb2YgbGVuZ3RoIGNvZGVzICovCiAgICAgdW5zaWduZWQg ZG1hc2s7ICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGRpc3RhbmNlIGNv ZGVzICovCi0gICAgY29kZSB0aGlzOyAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXZlZCB0YWJs ZSBlbnRyeSAqLworICAgIGNvZGUgaGVyZTsgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZWQg dGFibGUgZW50cnkgKi8KICAgICB1bnNpZ25lZCBvcDsgICAgICAgICAgICAgICAgLyogY29kZSBi aXRzLCBvcGVyYXRpb24sIGV4dHJhIGJpdHMsIG9yICovCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICB3aW5kb3cgcG9zaXRpb24sIHdpbmRvdyBieXRlcyB0byBjb3B5ICovCiAg ICAgdW5zaWduZWQgbGVuOyAgICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCwgdW51c2VkIGJ5 dGVzICovCkBAIC05MywxNCArNzksMTcgQEAKIAogICAgIC8qIGNvcHkgc3RhdGUgdG8gbG9jYWwg dmFyaWFibGVzICovCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3Ry bS0+c3RhdGU7Ci0gICAgaW4gPSBzdHJtLT5uZXh0X2luIC0gT0ZGOworICAgIGluID0gc3RybS0+ bmV4dF9pbjsKICAgICBsYXN0ID0gaW4gKyAoc3RybS0+YXZhaWxfaW4gLSA1KTsKLSAgICBvdXQg PSBzdHJtLT5uZXh0X291dCAtIE9GRjsKKyAgICBvdXQgPSBzdHJtLT5uZXh0X291dDsKICAgICBi ZWcgPSBvdXQgLSAoc3RhcnQgLSBzdHJtLT5hdmFpbF9vdXQpOwogICAgIGVuZCA9IG91dCArIChz dHJtLT5hdmFpbF9vdXQgLSAyNTcpOworI2lmZGVmIElORkxBVEVfU1RSSUNUCisgICAgZG1heCA9 IHN0YXRlLT5kbWF4OworI2VuZGlmCiAgICAgd3NpemUgPSBzdGF0ZS0+d3NpemU7CiAgICAgd2hh dmUgPSBzdGF0ZS0+d2hhdmU7Ci0gICAgd3JpdGUgPSBzdGF0ZS0+d3JpdGU7CisgICAgd25leHQg PSBzdGF0ZS0+d25leHQ7CiAgICAgd2luZG93ID0gc3RhdGUtPndpbmRvdzsKICAgICBob2xkID0g c3RhdGUtPmhvbGQ7CiAgICAgYml0cyA9IHN0YXRlLT5iaXRzOwpAQCAtMTEzLDI5ICsxMDIsMjkg QEAKICAgICAgICBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSAqLwogICAgIGRvIHsKICAgICAg ICAgaWYgKGJpdHMgPCAxNSkgewotICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZyko UFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCpp bisrKSA8PCBiaXRzOwogICAgICAgICAgICAgYml0cyArPSA4OwotICAgICAgICAgICAgaG9sZCAr PSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAgIGhvbGQgKz0g KHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgYml0cyArPSA4Owog ICAgICAgICB9Ci0gICAgICAgIHRoaXMgPSBsY29kZVtob2xkICYgbG1hc2tdOworICAgICAgICBo ZXJlID0gbGNvZGVbaG9sZCAmIGxtYXNrXTsKICAgICAgIGRvbGVuOgotICAgICAgICBvcCA9ICh1 bnNpZ25lZCkodGhpcy5iaXRzKTsKKyAgICAgICAgb3AgPSAodW5zaWduZWQpKGhlcmUuYml0cyk7 CiAgICAgICAgIGhvbGQgPj49IG9wOwogICAgICAgICBiaXRzIC09IG9wOwotICAgICAgICBvcCA9 ICh1bnNpZ25lZCkodGhpcy5vcCk7CisgICAgICAgIG9wID0gKHVuc2lnbmVkKShoZXJlLm9wKTsK ICAgICAgICAgaWYgKG9wID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpdGVy YWwgKi8KLSAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgdGhpcy52YWwgPj0gMHgyMCAmJiB0 aGlzLnZhbCA8IDB4N2YgPworICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+ PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/CiAgICAgICAgICAgICAgICAgICAgICJpbmZsYXRl OiAgICAgICAgIGxpdGVyYWwgJyVjJ1xuIiA6Ci0gICAgICAgICAgICAgICAgICAgICJpbmZsYXRl OiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XG4iLCB0aGlzLnZhbCkpOwotICAgICAgICAgICAgUFVQ KG91dCkgPSAodW5zaWduZWQgY2hhcikodGhpcy52YWwpOworICAgICAgICAgICAgICAgICAgICAi aW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgaGVyZS52YWwpKTsKKyAgICAgICAg ICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKShoZXJlLnZhbCk7CiAgICAgICAgIH0KICAgICAg ICAgZWxzZSBpZiAob3AgJiAxNikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBiYXNl ICovCi0gICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpKHRoaXMudmFsKTsKKyAgICAgICAgICAg IGxlbiA9ICh1bnNpZ25lZCkoaGVyZS52YWwpOwogICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgKi8KICAgICAgICAg ICAgIGlmIChvcCkgewogICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKLSAgICAgICAg ICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAg ICAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoKmluKyspIDw8IGJpdHM7 CiAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgbGVuICs9ICh1bnNpZ25lZClob2xkICYgKCgxVSA8PCBvcCkgLSAxKTsKQEAg LTE0NCwyOSArMTMzLDM2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBUcmFjZXZ2KChz dGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxuIiwgbGVuKSk7CiAgICAgICAgICAg ICBpZiAoYml0cyA8IDE1KSB7Ci0gICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9u ZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBs b25nKSgqaW4rKykgPDwgYml0czsKICAgICAgICAgICAgICAgICBiaXRzICs9IDg7Ci0gICAgICAg ICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAg ICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKSgqaW4rKykgPDwgYml0czsKICAgICAg ICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzID0g ZGNvZGVbaG9sZCAmIGRtYXNrXTsKKyAgICAgICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1h c2tdOwogICAgICAgICAgIGRvZGlzdDoKLSAgICAgICAgICAgIG9wID0gKHVuc2lnbmVkKSh0aGlz LmJpdHMpOworICAgICAgICAgICAgb3AgPSAodW5zaWduZWQpKGhlcmUuYml0cyk7CiAgICAgICAg ICAgICBob2xkID4+PSBvcDsKICAgICAgICAgICAgIGJpdHMgLT0gb3A7Ci0gICAgICAgICAgICBv cCA9ICh1bnNpZ25lZCkodGhpcy5vcCk7CisgICAgICAgICAgICBvcCA9ICh1bnNpZ25lZCkoaGVy ZS5vcCk7CiAgICAgICAgICAgICBpZiAob3AgJiAxNikgeyAgICAgICAgICAgICAgICAgICAgICAv KiBkaXN0YW5jZSBiYXNlICovCi0gICAgICAgICAgICAgICAgZGlzdCA9ICh1bnNpZ25lZCkodGhp cy52YWwpOworICAgICAgICAgICAgICAgIGRpc3QgPSAodW5zaWduZWQpKGhlcmUudmFsKTsKICAg ICAgICAgICAgICAgICBvcCAmPSAxNTsgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBv ZiBleHRyYSBiaXRzICovCiAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewotICAgICAg ICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKShQVVAoaW4pKSA8PCBiaXRzOwor ICAgICAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKSgqaW4rKykgPDwgYml0 czsKICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgICAgICAgICAgICBp ZiAoYml0cyA8IG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25l ZCBsb25nKShQVVAoaW4pKSA8PCBiaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCAr PSAodW5zaWduZWQgbG9uZykoKmluKyspIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgICAgICAg ICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgZGlzdCArPSAodW5zaWduZWQpaG9sZCAmICgoMVUgPDwgb3ApIC0gMSk7 CisjaWZkZWYgSU5GTEFURV9TVFJJQ1QKKyAgICAgICAgICAgICAgICBpZiAoZGlzdCA+IGRtYXgp IHsKKyAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBkaXN0 YW5jZSB0b28gZmFyIGJhY2siOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJB RDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2VuZGlm CiAgICAgICAgICAgICAgICAgaG9sZCA+Pj0gb3A7CiAgICAgICAgICAgICAgICAgYml0cyAtPSBv cDsKICAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGRp c3RhbmNlICV1XG4iLCBkaXN0KSk7CkBAIC0xNzQsNzkgKzE3MCwxMDEgQEAKICAgICAgICAgICAg ICAgICBpZiAoZGlzdCA+IG9wKSB7ICAgICAgICAgICAgICAgIC8qIHNlZSBpZiBjb3B5IGZyb20g d2luZG93ICovCiAgICAgICAgICAgICAgICAgICAgIG9wID0gZGlzdCAtIG9wOyAgICAgICAgICAg ICAvKiBkaXN0YW5jZSBiYWNrIGluIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICBpZiAo b3AgPiB3aGF2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIg KikiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwotICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+c2FuZSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cm0tPm1zZyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBJTkZMQVRFX0FM TE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlIKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICBsZW4gLT0gb3AgLSB3aGF2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAwOworICAgICAgICAg ICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCA+IHdoYXZlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChvcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9 IG91dCAtIGRpc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gPSB3aW5kb3cgLSBPRkY7Ci0g ICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZSA9PSAwKSB7ICAgICAgICAgICAvKiB2ZXJ5IGNv bW1vbiBjYXNlICovCisgICAgICAgICAgICAgICAgICAgIGZyb20gPSB3aW5kb3c7CisgICAgICAg ICAgICAgICAgICAgIGlmICh3bmV4dCA9PSAwKSB7ICAgICAgICAgICAvKiB2ZXJ5IGNvbW1vbiBj YXNlICovCiAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplIC0gb3A7CiAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20g d2luZG93ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAo LS1vcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7ICAv KiByZXN0IGZyb20gb3V0cHV0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod3JpdGUgPCBvcCkg eyAgICAgIC8qIHdyYXAgYXJvdW5kIHdpbmRvdyAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ZnJvbSArPSB3c2l6ZSArIHdyaXRlIC0gb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcCAt PSB3cml0ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod25leHQgPCBvcCkgeyAgICAg IC8qIHdyYXAgYXJvdW5kIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAr PSB3c2l6ZSArIHduZXh0IC0gb3A7CisgICAgICAgICAgICAgICAgICAgICAgICBvcCAtPSB3bmV4 dDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNv bWUgZnJvbSBlbmQgb2Ygd2luZG93ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVu IC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfSB3aGlsZSAoLS1vcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9 IHdpbmRvdyAtIE9GRjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGUgPCBs ZW4pIHsgIC8qIHNvbWUgZnJvbSBzdGFydCBvZiB3aW5kb3cgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3AgPSB3cml0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm cm9tID0gd2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxl bikgeyAgLyogc29tZSBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvcCA9IHduZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgICAgIC8qIHJlc3QgZnJvbSBv dXRwdXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRpZ3VvdXMgaW4gd2luZG93ICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBmcm9tICs9IHdyaXRlIC0gb3A7CisgICAgICAgICAgICAgICAg ICAgICAgICBmcm9tICs9IHduZXh0IC0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo b3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gd2luZG93ICovCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovCiAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBV UChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQ VVAoZnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CisgICAgICAgICAgICAg ICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICAgICAgKm91 dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAzOwogICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAg ICAgICAgKm91dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4g PiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg ICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgICAgICAgICAvKiBjb3B5IGRp cmVjdCBmcm9tIG91dHB1dCAqLwogICAgICAgICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogbWluaW11bSBsZW5ndGggaXMgdGhyZWUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAg UFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9 IFBVUChmcm9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7Cisg ICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAg ICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAt PSAzOwogICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTsKICAgICAgICAgICAg ICAgICAgICAgaWYgKGxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQ VVAoZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOwogICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Km91dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PSAwKSB7 ICAgICAgICAgIC8qIDJuZCBsZXZlbCBkaXN0YW5jZSBjb2RlICovCi0gICAgICAgICAgICAgICAg dGhpcyA9IGRjb2RlW3RoaXMudmFsICsgKGhvbGQgJiAoKDFVIDw8IG9wKSAtIDEpKV07CisgICAg ICAgICAgICAgICAgaGVyZSA9IGRjb2RlW2hlcmUudmFsICsgKGhvbGQgJiAoKDFVIDw8IG9wKSAt IDEpKV07CiAgICAgICAgICAgICAgICAgZ290byBkb2Rpc3Q7CiAgICAgICAgICAgICB9CiAgICAg ICAgICAgICBlbHNlIHsKQEAgLTI1Niw3ICsyNzQsNyBAQAogICAgICAgICAgICAgfQogICAgICAg ICB9CiAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PSAwKSB7ICAgICAgICAgICAgICAvKiAy bmQgbGV2ZWwgbGVuZ3RoIGNvZGUgKi8KLSAgICAgICAgICAgIHRoaXMgPSBsY29kZVt0aGlzLnZh bCArIChob2xkICYgKCgxVSA8PCBvcCkgLSAxKSldOworICAgICAgICAgICAgaGVyZSA9IGxjb2Rl W2hlcmUudmFsICsgKGhvbGQgJiAoKDFVIDw8IG9wKSAtIDEpKV07CiAgICAgICAgICAgICBnb3Rv IGRvbGVuOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKG9wICYgMzIpIHsgICAgICAgICAg ICAgICAgICAgICAvKiBlbmQtb2YtYmxvY2sgKi8KQEAgLTI3OCw4ICsyOTYsOCBAQAogICAgIGhv bGQgJj0gKDFVIDw8IGJpdHMpIC0gMTsKIAogICAgIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmV0dXJu ICovCi0gICAgc3RybS0+bmV4dF9pbiA9IGluICsgT0ZGOwotICAgIHN0cm0tPm5leHRfb3V0ID0g b3V0ICsgT0ZGOworICAgIHN0cm0tPm5leHRfaW4gPSBpbjsKKyAgICBzdHJtLT5uZXh0X291dCA9 IG91dDsKICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZCkoaW4gPCBsYXN0ID8gNSArIChs YXN0IC0gaW4pIDogNSAtIChpbiAtIGxhc3QpKTsKICAgICBzdHJtLT5hdmFpbF9vdXQgPSAodW5z aWduZWQpKG91dCA8IGVuZCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTcg KyAoZW5kIC0gb3V0KSA6IDI1NyAtIChvdXQgLSBlbmQpKTsKQEAgLTI5Miw3ICszMTAsNyBAQAog ICAgaW5mbGF0ZV9mYXN0KCkgc3BlZWR1cHMgdGhhdCB0dXJuZWQgb3V0IHNsb3dlciAob24gYSBQ b3dlclBDIEczIDc1MENYZSk6CiAgICAtIFVzaW5nIGJpdCBmaWVsZHMgZm9yIGNvZGUgc3RydWN0 dXJlCiAgICAtIERpZmZlcmVudCBvcCBkZWZpbml0aW9uIHRvIGF2b2lkICYgZm9yIGV4dHJhIGJp dHMgKGRvICYgZm9yIHRhYmxlIGJpdHMpCi0gICAtIFRocmVlIHNlcGFyYXRlIGRlY29kaW5nIGRv LWxvb3BzIGZvciBkaXJlY3QsIHdpbmRvdywgYW5kIHdyaXRlID09IDAKKyAgIC0gVGhyZWUgc2Vw YXJhdGUgZGVjb2RpbmcgZG8tbG9vcHMgZm9yIGRpcmVjdCwgd2luZG93LCBhbmQgd25leHQgPT0g MAogICAgLSBTcGVjaWFsIGNhc2UgZm9yIGRpc3RhbmNlID4gMSBjb3BpZXMgdG8gZG8gb3Zlcmxh cHBlZCBsb2FkIGFuZCBzdG9yZSBjb3B5CiAgICAtIEV4cGxpY2l0IGJyYW5jaCBwcmVkaWN0aW9u cyAoYmFzZWQgb24gbWVhc3VyZWQgYnJhbmNoIHByb2JhYmlsaXRpZXMpCiAgICAtIERlZmVycmlu ZyBtYXRjaCBjb3B5IGFuZCBpbnRlcnNwZXJzZWQgaXQgd2l0aCBkZWNvZGluZyBzdWJzZXF1ZW50 IGNvZGVzCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9n cy96bGliL2luZmZhc3QuaAotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL2luZmZhc3QuaAlTdW4g TWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZm YXN0LmgJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0xLDUgKzEsNSBAQAogLyog aW5mZmFzdC5oIC0tIGhlYWRlciB0byB1c2UgaW5mZmFzdC5jCi0gKiBDb3B5cmlnaHQgKEMpIDE5 OTUtMjAwMyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAxMCBNYXJr IEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNv cHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCw0ICs4LDQgQEAKICAgIHN1Ympl Y3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KICAqLwog Ci12b2lkIGluZmxhdGVfZmFzdCBPRigoel9zdHJlYW1wIHN0cm0sIHVuc2lnbmVkIHN0YXJ0KSk7 Cit2b2lkIFpMSUJfSU5URVJOQUwgaW5mbGF0ZV9mYXN0IE9GKCh6X3N0cmVhbXAgc3RybSwgdW5z aWduZWQgc3RhcnQpKTsKZGlmZiAtciA5YTMxNzcyMzE3OTAgLXIgZTJkMTkzOWIxY2NjIHN5cy9z cmMvY21kL2dzL3psaWIvaW5mZml4ZWQuaAotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL2luZmZp eGVkLmgJU3VuIE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyBiL3N5cy9zcmMvY21kL2dz L3psaWIvaW5mZml4ZWQuaAlTdW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0MDAKQEAgLTIsOSAr Miw5IEBACiAgICAgICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgbWFrZWZpeGVkKCkuCiAg ICAgICovCiAKLSAgICAvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQg YnkgYXBwbGljYXRpb25zLiBJdAotICAgICAgIGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9u IG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZAotICAgICAgIGlzIHN1YmplY3QgdG8gY2hh bmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAgICAvKiBXQVJOSU5H OiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLgorICAgICAg IEl0IGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbGlicmFyeSBhbmQgaXMK KyAgICAgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6 bGliLmguCiAgICAgICovCiAKICAgICBzdGF0aWMgY29uc3QgY29kZSBsZW5maXhbNTEyXSA9IHsK ZGlmZiAtciA5YTMxNzcyMzE3OTAgLXIgZTJkMTkzOWIxY2NjIHN5cy9zcmMvY21kL2dzL3psaWIv aW5mbGF0ZS5jCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mbGF0ZS5jCVN1biBNYXIgMDgg MjI6MDA6MjMgMjAyMCArMDEwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2luZmxhdGUuYwlT dW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0MDAKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRl LmMgLS0gemxpYiBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBNYXJr IEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBNYXJrIEFkbGVyCiAgKiBGb3IgY29u ZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4g emxpYi5oCiAgKi8KIApAQCAtNDUsNyArNDUsNyBAQAogICogLSBSZWFycmFuZ2Ugd2luZG93IGNv cGllcyBpbiBpbmZsYXRlX2Zhc3QoKSBmb3Igc3BlZWQgYW5kIHNpbXBsaWZpY2F0aW9uCiAgKiAt IFVucm9sbCBsYXN0IGNvcHkgZm9yIHdpbmRvdyBtYXRjaCBpbiBpbmZsYXRlX2Zhc3QoKQogICog LSBVc2UgbG9jYWwgY29waWVzIG9mIHdpbmRvdyB2YXJpYWJsZXMgaW4gaW5mbGF0ZV9mYXN0KCkg Zm9yIHNwZWVkCi0gKiAtIFB1bGwgb3V0IGNvbW1vbiB3cml0ZSA9PSAwIGNhc2UgZm9yIHNwZWVk IGluIGluZmxhdGVfZmFzdCgpCisgKiAtIFB1bGwgb3V0IGNvbW1vbiB3bmV4dCA9PSAwIGNhc2Ug Zm9yIHNwZWVkIGluIGluZmxhdGVfZmFzdCgpCiAgKiAtIE1ha2Ugb3AgYW5kIGxlbiBpbiBpbmZs YXRlX2Zhc3QoKSB1bnNpZ25lZCBmb3IgY29uc2lzdGVuY3kKICAqIC0gQWRkIEZBUiB0byBsY29k ZSBhbmQgZGNvZGUgZGVjbGFyYXRpb25zIGluIGluZmxhdGVfZmFzdCgpCiAgKiAtIFNpbXBsaWZp ZWQgYmFkIGRpc3RhbmNlIGNoZWNrIGluIGluZmxhdGVfZmFzdCgpCkBAIC05MiwzNCArOTIsMTA0 IEBACiAjZW5kaWYKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLworbG9jYWwgaW50IGluZmxh dGVTdGF0ZUNoZWNrIE9GKCh6X3N0cmVhbXAgc3RybSkpOwogbG9jYWwgdm9pZCBmaXhlZHRhYmxl cyBPRigoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZSkpOwotbG9jYWwgaW50IHVwZGF0 ZXdpbmRvdyBPRigoel9zdHJlYW1wIHN0cm0sIHVuc2lnbmVkIG91dCkpOworbG9jYWwgaW50IHVw ZGF0ZXdpbmRvdyBPRigoel9zdHJlYW1wIHN0cm0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpl bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb3B5KSk7CiAjaWZkZWYg QlVJTERGSVhFRAogICAgdm9pZCBtYWtlZml4ZWQgT0YoKHZvaWQpKTsKICNlbmRpZgotbG9jYWwg dW5zaWduZWQgc3luY3NlYXJjaCBPRigodW5zaWduZWQgRkFSICpoYXZlLCB1bnNpZ25lZCBjaGFy IEZBUiAqYnVmLAorbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaCBPRigodW5zaWduZWQgRkFSICpo YXZlLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbGVuKSk7CiAKK2xvY2FsIGludCBpbmZsYXRlU3RhdGVDaGVjayhz dHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpz dGF0ZTsKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwKKyAgICAgICAgc3RybS0+emFsbG9jID09 IChhbGxvY19mdW5jKTAgfHwgc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorICAgICAgICBy ZXR1cm4gMTsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5z dGF0ZTsKKyAgICBpZiAoc3RhdGUgPT0gWl9OVUxMIHx8IHN0YXRlLT5zdHJtICE9IHN0cm0gfHwK KyAgICAgICAgc3RhdGUtPm1vZGUgPCBIRUFEIHx8IHN0YXRlLT5tb2RlID4gU1lOQykKKyAgICAg ICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNl dEtlZXAoc3RybSkKK3pfc3RyZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRl IEZBUiAqc3RhdGU7CisKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBa X1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilz dHJtLT5zdGF0ZTsKKyAgICBzdHJtLT50b3RhbF9pbiA9IHN0cm0tPnRvdGFsX291dCA9IHN0YXRl LT50b3RhbCA9IDA7CisgICAgc3RybS0+bXNnID0gWl9OVUxMOworICAgIGlmIChzdGF0ZS0+d3Jh cCkgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8K KyAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+d3JhcCAmIDE7CisgICAgc3RhdGUtPm1vZGUg PSBIRUFEOworICAgIHN0YXRlLT5sYXN0ID0gMDsKKyAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAwOwor ICAgIHN0YXRlLT5kbWF4ID0gMzI3NjhVOworICAgIHN0YXRlLT5oZWFkID0gWl9OVUxMOworICAg IHN0YXRlLT5ob2xkID0gMDsKKyAgICBzdGF0ZS0+Yml0cyA9IDA7CisgICAgc3RhdGUtPmxlbmNv ZGUgPSBzdGF0ZS0+ZGlzdGNvZGUgPSBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKKyAgICBz dGF0ZS0+c2FuZSA9IDE7CisgICAgc3RhdGUtPmJhY2sgPSAtMTsKKyAgICBUcmFjZXYoKHN0ZGVy ciwgImluZmxhdGU6IHJlc2V0XG4iKSk7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKIGludCBaRVhQ T1JUIGluZmxhdGVSZXNldChzdHJtKQogel9zdHJlYW1wIHN0cm07CiB7CiAgICAgc3RydWN0IGlu ZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJt LT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoaW5mbGF0 ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChz dHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKLSAgICBzdHJtLT50b3RhbF9p biA9IHN0cm0tPnRvdGFsX291dCA9IHN0YXRlLT50b3RhbCA9IDA7Ci0gICAgc3RybS0+bXNnID0g Wl9OVUxMOwotICAgIHN0cm0tPmFkbGVyID0gMTsgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNv bmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KLSAgICBzdGF0ZS0+bW9kZSA9IEhFQUQ7Ci0gICAg c3RhdGUtPmxhc3QgPSAwOwotICAgIHN0YXRlLT5oYXZlZGljdCA9IDA7CiAgICAgc3RhdGUtPndz aXplID0gMDsKICAgICBzdGF0ZS0+d2hhdmUgPSAwOwotICAgIHN0YXRlLT5ob2xkID0gMDsKLSAg ICBzdGF0ZS0+Yml0cyA9IDA7Ci0gICAgc3RhdGUtPmxlbmNvZGUgPSBzdGF0ZS0+ZGlzdGNvZGUg PSBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxh dGU6IHJlc2V0XG4iKSk7Ci0gICAgcmV0dXJuIFpfT0s7CisgICAgc3RhdGUtPnduZXh0ID0gMDsK KyAgICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKK30KKworaW50IFpFWFBPUlQgaW5m bGF0ZVJlc2V0MihzdHJtLCB3aW5kb3dCaXRzKQorel9zdHJlYW1wIHN0cm07CitpbnQgd2luZG93 Qml0czsKK3sKKyAgICBpbnQgd3JhcDsKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0 YXRlOworCisgICAgLyogZ2V0IHRoZSBzdGF0ZSAqLworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVj ayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZs YXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworCisgICAgLyogZXh0cmFjdCB3cmFwIHJlcXVl c3QgZnJvbSB3aW5kb3dCaXRzIHBhcmFtZXRlciAqLworICAgIGlmICh3aW5kb3dCaXRzIDwgMCkg eworICAgICAgICB3cmFwID0gMDsKKyAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwor ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd3JhcCA9ICh3aW5kb3dCaXRzID4+IDQpICsgNTsK KyNpZmRlZiBHVU5aSVAKKyAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkKKyAgICAgICAgICAg IHdpbmRvd0JpdHMgJj0gMTU7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBzZXQgbnVtYmVyIG9m IHdpbmRvdyBiaXRzLCBmcmVlIHdpbmRvdyBpZiBkaWZmZXJlbnQgKi8KKyAgICBpZiAod2luZG93 Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkKKyAgICAgICAgcmV0 dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChzdGF0ZS0+d2luZG93ICE9IFpfTlVMTCAmJiBz dGF0ZS0+d2JpdHMgIT0gKHVuc2lnbmVkKXdpbmRvd0JpdHMpIHsKKyAgICAgICAgWkZSRUUoc3Ry bSwgc3RhdGUtPndpbmRvdyk7CisgICAgICAgIHN0YXRlLT53aW5kb3cgPSBaX05VTEw7CisgICAg fQorCisgICAgLyogdXBkYXRlIHN0YXRlIGFuZCByZXNldCB0aGUgcmVzdCBvZiBpdCAqLworICAg IHN0YXRlLT53cmFwID0gd3JhcDsKKyAgICBzdGF0ZS0+d2JpdHMgPSAodW5zaWduZWQpd2luZG93 Qml0czsKKyAgICByZXR1cm4gaW5mbGF0ZVJlc2V0KHN0cm0pOwogfQogCiBpbnQgWkVYUE9SVCBp bmZsYXRlSW5pdDJfKHN0cm0sIHdpbmRvd0JpdHMsIHZlcnNpb24sIHN0cmVhbV9zaXplKQpAQCAt MTI4LDYgKzE5OCw3IEBACiBjb25zdCBjaGFyICp2ZXJzaW9uOwogaW50IHN0cmVhbV9zaXplOwog eworICAgIGludCByZXQ7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAog ICAgIGlmICh2ZXJzaW9uID09IFpfTlVMTCB8fCB2ZXJzaW9uWzBdICE9IFpMSUJfVkVSU0lPTlsw XSB8fApAQCAtMTM2LDMzICsyMDcsMzMgQEAKICAgICBpZiAoc3RybSA9PSBaX05VTEwpIHJldHVy biBaX1NUUkVBTV9FUlJPUjsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAg ICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwogICAgIGlmIChzdHJtLT56YWxsb2Mg PT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJF QU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAg ICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0t PnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0 cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJu IFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7Cisj ZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKikKICAgICAgICAg ICAgIFpBTExPQyhzdHJtLCAxLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBp ZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgVHJhY2V2KChzdGRl cnIsICJpbmZsYXRlOiBhbGxvY2F0ZWRcbiIpKTsKLSAgICBzdHJtLT5zdGF0ZSA9ICh2b2lkcGYp c3RhdGU7Ci0gICAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7Ci0gICAgICAgIHN0YXRlLT53cmFwID0g MDsKLSAgICAgICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwotICAgIH0KLSAgICBlbHNlIHsK LSAgICAgICAgc3RhdGUtPndyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7Ci0jaWZkZWYgR1VO WklQCi0gICAgICAgIGlmICh3aW5kb3dCaXRzIDwgNDgpIHdpbmRvd0JpdHMgJj0gMTU7Ci0jZW5k aWYKLSAgICB9Ci0gICAgaWYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkgewor ICAgIHN0cm0tPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKilzdGF0ZTsKKyAg ICBzdGF0ZS0+c3RybSA9IHN0cm07CisgICAgc3RhdGUtPndpbmRvdyA9IFpfTlVMTDsKKyAgICBz dGF0ZS0+bW9kZSA9IEhFQUQ7ICAgICAvKiB0byBwYXNzIHN0YXRlIHRlc3QgaW4gaW5mbGF0ZVJl c2V0MigpICovCisgICAgcmV0ID0gaW5mbGF0ZVJlc2V0MihzdHJtLCB3aW5kb3dCaXRzKTsKKyAg ICBpZiAocmV0ICE9IFpfT0spIHsKICAgICAgICAgWkZSRUUoc3RybSwgc3RhdGUpOwogICAgICAg ICBzdHJtLT5zdGF0ZSA9IFpfTlVMTDsKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwog ICAgIH0KLSAgICBzdGF0ZS0+d2JpdHMgPSAodW5zaWduZWQpd2luZG93Qml0czsKLSAgICBzdGF0 ZS0+d2luZG93ID0gWl9OVUxMOwotICAgIHJldHVybiBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAg cmV0dXJuIHJldDsKIH0KIAogaW50IFpFWFBPUlQgaW5mbGF0ZUluaXRfKHN0cm0sIHZlcnNpb24s IHN0cmVhbV9zaXplKQpAQCAtMTczLDYgKzI0NCwyNyBAQAogICAgIHJldHVybiBpbmZsYXRlSW5p dDJfKHN0cm0sIERFRl9XQklUUywgdmVyc2lvbiwgc3RyZWFtX3NpemUpOwogfQogCitpbnQgWkVY UE9SVCBpbmZsYXRlUHJpbWUoc3RybSwgYml0cywgdmFsdWUpCit6X3N0cmVhbXAgc3RybTsKK2lu dCBiaXRzOworaW50IHZhbHVlOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3Rh dGU7CisKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9F UlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0 ZTsKKyAgICBpZiAoYml0cyA8IDApIHsKKyAgICAgICAgc3RhdGUtPmhvbGQgPSAwOworICAgICAg ICBzdGF0ZS0+Yml0cyA9IDA7CisgICAgICAgIHJldHVybiBaX09LOworICAgIH0KKyAgICBpZiAo Yml0cyA+IDE2IHx8IHN0YXRlLT5iaXRzICsgKHVJbnQpYml0cyA+IDMyKSByZXR1cm4gWl9TVFJF QU1fRVJST1I7CisgICAgdmFsdWUgJj0gKDFMIDw8IGJpdHMpIC0gMTsKKyAgICBzdGF0ZS0+aG9s ZCArPSAodW5zaWduZWQpdmFsdWUgPDwgc3RhdGUtPmJpdHM7CisgICAgc3RhdGUtPmJpdHMgKz0g KHVJbnQpYml0czsKKyAgICByZXR1cm4gWl9PSzsKK30KKwogLyoKICAgIFJldHVybiBzdGF0ZSB3 aXRoIGxlbmd0aCBhbmQgZGlzdGFuY2UgZGVjb2RpbmcgdGFibGVzIGFuZCBpbmRleCBzaXplcyBz ZXQgdG8KICAgIGZpeGVkIGNvZGUgZGVjb2RpbmcuICBOb3JtYWxseSB0aGlzIHJldHVybnMgZml4 ZWQgdGFibGVzIGZyb20gaW5mZml4ZWQuaC4KQEAgLTI2Nyw4ICszNTksOCBAQAogICAgIGxvdyA9 IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoKGxvdyAlIDcpID09IDApIHByaW50Zigi XG4gICAgICAgICIpOwotICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCBzdGF0ZS5sZW5jb2Rl W2xvd10ub3AsIHN0YXRlLmxlbmNvZGVbbG93XS5iaXRzLAotICAgICAgICAgICAgICAgc3RhdGUu bGVuY29kZVtsb3ddLnZhbCk7CisgICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIChsb3cgJiAx MjcpID09IDk5ID8gNjQgOiBzdGF0ZS5sZW5jb2RlW2xvd10ub3AsCisgICAgICAgICAgICAgICBz dGF0ZS5sZW5jb2RlW2xvd10uYml0cywgc3RhdGUubGVuY29kZVtsb3ddLnZhbCk7CiAgICAgICAg IGlmICgrK2xvdyA9PSBzaXplKSBicmVhazsKICAgICAgICAgcHV0Y2hhcignLCcpOwogICAgIH0K QEAgLTMwMSwxMiArMzkzLDEzIEBACiAgICBvdXRwdXQgd2lsbCBmYWxsIGluIHRoZSBvdXRwdXQg ZGF0YSwgbWFraW5nIG1hdGNoIGNvcGllcyBzaW1wbGVyIGFuZCBmYXN0ZXIuCiAgICBUaGUgYWR2 YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRh dGEgY2FjaGVzLgogICovCi1sb2NhbCBpbnQgdXBkYXRld2luZG93KHN0cm0sIG91dCkKK2xvY2Fs IGludCB1cGRhdGV3aW5kb3coc3RybSwgZW5kLCBjb3B5KQogel9zdHJlYW1wIHN0cm07Ci11bnNp Z25lZCBvdXQ7Citjb25zdCBCeXRlZiAqZW5kOwordW5zaWduZWQgY29weTsKIHsKICAgICBzdHJ1 Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNvcHksIGRpc3Q7Cisg ICAgdW5zaWduZWQgZGlzdDsKIAogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZB UiAqKXN0cm0tPnN0YXRlOwogCkBAIC0zMjEsMzAgKzQxNCwyOSBAQAogICAgIC8qIGlmIHdpbmRv dyBub3QgaW4gdXNlIHlldCwgaW5pdGlhbGl6ZSAqLwogICAgIGlmIChzdGF0ZS0+d3NpemUgPT0g MCkgewogICAgICAgICBzdGF0ZS0+d3NpemUgPSAxVSA8PCBzdGF0ZS0+d2JpdHM7Ci0gICAgICAg IHN0YXRlLT53cml0ZSA9IDA7CisgICAgICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgICAgIHN0 YXRlLT53aGF2ZSA9IDA7CiAgICAgfQogCiAgICAgLyogY29weSBzdGF0ZS0+d3NpemUgb3IgbGVz cyBvdXRwdXQgYnl0ZXMgaW50byB0aGUgY2lyY3VsYXIgd2luZG93ICovCi0gICAgY29weSA9IG91 dCAtIHN0cm0tPmF2YWlsX291dDsKICAgICBpZiAoY29weSA+PSBzdGF0ZS0+d3NpemUpIHsKLSAg ICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT53c2l6 ZSwgc3RhdGUtPndzaXplKTsKLSAgICAgICAgc3RhdGUtPndyaXRlID0gMDsKKyAgICAgICAgem1l bWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53c2l6ZSk7Cisg ICAgICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53 c2l6ZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGRpc3QgPSBzdGF0ZS0+d3NpemUgLSBz dGF0ZS0+d3JpdGU7CisgICAgICAgIGRpc3QgPSBzdGF0ZS0+d3NpemUgLSBzdGF0ZS0+d25leHQ7 CiAgICAgICAgIGlmIChkaXN0ID4gY29weSkgZGlzdCA9IGNvcHk7Ci0gICAgICAgIHptZW1jcHko c3RhdGUtPndpbmRvdyArIHN0YXRlLT53cml0ZSwgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBkaXN0 KTsKKyAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBlbmQgLSBj b3B5LCBkaXN0KTsKICAgICAgICAgY29weSAtPSBkaXN0OwogICAgICAgICBpZiAoY29weSkgewot ICAgICAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIGNvcHks IGNvcHkpOwotICAgICAgICAgICAgc3RhdGUtPndyaXRlID0gY29weTsKKyAgICAgICAgICAgIHpt ZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7CisgICAgICAgICAgICBzdGF0 ZS0+d25leHQgPSBjb3B5OwogICAgICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXpl OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGUtPndyaXRlICs9 IGRpc3Q7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPndyaXRlID09IHN0YXRlLT53c2l6ZSkgc3Rh dGUtPndyaXRlID0gMDsKKyAgICAgICAgICAgIHN0YXRlLT53bmV4dCArPSBkaXN0OworICAgICAg ICAgICAgaWYgKHN0YXRlLT53bmV4dCA9PSBzdGF0ZS0+d3NpemUpIHN0YXRlLT53bmV4dCA9IDA7 CiAgICAgICAgICAgICBpZiAoc3RhdGUtPndoYXZlIDwgc3RhdGUtPndzaXplKSBzdGF0ZS0+d2hh dmUgKz0gZGlzdDsKICAgICAgICAgfQogICAgIH0KQEAgLTQ0NSwxMSArNTM3LDYgQEAKICAgICAg ICAgYml0cyAtPSBiaXRzICYgNzsgXAogICAgIH0gd2hpbGUgKDApCiAKLS8qIFJldmVyc2UgdGhl IGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCi0jZGVmaW5lIFJFVkVSU0UocSkgXAotICAgICgo KChxKSA+PiAyNCkgJiAweGZmKSArICgoKHEpID4+IDgpICYgMHhmZjAwKSArIFwKLSAgICAgKCgo cSkgJiAweGZmMDApIDw8IDgpICsgKCgocSkgJiAweGZmKSA8PCAyNCkpCi0KIC8qCiAgICBpbmZs YXRlKCkgdXNlcyBhIHN0YXRlIG1hY2hpbmUgdG8gcHJvY2VzcyBhcyBtdWNoIGlucHV0IGRhdGEg YW5kIGdlbmVyYXRlIGFzCiAgICBtdWNoIG91dHB1dCBkYXRhIGFzIHBvc3NpYmxlIGJlZm9yZSBy ZXR1cm5pbmcuICBUaGUgc3RhdGUgbWFjaGluZSBpcwpAQCAtNTM3LDcgKzYyNCw3IEBACiBpbnQg Zmx1c2g7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNp Z25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29uc3QgdW5z aWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNpZ25lZCBj aGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBoYXZlLCBs ZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25l ZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwpAQCAtNTQ1LDcgKzYzMiw3IEBA CiAgICAgdW5zaWduZWQgaW4sIG91dDsgICAgICAgICAgIC8qIHNhdmUgc3RhcnRpbmcgYXZhaWxh YmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBjb3B5OyAgICAgICAgICAgICAg LyogbnVtYmVyIG9mIHN0b3JlZCBvciBtYXRjaCBieXRlcyB0byBjb3B5ICovCiAgICAgdW5zaWdu ZWQgY2hhciBGQVIgKmZyb207ICAgIC8qIHdoZXJlIHRvIGNvcHkgbWF0Y2ggYnl0ZXMgZnJvbSAq LwotICAgIGNvZGUgdGhpczsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGRlY29kaW5nIHRh YmxlIGVudHJ5ICovCisgICAgY29kZSBoZXJlOyAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQg ZGVjb2RpbmcgdGFibGUgZW50cnkgKi8KICAgICBjb2RlIGxhc3Q7ICAgICAgICAgICAgICAgICAg LyogcGFyZW50IHRhYmxlIGVudHJ5ICovCiAgICAgdW5zaWduZWQgbGVuOyAgICAgICAgICAgICAg IC8qIGxlbmd0aCB0byBjb3B5IGZvciByZXBlYXRzLCBiaXRzIHRvIGRyb3AgKi8KICAgICBpbnQg cmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KQEAgLTU1NSw3ICs2NDIs NyBAQAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBvcmRlclsxOV0gPSAvKiBwZXJt dXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi8KICAgICAgICAgezE2LCAxNywgMTgsIDAsIDgsIDcs IDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTV9OwogCi0gICAgaWYg KHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fCBzdHJtLT5uZXh0X291 dCA9PSBaX05VTEwgfHwKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkgfHwgc3RybS0+ bmV4dF9vdXQgPT0gWl9OVUxMIHx8CiAgICAgICAgIChzdHJtLT5uZXh0X2luID09IFpfTlVMTCAm JiBzdHJtLT5hdmFpbF9pbiAhPSAwKSkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwog CkBAIC01NzUsNiArNjYyLDggQEAKICAgICAgICAgICAgIE5FRURCSVRTKDE2KTsKICNpZmRlZiBH VU5aSVAKICAgICAgICAgICAgIGlmICgoc3RhdGUtPndyYXAgJiAyKSAmJiBob2xkID09IDB4OGIx ZikgeyAgLyogZ3ppcCBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPndiaXRz ID09IDApCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT53Yml0cyA9IDE1OwogICAgICAgICAg ICAgICAgIHN0YXRlLT5jaGVjayA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwogICAgICAgICAgICAg ICAgIENSQzIoc3RhdGUtPmNoZWNrLCBob2xkKTsKICAgICAgICAgICAgICAgICBJTklUQklUUygp OwpAQCAtNTgyLDYgKzY3MSw4IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICB9CiAgICAgICAgICAgICBzdGF0ZS0+ZmxhZ3MgPSAwOyAgICAgICAgICAgLyogZXhwZWN0IHps aWIgaGVhZGVyICovCisgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQorICAg ICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5kb25lID0gLTE7CiAgICAgICAgICAgICBpZiAoIShz dGF0ZS0+d3JhcCAmIDEpIHx8ICAgLyogY2hlY2sgaWYgemxpYiBoZWFkZXIgYWxsb3dlZCAqLwog I2Vsc2UKICAgICAgICAgICAgIGlmICgKQEAgLTU5NywxMSArNjg4LDE1IEBACiAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBEUk9QQklUUyg0KTsKLSAg ICAgICAgICAgIGlmIChCSVRTKDQpICsgOCA+IHN0YXRlLT53Yml0cykgeworICAgICAgICAgICAg bGVuID0gQklUUyg0KSArIDg7CisgICAgICAgICAgICBpZiAoc3RhdGUtPndiaXRzID09IDApCisg ICAgICAgICAgICAgICAgc3RhdGUtPndiaXRzID0gbGVuOworICAgICAgICAgICAgaWYgKGxlbiA+ IDE1IHx8IGxlbiA+IHN0YXRlLT53Yml0cykgewogICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9 IChjaGFyICopImludmFsaWQgd2luZG93IHNpemUiOwogICAgICAgICAgICAgICAgIHN0YXRlLT5t b2RlID0gQkFEOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAg ICAgICAgc3RhdGUtPmRtYXggPSAxVSA8PCBsZW47CiAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVy ciwgImluZmxhdGU6ICAgemxpYiBoZWFkZXIgb2tcbiIpKTsKICAgICAgICAgICAgIHN0cm0tPmFk bGVyID0gc3RhdGUtPmNoZWNrID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKICAgICAgICAgICAg IHN0YXRlLT5tb2RlID0gaG9sZCAmIDB4MjAwID8gRElDVElEIDogVFlQRTsKQEAgLTYyMSwzMyAr NzE2LDU2IEBACiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdz ICYgMHgwMjAwKSBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7CisgICAgICAgICAgICBpZiAoc3Rh dGUtPmhlYWQgIT0gWl9OVUxMKQorICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT50ZXh0ID0g KGludCkoKGhvbGQgPj4gOCkgJiAxKTsKKyAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYg MHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAgICAgICAgICBDUkMyKHN0YXRl LT5jaGVjaywgaG9sZCk7CiAgICAgICAgICAgICBJTklUQklUUygpOwogICAgICAgICAgICAgc3Rh dGUtPm1vZGUgPSBUSU1FOwogICAgICAgICBjYXNlIFRJTUU6CiAgICAgICAgICAgICBORUVEQklU UygzMik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSBDUkM0KHN0YXRl LT5jaGVjaywgaG9sZCk7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQor ICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT50aW1lID0gaG9sZDsKKyAgICAgICAgICAgIGlm ICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKKyAgICAgICAg ICAgICAgICBDUkM0KHN0YXRlLT5jaGVjaywgaG9sZCk7CiAgICAgICAgICAgICBJTklUQklUUygp OwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBPUzsKICAgICAgICAgY2FzZSBPUzoKICAgICAg ICAgICAgIE5FRURCSVRTKDE2KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAy MDApIENSQzIoc3RhdGUtPmNoZWNrLCBob2xkKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVh ZCAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+eGZsYWdzID0gKGlu dCkoaG9sZCAmIDB4ZmYpOworICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5vcyA9IChpbnQp KGhvbGQgPj4gOCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHN0YXRlLT5mbGFn cyAmIDB4MDIwMCkgJiYgKHN0YXRlLT53cmFwICYgNCkpCisgICAgICAgICAgICAgICAgQ1JDMihz dGF0ZS0+Y2hlY2ssIGhvbGQpOwogICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAgICAg IHN0YXRlLT5tb2RlID0gRVhMRU47CiAgICAgICAgIGNhc2UgRVhMRU46CiAgICAgICAgICAgICBp ZiAoc3RhdGUtPmZsYWdzICYgMHgwNDAwKSB7CiAgICAgICAgICAgICAgICAgTkVFREJJVFMoMTYp OwogICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAodW5zaWduZWQpKGhvbGQpOwotICAg ICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApIENSQzIoc3RhdGUtPmNoZWNr LCBob2xkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQorICAg ICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ZXh0cmFfbGVuID0gKHVuc2lnbmVkKWhvbGQ7 CisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS0+ d3JhcCAmIDQpKQorICAgICAgICAgICAgICAgICAgICBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7 CiAgICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGVsc2UgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ aGVhZC0+ZXh0cmEgPSBaX05VTEw7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEVYVFJBOwog ICAgICAgICBjYXNlIEVYVFJBOgogICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDQw MCkgewogICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOwogICAgICAgICAgICAg ICAgIGlmIChjb3B5ID4gaGF2ZSkgY29weSA9IGhhdmU7CiAgICAgICAgICAgICAgICAgaWYgKGNv cHkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkKKyAg ICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCAmJgorICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPmV4dHJhICE9IFpfTlVMTCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgbGVuID0gc3RhdGUtPmhlYWQtPmV4dHJhX2xlbiAtIHN0YXRlLT5sZW5n dGg7CisgICAgICAgICAgICAgICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT5oZWFkLT5leHRyYSAr IGxlbiwgbmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuICsgY29weSA+ IHN0YXRlLT5oZWFkLT5leHRyYV9tYXggPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdGF0ZS0+aGVhZC0+ZXh0cmFfbWF4IC0gbGVuIDogY29weSk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApICYm IChzdGF0ZS0+d3JhcCAmIDQpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNoZWNr ID0gY3JjMzIoc3RhdGUtPmNoZWNrLCBuZXh0LCBjb3B5KTsKICAgICAgICAgICAgICAgICAgICAg aGF2ZSAtPSBjb3B5OwogICAgICAgICAgICAgICAgICAgICBuZXh0ICs9IGNvcHk7CkBAIC02NTUs NiArNzczLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRl LT5sZW5ndGgpIGdvdG8gaW5mX2xlYXZlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Rh dGUtPmxlbmd0aCA9IDA7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE5BTUU7CiAgICAgICAg IGNhc2UgTkFNRToKICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDA4MDApIHsKQEAg LTY2MiwxMyArNzgxLDIwIEBACiAgICAgICAgICAgICAgICAgY29weSA9IDA7CiAgICAgICAgICAg ICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpKG5leHRbY29w eSsrXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+bmFtZSAhPSBaX05VTEwg JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoIDwgc3RhdGUtPmhl YWQtPm5hbWVfbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm5hbWVb c3RhdGUtPmxlbmd0aCsrXSA9IChCeXRlZilsZW47CiAgICAgICAgICAgICAgICAgfSB3aGlsZSAo bGVuICYmIGNvcHkgPCBoYXZlKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYg MHgwMjAwMCkKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgJiYg KHN0YXRlLT53cmFwICYgNCkpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5jaGVjayA9IGNy YzMyKHN0YXRlLT5jaGVjaywgbmV4dCwgY29weSk7CiAgICAgICAgICAgICAgICAgaGF2ZSAtPSBj b3B5OwogICAgICAgICAgICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICAgICAgICAgICBpZiAo bGVuKSBnb3RvIGluZl9sZWF2ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg KHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+bmFt ZSA9IFpfTlVMTDsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAwOwogICAgICAgICAgICAg c3RhdGUtPm1vZGUgPSBDT01NRU5UOwogICAgICAgICBjYXNlIENPTU1FTlQ6CiAgICAgICAgICAg ICBpZiAoc3RhdGUtPmZsYWdzICYgMHgxMDAwKSB7CkBAIC02NzYsMzEgKzgwMiw0MSBAQAogICAg ICAgICAgICAgICAgIGNvcHkgPSAwOwogICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAg ICAgICAgICAgbGVuID0gKHVuc2lnbmVkKShuZXh0W2NvcHkrK10pOworICAgICAgICAgICAgICAg ICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMICYmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RhdGUtPmhlYWQtPmNvbW1lbnQgIT0gWl9OVUxMICYmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA8IHN0YXRlLT5oZWFkLT5jb21tX21heCkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5jb21tZW50W3N0YXRlLT5sZW5ndGgrK10g PSAoQnl0ZWYpbGVuOwogICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2 ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDIwMDApCisgICAgICAg ICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS0+d3JhcCAmIDQp KQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2hlY2sgPSBjcmMzMihzdGF0ZS0+Y2hlY2ss IG5leHQsIGNvcHkpOwogICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICAgICAg ICAgICBuZXh0ICs9IGNvcHk7CiAgICAgICAgICAgICAgICAgaWYgKGxlbikgZ290byBpbmZfbGVh dmU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aGVhZCAhPSBa X05VTEwpCisgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPmNvbW1lbnQgPSBaX05VTEw7CiAg ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEhDUkM7CiAgICAgICAgIGNhc2UgSENSQzoKICAgICAg ICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApIHsKICAgICAgICAgICAgICAgICBORUVE QklUUygxNik7Ci0gICAgICAgICAgICAgICAgaWYgKGhvbGQgIT0gKHN0YXRlLT5jaGVjayAmIDB4 ZmZmZikpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT53cmFwICYgNCkgJiYgaG9sZCAh PSAoc3RhdGUtPmNoZWNrICYgMHhmZmZmKSkgewogICAgICAgICAgICAgICAgICAgICBzdHJtLT5t c2cgPSAoY2hhciAqKSJoZWFkZXIgY3JjIG1pc21hdGNoIjsKICAgICAgICAgICAgICAgICAgICAg c3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICBJTklUQklUUygpOwogICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkgeworICAgICAgICAgICAgICAgIHN0 YXRlLT5oZWFkLT5oY3JjID0gKGludCkoKHN0YXRlLT5mbGFncyA+PiA5KSAmIDEpOworICAgICAg ICAgICAgICAgIHN0YXRlLT5oZWFkLT5kb25lID0gMTsKKyAgICAgICAgICAgIH0KICAgICAgICAg ICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CiAg ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZUEU7CiAgICAgICAgICAgICBicmVhazsKICNlbmRp ZgogICAgICAgICBjYXNlIERJQ1RJRDoKICAgICAgICAgICAgIE5FRURCSVRTKDMyKTsKLSAgICAg ICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gUkVWRVJTRShob2xkKTsKKyAgICAg ICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gWlNXQVAzMihob2xkKTsKICAgICAg ICAgICAgIElOSVRCSVRTKCk7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IERJQ1Q7CiAgICAg ICAgIGNhc2UgRElDVDoKQEAgLTcxMSw3ICs4NDcsNyBAQAogICAgICAgICAgICAgc3RybS0+YWRs ZXIgPSBzdGF0ZS0+Y2hlY2sgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOwogICAgICAgICAgICAg c3RhdGUtPm1vZGUgPSBUWVBFOwogICAgICAgICBjYXNlIFRZUEU6Ci0gICAgICAgICAgICBpZiAo Zmx1c2ggPT0gWl9CTE9DSykgZ290byBpbmZfbGVhdmU7CisgICAgICAgICAgICBpZiAoZmx1c2gg PT0gWl9CTE9DSyB8fCBmbHVzaCA9PSBaX1RSRUVTKSBnb3RvIGluZl9sZWF2ZTsKICAgICAgICAg Y2FzZSBUWVBFRE86CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmxhc3QpIHsKICAgICAgICAgICAg ICAgICBCWVRFQklUUygpOwpAQCAtNzMxLDcgKzg2NywxMSBAQAogICAgICAgICAgICAgICAgIGZp eGVkdGFibGVzKHN0YXRlKTsKICAgICAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxh dGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAg c3RhdGUtPmxhc3QgPyAiIChsYXN0KSIgOiAiIikpOwotICAgICAgICAgICAgICAgIHN0YXRlLT5t b2RlID0gTEVOOyAgICAgICAgICAgICAgLyogZGVjb2RlIGNvZGVzICovCisgICAgICAgICAgICAg ICAgc3RhdGUtPm1vZGUgPSBMRU5fOyAgICAgICAgICAgICAvKiBkZWNvZGUgY29kZXMgKi8KKyAg ICAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9UUkVFUykgeworICAgICAgICAgICAgICAgICAg ICBEUk9QQklUUygyKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBpbmZfbGVhdmU7CisgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAy OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHluYW1pYyBibG9jayAqLwogICAgICAg ICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxv Y2slc1xuIiwKQEAgLTc1Niw2ICs4OTYsOSBAQAogICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIs ICJpbmZsYXRlOiAgICAgICBzdG9yZWQgbGVuZ3RoICV1XG4iLAogICAgICAgICAgICAgICAgICAg ICBzdGF0ZS0+bGVuZ3RoKSk7CiAgICAgICAgICAgICBJTklUQklUUygpOworICAgICAgICAgICAg c3RhdGUtPm1vZGUgPSBDT1BZXzsKKyAgICAgICAgICAgIGlmIChmbHVzaCA9PSBaX1RSRUVTKSBn b3RvIGluZl9sZWF2ZTsKKyAgICAgICAgY2FzZSBDT1BZXzoKICAgICAgICAgICAgIHN0YXRlLT5t b2RlID0gQ09QWTsKICAgICAgICAgY2FzZSBDT1BZOgogICAgICAgICAgICAgY29weSA9IHN0YXRl LT5sZW5ndGg7CkBAIC04MDEsNyArOTQ0LDcgQEAKICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+ aGF2ZSA8IDE5KQogICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW29yZGVyW3N0YXRlLT5oYXZl KytdXSA9IDA7CiAgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAg ICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsK KyAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5u ZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0gNzsKICAgICAgICAgICAgIHJldCA9 IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLT5sZW5zLCAxOSwgJihzdGF0ZS0+bmV4dCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+ d29yayk7CkBAIC04MTYsMTkgKzk1OSwxOCBAQAogICAgICAgICBjYXNlIENPREVMRU5TOgogICAg ICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgc3RhdGUtPm5sZW4gKyBzdGF0ZS0+bmRpc3Qp IHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMg PSBzdGF0ZS0+bGVuY29kZVtCSVRTKHN0YXRlLT5sZW5iaXRzKV07Ci0gICAgICAgICAgICAgICAg ICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+bGVuY29kZVtCSVRTKHN0YXRlLT5sZW5iaXRzKV07Cisg ICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGhlcmUuYml0cykgPD0gYml0cykgYnJl YWs7CiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAg IE5FRURCSVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAgICAgICAgICAgIERST1BCSVRTKHRoaXMu Yml0cyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0g dGhpcy52YWw7CisgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsIDwgMTYpIHsKKyAgICAgICAg ICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh dGUtPmxlbnNbc3RhdGUtPmhhdmUrK10gPSBoZXJlLnZhbDsKICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbCA9 PSAxNikgewotICAgICAgICAgICAgICAgICAgICAgICAgTkVFREJJVFModGhpcy5iaXRzICsgMik7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOworICAgICAgICAg ICAgICAgICAgICBpZiAoaGVyZS52YWwgPT0gMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IE5FRURCSVRTKGhlcmUuYml0cyArIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJ VFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9 PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKiki aW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhdGUtPm1vZGUgPSBCQUQ7CkBAIC04MzgsMTYgKzk4MCwxNiBAQAogICAgICAgICAgICAgICAg ICAgICAgICAgY29weSA9IDMgKyBCSVRTKDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgRFJP UEJJVFMoMik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAodGhpcy52YWwgPT0gMTcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRT KHRoaXMuYml0cyArIDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFModGhpcy5i aXRzKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaGVyZS52YWwgPT0gMTcpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyArIDMpOworICAgICAgICAg ICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAg ICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIEJJVFMoMyk7 CiAgICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUygzKTsKICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IE5FRURCSVRTKHRoaXMuYml0cyArIDcpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJ VFModGhpcy5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0 cyArIDcpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAg ICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBj b3B5ID0gMTEgKyBCSVRTKDcpOwogICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoNyk7 CkBAIC04NjUsOSArMTAwNywxOCBAQAogICAgICAgICAgICAgLyogaGFuZGxlIGVycm9yIGJyZWFr cyBpbiB3aGlsZSAqLwogICAgICAgICAgICAgaWYgKHN0YXRlLT5tb2RlID09IEJBRCkgYnJlYWs7 CiAKLSAgICAgICAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzICovCisgICAgICAgICAgICAvKiBj aGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9uZSkgKi8KKyAgICAgICAg ICAgIGlmIChzdGF0ZS0+bGVuc1syNTZdID09IDApIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5t c2cgPSAoY2hhciAqKSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siOworICAg ICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBidWlsZCBjb2RlIHRhYmxlcyAtLSBub3Rl OiBkbyBub3QgY2hhbmdlIHRoZSBsZW5iaXRzIG9yIGRpc3RiaXRzCisgICAgICAgICAgICAgICB2 YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0 cmVlcy5oCisgICAgICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3 aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovCiAgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9 IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUgY29uc3Qg RkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvbnN0 IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0g OTsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoTEVOUywgc3RhdGUtPmxlbnMsIHN0 YXRlLT5ubGVuLCAmKHN0YXRlLT5uZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTg3Niw3ICsxMDI3LDcgQEAK ICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChjb2RlIGNv bnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAo Y29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmRpc3Ri aXRzID0gNjsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLT5s ZW5zICsgc3RhdGUtPm5sZW4sIHN0YXRlLT5uZGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmKHN0YXRlLT5uZXh0KSwgJihzdGF0ZS0+ZGlzdGJpdHMpLCBzdGF0ZS0+d29yayk7CkBA IC04ODYsOTQgKzEwMzcsMTEwIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICB9CiAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIGNvZGVzIG9r XG4iKSk7CisgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTl87CisgICAgICAgICAgICBpZiAo Zmx1c2ggPT0gWl9UUkVFUykgZ290byBpbmZfbGVhdmU7CisgICAgICAgIGNhc2UgTEVOXzoKICAg ICAgICAgICAgIHN0YXRlLT5tb2RlID0gTEVOOwogICAgICAgICBjYXNlIExFTjoKICAgICAgICAg ICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHsKICAgICAgICAgICAgICAgICBSRVNU T1JFKCk7CiAgICAgICAgICAgICAgICAgaW5mbGF0ZV9mYXN0KHN0cm0sIG91dCk7CiAgICAgICAg ICAgICAgICAgTE9BRCgpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBUWVBF KQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+YmFjayA9IC0xOwogICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUtPmJhY2sgPSAwOwogICAg ICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+bGVuY29k ZVtCSVRTKHN0YXRlLT5sZW5iaXRzKV07Ci0gICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCko dGhpcy5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUt PmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOworICAgICAgICAgICAgICAgIGlmICgodW5z aWduZWQpKGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgUFVMTEJZ VEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYmICh0aGlzLm9w ICYgMHhmMCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGxhc3QgPSB0aGlzOworICAgICAgICAg ICAgaWYgKGhlcmUub3AgJiYgKGhlcmUub3AgJiAweGYwKSA9PSAwKSB7CisgICAgICAgICAgICAg ICAgbGFzdCA9IGhlcmU7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAg ICAgICAgICB0aGlzID0gc3RhdGUtPmxlbmNvZGVbbGFzdC52YWwgKworICAgICAgICAgICAgICAg ICAgICBoZXJlID0gc3RhdGUtPmxlbmNvZGVbbGFzdC52YWwgKwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApID4+IGxhc3QuYml0cyldOwotICAg ICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyB0aGlzLmJpdHMpIDw9 IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJp dHMgKyBoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBQVUxM QllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBEUk9QQklUUyhsYXN0 LmJpdHMpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iYWNrICs9IGxhc3QuYml0czsKICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAgICBz dGF0ZS0+bGVuZ3RoID0gKHVuc2lnbmVkKXRoaXMudmFsOwotICAgICAgICAgICAgaWYgKChpbnQp KHRoaXMub3ApID09IDApIHsKLSAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIHRoaXMu dmFsID49IDB4MjAgJiYgdGhpcy52YWwgPCAweDdmID8KKyAgICAgICAgICAgIERST1BCSVRTKGhl cmUuYml0cyk7CisgICAgICAgICAgICBzdGF0ZS0+YmFjayArPSBoZXJlLmJpdHM7CisgICAgICAg ICAgICBzdGF0ZS0+bGVuZ3RoID0gKHVuc2lnbmVkKWhlcmUudmFsOworICAgICAgICAgICAgaWYg KChpbnQpKGhlcmUub3ApID09IDApIHsKKyAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIs IGhlcmUudmFsID49IDB4MjAgJiYgaGVyZS52YWwgPCAweDdmID8KICAgICAgICAgICAgICAgICAg ICAgICAgICJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgJyVjJ1xuIiA6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgdGhpcy52YWwp KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHgl MDJ4XG4iLCBoZXJlLnZhbCkpOwogICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTElUOwog ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRo aXMub3AgJiAzMikgeworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiAzMikgewogICAgICAgICAg ICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZW5kIG9mIGJsb2NrXG4i KSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJhY2sgPSAtMTsKICAgICAgICAgICAgICAgICBz dGF0ZS0+bW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAodGhpcy5vcCAmIDY0KSB7CisgICAgICAgICAgICBpZiAoaGVyZS5v cCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBs aXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsK ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRl LT5leHRyYSA9ICh1bnNpZ25lZCkodGhpcy5vcCkgJiAxNTsKKyAgICAgICAgICAgIHN0YXRlLT5l eHRyYSA9ICh1bnNpZ25lZCkoaGVyZS5vcCkgJiAxNTsKICAgICAgICAgICAgIHN0YXRlLT5tb2Rl ID0gTEVORVhUOwogICAgICAgICBjYXNlIExFTkVYVDoKICAgICAgICAgICAgIGlmIChzdGF0ZS0+ ZXh0cmEpIHsKICAgICAgICAgICAgICAgICBORUVEQklUUyhzdGF0ZS0+ZXh0cmEpOwogICAgICAg ICAgICAgICAgIHN0YXRlLT5sZW5ndGggKz0gQklUUyhzdGF0ZS0+ZXh0cmEpOwogICAgICAgICAg ICAgICAgIERST1BCSVRTKHN0YXRlLT5leHRyYSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJh Y2sgKz0gc3RhdGUtPmV4dHJhOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgVHJhY2V2digo c3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBsZW5ndGggJXVcbiIsIHN0YXRlLT5sZW5ndGgpKTsK KyAgICAgICAgICAgIHN0YXRlLT53YXMgPSBzdGF0ZS0+bGVuZ3RoOwogICAgICAgICAgICAgc3Rh dGUtPm1vZGUgPSBESVNUOwogICAgICAgICBjYXNlIERJU1Q6CiAgICAgICAgICAgICBmb3IgKDs7 KSB7Ci0gICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5kaXN0Y29kZVtCSVRTKHN0YXRlLT5k aXN0Yml0cyldOwotICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0g Yml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5kaXN0Y29kZVtCSVRT KHN0YXRlLT5kaXN0Yml0cyldOworICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGhlcmUu Yml0cykgPD0gYml0cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmICgodGhpcy5vcCAmIDB4ZjApID09IDApIHsKLSAgICAg ICAgICAgICAgICBsYXN0ID0gdGhpczsKKyAgICAgICAgICAgIGlmICgoaGVyZS5vcCAmIDB4ZjAp ID09IDApIHsKKyAgICAgICAgICAgICAgICBsYXN0ID0gaGVyZTsKICAgICAgICAgICAgICAgICBm b3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+ZGlzdGNvZGVbbGFz dC52YWwgKworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmRpc3Rjb2RlW2xhc3Qu dmFsICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUUyhsYXN0LmJpdHMgKyBsYXN0 Lm9wKSA+PiBsYXN0LmJpdHMpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCko bGFzdC5iaXRzICsgdGhpcy5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgaGVyZS5iaXRzKSA8PSBiaXRzKSBicmVhazsK ICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgRFJPUEJJVFMobGFzdC5iaXRzKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ YmFjayArPSBsYXN0LmJpdHM7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBEUk9QQklUUyh0 aGlzLmJpdHMpOwotICAgICAgICAgICAgaWYgKHRoaXMub3AgJiA2NCkgeworICAgICAgICAgICAg RFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgIHN0YXRlLT5iYWNrICs9IGhlcmUuYml0 czsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgNjQpIHsKICAgICAgICAgICAgICAgICBzdHJt LT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOwogICAgICAgICAgICAgICAg IHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg fQotICAgICAgICAgICAgc3RhdGUtPm9mZnNldCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKLSAgICAg ICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkodGhpcy5vcCkgJiAxNTsKKyAgICAgICAg ICAgIHN0YXRlLT5vZmZzZXQgPSAodW5zaWduZWQpaGVyZS52YWw7CisgICAgICAgICAgICBzdGF0 ZS0+ZXh0cmEgPSAodW5zaWduZWQpKGhlcmUub3ApICYgMTU7CiAgICAgICAgICAgICBzdGF0ZS0+ bW9kZSA9IERJU1RFWFQ7CiAgICAgICAgIGNhc2UgRElTVEVYVDoKICAgICAgICAgICAgIGlmIChz dGF0ZS0+ZXh0cmEpIHsKICAgICAgICAgICAgICAgICBORUVEQklUUyhzdGF0ZS0+ZXh0cmEpOwog ICAgICAgICAgICAgICAgIHN0YXRlLT5vZmZzZXQgKz0gQklUUyhzdGF0ZS0+ZXh0cmEpOwogICAg ICAgICAgICAgICAgIERST1BCSVRTKHN0YXRlLT5leHRyYSk7CisgICAgICAgICAgICAgICAgc3Rh dGUtPmJhY2sgKz0gc3RhdGUtPmV4dHJhOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg KHN0YXRlLT5vZmZzZXQgPiBzdGF0ZS0+d2hhdmUgKyBvdXQgLSBsZWZ0KSB7CisjaWZkZWYgSU5G TEFURV9TVFJJQ1QKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+b2Zmc2V0ID4gc3RhdGUtPmRtYXgp IHsKICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNl IHRvbyBmYXIgYmFjayI7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIFRy YWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIHN0YXRlLT5v ZmZzZXQpKTsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTUFUQ0g7CiAgICAgICAgIGNhc2Ug TUFUQ0g6CkBAIC05ODEsMTIgKzExNDgsMzIgQEAKICAgICAgICAgICAgIGNvcHkgPSBvdXQgLSBs ZWZ0OwogICAgICAgICAgICAgaWYgKHN0YXRlLT5vZmZzZXQgPiBjb3B5KSB7ICAgICAgICAgLyog Y29weSBmcm9tIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+b2Zmc2V0 IC0gY29weTsKLSAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLT53cml0ZSkgewotICAg ICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLT53cml0ZTsKKyAgICAgICAgICAgICAgICBp ZiAoY29weSA+IHN0YXRlLT53aGF2ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUt PnNhbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImlu dmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIH0KKyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9P RkFSX0FSUlIKKyAgICAgICAgICAgICAgICAgICAgVHJhY2UoKHN0ZGVyciwgImluZmxhdGUuYyB0 b28gZmFyXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIGNvcHkgLT0gc3RhdGUtPndoYXZlOwor ICAgICAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLT5sZW5ndGgpIGNvcHkgPSBzdGF0 ZS0+bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIGNvcHkgPSBs ZWZ0OworICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IGNvcHk7CisgICAgICAgICAgICAgICAg ICAgIHN0YXRlLT5sZW5ndGggLT0gY29weTsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAg ICAgICAgICAgICAgICAgICAgICAgKnB1dCsrID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSB3 aGlsZSAoLS1jb3B5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5sZW5ndGggPT0g MCkgc3RhdGUtPm1vZGUgPSBMRU47CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlm CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUtPndu ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHkgLT0gc3RhdGUtPnduZXh0OwogICAgICAg ICAgICAgICAgICAgICBmcm9tID0gc3RhdGUtPndpbmRvdyArIChzdGF0ZS0+d3NpemUgLSBjb3B5 KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgICAgICBmcm9tID0gc3RhdGUtPndpbmRvdyArIChzdGF0ZS0+d3JpdGUgLSBjb3B5KTsKKyAg ICAgICAgICAgICAgICAgICAgZnJvbSA9IHN0YXRlLT53aW5kb3cgKyAoc3RhdGUtPnduZXh0IC0g Y29weSk7CiAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS0+bGVuZ3RoKSBjb3B5ID0g c3RhdGUtPmxlbmd0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgZnJvbSBvdXRwdXQgKi8KQEAgLTEwMTMsMTUg KzEyMDAsMTUgQEAKICAgICAgICAgICAgICAgICBvdXQgLT0gbGVmdDsKICAgICAgICAgICAgICAg ICBzdHJtLT50b3RhbF9vdXQgKz0gb3V0OwogICAgICAgICAgICAgICAgIHN0YXRlLT50b3RhbCAr PSBvdXQ7Ci0gICAgICAgICAgICAgICAgaWYgKG91dCkKKyAgICAgICAgICAgICAgICBpZiAoKHN0 YXRlLT53cmFwICYgNCkgJiYgb3V0KQogICAgICAgICAgICAgICAgICAgICBzdHJtLT5hZGxlciA9 IHN0YXRlLT5jaGVjayA9CiAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUoc3RhdGUtPmNo ZWNrLCBwdXQgLSBvdXQsIG91dCk7CiAgICAgICAgICAgICAgICAgb3V0ID0gbGVmdDsKLSAgICAg ICAgICAgICAgICBpZiAoKAorICAgICAgICAgICAgICAgIGlmICgoc3RhdGUtPndyYXAgJiA0KSAm JiAoCiAjaWZkZWYgR1VOWklQCiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZmxhZ3MgPyBo b2xkIDoKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgUkVWRVJTRShob2xkKSkgIT0gc3Rh dGUtPmNoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICBaU1dBUDMyKGhvbGQpKSAhPSBzdGF0 ZS0+Y2hlY2spIHsKICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW5j b3JyZWN0IGRhdGEgY2hlY2siOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJB RDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDY1LDggKzEyNTIsOSBAQAogICAg ICAqLwogICBpbmZfbGVhdmU6CiAgICAgUkVTVE9SRSgpOwotICAgIGlmIChzdGF0ZS0+d3NpemUg fHwgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgJiYgb3V0ICE9IHN0cm0tPmF2YWlsX291dCkpCi0gICAg ICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgb3V0KSkgeworICAgIGlmIChzdGF0ZS0+d3NpemUg fHwgKG91dCAhPSBzdHJtLT5hdmFpbF9vdXQgJiYgc3RhdGUtPm1vZGUgPCBCQUQgJiYKKyAgICAg ICAgICAgIChzdGF0ZS0+bW9kZSA8IENIRUNLIHx8IGZsdXNoICE9IFpfRklOSVNIKSkpCisgICAg ICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS0+bmV4dF9vdXQsIG91dCAtIHN0cm0tPmF2 YWlsX291dCkpIHsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTUVNOwogICAgICAgICAgICAg cmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICB9CkBAIC0xMDc1LDExICsxMjYzLDEyIEBACiAg ICAgc3RybS0+dG90YWxfaW4gKz0gaW47CiAgICAgc3RybS0+dG90YWxfb3V0ICs9IG91dDsKICAg ICBzdGF0ZS0+dG90YWwgKz0gb3V0OwotICAgIGlmIChzdGF0ZS0+d3JhcCAmJiBvdXQpCisgICAg aWYgKChzdGF0ZS0+d3JhcCAmIDQpICYmIG91dCkKICAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0 ZS0+Y2hlY2sgPQogICAgICAgICAgICAgVVBEQVRFKHN0YXRlLT5jaGVjaywgc3RybS0+bmV4dF9v dXQgLSBvdXQsIG91dCk7Ci0gICAgc3RybS0+ZGF0YV90eXBlID0gc3RhdGUtPmJpdHMgKyAoc3Rh dGUtPmxhc3QgPyA2NCA6IDApICsKLSAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1vZGUg PT0gVFlQRSA/IDEyOCA6IDApOworICAgIHN0cm0tPmRhdGFfdHlwZSA9IChpbnQpc3RhdGUtPmJp dHMgKyAoc3RhdGUtPmxhc3QgPyA2NCA6IDApICsKKyAgICAgICAgICAgICAgICAgICAgICAoc3Rh dGUtPm1vZGUgPT0gVFlQRSA/IDEyOCA6IDApICsKKyAgICAgICAgICAgICAgICAgICAgICAoc3Rh dGUtPm1vZGUgPT0gTEVOXyB8fCBzdGF0ZS0+bW9kZSA9PSBDT1BZXyA/IDI1NiA6IDApOwogICAg IGlmICgoKGluID09IDAgJiYgb3V0ID09IDApIHx8IGZsdXNoID09IFpfRklOSVNIKSAmJiByZXQg PT0gWl9PSykKICAgICAgICAgcmV0ID0gWl9CVUZfRVJST1I7CiAgICAgcmV0dXJuIHJldDsKQEAg LTEwODksNyArMTI3OCw3IEBACiB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0 ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0 ZSA9PSBaX05VTEwgfHwgc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorICAgIGlmIChpbmZs YXRlU3RhdGVDaGVjayhzdHJtKSkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAg IHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIGlm IChzdGF0ZS0+d2luZG93ICE9IFpfTlVMTCkgWkZSRUUoc3RybSwgc3RhdGUtPndpbmRvdyk7CkBA IC0xMDk5LDQ0ICsxMjg4LDgxIEBACiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKK2ludCBaRVhQT1JU IGluZmxhdGVHZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCit6X3N0 cmVhbXAgc3RybTsKK0J5dGVmICpkaWN0aW9uYXJ5OwordUludCAqZGljdExlbmd0aDsKK3sKKyAg ICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgLyogY2hlY2sgc3RhdGUg Ki8KKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJP UjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsK KworICAgIC8qIGNvcHkgZGljdGlvbmFyeSAqLworICAgIGlmIChzdGF0ZS0+d2hhdmUgJiYgZGlj dGlvbmFyeSAhPSBaX05VTEwpIHsKKyAgICAgICAgem1lbWNweShkaWN0aW9uYXJ5LCBzdGF0ZS0+ d2luZG93ICsgc3RhdGUtPnduZXh0LAorICAgICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSAtIHN0 YXRlLT53bmV4dCk7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSArIHN0YXRlLT53aGF2ZSAt IHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2luZG93LCBzdGF0ZS0+d25l eHQpOworICAgIH0KKyAgICBpZiAoZGljdExlbmd0aCAhPSBaX05VTEwpCisgICAgICAgICpkaWN0 TGVuZ3RoID0gc3RhdGUtPndoYXZlOworICAgIHJldHVybiBaX09LOworfQorCiBpbnQgWkVYUE9S VCBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQogel9z dHJlYW1wIHN0cm07CiBjb25zdCBCeXRlZiAqZGljdGlvbmFyeTsKIHVJbnQgZGljdExlbmd0aDsK IHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGxv bmcgaWQ7CisgICAgdW5zaWduZWQgbG9uZyBkaWN0aWQ7CisgICAgaW50IHJldDsKIAogICAgIC8q IGNoZWNrIHN0YXRlICovCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09 IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVj ayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZs YXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBESUNU KSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKHN0YXRlLT53cmFwICE9IDAgJiYgc3Rh dGUtPm1vZGUgIT0gRElDVCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCi0gICAg LyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBpZCAqLwotICAgIGlkID0gYWRsZXIzMigw TCwgWl9OVUxMLCAwKTsKLSAgICBpZCA9IGFkbGVyMzIoaWQsIGRpY3Rpb25hcnksIGRpY3RMZW5n dGgpOwotICAgIGlmIChpZCAhPSBzdGF0ZS0+Y2hlY2spIHJldHVybiBaX0RBVEFfRVJST1I7Cisg ICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBpZGVudGlmaWVyICovCisgICAgaWYg KHN0YXRlLT5tb2RlID09IERJQ1QpIHsKKyAgICAgICAgZGljdGlkID0gYWRsZXIzMigwTCwgWl9O VUxMLCAwKTsKKyAgICAgICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRp Y3RMZW5ndGgpOworICAgICAgICBpZiAoZGljdGlkICE9IHN0YXRlLT5jaGVjaykKKyAgICAgICAg ICAgIHJldHVybiBaX0RBVEFfRVJST1I7CisgICAgfQogCi0gICAgLyogY29weSBkaWN0aW9uYXJ5 IHRvIHdpbmRvdyAqLwotICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS0+YXZhaWxfb3V0 KSkgeworICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgdXNpbmcgdXBkYXRld2luZG93 KCksIHdoaWNoIHdpbGwgYW1lbmQgdGhlCisgICAgICAgZXhpc3RpbmcgZGljdGlvbmFyeSBpZiBh cHByb3ByaWF0ZSAqLworICAgIHJldCA9IHVwZGF0ZXdpbmRvdyhzdHJtLCBkaWN0aW9uYXJ5ICsg ZGljdExlbmd0aCwgZGljdExlbmd0aCk7CisgICAgaWYgKHJldCkgewogICAgICAgICBzdGF0ZS0+ bW9kZSA9IE1FTTsKICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIH0KLSAgICBpZiAo ZGljdExlbmd0aCA+IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5k b3csIGRpY3Rpb25hcnkgKyBkaWN0TGVuZ3RoIC0gc3RhdGUtPndzaXplLAotICAgICAgICAgICAg ICAgIHN0YXRlLT53c2l6ZSk7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsK LSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRl LT53c2l6ZSAtIGRpY3RMZW5ndGgsIGRpY3Rpb25hcnksCi0gICAgICAgICAgICAgICAgZGljdExl bmd0aCk7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IGRpY3RMZW5ndGg7Ci0gICAgfQogICAgIHN0 YXRlLT5oYXZlZGljdCA9IDE7CiAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGRpY3Rp b25hcnkgc2V0XG4iKSk7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKK2ludCBaRVhQT1JUIGluZmxh dGVHZXRIZWFkZXIoc3RybSwgaGVhZCkKK3pfc3RyZWFtcCBzdHJtOworZ3pfaGVhZGVycCBoZWFk OworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICAvKiBjaGVj ayBzdGF0ZSAqLworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RS RUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0t PnN0YXRlOworICAgIGlmICgoc3RhdGUtPndyYXAgJiAyKSA9PSAwKSByZXR1cm4gWl9TVFJFQU1f RVJST1I7CisKKyAgICAvKiBzYXZlIGhlYWRlciBzdHJ1Y3R1cmUgKi8KKyAgICBzdGF0ZS0+aGVh ZCA9IGhlYWQ7CisgICAgaGVhZC0+ZG9uZSA9IDA7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKIC8q CiAgICBTZWFyY2ggYnVmWzAuLmxlbi0xXSBmb3IgdGhlIHBhdHRlcm46IDAsIDAsIDB4ZmYsIDB4 ZmYuICBSZXR1cm4gd2hlbiBmb3VuZAogICAgb3Igd2hlbiBvdXQgb2YgaW5wdXQuICBXaGVuIGNh bGxlZCwgKmhhdmUgaXMgdGhlIG51bWJlciBvZiBwYXR0ZXJuIGJ5dGVzCkBAIC0xMTUwLDcgKzEz NzYsNyBAQAogICovCiBsb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoKGhhdmUsIGJ1ZiwgbGVuKQog dW5zaWduZWQgRkFSICpoYXZlOwotdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKK2NvbnN0IHVuc2ln bmVkIGNoYXIgRkFSICpidWY7CiB1bnNpZ25lZCBsZW47CiB7CiAgICAgdW5zaWduZWQgZ290OwpA QCAtMTE4MCw3ICsxNDA2LDcgQEAKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRl OwogCiAgICAgLyogY2hlY2sgcGFyYW1ldGVycyAqLwotICAgIGlmIChzdHJtID09IFpfTlVMTCB8 fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAo aW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0 ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKICAgICBpZiAoc3Ry bS0+YXZhaWxfaW4gPT0gMCAmJiBzdGF0ZS0+Yml0cyA8IDgpIHJldHVybiBaX0JVRl9FUlJPUjsK IApAQCAtMTIyNyw3ICsxNDUzLDcgQEAKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIg KnN0YXRlOwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVM TCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJt KSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0 YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBTVE9SRUQg JiYgc3RhdGUtPmJpdHMgPT0gMDsKIH0KQEAgLTEyMzksMTAgKzE0NjUsMTAgQEAKICAgICBzdHJ1 Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZB UiAqY29weTsKICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OworICAgIHVuc2lnbmVkIHdz aXplOwogCiAgICAgLyogY2hlY2sgaW5wdXQgKi8KLSAgICBpZiAoZGVzdCA9PSBaX05VTEwgfHwg c291cmNlID09IFpfTlVMTCB8fCBzb3VyY2UtPnN0YXRlID09IFpfTlVMTCB8fAotICAgICAgICBz b3VyY2UtPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwIHx8IHNvdXJjZS0+emZyZWUgPT0gKGZyZWVf ZnVuYykwKQorICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzb3VyY2UpIHx8IGRlc3QgPT0gWl9O VUxMKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RhdGUgPSAoc3RydWN0 IGluZmxhdGVfc3RhdGUgRkFSICopc291cmNlLT5zdGF0ZTsKIApAQCAtMTI2MSwxNCArMTQ4Nyw3 NSBAQAogICAgIH0KIAogICAgIC8qIGNvcHkgc3RhdGUgKi8KLSAgICAqZGVzdCA9ICpzb3VyY2U7 Ci0gICAgKmNvcHkgPSAqc3RhdGU7Ci0gICAgY29weS0+bGVuY29kZSA9IGNvcHktPmNvZGVzICsg KHN0YXRlLT5sZW5jb2RlIC0gc3RhdGUtPmNvZGVzKTsKLSAgICBjb3B5LT5kaXN0Y29kZSA9IGNv cHktPmNvZGVzICsgKHN0YXRlLT5kaXN0Y29kZSAtIHN0YXRlLT5jb2Rlcyk7CisgICAgem1lbWNw eSgodm9pZHBmKWRlc3QsICh2b2lkcGYpc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6 bWVtY3B5KCh2b2lkcGYpY29weSwgKHZvaWRwZilzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRl X3N0YXRlKSk7CisgICAgY29weS0+c3RybSA9IGRlc3Q7CisgICAgaWYgKHN0YXRlLT5sZW5jb2Rl ID49IHN0YXRlLT5jb2RlcyAmJgorICAgICAgICBzdGF0ZS0+bGVuY29kZSA8PSBzdGF0ZS0+Y29k ZXMgKyBFTk9VR0ggLSAxKSB7CisgICAgICAgIGNvcHktPmxlbmNvZGUgPSBjb3B5LT5jb2RlcyAr IChzdGF0ZS0+bGVuY29kZSAtIHN0YXRlLT5jb2Rlcyk7CisgICAgICAgIGNvcHktPmRpc3Rjb2Rl ID0gY29weS0+Y29kZXMgKyAoc3RhdGUtPmRpc3Rjb2RlIC0gc3RhdGUtPmNvZGVzKTsKKyAgICB9 CiAgICAgY29weS0+bmV4dCA9IGNvcHktPmNvZGVzICsgKHN0YXRlLT5uZXh0IC0gc3RhdGUtPmNv ZGVzKTsKLSAgICBpZiAod2luZG93ICE9IFpfTlVMTCkKLSAgICAgICAgem1lbWNweSh3aW5kb3cs IHN0YXRlLT53aW5kb3csIDFVIDw8IHN0YXRlLT53Yml0cyk7CisgICAgaWYgKHdpbmRvdyAhPSBa X05VTEwpIHsKKyAgICAgICAgd3NpemUgPSAxVSA8PCBzdGF0ZS0+d2JpdHM7CisgICAgICAgIHpt ZW1jcHkod2luZG93LCBzdGF0ZS0+d2luZG93LCB3c2l6ZSk7CisgICAgfQogICAgIGNvcHktPndp bmRvdyA9IHdpbmRvdzsKLSAgICBkZXN0LT5zdGF0ZSA9ICh2b2lkcGYpY29weTsKKyAgICBkZXN0 LT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopY29weTsKICAgICByZXR1cm4g Wl9PSzsKIH0KKworaW50IFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZShzdHJtLCBzdWJ2ZXJ0KQor el9zdHJlYW1wIHN0cm07CitpbnQgc3VidmVydDsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0 ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4g Wl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICop c3RybS0+c3RhdGU7CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZB Ul9BUlJSCisgICAgc3RhdGUtPnNhbmUgPSAhc3VidmVydDsKKyAgICByZXR1cm4gWl9PSzsKKyNl bHNlCisgICAgKHZvaWQpc3VidmVydDsKKyAgICBzdGF0ZS0+c2FuZSA9IDE7CisgICAgcmV0dXJu IFpfREFUQV9FUlJPUjsKKyNlbmRpZgorfQorCitpbnQgWkVYUE9SVCBpbmZsYXRlVmFsaWRhdGUo c3RybSwgY2hlY2spCit6X3N0cmVhbXAgc3RybTsKK2ludCBjaGVjazsKK3sKKyAgICBzdHJ1Y3Qg aW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0 cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVf c3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgaWYgKGNoZWNrKQorICAgICAgICBzdGF0ZS0+ d3JhcCB8PSA0OworICAgIGVsc2UKKyAgICAgICAgc3RhdGUtPndyYXAgJj0gfjQ7CisgICAgcmV0 dXJuIFpfT0s7Cit9CisKK2xvbmcgWkVYUE9SVCBpbmZsYXRlTWFyayhzdHJtKQorel9zdHJlYW1w IHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlm IChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkKKyAgICAgICAgcmV0dXJuIC0oMUwgPDwgMTYpOwor ICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAg IHJldHVybiAobG9uZykoKCh1bnNpZ25lZCBsb25nKSgobG9uZylzdGF0ZS0+YmFjaykpIDw8IDE2 KSArCisgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBDT1BZID8gc3RhdGUtPmxlbmd0aCA6CisgICAg ICAgICAgICAoc3RhdGUtPm1vZGUgPT0gTUFUQ0ggPyBzdGF0ZS0+d2FzIC0gc3RhdGUtPmxlbmd0 aCA6IDApKTsKK30KKwordW5zaWduZWQgbG9uZyBaRVhQT1JUIGluZmxhdGVDb2Rlc1VzZWQoc3Ry bSkKK3pfc3RyZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3Rh dGU7CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gKHVuc2lnbmVkIGxv bmcpLTE7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3Rh dGU7CisgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShzdGF0ZS0+bmV4dCAtIHN0YXRlLT5jb2Rl cyk7Cit9CmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9n cy96bGliL2luZmxhdGUuaAotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL2luZmxhdGUuaAlTdW4g TWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZs YXRlLmgJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0xLDUgKzEsNSBAQAogLyog aW5mbGF0ZS5oIC0tIGludGVybmFsIGluZmxhdGUgc3RhdGUgZGVmaW5pdGlvbgotICogQ29weXJp Z2h0IChDKSAxOTk1LTIwMDMgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTYg TWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNl ZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE4LDggKzE4LDcgQEAKIAog LyogUG9zc2libGUgaW5mbGF0ZSBtb2RlcyBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscyAqLwogdHlw ZWRlZiBlbnVtIHsKLSAgICBIRUFELCAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtYWdpYyBoZWFk ZXIgKi8KLSNpZmRlZiBHVU5aSVAKKyAgICBIRUFEID0gMTYxODAsICAgLyogaTogd2FpdGluZyBm b3IgbWFnaWMgaGVhZGVyICovCiAgICAgRkxBR1MsICAgICAgLyogaTogd2FpdGluZyBmb3IgbWV0 aG9kIGFuZCBmbGFncyAoZ3ppcCkgKi8KICAgICBUSU1FLCAgICAgICAvKiBpOiB3YWl0aW5nIGZv ciBtb2RpZmljYXRpb24gdGltZSAoZ3ppcCkgKi8KICAgICBPUywgICAgICAgICAvKiBpOiB3YWl0 aW5nIGZvciBleHRyYSBmbGFncyBhbmQgb3BlcmF0aW5nIHN5c3RlbSAoZ3ppcCkgKi8KQEAgLTI4 LDI2ICsyNywyNSBAQAogICAgIE5BTUUsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGVuZCBvZiBm aWxlIG5hbWUgKGd6aXApICovCiAgICAgQ09NTUVOVCwgICAgLyogaTogd2FpdGluZyBmb3IgZW5k IG9mIGNvbW1lbnQgKGd6aXApICovCiAgICAgSENSQywgICAgICAgLyogaTogd2FpdGluZyBmb3Ig aGVhZGVyIGNyYyAoZ3ppcCkgKi8KLSNlbmRpZgogICAgIERJQ1RJRCwgICAgIC8qIGk6IHdhaXRp bmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sgdmFsdWUgKi8KICAgICBESUNULCAgICAgICAvKiB3YWl0 aW5nIGZvciBpbmZsYXRlU2V0RGljdGlvbmFyeSgpIGNhbGwgKi8KICAgICAgICAgVFlQRSwgICAg ICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1mbGFnIGJpdCAq LwogICAgICAgICBUWVBFRE8sICAgICAvKiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0 IGluZmxhdGUgb24gbmV3IGJsb2NrICovCiAgICAgICAgIFNUT1JFRCwgICAgIC8qIGk6IHdhaXRp bmcgZm9yIHN0b3JlZCBzaXplIChsZW5ndGggYW5kIGNvbXBsZW1lbnQpICovCisgICAgICAgIENP UFlfLCAgICAgIC8qIGkvbzogc2FtZSBhcyBDT1BZIGJlbG93LCBidXQgb25seSBmaXJzdCB0aW1l IGluICovCiAgICAgICAgIENPUFksICAgICAgIC8qIGkvbzogd2FpdGluZyBmb3IgaW5wdXQgb3Ig b3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovCiAgICAgICAgIFRBQkxFLCAgICAgIC8qIGk6 IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAqLwogICAgICAgICBMRU5M RU5TLCAgICAvKiBpOiB3YWl0aW5nIGZvciBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi8KICAg ICAgICAgQ09ERUxFTlMsICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBhbmQgZGlzdGFu Y2UgY29kZSBsZW5ndGhzICovCi0gICAgICAgICAgICBMRU4sICAgICAgICAvKiBpOiB3YWl0aW5n IGZvciBsZW5ndGgvbGl0IGNvZGUgKi8KKyAgICAgICAgICAgIExFTl8sICAgICAgIC8qIGk6IHNh bWUgYXMgTEVOIGJlbG93LCBidXQgb25seSBmaXJzdCB0aW1lIGluICovCisgICAgICAgICAgICBM RU4sICAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0L2VvYiBjb2RlICovCiAgICAg ICAgICAgICBMRU5FWFQsICAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGggZXh0cmEgYml0cyAq LwogICAgICAgICAgICAgRElTVCwgICAgICAgLyogaTogd2FpdGluZyBmb3IgZGlzdGFuY2UgY29k ZSAqLwogICAgICAgICAgICAgRElTVEVYVCwgICAgLyogaTogd2FpdGluZyBmb3IgZGlzdGFuY2Ug ZXh0cmEgYml0cyAqLwogICAgICAgICAgICAgTUFUQ0gsICAgICAgLyogbzogd2FpdGluZyBmb3Ig b3V0cHV0IHNwYWNlIHRvIGNvcHkgc3RyaW5nICovCiAgICAgICAgICAgICBMSVQsICAgICAgICAv KiBvOiB3YWl0aW5nIGZvciBvdXRwdXQgc3BhY2UgdG8gd3JpdGUgbGl0ZXJhbCAqLwogICAgIENI RUNLLCAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBjaGVjayB2YWx1ZSAqLwotI2lmZGVm IEdVTlpJUAogICAgIExFTkdUSCwgICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBsZW5ndGgg KGd6aXApICovCi0jZW5kaWYKICAgICBET05FLCAgICAgICAvKiBmaW5pc2hlZCBjaGVjaywgZG9u ZSAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqLwogICAgIEJBRCwgICAgICAgIC8qIGdvdCBh IGRhdGEgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi8KICAgICBNRU0sICAgICAg ICAvKiBnb3QgYW4gaW5mbGF0ZSgpIG1lbW9yeSBlcnJvciAtLSByZW1haW4gaGVyZSB1bnRpbCBy ZXNldCAqLwpAQCAtNTcsMTkgKzU1LDIxIEBACiAvKgogICAgIFN0YXRlIHRyYW5zaXRpb25zIGJl dHdlZW4gYWJvdmUgbW9kZXMgLQogCi0gICAgKG1vc3QgbW9kZXMgY2FuIGdvIHRvIHRoZSBCQUQg b3IgTUVNIG1vZGUgLS0gbm90IHNob3duIGZvciBjbGFyaXR5KQorICAgIChtb3N0IG1vZGVzIGNh biBnbyB0byBCQUQgb3IgTUVNIG9uIGVycm9yIC0tIG5vdCBzaG93biBmb3IgY2xhcml0eSkKIAog ICAgIFByb2Nlc3MgaGVhZGVyOgotICAgICAgICBIRUFEIC0+IChnemlwKSBvciAoemxpYikKLSAg ICAgICAgKGd6aXApIC0+IEZMQUdTIC0+IFRJTUUgLT4gT1MgLT4gRVhMRU4gLT4gRVhUUkEgLT4g TkFNRQotICAgICAgICBOQU1FIC0+IENPTU1FTlQgLT4gSENSQyAtPiBUWVBFCisgICAgICAgIEhF QUQgLT4gKGd6aXApIG9yICh6bGliKSBvciAocmF3KQorICAgICAgICAoZ3ppcCkgLT4gRkxBR1Mg LT4gVElNRSAtPiBPUyAtPiBFWExFTiAtPiBFWFRSQSAtPiBOQU1FIC0+IENPTU1FTlQgLT4KKyAg ICAgICAgICAgICAgICAgIEhDUkMgLT4gVFlQRQogICAgICAgICAoemxpYikgLT4gRElDVElEIG9y IFRZUEUKICAgICAgICAgRElDVElEIC0+IERJQ1QgLT4gVFlQRQorICAgICAgICAocmF3KSAtPiBU WVBFRE8KICAgICBSZWFkIGRlZmxhdGUgYmxvY2tzOgotICAgICAgICAgICAgVFlQRSAtPiBTVE9S RUQgb3IgVEFCTEUgb3IgTEVOIG9yIENIRUNLCi0gICAgICAgICAgICBTVE9SRUQgLT4gQ09QWSAt PiBUWVBFCi0gICAgICAgICAgICBUQUJMRSAtPiBMRU5MRU5TIC0+IENPREVMRU5TIC0+IExFTgot ICAgIFJlYWQgZGVmbGF0ZSBjb2RlczoKKyAgICAgICAgICAgIFRZUEUgLT4gVFlQRURPIC0+IFNU T1JFRCBvciBUQUJMRSBvciBMRU5fIG9yIENIRUNLCisgICAgICAgICAgICBTVE9SRUQgLT4gQ09Q WV8gLT4gQ09QWSAtPiBUWVBFCisgICAgICAgICAgICBUQUJMRSAtPiBMRU5MRU5TIC0+IENPREVM RU5TIC0+IExFTl8KKyAgICAgICAgICAgIExFTl8gLT4gTEVOCisgICAgUmVhZCBkZWZsYXRlIGNv ZGVzIGluIGZpeGVkIG9yIGR5bmFtaWMgYmxvY2s6CiAgICAgICAgICAgICAgICAgTEVOIC0+IExF TkVYVCBvciBMSVQgb3IgVFlQRQogICAgICAgICAgICAgICAgIExFTkVYVCAtPiBESVNUIC0+IERJ U1RFWFQgLT4gTUFUQ0ggLT4gTEVOCiAgICAgICAgICAgICAgICAgTElUIC0+IExFTgpAQCAtNzcs MjAgKzc3LDI1IEBACiAgICAgICAgIENIRUNLIC0+IExFTkdUSCAtPiBET05FCiAgKi8KIAotLyog c3RhdGUgbWFpbnRhaW5lZCBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscy4gIEFwcHJveGltYXRlbHkg N0sgYnl0ZXMuICovCisvKiBTdGF0ZSBtYWludGFpbmVkIGJldHdlZW4gaW5mbGF0ZSgpIGNhbGxz IC0tIGFwcHJveGltYXRlbHkgN0sgYnl0ZXMsIG5vdAorICAgaW5jbHVkaW5nIHRoZSBhbGxvY2F0 ZWQgc2xpZGluZyB3aW5kb3csIHdoaWNoIGlzIHVwIHRvIDMySyBieXRlcy4gKi8KIHN0cnVjdCBp bmZsYXRlX3N0YXRlIHsKKyAgICB6X3N0cmVhbXAgc3RybTsgICAgICAgICAgICAgLyogcG9pbnRl ciBiYWNrIHRvIHRoaXMgemxpYiBzdHJlYW0gKi8KICAgICBpbmZsYXRlX21vZGUgbW9kZTsgICAg ICAgICAgLyogY3VycmVudCBpbmZsYXRlIG1vZGUgKi8KICAgICBpbnQgbGFzdDsgICAgICAgICAg ICAgICAgICAgLyogdHJ1ZSBpZiBwcm9jZXNzaW5nIGxhc3QgYmxvY2sgKi8KLSAgICBpbnQgd3Jh cDsgICAgICAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBm b3IgZ3ppcCAqLworICAgIGludCB3cmFwOyAgICAgICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVl IGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiaXQgMiB0cnVlIHRvIHZhbGlkYXRlIGNoZWNrIHZhbHVlICovCiAgICAgaW50 IGhhdmVkaWN0OyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZGljdGlvbmFyeSBwcm92aWRlZCAq LwogICAgIGludCBmbGFnczsgICAgICAgICAgICAgICAgICAvKiBnemlwIGhlYWRlciBtZXRob2Qg YW5kIGZsYWdzICgwIGlmIHpsaWIpICovCisgICAgdW5zaWduZWQgZG1heDsgICAgICAgICAgICAg IC8qIHpsaWIgaGVhZGVyIG1heCBkaXN0YW5jZSAoSU5GTEFURV9TVFJJQ1QpICovCiAgICAgdW5z aWduZWQgbG9uZyBjaGVjazsgICAgICAgIC8qIHByb3RlY3RlZCBjb3B5IG9mIGNoZWNrIHZhbHVl ICovCiAgICAgdW5zaWduZWQgbG9uZyB0b3RhbDsgICAgICAgIC8qIHByb3RlY3RlZCBjb3B5IG9m IG91dHB1dCBjb3VudCAqLworICAgIGd6X2hlYWRlcnAgaGVhZDsgICAgICAgICAgICAvKiB3aGVy ZSB0byBzYXZlIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uICovCiAgICAgICAgIC8qIHNsaWRpbmcg d2luZG93ICovCiAgICAgdW5zaWduZWQgd2JpdHM7ICAgICAgICAgICAgIC8qIGxvZyBiYXNlIDIg b2YgcmVxdWVzdGVkIHdpbmRvdyBzaXplICovCiAgICAgdW5zaWduZWQgd3NpemU7ICAgICAgICAg ICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqLwogICAgIHVu c2lnbmVkIHdoYXZlOyAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICov Ci0gICAgdW5zaWduZWQgd3JpdGU7ICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAq LworICAgIHVuc2lnbmVkIHduZXh0OyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXgg Ki8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93OyAgLyogYWxsb2NhdGVkIHNsaWRpbmcg d2luZG93LCBpZiBuZWVkZWQgKi8KICAgICAgICAgLyogYml0IGFjY3VtdWxhdG9yICovCiAgICAg dW5zaWduZWQgbG9uZyBob2xkOyAgICAgICAgIC8qIGlucHV0IGJpdCBhY2N1bXVsYXRvciAqLwpA QCAtMTE0LDQgKzExOSw3IEBACiAgICAgdW5zaWduZWQgc2hvcnQgbGVuc1szMjBdOyAgIC8qIHRl bXBvcmFyeSBzdG9yYWdlIGZvciBjb2RlIGxlbmd0aHMgKi8KICAgICB1bnNpZ25lZCBzaG9ydCB3 b3JrWzI4OF07ICAgLyogd29yayBhcmVhIGZvciBjb2RlIHRhYmxlIGJ1aWxkaW5nICovCiAgICAg Y29kZSBjb2Rlc1tFTk9VR0hdOyAgICAgICAgIC8qIHNwYWNlIGZvciBjb2RlIHRhYmxlcyAqLwor ICAgIGludCBzYW5lOyAgICAgICAgICAgICAgICAgICAvKiBpZiBmYWxzZSwgYWxsb3cgaW52YWxp ZCBkaXN0YW5jZSB0b28gZmFyICovCisgICAgaW50IGJhY2s7ICAgICAgICAgICAgICAgICAgIC8q IGJpdHMgYmFjayBvZiBsYXN0IHVucHJvY2Vzc2VkIGxlbmd0aC9saXQgKi8KKyAgICB1bnNpZ25l ZCB3YXM7ICAgICAgICAgICAgICAgLyogaW5pdGlhbCBsZW5ndGggb2YgbWF0Y2ggKi8KIH07CmRp ZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL2lu ZnRyZWVzLmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZ0cmVlcy5jCVN1biBNYXIgMDgg MjI6MDA6MjMgMjAyMCArMDEwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2luZnRyZWVzLmMJ U3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mdHJl ZXMuYyAtLSBnZW5lcmF0ZSBIdWZmbWFuIHRyZWVzIGZvciBlZmZpY2llbnQgZGVjb2RpbmcKLSAq IENvcHlyaWdodCAoQykgMTk5NS0yMDA0IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5 NS0yMDE3IE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQg dXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC05LDcgKzksNyBA QAogI2RlZmluZSBNQVhCSVRTIDE1CiAKIGNvbnN0IGNoYXIgaW5mbGF0ZV9jb3B5cmlnaHRbXSA9 Ci0gICAiIGluZmxhdGUgMS4yLjIgQ29weXJpZ2h0IDE5OTUtMjAwNCBNYXJrIEFkbGVyICI7Cisg ICAiIGluZmxhdGUgMS4yLjExIENvcHlyaWdodCAxOTk1LTIwMTcgTWFyayBBZGxlciAiOwogLyoK ICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVk Z21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3Qu IElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CkBAIC0yOSw3ICsyOSw3IEBACiAgICB0YWJs ZSBpbmRleCBiaXRzLiAgSXQgd2lsbCBkaWZmZXIgaWYgdGhlIHJlcXVlc3QgaXMgZ3JlYXRlciB0 aGFuIHRoZQogICAgbG9uZ2VzdCBjb2RlIG9yIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgc2hvcnRl c3QgY29kZS4KICAqLwotaW50IGluZmxhdGVfdGFibGUodHlwZSwgbGVucywgY29kZXMsIHRhYmxl LCBiaXRzLCB3b3JrKQoraW50IFpMSUJfSU5URVJOQUwgaW5mbGF0ZV90YWJsZSh0eXBlLCBsZW5z LCBjb2RlcywgdGFibGUsIGJpdHMsIHdvcmspCiBjb2RldHlwZSB0eXBlOwogdW5zaWduZWQgc2hv cnQgRkFSICpsZW5zOwogdW5zaWduZWQgY29kZXM7CkBAIC01MCwxMSArNTAsMTEgQEAKICAgICB1 bnNpZ25lZCBmaWxsOyAgICAgICAgICAgICAgLyogaW5kZXggZm9yIHJlcGxpY2F0aW5nIGVudHJp ZXMgKi8KICAgICB1bnNpZ25lZCBsb3c7ICAgICAgICAgICAgICAgLyogbG93IGJpdHMgZm9yIGN1 cnJlbnQgcm9vdCBlbnRyeSAqLwogICAgIHVuc2lnbmVkIG1hc2s7ICAgICAgICAgICAgICAvKiBt YXNrIGZvciBsb3cgcm9vdCBiaXRzICovCi0gICAgY29kZSB0aGlzOyAgICAgICAgICAgICAgICAg IC8qIHRhYmxlIGVudHJ5IGZvciBkdXBsaWNhdGlvbiAqLworICAgIGNvZGUgaGVyZTsgICAgICAg ICAgICAgICAgICAvKiB0YWJsZSBlbnRyeSBmb3IgZHVwbGljYXRpb24gKi8KICAgICBjb2RlIEZB UiAqbmV4dDsgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFibGUgc3BhY2UgaW4gdGFibGUgKi8K ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBGQVIgKmJhc2U7ICAgICAvKiBiYXNlIHZhbHVlIHRh YmxlIHRvIHVzZSAqLwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZBUiAqZXh0cmE7ICAgIC8q IGV4dHJhIGJpdHMgdGFibGUgdG8gdXNlICovCi0gICAgaW50IGVuZDsgICAgICAgICAgICAgICAg ICAgIC8qIHVzZSBiYXNlIGFuZCBleHRyYSBmb3Igc3ltYm9sID4gZW5kICovCisgICAgdW5zaWdu ZWQgbWF0Y2g7ICAgICAgICAgICAgIC8qIHVzZSBiYXNlIGFuZCBleHRyYSBmb3Igc3ltYm9sID49 IG1hdGNoICovCiAgICAgdW5zaWduZWQgc2hvcnQgY291bnRbTUFYQklUUysxXTsgICAgLyogbnVt YmVyIG9mIGNvZGVzIG9mIGVhY2ggbGVuZ3RoICovCiAgICAgdW5zaWduZWQgc2hvcnQgb2Zmc1tN QVhCSVRTKzFdOyAgICAgLyogb2Zmc2V0cyBpbiB0YWJsZSBmb3IgZWFjaCBsZW5ndGggKi8KICAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGJhc2VbMzFdID0geyAvKiBMZW5ndGggY29k ZXMgMjU3Li4yODUgYmFzZSAqLwpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAzNSwgNDMsIDUx LCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMH07CiAg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxleHRbMzFdID0geyAvKiBMZW5ndGggY29k ZXMgMjU3Li4yODUgZXh0cmEgKi8KICAgICAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYs IDE2LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsCi0gICAgICAgIDE5LCAxOSwgMTks IDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCAxOTksIDE5OH07CisgICAg ICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3 NywgMjAyfTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGJhc2VbMzJdID0geyAv KiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCiAgICAgICAgIDEsIDIsIDMsIDQsIDUsIDcs IDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKICAgICAgICAgMjU3LCAz ODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LApAQCAtMTE1 LDE1ICsxMTUsMTUgQEAKICAgICAgICAgaWYgKGNvdW50W21heF0gIT0gMCkgYnJlYWs7CiAgICAg aWYgKHJvb3QgPiBtYXgpIHJvb3QgPSBtYXg7CiAgICAgaWYgKG1heCA9PSAwKSB7ICAgICAgICAg ICAgICAgICAgICAgLyogbm8gc3ltYm9scyB0byBjb2RlIGF0IGFsbCAqLwotICAgICAgICB0aGlz Lm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KLSAg ICAgICAgdGhpcy5iaXRzID0gKHVuc2lnbmVkIGNoYXIpMTsKLSAgICAgICAgdGhpcy52YWwgPSAo dW5zaWduZWQgc2hvcnQpMDsKLSAgICAgICAgKigqdGFibGUpKysgPSB0aGlzOyAgICAgICAgICAg ICAvKiBtYWtlIGEgdGFibGUgdG8gZm9yY2UgYW4gZXJyb3IgKi8KLSAgICAgICAgKigqdGFibGUp KysgPSB0aGlzOworICAgICAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgIC8qIGlu dmFsaWQgY29kZSBtYXJrZXIgKi8KKyAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIp MTsKKyAgICAgICAgaGVyZS52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKKyAgICAgICAgKigqdGFi bGUpKysgPSBoZXJlOyAgICAgICAgICAgICAvKiBtYWtlIGEgdGFibGUgdG8gZm9yY2UgYW4gZXJy b3IgKi8KKyAgICAgICAgKigqdGFibGUpKysgPSBoZXJlOwogICAgICAgICAqYml0cyA9IDE7CiAg ICAgICAgIHJldHVybiAwOyAgICAgLyogbm8gc3ltYm9scywgYnV0IHdhaXQgZm9yIGRlY29kaW5n IHRvIHJlcG9ydCBlcnJvciAqLwogICAgIH0KLSAgICBmb3IgKG1pbiA9IDE7IG1pbiA8PSBNQVhC SVRTOyBtaW4rKykKKyAgICBmb3IgKG1pbiA9IDE7IG1pbiA8IG1heDsgbWluKyspCiAgICAgICAg IGlmIChjb3VudFttaW5dICE9IDApIGJyZWFrOwogICAgIGlmIChyb290IDwgbWluKSByb290ID0g bWluOwogCkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgbGVmdCAtPSBjb3VudFtsZW5dOwog ICAgICAgICBpZiAobGVmdCA8IDApIHJldHVybiAtMTsgICAgICAgIC8qIG92ZXItc3Vic2NyaWJl ZCAqLwogICAgIH0KLSAgICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT0gQ09ERVMgfHwgKGNvZGVz IC0gY291bnRbMF0gIT0gMSkpKQorICAgIGlmIChsZWZ0ID4gMCAmJiAodHlwZSA9PSBDT0RFUyB8 fCBtYXggIT0gMSkpCiAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgLyog aW5jb21wbGV0ZSBzZXQgKi8KIAogICAgIC8qIGdlbmVyYXRlIG9mZnNldHMgaW50byBzeW1ib2wg dGFibGUgZm9yIGVhY2ggbGVuZ3RoIGZvciBzb3J0aW5nICovCkBAIC0xNjYsMTEgKzE2NiwxMCBA QAogICAgICAgIGVudGVyZWQgaW4gdGhlIHRhYmxlcy4KIAogICAgICAgIHVzZWQga2VlcHMgdHJh Y2sgb2YgaG93IG1hbnkgdGFibGUgZW50cmllcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhl Ci0gICAgICAgcHJvdmlkZWQgKnRhYmxlIHNwYWNlLiAgSXQgaXMgY2hlY2tlZCB3aGVuIGEgTEVO UyB0YWJsZSBpcyBiZWluZyBtYWRlCi0gICAgICAgYWdhaW5zdCB0aGUgc3BhY2UgaW4gKnRhYmxl LCBFTk9VR0gsIG1pbnVzIHRoZSBtYXhpbXVtIHNwYWNlIG5lZWRlZCBieQotICAgICAgIHRoZSB3 b3JzdCBjYXNlIGRpc3RhbmNlIGNvZGUsIE1BWEQuICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4s IGJ1dCB0aGUKLSAgICAgICBzdWZmaWNpZW5jeSBvZiBFTk9VR0ggaGFzIG5vdCBiZWVuIHByb3Zl biBleGhhdXN0aXZlbHksIGhlbmNlIHRoZSBjaGVjay4KLSAgICAgICBUaGlzIGFzc3VtZXMgdGhh dCB3aGVuIHR5cGUgPT0gTEVOUywgYml0cyA9PSA5LgorICAgICAgIHByb3ZpZGVkICp0YWJsZSBz cGFjZS4gIEl0IGlzIGNoZWNrZWQgZm9yIExFTlMgYW5kIERJU1QgdGFibGVzIGFnYWluc3QKKyAg ICAgICB0aGUgY29uc3RhbnRzIEVOT1VHSF9MRU5TIGFuZCBFTk9VR0hfRElTVFMgdG8gZ3VhcmQg YWdhaW5zdCBjaGFuZ2VzIGluCisgICAgICAgdGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplIGNv bnN0YW50cy4gIFNlZSB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAorICAgICAgIGZvciBtb3Jl IGluZm9ybWF0aW9uLgogCiAgICAgICAgc3ltIGluY3JlbWVudHMgdGhyb3VnaCBhbGwgc3ltYm9s cywgYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMgd2hlbgogICAgICAgIGFsbCBjb2RlcyBvZiBsZW5n dGggbWF4LCBpLmUuIGFsbCBjb2RlcywgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gIFRoaXMKQEAgLTE4 MiwxOSArMTgxLDE3IEBACiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBDT0RFUzoKICAg ICAgICAgYmFzZSA9IGV4dHJhID0gd29yazsgICAgLyogZHVtbXkgdmFsdWUtLW5vdCB1c2VkICov Ci0gICAgICAgIGVuZCA9IDE5OworICAgICAgICBtYXRjaCA9IDIwOwogICAgICAgICBicmVhazsK ICAgICBjYXNlIExFTlM6CiAgICAgICAgIGJhc2UgPSBsYmFzZTsKLSAgICAgICAgYmFzZSAtPSAy NTc7CiAgICAgICAgIGV4dHJhID0gbGV4dDsKLSAgICAgICAgZXh0cmEgLT0gMjU3OwotICAgICAg ICBlbmQgPSAyNTY7CisgICAgICAgIG1hdGNoID0gMjU3OwogICAgICAgICBicmVhazsKLSAgICBk ZWZhdWx0OiAgICAgICAgICAgIC8qIERJU1RTICovCisgICAgZGVmYXVsdDogICAgLyogRElTVFMg Ki8KICAgICAgICAgYmFzZSA9IGRiYXNlOwogICAgICAgICBleHRyYSA9IGRleHQ7Ci0gICAgICAg IGVuZCA9IC0xOworICAgICAgICBtYXRjaCA9IDA7CiAgICAgfQogCiAgICAgLyogaW5pdGlhbGl6 ZSBzdGF0ZSBmb3IgbG9vcCAqLwpAQCAtMjA5LDMyICsyMDYsMzQgQEAKICAgICBtYXNrID0gdXNl ZCAtIDE7ICAgICAgICAgICAgLyogbWFzayBmb3IgY29tcGFyaW5nIGxvdyAqLwogCiAgICAgLyog Y2hlY2sgYXZhaWxhYmxlIHRhYmxlIHNwYWNlICovCi0gICAgaWYgKHR5cGUgPT0gTEVOUyAmJiB1 c2VkID49IEVOT1VHSCAtIE1BWEQpCisgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVO T1VHSF9MRU5TKSB8fAorICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJ U1RTKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQg bWFrZSB0YWJsZSBlbnRyaWVzICovCiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBjcmVhdGUg dGFibGUgZW50cnkgKi8KLSAgICAgICAgdGhpcy5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAt IGRyb3ApOwotICAgICAgICBpZiAoKGludCkod29ya1tzeW1dKSA8IGVuZCkgewotICAgICAgICAg ICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKTA7Ci0gICAgICAgICAgICB0aGlzLnZhbCA9IHdv cmtbc3ltXTsKKyAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3Ap OworICAgICAgICBpZiAod29ya1tzeW1dICsgMVUgPCBtYXRjaCkgeworICAgICAgICAgICAgaGVy ZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgICAgICAgICBoZXJlLnZhbCA9IHdvcmtbc3lt XTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgoaW50KSh3b3JrW3N5bV0pID4gZW5kKSB7 Ci0gICAgICAgICAgICB0aGlzLm9wID0gKHVuc2lnbmVkIGNoYXIpKGV4dHJhW3dvcmtbc3ltXV0p OwotICAgICAgICAgICAgdGhpcy52YWwgPSBiYXNlW3dvcmtbc3ltXV07CisgICAgICAgIGVsc2Ug aWYgKHdvcmtbc3ltXSA+PSBtYXRjaCkgeworICAgICAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25l ZCBjaGFyKShleHRyYVt3b3JrW3N5bV0gLSBtYXRjaF0pOworICAgICAgICAgICAgaGVyZS52YWwg PSBiYXNlW3dvcmtbc3ltXSAtIG1hdGNoXTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAg ICAgICAgICAgIHRoaXMub3AgPSAodW5zaWduZWQgY2hhcikoMzIgKyA2NCk7ICAgICAgICAgLyog ZW5kIG9mIGJsb2NrICovCi0gICAgICAgICAgICB0aGlzLnZhbCA9IDA7CisgICAgICAgICAgICBo ZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpKDMyICsgNjQpOyAgICAgICAgIC8qIGVuZCBvZiBibG9j ayAqLworICAgICAgICAgICAgaGVyZS52YWwgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgLyog cmVwbGljYXRlIGZvciB0aG9zZSBpbmRpY2VzIHdpdGggbG93IGxlbiBiaXRzIGVxdWFsIHRvIGh1 ZmYgKi8KICAgICAgICAgaW5jciA9IDFVIDw8IChsZW4gLSBkcm9wKTsKICAgICAgICAgZmlsbCA9 IDFVIDw8IGN1cnI7CisgICAgICAgIG1pbiA9IGZpbGw7ICAgICAgICAgICAgICAgICAvKiBzYXZl IG9mZnNldCB0byBuZXh0IHRhYmxlICovCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGZpbGwg LT0gaW5jcjsKLSAgICAgICAgICAgIG5leHRbKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IHRoaXM7 CisgICAgICAgICAgICBuZXh0WyhodWZmID4+IGRyb3ApICsgZmlsbF0gPSBoZXJlOwogICAgICAg ICB9IHdoaWxlIChmaWxsICE9IDApOwogCiAgICAgICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQg dGhlIGxlbi1iaXQgY29kZSBodWZmICovCkBAIC0yNjIsNyArMjYxLDcgQEAKICAgICAgICAgICAg ICAgICBkcm9wID0gcm9vdDsKIAogICAgICAgICAgICAgLyogaW5jcmVtZW50IHBhc3QgbGFzdCB0 YWJsZSAqLwotICAgICAgICAgICAgbmV4dCArPSAxVSA8PCBjdXJyOworICAgICAgICAgICAgbmV4 dCArPSBtaW47ICAgICAgICAgICAgLyogaGVyZSBtaW4gaXMgMSA8PCBjdXJyICovCiAKICAgICAg ICAgICAgIC8qIGRldGVybWluZSBsZW5ndGggb2YgbmV4dCB0YWJsZSAqLwogICAgICAgICAgICAg Y3VyciA9IGxlbiAtIGRyb3A7CkBAIC0yNzYsNyArMjc1LDggQEAKIAogICAgICAgICAgICAgLyog Y2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLwogICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJy OwotICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSCAtIE1BWEQp CisgICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8 CisgICAgICAgICAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykp CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgICAgIC8qIHBvaW50IGVudHJ5 IGluIHJvb3QgdGFibGUgdG8gc3ViLXRhYmxlICovCkBAIC0yODcsMzggKzI4NywxNCBAQAogICAg ICAgICB9CiAgICAgfQogCi0gICAgLyoKLSAgICAgICBGaWxsIGluIHJlc3Qgb2YgdGFibGUgZm9y IGluY29tcGxldGUgY29kZXMuICBUaGlzIGxvb3AgaXMgc2ltaWxhciB0byB0aGUKLSAgICAgICBs b29wIGFib3ZlIGluIGluY3JlbWVudGluZyBodWZmIGZvciB0YWJsZSBpbmRpY2VzLiAgSXQgaXMg YXNzdW1lZCB0aGF0Ci0gICAgICAgbGVuIGlzIGVxdWFsIHRvIGN1cnIgKyBkcm9wLCBzbyB0aGVy ZSBpcyBubyBsb29wIG5lZWRlZCB0byBpbmNyZW1lbnQKLSAgICAgICB0aHJvdWdoIGhpZ2ggaW5k ZXggYml0cy4gIFdoZW4gdGhlIGN1cnJlbnQgc3ViLXRhYmxlIGlzIGZpbGxlZCwgdGhlIGxvb3AK LSAgICAgICBkcm9wcyBiYWNrIHRvIHRoZSByb290IHRhYmxlIHRvIGZpbGwgaW4gYW55IHJlbWFp bmluZyBlbnRyaWVzIHRoZXJlLgotICAgICAqLwotICAgIHRoaXMub3AgPSAodW5zaWduZWQgY2hh cik2NDsgICAgICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLwotICAgIHRoaXMu Yml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKLSAgICB0aGlzLnZhbCA9ICh1bnNp Z25lZCBzaG9ydCkwOwotICAgIHdoaWxlIChodWZmICE9IDApIHsKLSAgICAgICAgLyogd2hlbiBk b25lIHdpdGggc3ViLXRhYmxlLCBkcm9wIGJhY2sgdG8gcm9vdCB0YWJsZSAqLwotICAgICAgICBp ZiAoZHJvcCAhPSAwICYmIChodWZmICYgbWFzaykgIT0gbG93KSB7Ci0gICAgICAgICAgICBkcm9w ID0gMDsKLSAgICAgICAgICAgIGxlbiA9IHJvb3Q7Ci0gICAgICAgICAgICBuZXh0ID0gKnRhYmxl OwotICAgICAgICAgICAgdGhpcy5iaXRzID0gKHVuc2lnbmVkIGNoYXIpbGVuOwotICAgICAgICB9 Ci0KLSAgICAgICAgLyogcHV0IGludmFsaWQgY29kZSBtYXJrZXIgaW4gdGFibGUgKi8KLSAgICAg ICAgbmV4dFtodWZmID4+IGRyb3BdID0gdGhpczsKLQotICAgICAgICAvKiBiYWNrd2FyZHMgaW5j cmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqLwotICAgICAgICBpbmNyID0gMVUgPDwgKGxl biAtIDEpOwotICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpCi0gICAgICAgICAgICBpbmNyID4+ PSAxOwotICAgICAgICBpZiAoaW5jciAhPSAwKSB7Ci0gICAgICAgICAgICBodWZmICY9IGluY3Ig LSAxOwotICAgICAgICAgICAgaHVmZiArPSBpbmNyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK LSAgICAgICAgICAgIGh1ZmYgPSAwOworICAgIC8qIGZpbGwgaW4gcmVtYWluaW5nIHRhYmxlIGVu dHJ5IGlmIGNvZGUgaXMgaW5jb21wbGV0ZSAoZ3VhcmFudGVlZCB0byBoYXZlCisgICAgICAgYXQg bW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRl LCB0aGUKKyAgICAgICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0 IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovCisgICAgaWYgKGh1ZmYgIT0gMCkgeworICAgICAgICBo ZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1h cmtlciAqLworICAgICAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7 CisgICAgICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgIG5leHRbaHVm Zl0gPSBoZXJlOwogICAgIH0KIAogICAgIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqLwpkaWZm IC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZ0 cmVlcy5oCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mdHJlZXMuaAlTdW4gTWFyIDA4IDIy OjAwOjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZ0cmVlcy5oCVN1 biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZnRyZWVz LmggLS0gaGVhZGVyIHRvIHVzZSBpbmZ0cmVlcy5jCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAw MyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxMCBNYXJrIEFkbGVy CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdo dCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMzUsMjEgKzM1LDI4IEBACiAgICAgMDEwMDAw MDAgLSBpbnZhbGlkIGNvZGUKICAqLwogCi0vKiBNYXhpbXVtIHNpemUgb2YgZHluYW1pYyB0cmVl LiAgVGhlIG1heGltdW0gZm91bmQgaW4gYSBsb25nIGJ1dCBub24tCi0gICBleGhhdXN0aXZlIHNl YXJjaCB3YXMgMTAwNCBjb2RlIHN0cnVjdHVyZXMgKDg1MCBmb3IgbGVuZ3RoL2xpdGVyYWxzCi0g ICBhbmQgMTU0IGZvciBkaXN0YW5jZXMsIHRoZSBsYXR0ZXIgYWN0dWFsbHkgdGhlIHJlc3VsdCBv ZiBhbgotICAgZXhoYXVzdGl2ZSBzZWFyY2gpLiAgVGhlIHRydWUgbWF4aW11bSBpcyBub3Qga25v d24sIGJ1dCB0aGUgdmFsdWUKLSAgIGJlbG93IGlzIG1vcmUgdGhhbiBzYWZlLiAqLwotI2RlZmlu ZSBFTk9VR0ggMTQ0MAotI2RlZmluZSBNQVhEIDE1NAorLyogTWF4aW11bSBzaXplIG9mIHRoZSBk eW5hbWljIHRhYmxlLiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvZGUgc3RydWN0dXJlcyBpcwor ICAgMTQ0NCwgd2hpY2ggaXMgdGhlIHN1bSBvZiA4NTIgZm9yIGxpdGVyYWwvbGVuZ3RoIGNvZGVz IGFuZCA1OTIgZm9yIGRpc3RhbmNlCisgICBjb2Rlcy4gIFRoZXNlIHZhbHVlcyB3ZXJlIGZvdW5k IGJ5IGV4aGF1c3RpdmUgc2VhcmNoZXMgdXNpbmcgdGhlIHByb2dyYW0KKyAgIGV4YW1wbGVzL2Vu b3VnaC5jIGZvdW5kIGluIHRoZSB6bGliIGRpc3RyaWJ0dXRpb24uICBUaGUgYXJndW1lbnRzIHRv IHRoYXQKKyAgIHByb2dyYW0gYXJlIHRoZSBudW1iZXIgb2Ygc3ltYm9scywgdGhlIGluaXRpYWwg cm9vdCB0YWJsZSBzaXplLCBhbmQgdGhlCisgICBtYXhpbXVtIGJpdCBsZW5ndGggb2YgYSBjb2Rl LiAgImVub3VnaCAyODYgOSAxNSIgZm9yIGxpdGVyYWwvbGVuZ3RoIGNvZGVzCisgICByZXR1cm5z IHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0 dXJucyA1OTIuCisgICBUaGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgKDkgb3IgNikgaXMgZm91 bmQgaW4gdGhlIGZpZnRoIGFyZ3VtZW50IG9mIHRoZQorICAgaW5mbGF0ZV90YWJsZSgpIGNhbGxz IGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jLiAgSWYgdGhlIHJvb3QgdGFibGUgc2l6ZSBpcwor ICAgY2hhbmdlZCwgdGhlbiB0aGVzZSBtYXhpbXVtIHNpemVzIHdvdWxkIGJlIG5lZWQgdG8gYmUg cmVjYWxjdWxhdGVkIGFuZAorICAgdXBkYXRlZC4gKi8KKyNkZWZpbmUgRU5PVUdIX0xFTlMgODUy CisjZGVmaW5lIEVOT1VHSF9ESVNUUyA1OTIKKyNkZWZpbmUgRU5PVUdIIChFTk9VR0hfTEVOUytF Tk9VR0hfRElTVFMpCiAKLS8qIFR5cGUgb2YgY29kZSB0byBidWlsZCBmb3IgaW5mdGFibGUoKSAq LworLyogVHlwZSBvZiBjb2RlIHRvIGJ1aWxkIGZvciBpbmZsYXRlX3RhYmxlKCkgKi8KIHR5cGVk ZWYgZW51bSB7CiAgICAgQ09ERVMsCiAgICAgTEVOUywKICAgICBESVNUUwogfSBjb2RldHlwZTsK IAotZXh0ZXJuIGludCBpbmZsYXRlX3RhYmxlIE9GKChjb2RldHlwZSB0eXBlLCB1bnNpZ25lZCBz aG9ydCBGQVIgKmxlbnMsCitpbnQgWkxJQl9JTlRFUk5BTCBpbmZsYXRlX3RhYmxlIE9GKChjb2Rl dHlwZSB0eXBlLCB1bnNpZ25lZCBzaG9ydCBGQVIgKmxlbnMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNvZGVzLCBjb2RlIEZBUiAqIEZBUiAqdGFibGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIEZBUiAqYml0cywgdW5zaWduZWQgc2hvcnQg RkFSICp3b3JrKSk7CmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBzeXMvc3Jj L2NtZC9ncy96bGliL21pbmlnemlwLmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9taW5pZ3pp cC5jCVN1biBNYXIgMDggMjI6MDA6MjMgMjAyMCArMDEwMAorKysgL2Rldi9udWxsCVRodSBKYW4g MDEgMDA6MDA6MDAgMTk3MCArMDAwMApAQCAtMSwzMjIgKzAsMCBAQAotLyogbWluaWd6aXAuYyAt LSBzaW11bGF0ZSBnemlwIHVzaW5nIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENv cHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9u cyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5o Ci0gKi8KLQotLyoKLSAqIG1pbmlnemlwIGlzIGEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiB0 aGUgZ3ppcCB1dGlsaXR5LiBUaGlzIGlzCi0gKiBvbmx5IGFuIGV4YW1wbGUgb2YgdXNpbmcgemxp YiBhbmQgaXNuJ3QgbWVhbnQgdG8gcmVwbGFjZSB0aGUKLSAqIGZ1bGwtZmVhdHVyZWQgZ3ppcC4g Tm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGRlYWwgd2l0aCBmaWxlIHN5c3RlbXMKLSAqIGxpbWl0aW5n IG5hbWVzIHRvIDE0IG9yIDgrMyBjaGFyYWN0ZXJzLCBldGMuLi4gRXJyb3IgY2hlY2tpbmcgaXMK LSAqIHZlcnkgbGltaXRlZC4gU28gdXNlIG1pbmlnemlwIG9ubHkgZm9yIHRlc3Rpbmc7IHVzZSBn emlwIGZvciB0aGUKLSAqIHJlYWwgdGhpbmcuIE9uIE1TRE9TLCB1c2Ugb25seSBvbiBmaWxlIG5h bWVzIHdpdGhvdXQgZXh0ZW5zaW9uCi0gKiBvciBpbiBwaXBlIG1vZGUuCi0gKi8KLQotLyogQCgj KSAkSWQ6IG1pbmlnemlwLmMsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6NDIgZ2lsZXMgRXhw ICQgKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiemxpYi5oIgotCi0jaWZkZWYg U1REQwotIyAgaW5jbHVkZSA8c3RyaW5nLmg+Ci0jICBpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbHNl Ci0gICBleHRlcm4gdm9pZCBleGl0ICBPRigoaW50KSk7Ci0jZW5kaWYKLQotI2lmZGVmIFVTRV9N TUFQCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMgIGluY2x1ZGUgPHN5cy9tbWFuLmg+Ci0j ICBpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE1TRE9TKSB8fCBk ZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQotIyAg aW5jbHVkZSA8ZmNudGwuaD4KLSMgIGluY2x1ZGUgPGlvLmg+Ci0jICBkZWZpbmUgU0VUX0JJTkFS WV9NT0RFKGZpbGUpIHNldG1vZGUoZmlsZW5vKGZpbGUpLCBPX0JJTkFSWSkKLSNlbHNlCi0jICBk ZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCi0jZW5kaWYKLQotI2lmZGVmIFZNUwotIyAgZGVm aW5lIHVubGluayBkZWxldGUKLSMgIGRlZmluZSBHWl9TVUZGSVggIi1neiIKLSNlbmRpZgotI2lm ZGVmIFJJU0NPUwotIyAgZGVmaW5lIHVubGluayByZW1vdmUKLSMgIGRlZmluZSBHWl9TVUZGSVgg Ii1neiIKLSMgIGRlZmluZSBmaWxlbm8oZmlsZSkgZmlsZS0+X19maWxlCi0jZW5kaWYKLSNpZiBk ZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAh PSBfX3dpbjMyX29zCi0jICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmaWxlbm8gKi8KLSNlbmRp ZgotCi0jaWZuZGVmIFdJTjMyIC8qIHVubGluayBhbHJlYWR5IGluIHN0ZGlvLmggZm9yIFdJTjMy ICovCi0gIGV4dGVybiBpbnQgdW5saW5rIE9GKChjb25zdCBjaGFyICopKTsKLSNlbmRpZgotCi0j aWZuZGVmIEdaX1NVRkZJWAotIyAgZGVmaW5lIEdaX1NVRkZJWCAiLmd6IgotI2VuZGlmCi0jZGVm aW5lIFNVRkZJWF9MRU4gKHNpemVvZihHWl9TVUZGSVgpLTEpCi0KLSNkZWZpbmUgQlVGTEVOICAg ICAgMTYzODQKLSNkZWZpbmUgTUFYX05BTUVfTEVOIDEwMjQKLQotI2lmZGVmIE1BWFNFR182NEsK LSMgIGRlZmluZSBsb2NhbCBzdGF0aWMKLSAgIC8qIE5lZWRlZCBmb3Igc3lzdGVtcyB3aXRoIGxp bWl0YXRpb24gb24gc3RhY2sgc2l6ZS4gKi8KLSNlbHNlCi0jICBkZWZpbmUgbG9jYWwKLSNlbmRp ZgotCi1jaGFyICpwcm9nOwotCi12b2lkIGVycm9yICAgICAgICAgICAgT0YoKGNvbnN0IGNoYXIg Km1zZykpOwotdm9pZCBnel9jb21wcmVzcyAgICAgIE9GKChGSUxFICAgKmluLCBnekZpbGUgb3V0 KSk7Ci0jaWZkZWYgVVNFX01NQVAKLWludCAgZ3pfY29tcHJlc3NfbW1hcCBPRigoRklMRSAgICpp biwgZ3pGaWxlIG91dCkpOwotI2VuZGlmCi12b2lkIGd6X3VuY29tcHJlc3MgICAgT0YoKGd6Rmls ZSBpbiwgRklMRSAgICpvdXQpKTsKLXZvaWQgZmlsZV9jb21wcmVzcyAgICBPRigoY2hhciAgKmZp bGUsIGNoYXIgKm1vZGUpKTsKLXZvaWQgZmlsZV91bmNvbXByZXNzICBPRigoY2hhciAgKmZpbGUp KTsKLWludCAgbWFpbiAgICAgICAgICAgICBPRigoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkpOwot Ci0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIERpc3BsYXkgZXJyb3IgbWVzc2FnZSBhbmQgZXhp dAotICovCi12b2lkIGVycm9yKG1zZykKLSAgICBjb25zdCBjaGFyICptc2c7Ci17Ci0gICAgZnBy aW50ZihzdGRlcnIsICIlczogJXNcbiIsIHByb2csIG1zZyk7Ci0gICAgZXhpdCgxKTsKLX0KLQot LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb21wcmVzcyBpbnB1dCB0byBvdXRwdXQgdGhlbiBj bG9zZSBib3RoIGZpbGVzLgotICovCi0KLXZvaWQgZ3pfY29tcHJlc3MoaW4sIG91dCkKLSAgICBG SUxFICAgKmluOwotICAgIGd6RmlsZSBvdXQ7Ci17Ci0gICAgbG9jYWwgY2hhciBidWZbQlVGTEVO XTsKLSAgICBpbnQgbGVuOwotICAgIGludCBlcnI7Ci0KLSNpZmRlZiBVU0VfTU1BUAotICAgIC8q IFRyeSBmaXJzdCBjb21wcmVzc2luZyB3aXRoIG1tYXAuIElmIG1tYXAgZmFpbHMgKG1pbmlnemlw IHVzZWQgaW4gYQotICAgICAqIHBpcGUpLCB1c2UgdGhlIG5vcm1hbCBmcmVhZCBsb29wLgotICAg ICAqLwotICAgIGlmIChnel9jb21wcmVzc19tbWFwKGluLCBvdXQpID09IFpfT0spIHJldHVybjsK LSNlbmRpZgotICAgIGZvciAoOzspIHsKLSAgICAgICAgbGVuID0gKGludClmcmVhZChidWYsIDEs IHNpemVvZihidWYpLCBpbik7Ci0gICAgICAgIGlmIChmZXJyb3IoaW4pKSB7Ci0gICAgICAgICAg ICBwZXJyb3IoImZyZWFkIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAg ICAgIGlmIChsZW4gPT0gMCkgYnJlYWs7Ci0KLSAgICAgICAgaWYgKGd6d3JpdGUob3V0LCBidWYs ICh1bnNpZ25lZClsZW4pICE9IGxlbikgZXJyb3IoZ3plcnJvcihvdXQsICZlcnIpKTsKLSAgICB9 Ci0gICAgZmNsb3NlKGluKTsKLSAgICBpZiAoZ3pjbG9zZShvdXQpICE9IFpfT0spIGVycm9yKCJm YWlsZWQgZ3pjbG9zZSIpOwotfQotCi0jaWZkZWYgVVNFX01NQVAgLyogTU1BUCB2ZXJzaW9uLCBN aWd1ZWwgQWxicmVjaHQgPG1hbGJyZWNoQGVzby5vcmc+ICovCi0KLS8qIFRyeSBjb21wcmVzc2lu ZyB0aGUgaW5wdXQgZmlsZSBhdCBvbmNlIHVzaW5nIG1tYXAuIFJldHVybiBaX09LIGlmCi0gKiBp ZiBzdWNjZXNzLCBaX0VSUk5PIG90aGVyd2lzZS4KLSAqLwotaW50IGd6X2NvbXByZXNzX21tYXAo aW4sIG91dCkKLSAgICBGSUxFICAgKmluOwotICAgIGd6RmlsZSBvdXQ7Ci17Ci0gICAgaW50IGxl bjsKLSAgICBpbnQgZXJyOwotICAgIGludCBpZmQgPSBmaWxlbm8oaW4pOwotICAgIGNhZGRyX3Qg YnVmOyAgICAvKiBtbWFwJ2VkIGJ1ZmZlciBmb3IgdGhlIGVudGlyZSBpbnB1dCBmaWxlICovCi0g ICAgb2ZmX3QgYnVmX2xlbjsgIC8qIGxlbmd0aCBvZiB0aGUgaW5wdXQgZmlsZSAqLwotICAgIHN0 cnVjdCBzdGF0IHNiOwotCi0gICAgLyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBu ZWVkZWQgZm9yIG1tYXA6ICovCi0gICAgaWYgKGZzdGF0KGlmZCwgJnNiKSA8IDApIHJldHVybiBa X0VSUk5POwotICAgIGJ1Zl9sZW4gPSBzYi5zdF9zaXplOwotICAgIGlmIChidWZfbGVuIDw9IDAp IHJldHVybiBaX0VSUk5POwotCi0gICAgLyogTm93IGRvIHRoZSBhY3R1YWwgbW1hcDogKi8KLSAg ICBidWYgPSBtbWFwKChjYWRkcl90KSAwLCBidWZfbGVuLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQs IGlmZCwgKG9mZl90KTApOwotICAgIGlmIChidWYgPT0gKGNhZGRyX3QpKC0xKSkgcmV0dXJuIFpf RVJSTk87Ci0KLSAgICAvKiBDb21wcmVzcyB0aGUgd2hvbGUgZmlsZSBhdCBvbmNlOiAqLwotICAg IGxlbiA9IGd6d3JpdGUob3V0LCAoY2hhciAqKWJ1ZiwgKHVuc2lnbmVkKWJ1Zl9sZW4pOwotCi0g ICAgaWYgKGxlbiAhPSAoaW50KWJ1Zl9sZW4pIGVycm9yKGd6ZXJyb3Iob3V0LCAmZXJyKSk7Ci0K LSAgICBtdW5tYXAoYnVmLCBidWZfbGVuKTsKLSAgICBmY2xvc2UoaW4pOwotICAgIGlmIChnemNs b3NlKG91dCkgIT0gWl9PSykgZXJyb3IoImZhaWxlZCBnemNsb3NlIik7Ci0gICAgcmV0dXJuIFpf T0s7Ci19Ci0jZW5kaWYgLyogVVNFX01NQVAgKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g KiBVbmNvbXByZXNzIGlucHV0IHRvIG91dHB1dCB0aGVuIGNsb3NlIGJvdGggZmlsZXMuCi0gKi8K LXZvaWQgZ3pfdW5jb21wcmVzcyhpbiwgb3V0KQotICAgIGd6RmlsZSBpbjsKLSAgICBGSUxFICAg Km91dDsKLXsKLSAgICBsb2NhbCBjaGFyIGJ1ZltCVUZMRU5dOwotICAgIGludCBsZW47Ci0gICAg aW50IGVycjsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgbGVuID0gZ3pyZWFkKGluLCBidWYs IHNpemVvZihidWYpKTsKLSAgICAgICAgaWYgKGxlbiA8IDApIGVycm9yIChnemVycm9yKGluLCAm ZXJyKSk7Ci0gICAgICAgIGlmIChsZW4gPT0gMCkgYnJlYWs7Ci0KLSAgICAgICAgaWYgKChpbnQp ZndyaXRlKGJ1ZiwgMSwgKHVuc2lnbmVkKWxlbiwgb3V0KSAhPSBsZW4pIHsKLSAgICAgICAgICAg IGVycm9yKCJmYWlsZWQgZndyaXRlIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZjbG9z ZShvdXQpKSBlcnJvcigiZmFpbGVkIGZjbG9zZSIpOwotCi0gICAgaWYgKGd6Y2xvc2UoaW4pICE9 IFpfT0spIGVycm9yKCJmYWlsZWQgZ3pjbG9zZSIpOwotfQotCi0KLS8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotICogQ29tcHJlc3MgdGhlIGdpdmVuIGZpbGU6IGNyZWF0ZSBhIGNvcnJlc3BvbmRpbmcg Lmd6IGZpbGUgYW5kIHJlbW92ZSB0aGUKLSAqIG9yaWdpbmFsLgotICovCi12b2lkIGZpbGVfY29t cHJlc3MoZmlsZSwgbW9kZSkKLSAgICBjaGFyICAqZmlsZTsKLSAgICBjaGFyICAqbW9kZTsKLXsK LSAgICBsb2NhbCBjaGFyIG91dGZpbGVbTUFYX05BTUVfTEVOXTsKLSAgICBGSUxFICAqaW47Ci0g ICAgZ3pGaWxlIG91dDsKLQotICAgIHN0cmNweShvdXRmaWxlLCBmaWxlKTsKLSAgICBzdHJjYXQo b3V0ZmlsZSwgR1pfU1VGRklYKTsKLQotICAgIGluID0gZm9wZW4oZmlsZSwgInJiIik7Ci0gICAg aWYgKGluID09IE5VTEwpIHsKLSAgICAgICAgcGVycm9yKGZpbGUpOwotICAgICAgICBleGl0KDEp OwotICAgIH0KLSAgICBvdXQgPSBnem9wZW4ob3V0ZmlsZSwgbW9kZSk7Ci0gICAgaWYgKG91dCA9 PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGd6b3BlbiAlc1xu IiwgcHJvZywgb3V0ZmlsZSk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIGd6X2NvbXBy ZXNzKGluLCBvdXQpOwotCi0gICAgdW5saW5rKGZpbGUpOwotfQotCi0KLS8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotICogVW5jb21wcmVzcyB0aGUgZ2l2ZW4gZmlsZSBhbmQgcmVtb3ZlIHRoZSBvcmln aW5hbC4KLSAqLwotdm9pZCBmaWxlX3VuY29tcHJlc3MoZmlsZSkKLSAgICBjaGFyICAqZmlsZTsK LXsKLSAgICBsb2NhbCBjaGFyIGJ1ZltNQVhfTkFNRV9MRU5dOwotICAgIGNoYXIgKmluZmlsZSwg Km91dGZpbGU7Ci0gICAgRklMRSAgKm91dDsKLSAgICBnekZpbGUgaW47Ci0gICAgdUludCBsZW4g PSAodUludClzdHJsZW4oZmlsZSk7Ci0KLSAgICBzdHJjcHkoYnVmLCBmaWxlKTsKLQotICAgIGlm IChsZW4gPiBTVUZGSVhfTEVOICYmIHN0cmNtcChmaWxlK2xlbi1TVUZGSVhfTEVOLCBHWl9TVUZG SVgpID09IDApIHsKLSAgICAgICAgaW5maWxlID0gZmlsZTsKLSAgICAgICAgb3V0ZmlsZSA9IGJ1 ZjsKLSAgICAgICAgb3V0ZmlsZVtsZW4tM10gPSAnXDAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAg IG91dGZpbGUgPSBmaWxlOwotICAgICAgICBpbmZpbGUgPSBidWY7Ci0gICAgICAgIHN0cmNhdChp bmZpbGUsIEdaX1NVRkZJWCk7Ci0gICAgfQotICAgIGluID0gZ3pvcGVuKGluZmlsZSwgInJiIik7 Ci0gICAgaWYgKGluID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2Fu J3QgZ3pvcGVuICVzXG4iLCBwcm9nLCBpbmZpbGUpOwotICAgICAgICBleGl0KDEpOwotICAgIH0K LSAgICBvdXQgPSBmb3BlbihvdXRmaWxlLCAid2IiKTsKLSAgICBpZiAob3V0ID09IE5VTEwpIHsK LSAgICAgICAgcGVycm9yKGZpbGUpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGd6 X3VuY29tcHJlc3MoaW4sIG91dCk7Ci0KLSAgICB1bmxpbmsoaW5maWxlKTsKLX0KLQotCi0vKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSAqIFVzYWdlOiAgbWluaWd6aXAgWy1kXSBbLWZdIFstaF0gWy1y XSBbLTEgdG8gLTldIFtmaWxlcy4uLl0KLSAqICAgLWQgOiBkZWNvbXByZXNzCi0gKiAgIC1mIDog Y29tcHJlc3Mgd2l0aCBaX0ZJTFRFUkVECi0gKiAgIC1oIDogY29tcHJlc3Mgd2l0aCBaX0hVRkZN QU5fT05MWQotICogICAtciA6IGNvbXByZXNzIHdpdGggWl9STEUKLSAqICAgLTEgdG8gLTkgOiBj b21wcmVzc2lvbiBsZXZlbAotICovCi0KLWludCBtYWluKGFyZ2MsIGFyZ3YpCi0gICAgaW50IGFy Z2M7Ci0gICAgY2hhciAqYXJndltdOwotewotICAgIGludCB1bmNvbXByID0gMDsKLSAgICBnekZp bGUgZmlsZTsKLSAgICBjaGFyIG91dG1vZGVbMjBdOwotCi0gICAgc3RyY3B5KG91dG1vZGUsICJ3 YjYgIik7Ci0KLSAgICBwcm9nID0gYXJndlswXTsKLSAgICBhcmdjLS0sIGFyZ3YrKzsKLQotICAg IHdoaWxlIChhcmdjID4gMCkgewotICAgICAgaWYgKHN0cmNtcCgqYXJndiwgIi1kIikgPT0gMCkK LSAgICAgICAgdW5jb21wciA9IDE7Ci0gICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICItZiIp ID09IDApCi0gICAgICAgIG91dG1vZGVbM10gPSAnZic7Ci0gICAgICBlbHNlIGlmIChzdHJjbXAo KmFyZ3YsICItaCIpID09IDApCi0gICAgICAgIG91dG1vZGVbM10gPSAnaCc7Ci0gICAgICBlbHNl IGlmIChzdHJjbXAoKmFyZ3YsICItciIpID09IDApCi0gICAgICAgIG91dG1vZGVbM10gPSAnUic7 Ci0gICAgICBlbHNlIGlmICgoKmFyZ3YpWzBdID09ICctJyAmJiAoKmFyZ3YpWzFdID49ICcxJyAm JiAoKmFyZ3YpWzFdIDw9ICc5JyAmJgotICAgICAgICAgICAgICAgKCphcmd2KVsyXSA9PSAwKQot ICAgICAgICBvdXRtb2RlWzJdID0gKCphcmd2KVsxXTsKLSAgICAgIGVsc2UKLSAgICAgICAgYnJl YWs7Ci0gICAgICBhcmdjLS0sIGFyZ3YrKzsKLSAgICB9Ci0gICAgaWYgKGFyZ2MgPT0gMCkgewot ICAgICAgICBTRVRfQklOQVJZX01PREUoc3RkaW4pOwotICAgICAgICBTRVRfQklOQVJZX01PREUo c3Rkb3V0KTsKLSAgICAgICAgaWYgKHVuY29tcHIpIHsKLSAgICAgICAgICAgIGZpbGUgPSBnemRv cGVuKGZpbGVubyhzdGRpbiksICJyYiIpOwotICAgICAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkg ZXJyb3IoImNhbid0IGd6ZG9wZW4gc3RkaW4iKTsKLSAgICAgICAgICAgIGd6X3VuY29tcHJlc3Mo ZmlsZSwgc3Rkb3V0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpbGUgPSBnemRv cGVuKGZpbGVubyhzdGRvdXQpLCBvdXRtb2RlKTsKLSAgICAgICAgICAgIGlmIChmaWxlID09IE5V TEwpIGVycm9yKCJjYW4ndCBnemRvcGVuIHN0ZG91dCIpOwotICAgICAgICAgICAgZ3pfY29tcHJl c3Moc3RkaW4sIGZpbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG8gewot ICAgICAgICAgICAgaWYgKHVuY29tcHIpIHsKLSAgICAgICAgICAgICAgICBmaWxlX3VuY29tcHJl c3MoKmFyZ3YpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaWxlX2Nv bXByZXNzKCphcmd2LCBvdXRtb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAo YXJndisrLCAtLWFyZ2MpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtciA5YTMxNzcy MzE3OTAgLXIgZTJkMTkzOWIxY2NjIHN5cy9zcmMvY21kL2dzL3psaWIvdGVzdC9leGFtcGxlLmMK LS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvc3lzL3Ny Yy9jbWQvZ3MvemxpYi90ZXN0L2V4YW1wbGUuYwlTdW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0 MDAKQEAgLTAsMCArMSw2MDIgQEAKKy8qIGV4YW1wbGUuYyAtLSB1c2FnZSBleGFtcGxlIG9mIHRo ZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAy MDExLCAyMDE2IEplYW4tbG91cCBHYWlsbHkKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1 dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisvKiBA KCMpICRJZCQgKi8KKworI2luY2x1ZGUgInpsaWIuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorCisj aWZkZWYgU1REQworIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjICBpbmNsdWRlIDxzdGRsaWIuaD4K KyNlbmRpZgorCisjaWYgZGVmaW5lZChWTVMpIHx8IGRlZmluZWQoUklTQ09TKQorIyAgZGVmaW5l IFRFU1RGSUxFICJmb28tZ3oiCisjZWxzZQorIyAgZGVmaW5lIFRFU1RGSUxFICJmb28uZ3oiCisj ZW5kaWYKKworI2RlZmluZSBDSEVDS19FUlIoZXJyLCBtc2cpIHsgXAorICAgIGlmIChlcnIgIT0g Wl9PSykgeyBcCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgZXJyb3I6ICVkXG4iLCBtc2cs IGVycik7IFwKKyAgICAgICAgZXhpdCgxKTsgXAorICAgIH0gXAorfQorCitzdGF0aWMgel9jb25z dCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7CisvKiAiaGVsbG8gd29ybGQiIHdvdWxk IGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUgcmVwZWF0ZWQgImhlbGxvIgorICogc3RyZXNzZXMg dGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVyLCBzb3JyeS4uLgorICovCisKK3N0YXRpYyBjb25z dCBjaGFyIGRpY3Rpb25hcnlbXSA9ICJoZWxsbyI7CitzdGF0aWMgdUxvbmcgZGljdElkOyAgICAv KiBBZGxlcjMyIHZhbHVlIG9mIHRoZSBkaWN0aW9uYXJ5ICovCisKK3ZvaWQgdGVzdF9kZWZsYXRl ICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9pbmZs YXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwordm9pZCB0 ZXN0X2xhcmdlX2RlZmxhdGUgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7 Cit2b2lkIHRlc3RfbGFyZ2VfaW5mbGF0ZSBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29t cHJMZW4pKTsKK3ZvaWQgdGVzdF9mbHVzaCAgICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcg KmNvbXByTGVuKSk7Cit2b2lkIHRlc3Rfc3luYyAgICAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVM b25nIGNvbXByTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIs IHVMb25nIHVuY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9kaWN0X2RlZmxhdGUgIE9GKChCeXRlICpj b21wciwgdUxvbmcgY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9kaWN0X2luZmxhdGUgIE9GKChCeXRl ICpjb21wciwgdUxvbmcgY29tcHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0 ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOworaW50ICBtYWluICAgICAgICAgICAgICAg T0YoKGludCBhcmdjLCBjaGFyICphcmd2W10pKTsKKworCisjaWZkZWYgWl9TT0xPCisKK3ZvaWQg Km15YWxsb2MgT0YoKHZvaWQgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSk7Cit2b2lkIG15ZnJlZSBP Rigodm9pZCAqLCB2b2lkICopKTsKKwordm9pZCAqbXlhbGxvYyhxLCBuLCBtKQorICAgIHZvaWQg KnE7CisgICAgdW5zaWduZWQgbiwgbTsKK3sKKyAgICAodm9pZClxOworICAgIHJldHVybiBjYWxs b2MobiwgbSk7Cit9CisKK3ZvaWQgbXlmcmVlKHZvaWQgKnEsIHZvaWQgKnApCit7CisgICAgKHZv aWQpcTsKKyAgICBmcmVlKHApOworfQorCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSBteWFs bG9jOworc3RhdGljIGZyZWVfZnVuYyB6ZnJlZSA9IG15ZnJlZTsKKworI2Vsc2UgLyogIVpfU09M TyAqLworCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSAoYWxsb2NfZnVuYykwOworc3RhdGlj IGZyZWVfZnVuYyB6ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKwordm9pZCB0ZXN0X2NvbXByZXNzICAg ICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Cit2b2lkIHRlc3RfZ3pp byAgICAgICAgICBPRigoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOworCisvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKyAqIFRlc3QgY29tcHJlc3MoKSBhbmQgdW5jb21wcmVzcygpCisgKi8KK3ZvaWQg dGVzdF9jb21wcmVzcyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCisgICAg Qnl0ZSAqY29tcHIsICp1bmNvbXByOworICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOwor eworICAgIGludCBlcnI7CisgICAgdUxvbmcgbGVuID0gKHVMb25nKXN0cmxlbihoZWxsbykrMTsK KworICAgIGVyciA9IGNvbXByZXNzKGNvbXByLCAmY29tcHJMZW4sIChjb25zdCBCeXRlZiopaGVs bG8sIGxlbik7CisgICAgQ0hFQ0tfRVJSKGVyciwgImNvbXByZXNzIik7CisKKyAgICBzdHJjcHko KGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CisKKyAgICBlcnIgPSB1bmNvbXByZXNzKHVuY29t cHIsICZ1bmNvbXByTGVuLCBjb21wciwgY29tcHJMZW4pOworICAgIENIRUNLX0VSUihlcnIsICJ1 bmNvbXByZXNzIik7CisKKyAgICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBoZWxsbykpIHsK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgdW5jb21wcmVzc1xuIik7CisgICAgICAgIGV4 aXQoMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJ1bmNvbXByZXNzKCk6ICVzXG4i LCAoY2hhciAqKXVuY29tcHIpOworICAgIH0KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisg KiBUZXN0IHJlYWQvd3JpdGUgb2YgLmd6IGZpbGVzCisgKi8KK3ZvaWQgdGVzdF9nemlvKGZuYW1l LCB1bmNvbXByLCB1bmNvbXByTGVuKQorICAgIGNvbnN0IGNoYXIgKmZuYW1lOyAvKiBjb21wcmVz c2VkIGZpbGUgbmFtZSAqLworICAgIEJ5dGUgKnVuY29tcHI7CisgICAgdUxvbmcgdW5jb21wckxl bjsKK3sKKyNpZmRlZiBOT19HWkNPTVBSRVNTCisgICAgZnByaW50ZihzdGRlcnIsICJOT19HWkNP TVBSRVNTIC0tIGd6KiBmdW5jdGlvbnMgY2Fubm90IGNvbXByZXNzXG4iKTsKKyNlbHNlCisgICAg aW50IGVycjsKKyAgICBpbnQgbGVuID0gKGludClzdHJsZW4oaGVsbG8pKzE7CisgICAgZ3pGaWxl IGZpbGU7CisgICAgel9vZmZfdCBwb3M7CisKKyAgICBmaWxlID0gZ3pvcGVuKGZuYW1lLCAid2Ii KTsKKyAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pv cGVuIGVycm9yXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZ3pwdXRjKGZpbGUs ICdoJyk7CisgICAgaWYgKGd6cHV0cyhmaWxlLCAiZWxsbyIpICE9IDQpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICJnenB1dHMgZXJyOiAlc1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7Cisg ICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGlmIChnenByaW50ZihmaWxlLCAiLCAlcyEiLCAi aGVsbG8iKSAhPSA4KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pwcmludGYgZXJyOiAl c1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAg IGd6c2VlayhmaWxlLCAxTCwgU0VFS19DVVIpOyAvKiBhZGQgb25lIHplcm8gYnl0ZSAqLworICAg IGd6Y2xvc2UoZmlsZSk7CisKKyAgICBmaWxlID0gZ3pvcGVuKGZuYW1lLCAicmIiKTsKKyAgICBp ZiAoZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pvcGVuIGVycm9y XG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgc3RyY3B5KChjaGFyKil1bmNvbXBy LCAiZ2FyYmFnZSIpOworCisgICAgaWYgKGd6cmVhZChmaWxlLCB1bmNvbXByLCAodW5zaWduZWQp dW5jb21wckxlbikgIT0gbGVuKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pyZWFkIGVy cjogJXNcbiIsIGd6ZXJyb3IoZmlsZSwgJmVycikpOworICAgICAgICBleGl0KDEpOworICAgIH0K KyAgICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBoZWxsbykpIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJiYWQgZ3pyZWFkOiAlc1xuIiwgKGNoYXIqKXVuY29tcHIpOworICAgICAgICBl eGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiZ3pyZWFkKCk6ICVzXG4iLCAo Y2hhciopdW5jb21wcik7CisgICAgfQorCisgICAgcG9zID0gZ3pzZWVrKGZpbGUsIC04TCwgU0VF S19DVVIpOworICAgIGlmIChwb3MgIT0gNiB8fCBnenRlbGwoZmlsZSkgIT0gcG9zKSB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiZ3pzZWVrIGVycm9yLCBwb3M9JWxkLCBnenRlbGw9JWxkXG4i LAorICAgICAgICAgICAgICAgIChsb25nKXBvcywgKGxvbmcpZ3p0ZWxsKGZpbGUpKTsKKyAgICAg ICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZiAoZ3pnZXRjKGZpbGUpICE9ICcgJykgeworICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgImd6Z2V0YyBlcnJvclxuIik7CisgICAgICAgIGV4aXQoMSk7 CisgICAgfQorCisgICAgaWYgKGd6dW5nZXRjKCcgJywgZmlsZSkgIT0gJyAnKSB7CisgICAgICAg IGZwcmludGYoc3RkZXJyLCAiZ3p1bmdldGMgZXJyb3JcbiIpOworICAgICAgICBleGl0KDEpOwor ICAgIH0KKworICAgIGd6Z2V0cyhmaWxlLCAoY2hhciopdW5jb21wciwgKGludCl1bmNvbXByTGVu KTsKKyAgICBpZiAoc3RybGVuKChjaGFyKil1bmNvbXByKSAhPSA3KSB7IC8qICIgaGVsbG8hIiAq LworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6Z2V0cyBlcnIgYWZ0ZXIgZ3pzZWVrOiAlc1xu IiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGlm IChzdHJjbXAoKGNoYXIqKXVuY29tcHIsIGhlbGxvICsgNikpIHsKKyAgICAgICAgZnByaW50Zihz dGRlcnIsICJiYWQgZ3pnZXRzIGFmdGVyIGd6c2Vla1xuIik7CisgICAgICAgIGV4aXQoMSk7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJnemdldHMoKSBhZnRlciBnenNlZWs6ICVzXG4i LCAoY2hhciopdW5jb21wcik7CisgICAgfQorCisgICAgZ3pjbG9zZShmaWxlKTsKKyNlbmRpZgor fQorCisjZW5kaWYgLyogWl9TT0xPICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVz dCBkZWZsYXRlKCkgd2l0aCBzbWFsbCBidWZmZXJzCisgKi8KK3ZvaWQgdGVzdF9kZWZsYXRlKGNv bXByLCBjb21wckxlbikKKyAgICBCeXRlICpjb21wcjsKKyAgICB1TG9uZyBjb21wckxlbjsKK3sK KyAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCisgICAgaW50 IGVycjsKKyAgICB1TG9uZyBsZW4gPSAodUxvbmcpc3RybGVuKGhlbGxvKSsxOworCisgICAgY19z dHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CisgICAg Y19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworCisgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNf c3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOworICAgIENIRUNLX0VSUihlcnIsICJkZWZs YXRlSW5pdCIpOworCisgICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoel9jb25zdCB1bnNpZ25lZCBj aGFyICopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKKworICAgIHdoaWxl IChjX3N0cmVhbS50b3RhbF9pbiAhPSBsZW4gJiYgY19zdHJlYW0udG90YWxfb3V0IDwgY29tcHJM ZW4pIHsKKyAgICAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSBjX3N0cmVhbS5hdmFpbF9vdXQgPSAx OyAvKiBmb3JjZSBzbWFsbCBidWZmZXJzICovCisgICAgICAgIGVyciA9IGRlZmxhdGUoJmNfc3Ry ZWFtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKKyAg ICB9CisgICAgLyogRmluaXNoIHRoZSBzdHJlYW0sIHN0aWxsIGZvcmNpbmcgc21hbGwgYnVmZmVy czogKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNfc3RyZWFtLmF2YWlsX291dCA9IDE7Cisg ICAgICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CisgICAgICAgIGlmIChl cnIgPT0gWl9TVFJFQU1fRU5EKSBicmVhazsKKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxh dGUiKTsKKyAgICB9CisKKyAgICBlcnIgPSBkZWZsYXRlRW5kKCZjX3N0cmVhbSk7CisgICAgQ0hF Q0tfRVJSKGVyciwgImRlZmxhdGVFbmQiKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisg KiBUZXN0IGluZmxhdGUoKSB3aXRoIHNtYWxsIGJ1ZmZlcnMKKyAqLwordm9pZCB0ZXN0X2luZmxh dGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKQorICAgIEJ5dGUgKmNvbXBy LCAqdW5jb21wcjsKKyAgICB1TG9uZyBjb21wckxlbiwgdW5jb21wckxlbjsKK3sKKyAgICBpbnQg ZXJyOworICAgIHpfc3RyZWFtIGRfc3RyZWFtOyAvKiBkZWNvbXByZXNzaW9uIHN0cmVhbSAqLwor CisgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOworCisgICAgZF9zdHJlYW0u emFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CisgICAgZF9zdHJl YW0ub3BhcXVlID0gKHZvaWRwZikwOworCisgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsK KyAgICBkX3N0cmVhbS5hdmFpbF9pbiA9IDA7CisgICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNv bXByOworCisgICAgZXJyID0gaW5mbGF0ZUluaXQoJmRfc3RyZWFtKTsKKyAgICBDSEVDS19FUlIo ZXJyLCAiaW5mbGF0ZUluaXQiKTsKKworICAgIHdoaWxlIChkX3N0cmVhbS50b3RhbF9vdXQgPCB1 bmNvbXByTGVuICYmIGRfc3RyZWFtLnRvdGFsX2luIDwgY29tcHJMZW4pIHsKKyAgICAgICAgZF9z dHJlYW0uYXZhaWxfaW4gPSBkX3N0cmVhbS5hdmFpbF9vdXQgPSAxOyAvKiBmb3JjZSBzbWFsbCBi dWZmZXJzICovCisgICAgICAgIGVyciA9IGluZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZMVVNIKTsK KyAgICAgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQpIGJyZWFrOworICAgICAgICBDSEVDS19F UlIoZXJyLCAiaW5mbGF0ZSIpOworICAgIH0KKworICAgIGVyciA9IGluZmxhdGVFbmQoJmRfc3Ry ZWFtKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZUVuZCIpOworCisgICAgaWYgKHN0cmNt cCgoY2hhciopdW5jb21wciwgaGVsbG8pKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmFk IGluZmxhdGVcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBy aW50ZigiaW5mbGF0ZSgpOiAlc1xuIiwgKGNoYXIgKil1bmNvbXByKTsKKyAgICB9Cit9CisKKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBkZWZsYXRlKCkgd2l0aCBsYXJnZSBidWZmZXJz IGFuZCBkeW5hbWljIGNoYW5nZSBvZiBjb21wcmVzc2lvbiBsZXZlbAorICovCit2b2lkIHRlc3Rf bGFyZ2VfZGVmbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCisgICAg Qnl0ZSAqY29tcHIsICp1bmNvbXByOworICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOwor eworICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KKyAgICBp bnQgZXJyOworCisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpm cmVlID0gemZyZWU7CisgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOworCisgICAgZXJy ID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfU1BFRUQpOworICAgIENIRUNLX0VSUihl cnIsICJkZWZsYXRlSW5pdCIpOworCisgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKKyAg ICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAodUludCljb21wckxlbjsKKworICAgIC8qIEF0IHRoaXMg cG9pbnQsIHVuY29tcHIgaXMgc3RpbGwgbW9zdGx5IHplcm9lcywgc28gaXQgc2hvdWxkIGNvbXBy ZXNzCisgICAgICogdmVyeSB3ZWxsOgorICAgICAqLworICAgIGNfc3RyZWFtLm5leHRfaW4gPSB1 bmNvbXByOworICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpdW5jb21wckxlbjsKKyAgICBl cnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgQ0hFQ0tfRVJSKGVyciwg ImRlZmxhdGUiKTsKKyAgICBpZiAoY19zdHJlYW0uYXZhaWxfaW4gIT0gMCkgeworICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImRlZmxhdGUgbm90IGdyZWVkeVxuIik7CisgICAgICAgIGV4aXQoMSk7 CisgICAgfQorCisgICAgLyogRmVlZCBpbiBhbHJlYWR5IGNvbXByZXNzZWQgZGF0YSBhbmQgc3dp dGNoIHRvIG5vIGNvbXByZXNzaW9uOiAqLworICAgIGRlZmxhdGVQYXJhbXMoJmNfc3RyZWFtLCBa X05PX0NPTVBSRVNTSU9OLCBaX0RFRkFVTFRfU1RSQVRFR1kpOworICAgIGNfc3RyZWFtLm5leHRf aW4gPSBjb21wcjsKKyAgICBjX3N0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWNvbXByTGVuLzI7Cisg ICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfTk9fRkxVU0gpOworICAgIENIRUNLX0VSUihl cnIsICJkZWZsYXRlIik7CisKKyAgICAvKiBTd2l0Y2ggYmFjayB0byBjb21wcmVzc2luZyBtb2Rl OiAqLworICAgIGRlZmxhdGVQYXJhbXMoJmNfc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04sIFpf RklMVEVSRUQpOworICAgIGNfc3RyZWFtLm5leHRfaW4gPSB1bmNvbXByOworICAgIGNfc3RyZWFt LmF2YWlsX2luID0gKHVJbnQpdW5jb21wckxlbjsKKyAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVh bSwgWl9OT19GTFVTSCk7CisgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKKworICAgIGVy ciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CisgICAgaWYgKGVyciAhPSBaX1NUUkVB TV9FTkQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJkZWZsYXRlIHNob3VsZCByZXBvcnQg Wl9TVFJFQU1fRU5EXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZXJyID0gZGVm bGF0ZUVuZCgmY19zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlRW5kIik7Cit9 CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBpbmZsYXRlKCkgd2l0aCBsYXJnZSBi dWZmZXJzCisgKi8KK3ZvaWQgdGVzdF9sYXJnZV9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5j b21wciwgdW5jb21wckxlbikKKyAgICBCeXRlICpjb21wciwgKnVuY29tcHI7CisgICAgdUxvbmcg Y29tcHJMZW4sIHVuY29tcHJMZW47Cit7CisgICAgaW50IGVycjsKKyAgICB6X3N0cmVhbSBkX3N0 cmVhbTsgLyogZGVjb21wcmVzc2lvbiBzdHJlYW0gKi8KKworICAgIHN0cmNweSgoY2hhciopdW5j b21wciwgImdhcmJhZ2UiKTsKKworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBk X3N0cmVhbS56ZnJlZSA9IHpmcmVlOworICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsK KworICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CisgICAgZF9zdHJlYW0uYXZhaWxfaW4g PSAodUludCljb21wckxlbjsKKworICAgIGVyciA9IGluZmxhdGVJbml0KCZkX3N0cmVhbSk7Cisg ICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGVJbml0Iik7CisKKyAgICBmb3IgKDs7KSB7CisgICAg ICAgIGRfc3RyZWFtLm5leHRfb3V0ID0gdW5jb21wcjsgICAgICAgICAgICAvKiBkaXNjYXJkIHRo ZSBvdXRwdXQgKi8KKyAgICAgICAgZF9zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpdW5jb21wckxl bjsKKyAgICAgICAgZXJyID0gaW5mbGF0ZSgmZF9zdHJlYW0sIFpfTk9fRkxVU0gpOworICAgICAg ICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCkgYnJlYWs7CisgICAgICAgIENIRUNLX0VSUihlcnIs ICJsYXJnZSBpbmZsYXRlIik7CisgICAgfQorCisgICAgZXJyID0gaW5mbGF0ZUVuZCgmZF9zdHJl YW0pOworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlRW5kIik7CisKKyAgICBpZiAoZF9zdHJl YW0udG90YWxfb3V0ICE9IDIqdW5jb21wckxlbiArIGNvbXByTGVuLzIpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICJiYWQgbGFyZ2UgaW5mbGF0ZTogJWxkXG4iLCBkX3N0cmVhbS50b3RhbF9v dXQpOworICAgICAgICBleGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigibGFy Z2VfaW5mbGF0ZSgpOiBPS1xuIik7CisgICAgfQorfQorCisvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KyAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggZnVsbCBmbHVzaAorICovCit2b2lkIHRlc3RfZmx1c2go Y29tcHIsIGNvbXByTGVuKQorICAgIEJ5dGUgKmNvbXByOworICAgIHVMb25nICpjb21wckxlbjsK K3sKKyAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCisgICAg aW50IGVycjsKKyAgICB1SW50IGxlbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKKworICAgIGNf c3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOworICAg IGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGVyciA9IGRlZmxhdGVJbml0KCZj X3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiZGVm bGF0ZUluaXQiKTsKKworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQg Y2hhciAqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CisgICAgY19zdHJl YW0uYXZhaWxfaW4gPSAzOworICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpjb21wckxl bjsKKyAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9GVUxMX0ZMVVNIKTsKKyAgICBDSEVD S19FUlIoZXJyLCAiZGVmbGF0ZSIpOworCisgICAgY29tcHJbM10rKzsgLyogZm9yY2UgYW4gZXJy b3IgaW4gZmlyc3QgY29tcHJlc3NlZCBibG9jayAqLworICAgIGNfc3RyZWFtLmF2YWlsX2luID0g bGVuIC0gMzsKKworICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CisgICAg aWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxh dGUiKTsKKyAgICB9CisgICAgZXJyID0gZGVmbGF0ZUVuZCgmY19zdHJlYW0pOworICAgIENIRUNL X0VSUihlcnIsICJkZWZsYXRlRW5kIik7CisKKyAgICAqY29tcHJMZW4gPSBjX3N0cmVhbS50b3Rh bF9vdXQ7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGVzdCBpbmZsYXRlU3luYygp CisgKi8KK3ZvaWQgdGVzdF9zeW5jKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxl bikKKyAgICBCeXRlICpjb21wciwgKnVuY29tcHI7CisgICAgdUxvbmcgY29tcHJMZW4sIHVuY29t cHJMZW47Cit7CisgICAgaW50IGVycjsKKyAgICB6X3N0cmVhbSBkX3N0cmVhbTsgLyogZGVjb21w cmVzc2lvbiBzdHJlYW0gKi8KKworICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2Ui KTsKKworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9 IHpmcmVlOworICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGRfc3RyZWFt Lm5leHRfaW4gID0gY29tcHI7CisgICAgZF9zdHJlYW0uYXZhaWxfaW4gPSAyOyAvKiBqdXN0IHJl YWQgdGhlIHpsaWIgaGVhZGVyICovCisKKyAgICBlcnIgPSBpbmZsYXRlSW5pdCgmZF9zdHJlYW0p OworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlSW5pdCIpOworCisgICAgZF9zdHJlYW0ubmV4 dF9vdXQgPSB1bmNvbXByOworICAgIGRfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KXVuY29tcHJM ZW47CisKKyAgICBlcnIgPSBpbmZsYXRlKCZkX3N0cmVhbSwgWl9OT19GTFVTSCk7CisgICAgQ0hF Q0tfRVJSKGVyciwgImluZmxhdGUiKTsKKworICAgIGRfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQp Y29tcHJMZW4tMjsgICAvKiByZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICBlcnIgPSBp bmZsYXRlU3luYygmZF9zdHJlYW0pOyAgICAgICAgICAgLyogYnV0IHNraXAgdGhlIGRhbWFnZWQg cGFydCAqLworICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlU3luYyIpOworCisgICAgZXJyID0g aW5mbGF0ZSgmZF9zdHJlYW0sIFpfRklOSVNIKTsKKyAgICBpZiAoZXJyICE9IFpfREFUQV9FUlJP UikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluZmxhdGUgc2hvdWxkIHJlcG9ydCBEQVRB X0VSUk9SXG4iKTsKKyAgICAgICAgLyogQmVjYXVzZSBvZiBpbmNvcnJlY3QgYWRsZXIzMiAqLwor ICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBlcnIgPSBpbmZsYXRlRW5kKCZkX3N0cmVhbSk7 CisgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGVFbmQiKTsKKworICAgIHByaW50ZigiYWZ0ZXIg aW5mbGF0ZVN5bmMoKTogaGVsJXNcbiIsIChjaGFyICopdW5jb21wcik7Cit9CisKKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorICogVGVzdCBkZWZsYXRlKCkgd2l0aCBwcmVzZXQgZGljdGlvbmFyeQor ICovCit2b2lkIHRlc3RfZGljdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbikKKyAgICBCeXRlICpj b21wcjsKKyAgICB1TG9uZyBjb21wckxlbjsKK3sKKyAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyog Y29tcHJlc3Npb24gc3RyZWFtICovCisgICAgaW50IGVycjsKKworICAgIGNfc3RyZWFtLnphbGxv YyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOworICAgIGNfc3RyZWFtLm9w YXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9C RVNUX0NPTVBSRVNTSU9OKTsKKyAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKKwor ICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZjX3N0cmVhbSwKKyAgICAgICAgICAgICAg ICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAg ICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZVNldERpY3Rpb25hcnkiKTsKKworICAgIGRpY3RJZCA9 IGNfc3RyZWFtLmFkbGVyOworICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CisgICAgY19z dHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpY29tcHJMZW47CisKKyAgICBjX3N0cmVhbS5uZXh0X2lu ID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOworICAgIGNfc3RyZWFtLmF2YWlsX2lu ID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOworCisgICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0s IFpfRklOSVNIKTsKKyAgICBpZiAoZXJyICE9IFpfU1RSRUFNX0VORCkgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgImRlZmxhdGUgc2hvdWxkIHJlcG9ydCBaX1NUUkVBTV9FTkRcbiIpOworICAg ICAgICBleGl0KDEpOworICAgIH0KKyAgICBlcnIgPSBkZWZsYXRlRW5kKCZjX3N0cmVhbSk7Cisg ICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVFbmQiKTsKK30KKworLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisgKiBUZXN0IGluZmxhdGUoKSB3aXRoIGEgcHJlc2V0IGRpY3Rpb25hcnkKKyAqLwordm9p ZCB0ZXN0X2RpY3RfaW5mbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4p CisgICAgQnl0ZSAqY29tcHIsICp1bmNvbXByOworICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXBy TGVuOworeworICAgIGludCBlcnI7CisgICAgel9zdHJlYW0gZF9zdHJlYW07IC8qIGRlY29tcHJl c3Npb24gc3RyZWFtICovCisKKyAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7 CisKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6 ZnJlZTsKKyAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CisKKyAgICBkX3N0cmVhbS5u ZXh0X2luICA9IGNvbXByOworICAgIGRfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW47 CisKKyAgICBlcnIgPSBpbmZsYXRlSW5pdCgmZF9zdHJlYW0pOworICAgIENIRUNLX0VSUihlcnIs ICJpbmZsYXRlSW5pdCIpOworCisgICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNvbXByOworICAg IGRfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KXVuY29tcHJMZW47CisKKyAgICBmb3IgKDs7KSB7 CisgICAgICAgIGVyciA9IGluZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAg aWYgKGVyciA9PSBaX1NUUkVBTV9FTkQpIGJyZWFrOworICAgICAgICBpZiAoZXJyID09IFpfTkVF RF9ESUNUKSB7CisgICAgICAgICAgICBpZiAoZF9zdHJlYW0uYWRsZXIgIT0gZGljdElkKSB7Cisg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIGRpY3Rpb25hcnkiKTsK KyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJy ID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJmRfc3RyZWFtLCAoY29uc3QgQnl0ZWYqKWRpY3Rpb25h cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihk aWN0aW9uYXJ5KSk7CisgICAgICAgIH0KKyAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUg d2l0aCBkaWN0Iik7CisgICAgfQorCisgICAgZXJyID0gaW5mbGF0ZUVuZCgmZF9zdHJlYW0pOwor ICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlRW5kIik7CisKKyAgICBpZiAoc3RyY21wKChjaGFy Kil1bmNvbXByLCBoZWxsbykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgaW5mbGF0 ZSB3aXRoIGRpY3RcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0gZWxzZSB7CisgICAgICAg IHByaW50ZigiaW5mbGF0ZSB3aXRoIGRpY3Rpb25hcnk6ICVzXG4iLCAoY2hhciAqKXVuY29tcHIp OworICAgIH0KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVc2FnZTogIGV4YW1wbGUg W291dHB1dC5neiAgW2lucHV0Lmd6XV0KKyAqLworCitpbnQgbWFpbihhcmdjLCBhcmd2KQorICAg IGludCBhcmdjOworICAgIGNoYXIgKmFyZ3ZbXTsKK3sKKyAgICBCeXRlICpjb21wciwgKnVuY29t cHI7CisgICAgdUxvbmcgY29tcHJMZW4gPSAxMDAwMCpzaXplb2YoaW50KTsgLyogZG9uJ3Qgb3Zl cmZsb3cgb24gTVNET1MgKi8KKyAgICB1TG9uZyB1bmNvbXByTGVuID0gY29tcHJMZW47CisgICAg c3RhdGljIGNvbnN0IGNoYXIqIG15VmVyc2lvbiA9IFpMSUJfVkVSU0lPTjsKKworICAgIGlmICh6 bGliVmVyc2lvbigpWzBdICE9IG15VmVyc2lvblswXSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgImluY29tcGF0aWJsZSB6bGliIHZlcnNpb25cbiIpOworICAgICAgICBleGl0KDEpOworCisg ICAgfSBlbHNlIGlmIChzdHJjbXAoemxpYlZlcnNpb24oKSwgWkxJQl9WRVJTSU9OKSAhPSAwKSB7 CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogZGlmZmVyZW50IHpsaWIgdmVyc2lv blxuIik7CisgICAgfQorCisgICAgcHJpbnRmKCJ6bGliIHZlcnNpb24gJXMgPSAweCUwNHgsIGNv bXBpbGUgZmxhZ3MgPSAweCVseFxuIiwKKyAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgWkxJQl9W RVJOVU0sIHpsaWJDb21waWxlRmxhZ3MoKSk7CisKKyAgICBjb21wciAgICA9IChCeXRlKiljYWxs b2MoKHVJbnQpY29tcHJMZW4sIDEpOworICAgIHVuY29tcHIgID0gKEJ5dGUqKWNhbGxvYygodUlu dCl1bmNvbXByTGVuLCAxKTsKKyAgICAvKiBjb21wciBhbmQgdW5jb21wciBhcmUgY2xlYXJlZCB0 byBhdm9pZCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQKKyAgICAgKiBkYXRhIGFuZCB0byBlbnN1cmUg dGhhdCB1bmNvbXByIGNvbXByZXNzZXMgd2VsbC4KKyAgICAgKi8KKyAgICBpZiAoY29tcHIgPT0g Wl9OVUxMIHx8IHVuY29tcHIgPT0gWl9OVUxMKSB7CisgICAgICAgIHByaW50Zigib3V0IG9mIG1l bW9yeVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisjaWZkZWYgWl9TT0xPCisgICAg KHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworI2Vsc2UKKyAgICB0ZXN0X2NvbXByZXNzKGNv bXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CisKKyAgICB0ZXN0X2d6aW8oKGFy Z2MgPiAxID8gYXJndlsxXSA6IFRFU1RGSUxFKSwKKyAgICAgICAgICAgICAgdW5jb21wciwgdW5j b21wckxlbik7CisjZW5kaWYKKworICAgIHRlc3RfZGVmbGF0ZShjb21wciwgY29tcHJMZW4pOwor ICAgIHRlc3RfaW5mbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwor CisgICAgdGVzdF9sYXJnZV9kZWZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21w ckxlbik7CisgICAgdGVzdF9sYXJnZV9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwg dW5jb21wckxlbik7CisKKyAgICB0ZXN0X2ZsdXNoKGNvbXByLCAmY29tcHJMZW4pOworICAgIHRl c3Rfc3luYyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOworICAgIGNvbXBy TGVuID0gdW5jb21wckxlbjsKKworICAgIHRlc3RfZGljdF9kZWZsYXRlKGNvbXByLCBjb21wckxl bik7CisgICAgdGVzdF9kaWN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNv bXByTGVuKTsKKworICAgIGZyZWUoY29tcHIpOworICAgIGZyZWUodW5jb21wcik7CisKKyAgICBy ZXR1cm4gMDsKK30KZGlmZiAtciA5YTMxNzcyMzE3OTAgLXIgZTJkMTkzOWIxY2NjIHN5cy9zcmMv Y21kL2dzL3psaWIvdGVzdC9pbmZjb3Zlci5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDow MDowMCAxOTcwICswMDAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIvdGVzdC9pbmZjb3Zlci5j CVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtMCwwICsxLDY3MSBAQAorLyogaW5m Y292ZXIuYyAtLSB0ZXN0IHpsaWIncyBpbmZsYXRlIHJvdXRpbmVzIHdpdGggZnVsbCBjb2RlIGNv dmVyYWdlCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgTWFyayBBZGxlcgorICogRm9yIGNv bmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGlu IHpsaWIuaAorICovCisKKy8qIHRvIHVzZSwgZG86IC4vY29uZmlndXJlIC0tY292ZXIgJiYgbWFr ZSBjb3ZlciAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlICJ6bGliLmgi CisKKy8qIGdldCBkZWZpbml0aW9uIG9mIGludGVybmFsIHN0cnVjdHVyZSBzbyB3ZSBjYW4gbWVz cyB3aXRoIGl0IChzZWUgcHVsbCgpKSwKKyAgIGFuZCBzbyB3ZSBjYW4gY2FsbCBpbmZsYXRlX3Ry ZWVzKCkgKHNlZSBjb3ZlcjUoKSkgKi8KKyNkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2luY2x1ZGUg ImluZnRyZWVzLmgiCisjaW5jbHVkZSAiaW5mbGF0ZS5oIgorCisjZGVmaW5lIGxvY2FsIHN0YXRp YworCisvKiAtLSBtZW1vcnkgdHJhY2tpbmcgcm91dGluZXMgLS0gKi8KKworLyoKKyAgIFRoZXNl IG1lbW9yeSB0cmFja2luZyByb3V0aW5lcyBhcmUgcHJvdmlkZWQgdG8gemxpYiBhbmQgdHJhY2sg YWxsIG9mIHpsaWIncworICAgYWxsb2NhdGlvbnMgYW5kIGRlYWxsb2NhdGlvbnMsIGNoZWNrIGZv ciBMSUZPIG9wZXJhdGlvbnMsIGtlZXAgYSBjdXJyZW50CisgICBhbmQgaGlnaCB3YXRlciBtYXJr IG9mIHRvdGFsIGJ5dGVzIHJlcXVlc3RlZCwgb3B0aW9uYWxseSBzZXQgYSBsaW1pdCBvbiB0aGUK KyAgIHRvdGFsIG1lbW9yeSB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQsIGFuZCB3aGVuIGRvbmUgY2hl Y2sgZm9yIG1lbW9yeSBsZWFrcy4KKworICAgVGhleSBhcmUgdXNlZCBhcyBmb2xsb3dzOgorCisg ICB6X3N0cmVhbSBzdHJtOworICAgbWVtX3NldHVwKCZzdHJtKSAgICAgICAgIGluaXRpYWxpemVz IHRoZSBtZW1vcnkgdHJhY2tpbmcgYW5kIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgemFsbG9jLCB6ZnJlZSwgYW5kIG9wYXF1ZSBtZW1iZXJzIG9mIHN0cm0gdG8gdXNlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IHRyYWNraW5nIGZvciBhbGwgemxpYiBv cGVyYXRpb25zIG9uIHN0cm0KKyAgIG1lbV9saW1pdCgmc3RybSwgbGltaXQpICBzZXRzIGEgbGlt aXQgb24gdGhlIHRvdGFsIGJ5dGVzIHJlcXVlc3RlZCAtLSBhCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVxdWVzdCB0aGF0IGV4Y2VlZHMgdGhpcyBsaW1pdCB3aWxsIHJlc3VsdCBpbiBh bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24gZmFpbHVyZSAocmV0dXJu cyBOVUxMKSAtLSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0 IHRvIHplcm8gbWVhbnMgbm8gbGltaXQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWZ0ZXIgbWVtX3NldHVwKCkKKyAgIG1lbV91c2VkKCZzdHJtLCAi bXNnIikgICBwcmludHMgdG8gc3RkZXJyICJtc2ciIGFuZCB0aGUgdG90YWwgYnl0ZXMgdXNlZAor ICAgbWVtX2hpZ2goJnN0cm0sICJtc2ciKSAgIHByaW50cyB0byBzdGRlcnIgIm1zZyIgYW5kIHRo ZSBoaWdoIHdhdGVyIG1hcmsKKyAgIG1lbV9kb25lKCZzdHJtLCAibXNnIikgICBlbmRzIG1lbW9y eSB0cmFja2luZywgcmVsZWFzZXMgYWxsIGFsbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIHRoZSB0cmFja2luZyBhcyB3ZWxsIGFzIGxlYWtlZCB6bGliIGJsb2Nrcywg aWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkuICBJZiB0aGVyZSB3YXMgYW55dGhp bmcgdW51c3VhbCwgc3VjaCBhcyBsZWFrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi bG9ja3MsIG5vbi1GSUZPIGZyZWVzLCBvciBmcmVlcyBvZiBhZGRyZXNzZXMgbm90CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkLCB0aGVuICJtc2ciIGFuZCBpbmZvcm1hdGlv biBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ibGVtIGlzIHByaW50 ZWQgdG8gc3RkZXJyLiAgSWYgZXZlcnl0aGluZyBpcworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5vcm1hbCwgbm90aGluZyBpcyBwcmludGVkLiBtZW1fZG9uZSByZXNldHMgdGhlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RybSBtZW1iZXJzIHRvIFpfTlVMTCB0byB1c2UgdGhl IGRlZmF1bHQgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiBy b3V0aW5lcyBvbiB0aGUgbmV4dCB6bGliIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdXNpbmcgc3RybS4KKyAqLworCisvKiB0aGVzZSBpdGVtcyBhcmUgc3RydW5n IHRvZ2V0aGVyIGluIGEgbGlua2VkIGxpc3QsIG9uZSBmb3IgZWFjaCBhbGxvY2F0aW9uICovCitz dHJ1Y3QgbWVtX2l0ZW0geworICAgIHZvaWQgKnB0cjsgICAgICAgICAgICAgICAgICAvKiBwb2lu dGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAg ICAgLyogcmVxdWVzdGVkIHNpemUgb2YgYWxsb2NhdGlvbiAqLworICAgIHN0cnVjdCBtZW1faXRl bSAqbmV4dDsgICAgICAvKiBwb2ludGVyIHRvIG5leHQgaXRlbSBpbiBsaXN0LCBvciBOVUxMICov Cit9OworCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBhdCB0aGUgcm9vdCBvZiB0aGUgbGlua2VkIGxp c3QsIGFuZCB0cmFja3Mgc3RhdGlzdGljcyAqLworc3RydWN0IG1lbV96b25lIHsKKyAgICBzdHJ1 Y3QgbWVtX2l0ZW0gKmZpcnN0OyAgICAgLyogcG9pbnRlciB0byBmaXJzdCBpdGVtIGluIGxpc3Qs IG9yIE5VTEwgKi8KKyAgICBzaXplX3QgdG90YWwsIGhpZ2h3YXRlcjsgICAgLyogdG90YWwgYWxs b2NhdGlvbnMsIGFuZCBsYXJnZXN0IHRvdGFsICovCisgICAgc2l6ZV90IGxpbWl0OyAgICAgICAg ICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uIGxpbWl0LCBvciAwIGlmIG5vIGxpbWl0ICovCisg ICAgaW50IG5vdGxpZm8sIHJvZ3VlOyAgICAgICAgIC8qIGNvdW50cyBvZiBub24tTElGTyBmcmVl cyBhbmQgcm9ndWUgZnJlZXMgKi8KK307CisKKy8qIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmUg dG8gcGFzcyB0byB6bGliICovCitsb2NhbCB2b2lkICptZW1fYWxsb2Modm9pZCAqbWVtLCB1bnNp Z25lZCBjb3VudCwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICB2b2lkICpwdHI7CisgICAgc3RydWN0 IG1lbV9pdGVtICppdGVtOworICAgIHN0cnVjdCBtZW1fem9uZSAqem9uZSA9IG1lbTsKKyAgICBz aXplX3QgbGVuID0gY291bnQgKiAoc2l6ZV90KXNpemU7CisKKyAgICAvKiBpbmR1Y2VkIGFsbG9j YXRpb24gZmFpbHVyZSAqLworICAgIGlmICh6b25lID09IE5VTEwgfHwgKHpvbmUtPmxpbWl0ICYm IHpvbmUtPnRvdGFsICsgbGVuID4gem9uZS0+bGltaXQpKQorICAgICAgICByZXR1cm4gTlVMTDsK KworICAgIC8qIHBlcmZvcm0gYWxsb2NhdGlvbiB1c2luZyB0aGUgc3RhbmRhcmQgbGlicmFyeSwg ZmlsbCBtZW1vcnkgd2l0aCBhCisgICAgICAgbm9uLXplcm8gdmFsdWUgdG8gbWFrZSBzdXJlIHRo YXQgdGhlIGNvZGUgaXNuJ3QgZGVwZW5kaW5nIG9uIHplcm9zICovCisgICAgcHRyID0gbWFsbG9j KGxlbik7CisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBt ZW1zZXQocHRyLCAweGE1LCBsZW4pOworCisgICAgLyogY3JlYXRlIGEgbmV3IGl0ZW0gZm9yIHRo ZSBsaXN0ICovCisgICAgaXRlbSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1lbV9pdGVtKSk7Cisg ICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICBmcmVlKHB0cik7CisgICAgICAgIHJldHVy biBOVUxMOworICAgIH0KKyAgICBpdGVtLT5wdHIgPSBwdHI7CisgICAgaXRlbS0+c2l6ZSA9IGxl bjsKKworICAgIC8qIGluc2VydCBpdGVtIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgKi8K KyAgICBpdGVtLT5uZXh0ID0gem9uZS0+Zmlyc3Q7CisgICAgem9uZS0+Zmlyc3QgPSBpdGVtOwor CisgICAgLyogdXBkYXRlIHRoZSBzdGF0aXN0aWNzICovCisgICAgem9uZS0+dG90YWwgKz0gaXRl bS0+c2l6ZTsKKyAgICBpZiAoem9uZS0+dG90YWwgPiB6b25lLT5oaWdod2F0ZXIpCisgICAgICAg IHpvbmUtPmhpZ2h3YXRlciA9IHpvbmUtPnRvdGFsOworCisgICAgLyogcmV0dXJuIHRoZSBhbGxv Y2F0ZWQgbWVtb3J5ICovCisgICAgcmV0dXJuIHB0cjsKK30KKworLyogbWVtb3J5IGZyZWUgcm91 dGluZSB0byBwYXNzIHRvIHpsaWIgKi8KK2xvY2FsIHZvaWQgbWVtX2ZyZWUodm9pZCAqbWVtLCB2 b2lkICpwdHIpCit7CisgICAgc3RydWN0IG1lbV9pdGVtICppdGVtLCAqbmV4dDsKKyAgICBzdHJ1 Y3QgbWVtX3pvbmUgKnpvbmUgPSBtZW07CisKKyAgICAvKiBpZiBubyB6b25lLCBqdXN0IGRvIGEg ZnJlZSAqLworICAgIGlmICh6b25lID09IE5VTEwpIHsKKyAgICAgICAgZnJlZShwdHIpOworICAg ICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogcG9pbnQgbmV4dCB0byB0aGUgaXRlbSB0aGF0 IG1hdGNoZXMgcHRyLCBvciBOVUxMIGlmIG5vdCBmb3VuZCAtLSByZW1vdmUKKyAgICAgICB0aGUg aXRlbSBmcm9tIHRoZSBsaW5rZWQgbGlzdCBpZiBmb3VuZCAqLworICAgIG5leHQgPSB6b25lLT5m aXJzdDsKKyAgICBpZiAobmV4dCkgeworICAgICAgICBpZiAobmV4dC0+cHRyID09IHB0cikKKyAg ICAgICAgICAgIHpvbmUtPmZpcnN0ID0gbmV4dC0+bmV4dDsgICAvKiBmaXJzdCBvbmUgaXMgaXQs IHJlbW92ZSBmcm9tIGxpc3QgKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogc2VhcmNoIHRoZSBsaW5rZWQgbGlzdCAqLworICAgICAg ICAgICAgICAgIGl0ZW0gPSBuZXh0OworICAgICAgICAgICAgICAgIG5leHQgPSBpdGVtLT5uZXh0 OworICAgICAgICAgICAgfSB3aGlsZSAobmV4dCAhPSBOVUxMICYmIG5leHQtPnB0ciAhPSBwdHIp OworICAgICAgICAgICAgaWYgKG5leHQpIHsgICAgICAgICAgICAgICAgIC8qIGlmIGZvdW5kLCBy ZW1vdmUgZnJvbSBsaW5rZWQgbGlzdCAqLworICAgICAgICAgICAgICAgIGl0ZW0tPm5leHQgPSBu ZXh0LT5uZXh0OworICAgICAgICAgICAgICAgIHpvbmUtPm5vdGxpZm8rKzsgICAgICAgIC8qIG5v dCBhIExJRk8gZnJlZSAqLworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CisKKyAg ICAvKiBpZiBmb3VuZCwgdXBkYXRlIHRoZSBzdGF0aXN0aWNzIGFuZCBmcmVlIHRoZSBpdGVtICov CisgICAgaWYgKG5leHQpIHsKKyAgICAgICAgem9uZS0+dG90YWwgLT0gbmV4dC0+c2l6ZTsKKyAg ICAgICAgZnJlZShuZXh0KTsKKyAgICB9CisKKyAgICAvKiBpZiBub3QgZm91bmQsIHVwZGF0ZSB0 aGUgcm9ndWUgY291bnQgKi8KKyAgICBlbHNlCisgICAgICAgIHpvbmUtPnJvZ3VlKys7CisKKyAg ICAvKiBpbiBhbnkgY2FzZSwgZG8gdGhlIHJlcXVlc3RlZCBmcmVlIHdpdGggdGhlIHN0YW5kYXJk IGxpYnJhcnkgZnVuY3Rpb24gKi8KKyAgICBmcmVlKHB0cik7Cit9CisKKy8qIHNldCB1cCBhIGNv bnRyb2xsZWQgbWVtb3J5IGFsbG9jYXRpb24gc3BhY2UgZm9yIG1vbml0b3JpbmcsIHNldCB0aGUg c3RyZWFtCisgICBwYXJhbWV0ZXJzIHRvIHRoZSBjb250cm9sbGVkIHJvdXRpbmVzLCB3aXRoIG9w YXF1ZSBwb2ludGluZyB0byB0aGUgc3BhY2UgKi8KK2xvY2FsIHZvaWQgbWVtX3NldHVwKHpfc3Ry ZWFtICpzdHJtKQoreworICAgIHN0cnVjdCBtZW1fem9uZSAqem9uZTsKKworICAgIHpvbmUgPSBt YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZW1fem9uZSkpOworICAgIGFzc2VydCh6b25lICE9IE5VTEwp OworICAgIHpvbmUtPmZpcnN0ID0gTlVMTDsKKyAgICB6b25lLT50b3RhbCA9IDA7CisgICAgem9u ZS0+aGlnaHdhdGVyID0gMDsKKyAgICB6b25lLT5saW1pdCA9IDA7CisgICAgem9uZS0+bm90bGlm byA9IDA7CisgICAgem9uZS0+cm9ndWUgPSAwOworICAgIHN0cm0tPm9wYXF1ZSA9IHpvbmU7Cisg ICAgc3RybS0+emFsbG9jID0gbWVtX2FsbG9jOworICAgIHN0cm0tPnpmcmVlID0gbWVtX2ZyZWU7 Cit9CisKKy8qIHNldCBhIGxpbWl0IG9uIHRoZSB0b3RhbCBtZW1vcnkgYWxsb2NhdGlvbiwgb3Ig MCB0byByZW1vdmUgdGhlIGxpbWl0ICovCitsb2NhbCB2b2lkIG1lbV9saW1pdCh6X3N0cmVhbSAq c3RybSwgc2l6ZV90IGxpbWl0KQoreworICAgIHN0cnVjdCBtZW1fem9uZSAqem9uZSA9IHN0cm0t Pm9wYXF1ZTsKKworICAgIHpvbmUtPmxpbWl0ID0gbGltaXQ7Cit9CisKKy8qIHNob3cgdGhlIGN1 cnJlbnQgdG90YWwgcmVxdWVzdGVkIGFsbG9jYXRpb25zIGluIGJ5dGVzICovCitsb2NhbCB2b2lk IG1lbV91c2VkKHpfc3RyZWFtICpzdHJtLCBjaGFyICpwcmVmaXgpCit7CisgICAgc3RydWN0IG1l bV96b25lICp6b25lID0gc3RybS0+b3BhcXVlOworCisgICAgZnByaW50ZihzdGRlcnIsICIlczog JWx1IGFsbG9jYXRlZFxuIiwgcHJlZml4LCB6b25lLT50b3RhbCk7Cit9CisKKy8qIHNob3cgdGhl IGhpZ2ggd2F0ZXIgYWxsb2NhdGlvbiBpbiBieXRlcyAqLworbG9jYWwgdm9pZCBtZW1faGlnaCh6 X3N0cmVhbSAqc3RybSwgY2hhciAqcHJlZml4KQoreworICAgIHN0cnVjdCBtZW1fem9uZSAqem9u ZSA9IHN0cm0tPm9wYXF1ZTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVsdSBoaWdoIHdh dGVyIG1hcmtcbiIsIHByZWZpeCwgem9uZS0+aGlnaHdhdGVyKTsKK30KKworLyogcmVsZWFzZSB0 aGUgbWVtb3J5IGFsbG9jYXRpb24gem9uZSAtLSBpZiB0aGVyZSBhcmUgYW55IHN1cnByaXNlcywg bm90aWZ5ICovCitsb2NhbCB2b2lkIG1lbV9kb25lKHpfc3RyZWFtICpzdHJtLCBjaGFyICpwcmVm aXgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBzdHJ1Y3QgbWVtX2l0ZW0gKml0ZW0sICpu ZXh0OworICAgIHN0cnVjdCBtZW1fem9uZSAqem9uZSA9IHN0cm0tPm9wYXF1ZTsKKworICAgIC8q IHNob3cgaGlnaCB3YXRlciBtYXJrICovCisgICAgbWVtX2hpZ2goc3RybSwgcHJlZml4KTsKKwor ICAgIC8qIGZyZWUgbGVmdG92ZXIgYWxsb2NhdGlvbnMgYW5kIGl0ZW0gc3RydWN0dXJlcywgaWYg YW55ICovCisgICAgaXRlbSA9IHpvbmUtPmZpcnN0OworICAgIHdoaWxlIChpdGVtICE9IE5VTEwp IHsKKyAgICAgICAgZnJlZShpdGVtLT5wdHIpOworICAgICAgICBuZXh0ID0gaXRlbS0+bmV4dDsK KyAgICAgICAgZnJlZShpdGVtKTsKKyAgICAgICAgaXRlbSA9IG5leHQ7CisgICAgICAgIGNvdW50 Kys7CisgICAgfQorCisgICAgLyogaXNzdWUgYWxlcnRzIGFib3V0IGFueXRoaW5nIHVuZXhwZWN0 ZWQgKi8KKyAgICBpZiAoY291bnQgfHwgem9uZS0+dG90YWwpCisgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiKiogJXM6ICVsdSBieXRlcyBpbiAlZCBibG9ja3Mgbm90IGZyZWVkXG4iLAorICAgICAg ICAgICAgICAgIHByZWZpeCwgem9uZS0+dG90YWwsIGNvdW50KTsKKyAgICBpZiAoem9uZS0+bm90 bGlmbykKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIqKiAlczogJWQgZnJlZXMgbm90IExJRk9c biIsIHByZWZpeCwgem9uZS0+bm90bGlmbyk7CisgICAgaWYgKHpvbmUtPnJvZ3VlKQorICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIioqICVzOiAlZCBmcmVlcyBub3QgcmVjb2duaXplZFxuIiwKKyAg ICAgICAgICAgICAgICBwcmVmaXgsIHpvbmUtPnJvZ3VlKTsKKworICAgIC8qIGZyZWUgdGhlIHpv bmUgYW5kIGRlbGV0ZSBmcm9tIHRoZSBzdHJlYW0gKi8KKyAgICBmcmVlKHpvbmUpOworICAgIHN0 cm0tPm9wYXF1ZSA9IFpfTlVMTDsKKyAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7CisgICAgc3Ry bS0+emZyZWUgPSBaX05VTEw7Cit9CisKKy8qIC0tIGluZmxhdGUgdGVzdCByb3V0aW5lcyAtLSAq LworCisvKiBEZWNvZGUgYSBoZXhhZGVjaW1hbCBzdHJpbmcsIHNldCAqbGVuIHRvIGxlbmd0aCwg aW5bXSB0byB0aGUgYnl0ZXMuICBUaGlzCisgICBkZWNvZGVzIGxpYmVyYWxseSwgaW4gdGhhdCBo ZXggZGlnaXRzIGNhbiBiZSBhZGphY2VudCwgaW4gd2hpY2ggY2FzZSB0d28gaW4KKyAgIGEgcm93 IHdyaXRlcyBhIGJ5dGUuICBPciB0aGV5IGNhbiBiZSBkZWxpbWl0ZWQgYnkgYW55IG5vbi1oZXgg Y2hhcmFjdGVyLAorICAgd2hlcmUgdGhlIGRlbGltaXRlcnMgYXJlIGlnbm9yZWQgZXhjZXB0IHdo ZW4gYSBzaW5nbGUgaGV4IGRpZ2l0IGlzIGZvbGxvd2VkCisgICBieSBhIGRlbGltaXRlciwgd2hl cmUgdGhhdCBzaW5nbGUgZGlnaXQgd3JpdGVzIGEgYnl0ZS4gIFRoZSByZXR1cm5lZCBkYXRhIGlz CisgICBhbGxvY2F0ZWQgYW5kIG11c3QgZXZlbnR1YWxseSBiZSBmcmVlZC4gIE5VTEwgaXMgcmV0 dXJuZWQgaWYgb3V0IG9mIG1lbW9yeS4KKyAgIElmIHRoZSBsZW5ndGggaXMgbm90IG5lZWRlZCwg dGhlbiBsZW4gY2FuIGJlIE5VTEwuICovCitsb2NhbCB1bnNpZ25lZCBjaGFyICpoMmIoY29uc3Qg Y2hhciAqaGV4LCB1bnNpZ25lZCAqbGVuKQoreworICAgIHVuc2lnbmVkIGNoYXIgKmluLCAqcmU7 CisgICAgdW5zaWduZWQgbmV4dCwgdmFsOworCisgICAgaW4gPSBtYWxsb2MoKHN0cmxlbihoZXgp ICsgMSkgPj4gMSk7CisgICAgaWYgKGluID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwor ICAgIG5leHQgPSAwOworICAgIHZhbCA9IDE7CisgICAgZG8geworICAgICAgICBpZiAoKmhleCA+ PSAnMCcgJiYgKmhleCA8PSAnOScpCisgICAgICAgICAgICB2YWwgPSAodmFsIDw8IDQpICsgKmhl eCAtICcwJzsKKyAgICAgICAgZWxzZSBpZiAoKmhleCA+PSAnQScgJiYgKmhleCA8PSAnRicpCisg ICAgICAgICAgICB2YWwgPSAodmFsIDw8IDQpICsgKmhleCAtICdBJyArIDEwOworICAgICAgICBl bHNlIGlmICgqaGV4ID49ICdhJyAmJiAqaGV4IDw9ICdmJykKKyAgICAgICAgICAgIHZhbCA9ICh2 YWwgPDwgNCkgKyAqaGV4IC0gJ2EnICsgMTA7CisgICAgICAgIGVsc2UgaWYgKHZhbCAhPSAxICYm IHZhbCA8IDMyKSAgLyogb25lIGRpZ2l0IGZvbGxvd2VkIGJ5IGRlbGltaXRlciAqLworICAgICAg ICAgICAgdmFsICs9IDI0MDsgICAgICAgICAgICAgICAgIC8qIG1ha2UgaXQgbG9vayBsaWtlIHR3 byBkaWdpdHMgKi8KKyAgICAgICAgaWYgKHZhbCA+IDI1NSkgeyAgICAgICAgICAgICAgICAvKiBo YXZlIHR3byBkaWdpdHMgKi8KKyAgICAgICAgICAgIGluW25leHQrK10gPSB2YWwgJiAweGZmOyAg ICAvKiBzYXZlIHRoZSBkZWNvZGVkIGJ5dGUgKi8KKyAgICAgICAgICAgIHZhbCA9IDE7ICAgICAg ICAgICAgICAgICAgICAvKiBzdGFydCBvdmVyICovCisgICAgICAgIH0KKyAgICB9IHdoaWxlICgq aGV4KyspOyAgICAgICAvKiBnbyB0aHJvdWdoIHRoZSBsb29wIHdpdGggdGhlIHRlcm1pbmF0aW5n IG51bGwgKi8KKyAgICBpZiAobGVuICE9IE5VTEwpCisgICAgICAgICpsZW4gPSBuZXh0OworICAg IHJlID0gcmVhbGxvYyhpbiwgbmV4dCk7CisgICAgcmV0dXJuIHJlID09IE5VTEwgPyBpbiA6IHJl OworfQorCisvKiBnZW5lcmljIGluZmxhdGUoKSBydW4sIHdoZXJlIGhleCBpcyB0aGUgaGV4YWRl Y2ltYWwgaW5wdXQgZGF0YSwgd2hhdCBpcyB0aGUKKyAgIHRleHQgdG8gaW5jbHVkZSBpbiBhbiBl cnJvciBtZXNzYWdlLCBzdGVwIGlzIGhvdyBtdWNoIGlucHV0IGRhdGEgdG8gZmVlZAorICAgaW5m bGF0ZSgpIG9uIGVhY2ggY2FsbCwgb3IgemVybyB0byBmZWVkIGl0IGFsbCwgd2luIGlzIHRoZSB3 aW5kb3cgYml0cworICAgcGFyYW1ldGVyIHRvIGluZmxhdGVJbml0MigpLCBsZW4gaXMgdGhlIHNp emUgb2YgdGhlIG91dHB1dCBidWZmZXIsIGFuZCBlcnIKKyAgIGlzIHRoZSBlcnJvciBjb2RlIGV4 cGVjdGVkIGZyb20gdGhlIGZpcnN0IGluZmxhdGUoKSBjYWxsICh0aGUgc2Vjb25kCisgICBpbmZs YXRlKCkgY2FsbCBpcyBleHBlY3RlZCB0byByZXR1cm4gWl9TVFJFQU1fRU5EKS4gIElmIHdpbiBp cyA0NywgdGhlbgorICAgaGVhZGVyIGluZm9ybWF0aW9uIGlzIGNvbGxlY3RlZCB3aXRoIGluZmxh dGVHZXRIZWFkZXIoKS4gIElmIGEgemxpYiBzdHJlYW0KKyAgIGlzIGxvb2tpbmcgZm9yIGEgZGlj dGlvbmFyeSwgdGhlbiBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIHByb3ZpZGVkLgorICAgaW5mbGF0 ZSgpIGlzIHJ1biB1bnRpbCBhbGwgb2YgdGhlIGlucHV0IGRhdGEgaXMgY29uc3VtZWQuICovCits b2NhbCB2b2lkIGluZihjaGFyICpoZXgsIGNoYXIgKndoYXQsIHVuc2lnbmVkIHN0ZXAsIGludCB3 aW4sIHVuc2lnbmVkIGxlbiwKKyAgICAgICAgICAgICAgIGludCBlcnIpCit7CisgICAgaW50IHJl dDsKKyAgICB1bnNpZ25lZCBoYXZlOworICAgIHVuc2lnbmVkIGNoYXIgKmluLCAqb3V0OworICAg IHpfc3RyZWFtIHN0cm0sIGNvcHk7CisgICAgZ3pfaGVhZGVyIGhlYWQ7CisKKyAgICBtZW1fc2V0 dXAoJnN0cm0pOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpf TlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdDIoJnN0cm0sIHdpbik7CisgICAgaWYgKHJldCAh PSBaX09LKSB7CisgICAgICAgIG1lbV9kb25lKCZzdHJtLCB3aGF0KTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKyAgICBvdXQgPSBtYWxsb2MobGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAg IGFzc2VydChvdXQgIT0gTlVMTCk7CisgICAgaWYgKHdpbiA9PSA0NykgeworICAgICAgICBoZWFk LmV4dHJhID0gb3V0OworICAgICAgICBoZWFkLmV4dHJhX21heCA9IGxlbjsKKyAgICAgICAgaGVh ZC5uYW1lID0gb3V0OworICAgICAgICBoZWFkLm5hbWVfbWF4ID0gbGVuOworICAgICAgICBoZWFk LmNvbW1lbnQgPSBvdXQ7CisgICAgICAgIGhlYWQuY29tbV9tYXggPSBsZW47CisgICAgICAgIHJl dCA9IGluZmxhdGVHZXRIZWFkZXIoJnN0cm0sICZoZWFkKTsgICBhc3NlcnQocmV0ID09IFpfT0sp OworICAgIH0KKyAgICBpbiA9IGgyYihoZXgsICZoYXZlKTsgICAgICAgICAgICAgICAgICAgICAg IGFzc2VydChpbiAhPSBOVUxMKTsKKyAgICBpZiAoc3RlcCA9PSAwIHx8IHN0ZXAgPiBoYXZlKQor ICAgICAgICBzdGVwID0gaGF2ZTsKKyAgICBzdHJtLmF2YWlsX2luID0gc3RlcDsKKyAgICBoYXZl IC09IHN0ZXA7CisgICAgc3RybS5uZXh0X2luID0gaW47CisgICAgZG8geworICAgICAgICBzdHJt LmF2YWlsX291dCA9IGxlbjsKKyAgICAgICAgc3RybS5uZXh0X291dCA9IG91dDsKKyAgICAgICAg cmV0ID0gaW5mbGF0ZSgmc3RybSwgWl9OT19GTFVTSCk7ICAgICAgIGFzc2VydChlcnIgPT0gOSB8 fCByZXQgPT0gZXJyKTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LICYmIHJldCAhPSBaX0JVRl9F UlJPUiAmJiByZXQgIT0gWl9ORUVEX0RJQ1QpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg aWYgKHJldCA9PSBaX05FRURfRElDVCkgeworICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZVNldERp Y3Rpb25hcnkoJnN0cm0sIGluLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9EQVRBX0VSUk9SKTsKKyAgICAgICAgICAg IG1lbV9saW1pdCgmc3RybSwgMSk7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlU2V0RGljdGlv bmFyeSgmc3RybSwgb3V0LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9NRU1fRVJST1IpOworICAgICAgICAgICAgbWVt X2xpbWl0KCZzdHJtLCAwKTsKKyAgICAgICAgICAgICgoc3RydWN0IGluZmxhdGVfc3RhdGUgKilz dHJtLnN0YXRlKS0+bW9kZSA9IERJQ1Q7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlU2V0RGlj dGlvbmFyeSgmc3RybSwgb3V0LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgICAgICAgICByZXQgPSBp bmZsYXRlKCZzdHJtLCBaX05PX0ZMVVNIKTsgICBhc3NlcnQocmV0ID09IFpfQlVGX0VSUk9SKTsK KyAgICAgICAgfQorICAgICAgICByZXQgPSBpbmZsYXRlQ29weSgmY29weSwgJnN0cm0pOyAgICAg ICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUVuZCgmY29weSk7 ICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgICAgIGVyciA9IDk7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgY2FyZSBuZXh0IHRpbWUgYXJvdW5kICovCisg ICAgICAgIGhhdmUgKz0gc3RybS5hdmFpbF9pbjsKKyAgICAgICAgc3RybS5hdmFpbF9pbiA9IHN0 ZXAgPiBoYXZlID8gaGF2ZSA6IHN0ZXA7CisgICAgICAgIGhhdmUgLT0gc3RybS5hdmFpbF9pbjsK KyAgICB9IHdoaWxlIChzdHJtLmF2YWlsX2luKTsKKyAgICBmcmVlKGluKTsKKyAgICBmcmVlKG91 dCk7CisgICAgcmV0ID0gaW5mbGF0ZVJlc2V0Migmc3RybSwgLTgpOyAgICAgICAgICAgICBhc3Nl cnQocmV0ID09IFpfT0spOworICAgIHJldCA9IGluZmxhdGVFbmQoJnN0cm0pOyAgICAgICAgICAg ICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBtZW1fZG9uZSgmc3RybSwgd2hhdCk7 Cit9CisKKy8qIGNvdmVyIGFsbCBvZiB0aGUgbGluZXMgaW4gaW5mbGF0ZS5jIHVwIHRvIGluZmxh dGUoKSAqLworbG9jYWwgdm9pZCBjb3Zlcl9zdXBwb3J0KHZvaWQpCit7CisgICAgaW50IHJldDsK KyAgICB6X3N0cmVhbSBzdHJtOworCisgICAgbWVtX3NldHVwKCZzdHJtKTsKKyAgICBzdHJtLmF2 YWlsX2luID0gMDsKKyAgICBzdHJtLm5leHRfaW4gPSBaX05VTEw7CisgICAgcmV0ID0gaW5mbGF0 ZUluaXQoJnN0cm0pOyAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAg IG1lbV91c2VkKCZzdHJtLCAiaW5mbGF0ZSBpbml0Iik7CisgICAgcmV0ID0gaW5mbGF0ZVByaW1l KCZzdHJtLCA1LCAzMSk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIHJldCA9 IGluZmxhdGVQcmltZSgmc3RybSwgLTEsIDApOyAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09L KTsKKyAgICByZXQgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmc3RybSwgWl9OVUxMLCAwKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQg PT0gWl9TVFJFQU1fRVJST1IpOworICAgIHJldCA9IGluZmxhdGVFbmQoJnN0cm0pOyAgICAgICAg ICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBtZW1fZG9uZSgmc3RybSwgInBy aW1lIik7CisKKyAgICBpbmYoIjYzIDAiLCAiZm9yY2Ugd2luZG93IGFsbG9jYXRpb24iLCAwLCAt MTUsIDEsIFpfT0spOworICAgIGluZigiNjMgMTggNSIsICJmb3JjZSB3aW5kb3cgcmVwbGFjZW1l bnQiLCAwLCAtOCwgMjU5LCBaX09LKTsKKyAgICBpbmYoIjYzIDE4IDY4IDMwIGQwIDAgMCIsICJm b3JjZSBzcGxpdCB3aW5kb3cgdXBkYXRlIiwgNCwgLTgsIDI1OSwgWl9PSyk7CisgICAgaW5mKCIz IDAiLCAidXNlIGZpeGVkIGJsb2NrcyIsIDAsIC0xNSwgMSwgWl9TVFJFQU1fRU5EKTsKKyAgICBp bmYoIiIsICJiYWQgd2luZG93IHNpemUiLCAwLCAxLCAwLCBaX1NUUkVBTV9FUlJPUik7CisKKyAg ICBtZW1fc2V0dXAoJnN0cm0pOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0ubmV4 dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdF8oJnN0cm0sIFpMSUJfVkVSU0lP TiAtIDEsIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfVkVSU0lPTl9FUlJPUik7Cisg ICAgbWVtX2RvbmUoJnN0cm0sICJ3cm9uZyB2ZXJzaW9uIik7CisKKyAgICBzdHJtLmF2YWlsX2lu ID0gMDsKKyAgICBzdHJtLm5leHRfaW4gPSBaX05VTEw7CisgICAgcmV0ID0gaW5mbGF0ZUluaXQo JnN0cm0pOyAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIHJldCA9 IGluZmxhdGVFbmQoJnN0cm0pOyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09L KTsKKyAgICBmcHV0cygiaW5mbGF0ZSBidWlsdC1pbiBtZW1vcnkgcm91dGluZXNcbiIsIHN0ZGVy cik7Cit9CisKKy8qIGNvdmVyIGFsbCBpbmZsYXRlKCkgaGVhZGVyIGFuZCB0cmFpbGVyIGNhc2Vz IGFuZCBjb2RlIGFmdGVyIGluZmxhdGUoKSAqLworbG9jYWwgdm9pZCBjb3Zlcl93cmFwKHZvaWQp Cit7CisgICAgaW50IHJldDsKKyAgICB6X3N0cmVhbSBzdHJtLCBjb3B5OworICAgIHVuc2lnbmVk IGNoYXIgZGljdFsyNTddOworCisgICAgcmV0ID0gaW5mbGF0ZShaX05VTEwsIDApOyAgICAgICAg ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfU1RSRUFNX0VSUk9SKTsKKyAgICByZXQgPSBpbmZs YXRlRW5kKFpfTlVMTCk7ICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9TVFJFQU1f RVJST1IpOworICAgIHJldCA9IGluZmxhdGVDb3B5KFpfTlVMTCwgWl9OVUxMKTsgICAgICAgICAg YXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgZnB1dHMoImluZmxhdGUgYmFkIHBh cmFtZXRlcnNcbiIsIHN0ZGVycik7CisKKyAgICBpbmYoIjFmIDhiIDAgMCIsICJiYWQgZ3ppcCBt ZXRob2QiLCAwLCAzMSwgMCwgWl9EQVRBX0VSUk9SKTsKKyAgICBpbmYoIjFmIDhiIDggODAiLCAi YmFkIGd6aXAgZmxhZ3MiLCAwLCAzMSwgMCwgWl9EQVRBX0VSUk9SKTsKKyAgICBpbmYoIjc3IDg1 IiwgImJhZCB6bGliIG1ldGhvZCIsIDAsIDE1LCAwLCBaX0RBVEFfRVJST1IpOworICAgIGluZigi OCA5OSIsICJzZXQgd2luZG93IHNpemUgZnJvbSBoZWFkZXIiLCAwLCAwLCAwLCBaX09LKTsKKyAg ICBpbmYoIjc4IDljIiwgImJhZCB6bGliIHdpbmRvdyBzaXplIiwgMCwgOCwgMCwgWl9EQVRBX0VS Uk9SKTsKKyAgICBpbmYoIjc4IDljIDYzIDAgMCAwIDEgMCAxIiwgImNoZWNrIGFkbGVyMzIiLCAw LCAxNSwgMSwgWl9TVFJFQU1fRU5EKTsKKyAgICBpbmYoIjFmIDhiIDggMWUgMCAwIDAgMCAwIDAg MSAwIDAgMCAwIDAgMCIsICJiYWQgaGVhZGVyIGNyYyIsIDAsIDQ3LCAxLAorICAgICAgICBaX0RB VEFfRVJST1IpOworICAgIGluZigiMWYgOGIgOCAyIDAgMCAwIDAgMCAwIDFkIDI2IDMgMCAwIDAg MCAwIDAgMCAwIDAiLCAiY2hlY2sgZ3ppcCBsZW5ndGgiLAorICAgICAgICAwLCA0NywgMCwgWl9T VFJFQU1fRU5EKTsKKyAgICBpbmYoIjc4IDkwIiwgImJhZCB6bGliIGhlYWRlciBjaGVjayIsIDAs IDQ3LCAwLCBaX0RBVEFfRVJST1IpOworICAgIGluZigiOCBiOCAwIDAgMCAxIiwgIm5lZWQgZGlj dGlvbmFyeSIsIDAsIDgsIDAsIFpfTkVFRF9ESUNUKTsKKyAgICBpbmYoIjc4IDljIDYzIDAiLCAi Y29tcHV0ZSBhZGxlcjMyIiwgMCwgMTUsIDEsIFpfT0spOworCisgICAgbWVtX3NldHVwKCZzdHJt KTsKKyAgICBzdHJtLmF2YWlsX2luID0gMDsKKyAgICBzdHJtLm5leHRfaW4gPSBaX05VTEw7Cisg ICAgcmV0ID0gaW5mbGF0ZUluaXQyKCZzdHJtLCAtOCk7CisgICAgc3RybS5hdmFpbF9pbiA9IDI7 CisgICAgc3RybS5uZXh0X2luID0gKHZvaWQgKikiXHg2MyI7CisgICAgc3RybS5hdmFpbF9vdXQg PSAxOworICAgIHN0cm0ubmV4dF9vdXQgPSAodm9pZCAqKSZyZXQ7CisgICAgbWVtX2xpbWl0KCZz dHJtLCAxKTsKKyAgICByZXQgPSBpbmZsYXRlKCZzdHJtLCBaX05PX0ZMVVNIKTsgICAgICAgICAg IGFzc2VydChyZXQgPT0gWl9NRU1fRVJST1IpOworICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpf Tk9fRkxVU0gpOyAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX01FTV9FUlJPUik7CisgICAgbWVt X2xpbWl0KCZzdHJtLCAwKTsKKyAgICBtZW1zZXQoZGljdCwgMCwgMjU3KTsKKyAgICByZXQgPSBp bmZsYXRlU2V0RGljdGlvbmFyeSgmc3RybSwgZGljdCwgMjU3KTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAg bWVtX2xpbWl0KCZzdHJtLCAoc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSA8PCAxKSArIDI1 Nik7CisgICAgcmV0ID0gaW5mbGF0ZVByaW1lKCZzdHJtLCAxNiwgMCk7ICAgICAgICAgICBhc3Nl cnQocmV0ID09IFpfT0spOworICAgIHN0cm0uYXZhaWxfaW4gPSAyOworICAgIHN0cm0ubmV4dF9p biA9ICh2b2lkICopIlx4ODAiOworICAgIHJldCA9IGluZmxhdGVTeW5jKCZzdHJtKTsgICAgICAg ICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX0RBVEFfRVJST1IpOworICAgIHJldCA9IGluZmxh dGUoJnN0cm0sIFpfTk9fRkxVU0gpOyAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9F UlJPUik7CisgICAgc3RybS5hdmFpbF9pbiA9IDQ7CisgICAgc3RybS5uZXh0X2luID0gKHZvaWQg KikiXDBcMFx4ZmZceGZmIjsKKyAgICByZXQgPSBpbmZsYXRlU3luYygmc3RybSk7ICAgICAgICAg ICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgKHZvaWQpaW5mbGF0ZVN5bmNQb2lu dCgmc3RybSk7CisgICAgcmV0ID0gaW5mbGF0ZUNvcHkoJmNvcHksICZzdHJtKTsgICAgICAgICAg ICBhc3NlcnQocmV0ID09IFpfTUVNX0VSUk9SKTsKKyAgICBtZW1fbGltaXQoJnN0cm0sIDApOwor ICAgIHJldCA9IGluZmxhdGVVbmRlcm1pbmUoJnN0cm0sIDEpOyAgICAgICAgICAgYXNzZXJ0KHJl dCA9PSBaX0RBVEFfRVJST1IpOworICAgICh2b2lkKWluZmxhdGVNYXJrKCZzdHJtKTsKKyAgICBy ZXQgPSBpbmZsYXRlRW5kKCZzdHJtKTsgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0g Wl9PSyk7CisgICAgbWVtX2RvbmUoJnN0cm0sICJtaXNjZWxsYW5lb3VzLCBmb3JjZSBtZW1vcnkg ZXJyb3JzIik7Cit9CisKKy8qIGlucHV0IGFuZCBvdXRwdXQgZnVuY3Rpb25zIGZvciBpbmZsYXRl QmFjaygpICovCitsb2NhbCB1bnNpZ25lZCBwdWxsKHZvaWQgKmRlc2MsIHVuc2lnbmVkIGNoYXIg KipidWYpCit7CisgICAgc3RhdGljIHVuc2lnbmVkIGludCBuZXh0ID0gMDsKKyAgICBzdGF0aWMg dW5zaWduZWQgY2hhciBkYXRbXSA9IHsweDYzLCAwLCAyLCAwfTsKKyAgICBzdHJ1Y3QgaW5mbGF0 ZV9zdGF0ZSAqc3RhdGU7CisKKyAgICBpZiAoZGVzYyA9PSBaX05VTEwpIHsKKyAgICAgICAgbmV4 dCA9IDA7CisgICAgICAgIHJldHVybiAwOyAgIC8qIG5vIGlucHV0IChhbHJlYWR5IHByb3ZpZGVk IGF0IG5leHRfaW4pICovCisgICAgfQorICAgIHN0YXRlID0gKHZvaWQgKikoKHpfc3RyZWFtICop ZGVzYyktPnN0YXRlOworICAgIGlmIChzdGF0ZSAhPSBaX05VTEwpCisgICAgICAgIHN0YXRlLT5t b2RlID0gU1lOQzsgICAgIC8qIGZvcmNlIGFuIG90aGVyd2lzZSBpbXBvc3NpYmxlIHNpdHVhdGlv biAqLworICAgIHJldHVybiBuZXh0IDwgc2l6ZW9mKGRhdCkgPyAoKmJ1ZiA9IGRhdCArIG5leHQr KywgMSkgOiAwOworfQorCitsb2NhbCBpbnQgcHVzaCh2b2lkICpkZXNjLCB1bnNpZ25lZCBjaGFy ICpidWYsIHVuc2lnbmVkIGxlbikKK3sKKyAgICBidWYgKz0gbGVuOworICAgIHJldHVybiBkZXNj ICE9IFpfTlVMTDsgICAgICAvKiBmb3JjZSBlcnJvciBpZiBkZXNjIG5vdCBudWxsICovCit9CisK Ky8qIGNvdmVyIGluZmxhdGVCYWNrKCkgdXAgdG8gY29tbW9uIGRlZmxhdGUgZGF0YSBjYXNlcyBh bmQgYWZ0ZXIgdGhvc2UgKi8KK2xvY2FsIHZvaWQgY292ZXJfYmFjayh2b2lkKQoreworICAgIGlu dCByZXQ7CisgICAgel9zdHJlYW0gc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIHdpblszMjc2OF07 CisKKyAgICByZXQgPSBpbmZsYXRlQmFja0luaXRfKFpfTlVMTCwgMCwgd2luLCAwLCAwKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQg PT0gWl9WRVJTSU9OX0VSUk9SKTsKKyAgICByZXQgPSBpbmZsYXRlQmFja0luaXQoWl9OVUxMLCAw LCB3aW4pOyAgICAgIGFzc2VydChyZXQgPT0gWl9TVFJFQU1fRVJST1IpOworICAgIHJldCA9IGlu ZmxhdGVCYWNrKFpfTlVMTCwgWl9OVUxMLCBaX05VTEwsIFpfTlVMTCwgWl9OVUxMKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0g Wl9TVFJFQU1fRVJST1IpOworICAgIHJldCA9IGluZmxhdGVCYWNrRW5kKFpfTlVMTCk7ICAgICAg ICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgZnB1dHMoImluZmxh dGVCYWNrIGJhZCBwYXJhbWV0ZXJzXG4iLCBzdGRlcnIpOworCisgICAgbWVtX3NldHVwKCZzdHJt KTsKKyAgICByZXQgPSBpbmZsYXRlQmFja0luaXQoJnN0cm0sIDE1LCB3aW4pOyAgICAgIGFzc2Vy dChyZXQgPT0gWl9PSyk7CisgICAgc3RybS5hdmFpbF9pbiA9IDI7CisgICAgc3RybS5uZXh0X2lu ID0gKHZvaWQgKikiXHgwMyI7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2soJnN0cm0sIHB1bGwsIFpf TlVMTCwgcHVzaCwgWl9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9TVFJFQU1fRU5EKTsKKyAgICAgICAgLyogZm9y Y2Ugb3V0cHV0IGVycm9yICovCisgICAgc3RybS5hdmFpbF9pbiA9IDM7CisgICAgc3RybS5uZXh0 X2luID0gKHZvaWQgKikiXHg2M1x4MDAiOworICAgIHJldCA9IGluZmxhdGVCYWNrKCZzdHJtLCBw dWxsLCBaX05VTEwsIHB1c2gsICZzdHJtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9CVUZfRVJST1IpOworICAgICAgICAv KiBmb3JjZSBtb2RlIGVycm9yIGJ5IG11Y2tpbmcgd2l0aCBzdGF0ZSAqLworICAgIHJldCA9IGlu ZmxhdGVCYWNrKCZzdHJtLCBwdWxsLCAmc3RybSwgcHVzaCwgWl9OVUxMKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9TVFJF QU1fRVJST1IpOworICAgIHJldCA9IGluZmxhdGVCYWNrRW5kKCZzdHJtKTsgICAgICAgICAgICAg ICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBtZW1fZG9uZSgmc3RybSwgImluZmxhdGVCYWNr IGJhZCBzdGF0ZSIpOworCisgICAgcmV0ID0gaW5mbGF0ZUJhY2tJbml0KCZzdHJtLCAxNSwgd2lu KTsgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIHJldCA9IGluZmxhdGVCYWNrRW5kKCZz dHJtKTsgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBmcHV0cygiaW5m bGF0ZUJhY2sgYnVpbHQtaW4gbWVtb3J5IHJvdXRpbmVzXG4iLCBzdGRlcnIpOworfQorCisvKiBk byBhIHJhdyBpbmZsYXRlIG9mIGRhdGEgaW4gaGV4YWRlY2ltYWwgd2l0aCBib3RoIGluZmxhdGUg YW5kIGluZmxhdGVCYWNrICovCitsb2NhbCBpbnQgdHJ5KGNoYXIgKmhleCwgY2hhciAqaWQsIGlu dCBlcnIpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBsZW4sIHNpemU7CisgICAgdW5z aWduZWQgY2hhciAqaW4sICpvdXQsICp3aW47CisgICAgY2hhciAqcHJlZml4OworICAgIHpfc3Ry ZWFtIHN0cm07CisKKyAgICAvKiBjb252ZXJ0IHRvIGhleCAqLworICAgIGluID0gaDJiKGhleCwg Jmxlbik7CisgICAgYXNzZXJ0KGluICE9IE5VTEwpOworCisgICAgLyogYWxsb2NhdGUgd29yayBh cmVhcyAqLworICAgIHNpemUgPSBsZW4gPDwgMzsKKyAgICBvdXQgPSBtYWxsb2Moc2l6ZSk7Cisg ICAgYXNzZXJ0KG91dCAhPSBOVUxMKTsKKyAgICB3aW4gPSBtYWxsb2MoMzI3NjgpOworICAgIGFz c2VydCh3aW4gIT0gTlVMTCk7CisgICAgcHJlZml4ID0gbWFsbG9jKHN0cmxlbihpZCkgKyA2KTsK KyAgICBhc3NlcnQocHJlZml4ICE9IE5VTEwpOworCisgICAgLyogZmlyc3Qgd2l0aCBpbmZsYXRl ICovCisgICAgc3RyY3B5KHByZWZpeCwgaWQpOworICAgIHN0cmNhdChwcmVmaXgsICItbGF0ZSIp OworICAgIG1lbV9zZXR1cCgmc3RybSk7CisgICAgc3RybS5hdmFpbF9pbiA9IDA7CisgICAgc3Ry bS5uZXh0X2luID0gWl9OVUxMOworICAgIHJldCA9IGluZmxhdGVJbml0Migmc3RybSwgZXJyIDwg MCA/IDQ3IDogLTE1KTsKKyAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIHN0cm0uYXZhaWxf aW4gPSBsZW47CisgICAgc3RybS5uZXh0X2luID0gaW47CisgICAgZG8geworICAgICAgICBzdHJt LmF2YWlsX291dCA9IHNpemU7CisgICAgICAgIHN0cm0ubmV4dF9vdXQgPSBvdXQ7CisgICAgICAg IHJldCA9IGluZmxhdGUoJnN0cm0sIFpfVFJFRVMpOworICAgICAgICBhc3NlcnQocmV0ICE9IFpf U1RSRUFNX0VSUk9SICYmIHJldCAhPSBaX01FTV9FUlJPUik7CisgICAgICAgIGlmIChyZXQgPT0g Wl9EQVRBX0VSUk9SIHx8IHJldCA9PSBaX05FRURfRElDVCkKKyAgICAgICAgICAgIGJyZWFrOwor ICAgIH0gd2hpbGUgKHN0cm0uYXZhaWxfaW4gfHwgc3RybS5hdmFpbF9vdXQgPT0gMCk7CisgICAg aWYgKGVycikgeworICAgICAgICBhc3NlcnQocmV0ID09IFpfREFUQV9FUlJPUik7CisgICAgICAg IGFzc2VydChzdHJjbXAoaWQsIHN0cm0ubXNnKSA9PSAwKTsKKyAgICB9CisgICAgaW5mbGF0ZUVu ZCgmc3RybSk7CisgICAgbWVtX2RvbmUoJnN0cm0sIHByZWZpeCk7CisKKyAgICAvKiB0aGVuIHdp dGggaW5mbGF0ZUJhY2sgKi8KKyAgICBpZiAoZXJyID49IDApIHsKKyAgICAgICAgc3RyY3B5KHBy ZWZpeCwgaWQpOworICAgICAgICBzdHJjYXQocHJlZml4LCAiLWJhY2siKTsKKyAgICAgICAgbWVt X3NldHVwKCZzdHJtKTsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUJhY2tJbml0KCZzdHJtLCAxNSwg d2luKTsKKyAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICAgICAgc3RybS5hdmFpbF9p biA9IGxlbjsKKyAgICAgICAgc3RybS5uZXh0X2luID0gaW47CisgICAgICAgIHJldCA9IGluZmxh dGVCYWNrKCZzdHJtLCBwdWxsLCBaX05VTEwsIHB1c2gsIFpfTlVMTCk7CisgICAgICAgIGFzc2Vy dChyZXQgIT0gWl9TVFJFQU1fRVJST1IpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAg ICBhc3NlcnQocmV0ID09IFpfREFUQV9FUlJPUik7CisgICAgICAgICAgICBhc3NlcnQoc3RyY21w KGlkLCBzdHJtLm1zZykgPT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgaW5mbGF0ZUJhY2tFbmQo JnN0cm0pOworICAgICAgICBtZW1fZG9uZSgmc3RybSwgcHJlZml4KTsKKyAgICB9CisKKyAgICAv KiBjbGVhbiB1cCAqLworICAgIGZyZWUocHJlZml4KTsKKyAgICBmcmVlKHdpbik7CisgICAgZnJl ZShvdXQpOworICAgIGZyZWUoaW4pOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qIGNvdmVyIGRl ZmxhdGUgZGF0YSBjYXNlcyBpbiBib3RoIGluZmxhdGUoKSBhbmQgaW5mbGF0ZUJhY2soKSAqLwor bG9jYWwgdm9pZCBjb3Zlcl9pbmZsYXRlKHZvaWQpCit7CisgICAgdHJ5KCIwIDAgMCAwIDAiLCAi aW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsIDEpOworICAgIHRyeSgiMyAwIiwgImZpeGVk IiwgMCk7CisgICAgdHJ5KCI2IiwgImludmFsaWQgYmxvY2sgdHlwZSIsIDEpOworICAgIHRyeSgi MSAxIDAgZmUgZmYgMCIsICJzdG9yZWQiLCAwKTsKKyAgICB0cnkoImZjIDAgMCIsICJ0b28gbWFu eSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIsIDEpOworICAgIHRyeSgiNCAwIGZlIGZmIiwg ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsIDEpOworICAgIHRyeSgiNCAwIDI0IDQ5IDAiLCAi aW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsIDEpOworICAgIHRyeSgiNCAwIDI0IGU5IGZmIGZm IiwgImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLCAxKTsKKyAgICB0cnkoIjQgMCAyNCBlOSBm ZiA2ZCIsICJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLCAxKTsKKyAgICB0 cnkoIjQgODAgNDkgOTIgMjQgNDkgOTIgMjQgNzEgZmYgZmYgOTMgMTEgMCIsCisgICAgICAgICJp bnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLCAxKTsKKyAgICB0cnkoIjQgODAgNDkgOTIgMjQg NDkgOTIgMjQgZiBiNCBmZiBmZiBjMyA4NCIsICJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLCAxKTsK KyAgICB0cnkoIjQgYzAgODEgOCAwIDAgMCAwIDIwIDdmIGViIGIgMCAwIiwgImludmFsaWQgbGl0 ZXJhbC9sZW5ndGggY29kZSIsIDEpOworICAgIHRyeSgiMiA3ZSBmZiBmZiIsICJpbnZhbGlkIGRp c3RhbmNlIGNvZGUiLCAxKTsKKyAgICB0cnkoImMgYzAgODEgMCAwIDAgMCAwIDkwIGZmIDZiIDQg MCIsICJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsIDEpOworCisgICAgLyogYWxzbyB0 cmFpbGVyIG1pc21hdGNoIGp1c3QgaW4gaW5mbGF0ZSgpICovCisgICAgdHJ5KCIxZiA4YiA4IDAg MCAwIDAgMCAwIDAgMyAwIDAgMCAwIDEiLCAiaW5jb3JyZWN0IGRhdGEgY2hlY2siLCAtMSk7Cisg ICAgdHJ5KCIxZiA4YiA4IDAgMCAwIDAgMCAwIDAgMyAwIDAgMCAwIDAgMCAwIDAgMSIsCisgICAg ICAgICJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIiwgLTEpOworICAgIHRyeSgiNSBjMCAyMSBkIDAg MCAwIDgwIGIwIGZlIDZkIDJmIDkxIDZjIiwgInB1bGwgMTciLCAwKTsKKyAgICB0cnkoIjUgZTAg ODEgOTEgMjQgY2IgYjIgMmMgNDkgZTIgZiAyZSA4YiA5YSA0NyA1NiA5ZiBmYiBmZSBlYyBkMiBm ZiAxZiIsCisgICAgICAgICJsb25nIGNvZGUiLCAwKTsKKyAgICB0cnkoImVkIGMwIDEgMSAwIDAg MCA0MCAyMCBmZiA1NyAxYiA0MiAyYyA0ZiIsICJsZW5ndGggZXh0cmEiLCAwKTsKKyAgICB0cnko ImVkIGNmIGMxIGIxIDJjIDQ3IDEwIGM0IDMwIGZhIDZmIDM1IDFkIDEgODIgNTkgM2QgZmIgYmUg MmUgMmEgZmMgZiBjIiwKKyAgICAgICAgImxvbmcgZGlzdGFuY2UgYW5kIGV4dHJhIiwgMCk7Cisg ICAgdHJ5KCJlZCBjMCA4MSAwIDAgMCAwIDgwIGEwIGZkIGE5IDE3IGE5IDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAiCisgICAgICAgICIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCA2IiwgIndpbmRvdyBlbmQiLCAwKTsKKyAgICBpbmYoIjIgOCAyMCA4MCAwIDMgMCIsICJp bmZsYXRlX2Zhc3QgVFlQRSByZXR1cm4iLCAwLCAtMTUsIDI1OCwKKyAgICAgICAgWl9TVFJFQU1f RU5EKTsKKyAgICBpbmYoIjYzIDE4IDUgNDAgYyAwIiwgIndpbmRvdyB3cmFwIiwgMywgLTgsIDMw MCwgWl9PSyk7Cit9CisKKy8qIGNvdmVyIHJlbWFpbmluZyBsaW5lcyBpbiBpbmZ0cmVlcy5jICov Citsb2NhbCB2b2lkIGNvdmVyX3RyZWVzKHZvaWQpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNp Z25lZCBiaXRzOworICAgIHVuc2lnbmVkIHNob3J0IGxlbnNbMTZdLCB3b3JrWzE2XTsKKyAgICBj b2RlICpuZXh0LCB0YWJsZVtFTk9VR0hfRElTVFNdOworCisgICAgLyogd2UgbmVlZCB0byBjYWxs IGluZmxhdGVfdGFibGUoKSBkaXJlY3RseSBpbiBvcmRlciB0byBtYW5pZmVzdCBub3QtCisgICAg ICAgZW5vdWdoIGVycm9ycywgc2luY2UgemxpYiBpbnN1cmVzIHRoYXQgZW5vdWdoIGlzIGFsd2F5 cyBlbm91Z2ggKi8KKyAgICBmb3IgKGJpdHMgPSAwOyBiaXRzIDwgMTU7IGJpdHMrKykKKyAgICAg ICAgbGVuc1tiaXRzXSA9ICh1bnNpZ25lZCBzaG9ydCkoYml0cyArIDEpOworICAgIGxlbnNbMTVd ID0gMTU7CisgICAgbmV4dCA9IHRhYmxlOworICAgIGJpdHMgPSAxNTsKKyAgICByZXQgPSBpbmZs YXRlX3RhYmxlKERJU1RTLCBsZW5zLCAxNiwgJm5leHQsICZiaXRzLCB3b3JrKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gMSk7 CisgICAgbmV4dCA9IHRhYmxlOworICAgIGJpdHMgPSAxOworICAgIHJldCA9IGluZmxhdGVfdGFi bGUoRElTVFMsIGxlbnMsIDE2LCAmbmV4dCwgJmJpdHMsIHdvcmspOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKKyAgICBm cHV0cygiaW5mbGF0ZV90YWJsZSBub3QgZW5vdWdoIGVycm9yc1xuIiwgc3RkZXJyKTsKK30KKwor LyogY292ZXIgcmVtYWluaW5nIGluZmZhc3QuYyBkZWNvZGluZyBhbmQgd2luZG93IGNvcHlpbmcg Ki8KK2xvY2FsIHZvaWQgY292ZXJfZmFzdCh2b2lkKQoreworICAgIGluZigiZTUgZTAgODEgYWQg NmQgY2IgYjIgMmMgYzkgMDEgMWUgNTkgNjMgYWUgN2QgZWUgZmIgNGQgZmQgYjUgMzUgNDEgNjgi CisgICAgICAgICIgZmYgN2YgMGYgMCAwIDAiLCAiZmFzdCBsZW5ndGggZXh0cmEgYml0cyIsIDAs IC04LCAyNTgsIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCIyNSBmZCA4MSBiNSA2ZCA1OSBiNiA2 YSA0OSBlYSBhZiAzNSA2IDM0IGViIDhjIGI5IGY2IGI5IDFlIGVmIDY3IDQ5IgorICAgICAgICAi IDUwIGZlIGZmIGZmIDNmIDAgMCIsICJmYXN0IGRpc3RhbmNlIGV4dHJhIGJpdHMiLCAwLCAtOCwg MjU4LAorICAgICAgICBaX0RBVEFfRVJST1IpOworICAgIGluZigiMyA3ZSAwIDAgMCAwIDAiLCAi ZmFzdCBpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLCAwLCAtOCwgMjU4LAorICAgICAgICBaX0RBVEFf RVJST1IpOworICAgIGluZigiMWIgNyAwIDAgMCAwIDAiLCAiZmFzdCBpbnZhbGlkIGxpdGVyYWwv bGVuZ3RoIGNvZGUiLCAwLCAtOCwgMjU4LAorICAgICAgICBaX0RBVEFfRVJST1IpOworICAgIGlu ZigiZCBjNyAxIGFlIGViIDM4IGMgNCA0MSBhMCA4NyA3MiBkZSBkZiBmYiAxZiBiOCAzNiBiMSAz OCA1ZCBmZiBmZiAwIiwKKyAgICAgICAgImZhc3QgMm5kIGxldmVsIGNvZGVzIGFuZCB0b28gZmFy IGJhY2siLCAwLCAtOCwgMjU4LCBaX0RBVEFfRVJST1IpOworICAgIGluZigiNjMgMTggNSA4YyAx MCA4IDAgMCAwIDAiLCAidmVyeSBjb21tb24gY2FzZSIsIDAsIC04LCAyNTksIFpfT0spOworICAg IGluZigiNjMgNjAgNjAgMTggYzkgMCA4IDE4IDE4IDE4IDI2IGMwIDI4IDAgMjkgMCAwIDAiLAor ICAgICAgICAiY29udGlndW91cyBhbmQgd3JhcCBhcm91bmQgd2luZG93IiwgNiwgLTgsIDI1OSwg Wl9PSyk7CisgICAgaW5mKCI2MyAwIDMgMCAwIDAgMCAwIiwgImNvcHkgZGlyZWN0IGZyb20gb3V0 cHV0IiwgMCwgLTgsIDI1OSwKKyAgICAgICAgWl9TVFJFQU1fRU5EKTsKK30KKworaW50IG1haW4o dm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB6bGliVmVyc2lvbigpKTsKKyAg ICBjb3Zlcl9zdXBwb3J0KCk7CisgICAgY292ZXJfd3JhcCgpOworICAgIGNvdmVyX2JhY2soKTsK KyAgICBjb3Zlcl9pbmZsYXRlKCk7CisgICAgY292ZXJfdHJlZXMoKTsKKyAgICBjb3Zlcl9mYXN0 KCk7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNj YyBzeXMvc3JjL2NtZC9ncy96bGliL3Rlc3QvbWluaWd6aXAuYwotLS0gL2Rldi9udWxsCVRodSBK YW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL3Rlc3Qv bWluaWd6aXAuYwlTdW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0MDAKQEAgLTAsMCArMSw2NTEg QEAKKy8qIG1pbmlnemlwLmMgLS0gc2ltdWxhdGUgZ3ppcCB1c2luZyB0aGUgemxpYiBjb21wcmVz c2lvbiBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSwgMjAx NiBKZWFuLWxvdXAgR2FpbGx5CisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5k IHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyoKKyAqIG1pbmln emlwIGlzIGEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ3ppcCB1dGlsaXR5LiBUaGlz IGlzCisgKiBvbmx5IGFuIGV4YW1wbGUgb2YgdXNpbmcgemxpYiBhbmQgaXNuJ3QgbWVhbnQgdG8g cmVwbGFjZSB0aGUKKyAqIGZ1bGwtZmVhdHVyZWQgZ3ppcC4gTm8gYXR0ZW1wdCBpcyBtYWRlIHRv IGRlYWwgd2l0aCBmaWxlIHN5c3RlbXMKKyAqIGxpbWl0aW5nIG5hbWVzIHRvIDE0IG9yIDgrMyBj aGFyYWN0ZXJzLCBldGMuLi4gRXJyb3IgY2hlY2tpbmcgaXMKKyAqIHZlcnkgbGltaXRlZC4gU28g dXNlIG1pbmlnemlwIG9ubHkgZm9yIHRlc3Rpbmc7IHVzZSBnemlwIGZvciB0aGUKKyAqIHJlYWwg dGhpbmcuIE9uIE1TRE9TLCB1c2Ugb25seSBvbiBmaWxlIG5hbWVzIHdpdGhvdXQgZXh0ZW5zaW9u CisgKiBvciBpbiBwaXBlIG1vZGUuCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpbmNsdWRl ICJ6bGliLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFNUREMKKyMgIGluY2x1ZGUg PHN0cmluZy5oPgorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9N TUFQCisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgIGluY2x1ZGUgPHN5cy9tbWFuLmg+Cisj ICBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBk ZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAg aW5jbHVkZSA8ZmNudGwuaD4KKyMgIGluY2x1ZGUgPGlvLmg+CisjICBpZmRlZiBVTkRFUl9DRQor IyAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgIGVuZGlmCisjICBkZWZpbmUgU0VUX0JJTkFSWV9N T0RFKGZpbGUpIHNldG1vZGUoZmlsZW5vKGZpbGUpLCBPX0JJTkFSWSkKKyNlbHNlCisjICBkZWZp bmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCisjZW5kaWYKKworI2lmIGRlZmluZWQoX01TQ19WRVIp ICYmIF9NU0NfVkVSIDwgMTkwMAorIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlm CisKKyNpZmRlZiBWTVMKKyMgIGRlZmluZSB1bmxpbmsgZGVsZXRlCisjICBkZWZpbmUgR1pfU1VG RklYICItZ3oiCisjZW5kaWYKKyNpZmRlZiBSSVNDT1MKKyMgIGRlZmluZSB1bmxpbmsgcmVtb3Zl CisjICBkZWZpbmUgR1pfU1VGRklYICItZ3oiCisjICBkZWZpbmUgZmlsZW5vKGZpbGUpIGZpbGUt Pl9fZmlsZQorI2VuZGlmCisjaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0g X19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcworIyAgaW5jbHVkZSA8dW5peC5oPiAv KiBmb3IgZmlsZW5vICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkg JiYgIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyNpZm5kZWYgV0lOMzIgLyogdW5saW5r IGFscmVhZHkgaW4gc3RkaW8uaCBmb3IgV0lOMzIgKi8KKyAgZXh0ZXJuIGludCB1bmxpbmsgT0Yo KGNvbnN0IGNoYXIgKikpOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoVU5ERVJfQ0Up CisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBkZWZpbmUgcGVycm9yKHMpIHB3aW5lcnJvcihz KQorCisvKiBNYXAgdGhlIFdpbmRvd3MgZXJyb3IgbnVtYmVyIGluIEVSUk9SIHRvIGEgbG9jYWxl LWRlcGVuZGVudCBlcnJvcgorICAgbWVzc2FnZSBzdHJpbmcgYW5kIHJldHVybiBhIHBvaW50ZXIg dG8gaXQuICBUeXBpY2FsbHksIHRoZSB2YWx1ZXMKKyAgIGZvciBFUlJPUiBjb21lIGZyb20gR2V0 TGFzdEVycm9yLgorCisgICBUaGUgc3RyaW5nIHBvaW50ZWQgdG8gc2hhbGwgbm90IGJlIG1vZGlm aWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwKKyAgIGJ1dCBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgYSBz dWJzZXF1ZW50IGNhbGwgdG8gc3Ryd2luZXJyb3IKKworICAgVGhlIHN0cndpbmVycm9yIGZ1bmN0 aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgY3VycmVudCBzZXR0aW5nCisgICBvZiBHZXRMYXN0RXJy b3IuICAqLworCitzdGF0aWMgY2hhciAqc3Ryd2luZXJyb3IgKGVycm9yKQorICAgICBEV09SRCBl cnJvcjsKK3sKKyAgICBzdGF0aWMgY2hhciBidWZbMTAyNF07CisKKyAgICB3Y2hhcl90ICptc2di dWY7CisgICAgRFdPUkQgbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworICAgIERXT1JEIGNoYXJz ID0gRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTQorICAgICAgICB8IEZP Uk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgZXJy b3IsCisgICAgICAgIDAsIC8qIERlZmF1bHQgbGFuZ3VhZ2UgKi8KKyAgICAgICAgKExQVk9JRCkm bXNnYnVmLAorICAgICAgICAwLAorICAgICAgICBOVUxMKTsKKyAgICBpZiAoY2hhcnMgIT0gMCkg eworICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbiBcclxuIGFwcGVuZGVkLCB6YXAgaXQuICAqLwor ICAgICAgICBpZiAoY2hhcnMgPj0gMgorICAgICAgICAgICAgJiYgbXNnYnVmW2NoYXJzIC0gMl0g PT0gJ1xyJyAmJiBtc2didWZbY2hhcnMgLSAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBjaGFy cyAtPSAyOworICAgICAgICAgICAgbXNnYnVmW2NoYXJzXSA9IDA7CisgICAgICAgIH0KKworICAg ICAgICBpZiAoY2hhcnMgPiBzaXplb2YgKGJ1ZikgLSAxKSB7CisgICAgICAgICAgICBjaGFycyA9 IHNpemVvZiAoYnVmKSAtIDE7CisgICAgICAgICAgICBtc2didWZbY2hhcnNdID0gMDsKKyAgICAg ICAgfQorCisgICAgICAgIHdjc3RvbWJzKGJ1ZiwgbXNnYnVmLCBjaGFycyArIDEpOworICAgICAg ICBMb2NhbEZyZWUobXNnYnVmKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNwcmludGYo YnVmLCAidW5rbm93biB3aW4zMiBlcnJvciAoJWxkKSIsIGVycm9yKTsKKyAgICB9CisKKyAgICBT ZXRMYXN0RXJyb3IobGFzdGVycik7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQg cHdpbmVycm9yIChzKQorICAgIGNvbnN0IGNoYXIgKnM7Cit7CisgICAgaWYgKHMgJiYgKnMpCisg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBzLCBzdHJ3aW5lcnJvcihHZXRMYXN0 RXJyb3IgKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0 cndpbmVycm9yKEdldExhc3RFcnJvciAoKSkpOworfQorCisjZW5kaWYgLyogVU5ERVJfQ0UgKi8K KworI2lmbmRlZiBHWl9TVUZGSVgKKyMgIGRlZmluZSBHWl9TVUZGSVggIi5neiIKKyNlbmRpZgor I2RlZmluZSBTVUZGSVhfTEVOIChzaXplb2YoR1pfU1VGRklYKS0xKQorCisjZGVmaW5lIEJVRkxF TiAgICAgIDE2Mzg0CisjZGVmaW5lIE1BWF9OQU1FX0xFTiAxMDI0CisKKyNpZmRlZiBNQVhTRUdf NjRLCisjICBkZWZpbmUgbG9jYWwgc3RhdGljCisgICAvKiBOZWVkZWQgZm9yIHN5c3RlbXMgd2l0 aCBsaW1pdGF0aW9uIG9uIHN0YWNrIHNpemUuICovCisjZWxzZQorIyAgZGVmaW5lIGxvY2FsCisj ZW5kaWYKKworI2lmZGVmIFpfU09MTworLyogZm9yIFpfU09MTywgY3JlYXRlIHNpbXBsaWZpZWQg Z3oqIGZ1bmN0aW9ucyB1c2luZyBkZWZsYXRlIGFuZCBpbmZsYXRlICovCisKKyNpZiBkZWZpbmVk KFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChaX0xBUkdFKQorIyAgaW5jbHVkZSA8dW5pc3Rk Lmg+ICAgICAgIC8qIGZvciB1bmxpbmsoKSAqLworI2VuZGlmCisKK3ZvaWQgKm15YWxsb2MgT0Yo KHZvaWQgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSk7Cit2b2lkIG15ZnJlZSBPRigodm9pZCAqLCB2 b2lkICopKTsKKwordm9pZCAqbXlhbGxvYyhxLCBuLCBtKQorICAgIHZvaWQgKnE7CisgICAgdW5z aWduZWQgbiwgbTsKK3sKKyAgICAodm9pZClxOworICAgIHJldHVybiBjYWxsb2MobiwgbSk7Cit9 CisKK3ZvaWQgbXlmcmVlKHEsIHApCisgICAgdm9pZCAqcSwgKnA7Cit7CisgICAgKHZvaWQpcTsK KyAgICBmcmVlKHApOworfQorCit0eXBlZGVmIHN0cnVjdCBnekZpbGVfcyB7CisgICAgRklMRSAq ZmlsZTsKKyAgICBpbnQgd3JpdGU7CisgICAgaW50IGVycjsKKyAgICBjaGFyICptc2c7CisgICAg el9zdHJlYW0gc3RybTsKK30gKmd6RmlsZTsKKworZ3pGaWxlIGd6b3BlbiBPRigoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopKTsKK2d6RmlsZSBnemRvcGVuIE9GKChpbnQsIGNvbnN0IGNoYXIg KikpOworZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICop KTsKKworZ3pGaWxlIGd6b3BlbihwYXRoLCBtb2RlKQorY29uc3QgY2hhciAqcGF0aDsKK2NvbnN0 IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTEsIG1vZGUpOworfQor CitnekZpbGUgZ3pkb3BlbihmZCwgbW9kZSkKK2ludCBmZDsKK2NvbnN0IGNoYXIgKm1vZGU7Cit7 CisgICAgcmV0dXJuIGd6X29wZW4oTlVMTCwgZmQsIG1vZGUpOworfQorCitnekZpbGUgZ3pfb3Bl bihwYXRoLCBmZCwgbW9kZSkKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGludCBmZDsKKyAg ICBjb25zdCBjaGFyICptb2RlOworeworICAgIGd6RmlsZSBnejsKKyAgICBpbnQgcmV0OworCisg ICAgZ3ogPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBnekZpbGVfcykpOworICAgIGlmIChneiA9PSBO VUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBnei0+d3JpdGUgPSBzdHJjaHIobW9kZSwg J3cnKSAhPSBOVUxMOworICAgIGd6LT5zdHJtLnphbGxvYyA9IG15YWxsb2M7CisgICAgZ3otPnN0 cm0uemZyZWUgPSBteWZyZWU7CisgICAgZ3otPnN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgIGlm IChnei0+d3JpdGUpCisgICAgICAgIHJldCA9IGRlZmxhdGVJbml0MigmKGd6LT5zdHJtKSwgLTEs IDgsIDE1ICsgMTYsIDgsIDApOworICAgIGVsc2UgeworICAgICAgICBnei0+c3RybS5uZXh0X2lu ID0gMDsKKyAgICAgICAgZ3otPnN0cm0uYXZhaWxfaW4gPSBaX05VTEw7CisgICAgICAgIHJldCA9 IGluZmxhdGVJbml0MigmKGd6LT5zdHJtKSwgMTUgKyAxNik7CisgICAgfQorICAgIGlmIChyZXQg IT0gWl9PSykgeworICAgICAgICBmcmVlKGd6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg fQorICAgIGd6LT5maWxlID0gcGF0aCA9PSBOVUxMID8gZmRvcGVuKGZkLCBnei0+d3JpdGUgPyAi d2IiIDogInJiIikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9wZW4ocGF0aCwg Z3otPndyaXRlID8gIndiIiA6ICJyYiIpOworICAgIGlmIChnei0+ZmlsZSA9PSBOVUxMKSB7Cisg ICAgICAgIGd6LT53cml0ZSA/IGRlZmxhdGVFbmQoJihnei0+c3RybSkpIDogaW5mbGF0ZUVuZCgm KGd6LT5zdHJtKSk7CisgICAgICAgIGZyZWUoZ3opOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg ICB9CisgICAgZ3otPmVyciA9IDA7CisgICAgZ3otPm1zZyA9ICIiOworICAgIHJldHVybiBnejsK K30KKworaW50IGd6d3JpdGUgT0YoKGd6RmlsZSwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCkpOwor CitpbnQgZ3p3cml0ZShneiwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGd6OworICAgIGNvbnN0IHZv aWQgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgel9zdHJlYW0gKnN0cm07CisgICAg dW5zaWduZWQgY2hhciBvdXRbQlVGTEVOXTsKKworICAgIGlmIChneiA9PSBOVUxMIHx8ICFnei0+ d3JpdGUpCisgICAgICAgIHJldHVybiAwOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBz dHJtLT5uZXh0X2luID0gKHZvaWQgKilidWY7CisgICAgc3RybS0+YXZhaWxfaW4gPSBsZW47Cisg ICAgZG8geworICAgICAgICBzdHJtLT5uZXh0X291dCA9IG91dDsKKyAgICAgICAgc3RybS0+YXZh aWxfb3V0ID0gQlVGTEVOOworICAgICAgICAodm9pZClkZWZsYXRlKHN0cm0sIFpfTk9fRkxVU0gp OworICAgICAgICBmd3JpdGUob3V0LCAxLCBCVUZMRU4gLSBzdHJtLT5hdmFpbF9vdXQsIGd6LT5m aWxlKTsKKyAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgPT0gMCk7CisgICAgcmV0dXJuIGxl bjsKK30KKworaW50IGd6cmVhZCBPRigoZ3pGaWxlLCB2b2lkICosIHVuc2lnbmVkKSk7CisKK2lu dCBnenJlYWQoZ3osIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBnejsKKyAgICB2b2lkICpidWY7Cisg ICAgdW5zaWduZWQgbGVuOworeworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgZ290OworICAg IHVuc2lnbmVkIGNoYXIgaW5bMV07CisgICAgel9zdHJlYW0gKnN0cm07CisKKyAgICBpZiAoZ3og PT0gTlVMTCB8fCBnei0+d3JpdGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChnei0+ZXJy KQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgc3RybS0+ bmV4dF9vdXQgPSAodm9pZCAqKWJ1ZjsKKyAgICBzdHJtLT5hdmFpbF9vdXQgPSBsZW47CisgICAg ZG8geworICAgICAgICBnb3QgPSBmcmVhZChpbiwgMSwgMSwgZ3otPmZpbGUpOworICAgICAgICBp ZiAoZ290ID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9 IGluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDE7CisgICAgICAgIHJldCA9IGluZmxhdGUo c3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKSB7Cisg ICAgICAgICAgICBnei0+ZXJyID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgZ3otPm1zZyA9 IHN0cm0tPm1zZzsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlm IChyZXQgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOwor ICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCk7CisgICAgcmV0dXJuIGxlbiAtIHN0cm0tPmF2 YWlsX291dDsKK30KKworaW50IGd6Y2xvc2UgT0YoKGd6RmlsZSkpOworCitpbnQgZ3pjbG9zZShn eikKKyAgICBnekZpbGUgZ3o7Cit7CisgICAgel9zdHJlYW0gKnN0cm07CisgICAgdW5zaWduZWQg Y2hhciBvdXRbQlVGTEVOXTsKKworICAgIGlmIChneiA9PSBOVUxMKQorICAgICAgICByZXR1cm4g Wl9TVFJFQU1fRVJST1I7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIGlmIChnei0+d3Jp dGUpIHsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+YXZh aWxfaW4gPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IG91 dDsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IEJVRkxFTjsKKyAgICAgICAgICAgICh2 b2lkKWRlZmxhdGUoc3RybSwgWl9GSU5JU0gpOworICAgICAgICAgICAgZndyaXRlKG91dCwgMSwg QlVGTEVOIC0gc3RybS0+YXZhaWxfb3V0LCBnei0+ZmlsZSk7CisgICAgICAgIH0gd2hpbGUgKHN0 cm0tPmF2YWlsX291dCA9PSAwKTsKKyAgICAgICAgZGVmbGF0ZUVuZChzdHJtKTsKKyAgICB9Cisg ICAgZWxzZQorICAgICAgICBpbmZsYXRlRW5kKHN0cm0pOworICAgIGZjbG9zZShnei0+ZmlsZSk7 CisgICAgZnJlZShneik7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKK2NvbnN0IGNoYXIgKmd6ZXJy b3IgT0YoKGd6RmlsZSwgaW50ICopKTsKKworY29uc3QgY2hhciAqZ3plcnJvcihneiwgZXJyKQor ICAgIGd6RmlsZSBnejsKKyAgICBpbnQgKmVycjsKK3sKKyAgICAqZXJyID0gZ3otPmVycjsKKyAg ICByZXR1cm4gZ3otPm1zZzsKK30KKworI2VuZGlmCisKK3N0YXRpYyBjaGFyICpwcm9nOworCit2 b2lkIGVycm9yICAgICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKm1zZykpOwordm9pZCBnel9jb21w cmVzcyAgICAgIE9GKChGSUxFICAgKmluLCBnekZpbGUgb3V0KSk7CisjaWZkZWYgVVNFX01NQVAK K2ludCAgZ3pfY29tcHJlc3NfbW1hcCBPRigoRklMRSAgICppbiwgZ3pGaWxlIG91dCkpOworI2Vu ZGlmCit2b2lkIGd6X3VuY29tcHJlc3MgICAgT0YoKGd6RmlsZSBpbiwgRklMRSAgICpvdXQpKTsK K3ZvaWQgZmlsZV9jb21wcmVzcyAgICBPRigoY2hhciAgKmZpbGUsIGNoYXIgKm1vZGUpKTsKK3Zv aWQgZmlsZV91bmNvbXByZXNzICBPRigoY2hhciAgKmZpbGUpKTsKK2ludCAgbWFpbiAgICAgICAg ICAgICBPRigoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkpOworCisvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKyAqIERpc3BsYXkgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdAorICovCit2b2lkIGVycm9yKG1z ZykKKyAgICBjb25zdCBjaGFyICptc2c7Cit7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogJXNc biIsIHByb2csIG1zZyk7CisgICAgZXhpdCgxKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisgKiBDb21wcmVzcyBpbnB1dCB0byBvdXRwdXQgdGhlbiBjbG9zZSBib3RoIGZpbGVzLgorICov CisKK3ZvaWQgZ3pfY29tcHJlc3MoaW4sIG91dCkKKyAgICBGSUxFICAgKmluOworICAgIGd6Rmls ZSBvdXQ7Cit7CisgICAgbG9jYWwgY2hhciBidWZbQlVGTEVOXTsKKyAgICBpbnQgbGVuOworICAg IGludCBlcnI7CisKKyNpZmRlZiBVU0VfTU1BUAorICAgIC8qIFRyeSBmaXJzdCBjb21wcmVzc2lu ZyB3aXRoIG1tYXAuIElmIG1tYXAgZmFpbHMgKG1pbmlnemlwIHVzZWQgaW4gYQorICAgICAqIHBp cGUpLCB1c2UgdGhlIG5vcm1hbCBmcmVhZCBsb29wLgorICAgICAqLworICAgIGlmIChnel9jb21w cmVzc19tbWFwKGluLCBvdXQpID09IFpfT0spIHJldHVybjsKKyNlbmRpZgorICAgIGZvciAoOzsp IHsKKyAgICAgICAgbGVuID0gKGludClmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBpbik7Cisg ICAgICAgIGlmIChmZXJyb3IoaW4pKSB7CisgICAgICAgICAgICBwZXJyb3IoImZyZWFkIik7Cisg ICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIGlmIChsZW4gPT0gMCkgYnJl YWs7CisKKyAgICAgICAgaWYgKGd6d3JpdGUob3V0LCBidWYsICh1bnNpZ25lZClsZW4pICE9IGxl bikgZXJyb3IoZ3plcnJvcihvdXQsICZlcnIpKTsKKyAgICB9CisgICAgZmNsb3NlKGluKTsKKyAg ICBpZiAoZ3pjbG9zZShvdXQpICE9IFpfT0spIGVycm9yKCJmYWlsZWQgZ3pjbG9zZSIpOworfQor CisjaWZkZWYgVVNFX01NQVAgLyogTU1BUCB2ZXJzaW9uLCBNaWd1ZWwgQWxicmVjaHQgPG1hbGJy ZWNoQGVzby5vcmc+ICovCisKKy8qIFRyeSBjb21wcmVzc2luZyB0aGUgaW5wdXQgZmlsZSBhdCBv bmNlIHVzaW5nIG1tYXAuIFJldHVybiBaX09LIGlmCisgKiBpZiBzdWNjZXNzLCBaX0VSUk5PIG90 aGVyd2lzZS4KKyAqLworaW50IGd6X2NvbXByZXNzX21tYXAoaW4sIG91dCkKKyAgICBGSUxFICAg KmluOworICAgIGd6RmlsZSBvdXQ7Cit7CisgICAgaW50IGxlbjsKKyAgICBpbnQgZXJyOworICAg IGludCBpZmQgPSBmaWxlbm8oaW4pOworICAgIGNhZGRyX3QgYnVmOyAgICAvKiBtbWFwJ2VkIGJ1 ZmZlciBmb3IgdGhlIGVudGlyZSBpbnB1dCBmaWxlICovCisgICAgb2ZmX3QgYnVmX2xlbjsgIC8q IGxlbmd0aCBvZiB0aGUgaW5wdXQgZmlsZSAqLworICAgIHN0cnVjdCBzdGF0IHNiOworCisgICAg LyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBuZWVkZWQgZm9yIG1tYXA6ICovCisg ICAgaWYgKGZzdGF0KGlmZCwgJnNiKSA8IDApIHJldHVybiBaX0VSUk5POworICAgIGJ1Zl9sZW4g PSBzYi5zdF9zaXplOworICAgIGlmIChidWZfbGVuIDw9IDApIHJldHVybiBaX0VSUk5POworCisg ICAgLyogTm93IGRvIHRoZSBhY3R1YWwgbW1hcDogKi8KKyAgICBidWYgPSBtbWFwKChjYWRkcl90 KSAwLCBidWZfbGVuLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGlmZCwgKG9mZl90KTApOworICAg IGlmIChidWYgPT0gKGNhZGRyX3QpKC0xKSkgcmV0dXJuIFpfRVJSTk87CisKKyAgICAvKiBDb21w cmVzcyB0aGUgd2hvbGUgZmlsZSBhdCBvbmNlOiAqLworICAgIGxlbiA9IGd6d3JpdGUob3V0LCAo Y2hhciAqKWJ1ZiwgKHVuc2lnbmVkKWJ1Zl9sZW4pOworCisgICAgaWYgKGxlbiAhPSAoaW50KWJ1 Zl9sZW4pIGVycm9yKGd6ZXJyb3Iob3V0LCAmZXJyKSk7CisKKyAgICBtdW5tYXAoYnVmLCBidWZf bGVuKTsKKyAgICBmY2xvc2UoaW4pOworICAgIGlmIChnemNsb3NlKG91dCkgIT0gWl9PSykgZXJy b3IoImZhaWxlZCBnemNsb3NlIik7CisgICAgcmV0dXJuIFpfT0s7Cit9CisjZW5kaWYgLyogVVNF X01NQVAgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVbmNvbXByZXNzIGlucHV0IHRv IG91dHB1dCB0aGVuIGNsb3NlIGJvdGggZmlsZXMuCisgKi8KK3ZvaWQgZ3pfdW5jb21wcmVzcyhp biwgb3V0KQorICAgIGd6RmlsZSBpbjsKKyAgICBGSUxFICAgKm91dDsKK3sKKyAgICBsb2NhbCBj aGFyIGJ1ZltCVUZMRU5dOworICAgIGludCBsZW47CisgICAgaW50IGVycjsKKworICAgIGZvciAo OzspIHsKKyAgICAgICAgbGVuID0gZ3pyZWFkKGluLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAg ICAgaWYgKGxlbiA8IDApIGVycm9yIChnemVycm9yKGluLCAmZXJyKSk7CisgICAgICAgIGlmIChs ZW4gPT0gMCkgYnJlYWs7CisKKyAgICAgICAgaWYgKChpbnQpZndyaXRlKGJ1ZiwgMSwgKHVuc2ln bmVkKWxlbiwgb3V0KSAhPSBsZW4pIHsKKyAgICAgICAgICAgIGVycm9yKCJmYWlsZWQgZndyaXRl Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZjbG9zZShvdXQpKSBlcnJvcigiZmFpbGVk IGZjbG9zZSIpOworCisgICAgaWYgKGd6Y2xvc2UoaW4pICE9IFpfT0spIGVycm9yKCJmYWlsZWQg Z3pjbG9zZSIpOworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29tcHJlc3MgdGhl IGdpdmVuIGZpbGU6IGNyZWF0ZSBhIGNvcnJlc3BvbmRpbmcgLmd6IGZpbGUgYW5kIHJlbW92ZSB0 aGUKKyAqIG9yaWdpbmFsLgorICovCit2b2lkIGZpbGVfY29tcHJlc3MoZmlsZSwgbW9kZSkKKyAg ICBjaGFyICAqZmlsZTsKKyAgICBjaGFyICAqbW9kZTsKK3sKKyAgICBsb2NhbCBjaGFyIG91dGZp bGVbTUFYX05BTUVfTEVOXTsKKyAgICBGSUxFICAqaW47CisgICAgZ3pGaWxlIG91dDsKKworICAg IGlmIChzdHJsZW4oZmlsZSkgKyBzdHJsZW4oR1pfU1VGRklYKSA+PSBzaXplb2Yob3V0ZmlsZSkp IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmlsZW5hbWUgdG9vIGxvbmdcbiIsIHBy b2cpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworI2lmICFkZWZpbmVkKE5PX3NucHJpbnRm KSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYob3V0ZmlsZSwgc2l6ZW9m KG91dGZpbGUpLCAiJXMlcyIsIGZpbGUsIEdaX1NVRkZJWCk7CisjZWxzZQorICAgIHN0cmNweShv dXRmaWxlLCBmaWxlKTsKKyAgICBzdHJjYXQob3V0ZmlsZSwgR1pfU1VGRklYKTsKKyNlbmRpZgor CisgICAgaW4gPSBmb3BlbihmaWxlLCAicmIiKTsKKyAgICBpZiAoaW4gPT0gTlVMTCkgeworICAg ICAgICBwZXJyb3IoZmlsZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIG91dCA9IGd6 b3BlbihvdXRmaWxlLCBtb2RlKTsKKyAgICBpZiAob3V0ID09IE5VTEwpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlczogY2FuJ3QgZ3pvcGVuICVzXG4iLCBwcm9nLCBvdXRmaWxlKTsKKyAg ICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZ3pfY29tcHJlc3MoaW4sIG91dCk7CisKKyAgICB1 bmxpbmsoZmlsZSk7Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBVbmNvbXByZXNz IHRoZSBnaXZlbiBmaWxlIGFuZCByZW1vdmUgdGhlIG9yaWdpbmFsLgorICovCit2b2lkIGZpbGVf dW5jb21wcmVzcyhmaWxlKQorICAgIGNoYXIgICpmaWxlOworeworICAgIGxvY2FsIGNoYXIgYnVm W01BWF9OQU1FX0xFTl07CisgICAgY2hhciAqaW5maWxlLCAqb3V0ZmlsZTsKKyAgICBGSUxFICAq b3V0OworICAgIGd6RmlsZSBpbjsKKyAgICB1bnNpZ25lZCBsZW4gPSBzdHJsZW4oZmlsZSk7CisK KyAgICBpZiAobGVuICsgc3RybGVuKEdaX1NVRkZJWCkgPj0gc2l6ZW9mKGJ1ZikpIHsKKyAgICAg ICAgZnByaW50ZihzdGRlcnIsICIlczogZmlsZW5hbWUgdG9vIGxvbmdcbiIsIHByb2cpOworICAg ICAgICBleGl0KDEpOworICAgIH0KKworI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVm aW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwg ZmlsZSk7CisjZWxzZQorICAgIHN0cmNweShidWYsIGZpbGUpOworI2VuZGlmCisKKyAgICBpZiAo bGVuID4gU1VGRklYX0xFTiAmJiBzdHJjbXAoZmlsZStsZW4tU1VGRklYX0xFTiwgR1pfU1VGRklY KSA9PSAwKSB7CisgICAgICAgIGluZmlsZSA9IGZpbGU7CisgICAgICAgIG91dGZpbGUgPSBidWY7 CisgICAgICAgIG91dGZpbGVbbGVuLTNdID0gJ1wwJzsKKyAgICB9IGVsc2UgeworICAgICAgICBv dXRmaWxlID0gZmlsZTsKKyAgICAgICAgaW5maWxlID0gYnVmOworI2lmICFkZWZpbmVkKE5PX3Nu cHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgICAgIHNucHJpbnRmKGJ1ZiAr IGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICIlcyIsIEdaX1NVRkZJWCk7CisjZWxzZQorICAgICAg ICBzdHJjYXQoaW5maWxlLCBHWl9TVUZGSVgpOworI2VuZGlmCisgICAgfQorICAgIGluID0gZ3pv cGVuKGluZmlsZSwgInJiIik7CisgICAgaWYgKGluID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICIlczogY2FuJ3QgZ3pvcGVuICVzXG4iLCBwcm9nLCBpbmZpbGUpOworICAgICAg ICBleGl0KDEpOworICAgIH0KKyAgICBvdXQgPSBmb3BlbihvdXRmaWxlLCAid2IiKTsKKyAgICBp ZiAob3V0ID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9yKGZpbGUpOworICAgICAgICBleGl0KDEp OworICAgIH0KKworICAgIGd6X3VuY29tcHJlc3MoaW4sIG91dCk7CisKKyAgICB1bmxpbmsoaW5m aWxlKTsKK30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFVzYWdlOiAgbWluaWd6aXAg Wy1jXSBbLWRdIFstZl0gWy1oXSBbLXJdIFstMSB0byAtOV0gW2ZpbGVzLi4uXQorICogICAtYyA6 IHdyaXRlIHRvIHN0YW5kYXJkIG91dHB1dAorICogICAtZCA6IGRlY29tcHJlc3MKKyAqICAgLWYg OiBjb21wcmVzcyB3aXRoIFpfRklMVEVSRUQKKyAqICAgLWggOiBjb21wcmVzcyB3aXRoIFpfSFVG Rk1BTl9PTkxZCisgKiAgIC1yIDogY29tcHJlc3Mgd2l0aCBaX1JMRQorICogICAtMSB0byAtOSA6 IGNvbXByZXNzaW9uIGxldmVsCisgKi8KKworaW50IG1haW4oYXJnYywgYXJndikKKyAgICBpbnQg YXJnYzsKKyAgICBjaGFyICphcmd2W107Cit7CisgICAgaW50IGNvcHlvdXQgPSAwOworICAgIGlu dCB1bmNvbXByID0gMDsKKyAgICBnekZpbGUgZmlsZTsKKyAgICBjaGFyICpibmFtZSwgb3V0bW9k ZVsyMF07CisKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJp bnRmKQorICAgIHNucHJpbnRmKG91dG1vZGUsIHNpemVvZihvdXRtb2RlKSwgIiVzIiwgIndiNiAi KTsKKyNlbHNlCisgICAgc3RyY3B5KG91dG1vZGUsICJ3YjYgIik7CisjZW5kaWYKKworICAgIHBy b2cgPSBhcmd2WzBdOworICAgIGJuYW1lID0gc3RycmNocihhcmd2WzBdLCAnLycpOworICAgIGlm IChibmFtZSkKKyAgICAgIGJuYW1lKys7CisgICAgZWxzZQorICAgICAgYm5hbWUgPSBhcmd2WzBd OworICAgIGFyZ2MtLSwgYXJndisrOworCisgICAgaWYgKCFzdHJjbXAoYm5hbWUsICJndW56aXAi KSkKKyAgICAgIHVuY29tcHIgPSAxOworICAgIGVsc2UgaWYgKCFzdHJjbXAoYm5hbWUsICJ6Y2F0 IikpCisgICAgICBjb3B5b3V0ID0gdW5jb21wciA9IDE7CisKKyAgICB3aGlsZSAoYXJnYyA+IDAp IHsKKyAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICItYyIpID09IDApCisgICAgICAgIGNvcHlvdXQg PSAxOworICAgICAgZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiLWQiKSA9PSAwKQorICAgICAgICB1 bmNvbXByID0gMTsKKyAgICAgIGVsc2UgaWYgKHN0cmNtcCgqYXJndiwgIi1mIikgPT0gMCkKKyAg ICAgICAgb3V0bW9kZVszXSA9ICdmJzsKKyAgICAgIGVsc2UgaWYgKHN0cmNtcCgqYXJndiwgIi1o IikgPT0gMCkKKyAgICAgICAgb3V0bW9kZVszXSA9ICdoJzsKKyAgICAgIGVsc2UgaWYgKHN0cmNt cCgqYXJndiwgIi1yIikgPT0gMCkKKyAgICAgICAgb3V0bW9kZVszXSA9ICdSJzsKKyAgICAgIGVs c2UgaWYgKCgqYXJndilbMF0gPT0gJy0nICYmICgqYXJndilbMV0gPj0gJzEnICYmICgqYXJndilb MV0gPD0gJzknICYmCisgICAgICAgICAgICAgICAoKmFyZ3YpWzJdID09IDApCisgICAgICAgIG91 dG1vZGVbMl0gPSAoKmFyZ3YpWzFdOworICAgICAgZWxzZQorICAgICAgICBicmVhazsKKyAgICAg IGFyZ2MtLSwgYXJndisrOworICAgIH0KKyAgICBpZiAob3V0bW9kZVszXSA9PSAnICcpCisgICAg ICAgIG91dG1vZGVbM10gPSAwOworICAgIGlmIChhcmdjID09IDApIHsKKyAgICAgICAgU0VUX0JJ TkFSWV9NT0RFKHN0ZGluKTsKKyAgICAgICAgU0VUX0JJTkFSWV9NT0RFKHN0ZG91dCk7CisgICAg ICAgIGlmICh1bmNvbXByKSB7CisgICAgICAgICAgICBmaWxlID0gZ3pkb3BlbihmaWxlbm8oc3Rk aW4pLCAicmIiKTsKKyAgICAgICAgICAgIGlmIChmaWxlID09IE5VTEwpIGVycm9yKCJjYW4ndCBn emRvcGVuIHN0ZGluIik7CisgICAgICAgICAgICBnel91bmNvbXByZXNzKGZpbGUsIHN0ZG91dCk7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaWxlID0gZ3pkb3BlbihmaWxlbm8oc3Rk b3V0KSwgb3V0bW9kZSk7CisgICAgICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSBlcnJvcigiY2Fu J3QgZ3pkb3BlbiBzdGRvdXQiKTsKKyAgICAgICAgICAgIGd6X2NvbXByZXNzKHN0ZGluLCBmaWxl KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjb3B5b3V0KSB7CisgICAg ICAgICAgICBTRVRfQklOQVJZX01PREUoc3Rkb3V0KTsKKyAgICAgICAgfQorICAgICAgICBkbyB7 CisgICAgICAgICAgICBpZiAodW5jb21wcikgeworICAgICAgICAgICAgICAgIGlmIChjb3B5b3V0 KSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBnem9wZW4oKmFyZ3YsICJyYiIpOworICAg ICAgICAgICAgICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3QgZ3pvcGVuICVzXG4iLCBwcm9nLCAqYXJndik7 CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGd6X3Vu Y29tcHJlc3MoZmlsZSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICBmaWxlX3VuY29tcHJlc3MoKmFyZ3YpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvcHlvdXQpIHsKKyAg ICAgICAgICAgICAgICAgICAgRklMRSAqIGluID0gZm9wZW4oKmFyZ3YsICJyYiIpOworCisgICAg ICAgICAgICAgICAgICAgIGlmIChpbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBwZXJyb3IoKmFyZ3YpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICAgICAgZmlsZSA9IGd6ZG9wZW4oZmlsZW5vKHN0ZG91dCksIG91dG1vZGUpOwor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkgZXJyb3IoImNhbid0IGd6 ZG9wZW4gc3Rkb3V0Iik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGd6X2NvbXByZXNzKGlu LCBmaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9jb21wcmVzcygqYXJndiwgb3V0bW9kZSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChhcmd2Kyss IC0tYXJnYyk7CisgICAgfQorICAgIHJldHVybiAwOworfQpkaWZmIC1yIDlhMzE3NzIzMTc5MCAt ciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi90cmVlcy5jCi0tLSBhL3N5cy9zcmMv Y21kL2dzL3psaWIvdHJlZXMuYwlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIGIv c3lzL3NyYy9jbWQvZ3MvemxpYi90cmVlcy5jCVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQw MApAQCAtMSw1ICsxLDYgQEAKIC8qIHRyZWVzLmMgLS0gb3V0cHV0IGRlZmxhdGVkIGRhdGEgdXNp bmcgSHVmZm1hbiBjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEplYW4tbG91cCBH YWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkKKyAqIGRl dGVjdF9kYXRhX3R5cGUoKSBmdW5jdGlvbiBwcm92aWRlZCBmcmVlbHkgYnkgQ29zbWluIFRydXRh LCAyMDA2CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNv cHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMjksMTMgKzMwLDEzIEBACiAgKiAg ICAgICAgICBBZGRpc29uLVdlc2xleSwgMTk4My4gSVNCTiAwLTIwMS0wNjY3Mi02LgogICovCiAK LS8qIEAoIykgJElkOiB0cmVlcy5jLHYgMS4xLjEuMSAyMDA1LzA0LzI0IDIxOjM5OjM5IGdpbGVz IEV4cCAkICovCisvKiBAKCMpICRJZCQgKi8KIAogLyogI2RlZmluZSBHRU5fVFJFRVNfSCAqLwog CiAjaW5jbHVkZSAiZGVmbGF0ZS5oIgogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVH CiAjICBpbmNsdWRlIDxjdHlwZS5oPgogI2VuZGlmCiAKQEAgLTczLDExICs3NCw2IEBACiAgKiBw cm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQg Yml0IGxlbmd0aCBjb2Rlcy4KICAqLwogCi0jZGVmaW5lIEJ1Zl9zaXplICg4ICogMipzaXplb2Yo Y2hhcikpCi0vKiBOdW1iZXIgb2YgYml0cyB1c2VkIHdpdGhpbiBiaV9idWYuIChiaV9idWYgbWln aHQgYmUgaW1wbGVtZW50ZWQgb24KLSAqIG1vcmUgdGhhbiAxNiBiaXRzIG9uIHNvbWUgc3lzdGVt cy4pCi0gKi8KLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBMb2NhbCBkYXRhLiBUaGVzZSBh cmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLgogICovCkBAIC0xMjYsMTMgKzEyMiwxMyBAQAogICAg IGludCAgICAgbWF4X2xlbmd0aDsgICAgICAgICAgLyogbWF4IGJpdCBsZW5ndGggZm9yIHRoZSBj b2RlcyAqLwogfTsKIAotbG9jYWwgc3RhdGljX3RyZWVfZGVzYyAgc3RhdGljX2xfZGVzYyA9Cits b2NhbCBjb25zdCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfbF9kZXNjID0KIHtzdGF0aWNfbHRy ZWUsIGV4dHJhX2xiaXRzLCBMSVRFUkFMUysxLCBMX0NPREVTLCBNQVhfQklUU307CiAKLWxvY2Fs IHN0YXRpY190cmVlX2Rlc2MgIHN0YXRpY19kX2Rlc2MgPQorbG9jYWwgY29uc3Qgc3RhdGljX3Ry ZWVfZGVzYyAgc3RhdGljX2RfZGVzYyA9CiB7c3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwg ICAgICAgICAgRF9DT0RFUywgTUFYX0JJVFN9OwogCi1sb2NhbCBzdGF0aWNfdHJlZV9kZXNjICBz dGF0aWNfYmxfZGVzYyA9Citsb2NhbCBjb25zdCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfYmxf ZGVzYyA9CiB7KGNvbnN0IGN0X2RhdGEgKikwLCBleHRyYV9ibGJpdHMsIDAsICAgQkxfQ09ERVMs IE1BWF9CTF9CSVRTfTsKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNTAsMjQgKzE0Niwy MiBAQAogbG9jYWwgaW50ICBidWlsZF9ibF90cmVlICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwog bG9jYWwgdm9pZCBzZW5kX2FsbF90cmVlcyBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGxjb2Rl cywgaW50IGRjb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGNvZGVz KSk7Ci1sb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjdF9k YXRhICpsdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0X2RhdGEgKmR0cmVl KSk7Ci1sb2NhbCB2b2lkIHNldF9kYXRhX3R5cGUgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Cits b2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjb25zdCBjdF9k YXRhICpsdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0X2RhdGEg KmR0cmVlKSk7Citsb2NhbCBpbnQgIGRldGVjdF9kYXRhX3R5cGUgT0YoKGRlZmxhdGVfc3RhdGUg KnMpKTsKIGxvY2FsIHVuc2lnbmVkIGJpX3JldmVyc2UgT0YoKHVuc2lnbmVkIHZhbHVlLCBpbnQg bGVuZ3RoKSk7CiBsb2NhbCB2b2lkIGJpX3dpbmR1cCAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpz KSk7CiBsb2NhbCB2b2lkIGJpX2ZsdXNoICAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Ci1s b2NhbCB2b2lkIGNvcHlfYmxvY2sgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVm LCB1bnNpZ25lZCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVhZGVy KSk7CiAKICNpZmRlZiBHRU5fVFJFRVNfSAogbG9jYWwgdm9pZCBnZW5fdHJlZXNfaGVhZGVyIE9G KCh2b2lkKSk7CiAjZW5kaWYKIAotI2lmbmRlZiBERUJVRworI2lmbmRlZiBaTElCX0RFQlVHCiAj ICBkZWZpbmUgc2VuZF9jb2RlKHMsIGMsIHRyZWUpIHNlbmRfYml0cyhzLCB0cmVlW2NdLkNvZGUs IHRyZWVbY10uTGVuKQogICAgLyogU2VuZCBhIGNvZGUgb2YgdGhlIGdpdmVuIHRyZWUuIGMgYW5k IHRyZWUgbXVzdCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMgKi8KIAotI2Vsc2UgLyogREVCVUcgKi8K KyNlbHNlIC8qICFaTElCX0RFQlVHICovCiAjICBkZWZpbmUgc2VuZF9jb2RlKHMsIGMsIHRyZWUp IFwKICAgICAgeyBpZiAoel92ZXJib3NlPjIpIGZwcmludGYoc3RkZXJyLCJcbmNkICUzZCAiLChj KSk7IFwKICAgICAgICBzZW5kX2JpdHMocywgdHJlZVtjXS5Db2RlLCB0cmVlW2NdLkxlbik7IH0K QEAgLTE4Niw3ICsxODAsNyBAQAogICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9m IGJpdHMuCiAgKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBs ZW5ndGggYml0cy4KICAqLwotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogbG9jYWwg dm9pZCBzZW5kX2JpdHMgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IHZhbHVlLCBpbnQg bGVuZ3RoKSk7CiAKIGxvY2FsIHZvaWQgc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpCkBAIC0y MDMsMzEgKzE5NywzMSBAQAogICAgICAqIHVudXNlZCBiaXRzIGluIHZhbHVlLgogICAgICAqLwog ICAgIGlmIChzLT5iaV92YWxpZCA+IChpbnQpQnVmX3NpemUgLSBsZW5ndGgpIHsKLSAgICAgICAg cy0+YmlfYnVmIHw9ICh2YWx1ZSA8PCBzLT5iaV92YWxpZCk7CisgICAgICAgIHMtPmJpX2J1ZiB8 PSAodXNoKXZhbHVlIDw8IHMtPmJpX3ZhbGlkOwogICAgICAgICBwdXRfc2hvcnQocywgcy0+Ymlf YnVmKTsKICAgICAgICAgcy0+YmlfYnVmID0gKHVzaCl2YWx1ZSA+PiAoQnVmX3NpemUgLSBzLT5i aV92YWxpZCk7CiAgICAgICAgIHMtPmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplOwogICAg IH0gZWxzZSB7Ci0gICAgICAgIHMtPmJpX2J1ZiB8PSB2YWx1ZSA8PCBzLT5iaV92YWxpZDsKKyAg ICAgICAgcy0+YmlfYnVmIHw9ICh1c2gpdmFsdWUgPDwgcy0+YmlfdmFsaWQ7CiAgICAgICAgIHMt PmJpX3ZhbGlkICs9IGxlbmd0aDsKICAgICB9CiB9Ci0jZWxzZSAvKiAhREVCVUcgKi8KKyNlbHNl IC8qICFaTElCX0RFQlVHICovCiAKICNkZWZpbmUgc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgp IFwKIHsgaW50IGxlbiA9IGxlbmd0aDtcCiAgIGlmIChzLT5iaV92YWxpZCA+IChpbnQpQnVmX3Np emUgLSBsZW4pIHtcCi0gICAgaW50IHZhbCA9IHZhbHVlO1wKLSAgICBzLT5iaV9idWYgfD0gKHZh bCA8PCBzLT5iaV92YWxpZCk7XAorICAgIGludCB2YWwgPSAoaW50KXZhbHVlO1wKKyAgICBzLT5i aV9idWYgfD0gKHVzaCl2YWwgPDwgcy0+YmlfdmFsaWQ7XAogICAgIHB1dF9zaG9ydChzLCBzLT5i aV9idWYpO1wKICAgICBzLT5iaV9idWYgPSAodXNoKXZhbCA+PiAoQnVmX3NpemUgLSBzLT5iaV92 YWxpZCk7XAogICAgIHMtPmJpX3ZhbGlkICs9IGxlbiAtIEJ1Zl9zaXplO1wKICAgfSBlbHNlIHtc Ci0gICAgcy0+YmlfYnVmIHw9ICh2YWx1ZSkgPDwgcy0+YmlfdmFsaWQ7XAorICAgIHMtPmJpX2J1 ZiB8PSAodXNoKSh2YWx1ZSkgPDwgcy0+YmlfdmFsaWQ7XAogICAgIHMtPmJpX3ZhbGlkICs9IGxl bjtcCiAgIH1cCiB9Ci0jZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBaTElCX0RFQlVHICov CiAKIAogLyogdGhlIGFyZ3VtZW50cyBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyAqLwpAQCAt MjUwLDExICsyNDQsMTMgQEAKICAgICBpZiAoc3RhdGljX2luaXRfZG9uZSkgcmV0dXJuOwogCiAg ICAgLyogRm9yIHNvbWUgZW1iZWRkZWQgdGFyZ2V0cywgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90 IGluaXRpYWxpemVkOiAqLworI2lmZGVmIE5PX0lOSVRfR0xPQkFMX1BPSU5URVJTCiAgICAgc3Rh dGljX2xfZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19sdHJlZTsKICAgICBzdGF0aWNfbF9kZXNj LmV4dHJhX2JpdHMgPSBleHRyYV9sYml0czsKICAgICBzdGF0aWNfZF9kZXNjLnN0YXRpY190cmVl ID0gc3RhdGljX2R0cmVlOwogICAgIHN0YXRpY19kX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2Ri aXRzOwogICAgIHN0YXRpY19ibF9kZXNjLmV4dHJhX2JpdHMgPSBleHRyYV9ibGJpdHM7CisjZW5k aWYKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIG1hcHBpbmcgbGVuZ3RoICgwLi4yNTUpIC0+IGxl bmd0aCBjb2RlICgwLi4yOCkgKi8KICAgICBsZW5ndGggPSAwOwpAQCAtMzE5LDcgKzMxNSw3IEBA CiAgKiBHZW5lcmVyYXRlIHRoZSBmaWxlIHRyZWVzLmggZGVzY3JpYmluZyB0aGUgc3RhdGljIHRy ZWVzLgogICovCiAjaWZkZWYgR0VOX1RSRUVTX0gKLSMgIGlmbmRlZiBERUJVRworIyAgaWZuZGVm IFpMSUJfREVCVUcKICMgICAgaW5jbHVkZSA8c3RkaW8uaD4KICMgIGVuZGlmCiAKQEAgLTM0OCwx MyArMzQ0LDE0IEBACiAgICAgICAgICAgICAgICAgc3RhdGljX2R0cmVlW2ldLkxlbiwgU0VQQVJB VE9SKGksIERfQ09ERVMtMSwgNSkpOwogICAgIH0KIAotICAgIGZwcmludGYoaGVhZGVyLCAiY29u c3QgdWNoIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl0gPSB7XG4iKTsKKyAgICBmcHJpbnRmKGhl YWRlciwgImNvbnN0IHVjaCBaTElCX0lOVEVSTkFMIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl0g PSB7XG4iKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgRElTVF9DT0RFX0xFTjsgaSsrKSB7CiAgICAg ICAgIGZwcmludGYoaGVhZGVyLCAiJTJ1JXMiLCBfZGlzdF9jb2RlW2ldLAogICAgICAgICAgICAg ICAgIFNFUEFSQVRPUihpLCBESVNUX0NPREVfTEVOLTEsIDIwKSk7CiAgICAgfQogCi0gICAgZnBy aW50ZihoZWFkZXIsICJjb25zdCB1Y2ggX2xlbmd0aF9jb2RlW01BWF9NQVRDSC1NSU5fTUFUQ0gr MV09IHtcbiIpOworICAgIGZwcmludGYoaGVhZGVyLAorICAgICAgICAiY29uc3QgdWNoIFpMSUJf SU5URVJOQUwgX2xlbmd0aF9jb2RlW01BWF9NQVRDSC1NSU5fTUFUQ0grMV09IHtcbiIpOwogICAg IGZvciAoaSA9IDA7IGkgPCBNQVhfTUFUQ0gtTUlOX01BVENIKzE7IGkrKykgewogICAgICAgICBm cHJpbnRmKGhlYWRlciwgIiUydSVzIiwgX2xlbmd0aF9jb2RlW2ldLAogICAgICAgICAgICAgICAg IFNFUEFSQVRPUihpLCBNQVhfTUFUQ0gtTUlOX01BVENILCAyMCkpOwpAQCAtMzc5LDcgKzM3Niw3 IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEluaXRpYWxpemUgdGhlIHRyZWUgZGF0YSBz dHJ1Y3R1cmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbS4KICAqLwotdm9pZCBfdHJfaW5pdChzKQor dm9pZCBaTElCX0lOVEVSTkFMIF90cl9pbml0KHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsK ICAgICB0cl9zdGF0aWNfaW5pdCgpOwpAQCAtMzk1LDggKzM5Miw3IEBACiAKICAgICBzLT5iaV9i dWYgPSAwOwogICAgIHMtPmJpX3ZhbGlkID0gMDsKLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA4OyAv KiBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlICovCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBa TElCX0RFQlVHCiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gPSAwTDsKICAgICBzLT5iaXRzX3NlbnQg PSAwTDsKICNlbmRpZgpAQCAtNTI0LDEyICs1MjAsMTIgQEAKICAgICAgICAgeGJpdHMgPSAwOwog ICAgICAgICBpZiAobiA+PSBiYXNlKSB4Yml0cyA9IGV4dHJhW24tYmFzZV07CiAgICAgICAgIGYg PSB0cmVlW25dLkZyZXE7Ci0gICAgICAgIHMtPm9wdF9sZW4gKz0gKHVsZylmICogKGJpdHMgKyB4 Yml0cyk7Ci0gICAgICAgIGlmIChzdHJlZSkgcy0+c3RhdGljX2xlbiArPSAodWxnKWYgKiAoc3Ry ZWVbbl0uTGVuICsgeGJpdHMpOworICAgICAgICBzLT5vcHRfbGVuICs9ICh1bGcpZiAqICh1bnNp Z25lZCkoYml0cyArIHhiaXRzKTsKKyAgICAgICAgaWYgKHN0cmVlKSBzLT5zdGF0aWNfbGVuICs9 ICh1bGcpZiAqICh1bnNpZ25lZCkoc3RyZWVbbl0uTGVuICsgeGJpdHMpOwogICAgIH0KICAgICBp ZiAob3ZlcmZsb3cgPT0gMCkgcmV0dXJuOwogCi0gICAgVHJhY2UoKHN0ZGVyciwiXG5iaXQgbGVu Z3RoIG92ZXJmbG93XG4iKSk7CisgICAgVHJhY2V2KChzdGRlcnIsIlxuYml0IGxlbmd0aCBvdmVy Zmxvd1xuIikpOwogICAgIC8qIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSBvbiBvYmoyIGFuZCBw aWMgb2YgdGhlIENhbGdhcnkgY29ycHVzICovCiAKICAgICAvKiBGaW5kIHRoZSBmaXJzdCBiaXQg bGVuZ3RoIHdoaWNoIGNvdWxkIGluY3JlYXNlOiAqLwpAQCAtNTU1LDEwICs1NTEsOSBAQAogICAg ICAgICB3aGlsZSAobiAhPSAwKSB7CiAgICAgICAgICAgICBtID0gcy0+aGVhcFstLWhdOwogICAg ICAgICAgICAgaWYgKG0gPiBtYXhfY29kZSkgY29udGludWU7Ci0gICAgICAgICAgICBpZiAodHJl ZVttXS5MZW4gIT0gKHVuc2lnbmVkKSBiaXRzKSB7Ci0gICAgICAgICAgICAgICAgVHJhY2UoKHN0 ZGVyciwiY29kZSAlZCBiaXRzICVkLT4lZFxuIiwgbSwgdHJlZVttXS5MZW4sIGJpdHMpKTsKLSAg ICAgICAgICAgICAgICBzLT5vcHRfbGVuICs9ICgobG9uZyliaXRzIC0gKGxvbmcpdHJlZVttXS5M ZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKGxvbmcpdHJlZVttXS5GcmVxOwor ICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkgdHJlZVttXS5MZW4gIT0gKHVuc2lnbmVkKSBiaXRz KSB7CisgICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsImNvZGUgJWQgYml0cyAlZC0+JWRc biIsIG0sIHRyZWVbbV0uTGVuLCBiaXRzKSk7CisgICAgICAgICAgICAgICAgcy0+b3B0X2xlbiAr PSAoKHVsZyliaXRzIC0gdHJlZVttXS5MZW4pICogdHJlZVttXS5GcmVxOwogICAgICAgICAgICAg ICAgIHRyZWVbbV0uTGVuID0gKHVzaCliaXRzOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg bi0tOwpAQCAtNTgwLDcgKzU3NSw3IEBACiAgICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAg LyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqLwogewogICAgIHVzaCBuZXh0 X2NvZGVbTUFYX0JJVFMrMV07IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3Ro ICovCi0gICAgdXNoIGNvZGUgPSAwOyAgICAgICAgICAgICAgLyogcnVubmluZyBjb2RlIHZhbHVl ICovCisgICAgdW5zaWduZWQgY29kZSA9IDA7ICAgICAgICAgLyogcnVubmluZyBjb2RlIHZhbHVl ICovCiAgICAgaW50IGJpdHM7ICAgICAgICAgICAgICAgICAgLyogYml0IGluZGV4ICovCiAgICAg aW50IG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqLwogCkBAIC01ODgsNyAr NTgzLDggQEAKICAgICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC4KICAgICAgKi8KICAgICBmb3Ig KGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKLSAgICAgICAgbmV4dF9jb2Rl W2JpdHNdID0gY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKKyAgICAgICAg Y29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKKyAgICAgICAgbmV4dF9jb2Rl W2JpdHNdID0gKHVzaCljb2RlOwogICAgIH0KICAgICAvKiBDaGVjayB0aGF0IHRoZSBiaXQgY291 bnRzIGluIGJsX2NvdW50IGFyZSBjb25zaXN0ZW50LiBUaGUgbGFzdCBjb2RlCiAgICAgICogbXVz dCBiZSBhbGwgb25lcy4KQEAgLTYwMSw3ICs1OTcsNyBAQAogICAgICAgICBpbnQgbGVuID0gdHJl ZVtuXS5MZW47CiAgICAgICAgIGlmIChsZW4gPT0gMCkgY29udGludWU7CiAgICAgICAgIC8qIE5v dyByZXZlcnNlIHRoZSBiaXRzICovCi0gICAgICAgIHRyZWVbbl0uQ29kZSA9IGJpX3JldmVyc2Uo bmV4dF9jb2RlW2xlbl0rKywgbGVuKTsKKyAgICAgICAgdHJlZVtuXS5Db2RlID0gKHVzaCliaV9y ZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7CiAKICAgICAgICAgVHJhY2Vjdih0cmVlICE9 IHN0YXRpY19sdHJlZSwgKHN0ZGVyciwiXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpICIsCiAg ICAgICAgICAgICAgbiwgKGlzZ3JhcGgobikgPyBuIDogJyAnKSwgbGVuLCB0cmVlW25dLkNvZGUs IG5leHRfY29kZVtsZW5dLTEpKTsKQEAgLTgyMyw3ICs4MTksNyBAQAogICAgICAgICBpZiAocy0+ YmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF1dLkxlbiAhPSAwKSBicmVhazsKICAgICB9CiAg ICAgLyogVXBkYXRlIG9wdF9sZW4gdG8gaW5jbHVkZSB0aGUgYml0IGxlbmd0aCB0cmVlIGFuZCBj b3VudHMgKi8KLSAgICBzLT5vcHRfbGVuICs9IDMqKG1heF9ibGluZGV4KzEpICsgNSs1KzQ7Cisg ICAgcy0+b3B0X2xlbiArPSAzKigodWxnKW1heF9ibGluZGV4KzEpICsgNSs1KzQ7CiAgICAgVHJh Y2V2KChzdGRlcnIsICJcbmR5biB0cmVlczogZHluICVsZCwgc3RhdCAlbGQiLAogICAgICAgICAg ICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpOwogCkBAIC04NjQsNjUgKzg2MCw1OSBAQAog LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CiAgKiBTZW5kIGEgc3RvcmVkIGJsb2NrCiAgKi8KLXZvaWQg X3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGVvZikKK3ZvaWQgWkxJQl9JTlRF Uk5BTCBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkKICAgICBkZWZs YXRlX3N0YXRlICpzOwogICAgIGNoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrICovCiAg ICAgdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovCi0gICAgaW50 IGVvZjsgICAgICAgICAgLyogdHJ1ZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZp bGUgKi8KKyAgICBpbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBi bG9jayBmb3IgYSBmaWxlICovCiB7Ci0gICAgc2VuZF9iaXRzKHMsIChTVE9SRURfQkxPQ0s8PDEp K2VvZiwgMyk7ICAvKiBzZW5kIGJsb2NrIHR5cGUgKi8KLSNpZmRlZiBERUJVRworICAgIHNlbmRf Yml0cyhzLCAoU1RPUkVEX0JMT0NLPDwxKStsYXN0LCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBl ICovCisgICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAq LworICAgIHB1dF9zaG9ydChzLCAodXNoKXN0b3JlZF9sZW4pOworICAgIHB1dF9zaG9ydChzLCAo dXNoKX5zdG9yZWRfbGVuKTsKKyAgICB6bWVtY3B5KHMtPnBlbmRpbmdfYnVmICsgcy0+cGVuZGlu ZywgKEJ5dGVmICopYnVmLCBzdG9yZWRfbGVuKTsKKyAgICBzLT5wZW5kaW5nICs9IHN0b3JlZF9s ZW47CisjaWZkZWYgWkxJQl9ERUJVRwogICAgIHMtPmNvbXByZXNzZWRfbGVuID0gKHMtPmNvbXBy ZXNzZWRfbGVuICsgMyArIDcpICYgKHVsZyl+N0w7CiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0g KHN0b3JlZF9sZW4gKyA0KSA8PCAzOworICAgIHMtPmJpdHNfc2VudCArPSAyKjE2OworICAgIHMt PmJpdHNfc2VudCArPSBzdG9yZWRfbGVuPDwzOwogI2VuZGlmCi0gICAgY29weV9ibG9jayhzLCBi dWYsICh1bnNpZ25lZClzdG9yZWRfbGVuLCAxKTsgLyogd2l0aCBoZWFkZXIgKi8KK30KKworLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisgKiBGbHVzaCB0aGUgYml0cyBpbiB0aGUgYml0IGJ1ZmZlciB0 byBwZW5kaW5nIG91dHB1dCAobGVhdmVzIGF0IG1vc3QgNyBiaXRzKQorICovCit2b2lkIFpMSUJf SU5URVJOQUwgX3RyX2ZsdXNoX2JpdHMocykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworeworICAg IGJpX2ZsdXNoKHMpOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFNlbmQgb25lIGVt cHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuCiAg KiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1 ZmZlci4KLSAqIFRoZSBjdXJyZW50IGluZmxhdGUgY29kZSByZXF1aXJlcyA5IGJpdHMgb2YgbG9v a2FoZWFkLiBJZiB0aGUKLSAqIGxhc3QgdHdvIGNvZGVzIGZvciB0aGUgcHJldmlvdXMgYmxvY2sg KHJlYWwgY29kZSBwbHVzIEVPQikgd2VyZSBjb2RlZAotICogb24gNSBiaXRzIG9yIGxlc3MsIGlu ZmxhdGUgbWF5IGhhdmUgb25seSA1KzMgYml0cyBvZiBsb29rYWhlYWQgdG8gZGVjb2RlCi0gKiB0 aGUgbGFzdCByZWFsIGNvZGUuIEluIHRoaXMgY2FzZSB3ZSBzZW5kIHR3byBlbXB0eSBzdGF0aWMg YmxvY2tzIGluc3RlYWQKLSAqIG9mIG9uZS4gKFRoZXJlIGFyZSBubyBwcm9ibGVtcyBpZiB0aGUg cHJldmlvdXMgYmxvY2sgaXMgc3RvcmVkIG9yIGZpeGVkLikKLSAqIFRvIHNpbXBsaWZ5IHRoZSBj b2RlLCB3ZSBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugb2YgbGFzdCByZWFsIGNvZGUgZW5jb2RlZAot ICogb24gb25lIGJpdCBvbmx5LgogICovCi12b2lkIF90cl9hbGlnbihzKQordm9pZCBaTElCX0lO VEVSTkFMIF90cl9hbGlnbihzKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiB7CiAgICAgc2VuZF9i aXRzKHMsIFNUQVRJQ19UUkVFUzw8MSwgMyk7CiAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywg c3RhdGljX2x0cmVlKTsKLSNpZmRlZiBERUJVRworI2lmZGVmIFpMSUJfREVCVUcKICAgICBzLT5j b21wcmVzc2VkX2xlbiArPSAxMEw7IC8qIDMgZm9yIGJsb2NrIHR5cGUsIDcgZm9yIEVPQiAqLwog I2VuZGlmCiAgICAgYmlfZmx1c2gocyk7Ci0gICAgLyogT2YgdGhlIDEwIGJpdHMgZm9yIHRoZSBl bXB0eSBibG9jaywgd2UgaGF2ZSBhbHJlYWR5IHNlbnQKLSAgICAgKiAoMTAgLSBiaV92YWxpZCkg Yml0cy4gVGhlIGxvb2thaGVhZCBmb3IgdGhlIGxhc3QgcmVhbCBjb2RlIChiZWZvcmUKLSAgICAg KiB0aGUgRU9CIG9mIHRoZSBwcmV2aW91cyBibG9jaykgd2FzIHRodXMgYXQgbGVhc3Qgb25lIHBs dXMgdGhlIGxlbmd0aAotICAgICAqIG9mIHRoZSBFT0IgcGx1cyB3aGF0IHdlIGhhdmUganVzdCBz ZW50IG9mIHRoZSBlbXB0eSBzdGF0aWMgYmxvY2suCi0gICAgICovCi0gICAgaWYgKDEgKyBzLT5s YXN0X2VvYl9sZW4gKyAxMCAtIHMtPmJpX3ZhbGlkIDwgOSkgewotICAgICAgICBzZW5kX2JpdHMo cywgU1RBVElDX1RSRUVTPDwxLCAzKTsKLSAgICAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywg c3RhdGljX2x0cmVlKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiAr PSAxMEw7Ci0jZW5kaWYKLSAgICAgICAgYmlfZmx1c2gocyk7Ci0gICAgfQotICAgIHMtPmxhc3Rf ZW9iX2xlbiA9IDc7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogRGV0ZXJtaW5lIHRo ZSBiZXN0IGVuY29kaW5nIGZvciB0aGUgY3VycmVudCBibG9jazogZHluYW1pYyB0cmVlcywgc3Rh dGljCi0gKiB0cmVlcyBvciBzdG9yZSwgYW5kIG91dHB1dCB0aGUgZW5jb2RlZCBibG9jayB0byB0 aGUgemlwIGZpbGUuCisgKiB0cmVlcyBvciBzdG9yZSwgYW5kIHdyaXRlIG91dCB0aGUgZW5jb2Rl ZCBibG9jay4KICAqLwotdm9pZCBfdHJfZmx1c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBl b2YpCit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xl biwgbGFzdCkKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGNoYXJmICpidWY7ICAgICAgIC8q IGlucHV0IGJsb2NrLCBvciBOVUxMIGlmIHRvbyBvbGQgKi8KICAgICB1bGcgc3RvcmVkX2xlbjsg ICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KLSAgICBpbnQgZW9mOyAgICAgICAgICAvKiB0 cnVlIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqLworICAgIGludCBsYXN0 OyAgICAgICAgIC8qIG9uZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZpbGUgKi8K IHsKICAgICB1bGcgb3B0X2xlbmIsIHN0YXRpY19sZW5iOyAvKiBvcHRfbGVuIGFuZCBzdGF0aWNf bGVuIGluIGJ5dGVzICovCiAgICAgaW50IG1heF9ibGluZGV4ID0gMDsgIC8qIGluZGV4IG9mIGxh c3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi8KQEAgLTkzMCw4ICs5MjAsOSBA QAogICAgIC8qIEJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzIHVubGVzcyBhIHN0b3JlZCBibG9jayBp cyBmb3JjZWQgKi8KICAgICBpZiAocy0+bGV2ZWwgPiAwKSB7CiAKLSAgICAgICAgIC8qIENoZWNr IGlmIHRoZSBmaWxlIGlzIGFzY2lpIG9yIGJpbmFyeSAqLwotICAgICAgICBpZiAocy0+c3RybS0+ ZGF0YV90eXBlID09IFpfVU5LTk9XTikgc2V0X2RhdGFfdHlwZShzKTsKKyAgICAgICAgLyogQ2hl Y2sgaWYgdGhlIGZpbGUgaXMgYmluYXJ5IG9yIHRleHQgKi8KKyAgICAgICAgaWYgKHMtPnN0cm0t PmRhdGFfdHlwZSA9PSBaX1VOS05PV04pCisgICAgICAgICAgICBzLT5zdHJtLT5kYXRhX3R5cGUg PSBkZXRlY3RfZGF0YV90eXBlKHMpOwogCiAgICAgICAgIC8qIENvbnN0cnVjdCB0aGUgbGl0ZXJh bCBhbmQgZGlzdGFuY2UgdHJlZXMgKi8KICAgICAgICAgYnVpbGRfdHJlZShzLCAodHJlZV9kZXNj ICopKCYocy0+bF9kZXNjKSkpOwpAQCAtOTc3LDI0ICs5NjgsMjYgQEAKICAgICAgICAgICogc3Vj Y2Vzc2Z1bC4gSWYgTElUX0JVRlNJWkUgPD0gV1NJWkUsIGl0IGlzIG5ldmVyIHRvbyBsYXRlIHRv CiAgICAgICAgICAqIHRyYW5zZm9ybSBhIGJsb2NrIGludG8gYSBzdG9yZWQgYmxvY2suCiAgICAg ICAgICAqLwotICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgZW9m KTsKKyAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpOwog CiAjaWZkZWYgRk9SQ0VfU1RBVElDCiAgICAgfSBlbHNlIGlmIChzdGF0aWNfbGVuYiA+PSAwKSB7 IC8qIGZvcmNlIHN0YXRpYyB0cmVlcyAqLwogI2Vsc2UKLSAgICB9IGVsc2UgaWYgKHN0YXRpY19s ZW5iID09IG9wdF9sZW5iKSB7CisgICAgfSBlbHNlIGlmIChzLT5zdHJhdGVneSA9PSBaX0ZJWEVE IHx8IHN0YXRpY19sZW5iID09IG9wdF9sZW5iKSB7CiAjZW5kaWYKLSAgICAgICAgc2VuZF9iaXRz KHMsIChTVEFUSUNfVFJFRVM8PDEpK2VvZiwgMyk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMs IChjdF9kYXRhICopc3RhdGljX2x0cmVlLCAoY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7Ci0jaWZk ZWYgREVCVUcKKyAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVM8PDEpK2xhc3QsIDMp OworICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19sdHJl ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGN0X2RhdGEgKilzdGF0aWNfZHRyZWUp OworI2lmZGVmIFpMSUJfREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMt PnN0YXRpY19sZW47CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBzZW5kX2JpdHMocywg KERZTl9UUkVFUzw8MSkrZW9mLCAzKTsKKyAgICAgICAgc2VuZF9iaXRzKHMsIChEWU5fVFJFRVM8 PDEpK2xhc3QsIDMpOwogICAgICAgICBzZW5kX2FsbF90cmVlcyhzLCBzLT5sX2Rlc2MubWF4X2Nv ZGUrMSwgcy0+ZF9kZXNjLm1heF9jb2RlKzEsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heF9i bGluZGV4KzEpOwotICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY3RfZGF0YSAqKXMtPmR5bl9s dHJlZSwgKGN0X2RhdGEgKilzLT5keW5fZHRyZWUpOwotI2lmZGVmIERFQlVHCisgICAgICAgIGNv bXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2x0cmVlLAorICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CisjaWZkZWYgWkxJ Ql9ERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+b3B0X2xlbjsKICNl bmRpZgogICAgIH0KQEAgLTEwMDQsMjEgKzk5NywyMSBAQAogICAgICAqLwogICAgIGluaXRfYmxv Y2socyk7CiAKLSAgICBpZiAoZW9mKSB7CisgICAgaWYgKGxhc3QpIHsKICAgICAgICAgYmlfd2lu ZHVwKHMpOwotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogICAgICAgICBzLT5jb21w cmVzc2VkX2xlbiArPSA3OyAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLwogI2VuZGlmCiAg ICAgfQogICAgIFRyYWNldigoc3RkZXJyLCJcbmNvbXBybGVuICVsdSglbHUpICIsIHMtPmNvbXBy ZXNzZWRfbGVuPj4zLAotICAgICAgICAgICBzLT5jb21wcmVzc2VkX2xlbi03KmVvZikpOworICAg ICAgICAgICBzLT5jb21wcmVzc2VkX2xlbi03Kmxhc3QpKTsKIH0KIAogLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CiAgKiBTYXZlIHRoZSBtYXRjaCBpbmZvIGFuZCB0YWxseSB0aGUgZnJlcXVlbmN5IGNv dW50cy4gUmV0dXJuIHRydWUgaWYKICAqIHRoZSBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hl ZC4KICAqLwotaW50IF90cl90YWxseSAocywgZGlzdCwgbGMpCitpbnQgWkxJQl9JTlRFUk5BTCBf dHJfdGFsbHkgKHMsIGRpc3QsIGxjKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgdW5zaWdu ZWQgZGlzdDsgIC8qIGRpc3RhbmNlIG9mIG1hdGNoZWQgc3RyaW5nICovCiAgICAgdW5zaWduZWQg bGM7ICAgIC8qIG1hdGNoIGxlbmd0aC1NSU5fTUFUQ0ggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRp c3Q9PTApICovCkBAIC0xMDcwLDggKzEwNjMsOCBAQAogICovCiBsb2NhbCB2b2lkIGNvbXByZXNz X2Jsb2NrKHMsIGx0cmVlLCBkdHJlZSkKICAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIGN0X2Rh dGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi8KLSAgICBjdF9kYXRhICpkdHJlZTsgLyogZGlz dGFuY2UgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUg Ki8KKyAgICBjb25zdCBjdF9kYXRhICpkdHJlZTsgLyogZGlzdGFuY2UgdHJlZSAqLwogewogICAg IHVuc2lnbmVkIGRpc3Q7ICAgICAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi8KICAg ICBpbnQgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAo aWYgZGlzdCA9PSAwKSAqLwpAQCAtMTEwMSw3ICsxMDk0LDcgQEAKICAgICAgICAgICAgIHNlbmRf Y29kZShzLCBjb2RlLCBkdHJlZSk7ICAgICAgIC8qIHNlbmQgdGhlIGRpc3RhbmNlIGNvZGUgKi8K ICAgICAgICAgICAgIGV4dHJhID0gZXh0cmFfZGJpdHNbY29kZV07CiAgICAgICAgICAgICBpZiAo ZXh0cmEgIT0gMCkgewotICAgICAgICAgICAgICAgIGRpc3QgLT0gYmFzZV9kaXN0W2NvZGVdOwor ICAgICAgICAgICAgICAgIGRpc3QgLT0gKHVuc2lnbmVkKWJhc2VfZGlzdFtjb2RlXTsKICAgICAg ICAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOyAgIC8qIHNlbmQgdGhlIGV4dHJh IGRpc3RhbmNlIGJpdHMgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgfSAvKiBsaXRlcmFsIG9y IG1hdGNoIHBhaXIgPyAqLwpAQCAtMTExMywyNSArMTEwNiw0OCBAQAogICAgIH0gd2hpbGUgKGx4 IDwgcy0+bGFzdF9saXQpOwogCiAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgbHRyZWUpOwot ICAgIHMtPmxhc3RfZW9iX2xlbiA9IGx0cmVlW0VORF9CTE9DS10uTGVuOwogfQogCiAvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSAqIFNldCB0aGUgZGF0YSB0eXBlIHRvIEFTQ0lJIG9yIEJJTkFSWSwg dXNpbmcgYSBjcnVkZSBhcHByb3hpbWF0aW9uOgotICogYmluYXJ5IGlmIG1vcmUgdGhhbiAyMCUg b2YgdGhlIGJ5dGVzIGFyZSA8PSA2IG9yID49IDEyOCwgYXNjaWkgb3RoZXJ3aXNlLgotICogSU4g YXNzZXJ0aW9uOiB0aGUgZmllbGRzIGZyZXEgb2YgZHluX2x0cmVlIGFyZSBzZXQgYW5kIHRoZSB0 b3RhbCBvZiBhbGwKLSAqIGZyZXF1ZW5jaWVzIGRvZXMgbm90IGV4Y2VlZCA2NEsgKHRvIGZpdCBp biBhbiBpbnQgb24gMTYgYml0IG1hY2hpbmVzKS4KKyAqIENoZWNrIGlmIHRoZSBkYXRhIHR5cGUg aXMgVEVYVCBvciBCSU5BUlksIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorICogLSBU RVhUIGlmIHRoZSB0d28gY29uZGl0aW9ucyBiZWxvdyBhcmUgc2F0aXNmaWVkOgorICogICAgYSkg VGhlcmUgYXJlIG5vIG5vbi1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgYmVsb25naW5nIHRv IHRoZQorICogICAgICAgImJsYWNrIGxpc3QiICgwLi42LCAxNC4uMjUsIDI4Li4zMSkuCisgKiAg ICBiKSBUaGVyZSBpcyBhdCBsZWFzdCBvbmUgcHJpbnRhYmxlIGNoYXJhY3RlciBiZWxvbmdpbmcg dG8gdGhlCisgKiAgICAgICAid2hpdGUgbGlzdCIgKDkge1RBQn0sIDEwIHtMRn0sIDEzIHtDUn0s IDMyLi4yNTUpLgorICogLSBCSU5BUlkgb3RoZXJ3aXNlLgorICogLSBUaGUgZm9sbG93aW5nIHBh cnRpYWxseS1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgZm9ybSBhCisgKiAgICJncmF5IGxp c3QiIHRoYXQgaXMgaWdub3JlZCBpbiB0aGlzIGRldGVjdGlvbiBhbGdvcml0aG06CisgKiAgICg3 IHtCRUx9LCA4IHtCU30sIDExIHtWVH0sIDEyIHtGRn0sIDI2IHtTVUJ9LCAyNyB7RVNDfSkuCisg KiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgRnJlcSBvZiBkeW5fbHRyZWUgYXJlIHNldC4KICAq LwotbG9jYWwgdm9pZCBzZXRfZGF0YV90eXBlKHMpCitsb2NhbCBpbnQgZGV0ZWN0X2RhdGFfdHlw ZShzKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiB7Ci0gICAgaW50IG4gPSAwOwotICAgIHVuc2ln bmVkIGFzY2lpX2ZyZXEgPSAwOwotICAgIHVuc2lnbmVkIGJpbl9mcmVxID0gMDsKLSAgICB3aGls ZSAobiA8IDcpICAgICAgICBiaW5fZnJlcSArPSBzLT5keW5fbHRyZWVbbisrXS5GcmVxOwotICAg IHdoaWxlIChuIDwgMTI4KSAgICBhc2NpaV9mcmVxICs9IHMtPmR5bl9sdHJlZVtuKytdLkZyZXE7 Ci0gICAgd2hpbGUgKG4gPCBMSVRFUkFMUykgYmluX2ZyZXEgKz0gcy0+ZHluX2x0cmVlW24rK10u RnJlcTsKLSAgICBzLT5zdHJtLT5kYXRhX3R5cGUgPSBiaW5fZnJlcSA+IChhc2NpaV9mcmVxID4+ IDIpID8gWl9CSU5BUlkgOiBaX0FTQ0lJOworICAgIC8qIGJsYWNrX21hc2sgaXMgdGhlIGJpdCBt YXNrIG9mIGJsYWNrLWxpc3RlZCBieXRlcworICAgICAqIHNldCBiaXRzIDAuLjYsIDE0Li4yNSwg YW5kIDI4Li4zMQorICAgICAqIDB4ZjNmZmMwN2YgPSBiaW5hcnkgMTExMTAwMTExMTExMTExMTEx MDAwMDAwMDExMTExMTEKKyAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nIGJsYWNrX21hc2sgPSAw eGYzZmZjMDdmVUw7CisgICAgaW50IG47CisKKyAgICAvKiBDaGVjayBmb3Igbm9uLXRleHR1YWwg KCJibGFjay1saXN0ZWQiKSBieXRlcy4gKi8KKyAgICBmb3IgKG4gPSAwOyBuIDw9IDMxOyBuKyss IGJsYWNrX21hc2sgPj49IDEpCisgICAgICAgIGlmICgoYmxhY2tfbWFzayAmIDEpICYmIChzLT5k eW5fbHRyZWVbbl0uRnJlcSAhPSAwKSkKKyAgICAgICAgICAgIHJldHVybiBaX0JJTkFSWTsKKwor ICAgIC8qIENoZWNrIGZvciB0ZXh0dWFsICgid2hpdGUtbGlzdGVkIikgYnl0ZXMuICovCisgICAg aWYgKHMtPmR5bl9sdHJlZVs5XS5GcmVxICE9IDAgfHwgcy0+ZHluX2x0cmVlWzEwXS5GcmVxICE9 IDAKKyAgICAgICAgICAgIHx8IHMtPmR5bl9sdHJlZVsxM10uRnJlcSAhPSAwKQorICAgICAgICBy ZXR1cm4gWl9URVhUOworICAgIGZvciAobiA9IDMyOyBuIDwgTElURVJBTFM7IG4rKykKKyAgICAg ICAgaWYgKHMtPmR5bl9sdHJlZVtuXS5GcmVxICE9IDApCisgICAgICAgICAgICByZXR1cm4gWl9U RVhUOworCisgICAgLyogVGhlcmUgYXJlIG5vICJibGFjay1saXN0ZWQiIG9yICJ3aGl0ZS1saXN0 ZWQiIGJ5dGVzOgorICAgICAqIHRoaXMgc3RyZWFtIGVpdGhlciBpcyBlbXB0eSBvciBoYXMgdG9s ZXJhdGVkICgiZ3JheS1saXN0ZWQiKSBieXRlcyBvbmx5LgorICAgICAqLworICAgIHJldHVybiBa X0JJTkFSWTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMTgxLDM1ICsxMTk3LDcg QEAKICAgICB9CiAgICAgcy0+YmlfYnVmID0gMDsKICAgICBzLT5iaV92YWxpZCA9IDA7Ci0jaWZk ZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAgICAgcy0+Yml0c19zZW50ID0gKHMtPmJpdHNf c2VudCs3KSAmIH43OwogI2VuZGlmCiB9Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29w eSBhIHN0b3JlZCBibG9jaywgc3RvcmluZyBmaXJzdCB0aGUgbGVuZ3RoIGFuZCBpdHMKLSAqIG9u ZSdzIGNvbXBsZW1lbnQgaWYgcmVxdWVzdGVkLgotICovCi1sb2NhbCB2b2lkIGNvcHlfYmxvY2so cywgYnVmLCBsZW4sIGhlYWRlcikKLSAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIGNoYXJmICAg ICpidWY7ICAgIC8qIHRoZSBpbnB1dCBkYXRhICovCi0gICAgdW5zaWduZWQgbGVuOyAgICAgLyog aXRzIGxlbmd0aCAqLwotICAgIGludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVh ZGVyIG11c3QgYmUgd3JpdHRlbiAqLwotewotICAgIGJpX3dpbmR1cChzKTsgICAgICAgIC8qIGFs aWduIG9uIGJ5dGUgYm91bmRhcnkgKi8KLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA4OyAvKiBlbm91 Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlICovCi0KLSAgICBpZiAoaGVhZGVyKSB7Ci0gICAgICAg IHB1dF9zaG9ydChzLCAodXNoKWxlbik7Ci0gICAgICAgIHB1dF9zaG9ydChzLCAodXNoKX5sZW4p OwotI2lmZGVmIERFQlVHCi0gICAgICAgIHMtPmJpdHNfc2VudCArPSAyKjE2OwotI2VuZGlmCi0g ICAgfQotI2lmZGVmIERFQlVHCi0gICAgcy0+Yml0c19zZW50ICs9ICh1bGcpbGVuPDwzOwotI2Vu ZGlmCi0gICAgd2hpbGUgKGxlbi0tKSB7Ci0gICAgICAgIHB1dF9ieXRlKHMsICpidWYrKyk7Ci0g ICAgfQotfQpkaWZmIC1yIDlhMzE3NzIzMTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQv Z3MvemxpYi90cmVlcy5oCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvdHJlZXMuaAlTdW4gTWFy IDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi90cmVlcy5o CVN1biBNYXIgMDggMTk6NTg6MDggMjAyMCAtMDQwMApAQCAtNzAsNyArNzAsNyBAQAoge3sxOX0s eyA1fX0sIHt7MTF9LHsgNX19LCB7ezI3fSx7IDV9fSwge3sgN30seyA1fX0sIHt7MjN9LHsgNX19 CiB9OwogCi1jb25zdCB1Y2ggX2Rpc3RfY29kZVtESVNUX0NPREVfTEVOXSA9IHsKK2NvbnN0IHVj aCBaTElCX0lOVEVSTkFMIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl0gPSB7CiAgMCwgIDEsICAy LCAgMywgIDQsICA0LCAgNSwgIDUsICA2LCAgNiwgIDYsICA2LCAgNywgIDcsICA3LCAgNywgIDgs ICA4LCAgOCwgIDgsCiAgOCwgIDgsICA4LCAgOCwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDks ICA5LCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsCiAxMCwgMTAsIDEwLCAxMCwgMTAs IDEwLCAxMCwgMTAsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwg MTEsCkBAIC05OSw3ICs5OSw3IEBACiAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5 LCAyOSwgMjksIDI5CiB9OwogCi1jb25zdCB1Y2ggX2xlbmd0aF9jb2RlW01BWF9NQVRDSC1NSU5f TUFUQ0grMV09IHsKK2NvbnN0IHVjaCBaTElCX0lOVEVSTkFMIF9sZW5ndGhfY29kZVtNQVhfTUFU Q0gtTUlOX01BVENIKzFdPSB7CiAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAg OCwgIDksICA5LCAxMCwgMTAsIDExLCAxMSwgMTIsIDEyLCAxMiwgMTIsCiAxMywgMTMsIDEzLCAx MywgMTQsIDE0LCAxNCwgMTQsIDE1LCAxNSwgMTUsIDE1LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2 LCAxNiwgMTYsCiAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4 LCAxOCwgMTgsIDE4LCAxOCwgMTksIDE5LCAxOSwgMTksCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1y IGUyZDE5MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL3VuY29tcHIuYwotLS0gYS9zeXMvc3Jj L2NtZC9ncy96bGliL3VuY29tcHIuYwlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAKKysr IGIvc3lzL3NyYy9jbWQvZ3MvemxpYi91bmNvbXByLmMJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIw IC0wNDAwCkBAIC0xLDYxICsxLDkzIEBACiAvKiB1bmNvbXByLmMgLS0gZGVjb21wcmVzcyBhIG1l bW9yeSBidWZmZXIKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEplYW4tbG91cCBHYWlsbHku CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAxMCwgMjAxNCwgMjAxNiBKZWFuLWxvdXAg R2FpbGx5LCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5k IHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAotLyogQCgjKSAkSWQ6 IHVuY29tcHIuYyx2IDEuMS4xLjEgMjAwNS8wNC8yNCAyMTozOTozOCBnaWxlcyBFeHAgJCAqLwor LyogQCgjKSAkSWQkICovCiAKICNkZWZpbmUgWkxJQl9JTlRFUk5BTAogI2luY2x1ZGUgInpsaWIu aCIKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNl IGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKLSAgIHRo ZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBp cyB0aGUgdG90YWwKLSAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVz dCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKLSAgIGVudGlyZSB1bmNvbXByZXNzZWQgZGF0 YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUKLSAgIGJlZW4g c2F2ZWQgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhl IGRlY29tcHJlc3NvcgotICAgYnkgc29tZSBtZWNoYW5pc20gb3V0c2lkZSB0aGUgc2NvcGUgb2Yg dGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikKLSAgIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUg YWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyLgotICAgICBUaGlzIGZ1bmN0aW9u IGNhbiBiZSB1c2VkIHRvIGRlY29tcHJlc3MgYSB3aG9sZSBmaWxlIGF0IG9uY2UgaWYgdGhlCi0g ICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuCisgICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1 ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICAqc291cmNlTGVuIGlzCisgICB0aGUg Ynl0ZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuIFVwb24gZW50cnksICpkZXN0TGVuIGlz IHRoZSB0b3RhbCBzaXplCisgICBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0 IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUKKyAgIHVuY29tcHJlc3NlZCBkYXRh LiAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgaGF2ZSBiZWVuIHNhdmVk CisgICBwcmV2aW91c2x5IGJ5IHRoZSBjb21wcmVzc29yIGFuZCB0cmFuc21pdHRlZCB0byB0aGUg ZGVjb21wcmVzc29yIGJ5IHNvbWUKKyAgIG1lY2hhbmlzbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0 aGlzIGNvbXByZXNzaW9uIGxpYnJhcnkuKSBVcG9uIGV4aXQsCisgICAqZGVzdExlbiBpcyB0aGUg c2l6ZSBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEgYW5kICpzb3VyY2VMZW4gaXMgdGhlIG51bWJl cgorICAgb2Ygc291cmNlIGJ5dGVzIGNvbnN1bWVkLiBVcG9uIHJldHVybiwgc291cmNlICsgKnNv dXJjZUxlbiBwb2ludHMgdG8gdGhlCisgICBmaXJzdCB1bnVzZWQgaW5wdXQgYnl0ZS4KIAotICAg ICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVy ZSB3YXMgbm90Ci0gICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90 IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKLSAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlm IHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQuCisgICAgIHVuY29tcHJlc3MgcmV0dXJucyBa X09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBt ZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91 dHB1dCBidWZmZXIsIG9yCisgICBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNv cnJ1cHRlZCwgaW5jbHVkaW5nIGlmIHRoZSBpbnB1dCBkYXRhIGlzCisgICBhbiBpbmNvbXBsZXRl IHpsaWIgc3RyZWFtLgogKi8KK2ludCBaRVhQT1JUIHVuY29tcHJlc3MyIChkZXN0LCBkZXN0TGVu LCBzb3VyY2UsIHNvdXJjZUxlbikKKyAgICBCeXRlZiAqZGVzdDsKKyAgICB1TG9uZ2YgKmRlc3RM ZW47CisgICAgY29uc3QgQnl0ZWYgKnNvdXJjZTsKKyAgICB1TG9uZyAqc291cmNlTGVuOworewor ICAgIHpfc3RyZWFtIHN0cmVhbTsKKyAgICBpbnQgZXJyOworICAgIGNvbnN0IHVJbnQgbWF4ID0g KHVJbnQpLTE7CisgICAgdUxvbmcgbGVuLCBsZWZ0OworICAgIEJ5dGUgYnVmWzFdOyAgICAvKiBm b3IgZGV0ZWN0aW9uIG9mIGluY29tcGxldGUgc3RyZWFtIHdoZW4gKmRlc3RMZW4gPT0gMCAqLwor CisgICAgbGVuID0gKnNvdXJjZUxlbjsKKyAgICBpZiAoKmRlc3RMZW4pIHsKKyAgICAgICAgbGVm dCA9ICpkZXN0TGVuOworICAgICAgICAqZGVzdExlbiA9IDA7CisgICAgfQorICAgIGVsc2Ugewor ICAgICAgICBsZWZ0ID0gMTsKKyAgICAgICAgZGVzdCA9IGJ1ZjsKKyAgICB9CisKKyAgICBzdHJl YW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOworICAgIHN0cmVhbS5hdmFpbF9p biA9IDA7CisgICAgc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7CisgICAgc3RyZWFtLnpm cmVlID0gKGZyZWVfZnVuYykwOworICAgIHN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CisKKyAg ICBlcnIgPSBpbmZsYXRlSW5pdCgmc3RyZWFtKTsKKyAgICBpZiAoZXJyICE9IFpfT0spIHJldHVy biBlcnI7CisKKyAgICBzdHJlYW0ubmV4dF9vdXQgPSBkZXN0OworICAgIHN0cmVhbS5hdmFpbF9v dXQgPSAwOworCisgICAgZG8geworICAgICAgICBpZiAoc3RyZWFtLmF2YWlsX291dCA9PSAwKSB7 CisgICAgICAgICAgICBzdHJlYW0uYXZhaWxfb3V0ID0gbGVmdCA+ICh1TG9uZyltYXggPyBtYXgg OiAodUludClsZWZ0OworICAgICAgICAgICAgbGVmdCAtPSBzdHJlYW0uYXZhaWxfb3V0OworICAg ICAgICB9CisgICAgICAgIGlmIChzdHJlYW0uYXZhaWxfaW4gPT0gMCkgeworICAgICAgICAgICAg c3RyZWFtLmF2YWlsX2luID0gbGVuID4gKHVMb25nKW1heCA/IG1heCA6ICh1SW50KWxlbjsKKyAg ICAgICAgICAgIGxlbiAtPSBzdHJlYW0uYXZhaWxfaW47CisgICAgICAgIH0KKyAgICAgICAgZXJy ID0gaW5mbGF0ZSgmc3RyZWFtLCBaX05PX0ZMVVNIKTsKKyAgICB9IHdoaWxlIChlcnIgPT0gWl9P Syk7CisKKyAgICAqc291cmNlTGVuIC09IGxlbiArIHN0cmVhbS5hdmFpbF9pbjsKKyAgICBpZiAo ZGVzdCAhPSBidWYpCisgICAgICAgICpkZXN0TGVuID0gc3RyZWFtLnRvdGFsX291dDsKKyAgICBl bHNlIGlmIChzdHJlYW0udG90YWxfb3V0ICYmIGVyciA9PSBaX0JVRl9FUlJPUikKKyAgICAgICAg bGVmdCA9IDE7CisKKyAgICBpbmZsYXRlRW5kKCZzdHJlYW0pOworICAgIHJldHVybiBlcnIgPT0g Wl9TVFJFQU1fRU5EID8gWl9PSyA6CisgICAgICAgICAgIGVyciA9PSBaX05FRURfRElDVCA/IFpf REFUQV9FUlJPUiAgOgorICAgICAgICAgICBlcnIgPT0gWl9CVUZfRVJST1IgJiYgbGVmdCArIHN0 cmVhbS5hdmFpbF9vdXQgPyBaX0RBVEFfRVJST1IgOgorICAgICAgICAgICBlcnI7Cit9CisKIGlu dCBaRVhQT1JUIHVuY29tcHJlc3MgKGRlc3QsIGRlc3RMZW4sIHNvdXJjZSwgc291cmNlTGVuKQog ICAgIEJ5dGVmICpkZXN0OwogICAgIHVMb25nZiAqZGVzdExlbjsKICAgICBjb25zdCBCeXRlZiAq c291cmNlOwogICAgIHVMb25nIHNvdXJjZUxlbjsKIHsKLSAgICB6X3N0cmVhbSBzdHJlYW07Ci0g ICAgaW50IGVycjsKLQotICAgIHN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilzb3VyY2U7Ci0gICAg c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwotICAgIC8qIENoZWNrIGZvciBzb3Vy Y2UgPiA2NEsgb24gMTYtYml0IG1hY2hpbmU6ICovCi0gICAgaWYgKCh1TG9uZylzdHJlYW0uYXZh aWxfaW4gIT0gc291cmNlTGVuKSByZXR1cm4gWl9CVUZfRVJST1I7Ci0KLSAgICBzdHJlYW0ubmV4 dF9vdXQgPSBkZXN0OwotICAgIHN0cmVhbS5hdmFpbF9vdXQgPSAodUludCkqZGVzdExlbjsKLSAg ICBpZiAoKHVMb25nKXN0cmVhbS5hdmFpbF9vdXQgIT0gKmRlc3RMZW4pIHJldHVybiBaX0JVRl9F UlJPUjsKLQotICAgIHN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIHN0cmVhbS56 ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLQotICAgIGVyciA9IGluZmxhdGVJbml0KCZzdHJlYW0pOwot ICAgIGlmIChlcnIgIT0gWl9PSykgcmV0dXJuIGVycjsKLQotICAgIGVyciA9IGluZmxhdGUoJnN0 cmVhbSwgWl9GSU5JU0gpOwotICAgIGlmIChlcnIgIT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAg IGluZmxhdGVFbmQoJnN0cmVhbSk7Ci0gICAgICAgIGlmIChlcnIgPT0gWl9ORUVEX0RJQ1QgfHwg KGVyciA9PSBaX0JVRl9FUlJPUiAmJiBzdHJlYW0uYXZhaWxfaW4gPT0gMCkpCi0gICAgICAgICAg ICByZXR1cm4gWl9EQVRBX0VSUk9SOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgICAq ZGVzdExlbiA9IHN0cmVhbS50b3RhbF9vdXQ7Ci0KLSAgICBlcnIgPSBpbmZsYXRlRW5kKCZzdHJl YW0pOwotICAgIHJldHVybiBlcnI7CisgICAgcmV0dXJuIHVuY29tcHJlc3MyKGRlc3QsIGRlc3RM ZW4sIHNvdXJjZSwgJnNvdXJjZUxlbik7CiB9CmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5 MzliMWNjYyBzeXMvc3JjL2NtZC9ncy96bGliL3pjb25mLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3Mv emxpYi96Y29uZi5oCVN1biBNYXIgMDggMjI6MDA6MjMgMjAyMCArMDEwMAorKysgYi9zeXMvc3Jj L2NtZC9ncy96bGliL3pjb25mLmgJU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0x LDU4ICsxLDE2OSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNv bXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA0IEplYW4tbG91cCBH YWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBKZWFuLWxvdXAgR2FpbGx5LCBNYXJr IEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNv cHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAotLyogQCgjKSAkSWQ6IHpjb25mLmgsdiAx LjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6MzggZ2lsZXMgRXhwICQgKi8KKy8qIEAoIykgJElkJCAq LwogCiAjaWZuZGVmIFpDT05GX0gKICNkZWZpbmUgWkNPTkZfSAogCisKIC8qCiAgKiBJZiB5b3Ug KnJlYWxseSogbmVlZCBhIHVuaXF1ZSBwcmVmaXggZm9yIGFsbCB0eXBlcyBhbmQgbGlicmFyeSBm dW5jdGlvbnMsCiAgKiBjb21waWxlIHdpdGggLURaX1BSRUZJWC4gVGhlICJzdGFuZGFyZCIgemxp YiBzaG91bGQgYmUgY29tcGlsZWQgd2l0aG91dCBpdC4KKyAqIEV2ZW4gYmV0dGVyIHRoYW4gY29t cGlsaW5nIHdpdGggLURaX1BSRUZJWCB3b3VsZCBiZSB0byB1c2UgY29uZmlndXJlIHRvIHNldAor ICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVm aXgiLgogICovCi0jaWZkZWYgWl9QUkVGSVgKKyNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJl IHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAor CisvKiBhbGwgbGlua2VkIHN5bWJvbHMgYW5kIGluaXQgbWFjcm9zICovCisjICBkZWZpbmUgX2Rp c3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQorIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAg ICAgICAgICB6X19sZW5ndGhfY29kZQorIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6 X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9i aXRzCisjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCisj ICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKKyMgIGRlZmluZSBfdHJf c3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCisjICBkZWZpbmUgX3RyX3RhbGx5 ICAgICAgICAgICAgIHpfX3RyX3RhbGx5CisjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAg IHpfYWRsZXIzMgorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29t YmluZQorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0 CisjICBkZWZpbmUgYWRsZXIzMl96ICAgICAgICAgICAgIHpfYWRsZXIzMl96CisjICBpZm5kZWYg Wl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAg ICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBj b21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgorIyAgZGVmaW5l IGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCisjICBkZWZpbmUgY3JjMzJfY29tYmluZSAg ICAgICAgIHpfY3JjMzJfY29tYmluZQorIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6 X2NyYzMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGNyYzMyX3ogICAgICAgICAgICAgICB6X2NyYzMy X3oKKyMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCisjICBkZWZpbmUg ZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCisjICBkZWZpbmUgZGVmbGF0ZUNv cHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKKyMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAg ICAgel9kZWZsYXRlRW5kCisjICBkZWZpbmUgZGVmbGF0ZUdldERpY3Rpb25hcnkgIHpfZGVmbGF0 ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRlSW5pdCAgICAgICAgICAgel9kZWZsYXRl SW5pdAorIyAgZGVmaW5lIGRlZmxhdGVJbml0MiAgICAgICAgICB6X2RlZmxhdGVJbml0MgorIyAg ZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBk ZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KLSMgIGRlZmluZSBkZWZsYXRlICAg ICAgICAgICAgICAgel9kZWZsYXRlCi0jICBkZWZpbmUgZGVmbGF0ZUVuZCAgICAgICAgICAgIHpf ZGVmbGF0ZUVuZAorIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJh bXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZworIyAg ZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQorIyAgZGVmaW5lIGRl ZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNl dEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKKyMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlv bmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIg ICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKKyMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAg el9kZWZsYXRlVHVuZQorIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVf Y29weXJpZ2h0CisjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJs ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpf Z3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAor IyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAg ZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNs ZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAg ICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9n emNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2Vfdwor IyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5l IGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAg ICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9n emVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAg IGRlZmluZSBnemZyZWFkICAgICAgICAgICAgICAgel9nemZyZWFkCisjICAgIGRlZmluZSBnemZ3 cml0ZSAgICAgICAgICAgICAgel9nemZ3cml0ZQorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAg ICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdl dGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVm aW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNl dDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAg ICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3Bl bjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAg ICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAg ICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0 YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmlu ZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAg ICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAg el9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Cisj ICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZp bmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAg ICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAg IHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50 ZgorIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYK KyMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCisjICBkZWZpbmUgaW5m bGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKKyMgIGRlZmluZSBpbmZsYXRlQmFja0Vu ZCAgICAgICAgel9pbmZsYXRlQmFja0VuZAorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdCAgICAg ICB6X2luZmxhdGVCYWNrSW5pdAorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdF8gICAgICB6X2lu ZmxhdGVCYWNrSW5pdF8KKyMgIGRlZmluZSBpbmZsYXRlQ29kZXNVc2VkICAgICAgel9pbmZsYXRl Q29kZXNVc2VkCisjICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5mbGF0ZUNvcHkK KyMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCisjICBkZWZpbmUg aW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBp bmZsYXRlR2V0SGVhZGVyICAgICAgel9pbmZsYXRlR2V0SGVhZGVyCisjICBkZWZpbmUgaW5mbGF0 ZUluaXQgICAgICAgICAgIHpfaW5mbGF0ZUluaXQKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDIgICAg ICAgICAgel9pbmZsYXRlSW5pdDIKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9p bmZsYXRlSW5pdDJfCiAjICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUlu aXRfCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQotIyAgZGVmaW5l IGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKLSMgIGRlZmluZSBkZWZsYXRlSW5p dDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCi0jICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25h cnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAg ICAgel9kZWZsYXRlQ29weQotIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxh dGVSZXNldAotIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMK LSMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKLSMgIGRlZmlu ZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKLSMgIGRlZmluZSBpbmZsYXRl SW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCisjICBkZWZpbmUgaW5mbGF0ZU1hcmsgICAg ICAgICAgIHpfaW5mbGF0ZU1hcmsKKyMgIGRlZmluZSBpbmZsYXRlUHJpbWUgICAgICAgICAgel9p bmZsYXRlUHJpbWUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVz ZXQKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCisjICBk ZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5l IGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUg aW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3lu Y1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50Ci0jICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAg ICAgICAgIHpfaW5mbGF0ZUNvcHkKLSMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9p bmZsYXRlUmVzZXQKLSMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFj awotIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCi0jICBk ZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVz czIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAg ICAgel9jb21wcmVzc0JvdW5kCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5j b21wcmVzcwotIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKLSMgIGRl ZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgotIyAgZGVmaW5lIGdldF9jcmNfdGFi bGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKKyMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAg ICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVZhbGlkYXRlICAgICAgIHpf aW5mbGF0ZVZhbGlkYXRlCisjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0 ZV9jb3B5cmlnaHQKKyMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zh c3QKKyMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCisjICBp Zm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXBy ZXNzCisjICAgIGRlZmluZSB1bmNvbXByZXNzMiAgICAgICAgICAgel91bmNvbXByZXNzMgorIyAg ZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKKyMgIGlmbmRl ZiBaX1NPTE8KKyMgICAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKKyMg ICAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZW5kaWYKKyMgIGRl ZmluZSB6bGliQ29tcGlsZUZsYWdzICAgICAgel96bGliQ29tcGlsZUZsYWdzCisjICBkZWZpbmUg emxpYlZlcnNpb24gICAgICAgICAgIHpfemxpYlZlcnNpb24KIAorLyogYWxsIHpsaWIgdHlwZWRl ZnMgaW4gemxpYi5oIGFuZCB6Y29uZi5oICovCiAjICBkZWZpbmUgQnl0ZSAgICAgICAgICAgICAg ICAgIHpfQnl0ZQorIyAgZGVmaW5lIEJ5dGVmICAgICAgICAgICAgICAgICB6X0J5dGVmCisjICBk ZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYworIyAgZGVmaW5lIGNoYXJm ICAgICAgICAgICAgICAgICB6X2NoYXJmCisjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAg IHpfZnJlZV9mdW5jCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnekZpbGUgICAgICAg ICAgICAgICAgel9nekZpbGUKKyMgIGVuZGlmCisjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAg ICAgIHpfZ3pfaGVhZGVyCisjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVh ZGVycAorIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKKyMgIGRlZmlu ZSBpbnRmICAgICAgICAgICAgICAgICAgel9pbnRmCisjICBkZWZpbmUgb3V0X2Z1bmMgICAgICAg ICAgICAgIHpfb3V0X2Z1bmMKICMgIGRlZmluZSB1SW50ICAgICAgICAgICAgICAgICAgel91SW50 CisjICBkZWZpbmUgdUludGYgICAgICAgICAgICAgICAgIHpfdUludGYKICMgIGRlZmluZSB1TG9u ZyAgICAgICAgICAgICAgICAgel91TG9uZwotIyAgZGVmaW5lIEJ5dGVmICAgICAgICAgICAgICAg ICB6X0J5dGVmCi0jICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKLSMgIGRl ZmluZSBpbnRmICAgICAgICAgICAgICAgICAgel9pbnRmCi0jICBkZWZpbmUgdUludGYgICAgICAg ICAgICAgICAgIHpfdUludGYKICMgIGRlZmluZSB1TG9uZ2YgICAgICAgICAgICAgICAgel91TG9u Z2YKKyMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcAorIyAgZGVmaW5lIHZv aWRwYyAgICAgICAgICAgICAgICB6X3ZvaWRwYwogIyAgZGVmaW5lIHZvaWRwZiAgICAgICAgICAg ICAgICB6X3ZvaWRwZgotIyAgZGVmaW5lIHZvaWRwICAgICAgICAgICAgICAgICB6X3ZvaWRwCisK Ky8qIGFsbCB6bGliIHN0cnVjdHMgaW4gemxpYi5oIGFuZCB6Y29uZi5oICovCisjICBkZWZpbmUg Z3pfaGVhZGVyX3MgICAgICAgICAgIHpfZ3pfaGVhZGVyX3MKKyMgIGRlZmluZSBpbnRlcm5hbF9z dGF0ZSAgICAgICAgel9pbnRlcm5hbF9zdGF0ZQorCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19N U0RPU19fKSAmJiAhZGVmaW5lZChNU0RPUykKQEAgLTY0LDggKzE3NSwxMCBAQAogI2lmIGRlZmlu ZWQoX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJTkRPV1MpCiAjICBkZWZpbmUgV0lORE9XUwogI2Vu ZGlmCi0jaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykpICYmICFkZWZp bmVkKFdJTjMyKQotIyAgZGVmaW5lIFdJTjMyCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmlu ZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChfX1dJTjMyX18pCisjICBpZm5kZWYgV0lOMzIKKyMg ICAgZGVmaW5lIFdJTjMyCisjICBlbmRpZgogI2VuZGlmCiAjaWYgKGRlZmluZWQoTVNET1MpIHx8 IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5lZChXSU4zMikKICMg IGlmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykgJiYgIWRlZmluZWQo X18zODZfXykKQEAgLTExOSw5ICsyMzIsMjUgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotLyogU29t ZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KLSNpZiBk ZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRl ZmluZWQoX19TQ19fKQotIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKKyNpZiBkZWZpbmVkKFpMSUJf Q09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vs c2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKworI2lmZGVmIFpfU09MTworICAgdHlwZWRl ZiB1bnNpZ25lZCBsb25nIHpfc2l6ZV90OworI2Vsc2UKKyMgIGRlZmluZSB6X2xvbmdsb25nIGxv bmcgbG9uZworIyAgaWYgZGVmaW5lZChOT19TSVpFX1QpCisgICAgIHR5cGVkZWYgdW5zaWduZWQg Tk9fU0laRV9UIHpfc2l6ZV90OworIyAgZWxpZiBkZWZpbmVkKFNUREMpCisjICAgIGluY2x1ZGUg PHN0ZGRlZi5oPgorICAgICB0eXBlZGVmIHNpemVfdCB6X3NpemVfdDsKKyMgIGVsc2UKKyAgICAg dHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfc2l6ZV90OworIyAgZW5kaWYKKyMgIHVuZGVmIHpfbG9u Z2xvbmcKICNlbmRpZgogCiAvKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRl SW5pdDIgKi8KQEAgLTE1MSw3ICsyODAsNyBAQAogIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJh bGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCiAKICAgIFRo ZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2lu ZG93Qml0cwotIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkg cGx1cyBhIGZldyBraWxvYnl0ZXMKKyB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRl ZmF1bHQgdmFsdWUpIHBsdXMgYWJvdXQgNyBraWxvYnl0ZXMKICBmb3Igc21hbGwgb2JqZWN0cy4K ICovCiAKQEAgLTE2NSw2ICsyOTQsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBa X0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQo U1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdz KSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgor I2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVk IG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVk aXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVk IG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBA IC0yNzgsNDkgKzQxNSwxMjEgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5k aWYKIAotI2lmIDAgICAgICAgICAgIC8qIEhBVkVfVU5JU1REX0ggLS0gdGhpcyBsaW5lIGlzIHVw ZGF0ZWQgYnkgLi9jb25maWd1cmUgKi8KLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Ig b2ZmX3QgKi8KLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZf dCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgIC8qIGZvciBvZmZf dCAqLworI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChT VERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZm ZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4 ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNI UlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQK ICMgIGVuZGlmCi0jICBkZWZpbmUgel9vZmZfdCBvZmZfdAogI2VuZGlmCi0jaWZuZGVmIFNFRUtf U0VUCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9VTklT VERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZp bmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyog bWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9T VERBUkdfSAorI2VuZGlmCisKKyNpZmRlZiBTVERDCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGlu Y2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRp ZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlm bmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xp c3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09M TworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAg ZW5kaWYKKyNlbmRpZgorCisvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIj ZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZAorICogIiNkZWZpbmUgX0xBUkdFRklMRTY0 X1NPVVJDRSAxIiBhcyByZXF1ZXN0aW5nIDY0LWJpdCBvcGVyYXRpb25zLCAoZXZlbgorICogdGhv dWdoIHRoZSBmb3JtZXIgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgTEZTIGRvY3VtZW50KSwgYnV0 IGNvbnNpZGVyaW5nCisgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIj ZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKKyAqIGVxdWl2YWxlbnRseSByZXF1ZXN0 aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCisgKi8KKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9T T1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorIyAgdW5kZWYgX0xBUkdF RklMRTY0X1NPVVJDRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVm aW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYK KyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5l ZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAv KiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYg Vk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAg ICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90 CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJH RUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgor CisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisj ICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJ VFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAg ZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVm aW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBm cm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAg ICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19F TkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0 IiAqLwogI2VuZGlmCisKICNpZm5kZWYgel9vZmZfdAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwog I2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYK LSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50Zgot IyAgaWZkZWYgRkFSCi0jICAgIHVuZGVmIEZBUgorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVm aW5lZChaX0xBUkdFNjQpCisjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKKyNlbHNlCisjICBp ZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09M TykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6 X29mZjY0X3Qgel9vZmZfdAogIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMg bm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwogI2lmIGRl ZmluZWQoX19NVlNfXykKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCi0jICAg cHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRl RW5kLCJERUVORCIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKLSMgICBw cmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5p dDJfLCJJTklOMiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCi0jICAgcHJh Z21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU2V0RGlj dGlvbmFyeSwiSU5TRURJIikKLSMgICBwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikK LSMgICBwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCi0jICAgcHJhZ21hIG1hcChp bmZsYXRlX2Zhc3QsIklORkEiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklO Q09QWSIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCisgICNwcmFnbWEgbWFw KGRlZmxhdGVJbml0Ml8sIkRFSU4yIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVFTkQi KQorICAjcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKKyAgI3ByYWdtYSBtYXAoaW5m bGF0ZUluaXRfLCJJTklOIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5JTjIiKQor ICAjcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVT eW5jLCJJTlNZIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnksIklOU0VESSIp CisgICNwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKKyAgI3ByYWdtYSBtYXAoaW5m bGF0ZV90YWJsZSwiSU5UQUJMIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikK KyAgI3ByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIpCiAjZW5kaWYKIAogI2Vu ZGlmIC8qIFpDT05GX0ggKi8KZGlmZiAtciA5YTMxNzcyMzE3OTAgLXIgZTJkMTkzOWIxY2NjIHN5 cy9zcmMvY21kL2dzL3psaWIvemNvbmYuaW4uaAotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL3pj b25mLmluLmgJU3VuIE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyAvZGV2L251bGwJVGh1 IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCkBAIC0xLDMyNiArMCwwIEBACi0vKiB6Y29uZi5o IC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29w eXJpZ2h0IChDKSAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseS4KLSAqIEZvciBjb25kaXRpb25z IG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgK LSAqLwotCi0vKiBAKCMpICRJZDogemNvbmYuaW4uaCx2IDEuMS4xLjEgMjAwNS8wNC8yNCAyMToz OTozNyBnaWxlcyBFeHAgJCAqLwotCi0jaWZuZGVmIFpDT05GX0gKLSNkZWZpbmUgWkNPTkZfSAot Ci0vKgotICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlw ZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAotICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRo ZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCi0gKi8KLSNp ZmRlZiBaX1BSRUZJWAotIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJ bml0XwotIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKLSMgIGRlZmlu ZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCi0jICBkZWZpbmUgaW5mbGF0ZUlu aXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAg ICAgIHpfaW5mbGF0ZQotIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVF bmQKLSMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCi0jICBk ZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRl ZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQotIyAgZGVmaW5lIGRlZmxh dGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAotIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMg ICAgICAgICB6X2RlZmxhdGVQYXJhbXMKLSMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAg el9kZWZsYXRlQm91bmQKLSMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRl UHJpbWUKLSMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCi0j ICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKLSMg IGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwotIyAgZGVmaW5lIGlu ZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKLSMgIGRlZmluZSBpbmZsYXRl Q29weSAgICAgICAgICAgel9pbmZsYXRlQ29weQotIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAg ICAgICB6X2luZmxhdGVSZXNldAotIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2lu ZmxhdGVCYWNrCi0jICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tF bmQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5l IGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91 bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAg ICAgel91bmNvbXByZXNzCi0jICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIz MgotIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCi0jICBkZWZpbmUgZ2V0 X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIHpFcnJvciAgICAg ICAgICAgICAgICB6X3pFcnJvcgotCi0jICBkZWZpbmUgQnl0ZSAgICAgICAgICAgICAgICAgIHpf Qnl0ZQotIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAgICB6X3VJbnQKLSMgIGRlZmluZSB1 TG9uZyAgICAgICAgICAgICAgICAgel91TG9uZwotIyAgZGVmaW5lIEJ5dGVmICAgICAgICAgICAg ICAgICB6X0J5dGVmCi0jICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKLSMg IGRlZmluZSBpbnRmICAgICAgICAgICAgICAgICAgel9pbnRmCi0jICBkZWZpbmUgdUludGYgICAg ICAgICAgICAgICAgIHpfdUludGYKLSMgIGRlZmluZSB1TG9uZ2YgICAgICAgICAgICAgICAgel91 TG9uZ2YKLSMgIGRlZmluZSB2b2lkcGYgICAgICAgICAgICAgICAgel92b2lkcGYKLSMgIGRlZmlu ZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9f TVNET1NfXykgJiYgIWRlZmluZWQoTVNET1MpCi0jICBkZWZpbmUgTVNET1MKLSNlbmRpZgotI2lm IChkZWZpbmVkKE9TXzIpIHx8IGRlZmluZWQoX19PUzJfXykpICYmICFkZWZpbmVkKE9TMikKLSMg IGRlZmluZSBPUzIKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJ TkRPV1MpCi0jICBkZWZpbmUgV0lORE9XUwotI2VuZGlmCi0jaWYgKGRlZmluZWQoX1dJTjMyKSB8 fCBkZWZpbmVkKF9fV0lOMzJfXykpICYmICFkZWZpbmVkKFdJTjMyKQotIyAgZGVmaW5lIFdJTjMy Ci0jZW5kaWYKLSNpZiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQo V0lORE9XUykpICYmICFkZWZpbmVkKFdJTjMyKQotIyAgaWYgIWRlZmluZWQoX19HTlVDX18pICYm ICFkZWZpbmVkKF9fRkxBVF9fKSAmJiAhZGVmaW5lZChfXzM4Nl9fKQotIyAgICBpZm5kZWYgU1lT MTZCSVQKLSMgICAgICBkZWZpbmUgU1lTMTZCSVQKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5k aWYKLQotLyoKLSAqIENvbXBpbGUgd2l0aCAtRE1BWFNFR182NEsgaWYgdGhlIGFsbG9jIGZ1bmN0 aW9uIGNhbm5vdCBhbGxvY2F0ZSBtb3JlCi0gKiB0aGFuIDY0ayBieXRlcyBhdCBhIHRpbWUgKG5l ZWRlZCBvbiBzeXN0ZW1zIHdpdGggMTYtYml0IGludCkuCi0gKi8KLSNpZmRlZiBTWVMxNkJJVAot IyAgZGVmaW5lIE1BWFNFR182NEsKLSNlbmRpZgotI2lmZGVmIE1TRE9TCi0jICBkZWZpbmUgVU5B TElHTkVEX09LCi0jZW5kaWYKLQotI2lmZGVmIF9fU1REQ19WRVJTSU9OX18KLSMgIGlmbmRlZiBT VERDCi0jICAgIGRlZmluZSBTVERDCi0jICBlbmRpZgotIyAgaWYgX19TVERDX1ZFUlNJT05fXyA+ PSAxOTk5MDFMCi0jICAgIGlmbmRlZiBTVERDOTkKLSMgICAgICBkZWZpbmUgU1REQzk5Ci0jICAg IGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQo X19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpKQotIyAgZGVmaW5lIFNUREMKLSNlbmRp ZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9f Qk9STEFORENfXykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykg JiYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikp Ci0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQo T1MyKSB8fCBkZWZpbmVkKF9fSE9TX0FJWF9fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLQot I2lmIGRlZmluZWQoX19PUzQwMF9fKSAmJiAhZGVmaW5lZChTVERDKSAgICAvKiBpU2VyaWVzIChm b3JtZXJseSBBUy80MDApLiAqLwotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotCi0jaWZuZGVmIFNU REMKLSMgIGlmbmRlZiBjb25zdCAvKiBjYW5ub3QgdXNlICFkZWZpbmVkKFNUREMpICYmICFkZWZp bmVkKGNvbnN0KSBvbiBNYWMgKi8KLSMgICAgZGVmaW5lIGNvbnN0ICAgICAgIC8qIG5vdGU6IG5l ZWQgYSBtb3JlIGdlbnRsZSBzb2x1dGlvbiBoZXJlICovCi0jICBlbmRpZgotI2VuZGlmCi0KLS8q IFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCi0j aWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0Mp fHxkZWZpbmVkKF9fU0NfXykKLSMgIGRlZmluZSBOT19EVU1NWV9ERUNMCi0jZW5kaWYKLQotLyog TWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovCi0jaWZuZGVmIE1B WF9NRU1fTEVWRUwKLSMgIGlmZGVmIE1BWFNFR182NEsKLSMgICAgZGVmaW5lIE1BWF9NRU1fTEVW RUwgOAotIyAgZWxzZQotIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA5Ci0jICBlbmRpZgotI2Vu ZGlmCi0KLS8qIE1heGltdW0gdmFsdWUgZm9yIHdpbmRvd0JpdHMgaW4gZGVmbGF0ZUluaXQyIGFu ZCBpbmZsYXRlSW5pdDIuCi0gKiBXQVJOSU5HOiByZWR1Y2luZyBNQVhfV0JJVFMgbWFrZXMgbWlu aWd6aXAgdW5hYmxlIHRvIGV4dHJhY3QgLmd6IGZpbGVzCi0gKiBjcmVhdGVkIGJ5IGd6aXAuIChG aWxlcyBjcmVhdGVkIGJ5IG1pbmlnemlwIGNhbiBzdGlsbCBiZSBleHRyYWN0ZWQgYnkKLSAqIGd6 aXAuKQotICovCi0jaWZuZGVmIE1BWF9XQklUUwotIyAgZGVmaW5lIE1BWF9XQklUUyAgIDE1IC8q IDMySyBMWjc3IHdpbmRvdyAqLwotI2VuZGlmCi0KLS8qIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRz IGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgotICAgICAgICAgICAgKDEgPDwgKHdpbmRvd0Jp dHMrMikpICsgICgxIDw8IChtZW1MZXZlbCs5KSkKLSB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dC aXRzPTE1ICArICAxMjhLIGZvciBtZW1MZXZlbCA9IDggIChkZWZhdWx0IHZhbHVlcykKLSBwbHVz IGEgZmV3IGtpbG9ieXRlcyBmb3Igc21hbGwgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3 YW50IHRvIHJlZHVjZQotIHRoZSBkZWZhdWx0IG1lbW9yeSByZXF1aXJlbWVudHMgZnJvbSAyNTZL IHRvIDEyOEssIGNvbXBpbGUgd2l0aAotICAgICBtYWtlIENGTEFHUz0iLU8gLURNQVhfV0JJVFM9 MTQgLURNQVhfTUVNX0xFVkVMPTciCi0gT2YgY291cnNlIHRoaXMgd2lsbCBnZW5lcmFsbHkgZGVn cmFkZSBjb21wcmVzc2lvbiAodGhlcmUncyBubyBmcmVlIGx1bmNoKS4KLQotICAgVGhlIG1lbW9y eSByZXF1aXJlbWVudHMgZm9yIGluZmxhdGUgYXJlIChpbiBieXRlcykgMSA8PCB3aW5kb3dCaXRz Ci0gdGhhdCBpcywgMzJLIGZvciB3aW5kb3dCaXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGEg ZmV3IGtpbG9ieXRlcwotIGZvciBzbWFsbCBvYmplY3RzLgotKi8KLQotICAgICAgICAgICAgICAg ICAgICAgICAgLyogVHlwZSBkZWNsYXJhdGlvbnMgKi8KLQotI2lmbmRlZiBPRiAvKiBmdW5jdGlv biBwcm90b3R5cGVzICovCi0jICBpZmRlZiBTVERDCi0jICAgIGRlZmluZSBPRihhcmdzKSAgYXJn cwotIyAgZWxzZQotIyAgICBkZWZpbmUgT0YoYXJncykgICgpCi0jICBlbmRpZgotI2VuZGlmCi0K LS8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9y IE1TRE9TIG1peGVkCi0gKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVs IHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgotICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0 aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCi0gKiB0byBkZWZp bmUgTk9fTUVNQ1BZIGluIHp1dGlsLmguICBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgbWl4ZWQgbW9k ZWwsCi0gKiBqdXN0IGRlZmluZSBGQVIgdG8gYmUgZW1wdHkuCi0gKi8KLSNpZmRlZiBTWVMxNkJJ VAotIyAgaWYgZGVmaW5lZChNX0k4NlNNKSB8fCBkZWZpbmVkKE1fSTg2TU0pCi0gICAgIC8qIE1T QyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQotIyAg ICBpZmRlZiBfTVNDX1ZFUgotIyAgICAgIGRlZmluZSBGQVIgX2ZhcgotIyAgICBlbHNlCi0jICAg ICAgZGVmaW5lIEZBUiBmYXIKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZChf X1NNQUxMX18pIHx8IGRlZmluZWQoX19NRURJVU1fXykpCi0gICAgIC8qIFR1cmJvIEMgc21hbGwg b3IgbWVkaXVtIG1vZGVsICovCi0jICAgIGRlZmluZSBTTUFMTF9NRURJVU0KLSMgICAgaWZkZWYg X19CT1JMQU5EQ19fCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0jICAgIGVsc2UKLSMgICAgICBk ZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5l ZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKQotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcg emxpYiBhcyBhIERMTCwgZGVmaW5lIFpMSUJfRExMLgotICAgICogVGhpcyBpcyBub3QgbWFuZGF0 b3J5LCBidXQgaXQgb2ZmZXJzIGEgbGl0dGxlIHBlcmZvcm1hbmNlIGluY3JlYXNlLgotICAgICov Ci0jICBpZmRlZiBaTElCX0RMTAotIyAgICBpZiBkZWZpbmVkKFdJTjMyKSAmJiAoIWRlZmluZWQo X19CT1JMQU5EQ19fKSB8fCAoX19CT1JMQU5EQ19fID49IDB4NTAwKSkKLSMgICAgICBpZmRlZiBa TElCX0lOVEVSTkFMCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhk bGxleHBvcnQpCi0jICAgICAgZWxzZQotIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9f ZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZiAg LyogWkxJQl9ETEwgKi8KLSAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgd2l0aCB0aGUg V0lOQVBJL1dJTkFQSVYgY2FsbGluZyBjb252ZW50aW9uLAotICAgICogZGVmaW5lIFpMSUJfV0lO QVBJLgotICAgICogQ2F1dGlvbjogdGhlIHN0YW5kYXJkIFpMSUIxLkRMTCBpcyBOT1QgY29tcGls ZWQgdXNpbmcgWkxJQl9XSU5BUEkuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfV0lOQVBJCi0jICAg IGlmZGVmIEZBUgotIyAgICAgIHVuZGVmIEZBUgotIyAgICBlbmRpZgotIyAgICBpbmNsdWRlIDx3 aW5kb3dzLmg+Ci0gICAgIC8qIE5vIG5lZWQgZm9yIF9leHBvcnQsIHVzZSBaTElCLkRFRiBpbnN0 ZWFkLiAqLwotICAgICAvKiBGb3IgY29tcGxldGUgV2luZG93cyBjb21wYXRpYmlsaXR5LCB1c2Ug V0lOQVBJLCBub3QgX19zdGRjYWxsLiAqLwotIyAgICBkZWZpbmUgWkVYUE9SVCBXSU5BUEkKLSMg ICAgaWZkZWYgV0lOMzIKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIFdJTkFQSVYKLSMgICAgZWxz ZQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgRkFSIENERUNMCi0jICAgIGVuZGlmCi0jICBlbmRp ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfX0JFT1NfXykKLSMgIGlmZGVmIFpMSUJfRExMCi0j ICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNw ZWMoZGxsZXhwb3J0KQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxleHBv cnQpCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsaW1w b3J0KQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAg IGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgWkVYVEVSTgotIyAgZGVmaW5lIFpF WFRFUk4gZXh0ZXJuCi0jZW5kaWYKLSNpZm5kZWYgWkVYUE9SVAotIyAgZGVmaW5lIFpFWFBPUlQK LSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUVkEKLSMgIGRlZmluZSBaRVhQT1JUVkEKLSNlbmRpZgot Ci0jaWZuZGVmIEZBUgotIyAgZGVmaW5lIEZBUgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX01B Q1RZUEVTX18pCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIEJ5dGU7ICAvKiA4IGJpdHMgKi8KLSNl bmRpZgotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICB1SW50OyAgLyogMTYgYml0cyBvciBtb3JlICov Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVMb25nOyAvKiAzMiBiaXRzIG9yIG1vcmUgKi8KLQot I2lmZGVmIFNNQUxMX01FRElVTQotICAgLyogQm9ybGFuZCBDL0MrKyBhbmQgc29tZSBvbGQgTVND IHZlcnNpb25zIGlnbm9yZSBGQVIgaW5zaWRlIHR5cGVkZWYgKi8KLSMgIGRlZmluZSBCeXRlZiBC eXRlIEZBUgotI2Vsc2UKLSAgIHR5cGVkZWYgQnl0ZSAgRkFSIEJ5dGVmOwotI2VuZGlmCi10eXBl ZGVmIGNoYXIgIEZBUiBjaGFyZjsKLXR5cGVkZWYgaW50ICAgRkFSIGludGY7Ci10eXBlZGVmIHVJ bnQgIEZBUiB1SW50ZjsKLXR5cGVkZWYgdUxvbmcgRkFSIHVMb25nZjsKLQotI2lmZGVmIFNUREMK LSAgIHR5cGVkZWYgdm9pZCBjb25zdCAqdm9pZHBjOwotICAgdHlwZWRlZiB2b2lkIEZBUiAgICp2 b2lkcGY7Ci0gICB0eXBlZGVmIHZvaWQgICAgICAgKnZvaWRwOwotI2Vsc2UKLSAgIHR5cGVkZWYg Qnl0ZSBjb25zdCAqdm9pZHBjOwotICAgdHlwZWRlZiBCeXRlIEZBUiAgICp2b2lkcGY7Ci0gICB0 eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwotI2VuZGlmCi0KLSNpZiAwICAgICAgICAgICAvKiBI QVZFX1VOSVNURF9IIC0tIHRoaXMgbGluZSBpcyB1cGRhdGVkIGJ5IC4vY29uZmlndXJlICovCi0j ICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCi0jICBpbmNsdWRlIDx1bmlz dGQuaD4gICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBp bmNsdWRlIDx1bml4aW8uaD4gICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBkZWZpbmUg el9vZmZfdCBvZmZfdAotI2VuZGlmCi0jaWZuZGVmIFNFRUtfU0VUCi0jICBkZWZpbmUgU0VFS19T RVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KLSMg IGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3Np dGlvbi4gICovCi0jICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUg cG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwotI2VuZGlmCi0jaWZuZGVmIHpfb2ZmX3QK LSMgIGRlZmluZSB6X29mZl90IGxvbmcKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18p Ci0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykK LSMgIGRlZmluZSBOT192c25wcmludGYKLSMgIGlmZGVmIEZBUgotIyAgICB1bmRlZiBGQVIKLSMg IGVuZGlmCi0jZW5kaWYKLQotLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFs IG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICAg cHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUlu aXQyXywiREVJTjIiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVFTkQiKQotIyAgIHBy YWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5p dF8sIklOSU4iKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5JTjIiKQotIyAgIHBy YWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVN5bmMs IklOU1kiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnksIklOU0VESSIpCi0j ICAgcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZs YXRlX3RhYmxlLCJJTlRBQkwiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikK LSMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQotI2VuZGlmCi0KLSNl bmRpZiAvKiBaQ09ORl9IICovCmRpZmYgLXIgOWEzMTc3MjMxNzkwIC1yIGUyZDE5MzliMWNjYyBz eXMvc3JjL2NtZC9ncy96bGliL3psaWIuMy5tYW4KLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi96 bGliLjMubWFuCVN1biBNYXIgMDggMjI6MDA6MjMgMjAyMCArMDEwMAorKysgYi9zeXMvc3JjL2Nt ZC9ncy96bGliL3psaWIuMy5tYW4JU3VuIE1hciAwOCAxOTo1ODowOCAyMDIwIC0wNDAwCkBAIC0x LDQgKzEsNCBAQAotLlRIIFpMSUIgMyAiMyBPY3RvYmVyIDIwMDQiCisuVEggWkxJQiAzICIxNSBK YW4gMjAxNyIKIC5TSCBOQU1FCiB6bGliIFwtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGli cmFyeQogLlNIIFNZTk9QU0lTCkBAIC05LDE1ICs5LDE1IEBACiBUaGUKIC5JIHpsaWIKIGxpYnJh cnkgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgotVGhlIGNv ZGUgaXMgdGhyZWFkIHNhZmUuCitUaGUgY29kZSBpcyB0aHJlYWQgc2FmZSwgYXNzdW1pbmcgdGhh dCB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMKK3VzZWQgYXJlIHRocmVhZCBzYWZlLCBz dWNoIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgogSXQgcHJvdmlkZXMgaW4tbWVtb3J5 IGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywKIGluY2x1ZGluZyBpbnRl Z3JpdHkgY2hlY2tzIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4KIFRoaXMgdmVyc2lvbiBvZiB0 aGUgbGlicmFyeSBzdXBwb3J0cyBvbmx5IG9uZSBjb21wcmVzc2lvbiBtZXRob2QgKGRlZmxhdGlv bikKLWJ1dCBvdGhlciBhbGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIKLWFuZCB3aWxsIGhh dmUgdGhlIHNhbWUgc3RyZWFtIGludGVyZmFjZS4KK2J1dCBvdGhlciBhbGdvcml0aG1zIG1heSBi ZSBhZGRlZCBsYXRlcgord2l0aCB0aGUgc2FtZSBzdHJlYW0gaW50ZXJmYWNlLgogLkxQCiBDb21w cmVzc2lvbiBjYW4gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwIGlmIHRoZSBidWZmZXJzIGFyZSBs YXJnZSBlbm91Z2gKLShmb3IgZXhhbXBsZSBpZiBhbiBpbnB1dCBmaWxlIGlzIG1tYXAnZWQpLAog b3IgY2FuIGJlIGRvbmUgYnkgcmVwZWF0ZWQgY2FsbHMgb2YgdGhlIGNvbXByZXNzaW9uIGZ1bmN0 aW9uLgogSW4gdGhlIGxhdHRlciBjYXNlLAogdGhlIGFwcGxpY2F0aW9uIG11c3QgcHJvdmlkZSBt b3JlIGlucHV0IGFuZC9vciBjb25zdW1lIHRoZSBvdXRwdXQKQEAgLTMwLDkxICszMCw2MyBAQAog LkxQCiBUaGUgbGlicmFyeSBkb2VzIG5vdCBpbnN0YWxsIGFueSBzaWduYWwgaGFuZGxlci4KIFRo ZSBkZWNvZGVyIGNoZWNrcyB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwK LXNvIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlciBjcmFzaCBldmVuIGluIGNhc2Ugb2YgY29ycnVw dGVkIGlucHV0Lgorc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyIGNyYXNoIGV2ZW4gaW4gdGhl IGNhc2Ugb2YgY29ycnVwdGVkIGlucHV0LgogLkxQCiBBbGwgZnVuY3Rpb25zIG9mIHRoZSBjb21w cmVzc2lvbiBsaWJyYXJ5IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlCiAuSVIgemxpYi5oIC4K IFRoZSBkaXN0cmlidXRpb24gc291cmNlIGluY2x1ZGVzIGV4YW1wbGVzIG9mIHVzZSBvZiB0aGUg bGlicmFyeQogaW4gdGhlIGZpbGVzCi0uSSBleGFtcGxlLmMKKy5JIHRlc3QvZXhhbXBsZS5jCiBh bmQKLS5JUiBtaW5pZ3ppcC5jIC4KKy5JUiB0ZXN0L21pbmlnemlwLmMsCithcyB3ZWxsIGFzIG90 aGVyIGV4YW1wbGVzIGluIHRoZQorLklSIGV4YW1wbGVzLworZGlyZWN0b3J5LgogLkxQCiBDaGFu Z2VzIHRvIHRoaXMgdmVyc2lvbiBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZQogLkkgQ2hhbmdl TG9nCi10aGF0IGFjY29tcGFuaWVzIHRoZSBzb3VyY2UsCi1hbmQgYXJlIGNvbmNlcm5lZCBwcmlt YXJpbHkgd2l0aCBidWcgZml4ZXMgYW5kIHBvcnRhYmlsaXR5IGVuaGFuY2VtZW50cy4KK3RoYXQg YWNjb21wYW5pZXMgdGhlIHNvdXJjZS4KIC5MUAotQSBKYXZhIGltcGxlbWVudGF0aW9uIG9mCiAu SSB6bGliCi1pcyBhdmFpbGFibGUgaW4gdGhlIEphdmEgRGV2ZWxvcG1lbnQgS2l0IDEuMToKLS5J UAotaHR0cDovL3d3dy5qYXZhc29mdC5jb20vcHJvZHVjdHMvSkRLLzEuMS9kb2NzL2FwaS9QYWNr YWdlLWphdmEudXRpbC56aXAuaHRtbAoraXMgYnVpbHQgaW4gdG8gbWFueSBsYW5ndWFnZXMgYW5k IG9wZXJhdGluZyBzeXN0ZW1zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCitKYXZhLCBQ eXRob24sIC5ORVQsIFBIUCwgUGVybCwgUnVieSwgU3dpZnQsIGFuZCBHby4KIC5MUAotQSBQZXJs IGludGVyZmFjZSB0bwotLklSIHpsaWIgLAotd3JpdHRlbiBieSBQYXVsIE1hcnF1ZXNzIChwbXFz QGNwYW4ub3JnKSwKLWlzIGF2YWlsYWJsZSBhdCBDUEFOIChDb21wcmVoZW5zaXZlIFBlcmwgQXJj aGl2ZSBOZXR3b3JrKSBzaXRlcywKLWluY2x1ZGluZzoKLS5JUAotaHR0cDovL3d3dy5jcGFuLm9y Zy9tb2R1bGVzL2J5LW1vZHVsZS9Db21wcmVzcy8KLS5MUAotQSBQeXRob24gaW50ZXJmYWNlIHRv Ci0uSVIgemxpYiAsCi13cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgKGFta0BtYWduZXQuY29tKSwK LWlzIGF2YWlsYWJsZSBpbiBQeXRob24gMS41IGFuZCBsYXRlciB2ZXJzaW9uczoKLS5JUAotaHR0 cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbAotLkxQCi1BCi0uSSB6 bGliCi1iaW5kaW5nIGZvcgotLklSIHRjbCAoMSksCi13cml0dGVuIGJ5IEFuZHJlYXMgS3Vwcmll cyAoYS5rdXByaWVzQHdlc3RlbmQuY29tKSwKLWlzIGF2YWlsbGFibGUgYXQ6Ci0uSVAKLWh0dHA6 Ly93d3cud2VzdGVuZC5jb20vfmt1cHJpZXMvZG9jL3RyZi9tYW4vbWFuLmh0bWwKLS5MUAotQW4g ZXhwZXJpbWVudGFsIHBhY2thZ2UgdG8gcmVhZCBhbmQgd3JpdGUgZmlsZXMgaW4gLnppcCBmb3Jt YXQsCitBbiBleHBlcmltZW50YWwgcGFja2FnZSB0byByZWFkIGFuZCB3cml0ZSBmaWxlcyBpbiB0 aGUgLnppcCBmb3JtYXQsCiB3cml0dGVuIG9uIHRvcCBvZgogLkkgemxpYgogYnkgR2lsbGVzIFZv bGxhbnQgKGluZm9Ad2luaW1hZ2UuY29tKSwKIGlzIGF2YWlsYWJsZSBhdDoKIC5JUAotaHR0cDov L3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC91bnppcC5odG1sCitodHRwOi8vd3d3LndpbmltYWdl LmNvbS96TGliRGxsL21pbml6aXAuaHRtbAogYW5kIGFsc28gaW4gdGhlCiAuSSBjb250cmliL21p bml6aXAKIGRpcmVjdG9yeSBvZiB0aGUgbWFpbgogLkkgemxpYgotd2ViIHNpdGUuCitzb3VyY2Ug ZGlzdHJpYnV0aW9uLgogLlNIICJTRUUgQUxTTyIKIFRoZQogLkkgemxpYgotd2ViIHNpdGUgY2Fu IGJlIGZvdW5kIGF0IGVpdGhlciBvZiB0aGVzZSBsb2NhdGlvbnM6Cit3ZWIgc2l0ZSBjYW4gYmUg Zm91bmQgYXQ6CiAuSVAKLWh0dHA6Ly93d3cuemxpYi5vcmcKLS5icgotaHR0cDovL3d3dy5nemlw Lm9yZy96bGliLworaHR0cDovL3psaWIubmV0LwogLkxQCi1UaGUgZGF0YSBmb3JtYXQgdXNlZCBi eSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkMKK1RoZSBkYXRhIGZvcm1hdCB1 c2VkIGJ5IHRoZQorLkkgemxpYgorbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDCiAoUmVxdWVz dCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXM6CiAuSVAKLWh0dHA6Ly93 d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0IChjb25jZXJuaW5nIHpsaWIgZm9ybWF0KQoraHR0 cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoZm9yIHRoZSB6bGliIGhlYWRlciBhbmQg dHJhaWxlciBmb3JtYXQpCiAuYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0 IChjb25jZXJuaW5nIGRlZmxhdGUgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwv cmZjMTk1MSAoZm9yIHRoZSBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQpCiAuYnIKLWh0 dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTIudHh0IChjb25jZXJuaW5nIGd6aXAgZm9ybWF0 KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MiAoZm9yIHRoZSBnemlwIGhlYWRl ciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuTFAKLVRoZXNlIGRvY3VtZW50cyBhcmUgYWxzbyBhdmFp bGFibGUgaW4gb3RoZXIgZm9ybWF0cyBmcm9tOgotLklQCi1mdHA6Ly9mdHAudXUubmV0L2dyYXBo aWNzL3BuZy9kb2N1bWVudHMvemxpYi96ZG9jLWluZGV4Lmh0bWwKLS5MUAotTWFyayBOZWxzb24g KG1hcmtuQGllZWUub3JnKSB3cm90ZSBhbiBhcnRpY2xlIGFib3V0CitNYXJrIE5lbHNvbiB3cm90 ZSBhbiBhcnRpY2xlIGFib3V0CiAuSSB6bGliCiBmb3IgdGhlIEphbi4gMTk5NyBpc3N1ZSBvZiAg RHIuIERvYmIncyBKb3VybmFsOwogYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBh dDoKIC5JUAotaHR0cDovL2RvZ21hLm5ldC9tYXJrbi9hcnRpY2xlcy96bGlidG9vbC96bGlidG9v bC5odG0KK2h0dHA6Ly9tYXJrbmVsc29uLnVzLzE5OTcvMDEvMDEvemxpYi1lbmdpbmUvCiAuU0gg IlJFUE9SVElORyBQUk9CTEVNUyIKIEJlZm9yZSByZXBvcnRpbmcgYSBwcm9ibGVtLAogcGxlYXNl IGNoZWNrIHRoZQpAQCAtMTI3LDIyICs5OSw0MCBAQAogLkkgemxpYgogRkFRIGF0OgogLklQCi1o dHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvemxpYl9mYXEuaHRtbAoraHR0cDovL3psaWIubmV0L3ps aWJfZmFxLmh0bWwKIC5MUAogYmVmb3JlIGFza2luZyBmb3IgaGVscC4KIFNlbmQgcXVlc3Rpb25z IGFuZC9vciBjb21tZW50cyB0byB6bGliQGd6aXAub3JnLAogb3IgKGZvciB0aGUgV2luZG93cyBE TEwgdmVyc2lvbikgdG8gR2lsbGVzIFZvbGxhbnQgKGluZm9Ad2luaW1hZ2UuY29tKS4KLS5TSCBB VVRIT1JTCi1WZXJzaW9uIDEuMi4yCi1Db3B5cmlnaHQgKEMpIDE5OTUtMjAwNCBKZWFuLWxvdXAg R2FpbGx5IChqbG91cEBnemlwLm9yZykKLWFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNh bHRlY2guZWR1KS4KKy5TSCBBVVRIT1JTIEFORCBMSUNFTlNFCitWZXJzaW9uIDEuMi4xMQogLkxQ Ci1UaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcy1pcywiCi13aXRob3V0IGFueSBleHByZXNz IG9yIGltcGxpZWQgd2FycmFudHkuCi1JbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhl bGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworQ29weXJpZ2h0IChDKSAxOTk1LTIwMTcgSmVhbi1s b3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorLkxQCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVk ICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAord2FycmFudHkuICBJbiBu byBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwog YXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLVNlZSB0aGUgZGlzdHJpYnV0 aW9uIGRpcmVjdG9yeSB3aXRoIHJlc3BlY3QgdG8gcmVxdWlyZW1lbnRzCi1nb3Zlcm5pbmcgcmVk aXN0cmlidXRpb24uCisuTFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNl IHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAoraW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBw bGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorZnJlZWx5LCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorLkxQCisubnIgc3RlcCAxIDEK Ky5JUCBcbltzdGVwXS4gMworVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJl IG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKK2NsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBv cmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCitpbiBhIHByb2R1Y3Qs IGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUK K2FwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisuSVAgXG4rW3N0ZXBdLgorQWx0ZXJl ZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVz dCBub3QgYmUKK21pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4K Ky5JUCBcbitbc3RlcF0uCitUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJl ZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorLkxQCitKZWFuLWxvdXAgR2FpbGx5ICAg ICAgICBNYXJrIEFkbGVyCisuYnIKK2psb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVt bmkuY2FsdGVjaC5lZHUKKy5MUAogVGhlIGRlZmxhdGUgZm9ybWF0IHVzZWQgYnkKIC5JIHpsaWIK IHdhcyBkZWZpbmVkIGJ5IFBoaWwgS2F0ei4KZGlmZiAtciA5YTMxNzcyMzE3OTAgLXIgZTJkMTkz OWIxY2NjIHN5cy9zcmMvY21kL2dzL3psaWIvemxpYi5oCi0tLSBhL3N5cy9zcmMvY21kL2dzL3ps aWIvemxpYi5oCVN1biBNYXIgMDggMjI6MDA6MjMgMjAyMCArMDEwMAorKysgYi9zeXMvc3JjL2Nt ZC9ncy96bGliL3psaWIuaAlTdW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0MDAKQEAgLTEsNyAr MSw3IEBACiAvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJw b3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgdmVyc2lvbiAxLjIuMiwgT2N0b2JlciAzcmQsIDIw MDQKKyAgdmVyc2lvbiAxLjIuMTEsIEphbnVhcnkgMTV0aCwgMjAxNwogCi0gIENvcHlyaWdodCAo QykgMTk5NS0yMDA0IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAgQ29weXJpZ2h0 IChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMg c29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBs aWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxp YWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTI0LDU0ICsyNCw2MCBAQAogCiAKICAgVGhlIGRhdGEg Zm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVx dWVzdCBmb3IKLSAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3d3 dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQKLSAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQg KGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4KKyAgQ29tbWVu dHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwv cmZjMTk1MAorICAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kIHJm YzE5NTIgKGd6aXAgZm9ybWF0KS4KICovCiAKICNpZm5kZWYgWkxJQl9ICiAjZGVmaW5lIFpMSUJf SAogCisjcHJhZ21hIGxpYiAiLyRNL2xpYi9hcGUvbGliei5hIgorCiAjaW5jbHVkZSAiemNvbmYu aCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5l IFpMSUJfVkVSU0lPTiAiMS4yLjIiCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTIyMAorI2RlZmlu ZSBaTElCX1ZFUlNJT04gIjEuMi4xMSIKKyNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMmIwCisjZGVm aW5lIFpMSUJfVkVSX01BSk9SIDEKKyNkZWZpbmUgWkxJQl9WRVJfTUlOT1IgMgorI2RlZmluZSBa TElCX1ZFUl9SRVZJU0lPTiAxMQorI2RlZmluZSBaTElCX1ZFUl9TVUJSRVZJU0lPTiAwCiAKIC8q Ci0gICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1vcnkg Y29tcHJlc3Npb24gYW5kCi0gIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcgaW50 ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkCi0gIGRhdGEuICBUaGlzIHZlcnNpb24g b2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kCi0gIChk ZWZsYXRpb24pIGJ1dCBvdGhlciBhbGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYW5kIHdp bGwgaGF2ZSB0aGUgc2FtZQotICBzdHJlYW0gaW50ZXJmYWNlLgorICAgIFRoZSAnemxpYicgY29t cHJlc3Npb24gbGlicmFyeSBwcm92aWRlcyBpbi1tZW1vcnkgY29tcHJlc3Npb24gYW5kCisgIGRl Y29tcHJlc3Npb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcgaW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUg dW5jb21wcmVzc2VkIGRhdGEuCisgIFRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBzdXBwb3J0 cyBvbmx5IG9uZSBjb21wcmVzc2lvbiBtZXRob2QgKGRlZmxhdGlvbikKKyAgYnV0IG90aGVyIGFs Z29yaXRobXMgd2lsbCBiZSBhZGRlZCBsYXRlciBhbmQgd2lsbCBoYXZlIHRoZSBzYW1lIHN0cmVh bQorICBpbnRlcmZhY2UuCiAKLSAgICAgQ29tcHJlc3Npb24gY2FuIGJlIGRvbmUgaW4gYSBzaW5n bGUgc3RlcCBpZiB0aGUgYnVmZmVycyBhcmUgbGFyZ2UKLSAgZW5vdWdoIChmb3IgZXhhbXBsZSBp ZiBhbiBpbnB1dCBmaWxlIGlzIG1tYXAnZWQpLCBvciBjYW4gYmUgZG9uZSBieQotICByZXBlYXRl ZCBjYWxscyBvZiB0aGUgY29tcHJlc3Npb24gZnVuY3Rpb24uICBJbiB0aGUgbGF0dGVyIGNhc2Us IHRoZQotICBhcHBsaWNhdGlvbiBtdXN0IHByb3ZpZGUgbW9yZSBpbnB1dCBhbmQvb3IgY29uc3Vt ZSB0aGUgb3V0cHV0CisgICAgQ29tcHJlc3Npb24gY2FuIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3Rl cCBpZiB0aGUgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoLAorICBvciBjYW4gYmUgZG9uZSBieSBy ZXBlYXRlZCBjYWxscyBvZiB0aGUgY29tcHJlc3Npb24gZnVuY3Rpb24uICBJbiB0aGUgbGF0dGVy CisgIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHByb3ZpZGUgbW9yZSBpbnB1dCBhbmQvb3Ig Y29uc3VtZSB0aGUgb3V0cHV0CiAgIChwcm92aWRpbmcgbW9yZSBvdXRwdXQgc3BhY2UpIGJlZm9y ZSBlYWNoIGNhbGwuCiAKLSAgICAgVGhlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQgdXNlZCBieSBk ZWZhdWx0IGJ5IHRoZSBpbi1tZW1vcnkgZnVuY3Rpb25zIGlzCisgICAgVGhlIGNvbXByZXNzZWQg ZGF0YSBmb3JtYXQgdXNlZCBieSBkZWZhdWx0IGJ5IHRoZSBpbi1tZW1vcnkgZnVuY3Rpb25zIGlz CiAgIHRoZSB6bGliIGZvcm1hdCwgd2hpY2ggaXMgYSB6bGliIHdyYXBwZXIgZG9jdW1lbnRlZCBp biBSRkMgMTk1MCwgd3JhcHBlZAogICBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbSwgd2hpY2ggaXMg aXRzZWxmIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTEuCiAKLSAgICAgVGhlIGxpYnJhcnkgYWxzbyBz dXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGluIGd6aXAgKC5neikgZm9ybWF0Cisg ICAgVGhlIGxpYnJhcnkgYWxzbyBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGlu IGd6aXAgKC5neikgZm9ybWF0CiAgIHdpdGggYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gdGhhdCBv ZiBzdGRpbyB1c2luZyB0aGUgZnVuY3Rpb25zIHRoYXQgc3RhcnQKICAgd2l0aCAiZ3oiLiAgVGhl IGd6aXAgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB6bGliIGZvcm1hdC4gIGd6aXAgaXMg YQogICBnemlwIHdyYXBwZXIsIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTIsIHdyYXBwZWQgYXJvdW5k IGEgZGVmbGF0ZSBzdHJlYW0uCiAKLSAgICAgVGhpcyBsaWJyYXJ5IGNhbiBvcHRpb25hbGx5IHJl YWQgYW5kIHdyaXRlIGd6aXAgc3RyZWFtcyBpbiBtZW1vcnkgYXMgd2VsbC4KKyAgICBUaGlzIGxp YnJhcnkgY2FuIG9wdGlvbmFsbHkgcmVhZCBhbmQgd3JpdGUgZ3ppcCBhbmQgcmF3IGRlZmxhdGUg c3RyZWFtcyBpbgorICBtZW1vcnkgYXMgd2VsbC4KIAotICAgICBUaGUgemxpYiBmb3JtYXQgd2Fz IGRlc2lnbmVkIHRvIGJlIGNvbXBhY3QgYW5kIGZhc3QgZm9yIHVzZSBpbiBtZW1vcnkKKyAgICBU aGUgemxpYiBmb3JtYXQgd2FzIGRlc2lnbmVkIHRvIGJlIGNvbXBhY3QgYW5kIGZhc3QgZm9yIHVz ZSBpbiBtZW1vcnkKICAgYW5kIG9uIGNvbW11bmljYXRpb25zIGNoYW5uZWxzLiAgVGhlIGd6aXAg Zm9ybWF0IHdhcyBkZXNpZ25lZCBmb3Igc2luZ2xlLQogICBmaWxlIGNvbXByZXNzaW9uIG9uIGZp bGUgc3lzdGVtcywgaGFzIGEgbGFyZ2VyIGhlYWRlciB0aGFuIHpsaWIgdG8gbWFpbnRhaW4KICAg ZGlyZWN0b3J5IGluZm9ybWF0aW9uLCBhbmQgdXNlcyBhIGRpZmZlcmVudCwgc2xvd2VyIGNoZWNr IG1ldGhvZCB0aGFuIHpsaWIuCiAKLSAgICAgVGhlIGxpYnJhcnkgZG9lcyBub3QgaW5zdGFsbCBh bnkgc2lnbmFsIGhhbmRsZXIuIFRoZSBkZWNvZGVyIGNoZWNrcwotICB0aGUgY29uc2lzdGVuY3kg b2YgdGhlIGNvbXByZXNzZWQgZGF0YSwgc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyCi0gIGNy YXNoIGV2ZW4gaW4gY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCisgICAgVGhlIGxpYnJhcnkgZG9l cyBub3QgaW5zdGFsbCBhbnkgc2lnbmFsIGhhbmRsZXIuICBUaGUgZGVjb2RlciBjaGVja3MKKyAg dGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsIHNvIHRoZSBsaWJyYXJ5IHNo b3VsZCBuZXZlciBjcmFzaAorICBldmVuIGluIHRoZSBjYXNlIG9mIGNvcnJ1cHRlZCBpbnB1dC4K ICovCiAKIHR5cGVkZWYgdm9pZHBmICgqYWxsb2NfZnVuYykgT0YoKHZvaWRwZiBvcGFxdWUsIHVJ bnQgaXRlbXMsIHVJbnQgc2l6ZSkpOwpAQCAtODAsNjggKzg2LDk0IEBACiBzdHJ1Y3QgaW50ZXJu YWxfc3RhdGU7CiAKIHR5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3MgewotICAgIEJ5dGVmICAgICpu ZXh0X2luOyAgLyogbmV4dCBpbnB1dCBieXRlICovCisgICAgel9jb25zdCBCeXRlZiAqbmV4dF9p bjsgICAgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLwogICAgIHVJbnQgICAgIGF2YWlsX2luOyAgLyog bnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovCi0gICAgdUxvbmcgICAgdG90 YWxfaW47ICAvKiB0b3RhbCBuYiBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLworICAgIHVM b25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28g ZmFyICovCiAKLSAgICBCeXRlZiAgICAqbmV4dF9vdXQ7IC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hv dWxkIGJlIHB1dCB0aGVyZSAqLworICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRw dXQgYnl0ZSB3aWxsIGdvIGhlcmUgKi8KICAgICB1SW50ICAgICBhdmFpbF9vdXQ7IC8qIHJlbWFp bmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICovCi0gICAgdUxvbmcgICAgdG90YWxfb3V0OyAv KiB0b3RhbCBuYiBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxf b3V0OyAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLwogCi0gICAgY2hh ciAgICAgKm1zZzsgICAgICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3Ig Ki8KKyAgICB6X2NvbnN0IGNoYXIgKm1zZzsgIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBp ZiBubyBlcnJvciAqLwogICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKnN0YXRlOyAvKiBu b3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi8KIAogICAgIGFsbG9jX2Z1bmMgemFsbG9jOyAg LyogdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KICAgICBmcmVlX2Z1bmMg IHpmcmVlOyAgIC8qIHVzZWQgdG8gZnJlZSB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KICAgICB2b2lk cGYgICAgIG9wYXF1ZTsgIC8qIHByaXZhdGUgZGF0YSBvYmplY3QgcGFzc2VkIHRvIHphbGxvYyBh bmQgemZyZWUgKi8KIAotICAgIGludCAgICAgZGF0YV90eXBlOyAgLyogYmVzdCBndWVzcyBhYm91 dCB0aGUgZGF0YSB0eXBlOiBhc2NpaSBvciBiaW5hcnkgKi8KLSAgICB1TG9uZyAgIGFkbGVyOyAg ICAgIC8qIGFkbGVyMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgaW50 ICAgICBkYXRhX3R5cGU7ICAvKiBiZXN0IGd1ZXNzIGFib3V0IHRoZSBkYXRhIHR5cGU6IGJpbmFy eSBvciB0ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVmbGF0ZSwgb3IgdGhl IGRlY29kaW5nIHN0YXRlIGZvciBpbmZsYXRlICovCisgICAgdUxvbmcgICBhZGxlcjsgICAgICAv KiBBZGxlci0zMiBvciBDUkMtMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCiAg ICAgdUxvbmcgICByZXNlcnZlZDsgICAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLwogfSB6 X3N0cmVhbTsKIAogdHlwZWRlZiB6X3N0cmVhbSBGQVIgKnpfc3RyZWFtcDsKIAogLyoKLSAgIFRo ZSBhcHBsaWNhdGlvbiBtdXN0IHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbiB3aGVuIGF2YWls X2luIGhhcwotICAgZHJvcHBlZCB0byB6ZXJvLiBJdCBtdXN0IHVwZGF0ZSBuZXh0X291dCBhbmQg YXZhaWxfb3V0IHdoZW4gYXZhaWxfb3V0Ci0gICBoYXMgZHJvcHBlZCB0byB6ZXJvLiBUaGUgYXBw bGljYXRpb24gbXVzdCBpbml0aWFsaXplIHphbGxvYywgemZyZWUgYW5kCi0gICBvcGFxdWUgYmVm b3JlIGNhbGxpbmcgdGhlIGluaXQgZnVuY3Rpb24uIEFsbCBvdGhlciBmaWVsZHMgYXJlIHNldCBi eSB0aGUKLSAgIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIG11c3Qgbm90IGJlIHVwZGF0ZWQgYnkg dGhlIGFwcGxpY2F0aW9uLgorICAgICBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBwYXNzZWQgdG8g YW5kIGZyb20gemxpYiByb3V0aW5lcy4gIFNlZSBSRkMgMTk1MgorICBmb3IgbW9yZSBkZXRhaWxz IG9uIHRoZSBtZWFuaW5ncyBvZiB0aGVzZSBmaWVsZHMuCisqLwordHlwZWRlZiBzdHJ1Y3QgZ3pf aGVhZGVyX3MgeworICAgIGludCAgICAgdGV4dDsgICAgICAgLyogdHJ1ZSBpZiBjb21wcmVzc2Vk IGRhdGEgYmVsaWV2ZWQgdG8gYmUgdGV4dCAqLworICAgIHVMb25nICAgdGltZTsgICAgICAgLyog bW9kaWZpY2F0aW9uIHRpbWUgKi8KKyAgICBpbnQgICAgIHhmbGFnczsgICAgIC8qIGV4dHJhIGZs YWdzIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovCisgICAgaW50ICAgICBv czsgICAgICAgICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCisgICAgQnl0ZWYgICAqZXh0cmE7ICAg ICAvKiBwb2ludGVyIHRvIGV4dHJhIGZpZWxkIG9yIFpfTlVMTCBpZiBub25lICovCisgICAgdUlu dCAgICBleHRyYV9sZW47ICAvKiBleHRyYSBmaWVsZCBsZW5ndGggKHZhbGlkIGlmIGV4dHJhICE9 IFpfTlVMTCkgKi8KKyAgICB1SW50ICAgIGV4dHJhX21heDsgIC8qIHNwYWNlIGF0IGV4dHJhIChv bmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovCisgICAgQnl0ZWYgICAqbmFtZTsgICAgICAvKiBw b2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBmaWxlIG5hbWUgb3IgWl9OVUxMICovCisgICAgdUlu dCAgICBuYW1lX21heDsgICAvKiBzcGFjZSBhdCBuYW1lIChvbmx5IHdoZW4gcmVhZGluZyBoZWFk ZXIpICovCisgICAgQnl0ZWYgICAqY29tbWVudDsgICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWlu YXRlZCBjb21tZW50IG9yIFpfTlVMTCAqLworICAgIHVJbnQgICAgY29tbV9tYXg7ICAgLyogc3Bh Y2UgYXQgY29tbWVudCAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqLworICAgIGludCAgICAg aGNyYzsgICAgICAgLyogdHJ1ZSBpZiB0aGVyZSB3YXMgb3Igd2lsbCBiZSBhIGhlYWRlciBjcmMg Ki8KKyAgICBpbnQgICAgIGRvbmU7ICAgICAgIC8qIHRydWUgd2hlbiBkb25lIHJlYWRpbmcgZ3pp cCBoZWFkZXIgKG5vdCB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHdyaXRp bmcgYSBnemlwIGZpbGUpICovCit9IGd6X2hlYWRlcjsKIAotICAgVGhlIG9wYXF1ZSB2YWx1ZSBw cm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0Ci0g ICBwYXJhbWV0ZXIgZm9yIGNhbGxzIG9mIHphbGxvYyBhbmQgemZyZWUuIFRoaXMgY2FuIGJlIHVz ZWZ1bCBmb3IgY3VzdG9tCi0gICBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvbXByZXNzaW9uIGxp YnJhcnkgYXR0YWNoZXMgbm8gbWVhbmluZyB0byB0aGUKK3R5cGVkZWYgZ3pfaGVhZGVyIEZBUiAq Z3pfaGVhZGVycDsKKworLyoKKyAgICAgVGhlIGFwcGxpY2F0aW9uIG11c3QgdXBkYXRlIG5leHRf aW4gYW5kIGF2YWlsX2luIHdoZW4gYXZhaWxfaW4gaGFzIGRyb3BwZWQKKyAgIHRvIHplcm8uICBJ dCBtdXN0IHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0IHdoZW4gYXZhaWxfb3V0IGhhcyBk cm9wcGVkCisgICB0byB6ZXJvLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5pdGlhbGl6ZSB6YWxs b2MsIHpmcmVlIGFuZCBvcGFxdWUgYmVmb3JlCisgICBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9u LiAgQWxsIG90aGVyIGZpZWxkcyBhcmUgc2V0IGJ5IHRoZSBjb21wcmVzc2lvbgorICAgbGlicmFy eSBhbmQgbXVzdCBub3QgYmUgdXBkYXRlZCBieSB0aGUgYXBwbGljYXRpb24uCisKKyAgICAgVGhl IG9wYXF1ZSB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBiZSBwYXNzZWQg YXMgdGhlIGZpcnN0CisgICBwYXJhbWV0ZXIgZm9yIGNhbGxzIG9mIHphbGxvYyBhbmQgemZyZWUu ICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGN1c3RvbQorICAgbWVtb3J5IG1hbmFnZW1lbnQuICBU aGUgY29tcHJlc3Npb24gbGlicmFyeSBhdHRhY2hlcyBubyBtZWFuaW5nIHRvIHRoZQogICAgb3Bh cXVlIHZhbHVlLgogCi0gICB6YWxsb2MgbXVzdCByZXR1cm4gWl9OVUxMIGlmIHRoZXJlIGlzIG5v dCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgb2JqZWN0LgorICAgICB6YWxsb2MgbXVzdCByZXR1cm4g Wl9OVUxMIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgb2JqZWN0LgogICAg SWYgemxpYiBpcyB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24sIHphbGxvYyBh bmQgemZyZWUgbXVzdCBiZQotICAgdGhyZWFkIHNhZmUuCisgICB0aHJlYWQgc2FmZS4gIEluIHRo YXQgY2FzZSwgemxpYiBpcyB0aHJlYWQtc2FmZS4gIFdoZW4gemFsbG9jIGFuZCB6ZnJlZSBhcmUK KyAgIFpfTlVMTCBvbiBlbnRyeSB0byB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHRoZXkg YXJlIHNldCB0byBpbnRlcm5hbAorICAgcm91dGluZXMgdGhhdCB1c2UgdGhlIHN0YW5kYXJkIGxp YnJhcnkgZnVuY3Rpb25zIG1hbGxvYygpIGFuZCBmcmVlKCkuCiAKLSAgIE9uIDE2LWJpdCBzeXN0 ZW1zLCB0aGUgZnVuY3Rpb25zIHphbGxvYyBhbmQgemZyZWUgbXVzdCBiZSBhYmxlIHRvIGFsbG9j YXRlCi0gICBleGFjdGx5IDY1NTM2IGJ5dGVzLCBidXQgd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8g YWxsb2NhdGUgbW9yZSB0aGFuIHRoaXMKLSAgIGlmIHRoZSBzeW1ib2wgTUFYU0VHXzY0SyBpcyBk ZWZpbmVkIChzZWUgemNvbmYuaCkuIFdBUk5JTkc6IE9uIE1TRE9TLAotICAgcG9pbnRlcnMgcmV0 dXJuZWQgYnkgemFsbG9jIGZvciBvYmplY3RzIG9mIGV4YWN0bHkgNjU1MzYgYnl0ZXMgKm11c3Qq Ci0gICBoYXZlIHRoZWlyIG9mZnNldCBub3JtYWxpemVkIHRvIHplcm8uIFRoZSBkZWZhdWx0IGFs bG9jYXRpb24gZnVuY3Rpb24KLSAgIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeSBlbnN1cmVzIHRo aXMgKHNlZSB6dXRpbC5jKS4gVG8gcmVkdWNlIG1lbW9yeQotICAgcmVxdWlyZW1lbnRzIGFuZCBh dm9pZCBhbnkgYWxsb2NhdGlvbiBvZiA2NEsgb2JqZWN0cywgYXQgdGhlIGV4cGVuc2Ugb2YKLSAg IGNvbXByZXNzaW9uIHJhdGlvLCBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggLURNQVhfV0JJVFM9 MTQgKHNlZSB6Y29uZi5oKS4KKyAgICAgT24gMTYtYml0IHN5c3RlbXMsIHRoZSBmdW5jdGlvbnMg emFsbG9jIGFuZCB6ZnJlZSBtdXN0IGJlIGFibGUgdG8gYWxsb2NhdGUKKyAgIGV4YWN0bHkgNjU1 MzYgYnl0ZXMsIGJ1dCB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4g dGhpcyBpZgorICAgdGhlIHN5bWJvbCBNQVhTRUdfNjRLIGlzIGRlZmluZWQgKHNlZSB6Y29uZi5o KS4gIFdBUk5JTkc6IE9uIE1TRE9TLCBwb2ludGVycworICAgcmV0dXJuZWQgYnkgemFsbG9jIGZv ciBvYmplY3RzIG9mIGV4YWN0bHkgNjU1MzYgYnl0ZXMgKm11c3QqIGhhdmUgdGhlaXIKKyAgIG9m ZnNldCBub3JtYWxpemVkIHRvIHplcm8uICBUaGUgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9u IHByb3ZpZGVkIGJ5IHRoaXMKKyAgIGxpYnJhcnkgZW5zdXJlcyB0aGlzIChzZWUgenV0aWwuYyku ICBUbyByZWR1Y2UgbWVtb3J5IHJlcXVpcmVtZW50cyBhbmQgYXZvaWQKKyAgIGFueSBhbGxvY2F0 aW9uIG9mIDY0SyBvYmplY3RzLCBhdCB0aGUgZXhwZW5zZSBvZiBjb21wcmVzc2lvbiByYXRpbywg Y29tcGlsZQorICAgdGhlIGxpYnJhcnkgd2l0aCAtRE1BWF9XQklUUz0xNCAoc2VlIHpjb25mLmgp LgogCi0gICBUaGUgZmllbGRzIHRvdGFsX2luIGFuZCB0b3RhbF9vdXQgY2FuIGJlIHVzZWQgZm9y IHN0YXRpc3RpY3Mgb3IKLSAgIHByb2dyZXNzIHJlcG9ydHMuIEFmdGVyIGNvbXByZXNzaW9uLCB0 b3RhbF9pbiBob2xkcyB0aGUgdG90YWwgc2l6ZSBvZgotICAgdGhlIHVuY29tcHJlc3NlZCBkYXRh IGFuZCBtYXkgYmUgc2F2ZWQgZm9yIHVzZSBpbiB0aGUgZGVjb21wcmVzc29yCi0gICAocGFydGlj dWxhcmx5IGlmIHRoZSBkZWNvbXByZXNzb3Igd2FudHMgdG8gZGVjb21wcmVzcyBldmVyeXRoaW5n IGluCi0gICBhIHNpbmdsZSBzdGVwKS4KKyAgICAgVGhlIGZpZWxkcyB0b3RhbF9pbiBhbmQgdG90 YWxfb3V0IGNhbiBiZSB1c2VkIGZvciBzdGF0aXN0aWNzIG9yIHByb2dyZXNzCisgICByZXBvcnRz LiAgQWZ0ZXIgY29tcHJlc3Npb24sIHRvdGFsX2luIGhvbGRzIHRoZSB0b3RhbCBzaXplIG9mIHRo ZQorICAgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBmb3IgdXNlIGJ5IHRoZSBk ZWNvbXByZXNzb3IgKHBhcnRpY3VsYXJseQorICAgaWYgdGhlIGRlY29tcHJlc3NvciB3YW50cyB0 byBkZWNvbXByZXNzIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgc3RlcCkuCiAqLwogCiAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBjb25zdGFudHMgKi8KIAogI2RlZmluZSBaX05PX0ZMVVNIICAg ICAgMAotI2RlZmluZSBaX1BBUlRJQUxfRkxVU0ggMSAvKiB3aWxsIGJlIHJlbW92ZWQsIHVzZSBa X1NZTkNfRkxVU0ggaW5zdGVhZCAqLworI2RlZmluZSBaX1BBUlRJQUxfRkxVU0ggMQogI2RlZmlu ZSBaX1NZTkNfRkxVU0ggICAgMgogI2RlZmluZSBaX0ZVTExfRkxVU0ggICAgMwogI2RlZmluZSBa X0ZJTklTSCAgICAgICAgNAogI2RlZmluZSBaX0JMT0NLICAgICAgICAgNQorI2RlZmluZSBaX1RS RUVTICAgICAgICAgNgogLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5k IGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqLwogCiAjZGVmaW5lIFpfT0sgICAgICAgICAg ICAwCkBAIC0xNTMsOCArMTg1LDggQEAKICNkZWZpbmUgWl9NRU1fRVJST1IgICAgKC00KQogI2Rl ZmluZSBaX0JVRl9FUlJPUiAgICAoLTUpCiAjZGVmaW5lIFpfVkVSU0lPTl9FUlJPUiAoLTYpCi0v KiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9u cy4gTmVnYXRpdmUKLSAqIHZhbHVlcyBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVz ZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuCisvKiBSZXR1cm4gY29kZXMgZm9yIHRo ZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUgdmFsdWVzCisg KiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5v cm1hbCBldmVudHMuCiAgKi8KIAogI2RlZmluZSBaX05PX0NPTVBSRVNTSU9OICAgICAgICAgMApA QCAtMTY2LDEzICsxOTgsMTUgQEAKICNkZWZpbmUgWl9GSUxURVJFRCAgICAgICAgICAgIDEKICNk ZWZpbmUgWl9IVUZGTUFOX09OTFkgICAgICAgIDIKICNkZWZpbmUgWl9STEUgICAgICAgICAgICAg ICAgIDMKKyNkZWZpbmUgWl9GSVhFRCAgICAgICAgICAgICAgIDQKICNkZWZpbmUgWl9ERUZBVUxU X1NUUkFURUdZICAgIDAKIC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5OyBzZWUgZGVmbGF0ZUluaXQy KCkgYmVsb3cgZm9yIGRldGFpbHMgKi8KIAogI2RlZmluZSBaX0JJTkFSWSAgIDAKLSNkZWZpbmUg Wl9BU0NJSSAgICAxCisjZGVmaW5lIFpfVEVYVCAgICAgMQorI2RlZmluZSBaX0FTQ0lJICAgIFpf VEVYVCAgIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggMS4yLjIgYW5kIGVhcmxpZXIgKi8KICNk ZWZpbmUgWl9VTktOT1dOICAyCi0vKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBm aWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovCisvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhl IGRhdGFfdHlwZSBmaWVsZCBmb3IgZGVmbGF0ZSgpICovCiAKICNkZWZpbmUgWl9ERUZMQVRFRCAg IDgKIC8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAodGhlIG9ubHkgb25lIHN1cHBv cnRlZCBpbiB0aGlzIHZlcnNpb24pICovCkBAIC0xODIsMTMwICsyMTYsMTYyIEBACiAjZGVmaW5l IHpsaWJfdmVyc2lvbiB6bGliVmVyc2lvbigpCiAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZl cnNpb25zIDwgMS4wLjIgKi8KIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYXNpYyBm dW5jdGlvbnMgKi8KIAogWkVYVEVSTiBjb25zdCBjaGFyICogWkVYUE9SVCB6bGliVmVyc2lvbiBP Rigodm9pZCkpOwogLyogVGhlIGFwcGxpY2F0aW9uIGNhbiBjb21wYXJlIHpsaWJWZXJzaW9uIGFu ZCBaTElCX1ZFUlNJT04gZm9yIGNvbnNpc3RlbmN5LgotICAgSWYgdGhlIGZpcnN0IGNoYXJhY3Rl ciBkaWZmZXJzLCB0aGUgbGlicmFyeSBjb2RlIGFjdHVhbGx5IHVzZWQgaXMKLSAgIG5vdCBjb21w YXRpYmxlIHdpdGggdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlv bi4KLSAgIFRoaXMgY2hlY2sgaXMgYXV0b21hdGljYWxseSBtYWRlIGJ5IGRlZmxhdGVJbml0IGFu ZCBpbmZsYXRlSW5pdC4KKyAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZGlmZmVycywgdGhlIGxp YnJhcnkgY29kZSBhY3R1YWxseSB1c2VkIGlzIG5vdAorICAgY29tcGF0aWJsZSB3aXRoIHRoZSB6 bGliLmggaGVhZGVyIGZpbGUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uICBUaGlzIGNoZWNrCisg ICBpcyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0Lgog ICovCiAKIC8qCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAg c3RybSwgaW50IGxldmVsKSk7CiAKLSAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVh bSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKLSAgIHphbGxvYywgemZyZWUgYW5k IG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieSB0aGUgY2FsbGVyLgotICAgSWYg emFsbG9jIGFuZCB6ZnJlZSBhcmUgc2V0IHRvIFpfTlVMTCwgZGVmbGF0ZUluaXQgdXBkYXRlcyB0 aGVtIHRvCi0gICB1c2UgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KKyAgICAgSW5pdGlh bGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uICBUaGUgZmll bGRzCisgICB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZv cmUgYnkgdGhlIGNhbGxlci4gIElmCisgICB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9O VUxMLCBkZWZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8gdXNlIGRlZmF1bHQKKyAgIGFsbG9jYXRp b24gZnVuY3Rpb25zLgogCiAgICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBtdXN0IGJlIFpfREVG QVVMVF9DT01QUkVTU0lPTiwgb3IgYmV0d2VlbiAwIGFuZCA5OgotICAgMSBnaXZlcyBiZXN0IHNw ZWVkLCA5IGdpdmVzIGJlc3QgY29tcHJlc3Npb24sIDAgZ2l2ZXMgbm8gY29tcHJlc3Npb24gYXQK LSAgIGFsbCAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEgdGlt ZSkuCi0gICBaX0RFRkFVTFRfQ09NUFJFU1NJT04gcmVxdWVzdHMgYSBkZWZhdWx0IGNvbXByb21p c2UgYmV0d2VlbiBzcGVlZCBhbmQKLSAgIGNvbXByZXNzaW9uIChjdXJyZW50bHkgZXF1aXZhbGVu dCB0byBsZXZlbCA2KS4KKyAgIDEgZ2l2ZXMgYmVzdCBzcGVlZCwgOSBnaXZlcyBiZXN0IGNvbXBy ZXNzaW9uLCAwIGdpdmVzIG5vIGNvbXByZXNzaW9uIGF0IGFsbAorICAgKHRoZSBpbnB1dCBkYXRh IGlzIHNpbXBseSBjb3BpZWQgYSBibG9jayBhdCBhIHRpbWUpLiAgWl9ERUZBVUxUX0NPTVBSRVNT SU9OCisgICByZXF1ZXN0cyBhIGRlZmF1bHQgY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZCBj b21wcmVzc2lvbiAoY3VycmVudGx5CisgICBlcXVpdmFsZW50IHRvIGxldmVsIDYpLgogCi0gICAg IGRlZmxhdGVJbml0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVy ZSB3YXMgbm90Ci0gICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBsZXZlbCBpcyBu b3QgYSB2YWxpZCBjb21wcmVzc2lvbiBsZXZlbCwKKyAgICAgZGVmbGF0ZUluaXQgcmV0dXJucyBa X09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBt ZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGxldmVsIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9u IGxldmVsLCBvcgogICAgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lv biAoemxpYl92ZXJzaW9uKSBpcyBpbmNvbXBhdGlibGUKLSAgIHdpdGggdGhlIHZlcnNpb24gYXNz dW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLgotICAgbXNnIGlzIHNldCB0byBudWxs IGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdCBkb2VzIG5vdAotICAg cGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4K KyAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04p LiAgbXNnIGlzIHNldCB0byBudWxsCisgICBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAg ZGVmbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246CisgICB0aGlzIHdp bGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVm bGF0ZSBPRigoel9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOwogLyoKICAgICBkZWZsYXRlIGNv bXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5w dXQKLSAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBm dWxsLiBJdCBtYXkgaW50cm9kdWNlIHNvbWUKLSAgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5w dXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdoZW4KKyAgYnVmZmVyIGJl Y29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiAgSXQgbWF5IGlu dHJvZHVjZQorICBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJv ZHVjaW5nIGFueSBvdXRwdXQpIGV4Y2VwdCB3aGVuCiAgIGZvcmNlZCB0byBmbHVzaC4KIAotICAg IFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuIGRlZmxhdGUgcGVyZm9ybXMg b25lIG9yIGJvdGggb2YgdGhlCisgICAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9s bG93cy4gIGRlZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlCiAgIGZvbGxvd2luZyBh Y3Rpb25zOgogCiAgIC0gQ29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCBuZXh0X2luIGFu ZCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4KLSAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFs bCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAorICAgIGFjY29y ZGluZ2x5LiAgSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJl IGlzIG5vdAogICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBh bmQgYXZhaWxfaW4gYXJlIHVwZGF0ZWQgYW5kCiAgICAgcHJvY2Vzc2luZyB3aWxsIHJlc3VtZSBh dCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KIAotICAtIFByb3Zp ZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBh bmQgYXZhaWxfb3V0Ci0gICAgYWNjb3JkaW5nbHkuIFRoaXMgYWN0aW9uIGlzIGZvcmNlZCBpZiB0 aGUgcGFyYW1ldGVyIGZsdXNoIGlzIG5vbiB6ZXJvLgorICAtIEdlbmVyYXRlIG1vcmUgb3V0cHV0 IHN0YXJ0aW5nIGF0IG5leHRfb3V0IGFuZCB1cGRhdGUgbmV4dF9vdXQgYW5kIGF2YWlsX291dAor ICAgIGFjY29yZGluZ2x5LiAgVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIg Zmx1c2ggaXMgbm9uIHplcm8uCiAgICAgRm9yY2luZyBmbHVzaCBmcmVxdWVudGx5IGRlZ3JhZGVz IHRoZSBjb21wcmVzc2lvbiByYXRpbywgc28gdGhpcyBwYXJhbWV0ZXIKLSAgICBzaG91bGQgYmUg c2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKGluIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucykuCi0g ICAgU29tZSBvdXRwdXQgbWF5IGJlIHByb3ZpZGVkIGV2ZW4gaWYgZmx1c2ggaXMgbm90IHNldC4K KyAgICBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkuICBTb21lIG91dHB1dCBtYXkg YmUgcHJvdmlkZWQgZXZlbiBpZgorICAgIGZsdXNoIGlzIHplcm8uCiAKLSAgQmVmb3JlIHRoZSBj YWxsIG9mIGRlZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBs ZWFzdAotICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3Jl IGlucHV0IGFuZC9vciBjb25zdW1pbmcKLSAgbW9yZSBvdXRwdXQsIGFuZCB1cGRhdGluZyBhdmFp bF9pbiBvciBhdmFpbF9vdXQgYWNjb3JkaW5nbHk7IGF2YWlsX291dAotICBzaG91bGQgbmV2ZXIg YmUgemVybyBiZWZvcmUgdGhlIGNhbGwuIFRoZSBhcHBsaWNhdGlvbiBjYW4gY29uc3VtZSB0aGUK LSAgY29tcHJlc3NlZCBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yIGV4YW1wbGUgd2hlbiB0aGUg b3V0cHV0IGJ1ZmZlciBpcyBmdWxsCi0gIChhdmFpbF9vdXQgPT0gMCksIG9yIGFmdGVyIGVhY2gg Y2FsbCBvZiBkZWZsYXRlKCkuIElmIGRlZmxhdGUgcmV0dXJucyBaX09LCi0gIGFuZCB3aXRoIHpl cm8gYXZhaWxfb3V0LCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBp biB0aGUKLSAgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0 IHBlbmRpbmcuCisgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGUoKSwgdGhlIGFwcGxpY2F0 aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMg cG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQor ICBvdXRwdXQsIGFuZCB1cGRhdGluZyBhdmFpbF9pbiBvciBhdmFpbF9vdXQgYWNjb3JkaW5nbHk7 IGF2YWlsX291dCBzaG91bGQKKyAgbmV2ZXIgYmUgemVybyBiZWZvcmUgdGhlIGNhbGwuICBUaGUg YXBwbGljYXRpb24gY2FuIGNvbnN1bWUgdGhlIGNvbXByZXNzZWQKKyAgb3V0cHV0IHdoZW4gaXQg d2FudHMsIGZvciBleGFtcGxlIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxf b3V0CisgID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YgZGVmbGF0ZSgpLiAgSWYgZGVmbGF0 ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGgKKyAgemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUgY2Fs bGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZSBvdXRwdXQKKyAgYnVmZmVyIGJlY2F1 c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4gU2VlIGRlZmxhdGVQZW5kaW5n KCksCisgIHdoaWNoIGNhbiBiZSB1c2VkIGlmIGRlc2lyZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg b3Igbm90IHRoZXJlIGlzIG1vcmUgb3VwdXQKKyAgaW4gdGhhdCBjYXNlLgorCisgICAgTm9ybWFs bHkgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQgdG8gWl9OT19GTFVTSCwgd2hpY2ggYWxsb3dz IGRlZmxhdGUgdG8KKyAgZGVjaWRlIGhvdyBtdWNoIGRhdGEgdG8gYWNjdW11bGF0ZSBiZWZvcmUg cHJvZHVjaW5nIG91dHB1dCwgaW4gb3JkZXIgdG8KKyAgbWF4aW1pemUgY29tcHJlc3Npb24uCiAK ICAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX1NZTkNfRkxVU0gsIGFsbCBw ZW5kaW5nIG91dHB1dCBpcwogICBmbHVzaGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0aGUg b3V0cHV0IGlzIGFsaWduZWQgb24gYSBieXRlIGJvdW5kYXJ5LCBzbwotICB0aGF0IHRoZSBkZWNv bXByZXNzb3IgY2FuIGdldCBhbGwgaW5wdXQgZGF0YSBhdmFpbGFibGUgc28gZmFyLiAoSW4gcGFy dGljdWxhcgotICBhdmFpbF9pbiBpcyB6ZXJvIGFmdGVyIHRoZSBjYWxsIGlmIGVub3VnaCBvdXRw dXQgc3BhY2UgaGFzIGJlZW4gcHJvdmlkZWQKLSAgYmVmb3JlIHRoZSBjYWxsLikgIEZsdXNoaW5n IG1heSBkZWdyYWRlIGNvbXByZXNzaW9uIGZvciBzb21lIGNvbXByZXNzaW9uCi0gIGFsZ29yaXRo bXMgYW5kIHNvIGl0IHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBuZWNlc3NhcnkuCisgIHRoYXQg dGhlIGRlY29tcHJlc3NvciBjYW4gZ2V0IGFsbCBpbnB1dCBkYXRhIGF2YWlsYWJsZSBzbyBmYXIu ICAoSW4KKyAgcGFydGljdWxhciBhdmFpbF9pbiBpcyB6ZXJvIGFmdGVyIHRoZSBjYWxsIGlmIGVu b3VnaCBvdXRwdXQgc3BhY2UgaGFzIGJlZW4KKyAgcHJvdmlkZWQgYmVmb3JlIHRoZSBjYWxsLikg Rmx1c2hpbmcgbWF5IGRlZ3JhZGUgY29tcHJlc3Npb24gZm9yIHNvbWUKKyAgY29tcHJlc3Npb24g YWxnb3JpdGhtcyBhbmQgc28gaXQgc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIG5lY2Vzc2FyeS4g IFRoaXMKKyAgY29tcGxldGVzIHRoZSBjdXJyZW50IGRlZmxhdGUgYmxvY2sgYW5kIGZvbGxvd3Mg aXQgd2l0aCBhbiBlbXB0eSBzdG9yZWQgYmxvY2sKKyAgdGhhdCBpcyB0aHJlZSBiaXRzIHBsdXMg ZmlsbGVyIGJpdHMgdG8gdGhlIG5leHQgYnl0ZSwgZm9sbG93ZWQgYnkgZm91ciBieXRlcworICAo MDAgMDAgZmYgZmYpLgorCisgICAgSWYgZmx1c2ggaXMgc2V0IHRvIFpfUEFSVElBTF9GTFVTSCwg YWxsIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgdG8gdGhlCisgIG91dHB1dCBidWZmZXIsIGJ1 dCB0aGUgb3V0cHV0IGlzIG5vdCBhbGlnbmVkIHRvIGEgYnl0ZSBib3VuZGFyeS4gIEFsbCBvZiB0 aGUKKyAgaW5wdXQgZGF0YSBzbyBmYXIgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIGRlY29tcHJl c3NvciwgYXMgZm9yIFpfU1lOQ19GTFVTSC4KKyAgVGhpcyBjb21wbGV0ZXMgdGhlIGN1cnJlbnQg ZGVmbGF0ZSBibG9jayBhbmQgZm9sbG93cyBpdCB3aXRoIGFuIGVtcHR5IGZpeGVkCisgIGNvZGVz IGJsb2NrIHRoYXQgaXMgMTAgYml0cyBsb25nLiAgVGhpcyBhc3N1cmVzIHRoYXQgZW5vdWdoIGJ5 dGVzIGFyZSBvdXRwdXQKKyAgaW4gb3JkZXIgZm9yIHRoZSBkZWNvbXByZXNzb3IgdG8gZmluaXNo IHRoZSBibG9jayBiZWZvcmUgdGhlIGVtcHR5IGZpeGVkCisgIGNvZGVzIGJsb2NrLgorCisgICAg SWYgZmx1c2ggaXMgc2V0IHRvIFpfQkxPQ0ssIGEgZGVmbGF0ZSBibG9jayBpcyBjb21wbGV0ZWQg YW5kIGVtaXR0ZWQsIGFzCisgIGZvciBaX1NZTkNfRkxVU0gsIGJ1dCB0aGUgb3V0cHV0IGlzIG5v dCBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgYW5kIHVwIHRvCisgIHNldmVuIGJpdHMgb2Yg dGhlIGN1cnJlbnQgYmxvY2sgYXJlIGhlbGQgdG8gYmUgd3JpdHRlbiBhcyB0aGUgbmV4dCBieXRl IGFmdGVyCisgIHRoZSBuZXh0IGRlZmxhdGUgYmxvY2sgaXMgY29tcGxldGVkLiAgSW4gdGhpcyBj YXNlLCB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKKyAgYmUgcHJvdmlkZWQgZW5vdWdoIGJpdHMg YXQgdGhpcyBwb2ludCBpbiBvcmRlciB0byBjb21wbGV0ZSBkZWNvbXByZXNzaW9uIG9mCisgIHRo ZSBkYXRhIHByb3ZpZGVkIHNvIGZhciB0byB0aGUgY29tcHJlc3Nvci4gIEl0IG1heSBuZWVkIHRv IHdhaXQgZm9yIHRoZSBuZXh0CisgIGJsb2NrIHRvIGJlIGVtaXR0ZWQuICBUaGlzIGlzIGZvciBh ZHZhbmNlZCBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGNvbnRyb2wKKyAgdGhlIGVtaXNzaW9u IG9mIGRlZmxhdGUgYmxvY2tzLgogCiAgICAgSWYgZmx1c2ggaXMgc2V0IHRvIFpfRlVMTF9GTFVT SCwgYWxsIG91dHB1dCBpcyBmbHVzaGVkIGFzIHdpdGgKICAgWl9TWU5DX0ZMVVNILCBhbmQgdGhl IGNvbXByZXNzaW9uIHN0YXRlIGlzIHJlc2V0IHNvIHRoYXQgZGVjb21wcmVzc2lvbiBjYW4KICAg cmVzdGFydCBmcm9tIHRoaXMgcG9pbnQgaWYgcHJldmlvdXMgY29tcHJlc3NlZCBkYXRhIGhhcyBi ZWVuIGRhbWFnZWQgb3IgaWYKLSAgcmFuZG9tIGFjY2VzcyBpcyBkZXNpcmVkLiBVc2luZyBaX0ZV TExfRkxVU0ggdG9vIG9mdGVuIGNhbiBzZXJpb3VzbHkgZGVncmFkZQotICB0aGUgY29tcHJlc3Np b24uCisgIHJhbmRvbSBhY2Nlc3MgaXMgZGVzaXJlZC4gIFVzaW5nIFpfRlVMTF9GTFVTSCB0b28g b2Z0ZW4gY2FuIHNlcmlvdXNseSBkZWdyYWRlCisgIGNvbXByZXNzaW9uLgogCiAgICAgSWYgZGVm bGF0ZSByZXR1cm5zIHdpdGggYXZhaWxfb3V0ID09IDAsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBj YWxsZWQgYWdhaW4KICAgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgZmx1c2ggcGFyYW1ldGVy IGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZAogICBhdmFpbF9vdXQpLCB1bnRpbCB0aGUg Zmx1c2ggaXMgY29tcGxldGUgKGRlZmxhdGUgcmV0dXJucyB3aXRoIG5vbi16ZXJvCi0gIGF2YWls X291dCkuIEluIHRoZSBjYXNlIG9mIGEgWl9GVUxMX0ZMVVNIIG9yIFpfU1lOQ19GTFVTSCwgbWFr ZSBzdXJlIHRoYXQKKyAgYXZhaWxfb3V0KS4gIEluIHRoZSBjYXNlIG9mIGEgWl9GVUxMX0ZMVVNI IG9yIFpfU1lOQ19GTFVTSCwgbWFrZSBzdXJlIHRoYXQKICAgYXZhaWxfb3V0IGlzIGdyZWF0ZXIg dGhhbiBzaXggdG8gYXZvaWQgcmVwZWF0ZWQgZmx1c2ggbWFya2VycyBkdWUgdG8KICAgYXZhaWxf b3V0ID09IDAgb24gcmV0dXJuLgogCiAgICAgSWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQg dG8gWl9GSU5JU0gsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkLAotICBwZW5kaW5nIG91dHB1 dCBpcyBmbHVzaGVkIGFuZCBkZWZsYXRlIHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgaWYgdGhl cmUKLSAgd2FzIGVub3VnaCBvdXRwdXQgc3BhY2U7IGlmIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpf T0ssIHRoaXMgZnVuY3Rpb24gbXVzdCBiZQotICBjYWxsZWQgYWdhaW4gd2l0aCBaX0ZJTklTSCBh bmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQgYXZhaWxfb3V0KSBidXQgbm8KLSAgbW9yZSBp bnB1dCBkYXRhLCB1bnRpbCBpdCByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIG9yIGFuIGVycm9y LiBBZnRlcgotICBkZWZsYXRlIGhhcyByZXR1cm5lZCBaX1NUUkVBTV9FTkQsIHRoZSBvbmx5IHBv c3NpYmxlIG9wZXJhdGlvbnMgb24gdGhlCi0gIHN0cmVhbSBhcmUgZGVmbGF0ZVJlc2V0IG9yIGRl ZmxhdGVFbmQuCisgIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgYW5kIGRlZmxhdGUgcmV0dXJu cyB3aXRoIFpfU1RSRUFNX0VORCBpZiB0aGVyZSB3YXMKKyAgZW5vdWdoIG91dHB1dCBzcGFjZS4g IElmIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfT0sgb3IgWl9CVUZfRVJST1IsIHRoaXMKKyAgZnVu Y3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBaX0ZJTklTSCBhbmQgbW9yZSBvdXRwdXQg c3BhY2UgKHVwZGF0ZWQKKyAgYXZhaWxfb3V0KSBidXQgbm8gbW9yZSBpbnB1dCBkYXRhLCB1bnRp bCBpdCByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIG9yIGFuCisgIGVycm9yLiAgQWZ0ZXIgZGVm bGF0ZSBoYXMgcmV0dXJuZWQgWl9TVFJFQU1fRU5ELCB0aGUgb25seSBwb3NzaWJsZSBvcGVyYXRp b25zCisgIG9uIHRoZSBzdHJlYW0gYXJlIGRlZmxhdGVSZXNldCBvciBkZWZsYXRlRW5kLgogCi0g ICAgWl9GSU5JU0ggY2FuIGJlIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQgaWYg YWxsIHRoZSBjb21wcmVzc2lvbgotICBpcyB0byBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAuIElu IHRoaXMgY2FzZSwgYXZhaWxfb3V0IG11c3QgYmUgYXQgbGVhc3QKLSAgdGhlIHZhbHVlIHJldHVy bmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gSWYgZGVmbGF0ZSBkb2VzIG5vdCByZXR1 cm4KLSAgWl9TVFJFQU1fRU5ELCB0aGVuIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2Ny aWJlZCBhYm92ZS4KKyAgICBaX0ZJTklTSCBjYW4gYmUgdXNlZCBpbiB0aGUgZmlyc3QgZGVmbGF0 ZSBjYWxsIGFmdGVyIGRlZmxhdGVJbml0IGlmIGFsbCB0aGUKKyAgY29tcHJlc3Npb24gaXMgdG8g YmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiAgSW4gb3JkZXIgdG8gY29tcGxldGUgaW4gb25lCisg IGNhbGwsIGF2YWlsX291dCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBk ZWZsYXRlQm91bmQgKHNlZQorICBiZWxvdykuICBUaGVuIGRlZmxhdGUgaXMgZ3VhcmFudGVlZCB0 byByZXR1cm4gWl9TVFJFQU1fRU5ELiAgSWYgbm90IGVub3VnaAorICBvdXRwdXQgc3BhY2UgaXMg cHJvdmlkZWQsIGRlZmxhdGUgd2lsbCBub3QgcmV0dXJuIFpfU1RSRUFNX0VORCwgYW5kIGl0IG11 c3QKKyAgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KIAotICAgIGRlZmxhdGUo KSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCBy ZWFkCi0gIHNvIGZhciAodGhhdCBpcywgdG90YWxfaW4gYnl0ZXMpLgorICAgIGRlZmxhdGUoKSBz ZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVh ZAorICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4gIElmIGEgZ3ppcCBzdHJlYW0g aXMgYmVpbmcgZ2VuZXJhdGVkLCB0aGVuCisgIHN0cm0tPmFkbGVyIHdpbGwgYmUgdGhlIENSQy0z MiBjaGVja3N1bSBvZiB0aGUgaW5wdXQgcmVhZCBzbyBmYXIuICAoU2VlCisgIGRlZmxhdGVJbml0 MiBiZWxvdy4pCiAKLSAgICBkZWZsYXRlKCkgbWF5IHVwZGF0ZSBkYXRhX3R5cGUgaWYgaXQgY2Fu IG1ha2UgYSBnb29kIGd1ZXNzIGFib3V0Ci0gIHRoZSBpbnB1dCBkYXRhIHR5cGUgKFpfQVNDSUkg b3IgWl9CSU5BUlkpLiBJbiBkb3VidCwgdGhlIGRhdGEgaXMgY29uc2lkZXJlZAotICBiaW5hcnku IFRoaXMgZmllbGQgaXMgb25seSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgYW5kIGRvZXMgbm90 IGFmZmVjdAotICB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGluIGFueSBtYW5uZXIuCisgICAg ZGVmbGF0ZSgpIG1heSB1cGRhdGUgc3RybS0+ZGF0YV90eXBlIGlmIGl0IGNhbiBtYWtlIGEgZ29v ZCBndWVzcyBhYm91dAorICB0aGUgaW5wdXQgZGF0YSB0eXBlIChaX0JJTkFSWSBvciBaX1RFWFQp LiAgSWYgaW4gZG91YnQsIHRoZSBkYXRhIGlzCisgIGNvbnNpZGVyZWQgYmluYXJ5LiAgVGhpcyBm aWVsZCBpcyBvbmx5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBhbmQgZG9lcyBub3QKKyAgYWZm ZWN0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gYW55IG1hbm5lci4KIAogICAgIGRlZmxh dGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlu cHV0CiAgIHByb2Nlc3NlZCBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBp ZiBhbGwgaW5wdXQgaGFzIGJlZW4KICAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4g cHJvZHVjZWQgKG9ubHkgd2hlbiBmbHVzaCBpcyBzZXQgdG8KICAgWl9GSU5JU0gpLCBaX1NUUkVB TV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxl Ci0gIGlmIG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIE5VTEwpLCBaX0JVRl9FUlJPUiBpZiBubyBw cm9ncmVzcyBpcyBwb3NzaWJsZQotICAoZm9yIGV4YW1wbGUgYXZhaWxfaW4gb3IgYXZhaWxfb3V0 IHdhcyB6ZXJvKS4gTm90ZSB0aGF0IFpfQlVGX0VSUk9SIGlzIG5vdAotICBmYXRhbCwgYW5kIGRl ZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHdpdGggbW9yZSBpbnB1dCBhbmQgbW9yZSBvdXRw dXQKLSAgc3BhY2UgdG8gY29udGludWUgY29tcHJlc3NpbmcuCisgIGlmIG5leHRfaW4gb3IgbmV4 dF9vdXQgd2FzIFpfTlVMTCBvciB0aGUgc3RhdGUgd2FzIGluYWR2ZXJ0ZW50bHkgd3JpdHRlbiBv dmVyCisgIGJ5IHRoZSBhcHBsaWNhdGlvbiksIG9yIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNz IGlzIHBvc3NpYmxlIChmb3IgZXhhbXBsZQorICBhdmFpbF9pbiBvciBhdmFpbF9vdXQgd2FzIHpl cm8pLiAgTm90ZSB0aGF0IFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgYW5kCisgIGRlZmxhdGUo KSBjYW4gYmUgY2FsbGVkIGFnYWluIHdpdGggbW9yZSBpbnB1dCBhbmQgbW9yZSBvdXRwdXQgc3Bh Y2UgdG8KKyAgY29udGludWUgY29tcHJlc3NpbmcuCiAqLwogCiAKIFpFWFRFUk4gaW50IFpFWFBP UlQgZGVmbGF0ZUVuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCiAgICAgIEFsbCBkeW5hbWlj YWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQu Ci0gICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9l cyBub3QgZmx1c2ggYW55Ci0gICBwZW5kaW5nIG91dHB1dC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlz Y2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkgcGVuZGlu ZworICAgb3V0cHV0LgogCiAgICAgIGRlZmxhdGVFbmQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3Ms IFpfU1RSRUFNX0VSUk9SIGlmIHRoZQogICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQs IFpfREFUQV9FUlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBmcmVlZAotICAgcHJlbWF0dXJlbHkgKHNv bWUgaW5wdXQgb3Igb3V0cHV0IHdhcyBkaXNjYXJkZWQpLiBJbiB0aGUgZXJyb3IgY2FzZSwKLSAg IG1zZyBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgKHdoaWNo IG11c3Qgbm90IGJlCisgICBwcmVtYXR1cmVseSAoc29tZSBpbnB1dCBvciBvdXRwdXQgd2FzIGRp c2NhcmRlZCkuICBJbiB0aGUgZXJyb3IgY2FzZSwgbXNnCisgICBtYXkgYmUgc2V0IGJ1dCB0aGVu IHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlCiAgICBkZWFsbG9j YXRlZCkuCiAqLwogCkBAIC0zMTMsMTM0ICszNzksMTU3IEBACiAvKgogWkVYVEVSTiBpbnQgWkVY UE9SVCBpbmZsYXRlSW5pdCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIAotICAgICBJbml0aWFsaXpl cyB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBkZWNvbXByZXNzaW9uLiBUaGUgZmllbGRz CisgICAgIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGRlY29tcHJl c3Npb24uICBUaGUgZmllbGRzCiAgICBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBh bmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5Ci0gICB0aGUgY2FsbGVyLiBJ ZiBuZXh0X2luIGlzIG5vdCBaX05VTEwgYW5kIGF2YWlsX2luIGlzIGxhcmdlIGVub3VnaCAodGhl IGV4YWN0Ci0gICB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBjb21wcmVzc2lvbiBtZXRob2QpLCBpbmZs YXRlSW5pdCBkZXRlcm1pbmVzIHRoZQotICAgY29tcHJlc3Npb24gbWV0aG9kIGZyb20gdGhlIHps aWIgaGVhZGVyIGFuZCBhbGxvY2F0ZXMgYWxsIGRhdGEgc3RydWN0dXJlcwotICAgYWNjb3JkaW5n bHk7IG90aGVyd2lzZSB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlIGRlZmVycmVkIHRvIHRoZSBmaXJz dCBjYWxsIG9mCi0gICBpbmZsYXRlLiAgSWYgemFsbG9jIGFuZCB6ZnJlZSBhcmUgc2V0IHRvIFpf TlVMTCwgaW5mbGF0ZUluaXQgdXBkYXRlcyB0aGVtIHRvCi0gICB1c2UgZGVmYXVsdCBhbGxvY2F0 aW9uIGZ1bmN0aW9ucy4KKyAgIHRoZSBjYWxsZXIuICBJbiB0aGUgY3VycmVudCB2ZXJzaW9uIG9m IGluZmxhdGUsIHRoZSBwcm92aWRlZCBpbnB1dCBpcyBub3QKKyAgIHJlYWQgb3IgY29uc3VtZWQu ICBUaGUgYWxsb2NhdGlvbiBvZiBhIHNsaWRpbmcgd2luZG93IHdpbGwgYmUgZGVmZXJyZWQgdG8K KyAgIHRoZSBmaXJzdCBjYWxsIG9mIGluZmxhdGUgKGlmIHRoZSBkZWNvbXByZXNzaW9uIGRvZXMg bm90IGNvbXBsZXRlIG9uIHRoZQorICAgZmlyc3QgY2FsbCkuICBJZiB6YWxsb2MgYW5kIHpmcmVl IGFyZSBzZXQgdG8gWl9OVUxMLCBpbmZsYXRlSW5pdCB1cGRhdGVzCisgICB0aGVtIHRvIHVzZSBk ZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgogCiAgICAgIGluZmxhdGVJbml0IHJldHVybnMg Wl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAogICAg bWVtb3J5LCBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uIGlzIGlu Y29tcGF0aWJsZSB3aXRoIHRoZQotICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIuICBt c2cgaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IKLSAgIG1lc3NhZ2UuIGluZmxh dGVJbml0IGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24gYXBhcnQgZnJvbSByZWFk aW5nCi0gICB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogdGhpcyB3aWxsIGJlIGRvbmUgYnkg aW5mbGF0ZSgpLiAgKFNvIG5leHRfaW4gYW5kCi0gICBhdmFpbF9pbiBtYXkgYmUgbW9kaWZpZWQs IGJ1dCBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bmNoYW5nZWQuKQorICAgdmVyc2lvbiBh c3N1bWVkIGJ5IHRoZSBjYWxsZXIsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBwYXJhbWV0ZXJz IGFyZQorICAgaW52YWxpZCwgc3VjaCBhcyBhIG51bGwgcG9pbnRlciB0byB0aGUgc3RydWN0dXJl LiAgbXNnIGlzIHNldCB0byBudWxsIGlmCisgICB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAg aW5mbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbi4KKyAgIEFjdHVh bCBkZWNvbXByZXNzaW9uIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICBTbyBuZXh0X2luLCBh bmQgYXZhaWxfaW4sCisgICBuZXh0X291dCwgYW5kIGF2YWlsX291dCBhcmUgdW51c2VkIGFuZCB1 bmNoYW5nZWQuICBUaGUgY3VycmVudAorICAgaW1wbGVtZW50YXRpb24gb2YgaW5mbGF0ZUluaXQo KSBkb2VzIG5vdCBwcm9jZXNzIGFueSBoZWFkZXIgaW5mb3JtYXRpb24gLS0KKyAgIHRoYXQgaXMg ZGVmZXJyZWQgdW50aWwgaW5mbGF0ZSgpIGlzIGNhbGxlZC4KICovCiAKIAogWkVYVEVSTiBpbnQg WkVYUE9SVCBpbmZsYXRlIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGZsdXNoKSk7CiAvKgogICAg IGluZmxhdGUgZGVjb21wcmVzc2VzIGFzIG11Y2ggZGF0YSBhcyBwb3NzaWJsZSwgYW5kIHN0b3Bz IHdoZW4gdGhlIGlucHV0Ci0gIGJ1ZmZlciBiZWNvbWVzIGVtcHR5IG9yIHRoZSBvdXRwdXQgYnVm ZmVyIGJlY29tZXMgZnVsbC4gSXQgbWF5IGludHJvZHVjZQorICBidWZmZXIgYmVjb21lcyBlbXB0 eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuICBJdCBtYXkgaW50cm9kdWNlCiAg IHNvbWUgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55 IG91dHB1dCkgZXhjZXB0IHdoZW4KICAgZm9yY2VkIHRvIGZsdXNoLgogCi0gIFRoZSBkZXRhaWxl ZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuIGluZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGgg b2YgdGhlCisgIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuICBpbmZsYXRl IHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQogICBmb2xsb3dpbmcgYWN0aW9uczoKIAogICAt IERlY29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCBuZXh0X2luIGFuZCB1cGRhdGUgbmV4 dF9pbiBhbmQgYXZhaWxfaW4KLSAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFsbCBpbnB1dCBjYW4g YmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAotICAgIGVub3VnaCByb29tIGluIHRo ZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBpcyB1cGRhdGVkIGFuZCBwcm9jZXNzaW5nCi0gICAg d2lsbCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZiBpbmZsYXRlKCku CisgICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJl Y2F1c2UgdGhlcmUgaXMgbm90CisgICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIp LCB0aGVuIG5leHRfaW4gYW5kIGF2YWlsX2luIGFyZSB1cGRhdGVkCisgICAgYWNjb3JkaW5nbHks IGFuZCBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBuZXh0IGNh bGwgb2YKKyAgICBpbmZsYXRlKCkuCiAKLSAgLSBQcm92aWRlIG1vcmUgb3V0cHV0IHN0YXJ0aW5n IGF0IG5leHRfb3V0IGFuZCB1cGRhdGUgbmV4dF9vdXQgYW5kIGF2YWlsX291dAotICAgIGFjY29y ZGluZ2x5LiAgaW5mbGF0ZSgpIHByb3ZpZGVzIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLCB1 bnRpbCB0aGVyZQotICAgIGlzIG5vIG1vcmUgaW5wdXQgZGF0YSBvciBubyBtb3JlIHNwYWNlIGlu IHRoZSBvdXRwdXQgYnVmZmVyIChzZWUgYmVsb3cKLSAgICBhYm91dCB0aGUgZmx1c2ggcGFyYW1l dGVyKS4KKyAgLSBHZW5lcmF0ZSBtb3JlIG91dHB1dCBzdGFydGluZyBhdCBuZXh0X291dCBhbmQg dXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQKKyAgICBhY2NvcmRpbmdseS4gIGluZmxhdGUo KSBwcm92aWRlcyBhcyBtdWNoIG91dHB1dCBhcyBwb3NzaWJsZSwgdW50aWwgdGhlcmUgaXMKKyAg ICBubyBtb3JlIGlucHV0IGRhdGEgb3Igbm8gbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZl ciAoc2VlIGJlbG93IGFib3V0CisgICAgdGhlIGZsdXNoIHBhcmFtZXRlcikuCiAKLSAgQmVmb3Jl IHRoZSBjYWxsIG9mIGluZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhh dCBhdCBsZWFzdAotICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGlu ZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcKLSAgbW9yZSBvdXRwdXQsIGFuZCB1cGRhdGlu ZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4KLSAgVGhlIGFwcGxp Y2F0aW9uIGNhbiBjb25zdW1lIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdoZW4gaXQgd2FudHMs IGZvcgotICBleGFtcGxlIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxfb3V0 ID09IDApLCBvciBhZnRlciBlYWNoCi0gIGNhbGwgb2YgaW5mbGF0ZSgpLiBJZiBpbmZsYXRlIHJl dHVybnMgWl9PSyBhbmQgd2l0aCB6ZXJvIGF2YWlsX291dCwgaXQKLSAgbXVzdCBiZSBjYWxsZWQg YWdhaW4gYWZ0ZXIgbWFraW5nIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIgYmVjYXVzZSB0aGVy ZQotICBtaWdodCBiZSBtb3JlIG91dHB1dCBwZW5kaW5nLgorICAgIEJlZm9yZSB0aGUgY2FsbCBv ZiBpbmZsYXRlKCksIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZW5zdXJlIHRoYXQgYXQgbGVhc3QK KyAgb25lIG9mIHRoZSBhY3Rpb25zIGlzIHBvc3NpYmxlLCBieSBwcm92aWRpbmcgbW9yZSBpbnB1 dCBhbmQvb3IgY29uc3VtaW5nIG1vcmUKKyAgb3V0cHV0LCBhbmQgdXBkYXRpbmcgdGhlIG5leHRf KiBhbmQgYXZhaWxfKiB2YWx1ZXMgYWNjb3JkaW5nbHkuICBJZiB0aGUKKyAgY2FsbGVyIG9mIGlu ZmxhdGUoKSBkb2VzIG5vdCBwcm92aWRlIGJvdGggYXZhaWxhYmxlIGlucHV0IGFuZCBhdmFpbGFi bGUKKyAgb3V0cHV0IHNwYWNlLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdpbGwgYmUgbm8g cHJvZ3Jlc3MgbWFkZS4gIFRoZQorICBhcHBsaWNhdGlvbiBjYW4gY29uc3VtZSB0aGUgdW5jb21w cmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZQorICB3aGVuIHRoZSBvdXRw dXQgYnVmZmVyIGlzIGZ1bGwgKGF2YWlsX291dCA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9m CisgIGluZmxhdGUoKS4gIElmIGluZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRoIHplcm8gYXZh aWxfb3V0LCBpdCBtdXN0IGJlCisgIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0 aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlCisgIG1vcmUgb3V0cHV0IHBl bmRpbmcuCiAKLSAgICBUaGUgZmx1c2ggcGFyYW1ldGVyIG9mIGluZmxhdGUoKSBjYW4gYmUgWl9O T19GTFVTSCwgWl9TWU5DX0ZMVVNILAotICBaX0ZJTklTSCwgb3IgWl9CTE9DSy4gWl9TWU5DX0ZM VVNIIHJlcXVlc3RzIHRoYXQgaW5mbGF0ZSgpIGZsdXNoIGFzIG11Y2gKLSAgb3V0cHV0IGFzIHBv c3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiBaX0JMT0NLIHJlcXVlc3RzIHRoYXQgaW5mbGF0 ZSgpIHN0b3AKLSAgaWYgYW5kIHdoZW4gaXQgZ2V0IHRvIHRoZSBuZXh0IGRlZmxhdGUgYmxvY2sg Ym91bmRhcnkuIFdoZW4gZGVjb2RpbmcgdGhlIHpsaWIKLSAgb3IgZ3ppcCBmb3JtYXQsIHRoaXMg d2lsbCBjYXVzZSBpbmZsYXRlKCkgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZQotICBo ZWFkZXIgYW5kIGJlZm9yZSB0aGUgZmlyc3QgYmxvY2suIFdoZW4gZG9pbmcgYSByYXcgaW5mbGF0 ZSwgaW5mbGF0ZSgpIHdpbGwKLSAgZ28gYWhlYWQgYW5kIHByb2Nlc3MgdGhlIGZpcnN0IGJsb2Nr LCBhbmQgd2lsbCByZXR1cm4gd2hlbiBpdCBnZXRzIHRvIHRoZSBlbmQKLSAgb2YgdGhhdCBibG9j aywgb3Igd2hlbiBpdCBydW5zIG91dCBvZiBkYXRhLgorICAgIFRoZSBmbHVzaCBwYXJhbWV0ZXIg b2YgaW5mbGF0ZSgpIGNhbiBiZSBaX05PX0ZMVVNILCBaX1NZTkNfRkxVU0gsIFpfRklOSVNILAor ICBaX0JMT0NLLCBvciBaX1RSRUVTLiAgWl9TWU5DX0ZMVVNIIHJlcXVlc3RzIHRoYXQgaW5mbGF0 ZSgpIGZsdXNoIGFzIG11Y2gKKyAgb3V0cHV0IGFzIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVm ZmVyLiAgWl9CTE9DSyByZXF1ZXN0cyB0aGF0IGluZmxhdGUoKQorICBzdG9wIGlmIGFuZCB3aGVu IGl0IGdldHMgdG8gdGhlIG5leHQgZGVmbGF0ZSBibG9jayBib3VuZGFyeS4gIFdoZW4gZGVjb2Rp bmcKKyAgdGhlIHpsaWIgb3IgZ3ppcCBmb3JtYXQsIHRoaXMgd2lsbCBjYXVzZSBpbmZsYXRlKCkg dG8gcmV0dXJuIGltbWVkaWF0ZWx5CisgIGFmdGVyIHRoZSBoZWFkZXIgYW5kIGJlZm9yZSB0aGUg Zmlyc3QgYmxvY2suICBXaGVuIGRvaW5nIGEgcmF3IGluZmxhdGUsCisgIGluZmxhdGUoKSB3aWxs IGdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBmaXJzdCBibG9jaywgYW5kIHdpbGwgcmV0dXJuIHdo ZW4gaXQKKyAgZ2V0cyB0byB0aGUgZW5kIG9mIHRoYXQgYmxvY2ssIG9yIHdoZW4gaXQgcnVucyBv dXQgb2YgZGF0YS4KIAogICAgIFRoZSBaX0JMT0NLIG9wdGlvbiBhc3Npc3RzIGluIGFwcGVuZGlu ZyB0byBvciBjb21iaW5pbmcgZGVmbGF0ZSBzdHJlYW1zLgotICBBbHNvIHRvIGFzc2lzdCBpbiB0 aGlzLCBvbiByZXR1cm4gaW5mbGF0ZSgpIHdpbGwgc2V0IHN0cm0tPmRhdGFfdHlwZSB0byB0aGUK LSAgbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgdGFrZW4gZnJvbSBzdHJt LT5uZXh0X2luLCBwbHVzIDY0Ci0gIGlmIGluZmxhdGUoKSBpcyBjdXJyZW50bHkgZGVjb2Rpbmcg dGhlIGxhc3QgYmxvY2sgaW4gdGhlIGRlZmxhdGUgc3RyZWFtLAotICBwbHVzIDEyOCBpZiBpbmZs YXRlKCkgcmV0dXJuZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVjb2RpbmcgYW4gZW5kLW9mLWJsb2Nr Ci0gIGNvZGUgb3IgZGVjb2RpbmcgdGhlIGNvbXBsZXRlIGhlYWRlciB1cCB0byBqdXN0IGJlZm9y ZSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUKLSAgZGVmbGF0ZSBzdHJlYW0uIFRoZSBlbmQtb2YtYmxv Y2sgd2lsbCBub3QgYmUgaW5kaWNhdGVkIHVudGlsIGFsbCBvZiB0aGUKLSAgdW5jb21wcmVzc2Vk IGRhdGEgZnJvbSB0aGF0IGJsb2NrIGhhcyBiZWVuIHdyaXR0ZW4gdG8gc3RybS0+bmV4dF9vdXQu ICBUaGUKLSAgbnVtYmVyIG9mIHVudXNlZCBiaXRzIG1heSBpbiBnZW5lcmFsIGJlIGdyZWF0ZXIg dGhhbiBzZXZlbiwgZXhjZXB0IHdoZW4KLSAgYml0IDcgb2YgZGF0YV90eXBlIGlzIHNldCwgaW4g d2hpY2ggY2FzZSB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzIHdpbGwgYmUKLSAgbGVzcyB0aGFu IGVpZ2h0LgorICBUbyBhc3Npc3QgaW4gdGhpcywgb24gcmV0dXJuIGluZmxhdGUoKSBhbHdheXMg c2V0cyBzdHJtLT5kYXRhX3R5cGUgdG8gdGhlCisgIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0 aGUgbGFzdCBieXRlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pbiwgcGx1cyA2NCBpZgorICBpbmZs YXRlKCkgaXMgY3VycmVudGx5IGRlY29kaW5nIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBkZWZsYXRl IHN0cmVhbSwgcGx1cworICAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGltbWVkaWF0ZWx5IGFm dGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jayBjb2RlIG9yCisgIGRlY29kaW5nIHRoZSBjb21w bGV0ZSBoZWFkZXIgdXAgdG8ganVzdCBiZWZvcmUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGRlZmxh dGUKKyAgc3RyZWFtLiAgVGhlIGVuZC1vZi1ibG9jayB3aWxsIG5vdCBiZSBpbmRpY2F0ZWQgdW50 aWwgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQKKyAgZGF0YSBmcm9tIHRoYXQgYmxvY2sgaGFzIGJl ZW4gd3JpdHRlbiB0byBzdHJtLT5uZXh0X291dC4gIFRoZSBudW1iZXIgb2YKKyAgdW51c2VkIGJp dHMgbWF5IGluIGdlbmVyYWwgYmUgZ3JlYXRlciB0aGFuIHNldmVuLCBleGNlcHQgd2hlbiBiaXQg NyBvZgorICBkYXRhX3R5cGUgaXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgb2YgdW51 c2VkIGJpdHMgd2lsbCBiZSBsZXNzIHRoYW4KKyAgZWlnaHQuICBkYXRhX3R5cGUgaXMgc2V0IGFz IG5vdGVkIGhlcmUgZXZlcnkgdGltZSBpbmZsYXRlKCkgcmV0dXJucyBmb3IgYWxsCisgIGZsdXNo IG9wdGlvbnMsIGFuZCBzbyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBj dXJyZW50bHkKKyAgY29uc3VtZWQgaW5wdXQgaW4gYml0cy4KKworICAgIFRoZSBaX1RSRUVTIG9w dGlvbiBiZWhhdmVzIGFzIFpfQkxPQ0sgZG9lcywgYnV0IGl0IGFsc28gcmV0dXJucyB3aGVuIHRo ZQorICBlbmQgb2YgZWFjaCBkZWZsYXRlIGJsb2NrIGhlYWRlciBpcyByZWFjaGVkLCBiZWZvcmUg YW55IGFjdHVhbCBkYXRhIGluIHRoYXQKKyAgYmxvY2sgaXMgZGVjb2RlZC4gIFRoaXMgYWxsb3dz IHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlCisgIGRlZmxhdGUgYmxv Y2sgaGVhZGVyIGZvciBsYXRlciB1c2UgaW4gcmFuZG9tIGFjY2VzcyB3aXRoaW4gYSBkZWZsYXRl IGJsb2NrLgorICAyNTYgaXMgYWRkZWQgdG8gdGhlIHZhbHVlIG9mIHN0cm0tPmRhdGFfdHlwZSB3 aGVuIGluZmxhdGUoKSByZXR1cm5zCisgIGltbWVkaWF0ZWx5IGFmdGVyIHJlYWNoaW5nIHRoZSBl bmQgb2YgdGhlIGRlZmxhdGUgYmxvY2sgaGVhZGVyLgogCiAgICAgaW5mbGF0ZSgpIHNob3VsZCBu b3JtYWxseSBiZSBjYWxsZWQgdW50aWwgaXQgcmV0dXJucyBaX1NUUkVBTV9FTkQgb3IgYW4KLSAg ZXJyb3IuIEhvd2V2ZXIgaWYgYWxsIGRlY29tcHJlc3Npb24gaXMgdG8gYmUgcGVyZm9ybWVkIGlu IGEgc2luZ2xlIHN0ZXAKLSAgKGEgc2luZ2xlIGNhbGwgb2YgaW5mbGF0ZSksIHRoZSBwYXJhbWV0 ZXIgZmx1c2ggc2hvdWxkIGJlIHNldCB0bwotICBaX0ZJTklTSC4gSW4gdGhpcyBjYXNlIGFsbCBw ZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCBhbmQgYWxsIHBlbmRpbmcKLSAgb3V0cHV0IGlzIGZs dXNoZWQ7IGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUKLSAg dW5jb21wcmVzc2VkIGRhdGEuIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5 IGhhdmUgYmVlbiBzYXZlZAotICBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcyBwdXJwb3NlLikg VGhlIG5leHQgb3BlcmF0aW9uIG9uIHRoaXMgc3RyZWFtIG11c3QKLSAgYmUgaW5mbGF0ZUVuZCB0 byBkZWFsbG9jYXRlIHRoZSBkZWNvbXByZXNzaW9uIHN0YXRlLiBUaGUgdXNlIG9mIFpfRklOSVNI Ci0gIGlzIG5ldmVyIHJlcXVpcmVkLCBidXQgY2FuIGJlIHVzZWQgdG8gaW5mb3JtIGluZmxhdGUg dGhhdCBhIGZhc3RlciBhcHByb2FjaAotICBtYXkgYmUgdXNlZCBmb3IgdGhlIHNpbmdsZSBpbmZs YXRlKCkgY2FsbC4KKyAgZXJyb3IuICBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRv IGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwIChhCisgIHNpbmdsZSBjYWxsIG9mIGluZmxh dGUpLCB0aGUgcGFyYW1ldGVyIGZsdXNoIHNob3VsZCBiZSBzZXQgdG8gWl9GSU5JU0guICBJbgor ICB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGlu ZyBvdXRwdXQgaXMgZmx1c2hlZDsKKyAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRv IGhvbGQgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBmb3IgdGhlCisgIG9wZXJhdGlvbiB0 byBjb21wbGV0ZS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUg YmVlbgorICBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcyBwdXJwb3NlLikgIFRoZSB1 c2Ugb2YgWl9GSU5JU0ggaXMgbm90CisgIHJlcXVpcmVkIHRvIHBlcmZvcm0gYW4gaW5mbGF0aW9u IGluIG9uZSBzdGVwLiAgSG93ZXZlciBpdCBtYXkgYmUgdXNlZCB0bworICBpbmZvcm0gaW5mbGF0 ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIGNhbiBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIGluZmxh dGUoKQorICBjYWxsLiAgWl9GSU5JU0ggYWxzbyBpbmZvcm1zIGluZmxhdGUgdG8gbm90IG1haW50 YWluIGEgc2xpZGluZyB3aW5kb3cgaWYgdGhlCisgIHN0cmVhbSBjb21wbGV0ZXMsIHdoaWNoIHJl ZHVjZXMgaW5mbGF0ZSdzIG1lbW9yeSBmb290cHJpbnQuICBJZiB0aGUgc3RyZWFtCisgIGRvZXMg bm90IGNvbXBsZXRlLCBlaXRoZXIgYmVjYXVzZSBub3QgYWxsIG9mIHRoZSBzdHJlYW0gaXMgcHJv dmlkZWQgb3Igbm90CisgIGVub3VnaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIHRoZW4gYSBz bGlkaW5nIHdpbmRvdyB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAgaW5mbGF0ZSgpIGNhbiBiZSBj YWxsZWQgYWdhaW4gdG8gY29udGludWUgdGhlIG9wZXJhdGlvbiBhcyBpZiBaX05PX0ZMVVNIIGhh ZAorICBiZWVuIHVzZWQuCiAKICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgaW5mbGF0ZSgp IGFsd2F5cyBmbHVzaGVzIGFzIG11Y2ggb3V0cHV0IGFzCiAgIHBvc3NpYmxlIHRvIHRoZSBvdXRw dXQgYnVmZmVyLCBhbmQgYWx3YXlzIHVzZXMgdGhlIGZhc3RlciBhcHByb2FjaCBvbiB0aGUKLSAg Zmlyc3QgY2FsbC4gU28gdGhlIG9ubHkgZWZmZWN0IG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaW4g dGhpcyBpbXBsZW1lbnRhdGlvbgotICBpcyBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUo KSwgYXMgbm90ZWQgYmVsb3csIG9yIHdoZW4gaXQgcmV0dXJucyBlYXJseQotICBiZWNhdXNlIFpf QkxPQ0sgaXMgdXNlZC4KKyAgZmlyc3QgY2FsbC4gIFNvIHRoZSBlZmZlY3RzIG9mIHRoZSBmbHVz aCBwYXJhbWV0ZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmUKKyAgb24gdGhlIHJldHVybiB2 YWx1ZSBvZiBpbmZsYXRlKCkgYXMgbm90ZWQgYmVsb3csIHdoZW4gaW5mbGF0ZSgpIHJldHVybnMg ZWFybHkKKyAgd2hlbiBaX0JMT0NLIG9yIFpfVFJFRVMgaXMgdXNlZCwgYW5kIHdoZW4gaW5mbGF0 ZSgpIGF2b2lkcyB0aGUgYWxsb2NhdGlvbiBvZgorICBtZW1vcnkgZm9yIGEgc2xpZGluZyB3aW5k b3cgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLgogCiAgICAgIElmIGEgcHJlc2V0IGRpY3Rpb25hcnkg aXMgbmVlZGVkIGFmdGVyIHRoaXMgY2FsbCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5Ci0gIGJl bG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9m IHRoZSBkaWN0aW9uYXJ5CisgIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRo ZSBBZGxlci0zMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQogICBjaG9zZW4gYnkgdGhlIGNv bXByZXNzb3IgYW5kIHJldHVybnMgWl9ORUVEX0RJQ1Q7IG90aGVyd2lzZSBpdCBzZXRzCi0gIHN0 cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQg c28gZmFyICh0aGF0IGlzLAorICBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0g b2YgYWxsIG91dHB1dCBwcm9kdWNlZCBzbyBmYXIgKHRoYXQgaXMsCiAgIHRvdGFsX291dCBieXRl cykgYW5kIHJldHVybnMgWl9PSywgWl9TVFJFQU1fRU5EIG9yIGFuIGVycm9yIGNvZGUgYXMgZGVz Y3JpYmVkCi0gIGJlbG93LiBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGluZmxhdGUoKSBjaGVj a3MgdGhhdCBpdHMgY29tcHV0ZWQgYWRsZXIzMgorICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhl IHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBBZGxlci0zMgogICBj aGVja3N1bSBpcyBlcXVhbCB0byB0aGF0IHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1 cm5zIFpfU1RSRUFNX0VORAogICBvbmx5IGlmIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0LgogCi0g ICAgaW5mbGF0ZSgpIHdpbGwgZGVjb21wcmVzcyBhbmQgY2hlY2sgZWl0aGVyIHpsaWItd3JhcHBl ZCBvciBnemlwLXdyYXBwZWQKLSAgZGVmbGF0ZSBkYXRhLiAgVGhlIGhlYWRlciB0eXBlIGlzIGRl dGVjdGVkIGF1dG9tYXRpY2FsbHkuICBBbnkgaW5mb3JtYXRpb24KLSAgY29udGFpbmVkIGluIHRo ZSBnemlwIGhlYWRlciBpcyBub3QgcmV0YWluZWQsIHNvIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQg dGhhdAotICBpbmZvcm1hdGlvbiBzaG91bGQgaW5zdGVhZCB1c2UgcmF3IGluZmxhdGUsIHNlZSBp bmZsYXRlSW5pdDIoKSBiZWxvdywgb3IKLSAgaW5mbGF0ZUJhY2soKSBhbmQgcGVyZm9ybSB0aGVp ciBvd24gcHJvY2Vzc2luZyBvZiB0aGUgZ3ppcCBoZWFkZXIgYW5kCi0gIHRyYWlsZXIuCisgICAg aW5mbGF0ZSgpIGNhbiBkZWNvbXByZXNzIGFuZCBjaGVjayBlaXRoZXIgemxpYi13cmFwcGVkIG9y IGd6aXAtd3JhcHBlZAorICBkZWZsYXRlIGRhdGEuICBUaGUgaGVhZGVyIHR5cGUgaXMgZGV0ZWN0 ZWQgYXV0b21hdGljYWxseSwgaWYgcmVxdWVzdGVkIHdoZW4KKyAgaW5pdGlhbGl6aW5nIHdpdGgg aW5mbGF0ZUluaXQyKCkuICBBbnkgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBnemlwCisg IGhlYWRlciBpcyBub3QgcmV0YWluZWQgdW5sZXNzIGluZmxhdGVHZXRIZWFkZXIoKSBpcyB1c2Vk LiAgV2hlbiBwcm9jZXNzaW5nCisgIGd6aXAtd3JhcHBlZCBkZWZsYXRlIGRhdGEsIHN0cm0tPmFk bGVyMzIgaXMgc2V0IHRvIHRoZSBDUkMtMzIgb2YgdGhlIG91dHB1dAorICBwcm9kdWNlZCBzbyBm YXIuICBUaGUgQ1JDLTMyIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ3ppcCB0cmFpbGVyLCBhcyBp cyB0aGUKKyAgdW5jb21wcmVzc2VkIGxlbmd0aCwgbW9kdWxvIDJeMzIuCiAKICAgICBpbmZsYXRl KCkgcmV0dXJucyBaX09LIGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1 dCBwcm9jZXNzZWQKICAgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYg dGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGhhcwogICBiZWVuIHJlYWNoZWQgYW5kIGFs bCB1bmNvbXByZXNzZWQgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkLCBaX05FRURfRElDVCBpZiBh CiAgIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhdCB0aGlzIHBvaW50LCBaX0RBVEFfRVJS T1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzCiAgIGNvcnJ1cHRlZCAoaW5wdXQgc3RyZWFtIG5vdCBj b25mb3JtaW5nIHRvIHRoZSB6bGliIGZvcm1hdCBvciBpbmNvcnJlY3QgY2hlY2sKLSAgdmFsdWUp LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50 IChmb3IgZXhhbXBsZQotICBpZiBuZXh0X2luIG9yIG5leHRfb3V0IHdhcyBOVUxMKSwgWl9NRU1f RVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5LAotICBaX0JVRl9FUlJPUiBpZiBu byBwcm9ncmVzcyBpcyBwb3NzaWJsZSBvciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGlu IHRoZQotICBvdXRwdXQgYnVmZmVyIHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4gTm90ZSB0aGF0IFpf QlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgYW5kCisgIHZhbHVlLCBpbiB3aGljaCBjYXNlIHN0cm0t Pm1zZyBwb2ludHMgdG8gYSBzdHJpbmcgd2l0aCBhIG1vcmUgc3BlY2lmaWMKKyAgZXJyb3IpLCBa X1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50IChm b3IgZXhhbXBsZQorICBuZXh0X2luIG9yIG5leHRfb3V0IHdhcyBaX05VTEwsIG9yIHRoZSBzdGF0 ZSB3YXMgaW5hZHZlcnRlbnRseSB3cml0dGVuIG92ZXIKKyAgYnkgdGhlIGFwcGxpY2F0aW9uKSwg Wl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUgor ICBpZiBubyBwcm9ncmVzcyB3YXMgcG9zc2libGUgb3IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gg cm9vbSBpbiB0aGUgb3V0cHV0CisgIGJ1ZmZlciB3aGVuIFpfRklOSVNIIGlzIHVzZWQuICBOb3Rl IHRoYXQgWl9CVUZfRVJST1IgaXMgbm90IGZhdGFsLCBhbmQKICAgaW5mbGF0ZSgpIGNhbiBiZSBj YWxsZWQgYWdhaW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dCBzcGFjZSB0bwotICBj b250aW51ZSBkZWNvbXByZXNzaW5nLiBJZiBaX0RBVEFfRVJST1IgaXMgcmV0dXJuZWQsIHRoZSBh cHBsaWNhdGlvbiBtYXkgdGhlbgotICBjYWxsIGluZmxhdGVTeW5jKCkgdG8gbG9vayBmb3IgYSBn b29kIGNvbXByZXNzaW9uIGJsb2NrIGlmIGEgcGFydGlhbCByZWNvdmVyeQotICBvZiB0aGUgZGF0 YSBpcyBkZXNpcmVkLgorICBjb250aW51ZSBkZWNvbXByZXNzaW5nLiAgSWYgWl9EQVRBX0VSUk9S IGlzIHJldHVybmVkLCB0aGUgYXBwbGljYXRpb24gbWF5CisgIHRoZW4gY2FsbCBpbmZsYXRlU3lu YygpIHRvIGxvb2sgZm9yIGEgZ29vZCBjb21wcmVzc2lvbiBibG9jayBpZiBhIHBhcnRpYWwKKyAg cmVjb3Zlcnkgb2YgdGhlIGRhdGEgaXMgdG8gYmUgYXR0ZW1wdGVkLgogKi8KIAogCiBaRVhURVJO IGludCBaRVhQT1JUIGluZmxhdGVFbmQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgogICAgICBB bGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhpcyBzdHJlYW0g YXJlIGZyZWVkLgotICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5w dXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueQotICAgcGVuZGluZyBvdXRwdXQuCisgICBUaGlzIGZ1 bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2gg YW55IHBlbmRpbmcKKyAgIG91dHB1dC4KIAotICAgICBpbmZsYXRlRW5kIHJldHVybnMgWl9PSyBp ZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0YXRlCi0gICB3YXMgaW5j b25zaXN0ZW50LiBJbiB0aGUgZXJyb3IgY2FzZSwgbXNnIG1heSBiZSBzZXQgYnV0IHRoZW4gcG9p bnRzIHRvIGEKLSAgIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlIGRlYWxsb2NhdGVk KS4KKyAgICAgaW5mbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1f RVJST1IgaWYgdGhlIHN0cmVhbSBzdGF0ZQorICAgd2FzIGluY29uc2lzdGVudC4KICovCiAKKwog ICAgICAgICAgICAgICAgICAgICAgICAgLyogQWR2YW5jZWQgZnVuY3Rpb25zICovCiAKIC8qCkBA IC00NTUsNTMgKzU0NCw3MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAgbWVtTGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICBzdHJhdGVneSkpOwogCi0gICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGRlZmxhdGVJ bml0IHdpdGggbW9yZSBjb21wcmVzc2lvbiBvcHRpb25zLiBUaGUKLSAgIGZpZWxkcyBuZXh0X2lu LCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkK LSAgIHRoZSBjYWxsZXIuCisgICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGRlZmxhdGVJ bml0IHdpdGggbW9yZSBjb21wcmVzc2lvbiBvcHRpb25zLiAgVGhlCisgICBmaWVsZHMgbmV4dF9p biwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5 IHRoZQorICAgY2FsbGVyLgogCi0gICAgIFRoZSBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBjb21w cmVzc2lvbiBtZXRob2QuIEl0IG11c3QgYmUgWl9ERUZMQVRFRCBpbgorICAgICBUaGUgbWV0aG9k IHBhcmFtZXRlciBpcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kLiAgSXQgbXVzdCBiZSBaX0RFRkxB VEVEIGluCiAgICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCiAKICAgICAgVGhlIHdpbmRv d0JpdHMgcGFyYW1ldGVyIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBz aXplCi0gICAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gSXQgc2hvdWxkIGJlIGlu IHRoZSByYW5nZSA4Li4xNSBmb3IgdGhpcwotICAgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gTGFy Z2VyIHZhbHVlcyBvZiB0aGlzIHBhcmFtZXRlciByZXN1bHQgaW4gYmV0dGVyCi0gICBjb21wcmVz c2lvbiBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlz IDE1IGlmCisgICAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBi ZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yIHRoaXMKKyAgIHZlcnNpb24gb2YgdGhlIGxpYnJhcnku ICBMYXJnZXIgdmFsdWVzIG9mIHRoaXMgcGFyYW1ldGVyIHJlc3VsdCBpbiBiZXR0ZXIKKyAgIGNv bXByZXNzaW9uIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gIFRoZSBkZWZhdWx0IHZh bHVlIGlzIDE1IGlmCiAgICBkZWZsYXRlSW5pdCBpcyB1c2VkIGluc3RlYWQuCiAKLSAgICAgd2lu ZG93Qml0cyBjYW4gYWxzbyBiZSAtOC4uLTE1IGZvciByYXcgZGVmbGF0ZS4gSW4gdGhpcyBjYXNl LCAtd2luZG93Qml0cwotICAgZGV0ZXJtaW5lcyB0aGUgd2luZG93IHNpemUuIGRlZmxhdGUoKSB3 aWxsIHRoZW4gZ2VuZXJhdGUgcmF3IGRlZmxhdGUgZGF0YQotICAgd2l0aCBubyB6bGliIGhlYWRl ciBvciB0cmFpbGVyLCBhbmQgd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVl LgorICAgICBGb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZGVmbGF0ZSgpLCBhIHdp bmRvd0JpdHMgdmFsdWUgb2YgOCAoYQorICAgd2luZG93IHNpemUgb2YgMjU2IGJ5dGVzKSBpcyBu b3Qgc3VwcG9ydGVkLiAgQXMgYSByZXN1bHQsIGEgcmVxdWVzdCBmb3IgOAorICAgd2lsbCByZXN1 bHQgaW4gOSAoYSA1MTItYnl0ZSB3aW5kb3cpLiAgSW4gdGhhdCBjYXNlLCBwcm92aWRpbmcgOCB0 bworICAgaW5mbGF0ZUluaXQyKCkgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3Igd2hlbiB0aGUgemxp YiBoZWFkZXIgd2l0aCA5IGlzCisgICBjaGVja2VkIGFnYWluc3QgdGhlIGluaXRpYWxpemF0aW9u IG9mIGluZmxhdGUoKS4gIFRoZSByZW1lZHkgaXMgdG8gbm90IHVzZSA4CisgICB3aXRoIGRlZmxh dGVJbml0MigpIHdpdGggdGhpcyBpbml0aWFsaXphdGlvbiwgb3IgYXQgbGVhc3QgaW4gdGhhdCBj YXNlIHVzZSA5CisgICB3aXRoIGluZmxhdGVJbml0MigpLgogCi0gICAgIHdpbmRvd0JpdHMgY2Fu IGFsc28gYmUgZ3JlYXRlciB0aGFuIDE1IGZvciBvcHRpb25hbCBnemlwIGVuY29kaW5nLiBBZGQK KyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSAtOC4uLTE1IGZvciByYXcgZGVmbGF0ZS4gIElu IHRoaXMgY2FzZSwgLXdpbmRvd0JpdHMKKyAgIGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLiAg ZGVmbGF0ZSgpIHdpbGwgdGhlbiBnZW5lcmF0ZSByYXcgZGVmbGF0ZSBkYXRhCisgICB3aXRoIG5v IHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZCB3aWxsIG5vdCBjb21wdXRlIGEgY2hlY2sgdmFs dWUuCisKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9w dGlvbmFsIGd6aXAgZW5jb2RpbmcuICBBZGQKICAgIDE2IHRvIHdpbmRvd0JpdHMgdG8gd3JpdGUg YSBzaW1wbGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgYXJvdW5kIHRoZQotICAgY29tcHJlc3Nl ZCBkYXRhIGluc3RlYWQgb2YgYSB6bGliIHdyYXBwZXIuIFRoZSBnemlwIGhlYWRlciB3aWxsIGhh dmUgbm8KLSAgIGZpbGUgbmFtZSwgbm8gZXh0cmEgZGF0YSwgbm8gY29tbWVudCwgbm8gbW9kaWZp Y2F0aW9uIHRpbWUgKHNldCB0byB6ZXJvKSwKLSAgIG5vIGhlYWRlciBjcmMsIGFuZCB0aGUgb3Bl cmF0aW5nIHN5c3RlbSB3aWxsIGJlIHNldCB0byAyNTUgKHVua25vd24pLiAgSWYgYQotICAgZ3pp cCBzdHJlYW0gaXMgYmVpbmcgd3JpdHRlbiwgc3RybS0+YWRsZXIgaXMgYSBjcmMzMiBpbnN0ZWFk IG9mIGFuIGFkbGVyMzIuCisgICBjb21wcmVzc2VkIGRhdGEgaW5zdGVhZCBvZiBhIHpsaWIgd3Jh cHBlci4gIFRoZSBnemlwIGhlYWRlciB3aWxsIGhhdmUgbm8KKyAgIGZpbGUgbmFtZSwgbm8gZXh0 cmEgZGF0YSwgbm8gY29tbWVudCwgbm8gbW9kaWZpY2F0aW9uIHRpbWUgKHNldCB0byB6ZXJvKSwg bm8KKyAgIGhlYWRlciBjcmMsIGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIGJlIHNldCB0 byB0aGUgYXBwcm9wcmlhdGUgdmFsdWUsCisgICBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3YXMg ZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUuICBJZiBhIGd6aXAgc3RyZWFtIGlzCisgICBiZWlu ZyB3cml0dGVuLCBzdHJtLT5hZGxlciBpcyBhIENSQy0zMiBpbnN0ZWFkIG9mIGFuIEFkbGVyLTMy LgorCisgICAgIEZvciByYXcgZGVmbGF0ZSBvciBnemlwIGVuY29kaW5nLCBhIHJlcXVlc3QgZm9y IGEgMjU2LWJ5dGUgd2luZG93IGlzCisgICByZWplY3RlZCBhcyBpbnZhbGlkLCBzaW5jZSBvbmx5 IHRoZSB6bGliIGhlYWRlciBwcm92aWRlcyBhIG1lYW5zIG9mCisgICB0cmFuc21pdHRpbmcgdGhl IHdpbmRvdyBzaXplIHRvIHRoZSBkZWNvbXByZXNzb3IuCiAKICAgICAgVGhlIG1lbUxldmVsIHBh cmFtZXRlciBzcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQKLSAg IGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuIG1lbUxldmVsPTEgdXNlcyBtaW5p bXVtIG1lbW9yeSBidXQKLSAgIGlzIHNsb3cgYW5kIHJlZHVjZXMgY29tcHJlc3Npb24gcmF0aW87 IG1lbUxldmVsPTkgdXNlcyBtYXhpbXVtIG1lbW9yeQotICAgZm9yIG9wdGltYWwgc3BlZWQuIFRo ZSBkZWZhdWx0IHZhbHVlIGlzIDguIFNlZSB6Y29uZi5oIGZvciB0b3RhbCBtZW1vcnkKLSAgIHVz YWdlIGFzIGEgZnVuY3Rpb24gb2Ygd2luZG93Qml0cyBhbmQgbWVtTGV2ZWwuCisgICBmb3IgdGhl IGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiAgbWVtTGV2ZWw9MSB1c2VzIG1pbmltdW0gbWVt b3J5IGJ1dCBpcworICAgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsgbWVtTGV2 ZWw9OSB1c2VzIG1heGltdW0gbWVtb3J5IGZvcgorICAgb3B0aW1hbCBzcGVlZC4gIFRoZSBkZWZh dWx0IHZhbHVlIGlzIDguICBTZWUgemNvbmYuaCBmb3IgdG90YWwgbWVtb3J5IHVzYWdlCisgICBh cyBhIGZ1bmN0aW9uIG9mIHdpbmRvd0JpdHMgYW5kIG1lbUxldmVsLgogCi0gICAgIFRoZSBzdHJh dGVneSBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0u IFVzZSB0aGUKKyAgICAgVGhlIHN0cmF0ZWd5IHBhcmFtZXRlciBpcyB1c2VkIHRvIHR1bmUgdGhl IGNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFVzZSB0aGUKICAgIHZhbHVlIFpfREVGQVVMVF9TVFJB VEVHWSBmb3Igbm9ybWFsIGRhdGEsIFpfRklMVEVSRUQgZm9yIGRhdGEgcHJvZHVjZWQgYnkgYQog ICAgZmlsdGVyIChvciBwcmVkaWN0b3IpLCBaX0hVRkZNQU5fT05MWSB0byBmb3JjZSBIdWZmbWFu IGVuY29kaW5nIG9ubHkgKG5vCiAgICBzdHJpbmcgbWF0Y2gpLCBvciBaX1JMRSB0byBsaW1pdCBt YXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVuZ3RoCi0gICBlbmNvZGluZykuIEZpbHRlcmVk IGRhdGEgY29uc2lzdHMgbW9zdGx5IG9mIHNtYWxsIHZhbHVlcyB3aXRoIGEgc29tZXdoYXQKLSAg IHJhbmRvbSBkaXN0cmlidXRpb24uIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29y aXRobSBpcyB0dW5lZCB0bwotICAgY29tcHJlc3MgdGhlbSBiZXR0ZXIuIFRoZSBlZmZlY3Qgb2Yg Wl9GSUxURVJFRCBpcyB0byBmb3JjZSBtb3JlIEh1ZmZtYW4KKyAgIGVuY29kaW5nKS4gIEZpbHRl cmVkIGRhdGEgY29uc2lzdHMgbW9zdGx5IG9mIHNtYWxsIHZhbHVlcyB3aXRoIGEgc29tZXdoYXQK KyAgIHJhbmRvbSBkaXN0cmlidXRpb24uICBJbiB0aGlzIGNhc2UsIHRoZSBjb21wcmVzc2lvbiBh bGdvcml0aG0gaXMgdHVuZWQgdG8KKyAgIGNvbXByZXNzIHRoZW0gYmV0dGVyLiAgVGhlIGVmZmVj dCBvZiBaX0ZJTFRFUkVEIGlzIHRvIGZvcmNlIG1vcmUgSHVmZm1hbgogICAgY29kaW5nIGFuZCBs ZXNzIHN0cmluZyBtYXRjaGluZzsgaXQgaXMgc29tZXdoYXQgaW50ZXJtZWRpYXRlIGJldHdlZW4K LSAgIFpfREVGQVVMVCBhbmQgWl9IVUZGTUFOX09OTFkuIFpfUkxFIGlzIGRlc2lnbmVkIHRvIGJl IGFsbW9zdCBhcyBmYXN0IGFzCi0gICBaX0hVRkZNQU5fT05MWSwgYnV0IGdpdmUgYmV0dGVyIGNv bXByZXNzaW9uIGZvciBQTkcgaW1hZ2UgZGF0YS4gVGhlIHN0cmF0ZWd5Ci0gICBwYXJhbWV0ZXIg b25seSBhZmZlY3RzIHRoZSBjb21wcmVzc2lvbiByYXRpbyBidXQgbm90IHRoZSBjb3JyZWN0bmVz cyBvZiB0aGUKLSAgIGNvbXByZXNzZWQgb3V0cHV0IGV2ZW4gaWYgaXQgaXMgbm90IHNldCBhcHBy b3ByaWF0ZWx5LgorICAgWl9ERUZBVUxUX1NUUkFURUdZIGFuZCBaX0hVRkZNQU5fT05MWS4gIFpf UkxFIGlzIGRlc2lnbmVkIHRvIGJlIGFsbW9zdCBhcworICAgZmFzdCBhcyBaX0hVRkZNQU5fT05M WSwgYnV0IGdpdmUgYmV0dGVyIGNvbXByZXNzaW9uIGZvciBQTkcgaW1hZ2UgZGF0YS4gIFRoZQor ICAgc3RyYXRlZ3kgcGFyYW1ldGVyIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Npb24gcmF0aW8g YnV0IG5vdCB0aGUKKyAgIGNvcnJlY3RuZXNzIG9mIHRoZSBjb21wcmVzc2VkIG91dHB1dCBldmVu IGlmIGl0IGlzIG5vdCBzZXQgYXBwcm9wcmlhdGVseS4KKyAgIFpfRklYRUQgcHJldmVudHMgdGhl IHVzZSBvZiBkeW5hbWljIEh1ZmZtYW4gY29kZXMsIGFsbG93aW5nIGZvciBhIHNpbXBsZXIKKyAg IGRlY29kZXIgZm9yIHNwZWNpYWwgYXBwbGljYXRpb25zLgogCi0gICAgICBkZWZsYXRlSW5pdDIg cmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5v dWdoCi0gICBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGEgcGFyYW1ldGVyIGlzIGludmFsaWQg KHN1Y2ggYXMgYW4gaW52YWxpZAotICAgbWV0aG9kKS4gbXNnIGlzIHNldCB0byBudWxsIGlmIHRo ZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdDIgZG9lcwotICAgbm90IHBlcmZv cm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisgICAg IGRlZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhl cmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgYW55IHBhcmFt ZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGFuIGludmFsaWQKKyAgIG1ldGhvZCksIG9yIFpfVkVS U0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gKHpsaWJfdmVyc2lvbikgaXMK KyAgIGluY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciAo WkxJQl9WRVJTSU9OKS4gIG1zZyBpcworICAgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJy b3IgbWVzc2FnZS4gIGRlZmxhdGVJbml0MiBkb2VzIG5vdCBwZXJmb3JtIGFueQorICAgY29tcHJl c3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KICovCiAKIFpFWFRFUk4gaW50 IFpFWFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNTA5 LDM2ICs2MTUsNjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsKIC8qCiAgICAgIEluaXRpYWxpemVzIHRoZSBjb21wcmVz c2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUgc2VxdWVuY2UKLSAgIHdpdGhvdXQg cHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNh bGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvciBk ZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkKLSAgIGNhbGwgb2YgZGVmbGF0ZS4gVGhlIGNvbXByZXNz b3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCi0gICBkaWN0aW9u YXJ5IChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgorICAgd2l0aG91dCBwcm9kdWNpbmcgYW55 IGNvbXByZXNzZWQgb3V0cHV0LiAgV2hlbiB1c2luZyB0aGUgemxpYiBmb3JtYXQsIHRoaXMKKyAg IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0LCBk ZWZsYXRlSW5pdDIgb3IKKyAgIGRlZmxhdGVSZXNldCwgYW5kIGJlZm9yZSBhbnkgY2FsbCBvZiBk ZWZsYXRlLiAgV2hlbiBkb2luZyByYXcgZGVmbGF0ZSwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBi ZSBjYWxsZWQgZWl0aGVyIGJlZm9yZSBhbnkgY2FsbCBvZiBkZWZsYXRlLCBvciBpbW1lZGlhdGVs eQorICAgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgYSBkZWZsYXRlIGJsb2NrLCBpLmUuIGFmdGVy IGFsbCBpbnB1dCBoYXMgYmVlbgorICAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4g ZGVsaXZlcmVkIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBmbHVzaAorICAgb3B0aW9ucyBaX0JMT0NL LCBaX1BBUlRJQUxfRkxVU0gsIFpfU1lOQ19GTFVTSCwgb3IgWl9GVUxMX0ZMVVNILiAgVGhlCisg ICBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBk aWN0aW9uYXJ5IChzZWUKKyAgIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KIAogICAgICBUaGUgZGlj dGlvbmFyeSBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBh cmUgbGlrZWx5CiAgICB0byBiZSBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBj b21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5Ci0gICB1c2VkIHN0cmluZ3MgcHJlZmVy YWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiBVc2luZyBhCisgICB1 c2VkIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9u YXJ5LiAgVXNpbmcgYQogICAgZGljdGlvbmFyeSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRh IHRvIGJlIGNvbXByZXNzZWQgaXMgc2hvcnQgYW5kIGNhbiBiZQogICAgcHJlZGljdGVkIHdpdGgg Z29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIgdGhh bgogICAgd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogCiAgICAgIERlcGVuZGlu ZyBvbiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3Npb24gZGF0YSBzdHJ1Y3R1cmVzIHNlbGVjdGVk IGJ5CiAgICBkZWZsYXRlSW5pdCBvciBkZWZsYXRlSW5pdDIsIGEgcGFydCBvZiB0aGUgZGljdGlv bmFyeSBtYXkgaW4gZWZmZWN0IGJlCi0gICBkaXNjYXJkZWQsIGZvciBleGFtcGxlIGlmIHRoZSBk aWN0aW9uYXJ5IGlzIGxhcmdlciB0aGFuIHRoZSB3aW5kb3cgc2l6ZSBpbgotICAgZGVmbGF0ZSBv ciBkZWZsYXRlMi4gVGh1cyB0aGUgc3RyaW5ncyBtb3N0IGxpa2VseSB0byBiZSB1c2VmdWwgc2hv dWxkIGJlCi0gICBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeSwgbm90IGF0IHRoZSBm cm9udC4KKyAgIGRpc2NhcmRlZCwgZm9yIGV4YW1wbGUgaWYgdGhlIGRpY3Rpb25hcnkgaXMgbGFy Z2VyIHRoYW4gdGhlIHdpbmRvdyBzaXplCisgICBwcm92aWRlZCBpbiBkZWZsYXRlSW5pdCBvciBk ZWZsYXRlSW5pdDIuICBUaHVzIHRoZSBzdHJpbmdzIG1vc3QgbGlrZWx5IHRvIGJlCisgICB1c2Vm dWwgc2hvdWxkIGJlIHB1dCBhdCB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LCBub3QgYXQgdGhl IGZyb250LiAgSW4KKyAgIGFkZGl0aW9uLCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBk ZWZsYXRlIHdpbGwgdXNlIGF0IG1vc3QgdGhlIHdpbmRvdworICAgc2l6ZSBtaW51cyAyNjIgYnl0 ZXMgb2YgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkuCiAKLSAgICAgVXBvbiByZXR1cm4gb2YgdGhp cyBmdW5jdGlvbiwgc3RybS0+YWRsZXIgaXMgc2V0IHRvIHRoZSBhZGxlcjMyIHZhbHVlCisgICAg IFVwb24gcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24sIHN0cm0tPmFkbGVyIGlzIHNldCB0byB0aGUg QWRsZXItMzIgdmFsdWUKICAgIG9mIHRoZSBkaWN0aW9uYXJ5OyB0aGUgZGVjb21wcmVzc29yIG1h eSBsYXRlciB1c2UgdGhpcyB2YWx1ZSB0byBkZXRlcm1pbmUKLSAgIHdoaWNoIGRpY3Rpb25hcnkg aGFzIGJlZW4gdXNlZCBieSB0aGUgY29tcHJlc3Nvci4gKFRoZSBhZGxlcjMyIHZhbHVlCisgICB3 aGljaCBkaWN0aW9uYXJ5IGhhcyBiZWVuIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuICAoVGhlIEFk bGVyLTMyIHZhbHVlCiAgICBhcHBsaWVzIHRvIHRoZSB3aG9sZSBkaWN0aW9uYXJ5IGV2ZW4gaWYg b25seSBhIHN1YnNldCBvZiB0aGUgZGljdGlvbmFyeSBpcwogICAgYWN0dWFsbHkgdXNlZCBieSB0 aGUgY29tcHJlc3Nvci4pIElmIGEgcmF3IGRlZmxhdGUgd2FzIHJlcXVlc3RlZCwgdGhlbiB0aGUK LSAgIGFkbGVyMzIgdmFsdWUgaXMgbm90IGNvbXB1dGVkIGFuZCBzdHJtLT5hZGxlciBpcyBub3Qg c2V0LgorICAgQWRsZXItMzIgdmFsdWUgaXMgbm90IGNvbXB1dGVkIGFuZCBzdHJtLT5hZGxlciBp cyBub3Qgc2V0LgogCiAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBz dWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhCi0gICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAo c3VjaCBhcyBOVUxMIGRpY3Rpb25hcnkpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKKyAgIHBhcmFt ZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0 cmVhbSBzdGF0ZSBpcwogICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiBkZWZsYXRlIGhh cyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVhbQotICAgb3IgaWYgdGhlIGNvbXBy ZXNzaW9uIG1ldGhvZCBpcyBic29ydCkuIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90Ci0g ICBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgp LgorICAgb3IgaWYgbm90IGF0IGEgYmxvY2sgYm91bmRhcnkgZm9yIHJhdyBkZWZsYXRlKS4gIGRl ZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMKKyAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjog dGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9S VCBkZWZsYXRlR2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgICpkaWN0TGVuZ3Ro KSk7CisvKgorICAgICBSZXR1cm5zIHRoZSBzbGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRh aW5lZCBieSBkZWZsYXRlLiAgZGljdExlbmd0aCBpcworICAgc2V0IHRvIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgaW4gdGhlIGRpY3Rpb25hcnksIGFuZCB0aGF0IG1hbnkgYnl0ZXMgYXJlIGNvcGllZAor ICAgdG8gZGljdGlvbmFyeS4gIGRpY3Rpb25hcnkgbXVzdCBoYXZlIGVub3VnaCBzcGFjZSwgd2hl cmUgMzI3NjggYnl0ZXMgaXMKKyAgIGFsd2F5cyBlbm91Z2guICBJZiBkZWZsYXRlR2V0RGljdGlv bmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rpb25hcnkgZXF1YWwgdG8KKyAgIFpfTlVMTCwgdGhl biBvbmx5IHRoZSBkaWN0aW9uYXJ5IGxlbmd0aCBpcyByZXR1cm5lZCwgYW5kIG5vdGhpbmcgaXMg Y29waWVkLgorICAgU2ltaWxhcnksIGlmIGRpY3RMZW5ndGggaXMgWl9OVUxMLCB0aGVuIGl0IGlz IG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZUdldERpY3Rpb25hcnkoKSBtYXkgcmV0dXJuIGEgbGVu Z3RoIGxlc3MgdGhhbiB0aGUgd2luZG93IHNpemUsIGV2ZW4KKyAgIHdoZW4gbW9yZSB0aGFuIHRo ZSB3aW5kb3cgc2l6ZSBpbiBpbnB1dCBoYXMgYmVlbiBwcm92aWRlZC4gSXQgbWF5IHJldHVybiB1 cAorICAgdG8gMjU4IGJ5dGVzIGxlc3MgaW4gdGhhdCBjYXNlLCBkdWUgdG8gaG93IHpsaWIncyBp bXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlCisgICBtYW5hZ2VzIHRoZSBzbGlkaW5nIHdpbmRvdyBh bmQgbG9va2FoZWFkIGZvciBtYXRjaGVzLCB3aGVyZSBtYXRjaGVzIGNhbiBiZQorICAgdXAgdG8g MjU4IGJ5dGVzIGxvbmcuIElmIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0aGUgbGFzdCB3aW5kb3ct c2l6ZSBieXRlcyBvZgorICAgaW5wdXQsIHRoZW4gdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHNhdmVk IGJ5IHRoZSBhcHBsaWNhdGlvbiBvdXRzaWRlIG9mIHpsaWIuCisKKyAgICAgZGVmbGF0ZUdldERp Y3Rpb25hcnkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRo ZQorICAgc3RyZWFtIHN0YXRlIGlzIGluY29uc2lzdGVudC4KICovCiAKIFpFWFRFUk4gaW50IFpF WFBPUlQgZGVmbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LApAQCAtNTQ4LDI2ICs2ODMsMjYg QEAKIAogICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBzZXZlcmFsIGNvbXBy ZXNzaW9uIHN0cmF0ZWdpZXMgd2lsbCBiZQogICAgdHJpZWQsIGZvciBleGFtcGxlIHdoZW4gdGhl cmUgYXJlIHNldmVyYWwgd2F5cyBvZiBwcmUtcHJvY2Vzc2luZyB0aGUgaW5wdXQKLSAgIGRhdGEg d2l0aCBhIGZpbHRlci4gVGhlIHN0cmVhbXMgdGhhdCB3aWxsIGJlIGRpc2NhcmRlZCBzaG91bGQg dGhlbiBiZSBmcmVlZAorICAgZGF0YSB3aXRoIGEgZmlsdGVyLiAgVGhlIHN0cmVhbXMgdGhhdCB3 aWxsIGJlIGRpc2NhcmRlZCBzaG91bGQgdGhlbiBiZSBmcmVlZAogICAgYnkgY2FsbGluZyBkZWZs YXRlRW5kLiAgTm90ZSB0aGF0IGRlZmxhdGVDb3B5IGR1cGxpY2F0ZXMgdGhlIGludGVybmFsCi0g ICBjb21wcmVzc2lvbiBzdGF0ZSB3aGljaCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHRoaXMgc3Ry YXRlZ3kgaXMgc2xvdyBhbmQKLSAgIGNhbiBjb25zdW1lIGxvdHMgb2YgbWVtb3J5LgorICAgY29t cHJlc3Npb24gc3RhdGUgd2hpY2ggY2FuIGJlIHF1aXRlIGxhcmdlLCBzbyB0aGlzIHN0cmF0ZWd5 IGlzIHNsb3cgYW5kIGNhbgorICAgY29uc3VtZSBsb3RzIG9mIG1lbW9yeS4KIAogICAgICBkZWZs YXRlQ29weSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2Fz IG5vdAogICAgZW5vdWdoIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZSBzdHJl YW0gc3RhdGUgd2FzIGluY29uc2lzdGVudAotICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIE5VTEwp LiBtc2cgaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kCisgICAoc3VjaCBhcyB6 YWxsb2MgYmVpbmcgWl9OVUxMKS4gIG1zZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJj ZSBhbmQKICAgIGRlc3RpbmF0aW9uLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRl UmVzZXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgotICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVx dWl2YWxlbnQgdG8gZGVmbGF0ZUVuZCBmb2xsb3dlZCBieSBkZWZsYXRlSW5pdCwKLSAgIGJ1dCBk b2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24g c3RhdGUuCi0gICBUaGUgc3RyZWFtIHdpbGwga2VlcCB0aGUgc2FtZSBjb21wcmVzc2lvbiBsZXZl bCBhbmQgYW55IG90aGVyIGF0dHJpYnV0ZXMKLSAgIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkg ZGVmbGF0ZUluaXQyLgorICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gZGVmbGF0 ZUVuZCBmb2xsb3dlZCBieSBkZWZsYXRlSW5pdCwgYnV0CisgICBkb2VzIG5vdCBmcmVlIGFuZCBy ZWFsbG9jYXRlIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZSBzdHJlYW0KKyAg IHdpbGwgbGVhdmUgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBhbnkgb3RoZXIgYXR0cmlidXRl cyB0aGF0IG1heSBoYXZlIGJlZW4KKyAgIHNldCB1bmNoYW5nZWQuCiAKLSAgICAgIGRlZmxhdGVS ZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNv dXJjZQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9y IHN0YXRlIGJlaW5nIE5VTEwpLgorICAgICBkZWZsYXRlUmVzZXQgcmV0dXJucyBaX09LIGlmIHN1 Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3 YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIHphbGxvYyBvciBzdGF0ZSBiZWluZyBaX05VTEwpLgog Ki8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUGFyYW1zIE9GKCh6X3N0cmVhbXAgc3Ry bSwKQEAgLTU3NSw0NCArNzEwLDEyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc3RyYXRlZ3kpKTsKIC8qCiAgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUg Y29tcHJlc3Npb24gbGV2ZWwgYW5kIGNvbXByZXNzaW9uIHN0cmF0ZWd5LiAgVGhlCi0gICBpbnRl cnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRlZ3kgaXMgYXMgaW4gZGVmbGF0ZUluaXQyLiAg VGhpcyBjYW4gYmUKKyAgIGludGVycHJldGF0aW9uIG9mIGxldmVsIGFuZCBzdHJhdGVneSBpcyBh cyBpbiBkZWZsYXRlSW5pdDIoKS4gIFRoaXMgY2FuIGJlCiAgICB1c2VkIHRvIHN3aXRjaCBiZXR3 ZWVuIGNvbXByZXNzaW9uIGFuZCBzdHJhaWdodCBjb3B5IG9mIHRoZSBpbnB1dCBkYXRhLCBvcgot ICAgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgaW5wdXQgZGF0YSByZXF1aXJpbmcg YSBkaWZmZXJlbnQKLSAgIHN0cmF0ZWd5LiBJZiB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgY2hh bmdlZCwgdGhlIGlucHV0IGF2YWlsYWJsZSBzbyBmYXIKLSAgIGlzIGNvbXByZXNzZWQgd2l0aCB0 aGUgb2xkIGxldmVsIChhbmQgbWF5IGJlIGZsdXNoZWQpOyB0aGUgbmV3IGxldmVsIHdpbGwKLSAg IHRha2UgZWZmZWN0IG9ubHkgYXQgdGhlIG5leHQgY2FsbCBvZiBkZWZsYXRlKCkuCisgICB0byBz d2l0Y2ggdG8gYSBkaWZmZXJlbnQga2luZCBvZiBpbnB1dCBkYXRhIHJlcXVpcmluZyBhIGRpZmZl cmVudCBzdHJhdGVneS4KKyAgIElmIHRoZSBjb21wcmVzc2lvbiBhcHByb2FjaCAod2hpY2ggaXMg YSBmdW5jdGlvbiBvZiB0aGUgbGV2ZWwpIG9yIHRoZQorICAgc3RyYXRlZ3kgaXMgY2hhbmdlZCwg YW5kIGlmIGFueSBpbnB1dCBoYXMgYmVlbiBjb25zdW1lZCBpbiBhIHByZXZpb3VzCisgICBkZWZs YXRlKCkgY2FsbCwgdGhlbiB0aGUgaW5wdXQgYXZhaWxhYmxlIHNvIGZhciBpcyBjb21wcmVzc2Vk IHdpdGggdGhlIG9sZAorICAgbGV2ZWwgYW5kIHN0cmF0ZWd5IHVzaW5nIGRlZmxhdGUoc3RybSwg Wl9CTE9DSykuICBUaGVyZSBhcmUgdGhyZWUgYXBwcm9hY2hlcworICAgZm9yIHRoZSBjb21wcmVz c2lvbiBsZXZlbHMgMCwgMS4uMywgYW5kIDQuLjkgcmVzcGVjdGl2ZWx5LiAgVGhlIG5ldyBsZXZl bAorICAgYW5kIHN0cmF0ZWd5IHdpbGwgdGFrZSBlZmZlY3QgYXQgdGhlIG5leHQgY2FsbCBvZiBk ZWZsYXRlKCkuCiAKLSAgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGVQYXJhbXMsIHRoZSBz dHJlYW0gc3RhdGUgbXVzdCBiZSBzZXQgYXMgZm9yCi0gICBhIGNhbGwgb2YgZGVmbGF0ZSgpLCBz aW5jZSB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBpbnB1dCBtYXkgaGF2ZSB0bwotICAgYmUgY29t cHJlc3NlZCBhbmQgZmx1c2hlZC4gSW4gcGFydGljdWxhciwgc3RybS0+YXZhaWxfb3V0IG11c3Qg YmUgbm9uLXplcm8uCisgICAgIElmIGEgZGVmbGF0ZShzdHJtLCBaX0JMT0NLKSBpcyBwZXJmb3Jt ZWQgYnkgZGVmbGF0ZVBhcmFtcygpLCBhbmQgaXQgZG9lcworICAgbm90IGhhdmUgZW5vdWdoIG91 dHB1dCBzcGFjZSB0byBjb21wbGV0ZSwgdGhlbiB0aGUgcGFyYW1ldGVyIGNoYW5nZSB3aWxsIG5v dAorICAgdGFrZSBlZmZlY3QuICBJbiB0aGlzIGNhc2UsIGRlZmxhdGVQYXJhbXMoKSBjYW4gYmUg Y2FsbGVkIGFnYWluIHdpdGggdGhlCisgICBzYW1lIHBhcmFtZXRlcnMgYW5kIG1vcmUgb3V0cHV0 IHNwYWNlIHRvIHRyeSBhZ2Fpbi4KIAotICAgICBkZWZsYXRlUGFyYW1zIHJldHVybnMgWl9PSyBp ZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUg d2FzIGluY29uc2lzdGVudCBvciBpZiBhIHBhcmFtZXRlciB3YXMgaW52YWxpZCwgWl9CVUZfRVJS T1IKLSAgIGlmIHN0cm0tPmF2YWlsX291dCB3YXMgemVyby4KKyAgICAgSW4gb3JkZXIgdG8gYXNz dXJlIGEgY2hhbmdlIGluIHRoZSBwYXJhbWV0ZXJzIG9uIHRoZSBmaXJzdCB0cnksIHRoZQorICAg ZGVmbGF0ZSBzdHJlYW0gc2hvdWxkIGJlIGZsdXNoZWQgdXNpbmcgZGVmbGF0ZSgpIHdpdGggWl9C TE9DSyBvciBvdGhlciBmbHVzaAorICAgcmVxdWVzdCB1bnRpbCBzdHJtLmF2YWlsX291dCBpcyBu b3QgemVybywgYmVmb3JlIGNhbGxpbmcgZGVmbGF0ZVBhcmFtcygpLgorICAgVGhlbiBubyBtb3Jl IGlucHV0IGRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGJlZm9yZSB0aGUgZGVmbGF0ZVBhcmFtcygp IGNhbGwuCisgICBJZiB0aGlzIGlzIGRvbmUsIHRoZSBvbGQgbGV2ZWwgYW5kIHN0cmF0ZWd5IHdp bGwgYmUgYXBwbGllZCB0byB0aGUgZGF0YQorICAgY29tcHJlc3NlZCBiZWZvcmUgZGVmbGF0ZVBh cmFtcygpLCBhbmQgdGhlIG5ldyBsZXZlbCBhbmQgc3RyYXRlZ3kgd2lsbCBiZQorICAgYXBwbGll ZCB0byB0aGUgdGhlIGRhdGEgY29tcHJlc3NlZCBhZnRlciBkZWZsYXRlUGFyYW1zKCkuCisKKyAg ICAgZGVmbGF0ZVBhcmFtcyByZXR1cm5zIFpfT0sgb24gc3VjY2VzcywgWl9TVFJFQU1fRVJST1Ig aWYgdGhlIHNvdXJjZSBzdHJlYW0KKyAgIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgb3IgaWYgYSBw YXJhbWV0ZXIgd2FzIGludmFsaWQsIG9yIFpfQlVGX0VSUk9SIGlmCisgICB0aGVyZSB3YXMgbm90 IGVub3VnaCBvdXRwdXQgc3BhY2UgdG8gY29tcGxldGUgdGhlIGNvbXByZXNzaW9uIG9mIHRoZQor ICAgYXZhaWxhYmxlIGlucHV0IGRhdGEgYmVmb3JlIGEgY2hhbmdlIGluIHRoZSBzdHJhdGVneSBv ciBhcHByb2FjaC4gIE5vdGUgdGhhdAorICAgaW4gdGhlIGNhc2Ugb2YgYSBaX0JVRl9FUlJPUiwg dGhlIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2VkLiAgQSByZXR1cm4KKyAgIHZhbHVlIG9mIFpf QlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgaW4gd2hpY2ggY2FzZSBkZWZsYXRlUGFyYW1zKCkgY2Fu IGJlCisgICByZXRyaWVkIHdpdGggbW9yZSBvdXRwdXQgc3BhY2UuCiAqLwogCitaRVhURVJOIGlu dCBaRVhQT1JUIGRlZmxhdGVUdW5lIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBnb29kX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBtYXhfbGF6eSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBuaWNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBtYXhfY2hhaW4pKTsKKy8qCisgICAgIEZpbmUgdHVuZSBkZWZsYXRlJ3Mg aW50ZXJuYWwgY29tcHJlc3Npb24gcGFyYW1ldGVycy4gIFRoaXMgc2hvdWxkIG9ubHkgYmUKKyAg IHVzZWQgYnkgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlIGFsZ29yaXRobSB1c2VkIGJ5IHps aWIncyBkZWZsYXRlIGZvcgorICAgc2VhcmNoaW5nIGZvciB0aGUgYmVzdCBtYXRjaGluZyBzdHJp bmcsIGFuZCBldmVuIHRoZW4gb25seSBieSB0aGUgbW9zdAorICAgZmFuYXRpYyBvcHRpbWl6ZXIg dHJ5aW5nIHRvIHNxdWVlemUgb3V0IHRoZSBsYXN0IGNvbXByZXNzZWQgYml0IGZvciB0aGVpcgor ICAgc3BlY2lmaWMgaW5wdXQgZGF0YS4gIFJlYWQgdGhlIGRlZmxhdGUuYyBzb3VyY2UgY29kZSBm b3IgdGhlIG1lYW5pbmcgb2YgdGhlCisgICBtYXhfbGF6eSwgZ29vZF9sZW5ndGgsIG5pY2VfbGVu Z3RoLCBhbmQgbWF4X2NoYWluIHBhcmFtZXRlcnMuCisKKyAgICAgZGVmbGF0ZVR1bmUoKSBjYW4g YmUgY2FsbGVkIGFmdGVyIGRlZmxhdGVJbml0KCkgb3IgZGVmbGF0ZUluaXQyKCksIGFuZAorICAg cmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGZvciBhbiBpbnZhbGlk IGRlZmxhdGUgc3RyZWFtLgorICovCisKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBkZWZsYXRlQm91 bmQgT0YoKHpfc3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdUxvbmcgc291cmNlTGVuKSk7CiAvKgogICAgICBkZWZsYXRlQm91bmQoKSByZXR1cm5z IGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBjb21wcmVzc2VkIHNpemUgYWZ0ZXIKLSAgIGRlZmxhdGlv biBvZiBzb3VyY2VMZW4gYnl0ZXMuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5p dCgpCi0gICBvciBkZWZsYXRlSW5pdDIoKS4gIFRoaXMgd291bGQgYmUgdXNlZCB0byBhbGxvY2F0 ZSBhbiBvdXRwdXQgYnVmZmVyCi0gICBmb3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFu ZCBzbyB3b3VsZCBiZSBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4KKyAgIGRlZmxhdGlvbiBvZiBz b3VyY2VMZW4gYnl0ZXMuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5pdCgpIG9y CisgICBkZWZsYXRlSW5pdDIoKSwgYW5kIGFmdGVyIGRlZmxhdGVTZXRIZWFkZXIoKSwgaWYgdXNl ZC4gIFRoaXMgd291bGQgYmUgdXNlZAorICAgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBm b3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFuZCBzbyB3b3VsZCBiZQorICAgY2FsbGVk IGJlZm9yZSBkZWZsYXRlKCkuICBJZiB0aGF0IGZpcnN0IGRlZmxhdGUoKSBjYWxsIGlzIHByb3Zp ZGVkIHRoZQorICAgc291cmNlTGVuIGlucHV0IGJ5dGVzLCBhbiBvdXRwdXQgYnVmZmVyIGFsbG9j YXRlZCB0byB0aGUgc2l6ZSByZXR1cm5lZCBieQorICAgZGVmbGF0ZUJvdW5kKCksIGFuZCB0aGUg Zmx1c2ggdmFsdWUgWl9GSU5JU0gsIHRoZW4gZGVmbGF0ZSgpIGlzIGd1YXJhbnRlZWQKKyAgIHRv IHJldHVybiBaX1NUUkVBTV9FTkQuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBj b21wcmVzc2VkIHNpemUgdG8KKyAgIGJlIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSByZXR1cm5lZCBi eSBkZWZsYXRlQm91bmQoKSBpZiBmbHVzaCBvcHRpb25zIG90aGVyCisgICB0aGFuIFpfRklOSVNI IG9yIFpfTk9fRkxVU0ggYXJlIHVzZWQuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxh dGVQZW5kaW5nIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkICpwZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpiaXRzKSk7CisvKgorICAgICBkZWZsYXRlUGVuZGluZygpIHJl dHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhbmQgYml0cyBvZiBvdXRwdXQgdGhhdCBoYXZlCisg ICBiZWVuIGdlbmVyYXRlZCwgYnV0IG5vdCB5ZXQgcHJvdmlkZWQgaW4gdGhlIGF2YWlsYWJsZSBv dXRwdXQuICBUaGUgYnl0ZXMgbm90CisgICBwcm92aWRlZCB3b3VsZCBiZSBkdWUgdG8gdGhlIGF2 YWlsYWJsZSBvdXRwdXQgc3BhY2UgaGF2aW5nIGJlaW5nIGNvbnN1bWVkLgorICAgVGhlIG51bWJl ciBvZiBiaXRzIG9mIG91dHB1dCBub3QgcHJvdmlkZWQgYXJlIGJldHdlZW4gMCBhbmQgNywgd2hl cmUgdGhleQorICAgYXdhaXQgbW9yZSBiaXRzIHRvIGpvaW4gdGhlbSBpbiBvcmRlciB0byBmaWxs IG91dCBhIGZ1bGwgYnl0ZS4gIElmIHBlbmRpbmcKKyAgIG9yIGJpdHMgYXJlIFpfTlVMTCwgdGhl biB0aG9zZSB2YWx1ZXMgYXJlIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZVBlbmRpbmcgcmV0dXJu cyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0 cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorICovCisKIFpFWFRFUk4gaW50IFpFWFBPUlQg ZGVmbGF0ZVByaW1lIE9GKCh6X3N0cmVhbXAgc3RybSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgdmFsdWUpKTsKIC8qCiAgICAgIGRlZmxhdGVQcmltZSgpIGluc2VydHMgYml0cyBp biB0aGUgZGVmbGF0ZSBvdXRwdXQgc3RyZWFtLiAgVGhlIGludGVudAotICBpcyB0aGF0IHRoaXMg ZnVuY3Rpb24gaXMgdXNlZCB0byBzdGFydCBvZmYgdGhlIGRlZmxhdGUgb3V0cHV0IHdpdGggdGhl Ci0gIGJpdHMgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIGRlZmxhdGUgc3RyZWFtIHdoZW4gYXBw ZW5kaW5nIHRvIGl0LiAgQXMgc3VjaCwKLSAgdGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2Vk IGZvciByYXcgZGVmbGF0ZSwgYW5kIG11c3QgYmUgdXNlZCBiZWZvcmUgdGhlCi0gIGZpcnN0IGRl ZmxhdGUoKSBjYWxsIGFmdGVyIGEgZGVmbGF0ZUluaXQyKCkgb3IgZGVmbGF0ZVJlc2V0KCkuICBi aXRzIG11c3QgYmUKLSAgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9m IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mCi0gIHZhbHVlIHdpbGwgYmUgaW5zZXJ0ZWQg aW4gdGhlIG91dHB1dC4KKyAgIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0 IG9mZiB0aGUgZGVmbGF0ZSBvdXRwdXQgd2l0aCB0aGUgYml0cworICAgbGVmdG92ZXIgZnJvbSBh IHByZXZpb3VzIGRlZmxhdGUgc3RyZWFtIHdoZW4gYXBwZW5kaW5nIHRvIGl0LiAgQXMgc3VjaCwg dGhpcworICAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBmb3IgcmF3IGRlZmxhdGUsIGFuZCBt dXN0IGJlIHVzZWQgYmVmb3JlIHRoZSBmaXJzdAorICAgZGVmbGF0ZSgpIGNhbGwgYWZ0ZXIgYSBk ZWZsYXRlSW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZSBsZXNzCisgICB0 aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2Fu dCBiaXRzIG9mIHZhbHVlCisgICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCiAKLSAg ICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJS T1IgaWYgdGhlIHNvdXJjZQorICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nl c3MsIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICByb29tIGluIHRoZSBp bnRlcm5hbCBidWZmZXIgdG8gaW5zZXJ0IHRoZSBiaXRzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0 aGUKKyAgIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRF Uk4gaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciBPRigoel9zdHJlYW1wIHN0cm0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd6X2hlYWRlcnAgaGVhZCkpOwor LyoKKyAgICAgZGVmbGF0ZVNldEhlYWRlcigpIHByb3ZpZGVzIGd6aXAgaGVhZGVyIGluZm9ybWF0 aW9uIGZvciB3aGVuIGEgZ3ppcAorICAgc3RyZWFtIGlzIHJlcXVlc3RlZCBieSBkZWZsYXRlSW5p dDIoKS4gIGRlZmxhdGVTZXRIZWFkZXIoKSBtYXkgYmUgY2FsbGVkCisgICBhZnRlciBkZWZsYXRl SW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKSBhbmQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIG9mCisg ICBkZWZsYXRlKCkuICBUaGUgdGV4dCwgdGltZSwgb3MsIGV4dHJhIGZpZWxkLCBuYW1lLCBhbmQg Y29tbWVudCBpbmZvcm1hdGlvbgorICAgaW4gdGhlIHByb3ZpZGVkIGd6X2hlYWRlciBzdHJ1Y3R1 cmUgYXJlIHdyaXR0ZW4gdG8gdGhlIGd6aXAgaGVhZGVyICh4ZmxhZyBpcworICAgaWdub3JlZCAt LSB0aGUgZXh0cmEgZmxhZ3MgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGNvbXByZXNzaW9uIGxl dmVsKS4gIFRoZQorICAgY2FsbGVyIG11c3QgYXNzdXJlIHRoYXQsIGlmIG5vdCBaX05VTEwsIG5h bWUgYW5kIGNvbW1lbnQgYXJlIHRlcm1pbmF0ZWQgd2l0aAorICAgYSB6ZXJvIGJ5dGUsIGFuZCB0 aGF0IGlmIGV4dHJhIGlzIG5vdCBaX05VTEwsIHRoYXQgZXh0cmFfbGVuIGJ5dGVzIGFyZQorICAg YXZhaWxhYmxlIHRoZXJlLiAgSWYgaGNyYyBpcyB0cnVlLCBhIGd6aXAgaGVhZGVyIGNyYyBpcyBp bmNsdWRlZC4gIE5vdGUgdGhhdAorICAgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlIGNvbW1h bmQtbGluZSB2ZXJzaW9uIG9mIGd6aXAgKHVwIHRocm91Z2ggdmVyc2lvbgorICAgMS4zLngpIGRv IG5vdCBzdXBwb3J0IGhlYWRlciBjcmMncywgYW5kIHdpbGwgcmVwb3J0IHRoYXQgaXQgaXMgYSAi bXVsdGktcGFydAorICAgZ3ppcCBmaWxlIiBhbmQgZ2l2ZSB1cC4KKworICAgICBJZiBkZWZsYXRl U2V0SGVhZGVyIGlzIG5vdCB1c2VkLCB0aGUgZGVmYXVsdCBnemlwIGhlYWRlciBoYXMgdGV4dCBm YWxzZSwKKyAgIHRoZSB0aW1lIHNldCB0byB6ZXJvLCBhbmQgb3Mgc2V0IHRvIDI1NSwgd2l0aCBu byBleHRyYSwgbmFtZSwgb3IgY29tbWVudAorICAgZmllbGRzLiAgVGhlIGd6aXAgaGVhZGVyIGlz IHJldHVybmVkIHRvIHRoZSBkZWZhdWx0IHN0YXRlIGJ5IGRlZmxhdGVSZXNldCgpLgorCisgICAg IGRlZmxhdGVTZXRIZWFkZXIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VS Uk9SIGlmIHRoZSBzb3VyY2UKICAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgogKi8K IApAQCAtNjIwLDQzICs4MzQsNTMgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQy IE9GKCh6X3N0cmVhbXAgc3RybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgIHdpbmRvd0JpdHMpKTsKIAotICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiBp bmZsYXRlSW5pdCB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlci4gVGhlCisgICAgIFRoaXMgaXMgYW5v dGhlciB2ZXJzaW9uIG9mIGluZmxhdGVJbml0IHdpdGggYW4gZXh0cmEgcGFyYW1ldGVyLiAgVGhl CiAgICBmaWVsZHMgbmV4dF9pbiwgYXZhaWxfaW4sIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBt dXN0IGJlIGluaXRpYWxpemVkCiAgICBiZWZvcmUgYnkgdGhlIGNhbGxlci4KIAogICAgICBUaGUg d2luZG93Qml0cyBwYXJhbWV0ZXIgaXMgdGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgbWF4 aW11bSB3aW5kb3cKICAgIHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuICBJ dCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZvcgotICAgdGhpcyB2ZXJzaW9uIG9mIHRo ZSBsaWJyYXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZiBpbmZsYXRlSW5pdCBpcyB1c2Vk Ci0gICBpbnN0ZWFkLiB3aW5kb3dCaXRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv IHRoZSB3aW5kb3dCaXRzIHZhbHVlCisgICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuICBU aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNSBpZiBpbmZsYXRlSW5pdCBpcyB1c2VkCisgICBpbnN0ZWFk LiAgd2luZG93Qml0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgd2luZG93 Qml0cyB2YWx1ZQogICAgcHJvdmlkZWQgdG8gZGVmbGF0ZUluaXQyKCkgd2hpbGUgY29tcHJlc3Np bmcsIG9yIGl0IG11c3QgYmUgZXF1YWwgdG8gMTUgaWYKLSAgIGRlZmxhdGVJbml0MigpIHdhcyBu b3QgdXNlZC4gSWYgYSBjb21wcmVzc2VkIHN0cmVhbSB3aXRoIGEgbGFyZ2VyIHdpbmRvdworICAg ZGVmbGF0ZUluaXQyKCkgd2FzIG5vdCB1c2VkLiAgSWYgYSBjb21wcmVzc2VkIHN0cmVhbSB3aXRo IGEgbGFyZ2VyIHdpbmRvdwogICAgc2l6ZSBpcyBnaXZlbiBhcyBpbnB1dCwgaW5mbGF0ZSgpIHdp bGwgcmV0dXJuIHdpdGggdGhlIGVycm9yIGNvZGUKICAgIFpfREFUQV9FUlJPUiBpbnN0ZWFkIG9m IHRyeWluZyB0byBhbGxvY2F0ZSBhIGxhcmdlciB3aW5kb3cuCiAKLSAgICAgd2luZG93Qml0cyBj YW4gYWxzbyBiZSAtOC4uLTE1IGZvciByYXcgaW5mbGF0ZS4gSW4gdGhpcyBjYXNlLCAtd2luZG93 Qml0cwotICAgZGV0ZXJtaW5lcyB0aGUgd2luZG93IHNpemUuIGluZmxhdGUoKSB3aWxsIHRoZW4g cHJvY2VzcyByYXcgZGVmbGF0ZSBkYXRhLAorICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIHpl cm8gdG8gcmVxdWVzdCB0aGF0IGluZmxhdGUgdXNlIHRoZSB3aW5kb3cgc2l6ZSBpbgorICAgdGhl IHpsaWIgaGVhZGVyIG9mIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KKworICAgICB3aW5kb3dCaXRz IGNhbiBhbHNvIGJlIC04Li4tMTUgZm9yIHJhdyBpbmZsYXRlLiAgSW4gdGhpcyBjYXNlLCAtd2lu ZG93Qml0cworICAgZGV0ZXJtaW5lcyB0aGUgd2luZG93IHNpemUuICBpbmZsYXRlKCkgd2lsbCB0 aGVuIHByb2Nlc3MgcmF3IGRlZmxhdGUgZGF0YSwKICAgIG5vdCBsb29raW5nIGZvciBhIHpsaWIg b3IgZ3ppcCBoZWFkZXIsIG5vdCBnZW5lcmF0aW5nIGEgY2hlY2sgdmFsdWUsIGFuZCBub3QKLSAg IGxvb2tpbmcgZm9yIGFueSBjaGVjayB2YWx1ZXMgZm9yIGNvbXBhcmlzb24gYXQgdGhlIGVuZCBv ZiB0aGUgc3RyZWFtLiBUaGlzCisgICBsb29raW5nIGZvciBhbnkgY2hlY2sgdmFsdWVzIGZvciBj b21wYXJpc29uIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4gIFRoaXMKICAgIGlzIGZvciB1c2Ug d2l0aCBvdGhlciBmb3JtYXRzIHRoYXQgdXNlIHRoZSBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBm b3JtYXQKLSAgIHN1Y2ggYXMgemlwLiAgVGhvc2UgZm9ybWF0cyBwcm92aWRlIHRoZWlyIG93biBj aGVjayB2YWx1ZXMuIElmIGEgY3VzdG9tCisgICBzdWNoIGFzIHppcC4gIFRob3NlIGZvcm1hdHMg cHJvdmlkZSB0aGVpciBvd24gY2hlY2sgdmFsdWVzLiAgSWYgYSBjdXN0b20KICAgIGZvcm1hdCBp cyBkZXZlbG9wZWQgdXNpbmcgdGhlIHJhdyBkZWZsYXRlIGZvcm1hdCBmb3IgY29tcHJlc3NlZCBk YXRhLCBpdCBpcwotICAgcmVjb21tZW5kZWQgdGhhdCBhIGNoZWNrIHZhbHVlIHN1Y2ggYXMgYW4g YWRsZXIzMiBvciBhIGNyYzMyIGJlIGFwcGxpZWQgdG8KKyAgIHJlY29tbWVuZGVkIHRoYXQgYSBj aGVjayB2YWx1ZSBzdWNoIGFzIGFuIEFkbGVyLTMyIG9yIGEgQ1JDLTMyIGJlIGFwcGxpZWQgdG8K ICAgIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBhcyBpcyBkb25lIGluIHRoZSB6bGliLCBnemlwLCBh bmQgemlwIGZvcm1hdHMuICBGb3IKLSAgIG1vc3QgYXBwbGljYXRpb25zLCB0aGUgemxpYiBmb3Jt YXQgc2hvdWxkIGJlIHVzZWQgYXMgaXMuIE5vdGUgdGhhdCBjb21tZW50cworICAgbW9zdCBhcHBs aWNhdGlvbnMsIHRoZSB6bGliIGZvcm1hdCBzaG91bGQgYmUgdXNlZCBhcyBpcy4gIE5vdGUgdGhh dCBjb21tZW50cwogICAgYWJvdmUgb24gdGhlIHVzZSBpbiBkZWZsYXRlSW5pdDIoKSBhcHBsaWVz IHRvIHRoZSBtYWduaXR1ZGUgb2Ygd2luZG93Qml0cy4KIAotICAgICB3aW5kb3dCaXRzIGNhbiBh bHNvIGJlIGdyZWF0ZXIgdGhhbiAxNSBmb3Igb3B0aW9uYWwgZ3ppcCBkZWNvZGluZy4gQWRkCisg ICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgZ3JlYXRlciB0aGFuIDE1IGZvciBvcHRpb25hbCBn emlwIGRlY29kaW5nLiAgQWRkCiAgICAzMiB0byB3aW5kb3dCaXRzIHRvIGVuYWJsZSB6bGliIGFu ZCBnemlwIGRlY29kaW5nIHdpdGggYXV0b21hdGljIGhlYWRlcgogICAgZGV0ZWN0aW9uLCBvciBh ZGQgMTYgdG8gZGVjb2RlIG9ubHkgdGhlIGd6aXAgZm9ybWF0ICh0aGUgemxpYiBmb3JtYXQgd2ls bAotICAgcmV0dXJuIGEgWl9EQVRBX0VSUk9SLiAgSWYgYSBnemlwIHN0cmVhbSBpcyBiZWluZyBk ZWNvZGVkLCBzdHJtLT5hZGxlciBpcwotICAgYSBjcmMzMiBpbnN0ZWFkIG9mIGFuIGFkbGVyMzIu CisgICByZXR1cm4gYSBaX0RBVEFfRVJST1IpLiAgSWYgYSBnemlwIHN0cmVhbSBpcyBiZWluZyBk ZWNvZGVkLCBzdHJtLT5hZGxlciBpcyBhCisgICBDUkMtMzIgaW5zdGVhZCBvZiBhbiBBZGxlci0z Mi4gIFVubGlrZSB0aGUgZ3VuemlwIHV0aWxpdHkgYW5kIGd6cmVhZCgpIChzZWUKKyAgIGJlbG93 KSwgaW5mbGF0ZSgpIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgZGVjb2RlIGNvbmNhdGVuYXRlZCBn emlwIHN0cmVhbXMuCisgICBpbmZsYXRlKCkgd2lsbCByZXR1cm4gWl9TVFJFQU1fRU5EIGF0IHRo ZSBlbmQgb2YgdGhlIGd6aXAgc3RyZWFtLiAgVGhlIHN0YXRlCisgICB3b3VsZCBuZWVkIHRvIGJl IHJlc2V0IHRvIGNvbnRpbnVlIGRlY29kaW5nIGEgc3Vic2VxdWVudCBnemlwIHN0cmVhbS4KIAog ICAgICBpbmZsYXRlSW5pdDIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlm IHRoZXJlIHdhcyBub3QgZW5vdWdoCi0gICBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGEgcGFy YW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgYSBuZWdhdGl2ZQotICAgbWVtTGV2ZWwpLiBtc2cg aXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGluZmxhdGVJbml0 MgotICAgZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbiBhcGFydCBmcm9tIHJlYWRp bmcgdGhlIHpsaWIgaGVhZGVyIGlmCi0gICBwcmVzZW50OiB0aGlzIHdpbGwgYmUgZG9uZSBieSBp bmZsYXRlKCkuIChTbyBuZXh0X2luIGFuZCBhdmFpbF9pbiBtYXkgYmUKLSAgIG1vZGlmaWVkLCBi dXQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBhcmUgdW5jaGFuZ2VkLikKKyAgIG1lbW9yeSwgWl9W RVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUg d2l0aCB0aGUKKyAgIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyLCBvciBaX1NUUkVBTV9F UlJPUiBpZiB0aGUgcGFyYW1ldGVycyBhcmUKKyAgIGludmFsaWQsIHN1Y2ggYXMgYSBudWxsIHBv aW50ZXIgdG8gdGhlIHN0cnVjdHVyZS4gIG1zZyBpcyBzZXQgdG8gbnVsbCBpZgorICAgdGhlcmUg aXMgbm8gZXJyb3IgbWVzc2FnZS4gIGluZmxhdGVJbml0MiBkb2VzIG5vdCBwZXJmb3JtIGFueSBk ZWNvbXByZXNzaW9uCisgICBhcGFydCBmcm9tIHBvc3NpYmx5IHJlYWRpbmcgdGhlIHpsaWIgaGVh ZGVyIGlmIHByZXNlbnQ6IGFjdHVhbCBkZWNvbXByZXNzaW9uCisgICB3aWxsIGJlIGRvbmUgYnkg aW5mbGF0ZSgpLiAgKFNvIG5leHRfaW4gYW5kIGF2YWlsX2luIG1heSBiZSBtb2RpZmllZCwgYnV0 CisgICBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bnVzZWQgYW5kIHVuY2hhbmdlZC4pIFRo ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCisgICBvZiBpbmZsYXRlSW5pdDIoKSBkb2VzIG5vdCBw cm9jZXNzIGFueSBoZWFkZXIgaW5mb3JtYXRpb24gLS0gdGhhdCBpcworICAgZGVmZXJyZWQgdW50 aWwgaW5mbGF0ZSgpIGlzIGNhbGxlZC4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0 ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNjY0LDMzICs4ODgsNTYgQEAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgIGRpY3RM ZW5ndGgpKTsKIC8qCiAgICAgIEluaXRpYWxpemVzIHRoZSBkZWNvbXByZXNzaW9uIGRpY3Rpb25h cnkgZnJvbSB0aGUgZ2l2ZW4gdW5jb21wcmVzc2VkIGJ5dGUKLSAgIHNlcXVlbmNlLiBUaGlzIGZ1 bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiBpbmZsYXRl Ci0gICBpZiB0aGlzIGNhbGwgcmV0dXJuZWQgWl9ORUVEX0RJQ1QuIFRoZSBkaWN0aW9uYXJ5IGNo b3NlbiBieSB0aGUgY29tcHJlc3NvcgotICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYWRs ZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGNhbGwgb2YKLSAgIGluZmxhdGUuIFRoZSBjb21w cmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQotICAgZGlj dGlvbmFyeSAoc2VlIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4KKyAgIHNlcXVlbmNlLiAgVGhpcyBm dW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGNhbGwgb2YgaW5mbGF0 ZSwKKyAgIGlmIHRoYXQgY2FsbCByZXR1cm5lZCBaX05FRURfRElDVC4gIFRoZSBkaWN0aW9uYXJ5 IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgorICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUg QWRsZXItMzIgdmFsdWUgcmV0dXJuZWQgYnkgdGhhdCBjYWxsIG9mIGluZmxhdGUuCisgICBUaGUg Y29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGlj dGlvbmFyeSAoc2VlCisgICBkZWZsYXRlU2V0RGljdGlvbmFyeSkuICBGb3IgcmF3IGluZmxhdGUs IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBhbnkKKyAgIHRpbWUgdG8gc2V0IHRoZSBk aWN0aW9uYXJ5LiAgSWYgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkgaXMgc21hbGxlciB0aGFuIHRo ZQorICAgd2luZG93IGFuZCB0aGVyZSBpcyBhbHJlYWR5IGRhdGEgaW4gdGhlIHdpbmRvdywgdGhl biB0aGUgcHJvdmlkZWQgZGljdGlvbmFyeQorICAgd2lsbCBhbWVuZCB3aGF0J3MgdGhlcmUuICBU aGUgYXBwbGljYXRpb24gbXVzdCBpbnN1cmUgdGhhdCB0aGUgZGljdGlvbmFyeQorICAgdGhhdCB3 YXMgdXNlZCBmb3IgY29tcHJlc3Npb24gaXMgcHJvdmlkZWQuCiAKICAgICAgaW5mbGF0ZVNldERp Y3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGEKLSAg IHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIE5VTEwgZGljdGlvbmFyeSkgb3IgdGhlIHN0 cmVhbSBzdGF0ZSBpcworICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKGUuZy4gIGRpY3Rpb25hcnkg YmVpbmcgWl9OVUxMKSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCiAgICBpbmNvbnNpc3RlbnQsIFpf REFUQV9FUlJPUiBpZiB0aGUgZ2l2ZW4gZGljdGlvbmFyeSBkb2Vzbid0IG1hdGNoIHRoZQotICAg ZXhwZWN0ZWQgb25lIChpbmNvcnJlY3QgYWRsZXIzMiB2YWx1ZSkuIGluZmxhdGVTZXREaWN0aW9u YXJ5IGRvZXMgbm90CisgICBleHBlY3RlZCBvbmUgKGluY29ycmVjdCBBZGxlci0zMiB2YWx1ZSku ICBpbmZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAogICAgcGVyZm9ybSBhbnkgZGVjb21wcmVz c2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgc3Vic2VxdWVudCBjYWxscyBvZgogICAgaW5mbGF0 ZSgpLgogKi8KIAorWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlR2V0RGljdGlvbmFyeSBPRigo el9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVJbnQgICpkaWN0TGVuZ3RoKSk7CisvKgorICAgICBSZXR1cm5zIHRoZSBz bGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRhaW5lZCBieSBpbmZsYXRlLiAgZGljdExlbmd0 aCBpcworICAgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpY3Rpb25hcnksIGFu ZCB0aGF0IG1hbnkgYnl0ZXMgYXJlIGNvcGllZAorICAgdG8gZGljdGlvbmFyeS4gIGRpY3Rpb25h cnkgbXVzdCBoYXZlIGVub3VnaCBzcGFjZSwgd2hlcmUgMzI3NjggYnl0ZXMgaXMKKyAgIGFsd2F5 cyBlbm91Z2guICBJZiBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rp b25hcnkgZXF1YWwgdG8KKyAgIFpfTlVMTCwgdGhlbiBvbmx5IHRoZSBkaWN0aW9uYXJ5IGxlbmd0 aCBpcyByZXR1cm5lZCwgYW5kIG5vdGhpbmcgaXMgY29waWVkLgorICAgU2ltaWxhcnksIGlmIGRp Y3RMZW5ndGggaXMgWl9OVUxMLCB0aGVuIGl0IGlzIG5vdCBzZXQuCisKKyAgICAgaW5mbGF0ZUdl dERpY3Rpb25hcnkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlm IHRoZQorICAgc3RyZWFtIHN0YXRlIGlzIGluY29uc2lzdGVudC4KKyovCisKIFpFWFRFUk4gaW50 IFpFWFBPUlQgaW5mbGF0ZVN5bmMgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgotICAgIFNraXBz IGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFi b3ZlIHRoZQotICBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4g YmUgZm91bmQsIG9yIHVudGlsIGFsbAotICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gTm8g b3V0cHV0IGlzIHByb3ZpZGVkLgorICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1 bnRpbCBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZQorICAgZm9yIHRoZSBk ZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9y IHVudGlsIGFsbAorICAgYXZhaWxhYmxlIGlucHV0IGlzIHNraXBwZWQuICBObyBvdXRwdXQgaXMg cHJvdmlkZWQuCiAKLSAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBmdWxsIGZsdXNo IHBvaW50IGhhcyBiZWVuIGZvdW5kLCBaX0JVRl9FUlJPUgotICBpZiBubyBtb3JlIGlucHV0IHdh cyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5k LAotICBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25z aXN0ZW50LiBJbiB0aGUgc3VjY2VzcwotICBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUg dGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZiB0b3RhbF9pbiB3aGljaAotICBpbmRpY2F0ZXMg d2hlcmUgdmFsaWQgY29tcHJlc3NlZCBkYXRhIHdhcyBmb3VuZC4gSW4gdGhlIGVycm9yIGNhc2Us IHRoZQotICBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIGluZmxhdGVTeW5jLCBwcm92 aWRpbmcgbW9yZSBpbnB1dCBlYWNoIHRpbWUsCi0gIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRo ZSBpbnB1dCBkYXRhLgorICAgICBpbmZsYXRlU3luYyBzZWFyY2hlcyBmb3IgYSAwMCAwMCBGRiBG RiBwYXR0ZXJuIGluIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgICBBbGwgZnVsbCBmbHVzaCBwb2lu dHMgaGF2ZSB0aGlzIHBhdHRlcm4sIGJ1dCBub3QgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMKKyAg IHBhdHRlcm4gYXJlIGZ1bGwgZmx1c2ggcG9pbnRzLgorCisgICAgIGluZmxhdGVTeW5jIHJldHVy bnMgWl9PSyBpZiBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCisg ICBaX0JVRl9FUlJPUiBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9S IGlmIG5vIGZsdXNoIHBvaW50CisgICBoYXMgYmVlbiBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1Ig aWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4KKyAgIEluIHRoZSBzdWNj ZXNzIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCBjdXJyZW50IHZh bHVlIG9mCisgICB0b3RhbF9pbiB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgdmFsaWQgY29tcHJlc3Nl ZCBkYXRhIHdhcyBmb3VuZC4gIEluIHRoZQorICAgZXJyb3IgY2FzZSwgdGhlIGFwcGxpY2F0aW9u IG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlCisgICBpbnB1 dCBlYWNoIHRpbWUsIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRoZSBpbnB1dCBkYXRhLgogKi8K IAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCkBA IC03MDUsMjIgKzk1MiwxMjUgQEAKIAogICAgICBpbmZsYXRlQ29weSByZXR1cm5zIFpfT0sgaWYg c3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAogICAgZW5vdWdoIG1lbW9yeSwg Wl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVu dAotICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIE5VTEwpLiBtc2cgaXMgbGVmdCB1bmNoYW5nZWQg aW4gYm90aCBzb3VyY2UgYW5kCisgICAoc3VjaCBhcyB6YWxsb2MgYmVpbmcgWl9OVUxMKS4gIG1z ZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKICAgIGRlc3RpbmF0aW9uLgog Ki8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQgT0YoKHpfc3RyZWFtcCBzdHJt KSk7CiAvKgogICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gaW5mbGF0ZUVuZCBm b2xsb3dlZCBieSBpbmZsYXRlSW5pdCwKLSAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9j YXRlIGFsbCB0aGUgaW50ZXJuYWwgZGVjb21wcmVzc2lvbiBzdGF0ZS4KLSAgIFRoZSBzdHJlYW0g d2lsbCBrZWVwIGF0dHJpYnV0ZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBieSBpbmZsYXRlSW5p dDIuCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgZGVj b21wcmVzc2lvbiBzdGF0ZS4gIFRoZQorICAgc3RyZWFtIHdpbGwga2VlcCBhdHRyaWJ1dGVzIHRo YXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgaW5mbGF0ZUluaXQyLgogCi0gICAgICBpbmZsYXRlUmVz ZXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3Vy Y2UKLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIHphbGxvYyBvciBz dGF0ZSBiZWluZyBOVUxMKS4KKyAgICAgaW5mbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBpZiBzdWNj ZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2Fz IGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgWl9OVUxMKS4KKyov CisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0MiBPRigoel9zdHJlYW1wIHN0cm0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzKSk7 CisvKgorICAgICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIGluZmxhdGVSZXNldCwgYnV0 IGl0IGFsc28gcGVybWl0cyBjaGFuZ2luZworICAgdGhlIHdyYXAgYW5kIHdpbmRvdyBzaXplIHJl cXVlc3RzLiAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIGludGVycHJldGVkCisgICB0aGUg c2FtZSBhcyBpdCBpcyBmb3IgaW5mbGF0ZUluaXQyLiAgSWYgdGhlIHdpbmRvdyBzaXplIGlzIGNo YW5nZWQsIHRoZW4gdGhlCisgICBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgd2luZG93IGlzIGZy ZWVkLCBhbmQgdGhlIHdpbmRvdyB3aWxsIGJlIHJlYWxsb2NhdGVkCisgICBieSBpbmZsYXRlKCkg aWYgbmVlZGVkLgorCisgICAgIGluZmxhdGVSZXNldDIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3Ms IG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5j b25zaXN0ZW50IChzdWNoIGFzIHphbGxvYyBvciBzdGF0ZSBiZWluZyBaX05VTEwpLCBvciBpZgor ICAgdGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIGludmFsaWQuCisqLworCitaRVhURVJOIGlu dCBaRVhQT1JUIGluZmxhdGVQcmltZSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHZhbHVlKSk7CisvKgorICAgICBUaGlzIGZ1bmN0aW9uIGluc2Vy dHMgYml0cyBpbiB0aGUgaW5mbGF0ZSBpbnB1dCBzdHJlYW0uICBUaGUgaW50ZW50IGlzCisgICB0 aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdGFydCBpbmZsYXRpbmcgYXQgYSBiaXQgcG9z aXRpb24gaW4gdGhlCisgICBtaWRkbGUgb2YgYSBieXRlLiAgVGhlIHByb3ZpZGVkIGJpdHMgd2ls bCBiZSB1c2VkIGJlZm9yZSBhbnkgYnl0ZXMgYXJlIHVzZWQKKyAgIGZyb20gbmV4dF9pbi4gIFRo aXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIHJhdyBpbmZsYXRlLCBhbmQKKyAg IHNob3VsZCBiZSB1c2VkIGJlZm9yZSB0aGUgZmlyc3QgaW5mbGF0ZSgpIGNhbGwgYWZ0ZXIgaW5m bGF0ZUluaXQyKCkgb3IKKyAgIGluZmxhdGVSZXNldCgpLiAgYml0cyBtdXN0IGJlIGxlc3MgdGhh biBvciBlcXVhbCB0byAxNiwgYW5kIHRoYXQgbWFueSBvZiB0aGUKKyAgIGxlYXN0IHNpZ25pZmlj YW50IGJpdHMgb2YgdmFsdWUgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgaW5wdXQuCisKKyAgICAg SWYgYml0cyBpcyBuZWdhdGl2ZSwgdGhlbiB0aGUgaW5wdXQgc3RyZWFtIGJpdCBidWZmZXIgaXMg ZW1wdGllZC4gIFRoZW4KKyAgIGluZmxhdGVQcmltZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gdG8g cHV0IGJpdHMgaW4gdGhlIGJ1ZmZlci4gIFRoaXMgaXMgdXNlZAorICAgdG8gY2xlYXIgb3V0IGJp dHMgbGVmdG92ZXIgYWZ0ZXIgZmVlZGluZyBpbmZsYXRlIGEgYmxvY2sgZGVzY3JpcHRpb24gcHJp b3IKKyAgIHRvIGZlZWRpbmcgaW5mbGF0ZSBjb2Rlcy4KKworICAgICBpbmZsYXRlUHJpbWUgcmV0 dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAg IHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorKi8KKworWkVYVEVSTiBsb25nIFpFWFBP UlQgaW5mbGF0ZU1hcmsgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CisvKgorICAgICBUaGlzIGZ1bmN0 aW9uIHJldHVybnMgdHdvIHZhbHVlcywgb25lIGluIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSBy ZXR1cm4KKyAgIHZhbHVlLCBhbmQgdGhlIG90aGVyIGluIHRoZSByZW1haW5pbmcgdXBwZXIgYml0 cywgb2J0YWluZWQgYnkgc2hpZnRpbmcgdGhlCisgICByZXR1cm4gdmFsdWUgZG93biAxNiBiaXRz LiAgSWYgdGhlIHVwcGVyIHZhbHVlIGlzIC0xIGFuZCB0aGUgbG93ZXIgdmFsdWUgaXMKKyAgIHpl cm8sIHRoZW4gaW5mbGF0ZSgpIGlzIGN1cnJlbnRseSBkZWNvZGluZyBpbmZvcm1hdGlvbiBvdXRz aWRlIG9mIGEgYmxvY2suCisgICBJZiB0aGUgdXBwZXIgdmFsdWUgaXMgLTEgYW5kIHRoZSBsb3dl ciB2YWx1ZSBpcyBub24temVybywgdGhlbiBpbmZsYXRlIGlzIGluCisgICB0aGUgbWlkZGxlIG9m IGEgc3RvcmVkIGJsb2NrLCB3aXRoIHRoZSBsb3dlciB2YWx1ZSBlcXVhbGluZyB0aGUgbnVtYmVy IG9mCisgICBieXRlcyBmcm9tIHRoZSBpbnB1dCByZW1haW5pbmcgdG8gY29weS4gIElmIHRoZSB1 cHBlciB2YWx1ZSBpcyBub3QgLTEsIHRoZW4KKyAgIGl0IGlzIHRoZSBudW1iZXIgb2YgYml0cyBi YWNrIGZyb20gdGhlIGN1cnJlbnQgYml0IHBvc2l0aW9uIGluIHRoZSBpbnB1dCBvZgorICAgdGhl IGNvZGUgKGxpdGVyYWwgb3IgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIpIGN1cnJlbnRseSBiZWluZyBw cm9jZXNzZWQuICBJbgorICAgdGhhdCBjYXNlIHRoZSBsb3dlciB2YWx1ZSBpcyB0aGUgbnVtYmVy IG9mIGJ5dGVzIGFscmVhZHkgZW1pdHRlZCBmb3IgdGhhdAorICAgY29kZS4KKworICAgICBBIGNv ZGUgaXMgYmVpbmcgcHJvY2Vzc2VkIGlmIGluZmxhdGUgaXMgd2FpdGluZyBmb3IgbW9yZSBpbnB1 dCB0byBjb21wbGV0ZQorICAgZGVjb2Rpbmcgb2YgdGhlIGNvZGUsIG9yIGlmIGl0IGhhcyBjb21w bGV0ZWQgZGVjb2RpbmcgYnV0IGlzIHdhaXRpbmcgZm9yCisgICBtb3JlIG91dHB1dCBzcGFjZSB0 byB3cml0ZSB0aGUgbGl0ZXJhbCBvciBtYXRjaCBkYXRhLgorCisgICAgIGluZmxhdGVNYXJrKCkg aXMgdXNlZCB0byBtYXJrIGxvY2F0aW9ucyBpbiB0aGUgaW5wdXQgZGF0YSBmb3IgcmFuZG9tCisg ICBhY2Nlc3MsIHdoaWNoIG1heSBiZSBhdCBiaXQgcG9zaXRpb25zLCBhbmQgdG8gbm90ZSB0aG9z ZSBjYXNlcyB3aGVyZSB0aGUKKyAgIG91dHB1dCBvZiBhIGNvZGUgbWF5IHNwYW4gYm91bmRhcmll cyBvZiByYW5kb20gYWNjZXNzIGJsb2Nrcy4gIFRoZSBjdXJyZW50CisgICBsb2NhdGlvbiBpbiB0 aGUgaW5wdXQgc3RyZWFtIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gYXZhaWxfaW4gYW5kIGRhdGFf dHlwZQorICAgYXMgbm90ZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgWl9CTE9DSyBmbHVz aCBwYXJhbWV0ZXIgZm9yIGluZmxhdGUuCisKKyAgICAgaW5mbGF0ZU1hcmsgcmV0dXJucyB0aGUg dmFsdWUgbm90ZWQgYWJvdmUsIG9yIC02NTUzNiBpZiB0aGUgcHJvdmlkZWQKKyAgIHNvdXJjZSBz dHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQg aW5mbGF0ZUdldEhlYWRlciBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGd6X2hlYWRlcnAgaGVhZCkpOworLyoKKyAgICAgaW5mbGF0 ZUdldEhlYWRlcigpIHJlcXVlc3RzIHRoYXQgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gYmUgc3Rv cmVkIGluIHRoZQorICAgcHJvdmlkZWQgZ3pfaGVhZGVyIHN0cnVjdHVyZS4gIGluZmxhdGVHZXRI ZWFkZXIoKSBtYXkgYmUgY2FsbGVkIGFmdGVyCisgICBpbmZsYXRlSW5pdDIoKSBvciBpbmZsYXRl UmVzZXQoKSwgYW5kIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCBvZiBpbmZsYXRlKCkuCisgICBBcyBp bmZsYXRlKCkgcHJvY2Vzc2VzIHRoZSBnemlwIHN0cmVhbSwgaGVhZC0+ZG9uZSBpcyB6ZXJvIHVu dGlsIHRoZSBoZWFkZXIKKyAgIGlzIGNvbXBsZXRlZCwgYXQgd2hpY2ggdGltZSBoZWFkLT5kb25l IGlzIHNldCB0byBvbmUuICBJZiBhIHpsaWIgc3RyZWFtIGlzCisgICBiZWluZyBkZWNvZGVkLCB0 aGVuIGhlYWQtPmRvbmUgaXMgc2V0IHRvIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgd2lsbCBi ZQorICAgbm8gZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gZm9ydGhjb21pbmcuICBOb3RlIHRoYXQg Wl9CTE9DSyBvciBaX1RSRUVTIGNhbiBiZQorICAgdXNlZCB0byBmb3JjZSBpbmZsYXRlKCkgdG8g cmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGhlYWRlciBwcm9jZXNzaW5nIGlzCisgICBjb21wbGV0 ZSBhbmQgYmVmb3JlIGFueSBhY3R1YWwgZGF0YSBpcyBkZWNvbXByZXNzZWQuCisKKyAgICAgVGhl IHRleHQsIHRpbWUsIHhmbGFncywgYW5kIG9zIGZpZWxkcyBhcmUgZmlsbGVkIGluIHdpdGggdGhl IGd6aXAgaGVhZGVyCisgICBjb250ZW50cy4gIGhjcmMgaXMgc2V0IHRvIHRydWUgaWYgdGhlcmUg aXMgYSBoZWFkZXIgQ1JDLiAgKFRoZSBoZWFkZXIgQ1JDCisgICB3YXMgdmFsaWQgaWYgZG9uZSBp cyBzZXQgdG8gb25lLikgSWYgZXh0cmEgaXMgbm90IFpfTlVMTCwgdGhlbiBleHRyYV9tYXgKKyAg IGNvbnRhaW5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSB0byBleHRyYS4g IE9uY2UgZG9uZSBpcyB0cnVlLAorICAgZXh0cmFfbGVuIGNvbnRhaW5zIHRoZSBhY3R1YWwgZXh0 cmEgZmllbGQgbGVuZ3RoLCBhbmQgZXh0cmEgY29udGFpbnMgdGhlCisgICBleHRyYSBmaWVsZCwg b3IgdGhhdCBmaWVsZCB0cnVuY2F0ZWQgaWYgZXh0cmFfbWF4IGlzIGxlc3MgdGhhbiBleHRyYV9s ZW4uCisgICBJZiBuYW1lIGlzIG5vdCBaX05VTEwsIHRoZW4gdXAgdG8gbmFtZV9tYXggY2hhcmFj dGVycyBhcmUgd3JpdHRlbiB0aGVyZSwKKyAgIHRlcm1pbmF0ZWQgd2l0aCBhIHplcm8gdW5sZXNz IHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIG5hbWVfbWF4LiAgSWYKKyAgIGNvbW1lbnQgaXMg bm90IFpfTlVMTCwgdGhlbiB1cCB0byBjb21tX21heCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRo ZXJlLAorICAgdGVybWluYXRlZCB3aXRoIGEgemVybyB1bmxlc3MgdGhlIGxlbmd0aCBpcyBncmVh dGVyIHRoYW4gY29tbV9tYXguICBXaGVuIGFueQorICAgb2YgZXh0cmEsIG5hbWUsIG9yIGNvbW1l bnQgYXJlIG5vdCBaX05VTEwgYW5kIHRoZSByZXNwZWN0aXZlIGZpZWxkIGlzIG5vdAorICAgcHJl c2VudCBpbiB0aGUgaGVhZGVyLCB0aGVuIHRoYXQgZmllbGQgaXMgc2V0IHRvIFpfTlVMTCB0byBz aWduYWwgaXRzCisgICBhYnNlbmNlLiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiBkZWZsYXRlU2V0 SGVhZGVyKCkgd2l0aCB0aGUgcmV0dXJuZWQKKyAgIHN0cnVjdHVyZSB0byBkdXBsaWNhdGUgdGhl IGhlYWRlci4gIEhvd2V2ZXIgaWYgdGhvc2UgZmllbGRzIGFyZSBzZXQgdG8KKyAgIGFsbG9jYXRl ZCBtZW1vcnksIHRoZW4gdGhlIGFwcGxpY2F0aW9uIHdpbGwgbmVlZCB0byBzYXZlIHRob3NlIHBv aW50ZXJzCisgICBlbHNld2hlcmUgc28gdGhhdCB0aGV5IGNhbiBiZSBldmVudHVhbGx5IGZyZWVk LgorCisgICAgIElmIGluZmxhdGVHZXRIZWFkZXIgaXMgbm90IHVzZWQsIHRoZW4gdGhlIGhlYWRl ciBpbmZvcm1hdGlvbiBpcyBzaW1wbHkKKyAgIGRpc2NhcmRlZC4gIFRoZSBoZWFkZXIgaXMgYWx3 YXlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5LCBpbmNsdWRpbmcgdGhlIGhlYWRlcgorICAgQ1JDIGlm IHByZXNlbnQuICBpbmZsYXRlUmVzZXQoKSB3aWxsIHJlc2V0IHRoZSBwcm9jZXNzIHRvIGRpc2Nh cmQgdGhlIGhlYWRlcgorICAgaW5mb3JtYXRpb24uICBUaGUgYXBwbGljYXRpb24gd291bGQgbmVl ZCB0byBjYWxsIGluZmxhdGVHZXRIZWFkZXIoKSBhZ2FpbiB0bworICAgcmV0cmlldmUgdGhlIGhl YWRlciBmcm9tIHRoZSBuZXh0IGd6aXAgc3RyZWFtLgorCisgICAgIGluZmxhdGVHZXRIZWFkZXIg cmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UK KyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgogKi8KIAogLyoKLVpFWFRFUk4gaW50 IFpFWFBPUlQgaW5mbGF0ZUJhY2tJbml0IE9GKCh6X3N0cmVhbSBGQVIgKnN0cm0sIGludCB3aW5k b3dCaXRzLAorWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0luaXQgT0YoKHpfc3RyZWFt cCBzdHJtLCBpbnQgd2luZG93Qml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93KSk7CiAKICAgICAgSW5pdGlhbGl6ZSB0 aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBkZWNvbXByZXNzaW9uIHVzaW5nIGluZmxhdGVC YWNrKCkKQEAgLTczNiwzOCArMTA4Niw0MCBAQAogICAgICBTZWUgaW5mbGF0ZUJhY2soKSBmb3Ig dGhlIHVzYWdlIG9mIHRoZXNlIHJvdXRpbmVzLgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCB3aWxs IHJldHVybiBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBvZgotICAgdGhl IHBhcmFtYXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0 ZSBjb3VsZCBub3QKLSAgIGJlIGFsbG9jYXRlZCwgb3IgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB2 ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXMgbm90Ci0gICBtYXRjaCB0aGUgdmVyc2lvbiBvZiB0 aGUgaGVhZGVyIGZpbGUuCisgICB0aGUgcGFyYW1ldGVycyBhcmUgaW52YWxpZCwgWl9NRU1fRVJS T1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdCBiZQorICAgYWxsb2NhdGVkLCBvciBa X1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QgbWF0 Y2gKKyAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4KICovCiAKLXR5cGVkZWYgdW5z aWduZWQgKCppbl9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIg KikpOwordHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICogRkFS ICopKTsKIHR5cGVkZWYgaW50ICgqb3V0X2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBj aGFyIEZBUiAqLCB1bnNpZ25lZCkpOwogCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNr IE9GKCh6X3N0cmVhbSBGQVIgKnN0cm0sCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNr IE9GKCh6X3N0cmVhbXAgc3RybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluX2Z1bmMgaW4sIHZvaWQgRkFSICppbl9kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3V0X2Z1bmMgb3V0LCB2b2lkIEZBUiAqb3V0X2Rlc2MpKTsKIC8qCiAgICAg IGluZmxhdGVCYWNrKCkgZG9lcyBhIHJhdyBpbmZsYXRlIHdpdGggYSBzaW5nbGUgY2FsbCB1c2lu ZyBhIGNhbGwtYmFjawotICAgaW50ZXJmYWNlIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgVGhpcyBp cyBtb3JlIGVmZmljaWVudCB0aGFuIGluZmxhdGUoKSBmb3IKLSAgIGZpbGUgaS9vIGFwcGxpY2F0 aW9ucyBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlIG91dHB1dCBhbmQgdGhl Ci0gICBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRo ZSBvdXRwdXQgYnVmZmVyLiAgVGhpcwotICAgZnVuY3Rpb24gdHJ1c3RzIHRoZSBhcHBsaWNhdGlv biB0byBub3QgY2hhbmdlIHRoZSBvdXRwdXQgYnVmZmVyIHBhc3NlZCBieQotICAgdGhlIG91dHB1 dCBmdW5jdGlvbiwgYXQgbGVhc3QgdW50aWwgaW5mbGF0ZUJhY2soKSByZXR1cm5zLgorICAgaW50 ZXJmYWNlIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgVGhpcyBpcyBwb3RlbnRpYWxseSBtb3JlIGVm ZmljaWVudCB0aGFuCisgICBpbmZsYXRlKCkgZm9yIGZpbGUgaS9vIGFwcGxpY2F0aW9ucywgaW4g dGhhdCBpdCBhdm9pZHMgY29weWluZyBiZXR3ZWVuIHRoZQorICAgb3V0cHV0IGFuZCB0aGUgc2xp ZGluZyB3aW5kb3cgYnkgc2ltcGx5IG1ha2luZyB0aGUgd2luZG93IGl0c2VsZiB0aGUgb3V0cHV0 CisgICBidWZmZXIuICBpbmZsYXRlKCkgY2FuIGJlIGZhc3RlciBvbiBtb2Rlcm4gQ1BVcyB3aGVu IHVzZWQgd2l0aCBsYXJnZQorICAgYnVmZmVycy4gIGluZmxhdGVCYWNrKCkgdHJ1c3RzIHRoZSBh cHBsaWNhdGlvbiB0byBub3QgY2hhbmdlIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlciBwYXNzZWQgYnkg dGhlIG91dHB1dCBmdW5jdGlvbiwgYXQgbGVhc3QgdW50aWwgaW5mbGF0ZUJhY2soKSByZXR1cm5z LgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCgpIG11c3QgYmUgY2FsbGVkIGZpcnN0IHRvIGFsbG9j YXRlIHRoZSBpbnRlcm5hbCBzdGF0ZQogICAgYW5kIHRvIGluaXRpYWxpemUgdGhlIHN0YXRlIHdp dGggdGhlIHVzZXItcHJvdmlkZWQgd2luZG93IGJ1ZmZlci4KICAgIGluZmxhdGVCYWNrKCkgbWF5 IHRoZW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBpbmZsYXRlIGEgY29tcGxldGUsIHJhdwot ICAgZGVmbGF0ZSBzdHJlYW0gd2l0aCBlYWNoIGNhbGwuICBpbmZsYXRlQmFja0VuZCgpIGlzIHRo ZW4gY2FsbGVkIHRvIGZyZWUKLSAgIHRoZSBhbGxvY2F0ZWQgc3RhdGUuCisgICBkZWZsYXRlIHN0 cmVhbSB3aXRoIGVhY2ggY2FsbC4gIGluZmxhdGVCYWNrRW5kKCkgaXMgdGhlbiBjYWxsZWQgdG8g ZnJlZSB0aGUKKyAgIGFsbG9jYXRlZCBzdGF0ZS4KIAogICAgICBBIHJhdyBkZWZsYXRlIHN0cmVh bSBpcyBvbmUgd2l0aCBubyB6bGliIG9yIGd6aXAgaGVhZGVyIG9yIHRyYWlsZXIuCiAgICBUaGlz IHJvdXRpbmUgd291bGQgbm9ybWFsbHkgYmUgdXNlZCBpbiBhIHV0aWxpdHkgdGhhdCByZWFkcyB6 aXAgb3IgZ3ppcAogICAgZmlsZXMgYW5kIHdyaXRlcyBvdXQgdW5jb21wcmVzc2VkIGZpbGVzLiAg VGhlIHV0aWxpdHkgd291bGQgZGVjb2RlIHRoZQotICAgaGVhZGVyIGFuZCBwcm9jZXNzIHRoZSB0 cmFpbGVyIG9uIGl0cyBvd24sIGhlbmNlIHRoaXMgcm91dGluZSBleHBlY3RzCi0gICBvbmx5IHRo ZSByYXcgZGVmbGF0ZSBzdHJlYW0gdG8gZGVjb21wcmVzcy4gIFRoaXMgaXMgZGlmZmVyZW50IGZy b20gdGhlCi0gICBub3JtYWwgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBlY3RzIGVp dGhlciBhIHpsaWIgb3IgZ3ppcCBoZWFkZXIgYW5kCi0gICB0cmFpbGVyIGFyb3VuZCB0aGUgZGVm bGF0ZSBzdHJlYW0uCisgICBoZWFkZXIgYW5kIHByb2Nlc3MgdGhlIHRyYWlsZXIgb24gaXRzIG93 biwgaGVuY2UgdGhpcyByb3V0aW5lIGV4cGVjdHMgb25seQorICAgdGhlIHJhdyBkZWZsYXRlIHN0 cmVhbSB0byBkZWNvbXByZXNzLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdAor ICAgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBlY3RzIGEgemxpYiBoZWFkZXIgYW5k IHRyYWlsZXIgYXJvdW5kIHRoZQorICAgZGVmbGF0ZSBzdHJlYW0uCiAKICAgICAgaW5mbGF0ZUJh Y2soKSB1c2VzIHR3byBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyIHRoYXQgYXJl IHRoZW4KICAgIGNhbGxlZCBieSBpbmZsYXRlQmFjaygpIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAg aW5mbGF0ZUJhY2soKSBjYWxscyB0aG9zZQpAQCAtNzc2LDEyICsxMTI4LDEyIEBACiAgICBwYXJh bWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMgYXJlIGRlZmluZWQgYWJvdmUgaW4gdGhlIGluX2Z1bmMg YW5kIG91dF9mdW5jCiAgICB0eXBlZGVmcy4gIGluZmxhdGVCYWNrKCkgd2lsbCBjYWxsIGluKGlu X2Rlc2MsICZidWYpIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlCiAgICBudW1iZXIgb2YgYnl0ZXMg b2YgcHJvdmlkZWQgaW5wdXQsIGFuZCBhIHBvaW50ZXIgdG8gdGhhdCBpbnB1dCBpbiBidWYuICBJ ZgotICAgdGhlcmUgaXMgbm8gaW5wdXQgYXZhaWxhYmxlLCBpbigpIG11c3QgcmV0dXJuIHplcm8t LWJ1ZiBpcyBpZ25vcmVkIGluIHRoYXQKLSAgIGNhc2UtLWFuZCBpbmZsYXRlQmFjaygpIHdpbGwg cmV0dXJuIGEgYnVmZmVyIGVycm9yLiAgaW5mbGF0ZUJhY2soKSB3aWxsIGNhbGwKLSAgIG91dChv dXRfZGVzYywgYnVmLCBsZW4pIHRvIHdyaXRlIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBidWZbMC4u bGVuLTFdLiAgb3V0KCkKLSAgIHNob3VsZCByZXR1cm4gemVybyBvbiBzdWNjZXNzLCBvciBub24t emVybyBvbiBmYWlsdXJlLiAgSWYgb3V0KCkgcmV0dXJucwotICAgbm9uLXplcm8sIGluZmxhdGVC YWNrKCkgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvci4gIE5laXRoZXIgaW4oKSBub3Igb3V0KCkK LSAgIGFyZSBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgd2luZG93IHBy b3ZpZGVkIHRvCisgICB0aGVyZSBpcyBubyBpbnB1dCBhdmFpbGFibGUsIGluKCkgbXVzdCByZXR1 cm4gemVybyAtLSBidWYgaXMgaWdub3JlZCBpbiB0aGF0CisgICBjYXNlIC0tIGFuZCBpbmZsYXRl QmFjaygpIHdpbGwgcmV0dXJuIGEgYnVmZmVyIGVycm9yLiAgaW5mbGF0ZUJhY2soKSB3aWxsCisg ICBjYWxsIG91dChvdXRfZGVzYywgYnVmLCBsZW4pIHRvIHdyaXRlIHRoZSB1bmNvbXByZXNzZWQg ZGF0YSBidWZbMC4ubGVuLTFdLgorICAgb3V0KCkgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nl c3MsIG9yIG5vbi16ZXJvIG9uIGZhaWx1cmUuICBJZiBvdXQoKQorICAgcmV0dXJucyBub24temVy bywgaW5mbGF0ZUJhY2soKSB3aWxsIHJldHVybiB3aXRoIGFuIGVycm9yLiAgTmVpdGhlciBpbigp IG5vcgorICAgb3V0KCkgYXJlIHBlcm1pdHRlZCB0byBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRo ZSB3aW5kb3cgcHJvdmlkZWQgdG8KICAgIGluZmxhdGVCYWNrSW5pdCgpLCB3aGljaCBpcyBhbHNv IHRoZSBidWZmZXIgdGhhdCBvdXQoKSB1c2VzIHRvIHdyaXRlIGZyb20uCiAgICBUaGUgbGVuZ3Ro IHdyaXR0ZW4gYnkgb3V0KCkgd2lsbCBiZSBhdCBtb3N0IHRoZSB3aW5kb3cgc2l6ZS4gIEFueSBu b24temVybwogICAgYW1vdW50IG9mIGlucHV0IG1heSBiZSBwcm92aWRlZCBieSBpbigpLgpAQCAt NzkyLDcgKzExNDQsNyBAQAogICAgY2FsbGluZyBpbmZsYXRlQmFjaygpLiAgSWYgc3RybS0+bmV4 dF9pbiBpcyBaX05VTEwsIHRoZW4gaW4oKSB3aWxsIGJlIGNhbGxlZAogICAgaW1tZWRpYXRlbHkg Zm9yIGlucHV0LiAgSWYgc3RybS0+bmV4dF9pbiBpcyBub3QgWl9OVUxMLCB0aGVuIHN0cm0tPmF2 YWlsX2luCiAgICBtdXN0IGFsc28gYmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGVuIGlmIHN0cm0tPmF2 YWlsX2luIGlzIG5vdCB6ZXJvLCBpbnB1dCB3aWxsCi0gICBpbml0aWFsbHkgYmUgdGFrZW4gZnJv bSBzdHJtLT5uZXh0X2luWzAgLi4gc3RybS0+YXZhaWxfaW4gLSAxXS4KKyAgIGluaXRpYWxseSBi ZSB0YWtlbiBmcm9tIHN0cm0tPm5leHRfaW5bMCAuLiAgc3RybS0+YXZhaWxfaW4gLSAxXS4KIAog ICAgICBUaGUgaW5fZGVzYyBhbmQgb3V0X2Rlc2MgcGFyYW1ldGVycyBvZiBpbmZsYXRlQmFjaygp IGlzIHBhc3NlZCBhcyB0aGUKICAgIGZpcnN0IHBhcmFtZXRlciBvZiBpbigpIGFuZCBvdXQoKSBy ZXNwZWN0aXZlbHkgd2hlbiB0aGV5IGFyZSBjYWxsZWQuICBUaGVzZQpAQCAtODAyLDE4ICsxMTU0 LDE4IEBACiAgICAgIE9uIHJldHVybiwgaW5mbGF0ZUJhY2soKSB3aWxsIHNldCBzdHJtLT5uZXh0 X2luIGFuZCBzdHJtLT5hdmFpbF9pbiB0bwogICAgcGFzcyBiYWNrIGFueSB1bnVzZWQgaW5wdXQg dGhhdCB3YXMgcHJvdmlkZWQgYnkgdGhlIGxhc3QgaW4oKSBjYWxsLiAgVGhlCiAgICByZXR1cm4g dmFsdWVzIG9mIGluZmxhdGVCYWNrKCkgY2FuIGJlIFpfU1RSRUFNX0VORCBvbiBzdWNjZXNzLCBa X0JVRl9FUlJPUgotICAgaWYgaW4oKSBvciBvdXQoKSByZXR1cm5lZCBhbiBlcnJvciwgWl9EQVRB X0VSUk9SIGlmIHRoZXJlIHdhcyBhIGZvcm1hdAotICAgZXJyb3IgaW4gdGhlIGRlZmxhdGUgc3Ry ZWFtIChpbiB3aGljaCBjYXNlIHN0cm0tPm1zZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhlCi0gICBu YXR1cmUgb2YgdGhlIGVycm9yKSwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSB3YXMg bm90IHByb3Blcmx5Ci0gICBpbml0aWFsaXplZC4gIEluIHRoZSBjYXNlIG9mIFpfQlVGX0VSUk9S LCBhbiBpbnB1dCBvciBvdXRwdXQgZXJyb3IgY2FuIGJlCi0gICBkaXN0aW5ndWlzaGVkIHVzaW5n IHN0cm0tPm5leHRfaW4gd2hpY2ggd2lsbCBiZSBaX05VTEwgb25seSBpZiBpbigpIHJldHVybmVk Ci0gICBhbiBlcnJvci4gIElmIHN0cm0tPm5leHQgaXMgbm90IFpfTlVMTCwgdGhlbiB0aGUgWl9C VUZfRVJST1Igd2FzIGR1ZSB0bwotICAgb3V0KCkgcmV0dXJuaW5nIG5vbi16ZXJvLiAgKGluKCkg d2lsbCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBvdXQoKSwgc28KLSAgIHN0cm0tPm5leHRfaW4g aXMgYXNzdXJlZCB0byBiZSBkZWZpbmVkIGlmIG91dCgpIHJldHVybnMgbm9uLXplcm8uKSAgTm90 ZQotICAgdGhhdCBpbmZsYXRlQmFjaygpIGNhbm5vdCByZXR1cm4gWl9PSy4KKyAgIGlmIGluKCkg b3Igb3V0KCkgcmV0dXJuZWQgYW4gZXJyb3IsIFpfREFUQV9FUlJPUiBpZiB0aGVyZSB3YXMgYSBm b3JtYXQgZXJyb3IKKyAgIGluIHRoZSBkZWZsYXRlIHN0cmVhbSAoaW4gd2hpY2ggY2FzZSBzdHJt LT5tc2cgaXMgc2V0IHRvIGluZGljYXRlIHRoZSBuYXR1cmUKKyAgIG9mIHRoZSBlcnJvciksIG9y IFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gd2FzIG5vdCBwcm9wZXJseSBpbml0aWFsaXpl ZC4KKyAgIEluIHRoZSBjYXNlIG9mIFpfQlVGX0VSUk9SLCBhbiBpbnB1dCBvciBvdXRwdXQgZXJy b3IgY2FuIGJlIGRpc3Rpbmd1aXNoZWQKKyAgIHVzaW5nIHN0cm0tPm5leHRfaW4gd2hpY2ggd2ls bCBiZSBaX05VTEwgb25seSBpZiBpbigpIHJldHVybmVkIGFuIGVycm9yLiAgSWYKKyAgIHN0cm0t Pm5leHRfaW4gaXMgbm90IFpfTlVMTCwgdGhlbiB0aGUgWl9CVUZfRVJST1Igd2FzIGR1ZSB0byBv dXQoKSByZXR1cm5pbmcKKyAgIG5vbi16ZXJvLiAgKGluKCkgd2lsbCBhbHdheXMgYmUgY2FsbGVk IGJlZm9yZSBvdXQoKSwgc28gc3RybS0+bmV4dF9pbiBpcworICAgYXNzdXJlZCB0byBiZSBkZWZp bmVkIGlmIG91dCgpIHJldHVybnMgbm9uLXplcm8uKSAgTm90ZSB0aGF0IGluZmxhdGVCYWNrKCkK KyAgIGNhbm5vdCByZXR1cm4gWl9PSy4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0 ZUJhY2tFbmQgT0YoKHpfc3RyZWFtIEZBUiAqc3RybSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBp bmZsYXRlQmFja0VuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCiAgICAgIEFsbCBtZW1vcnkg YWxsb2NhdGVkIGJ5IGluZmxhdGVCYWNrSW5pdCgpIGlzIGZyZWVkLgogCkBAIC04MzEsNyArMTE4 Myw3IEBACiAgICAgIDcuNjogc2l6ZSBvZiB6X29mZl90CiAKICAgICBDb21waWxlciwgYXNzZW1i bGVyLCBhbmQgZGVidWcgb3B0aW9uczoKLSAgICAgODogREVCVUcKKyAgICAgODogWkxJQl9ERUJV RwogICAgICA5OiBBU01WIG9yIEFTTUlORiAtLSB1c2UgQVNNIGNvZGUKICAgICAgMTA6IFpMSUJf V0lOQVBJIC0tIGV4cG9ydGVkIGZ1bmN0aW9ucyB1c2UgdGhlIFdJTkFQSSBjYWxsaW5nIGNvbnZl bnRpb24KICAgICAgMTE6IDAgKHJlc2VydmVkKQpAQCAtODYyLDI3ICsxMjE0LDI4IEBACiAgICAg IDI3LTMxOiAwIChyZXNlcnZlZCkKICAqLwogCisjaWZuZGVmIFpfU09MTwogCiAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogCiAvKgotICAgICBUaGUgZm9s bG93aW5nIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlCi0g ICBiYXNpYyBzdHJlYW0tb3JpZW50ZWQgZnVuY3Rpb25zLiBUbyBzaW1wbGlmeSB0aGUgaW50ZXJm YWNlLCBzb21lCi0gICBkZWZhdWx0IG9wdGlvbnMgYXJlIGFzc3VtZWQgKGNvbXByZXNzaW9uIGxl dmVsIGFuZCBtZW1vcnkgdXNhZ2UsCi0gICBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5j dGlvbnMpLiBUaGUgc291cmNlIGNvZGUgb2YgdGhlc2UKLSAgIHV0aWxpdHkgZnVuY3Rpb25zIGNh biBlYXNpbHkgYmUgbW9kaWZpZWQgaWYgeW91IG5lZWQgc3BlY2lhbCBvcHRpb25zLgorICAgICBU aGUgZm9sbG93aW5nIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2Yg dGhlIGJhc2ljCisgICBzdHJlYW0tb3JpZW50ZWQgZnVuY3Rpb25zLiAgVG8gc2ltcGxpZnkgdGhl IGludGVyZmFjZSwgc29tZSBkZWZhdWx0IG9wdGlvbnMKKyAgIGFyZSBhc3N1bWVkIChjb21wcmVz c2lvbiBsZXZlbCBhbmQgbWVtb3J5IHVzYWdlLCBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbgor ICAgZnVuY3Rpb25zKS4gIFRoZSBzb3VyY2UgY29kZSBvZiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9u cyBjYW4gYmUgbW9kaWZpZWQgaWYKKyAgIHlvdSBuZWVkIHNwZWNpYWwgb3B0aW9ucy4KICovCiAK IFpFWFRFUk4gaW50IFpFWFBPUlQgY29tcHJlc3MgT0YoKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAq ZGVzdExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpz b3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOwogLyoKICAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNl IGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMKLSAgIHRo ZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBp cyB0aGUgdG90YWwKLSAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVz dCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQKLSAgIGJ5IGNvbXByZXNzQm91bmQoc291 cmNlTGVuKS4gVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKLSAg IGNvbXByZXNzZWQgYnVmZmVyLgotICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNv bXByZXNzIGEgd2hvbGUgZmlsZSBhdCBvbmNlIGlmIHRoZQotICAgaW5wdXQgZmlsZSBpcyBtbWFw J2VkLgorICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiAgVXBvbiBlbnRy eSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQorICAgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZl ciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKyAgIGNvbXBy ZXNzQm91bmQoc291cmNlTGVuKS4gIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNp emUgb2YgdGhlCisgICBjb21wcmVzc2VkIGRhdGEuICBjb21wcmVzcygpIGlzIGVxdWl2YWxlbnQg dG8gY29tcHJlc3MyKCkgd2l0aCBhIGxldmVsCisgICBwYXJhbWV0ZXIgb2YgWl9ERUZBVUxUX0NP TVBSRVNTSU9OLgorCiAgICAgIGNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01F TV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBp ZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKICAgIGJ1ZmZlci4KQEAg LTg5MiwxMiArMTI0NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbGV2ZWwpKTsKIC8qCi0gICAgIENvbXByZXNzZXMgdGhlIHNvdXJj ZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiBUaGUgbGV2ZWwKKyAgICAgQ29t cHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBU aGUgbGV2ZWwKICAgIHBhcmFtZXRlciBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBkZWZsYXRl SW5pdC4gIHNvdXJjZUxlbiBpcyB0aGUgYnl0ZQotICAgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVm ZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQorICAgbGVu Z3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiAgVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90 YWwgc2l6ZSBvZiB0aGUKICAgIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBs ZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKLSAgIGNvbXByZXNzQm91bmQoc291cmNlTGVuKS4g VXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKLSAgIGNvbXByZXNz ZWQgYnVmZmVyLgorICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiAgVXBvbiBleGl0LCBkZXN0 TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgIGNvbXByZXNzZWQgZGF0YS4KIAogICAg ICBjb21wcmVzczIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJl IHdhcyBub3QgZW5vdWdoCiAgICBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3Qg ZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIsCkBAIC05MDcsMTU5ICsxMjYwLDMwNiBA QAogWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNvbXByZXNzQm91bmQgT0YoKHVMb25nIHNvdXJjZUxl bikpOwogLyoKICAgICAgY29tcHJlc3NCb3VuZCgpIHJldHVybnMgYW4gdXBwZXIgYm91bmQgb24g dGhlIGNvbXByZXNzZWQgc2l6ZSBhZnRlcgotICAgY29tcHJlc3MoKSBvciBjb21wcmVzczIoKSBv biBzb3VyY2VMZW4gYnl0ZXMuICBJdCB3b3VsZCBiZSB1c2VkIGJlZm9yZQotICAgYSBjb21wcmVz cygpIG9yIGNvbXByZXNzMigpIGNhbGwgdG8gYWxsb2NhdGUgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZl ci4KKyAgIGNvbXByZXNzKCkgb3IgY29tcHJlc3MyKCkgb24gc291cmNlTGVuIGJ5dGVzLiAgSXQg d291bGQgYmUgdXNlZCBiZWZvcmUgYQorICAgY29tcHJlc3MoKSBvciBjb21wcmVzczIoKSBjYWxs IHRvIGFsbG9jYXRlIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCiAqLwogCiBaRVhURVJOIGludCBa RVhQT1JUIHVuY29tcHJlc3MgT0YoKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxv bmcgc291cmNlTGVuKSk7CiAvKgogICAgICBEZWNvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIg aW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgc291cmNlTGVuIGlzCi0gICB0aGUgYnl0ZSBs ZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuIFVwb24gZW50cnksIGRlc3RMZW4gaXMgdGhlIHRv dGFsCi0gICBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUgbGFy Z2UgZW5vdWdoIHRvIGhvbGQgdGhlCi0gICBlbnRpcmUgdW5jb21wcmVzc2VkIGRhdGEuIChUaGUg c2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBoYXZlCi0gICBiZWVuIHNhdmVkIHBy ZXZpb3VzbHkgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBkZWNvbXBy ZXNzb3IKLSAgIGJ5IHNvbWUgbWVjaGFuaXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY29t cHJlc3Npb24gbGlicmFyeS4pCi0gICBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBz aXplIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlci4KLSAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUg dXNlZCB0byBkZWNvbXByZXNzIGEgd2hvbGUgZmlsZSBhdCBvbmNlIGlmIHRoZQotICAgaW5wdXQg ZmlsZSBpcyBtbWFwJ2VkLgorICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVy LiAgVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQorICAgb2YgdGhlIGRlc3Rp bmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50 aXJlCisgICB1bmNvbXByZXNzZWQgZGF0YS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2Vk IGRhdGEgbXVzdCBoYXZlIGJlZW4gc2F2ZWQKKyAgIHByZXZpb3VzbHkgYnkgdGhlIGNvbXByZXNz b3IgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBkZWNvbXByZXNzb3IgYnkgc29tZQorICAgbWVjaGFu aXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY29tcHJlc3Npb24gbGlicmFyeS4pIFVwb24g ZXhpdCwgZGVzdExlbgorICAgaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQg ZGF0YS4KIAogICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9F UlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0 aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKLSAgIGJ1ZmZlciwgb3IgWl9E QVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4K KyAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0 ZWQgb3IgaW5jb21wbGV0ZS4gIEluCisgICB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBub3QgZW5v dWdoIHJvb20sIHVuY29tcHJlc3MoKSB3aWxsIGZpbGwgdGhlIG91dHB1dAorICAgYnVmZmVyIHdp dGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuCiAqLwogCitaRVhURVJO IGludCBaRVhQT1JUIHVuY29tcHJlc3MyIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RM ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291 cmNlLCB1TG9uZyAqc291cmNlTGVuKSk7CisvKgorICAgICBTYW1lIGFzIHVuY29tcHJlc3MsIGV4 Y2VwdCB0aGF0IHNvdXJjZUxlbiBpcyBhIHBvaW50ZXIsIHdoZXJlIHRoZQorICAgbGVuZ3RoIG9m IHRoZSBzb3VyY2UgaXMgKnNvdXJjZUxlbi4gIE9uIHJldHVybiwgKnNvdXJjZUxlbiBpcyB0aGUg bnVtYmVyIG9mCisgICBzb3VyY2UgYnl0ZXMgY29uc3VtZWQuCisqLwogCi10eXBlZGVmIHZvaWRw IGd6RmlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgZmlsZSBhY2Nlc3MgZnVu Y3Rpb25zICovCiAKLVpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuICBPRigoY29uc3QgY2hh ciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOwogLyoKLSAgICAgT3BlbnMgYSBnemlwICguZ3op IGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCi0gICBpcyBh cyBpbiBmb3BlbiAoInJiIiBvciAid2IiKSBidXQgY2FuIGFsc28gaW5jbHVkZSBhIGNvbXByZXNz aW9uIGxldmVsCi0gICAoIndiOSIpIG9yIGEgc3RyYXRlZ3k6ICdmJyBmb3IgZmlsdGVyZWQgZGF0 YSBhcyBpbiAid2I2ZiIsICdoJyBmb3IKLSAgIEh1ZmZtYW4gb25seSBjb21wcmVzc2lvbiBhcyBp biAid2IxaCIsIG9yICdSJyBmb3IgcnVuLWxlbmd0aCBlbmNvZGluZwotICAgYXMgaW4gIndiMVIi LiAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRp b24KLSAgIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKQorICAgICBUaGlzIGxpYnJhcnkg c3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdCB3 aXRoCisgICBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvLCB1c2luZyB0aGUg ZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aAorICAgImd6Ii4gIFRoZSBnemlwIGZvcm1hdCBpcyBk aWZmZXJlbnQgZnJvbSB0aGUgemxpYiBmb3JtYXQuICBnemlwIGlzIGEgZ3ppcAorICAgd3JhcHBl ciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVh bS4KKyovCisKK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zICpnekZpbGU7ICAgIC8qIHNlbWktb3Bh cXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCisKKy8qCitaRVhURVJOIGd6RmlsZSBaRVhQT1JU IGd6b3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOworCisgICAg IE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuICBUaGUgbW9k ZSBwYXJhbWV0ZXIgaXMgYXMKKyAgIGluIGZvcGVuICgicmIiIG9yICJ3YiIpIGJ1dCBjYW4gYWxz byBpbmNsdWRlIGEgY29tcHJlc3Npb24gbGV2ZWwgKCJ3YjkiKSBvcgorICAgYSBzdHJhdGVneTog J2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvciBIdWZmbWFuLW9ubHkK KyAgIGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIiwgJ1InIGZvciBydW4tbGVuZ3RoIGVuY29kaW5n IGFzIGluICJ3YjFSIiwgb3IgJ0YnCisgICBmb3IgZml4ZWQgY29kZSBjb21wcmVzc2lvbiBhcyBp biAid2I5RiIuICAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgorICAgZGVmbGF0ZUluaXQyIGZvciBt b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSAgJ1QnIHdpbGwK KyAgIHJlcXVlc3QgdHJhbnNwYXJlbnQgd3JpdGluZyBvciBhcHBlbmRpbmcgd2l0aCBubyBjb21w cmVzc2lvbiBhbmQgbm90IHVzaW5nCisgICB0aGUgZ3ppcCBmb3JtYXQuCisKKyAgICAgImEiIGNh biBiZSB1c2VkIGluc3RlYWQgb2YgInciIHRvIHJlcXVlc3QgdGhhdCB0aGUgZ3ppcCBzdHJlYW0g dGhhdCB3aWxsCisgICBiZSB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdp bGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZQorICAgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0 aGUgc2FtZSBnemlwIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4gIFRoZSBhZGRpdGlvbiBvZgorICAg IngiIHdoZW4gd3JpdGluZyB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBleGNsdXNpdmVseSwgd2hpY2gg ZmFpbHMgaWYgdGhlIGZpbGUKKyAgIGFscmVhZHkgZXhpc3RzLiAgT24gc3lzdGVtcyB0aGF0IHN1 cHBvcnQgaXQsIHRoZSBhZGRpdGlvbiBvZiAiZSIgd2hlbgorICAgcmVhZGluZyBvciB3cml0aW5n IHdpbGwgc2V0IHRoZSBmbGFnIHRvIGNsb3NlIHRoZSBmaWxlIG9uIGFuIGV4ZWN2ZSgpIGNhbGwu CisKKyAgICAgVGhlc2UgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGd6aXAsIHdpbGwgcmVhZCBhbmQg ZGVjb2RlIGEgc2VxdWVuY2Ugb2YgZ3ppcAorICAgc3RyZWFtcyBpbiBhIGZpbGUuICBUaGUgYXBw ZW5kIGZ1bmN0aW9uIG9mIGd6b3BlbigpIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZQorICAgc3VjaCBh IGZpbGUuICAoQWxzbyBzZWUgZ3pmbHVzaCgpIGZvciBhbm90aGVyIHdheSB0byBkbyB0aGlzLikg IFdoZW4KKyAgIGFwcGVuZGluZywgZ3pvcGVuIGRvZXMgbm90IHRlc3Qgd2hldGhlciB0aGUgZmls ZSBiZWdpbnMgd2l0aCBhIGd6aXAgc3RyZWFtLAorICAgbm9yIGRvZXMgaXQgbG9vayBmb3IgdGhl IGVuZCBvZiB0aGUgZ3ppcCBzdHJlYW1zIHRvIGJlZ2luIGFwcGVuZGluZy4gIGd6b3BlbgorICAg d2lsbCBzaW1wbHkgYXBwZW5kIGEgZ3ppcCBzdHJlYW0gdG8gdGhlIGV4aXN0aW5nIGZpbGUuCiAK ICAgICAgZ3pvcGVuIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbiBn emlwIGZvcm1hdDsgaW4gdGhpcwotICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZy b20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgorICAgY2FzZSBnenJlYWQgd2lsbCBk aXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgV2hlbgor ICAgcmVhZGluZywgdGhpcyB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgbG9va2lu ZyBmb3IgdGhlIG1hZ2ljIHR3by0KKyAgIGJ5dGUgZ3ppcCBoZWFkZXIuCiAKLSAgICAgZ3pvcGVu IHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkIG9yIGlmIHRoZXJl IHdhcwotICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgKGRlKWNvbXByZXNz aW9uIHN0YXRlOyBlcnJubwotICAgY2FuIGJlIGNoZWNrZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3 byBjYXNlcyAoaWYgZXJybm8gaXMgemVybywgdGhlCi0gICB6bGliIGVycm9yIGlzIFpfTUVNX0VS Uk9SKS4gICovCisgICAgIGd6b3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90 IGJlIG9wZW5lZCwgaWYgdGhlcmUgd2FzCisgICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9j YXRlIHRoZSBnekZpbGUgc3RhdGUsIG9yIGlmIGFuIGludmFsaWQgbW9kZSB3YXMKKyAgIHNwZWNp ZmllZCAoYW4gJ3InLCAndycsIG9yICdhJyB3YXMgbm90IHByb3ZpZGVkLCBvciAnKycgd2FzIHBy b3ZpZGVkKS4KKyAgIGVycm5vIGNhbiBiZSBjaGVja2VkIHRvIGRldGVybWluZSBpZiB0aGUgcmVh c29uIGd6b3BlbiBmYWlsZWQgd2FzIHRoYXQgdGhlCisgICBmaWxlIGNvdWxkIG5vdCBiZSBvcGVu ZWQuCisqLwogCi1aRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gIE9GKChpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUpKTsKK1pFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pkb3BlbiBPRigoaW50 IGZkLCBjb25zdCBjaGFyICptb2RlKSk7CiAvKgotICAgICBnemRvcGVuKCkgYXNzb2NpYXRlcyBh IGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuICBGaWxlCi0gICBkZXNjcmlwdG9y cyBhcmUgb2J0YWluZWQgZnJvbSBjYWxscyBsaWtlIG9wZW4sIGR1cCwgY3JlYXQsIHBpcGUgb3IK LSAgIGZpbGVubyAoaW4gdGhlIGZpbGUgaGFzIGJlZW4gcHJldmlvdXNseSBvcGVuZWQgd2l0aCBm b3BlbikuCi0gICBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgYXMgaW4gZ3pvcGVuLgotICAgICBUaGUg bmV4dCBjYWxsIG9mIGd6Y2xvc2Ugb24gdGhlIHJldHVybmVkIGd6RmlsZSB3aWxsIGFsc28gY2xv c2UgdGhlCi0gICBmaWxlIGRlc2NyaXB0b3IgZmQsIGp1c3QgbGlrZSBmY2xvc2UoZmRvcGVuKGZk KSwgbW9kZSkgY2xvc2VzIHRoZSBmaWxlCi0gICBkZXNjcmlwdG9yIGZkLiBJZiB5b3Ugd2FudCB0 byBrZWVwIGZkIG9wZW4sIHVzZSBnemRvcGVuKGR1cChmZCksIG1vZGUpLgotICAgICBnemRvcGVu IHJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0 ZQotICAgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4KKyAgICAgZ3pkb3BlbiBhc3NvY2lhdGVz IGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gIEZpbGUgZGVzY3JpcHRvcnMK KyAgIGFyZSBvYnRhaW5lZCBmcm9tIGNhbGxzIGxpa2Ugb3BlbiwgZHVwLCBjcmVhdCwgcGlwZSBv ciBmaWxlbm8gKGlmIHRoZSBmaWxlCisgICBoYXMgYmVlbiBwcmV2aW91c2x5IG9wZW5lZCB3aXRo IGZvcGVuKS4gIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBhcyBpbiBnem9wZW4uCisKKyAgICAgVGhl IG5leHQgY2FsbCBvZiBnemNsb3NlIG9uIHRoZSByZXR1cm5lZCBnekZpbGUgd2lsbCBhbHNvIGNs b3NlIHRoZSBmaWxlCisgICBkZXNjcmlwdG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3Blbihm ZCwgbW9kZSkpIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICBmZC4gIElmIHlvdSB3YW50 IHRvIGtlZXAgZmQgb3BlbiwgdXNlIGZkID0gZHVwKGZkX2tlZXApOyBneiA9IGd6ZG9wZW4oZmQs CisgICBtb2RlKTsuICBUaGUgZHVwbGljYXRlZCBkZXNjcmlwdG9yIHNob3VsZCBiZSBzYXZlZCB0 byBhdm9pZCBhIGxlYWssIHNpbmNlCisgICBnemRvcGVuIGRvZXMgbm90IGNsb3NlIGZkIGlmIGl0 IGZhaWxzLiAgSWYgeW91IGFyZSB1c2luZyBmaWxlbm8oKSB0byBnZXQgdGhlCisgICBmaWxlIGRl c2NyaXB0b3IgZnJvbSBhIEZJTEUgKiwgdGhlbiB5b3Ugd2lsbCBoYXZlIHRvIHVzZSBkdXAoKSB0 byBhdm9pZAorICAgZG91YmxlLWNsb3NlKClpbmcgdGhlIGZpbGUgZGVzY3JpcHRvci4gIEJvdGgg Z3pjbG9zZSgpIGFuZCBmY2xvc2UoKSB3aWxsCisgICBjbG9zZSB0aGUgYXNzb2NpYXRlZCBmaWxl IGRlc2NyaXB0b3IsIHNvIHRoZXkgbmVlZCB0byBoYXZlIGRpZmZlcmVudCBmaWxlCisgICBkZXNj cmlwdG9ycy4KKworICAgICBnemRvcGVuIHJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgaW5zdWZm aWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUKKyAgIGd6RmlsZSBzdGF0ZSwgaWYgYW4gaW52 YWxpZCBtb2RlIHdhcyBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdAorICAg cHJvdmlkZWQsIG9yICcrJyB3YXMgcHJvdmlkZWQpLCBvciBpZiBmZCBpcyAtMS4gIFRoZSBmaWxl IGRlc2NyaXB0b3IgaXMgbm90CisgICB1c2VkIHVudGlsIHRoZSBuZXh0IGd6KiByZWFkLCB3cml0 ZSwgc2Vlaywgb3IgY2xvc2Ugb3BlcmF0aW9uLCBzbyBnemRvcGVuCisgICB3aWxsIG5vdCBkZXRl Y3QgaWYgZmQgaXMgaW52YWxpZCAodW5sZXNzIGZkIGlzIC0xKS4KKyovCisKK1pFWFRFUk4gaW50 IFpFWFBPUlQgZ3pidWZmZXIgT0YoKGd6RmlsZSBmaWxlLCB1bnNpZ25lZCBzaXplKSk7CisvKgor ICAgICBTZXQgdGhlIGludGVybmFsIGJ1ZmZlciBzaXplIHVzZWQgYnkgdGhpcyBsaWJyYXJ5J3Mg ZnVuY3Rpb25zLiAgVGhlCisgICBkZWZhdWx0IGJ1ZmZlciBzaXplIGlzIDgxOTIgYnl0ZXMuICBU aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyCisgICBnem9wZW4oKSBvciBnemRvcGVu KCksIGFuZCBiZWZvcmUgYW55IG90aGVyIGNhbGxzIHRoYXQgcmVhZCBvciB3cml0ZSB0aGUKKyAg IGZpbGUuICBUaGUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsd2F5cyBkZWZlcnJlZCB0 byB0aGUgZmlyc3QgcmVhZCBvcgorICAgd3JpdGUuICBUaHJlZSB0aW1lcyB0aGF0IHNpemUgaW4g YnVmZmVyIHNwYWNlIGlzIGFsbG9jYXRlZC4gIEEgbGFyZ2VyIGJ1ZmZlcgorICAgc2l6ZSBvZiwg Zm9yIGV4YW1wbGUsIDY0SyBvciAxMjhLIGJ5dGVzIHdpbGwgbm90aWNlYWJseSBpbmNyZWFzZSB0 aGUgc3BlZWQKKyAgIG9mIGRlY29tcHJlc3Npb24gKHJlYWRpbmcpLgorCisgICAgIFRoZSBuZXcg YnVmZmVyIHNpemUgYWxzbyBhZmZlY3RzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgZ3pwcmludGYo KS4KKworICAgICBnemJ1ZmZlcigpIHJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWls dXJlLCBzdWNoIGFzIGJlaW5nIGNhbGxlZAorICAgdG9vIGxhdGUuCiAqLwogCiBaRVhURVJOIGlu dCBaRVhQT1JUIGd6c2V0cGFyYW1zIE9GKChnekZpbGUgZmlsZSwgaW50IGxldmVsLCBpbnQgc3Ry YXRlZ3kpKTsKIC8qCi0gICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2 ZWwgb3Igc3RyYXRlZ3kuIFNlZSB0aGUgZGVzY3JpcHRpb24KLSAgIG9mIGRlZmxhdGVJbml0MiBm b3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4KLSAgICAgZ3pzZXRwYXJhbXMgcmV0 dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBmaWxlIHdhcyBu b3QKLSAgIG9wZW5lZCBmb3Igd3JpdGluZy4KKyAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBj b21wcmVzc2lvbiBsZXZlbCBvciBzdHJhdGVneS4gIFNlZSB0aGUgZGVzY3JpcHRpb24KKyAgIG9m IGRlZmxhdGVJbml0MiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4gIFByZXZp b3VzbHkgcHJvdmlkZWQKKyAgIGRhdGEgaXMgZmx1c2hlZCBiZWZvcmUgdGhlIHBhcmFtZXRlciBj aGFuZ2UuCisKKyAgICAgZ3pzZXRwYXJhbXMgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RS RUFNX0VSUk9SIGlmIHRoZSBmaWxlIHdhcyBub3QKKyAgIG9wZW5lZCBmb3Igd3JpdGluZywgWl9F UlJOTyBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRoZSBmbHVzaGVkIGRhdGEsCisgICBv ciBaX01FTV9FUlJPUiBpZiB0aGVyZSBpcyBhIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLgogKi8K IAotWkVYVEVSTiBpbnQgWkVYUE9SVCAgICBnenJlYWQgIE9GKChnekZpbGUgZmlsZSwgdm9pZHAg YnVmLCB1bnNpZ25lZCBsZW4pKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pyZWFkIE9GKChnekZp bGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pKTsKIC8qCi0gICAgIFJlYWRzIHRoZSBn aXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmls ZS4KLSAgIElmIHRoZSBpbnB1dCBmaWxlIHdhcyBub3QgaW4gZ3ppcCBmb3JtYXQsIGd6cmVhZCBj b3BpZXMgdGhlIGdpdmVuIG51bWJlcgotICAgb2YgYnl0ZXMgaW50byB0aGUgYnVmZmVyLgotICAg ICBnenJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxs eSByZWFkICgwIGZvcgotICAgZW5kIG9mIGZpbGUsIC0xIGZvciBlcnJvcikuICovCisgICAgIFJl YWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXBy ZXNzZWQgZmlsZS4gIElmCisgICB0aGUgaW5wdXQgZmlsZSBpcyBub3QgaW4gZ3ppcCBmb3JtYXQs IGd6cmVhZCBjb3BpZXMgdGhlIGdpdmVuIG51bWJlciBvZgorICAgYnl0ZXMgaW50byB0aGUgYnVm ZmVyIGRpcmVjdGx5IGZyb20gdGhlIGZpbGUuCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3p3 cml0ZSBPRigoZ3pGaWxlIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWRwYyBidWYsIHVuc2lnbmVkIGxlbikpOworICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5k IG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQorICAg dG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbS4gIEFueSBudW1iZXIgb2Yg Z3ppcCBzdHJlYW1zIG1heSBiZQorICAgY29uY2F0ZW5hdGVkIGluIHRoZSBpbnB1dCBmaWxlLCBh bmQgd2lsbCBhbGwgYmUgZGVjb21wcmVzc2VkIGJ5IGd6cmVhZCgpLgorICAgSWYgc29tZXRoaW5n IG90aGVyIHRoYW4gYSBnemlwIHN0cmVhbSBpcyBlbmNvdW50ZXJlZCBhZnRlciBhIGd6aXAgc3Ry ZWFtLAorICAgdGhhdCByZW1haW5pbmcgdHJhaWxpbmcgZ2FyYmFnZSBpcyBpZ25vcmVkIChhbmQg bm8gZXJyb3IgaXMgcmV0dXJuZWQpLgorCisgICAgIGd6cmVhZCBjYW4gYmUgdXNlZCB0byByZWFk IGEgZ3ppcCBmaWxlIHRoYXQgaXMgYmVpbmcgY29uY3VycmVudGx5IHdyaXR0ZW4uCisgICBVcG9u IHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0LCBnenJlYWQgd2lsbCByZXR1cm4gd2l0aCB0 aGUgYXZhaWxhYmxlCisgICBkYXRhLiAgSWYgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgZ3pl cnJvciBpcyBaX09LIG9yIFpfQlVGX0VSUk9SLCB0aGVuCisgICBnemNsZWFyZXJyIGNhbiBiZSB1 c2VkIHRvIGNsZWFyIHRoZSBlbmQgb2YgZmlsZSBpbmRpY2F0b3IgaW4gb3JkZXIgdG8gcGVybWl0 CisgICBnenJlYWQgdG8gYmUgdHJpZWQgYWdhaW4uICBaX09LIGluZGljYXRlcyB0aGF0IGEgZ3pp cCBzdHJlYW0gd2FzIGNvbXBsZXRlZAorICAgb24gdGhlIGxhc3QgZ3pyZWFkLiAgWl9CVUZfRVJS T1IgaW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGZpbGUgZW5kZWQgaW4gdGhlCisgICBtaWRkbGUg b2YgYSBnemlwIHN0cmVhbS4gIE5vdGUgdGhhdCBnenJlYWQgZG9lcyBub3QgcmV0dXJuIC0xIGlu IHRoZSBldmVudAorICAgb2YgYW4gaW5jb21wbGV0ZSBnemlwIHN0cmVhbS4gIFRoaXMgZXJyb3Ig aXMgZGVmZXJyZWQgdW50aWwgZ3pjbG9zZSgpLCB3aGljaAorICAgd2lsbCByZXR1cm4gWl9CVUZf RVJST1IgaWYgdGhlIGxhc3QgZ3pyZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwCisg ICBzdHJlYW0uICBBbHRlcm5hdGl2ZWx5LCBnemVycm9yIGNhbiBiZSB1c2VkIGJlZm9yZSBnemNs b3NlIHRvIGRldGVjdCB0aGlzCisgICBjYXNlLgorCisgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBu dW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIGxlc3MgdGhhbgorICAg bGVuIGZvciBlbmQgb2YgZmlsZSwgb3IgLTEgZm9yIGVycm9yLiAgSWYgbGVuIGlzIHRvbyBsYXJn ZSB0byBmaXQgaW4gYW4gaW50LAorICAgdGhlbiBub3RoaW5nIGlzIHJlYWQsIC0xIGlzIHJldHVy bmVkLCBhbmQgdGhlIGVycm9yIHN0YXRlIGlzIHNldCB0bworICAgWl9TVFJFQU1fRVJST1IuCisq LworCitaRVhURVJOIHpfc2l6ZV90IFpFWFBPUlQgZ3pmcmVhZCBPRigodm9pZHAgYnVmLCB6X3Np emVfdCBzaXplLCB6X3NpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFJlYWQgdXAgdG8gbml0ZW1zIGl0ZW1z IG9mIHNpemUgc2l6ZSBmcm9tIGZpbGUgdG8gYnVmLCBvdGhlcndpc2Ugb3BlcmF0aW5nCisgICBh cyBnenJlYWQoKSBkb2VzLiAgVGhpcyBkdXBsaWNhdGVzIHRoZSBpbnRlcmZhY2Ugb2Ygc3RkaW8n cyBmcmVhZCgpLCB3aXRoCisgICBzaXplX3QgcmVxdWVzdCBhbmQgcmV0dXJuIHR5cGVzLiAgSWYg dGhlIGxpYnJhcnkgZGVmaW5lcyBzaXplX3QsIHRoZW4KKyAgIHpfc2l6ZV90IGlzIGlkZW50aWNh bCB0byBzaXplX3QuICBJZiBub3QsIHRoZW4gel9zaXplX3QgaXMgYW4gdW5zaWduZWQKKyAgIGlu dGVnZXIgdHlwZSB0aGF0IGNhbiBjb250YWluIGEgcG9pbnRlci4KKworICAgICBnemZyZWFkKCkg cmV0dXJucyB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgcmVhZCBvZiBzaXplIHNpemUsIG9yIHpl cm8gaWYKKyAgIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQgYW5kIGEgZnVsbCBpdGVt IGNvdWxkIG5vdCBiZSByZWFkLCBvciBpZgorICAgdGhlcmUgd2FzIGFuIGVycm9yLiAgZ3plcnJv cigpIG11c3QgYmUgY29uc3VsdGVkIGlmIHplcm8gaXMgcmV0dXJuZWQgaW4KKyAgIG9yZGVyIHRv IGRldGVybWluZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICBJZiB0aGUgbXVsdGlwbGljYXRpb24g b2Ygc2l6ZSBhbmQKKyAgIG5pdGVtcyBvdmVyZmxvd3MsIGkuZS4gdGhlIHByb2R1Y3QgZG9lcyBu b3QgZml0IGluIGEgel9zaXplX3QsIHRoZW4gbm90aGluZworICAgaXMgcmVhZCwgemVybyBpcyBy ZXR1cm5lZCwgYW5kIHRoZSBlcnJvciBzdGF0ZSBpcyBzZXQgdG8gWl9TVFJFQU1fRVJST1IuCisK KyAgICAgSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGVuZCBvZiBmaWxlIGlzIHJlYWNoZWQgYW5kIG9u bHkgYSBwYXJ0aWFsIGl0ZW0gaXMKKyAgIGF2YWlsYWJsZSBhdCB0aGUgZW5kLCBpLmUuIHRoZSBy ZW1haW5pbmcgdW5jb21wcmVzc2VkIGRhdGEgbGVuZ3RoIGlzIG5vdCBhCisgICBtdWx0aXBsZSBv ZiBzaXplLCB0aGVuIHRoZSBmaW5hbCBwYXJ0aWFsIGl0ZW0gaXMgbmV2ZXRoZWxlc3MgcmVhZCBp bnRvIGJ1ZgorICAgYW5kIHRoZSBlbmQtb2YtZmlsZSBmbGFnIGlzIHNldC4gIFRoZSBsZW5ndGgg b2YgdGhlIHBhcnRpYWwgaXRlbSByZWFkIGlzIG5vdAorICAgcHJvdmlkZWQsIGJ1dCBjb3VsZCBi ZSBpbmZlcnJlZCBmcm9tIHRoZSByZXN1bHQgb2YgZ3p0ZWxsKCkuICBUaGlzIGJlaGF2aW9yCisg ICBpcyB0aGUgc2FtZSBhcyB0aGUgYmVoYXZpb3Igb2YgZnJlYWQoKSBpbXBsZW1lbnRhdGlvbnMg aW4gY29tbW9uIGxpYnJhcmllcywKKyAgIGJ1dCBpdCBwcmV2ZW50cyB0aGUgZGlyZWN0IHVzZSBv ZiBnemZyZWFkKCkgdG8gcmVhZCBhIGNvbmN1cnJlbnRseSB3cml0dGVuCisgICBmaWxlLCByZXNl dGluZyBhbmQgcmV0cnlpbmcgb24gZW5kLW9mLWZpbGUsIHdoZW4gc2l6ZSBpcyBub3QgMS4KKyov CisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3p3cml0ZSBPRigoZ3pGaWxlIGZpbGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWRwYyBidWYsIHVuc2lnbmVkIGxlbikpOwogLyoK ICAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8g dGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVu Y29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuCi0gICAoMCBpbiBjYXNlIG9mIGVycm9y KS4KKyAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyB3 cml0dGVuIG9yIDAgaW4gY2FzZSBvZgorICAgZXJyb3IuCiAqLwogCi1aRVhURVJOIGludCBaRVhQ T1JUVkEgICBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u KSk7CitaRVhURVJOIHpfc2l6ZV90IFpFWFBPUlQgZ3pmd3JpdGUgT0YoKHZvaWRwYyBidWYsIHpf c2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfc2l6 ZV90IG5pdGVtcywgZ3pGaWxlIGZpbGUpKTsKIC8qCi0gICAgIENvbnZlcnRzLCBmb3JtYXRzLCBh bmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKLSAgIGNvbnRy b2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMg dGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAg aW4gY2FzZSBvZiBlcnJvcikuICBUaGUgbnVtYmVyIG9mCi0gICB1bmNvbXByZXNzZWQgYnl0ZXMg d3JpdHRlbiBpcyBsaW1pdGVkIHRvIDQwOTUuIFRoZSBjYWxsZXIgc2hvdWxkIGFzc3VyZSB0aGF0 Ci0gICB0aGlzIGxpbWl0IGlzIG5vdCBleGNlZWRlZC4gSWYgaXQgaXMgZXhjZWVkZWQsIHRoZW4g Z3pwcmludGYoKSB3aWxsIHJldHVybgotICAgcmV0dXJuIGFuIGVycm9yICgwKSB3aXRoIG5vdGhp bmcgd3JpdHRlbi4gSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYWxzbyBiZSBhCisgICAgIGd6Zndy aXRlKCkgd3JpdGVzIG5pdGVtcyBpdGVtcyBvZiBzaXplIHNpemUgZnJvbSBidWYgdG8gZmlsZSwg ZHVwbGljYXRpbmcKKyAgIHRoZSBpbnRlcmZhY2Ugb2Ygc3RkaW8ncyBmd3JpdGUoKSwgd2l0aCBz aXplX3QgcmVxdWVzdCBhbmQgcmV0dXJuIHR5cGVzLiAgSWYKKyAgIHRoZSBsaWJyYXJ5IGRlZmlu ZXMgc2l6ZV90LCB0aGVuIHpfc2l6ZV90IGlzIGlkZW50aWNhbCB0byBzaXplX3QuICBJZiBub3Qs CisgICB0aGVuIHpfc2l6ZV90IGlzIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSB0aGF0IGNhbiBj b250YWluIGEgcG9pbnRlci4KKworICAgICBnemZ3cml0ZSgpIHJldHVybnMgdGhlIG51bWJlciBv ZiBmdWxsIGl0ZW1zIHdyaXR0ZW4gb2Ygc2l6ZSBzaXplLCBvciB6ZXJvCisgICBpZiB0aGVyZSB3 YXMgYW4gZXJyb3IuICBJZiB0aGUgbXVsdGlwbGljYXRpb24gb2Ygc2l6ZSBhbmQgbml0ZW1zIG92 ZXJmbG93cywKKyAgIGkuZS4gdGhlIHByb2R1Y3QgZG9lcyBub3QgZml0IGluIGEgel9zaXplX3Qs IHRoZW4gbm90aGluZyBpcyB3cml0dGVuLCB6ZXJvCisgICBpcyByZXR1cm5lZCwgYW5kIHRoZSBl cnJvciBzdGF0ZSBpcyBzZXQgdG8gWl9TVFJFQU1fRVJST1IuCisqLworCitaRVhURVJOIGludCBa RVhQT1JUVkEgZ3pwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQs IC4uLikpOworLyoKKyAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3Vt ZW50cyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCisgICBjb250cm9sIG9mIHRoZSBmb3Jt YXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiAgZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9m CisgICB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiwgb3IgYSBuZWdhdGl2ZSB6 bGliIGVycm9yIGNvZGUgaW4gY2FzZQorICAgb2YgZXJyb3IuICBUaGUgbnVtYmVyIG9mIHVuY29t cHJlc3NlZCBieXRlcyB3cml0dGVuIGlzIGxpbWl0ZWQgdG8gODE5MSwgb3IKKyAgIG9uZSBsZXNz IHRoYW4gdGhlIGJ1ZmZlciBzaXplIGdpdmVuIHRvIGd6YnVmZmVyKCkuICBUaGUgY2FsbGVyIHNo b3VsZCBhc3N1cmUKKyAgIHRoYXQgdGhpcyBsaW1pdCBpcyBub3QgZXhjZWVkZWQuICBJZiBpdCBp cyBleGNlZWRlZCwgdGhlbiBnenByaW50ZigpIHdpbGwKKyAgIHJldHVybiBhbiBlcnJvciAoMCkg d2l0aCBub3RoaW5nIHdyaXR0ZW4uICBJbiB0aGlzIGNhc2UsIHRoZXJlIG1heSBhbHNvIGJlIGEK ICAgIGJ1ZmZlciBvdmVyZmxvdyB3aXRoIHVucHJlZGljdGFibGUgY29uc2VxdWVuY2VzLCB3aGlj aCBpcyBwb3NzaWJsZSBvbmx5IGlmCiAgICB6bGliIHdhcyBjb21waWxlZCB3aXRoIHRoZSBpbnNl Y3VyZSBmdW5jdGlvbnMgc3ByaW50ZigpIG9yIHZzcHJpbnRmKCkKICAgIGJlY2F1c2UgdGhlIHNl Y3VyZSBzbnByaW50ZigpIG9yIHZzbnByaW50ZigpIGZ1bmN0aW9ucyB3ZXJlIG5vdCBhdmFpbGFi bGUuCisgICBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIHVzaW5nIHpsaWJDb21waWxlRmxhZ3MoKS4K ICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pwdXRzIE9GKChnekZpbGUgZmlsZSwgY29uc3Qg Y2hhciAqcykpOwogLyoKLSAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0 cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcKKyAgICAgV3JpdGVzIHRoZSBn aXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUsIGV4Y2x1 ZGluZwogICAgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pwdXRzIHJl dHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2Yg ZXJyb3IuCisKKyAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdy aXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCiAqLwogCiBaRVhURVJOIGNoYXIgKiBaRVhQ T1JUIGd6Z2V0cyBPRigoZ3pGaWxlIGZpbGUsIGNoYXIgKmJ1ZiwgaW50IGxlbikpOwogLyoKLSAg ICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFy YWN0ZXJzIGFyZSByZWFkLCBvcgotICAgYSBuZXdsaW5lIGNoYXJhY3RlciBpcyByZWFkIGFuZCB0 cmFuc2ZlcnJlZCB0byBidWYsIG9yIGFuIGVuZC1vZi1maWxlCi0gICBjb25kaXRpb24gaXMgZW5j b3VudGVyZWQuICBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZCB3aXRoIGEgbnVsbAotICAg Y2hhcmFjdGVyLgotICAgICAgZ3pnZXRzIHJldHVybnMgYnVmLCBvciBaX05VTEwgaW4gY2FzZSBv ZiBlcnJvci4KKyAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGls IGxlbi0xIGNoYXJhY3RlcnMgYXJlIHJlYWQsIG9yIGEKKyAgIG5ld2xpbmUgY2hhcmFjdGVyIGlz IHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4gZW5kLW9mLWZpbGUKKyAgIGNvbmRp dGlvbiBpcyBlbmNvdW50ZXJlZC4gIElmIGFueSBjaGFyYWN0ZXJzIGFyZSByZWFkIG9yIGlmIGxl biA9PSAxLCB0aGUKKyAgIHN0cmluZyBpcyB0ZXJtaW5hdGVkIHdpdGggYSBudWxsIGNoYXJhY3Rl ci4gIElmIG5vIGNoYXJhY3RlcnMgYXJlIHJlYWQgZHVlCisgICB0byBhbiBlbmQtb2YtZmlsZSBv ciBsZW4gPCAxLCB0aGVuIHRoZSBidWZmZXIgaXMgbGVmdCB1bnRvdWNoZWQuCisKKyAgICAgZ3pn ZXRzIHJldHVybnMgYnVmIHdoaWNoIGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgb3IgaXQg cmV0dXJucyBOVUxMCisgICBmb3IgZW5kLW9mLWZpbGUgb3IgaW4gY2FzZSBvZiBlcnJvci4gIElm IHRoZXJlIHdhcyBhbiBlcnJvciwgdGhlIGNvbnRlbnRzIGF0CisgICBidWYgYXJlIGluZGV0ZXJt aW5hdGUuCiAqLwogCi1aRVhURVJOIGludCBaRVhQT1JUICAgIGd6cHV0YyBPRigoZ3pGaWxlIGZp bGUsIGludCBjKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGd6cHV0YyBPRigoZ3pGaWxlIGZpbGUs IGludCBjKSk7CiAvKgotICAgICAgV3JpdGVzIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBj aGFyLCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenB1dGMgcmV0dXJucyB0aGUgdmFs dWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KKyAgICAgV3JpdGVz IGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBpbnRvIHRoZSBjb21wcmVzc2VkIGZp bGUuICBnenB1dGMKKyAgIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdyaXR0ZW4sIG9yIC0x IGluIGNhc2Ugb2YgZXJyb3IuCiAqLwogCi1aRVhURVJOIGludCBaRVhQT1JUICAgIGd6Z2V0YyBP RigoZ3pGaWxlIGZpbGUpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjIE9GKChnekZpbGUg ZmlsZSkpOwogLyoKLSAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmls ZS4gZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlCi0gICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBm aWxlIG9yIGVycm9yLgorICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZp bGUuICBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUgb3IgLTEKKyAgIGluIGNhc2Ugb2YgZW5kIG9m IGZpbGUgb3IgZXJyb3IuICBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8gZm9yIHNwZWVk LgorICAgQXMgc3VjaCwgaXQgZG9lcyBub3QgZG8gYWxsIG9mIHRoZSBjaGVja2luZyB0aGUgb3Ro ZXIgZnVuY3Rpb25zIGRvLiAgSS5lLgorICAgaXQgZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlmIGZp bGUgaXMgTlVMTCwgbm9yIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBmaWxlCisgICBwb2ludHMgdG8g aGFzIGJlZW4gY2xvYmJlcmVkIG9yIG5vdC4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAg Z3p1bmdldGMgT0YoKGludCBjLCBnekZpbGUgZmlsZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBn enVuZ2V0YyBPRigoaW50IGMsIGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICAgUHVzaCBvbmUgY2hh cmFjdGVyIGJhY2sgb250byB0aGUgc3RyZWFtIHRvIGJlIHJlYWQgYWdhaW4gbGF0ZXIuCi0gICBP bmx5IG9uZSBjaGFyYWN0ZXIgb2YgcHVzaC1iYWNrIGlzIGFsbG93ZWQuICBnenVuZ2V0YygpIHJl dHVybnMgdGhlCi0gICBjaGFyYWN0ZXIgcHVzaGVkLCBvciAtMSBvbiBmYWlsdXJlLiAgZ3p1bmdl dGMoKSB3aWxsIGZhaWwgaWYgYQotICAgY2hhcmFjdGVyIGhhcyBiZWVuIHB1c2hlZCBidXQgbm90 IHJlYWQgeWV0LCBvciBpZiBjIGlzIC0xLiBUaGUgcHVzaGVkCi0gICBjaGFyYWN0ZXIgd2lsbCBi ZSBkaXNjYXJkZWQgaWYgdGhlIHN0cmVhbSBpcyByZXBvc2l0aW9uZWQgd2l0aCBnenNlZWsoKQot ICAgb3IgZ3pyZXdpbmQoKS4KKyAgICAgUHVzaCBvbmUgY2hhcmFjdGVyIGJhY2sgb250byB0aGUg c3RyZWFtIHRvIGJlIHJlYWQgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgb24gdGhlIG5leHQg cmVhZC4gIEF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgb2YgcHVzaC1iYWNrIGlzIGFsbG93ZWQuCisg ICBnenVuZ2V0YygpIHJldHVybnMgdGhlIGNoYXJhY3RlciBwdXNoZWQsIG9yIC0xIG9uIGZhaWx1 cmUuICBnenVuZ2V0YygpIHdpbGwKKyAgIGZhaWwgaWYgYyBpcyAtMSwgYW5kIG1heSBmYWlsIGlm IGEgY2hhcmFjdGVyIGhhcyBiZWVuIHB1c2hlZCBidXQgbm90IHJlYWQKKyAgIHlldC4gIElmIGd6 dW5nZXRjIGlzIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZ3pvcGVuIG9yIGd6ZG9wZW4sIGF0IGxl YXN0IHRoZQorICAgb3V0cHV0IGJ1ZmZlciBzaXplIG9mIHB1c2hlZCBjaGFyYWN0ZXJzIGlzIGFs bG93ZWQuICAoU2VlIGd6YnVmZmVyIGFib3ZlLikKKyAgIFRoZSBwdXNoZWQgY2hhcmFjdGVyIHdp bGwgYmUgZGlzY2FyZGVkIGlmIHRoZSBzdHJlYW0gaXMgcmVwb3NpdGlvbmVkIHdpdGgKKyAgIGd6 c2VlaygpIG9yIGd6cmV3aW5kKCkuCiAqLwogCi1aRVhURVJOIGludCBaRVhQT1JUICAgIGd6Zmx1 c2ggT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pm bHVzaCBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOwogLyoKLSAgICAgRmx1c2hlcyBhbGwg cGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiBUaGUgcGFyYW1ldGVyCi0g ICBmbHVzaCBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLiBUaGUgcmV0dXJuIHZhbHVl IGlzIHRoZSB6bGliCi0gICBlcnJvciBudW1iZXIgKHNlZSBmdW5jdGlvbiBnemVycm9yIGJlbG93 KS4gZ3pmbHVzaCByZXR1cm5zIFpfT0sgaWYKLSAgIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaXMgWl9G SU5JU0ggYW5kIGFsbCBvdXRwdXQgY291bGQgYmUgZmx1c2hlZC4KLSAgICAgZ3pmbHVzaCBzaG91 bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBzdHJpY3RseSBuZWNlc3NhcnkgYmVjYXVzZSBpdCBjYW4K LSAgIGRlZ3JhZGUgY29tcHJlc3Npb24uCisgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0 IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gIFRoZSBwYXJhbWV0ZXIgZmx1c2gKKyAgIGlzIGFz IGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSB6bGli IGVycm9yIG51bWJlcgorICAgKHNlZSBmdW5jdGlvbiBnemVycm9yIGJlbG93KS4gIGd6Zmx1c2gg aXMgb25seSBwZXJtaXR0ZWQgd2hlbiB3cml0aW5nLgorCisgICAgIElmIHRoZSBmbHVzaCBwYXJh bWV0ZXIgaXMgWl9GSU5JU0gsIHRoZSByZW1haW5pbmcgZGF0YSBpcyB3cml0dGVuIGFuZCB0aGUK KyAgIGd6aXAgc3RyZWFtIGlzIGNvbXBsZXRlZCBpbiB0aGUgb3V0cHV0LiAgSWYgZ3p3cml0ZSgp IGlzIGNhbGxlZCBhZ2FpbiwgYSBuZXcKKyAgIGd6aXAgc3RyZWFtIHdpbGwgYmUgc3RhcnRlZCBp biB0aGUgb3V0cHV0LiAgZ3pyZWFkKCkgaXMgYWJsZSB0byByZWFkIHN1Y2gKKyAgIGNvbmNhdGVu YXRlZCBnemlwIHN0cmVhbXMuCisKKyAgICAgZ3pmbHVzaCBzaG91bGQgYmUgY2FsbGVkIG9ubHkg d2hlbiBzdHJpY3RseSBuZWNlc3NhcnkgYmVjYXVzZSBpdCB3aWxsCisgICBkZWdyYWRlIGNvbXBy ZXNzaW9uIGlmIGNhbGxlZCB0b28gb2Z0ZW4uCiAqLwogCi1aRVhURVJOIHpfb2ZmX3QgWkVYUE9S VCAgICBnenNlZWsgT0YoKGd6RmlsZSBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB6X29mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOwogLyoKLSAgICAgIFNldHMg dGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0 aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVt YmVyIG9mIGJ5dGVzIGluIHRoZQotICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLiBUaGUgd2hl bmNlIHBhcmFtZXRlciBpcyBkZWZpbmVkIGFzIGluIGxzZWVrKDIpOworWkVYVEVSTiB6X29mZl90 IFpFWFBPUlQgZ3pzZWVrIE9GKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgel9vZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpKTsKKworICAgICBTZXRzIHRo ZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhl IGdpdmVuCisgICBjb21wcmVzc2VkIGZpbGUuICBUaGUgb2Zmc2V0IHJlcHJlc2VudHMgYSBudW1i ZXIgb2YgYnl0ZXMgaW4gdGhlCisgICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uICBUaGUgd2hl bmNlIHBhcmFtZXRlciBpcyBkZWZpbmVkIGFzIGluIGxzZWVrKDIpOwogICAgdGhlIHZhbHVlIFNF RUtfRU5EIGlzIG5vdCBzdXBwb3J0ZWQuCisKICAgICAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZv ciByZWFkaW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGVtdWxhdGVkIGJ1dCBjYW4gYmUKLSAgIGV4dHJl bWVseSBzbG93LiBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcsIG9ubHkgZm9yd2Fy ZCBzZWVrcyBhcmUKKyAgIGV4dHJlbWVseSBzbG93LiAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZv ciB3cml0aW5nLCBvbmx5IGZvcndhcmQgc2Vla3MgYXJlCiAgICBzdXBwb3J0ZWQ7IGd6c2VlayB0 aGVuIGNvbXByZXNzZXMgYSBzZXF1ZW5jZSBvZiB6ZXJvZXMgdXAgdG8gdGhlIG5ldwogICAgc3Rh cnRpbmcgcG9zaXRpb24uCiAKLSAgICAgIGd6c2VlayByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zm c2V0IGxvY2F0aW9uIGFzIG1lYXN1cmVkIGluIGJ5dGVzIGZyb20KKyAgICAgZ3pzZWVrIHJldHVy bnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJv bQogICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4g Y2FzZSBvZiBlcnJvciwgaW4KICAgIHBhcnRpY3VsYXIgaWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZv ciB3cml0aW5nIGFuZCB0aGUgbmV3IHN0YXJ0aW5nIHBvc2l0aW9uCiAgICB3b3VsZCBiZSBiZWZv cmUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCkBAIC0xMDY5LDYzICsxNTY5LDEzNCBAQAogLyoKICAg ICAgUmV3aW5kcyB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgb25s eSBmb3IgcmVhZGluZy4KIAotICAgZ3pyZXdpbmQoZmlsZSkgaXMgZXF1aXZhbGVudCB0byAoaW50 KWd6c2VlayhmaWxlLCAwTCwgU0VFS19TRVQpCisgICAgIGd6cmV3aW5kKGZpbGUpIGlzIGVxdWl2 YWxlbnQgdG8gKGludClnenNlZWsoZmlsZSwgMEwsIFNFRUtfU0VUKQogKi8KIAorLyoKIFpFWFRF Uk4gel9vZmZfdCBaRVhQT1JUICAgIGd6dGVsbCBPRigoZ3pGaWxlIGZpbGUpKTsKKworICAgICBS ZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3Jp dGUgb24gdGhlIGdpdmVuCisgICBjb21wcmVzc2VkIGZpbGUuICBUaGlzIHBvc2l0aW9uIHJlcHJl c2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCisgICB1bmNvbXByZXNzZWQgZGF0YSBzdHJl YW0sIGFuZCBpcyB6ZXJvIHdoZW4gc3RhcnRpbmcsIGV2ZW4gaWYgYXBwZW5kaW5nIG9yCisgICBy ZWFkaW5nIGEgZ3ppcCBzdHJlYW0gZnJvbSB0aGUgbWlkZGxlIG9mIGEgZmlsZSB1c2luZyBnemRv cGVuKCkuCisKKyAgICAgZ3p0ZWxsKGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gZ3pzZWVrKGZpbGUs IDBMLCBTRUVLX0NVUikKKyovCisKIC8qCi0gICAgIFJldHVybnMgdGhlIHN0YXJ0aW5nIHBvc2l0 aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUKLSAgIGdpdmVuIGNvbXBy ZXNzZWQgZmlsZS4gVGhpcyBwb3NpdGlvbiByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGlu IHRoZQotICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLgorWkVYVEVSTiB6X29mZl90IFpFWFBP UlQgZ3pvZmZzZXQgT0YoKGd6RmlsZSBmaWxlKSk7CiAKLSAgIGd6dGVsbChmaWxlKSBpcyBlcXVp dmFsZW50IHRvIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpCisgICAgIFJldHVybnMgdGhlIGN1 cnJlbnQgb2Zmc2V0IGluIHRoZSBmaWxlIGJlaW5nIHJlYWQgb3Igd3JpdHRlbi4gIFRoaXMgb2Zm c2V0CisgICBpbmNsdWRlcyB0aGUgY291bnQgb2YgYnl0ZXMgdGhhdCBwcmVjZWRlIHRoZSBnemlw IHN0cmVhbSwgZm9yIGV4YW1wbGUgd2hlbgorICAgYXBwZW5kaW5nIG9yIHdoZW4gdXNpbmcgZ3pk b3BlbigpIGZvciByZWFkaW5nLiAgV2hlbiByZWFkaW5nLCB0aGUgb2Zmc2V0CisgICBkb2VzIG5v dCBpbmNsdWRlIGFzIHlldCB1bnVzZWQgYnVmZmVyZWQgaW5wdXQuICBUaGlzIGluZm9ybWF0aW9u IGNhbiBiZSB1c2VkCisgICBmb3IgYSBwcm9ncmVzcyBpbmRpY2F0b3IuICBPbiBlcnJvciwgZ3pv ZmZzZXQoKSByZXR1cm5zIC0xLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemVvZiBPRigo Z3pGaWxlIGZpbGUpKTsKIC8qCi0gICAgIFJldHVybnMgMSB3aGVuIEVPRiBoYXMgcHJldmlvdXNs eSBiZWVuIGRldGVjdGVkIHJlYWRpbmcgdGhlIGdpdmVuCi0gICBpbnB1dCBzdHJlYW0sIG90aGVy d2lzZSB6ZXJvLgorICAgICBSZXR1cm5zIHRydWUgKDEpIGlmIHRoZSBlbmQtb2YtZmlsZSBpbmRp Y2F0b3IgaGFzIGJlZW4gc2V0IHdoaWxlIHJlYWRpbmcsCisgICBmYWxzZSAoMCkgb3RoZXJ3aXNl LiAgTm90ZSB0aGF0IHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgaXMgc2V0IG9ubHkgaWYgdGhl CisgICByZWFkIHRyaWVkIHRvIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIGJ1dCBjYW1l IHVwIHNob3J0LiAgVGhlcmVmb3JlLAorICAganVzdCBsaWtlIGZlb2YoKSwgZ3plb2YoKSBtYXkg cmV0dXJuIGZhbHNlIGV2ZW4gaWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvCisgICByZWFkLCBp biB0aGUgZXZlbnQgdGhhdCB0aGUgbGFzdCByZWFkIHJlcXVlc3Qgd2FzIGZvciB0aGUgZXhhY3Qg bnVtYmVyIG9mCisgICBieXRlcyByZW1haW5pbmcgaW4gdGhlIGlucHV0IGZpbGUuICBUaGlzIHdp bGwgaGFwcGVuIGlmIHRoZSBpbnB1dCBmaWxlIHNpemUKKyAgIGlzIGFuIGV4YWN0IG11bHRpcGxl IG9mIHRoZSBidWZmZXIgc2l6ZS4KKworICAgICBJZiBnemVvZigpIHJldHVybnMgdHJ1ZSwgdGhl biB0aGUgcmVhZCBmdW5jdGlvbnMgd2lsbCByZXR1cm4gbm8gbW9yZSBkYXRhLAorICAgdW5sZXNz IHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgaXMgcmVzZXQgYnkgZ3pjbGVhcmVycigpIGFuZCB0 aGUgaW5wdXQgZmlsZQorICAgaGFzIGdyb3duIHNpbmNlIHRoZSBwcmV2aW91cyBlbmQgb2YgZmls ZSB3YXMgZGV0ZWN0ZWQuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6ZGlyZWN0IE9GKChn ekZpbGUgZmlsZSkpOworLyoKKyAgICAgUmV0dXJucyB0cnVlICgxKSBpZiBmaWxlIGlzIGJlaW5n IGNvcGllZCBkaXJlY3RseSB3aGlsZSByZWFkaW5nLCBvciBmYWxzZQorICAgKDApIGlmIGZpbGUg aXMgYSBnemlwIHN0cmVhbSBiZWluZyBkZWNvbXByZXNzZWQuCisKKyAgICAgSWYgdGhlIGlucHV0 IGZpbGUgaXMgZW1wdHksIGd6ZGlyZWN0KCkgd2lsbCByZXR1cm4gdHJ1ZSwgc2luY2UgdGhlIGlu cHV0CisgICBkb2VzIG5vdCBjb250YWluIGEgZ3ppcCBzdHJlYW0uCisKKyAgICAgSWYgZ3pkaXJl Y3QoKSBpcyB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGd6b3BlbigpIG9yIGd6ZG9wZW4oKSBpdCB3 aWxsCisgICBjYXVzZSBidWZmZXJzIHRvIGJlIGFsbG9jYXRlZCB0byBhbGxvdyByZWFkaW5nIHRo ZSBmaWxlIHRvIGRldGVybWluZSBpZiBpdAorICAgaXMgYSBnemlwIGZpbGUuICBUaGVyZWZvcmUg aWYgZ3pidWZmZXIoKSBpcyB1c2VkLCBpdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZQorICAgZ3pk aXJlY3QoKS4KKworICAgICBXaGVuIHdyaXRpbmcsIGd6ZGlyZWN0KCkgcmV0dXJucyB0cnVlICgx KSBpZiB0cmFuc3BhcmVudCB3cml0aW5nIHdhcworICAgcmVxdWVzdGVkICgid1QiIGZvciB0aGUg Z3pvcGVuKCkgbW9kZSksIG9yIGZhbHNlICgwKSBvdGhlcndpc2UuICAoTm90ZToKKyAgIGd6ZGly ZWN0KCkgaXMgbm90IG5lZWRlZCB3aGVuIHdyaXRpbmcuICBUcmFuc3BhcmVudCB3cml0aW5nIG11 c3QgYmUKKyAgIGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBzbyB0aGUgYXBwbGljYXRpb24gYWxyZWFk eSBrbm93cyB0aGUgYW5zd2VyLiAgV2hlbgorICAgbGlua2luZyBzdGF0aWNhbGx5LCB1c2luZyBn emRpcmVjdCgpIHdpbGwgaW5jbHVkZSBhbGwgb2YgdGhlIHpsaWIgY29kZSBmb3IKKyAgIGd6aXAg ZmlsZSByZWFkaW5nIGFuZCBkZWNvbXByZXNzaW9uLCB3aGljaCBtYXkgbm90IGJlIGRlc2lyZWQu KQogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCAgICBnemNsb3NlIE9GKChnekZpbGUgZmlsZSkp OwogLyoKLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaWYgbmVjZXNzYXJ5LCBjbG9z ZXMgdGhlIGNvbXByZXNzZWQgZmlsZQotICAgYW5kIGRlYWxsb2NhdGVzIGFsbCB0aGUgKGRlKWNv bXByZXNzaW9uIHN0YXRlLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSB6bGliCi0gICBlcnJvciBu dW1iZXIgKHNlZSBmdW5jdGlvbiBnemVycm9yIGJlbG93KS4KKyAgICAgRmx1c2hlcyBhbGwgcGVu ZGluZyBvdXRwdXQgaWYgbmVjZXNzYXJ5LCBjbG9zZXMgdGhlIGNvbXByZXNzZWQgZmlsZSBhbmQK KyAgIGRlYWxsb2NhdGVzIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGUuICBOb3RlIHRoYXQgb25j ZSBmaWxlIGlzIGNsb3NlZCwgeW91CisgICBjYW5ub3QgY2FsbCBnemVycm9yIHdpdGggZmlsZSwg c2luY2UgaXRzIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIGRlYWxsb2NhdGVkLgorICAgZ3pjbG9zZSBt dXN0IG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgZmlsZSwganVzdCBh cyBmcmVlCisgICBtdXN0IG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUg YWxsb2NhdGlvbi4KKworICAgICBnemNsb3NlIHdpbGwgcmV0dXJuIFpfU1RSRUFNX0VSUk9SIGlm IGZpbGUgaXMgbm90IHZhbGlkLCBaX0VSUk5PIG9uIGEKKyAgIGZpbGUgb3BlcmF0aW9uIGVycm9y LCBaX01FTV9FUlJPUiBpZiBvdXQgb2YgbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGUKKyAgIGxh c3QgcmVhZCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgZ3ppcCBzdHJlYW0sIG9yIFpfT0sgb24g c3VjY2Vzcy4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pjbG9zZV9yIE9GKChnekZpbGUg ZmlsZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemNsb3NlX3cgT0YoKGd6RmlsZSBmaWxlKSk7 CisvKgorICAgICBTYW1lIGFzIGd6Y2xvc2UoKSwgYnV0IGd6Y2xvc2VfcigpIGlzIG9ubHkgZm9y IHVzZSB3aGVuIHJlYWRpbmcsIGFuZAorICAgZ3pjbG9zZV93KCkgaXMgb25seSBmb3IgdXNlIHdo ZW4gd3JpdGluZyBvciBhcHBlbmRpbmcuICBUaGUgYWR2YW50YWdlIHRvCisgICB1c2luZyB0aGVz ZSBpbnN0ZWFkIG9mIGd6Y2xvc2UoKSBpcyB0aGF0IHRoZXkgYXZvaWQgbGlua2luZyBpbiB6bGli CisgICBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIGNvZGUgdGhhdCBpcyBub3QgdXNlZCB3 aGVuIG9ubHkgcmVhZGluZyBvciBvbmx5CisgICB3cml0aW5nIHJlc3BlY3RpdmVseS4gIElmIGd6 Y2xvc2UoKSBpcyB1c2VkLCB0aGVuIGJvdGggY29tcHJlc3Npb24gYW5kCisgICBkZWNvbXByZXNz aW9uIGNvZGUgd2lsbCBiZSBpbmNsdWRlZCB0aGUgYXBwbGljYXRpb24gd2hlbiBsaW5raW5nIHRv IGEgc3RhdGljCisgICB6bGliIGxpYnJhcnkuCiAqLwogCiBaRVhURVJOIGNvbnN0IGNoYXIgKiBa RVhQT1JUIGd6ZXJyb3IgT0YoKGd6RmlsZSBmaWxlLCBpbnQgKmVycm51bSkpOwogLyoKLSAgICAg UmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJy ZWQgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxp YiBlcnJvciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0 ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQg dG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBn ZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCisgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ug Zm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZSBnaXZlbgorICAgY29tcHJl c3NlZCBmaWxlLiAgZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gIElmIGFuIGVy cm9yIG9jY3VycmVkCisgICBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJl c3Npb24gbGlicmFyeSwgZXJybnVtIGlzIHNldCB0bworICAgWl9FUlJOTyBhbmQgdGhlIGFwcGxp Y2F0aW9uIG1heSBjb25zdWx0IGVycm5vIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KKwor ICAgICBUaGUgYXBwbGljYXRpb24gbXVzdCBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCBzdHJpbmcu ICBGdXR1cmUgY2FsbHMgdG8KKyAgIHRoaXMgZnVuY3Rpb24gbWF5IGludmFsaWRhdGUgdGhlIHBy ZXZpb3VzbHkgcmV0dXJuZWQgc3RyaW5nLiAgSWYgZmlsZSBpcworICAgY2xvc2VkLCB0aGVuIHRo ZSBzdHJpbmcgcHJldmlvdXNseSByZXR1cm5lZCBieSBnemVycm9yIHdpbGwgbm8gbG9uZ2VyIGJl CisgICBhdmFpbGFibGUuCisKKyAgICAgZ3plcnJvcigpIHNob3VsZCBiZSB1c2VkIHRvIGRpc3Rp bmd1aXNoIGVycm9ycyBmcm9tIGVuZC1vZi1maWxlIGZvciB0aG9zZQorICAgZnVuY3Rpb25zIGFi b3ZlIHRoYXQgZG8gbm90IGRpc3Rpbmd1aXNoIHRob3NlIGNhc2VzIGluIHRoZWlyIHJldHVybiB2 YWx1ZXMuCiAqLwogCiBaRVhURVJOIHZvaWQgWkVYUE9SVCBnemNsZWFyZXJyIE9GKChnekZpbGUg ZmlsZSkpOwogLyoKLSAgICAgQ2xlYXJzIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3Mg Zm9yIGZpbGUuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZQotICAgY2xlYXJlcnIoKSBmdW5jdGlv biBpbiBzdGRpby4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbnRpbnVpbmcgdG8gcmVhZCBhIGd6aXAK KyAgICAgQ2xlYXJzIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MgZm9yIGZpbGUuICBU aGlzIGlzIGFuYWxvZ291cyB0byB0aGUKKyAgIGNsZWFyZXJyKCkgZnVuY3Rpb24gaW4gc3RkaW8u ICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29udGludWluZyB0byByZWFkIGEgZ3ppcAogICAgZmlsZSB0 aGF0IGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5LgogKi8KIAorI2VuZGlmIC8qICFaX1NP TE8gKi8KKwogICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2tzdW0gZnVuY3Rpb25zICov CiAKIC8qCiAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHJlbGF0ZWQgdG8gY29tcHJlc3Np b24gYnV0IGFyZSBleHBvcnRlZAotICAgYW55d2F5IGJlY2F1c2UgdGhleSBtaWdodCBiZSB1c2Vm dWwgaW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZQotICAgY29tcHJlc3Npb24gbGlicmFyeS4KKyAg IGFueXdheSBiZWNhdXNlIHRoZXkgbWlnaHQgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB1c2lu ZyB0aGUgY29tcHJlc3Npb24KKyAgIGxpYnJhcnkuCiAqLwogCiBaRVhURVJOIHVMb25nIFpFWFBP UlQgYWRsZXIzMiBPRigodUxvbmcgYWRsZXIsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7 Ci0KIC8qCiAgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQWRsZXItMzIgY2hlY2tzdW0gd2l0aCB0aGUg Ynl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQKLSAgIHJldHVybiB0aGUgdXBkYXRlZCBjaGVja3N1bS4g SWYgYnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICAgdGhlIHJlcXVpcmVkIGlu aXRpYWwgdmFsdWUgZm9yIHRoZSBjaGVja3N1bS4KLSAgIEFuIEFkbGVyLTMyIGNoZWNrc3VtIGlz IGFsbW9zdCBhcyByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKLSAgIG11 Y2ggZmFzdGVyLiBVc2FnZSBleGFtcGxlOgorICAgcmV0dXJuIHRoZSB1cGRhdGVkIGNoZWNrc3Vt LiAgSWYgYnVmIGlzIFpfTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZQorICAgcmVxdWly ZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNoZWNrc3VtLgorCisgICAgIEFuIEFkbGVyLTMyIGNo ZWNrc3VtIGlzIGFsbW9zdCBhcyByZWxpYWJsZSBhcyBhIENSQy0zMiBidXQgY2FuIGJlIGNvbXB1 dGVkCisgICBtdWNoIGZhc3Rlci4KKworICAgVXNhZ2UgZXhhbXBsZToKIAogICAgICB1TG9uZyBh ZGxlciA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CiAKQEAgLTExMzUsMTIgKzE3MDYsMzEgQEAK ICAgICAgaWYgKGFkbGVyICE9IG9yaWdpbmFsX2FkbGVyKSBlcnJvcigpOwogKi8KIAorWkVYVEVS TiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfeiBPRigodUxvbmcgYWRsZXIsIGNvbnN0IEJ5dGVmICpi dWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X3NpemVfdCBsZW4pKTsK Ky8qCisgICAgIFNhbWUgYXMgYWRsZXIzMigpLCBidXQgd2l0aCBhIHNpemVfdCBsZW5ndGguCisq LworCisvKgorWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcg YWRsZXIxLCB1TG9uZyBhZGxlcjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB6X29mZl90IGxlbjIpKTsKKworICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVj a3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQorICAgYW5k IHNlcTIgd2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIEFkbGVyLTMyIGNoZWNrc3VtcyB3ZXJl IGNhbGN1bGF0ZWQgZm9yCisgICBlYWNoLCBhZGxlcjEgYW5kIGFkbGVyMi4gIGFkbGVyMzJfY29t YmluZSgpIHJldHVybnMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mCisgICBzZXExIGFuZCBzZXEy IGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLiAg Tm90ZQorICAgdGhhdCB0aGUgel9vZmZfdCB0eXBlIChsaWtlIG9mZl90KSBpcyBhIHNpZ25lZCBp bnRlZ2VyLiAgSWYgbGVuMiBpcworICAgbmVnYXRpdmUsIHRoZSByZXN1bHQgaGFzIG5vIG1lYW5p bmcgb3IgdXRpbGl0eS4KKyovCisKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMiAgIE9GKCh1 TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CiAvKgotICAgICBVcGRhdGUg YSBydW5uaW5nIGNyYyB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhl IHVwZGF0ZWQKLSAgIGNyYy4gSWYgYnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0 aGUgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZQotICAgZm9yIHRoZSBjcmMuIFByZS0gYW5kIHBvc3Qt Y29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcyBwZXJmb3JtZWQKLSAgIHdpdGhpbiB0 aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4K KyAgICAgVXBkYXRlIGEgcnVubmluZyBDUkMtMzIgd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0x XSBhbmQgcmV0dXJuIHRoZQorICAgdXBkYXRlZCBDUkMtMzIuICBJZiBidWYgaXMgWl9OVUxMLCB0 aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVpcmVkCisgICBpbml0aWFsIHZhbHVlIGZvciB0 aGUgY3JjLiAgUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzIGNvbXBsZW1lbnQpIGlz CisgICBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRv bmUgYnkgdGhlIGFwcGxpY2F0aW9uLgorCiAgICBVc2FnZSBleGFtcGxlOgogCiAgICAgIHVMb25n IGNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwpAQCAtMTE1MSw2ICsxNzQxLDIyIEBACiAgICAg IGlmIChjcmMgIT0gb3JpZ2luYWxfY3JjKSBlcnJvcigpOwogKi8KIAorWkVYVEVSTiB1TG9uZyBa RVhQT1JUIGNyYzMyX3ogT0YoKHVMb25nIGFkbGVyLCBjb25zdCBCeXRlZiAqYnVmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfc2l6ZV90IGxlbikpOworLyoKKyAgICAgU2Ft ZSBhcyBjcmMzMigpLCBidXQgd2l0aCBhIHNpemVfdCBsZW5ndGguCisqLworCisvKgorWkVYVEVS TiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nIGNyYzEsIHVMb25nIGNyYzIs IHpfb2ZmX3QgbGVuMikpOworCisgICAgIENvbWJpbmUgdHdvIENSQy0zMiBjaGVjayB2YWx1ZXMg aW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywKKyAgIHNlcTEgYW5kIHNlcTIg d2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIENSQy0zMiBjaGVjayB2YWx1ZXMgd2VyZQorICAg Y2FsY3VsYXRlZCBmb3IgZWFjaCwgY3JjMSBhbmQgY3JjMi4gIGNyYzMyX2NvbWJpbmUoKSByZXR1 cm5zIHRoZSBDUkMtMzIKKyAgIGNoZWNrIHZhbHVlIG9mIHNlcTEgYW5kIHNlcTIgY29uY2F0ZW5h dGVkLCByZXF1aXJpbmcgb25seSBjcmMxLCBjcmMyLCBhbmQKKyAgIGxlbjIuCisqLworCiAKICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcmlvdXMgaGFja3MsIGRvbid0IGxvb2sgOikgKi8K IApAQCAtMTE2NywzMSArMTc3MywxMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7CiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJ bml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIHdpbmRvd0JpdHMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCBzdHJlYW1f c2l6ZSkpOwotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0luaXRfIE9GKCh6X3N0cmVh bSBGQVIgKnN0cm0sIGludCB3aW5kb3dCaXRzLAorWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRl QmFja0luaXRfIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IHdpbmRvd0JpdHMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3cs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZl cnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJl YW1fc2l6ZSkpOwotI2RlZmluZSBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgXAotICAgICAgICBk ZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6 X3N0cmVhbSkpCi0jZGVmaW5lIGluZmxhdGVJbml0KHN0cm0pIFwKLSAgICAgICAgaW5mbGF0ZUlu aXRfKChzdHJtKSwgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0p KQotI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywg bWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCi0gICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZl bCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAotICAgICAgICAgICAgICAgICAg ICAgIChzdHJhdGVneSksICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkp Ci0jZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCi0gICAgICAgIGluZmxh dGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3Ry ZWFtKSkKLSNkZWZpbmUgaW5mbGF0ZUJhY2tJbml0KHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdykg XAotICAgICAgICBpbmZsYXRlQmFja0luaXRfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCAod2luZG93 KSwgXAotICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCi0KLQotI2lmICFk ZWZpbmVkKFpVVElMX0gpICYmICFkZWZpbmVkKE5PX0RVTU1ZX0RFQ0wpCi0gICAgc3RydWN0IGlu dGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsgLyogaGFjayBmb3IgYnVnZ3kgY29tcGlsZXJzICov CisjaWZkZWYgWl9QUkVGSVhfU0VUCisjICBkZWZpbmUgel9kZWZsYXRlSW5pdChzdHJtLCBsZXZl bCkgXAorICAgICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksIFpMSUJfVkVSU0lP TiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIHpfaW5mbGF0ZUluaXQoc3RybSkg XAorICAgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXpl b2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIHpfZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRo b2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkgXAorICAgICAgICAgIGRlZmxhdGVJ bml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAor ICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgWkxJQl9WRVJTSU9OLCAoaW50KXNp emVvZih6X3N0cmVhbSkpCisjICBkZWZpbmUgel9pbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0 cykgXAorICAgICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJf VkVSU0lPTiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0p KQorIyAgZGVmaW5lIHpfaW5mbGF0ZUJhY2tJbml0KHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdykg XAorICAgICAgICAgIGluZmxhdGVCYWNrSW5pdF8oKHN0cm0pLCAod2luZG93Qml0cyksICh3aW5k b3cpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6 ZW9mKHpfc3RyZWFtKSkKKyNlbHNlCisjICBkZWZpbmUgZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwp IFwKKyAgICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCBaTElCX1ZFUlNJT04s IChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcCisg ICAgICAgICAgaW5mbGF0ZUluaXRfKChzdHJtKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6 X3N0cmVhbSkpCisjICBkZWZpbmUgZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdp bmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkgXAorICAgICAgICAgIGRlZmxhdGVJbml0Ml8o KHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAorICAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6 X3N0cmVhbSkpCisjICBkZWZpbmUgaW5mbGF0ZUluaXQyKHN0cm0sIHdpbmRvd0JpdHMpIFwKKyAg ICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04s IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRl ZmluZSBpbmZsYXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCisgICAgICAg ICAgaW5mbGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJl YW0pKQogI2VuZGlmCiAKKyNpZm5kZWYgWl9TT0xPCisKKy8qIGd6Z2V0YygpIG1hY3JvIGFuZCBp dHMgc3VwcG9ydGluZyBmdW5jdGlvbiBhbmQgZXhwb3NlZCBkYXRhIHN0cnVjdHVyZS4gIE5vdGUK KyAqIHRoYXQgdGhlIHJlYWwgaW50ZXJuYWwgc3RhdGUgaXMgbXVjaCBsYXJnZXIgdGhhbiB0aGUg ZXhwb3NlZCBzdHJ1Y3R1cmUuCisgKiBUaGlzIGFiYnJldmlhdGVkIHN0cnVjdHVyZSBleHBvc2Vz IGp1c3QgZW5vdWdoIGZvciB0aGUgZ3pnZXRjKCkgbWFjcm8uICBUaGUKKyAqIHVzZXIgc2hvdWxk IG5vdCBtZXNzIHdpdGggdGhlc2UgZXhwb3NlZCBlbGVtZW50cywgc2luY2UgdGhlaXIgbmFtZXMg b3IKKyAqIGJlaGF2aW9yIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCBwZXJoYXBzIGV2ZW4g Y2FwcmljaW91c2x5LiAgVGhleSBjYW4KKyAqIG9ubHkgYmUgdXNlZCBieSB0aGUgZ3pnZXRjKCkg bWFjcm8uICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4KKyAqLworc3RydWN0IGd6RmlsZV9zIHsKKyAg ICB1bnNpZ25lZCBoYXZlOworICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7CisgICAgel9vZmY2NF90 IHBvczsKK307CitaRVhURVJOIGludCBaRVhQT1JUIGd6Z2V0Y18gT0YoKGd6RmlsZSBmaWxlKSk7 ICAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisjaWZkZWYgWl9QUkVGSVhfU0VUCisjICB1 bmRlZiB6X2d6Z2V0YworIyAgZGVmaW5lIHpfZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5o YXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiAoZ3pnZXRj KShnKSkKKyNlbHNlCisjICBkZWZpbmUgZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZl ID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiAoZ3pnZXRjKShn KSkKKyNlbmRpZgorCisvKiBwcm92aWRlIDY0LWJpdCBvZmZzZXQgZnVuY3Rpb25zIGlmIF9MQVJH RUZJTEU2NF9TT1VSQ0UgZGVmaW5lZCwgYW5kL29yCisgKiBjaGFuZ2UgdGhlIHJlZ3VsYXIgZnVu Y3Rpb25zIHRvIDY0IGJpdHMgaWYgX0ZJTEVfT0ZGU0VUX0JJVFMgaXMgNjQgKGlmCisgKiBib3Ro IGFyZSB0cnVlLCB0aGUgYXBwbGljYXRpb24gZ2V0cyB0aGUgKjY0IGZ1bmN0aW9ucywgYW5kIHRo ZSByZWd1bGFyCisgKiBmdW5jdGlvbnMgYXJlIGNoYW5nZWQgdG8gNjQgYml0cykgLS0gaW4gY2Fz ZSB0aGVzZSBhcmUgc2V0IG9uIHN5c3RlbXMKKyAqIHdpdGhvdXQgbGFyZ2UgZmlsZSBzdXBwb3J0 LCBfTEZTNjRfTEFSR0VGSUxFIG11c3QgYWxzbyBiZSB0cnVlCisgKi8KKyNpZmRlZiBaX0xBUkdF NjQKKyAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqKSk7CisgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6c2VlazY0IE9G KChnekZpbGUsIHpfb2ZmNjRfdCwgaW50KSk7CisgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JU IGd6dGVsbDY0IE9GKChnekZpbGUpKTsKKyAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3pv ZmZzZXQ2NCBPRigoZ3pGaWxlKSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9j b21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmY2NF90KSk7CisgICBaRVhURVJOIHVMb25n IFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOwor I2VuZGlmCisKKyNpZiAhZGVmaW5lZChaTElCX0lOVEVSTkFMKSAmJiBkZWZpbmVkKFpfV0FOVDY0 KQorIyAgaWZkZWYgWl9QUkVGSVhfU0VUCisjICAgIGRlZmluZSB6X2d6b3BlbiB6X2d6b3BlbjY0 CisjICAgIGRlZmluZSB6X2d6c2VlayB6X2d6c2VlazY0CisjICAgIGRlZmluZSB6X2d6dGVsbCB6 X2d6dGVsbDY0CisjICAgIGRlZmluZSB6X2d6b2Zmc2V0IHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZp bmUgel9hZGxlcjMyX2NvbWJpbmUgel9hZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgel9j cmMzMl9jb21iaW5lIHpfY3JjMzJfY29tYmluZTY0CisjICBlbHNlCisjICAgIGRlZmluZSBnem9w ZW4gZ3pvcGVuNjQKKyMgICAgZGVmaW5lIGd6c2VlayBnenNlZWs2NAorIyAgICBkZWZpbmUgZ3p0 ZWxsIGd6dGVsbDY0CisjICAgIGRlZmluZSBnem9mZnNldCBnem9mZnNldDY0CisjICAgIGRlZmlu ZSBhZGxlcjMyX2NvbWJpbmUgYWRsZXIzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIGNyYzMyX2Nv bWJpbmUgY3JjMzJfY29tYmluZTY0CisjICBlbmRpZgorIyAgaWZuZGVmIFpfTEFSR0U2NAorICAg ICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKikpOworICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pG aWxlLCB6X29mZl90LCBpbnQpKTsKKyAgICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3p0ZWxs NjQgT0YoKGd6RmlsZSkpOworICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnem9mZnNldDY0 IE9GKChnekZpbGUpKTsKKyAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmlu ZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyAgICAgWkVYVEVSTiB1TG9uZyBaRVhQ T1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisjICBlbmRp ZgorI2Vsc2UKKyAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIE9GKChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKikpOworICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pzZWVrIE9G KChnekZpbGUsIHpfb2ZmX3QsIGludCkpOworICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3p0 ZWxsIE9GKChnekZpbGUpKTsKKyAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6b2Zmc2V0IE9G KChnekZpbGUpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0Yo KHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMy X2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworI2VuZGlmCisKKyNlbHNlIC8q IFpfU09MTyAqLworCisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9G KCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMz Ml9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKworI2VuZGlmIC8qICFaX1NP TE8gKi8KKworLyogdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyAqLwogWkVYVEVSTiBjb25zdCBjaGFy ICAgKiBaRVhQT1JUIHpFcnJvciAgICAgICAgICAgT0YoKGludCkpOwotWkVYVEVSTiBpbnQgICAg ICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCB6KSk7Ci1aRVhU RVJOIGNvbnN0IHVMb25nZiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOwor WkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3Ry ZWFtcCkpOworWkVYVEVSTiBjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJs ZSAgICBPRigodm9pZCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVV bmRlcm1pbmUgT0YoKHpfc3RyZWFtcCwgaW50KSk7CitaRVhURVJOIGludCAgICAgICAgICAgIFpF WFBPUlQgaW5mbGF0ZVZhbGlkYXRlIE9GKCh6X3N0cmVhbXAsIGludCkpOworWkVYVEVSTiB1bnNp Z25lZCBsb25nICBaRVhQT1JUIGluZmxhdGVDb2Rlc1VzZWQgT0YgKCh6X3N0cmVhbXApKTsKK1pF WFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwIE9GKCh6X3N0cmVh bXApKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBkZWZsYXRlUmVzZXRLZWVwIE9G KCh6X3N0cmVhbXApKTsKKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5f XykpICYmICFkZWZpbmVkKFpfU09MTykKK1pFWFRFUk4gZ3pGaWxlICAgICAgICAgWkVYUE9SVCBn em9wZW5fdyBPRigoY29uc3Qgd2NoYXJfdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kZSkpOworI2VuZGlmCisjaWYgZGVm aW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8K K1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVFZBIGd6dnByaW50ZiBaX0FSRygoZ3pGaWxl IGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFfbGlzdCB2YSkpOworIyAgZW5kaWYKKyNlbmRpZgogCiAjaWZkZWYg X19jcGx1c3BsdXMKIH0KZGlmZiAtciA5YTMxNzcyMzE3OTAgLXIgZTJkMTkzOWIxY2NjIHN5cy9z cmMvY21kL2dzL3psaWIvenV0aWwuYwotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL3p1dGlsLmMJ U3VuIE1hciAwOCAyMjowMDoyMyAyMDIwICswMTAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIv enV0aWwuYwlTdW4gTWFyIDA4IDE5OjU4OjA4IDIwMjAgLTA0MDAKQEAgLTEsMzEgKzEsMjcgQEAK IC8qIHp1dGlsLmMgLS0gdGFyZ2V0IGRlcGVuZGVudCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhl IGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEplYW4tbG91 cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5CiAg KiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBu b3RpY2UgaW4gemxpYi5oCiAgKi8KIAotLyogQCgjKSAkSWQ6IHp1dGlsLmMsdiAxLjEuMS4xIDIw MDUvMDQvMjQgMjE6Mzk6MzggZ2lsZXMgRXhwICQgKi8KKy8qIEAoIykgJElkJCAqLwogCiAjaW5j bHVkZSAienV0aWwuaCIKLQotI2lmbmRlZiBOT19EVU1NWV9ERUNMCi1zdHJ1Y3QgaW50ZXJuYWxf c3RhdGUgICAgICB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KKyNpZm5k ZWYgWl9TT0xPCisjICBpbmNsdWRlICJnemd1dHMuaCIKICNlbmRpZgogCi0jaWZuZGVmIFNUREMK LWV4dGVybiB2b2lkIGV4aXQgT0YoKGludCkpOwotI2VuZGlmCi0KLWNvbnN0IGNoYXIgKiBjb25z dCB6X2Vycm1zZ1sxMF0gPSB7Ci0ibmVlZCBkaWN0aW9uYXJ5IiwgICAgIC8qIFpfTkVFRF9ESUNU ICAgICAgIDIgICovCi0ic3RyZWFtIGVuZCIsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAg IDEgICovCi0iIiwgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICov Ci0iZmlsZSBlcnJvciIsICAgICAgICAgIC8qIFpfRVJSTk8gICAgICAgICAoLTEpICovCi0ic3Ry ZWFtIGVycm9yIiwgICAgICAgIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovCi0iZGF0YSBlcnJv ciIsICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovCi0iaW5zdWZmaWNpZW50IG1l bW9yeSIsIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovCi0iYnVmZmVyIGVycm9yIiwgICAgICAg IC8qIFpfQlVGX0VSUk9SICAgICAoLTUpICovCi0iaW5jb21wYXRpYmxlIHZlcnNpb24iLC8qIFpf VkVSU0lPTl9FUlJPUiAoLTYpICovCi0iIn07Cit6X2NvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1z Z1sxMF0gPSB7CisgICAgKHpfY29uc3QgY2hhciAqKSJuZWVkIGRpY3Rpb25hcnkiLCAgICAgLyog Wl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KKyAgICAoel9jb25zdCBjaGFyICopInN0cmVhbSBlbmQi LCAgICAgICAgICAvKiBaX1NUUkVBTV9FTkQgICAgICAxICAqLworICAgICh6X2NvbnN0IGNoYXIg KikiIiwgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovCisgICAg KHpfY29uc3QgY2hhciAqKSJmaWxlIGVycm9yIiwgICAgICAgICAgLyogWl9FUlJOTyAgICAgICAg ICgtMSkgKi8KKyAgICAoel9jb25zdCBjaGFyICopInN0cmVhbSBlcnJvciIsICAgICAgICAvKiBa X1NUUkVBTV9FUlJPUiAgKC0yKSAqLworICAgICh6X2NvbnN0IGNoYXIgKikiZGF0YSBlcnJvciIs ICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovCisgICAgKHpfY29uc3QgY2hhciAq KSJpbnN1ZmZpY2llbnQgbWVtb3J5IiwgLyogWl9NRU1fRVJST1IgICAgICgtNCkgKi8KKyAgICAo el9jb25zdCBjaGFyICopImJ1ZmZlciBlcnJvciIsICAgICAgICAvKiBaX0JVRl9FUlJPUiAgICAg KC01KSAqLworICAgICh6X2NvbnN0IGNoYXIgKikiaW5jb21wYXRpYmxlIHZlcnNpb24iLC8qIFpf VkVSU0lPTl9FUlJPUiAoLTYpICovCisgICAgKHpfY29uc3QgY2hhciAqKSIiCit9OwogCiAKIGNv bnN0IGNoYXIgKiBaRVhQT1JUIHpsaWJWZXJzaW9uKCkKQEAgLTM4LDMxICszNCwzMSBAQAogICAg IHVMb25nIGZsYWdzOwogCiAgICAgZmxhZ3MgPSAwOwotICAgIHN3aXRjaCAoc2l6ZW9mKHVJbnQp KSB7CisgICAgc3dpdGNoICgoaW50KShzaXplb2YodUludCkpKSB7CiAgICAgY2FzZSAyOiAgICAg YnJlYWs7CiAgICAgY2FzZSA0OiAgICAgZmxhZ3MgKz0gMTsgICAgIGJyZWFrOwogICAgIGNhc2Ug ODogICAgIGZsYWdzICs9IDI7ICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICBmbGFncyArPSAz OwogICAgIH0KLSAgICBzd2l0Y2ggKHNpemVvZih1TG9uZykpIHsKKyAgICBzd2l0Y2ggKChpbnQp KHNpemVvZih1TG9uZykpKSB7CiAgICAgY2FzZSAyOiAgICAgYnJlYWs7CiAgICAgY2FzZSA0OiAg ICAgZmxhZ3MgKz0gMSA8PCAyOyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA4OiAgICAgZmxhZ3Mg Kz0gMiA8PCAyOyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogICAgZmxhZ3MgKz0gMyA8PCAy OwogICAgIH0KLSAgICBzd2l0Y2ggKHNpemVvZih2b2lkcGYpKSB7CisgICAgc3dpdGNoICgoaW50 KShzaXplb2Yodm9pZHBmKSkpIHsKICAgICBjYXNlIDI6ICAgICBicmVhazsKICAgICBjYXNlIDQ6 ICAgICBmbGFncyArPSAxIDw8IDQ7ICAgICAgICBicmVhazsKICAgICBjYXNlIDg6ICAgICBmbGFn cyArPSAyIDw8IDQ7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzIDw8 IDQ7CiAgICAgfQotICAgIHN3aXRjaCAoc2l6ZW9mKHpfb2ZmX3QpKSB7CisgICAgc3dpdGNoICgo aW50KShzaXplb2Yoel9vZmZfdCkpKSB7CiAgICAgY2FzZSAyOiAgICAgYnJlYWs7CiAgICAgY2Fz ZSA0OiAgICAgZmxhZ3MgKz0gMSA8PCA2OyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA4OiAgICAg ZmxhZ3MgKz0gMiA8PCA2OyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogICAgZmxhZ3MgKz0g MyA8PCA2OwogICAgIH0KLSNpZmRlZiBERUJVRworI2lmZGVmIFpMSUJfREVCVUcKICAgICBmbGFn cyArPSAxIDw8IDg7CiAjZW5kaWYKICNpZiBkZWZpbmVkKEFTTVYpIHx8IGRlZmluZWQoQVNNSU5G KQpAQCAtNzgsNTIgKzc0LDUyIEBACiAgICAgZmxhZ3MgKz0gMSA8PCAxMzsKICNlbmRpZgogI2lm ZGVmIE5PX0daQ09NUFJFU1MKLSAgICBmbGFncyArPSAxIDw8IDE2OworICAgIGZsYWdzICs9IDFM IDw8IDE2OwogI2VuZGlmCiAjaWZkZWYgTk9fR1pJUAotICAgIGZsYWdzICs9IDEgPDwgMTc7Cisg ICAgZmxhZ3MgKz0gMUwgPDwgMTc7CiAjZW5kaWYKICNpZmRlZiBQS1pJUF9CVUdfV09SS0FST1VO RAotICAgIGZsYWdzICs9IDEgPDwgMjA7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjA7CiAjZW5kaWYK ICNpZmRlZiBGQVNURVNUCi0gICAgZmxhZ3MgKz0gMSA8PCAyMTsKKyAgICBmbGFncyArPSAxTCA8 PCAyMTsKICNlbmRpZgotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQo Wl9IQVZFX1NUREFSR19IKQogIyAgaWZkZWYgTk9fdnNucHJpbnRmCi0gICAgICAgIGZsYWdzICs9 IDEgPDwgMjU7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU192c3ByaW50 Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDEgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7 CiAjICAgIGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAg ICAgICBmbGFncyArPSAxIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRp ZgogIyAgZW5kaWYKICNlbHNlCi0gICAgICAgIGZsYWdzICs9IDEgPDwgMjQ7CisgICAgZmxhZ3Mg Kz0gMUwgPDwgMjQ7CiAjICBpZmRlZiBOT19zbnByaW50ZgotICAgICAgICBmbGFncyArPSAxIDw8 IDI1OworICAgIGZsYWdzICs9IDFMIDw8IDI1OwogIyAgICBpZmRlZiBIQVNfc3ByaW50Zl92b2lk Ci0gICAgICAgIGZsYWdzICs9IDEgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAg IGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgICAgIGZs YWdzICs9IDEgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBl bmRpZgogI2VuZGlmCiAgICAgcmV0dXJuIGZsYWdzOwogfQogCi0jaWZkZWYgREVCVUcKLQorI2lm ZGVmIFpMSUJfREVCVUcKKyNpbmNsdWRlIDxzdGRsaWIuaD4KICMgIGlmbmRlZiB2ZXJib3NlCiAj ICAgIGRlZmluZSB2ZXJib3NlIDAKICMgIGVuZGlmCi1pbnQgel92ZXJib3NlID0gdmVyYm9zZTsK K2ludCBaTElCX0lOVEVSTkFMIHpfdmVyYm9zZSA9IHZlcmJvc2U7CiAKLXZvaWQgel9lcnJvciAo bSkKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6X2Vycm9yIChtKQogICAgIGNoYXIgKm07CiB7CiAgICAg ZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbSk7CkBAIC0xNDEsMTMgKzEzNywxNiBAQAogfQogCiAj aWYgZGVmaW5lZChfV0lOMzJfV0NFKQotICAgIC8qIGRvZXMgbm90IGV4aXN0IG9uIFdDRSAqLwor ICAgIC8qIFRoZSBNaWNyb3NvZnQgQyBSdW4tVGltZSBMaWJyYXJ5IGZvciBXaW5kb3dzIENFIGRv ZXNuJ3QgaGF2ZQorICAgICAqIGVycm5vLiAgV2UgZGVmaW5lIGl0IGFzIGEgZ2xvYmFsIHZhcmlh YmxlIHRvIHNpbXBsaWZ5IHBvcnRpbmcuCisgICAgICogSXRzIHZhbHVlIGlzIGFsd2F5cyAwIGFu ZCBzaG91bGQgbm90IGJlIHVzZWQuCisgICAgICovCiAgICAgaW50IGVycm5vID0gMDsKICNlbmRp ZgogCiAjaWZuZGVmIEhBVkVfTUVNQ1BZCiAKLXZvaWQgem1lbWNweShkZXN0LCBzb3VyY2UsIGxl bikKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgbGVuKQogICAgIEJ5 dGVmKiBkZXN0OwogICAgIGNvbnN0IEJ5dGVmKiBzb3VyY2U7CiAgICAgdUludCAgbGVuOwpAQCAt MTU4LDcgKzE1Nyw3IEBACiAgICAgfSB3aGlsZSAoLS1sZW4gIT0gMCk7CiB9CiAKLWludCB6bWVt Y21wKHMxLCBzMiwgbGVuKQoraW50IFpMSUJfSU5URVJOQUwgem1lbWNtcChzMSwgczIsIGxlbikK ICAgICBjb25zdCBCeXRlZiogczE7CiAgICAgY29uc3QgQnl0ZWYqIHMyOwogICAgIHVJbnQgIGxl bjsKQEAgLTE3MSw3ICsxNzAsNyBAQAogICAgIHJldHVybiAwOwogfQogCi12b2lkIHptZW16ZXJv KGRlc3QsIGxlbikKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtemVybyhkZXN0LCBsZW4pCiAgICAg Qnl0ZWYqIGRlc3Q7CiAgICAgdUludCAgbGVuOwogewpAQCAtMTgyLDYgKzE4MSw3IEBACiB9CiAj ZW5kaWYKIAorI2lmbmRlZiBaX1NPTE8KIAogI2lmZGVmIFNZUzE2QklUCiAKQEAgLTIxNCwxMSAr MjE0LDEzIEBACiAgKiBhIHByb3RlY3RlZCBzeXN0ZW0gbGlrZSBPUy8yLiBVc2UgTWljcm9zb2Z0 IEMgaW5zdGVhZC4KICAqLwogCi12b2lkcGYgemNhbGxvYyAodm9pZHBmIG9wYXF1ZSwgdW5zaWdu ZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jICh2 b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywgdW5zaWduZWQgc2l6ZSkKIHsKLSAgICB2b2lk cGYgYnVmID0gb3BhcXVlOyAvKiBqdXN0IHRvIG1ha2Ugc29tZSBjb21waWxlcnMgaGFwcHkgKi8K KyAgICB2b2lkcGYgYnVmOwogICAgIHVsZyBic2l6ZSA9ICh1bGcpaXRlbXMqc2l6ZTsKIAorICAg ICh2b2lkKW9wYXF1ZTsKKwogICAgIC8qIElmIHdlIGFsbG9jYXRlIGxlc3MgdGhhbiA2NTUyMCBi eXRlcywgd2UgYXNzdW1lIHRoYXQgZmFybWFsbG9jCiAgICAgICogd2lsbCByZXR1cm4gYSB1c2Fi bGUgcG9pbnRlciB3aGljaCBkb2Vzbid0IGhhdmUgdG8gYmUgbm9ybWFsaXplZC4KICAgICAgKi8K QEAgLTIzOCw5ICsyNDAsMTIgQEAKICAgICByZXR1cm4gYnVmOwogfQogCi12b2lkICB6Y2ZyZWUg KHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCit2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICh2 b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKQogewogICAgIGludCBuOworCisgICAgKHZvaWQpb3Bh cXVlOworCiAgICAgaWYgKCoodXNoKikmcHRyICE9IDApIHsgLyogb2JqZWN0IDwgNjRLICovCiAg ICAgICAgIGZhcmZyZWUocHRyKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjU2LDcgKzI2MSw2IEBA CiAgICAgICAgIG5leHRfcHRyLS07CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcHRyID0g b3BhcXVlOyAvKiBqdXN0IHRvIG1ha2Ugc29tZSBjb21waWxlcnMgaGFwcHkgKi8KICAgICBBc3Nl cnQoMCwgInpjZnJlZTogcHRyIG5vdCBmb3VuZCIpOwogfQogCkBAIC0yNzMsMTUgKzI3NywxNSBA QAogIyAgZGVmaW5lIF9oZnJlZSAgIGhmcmVlCiAjZW5kaWYKIAotdm9pZHBmIHpjYWxsb2MgKHZv aWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLCB1bnNpZ25lZCBzaXplKQordm9pZHBmIFpMSUJf SU5URVJOQUwgemNhbGxvYyAodm9pZHBmIG9wYXF1ZSwgdUludCBpdGVtcywgdUludCBzaXplKQog ewotICAgIGlmIChvcGFxdWUpIG9wYXF1ZSA9IDA7IC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkg Ki8KKyAgICAodm9pZClvcGFxdWU7CiAgICAgcmV0dXJuIF9oYWxsb2MoKGxvbmcpaXRlbXMsIHNp emUpOwogfQogCi12b2lkICB6Y2ZyZWUgKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCit2b2lk IFpMSUJfSU5URVJOQUwgemNmcmVlICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKQogewotICAg IGlmIChvcGFxdWUpIG9wYXF1ZSA9IDA7IC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAg ICAodm9pZClvcGFxdWU7CiAgICAgX2hmcmVlKHB0cik7CiB9CiAKQEAgLTI5OCwyMiArMzAyLDI0 IEBACiBleHRlcm4gdm9pZCAgIGZyZWUgICBPRigodm9pZHBmIHB0cikpOwogI2VuZGlmCiAKLXZv aWRwZiB6Y2FsbG9jIChvcGFxdWUsIGl0ZW1zLCBzaXplKQordm9pZHBmIFpMSUJfSU5URVJOQUwg emNhbGxvYyAob3BhcXVlLCBpdGVtcywgc2l6ZSkKICAgICB2b2lkcGYgb3BhcXVlOwogICAgIHVu c2lnbmVkIGl0ZW1zOwogICAgIHVuc2lnbmVkIHNpemU7CiB7Ci0gICAgaWYgKG9wYXF1ZSkgaXRl bXMgKz0gc2l6ZSAtIHNpemU7IC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICAodm9pZClv cGFxdWU7CiAgICAgcmV0dXJuIHNpemVvZih1SW50KSA+IDIgPyAodm9pZHBmKW1hbGxvYyhpdGVt cyAqIHNpemUpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkcGYpY2FsbG9j KGl0ZW1zLCBzaXplKTsKIH0KIAotdm9pZCAgemNmcmVlIChvcGFxdWUsIHB0cikKK3ZvaWQgWkxJ Ql9JTlRFUk5BTCB6Y2ZyZWUgKG9wYXF1ZSwgcHRyKQogICAgIHZvaWRwZiBvcGFxdWU7CiAgICAg dm9pZHBmIHB0cjsKIHsKKyAgICAodm9pZClvcGFxdWU7CiAgICAgZnJlZShwdHIpOwotICAgIGlm IChvcGFxdWUpIHJldHVybjsgLyogbWFrZSBjb21waWxlciBoYXBweSAqLwogfQogCiAjZW5kaWYg LyogTVlfWkNBTExPQyAqLworCisjZW5kaWYgLyogIVpfU09MTyAqLwpkaWZmIC1yIDlhMzE3NzIz MTc5MCAtciBlMmQxOTM5YjFjY2Mgc3lzL3NyYy9jbWQvZ3MvemxpYi96dXRpbC5oCi0tLSBhL3N5 cy9zcmMvY21kL2dzL3psaWIvenV0aWwuaAlTdW4gTWFyIDA4IDIyOjAwOjIzIDIwMjAgKzAxMDAK KysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi96dXRpbC5oCVN1biBNYXIgMDggMTk6NTg6MDggMjAy MCAtMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qIHp1dGlsLmggLS0gaW50ZXJuYWwgaW50ZXJmYWNl IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmln aHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1 LTIwMTYgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2Yg ZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICov CiAKQEAgLTgsMjkgKzgsMzcgQEAKICAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMg c2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KICAqLwogCi0vKiBAKCMpICRJZDogenV0aWwuaCx2IDEu MS4xLjEgMjAwNS8wNC8yNCAyMTozOTozOCBnaWxlcyBFeHAgJCAqLworLyogQCgjKSAkSWQkICov CiAKICNpZm5kZWYgWlVUSUxfSAogI2RlZmluZSBaVVRJTF9ICiAKLSNkZWZpbmUgWkxJQl9JTlRF Uk5BTAorI2lmZGVmIEhBVkVfSElEREVOCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJp YnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQorI2Vsc2UKKyMgIGRlZmluZSBaTElCX0lO VEVSTkFMCisjZW5kaWYKKwogI2luY2x1ZGUgInpsaWIuaCIKIAotI2lmZGVmIFNUREMKLSMgIGlu Y2x1ZGUgPHN0ZGRlZi5oPgorI2lmIGRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoWl9TT0xPKQor IyAgaWYgIShkZWZpbmVkKF9XSU4zMl9XQ0UpICYmIGRlZmluZWQoX01TQ19WRVIpKQorIyAgICBp bmNsdWRlIDxzdGRkZWYuaD4KKyMgIGVuZGlmCiAjICBpbmNsdWRlIDxzdHJpbmcuaD4KICMgIGlu Y2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCi0jaWZkZWYgTk9fRVJSTk9fSAotICAgIGV4dGVybiBp bnQgZXJybm87Ci0jZWxzZQotIyAgIGluY2x1ZGUgPGVycm5vLmg+CisKKyNpZmRlZiBaX1NPTE8K KyAgIHR5cGVkZWYgbG9uZyBwdHJkaWZmX3Q7ICAvKiBndWVzcyAtLSB3aWxsIGJlIGNhdWdodCBp ZiBndWVzcyBpcyB3cm9uZyAqLwogI2VuZGlmCiAKICNpZm5kZWYgbG9jYWwKICMgIGRlZmluZSBs b2NhbCBzdGF0aWMKICNlbmRpZgotLyogY29tcGlsZSB3aXRoIC1EbG9jYWwgaWYgeW91ciBkZWJ1 Z2dlciBjYW4ndCBmaW5kIHN0YXRpYyBzeW1ib2xzICovCisvKiBzaW5jZSAic3RhdGljIiBpcyB1 c2VkIHRvIG1lYW4gdHdvIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRoaW5ncyBpbiBDLCB3ZQorICAg ZGVmaW5lICJsb2NhbCIgZm9yIHRoZSBub24tc3RhdGljIG1lYW5pbmcgb2YgInN0YXRpYyIsIGZv ciByZWFkYWJpbGl0eQorICAgKGNvbXBpbGUgd2l0aCAtRGxvY2FsIGlmIHlvdXIgZGVidWdnZXIg Y2FuJ3QgZmluZCBzdGF0aWMgc3ltYm9scykgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1 Y2g7CiB0eXBlZGVmIHVjaCBGQVIgdWNoZjsKQEAgLTM4LDEzICs0NiwxMyBAQAogdHlwZWRlZiB1 c2ggRkFSIHVzaGY7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKIAotZXh0ZXJuIGNvbnN0 IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vycm9yICov CitleHRlcm4gel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5 IDItemxpYl9lcnJvciAqLwogLyogKHNpemUgZ2l2ZW4gdG8gYXZvaWQgc2lsbHkgd2FybmluZ3Mg d2l0aCBWaXN1YWwgQysrKSAqLwogCiAjZGVmaW5lIEVSUl9NU0coZXJyKSB6X2Vycm1zZ1taX05F RURfRElDVC0oZXJyKV0KIAogI2RlZmluZSBFUlJfUkVUVVJOKHN0cm0sZXJyKSBcCi0gIHJldHVy biAoc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coZXJyKSwgKGVycikpCisgIHJldHVybiAoc3Ry bS0+bXNnID0gRVJSX01TRyhlcnIpLCAoZXJyKSkKIC8qIFRvIGJlIHVzZWQgb25seSB3aGVuIHRo ZSBzdGF0ZSBpcyBrbm93biB0byBiZSB2YWxpZCAqLwogCiAgICAgICAgIC8qIGNvbW1vbiBjb25z dGFudHMgKi8KQEAgLTc2LDY3ICs4NCw5MCBAQAogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRl ZmluZWQoV0lORE9XUykgJiYgIWRlZmluZWQoV0lOMzIpKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4 MDAKLSMgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0j ICAgIGlmKF9fU1REQ19fID09IDEpICYmIChkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVmaW5lZChf X0NPTVBBQ1RfXykpCi0gICAgICAgLyogQWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdv cmRzIG9ubHkgZW5hYmxlZCAqLwotICAgICAgIHZvaWQgX0NkZWNsIGZhcmZyZWUoIHZvaWQgKmJs b2NrICk7Ci0gICAgICAgdm9pZCAqX0NkZWNsIGZhcm1hbGxvYyggdW5zaWduZWQgbG9uZyBuYnl0 ZXMgKTsKLSMgICAgZWxzZQotIyAgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICBpZm5kZWYgWl9T T0xPCisjICAgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18p CisjICAgICAgaWYgKF9fU1REQ19fID09IDEpICYmIChkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVm aW5lZChfX0NPTVBBQ1RfXykpCisgICAgICAgICAvKiBBbGxvdyBjb21waWxhdGlvbiB3aXRoIEFO U0kga2V5d29yZHMgb25seSBlbmFibGVkICovCisgICAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVl KCB2b2lkICpibG9jayApOworICAgICAgICAgdm9pZCAqX0NkZWNsIGZhcm1hbGxvYyggdW5zaWdu ZWQgbG9uZyBuYnl0ZXMgKTsKKyMgICAgICBlbHNlCisjICAgICAgICBpbmNsdWRlIDxhbGxvYy5o PgorIyAgICAgIGVuZGlmCisjICAgIGVsc2UgLyogTVNDIG9yIERKR1BQICovCisjICAgICAgaW5j bHVkZSA8bWFsbG9jLmg+CiAjICAgIGVuZGlmCi0jICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLwor IyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQU1JR0EKKyMgIGRlZmluZSBPU19DT0RFICAxCisj ZW5kaWYKKworI2lmIGRlZmluZWQoVkFYQykgfHwgZGVmaW5lZChWTVMpCisjICBkZWZpbmUgT1Nf Q09ERSAgMgorIyAgZGVmaW5lIEZfT1BFTihuYW1lLCBtb2RlKSBcCisgICAgIGZvcGVuKChuYW1l KSwgKG1vZGUpLCAibWJjPTYwIiwgImN0eD1zdG0iLCAicmZtPWZpeCIsICJtcnM9NTEyIikKKyNl bmRpZgorCisjaWZkZWYgX18zNzBfXworIyAgaWYgX19UQVJHRVRfTElCX18gPCAweDIwMDAwMDAw CisjICAgIGRlZmluZSBPU19DT0RFIDQKKyMgIGVsaWYgX19UQVJHRVRfTElCX18gPCAweDQwMDAw MDAwCisjICAgIGRlZmluZSBPU19DT0RFIDExCisjICBlbHNlCisjICAgIGRlZmluZSBPU19DT0RF IDgKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVRBUkkpIHx8IGRlZmluZWQoYXRh cmlzdCkKKyMgIGRlZmluZSBPU19DT0RFICA1CisjZW5kaWYKKworI2lmZGVmIE9TMgorIyAgZGVm aW5lIE9TX0NPREUgIDYKKyMgIGlmIGRlZmluZWQoTV9JODYpICYmICFkZWZpbmVkKFpfU09MTykK ICMgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBBTUlH QQotIyAgZGVmaW5lIE9TX0NPREUgIDB4MDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChWQVhDKSB8 fCBkZWZpbmVkKFZNUykKLSMgIGRlZmluZSBPU19DT0RFICAweDAyCi0jICBkZWZpbmUgRl9PUEVO KG5hbWUsIG1vZGUpIFwKLSAgICAgZm9wZW4oKG5hbWUpLCAobW9kZSksICJtYmM9NjAiLCAiY3R4 PXN0bSIsICJyZm09Zml4IiwgIm1ycz01MTIiKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEFUQVJJ KSB8fCBkZWZpbmVkKGF0YXJpc3QpCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwNQotI2VuZGlmCi0K LSNpZmRlZiBPUzIKLSMgIGRlZmluZSBPU19DT0RFICAweDA2Ci0jZW5kaWYKLQogI2lmIGRlZmlu ZWQoTUFDT1MpIHx8IGRlZmluZWQoVEFSR0VUX09TX01BQykKLSMgIGRlZmluZSBPU19DT0RFICAw eDA3Ci0jICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYm IF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCi0jICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZk b3BlbiAqLwotIyAgZWxzZQotIyAgICBpZm5kZWYgZmRvcGVuCi0jICAgICAgZGVmaW5lIGZkb3Bl bihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICBkZWZpbmUgT1NfQ09ERSAgNwor IyAgaWZuZGVmIFpfU09MTworIyAgICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9v cyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCisjICAgICAgaW5jbHVkZSA8 dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCisjICAgIGVsc2UKKyMgICAgICBpZm5kZWYgZmRvcGVu CisjICAgICAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8K KyMgICAgICBlbmRpZgogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgVE9Q UzIwCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwYQorI2lmZGVmIF9fYWNvcm4KKyMgIGRlZmluZSBP U19DT0RFIDEzCiAjZW5kaWYKIAotI2lmZGVmIFdJTjMyCi0jICBpZm5kZWYgX19DWUdXSU5fXyAg LyogQ3lnd2luIGlzIFVuaXgsIG5vdCBXaW4zMiAqLwotIyAgICBkZWZpbmUgT1NfQ09ERSAgMHgw YgotIyAgZW5kaWYKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQor IyAgZGVmaW5lIE9TX0NPREUgIDEwCiAjZW5kaWYKIAotI2lmZGVmIF9fNTBTRVJJRVMgLyogUHJp bWUvUFJJTU9TICovCi0jICBkZWZpbmUgT1NfQ09ERSAgMHgwZgorI2lmZGVmIF9CRU9TXworIyAg ZGVmaW5lIE9TX0NPREUgIDE2CisjZW5kaWYKKworI2lmZGVmIF9fVE9TX09TNDAwX18KKyMgIGRl ZmluZSBPU19DT0RFIDE4CisjZW5kaWYKKworI2lmZGVmIF9fQVBQTEVfXworIyAgZGVmaW5lIE87 a1iAjVx5FMJWqDUIste42uhAR/RoCroAAgUIvMXYzo2znpqUZkAriVGh+EkIo8Sh7ZSHnUpsoTIL SOcvBcWC40hO6DKc5OKMOOPkM7i1vkujsZnnAvRERxKfGVI/Z+aXwpYz8U3bTXI+OsfuJfi28MHX BeWWFGqZIOeIfVgXDWQ73ci4/Va6W5OtRsWOZmgT0/HgguMvyarUGVf9SMfYu5YHvsvF/wGFdYzI LxK2dMaiz75Qy5Zv0gzHZGua4LeSe0koj8Bk4H3AYtDw6i5hy7fxDt8yWENiHCDRQeh6moMBzrid kCWtUP7Rgd5sjyAMyIRlDJQ++WCLdyjL4r+hI9Apf+uQ9zjlU+pb55i00xe60m33LvWFbpPmC0p8 4wiyXvwvBPS9BWVJERzVoZ1opTD1odw48jMwQFCWFgFw/LaQoMKhxV3o09Kf+ucvydPaykJCtCHm zmswwamCIbzUJyek/g0S0hZsm92m6xH951Zf6LyY7wuFll/hC/0quimBL3TO1ETMPcVT9K6BbNdr ETdJSylwiSZn0ZwJkSOQepfH7lkby6l3J2GEHTDy+J3wrdiH+L6JDW2DDarYYY3wOS1BWCSAVzn9 6Zd8ySSpv1gCSFP8Q5g8XoG//qKQnHovvDS1rPiMIbYDYPUEv71Dkwf9QbPCqtmwLJQ/KpZ34JU8 erp7cw5dJPjxbi4C8Nm35bQ0fGtAO755WWjqTEoiVa/4YfABYcMoLIV87GwgAbl4EwTJe3zfpEjL NB8r7/TVxBlNsP1JKB9eDhwTfD8egzE4/vI7TNcbINpt/PGX0XhBglMeLfha0W5a9mCqaNv1JOcZ I/WFj0cySRVzIg/bzN+nehBaNJ4Ig3czr91MOdBUkFbtB5sQve5oajiPQh8cd/xleQ98rtY+4fVB 7dX3TZzcdBd8mNa0IEh6C0B+Uz1Zh2iiQuSmcvjBSt+s1+5d/kyMIirN6c83wCuWVriwRXD6J2xl oj9UteAvMkz1D4E12cTyNuVi6JYD8U756XwMMXwFp2wMAIy1AkqcTJZw69O7U6EUJFxqBxhAWaXe VtK8DSiwyByGFoehTTDA/mtCYCAQnshwxTfLqfoPjBDOxkSm7sAqbzMe30CCKh1O/wfHIOz4S9BX IwkzkDMDaBtHYHBtJzX6g3U0DmvX09fTG1lPXo8YnBSYCkN7TBZ8Y6Lgpb4PcEg5NImOESO0CBiH 9cRDPUVgsWkjhfmp8R2a4PWb2CRxiNPfhNUiHoFDvuEM1SYgzEsQZD++CP615aTB/Q7zIrN8U0fT LAhgDPYvjr8MNWBh8tPLqFev1tJ93dNUHUw6ajg14RaAXlBMvDqI/L1thNcf2OvrwvinsS4vgJim IupyQTZyef1vYn49dgHK8c8EoIdCkXgO5OcqxXA8E+zLRqkO6Qo6HJR8StEPVXYRbMH5rRRno7do AETbkV9iQPh34jT5fBCA4Aw+afWFEsRnA+vINyy8JhIBKcOnshZ7dqo1RsxsOIDrEHvY0YRm33Aw xcsFn2oMsd7JFBlMYtFkgWA8jQjbyeTeV/08Hq2rQPdvfIi6v16Z0QhrF9Vbdou9LTuXJ3TYG2nb fIAjDcf2eyj7MLcRMVfUMpJpISkfYJVon13x01JSaCl1NKWE2D9YoFi1U/Hj+jnVhN3Ih/rv74VC TeqsXuhK4lUjSfC22+RX60lCNySNZTPM/HGeM6zIh5KxIEfJVgDoJ/+FmqbLWjvVlfcQJjzMJlc1 Bi/zdd5kaiL38x9QA0yNAxErQBP/Qgn1bjyNkcnPo9cSak2cqak/fKDDw7X1rAts+cThdkujV/px Km/igrJ+mECSkq/epa0utIlMZftnoQb/0/jqHP8mLZdbcR6lW2B07qI1TmbTTocoudp5EnvdgUbl IBEPq6IXrQpK4qck/2FJNmGEw9cuBJ+nJTEOepWHYVKyQh2SqUTWDEvb8t6Ze6yGSTsDV9Nc6Fsl kHaeaEJT4zU4afJJ65ZzadLdgvIBzpkNVmOOh4kjmwGgUPcA/v4LXRz9QkKhq3YbOPWyK6Ekpp3z QT4bL9qjli+824Xxk1O8/aG3NGxs50DmIGyMDiH4NU4eAwI2FJ5jGwuAKdDdW84iFWLYpOVVvz5B Hfd1JkjVJHpzN5sItshSbONr0+D8bNotDQj2RgwA0KMWPvgDnPn/oZt1vfl/3c1sRo39BILVecNh 1aXgcJuailAEknmAC7Xn7LX6fjxnWtMWNCFv+uivaBnpPYqk6WZZLker8t/B+B3HvRC5nprIVrby aj7thjDQUAhoOCz/9WYh3Bhu9S1P46RUmOkYtv+RgPv5OHXV4dsqBD+hfb9H8AUFfYWNJzDmoQIu Y8DDwJaJ+jYK1kNSBB5fUM79eG2UGlxE7W18inlzNzWi+0TWXivg24FMA/PynkhfKFnNtkKMdKWg LN+IEGIwUBjrUVd2J11NrasFXKMXrdPLAMvdqA3wu8hVYyOkPkImY6mxTv+GSJjpZa2Op1YDaXSc gbzgfhgpukR3sbkV9MFjuf2zNumdz4jofJxWzLu/XND5YCK1kHHmqLiLlJXGiknQivFqxQT3U95e 1g/JVI2yvEUtANgS7IsbrvFO9Mt7BTXTvi2SwByKO8bv3oP2HnXMFR1SHEM6IFNQJs3CUwCQ+iIg 8PJnCZaddf0EyxKjFC8oE7OBYmoVgodyWtoEZez0/rHcu2hwMyAMJSx1cppRMgGh5FN5X+edpkdR EqkNvmGDXir4buIk9DzCc1JyTgt6IAG8BjUOgRhEO/nE4kZnCTnb85tHo+PotPyG86NE1NxKFOSd OduDMX8zoLTRN226SNfZ8C1gaJsAgKIupWFZTGgUEDohKE/eFjzE7CvBZKRBg5+9hJxNrPoMdtYL NV0h9Ze7u0IkaYGqkvFVuqyyONXpv8uA9lEyYWV39lpxk+BfflZnmi/B7BsrmUlbdo/gH1v1GaHB yDrzs6jegn9unCBf/kAznleX/5H91DfHkkUAJD1T7Dnb7+bUSdcipQkkdtHdnPVWCFOvH66FYCLr O7irId0VUelYsNpbT2qdCWBZ96X0H431muZUrhaUmhQS1VbmAQWLfrNuRnlVZFo7mCW20abNM5BX PH6mUbrKqsxMO9UaV2iyHWw4EAMzhlSaU/6Zaa6R1X0gkBy+juzQjuDfe9hwJJXT48x5VCwgFbNh mSQoM40A7wY6FdjCLWKvU/lpMYBf+FqyQx8Hf7Qjv6WlTd5pOS2myb/IZ+Rjp3dvCQzN7NxyaGju LjFO7sw8RgosxfLxaer+MRyX2da0d0W/zQxLPxraoaZBYDA4C5UANaOIzHjW38do8ihkAFww7CFo H89yohWdwL7R5E4TbZg6lQUpzEuylOhUylIQ3EwBUrH3pLSNKZJtI9DQSjEMxLcw2Y2fGLjg1ZGs SU3F4Z54dTEea3rCsk/IRBrAo53ZHDc7p0Wjfc4VTxOUleTUsq+gzMtQZVp7+4NHfMuNnHgJ03+v 6mLOJCvhBRXdZ88NuOCV2dm7FfLBLl2ZgoUMoB6i8Aq/kA5Eq2ktqiehu1Li4fZV20lyr413GD4K HurW1GEsEWY7sRC5Ijl7yWmMMhkKryGyPw01e9FrvVmzL3NEvHlzb+3a8fW7GacQZvYqlGRORstB gr/cIF0R5IXMoHg5KVLtUzvKaXcFTZBKMNnVnL3BuJy9OUcc5IuIWXbGNQngKWT14zGHRlcZ81Fu tYZmZqCQebLQLUeg2pFkbxErSQlVvHQz03c9yKQnYnOYcEwGmXpmgZokw9+zmWjVw5DEMR6XN6ar u0QvQO3I1vJi8X0cFhUttHeo3y9kNlT74MjS7cjuhXQ7IrodmhHxOcRAyzn1IQD9GNgpDJxMsvWu NPNin3AFZdkcu/85CEiNOjybjWXjQibSejZba1ddd47rIEyZYzb7jhs02ccCTYohF+f3+lNtBvFa xlSFUEDNCuVv0S+dmQYWsBdbompau0VFqRFr4tZgK1qI+Ix5NojmNK5M4SQoZQX8DFIma+sf6AYD 7GPGbMpZnZLTEibhceWQk0abssjYg1Ynu8rzkX0m/0prlaD28UJlgplBbn9hC0JvXwucD98cEzI/ cvorzSaH74djTrmqBUeVBEIKNwHAyYUNNZdOtKJstQ8uk9CnglK4SdoDZ1yL06LWDUWqFmXqtuO2 2y/IM1Dhltnfn5qFlsWvNduZpfW8eMCYcOqGoh9f4sh+6ZTPA06TS8VCFS8BLR382orwr1C5zizb N/mWb+LY9W+hMtKurAB4ehhOW3GRA01EA5BzY+q0jQg9D2+MkW6zKlIa2lVJSWxHvydxDqUwRT7t +8boO5iS2CFdj/xTPr/hR2z0zdBoFLYbO4W1Htr8JEB8NIE0dlI4aDUEOXwfZVtDnwUbQzgu7bmB 0ouc8zfczc75iEM+bBYOzgZlqE1ZQBY+gFAZYVO8RhwMs6DRW5ecsqfFSMmIs31aSrdUlyBDEoYG UJfQPwGQ5AZbOwoQ8w1FGABlmuB49NzEiZPJSXGs6S2j/LEvkOg7E7eI/CrJsUG14SwvHgd41XA2 i0CVMsL0FjN61E89t4DOTyPx4UYEvwvbeCV+0anwvaIgINtWGUrA/kME6upfSrHTfXrvMHDvvsdU KPpvIwsos/AHt6LmLhoFWjrymR8rtAaHImoA7VGSTv4vcl7izDAy/j4tH0NRW1lR2zqoqH7b8Pwv A0CMjFspIdRhJTeFsIM7TxG9YvXtD8FKysagc6fQjDhZgRA/FRaGctVzJZDVv9KAnGS8EzpSgjfa 6N+OmfFMBnhHDOL1zBtsHjbhX6wJdtaEP8FPgLBjTftBKQDwOBd6NSMFr4HpEgZIe3GZEmculCXe KtvJs4MRHZZbQ3YjbY/p5hTVfkpzX48Ox5Sl0I1Oq9wpWFoX3ZG/ehyKQPnaspmnUHm/OioitQ03 S7ic1O4YU6Mb6flsdPZiakK+dQiwdg9SffCLdJFtHCe+gPjeY6cK0oCexbDg63i7g5RTO8k1Lgd0 ARDZd+BDKQREpioFdhBKPSObdg515kNkt8vJcC4FhRGzePXZ+TD9W7rimWCSeIOSbHbKGfIsoyzA Uq5N0ZzCTUrLQYaa2MuqTOJDLfIkntxlo90jOPAmIchR/4hsXv90DN0adqadBPAlg7mIAKiRZleW Q2kx6BWerOVic88gfYFnALoxhUScXb80gA9yu5yiz1ngE0zrn3CpzPzFDA== --00000000000076799705a060778c--