From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f43.google.com ([209.85.218.43]) by ewsd; Wed May 27 18:06:34 EDT 2020 Received: by mail-ej1-f43.google.com with SMTP id n24so29891813ejd.0 for <9front@9front.org>; Wed, 27 May 2020 15:06:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=+15IdoxJYnWY5pPSV5unWh31HeXczzg8OavvORe4gFw=; b=cj/k1XwPOfuIri4qMscamDbLdAfThfjmfQgJwnslO9ogBnfZVh9EVXb8reFIgL+vfD AptiEbgorjUb/di0FwgzD52tbz7VgVsKA66gc97344L/Qqqr5m+rajpvrU8qeMN9CDIk vrboTai0Tk6oH8qj7GtV+w4h/U1pgO/5KI0N9VZEt/qBR8tUZAMiQviGtlPUtvjHg34J TJzVFN1JHUw52UOLx9J1Oo9KuiHp8BNq178AbTsBoxWKt0x/ojvrMuxSE6H3T8t88CgK tSR3RxBfpB1VMJJWiQdhr1llXh5GIKBXDfpLa2BA6QzWKGe1BibkciD6KB8ErdrnNmSx XTEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=+15IdoxJYnWY5pPSV5unWh31HeXczzg8OavvORe4gFw=; b=KhGxFIQ9mGe9QrQgESEJzCadO9N3ccV5VhzlitDVCxXKXsZLW72yyEs8S0pnoBmy0h 0C8XYLWkVfr8Ll3w6WocyWlqa/0dzFWZdCS4YtII3UrNWf5qajoXT7h3+SKLPvtXfGBY 4wuXJ77njuaydpU7/ppsd0pFGVyZJOAcLNxRS+/OLEfnOofj4JCY1eqEmPcetMJ+6QV5 Z894Ey4ypvxXitVa9YqVzDXQMNQ9TJG2nvRdSgYBeHEDCeBtmpnFgo1zr+6JwdbcxqRY rNEdL7sq0/CIMlXyfzJJLko+82a5u+pr9WfBWIeUNzI+dXGTnGZMfQlwSAmZ+EFkqX8p JUWA== X-Gm-Message-State: AOAM53189li0wcbWr6qRC5fji0RFBeSkiHbPMQXvBYnYlsBnlgd8x6og ibVB6TKnfB94m+iAWvA9Hgs9p7RK7nF1f9SJm9AS8UHJ X-Google-Smtp-Source: ABdhPJzE6hO5Clc9nyBfLEX7nLg8xDyzk6VhlmC2XC9d7kElJA/G03+OEGVVmXDWy+C8XO8s9WVRe8e1yERGwhKqax4= X-Received: by 2002:a17:906:b299:: with SMTP id q25mr405929ejz.448.1590617188646; Wed, 27 May 2020 15:06:28 -0700 (PDT) MIME-Version: 1.0 From: Lucas Francesco Date: Wed, 27 May 2020 19:06:15 -0300 Message-ID: Subject: [9front] zlib update To: 9front@9front.org Content-Type: multipart/mixed; boundary="00000000000081486005a6a86c78" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: HTTP dependency interface out-scaling backend --00000000000081486005a6a86c78 Content-Type: text/plain; charset="UTF-8" Today people asked me to resubmit the zlib patches that I had sent months ago due to netsurf/nsfb. I actually had things working and clean on my system since back then, but I was confused between a decision of sending the build "half-broken" but with the final result working, or triggering a flag up that I didn't know if it should or not, after looking up, it seems the cleaner route is just to do the latter. the newer zlib uses lseek/open/write, functions specified in , but it actually doesn't include the header when building some of the .$O, what happened it was just that our linker would spot the functions even after the compiler warning due to the lax prototypeless functions in ANSI C std and build it fine. (the -B flag on 2c would do it) the option I'm going here is just to make it include , that requires anything that uses ape/zlib to define _POSIX_SOURCE, all tests I've done points out it is working fine, page works, the zlib tests passes and netsurf png decoding work as always with it. --00000000000081486005a6a86c78 Content-Type: application/octet-stream; name="zlibprefinal.patch" Content-Disposition: attachment; filename="zlibprefinal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kapw8glx0 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHVyYW1la3VzCiMgRGF0ZSAxNTkwNjExOTc3IDEw ODAwCiMgTm9kZSBJRCAzN2I0NDZjYzk3Zjk4MDVmYmJmZTY0NGMxZjYwMjcxOWRhNWM0NDQ4CiMg UGFyZW50ICBhMDU3OGM3OThlMTBmNDg5OTc0M2UxOTBjMGQxMWZhZDUyNzA2NzE2CnVwZGF0ZSB6 bGliCgpkaWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9hcGUvbGli L3ovbWtmaWxlCi0tLSBhL3N5cy9zcmMvYXBlL2xpYi96L21rZmlsZQlXZWQgTWF5IDI3IDAwOjA5 OjQ2IDIwMjAgKzAyMDAKKysrIGIvc3lzL3NyYy9hcGUvbGliL3ovbWtmaWxlCVdlZCBNYXkgMjcg MTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtOCw3ICs4LDEwIEBACiAJY29tcHJlc3MuJE9cCiAJY3Jj MzIuJE9cCiAJZGVmbGF0ZS4kT1wKLQlnemlvLiRPXAorCWd6Y2xvc2UuJE9cCisJZ3psaWIuJE9c CisJZ3pyZWFkLiRPXAorCWd6d3JpdGUuJE9cCiAJaW5mYmFjay4kT1wKIAlpbmZmYXN0LiRPXAog CWluZmxhdGUuJE9cCkBAIC0yMCw2ICsyMyw3IEBACiBUQVJHPVwKIAlleGFtcGxlXAogCW1pbmln emlwXAorCWluZmNvdmVyXAogCiBUT09MUz0ke1RBUkc6JT0kTy4lfQogCkBAIC0zNiw3ICs0MCw3 IEBACiAKIDwvc3lzL3NyYy9jbWQvbWtzeXNsaWIKIAotQ0ZMQUdTPS1jIC1EX1BPU0lYX1NPVVJD RSAtRF9DOTlfU05QUklOVEZfRVhURU5TSU9OCitDRkxBR1M9LWMgLURfUE9TSVhfU09VUkNFCiAK ICUuJE86IC9zeXMvc3JjL2NtZC9ncy96bGliLyUuYwogCSRDQyAkQ0ZMQUdTIC9zeXMvc3JjL2Nt ZC9ncy96bGliLyRzdGVtLmMKZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5 cy9zcmMvY21kL2dzL3psaWIvQ2hhbmdlTG9nCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvQ2hh bmdlTG9nCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9n cy96bGliL0NoYW5nZUxvZwlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEsNiAr MSw3NTcgQEAKIAogICAgICAgICAgICAgICAgIENoYW5nZUxvZyBmaWxlIGZvciB6bGliCiAKK0No YW5nZXMgaW4gMS4yLjExICgxNSBKYW4gMjAxNykKKy0gRml4IGRlZmxhdGUgc3RvcmVkIGJ1ZyB3 aGVuIHB1bGxpbmcgbGFzdCBibG9jayBmcm9tIHdpbmRvdworLSBQZXJtaXQgaW1tZWRpYXRlIGRl ZmxhdGVQYXJhbXMgY2hhbmdlcyBiZWZvcmUgYW55IGRlZmxhdGUgaW5wdXQKKworQ2hhbmdlcyBp biAxLjIuMTAgKDIgSmFuIDIwMTcpCistIEF2b2lkIHdhcm5pbmdzIG9uIHNucHJpbnRmKCkgcmV0 dXJuIHZhbHVlCistIEZpeCBidWcgaW4gZGVmbGF0ZV9zdG9yZWQoKSBmb3IgemVyby1sZW5ndGgg aW5wdXQKKy0gRml4IGJ1ZyBpbiBnendyaXRlLmMgdGhhdCBwcm9kdWNlZCBjb3JydXB0IGd6aXAg ZmlsZXMKKy0gUmVtb3ZlIGZpbGVzIHRvIGJlIGluc3RhbGxlZCBiZWZvcmUgY29weWluZyB0aGVt IGluIE1ha2VmaWxlLmluCistIEFkZCB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB3aXRoIGFzc2Vt YmxlciBjb2RlCisKK0NoYW5nZXMgaW4gMS4yLjkgKDMxIERlYyAyMDE2KQorLSBGaXggY29udHJp Yi9taW5pemlwIHRvIHBlcm1pdCB1bnppcHBpbmcgd2l0aCBkZXNrdG9wIEFQSSBbWm91em91XQor LSBJbXByb3ZlIGNvbnRyaWIvYmxhc3QgdG8gcmV0dXJuIHVudXNlZCBieXRlcworLSBBc3N1cmUg dGhhdCBnem9mZnNldCgpIGlzIGNvcnJlY3Qgd2hlbiBhcHBlbmRpbmcKKy0gSW1wcm92ZSBjb21w cmVzcygpIGFuZCB1bmNvbXByZXNzKCkgdG8gc3VwcG9ydCBsYXJnZSBsZW5ndGhzCistIEZpeCBi dWcgaW4gdGVzdC9leGFtcGxlLmMgd2hlcmUgZXJyb3IgY29kZSBub3Qgc2F2ZWQKKy0gUmVtZWR5 IENvdmVyaXR5IHdhcm5pbmcgW1JhbmRlcnMtUGVocnNvbl0KKy0gSW1wcm92ZSBzcGVlZCBvZiBn enByaW50ZigpIGluIHRyYW5zcGFyZW50IG1vZGUKKy0gRml4IGluZmxhdGVJbml0MigpIGJ1ZyB3 aGVuIHdpbmRvd0JpdHMgaXMgMTYgb3IgMzIKKy0gQ2hhbmdlIERFQlVHIG1hY3JvIHRvIFpMSUJf REVCVUcKKy0gQXZvaWQgdW5pbml0aWFsaXplZCBhY2Nlc3MgYnkgZ3pjbG9zZV93KCkKKy0gQWxs b3cgYnVpbGRpbmcgemxpYiBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5CistIEZpeCBi dWcgdGhhdCBhY2NlcHRlZCBpbnZhbGlkIHpsaWIgaGVhZGVyIHdoZW4gd2luZG93Qml0cyBpcyB6 ZXJvCistIEZpeCBnenNlZWsoKSBwcm9ibGVtIG9uIE1pbkdXIGR1ZSB0byBidWdneSBfbHNlZWtp NjQgdGhlcmUKKy0gTG9vcCBvbiB3cml0ZSgpIGNhbGxzIGluIGd6d3JpdGUuYyBpbiBjYXNlIG9m IG5vbi1ibG9ja2luZyBJL08KKy0gQWRkIC0td2FybiAoLXcpIG9wdGlvbiB0byAuL2NvbmZpZ3Vy ZSBmb3IgbW9yZSBjb21waWxlciB3YXJuaW5ncworLSBSZWplY3QgYSB3aW5kb3cgc2l6ZSBvZiAy NTYgYnl0ZXMgaWYgbm90IHVzaW5nIHRoZSB6bGliIHdyYXBwZXIKKy0gRml4IGJ1ZyB3aGVuIGxl dmVsIDAgdXNlZCB3aXRoIFpfSFVGRk1BTiBvciBaX1JMRQorLSBBZGQgLS1kZWJ1ZyAoLWQpIG9w dGlvbiB0byAuL2NvbmZpZ3VyZSB0byBkZWZpbmUgWkxJQl9ERUJVRworLSBGaXggYnVncyBpbiBj cmVhdGluZyBhIHZlcnkgbGFyZ2UgZ3ppcCBoZWFkZXIKKy0gQWRkIHVuY29tcHJlc3MyKCkgZnVu Y3Rpb24sIHdoaWNoIHJldHVybnMgdGhlIGlucHV0IHNpemUgdXNlZAorLSBBc3N1cmUgdGhhdCBk ZWZsYXRlUGFyYW1zKCkgd2lsbCBub3Qgc3dpdGNoIGZ1bmN0aW9ucyBtaWQtYmxvY2sKKy0gRHJh bWF0aWNhbGx5IHNwZWVkIHVwIGRlZmxhdGlvbiBmb3IgbGV2ZWwgMCAoc3RvcmluZykKKy0gQWRk IGd6ZnJlYWQoKSwgZHVwbGljYXRpbmcgdGhlIGludGVyZmFjZSBvZiBmcmVhZCgpCistIEFkZCBn emZ3cml0ZSgpLCBkdXBsaWNhdGluZyB0aGUgaW50ZXJmYWNlIG9mIGZ3cml0ZSgpCistIEFkZCBk ZWZsYXRlR2V0RGljdGlvbmFyeSgpIGZ1bmN0aW9uCistIFVzZSBzbnByaW50ZigpIGZvciBsYXRl ciB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgQworLSBGaXggKkluaXQgbWFjcm9zIHRvIHVzZSB6XyBw cmVmaXggd2hlbiByZXF1ZXN0ZWQKKy0gUmVwbGFjZSBhczQwMCB3aXRoIG9zNDAwIGZvciBPUy80 MDAgc3VwcG9ydCBbTW9ubmVyYXRdCistIEFkZCBjcmMzMl96KCkgYW5kIGFkbGVyMzJfeigpIGZ1 bmN0aW9ucyB3aXRoIHNpemVfdCBsZW5ndGhzCistIFVwZGF0ZSBWaXN1YWwgU3R1ZGlvIHByb2pl Y3QgZmlsZXMgW0FyYUhhYW5dCisKK0NoYW5nZXMgaW4gMS4yLjggKDI4IEFwciAyMDEzKQorLSBV cGRhdGUgY29udHJpYi9taW5pemlwL2lvd2luMzIuYyBmb3IgV2luZG93cyBSVCBbVm9sbGFudF0K Ky0gRG8gbm90IGZvcmNlIFpfQ09OU1QgZm9yIEMrKworLSBDbGVhbiB1cCBjb250cmliL3ZzdHVk aW8gW1Jvw59dCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gemxpYi5oCistIEZpeCBtaXhl ZCBsaW5lIGVuZGluZ3MgaW4gY29udHJpYi92c3R1ZGlvCisKK0NoYW5nZXMgaW4gMS4yLjcuMyAo MTMgQXByIDIwMTMpCistIEZpeCB2ZXJzaW9uIG51bWJlcnMgYW5kIERMTCBuYW1lcyBpbiBjb250 cmliL3ZzdHVkaW8vKi96bGliLnJjCisKK0NoYW5nZXMgaW4gMS4yLjcuMiAoMTMgQXByIDIwMTMp CistIENoYW5nZSBjaGVjayBmb3IgYSBmb3VyLWJ5dGUgdHlwZSBiYWNrIHRvIGhleGFkZWNpbWFs CistIEZpeCB0eXBvIGluIHdpbjMyL01ha2VmaWxlLm1zYworLSBBZGQgY2FzdHMgaW4gZ3p3cml0 ZS5jIGZvciBwb2ludGVyIGRpZmZlcmVuY2VzCisKK0NoYW5nZXMgaW4gMS4yLjcuMSAoMjQgTWFy IDIwMTMpCistIFJlcGxhY2UgdXNlIG9mIHVuc2FmZSBzdHJpbmcgZnVuY3Rpb25zIHdpdGggc25w cmludGYgaWYgYXZhaWxhYmxlCistIEF2b2lkIGluY2x1ZGluZyBzdGRkZWYuaCBvbiBXaW5kb3dz IGZvciBaX1NPTE8gY29tcGlsZSBbTmllc3NpbmtdCistIEZpeCBnemdldGMgdW5kZWZpbmUgd2hl biBaX1BSRUZJWCBzZXQgW1R1cmtdCistIEVsaW1pbmF0ZSB1c2Ugb2YgbWt0ZW1wIGluIE1ha2Vm aWxlIChub3QgYWx3YXlzIGF2YWlsYWJsZSkKKy0gRml4IGJ1ZyBpbiAnRicgbW9kZSBmb3IgZ3pv cGVuKCkKKy0gQWRkIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgZnVuY3Rpb24KKy0gQ29ycmVjdCBj b21tZW50IGluIGRlZmxhdGUuaAorLSBVc2UgX3NucHJpbnRmIGZvciBzbnByaW50ZiBpbiBNaWNy b3NvZnQgQworLSBPbiBEYXJ3aW4sIG9ubHkgdXNlIC91c3IvYmluL2xpYnRvb2wgaWYgbGlidG9v bCBpcyBub3QgQXBwbGUKKy0gRGVsZXRlICItLXZlcnNpb24iIGZpbGUgaWYgY3JlYXRlZCBieSAi YXIgLS12ZXJzaW9uIiBbUmljaGFyZCBHLl0KKy0gRml4IGNvbmZpZ3VyZSBjaGVjayBmb3IgdmVy YWNpdHkgb2YgY29tcGlsZXIgZXJyb3IgcmV0dXJuIGNvZGVzCistIEZpeCBDTWFrZSBjb21waWxh dGlvbiBvZiBzdGF0aWMgbGliIGZvciBNU1ZDMjAxMCB4NjQKKy0gUmVtb3ZlIHVudXNlZCB2YXJp YWJsZSBpbiBpbmZiYWNrOS5jCistIEZpeCBhcmd1bWVudCBjaGVja3MgaW4gZ3psb2dfY29tcHJl c3MoKSBhbmQgZ3psb2dfd3JpdGUoKQorLSBDbGVhbiB1cCB0aGUgdXNhZ2Ugb2Ygel9jb25zdCBh bmQgcmVzcGVjdCBjb25zdCB1c2FnZSB3aXRoaW4gemxpYgorLSBDbGVhbiB1cCBleGFtcGxlcy9n emxvZy5bY2hdIGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudCB0eXBlcworLSBBdm9pZCBzaGlmdCBl cXVhbCB0byBiaXRzIGluIHR5cGUgKGNhdXNlZCBlbmRsZXNzIGxvb3ApCistIEZpeCB1bmluaXRp YWxpemVkIHZhbHVlIGJ1ZyBpbiBnenB1dGMoKSBpbnRyb2R1Y2VkIGJ5IGNvbnN0IHBhdGNoZXMK Ky0gRml4IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIGluIGV4YW1wbGVzL3pyYW4uYyBbTm9yXQor LSBGaXggYnVnIHdoZXJlIGd6b3BlbigpLCBnemNsb3NlKCkgd291bGQgd3JpdGUgYW4gZW1wdHkg ZmlsZQorLSBGaXggYnVnIGluIGd6Y2xvc2UoKSB3aGVuIGd6d3JpdGUoKSBydW5zIG91dCBvZiBt ZW1vcnkKKy0gQ2hlY2sgZm9yIGlucHV0IGJ1ZmZlciBtYWxsb2MgZmFpbHVyZSBpbiBleGFtcGxl cy9nemFwcGVuZC5jCistIEFkZCBub3RlIHRvIGNvbnRyaWIvYmxhc3QgdG8gdXNlIGJpbmFyeSBt b2RlIGluIHN0ZGlvCistIEZpeCBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnRseSBzaWduZWQgaW50 ZWdlcnMgaW4gY29udHJpYi9ibGFzdAorLSBDaGVjayBmb3IgaW52YWxpZCBjb2RlIGxlbmd0aCBj b2RlcyBpbiBjb250cmliL3B1ZmYKKy0gRml4IHNlcmlvdXMgYnV0IHZlcnkgcmFyZSBkZWNvbXBy ZXNzaW9uIGJ1ZyBpbiBpbmZ0cmVlcy5jCistIFVwZGF0ZSBpbmZsYXRlQmFjaygpIGNvbW1lbnRz LCBzaW5jZSBpbmZsYXRlKCkgY2FuIGJlIGZhc3RlcgorLSBVc2UgdW5kZXJzY29yZWQgSS9PIGZ1 bmN0aW9uIG5hbWVzIGZvciBXSU5BUElfRkFNSUxZCistIEFkZCBfdHJfZmx1c2hfYml0cyB0byB0 aGUgZXh0ZXJuYWwgc3ltYm9scyBwcmVmaXhlZCBieSAtLXpwcmVmaXgKKy0gQWRkIGNvbnRyaWIv dnN0dWRpby92YzEwIHByZS1idWlsZCBzdGVwIGZvciBzdGF0aWMgb25seQorLSBRdW90ZSAtLXZl cnNpb24tc2NyaXB0IGFyZ3VtZW50IGluIENNYWtlTGlzdHMudHh0CistIERvbid0IHNwZWNpZnkg LS12ZXJzaW9uLXNjcmlwdCBvbiBBcHBsZSBwbGF0Zm9ybXMgaW4gQ01ha2VMaXN0cy50eHQKKy0g Rml4IGNhc3RpbmcgZXJyb3IgaW4gY29udHJpYi90ZXN0emxpYi90ZXN0emxpYi5jCistIEZpeCB0 eXBlcyBpbiBjb250cmliL21pbml6aXAgdG8gbWF0Y2ggcmVzdWx0IG9mIGdldF9jcmNfdGFibGUo KQorLSBTaW1wbGlmeSBjb250cmliL3ZzdHVkaW8vdmMxMCB3aXRoICdkJyBzdWZmaXgKKy0gQWRk IFRPUCBzdXBwb3J0IHRvIHdpbjMyL01ha2VmaWxlLm1zYworLSBTdXBvcnQgaTY4NiBhbmQgYW1k NjQgYXNzZW1ibGVyIGJ1aWxkcyBpbiBDTWFrZUxpc3RzLnR4dAorLSBGaXggdHlwb3MgaW4gdGhl IHVzZSBvZiBfTEFSR0VGSUxFNjRfU09VUkNFIGluIHpjb25mLmgKKy0gQWRkIHZjMTEgYW5kIHZj MTIgYnVpbGQgZmlsZXMgdG8gY29udHJpYi92c3R1ZGlvCistIEFkZCBnenZwcmludGYoKSBhcyBh biB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gaW4gemxpYgorLSBGaXggY29uZmlndXJlIGZvciBTdW4g c2hlbGwKKy0gUmVtb3ZlIHJ1bnRpbWUgY2hlY2sgaW4gY29uZmlndXJlIGZvciBmb3VyLWJ5dGUg aW50ZWdlciB0eXBlCistIEFkZCBjYXN0cyBhbmQgY29uc3RzIHRvIGVhc2UgdXNlciBjb252ZXJz aW9uIHRvIEMrKworLSBBZGQgbWFuIHBhZ2VzIGZvciBtaW5pemlwIGFuZCBtaW5pdW56aXAKKy0g SW4gTWFrZWZpbGUgdW5pbnN0YWxsLCBkb24ndCBybSBpZiBwcmVjZWRpbmcgY2QgZmFpbHMKKy0g RG8gbm90IHJldHVybiBaX0JVRl9FUlJPUiBpZiBkZWZsYXRlUGFyYW0oKSBoYXMgbm90aGluZyB0 byB3cml0ZQorCitDaGFuZ2VzIGluIDEuMi43ICgyIE1heSAyMDEyKQorLSBSZXBsYWNlIHVzZSBv ZiBtZW1tb3ZlKCkgd2l0aCBhIHNpbXBsZSBjb3B5IGZvciBwb3J0YWJpbGl0eQorLSBUZXN0IGZv ciBleGlzdGVuY2Ugb2Ygc3RyZXJyb3IKKy0gUmVzdG9yZSBnemdldGNfIGZvciBiYWNrd2FyZCBj b21wYXRpYmlsaXR5IHdpdGggMS4yLjYKKy0gRml4IGJ1aWxkIHdpdGggbm9uLUdOVSBtYWtlIG9u IFNvbGFyaXMKKy0gUmVxdWlyZSBnY2MgNC4wIG9yIGxhdGVyIG9uIE1hYyBPUyBYIHRvIHVzZSB0 aGUgaGlkZGVuIGF0dHJpYnV0ZQorLSBJbmNsdWRlIHVuaXN0ZC5oIGZvciBXYXRjb20gQworLSBV c2UgX19XQVRDT01DX18gaW5zdGVhZCBvZiBfX1dBVENPTV9fCistIERvIG5vdCB1c2UgdGhlIHZp c2liaWxpdHkgYXR0cmlidXRlIGlmIE5PX1ZJWiBkZWZpbmVkCistIEltcHJvdmUgdGhlIGRldGVj dGlvbiBvZiBubyBoaWRkZW4gdmlzaWJpbGl0eSBhdHRyaWJ1dGUKKy0gQXZvaWQgdXNpbmcgX19p bnQ2NCBmb3IgZ2NjIG9yIHNvbG8gY29tcGlsYXRpb24KKy0gQ2FzdCB0byBjaGFyICogaW4gZ3pw cmludGYgdG8gYXZvaWQgd2FybmluZ3MgW1ppbnNlcl0KKy0gRml4IG1ha2Vfdm1zLmNvbSBmb3Ig VkFYIFtaaW5zZXJdCistIERvbid0IHVzZSBsaWJyYXJ5IG9yIGJ1aWx0LWluIGJ5dGUgc3dhcHMK Ky0gU2ltcGxpZnkgdGVzdCBhbmQgdXNlIG9mIGdjYyBoaWRkZW4gYXR0cmlidXRlCistIEZpeCBi dWcgaW4gZ3pjbG9zZV93KCkgd2hlbiBnendyaXRlKCkgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5 CistIEFkZCAieCIgKE9fRVhDTCkgYW5kICJlIiAoT19DTE9FWEVDKSBtb2RlcyBzdXBwb3J0IHRv IGd6b3BlbigpCistIEZpeCBidWcgaW4gdGVzdC9taW5pZ3ppcC5jIGZvciBjb25maWd1cmUgLS1z b2xvCistIEZpeCBjb250cmliL3ZzdHVkaW8gcHJvamVjdCBsaW5rIGVycm9ycyBbTW9oYW5hdGhh c10KKy0gQWRkIGFiaWxpdHkgdG8gY2hvb3NlIHRoZSBidWlsZGVyIGluIG1ha2Vfdm1zLmNvbSBb U2Nod2VkYV0KKy0gQWRkIERFU1RESVIgc3VwcG9ydCB0byBtaW5ndzMyIHdpbjMyL01ha2VmaWxl LmdjYworLSBGaXggY29tbWVudHMgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIGZvciBwcm9wZXIgdXNh Z2UKKy0gQWxsb3cgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9ucyBmb3Ig Y21ha2UKKy0gR2VuZXJhdGUgYW5kIGluc3RhbGwgdGhlIHBrZy1jb25maWcgZmlsZSB3aXRoIGNt YWtlCistIEJ1aWxkIGJvdGggYSBzdGF0aWMgYW5kIGEgc2hhcmVkIHZlcnNpb24gb2YgemxpYiB3 aXRoIGNtYWtlCistIEluY2x1ZGUgdmVyc2lvbiBzeW1ib2xzIGZvciBjbWFrZSBidWlsZHMKKy0g SWYgdXNpbmcgY21ha2Ugd2l0aCBNU1ZDLCBhZGQgdGhlIHNvdXJjZSBkaXJlY3RvcnkgdG8gdGhl IGluY2x1ZGVzCistIFJlbW92ZSB1bm5lZWRlZCBFWFRSQV9DRkxBR1MgZnJvbSB3aW4zMi9NYWtl ZmlsZS5nY2MgW1RydXRhXQorLSBNb3ZlIG9ic29sZXRlIGVteCBtYWtlZmlsZSB0byBvbGQgW1Ry dXRhXQorLSBBbGxvdyB0aGUgdXNlIG9mIC1XdW5kZWYgd2hlbiBjb21waWxpbmcgb3IgdXNpbmcg emxpYgorLSBBdm9pZCB0aGUgdXNlIG9mIHRoZSAtdSBvcHRpb24gd2l0aCBta3RlbXAKKy0gSW1w cm92ZSBpbmZsYXRlKCkgZG9jdW1lbnRhdGlvbiBvbiB0aGUgdXNlIG9mIFpfRklOSVNICistIFJl Y29nbml6ZSBjbGFuZyBhcyBnY2MKKy0gQWRkIGd6b3Blbl93KCkgaW4gV2luZG93cyBmb3Igd2lk ZSBjaGFyYWN0ZXIgcGF0aCBuYW1lcworLSBSZW5hbWUgemNvbmYuaCBpbiBDTWFrZUxpc3RzLnR4 dCB0byBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5CistIEFkZCBzb3VyY2UgZGlyZWN0b3J5IGluIENN YWtlTGlzdHMudHh0IGZvciBidWlsZGluZyBleGFtcGxlcworLSBMb29rIGluIGJ1aWxkIGRpcmVj dG9yeSBmb3IgemxpYi5wYyBpbiBDTWFrZUxpc3RzLnR4dAorLSBSZW1vdmUgZ3pmbGFncyBmcm9t IHpsaWJ2Yy5kZWYgaW4gdmM5IGFuZCB2YzEwCistIEZpeCBjb250cmliL21pbml6aXAgY29tcGls YXRpb24gaW4gdGhlIE1pbkdXIGVudmlyb25tZW50CistIFVwZGF0ZSAuL2NvbmZpZ3VyZSBmb3Ig U29sYXJpcywgc3VwcG9ydCAtLTY0IFtNb29uZXldCistIFJlbW92ZSAtUi4gZnJvbSBTb2xhcmlz IHNoYXJlZCBidWlsZCAocG9zc2libGUgc2VjdXJpdHkgaXNzdWUpCistIEF2b2lkIHJhY2UgY29u ZGl0aW9uIGZvciBwYXJhbGxlbCBtYWtlICgtaikgcnVubmluZyBleGFtcGxlCistIEZpeCB0eXBl IG1pc21hdGNoIGJldHdlZW4gZ2V0X2NyY190YWJsZSgpIGFuZCBjcmNfdGFibGUKKy0gRml4IHBh cnNpbmcgb2YgdmVyc2lvbiB3aXRoICItIiBpbiBDTWFrZUxpc3RzLnR4dCBbU25pZGVyLCBaaWVn bGVyXQorLSBGaXggdGhlIHBhdGggdG8gemxpYi5tYXAgaW4gQ01ha2VMaXN0cy50eHQKKy0gRm9y Y2UgdGhlIG5hdGl2ZSBsaWJ0b29sIGluIE1hYyBPUyBYIHRvIGF2b2lkIEdOVSBsaWJ0b29sIFtC ZWViZV0KKy0gQWRkIGluc3RydWN0aW9ucyB0byB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIHNoYXJl ZCBpbnN0YWxsIFtUb3JyaV0KKworQ2hhbmdlcyBpbiAxLjIuNi4xICgxMiBGZWIgMjAxMikKKy0g QXZvaWQgdGhlIHVzZSBvZiB0aGUgT2JqZWN0aXZlLUMgcmVzZXJ2ZWQgbmFtZSAiaWQiCistIElu Y2x1ZGUgaW8uaCBpbiBnemd1dHMuaCBmb3IgTWljcm9zb2Z0IGNvbXBpbGVycworLSBGaXggcHJv YmxlbSB3aXRoIC4vY29uZmlndXJlIC0tcHJlZml4IGFuZCBnemdldGMgbWFjcm8KKy0gSW5jbHVk ZSBnel9oZWFkZXIgZGVmaW5pdGlvbiB3aGVuIGNvbXBpbGluZyB6bGliIHNvbG8KKy0gUHV0IGd6 ZmxhZ3MoKSBmdW5jdGlvbmFsaXR5IGJhY2sgaW4genV0aWwuYworLSBBdm9pZCBsaWJyYXJ5IGhl YWRlciBpbmNsdWRlIGluIGNyYzMyLmMgZm9yIFpfU09MTworLSBVc2UgbmFtZSBpbiBHQ0NfQ0xB U1NJQyBhcyBDIGNvbXBpbGVyIGZvciBjb3ZlcmFnZSB0ZXN0aW5nLCBpZiBzZXQKKy0gTWlub3Ig Y2xlYW51cCBpbiBjb250cmliL21pbml6aXAvemlwLmMgW1ZvbGxhbnRdCistIFVwZGF0ZSBtYWtl X3Ztcy5jb20gW1ppbnNlcl0KKy0gUmVtb3ZlIHVubmVjZXNzYXJ5IGd6Z2V0Y18gZnVuY3Rpb24K Ky0gVXNlIG9wdGltaXplZCBieXRlIHN3YXAgb3BlcmF0aW9ucyBmb3IgTWljcm9zb2Z0IGFuZCBH TlUgW1NueWRlcl0KKy0gRml4IG1pbm9yIHR5cG8gaW4gemxpYi5oIGNvbW1lbnRzIFtSemVzbmlv d2llY2tpXQorCitDaGFuZ2VzIGluIDEuMi42ICgyOSBKYW4gMjAxMikKKy0gVXBkYXRlIHRoZSBQ YXNjYWwgaW50ZXJmYWNlIGluIGNvbnRyaWIvcGFzY2FsCistIEZpeCBmdW5jdGlvbiBudW1iZXJz IGZvciBnemdldGNfIGluIHpsaWJ2Yy5kZWYgZmlsZXMKKy0gRml4IGNvbmZpZ3VyZS5hYyBmb3Ig Y29udHJpYi9taW5pemlwIFtTY2hpZmZlcl0KKy0gRml4IGxhcmdlLWVudHJ5IGRldGVjdGlvbiBp biBtaW5pemlwIG9uIDY0LWJpdCBzeXN0ZW1zIFtTY2hpZmZlcl0KKy0gSGF2ZSAuL2NvbmZpZ3Vy ZSB1c2UgdGhlIGNvbXBpbGVyIHJldHVybiBjb2RlIGZvciBlcnJvciBpbmRpY2F0aW9uCistIEZp eCBDTWFrZUxpc3RzLnR4dCBmb3IgY3Jvc3MgY29tcGlsYXRpb24gW01jQ2x1cmVdCistIEZpeCBj b250cmliL21pbml6aXAvemlwLmMgZm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzIFtEYWxzbmVzXQor LSBGaXggY29tcGlsYXRpb24gb2YgY29udHJpYi9taW5pemlwIG9uIEZyZWVCU0QgW01hcnF1ZXpd CistIENvcnJlY3Qgc3VnZ2VzdGVkIHVzYWdlcyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MgW1NoYWNo YXIsIEhvcnZhdGhdCistIEluY2x1ZGUgaW8uaCBmb3IgVHVyYm8gQyAvIEJvcmxhbmQgQyBvbiBh bGwgcGxhdGZvcm1zIFtUcnV0YV0KKy0gTWFrZSB2ZXJzaW9uIGV4cGxpY2l0IGluIGNvbnRyaWIv bWluaXppcC9jb25maWd1cmUuYWMgW0Jvc21hbnNdCistIEF2b2lkIHdhcm5pbmcgZm9yIG5vIGVu Y3J5cHRpb24gaW4gY29udHJpYi9taW5pemlwL3ppcC5jIFtWb2xsYW50XQorLSBNaW5vciBjbGVh bnVwIHVwIGNvbnRyaWIvbWluaXppcC91bnppcC5jIFtWb2xsYW50XQorLSBGaXggYnVnIHdoZW4g Y29tcGlsaW5nIG1pbml6aXAgd2l0aCBDKysgW1ZvbGxhbnRdCistIFByb3RlY3QgZm9yIGxvbmcg bmFtZSBhbmQgZXh0cmEgZmllbGRzIGluIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQXZv aWQgc29tZSB3YXJuaW5ncyBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEFkZCAtSS4u Ly4uIC1MLi4vLi4gdG8gQ0ZMQUdTIGZvciBtaW5pemlwIGFuZCBtaW5pdW56aXAKKy0gQWRkIG1p c3NpbmcgbGlicyB0byBtaW5pemlwIGxpbmtlciBjb21tYW5kCistIEFkZCBzdXBwb3J0IGZvciBW UEFUSCBidWlsZHMgaW4gY29udHJpYi9taW5pemlwCistIEFkZCBhbiAtLWVuYWJsZS1kZW1vcyBv cHRpb24gdG8gY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZQorLSBBZGQgdGhlIGdlbmVyYXRpb24g b2YgY29uZmlndXJlLmxvZyBieSAuL2NvbmZpZ3VyZQorLSBFeGl0IHdoZW4gcmVxdWlyZWQgcGFy YW1ldGVycyBub3QgcHJvdmlkZWQgdG8gd2luMzIvTWFrZWZpbGUuZ2NjCistIEhhdmUgZ3pwdXRj IHJldHVybiB0aGUgY2hhcmFjdGVyIHdyaXR0ZW4gaW5zdGVhZCBvZiB0aGUgYXJndW1lbnQKKy0g VXNlIHRoZSAtbSBvcHRpb24gb24gbGRjb25maWcgZm9yIEJTRCBzeXN0ZW1zIFtUb2JpYXNdCist IENvcnJlY3QgaW4gemxpYi5tYXAgd2hlbiBkZWZsYXRlUmVzZXRLZWVwIHdhcyBhZGRlZAorCitD aGFuZ2VzIGluIDEuMi41LjMgKDE1IEphbiAyMDEyKQorLSBSZXN0b3JlIGd6Z2V0YyBmdW5jdGlv biBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKKy0gRG8gbm90IHVzZSBfbHNlZWtpNjQgdW5kZXIg Qm9ybGFuZCBDKysgW1RydXRhXQorLSBVcGRhdGUgd2luMzIvTWFrZWZpbGUubXNjIHRvIGJ1aWxk IHRlc3QvKi5jIFtUcnV0YV0KKy0gUmVtb3ZlIG9sZC92aXN1YWxjNiBnaXZlbiBDTWFrZWZpbGUg YW5kIG90aGVyIGFsdGVybmF0aXZlcworLSBVcGRhdGUgQVM0MDAgYnVpbGQgZmlsZXMgYW5kIGRv Y3VtZW50YXRpb24gW01vbm5lcmF0XQorLSBVcGRhdGUgd2luMzIvTWFrZWZpbGUuZ2NjIHRvIGJ1 aWxkIHRlc3QvKi5jIFtUcnV0YV0KKy0gUGVybWl0IHN0cm9uZ2VyIGZsdXNoZXMgYWZ0ZXIgWl9C TE9DSyBmbHVzaGVzCistIEF2b2lkIGV4dHJhbmVvdXMgZW1wdHkgYmxvY2tzIHdoZW4gZG9pbmcg ZW1wdHkgZmx1c2hlcworLSBQZXJtaXQgWl9OVUxMIGFyZ3VtZW50cyB0byBkZWZsYXRlUGVuZGlu ZworLSBBbGxvdyBkZWZsYXRlUHJpbWUoKSB0byBpbnNlcnQgYml0cyBpbiB0aGUgbWlkZGxlIG9m IGEgc3RyZWFtCistIFJlbW92ZSBzZWNvbmQgZW1wdHkgc3RhdGljIGJsb2NrIGZvciBaX1BBUlRJ QUxfRkxVU0gKKy0gV3JpdGUgb3V0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGJpdHMgd2hlbiB1c2lu ZyBaX0JMT0NLCistIEluc2VydCB0aGUgZmlyc3QgdHdvIHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFi bGUgYWZ0ZXIgYSBmbHVzaAorCitDaGFuZ2VzIGluIDEuMi41LjIgKDE3IERlYyAyMDExKQorLSBm aXggbGQgZXJyb3I6IHVuYWJsZSB0byBmaW5kIHZlcnNpb24gZGVwZW5kZW5jeSAnWkxJQl8xLjIu NScKKy0gdXNlIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBzaGFyZWQgbGlicworLSBBdm9pZCBzZWFy Y2hpbmcgcGFzdCB3aW5kb3cgZm9yIFpfUkxFIHN0cmF0ZWd5CistIEFzc3VyZSB0aGF0IGhpZ2gt d2F0ZXIgbWFyayBpbml0aWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBpbiBkZWZsYXRlCist IEFkZCBhc3NlcnRpb25zIHRvIGZpbGxfd2luZG93KCkgaW4gZGVmbGF0ZS5jIHRvIG1hdGNoIGNv bW1lbnRzCistIFVwZGF0ZSBweXRob24gbGluayBpbiBSRUFETUUKKy0gQ29ycmVjdCBzcGVsbGlu ZyBlcnJvciBpbiBnenJlYWQuYworLSBGaXggYnVnIGluIGd6Z2V0cygpIGZvciBhIGNvbmNhdGVu YXRlZCBlbXB0eSBnemlwIHN0cmVhbQorLSBDb3JyZWN0IGVycm9yIGluIGNvbW1lbnQgZm9yIGd6 X21ha2UoKQorLSBDaGFuZ2UgZ3pyZWFkKCkgYW5kIHJlbGF0ZWQgdG8gaWdub3JlIGp1bmsgYWZ0 ZXIgZ3ppcCBzdHJlYW1zCistIEFsbG93IGd6cmVhZCgpIGFuZCByZWxhdGVkIHRvIGNvbnRpbnVl IGFmdGVyIGd6Y2xlYXJlcnIoKQorLSBBbGxvdyBnenJld2luZCgpIGFuZCBnenNlZWsoKSBhZnRl ciBhIHByZW1hdHVyZSBlbmQtb2YtZmlsZQorLSBTaW1wbGlmeSBnenNlZWsoKSBub3cgdGhhdCBy YXcgYWZ0ZXIgZ3ppcCBpcyBpZ25vcmVkCistIENoYW5nZSBnemdldGMoKSB0byBhIG1hY3JvIGZv ciBzcGVlZCAofjQwJSBzcGVlZHVwIGluIHRlc3RpbmcpCistIEZpeCBnemNsb3NlKCkgdG8gcmV0 dXJuIHRoZSBhY3R1YWwgZXJyb3IgbGFzdCBlbmNvdW50ZXJlZAorLSBBbHdheXMgYWRkIGxhcmdl IGZpbGUgc3VwcG9ydCBmb3Igd2luZG93cworLSBJbmNsdWRlIHpjb25mLmggZm9yIHdpbmRvd3Mg bGFyZ2UgZmlsZSBzdXBwb3J0CistIEluY2x1ZGUgemNvbmYuaC5jbWFrZWluIGZvciB3aW5kb3dz IGxhcmdlIGZpbGUgc3VwcG9ydAorLSBVcGRhdGUgemNvbmYuaC5jbWFrZWluIG9uIG1ha2UgZGlz dGNsZWFuCistIE1lcmdlIHZlc3RpZ2lhbCB2c25wcmludGYgZGV0ZXJtaW5hdGlvbiBmcm9tIHp1 dGlsLmggdG8gZ3pndXRzLmgKKy0gQ2xhcmlmeSBob3cgZ3pvcGVuKCkgYXBwZW5kcyBpbiB6bGli LmggY29tbWVudHMKKy0gQ29ycmVjdCBkb2N1bWVudGF0aW9uIG9mIGd6ZGlyZWN0KCkgc2luY2Ug anVuayBhdCBlbmQgbm93IGlnbm9yZWQKKy0gQWRkIGEgdHJhbnNwYXJlbnQgd3JpdGUgbW9kZSB0 byBnem9wZW4oKSB3aGVuICdUJyBpcyBpbiB0aGUgbW9kZQorLSBVcGRhdGUgcHl0aG9uIGxpbmsg aW4gemxpYiBtYW4gcGFnZQorLSBHZXQgaW5mZml4ZWQuaCBhbmQgTUFLRUZJWEVEIHJlc3VsdCB0 byBtYXRjaAorLSBBZGQgYSAuL2NvbmZpZyAtLXNvbG8gb3B0aW9uIHRvIG1ha2UgemxpYiBzdWJz ZXQgd2l0aCBubyBsaWJyYXJ5IHVzZQorLSBBZGQgdW5kb2N1bWVudGVkIGluZmxhdGVSZXNldEtl ZXAoKSBmdW5jdGlvbiBmb3IgQ0FCIGZpbGUgZGVjb2RpbmcKKy0gQWRkIC0tY292ZXIgb3B0aW9u IHRvIC4vY29uZmlndXJlIGZvciBnY2MgY292ZXJhZ2UgdGVzdGluZworLSBBZGQgI2RlZmluZSBa TElCX0NPTlNUIG9wdGlvbiB0byB1c2UgY29uc3QgaW4gdGhlIHpfc3RyZWFtIGludGVyZmFjZQor LSBBZGQgY29tbWVudCB0byBnemRvcGVuKCkgaW4gemxpYi5oIHRvIHVzZSBkdXAoKSB3aGVuIHVz aW5nIGZpbGVubygpCistIE5vdGUgYmVoYXZpb3Igb2YgdW5jb21wcmVzcygpIHRvIHByb3ZpZGUg YXMgbXVjaCBkYXRhIGFzIGl0IGNhbgorLSBBZGQgZmlsZXMgaW4gY29udHJpYi9taW5pemlwIHRv IGFpZCBpbiBidWlsZGluZyBsaWJtaW5pemlwCistIFNwbGl0IG9mZiBBUiBvcHRpb25zIGluIE1h a2VmaWxlLmluIGFuZCBjb25maWd1cmUKKy0gQ2hhbmdlIE9OIG1hY3JvIHRvIFpfQVJHIHRvIGF2 b2lkIGFwcGxpY2F0aW9uIGNvbmZsaWN0cworLSBGYWNpbGl0YXRlIGNvbXBpbGF0aW9uIHdpdGgg Qm9ybGFuZCBDKysgZm9yIHByYWdtYXMgYW5kIHZzbnByaW50ZgorLSBJbmNsdWRlIGlvLmggZm9y IFR1cmJvIEMgLyBCb3JsYW5kIEMrKworLSBNb3ZlIGV4YW1wbGUuYyBhbmQgbWluaWd6aXAuYyB0 byB0ZXN0LworLSBTaW1wbGlmeSBpbmNvbXBsZXRlIGNvZGUgdGFibGUgZmlsbGluZyBpbiBpbmZs YXRlX3RhYmxlKCkKKy0gUmVtb3ZlIGNvZGUgZnJvbSBpbmZsYXRlLmMgYW5kIGluZmJhY2suYyB0 aGF0IGlzIGltcG9zc2libGUgdG8gZXhlY3V0ZQorLSBUZXN0IHRoZSBpbmZsYXRlIGNvZGUgd2l0 aCBmdWxsIGNvdmVyYWdlCistIEFsbG93IGRlZmxhdGVTZXREaWN0aW9uYXJ5LCBpbmZsYXRlU2V0 RGljdGlvbmFyeSBhdCBhbnkgdGltZSAoaW4gcmF3KQorLSBBZGQgZGVmbGF0ZVJlc2V0S2VlcCBh bmQgZml4IGluZmxhdGVSZXNldEtlZXAgdG8gcmV0YWluIGRpY3Rpb25hcnkKKy0gRml4IGd6d3Jp dGUuYyB0byBhY2NvbW1vZGF0ZSByZWR1Y2VkIG1lbW9yeSB6bGliIGNvbXBpbGF0aW9uCistIEhh dmUgaW5mbGF0ZSgpIHdpdGggWl9GSU5JU0ggYXZvaWQgdGhlIGFsbG9jYXRpb24gb2YgYSB3aW5k b3cKKy0gRG8gbm90IHNldCBzdHJtLT5hZGxlciB3aGVuIGRvaW5nIHJhdyBpbmZsYXRlCistIEZp eCBnemVvZigpIHRvIGJlaGF2ZSBqdXN0IGxpa2UgZmVvZigpIHdoZW4gcmVhZCBpcyBub3QgcGFz dCBlbmQgb2YgZmlsZQorLSBGaXggYnVnIGluIGd6cmVhZC5jIHdoZW4gZW5kLW9mLWZpbGUgaXMg cmVhY2hlZAorLSBBdm9pZCB1c2Ugb2YgWl9CVUZfRVJST1IgaW4gZ3oqIGZ1bmN0aW9ucyBleGNl cHQgZm9yIHByZW1hdHVyZSBFT0YKKy0gRG9jdW1lbnQgZ3pyZWFkKCkgY2FwYWJpbGl0eSB0byBy ZWFkIGNvbmN1cnJlbnRseSB3cml0dGVuIGZpbGVzCistIFJlbW92ZSBoYXJkLWNvZGluZyBvZiBy ZXNvdXJjZSBjb21waWxlciBpbiBDTWFrZUxpc3RzLnR4dCBbQmxhbW1vXQorCitDaGFuZ2VzIGlu IDEuMi41LjEgKDEwIFNlcCAyMDExKQorLSBVcGRhdGUgRkFRIGVudHJ5IG9uIHNoYXJlZCBidWls ZHMgKCMxMykKKy0gQXZvaWQgc3ltYm9saWMgYXJndW1lbnQgdG8gY2htb2QgaW4gTWFrZWZpbGUu aW4KKy0gRml4IGJ1ZyBhbmQgYWRkIGNvbnN0cyBpbiBjb250cmliL3B1ZmYgW09iZXJodW1lcl0K Ky0gVXBkYXRlIGNvbnRyaWIvcHVmZi96ZXJvcy5yYXcgdGVzdCBmaWxlIHRvIGhhdmUgYWxsIGJs b2NrIHR5cGVzCistIEFkZCBmdWxsIGNvdmVyYWdlIHRlc3QgZm9yIHB1ZmYgaW4gY29udHJpYi9w dWZmL01ha2VmaWxlCistIEZpeCBzdGF0aWMtb25seS1idWlsZCBpbnN0YWxsIGluIE1ha2VmaWxl LmluCistIEZpeCBidWcgaW4gdW56R2V0Q3VycmVudEZpbGVJbmZvKCkgaW4gY29udHJpYi9taW5p emlwIFtLdW5vXQorLSBBZGQgbGliei5hIGRlcGVuZGVuY3kgdG8gc2hhcmVkIGluIE1ha2VmaWxl LmluIGZvciBwYXJhbGxlbCBidWlsZHMKKy0gU3BlbGwgb3V0ICJudW1iZXIiIChpbnN0ZWFkIG9m ICJuYiIpIGluIHpsaWIuaCBmb3IgdG90YWxfaW4sIHRvdGFsX291dAorLSBSZXBsYWNlICQoLi4u KSB3aXRoIGAuLi5gIGluIGNvbmZpZ3VyZSBmb3Igbm9uLWJhc2ggc2ggW0Jvd2xlcl0KKy0gQWRk IGRhcndpbiogdG8gRGFyd2luKiBhbmQgc29sYXJpcyogdG8gU3VuT1NcIDUqIGluIGNvbmZpZ3Vy ZSBbR3JvZmZlbl0KKy0gQWRkIHNvbGFyaXMqIHRvIExpbnV4KiBpbiBjb25maWd1cmUgdG8gYWxs b3cgZ2NjIHVzZSBbR3JvZmZlbl0KKy0gQWRkICpic2QqIHRvIExpbnV4KiBjYXNlIGluIGNvbmZp Z3VyZSBbQmFyLUxldl0KKy0gQWRkIGluZmZhc3Qub2JqIHRvIGRlcGVuZGVuY2llcyBpbiB3aW4z Mi9NYWtlZmlsZS5tc2MKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiBkZWZsYXRlLmggW0tv aGxlcl0KKy0gQ2hhbmdlIGxpYnpkbGwuYSBhZ2FpbiB0byBsaWJ6LmRsbC5hICghKSBpbiB3aW4z Mi9NYWtlZmlsZS5nY2MKKy0gQWRkIHRlc3QgdG8gY29uZmlndXJlIGZvciBHTlUgQyBsb29raW5n IGZvciBnY2MgaW4gb3V0cHV0IG9mICRjYyAtdgorLSBBZGQgemxpYi5wYyBnZW5lcmF0aW9uIHRv IHdpbjMyL01ha2VmaWxlLmdjYyBbV2VpZ2VsdF0KKy0gRml4IGJ1ZyBpbiB6bGliLmggZm9yIF9G SUxFX09GRlNFVF9CSVRTIHNldCBhbmQgX0xBUkdFRklMRTY0X1NPVVJDRSBub3QKKy0gQWRkIGNv bW1lbnQgaW4gemxpYi5oIHRoYXQgYWRsZXIzMl9jb21iaW5lIHdpdGggbGVuMiA8IDAgbWFrZXMg bm8gc2Vuc2UKKy0gTWFrZSBOT19ESVZJREUgb3B0aW9uIGluIGFkbGVyMzIuYyBtdWNoIGZhc3Rl ciAodGhhbmtzIHRvIEpvaG4gUmVpc2VyKQorLSBNYWtlIHN0cm9uZ2VyIHRlc3QgaW4gemNvbmYu aCB0byBpbmNsdWRlIHVuaXN0ZC5oIGZvciBMRlMKKy0gQXBwbHkgRGFyd2luIHBhdGNoZXMgZm9y IDY0LWJpdCBmaWxlIG9mZnNldHMgdG8gY29udHJpYi9taW5pemlwIFtTbGFja10KKy0gRml4IHps aWIuaCBMRlMgc3VwcG9ydCB3aGVuIFpfUFJFRklYIHVzZWQKKy0gQWRkIHVwZGF0ZWQgYXM0MDAg c3VwcG9ydCAocmVtb3ZlZCBmcm9tIG9sZCkgW01vbm5lcmF0XQorLSBBdm9pZCBkZWZsYXRlIHNl bnNpdGl2aXR5IHRvIHZvbGF0aWxlIGlucHV0IGRhdGEKKy0gQXZvaWQgZGl2aXNpb24gaW4gYWRs ZXIzMl9jb21iaW5lIGZvciBOT19ESVZJREUKKy0gQ2xhcmlmeSB0aGUgdXNlIG9mIFpfRklOSVNI IHdpdGggZGVmbGF0ZUJvdW5kKCkgYW1vdW50IG9mIHNwYWNlCistIFNldCBiaW5hcnkgZm9yIG91 dHB1dCBmaWxlIGluIHB1ZmYuYworLSBVc2UgdTQgdHlwZSBmb3IgY3JjX3RhYmxlIHRvIGF2b2lk IGNvbnZlcnNpb24gd2FybmluZ3MKKy0gQXBwbHkgY2FzdHMgaW4gemxpYi5oIHRvIGF2b2lkIGNv bnZlcnNpb24gd2FybmluZ3MKKy0gQWRkIE9GIHRvIHByb3RvdHlwZXMgZm9yIGFkbGVyMzJfY29t YmluZV8gYW5kIGNyYzMyX2NvbWJpbmVfIFtNaWxsZXJdCistIEltcHJvdmUgaW5mbGF0ZVN5bmMo KSBkb2N1bWVudGF0aW9uIHRvIG5vdGUgaW5kZXRlcm1pbmFuY3kKKy0gQWRkIGRlZmxhdGVQZW5k aW5nKCkgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBhbW91bnQgb2YgcGVuZGluZyBvdXRwdXQKKy0g Q29ycmVjdCB0aGUgc3BlbGxpbmcgb2YgInNwZWNpZmljYXRpb24iIGluIEZBUSBbUmFuZGVycy1Q ZWhyc29uXQorLSBBZGQgYSBjaGVjayBpbiBjb25maWd1cmUgZm9yIHN0ZGFyZy5oLCB1c2UgZm9y IGd6cHJpbnRmKCkKKy0gQ2hlY2sgdGhhdCBwb2ludGVycyBmaXQgaW4gaW50cyB3aGVuIGd6cHJp bnQoKSBjb21waWxlZCBvbGQgc3R5bGUKKy0gQWRkIGR1bW15IG5hbWUgYmVmb3JlICQoU0hBUkVE TElCVikgaW4gTWFrZWZpbGUgW0Jhci1MZXYsIEJvd2xlcl0KKy0gRGVsZXRlIGxpbmUgaW4gY29u ZmlndXJlIHRoYXQgYWRkcyAtTC4gbGliei5hIHRvIExERkxBR1MgW1dlaWdlbHRdCistIEFkZCBk ZWJ1ZyByZWNvcmRzIGluIGFzc21lYmxlciBjb2RlIFtMb25kZXJdCistIFVwZGF0ZSBSRkMgcmVm ZXJlbmNlcyB0byB1c2UgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvLi4uIFtMaV0KKy0gQWRk IC0tYXJjaHMgb3B0aW9uLCB1c2Ugb2YgbGlidG9vbCB0byBjb25maWd1cmUgZm9yIE1hYyBPUyBY IFtCb3JzdGVsXQorCitDaGFuZ2VzIGluIDEuMi41ICgxOSBBcHIgMjAxMCkKKy0gRGlzYWJsZSB2 aXNpYmlsaXR5IGF0dHJpYnV0ZSBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgW0Jhci1MZXZdCistIERl ZmF1bHQgdG8gbGliZGlyIGFzIHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW05pZWRlcl0KKy0g VXBkYXRlIGNvcHlyaWdodCBkYXRlcyBvbiBtb2RpZmllZCBzb3VyY2UgZmlsZXMKKy0gVXBkYXRl IHRyZWVzLmMgdG8gYmUgYWJsZSB0byBnZW5lcmF0ZSBtb2RpZmllZCB0cmVlcy5oCistIEV4aXQg Y29uZmlndXJlIGZvciBNaW5HVywgc3VnZ2VzdGluZyB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gQ2hl Y2sgZm9yIE5VTEwgcGF0aCBpbiBnel9vcGVuIFtIb211cmx1XQorCitDaGFuZ2VzIGluIDEuMi40 LjUgKDE4IEFwciAyMDEwKQorLSBTZXQgc2hhcmVkbGliZGlyIGluIGNvbmZpZ3VyZSBbVG9yb2td CistIFNldCBMREZMQUdTIGluIE1ha2VmaWxlLmluIFtCYXItTGV2XQorLSBBdm9pZCBta2RpciBv YmpzIHJhY2UgY29uZGl0aW9uIGluIE1ha2VmaWxlLmluIFtCb3dsZXJdCistIEFkZCBaTElCX0lO VEVSTkFMIGluIGZyb250IG9mIGludGVybmFsIGludGVyLW1vZHVsZSBmdW5jdGlvbnMgYW5kIGFy cmF5cworLSBEZWZpbmUgWkxJQl9JTlRFUk5BTCB0byBoaWRlIGludGVybmFsIGZ1bmN0aW9ucyBh bmQgYXJyYXlzIGZvciBHTlUgQworLSBEb24ndCB1c2UgaGlkZGVuIGF0dHJpYnV0ZSB3aGVuIGl0 IGlzIGEgd2FybmluZyBnZW5lcmF0b3IgKGUuZy4gU29sYXJpcykKKworQ2hhbmdlcyBpbiAxLjIu NC40ICgxOCBBcHIgMjAxMCkKKy0gRml4IENST1NTX1BSRUZJWCBleGVjdXRhYmxlIHRlc3Rpbmcs IENIT1NUIGV4dHJhY3QsIG1pbmd3KiBbVG9yb2tdCistIFVuZGVmaW5lIF9MQVJHRUZJTEU2NF9T T1VSQ0UgaW4gemNvbmYuaCBpZiBpdCBpcyB6ZXJvLCBidXQgbm90IGlmIGVtcHR5CistIFRyeSB0 byB1c2UgYmFzaCBvciBrc2ggcmVnYXJkbGVzcyBvZiBmdW5jdGlvbmFsaXR5IG9mIC9iaW4vc2gK Ky0gRml4IGNvbmZpZ3VyZSBpbmNvbXBhdGliaWxpdHkgd2l0aCBOZXRCU0Qgc2gKKy0gUmVtb3Zl IGF0dGVtcHQgdG8gcnVuIHVuZGVyIGJhc2ggb3Iga3NoIHNpbmNlIGhhdmUgYmV0dGVyIE5ldEJT RCBmaXgKKy0gRml4IHdpbjMyL01ha2VmaWxlLmdjYyBmb3IgTWluR1cgW0Jhci1MZXZdCistIEFk ZCBkaWFnbm9zdGljIG1lc3NhZ2VzIHdoZW4gdXNpbmcgQ1JPU1NfUFJFRklYIGluIGNvbmZpZ3Vy ZQorLSBBZGRlZCAtLXNoYXJlZGxpYmRpciBvcHRpb24gdG8gY29uZmlndXJlIFtXZWlnZWx0XQor LSBVc2UgaGlkZGVuIHZpc2liaWxpdHkgYXR0cmlidXRlIHdoZW4gYXZhaWxhYmxlIFtGcnlzaW5n ZXJdCisKK0NoYW5nZXMgaW4gMS4yLjQuMyAoMTAgQXByIDIwMTApCistIE9ubHkgdXNlIENST1NT X1BSRUZJWCBpbiBjb25maWd1cmUgZm9yIGFyIGFuZCByYW5saWIgaWYgdGhleSBleGlzdAorLSBV c2UgQ1JPU1NfUFJFRklYIGZvciBubSBbQmFyLUxldl0KKy0gQXNzdW1lIF9MQVJHRUZJTEU2NF9T T1VSQ0UgZGVmaW5lZCBpcyBlcXVpdmFsZW50IHRvIHRydWUKKy0gQXZvaWQgdXNlIG9mIHVuZGVm aW5lZCBzeW1ib2xzIGluICNpZiB3aXRoICYmIGFuZCB8fAorLSBNYWtlICo2NCBwcm90b3R5cGVz IGluIGd6Z3V0cy5oIGNvbnNpc3RlbnQgd2l0aCBmdW5jdGlvbnMKKy0gQWRkIC1zaGFyZWQgbG9h ZCBvcHRpb24gZm9yIE1pbkdXIGluIGNvbmZpZ3VyZSBbQm93bGVyXQorLSBNb3ZlIHpfb2ZmNjRf dCB0byBwdWJsaWMgaW50ZXJmYWNlLCB1c2UgaW5zdGVhZCBvZiBvZmY2NF90CistIFJlbW92ZSAh IGZyb20gc2hlbGwgdGVzdCBpbiBjb25maWd1cmUgKG5vdCBwb3J0YWJsZSB0byBTb2xhcmlzKQor LSBDaGFuZ2UgKzAgbWFjcm8gdGVzdHMgdG8gLTAgZm9yIHBvc3NpYmx5IGluY3JlYXNlZCBwb3J0 YWJpbGl0eQorCitDaGFuZ2VzIGluIDEuMi40LjIgKDkgQXByIDIwMTApCistIEFkZCBjb25zaXN0 ZW50IGNhcnJpYWdlIHJldHVybnMgdG8gcmVhZG1lLnR4dCdzIGluIG1hc214ODYgYW5kIG1hc214 NjQKKy0gUmVhbGx5IHByb3ZpZGUgcHJvdG90eXBlcyBmb3IgKjY0IGZ1bmN0aW9ucyB3aGVuIGJ1 aWxkaW5nIHdpdGhvdXQgTEZTCistIE9ubHkgZGVmaW5lIHVubGluaygpIGluIG1pbmlnemlwLmMg aWYgdW5pc3RkLmggbm90IGluY2x1ZGVkCistIFVwZGF0ZSBSRUFETUUgdG8gcG9pbnQgdG8gY29u dHJpYi92c3R1ZGlvIHByb2plY3QgZmlsZXMKKy0gTW92ZSBwcm9qZWN0cy92YzYgdG8gb2xkLyBh bmQgcmVtb3ZlIHByb2plY3RzLworLSBJbmNsdWRlIHN0ZGxpYi5oIGluIG1pbmlnemlwLmMgZm9y IHNldG1vZGUoKSBkZWZpbml0aW9uIHVuZGVyIFdpbkNFCistIENsZWFuIHVwIGFzc2VtYmxlciBi dWlsZHMgaW4gd2luMzIvTWFrZWZpbGUubXNjIFtSb3dlXQorLSBJbmNsdWRlIHN5cy90eXBlcy5o IGZvciBNaWNyb3NvZnQgZm9yIG9mZl90IGRlZmluaXRpb24KKy0gRml4IG1lbW9yeSBsZWFrIG9u IGVycm9yIGluIGd6X29wZW4oKQorLSBTeW1ib2xpemUgbm0gYXMgJE5NIGluIGNvbmZpZ3VyZSBb V2VpZ2VsdF0KKy0gVXNlIFRFU1RfTERTSEFSRUQgaW5zdGVhZCBvZiBMRFNIQVJFRCB0byBsaW5r IHRlc3QgcHJvZ3JhbXMgW1dlaWdlbHRdCistIEFkZCArMCB0byBfRklMRV9PRkZTRVRfQklUUyBh bmQgX0xGUzY0X0xBUkdFRklMRSBpbiBjYXNlIG5vdCBkZWZpbmVkCistIEZpeCBidWcgaW4gZ3pl b2YoKSB0byB0YWtlIGludG8gYWNjb3VudCB1bnVzZWQgaW5wdXQgZGF0YQorLSBBdm9pZCBpbml0 aWFsaXphdGlvbiBvZiBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGVzIGluIHB1ZmYuYworLSBVcGRh dGVkIHdpbjMyL1JFQURNRS1XSU4zMi50eHQgW1Jvd2VdCisKK0NoYW5nZXMgaW4gMS4yLjQuMSAo MjggTWFyIDIwMTApCistIFJlbW92ZSB0aGUgdXNlIG9mIFthLXpdIGNvbnN0cnVjdHMgZm9yIHNl ZCBpbiBjb25maWd1cmUgW2dlbnRvbyAzMTAyMjVdCistIFJlbW92ZSAkKFNIQVJFRExJQikgZnJv bSBMSUJTIGluIE1ha2VmaWxlLmluIFtDcmVlY2hdCistIFJlc3RvcmUgImZvciBkZWJ1Z2dpbmci IGNvbW1lbnQgb24gc3ByaW50ZigpIGluIGd6bGliLmMKKy0gUmVtb3ZlIGZkb3BlbiBmb3IgTVZT IGZyb20gZ3pndXRzLmgKKy0gUHV0IG5ldyBSRUFETUUtV0lOMzIudHh0IGluIHdpbjMyIFtSb3dl XQorLSBBZGQgY2hlY2sgZm9yIHNoZWxsIHRvIGNvbmZpZ3VyZSBhbmQgaW52b2tlIGFub3RoZXIg c2hlbGwgaWYgbmVlZGVkCistIEZpeCBiaWcgZmF0IHN0aW5raW5nIGJ1ZyBpbiBnenNlZWsoKSBv biB1bmNvbXByZXNzZWQgZmlsZXMKKy0gUmVtb3ZlIHZlc3RpZ2lhbCBGX09QRU42NCBkZWZpbmUg aW4genV0aWwuaAorLSBTZXQgYW5kIGNoZWNrIHRoZSB2YWx1ZSBvZiBfTEFSR0VGSUxFX1NPVVJD RSBhbmQgX0xBUkdFRklMRTY0X1NPVVJDRQorLSBBdm9pZCBlcnJvcnMgb24gbm9uLUxGUyBzeXN0 ZW1zIHdoZW4gYXBwbGljYXRpb25zIGRlZmluZSBMRlMgbWFjcm9zCistIFNldCBFWEUgdG8gIi5l eGUiIGluIGNvbmZpZ3VyZSBmb3IgTUlOR1cgW0thaGxlXQorLSBNYXRjaCBjcmMzMigpIGluIGNy YzMyLmMgZXhhY3RseSB0byB0aGUgcHJvdG90eXBlIGluIHpsaWIuaCBbU2hlcnJpbGxdCistIEFk ZCBwcmVmaXggZm9yIGNyb3NzLWNvbXBpbGF0aW9uIGluIHdpbjMyL21ha2VmaWxlLmdjYyBbQmFy LUxldl0KKy0gQWRkIERMTCBpbnN0YWxsIGluIHdpbjMyL21ha2VmaWxlLmdjYyBbQmFyLUxldl0K Ky0gQWxsb3cgTGludXgqIG9yIGxpbnV4KiBmcm9tIHVuYW1lIGluIGNvbmZpZ3VyZSBbQmFyLUxl dl0KKy0gQWxsb3cgbGRjb25maWcgdG8gYmUgcmVkZWZpbmVkIGluIGNvbmZpZ3VyZSBhbmQgTWFr ZWZpbGUuaW4gW0Jhci1MZXZdCistIEFkZCBjcm9zcy1jb21waWxhdGlvbiBwcmVmaXhlcyB0byBj b25maWd1cmUgW0Jhci1MZXZdCistIE1hdGNoIHR5cGUgZXhhY3RseSBpbiBnel9sb2FkKCkgaW52 b2NhdGlvbiBpbiBnenJlYWQuYworLSBNYXRjaCB0eXBlIGV4YWN0bHkgb2YgemNhbGxvYygpIGlu IHp1dGlsLmMgdG8gemxpYi5oIGFsbG9jX2Z1bmMKKy0gUHJvdmlkZSBwcm90b3R5cGVzIGZvciAq NjQgZnVuY3Rpb25zIHdoZW4gYnVpbGRpbmcgemxpYiB3aXRob3V0IExGUworLSBEb24ndCB1c2Ug LWxjIHdoZW4gbGlua2luZyBzaGFyZWQgbGlicmFyeSBvbiBNaW5HVworLSBSZW1vdmUgZXJybm8u aCBjaGVjayBpbiBjb25maWd1cmUgYW5kIHZlc3RpZ2lhbCBlcnJubyBjb2RlIGluIHp1dGlsLmgK KworQ2hhbmdlcyBpbiAxLjIuNCAoMTQgTWFyIDIwMTApCistIEZpeCBWRVIzIGV4dHJhY3Rpb24g aW4gY29uZmlndXJlIGZvciBubyBmb3VydGggc3VidmVyc2lvbgorLSBVcGRhdGUgemxpYi4zLCBh ZGQgZG9jcyB0byBNYWtlZmlsZS5pbiB0byBtYWtlIC5wZGYgb3V0IG9mIGl0CistIEFkZCB6bGli LjMucGRmIHRvIGRpc3RyaWJ1dGlvbgorLSBEb24ndCBzZXQgZXJyb3IgY29kZSBpbiBnemVycm9y KCkgaWYgcGFzc2VkIHBvaW50ZXIgaXMgTlVMTAorLSBBcHBseSBkZXN0aW5hdGlvbiBkaXJlY3Rv cnkgZml4ZXMgdG8gQ01ha2VMaXN0cy50eHQgW0xvd21hbl0KKy0gTW92ZSAjY21ha2VkZWZpbmUn cyB0byBhIG5ldyB6Y29uZi5pbi5jbWFrZWluCistIFJlc3RvcmUgemNvbmYuaCBmb3IgYnVpbGRz IHRoYXQgZG9uJ3QgdXNlIGNvbmZpZ3VyZSBvciBjbWFrZQorLSBBZGQgZGlzdGNsZWFuIHRvIGR1 bW15IE1ha2VmaWxlIGZvciBjb252ZW5pZW5jZQorLSBVcGRhdGUgYW5kIGltcHJvdmUgSU5ERVgs IFJFQURNRSwgYW5kIEZBUQorLSBVcGRhdGUgQ01ha2VMaXN0cy50eHQgZm9yIHRoZSByZXR1cm4g b2YgemNvbmYuaCBbTG93bWFuXQorLSBVcGRhdGUgY29udHJpYi92c3R1ZGlvL3ZjOSBhbmQgdmMx MCBbVm9sbGFudF0KKy0gQ2hhbmdlIGxpYnouZGxsLmEgYmFjayB0byBsaWJ6ZGxsLmEgaW4gd2lu MzIvTWFrZWZpbGUuZ2NjCistIEFwcGx5IGxpY2Vuc2UgYW5kIHJlYWRtZSBjaGFuZ2VzIHRvIGNv bnRyaWIvYXNtNjg2IFtSYWl0ZXJdCistIENoZWNrIGZpbGUgbmFtZSBsZW5ndGhzIGFuZCBhZGQg LWMgb3B0aW9uIGluIG1pbmlnemlwLmMgW0xpXQorLSBVcGRhdGUgY29udHJpYi9hbWQ2NCBhbmQg Y29udHJpYi9tYXNteDg2LyBbVm9sbGFudF0KKy0gQXZvaWQgdXNlIG9mICJlb2YiIHBhcmFtZXRl ciBpbiB0cmVlcy5jIHRvIG5vdCBzaGFkb3cgbGlicmFyeSB2YXJpYWJsZQorLSBVcGRhdGUgbWFr ZV92bXMuY29tIGZvciByZW1vdmFsIG9mIHpsaWJkZWZzLmggW1ppbnNlcl0KKy0gVXBkYXRlIGFz c2VtYmxlciBjb2RlIGFuZCB2c3R1ZGlvIHByb2plY3RzIGluIGNvbnRyaWIgW1ZvbGxhbnRdCist IFJlbW92ZSBvdXRkYXRlZCBhc3NlbWJsZXIgY29kZSBjb250cmliL21hc202ODYgYW5kIGNvbnRy aWIvYXNtNTg2CistIFJlbW92ZSBvbGQgdmM3IGFuZCB2YzggZnJvbSBjb250cmliL3ZzdHVkaW8K Ky0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLm1zYywgYWRkIFpMSUJfVkVSX1NVQlJFVklTSU9OIFtS b3dlXQorLSBGaXggbWVtb3J5IGxlYWtzIGluIGd6Y2xvc2VfcigpIGFuZCBnemNsb3NlX3coKSwg ZmlsZSBsZWFrIGluIGd6X29wZW4oKQorLSBBZGQgY29udHJpYi9nY2NfZ3ZtYXQ2NCBmb3IgbG9u Z2VzdF9tYXRjaCBhbmQgaW5mbGF0ZV9mYXN0IFtWb2xsYW50XQorLSBSZW1vdmUgKjY0IGZ1bmN0 aW9ucyBmcm9tIHdpbjMyL3psaWIuZGVmICh0aGV5J3JlIG5vdCA2NC1iaXQgeWV0KQorLSBGaXgg YnVnIGluIHZvaWQtcmV0dXJuaW5nIHZzcHJpbnRmKCkgY2FzZSBpbiBnendyaXRlLmMKKy0gRml4 IG5hbWUgY2hhbmdlIGZyb20gaW5mbGF0ZS5oIGluIGNvbnRyaWIvaW5mbGF0ZTg2L2luZmZhczg2 LmMKKy0gQ2hlY2sgaWYgdGVtcG9yYXJ5IGZpbGUgZXhpc3RzIGJlZm9yZSByZW1vdmluZyBpbiBt YWtlX3Ztcy5jb20gW1ppbnNlcl0KKy0gRml4IG1ha2UgaW5zdGFsbCBhbmQgdW5pbnN0YWxsIGZv ciAtLXN0YXRpYyBvcHRpb24KKy0gRml4IHVzYWdlIG9mIF9NU0NfVkVSIGluIGd6Z3V0cy5oIGFu ZCB6dXRpbC5oIFtUcnV0YV0KKy0gVXBkYXRlIHJlYWRtZS50eHQgaW4gY29udHJpYi9tYXNteDY0 IGFuZCBtYXNteDg2IHRvIGFzc2VtYmxlCisKK0NoYW5nZXMgaW4gMS4yLjMuOSAoMjEgRmViIDIw MTApCistIEV4cHVuZ2UgZ3ppby5jCistIE1vdmUgYXM0MDAgYnVpbGQgaW5mb3JtYXRpb24gdG8g b2xkCistIEZpeCB1cGRhdGVzIGluIGNvbnRyaWIvbWluaXppcCBhbmQgY29udHJpYi92c3R1ZGlv CistIEFkZCBjb25zdCB0byB2c25wcmludGYgdGVzdCBpbiBjb25maWd1cmUgdG8gYXZvaWQgd2Fy bmluZ3MgW1dlaWdlbHRdCistIERlbGV0ZSB6Y29uZi5oIChtYWRlIGJ5IGNvbmZpZ3VyZSkgW1dl aWdlbHRdCistIENoYW5nZSB6Y29uZi5pbi5oIHRvIHpjb25mLmguaW4gcGVyIGNvbnZlbnRpb24g W1dlaWdlbHRdCistIENoZWNrIGZvciBOVUxMIGJ1ZiBpbiBnemdldHMoKQorLSBSZXR1cm4gZW1w dHkgc3RyaW5nIGZvciBnemdldHMoKSB3aXRoIGxlbiA9PSAxIChsaWtlIGZnZXRzKCkpCistIEZp eCBkZXNjcmlwdGlvbiBvZiBnemdldHMoKSBpbiB6bGliLmggZm9yIGVuZC1vZi1maWxlLCBOVUxM IHJldHVybgorLSBVcGRhdGUgbWluaXppcCB0byAxLjEgW1ZvbGxhbnRdCistIEF2b2lkIE1TVkMg bG9zcyBvZiBkYXRhIHdhcm5pbmdzIGluIGd6cmVhZC5jLCBnendyaXRlLmMKKy0gTm90ZSBpbiB6 bGliLmggdGhhdCBnemVycm9yKCkgc2hvdWxkIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBF T0YKKy0gUmVtb3ZlIHVzZSBvZiBzbnByaW50ZigpIGZyb20gZ3psaWIuYworLSBGaXggYnVnIGlu IGd6c2VlaygpCistIFVwZGF0ZSBjb250cmliL3ZzdHVkaW8sIGFkZGluZyB2YzkgYW5kIHZjMTAg W0t1bm8sIFZvbGxhbnRdCistIEZpeCB6Y29uZi5oIGdlbmVyYXRpb24gaW4gQ01ha2VMaXN0cy50 eHQgW0xvd21hbl0KKy0gSW1wcm92ZSBjb21tZW50cyBpbiB6Y29uZi5oIHdoZXJlIG1vZGlmaWVk IGJ5IGNvbmZpZ3VyZQorCitDaGFuZ2VzIGluIDEuMi4zLjggKDEzIEZlYiAyMDEwKQorLSBDbGVh biB1cCB0ZXh0IGZpbGVzICh0YWJzLCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBldGMuKSBbT2Jlcmh1 bWVyXQorLSBVc2Ugel9vZmY2NF90IGluIGd6X3plcm8oKSBhbmQgZ3pfc2tpcCgpIHRvIG1hdGNo IHN0YXRlLT5za2lwCistIEF2b2lkIGNvbXBhcmlzb24gcHJvYmxlbSB3aGVuIHNpemVvZihpbnQp ID09IHNpemVvZih6X29mZjY0X3QpCistIFJldmVydCB0byBNYWtlZmlsZS5pbiBmcm9tIDEuMi4z LjYgKGxpdmUgd2l0aCB0aGUgY2x1dHRlcikKKy0gRml4IG1pc3NpbmcgZXJyb3IgcmV0dXJuIGlu IGd6Zmx1c2goKSwgYWRkIHpsaWIuaCBub3RlCistIEFkZCAqNjQgZnVuY3Rpb25zIHRvIHpsaWIu bWFwIFtMZXZpbl0KKy0gRml4IHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGluIGd6X2NvbXAo KQorLSBVc2UgU0ZMQUdTIHdoZW4gdGVzdGluZyBzaGFyZWQgbGlua2luZyBpbiBjb25maWd1cmUK Ky0gQWRkIC0tNjQgb3B0aW9uIHRvIC4vY29uZmlndXJlIHRvIHVzZSAtbTY0IHdpdGggZ2NjCist IEZpeCAuL2NvbmZpZ3VyZSAtLWhlbHAgdG8gY29ycmVjdGx5IG5hbWUgb3B0aW9ucworLSBIYXZl IG1ha2UgZmFpbCBpZiBhIHRlc3QgZmFpbHMgW0xldmluXQorLSBBdm9pZCBidWZmZXIgb3ZlcnJ1 biBpbiBjb250cmliL21hc214NjQvZ3ZtYXQ2NC5hc20gW1NpbXBzb25dCistIFJlbW92ZSBhc3Nl bWJsZXIgb2JqZWN0IGZpbGVzIGZyb20gY29udHJpYgorCitDaGFuZ2VzIGluIDEuMi4zLjcgKDI0 IEphbiAyMDEwKQorLSBBbHdheXMgZ3pvcGVuKCkgd2l0aCBPX0xBUkdFRklMRSBpZiBhdmFpbGFi bGUKKy0gRml4IGd6ZGlyZWN0KCkgdG8gd29yayBpbW1lZGlhdGVseSBhZnRlciBnem9wZW4oKSBv ciBnemRvcGVuKCkKKy0gTWFrZSBnemRpcmVjdCgpIG1vcmUgcHJlY2lzZSB3aGVuIHRoZSBzdGF0 ZSBjaGFuZ2VzIHdoaWxlIHJlYWRpbmcKKy0gSW1wcm92ZSB6bGliLmggZG9jdW1lbnRhdGlvbiBp biBtYW55IHBsYWNlcworLSBDYXRjaCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIGd6X29w ZW4oKQorLSBDb21wbGV0ZSBjbG9zZSBvcGVyYXRpb24gaWYgc2VlayBmb3J3YXJkIGluIGd6Y2xv c2VfdygpIGZhaWxzCistIFJldHVybiBaX0VSUk5PIGZyb20gZ3pjbG9zZV9yKCkgaWYgY2xvc2Uo KSBmYWlscworLSBSZXR1cm4gWl9TVFJFQU1fRVJST1IgaW5zdGVhZCBvZiBFT0YgZm9yIGd6Y2xv c2UoKSBiZWluZyBwYXNzZWQgTlVMTAorLSBSZXR1cm4gemVybyBmb3IgZ3p3cml0ZSgpIGVycm9y cyB0byBtYXRjaCB6bGliLmggZGVzY3JpcHRpb24KKy0gUmV0dXJuIC0xIG9uIGd6cHV0cygpIGVy cm9yIHRvIG1hdGNoIHpsaWIuaCBkZXNjcmlwdGlvbgorLSBBZGQgemNvbmYuaW4uaCB0byBhbGxv dyByZWNvdmVyeSBmcm9tIGNvbmZpZ3VyZSBtb2RpZmljYXRpb24gW1dlaWdlbHRdCistIEZpeCBz dGF0aWMgbGlicmFyeSBwZXJtaXNzaW9ucyBpbiBNYWtlZmlsZS5pbiBbV2VpZ2VsdF0KKy0gQXZv aWQgd2FybmluZ3MgaW4gY29uZmlndXJlIHRlc3RzIHRoYXQgaGlkZSBmdW5jdGlvbmFsaXR5IFtX ZWlnZWx0XQorLSBBZGQgKkJTRCBhbmQgRHJhZ29uRmx5IHRvIExpbnV4IGNhc2UgaW4gY29uZmln dXJlIFtnZW50b28gMTIzNTcxXQorLSBDaGFuZ2UgbGliemRsbC5hIHRvIGxpYnouZGxsLmEgaW4g d2luMzIvTWFrZWZpbGUuZ2NjIFtnZW50b28gMjg4MjEyXQorLSBBdm9pZCBhY2Nlc3Mgb2YgdW5p bml0aWFsaXplZCBkYXRhIGZvciBmaXJzdCBpbmZsYXRlUmVzZXQyIGNhbGwgW0dvbWVzXQorLSBL ZWVwIG9iamVjdCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyB0byByZWR1Y2UgdGhlIGNsdXR0ZXIg c29tZXdoYXQKKy0gUmVtb3ZlIGRlZmF1bHQgTWFrZWZpbGUgYW5kIHpsaWJkZWZzLmgsIGFkZCBk dW1teSBNYWtlZmlsZQorLSBBZGQgbmV3IGV4dGVybmFsIGZ1bmN0aW9ucyB0byBaX1BSRUZJWCwg cmVtb3ZlIGR1cGxpY2F0ZXMsIHpfel8gLT4gel8KKy0gUmVtb3ZlIHpsaWJkZWZzLmggY29tcGxl dGVseSAtLSBtb2RpZnkgemNvbmYuaCBpbnN0ZWFkCisKK0NoYW5nZXMgaW4gMS4yLjMuNiAoMTcg SmFuIDIwMTApCistIEF2b2lkIHZvaWQgKiBhcml0aG1ldGljIGluIGd6cmVhZC5jIGFuZCBnendy aXRlLmMKKy0gTWFrZSBjb21waWxlcnMgaGFwcGllciB3aXRoIGNvbnN0IGNoYXIgKiBmb3IgZ3pf ZXJyb3IgbWVzc2FnZQorLSBBdm9pZCB1bnVzZWQgcGFyYW1ldGVyIHdhcm5pbmcgaW4gaW5mbGF0 ZS5jCistIEF2b2lkIHNpZ25lZC11bnNpZ25lZCBjb21wYXJpc29uIHdhcm5pbmcgaW4gaW5mbGF0 ZS5jCistIEluZGVudCAjcHJhZ21hJ3MgZm9yIHRyYWRpdGlvbmFsIEMKKy0gRml4IHVzYWdlIG9m IHN0cndpbmVycm9yKCkgaW4gZ2xpYi5jLCBjaGFuZ2UgdG8gZ3pfc3Ryd2luZXJyb3IoKQorLSBD b3JyZWN0IGVtYWlsIGFkZHJlc3MgaW4gY29uZmlndXJlIGZvciBzeXN0ZW0gb3B0aW9ucworLSBV cGRhdGUgbWFrZV92bXMuY29tIGFuZCBhZGQgbWFrZV92bXMuY29tIHRvIGNvbnRyaWIvbWluaXpp cCBbWmluc2VyXQorLSBVcGRhdGUgemxpYi5tYXAgW0Jyb3duXQorLSBGaXggTWFrZWZpbGUuaW4g Zm9yIFNvbGFyaXMgMTAgbWFrZSBvZiBleGFtcGxlNjQgYW5kIG1pbml6aXA2NCBbVG9yb2tdCist IEFwcGx5IHZhcmlvdXMgZml4ZXMgdG8gQ01ha2VMaXN0cy50eHQgW0xvd21hbl0KKy0gQWRkIGNo ZWNrcyBvbiBsZW4gaW4gZ3pyZWFkKCkgYW5kIGd6d3JpdGUoKQorLSBBZGQgZXJyb3IgbWVzc2Fn ZSBmb3Igbm8gbW9yZSByb29tIGZvciBnenVuZ2V0YygpCistIFJlbW92ZSB6bGliIHZlcnNpb24g Y2hlY2sgaW4gZ3p3cml0ZSgpCistIERlZmVyIGNvbXByZXNzaW9uIG9mIGd6cHJpbnRmKCkgcmVz dWx0IHVudGlsIG5lZWQgdG8KKy0gVXNlIHNucHJpbnRmKCkgaW4gZ3pkb3BlbigpIGlmIGF2YWls YWJsZQorLSBSZW1vdmUgVVNFX01NQVAgY29uZmlndXJhdGlvbiBkZXRlcm1pbmF0aW9uIChvbmx5 IHVzZWQgYnkgbWluaWd6aXApCistIFJlbW92ZSBleGFtcGxlcy9waWd6LmMgKGF2YWlsYWJsZSBz ZXBhcmF0ZWx5KQorLSBVcGRhdGUgZXhhbXBsZXMvZ3VuLmMgdG8gMS42CisKK0NoYW5nZXMgaW4g MS4yLjMuNSAoOCBKYW4gMjAxMCkKKy0gQWRkIHNwYWNlIGFmdGVyICNpZiBpbiB6dXRpbC5oIGZv ciBzb21lIGNvbXBpbGVycworLSBGaXggcmVsYXRpdmVseSBoYXJtbGVzcyBidWcgaW4gZGVmbGF0 ZV9mYXN0KCkgW0V4YXJldnNreV0KKy0gRml4IHNhbWUgcHJvYmxlbSBpbiBkZWZsYXRlX3Nsb3co KQorLSBBZGQgJChTSEFSRURMSUJWKSB0byBMSUJTIGluIE1ha2VmaWxlLmluIFtCcm93bl0KKy0g QWRkIGRlZmxhdGVfcmxlKCkgZm9yIGZhc3RlciBaX1JMRSBzdHJhdGVneSBydW4tbGVuZ3RoIGVu Y29kaW5nCistIEFkZCBkZWZsYXRlX2h1ZmYoKSBmb3IgZmFzdGVyIFpfSFVGRk1BTl9PTkxZIGVu Y29kaW5nCistIENoYW5nZSBuYW1lIG9mICJ3cml0ZSIgdmFyaWFibGUgaW4gaW5mZmFzdC5jIHRv IGF2b2lkIGxpYnJhcnkgY29sbGlzaW9ucworLSBGaXggcHJlbWF0dXJlIEVPRiBmcm9tIGd6cmVh ZCgpIGluIGd6aW8uYyBbQnJvd25dCistIFVzZSB6bGliIGhlYWRlciB3aW5kb3cgc2l6ZSBpZiB3 aW5kb3dCaXRzIGlzIDAgaW4gaW5mbGF0ZUluaXQyKCkKKy0gUmVtb3ZlIGNvbXByZXNzQm91bmQo KSBjYWxsIGluIGRlZmxhdGUuYyB0byBhdm9pZCBsaW5raW5nIGNvbXByZXNzLm8KKy0gUmVwbGFj ZSB1c2Ugb2YgZXJybm8gaW4gZ3oqIHdpdGggZnVuY3Rpb25zLCBzdXBwb3J0IFdpbkNFIFtBbHZl c10KKy0gUHJvdmlkZSBhbHRlcm5hdGl2ZSB0byBwZXJyb3IoKSBpbiBtaW5pZ3ppcC5jIGZvciBX aW5DRSBbQWx2ZXNdCistIERvbid0IHVzZSBfdnNucHJpbnRmIG9uIGxhdGVyIHZlcnNpb25zIG9m IE1TVkMgW0xvd21hbl0KKy0gQWRkIENNYWtlIGJ1aWxkIHNjcmlwdCBhbmQgaW5wdXQgZmlsZSBb TG93bWFuXQorLSBVcGRhdGUgY29udHJpYi9taW5pemlwIHRvIDEuMSBbU3ZlbnNzb24sIFZvbGxh bnRdCistIE1vdmVkIG5pbnRlbmRvZHMgZGlyZWN0b3J5IGZyb20gY29udHJpYiB0byAuCistIFJl cGxhY2UgZ3ppby5jIHdpdGggYSBuZXcgc2V0IG9mIHJvdXRpbmVzIHdpdGggdGhlIHNhbWUgZnVu Y3Rpb25hbGl0eQorLSBBZGQgZ3pidWZmZXIoKSwgZ3pvZmZzZXQoKSwgZ3pjbG9zZV9yKCksIGd6 Y2xvc2VfdygpIGFzIHBhcnQgb2YgYWJvdmUKKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcCB0byAx LjFiCistIENoYW5nZSBnemVvZigpIHRvIHJldHVybiAwIG9uIGVycm9yIGluc3RlYWQgb2YgLTEg dG8gYWdyZWUgd2l0aCB6bGliLmgKKworQ2hhbmdlcyBpbiAxLjIuMy40ICgyMSBEZWMgMjAwOSkK Ky0gVXNlIG9sZCBzY2hvb2wgLlNVRkZJWEVTIGluIE1ha2VmaWxlLmluIGZvciBGcmVlQlNEIGNv bXBhdGliaWxpdHkKKy0gVXBkYXRlIGNvbW1lbnRzIGluIGNvbmZpZ3VyZSBhbmQgTWFrZWZpbGUu aW4gZm9yIGRlZmF1bHQgLS1zaGFyZWQKKy0gRml4IHRlc3QgLXoncyBpbiBjb25maWd1cmUgW01h cnF1ZXNzXQorLSBCdWlsZCBleGFtcGxlc2ggYW5kIG1pbmlnemlwc2ggd2hlbiBub3QgdGVzdGlu ZworLSBDaGFuZ2UgTlVMTCdzIHRvIFpfTlVMTCdzIGluIGRlZmxhdGUuYyBhbmQgaW4gY29tbWVu dHMgaW4gemxpYi5oCistIEltcG9ydCBMREZMQUdTIGZyb20gdGhlIGVudmlyb25tZW50IGluIGNv bmZpZ3VyZQorLSBGaXggY29uZmlndXJlIHRvIHBvcHVsYXRlIFNGTEFHUyB3aXRoIGRpc2NvdmVy ZWQgQ0ZMQUdTIG9wdGlvbnMKKy0gQWRhcHQgbWFrZV92bXMuY29tIHRvIHRoZSBuZXcgTWFrZWZp bGUuaW4gW1ppbnNlcl0KKy0gQWRkIHpsaWIyYW5zaSBzY3JpcHQgZm9yIEMrKyBjb21waWxhdGlv biBbTWFycXVlc3NdCistIEFkZCBfRklMRV9PRkZTRVRfQklUUz02NCB0ZXN0IHRvIG1ha2UgdGVz dCAod2hlbiBhcHBsaWNhYmxlKQorLSBBZGQgQU1ENjQgYXNzZW1ibGVyIGNvZGUgZm9yIGxvbmdl c3QgbWF0Y2ggdG8gY29udHJpYiBbVGV0ZXJpbl0KKy0gSW5jbHVkZSBvcHRpb25zIGZyb20gJFNG TEFHUyB3aGVuIGRvaW5nICRMRFNIQVJFRAorLSBTaW1wbGlmeSA2NC1iaXQgZmlsZSBzdXBwb3J0 IGJ5IGludHJvZHVjaW5nIHpfb2ZmNjRfdCB0eXBlCistIE1ha2Ugc2hhcmVkIG9iamVjdCBmaWxl cyBpbiBvYmpzIGRpcmVjdG9yeSB0byB3b3JrIGFyb3VuZCBvbGQgU3VuIGNjCistIFVzZSBvbmx5 IHRocmVlLXBhcnQgdmVyc2lvbiBudW1iZXIgZm9yIERhcndpbiBzaGFyZWQgY29tcGlsZXMKKy0g QWRkIHJjIG9wdGlvbiB0byBhciBpbiBNYWtlZmlsZS5pbiBmb3Igd2hlbiAuL2NvbmZpZ3VyZSBu b3QgcnVuCistIEFkZCAtV0ksLXJwYXRoLC4gdG8gTERGTEFHUyBmb3IgT1NGIDEgVjQqCistIFNl dCBMRF9MSUJSQVJZTjMyX1BBVEggZm9yIFNHSSBJUklYIHNoYXJlZCBjb21waWxlCistIFByb3Rl Y3QgYWdhaW5zdCBfRklMRV9PRkZTRVRfQklUUyBiZWluZyBkZWZpbmVkIHdoZW4gY29tcGlsaW5n IHpsaWIKKy0gUmVuYW1lIE1ha2VmaWxlLmluIHRhcmdldHMgYWxsc3RhdGljIHRvIHN0YXRpYyBh bmQgYWxsc2hhcmVkIHRvIHNoYXJlZAorLSBGaXggc3RhdGljIGFuZCBzaGFyZWQgTWFrZWZpbGUu aW4gdGFyZ2V0cyB0byBiZSBpbmRlcGVuZGVudAorLSBDb3JyZWN0IGVycm9yIHJldHVybiBidWcg aW4gZ3pfb3BlbigpIGJ5IHNldHRpbmcgc3RhdGUgW0Jyb3duXQorLSBQdXQgc3BhY2VzIGJlZm9y ZSA7OydzIGluIGNvbmZpZ3VyZSBmb3IgYmV0dGVyIHNoIGNvbXBhdGliaWxpdHkKKy0gQWRkIHBp Z3ouYyAocGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgZ3ppcCkgdG8gZXhhbXBsZXMvCistIENv cnJlY3QgY29uc3RhbnQgaW4gY3JjMzIuYyB0byBVTCBbTGV2ZW50aGFsXQorLSBSZWplY3QgbmVn YXRpdmUgbGVuZ3RocyBpbiBjcmMzMl9jb21iaW5lKCkKKy0gQWRkIGluZmxhdGVSZXNldDIoKSBm dW5jdGlvbiB0byB3b3JrIGxpa2UgaW5mbGF0ZUVuZCgpL2luZmxhdGVJbml0MigpCistIEluY2x1 ZGUgc3lzL3R5cGVzLmggZm9yIF9MQVJHRUZJTEU2NF9TT1VSQ0UgW0Jyb3duXQorLSBDb3JyZWN0 IHR5cG8gaW4gZG9jL2FsZ29yaXRobS50eHQgW0phbmlrXQorLSBGaXggYnVnIGluIGFkbGVyMzJf Y29tYmluZSgpIFtaaHVdCistIENhdGNoIG1pc3NpbmctZW5kLW9mLWJsb2NrLWNvZGUgZXJyb3Ig aW4gYWxsIGluZmxhdGVzIGFuZCBpbiBwdWZmCisgICAgQXNzdXJlcyB0aGF0IHJhbmRvbSBpbnB1 dCB0byBpbmZsYXRlIGV2ZW50dWFsbHkgcmVzdWx0cyBpbiBhbiBlcnJvcgorLSBBZGRlZCBlbm91 Z2guYyAoY2FsY3VsYXRpb24gb2YgRU5PVUdIIGZvciBpbmZ0cmVlcy5oKSB0byBleGFtcGxlcy8K Ky0gVXBkYXRlIEVOT1VHSCBhbmQgaXRzIHVzYWdlIHRvIHJlZmxlY3QgZGlzY292ZXJlZCBib3Vu ZHMKKy0gRml4IGd6ZXJyb3IoKSBlcnJvciByZXBvcnQgb24gZW1wdHkgaW5wdXQgZmlsZSBbQnJv d25dCistIEFkZCB1c2ggY2FzdHMgaW4gdHJlZXMuYyB0byBhdm9pZCBwZWRhbnRpYyBydW50aW1l IGVycm9ycworLSBGaXggdHlwbyBpbiB6bGliLmggdW5jb21wcmVzcygpIGRlc2NyaXB0aW9uIFtS ZWlzc10KKy0gQ29ycmVjdCBpbmZsYXRlKCkgY29tbWVudHMgd2l0aCByZWdhcmQgdG8gYXV0b21h dGljIGhlYWRlciBkZXRlY3Rpb24KKy0gUmVtb3ZlIGRlcHJlY2F0aW9uIGNvbW1lbnQgb24gWl9Q QVJUSUFMX0ZMVVNIIChpdCBzdGF5cykKKy0gUHV0IG5ldyB2ZXJzaW9uIG9mIGd6bG9nICgyLjAp IGluIGV4YW1wbGVzIHdpdGggaW50ZXJydXB0aW9uIHJlY292ZXJ5CistIEFkZCBwdWZmIGNvbXBp bGUgb3B0aW9uIHRvIHBlcm1pdCBpbnZhbGlkIGRpc3RhbmNlLXRvby1mYXIgc3RyZWFtcworLSBB ZGQgcHVmZiBURVNUIGNvbW1hbmQgb3B0aW9ucywgYWJpbGl0eSB0byByZWFkIHBpcGVkIGlucHV0 CistIFByb3RvdHlwZSB0aGUgKjY0IGZ1bmN0aW9ucyBpbiB6bGliLmggd2hlbiBfRklMRV9PRkZT RVRfQklUUyA9PSA2NCwgYnV0CisgIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugbm90IGRlZmluZWQKKy0g Rml4IFpfRlVMTF9GTFVTSCB0byB0cnVseSBlcmFzZSB0aGUgcGFzdCBieSByZXNldHRpbmcgcy0+ c3Ryc3RhcnQKKy0gRml4IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCkgdG8gdXNlIGFsbCAzMksgZm9y IG91dHB1dCBjb25zaXN0ZW5jeQorLSBSZW1vdmUgZXh0cmFuZW91cyAjZGVmaW5lIE1JTl9MT09L QUhFQUQgaW4gZGVmbGF0ZS5jIChpbiBkZWZsYXRlLmgpCistIENsZWFyIGJ5dGVzIGFmdGVyIGRl ZmxhdGUgbG9va2FoZWFkIHRvIGF2b2lkIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGEKKy0gQ2hh bmdlIGEgbGltaXQgaW4gaW5mdHJlZXMuYyB0byBiZSBtb3JlIHRyYW5zcGFyZW50IHRvIENvdmVy aXR5IFByZXZlbnQKKy0gVXBkYXRlIHdpbjMyL3psaWIuZGVmIHdpdGggZXhwb3J0ZWQgc3ltYm9s cyBmcm9tIHpsaWIuaAorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9ycyBpbiB6bGliLmggW1dpbGxl bSwgU29icmFkb10KKy0gQWxsb3cgWl9CTE9DSyBmb3IgZGVmbGF0ZSgpIHRvIGZvcmNlIGEgbmV3 IGJsb2NrCistIEFsbG93IG5lZ2F0aXZlIGJpdHMgaW4gaW5mbGF0ZVByaW1lKCkgdG8gZGVsZXRl IGV4aXN0aW5nIGJpdCBidWZmZXIKKy0gQWRkIFpfVFJFRVMgZmx1c2ggb3B0aW9uIHRvIGluZmxh dGUoKSB0byByZXR1cm4gYXQgZW5kIG9mIHRyZWVzCistIEFkZCBpbmZsYXRlTWFyaygpIHRvIHJl dHVybiBjdXJyZW50IHN0YXRlIGluZm9ybWF0aW9uIGZvciByYW5kb20gYWNjZXNzCistIEFkZCBN YWtlZmlsZSBmb3IgTmludGVuZG9EUyB0byBjb250cmliIFtDb3N0YV0KKy0gQWRkIC13IGluIGNv bmZpZ3VyZSBjb21waWxlIHRlc3RzIHRvIGF2b2lkIHNwdXJpb3VzIHdhcm5pbmdzIFtCZXVjbGVy XQorLSBGaXggdHlwb3MgaW4gemxpYi5oIGNvbW1lbnRzIGZvciBkZWZsYXRlU2V0RGljdGlvbmFy eSgpCistIEZpeCBFT0YgZGV0ZWN0aW9uIGluIHRyYW5zcGFyZW50IGd6cmVhZCgpIFtNYWllcl0K KworQ2hhbmdlcyBpbiAxLjIuMy4zICgyIE9jdG9iZXIgMjAwNikKKy0gTWFrZSAtLXNoYXJlZCB0 aGUgZGVmYXVsdCBmb3IgY29uZmlndXJlLCBhZGQgYSAtLXN0YXRpYyBvcHRpb24KKy0gQWRkIGNv bXBpbGUgb3B0aW9uIHRvIHBlcm1pdCBpbnZhbGlkIGRpc3RhbmNlLXRvby1mYXIgc3RyZWFtcwor LSBBZGQgaW5mbGF0ZVVuZGVybWluZSgpIGZ1bmN0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGVu YWJsZSBhYm92ZQorLSBSZW1vdmUgdXNlIG9mICJ0aGlzIiB2YXJpYWJsZSBuYW1lIGZvciBDKysg Y29tcGF0aWJpbGl0eSBbTWFycXVlc3NdCistIEFkZCB0ZXN0aW5nIG9mIHNoYXJlZCBsaWJyYXJ5 IGluIG1ha2UgdGVzdCwgaWYgc2hhcmVkIGxpYnJhcnkgYnVpbHQKKy0gVXNlIGZ0ZWxsbygpIGFu ZCBmc2Vla28oKSBpZiBhdmFpbGFibGUgaW5zdGVhZCBvZiBmdGVsbCgpIGFuZCBmc2VlaygpCist IFByb3ZpZGUgdHdvIHZlcnNpb25zIG9mIGFsbCBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIHpfb2Zm X3QgdHlwZSBmb3IKKyAgYmluYXJ5IGNvbXBhdGliaWxpdHkgLS0gYSBub3JtYWwgdmVyc2lvbiBh bmQgYSA2NC1iaXQgb2Zmc2V0IHZlcnNpb24sCisgIHBlciB0aGUgTGFyZ2UgRmlsZSBTdXBwb3J0 IEV4dGVuc2lvbiB3aGVuIF9MQVJHRUZJTEU2NF9TT1VSQ0UgaXMKKyAgZGVmaW5lZDsgdXNlIHRo ZSA2NC1iaXQgdmVyc2lvbnMgYnkgZGVmYXVsdCB3aGVuIF9GSUxFX09GRlNFVF9CSVRTCisgIGlz IGRlZmluZWQgdG8gYmUgNjQKKy0gQWRkIGEgLS11bmFtZT0gb3B0aW9uIHRvIGNvbmZpZ3VyZSB0 byBwZXJoYXBzIGhlbHAgd2l0aCBjcm9zcy1jb21waWxpbmcKKworQ2hhbmdlcyBpbiAxLjIuMy4y ICgzIFNlcHRlbWJlciAyMDA2KQorLSBUdXJuIG9mZiBzaWxseSBCb3JsYW5kIHdhcm5pbmdzIFtI YXldCistIFVzZSBvZmY2NF90IGFuZCBkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSB3aGVuIHBy ZXNlbnQKKy0gRml4IG1pc3NpbmcgZGVwZW5kZW5jeSBvbiBpbmZmaXhlZC5oIGluIE1ha2VmaWxl LmluCistIFJpZyBjb25maWd1cmUgLS1zaGFyZWQgdG8gYnVpbGQgYm90aCBzaGFyZWQgYW5kIHN0 YXRpYyBbVGVyZWRlc2FpLCBUcnV0YV0KKy0gUmVtb3ZlIHpjb25mLmluLmggYW5kIGluc3RlYWQg Y3JlYXRlIGEgbmV3IHpsaWJkZWZzLmggZmlsZQorLSBGaXggY29udHJpYi9taW5pemlwL3Vuemlw LmMgbm9uLWVuY3J5cHRlZCBhZnRlciBlbmNyeXB0ZWQgW1ZvbGxhbnRdCistIEFkZCB0cmVlYnVp bGQueG1sIChzZWUgaHR0cDovL3RyZWVidWlsZC5tZXR1eC5kZS8pIFtXZWlnZWx0XQorCitDaGFu Z2VzIGluIDEuMi4zLjEgKDE2IEF1Z3VzdCAyMDA2KQorLSBBZGQgd2F0Y29tIGRpcmVjdG9yeSB3 aXRoIE9wZW5XYXRjb20gbWFrZSBmaWxlcyBbRGFuaWVsXQorLSBSZW1vdmUgI3VuZGVmIG9mIEZB UiBpbiB6Y29uZi5pbi5oIGZvciBNVlMgW0ZlZHRrZV0KKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBb Wmluc2VyXQorLSBVc2UgLWZQSUMgZm9yIHNoYXJlZCBidWlsZCBpbiBjb25maWd1cmUgW1RlcmVk ZXNhaSwgTmljaG9sc29uXQorLSBVc2Ugb25seSBtYWpvciB2ZXJzaW9uIG51bWJlciBmb3IgbGli ei5zbyBvbiBJUklYIGFuZCBPU0YxIFtSZWluaG9sZHRzZW5dCistIFVzZSBmZG9wZW4oKSAobm90 IF9mZG9wZW4oKSkgZm9yIEludGVyaXggaW4genV0aWwuaCBbQsOkY2tdCistIEFkZCBzb21lIEZB USBlbnRyaWVzIGFib3V0IHRoZSBjb250cmliIGRpcmVjdG9yeQorLSBVcGRhdGUgdGhlIE1WUyBx dWVzdGlvbiBpbiB0aGUgRkFRCistIEF2b2lkIGV4dHJhbmVvdXMgcmVhZHMgYWZ0ZXIgRU9GIGlu IGd6aW8uYyBbQnJvd25dCistIENvcnJlY3Qgc3BlbGxpbmcgb2YgInN1Y2Nlc3NmdWxseSIgaW4g Z3ppby5jIFtSYW5kZXJzLVBlaHJzb25dCistIEFkZCBjb21tZW50cyB0byB6bGliLmggYWJvdXQg Z3plcnJvcigpIHVzYWdlIFtCcm93bl0KKy0gU2V0IGV4dHJhIGZsYWdzIGluIGd6aXAgaGVhZGVy IGluIGd6b3BlbigpIGxpa2UgZGVmbGF0ZSgpIGRvZXMKKy0gTWFrZSBjb25maWd1cmUgb3B0aW9u cyBtb3JlIGNvbXBhdGlibGUgd2l0aCBkb3VibGUtZGFzaCBjb252ZW50aW9ucworICBbV2VpZ2Vs dF0KKy0gQ2xlYW4gdXAgY29tcGlsYXRpb24gdW5kZXIgU29sYXJpcyBTdW5TdHVkaW8gY2MgW1Jv d2UsIFJlaW5ob2xkdHNlbl0KKy0gRml4IHVuaW5zdGFsbCB0YXJnZXQgaW4gTWFrZWZpbGUuaW4g W1RydXRhXQorLSBBZGQgcGtnY29uZmlnIHN1cHBvcnQgW1dlaWdlbHRdCistIFVzZSAkKERFU1RE SVIpIG1hY3JvIGluIE1ha2VmaWxlLmluIFtSZWluaG9sZHRzZW4sIFdlaWdlbHRdCistIFJlcGxh Y2Ugc2V0X2RhdGFfdHlwZSgpIHdpdGggYSBtb3JlIGFjY3VyYXRlIGRldGVjdF9kYXRhX3R5cGUo KSBpbgorICB0cmVlcy5jLCBhY2NvcmRpbmcgdG8gdGhlIHR4dHZzYmluLnR4dCBkb2N1bWVudCBb VHJ1dGFdCistIFN3YXAgdGhlIG9yZGVyIG9mICNpbmNsdWRlIDxzdGRpby5oPiBhbmQgI2luY2x1 ZGUgInpsaWIuaCIgaW4KKyAgZ3ppby5jLCBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMgW1RydXRh XQorLSBTaHV0IHVwIGFubm95aW5nIFZTMjAwNSB3YXJuaW5ncyBhYm91dCBzdGFuZGFyZCBDIGRl cHJlY2F0aW9uIFtSb3dlLAorICBUcnV0YV0gKHdoZXJlPykKKy0gRml4IHRhcmdldCAiY2xlYW4i IGZyb20gd2luMzIvTWFrZWZpbGUuYm9yIFtUcnV0YV0KKy0gQ3JlYXRlIC5wZGIgYW5kIC5tYW5p ZmVzdCBmaWxlcyBpbiB3aW4zMi9tYWtlZmlsZS5tc2MgW1ppZWdsZXIsIFJvd2VdCistIFVwZGF0 ZSB6bGliIHd3dyBob21lIGFkZHJlc3MgaW4gd2luMzIvRExMX0ZBUS50eHQgW1RydXRhXQorLSBV cGRhdGUgY29udHJpYi9tYXNteDg2L2luZmZhczMyLmFzbSBmb3IgVlMyMDA1IFtWb2xsYW50LCBW YW4gV2Fzc2VuaG92ZV0KKy0gRW5hYmxlIGJyb3dzZSBpbmZvIGluIHRoZSAiRGVidWciIGFuZCAi QVNNIERlYnVnIiBjb25maWd1cmF0aW9ucyBpbgorICB0aGUgVmlzdWFsIEMrKyA2IHByb2plY3Qs IGFuZCBzZXQgKG5vbi1BU00pICJEZWJ1ZyIgYXMgZGVmYXVsdCBbVHJ1dGFdCistIEFkZCBwa2dj b25maWcgc3VwcG9ydCBbV2VpZ2VsdF0KKy0gQWRkIFpMSUJfVkVSX01BSk9SLCBaTElCX1ZFUl9N SU5PUiBhbmQgWkxJQl9WRVJfUkVWSVNJT04gaW4gemxpYi5oLAorICBmb3IgdXNlIGluIHdpbjMy L3psaWIxLnJjIFtQb2x1c2hpbiwgUm93ZSwgVHJ1dGFdCistIEFkZCBhIGRvY3VtZW50IHRoYXQg ZXhwbGFpbnMgdGhlIG5ldyB0ZXh0IGRldGVjdGlvbiBzY2hlbWUgdG8KKyAgZG9jL3R4dHZzYmlu LnR4dCBbVHJ1dGFdCistIEFkZCByZmMxOTUwLnR4dCwgcmZjMTk1MS50eHQgYW5kIHJmYzE5NTIu dHh0IHRvIGRvYy8gW1RydXRhXQorLSBNb3ZlIGFsZ29yaXRobS50eHQgaW50byBkb2MvIFtUcnV0 YV0KKy0gU3luY2hyb25pemUgRkFRIHdpdGggd2Vic2l0ZQorLSBGaXggY29tcHJlc3NCb3VuZCgp LCB3YXMgbG93IGZvciBzb21lIHBhdGhvbG9naWNhbCBjYXNlcyBbRmVhcm5sZXldCistIFRha2Ug aW50byBhY2NvdW50IHdyYXBwZXIgdmFyaWF0aW9ucyBpbiBkZWZsYXRlQm91bmQoKQorLSBTZXQg ZXhhbXBsZXMvenBpcGUuYyBpbnB1dCBhbmQgb3V0cHV0IHRvIGJpbmFyeSBtb2RlIGZvciBXaW5k b3dzCistIFVwZGF0ZSBleGFtcGxlcy96bGliX2hvdy5odG1sIHdpdGggbmV3IHpwaXBlLmMgKGFs c28gd2ViIHNpdGUpCistIEZpeCBzb21lIHdhcm5pbmdzIGluIGV4YW1wbGVzL2d6bG9nLmMgYW5k IGV4YW1wbGVzL3pyYW4uYyAoaXQgc2VlbXMKKyAgdGhhdCBnY2MgYmVjYW1lIHBpY2tpZXIgaW4g NC4wKQorLSBBZGQgemxpYi5tYXAgZm9yIExpbnV4OiAiQWxsIHN5bWJvbHMgZnJvbSB6bGliLTEu MS40IHJlbWFpbgorICB1bi12ZXJzaW9uZWQsIHRoZSBwYXRjaCBhZGRzIHZlcnNpb25pbmcgb25s eSBmb3Igc3ltYm9scyBpbnRyb2R1Y2VkIGluCisgIHpsaWItMS4yLjAgb3IgbGF0ZXIuICBJdCBh bHNvIGRlY2xhcmVzIGFzIGxvY2FsIHRob3NlIHN5bWJvbHMgd2hpY2ggYXJlCisgIG5vdCBkZXNp Z25lZCB0byBiZSBleHBvcnRlZC4iIFtMZXZpbl0KKy0gVXBkYXRlIFpfUFJFRklYIGxpc3QgaW4g emNvbmYuaW4uaCwgYWRkIC0tenByZWZpeCBvcHRpb24gdG8gY29uZmlndXJlCistIERvIG5vdCBp bml0aWFsaXplIGdsb2JhbCBzdGF0aWMgYnkgZGVmYXVsdCBpbiB0cmVlcy5jLCBhZGQgYSByZXNw b25zZQorICBOT19JTklUX0dMT0JBTF9QT0lOVEVSUyB0byBpbml0aWFsaXplIHRoZW0gaWYgbmVl ZGVkIFtNYXJxdWVzc10KKy0gRG9uJ3QgdXNlIHN0cmVycm9yKCkgaW4gZ3ppby5jIHVuZGVyIFdp bkNFIFtZYWtpbW92XQorLSBEb24ndCB1c2UgZXJybm8uaCBpbiB6dXRpbC5oIHVuZGVyIFdpbkNF IFtZYWtpbW92XQorLSBNb3ZlIGFyZ3VtZW50cyBmb3IgQVIgdG8gaXRzIHVzYWdlIHRvIGFsbG93 IHJlcGxhY2luZyBhciBbTWFyb3RdCistIEFkZCBIQVZFX1ZJU0lCSUxJVFlfUFJBR01BIGluIHpj b25mLmluLmggZm9yIE1vemlsbGEgW1JhbmRlcnMtUGVocnNvbl0KKy0gSW1wcm92ZSBpbmZsYXRl SW5pdCgpIGFuZCBpbmZsYXRlSW5pdDIoKSBkb2N1bWVudGF0aW9uCistIEZpeCBzdHJ1Y3R1cmUg c2l6ZSBjb21tZW50IGluIGluZmxhdGUuaAorLSBDaGFuZ2UgY29uZmlndXJlIGhlbHAgb3B0aW9u IGZyb20gLS1oKiB0byAtLWhlbHAgW1NhbnRvc10KKworQ2hhbmdlcyBpbiAxLjIuMyAoMTggSnVs eSAyMDA1KQorLSBBcHBseSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGZpeGVzIHRvIGNvbnRyaWIv aW5mYmFjazkgYXMgd2VsbAorLSBDbGVhbiB1cCBzb21lIHRleHQgZmlsZXMgKGNhcnJpYWdlIHJl dHVybnMsIHRyYWlsaW5nIHNwYWNlKQorLSBVcGRhdGUgdGVzdHpsaWIsIHZzdHVkaW8sIG1hc214 NjQsIGFuZCBtYXNteDg2IGluIGNvbnRyaWIgW1ZvbGxhbnRdCisKK0NoYW5nZXMgaW4gMS4yLjIu NCAoMTEgSnVseSAyMDA1KQorLSBBZGQgaW5mbGF0ZVByaW1lKCkgZnVuY3Rpb24gZm9yIHN0YXJ0 aW5nIGluZmxhdGlvbiBhdCBiaXQgYm91bmRhcnkKKy0gQXZvaWQgc29tZSBWaXN1YWwgQyB3YXJu aW5ncyBpbiBkZWZsYXRlLmMKKy0gQXZvaWQgbW9yZSBzaWxseSBWaXN1YWwgQyB3YXJuaW5ncyBp biBpbmZsYXRlLmMgYW5kIGluZnRyZWVzLmMgZm9yIDY0LWJpdAorICBjb21waWxlCistIEZpeCBz b21lIHNwZWxsaW5nIGVycm9ycyBpbiBjb21tZW50cyBbQmV0dHNdCistIENvcnJlY3QgaW5mbGF0 ZUluaXQyKCkgZXJyb3IgcmV0dXJuIGRvY3VtZW50YXRpb24gaW4gemxpYi5oCistIEFkZCB6cmFu LmMgZXhhbXBsZSBvZiBjb21wcmVzc2VkIGRhdGEgcmFuZG9tIGFjY2VzcyB0byBleGFtcGxlcwor ICBkaXJlY3RvcnksIHNob3dzIHVzZSBvZiBpbmZsYXRlUHJpbWUoKQorLSBGaXggY2FzdCBmb3Ig YXNzaWdubWVudHMgdG8gc3RybS0+c3RhdGUgaW4gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMKKy0g Rml4IHpsaWJDb21waWxlRmxhZ3MoKSBpbiB6dXRpbC5jIHRvIHVzZSAxTCBmb3IgbG9uZyBzaGlm dHMgW09iZXJodW1lcl0KKy0gTW92ZSBkZWNsYXJhdGlvbnMgb2YgZ2YyIGZ1bmN0aW9ucyB0byBy aWdodCBwbGFjZSBpbiBjcmMzMi5jIFtPYmVyaHVtZXJdCistIEFkZCBjYXN0IGluIHRyZWVzLmMg dCBhdm9pZCBhIHdhcm5pbmcgW09iZXJodW1lcl0KKy0gQXZvaWQgc29tZSB3YXJuaW5ncyBpbiBm aXRibGsuYywgZ3VuLmMsIGd6am9pbi5jIGluIGV4YW1wbGVzIFtPYmVyaHVtZXJdCistIFVwZGF0 ZSBtYWtlX3Ztcy5jb20gW1ppbnNlcl0KKy0gSW5pdGlhbGl6ZSBzdGF0ZS0+d3JpdGUgaW4gaW5m bGF0ZVJlc2V0KCkgc2luY2UgY29waWVkIGluIGluZmxhdGVfZmFzdCgpCistIEJlIG1vcmUgc3Ry aWN0IG9uIGluY29tcGxldGUgY29kZSBzZXRzIGluIGluZmxhdGVfdGFibGUoKSBhbmQgaW5jcmVh c2UKKyAgRU5PVUdIIGFuZCBNQVhEIC0tIHRoaXMgcmVwYWlycyBhIHBvc3NpYmxlIHNlY3VyaXR5 IHZ1bG5lcmFiaWxpdHkgZm9yCisgIGludmFsaWQgaW5mbGF0ZSBpbnB1dC4gIFRoYW5rcyB0byBU YXZpcyBPcm1hbmR5IGFuZCBNYXJrdXMgT2Jlcmh1bWVyIGZvcgorICBkaXNjb3ZlcmluZyB0aGUg dnVsbmVyYWJpbGl0eSBhbmQgcHJvdmlkaW5nIHRlc3QgY2FzZXMuCistIEFkZCBpYTY0IHN1cHBv cnQgdG8gY29uZmlndXJlIGZvciBIUC1VWCBbU21pdGhdCistIEFkZCBlcnJvciByZXR1cm4gdG8g Z3pyZWFkKCkgZm9yIGZvcm1hdCBvciBpL28gZXJyb3IgW0xldmluXQorLSBVc2UgbWFsbG9jLmgg Zm9yIE9TLzIgW05lY2FzZWtdCisKK0NoYW5nZXMgaW4gMS4yLjIuMyAoMjcgTWF5IDIwMDUpCist IFJlcGxhY2UgMVUgY29uc3RhbnRzIGluIGluZmxhdGUuYyBhbmQgaW5mdHJlZXMuYyBmb3IgNjQt Yml0IGNvbXBpbGUKKy0gVHlwZWNhc3QgZnJlYWQoKSByZXR1cm4gdmFsdWVzIGluIGd6aW8uYyBb Vm9sbGFudF0KKy0gUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGluIG1pbmlnemlwLmMgb3V0bW9kZSAo VkMrKyBjYW4ndCBkZWFsIHdpdGggaXQpCistIEZpeCBjcmMgY2hlY2sgYnVnIGluIGd6cmVhZCgp IGFmdGVyIGd6dW5nZXRjKCkgW0hlaW5lcl0KKy0gQWRkIHRoZSBkZWZsYXRlVHVuZSgpIGZ1bmN0 aW9uIHRvIGFkanVzdCBpbnRlcm5hbCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzCistIEFkZCBhIGZh c3QgZ3ppcCBkZWNvbXByZXNzb3IsIGd1bi5jLCB0byBleGFtcGxlcyAodXNlIG9mIGluZmxhdGVC YWNrKQorLSBSZW1vdmUgYW4gaW5jb3JyZWN0IGFzc2VydGlvbiBpbiBleGFtcGxlcy96cGlwZS5j CistIEFkZCBDKysgd3JhcHBlciBpbiBpbmZiYWNrOS5oIFtEb25haXNdCistIEZpeCBidWcgaW4g aW5mbGF0ZUNvcHkoKSB3aGVuIGRlY29kaW5nIGZpeGVkIGNvZGVzCistIE5vdGUgaW4gemxpYi5o IGhvdyBtdWNoIGRlZmxhdGVTZXREaWN0aW9uYXJ5KCkgYWN0dWFsbHkgdXNlcworLSBSZW1vdmUg VVNFX0RJQ1RfSEVBRCBpbiBkZWZsYXRlLmMgKHdvdWxkIG1lc3MgdXAgaW5mbGF0ZSBpZiB1c2Vk KQorLSBBZGQgX1dJTjMyX1dDRSB0byBkZWZpbmUgV0lOMzIgaW4gemNvbmYuaW4uaCBbU3BlbmNl cl0KKy0gRG9uJ3QgaW5jbHVkZSBzdGRlcnIuaCBvciBlcnJuby5oIGZvciBfV0lOMzJfV0NFIGlu IHp1dGlsLmggW1NwZW5jZXJdCistIEFkZCBnemRpcmVjdCgpIGZ1bmN0aW9uIHRvIGluZGljYXRl IHRyYW5zcGFyZW50IHJlYWRzCistIFVwZGF0ZSBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCist IEZpeCBjb21waWxhdGlvbiBvZiBkZWZsYXRlLmMgd2hlbiBib3RoIEFTTVYgYW5kIEZBU1RFU1Qg W09iZXJodW1lcl0KKy0gQWRkIGNhc3RzIGluIGNyYzMyLmMgdG8gYXZvaWQgd2FybmluZ3MgW09i ZXJodW1lcl0KKy0gQWRkIGNvbnRyaWIvbWFzbXg2NCBbVm9sbGFudF0KKy0gVXBkYXRlIGNvbnRy aWIvYXNtNTg2LCBhc202ODYsIG1hc214ODYsIHRlc3R6bGliLCB2c3R1ZGlvIFtWb2xsYW50XQor CitDaGFuZ2VzIGluIDEuMi4yLjIgKDMwIERlY2VtYmVyIDIwMDQpCistIFJlcGxhY2Ugc3RydWN0 dXJlIGFzc2lnbm1lbnRzIGluIGRlZmxhdGUuYyBhbmQgaW5mbGF0ZS5jIHdpdGggem1lbWNweSB0 bworICBhdm9pZCBpbXBsaWNpdCBtZW1jcHkgY2FsbHMgKHBvcnRhYmlsaXR5IGZvciBuby1saWJy YXJ5IGNvbXBpbGF0aW9uKQorLSBJbmNyZWFzZSBzcHJpbnRmKCkgYnVmZmVyIHNpemUgaW4gZ3pk b3BlbigpIHRvIGFsbG93IGZvciBsYXJnZSBudW1iZXJzCistIEFkZCBJTkZMQVRFX1NUUklDVCB0 byBjaGVjayBkaXN0YW5jZXMgYWdhaW5zdCB6bGliIGhlYWRlcgorLSBJbXByb3ZlIFdpbkNFIGVy cm5vIGhhbmRsaW5nIGFuZCBjb21tZW50cyBbQ2hhbmddCistIFJlbW92ZSBjb21tZW50IGFib3V0 IG5vIGd6aXAgaGVhZGVyIHByb2Nlc3NpbmcgaW4gRkFRCistIEFkZCBaX0ZJWEVEIHN0cmF0ZWd5 IG9wdGlvbiB0byBkZWZsYXRlSW5pdDIoKSB0byBmb3JjZSBmaXhlZCB0cmVlcworLSBBZGQgdXBk YXRlZCBtYWtlX3Ztcy5jb20gW0NvZ2hsYW5dLCB1cGRhdGUgUkVBRE1FCistIENyZWF0ZSBhIG5l dyAiZXhhbXBsZXMiIGRpcmVjdG9yeSwgbW92ZSBnemFwcGVuZC5jIHRoZXJlLCBhZGQgenBpcGUu YywKKyAgZml0YmxrLmMsIGd6bG9nLltjaF0sIGd6am9pbi5jLCBhbmQgemxpYl9ob3cuaHRtbC4K Ky0gQWRkIEZBUSBlbnRyeSBhbmQgY29tbWVudHMgaW4gZGVmbGF0ZS5jIG9uIHVuaW5pdGlhbGl6 ZWQgbWVtb3J5IGFjY2VzcworLSBBZGQgU29sYXJpcyA5IG1ha2Ugb3B0aW9ucyBpbiBjb25maWd1 cmUgW0dpbGJlcnRdCistIEFsbG93IHN0cmVycm9yKCkgdXNhZ2UgaW4gZ3ppby5jIGZvciBTVERD CistIEZpeCBEZWNvbXByZXNzQnVmIGluIGNvbnRyaWIvZGVscGhpL1pMaWIucGFzIFtNYW5DaGVz VGVyXQorLSBVcGRhdGUgY29udHJpYi9tYXNteDg2L2luZmZhczMyLmFzbSBhbmQgZ3ZtYXQzMi5h c20gW1ZvbGxhbnRdCistIFVzZSB6X29mZl90IGZvciBhZGxlcjMyX2NvbWJpbmUoKSBhbmQgY3Jj MzJfY29tYmluZSgpIGxlbmd0aHMKKy0gTWFrZSBhZGxlcjMyKCkgbXVjaCBmYXN0ZXIgZm9yIHNt YWxsIGxlbgorLSBVc2UgT1NfQ09ERSBpbiBkZWZsYXRlKCkgZGVmYXVsdCBnemlwIGhlYWRlcgor CitDaGFuZ2VzIGluIDEuMi4yLjEgKDMxIE9jdG9iZXIgMjAwNCkKKy0gQWxsb3cgaW5mbGF0ZVNl dERpY3Rpb25hcnkoKSBjYWxsIGZvciByYXcgaW5mbGF0ZQorLSBGaXggaW5mbGF0ZSBoZWFkZXIg Y3JjIGNoZWNrIGJ1ZyBmb3IgZmlsZSBuYW1lcyBhbmQgY29tbWVudHMKKy0gQWRkIGRlZmxhdGVT ZXRIZWFkZXIoKSBhbmQgZ3pfaGVhZGVyIHN0cnVjdHVyZSBmb3IgY3VzdG9tIGd6aXAgaGVhZGVy cworLSBBZGQgaW5mbGF0ZUdldGhlYWRlcigpIHRvIHJldHJpZXZlIGd6aXAgaGVhZGVycworLSBB ZGQgY3JjMzJfY29tYmluZSgpIGFuZCBhZGxlcjMyX2NvbWJpbmUoKSBmdW5jdGlvbnMKKy0gQWRk IGFsbG9jX2Z1bmMsIGZyZWVfZnVuYywgaW5fZnVuYywgb3V0X2Z1bmMgdG8gWl9QUkVGSVggbGlz dAorLSBVc2UgenN0cmVhbXAgY29uc2lzdGVudGx5IGluIHpsaWIuaCAoaW5mbGF0ZV9iYWNrIGZ1 bmN0aW9ucykKKy0gUmVtb3ZlIEdVTlpJUCBjb25kaXRpb24gZnJvbSBkZWZpbml0aW9uIG9mIGlu ZmxhdGVfbW9kZSBpbiBpbmZsYXRlLmgKKyAgYW5kIGluIGNvbnRyaWIvaW5mbGF0ZTg2L2luZmZh c3QuUyBbVHJ1dGEsIEFuZGVyc29uXQorLSBBZGQgc3VwcG9ydCBmb3IgQU1ENjQgaW4gY29udHJp Yi9pbmZsYXRlODYvaW5mZmFzODYuYyBbQW5kZXJzb25dCistIFVwZGF0ZSBwcm9qZWN0cy9SRUFE TUUucHJvamVjdHMgYW5kIHByb2plY3RzL3Zpc3VhbGM2IFtUcnV0YV0KKy0gVXBkYXRlIHdpbjMy L0RMTF9GQVEudHh0IFtUcnV0YV0KKy0gQXZvaWQgd2FybmluZyB1bmRlciBOT19HWkNPTVBSRVNT IGluIGd6aW8uYzsgZml4IHR5cG8gW1RydXRhXQorLSBEZXByZWNhdGUgWl9BU0NJSTsgdXNlIFpf VEVYVCBpbnN0ZWFkIFtUcnV0YV0KKy0gVXNlIGEgbmV3IGFsZ29yaXRobSBmb3Igc2V0dGluZyBz dHJtLT5kYXRhX3R5cGUgaW4gdHJlZXMuYyBbVHJ1dGFdCistIERvIG5vdCBkZWZpbmUgYW4gZXhp dCgpIHByb3RvdHlwZSBpbiB6dXRpbC5jIHVubGVzcyBERUJVRyBkZWZpbmVkCistIFJlbW92ZSBw cm90b3R5cGUgb2YgZXhpdCgpIGZyb20genV0aWwuYywgZXhhbXBsZS5jLCBtaW5pZ3ppcC5jIFtU cnV0YV0KKy0gQWRkIGNvbW1lbnQgaW4gemxpYi5oIGZvciBaX05PX0ZMVVNIIHBhcmFtZXRlciB0 byBkZWZsYXRlKCkKKy0gRml4IERhcndpbiBidWlsZCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIFtQ ZXRlcnNvbl0KKwogQ2hhbmdlcyBpbiAxLjIuMiAoMyBPY3RvYmVyIDIwMDQpCiAtIFVwZGF0ZSB6 bGliLmggY29tbWVudHMgb24gZ3ppcCBpbi1tZW1vcnkgcHJvY2Vzc2luZwogLSBTZXQgYWRsZXIg dG8gMSBpbiBpbmZsYXRlUmVzZXQoKSB0byBzdXBwb3J0IEphdmEgdGVzdCBzdWl0ZSBbV2FsbGVz XQpAQCAtNDQ5LDcgKzEyMDAsNyBAQAogQ2hhbmdlcyBpbiAxLjAuNiAoMTkgSmFuIDE5OTgpCiAt IGFkZCBmdW5jdGlvbnMgZ3pwcmludGYsIGd6cHV0YywgZ3pnZXRjLCBnenRlbGwsIGd6ZW9mLCBn enNlZWssIGd6cmV3aW5kIGFuZAogICBnenNldHBhcmFtcyAodGhhbmtzIHRvIFJvbGFuZCBHaWVy c2lnIGFuZCBLZXZpbiBSdWxhbmQgZm9yIHNvbWUgb2YgdGhpcyBjb2RlKQotLSBGaXggYSBkZWZs YXRlIGJ1ZyBvY2N1cmluZyBvbmx5IHdpdGggY29tcHJlc3Npb24gbGV2ZWwgMCAodGhhbmtzIHRv CistIEZpeCBhIGRlZmxhdGUgYnVnIG9jY3VycmluZyBvbmx5IHdpdGggY29tcHJlc3Npb24gbGV2 ZWwgMCAodGhhbmtzIHRvCiAgIEFuZHkgQnVja2xlciBmb3IgZmluZGluZyB0aGlzIG9uZSkuCiAt IEluIG1pbmlnemlwLCBwYXNzIHRyYW5zcGFyZW50bHkgYWxzbyB0aGUgZmlyc3QgYnl0ZSBmb3Ig LlogZmlsZXMuCiAtIHJldHVybiBaX0JVRl9FUlJPUiBpbnN0ZWFkIG9mIFpfT0sgaWYgb3V0cHV0 IGJ1ZmZlciBmdWxsIGluIHVuY29tcHJlc3MoKQpAQCAtNDcwLDcgKzEyMjEsNyBAQAogICAgICAg ICAzODYgYXNtIGNvZGUgcmVwbGFjaW5nIGxvbmdlc3RfbWF0Y2goKS4KICAgIGNvbnRyaWIvaW9z dHJlYW0vIGJ5IEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgogICAgICAgICBB IEMrKyBJL08gc3RyZWFtcyBpbnRlcmZhY2UgdG8gdGhlIHpsaWIgZ3oqIGZ1bmN0aW9ucwotICAg Y29udHJpYi9pb3N0cmVhbTIvICBieSBUeWdlIEz4dnNldCA8VHlnZS5Mb3ZzZXRAY21yLm5vPgor ICAgY29udHJpYi9pb3N0cmVhbTIvICBieSBUeWdlIEzDuHZzZXQgPFR5Z2UuTG92c2V0QGNtci5u bz4KICAgICAgICAgQW5vdGhlciBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlCiAgICBjb250cmli L3VudGd6LyAgYnkgIlBlZHJvIEEuIEFyYW5kYSBHdXRpXGlycmV6IiA8cGFhZ0B0aWQuZXM+CiAg ICAgICAgIEEgdmVyeSBzaW1wbGUgdGFyLmd6IGZpbGUgZXh0cmFjdG9yIHVzaW5nIHpsaWIKQEAg LTUwOCw3ICsxMjU5LDcgQEAKIC0gdXNlIF9mZG9wZW4gaW5zdGVhZCBvZiBmZG9wZW4gZm9yIE1T QyA+PSA2LjAgKFRob21hcyBGYW5zbGF1KQogLSBhZGRlZCBtYWtlbGNjLmJhdCBmb3IgbGNjLXdp bjMyIChUb20gU3QgRGVuaXMpCiAtIGluIE1ha2VmaWxlLmRqMiwgdXNlIGNvcHkgYW5kIGRlbCBp bnN0ZWFkIG9mIGluc3RhbGwgYW5kIHJtIChGcmFuayBEb25haG9lKQotLSBBdm9pZCBleHBhbmRl ZCAkSWQ6IENoYW5nZUxvZyx2IDEuMS4xLjEgMjAwNS8wNC8yNCAyMTozOTo0MiBnaWxlcyBFeHAg JC4gVXNlICJyY3MgLWtiIiBvciAiY3ZzIGFkbWluIC1rYiIgdG8gYXZvaWQgSWQgZXhwYW5zaW9u LgorLSBBdm9pZCBleHBhbmRlZCAkSWQkLiBVc2UgInJjcyAta2IiIG9yICJjdnMgYWRtaW4gLWti IiB0byBhdm9pZCBJZCBleHBhbnNpb24uCiAtIGNoZWNrIGZvciB1bmlzdGQuaCBpbiBjb25maWd1 cmUgKGZvciBvZmZfdCkKIC0gcmVtb3ZlIHVzZWxlc3MgY2hlY2sgcGFyYW1ldGVyIGluIGluZmxh dGVfYmxvY2tzX2ZyZWUKIC0gYXZvaWQgdXNlbGVzcyBhc3NpZ25tZW50IG9mIHMtPmNoZWNrIHRv IGl0c2VsZiBpbiBpbmZsYXRlX2Jsb2Nrc19uZXcKQEAgLTU1OSw3ICsxMzEwLDcgQEAKIC0gZml4 IGFycmF5IG92ZXJsYXkgaW4gZGVmbGF0ZS5jIHdoaWNoIHNvbWV0aW1lcyBjYXVzZWQgYmFkIGNv bXByZXNzZWQgZGF0YQogLSBmaXggaW5mbGF0ZSBidWcgd2l0aCBlbXB0eSBzdG9yZWQgYmxvY2sK IC0gZml4IE1TRE9TIG1lZGl1bSBtb2RlbCB3aGljaCB3YXMgYnJva2VuIGluIDAuOTkKLS0gZml4 IGRlZmxhdGVQYXJhbXMoKSB3aGljaCBjb3VsZCBnZW5lcmF0ZWQgYmFkIGNvbXByZXNzZWQgZGF0 YS4KKy0gZml4IGRlZmxhdGVQYXJhbXMoKSB3aGljaCBjb3VsZCBnZW5lcmF0ZSBiYWQgY29tcHJl c3NlZCBkYXRhLgogLSBCeXRlZiBpcyBkZWZpbmUnZCBpbnN0ZWFkIG9mIHR5cGVkZWYnZWQgKHdv cmsgYXJvdW5kIEJvcmxhbmQgYnVnKQogLSBhZGRlZCBhbiBJTkRFWCBmaWxlCiAtIG5ldyBtYWtl ZmlsZXMgZm9yIERKR1BQIChNYWtlZmlsZS5kajIpLCAzMi1iaXQgQm9ybGFuZCAoTWFrZWZpbGUu YjMyKSwKZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dz L3psaWIvRkFRCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvRkFRCVdlZCBNYXkgMjcgMDA6MDk6 NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL0ZBUQlXZWQgTWF5IDI3IDE3 OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTMsOCArMyw4IEBACiAKIAogSWYgeW91ciBxdWVzdGlvbiBp cyBub3QgdGhlcmUsIHBsZWFzZSBjaGVjayB0aGUgemxpYiBob21lIHBhZ2UKLWh0dHA6Ly93d3cu emxpYi5vcmcgd2hpY2ggbWF5IGhhdmUgbW9yZSByZWNlbnQgaW5mb3JtYXRpb24uCi1UaGUgbGFz dGVzdCB6bGliIEZBUSBpcyBhdCBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvemxpYl9mYXEuaHRt bAoraHR0cDovL3psaWIubmV0LyB3aGljaCBtYXkgaGF2ZSBtb3JlIHJlY2VudCBpbmZvcm1hdGlv bi4KK1RoZSBsYXN0ZXN0IHpsaWIgRkFRIGlzIGF0IGh0dHA6Ly96bGliLm5ldC96bGliX2ZhcS5o dG1sCiAKIAogIDEuIElzIHpsaWIgWTJLLWNvbXBsaWFudD8KQEAgLTEzLDU0ICsxMyw1MSBAQAog CiAgMi4gV2hlcmUgY2FuIEkgZ2V0IGEgV2luZG93cyBETEwgdmVyc2lvbj8KIAotICAgIFRoZSB6 bGliIHNvdXJjZXMgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgY2hhbmdlIHRvIHByb2R1Y2UgYSBE TEwuCi0gICAgU2VlIHRoZSBmaWxlIHdpbjMyL0RMTF9GQVEudHh0IGluIHRoZSB6bGliIGRpc3Ry aWJ1dGlvbi4KLSAgICBQb2ludGVycyB0byB0aGUgcHJlY29tcGlsZWQgRExMIGFyZSBmb3VuZCBp biB0aGUgemxpYiB3ZWIgc2l0ZSBhdAotICAgIGh0dHA6Ly93d3cuemxpYi5vcmcuCisgICAgVGhl IHpsaWIgc291cmNlcyBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCBjaGFuZ2UgdG8gcHJvZHVjZSBh IERMTC4gIFNlZSB0aGUKKyAgICBmaWxlIHdpbjMyL0RMTF9GQVEudHh0IGluIHRoZSB6bGliIGRp c3RyaWJ1dGlvbi4gIFBvaW50ZXJzIHRvIHRoZQorICAgIHByZWNvbXBpbGVkIERMTCBhcmUgZm91 bmQgaW4gdGhlIHpsaWIgd2ViIHNpdGUgYXQgaHR0cDovL3psaWIubmV0LyAuCiAKICAzLiBXaGVy ZSBjYW4gSSBnZXQgYSBWaXN1YWwgQmFzaWMgaW50ZXJmYWNlIHRvIHpsaWI/CiAKICAgICBTZWUK LSAgICAgICAgKiBodHRwOi8vd3d3LmRvZ21hLm5ldC9tYXJrbi9hcnRpY2xlcy96bGlidG9vbC96 bGlidG9vbC5odG0KLSAgICAgICAgKiBjb250cmliL3Zpc3VhbC1iYXNpYy50eHQgaW4gdGhlIHps aWIgZGlzdHJpYnV0aW9uCisgICAgICAgICogaHR0cDovL21hcmtuZWxzb24udXMvMTk5Ny8wMS8w MS96bGliLWVuZ2luZS8KICAgICAgICAgKiB3aW4zMi9ETExfRkFRLnR4dCBpbiB0aGUgemxpYiBk aXN0cmlidXRpb24KIAogIDQuIGNvbXByZXNzKCkgcmV0dXJucyBaX0JVRl9FUlJPUi4KIAotICAg IE1ha2Ugc3VyZSB0aGF0IGJlZm9yZSB0aGUgY2FsbCBvZiBjb21wcmVzcywgdGhlIGxlbmd0aCBv ZiB0aGUgY29tcHJlc3NlZAotICAgIGJ1ZmZlciBpcyBlcXVhbCB0byB0aGUgdG90YWwgc2l6ZSBv ZiB0aGUgY29tcHJlc3NlZCBidWZmZXIgYW5kIG5vdAotICAgIHplcm8uIEZvciBWaXN1YWwgQmFz aWMsIGNoZWNrIHRoYXQgdGhpcyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZQorICAg IE1ha2Ugc3VyZSB0aGF0IGJlZm9yZSB0aGUgY2FsbCBvZiBjb21wcmVzcygpLCB0aGUgbGVuZ3Ro IG9mIHRoZSBjb21wcmVzc2VkCisgICAgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSBhdmFpbGFibGUg c2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIgYW5kIG5vdAorICAgIHplcm8uICBGb3IgVmlz dWFsIEJhc2ljLCBjaGVjayB0aGF0IHRoaXMgcGFyYW1ldGVyIGlzIHBhc3NlZCBieSByZWZlcmVu Y2UKICAgICAoImFzIGFueSIpLCBub3QgYnkgdmFsdWUgKCJhcyBsb25nIikuCiAKICA1LiBkZWZs YXRlKCkgb3IgaW5mbGF0ZSgpIHJldHVybnMgWl9CVUZfRVJST1IuCiAKLSAgICBCZWZvcmUgbWFr aW5nIHRoZSBjYWxsLCBtYWtlIHN1cmUgdGhhdCBhdmFpbF9pbiBhbmQgYXZhaWxfb3V0IGFyZSBu b3QKLSAgICB6ZXJvLiBXaGVuIHNldHRpbmcgdGhlIHBhcmFtZXRlciBmbHVzaCBlcXVhbCB0byBa X0ZJTklTSCwgYWxzbyBtYWtlIHN1cmUKLSAgICB0aGF0IGF2YWlsX291dCBpcyBiaWcgZW5vdWdo IHRvIGFsbG93IHByb2Nlc3NpbmcgYWxsIHBlbmRpbmcgaW5wdXQuCi0gICAgTm90ZSB0aGF0IGEg Wl9CVUZfRVJST1IgaXMgbm90IGZhdGFsLS1hbm90aGVyIGNhbGwgdG8gZGVmbGF0ZSgpIG9yCi0g ICAgaW5mbGF0ZSgpIGNhbiBiZSBtYWRlIHdpdGggbW9yZSBpbnB1dCBvciBvdXRwdXQgc3BhY2Uu IEEgWl9CVUZfRVJST1IKLSAgICBtYXkgaW4gZmFjdCBiZSB1bmF2b2lkYWJsZSBkZXBlbmRpbmcg b24gaG93IHRoZSBmdW5jdGlvbnMgYXJlIHVzZWQsIHNpbmNlCi0gICAgaXQgaXMgbm90IHBvc3Np YmxlIHRvIHRlbGwgd2hldGhlciBvciBub3QgdGhlcmUgaXMgbW9yZSBvdXRwdXQgcGVuZGluZwot ICAgIHdoZW4gc3RybS5hdmFpbF9vdXQgcmV0dXJucyB3aXRoIHplcm8uCisgICAgQmVmb3JlIG1h a2luZyB0aGUgY2FsbCwgbWFrZSBzdXJlIHRoYXQgYXZhaWxfaW4gYW5kIGF2YWlsX291dCBhcmUg bm90IHplcm8uCisgICAgV2hlbiBzZXR0aW5nIHRoZSBwYXJhbWV0ZXIgZmx1c2ggZXF1YWwgdG8g Wl9GSU5JU0gsIGFsc28gbWFrZSBzdXJlIHRoYXQKKyAgICBhdmFpbF9vdXQgaXMgYmlnIGVub3Vn aCB0byBhbGxvdyBwcm9jZXNzaW5nIGFsbCBwZW5kaW5nIGlucHV0LiAgTm90ZSB0aGF0IGEKKyAg ICBaX0JVRl9FUlJPUiBpcyBub3QgZmF0YWwtLWFub3RoZXIgY2FsbCB0byBkZWZsYXRlKCkgb3Ig aW5mbGF0ZSgpIGNhbiBiZQorICAgIG1hZGUgd2l0aCBtb3JlIGlucHV0IG9yIG91dHB1dCBzcGFj ZS4gIEEgWl9CVUZfRVJST1IgbWF5IGluIGZhY3QgYmUKKyAgICB1bmF2b2lkYWJsZSBkZXBlbmRp bmcgb24gaG93IHRoZSBmdW5jdGlvbnMgYXJlIHVzZWQsIHNpbmNlIGl0IGlzIG5vdAorICAgIHBv c3NpYmxlIHRvIHRlbGwgd2hldGhlciBvciBub3QgdGhlcmUgaXMgbW9yZSBvdXRwdXQgcGVuZGlu ZyB3aGVuCisgICAgc3RybS5hdmFpbF9vdXQgcmV0dXJucyB3aXRoIHplcm8uICBTZWUgaHR0cDov L3psaWIubmV0L3psaWJfaG93Lmh0bWwgZm9yIGEKKyAgICBoZWF2aWx5IGFubm90YXRlZCBleGFt cGxlLgogCiAgNi4gV2hlcmUncyB0aGUgemxpYiBkb2N1bWVudGF0aW9uIChtYW4gcGFnZXMsIGV0 Yy4pPwogCi0gICAgSXQncyBpbiB6bGliLmggZm9yIHRoZSBtb21lbnQsIGFuZCBGcmFuY2lzIFMu IExpbiBoYXMgY29udmVydGVkIGl0IHRvIGEKLSAgICB3ZWIgcGFnZSB6bGliLmh0bWwuIFZvbHVu dGVlcnMgdG8gdHJhbnNmb3JtIHRoaXMgdG8gVW5peC1zdHlsZSBtYW4gcGFnZXMsCi0gICAgcGxl YXNlIGNvbnRhY3QgdXMgKHpsaWJAZ3ppcC5vcmcpLiBFeGFtcGxlcyBvZiB6bGliIHVzYWdlIGFy ZSBpbiB0aGUgZmlsZXMKLSAgICBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMuCisgICAgSXQncyBp biB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIHRlc3Qv ZXhhbXBsZS5jCisgICAgYW5kIHRlc3QvbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVz LyAuCiAKICA3LiBXaHkgZG9uJ3QgeW91IHVzZSBHTlUgYXV0b2NvbmYgb3IgbGlidG9vbCBvciAu Li4/CiAKLSAgICBCZWNhdXNlIHdlIHdvdWxkIGxpa2UgdG8ga2VlcCB6bGliIGFzIGEgdmVyeSBz bWFsbCBhbmQgc2ltcGxlCi0gICAgcGFja2FnZS4gemxpYiBpcyByYXRoZXIgcG9ydGFibGUgYW5k IGRvZXNuJ3QgbmVlZCBtdWNoIGNvbmZpZ3VyYXRpb24uCisgICAgQmVjYXVzZSB3ZSB3b3VsZCBs aWtlIHRvIGtlZXAgemxpYiBhcyBhIHZlcnkgc21hbGwgYW5kIHNpbXBsZSBwYWNrYWdlLgorICAg IHpsaWIgaXMgcmF0aGVyIHBvcnRhYmxlIGFuZCBkb2Vzbid0IG5lZWQgbXVjaCBjb25maWd1cmF0 aW9uLgogCiAgOC4gSSBmb3VuZCBhIGJ1ZyBpbiB6bGliLgogCi0gICAgTW9zdCBvZiB0aGUgdGlt ZSwgc3VjaCBwcm9ibGVtcyBhcmUgZHVlIHRvIGFuIGluY29ycmVjdCB1c2FnZSBvZgotICAgIHps aWIuIFBsZWFzZSB0cnkgdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtIHdpdGggYSBzbWFsbCBwcm9n cmFtIGFuZCBzZW5kCi0gICAgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIHRvIHVzIGF0IHpsaWJA Z3ppcC5vcmcgLiBEbyBub3Qgc2VuZAotICAgIG11bHRpLW1lZ2FieXRlIGRhdGEgZmlsZXMgd2l0 aG91dCBwcmlvciBhZ3JlZW1lbnQuCisgICAgTW9zdCBvZiB0aGUgdGltZSwgc3VjaCBwcm9ibGVt cyBhcmUgZHVlIHRvIGFuIGluY29ycmVjdCB1c2FnZSBvZiB6bGliLgorICAgIFBsZWFzZSB0cnkg dG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtIHdpdGggYSBzbWFsbCBwcm9ncmFtIGFuZCBzZW5kIHRo ZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIHRvIHVzIGF0IHpsaWJAZ3ppcC5vcmcgLiAgRG8g bm90IHNlbmQgbXVsdGktbWVnYWJ5dGUKKyAgICBkYXRhIGZpbGVzIHdpdGhvdXQgcHJpb3IgYWdy ZWVtZW50LgogCiAgOS4gV2h5IGRvIEkgZ2V0ICJ1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGd6cHV0 YyI/CiAKQEAgLTgyLDEzICs3OSwxNSBAQAogCiAxMi4gQ2FuIHpsaWIgaGFuZGxlIC5aIGZpbGVz PwogCi0gICAgTm8sIHNvcnJ5LiBZb3UgaGF2ZSB0byBzcGF3biBhbiB1bmNvbXByZXNzIG9yIGd1 bnppcCBzdWJwcm9jZXNzLCBvciBhZGFwdAorICAgIE5vLCBzb3JyeS4gIFlvdSBoYXZlIHRvIHNw YXduIGFuIHVuY29tcHJlc3Mgb3IgZ3VuemlwIHN1YnByb2Nlc3MsIG9yIGFkYXB0CiAgICAgdGhl IGNvZGUgb2YgdW5jb21wcmVzcyBvbiB5b3VyIG93bi4KIAogMTMuIEhvdyBjYW4gSSBtYWtlIGEg VW5peCBzaGFyZWQgbGlicmFyeT8KIAotICAgIG1ha2UgY2xlYW4KLSAgICAuL2NvbmZpZ3VyZSAt cworICAgIEJ5IGRlZmF1bHQgYSBzaGFyZWQgKGFuZCBhIHN0YXRpYykgbGlicmFyeSBpcyBidWls dCBmb3IgVW5peC4gIFNvOgorCisgICAgbWFrZSBkaXN0Y2xlYW4KKyAgICAuL2NvbmZpZ3VyZQog ICAgIG1ha2UKIAogMTQuIEhvdyBkbyBJIGluc3RhbGwgYSBzaGFyZWQgemxpYiBsaWJyYXJ5IG9u IFVuaXg/CkBAIC05OSw4ICs5OCwxMCBAQAogCiAgICAgSG93ZXZlciwgbWFueSBmbGF2b3JzIG9m IFVuaXggY29tZSB3aXRoIGEgc2hhcmVkIHpsaWIgYWxyZWFkeSBpbnN0YWxsZWQuCiAgICAgQmVm b3JlIGdvaW5nIHRvIHRoZSB0cm91YmxlIG9mIGNvbXBpbGluZyBhIHNoYXJlZCB2ZXJzaW9uIG9m IHpsaWIgYW5kCi0gICAgdHJ5aW5nIHRvIGluc3RhbGwgaXQsIHlvdSBtYXkgd2FudCB0byBjaGVj ayBpZiBpdCdzIGFscmVhZHkgdGhlcmUhIElmIHlvdQotICAgIGNhbiAjaW5jbHVkZSA8emxpYi5o PiwgaXQncyB0aGVyZS4gVGhlIC1seiBvcHRpb24gd2lsbCBwcm9iYWJseSBsaW5rIHRvIGl0Lgor ICAgIHRyeWluZyB0byBpbnN0YWxsIGl0LCB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgaWYgaXQncyBh bHJlYWR5IHRoZXJlISAgSWYgeW91CisgICAgY2FuICNpbmNsdWRlIDx6bGliLmg+LCBpdCdzIHRo ZXJlLiAgVGhlIC1seiBvcHRpb24gd2lsbCBwcm9iYWJseSBsaW5rIHRvCisgICAgaXQuICBZb3Ug Y2FuIGNoZWNrIHRoZSB2ZXJzaW9uIGF0IHRoZSB0b3Agb2YgemxpYi5oIG9yIHdpdGggdGhlCisg ICAgWkxJQl9WRVJTSU9OIHN5bWJvbCBkZWZpbmVkIGluIHpsaWIuaCAuCiAKIDE1LiBJIGhhdmUg YSBxdWVzdGlvbiBhYm91dCBPdHRvUERGLgogCkBAIC0xMDksOCArMTEwLDggQEAKIAogMTYuIENh biB6bGliIGRlY29kZSBGbGF0ZSBkYXRhIGluIGFuIEFkb2JlIFBERiBmaWxlPwogCi0gICAgWWVz LiBTZWUgaHR0cDovL3d3dy5mYXN0aW8uY29tLyAoQ2xpYlBERiksIG9yIGh0dHA6Ly93d3cucGRm bGliLmNvbS8gLgotICAgIFRvIG1vZGlmeSBQREYgZm9ybXMsIHNlZSBodHRwOi8vc291cmNlZm9y Z2UubmV0L3Byb2plY3RzL2Fjcm9mb3JtdG9vbC8gLgorICAgIFllcy4gU2VlIGh0dHA6Ly93d3cu cGRmbGliLmNvbS8gLiBUbyBtb2RpZnkgUERGIGZvcm1zLCBzZWUKKyAgICBodHRwOi8vc291cmNl Zm9yZ2UubmV0L3Byb2plY3RzL2Fjcm9mb3JtdG9vbC8gLgogCiAxNy4gV2h5IGFtIEkgZ2V0dGlu ZyB0aGlzICJyZWdpc3Rlcl9mcmFtZV9pbmZvIG5vdCBmb3VuZCIgZXJyb3Igb24gU29sYXJpcz8K IApAQCAtMTIxLDc0ICsxMjIsNjcgQEAKICAgICAgICAgc3ltYm9sIF9fcmVnaXN0ZXJfZnJhbWVf aW5mbzogcmVmZXJlbmNlZCBzeW1ib2wgbm90IGZvdW5kCiAKICAgICBUaGUgc3ltYm9sIF9fcmVn aXN0ZXJfZnJhbWVfaW5mbyBpcyBub3QgcGFydCBvZiB6bGliLCBpdCBpcyBnZW5lcmF0ZWQgYnkK LSAgICB0aGUgQyBjb21waWxlciAoY2Mgb3IgZ2NjKS4gWW91IG11c3QgcmVjb21waWxlIGFwcGxp Y2F0aW9ucyB1c2luZyB6bGliCi0gICAgd2hpY2ggaGF2ZSB0aGlzIHByb2JsZW0uIFRoaXMgcHJv YmxlbSBpcyBzcGVjaWZpYyB0byBTb2xhcmlzLiBTZWUKKyAgICB0aGUgQyBjb21waWxlciAoY2Mg b3IgZ2NjKS4gIFlvdSBtdXN0IHJlY29tcGlsZSBhcHBsaWNhdGlvbnMgdXNpbmcgemxpYgorICAg IHdoaWNoIGhhdmUgdGhpcyBwcm9ibGVtLiAgVGhpcyBwcm9ibGVtIGlzIHNwZWNpZmljIHRvIFNv bGFyaXMuICBTZWUKICAgICBodHRwOi8vd3d3LnN1bmZyZWV3YXJlLmNvbSBmb3IgU29sYXJpcyB2 ZXJzaW9ucyBvZiB6bGliIGFuZCBhcHBsaWNhdGlvbnMKICAgICB1c2luZyB6bGliLgogCiAxOC4g V2h5IGRvZXMgZ3ppcCBnaXZlIGFuIGVycm9yIG9uIGEgZmlsZSBJIG1ha2Ugd2l0aCBjb21wcmVz cy9kZWZsYXRlPwogCiAgICAgVGhlIGNvbXByZXNzIGFuZCBkZWZsYXRlIGZ1bmN0aW9ucyBwcm9k dWNlIGRhdGEgaW4gdGhlIHpsaWIgZm9ybWF0LCB3aGljaAotICAgIGlzIGRpZmZlcmVudCBhbmQg aW5jb21wYXRpYmxlIHdpdGggdGhlIGd6aXAgZm9ybWF0LiBUaGUgZ3oqIGZ1bmN0aW9ucyBpbgot ICAgIHpsaWIgb24gdGhlIG90aGVyIGhhbmQgdXNlIHRoZSBnemlwIGZvcm1hdC4gQm90aCB0aGUg emxpYiBhbmQgZ3ppcAotICAgIGZvcm1hdHMgdXNlIHRoZSBzYW1lIGNvbXByZXNzZWQgZGF0YSBm b3JtYXQgaW50ZXJuYWxseSwgYnV0IGhhdmUgZGlmZmVyZW50Ci0gICAgaGVhZGVycyBhbmQgdHJh aWxlcnMgYXJvdW5kIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgICAgaXMgZGlmZmVyZW50IGFuZCBp bmNvbXBhdGlibGUgd2l0aCB0aGUgZ3ppcCBmb3JtYXQuICBUaGUgZ3oqIGZ1bmN0aW9ucyBpbgor ICAgIHpsaWIgb24gdGhlIG90aGVyIGhhbmQgdXNlIHRoZSBnemlwIGZvcm1hdC4gIEJvdGggdGhl IHpsaWIgYW5kIGd6aXAgZm9ybWF0cworICAgIHVzZSB0aGUgc2FtZSBjb21wcmVzc2VkIGRhdGEg Zm9ybWF0IGludGVybmFsbHksIGJ1dCBoYXZlIGRpZmZlcmVudCBoZWFkZXJzCisgICAgYW5kIHRy YWlsZXJzIGFyb3VuZCB0aGUgY29tcHJlc3NlZCBkYXRhLgogCiAxOS4gT2ssIHNvIHdoeSBhcmUg dGhlcmUgdHdvIGRpZmZlcmVudCBmb3JtYXRzPwogCi0gICAgVGhlIGd6aXAgZm9ybWF0IHdhcyBk ZXNpZ25lZCB0byByZXRhaW4gdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBhYm91dAotICAgIGEg c2luZ2xlIGZpbGUsIHN1Y2ggYXMgdGhlIG5hbWUgYW5kIGxhc3QgbW9kaWZpY2F0aW9uIGRhdGUu IFRoZSB6bGliCi0gICAgZm9ybWF0IG9uIHRoZSBvdGhlciBoYW5kIHdhcyBkZXNpZ25lZCBmb3Ig aW4tbWVtb3J5IGFuZCBjb21tdW5pY2F0aW9uCi0gICAgY2hhbm5lbCBhcHBsaWNhdGlvbnMsIGFu ZCBoYXMgYSBtdWNoIG1vcmUgY29tcGFjdCBoZWFkZXIgYW5kIHRyYWlsZXIgYW5kCi0gICAgdXNl cyBhIGZhc3RlciBpbnRlZ3JpdHkgY2hlY2sgdGhhbiBnemlwLgorICAgIFRoZSBnemlwIGZvcm1h dCB3YXMgZGVzaWduZWQgdG8gcmV0YWluIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gYWJvdXQg YQorICAgIHNpbmdsZSBmaWxlLCBzdWNoIGFzIHRoZSBuYW1lIGFuZCBsYXN0IG1vZGlmaWNhdGlv biBkYXRlLiAgVGhlIHpsaWIgZm9ybWF0CisgICAgb24gdGhlIG90aGVyIGhhbmQgd2FzIGRlc2ln bmVkIGZvciBpbi1tZW1vcnkgYW5kIGNvbW11bmljYXRpb24gY2hhbm5lbAorICAgIGFwcGxpY2F0 aW9ucywgYW5kIGhhcyBhIG11Y2ggbW9yZSBjb21wYWN0IGhlYWRlciBhbmQgdHJhaWxlciBhbmQg dXNlcyBhCisgICAgZmFzdGVyIGludGVncml0eSBjaGVjayB0aGFuIGd6aXAuCiAKIDIwLiBXZWxs IHRoYXQncyBuaWNlLCBidXQgaG93IGRvIEkgbWFrZSBhIGd6aXAgZmlsZSBpbiBtZW1vcnk/CiAK ICAgICBZb3UgY2FuIHJlcXVlc3QgdGhhdCBkZWZsYXRlIHdyaXRlIHRoZSBnemlwIGZvcm1hdCBp bnN0ZWFkIG9mIHRoZSB6bGliCi0gICAgZm9ybWF0IHVzaW5nIGRlZmxhdGVJbml0MigpLiBZb3Ug Y2FuIGFsc28gcmVxdWVzdCB0aGF0IGluZmxhdGUgZGVjb2RlCi0gICAgdGhlIGd6aXAgZm9ybWF0 IHVzaW5nIGluZmxhdGVJbml0MigpLiBSZWFkIHpsaWIuaCBmb3IgbW9yZSBkZXRhaWxzLgotCi0g ICAgTm90ZSB0aGF0IHlvdSBjYW5ub3Qgc3BlY2lmeSBzcGVjaWFsIGd6aXAgaGVhZGVyIGNvbnRl bnRzIChlLmcuIGEgZmlsZQotICAgIG5hbWUgb3IgbW9kaWZpY2F0aW9uIGRhdGUpLCBub3Igd2ls bCBpbmZsYXRlIHRlbGwgeW91IHdoYXQgd2FzIGluIHRoZQotICAgIGd6aXAgaGVhZGVyLiBJZiB5 b3UgbmVlZCB0byBjdXN0b21pemUgdGhlIGhlYWRlciBvciBzZWUgd2hhdCdzIGluIGl0LAotICAg IHlvdSBjYW4gdXNlIHRoZSByYXcgZGVmbGF0ZSBhbmQgaW5mbGF0ZSBvcGVyYXRpb25zIGFuZCB0 aGUgY3JjMzIoKQotICAgIGZ1bmN0aW9uIGFuZCByb2xsIHlvdXIgb3duIGd6aXAgZW5jb2Rpbmcg YW5kIGRlY29kaW5nLiBSZWFkIHRoZSBnemlwCi0gICAgUkZDIDE5NTIgZm9yIGRldGFpbHMgb2Yg dGhlIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQuCisgICAgZm9ybWF0IHVzaW5nIGRlZmxhdGVJ bml0MigpLiAgWW91IGNhbiBhbHNvIHJlcXVlc3QgdGhhdCBpbmZsYXRlIGRlY29kZSB0aGUKKyAg ICBnemlwIGZvcm1hdCB1c2luZyBpbmZsYXRlSW5pdDIoKS4gIFJlYWQgemxpYi5oIGZvciBtb3Jl IGRldGFpbHMuCiAKIDIxLiBJcyB6bGliIHRocmVhZC1zYWZlPwogCi0gICAgWWVzLiBIb3dldmVy IGFueSBsaWJyYXJ5IHJvdXRpbmVzIHRoYXQgemxpYiB1c2VzIGFuZCBhbnkgYXBwbGljYXRpb24t Ci0gICAgcHJvdmlkZWQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgbXVzdCBhbHNvIGJlIHRo cmVhZC1zYWZlLiB6bGliJ3MgZ3oqCisgICAgWWVzLiAgSG93ZXZlciBhbnkgbGlicmFyeSByb3V0 aW5lcyB0aGF0IHpsaWIgdXNlcyBhbmQgYW55IGFwcGxpY2F0aW9uLQorICAgIHByb3ZpZGVkIG1l bW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIG11c3QgYWxzbyBiZSB0aHJlYWQtc2FmZS4gIHpsaWIn cyBneioKICAgICBmdW5jdGlvbnMgdXNlIHN0ZGlvIGxpYnJhcnkgcm91dGluZXMsIGFuZCBtb3N0 IG9mIHpsaWIncyBmdW5jdGlvbnMgdXNlIHRoZQotICAgIGxpYnJhcnkgbWVtb3J5IGFsbG9jYXRp b24gcm91dGluZXMgYnkgZGVmYXVsdC4gemxpYidzIEluaXQgZnVuY3Rpb25zIGFsbG93Ci0gICAg Zm9yIHRoZSBhcHBsaWNhdGlvbiB0byBwcm92aWRlIGN1c3RvbSBtZW1vcnkgYWxsb2NhdGlvbiBy b3V0aW5lcy4KKyAgICBsaWJyYXJ5IG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGJ5IGRlZmF1 bHQuICB6bGliJ3MgKkluaXQqIGZ1bmN0aW9ucworICAgIGFsbG93IGZvciB0aGUgYXBwbGljYXRp b24gdG8gcHJvdmlkZSBjdXN0b20gbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuCiAKICAgICBP ZiBjb3Vyc2UsIHlvdSBzaG91bGQgb25seSBvcGVyYXRlIG9uIGFueSBnaXZlbiB6bGliIG9yIGd6 aXAgc3RyZWFtIGZyb20gYQogICAgIHNpbmdsZSB0aHJlYWQgYXQgYSB0aW1lLgogCiAyMi4gQ2Fu IEkgdXNlIHpsaWIgaW4gbXkgY29tbWVyY2lhbCBhcHBsaWNhdGlvbj8KIAotICAgIFllcy4gUGxl YXNlIHJlYWQgdGhlIGxpY2Vuc2UgaW4gemxpYi5oLgorICAgIFllcy4gIFBsZWFzZSByZWFkIHRo ZSBsaWNlbnNlIGluIHpsaWIuaC4KIAogMjMuIElzIHpsaWIgdW5kZXIgdGhlIEdOVSBsaWNlbnNl PwogCi0gICAgTm8uIFBsZWFzZSByZWFkIHRoZSBsaWNlbnNlIGluIHpsaWIuaC4KKyAgICBOby4g IFBsZWFzZSByZWFkIHRoZSBsaWNlbnNlIGluIHpsaWIuaC4KIAogMjQuIFRoZSBsaWNlbnNlIHNh eXMgdGhhdCBhbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlICJwbGFpbmx5IG1hcmtlZCIu IFNvCiAgICAgd2hhdCBleGFjdGx5IGRvIEkgbmVlZCB0byBkbyB0byBtZWV0IHRoYXQgcmVxdWly ZW1lbnQ/CiAKLSAgICBZb3UgbmVlZCB0byBjaGFuZ2UgdGhlIFpMSUJfVkVSU0lPTiBhbmQgWkxJ Ql9WRVJOVU0gI2RlZmluZXMgaW4gemxpYi5oLiBJbgorICAgIFlvdSBuZWVkIHRvIGNoYW5nZSB0 aGUgWkxJQl9WRVJTSU9OIGFuZCBaTElCX1ZFUk5VTSAjZGVmaW5lcyBpbiB6bGliLmguICBJbgog ICAgIHBhcnRpY3VsYXIsIHRoZSBmaW5hbCB2ZXJzaW9uIG51bWJlciBuZWVkcyB0byBiZSBjaGFu Z2VkIHRvICJmIiwgYW5kIGFuCi0gICAgaWRlbnRpZmljYXRpb24gc3RyaW5nIHNob3VsZCBiZSBh cHBlbmRlZCB0byBaTElCX1ZFUlNJT04uIFZlcnNpb24gbnVtYmVycworICAgIGlkZW50aWZpY2F0 aW9uIHN0cmluZyBzaG91bGQgYmUgYXBwZW5kZWQgdG8gWkxJQl9WRVJTSU9OLiAgVmVyc2lvbiBu dW1iZXJzCiAgICAgeC54LnguZiBhcmUgcmVzZXJ2ZWQgZm9yIG1vZGlmaWNhdGlvbnMgdG8gemxp YiBieSBvdGhlcnMgdGhhbiB0aGUgemxpYgotICAgIG1haW50YWluZXJzLiBGb3IgZXhhbXBsZSwg aWYgdGhlIHZlcnNpb24gb2YgdGhlIGJhc2UgemxpYiB5b3UgYXJlIGFsdGVyaW5nCisgICAgbWFp bnRhaW5lcnMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGJhc2UgemxpYiB5 b3UgYXJlIGFsdGVyaW5nCiAgICAgaXMgIjEuMi4zLjQiLCB0aGVuIGluIHpsaWIuaCB5b3Ugc2hv dWxkIGNoYW5nZSBaTElCX1ZFUk5VTSB0byAweDEyM2YsIGFuZAotICAgIFpMSUJfVkVSU0lPTiB0 byBzb21ldGhpbmcgbGlrZSAiMS4yLjMuZi16YWNoYXJ5LW1vZHMtdjMiLiBZb3UgY2FuIGFsc28K KyAgICBaTElCX1ZFUlNJT04gdG8gc29tZXRoaW5nIGxpa2UgIjEuMi4zLmYtemFjaGFyeS1tb2Rz LXYzIi4gIFlvdSBjYW4gYWxzbwogICAgIHVwZGF0ZSB0aGUgdmVyc2lvbiBzdHJpbmdzIGluIGRl ZmxhdGUuYyBhbmQgaW5mdHJlZXMuYy4KIAogICAgIEZvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmli dXRpb25zLCB5b3Ugc2hvdWxkIGFsc28gbm90ZSB0aGUgb3JpZ2luIGFuZAogICAgIG5hdHVyZSBv ZiB0aGUgY2hhbmdlcyBpbiB6bGliLmgsIGFzIHdlbGwgYXMgaW4gQ2hhbmdlTG9nIGFuZCBSRUFE TUUsIGFsb25nCi0gICAgd2l0aCB0aGUgZGF0ZXMgb2YgdGhlIGFsdGVyYXRpb25zLiBUaGUgb3Jp Z2luIHNob3VsZCBpbmNsdWRlIGF0IGxlYXN0IHlvdXIKKyAgICB3aXRoIHRoZSBkYXRlcyBvZiB0 aGUgYWx0ZXJhdGlvbnMuICBUaGUgb3JpZ2luIHNob3VsZCBpbmNsdWRlIGF0IGxlYXN0IHlvdXIK ICAgICBuYW1lIChvciB5b3VyIGNvbXBhbnkncyBuYW1lKSwgYW5kIGFuIGVtYWlsIGFkZHJlc3Mg dG8gY29udGFjdCBmb3IgaGVscCBvcgogICAgIGlzc3VlcyB3aXRoIHRoZSBsaWJyYXJ5LgogCkBA IC0yMDQsMTE5ICsxOTgsMTM2IEBACiAKIDI2LiBXaWxsIHpsaWIgd29yayBvbiBhIDY0LWJpdCBt YWNoaW5lPwogCi0gICAgSXQgc2hvdWxkLiBJdCBoYXMgYmVlbiB0ZXN0ZWQgb24gNjQtYml0IG1h Y2hpbmVzLCBhbmQgaGFzIG5vIGRlcGVuZGVuY2UKLSAgICBvbiBhbnkgZGF0YSB0eXBlcyBiZWlu ZyBsaW1pdGVkIHRvIDMyLWJpdHMgaW4gbGVuZ3RoLiBJZiB5b3UgaGF2ZSBhbnkKKyAgICBZZXMu ICBJdCBoYXMgYmVlbiB0ZXN0ZWQgb24gNjQtYml0IG1hY2hpbmVzLCBhbmQgaGFzIG5vIGRlcGVu ZGVuY2Ugb24gYW55CisgICAgZGF0YSB0eXBlcyBiZWluZyBsaW1pdGVkIHRvIDMyLWJpdHMgaW4g bGVuZ3RoLiAgSWYgeW91IGhhdmUgYW55CiAgICAgZGlmZmljdWx0aWVzLCBwbGVhc2UgcHJvdmlk ZSBhIGNvbXBsZXRlIHByb2JsZW0gcmVwb3J0IHRvIHpsaWJAZ3ppcC5vcmcKIAogMjcuIFdpbGwg emxpYiBkZWNvbXByZXNzIGRhdGEgZnJvbSB0aGUgUEtXYXJlIERhdGEgQ29tcHJlc3Npb24gTGli cmFyeT8KIAotICAgIE5vLiBUaGUgUEtXYXJlIERDTCB1c2VzIGEgY29tcGxldGVseSBkaWZmZXJl bnQgY29tcHJlc3NlZCBkYXRhIGZvcm1hdAotICAgIHRoYW4gZG9lcyBQS1pJUCBhbmQgemxpYi4g SG93ZXZlciwgeW91IGNhbiBsb29rIGluIHpsaWIncyBjb250cmliL2JsYXN0CisgICAgTm8uICBU aGUgUEtXYXJlIERDTCB1c2VzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgY29tcHJlc3NlZCBkYXRh IGZvcm1hdCB0aGFuCisgICAgZG9lcyBQS1pJUCBhbmQgemxpYi4gIEhvd2V2ZXIsIHlvdSBjYW4g bG9vayBpbiB6bGliJ3MgY29udHJpYi9ibGFzdAogICAgIGRpcmVjdG9yeSBmb3IgYSBwb3NzaWJs ZSBzb2x1dGlvbiB0byB5b3VyIHByb2JsZW0uCiAKIDI4LiBDYW4gSSBhY2Nlc3MgZGF0YSByYW5k b21seSBpbiBhIGNvbXByZXNzZWQgc3RyZWFtPwogCi0gICAgTm8sIG5vdCB3aXRob3V0IHNvbWUg cHJlcGFyYXRpb24uIElmIHdoZW4gY29tcHJlc3NpbmcgeW91IHBlcmlvZGljYWxseQotICAgIHVz ZSBaX0ZVTExfRkxVU0gsIGNhcmVmdWxseSB3cml0ZSBhbGwgdGhlIHBlbmRpbmcgZGF0YSBhdCB0 aG9zZSBwb2ludHMsCi0gICAgYW5kIGtlZXAgYW4gaW5kZXggb2YgdGhvc2UgbG9jYXRpb25zLCB0 aGVuIHlvdSBjYW4gc3RhcnQgZGVjb21wcmVzc2lvbgotICAgIGF0IHRob3NlIHBvaW50cy4gWW91 IGhhdmUgdG8gYmUgY2FyZWZ1bCB0byBub3QgdXNlIFpfRlVMTF9GTFVTSCB0b28KLSAgICBvZnRl biwgc2luY2UgaXQgY2FuIHNpZ25pZmljYW50bHkgZGVncmFkZSBjb21wcmVzc2lvbi4KKyAgICBO bywgbm90IHdpdGhvdXQgc29tZSBwcmVwYXJhdGlvbi4gIElmIHdoZW4gY29tcHJlc3NpbmcgeW91 IHBlcmlvZGljYWxseSB1c2UKKyAgICBaX0ZVTExfRkxVU0gsIGNhcmVmdWxseSB3cml0ZSBhbGwg dGhlIHBlbmRpbmcgZGF0YSBhdCB0aG9zZSBwb2ludHMsIGFuZAorICAgIGtlZXAgYW4gaW5kZXgg b2YgdGhvc2UgbG9jYXRpb25zLCB0aGVuIHlvdSBjYW4gc3RhcnQgZGVjb21wcmVzc2lvbiBhdCB0 aG9zZQorICAgIHBvaW50cy4gIFlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgdG8gbm90IHVzZSBaX0ZV TExfRkxVU0ggdG9vIG9mdGVuLCBzaW5jZSBpdAorICAgIGNhbiBzaWduaWZpY2FudGx5IGRlZ3Jh ZGUgY29tcHJlc3Npb24uICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNjYW4gYQorICAgIGRlZmxh dGUgc3RyZWFtIG9uY2UgdG8gZ2VuZXJhdGUgYW4gaW5kZXgsIGFuZCB0aGVuIHVzZSB0aGF0IGlu ZGV4IGZvcgorICAgIHJhbmRvbSBhY2Nlc3MuICBTZWUgZXhhbXBsZXMvenJhbi5jIC4KIAogMjku IERvZXMgemxpYiB3b3JrIG9uIE1WUywgT1MvMzkwLCBDSUNTLCBldGMuPwogCi0gICAgV2UgZG9u J3Qga25vdyBmb3Igc3VyZS4gV2UgaGF2ZSBoZWFyZCBvY2Nhc2lvbmFsIHJlcG9ydHMgb2Ygc3Vj Y2VzcyBvbgotICAgIHRoZXNlIHN5c3RlbXMuIElmIHlvdSBkbyB1c2UgaXQgb24gb25lIG9mIHRo ZXNlLCBwbGVhc2UgcHJvdmlkZSB1cyB3aXRoCi0gICAgYSByZXBvcnQsIGluc3RydWN0aW9ucywg YW5kIHBhdGNoZXMgdGhhdCB3ZSBjYW4gcmVmZXJlbmNlIHdoZW4gd2UgZ2V0Ci0gICAgdGhlc2Ug cXVlc3Rpb25zLiBUaGFua3MuCisgICAgSXQgaGFzIGluIHRoZSBwYXN0LCBidXQgd2UgaGF2ZSBu b3QgaGVhcmQgb2YgYW55IHJlY2VudCBldmlkZW5jZS4gIFRoZXJlCisgICAgd2VyZSB3b3JraW5n IHBvcnRzIG9mIHpsaWIgMS4xLjQgdG8gTVZTLCBidXQgdGhvc2UgbGlua3Mgbm8gbG9uZ2VyIHdv cmsuCisgICAgSWYgeW91IGtub3cgb2YgcmVjZW50LCBzdWNjZXNzZnVsIGFwcGxpY2F0aW9ucyBv ZiB6bGliIG9uIHRoZXNlIG9wZXJhdGluZworICAgIHN5c3RlbXMsIHBsZWFzZSBsZXQgdXMga25v dy4gIFRoYW5rcy4KIAotMzAuIElzIHRoZXJlIHNvbWUgc2ltcGxlciwgZWFzaWVyIHRvIHJlYWQg dmVyc2lvbiBvZiBpbmZsYXRlIEkgY2FuIGxvb2sgYXQKLSAgICB0byB1bmRlcnN0YW5kIHRoZSBk ZWZsYXRlIGZvcm1hdD8KKzMwLiBJcyB0aGVyZSBzb21lIHNpbXBsZXIsIGVhc2llciB0byByZWFk IHZlcnNpb24gb2YgaW5mbGF0ZSBJIGNhbiBsb29rIGF0IHRvCisgICAgdW5kZXJzdGFuZCB0aGUg ZGVmbGF0ZSBmb3JtYXQ/CiAKLSAgICBGaXJzdCBvZmYsIHlvdSBzaG91bGQgcmVhZCBSRkMgMTk1 MS4gU2Vjb25kLCB5ZXMuIExvb2sgaW4gemxpYidzCisgICAgRmlyc3Qgb2ZmLCB5b3Ugc2hvdWxk IHJlYWQgUkZDIDE5NTEuICBTZWNvbmQsIHllcy4gIExvb2sgaW4gemxpYidzCiAgICAgY29udHJp Yi9wdWZmIGRpcmVjdG9yeS4KIAogMzEuIERvZXMgemxpYiBpbmZyaW5nZSBvbiBhbnkgcGF0ZW50 cz8KIAotICAgIEFzIGZhciBhcyB3ZSBrbm93LCBuby4gSW4gZmFjdCwgdGhhdCB3YXMgb3JpZ2lu YWxseSB0aGUgd2hvbGUgcG9pbnQgYmVoaW5kCi0gICAgemxpYi4gTG9vayBoZXJlIGZvciBzb21l IG1vcmUgaW5mb3JtYXRpb246CisgICAgQXMgZmFyIGFzIHdlIGtub3csIG5vLiAgSW4gZmFjdCwg dGhhdCB3YXMgb3JpZ2luYWxseSB0aGUgd2hvbGUgcG9pbnQgYmVoaW5kCisgICAgemxpYi4gIExv b2sgaGVyZSBmb3Igc29tZSBtb3JlIGluZm9ybWF0aW9uOgogCiAgICAgaHR0cDovL3d3dy5nemlw Lm9yZy8jZmFxMTEKIAogMzIuIENhbiB6bGliIHdvcmsgd2l0aCBncmVhdGVyIHRoYW4gNCBHQiBv ZiBkYXRhPwogCi0gICAgWWVzLiBpbmZsYXRlKCkgYW5kIGRlZmxhdGUoKSB3aWxsIHByb2Nlc3Mg YW55IGFtb3VudCBvZiBkYXRhIGNvcnJlY3RseS4KKyAgICBZZXMuICBpbmZsYXRlKCkgYW5kIGRl ZmxhdGUoKSB3aWxsIHByb2Nlc3MgYW55IGFtb3VudCBvZiBkYXRhIGNvcnJlY3RseS4KICAgICBF YWNoIGNhbGwgb2YgaW5mbGF0ZSgpIG9yIGRlZmxhdGUoKSBpcyBsaW1pdGVkIHRvIGlucHV0IGFu ZCBvdXRwdXQgY2h1bmtzCiAgICAgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCBjYW4gYmUgc3Rv cmVkIGluIHRoZSBjb21waWxlcidzICJ1bnNpZ25lZCBpbnQiCi0gICAgdHlwZSwgYnV0IHRoZXJl IGlzIG5vIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgY2h1bmtzLiBOb3RlIGhvd2V2ZXIgdGhhdCB0 aGUKLSAgICBzdHJtLnRvdGFsX2luIGFuZCBzdHJtX3RvdGFsX291dCBjb3VudGVycyBtYXkgYmUg bGltaXRlZCB0byA0IEdCLiBUaGVzZQorICAgIHR5cGUsIGJ1dCB0aGVyZSBpcyBubyBsaW1pdCB0 byB0aGUgbnVtYmVyIG9mIGNodW5rcy4gIE5vdGUgaG93ZXZlciB0aGF0IHRoZQorICAgIHN0cm0u dG90YWxfaW4gYW5kIHN0cm1fdG90YWxfb3V0IGNvdW50ZXJzIG1heSBiZSBsaW1pdGVkIHRvIDQg R0IuICBUaGVzZQogICAgIGNvdW50ZXJzIGFyZSBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlIGFu ZCBhcmUgbm90IHVzZWQgaW50ZXJuYWxseSBieQotICAgIGluZmxhdGUoKSBvciBkZWZsYXRlKCku IFRoZSBhcHBsaWNhdGlvbiBjYW4gZWFzaWx5IHNldCB1cCBpdHMgb3duIGNvdW50ZXJzCisgICAg aW5mbGF0ZSgpIG9yIGRlZmxhdGUoKS4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gZWFzaWx5IHNldCB1 cCBpdHMgb3duIGNvdW50ZXJzCiAgICAgdXBkYXRlZCBhZnRlciBlYWNoIGNhbGwgb2YgaW5mbGF0 ZSgpIG9yIGRlZmxhdGUoKSB0byBjb3VudCBiZXlvbmQgNCBHQi4KICAgICBjb21wcmVzcygpIGFu ZCB1bmNvbXByZXNzKCkgbWF5IGJlIGxpbWl0ZWQgdG8gNCBHQiwgc2luY2UgdGhleSBvcGVyYXRl IGluIGEKLSAgICBzaW5nbGUgY2FsbC4gZ3pzZWVrKCkgYW5kIGd6dGVsbCgpIG1heSBiZSBsaW1p dGVkIHRvIDQgR0IgZGVwZW5kaW5nIG9uIGhvdwotICAgIHpsaWIgaXMgY29tcGlsZWQuIFNlZSB0 aGUgemxpYkNvbXBpbGVGbGFncygpIGZ1bmN0aW9uIGluIHpsaWIuaC4KKyAgICBzaW5nbGUgY2Fs bC4gIGd6c2VlaygpIGFuZCBnenRlbGwoKSBtYXkgYmUgbGltaXRlZCB0byA0IEdCIGRlcGVuZGlu ZyBvbiBob3cKKyAgICB6bGliIGlzIGNvbXBpbGVkLiAgU2VlIHRoZSB6bGliQ29tcGlsZUZsYWdz KCkgZnVuY3Rpb24gaW4gemxpYi5oLgogCi0gICAgVGhlIHdvcmQgIm1heSIgYXBwZWFycyBzZXZl cmFsIHRpbWVzIGFib3ZlIHNpbmNlIHRoZXJlIGlzIGEgNCBHQiBsaW1pdAotICAgIG9ubHkgaWYg dGhlIGNvbXBpbGVyJ3MgImxvbmciIHR5cGUgaXMgMzIgYml0cy4gSWYgdGhlIGNvbXBpbGVyJ3Mg ImxvbmciCi0gICAgdHlwZSBpcyA2NCBiaXRzLCB0aGVuIHRoZSBsaW1pdCBpcyAxNiBleGFieXRl cy4KKyAgICBUaGUgd29yZCAibWF5IiBhcHBlYXJzIHNldmVyYWwgdGltZXMgYWJvdmUgc2luY2Ug dGhlcmUgaXMgYSA0IEdCIGxpbWl0IG9ubHkKKyAgICBpZiB0aGUgY29tcGlsZXIncyAibG9uZyIg dHlwZSBpcyAzMiBiaXRzLiAgSWYgdGhlIGNvbXBpbGVyJ3MgImxvbmciIHR5cGUgaXMKKyAgICA2 NCBiaXRzLCB0aGVuIHRoZSBsaW1pdCBpcyAxNiBleGFieXRlcy4KIAogMzMuIERvZXMgemxpYiBo YXZlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/CiAKLSAgICBUaGUgb25seSBvbmUgdGhh dCB3ZSBhcmUgYXdhcmUgb2YgaXMgcG90ZW50aWFsbHkgaW4gZ3pwcmludGYoKS4gSWYgemxpYgot ICAgIGlzIGNvbXBpbGVkIHRvIHVzZSBzcHJpbnRmKCkgb3IgdnNwcmludGYoKSwgdGhlbiB0aGVy ZSBpcyBubyBwcm90ZWN0aW9uCi0gICAgYWdhaW5zdCBhIGJ1ZmZlciBvdmVyZmxvdyBvZiBhIDRL IHN0cmluZyBzcGFjZSwgb3RoZXIgdGhhbiB0aGUgY2FsbGVyIG9mCi0gICAgZ3pwcmludGYoKSBh c3N1cmluZyB0aGF0IHRoZSBvdXRwdXQgd2lsbCBub3QgZXhjZWVkIDRLLiBPbiB0aGUgb3RoZXIK LSAgICBoYW5kLCBpZiB6bGliIGlzIGNvbXBpbGVkIHRvIHVzZSBzbnByaW50ZigpIG9yIHZzbnBy aW50ZigpLCB3aGljaCBzaG91bGQKLSAgICBub3JtYWxseSBiZSB0aGUgY2FzZSwgdGhlbiB0aGVy ZSBpcyBubyB2dWxuZXJhYmlsaXR5LiBUaGUgLi9jb25maWd1cmUKLSAgICBzY3JpcHQgd2lsbCBk aXNwbGF5IHdhcm5pbmdzIGlmIGFuIGluc2VjdXJlIHZhcmlhdGlvbiBvZiBzcHJpbnRmKCkgd2ls bAotICAgIGJlIHVzZWQgYnkgZ3pwcmludGYoKS4gQWxzbyB0aGUgemxpYkNvbXBpbGVGbGFncygp IGZ1bmN0aW9uIHdpbGwgcmV0dXJuCi0gICAgaW5mb3JtYXRpb24gb24gd2hhdCB2YXJpYW50IG9m IHNwcmludGYoKSBpcyB1c2VkIGJ5IGd6cHJpbnRmKCkuCisgICAgVGhlIG9ubHkgb25lIHRoYXQg d2UgYXJlIGF3YXJlIG9mIGlzIHBvdGVudGlhbGx5IGluIGd6cHJpbnRmKCkuICBJZiB6bGliIGlz CisgICAgY29tcGlsZWQgdG8gdXNlIHNwcmludGYoKSBvciB2c3ByaW50ZigpLCB0aGVuIHRoZXJl IGlzIG5vIHByb3RlY3Rpb24KKyAgICBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJmbG93IG9mIGFuIDhL IHN0cmluZyBzcGFjZSAob3Igb3RoZXIgdmFsdWUgYXMgc2V0IGJ5CisgICAgZ3pidWZmZXIoKSks IG90aGVyIHRoYW4gdGhlIGNhbGxlciBvZiBnenByaW50ZigpIGFzc3VyaW5nIHRoYXQgdGhlIG91 dHB1dAorICAgIHdpbGwgbm90IGV4Y2VlZCA4Sy4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB6bGli IGlzIGNvbXBpbGVkIHRvIHVzZQorICAgIHNucHJpbnRmKCkgb3IgdnNucHJpbnRmKCksIHdoaWNo IHNob3VsZCBub3JtYWxseSBiZSB0aGUgY2FzZSwgdGhlbiB0aGVyZSBpcworICAgIG5vIHZ1bG5l cmFiaWxpdHkuICBUaGUgLi9jb25maWd1cmUgc2NyaXB0IHdpbGwgZGlzcGxheSB3YXJuaW5ncyBp ZiBhbgorICAgIGluc2VjdXJlIHZhcmlhdGlvbiBvZiBzcHJpbnRmKCkgd2lsbCBiZSB1c2VkIGJ5 IGd6cHJpbnRmKCkuICBBbHNvIHRoZQorICAgIHpsaWJDb21waWxlRmxhZ3MoKSBmdW5jdGlvbiB3 aWxsIHJldHVybiBpbmZvcm1hdGlvbiBvbiB3aGF0IHZhcmlhbnQgb2YKKyAgICBzcHJpbnRmKCkg aXMgdXNlZCBieSBnenByaW50ZigpLgogCiAgICAgSWYgeW91IGRvbid0IGhhdmUgc25wcmludGYo KSBvciB2c25wcmludGYoKSBhbmQgd291bGQgbGlrZSBvbmUsIHlvdSBjYW4KICAgICBmaW5kIGEg cG9ydGFibGUgaW1wbGVtZW50YXRpb24gaGVyZToKIAogICAgICAgICBodHRwOi8vd3d3Lmlqcy5z aS9zb2Z0d2FyZS9zbnByaW50Zi8KIAotICAgIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIGJlIHVzaW5n IHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHpsaWIuIFZlcnNpb25zCi0gICAgMS4xLjMgYW5k IGJlZm9yZSB3ZXJlIHN1YmplY3QgdG8gYSBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LgorICAg IE5vdGUgdGhhdCB5b3Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9m IHpsaWIuICBWZXJzaW9ucworICAgIDEuMS4zIGFuZCBiZWZvcmUgd2VyZSBzdWJqZWN0IHRvIGEg ZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSwgYW5kIHZlcnNpb25zCisgICAgMS4yLjEgYW5kIDEu Mi4yIHdlcmUgc3ViamVjdCB0byBhbiBhY2Nlc3MgZXhjZXB0aW9uIHdoZW4gZGVjb21wcmVzc2lu ZworICAgIGludmFsaWQgY29tcHJlc3NlZCBkYXRhLgogCiAzNC4gSXMgdGhlcmUgYSBKYXZhIHZl cnNpb24gb2YgemxpYj8KIAogICAgIFByb2JhYmx5IHdoYXQgeW91IHdhbnQgaXMgdG8gdXNlIHps aWIgaW4gSmF2YS4gemxpYiBpcyBhbHJlYWR5IGluY2x1ZGVkCiAgICAgYXMgcGFydCBvZiB0aGUg SmF2YSBTREsgaW4gdGhlIGphdmEudXRpbC56aXAgcGFja2FnZS4gSWYgeW91IHJlYWxseSB3YW50 CiAgICAgYSB2ZXJzaW9uIG9mIHpsaWIgd3JpdHRlbiBpbiB0aGUgSmF2YSBsYW5ndWFnZSwgbG9v ayBvbiB0aGUgemxpYiBob21lCi0gICAgcGFnZSBmb3IgbGlua3M6IGh0dHA6Ly93d3cuemxpYi5v cmcvCisgICAgcGFnZSBmb3IgbGlua3M6IGh0dHA6Ly96bGliLm5ldC8gLgogCiAzNS4gSSBnZXQg dGhpcyBvciB0aGF0IGNvbXBpbGVyIG9yIHNvdXJjZS1jb2RlIHNjYW5uZXIgd2FybmluZyB3aGVu IEkgY3JhbmsgaXQKICAgICB1cCB0byBtYXhpbWFsbHktcGVkYW50aWMuIENhbid0IHlvdSBndXlz IHdyaXRlIHByb3BlciBjb2RlPwogCiAgICAgTWFueSB5ZWFycyBhZ28sIHdlIGdhdmUgdXAgYXR0 ZW1wdGluZyB0byBhdm9pZCB3YXJuaW5ncyBvbiBldmVyeSBjb21waWxlcgotICAgIGluIHRoZSB1 bml2ZXJzZS4gSXQganVzdCBnb3QgdG8gYmUgYSB3YXN0ZSBvZiB0aW1lLCBhbmQgc29tZSBjb21w aWxlcnMKLSAgICB3ZXJlIGRvd25yaWdodCBzaWxseS4gU28gbm93LCB3ZSBzaW1wbHkgbWFrZSBz dXJlIHRoYXQgdGhlIGNvZGUgYWx3YXlzCi0gICAgd29ya3MuCisgICAgaW4gdGhlIHVuaXZlcnNl LiAgSXQganVzdCBnb3QgdG8gYmUgYSB3YXN0ZSBvZiB0aW1lLCBhbmQgc29tZSBjb21waWxlcnMK KyAgICB3ZXJlIGRvd25yaWdodCBzaWxseSBhcyB3ZWxsIGFzIGNvbnRyYWRpY3RlZCBlYWNoIG90 aGVyLiAgU28gbm93LCB3ZSBzaW1wbHkKKyAgICBtYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBhbHdh eXMgd29ya3MuCiAKLTM2LiBXaWxsIHpsaWIgcmVhZCB0aGUgKGluc2VydCBhbnkgYW5jaWVudCBv ciBhcmNhbmUgZm9ybWF0IGhlcmUpIGNvbXByZXNzZWQKKzM2LiBWYWxncmluZCAob3Igc29tZSBz aW1pbGFyIG1lbW9yeSBhY2Nlc3MgY2hlY2tlcikgc2F5cyB0aGF0IGRlZmxhdGUgaXMKKyAgICBw ZXJmb3JtaW5nIGEgY29uZGl0aW9uYWwganVtcCB0aGF0IGRlcGVuZHMgb24gYW4gdW5pbml0aWFs aXplZCB2YWx1ZS4KKyAgICBJc24ndCB0aGF0IGEgYnVnPworCisgICAgTm8uICBUaGF0IGlzIGlu dGVudGlvbmFsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBhbmQgdGhlIG91dHB1dCBvZiBkZWZs YXRlCisgICAgaXMgbm90IGFmZmVjdGVkLiAgVGhpcyBvbmx5IHN0YXJ0ZWQgc2hvd2luZyB1cCBy ZWNlbnRseSBzaW5jZSB6bGliIDEuMi54CisgICAgdXNlcyBtYWxsb2MoKSBieSBkZWZhdWx0IGZv ciBhbGxvY2F0aW9ucywgd2hlcmVhcyBlYXJsaWVyIHZlcnNpb25zIHVzZWQKKyAgICBjYWxsb2Mo KSwgd2hpY2ggemVyb3Mgb3V0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiAgRXZlbiB0aG91Z2ggdGhl IGNvZGUgd2FzCisgICAgY29ycmVjdCwgdmVyc2lvbnMgMS4yLjQgYW5kIGxhdGVyIHdhcyBjaGFu Z2VkIHRvIG5vdCBzdGltdWxhdGUgdGhlc2UKKyAgICBjaGVja2Vycy4KKworMzcuIFdpbGwgemxp YiByZWFkIHRoZSAoaW5zZXJ0IGFueSBhbmNpZW50IG9yIGFyY2FuZSBmb3JtYXQgaGVyZSkgY29t cHJlc3NlZAogICAgIGRhdGEgZm9ybWF0PwogCiAgICAgUHJvYmFibHkgbm90LiBMb29rIGluIHRo ZSBjb21wLmNvbXByZXNzaW9uIEZBUSBmb3IgcG9pbnRlcnMgdG8gdmFyaW91cwogICAgIGZvcm1h dHMgYW5kIGFzc29jaWF0ZWQgc29mdHdhcmUuCiAKLTM3LiBIb3cgY2FuIEkgZW5jcnlwdC9kZWNy eXB0IHppcCBmaWxlcyB3aXRoIHpsaWI/CiszOC4gSG93IGNhbiBJIGVuY3J5cHQvZGVjcnlwdCB6 aXAgZmlsZXMgd2l0aCB6bGliPwogCi0gICAgemxpYiBkb2Vzbid0IHN1cHBvcnQgZW5jcnlwdGlv bi4gVGhlIG9yaWdpbmFsIFBLWklQIGVuY3J5cHRpb24gaXMgdmVyeSB3ZWFrCi0gICAgYW5kIGNh biBiZSBicm9rZW4gd2l0aCBmcmVlbHkgYXZhaWxhYmxlIHByb2dyYW1zLiBUbyBnZXQgc3Ryb25n IGVuY3J5cHRpb24sCi0gICAgdXNlIEdudVBHLCBodHRwOi8vd3d3LmdudXBnLm9yZy8gLCB3aGlj aCBhbHJlYWR5IGluY2x1ZGVzIHpsaWIgY29tcHJlc3Npb24uCi0gICAgRm9yIFBLWklQIGNvbXBh dGlibGUgImVuY3J5cHRpb24iLCBsb29rIGF0IGh0dHA6Ly93d3cuaW5mby16aXAub3JnLworICAg IHpsaWIgZG9lc24ndCBzdXBwb3J0IGVuY3J5cHRpb24uICBUaGUgb3JpZ2luYWwgUEtaSVAgZW5j cnlwdGlvbiBpcyB2ZXJ5CisgICAgd2VhayBhbmQgY2FuIGJlIGJyb2tlbiB3aXRoIGZyZWVseSBh dmFpbGFibGUgcHJvZ3JhbXMuICBUbyBnZXQgc3Ryb25nCisgICAgZW5jcnlwdGlvbiwgdXNlIEdu dVBHLCBodHRwOi8vd3d3LmdudXBnLm9yZy8gLCB3aGljaCBhbHJlYWR5IGluY2x1ZGVzIHpsaWIK KyAgICBjb21wcmVzc2lvbi4gIEZvciBQS1pJUCBjb21wYXRpYmxlICJlbmNyeXB0aW9uIiwgbG9v ayBhdAorICAgIGh0dHA6Ly93d3cuaW5mby16aXAub3JnLwogCi0zOC4gV2hhdCdzIHRoZSBkaWZm ZXJlbmNlIGJldHdlZW4gdGhlICJnemlwIiBhbmQgImRlZmxhdGUiIEhUVFAgMS4xIGVuY29kaW5n cz8KKzM5LiBXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgImd6aXAiIGFuZCAiZGVm bGF0ZSIgSFRUUCAxLjEgZW5jb2RpbmdzPwogCi0gICAgImd6aXAiIGlzIHRoZSBnemlwIGZvcm1h dCwgYW5kICJkZWZsYXRlIiBpcyB0aGUgemxpYiBmb3JtYXQuIFRoZXkgc2hvdWxkCi0gICAgcHJv YmFibHkgaGF2ZSBjYWxsZWQgdGhlIHNlY29uZCBvbmUgInpsaWIiIGluc3RlYWQgdG8gYXZvaWQg Y29uZnVzaW9uCi0gICAgd2l0aCB0aGUgcmF3IGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1h dC4gV2hpbGUgdGhlIEhUVFAgMS4xIFJGQyAyNjE2CisgICAgImd6aXAiIGlzIHRoZSBnemlwIGZv cm1hdCwgYW5kICJkZWZsYXRlIiBpcyB0aGUgemxpYiBmb3JtYXQuICBUaGV5IHNob3VsZAorICAg IHByb2JhYmx5IGhhdmUgY2FsbGVkIHRoZSBzZWNvbmQgb25lICJ6bGliIiBpbnN0ZWFkIHRvIGF2 b2lkIGNvbmZ1c2lvbiB3aXRoCisgICAgdGhlIHJhdyBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBm b3JtYXQuICBXaGlsZSB0aGUgSFRUUCAxLjEgUkZDIDI2MTYKICAgICBjb3JyZWN0bHkgcG9pbnRz IHRvIHRoZSB6bGliIHNwZWNpZmljYXRpb24gaW4gUkZDIDE5NTAgZm9yIHRoZSAiZGVmbGF0ZSIK ICAgICB0cmFuc2ZlciBlbmNvZGluZywgdGhlcmUgaGF2ZSBiZWVuIHJlcG9ydHMgb2Ygc2VydmVy cyBhbmQgYnJvd3NlcnMgdGhhdAogICAgIGluY29ycmVjdGx5IHByb2R1Y2Ugb3IgZXhwZWN0IHJh dyBkZWZsYXRlIGRhdGEgcGVyIHRoZSBkZWZsYXRlCi0gICAgc3BlY2ZpY2lhdGlvbiBpbiBSRkMg MTk1MSwgbW9zdCBub3RhYmx5IE1pY3Jvc29mdC4gU28gZXZlbiB0aG91Z2ggdGhlCisgICAgc3Bl Y2lmaWNhdGlvbiBpbiBSRkMgMTk1MSwgbW9zdCBub3RhYmx5IE1pY3Jvc29mdC4gIFNvIGV2ZW4g dGhvdWdoIHRoZQogICAgICJkZWZsYXRlIiB0cmFuc2ZlciBlbmNvZGluZyB1c2luZyB0aGUgemxp YiBmb3JtYXQgd291bGQgYmUgdGhlIG1vcmUKICAgICBlZmZpY2llbnQgYXBwcm9hY2ggKGFuZCBp biBmYWN0IGV4YWN0bHkgd2hhdCB0aGUgemxpYiBmb3JtYXQgd2FzIGRlc2lnbmVkCiAgICAgZm9y KSwgdXNpbmcgdGhlICJnemlwIiB0cmFuc2ZlciBlbmNvZGluZyBpcyBwcm9iYWJseSBtb3JlIHJl bGlhYmxlIGR1ZSB0bwpAQCAtMzI0LDE0ICszMzUsMzQgQEAKIAogICAgIEJvdHRvbSBsaW5lOiB1 c2UgdGhlIGd6aXAgZm9ybWF0IGZvciBIVFRQIDEuMSBlbmNvZGluZy4KIAotMzkuIERvZXMgemxp YiBzdXBwb3J0IHRoZSBuZXcgIkRlZmxhdGU2NCIgZm9ybWF0IGludHJvZHVjZWQgYnkgUEtXYXJl PworNDAuIERvZXMgemxpYiBzdXBwb3J0IHRoZSBuZXcgIkRlZmxhdGU2NCIgZm9ybWF0IGludHJv ZHVjZWQgYnkgUEtXYXJlPwogCi0gICAgTm8uIFBLV2FyZSBoYXMgYXBwYXJlbnRseSBkZWNpZGVk IHRvIGtlZXAgdGhhdCBmb3JtYXQgcHJvcHJpZXRhcnksIHNpbmNlCi0gICAgdGhleSBoYXZlIG5v dCBkb2N1bWVudGVkIGl0IGFzIHRoZXkgaGF2ZSBwcmV2aW91cyBjb21wcmVzc2lvbiBmb3JtYXRz LgotICAgIEluIGFueSBjYXNlLCB0aGUgY29tcHJlc3Npb24gaW1wcm92ZW1lbnRzIGFyZSBzbyBt b2Rlc3QgY29tcGFyZWQgdG8gb3RoZXIKLSAgICBtb3JlIG1vZGVybiBhcHByb2FjaGVzLCB0aGF0 IGl0J3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gaW1wbGVtZW50LgorICAgIE5vLiAgUEtXYXJl IGhhcyBhcHBhcmVudGx5IGRlY2lkZWQgdG8ga2VlcCB0aGF0IGZvcm1hdCBwcm9wcmlldGFyeSwg c2luY2UKKyAgICB0aGV5IGhhdmUgbm90IGRvY3VtZW50ZWQgaXQgYXMgdGhleSBoYXZlIHByZXZp b3VzIGNvbXByZXNzaW9uIGZvcm1hdHMuICBJbgorICAgIGFueSBjYXNlLCB0aGUgY29tcHJlc3Np b24gaW1wcm92ZW1lbnRzIGFyZSBzbyBtb2Rlc3QgY29tcGFyZWQgdG8gb3RoZXIgbW9yZQorICAg IG1vZGVybiBhcHByb2FjaGVzLCB0aGF0IGl0J3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gaW1w bGVtZW50LgogCi00MC4gQ2FuIHlvdSBwbGVhc2Ugc2lnbiB0aGVzZSBsZW5ndGh5IGxlZ2FsIGRv Y3VtZW50cyBhbmQgZmF4IHRoZW0gYmFjayB0byB1cworNDEuIEknbSBoYXZpbmcgYSBwcm9ibGVt IHdpdGggdGhlIHppcCBmdW5jdGlvbnMgaW4gemxpYiwgY2FuIHlvdSBoZWxwPworCisgICAgVGhl cmUgYXJlIG5vIHppcCBmdW5jdGlvbnMgaW4gemxpYi4gIFlvdSBhcmUgcHJvYmFibHkgdXNpbmcg bWluaXppcCBieQorICAgIEdpbGVzIFZvbGxhbnQsIHdoaWNoIGlzIGZvdW5kIGluIHRoZSBjb250 cmliIGRpcmVjdG9yeSBvZiB6bGliLiAgSXQgaXMgbm90CisgICAgcGFydCBvZiB6bGliLiAgSW4g ZmFjdCBub25lIG9mIHRoZSBzdHVmZiBpbiBjb250cmliIGlzIHBhcnQgb2YgemxpYi4gIFRoZQor ICAgIGZpbGVzIGluIHRoZXJlIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB6bGliIGF1dGhvcnMu ICBZb3UgbmVlZCB0byBjb250YWN0CisgICAgdGhlIGF1dGhvcnMgb2YgdGhlIHJlc3BlY3RpdmUg Y29udHJpYnV0aW9uIGZvciBoZWxwLgorCis0Mi4gVGhlIG1hdGNoLmFzbSBjb2RlIGluIGNvbnRy aWIgaXMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICAgIFNpbmNlIGl0 J3MgcGFydCBvZiB6bGliLCBkb2Vzbid0IHRoYXQgbWVhbiB0aGF0IGFsbCBvZiB6bGliIGZhbGxz IHVuZGVyIHRoZQorICAgIEdOVSBHUEw/CisKKyAgICBOby4gIFRoZSBmaWxlcyBpbiBjb250cmli IGFyZSBub3QgcGFydCBvZiB6bGliLiAgVGhleSB3ZXJlIGNvbnRyaWJ1dGVkIGJ5CisgICAgb3Ro ZXIgYXV0aG9ycyBhbmQgYXJlIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgdG8gdGhlIHVzZXIg d2l0aGluIHRoZSB6bGliCisgICAgZGlzdHJpYnV0aW9uLiAgRWFjaCBpdGVtIGluIGNvbnRyaWIg aGFzIGl0cyBvd24gbGljZW5zZS4KKworNDMuIElzIHpsaWIgc3ViamVjdCB0byBleHBvcnQgY29u dHJvbHM/ICBXaGF0IGlzIGl0cyBFQ0NOPworCisgICAgemxpYiBpcyBub3Qgc3ViamVjdCB0byBl eHBvcnQgY29udHJvbHMsIGFuZCBzbyBpcyBjbGFzc2lmaWVkIGFzIEVBUjk5LgorCis0NC4gQ2Fu IHlvdSBwbGVhc2Ugc2lnbiB0aGVzZSBsZW5ndGh5IGxlZ2FsIGRvY3VtZW50cyBhbmQgZmF4IHRo ZW0gYmFjayB0byB1cwogICAgIHNvIHRoYXQgd2UgY2FuIHVzZSB5b3VyIHNvZnR3YXJlIGluIG91 ciBwcm9kdWN0PwogCiAgICAgTm8uIEdvIGF3YXkuIFNob28uCmRpZmYgLXIgYTA1NzhjNzk4ZTEw IC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL0lOREVYCi0tLSBhL3N5cy9zcmMv Y21kL2dzL3psaWIvSU5ERVgJV2VkIE1heSAyNyAwMDowOTo0NiAyMDIwICswMjAwCisrKyBiL3N5 cy9zcmMvY21kL2dzL3psaWIvSU5ERVgJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBA IC0xLDIzICsxLDM3IEBACitDTWFrZUxpc3RzLnR4dCAgY21ha2UgYnVpbGQgZmlsZQogQ2hhbmdl TG9nICAgICAgIGhpc3Rvcnkgb2YgY2hhbmdlcwogRkFRICAgICAgICAgICAgIEZyZXF1ZW50bHkg QXNrZWQgUXVlc3Rpb25zIGFib3V0IHpsaWIKIElOREVYICAgICAgICAgICB0aGlzIGZpbGUKLU1h a2VmaWxlICAgICAgICBtYWtlZmlsZSBmb3IgVW5peCAoZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZSkK LU1ha2VmaWxlLmluICAgICBtYWtlZmlsZSBmb3IgVW5peCAodGVtcGxhdGUgZm9yIGNvbmZpZ3Vy ZSkKK01ha2VmaWxlICAgICAgICBkdW1teSBNYWtlZmlsZSB0aGF0IHRlbGxzIHlvdSB0byAuL2Nv bmZpZ3VyZQorTWFrZWZpbGUuaW4gICAgIHRlbXBsYXRlIGZvciBVbml4IE1ha2VmaWxlCiBSRUFE TUUgICAgICAgICAgZ3Vlc3Mgd2hhdAotYWxnb3JpdGhtLnR4dCAgIGRlc2NyaXB0aW9uIG9mIHRo ZSAoZGUpY29tcHJlc3Npb24gYWxnb3JpdGhtCiBjb25maWd1cmUgICAgICAgY29uZmlndXJlIHNj cmlwdCBmb3IgVW5peAotemNvbmYuaW4uaCAgICAgIHRlbXBsYXRlIGZvciB6Y29uZi5oICh1c2Vk IGJ5IGNvbmZpZ3VyZSkKK21ha2Vfdm1zLmNvbSAgICBtYWtlZmlsZSBmb3IgVk1TCit0ZXN0L2V4 YW1wbGUuYyAgemxpYiB1c2FnZXMgZXhhbXBsZXMgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvbWlu aWd6aXAuYyBtaW5pbWFsIGd6aXAtbGlrZSBmdW5jdGlvbmFsaXR5IGZvciBidWlsZCB0ZXN0aW5n Cit0ZXN0L2luZmNvdmVyLmMgaW5mKi5jIGNvZGUgY292ZXJhZ2UgZm9yIGJ1aWxkIGNvdmVyYWdl IHRlc3RpbmcKK3RyZWVidWlsZC54bWwgICBYTUwgZGVzY3JpcHRpb24gb2Ygc291cmNlIGZpbGUg ZGVwZW5kZW5jaWVzCit6Y29uZi5oLmNtYWtlaW4gemNvbmYuaCB0ZW1wbGF0ZSBmb3IgY21ha2UK K3pjb25mLmguaW4gICAgICB6Y29uZi5oIHRlbXBsYXRlIGZvciBjb25maWd1cmUKK3psaWIuMyAg ICAgICAgICBNYW4gcGFnZSBmb3IgemxpYgoremxpYi4zLnBkZiAgICAgIE1hbiBwYWdlIGluIFBE RiBmb3JtYXQKK3psaWIubWFwICAgICAgICBMaW51eCBzeW1ib2wgaW5mb3JtYXRpb24KK3psaWIu cGMuaW4gICAgICBUZW1wbGF0ZSBmb3IgcGtnLWNvbmZpZyBkZXNjcmlwdG9yCit6bGliLnBjLmNt YWtlaW4gemxpYi5wYyB0ZW1wbGF0ZSBmb3IgY21ha2UKK3psaWIyYW5zaSAgICAgICBwZXJsIHNj cmlwdCB0byBjb252ZXJ0IHNvdXJjZSBmaWxlcyBmb3IgQysrIGNvbXBpbGF0aW9uCiAKIGFtaWdh LyAgICAgICAgICBtYWtlZmlsZXMgZm9yIEFtaWdhIFNBUyBDCi1hczQwMC8gICAgICAgICAgbWFr ZWZpbGVzIGZvciBJQk0gQVMvNDAwCithczQwMC8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBUy80 MDAKK2RvYy8gICAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXRzIGFuZCBhbGdvcml0 aG1zCiBtc2Rvcy8gICAgICAgICAgbWFrZWZpbGVzIGZvciBNU0RPUworbmludGVuZG9kcy8gICAg IG1ha2VmaWxlIGZvciBOaW50ZW5kbyBEUwogb2xkLyAgICAgICAgICAgIG1ha2VmaWxlcyBmb3Ig dmFyaW91cyBhcmNoaXRlY3R1cmVzIGFuZCB6bGliIGRvY3VtZW50YXRpb24KICAgICAgICAgICAg ICAgICBmaWxlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHVwZGF0ZWQgZm9yIHpsaWIgMS4yLngK LXByb2plY3RzLyAgICAgICBwcm9qZWN0cyBmb3IgdmFyaW91cyBJbnRlZ3JhdGVkIERldmVsb3Bt ZW50IEVudmlyb25tZW50cwogcW54LyAgICAgICAgICAgIG1ha2VmaWxlcyBmb3IgUU5YCit3YXRj b20vICAgICAgICAgbWFrZWZpbGVzIGZvciBPcGVuV2F0Y29tCiB3aW4zMi8gICAgICAgICAgbWFr ZWZpbGVzIGZvciBXaW5kb3dzCiAKLSAgICAgICAgICAgICAgICB6bGliIHB1YmxpYyBoZWFkZXIg ZmlsZXMgKG11c3QgYmUga2VwdCk6CisgICAgICAgICAgICAgICAgemxpYiBwdWJsaWMgaGVhZGVy IGZpbGVzIChyZXF1aXJlZCBmb3IgbGlicmFyeSB1c2UpOgogemNvbmYuaAogemxpYi5oCiAKQEAg LTI4LDcgKzQyLDExIEBACiBjcmMzMi5oCiBkZWZsYXRlLmMKIGRlZmxhdGUuaAotZ3ppby5jCitn emNsb3NlLmMKK2d6Z3V0cy5oCitnemxpYi5jCitnenJlYWQuYworZ3p3cml0ZS5jCiBpbmZiYWNr LmMKIGluZmZhc3QuYwogaW5mZmFzdC5oCkBAIC00Myw5ICs2MSw4IEBACiB6dXRpbC5jCiB6dXRp bC5oCiAKLSAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9yIHNhbXBsZSBwcm9ncmFtczoK LWV4YW1wbGUuYwotbWluaWd6aXAuYworICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Ig c2FtcGxlIHByb2dyYW1zCitTZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzCiAKLSAgICAgICAg ICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb24gYnkgdGhpcmQgcGFydGllcworICAgICAg ICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbnMgYnkgdGhpcmQgcGFydGllcwogU2Vl IGNvbnRyaWIvUkVBRE1FLmNvbnRyaWIKZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5 N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvTWFrZWZpbGUKLS0tIGEvc3lzL3NyYy9jbWQvZ3Mvemxp Yi9NYWtlZmlsZQlXZWQgTWF5IDI3IDAwOjA5OjQ2IDIwMjAgKzAyMDAKKysrIGIvc3lzL3NyYy9j bWQvZ3MvemxpYi9NYWtlZmlsZQlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEs MTU0ICsxLDUgQEAKLSMgTWFrZWZpbGUgZm9yIHpsaWIKLSMgQ29weXJpZ2h0IChDKSAxOTk1LTIw MDMgSmVhbi1sb3VwIEdhaWxseS4KLSMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFu ZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorYWxsOgorCS1AZWNobyAiUGxl YXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlvdS4iCiAKLSMgVG8gY29tcGlsZSBh bmQgdGVzdCwgdHlwZToKLSMgICAgLi9jb25maWd1cmU7IG1ha2UgdGVzdAotIyBUaGUgY2FsbCBv ZiBjb25maWd1cmUgaXMgb3B0aW9uYWwgaWYgeW91IGRvbid0IGhhdmUgc3BlY2lhbCByZXF1aXJl bWVudHMKLSMgSWYgeW91IHdpc2ggdG8gYnVpbGQgemxpYiBhcyBhIHNoYXJlZCBsaWJyYXJ5LCB1 c2U6IC4vY29uZmlndXJlIC1zCi0KLSMgVG8gdXNlIHRoZSBhc20gY29kZSwgdHlwZToKLSMgICAg Y3AgY29udHJpYi9hc20/ODYvbWF0Y2guUyAuL21hdGNoLlMKLSMgICAgbWFrZSBMT0M9LURBU01W IE9CSkE9bWF0Y2gubwotCi0jIFRvIGluc3RhbGwgL3Vzci9sb2NhbC9saWIvbGliei4qIGFuZCAv dXNyL2xvY2FsL2luY2x1ZGUvemxpYi5oLCB0eXBlOgotIyAgICBtYWtlIGluc3RhbGwKLSMgVG8g aW5zdGFsbCBpbiAkSE9NRSBpbnN0ZWFkIG9mIC91c3IvbG9jYWwsIHVzZToKLSMgICAgbWFrZSBp bnN0YWxsIHByZWZpeD0kSE9NRQotCi1DQz1jYwotCi1DRkxBR1M9LU8KLSNDRkxBR1M9LU8gLURN QVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTcKLSNDRkxBR1M9LWcgLURERUJVRwotI0NGTEFH Uz0tTzMgLVdhbGwgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV2NvbnZlcnNpb24g XAotIyAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcwot Ci1MREZMQUdTPWxpYnouYQotTERTSEFSRUQ9JChDQykKLUNQUD0kKENDKSAtRQotCi1MSUJTPWxp YnouYQotU0hBUkVETElCPWxpYnouc28KLVNIQVJFRExJQlY9bGliei5zby4xLjIuMgotU0hBUkVE TElCTT1saWJ6LnNvLjEKLQotQVI9YXIgcmMKLVJBTkxJQj1yYW5saWIKLVRBUj10YXIKLVNIRUxM PS9iaW4vc2gKLUVYRT0KLQotcHJlZml4ID0gL3Vzci9sb2NhbAotZXhlY19wcmVmaXggPSAke3By ZWZpeH0KLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgotaW5jbHVkZWRpciA9ICR7cHJlZml4 fS9pbmNsdWRlCi1tYW5kaXIgPSAke3ByZWZpeH0vc2hhcmUvbWFuCi1tYW4zZGlyID0gJHttYW5k aXJ9L21hbjMKLQotT0JKUyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZ3ppby5vIHVu Y29tcHIubyBkZWZsYXRlLm8gdHJlZXMubyBcCi0gICAgICAgenV0aWwubyBpbmZsYXRlLm8gaW5m YmFjay5vIGluZnRyZWVzLm8gaW5mZmFzdC5vCi0KLU9CSkEgPQotIyB0byB1c2UgdGhlIGFzbSBj b2RlOiBtYWtlIE9CSkE9bWF0Y2gubwotCi1URVNUX09CSlMgPSBleGFtcGxlLm8gbWluaWd6aXAu bwotCi1hbGw6IGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkKLQotY2hlY2s6IHRlc3QKLXRl c3Q6IGFsbAotCUBMRF9MSUJSQVJZX1BBVEg9LjokKExEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQg TERfTElCUkFSWV9QQVRIOyBcCi0JZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21p bmlnemlwIC1kIHx8IFwKLQkgIGVjaG8gJwkJKioqIG1pbmlnemlwIHRlc3QgRkFJTEVEICoqKicg OyBcCi0JaWYgLi9leGFtcGxlOyB0aGVuIFwKLQkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBPSyAq KionOyBcCi0JZWxzZSBcCi0JICBlY2hvICcJCSoqKiB6bGliIHRlc3QgRkFJTEVEICoqKic7IFwK LQlmaQotCi1saWJ6LmE6ICQoT0JKUykgJChPQkpBKQotCSQoQVIpICRAICQoT0JKUykgJChPQkpB KQotCS1AICgkKFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCi0KLW1hdGNoLm86 IG1hdGNoLlMKLQkkKENQUCkgbWF0Y2guUyA+IF9tYXRjaC5zCi0JJChDQykgLWMgX21hdGNoLnMK LQltdiBfbWF0Y2gubyBtYXRjaC5vCi0Jcm0gLWYgX21hdGNoLnMKLQotJChTSEFSRURMSUJWKTog JChPQkpTKQotCSQoTERTSEFSRUQpIC1vICRAICQoT0JKUykKLQlybSAtZiAkKFNIQVJFRExJQikg JChTSEFSRURMSUJNKQotCWxuIC1zICRAICQoU0hBUkVETElCKQotCWxuIC1zICRAICQoU0hBUkVE TElCTSkKLQotZXhhbXBsZSQoRVhFKTogZXhhbXBsZS5vICQoTElCUykKLQkkKENDKSAkKENGTEFH UykgLW8gJEAgZXhhbXBsZS5vICQoTERGTEFHUykKLQotbWluaWd6aXAkKEVYRSk6IG1pbmlnemlw Lm8gJChMSUJTKQotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoTERGTEFHUykK LQotaW5zdGFsbDogJChMSUJTKQotCS1AaWYgWyAhIC1kICQoZXhlY19wcmVmaXgpIF07IHRoZW4g bWtkaXIgLXAgJChleGVjX3ByZWZpeCk7IGZpCi0JLUBpZiBbICEgLWQgJChpbmNsdWRlZGlyKSAg XTsgdGhlbiBta2RpciAtcCAkKGluY2x1ZGVkaXIpOyBmaQotCS1AaWYgWyAhIC1kICQobGliZGly KSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChsaWJkaXIpOyBmaQotCS1AaWYgWyAhIC1kICQobWFu M2RpcikgICAgIF07IHRoZW4gbWtkaXIgLXAgJChtYW4zZGlyKTsgZmkKLQljcCB6bGliLmggemNv bmYuaCAkKGluY2x1ZGVkaXIpCi0JY2htb2QgNjQ0ICQoaW5jbHVkZWRpcikvemxpYi5oICQoaW5j bHVkZWRpcikvemNvbmYuaAotCWNwICQoTElCUykgJChsaWJkaXIpCi0JY2QgJChsaWJkaXIpOyBj aG1vZCA3NTUgJChMSUJTKQotCS1AKGNkICQobGliZGlyKTsgJChSQU5MSUIpIGxpYnouYSB8fCB0 cnVlKSA+L2Rldi9udWxsIDI+JjEKLQljZCAkKGxpYmRpcik7IGlmIHRlc3QgLWYgJChTSEFSRURM SUJWKTsgdGhlbiBcCi0JICBybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAotCSAg bG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQik7IFwKLQkgIGxuIC1zICQoU0hBUkVETElC VikgJChTSEFSRURMSUJNKTsgXAotCSAgKGxkY29uZmlnIHx8IHRydWUpICA+L2Rldi9udWxsIDI+ JjE7IFwKLQlmaQotCWNwIHpsaWIuMyAkKG1hbjNkaXIpCi0JY2htb2QgNjQ0ICQobWFuM2Rpcikv emxpYi4zCi0jIFRoZSByYW5saWIgaW4gaW5zdGFsbCBpcyBuZWVkZWQgb24gTmVYVFNURVAgd2hp Y2ggY2hlY2tzIGZpbGUgdGltZXMKLSMgbGRjb25maWcgaXMgZm9yIExpbnV4Ci0KLXVuaW5zdGFs bDoKLQljZCAkKGluY2x1ZGVkaXIpOyBcCi0JY2QgJChsaWJkaXIpOyBybSAtZiBsaWJ6LmE7IFwK LQlpZiB0ZXN0IC1mICQoU0hBUkVETElCVik7IHRoZW4gXAotCSAgcm0gLWYgJChTSEFSRURMSUJW KSAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAotCWZpCi0JY2QgJChtYW4zZGlyKTsgcm0g LWYgemxpYi4zCi0KLW1vc3RseWNsZWFuOiBjbGVhbgotY2xlYW46Ci0Jcm0gLWYgKi5vICp+IGV4 YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkgXAotCSAgIGxpYnouKiBmb28uZ3ogc29fbG9jYXRp b25zIFwKLQkgICBfbWF0Y2gucyBtYWtldHJlZSBjb250cmliL2luZmJhY2s5LyoubwotCi1tYWlu dGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KLWRpc3RjbGVhbjogY2xlYW4KLQljcCAtcCBNYWtlZmls ZS5pbiBNYWtlZmlsZQotCWNwIC1wIHpjb25mLmluLmggemNvbmYuaAotCXJtIC1mIC5EU19TdG9y ZQotCi10YWdzOgotCWV0YWdzICouW2NoXQotCi1kZXBlbmQ6Ci0JbWFrZWRlcGVuZCAtLSAkKENG TEFHUykgLS0gKi5bY2hdCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBl bmQgZGVwZW5kcyBvbiBpdC4KLQotYWRsZXIzMi5vOiB6bGliLmggemNvbmYuaAotY29tcHJlc3Mu bzogemxpYi5oIHpjb25mLmgKLWNyYzMyLm86IGNyYzMyLmggemxpYi5oIHpjb25mLmgKLWRlZmxh dGUubzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWV4YW1wbGUubzogemxpYi5o IHpjb25mLmgKLWd6aW8ubzogenV0aWwuaCB6bGliLmggemNvbmYuaAotaW5mZmFzdC5vOiB6dXRp bC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaAotaW5mbGF0 ZS5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3Qu aAotaW5mYmFjay5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5o IGluZmZhc3QuaAotaW5mdHJlZXMubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5o Ci1taW5pZ3ppcC5vOiB6bGliLmggemNvbmYuaAotdHJlZXMubzogZGVmbGF0ZS5oIHp1dGlsLmgg emxpYi5oIHpjb25mLmggdHJlZXMuaAotdW5jb21wci5vOiB6bGliLmggemNvbmYuaAotenV0aWwu bzogenV0aWwuaCB6bGliLmggemNvbmYuaAorZGlzdGNsZWFuOgorCW1ha2UgLWYgTWFrZWZpbGUu aW4gZGlzdGNsZWFuCmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3Jj L2NtZC9ncy96bGliL01ha2VmaWxlLmluCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvTWFrZWZp bGUuaW4JV2VkIE1heSAyNyAwMDowOTo0NiAyMDIwICswMjAwCisrKyBiL3N5cy9zcmMvY21kL2dz L3psaWIvTWFrZWZpbGUuaW4JV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBAIC0xLDEx ICsxLDExIEBACiAjIE1ha2VmaWxlIGZvciB6bGliCi0jIENvcHlyaWdodCAoQykgMTk5NS0yMDAz IEplYW4tbG91cCBHYWlsbHkuCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBH YWlsbHksIE1hcmsgQWRsZXIKICMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1 c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogCiAjIFRvIGNvbXBpbGUgYW5kIHRl c3QsIHR5cGU6CiAjICAgIC4vY29uZmlndXJlOyBtYWtlIHRlc3QKLSMgVGhlIGNhbGwgb2YgY29u ZmlndXJlIGlzIG9wdGlvbmFsIGlmIHlvdSBkb24ndCBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnRz Ci0jIElmIHlvdSB3aXNoIHRvIGJ1aWxkIHpsaWIgYXMgYSBzaGFyZWQgbGlicmFyeSwgdXNlOiAu L2NvbmZpZ3VyZSAtcworIyBOb3JtYWxseSBjb25maWd1cmUgYnVpbGRzIGJvdGggYSBzdGF0aWMg YW5kIGEgc2hhcmVkIGxpYnJhcnkuCisjIElmIHlvdSB3YW50IHRvIGJ1aWxkIGp1c3QgYSBzdGF0 aWMgbGlicmFyeSwgdXNlOiAuL2NvbmZpZ3VyZSAtLXN0YXRpYwogCiAjIFRvIHVzZSB0aGUgYXNt IGNvZGUsIHR5cGU6CiAjICAgIGNwIGNvbnRyaWIvYXNtPzg2L21hdGNoLlMgLi9tYXRjaC5TCkBA IC0yMCwyMSArMjAsMjcgQEAKIAogQ0ZMQUdTPS1PCiAjQ0ZMQUdTPS1PIC1ETUFYX1dCSVRTPTE0 IC1ETUFYX01FTV9MRVZFTD03Ci0jQ0ZMQUdTPS1nIC1EREVCVUcKKyNDRkxBR1M9LWcgLURaTElC X0RFQlVHCiAjQ0ZMQUdTPS1PMyAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRo IC1XY29udmVyc2lvbiBcCiAjICAgICAgICAgICAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2lu Zy1wcm90b3R5cGVzCiAKLUxERkxBR1M9bGliei5hCitTRkxBR1M9LU8KK0xERkxBR1M9CitURVNU X0xERkxBR1M9LUwuIGxpYnouYQogTERTSEFSRUQ9JChDQykKIENQUD0kKENDKSAtRQogCi1MSUJT PWxpYnouYQorU1RBVElDTElCPWxpYnouYQogU0hBUkVETElCPWxpYnouc28KLVNIQVJFRExJQlY9 bGliei5zby4xLjIuMgorU0hBUkVETElCVj1saWJ6LnNvLjEuMi4xMQogU0hBUkVETElCTT1saWJ6 LnNvLjEKK0xJQlM9JChTVEFUSUNMSUIpICQoU0hBUkVETElCVikKIAotQVI9YXIgcmMKK0FSPWFy CitBUkZMQUdTPXJjCiBSQU5MSUI9cmFubGliCitMRENPTkZJRz1sZGNvbmZpZworTERTSEFSRURM SUJDPS1sYwogVEFSPXRhcgogU0hFTEw9L2Jpbi9zaAogRVhFPQpAQCAtNDIsMzMgKzQ4LDg3IEBA CiBwcmVmaXggPSAvdXNyL2xvY2FsCiBleGVjX3ByZWZpeCA9ICR7cHJlZml4fQogbGliZGlyID0g JHtleGVjX3ByZWZpeH0vbGliCitzaGFyZWRsaWJkaXIgPSAke2xpYmRpcn0KIGluY2x1ZGVkaXIg PSAke3ByZWZpeH0vaW5jbHVkZQogbWFuZGlyID0gJHtwcmVmaXh9L3NoYXJlL21hbgogbWFuM2Rp ciA9ICR7bWFuZGlyfS9tYW4zCitwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCitT UkNESVI9CitaSU5DPQorWklOQ09VVD0tSS4KIAotT0JKUyA9IGFkbGVyMzIubyBjb21wcmVzcy5v IGNyYzMyLm8gZ3ppby5vIHVuY29tcHIubyBkZWZsYXRlLm8gdHJlZXMubyBcCi0gICAgICAgenV0 aWwubyBpbmZsYXRlLm8gaW5mYmFjay5vIGluZnRyZWVzLm8gaW5mZmFzdC5vCitPQkpaID0gYWRs ZXIzMi5vIGNyYzMyLm8gZGVmbGF0ZS5vIGluZmJhY2subyBpbmZmYXN0Lm8gaW5mbGF0ZS5vIGlu ZnRyZWVzLm8gdHJlZXMubyB6dXRpbC5vCitPQkpHID0gY29tcHJlc3MubyB1bmNvbXByLm8gZ3pj bG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vCitPQkpDID0gJChPQkpaKSAkKE9CSkcp CiAKK1BJQ19PQkpaID0gYWRsZXIzMi5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGluZmJhY2subG8g aW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHp1dGlsLmxvCitQSUNf T0JKRyA9IGNvbXByZXNzLmxvIHVuY29tcHIubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQu bG8gZ3p3cml0ZS5sbworUElDX09CSkMgPSAkKFBJQ19PQkpaKSAkKFBJQ19PQkpHKQorCisjIHRv IHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vLCBQSUNfT0JKQT1tYXRjaC5sbwog T0JKQSA9Ci0jIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vCitQSUNfT0JK QSA9CiAKLVRFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCitPQkpTID0gJChPQkpDKSAk KE9CSkEpCiAKLWFsbDogZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKQorUElDX09CSlMgPSAk KFBJQ19PQkpDKSAkKFBJQ19PQkpBKQorCithbGw6IHN0YXRpYyBzaGFyZWQKKworc3RhdGljOiBl eGFtcGxlJChFWEUpIG1pbmlnemlwJChFWEUpCisKK3NoYXJlZDogZXhhbXBsZXNoJChFWEUpIG1p bmlnemlwc2gkKEVYRSkKKworYWxsNjQ6IGV4YW1wbGU2NCQoRVhFKSBtaW5pZ3ppcDY0JChFWEUp CiAKIGNoZWNrOiB0ZXN0Ci10ZXN0OiBhbGwKLQlATERfTElCUkFSWV9QQVRIPS46JChMRF9MSUJS QVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAotCWVjaG8gaGVsbG8gd29ybGQg fCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCB8fCBcCi0JICBlY2hvICcJCSoqKiBtaW5pZ3pp cCB0ZXN0IEZBSUxFRCAqKionIDsgXAotCWlmIC4vZXhhbXBsZTsgdGhlbiBcCisKK3Rlc3Q6IGFs bCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKKwordGVzdHN0YXRpYzogc3RhdGljCisJQFRNUFNUPXRt cHN0XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlw IC1kICYmIC4vZXhhbXBsZSAkJFRNUFNUIDsgdGhlbiBcCiAJICBlY2hvICcJCSoqKiB6bGliIHRl c3QgT0sgKioqJzsgXAogCWVsc2UgXAotCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IEZBSUxFRCAq KionOyBcCi0JZmkKKwkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7 IFwKKwlmaTsgXAorCXJtIC1mICQkVE1QU1QKIAotbGliei5hOiAkKE9CSlMpICQoT0JKQSkKLQkk KEFSKSAkQCAkKE9CSlMpICQoT0JKQSkKK3Rlc3RzaGFyZWQ6IHNoYXJlZAorCUBMRF9MSUJSQVJZ X1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsg XAorCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBv cnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCisJRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChEWUxE X0xJQlJBUllfUEFUSCkgOyBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg7IFwKKwlTSExJQl9QQVRI PWBwd2RgOiQoU0hMSUJfUEFUSCkgOyBleHBvcnQgU0hMSUJfUEFUSDsgXAorCVRNUFNIPXRtcHNo XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXBzaCB8IC4vbWluaWd6aXBz aCAtZCAmJiAuL2V4YW1wbGVzaCAkJFRNUFNIOyB0aGVuIFwKKwkgIGVjaG8gJwkJKioqIHpsaWIg c2hhcmVkIHRlc3QgT0sgKioqJzsgXAorCWVsc2UgXAorCSAgZWNobyAnCQkqKiogemxpYiBzaGFy ZWQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKKwlmaTsgXAorCXJtIC1mICQkVE1QU0gKKwor dGVzdDY0OiBhbGw2NAorCUBUTVA2ND10bXA2NF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQg fCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQgJCRUTVA2NDsg dGhlbiBcCisJICBlY2hvICcJCSoqKiB6bGliIDY0LWJpdCB0ZXN0IE9LICoqKic7IFwKKwllbHNl IFwKKwkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBc CisJZmk7IFwKKwlybSAtZiAkJFRNUDY0CisKK2luZmNvdmVyLm86ICQoU1JDRElSKXRlc3QvaW5m Y292ZXIuYyAkKFNSQ0RJUil6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNP VVQpIC1jIC1vICRAICQoU1JDRElSKXRlc3QvaW5mY292ZXIuYworCitpbmZjb3ZlcjogaW5mY292 ZXIubyBsaWJ6LmEKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgaW5mY292ZXIubyBsaWJ6LmEKKwor Y292ZXI6IGluZmNvdmVyCisJcm0gLWYgKi5nY2RhCisJLi9pbmZjb3ZlcgorCWdjb3YgaW5mKi5j CisKK2xpYnouYTogJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCS1AICgk KFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCiAKIG1hdGNoLm86IG1hdGNoLlMK QEAgLTc3LDc4ICsxMzcsMjc0IEBACiAJbXYgX21hdGNoLm8gbWF0Y2gubwogCXJtIC1mIF9tYXRj aC5zCiAKLSQoU0hBUkVETElCVik6ICQoT0JKUykKLQkkKExEU0hBUkVEKSAtbyAkQCAkKE9CSlMp CittYXRjaC5sbzogbWF0Y2guUworCSQoQ1BQKSBtYXRjaC5TID4gX21hdGNoLnMKKwkkKENDKSAt YyAtZlBJQyBfbWF0Y2gucworCW12IF9tYXRjaC5vIG1hdGNoLmxvCisJcm0gLWYgX21hdGNoLnMK KworZXhhbXBsZS5vOiAkKFNSQ0RJUil0ZXN0L2V4YW1wbGUuYyAkKFNSQ0RJUil6bGliLmggemNv bmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNPVVQpIC1jIC1vICRAICQoU1JDRElSKXRlc3Qv ZXhhbXBsZS5jCisKK21pbmlnemlwLm86ICQoU1JDRElSKXRlc3QvbWluaWd6aXAuYyAkKFNSQ0RJ Uil6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkNPVVQpIC1jIC1vICRAICQo U1JDRElSKXRlc3QvbWluaWd6aXAuYworCitleGFtcGxlNjQubzogJChTUkNESVIpdGVzdC9leGFt cGxlLmMgJChTUkNESVIpemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgJChaSU5DT1VU KSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAICQoU1JDRElSKXRlc3QvZXhhbXBsZS5j CisKK21pbmlnemlwNjQubzogJChTUkNESVIpdGVzdC9taW5pZ3ppcC5jICQoU1JDRElSKXpsaWIu aCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpICQoWklOQ09VVCkgLURfRklMRV9PRkZTRVRfQklU Uz02NCAtYyAtbyAkQCAkKFNSQ0RJUil0ZXN0L21pbmlnemlwLmMKKworCithZGxlcjMyLm86ICQo U1JDRElSKWFkbGVyMzIuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JD RElSKWFkbGVyMzIuYworCitjcmMzMi5vOiAkKFNSQ0RJUiljcmMzMi5jCisJJChDQykgJChDRkxB R1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpY3JjMzIuYworCitkZWZsYXRlLm86ICQoU1JD RElSKWRlZmxhdGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElS KWRlZmxhdGUuYworCitpbmZiYWNrLm86ICQoU1JDRElSKWluZmJhY2suYworCSQoQ0MpICQoQ0ZM QUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWluZmJhY2suYworCitpbmZmYXN0Lm86ICQo U1JDRElSKWluZmZhc3QuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JD RElSKWluZmZhc3QuYworCitpbmZsYXRlLm86ICQoU1JDRElSKWluZmxhdGUuYworCSQoQ0MpICQo Q0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWluZmxhdGUuYworCitpbmZ0cmVlcy5v OiAkKFNSQ0RJUilpbmZ0cmVlcy5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAg JChTUkNESVIpaW5mdHJlZXMuYworCit0cmVlcy5vOiAkKFNSQ0RJUil0cmVlcy5jCisJJChDQykg JChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpdHJlZXMuYworCit6dXRpbC5vOiAk KFNSQ0RJUil6dXRpbC5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNE SVIpenV0aWwuYworCitjb21wcmVzcy5vOiAkKFNSQ0RJUiljb21wcmVzcy5jCisJJChDQykgJChD RkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChTUkNESVIpY29tcHJlc3MuYworCit1bmNvbXByLm86 ICQoU1JDRElSKXVuY29tcHIuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQo U1JDRElSKXVuY29tcHIuYworCitnemNsb3NlLm86ICQoU1JDRElSKWd6Y2xvc2UuYworCSQoQ0Mp ICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JDRElSKWd6Y2xvc2UuYworCitnemxpYi5v OiAkKFNSQ0RJUilnemxpYi5jCisJJChDQykgJChDRkxBR1MpICQoWklOQykgLWMgLW8gJEAgJChT UkNESVIpZ3psaWIuYworCitnenJlYWQubzogJChTUkNESVIpZ3pyZWFkLmMKKwkkKENDKSAkKENG TEFHUykgJChaSU5DKSAtYyAtbyAkQCAkKFNSQ0RJUilnenJlYWQuYworCitnendyaXRlLm86ICQo U1JDRElSKWd6d3JpdGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKFpJTkMpIC1jIC1vICRAICQoU1JD RElSKWd6d3JpdGUuYworCisKK2FkbGVyMzIubG86ICQoU1JDRElSKWFkbGVyMzIuYworCS1AbWtk aXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAkKFNGTEFHUykgJCha SU5DKSAtRFBJQyAtYyAtbyBvYmpzL2FkbGVyMzIubyAkKFNSQ0RJUilhZGxlcjMyLmMKKwktQG12 IG9ianMvYWRsZXIzMi5vICRACisKK2NyYzMyLmxvOiAkKFNSQ0RJUiljcmMzMi5jCisJLUBta2Rp ciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJ TkMpIC1EUElDIC1jIC1vIG9ianMvY3JjMzIubyAkKFNSQ0RJUiljcmMzMi5jCisJLUBtdiBvYmpz L2NyYzMyLm8gJEAKKworZGVmbGF0ZS5sbzogJChTUkNESVIpZGVmbGF0ZS5jCisJLUBta2RpciBv YmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJTkMp IC1EUElDIC1jIC1vIG9ianMvZGVmbGF0ZS5vICQoU1JDRElSKWRlZmxhdGUuYworCS1AbXYgb2Jq cy9kZWZsYXRlLm8gJEAKKworaW5mYmFjay5sbzogJChTUkNESVIpaW5mYmFjay5jCisJLUBta2Rp ciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAkKFpJ TkMpIC1EUElDIC1jIC1vIG9ianMvaW5mYmFjay5vICQoU1JDRElSKWluZmJhY2suYworCS1AbXYg b2Jqcy9pbmZiYWNrLm8gJEAKKworaW5mZmFzdC5sbzogJChTUkNESVIpaW5mZmFzdC5jCisJLUBt a2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdTKSAk KFpJTkMpIC1EUElDIC1jIC1vIG9ianMvaW5mZmFzdC5vICQoU1JDRElSKWluZmZhc3QuYworCS1A bXYgb2Jqcy9pbmZmYXN0Lm8gJEAKKworaW5mbGF0ZS5sbzogJChTUkNESVIpaW5mbGF0ZS5jCisJ LUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdT KSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvaW5mbGF0ZS5vICQoU1JDRElSKWluZmxhdGUuYwor CS1AbXYgb2Jqcy9pbmZsYXRlLm8gJEAKKworaW5mdHJlZXMubG86ICQoU1JDRElSKWluZnRyZWVz LmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChT RkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9pbmZ0cmVlcy5vICQoU1JDRElSKWluZnRy ZWVzLmMKKwktQG12IG9ianMvaW5mdHJlZXMubyAkQAorCit0cmVlcy5sbzogJChTUkNESVIpdHJl ZXMuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAk KFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL3RyZWVzLm8gJChTUkNESVIpdHJlZXMu YworCS1AbXYgb2Jqcy90cmVlcy5vICRACisKK3p1dGlsLmxvOiAkKFNSQ0RJUil6dXRpbC5jCisJ LUBta2RpciBvYmpzIDI+L2Rldi9udWxsIHx8IHRlc3QgLWQgb2JqcworCSQoQ0MpICQoU0ZMQUdT KSAkKFpJTkMpIC1EUElDIC1jIC1vIG9ianMvenV0aWwubyAkKFNSQ0RJUil6dXRpbC5jCisJLUBt diBvYmpzL3p1dGlsLm8gJEAKKworY29tcHJlc3MubG86ICQoU1JDRElSKWNvbXByZXNzLmMKKwkt QG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1Mp ICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9jb21wcmVzcy5vICQoU1JDRElSKWNvbXByZXNzLmMK KwktQG12IG9ianMvY29tcHJlc3MubyAkQAorCit1bmNvbXByLmxvOiAkKFNSQ0RJUil1bmNvbXBy LmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChT RkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy91bmNvbXByLm8gJChTUkNESVIpdW5jb21w ci5jCisJLUBtdiBvYmpzL3VuY29tcHIubyAkQAorCitnemNsb3NlLmxvOiAkKFNSQ0RJUilnemNs b3NlLmMKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykg JChTRkxBR1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9nemNsb3NlLm8gJChTUkNESVIpZ3pj bG9zZS5jCisJLUBtdiBvYmpzL2d6Y2xvc2UubyAkQAorCitnemxpYi5sbzogJChTUkNESVIpZ3ps aWIuYworCS1AbWtkaXIgb2JqcyAyPi9kZXYvbnVsbCB8fCB0ZXN0IC1kIG9ianMKKwkkKENDKSAk KFNGTEFHUykgJChaSU5DKSAtRFBJQyAtYyAtbyBvYmpzL2d6bGliLm8gJChTUkNESVIpZ3psaWIu YworCS1AbXYgb2Jqcy9nemxpYi5vICRACisKK2d6cmVhZC5sbzogJChTUkNESVIpZ3pyZWFkLmMK KwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxB R1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9nenJlYWQubyAkKFNSQ0RJUilnenJlYWQuYwor CS1AbXYgb2Jqcy9nenJlYWQubyAkQAorCitnendyaXRlLmxvOiAkKFNSQ0RJUilnendyaXRlLmMK KwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxB R1MpICQoWklOQykgLURQSUMgLWMgLW8gb2Jqcy9nendyaXRlLm8gJChTUkNESVIpZ3p3cml0ZS5j CisJLUBtdiBvYmpzL2d6d3JpdGUubyAkQAorCisKK3BsYWNlYm8gJChTSEFSRURMSUJWKTogJChQ SUNfT0JKUykgbGliei5hCisJJChMRFNIQVJFRCkgJChTRkxBR1MpIC1vICRAICQoUElDX09CSlMp ICQoTERTSEFSRURMSUJDKSAkKExERkxBR1MpCiAJcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVE TElCTSkKIAlsbiAtcyAkQCAkKFNIQVJFRExJQikKIAlsbiAtcyAkQCAkKFNIQVJFRExJQk0pCisJ LUBybWRpciBvYmpzCiAKLWV4YW1wbGUkKEVYRSk6IGV4YW1wbGUubyAkKExJQlMpCi0JJChDQykg JChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKExERkxBR1MpCitleGFtcGxlJChFWEUpOiBleGFt cGxlLm8gJChTVEFUSUNMSUIpCisJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKFRF U1RfTERGTEFHUykKIAotbWluaWd6aXAkKEVYRSk6IG1pbmlnemlwLm8gJChMSUJTKQotCSQoQ0Mp ICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoTERGTEFHUykKK21pbmlnemlwJChFWEUpOiBt aW5pZ3ppcC5vICQoU1RBVElDTElCKQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5v ICQoVEVTVF9MREZMQUdTKQogCi1pbnN0YWxsOiAkKExJQlMpCi0JLUBpZiBbICEgLWQgJChleGVj X3ByZWZpeCkgXTsgdGhlbiBta2RpciAtcCAkKGV4ZWNfcHJlZml4KTsgZmkKLQktQGlmIFsgISAt ZCAkKGluY2x1ZGVkaXIpICBdOyB0aGVuIG1rZGlyIC1wICQoaW5jbHVkZWRpcik7IGZpCi0JLUBp ZiBbICEgLWQgJChsaWJkaXIpICAgICAgXTsgdGhlbiBta2RpciAtcCAkKGxpYmRpcik7IGZpCi0J LUBpZiBbICEgLWQgJChtYW4zZGlyKSAgICAgXTsgdGhlbiBta2RpciAtcCAkKG1hbjNkaXIpOyBm aQotCWNwIHpsaWIuaCB6Y29uZi5oICQoaW5jbHVkZWRpcikKLQljaG1vZCA2NDQgJChpbmNsdWRl ZGlyKS96bGliLmggJChpbmNsdWRlZGlyKS96Y29uZi5oCi0JY3AgJChMSUJTKSAkKGxpYmRpcikK LQljZCAkKGxpYmRpcik7IGNobW9kIDc1NSAkKExJQlMpCi0JLUAoY2QgJChsaWJkaXIpOyAkKFJB TkxJQikgbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQotCWNkICQobGliZGlyKTsgaWYg dGVzdCAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKLQkgIHJtIC1mICQoU0hBUkVETElCKSAkKFNI QVJFRExJQk0pOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKTsgXAotCSAg bG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCi0JICAobGRjb25maWcgfHwgdHJ1 ZSkgID4vZGV2L251bGwgMj4mMTsgXAorZXhhbXBsZXNoJChFWEUpOiBleGFtcGxlLm8gJChTSEFS RURMSUJWKQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gLUwuICQoU0hBUkVETElC VikKKworbWluaWd6aXBzaCQoRVhFKTogbWluaWd6aXAubyAkKFNIQVJFRExJQlYpCisJJChDQykg JChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gLUwuICQoU0hBUkVETElCVikKKworZXhhbXBsZTY0 JChFWEUpOiBleGFtcGxlNjQubyAkKFNUQVRJQ0xJQikKKwkkKENDKSAkKENGTEFHUykgLW8gJEAg ZXhhbXBsZTY0Lm8gJChURVNUX0xERkxBR1MpCisKK21pbmlnemlwNjQkKEVYRSk6IG1pbmlnemlw NjQubyAkKFNUQVRJQ0xJQikKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXA2NC5vICQo VEVTVF9MREZMQUdTKQorCitpbnN0YWxsLWxpYnM6ICQoTElCUykKKwktQGlmIFsgISAtZCAkKERF U1RESVIpJChleGVjX3ByZWZpeCkgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQoZXhlY19w cmVmaXgpOyBmaQorCS1AaWYgWyAhIC1kICQoREVTVERJUikkKGxpYmRpcikgICAgICAgXTsgdGhl biBta2RpciAtcCAkKERFU1RESVIpJChsaWJkaXIpOyBmaQorCS1AaWYgWyAhIC1kICQoREVTVERJ UikkKHNoYXJlZGxpYmRpcikgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChzaGFyZWRsaWJk aXIpOyBmaQorCS1AaWYgWyAhIC1kICQoREVTVERJUikkKG1hbjNkaXIpICAgICAgXTsgdGhlbiBt a2RpciAtcCAkKERFU1RESVIpJChtYW4zZGlyKTsgZmkKKwktQGlmIFsgISAtZCAkKERFU1RESVIp JChwa2djb25maWdkaXIpIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQocGtnY29uZmlnZGly KTsgZmkKKwlybSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyQoU1RBVElDTElCKQorCWNwICQoU1RB VElDTElCKSAkKERFU1RESVIpJChsaWJkaXIpCisJY2htb2QgNjQ0ICQoREVTVERJUikkKGxpYmRp cikvJChTVEFUSUNMSUIpCisJLUAoJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliei5h IHx8IHRydWUpID4vZGV2L251bGwgMj4mMQorCS1AaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSI7 IHRoZW4gXAorCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYp OyBcCisJICBjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IFwKKwkg IGVjaG8gImNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKSI7IFwKKwkg IGNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCVik7IFwKKwkg IGVjaG8gImNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCViki OyBcCisJICBybSAtZiAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKSAkKERF U1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKwkgIGxuIC1zICQoU0hBUkVE TElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQik7IFwKKwkgIGxuIC1z ICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBc CisJICAoJChMRENPTkZJRykgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAogCWZpCi0JY3Ag emxpYi4zICQobWFuM2RpcikKLQljaG1vZCA2NDQgJChtYW4zZGlyKS96bGliLjMKKwlybSAtZiAk KERFU1RESVIpJChtYW4zZGlyKS96bGliLjMKKwljcCAkKFNSQ0RJUil6bGliLjMgJChERVNURElS KSQobWFuM2RpcikKKwljaG1vZCA2NDQgJChERVNURElSKSQobWFuM2RpcikvemxpYi4zCisJcm0g LWYgJChERVNURElSKSQocGtnY29uZmlnZGlyKS96bGliLnBjCisJY3AgemxpYi5wYyAkKERFU1RE SVIpJChwa2djb25maWdkaXIpCisJY2htb2QgNjQ0ICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcikv emxpYi5wYwogIyBUaGUgcmFubGliIGluIGluc3RhbGwgaXMgbmVlZGVkIG9uIE5lWFRTVEVQIHdo aWNoIGNoZWNrcyBmaWxlIHRpbWVzCiAjIGxkY29uZmlnIGlzIGZvciBMaW51eAogCitpbnN0YWxs OiBpbnN0YWxsLWxpYnMKKwktQGlmIFsgISAtZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKSAgIF07 IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQoaW5jbHVkZWRpcik7IGZpCisJcm0gLWYgJChERVNU RElSKSQoaW5jbHVkZWRpcikvemxpYi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3pjb25mLmgK KwljcCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKQorCWNo bW9kIDY0NCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96bGliLmggJChERVNURElSKSQoaW5jbHVk ZWRpcikvemNvbmYuaAorCiB1bmluc3RhbGw6Ci0JY2QgJChpbmNsdWRlZGlyKTsgXAotCWNkICQo bGliZGlyKTsgcm0gLWYgbGliei5hOyBcCi0JaWYgdGVzdCAtZiAkKFNIQVJFRExJQlYpOyB0aGVu IFwKKwljZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKSAmJiBybSAtZiB6bGliLmggemNvbmYuaAor CWNkICQoREVTVERJUikkKGxpYmRpcikgJiYgcm0gLWYgbGliei5hOyBcCisJaWYgdGVzdCAtbiAi JChTSEFSRURMSUJWKSIgLWEgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCiAJICBybSAtZiAkKFNI QVJFRExJQlYpICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCiAJZmkKLQljZCAkKG1hbjNk aXIpOyBybSAtZiB6bGliLjMKKwljZCAkKERFU1RESVIpJChtYW4zZGlyKSAmJiBybSAtZiB6bGli LjMKKwljZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpICYmIHJtIC1mIHpsaWIucGMKKworZG9j czogemxpYi4zLnBkZgorCit6bGliLjMucGRmOiAkKFNSQ0RJUil6bGliLjMKKwlncm9mZiAtbWFu ZG9jIC1mIEggLVQgcHMgJChTUkNESVIpemxpYi4zIHwgcHMycGRmIC0gJEAKKworemNvbmYuaC5j bWFrZWluOiAkKFNSQ0RJUil6Y29uZi5oLmluCisJLUAgVEVNUEZJTEU9emNvbmZoXyQkOyBcCisJ ZWNobyAiLyNkZWZpbmUgWkNPTkZfSC8gYVxcXFxcbiNjbWFrZWRlZmluZSBaX1BSRUZJWFxcXFxc biNjbWFrZWRlZmluZSBaX0hBVkVfVU5JU1REX0hcbiIgPj4gJCRURU1QRklMRSAmJlwKKwlzZWQg LWYgJCRURU1QRklMRSAkKFNSQ0RJUil6Y29uZi5oLmluID4gJEAgJiZcCisJdG91Y2ggLXIgJChT UkNESVIpemNvbmYuaC5pbiAkQCAmJlwKKwlybSAkJFRFTVBGSUxFCisKK3pjb25mOiAkKFNSQ0RJ Uil6Y29uZi5oLmluCisJY3AgLXAgJChTUkNESVIpemNvbmYuaC5pbiB6Y29uZi5oCiAKIG1vc3Rs eWNsZWFuOiBjbGVhbgogY2xlYW46Ci0Jcm0gLWYgKi5vICp+IGV4YW1wbGUkKEVYRSkgbWluaWd6 aXAkKEVYRSkgXAorCXJtIC1mICoubyAqLmxvICp+IFwKKwkgICBleGFtcGxlJChFWEUpIG1pbmln emlwJChFWEUpIGV4YW1wbGVzaCQoRVhFKSBtaW5pZ3ppcHNoJChFWEUpIFwKKwkgICBleGFtcGxl NjQkKEVYRSkgbWluaWd6aXA2NCQoRVhFKSBcCisJICAgaW5mY292ZXIgXAogCSAgIGxpYnouKiBm b28uZ3ogc29fbG9jYXRpb25zIFwKIAkgICBfbWF0Y2gucyBtYWtldHJlZSBjb250cmliL2luZmJh Y2s5LyoubworCXJtIC1yZiBvYmpzCisJcm0gLWYgKi5nY2RhICouZ2NubyAqLmdjb3YKKwlybSAt ZiBjb250cmliL2luZmJhY2s5LyouZ2NkYSBjb250cmliL2luZmJhY2s5LyouZ2NubyBjb250cmli L2luZmJhY2s5LyouZ2NvdgogCiBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KLWRpc3RjbGVh bjogY2xlYW4KLQljcCAtcCBNYWtlZmlsZS5pbiBNYWtlZmlsZQotCWNwIC1wIHpjb25mLmluLmgg emNvbmYuaAotCXJtIC1mIC5EU19TdG9yZQorZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiB6Y29uZi5o LmNtYWtlaW4gZG9jcworCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMgY29uZmlndXJlLmxvZworCS1A cm0gLWYgLkRTX1N0b3JlCisJQGlmIFsgLWYgTWFrZWZpbGUuaW4gXTsgdGhlbiBcCisJcHJpbnRm ICdhbGw6XG5cdC1AZWNobyAiUGxlYXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlv dS4iXG4nID4gTWFrZWZpbGUgOyBcCisJcHJpbnRmICdcbmRpc3RjbGVhbjpcblx0bWFrZSAtZiBN YWtlZmlsZS5pbiBkaXN0Y2xlYW5cbicgPj4gTWFrZWZpbGUgOyBcCisJdG91Y2ggLXIgJChTUkNE SVIpTWFrZWZpbGUuaW4gTWFrZWZpbGUgOyBmaQorCUBpZiBbICEgLWYgemNvbmYuaC5pbiBdOyB0 aGVuIHJtIC1mIHpjb25mLmggemNvbmYuaC5jbWFrZWluIDsgZmkKKwlAaWYgWyAhIC1mIHpsaWIu MyBdOyB0aGVuIHJtIC1mIHpsaWIuMy5wZGYgOyBmaQogCiB0YWdzOgotCWV0YWdzICouW2NoXQor CWV0YWdzICQoU1JDRElSKSouW2NoXQogCi1kZXBlbmQ6Ci0JbWFrZWRlcGVuZCAtLSAkKENGTEFH UykgLS0gKi5bY2hdCithZGxlcjMyLm8genV0aWwubzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJ Uil6bGliLmggemNvbmYuaAorZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vOiAk KFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilnemd1dHMuaAorY29tcHJlc3MubyBleGFt cGxlLm8gbWluaWd6aXAubyB1bmNvbXByLm86ICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCitjcmMz Mi5vOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWNy YzMyLmgKK2RlZmxhdGUubzogJChTUkNESVIpZGVmbGF0ZS5oICQoU1JDRElSKXp1dGlsLmggJChT UkNESVIpemxpYi5oIHpjb25mLmgKK2luZmJhY2subyBpbmZsYXRlLm86ICQoU1JDRElSKXp1dGls LmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpaW5mdHJlZXMuaCAkKFNSQ0RJUilp bmZsYXRlLmggJChTUkNESVIpaW5mZmFzdC5oICQoU1JDRElSKWluZmZpeGVkLmgKK2luZmZhc3Qu bzogJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUilpbmZ0 cmVlcy5oICQoU1JDRElSKWluZmxhdGUuaCAkKFNSQ0RJUilpbmZmYXN0LmgKK2luZnRyZWVzLm86 ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpaW5mdHJl ZXMuaAordHJlZXMubzogJChTUkNESVIpZGVmbGF0ZS5oICQoU1JDRElSKXp1dGlsLmggJChTUkNE SVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpdHJlZXMuaAogCi0jIERPIE5PVCBERUxFVEUgVEhJ UyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0KLWFkbGVyMzIubzogemxpYi5o IHpjb25mLmgKLWNvbXByZXNzLm86IHpsaWIuaCB6Y29uZi5oCi1jcmMzMi5vOiBjcmMzMi5oIHps aWIuaCB6Y29uZi5oCi1kZWZsYXRlLm86IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5o Ci1leGFtcGxlLm86IHpsaWIuaCB6Y29uZi5oCi1nemlvLm86IHp1dGlsLmggemxpYi5oIHpjb25m LmgKLWluZmZhc3QubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUu aCBpbmZmYXN0LmgKLWluZmxhdGUubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5o IGluZmxhdGUuaCBpbmZmYXN0LmgKLWluZmJhY2subzogenV0aWwuaCB6bGliLmggemNvbmYuaCBp bmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKLWluZnRyZWVzLm86IHp1dGlsLmggemxpYi5o IHpjb25mLmggaW5mdHJlZXMuaAotbWluaWd6aXAubzogemxpYi5oIHpjb25mLmgKLXRyZWVzLm86 IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIHRyZWVzLmgKLXVuY29tcHIubzogemxp Yi5oIHpjb25mLmgKLXp1dGlsLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmgKK2FkbGVyMzIubG8g enV0aWwubG86ICQoU1JDRElSKXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmgKK2d6Y2xv c2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIGd6d3JpdGUubG86ICQoU1JDRElSKXpsaWIuaCB6Y29u Zi5oICQoU1JDRElSKWd6Z3V0cy5oCitjb21wcmVzcy5sbyBleGFtcGxlLmxvIG1pbmlnemlwLmxv IHVuY29tcHIubG86ICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oCitjcmMzMi5sbzogJChTUkNESVIp enV0aWwuaCAkKFNSQ0RJUil6bGliLmggemNvbmYuaCAkKFNSQ0RJUiljcmMzMi5oCitkZWZsYXRl LmxvOiAkKFNSQ0RJUilkZWZsYXRlLmggJChTUkNESVIpenV0aWwuaCAkKFNSQ0RJUil6bGliLmgg emNvbmYuaAoraW5mYmFjay5sbyBpbmZsYXRlLmxvOiAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElS KXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWluZnRyZWVzLmggJChTUkNESVIpaW5mbGF0ZS5oICQo U1JDRElSKWluZmZhc3QuaCAkKFNSQ0RJUilpbmZmaXhlZC5oCitpbmZmYXN0LmxvOiAkKFNSQ0RJ Uil6dXRpbC5oICQoU1JDRElSKXpsaWIuaCB6Y29uZi5oICQoU1JDRElSKWluZnRyZWVzLmggJChT UkNESVIpaW5mbGF0ZS5oICQoU1JDRElSKWluZmZhc3QuaAoraW5mdHJlZXMubG86ICQoU1JDRElS KXp1dGlsLmggJChTUkNESVIpemxpYi5oIHpjb25mLmggJChTUkNESVIpaW5mdHJlZXMuaAordHJl ZXMubG86ICQoU1JDRElSKWRlZmxhdGUuaCAkKFNSQ0RJUil6dXRpbC5oICQoU1JDRElSKXpsaWIu aCB6Y29uZi5oICQoU1JDRElSKXRyZWVzLmgKZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2 Y2M5N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvUkVBRE1FCi0tLSBhL3N5cy9zcmMvY21kL2dzL3ps aWIvUkVBRE1FCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2Nt ZC9ncy96bGliL1JFQURNRQlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEsNTcg KzEsNTIgQEAKIFpMSUIgREFUQSBDT01QUkVTU0lPTiBMSUJSQVJZCiAKLXpsaWIgMS4yLjIgaXMg YSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2Rl IGlzCit6bGliIDEuMi4xMSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxp YnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVz ZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcwogKFJlcXVlc3QgZm9y IENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzCi1odHRwOi8vd3d3LmlldGYub3Jn L3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3Jt YXQpCi1hbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4gVGhlc2UgZG9jdW1lbnRzIGFyZSBh bHNvIGF2YWlsYWJsZSBpbiBvdGhlcgotZm9ybWF0cyBmcm9tIGZ0cDovL2Z0cC51dS5uZXQvZ3Jh cGhpY3MvcG5nL2RvY3VtZW50cy96bGliL3pkb2MtaW5kZXguaHRtbAoraHR0cDovL3Rvb2xzLmll dGYub3JnL2h0bWwvcmZjMTk1MCAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1h dCkgYW5kCityZmMxOTUyIChnemlwIGZvcm1hdCkuCiAKIEFsbCBmdW5jdGlvbnMgb2YgdGhlIGNv bXByZXNzaW9uIGxpYnJhcnkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgemxpYi5oCi0odm9s dW50ZWVyIHRvIHdyaXRlIG1hbiBwYWdlcyB3ZWxjb21lLCBjb250YWN0IHpsaWJAZ3ppcC5vcmcp LiBBIHVzYWdlIGV4YW1wbGUKLW9mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIGV4 YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQgdGhlIGxpYnJhcnkKLWlzIHdvcmtpbmcgY29y cmVjdGx5LiBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgbWluaWd6aXAuYy4g VGhlCi1jb21wcmVzc2lvbiBsaWJyYXJ5IGl0c2VsZiBpcyBjb21wb3NlZCBvZiBhbGwgc291cmNl IGZpbGVzIGV4Y2VwdCBleGFtcGxlLmMgYW5kCi1taW5pZ3ppcC5jLgorKHZvbHVudGVlciB0byB3 cml0ZSBtYW4gcGFnZXMgd2VsY29tZSwgY29udGFjdCB6bGliQGd6aXAub3JnKS4gIEEgdXNhZ2Ug ZXhhbXBsZQorb2YgdGhlIGxpYnJhcnkgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgdGVzdC9leGFtcGxl LmMgd2hpY2ggYWxzbyB0ZXN0cyB0aGF0Cit0aGUgbGlicmFyeSBpcyB3b3JraW5nIGNvcnJlY3Rs eS4gIEFub3RoZXIgZXhhbXBsZSBpcyBnaXZlbiBpbiB0aGUgZmlsZQordGVzdC9taW5pZ3ppcC5j LiAgVGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgaXRzZWxmIGlzIGNvbXBvc2VkIG9mIGFsbCBzb3Vy Y2UKK2ZpbGVzIGluIHRoZSByb290IGRpcmVjdG9yeS4KIAogVG8gY29tcGlsZSBhbGwgZmlsZXMg YW5kIHJ1biB0aGUgdGVzdCBwcm9ncmFtLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBnaXZlbiBh dAotdGhlIHRvcCBvZiBNYWtlZmlsZS4gSW4gc2hvcnQgIm1ha2UgdGVzdDsgbWFrZSBpbnN0YWxs IiBzaG91bGQgd29yayBmb3IgbW9zdAotbWFjaGluZXMuIEZvciBVbml4OiAiLi9jb25maWd1cmU7 IG1ha2UgdGVzdDsgbWFrZSBpbnN0YWxsIiBGb3IgTVNET1MsIHVzZSBvbmUKLW9mIHRoZSBzcGVj aWFsIG1ha2VmaWxlcyBzdWNoIGFzIE1ha2VmaWxlLm1zYy4gRm9yIFZNUywgdXNlIE1ha2Vfdm1z LmNvbSBvcgotZGVzY3JpcC5tbXMuCit0aGUgdG9wIG9mIE1ha2VmaWxlLmluLiAgSW4gc2hvcnQg Ii4vY29uZmlndXJlOyBtYWtlIHRlc3QiLCBhbmQgaWYgdGhhdCBnb2VzCit3ZWxsLCAibWFrZSBp bnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93 cywgdXNlCitvbmUgb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmli L3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQorbWFrZV92bXMuY29tLgogCiBRdWVzdGlvbnMgYWJv dXQgemxpYiBzaG91bGQgYmUgc2VudCB0byA8emxpYkBnemlwLm9yZz4sIG9yIHRvIEdpbGxlcyBW b2xsYW50Ci08aW5mb0B3aW5pbWFnZS5jb20+IGZvciB0aGUgV2luZG93cyBETEwgdmVyc2lvbi4g VGhlIHpsaWIgaG9tZSBwYWdlIGlzCi1odHRwOi8vd3d3LnpsaWIub3JnIG9yIGh0dHA6Ly93d3cu Z3ppcC5vcmcvemxpYi8gQmVmb3JlIHJlcG9ydGluZyBhIHByb2JsZW0sCi1wbGVhc2UgY2hlY2sg dGhpcyBzaXRlIHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB6 bGliOwotb3RoZXJ3aXNlIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gYW5kIGNoZWNrIHdoZXRoZXIg dGhlIHByb2JsZW0gc3RpbGwgZXhpc3RzIG9yCi1ub3QuCis8aW5mb0B3aW5pbWFnZS5jb20+IGZv ciB0aGUgV2luZG93cyBETEwgdmVyc2lvbi4gIFRoZSB6bGliIGhvbWUgcGFnZSBpcworaHR0cDov L3psaWIubmV0LyAuICBCZWZvcmUgcmVwb3J0aW5nIGEgcHJvYmxlbSwgcGxlYXNlIGNoZWNrIHRo aXMgc2l0ZSB0bwordmVyaWZ5IHRoYXQgeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHps aWI7IG90aGVyd2lzZSBnZXQgdGhlIGxhdGVzdAordmVyc2lvbiBhbmQgY2hlY2sgd2hldGhlciB0 aGUgcHJvYmxlbSBzdGlsbCBleGlzdHMgb3Igbm90LgogCi1QTEVBU0UgcmVhZCB0aGUgemxpYiBG QVEgaHR0cDovL3d3dy5nemlwLm9yZy96bGliL3psaWJfZmFxLmh0bWwgYmVmb3JlIGFza2luZwot Zm9yIGhlbHAuCitQTEVBU0UgcmVhZCB0aGUgemxpYiBGQVEgaHR0cDovL3psaWIubmV0L3psaWJf ZmFxLmh0bWwgYmVmb3JlIGFza2luZyBmb3IgaGVscC4KIAotTWFyayBOZWxzb24gPG1hcmtuQGll ZWUub3JnPiB3cm90ZSBhbiBhcnRpY2xlIGFib3V0IHpsaWIgZm9yIHRoZSBKYW4uIDE5OTcKLWlz c3VlIG9mICBEci4gRG9iYidzIEpvdXJuYWw7IGEgY29weSBvZiB0aGUgYXJ0aWNsZSBpcyBhdmFp bGFibGUgaW4KLWh0dHA6Ly9kb2dtYS5uZXQvbWFya24vYXJ0aWNsZXMvemxpYnRvb2wvemxpYnRv b2wuaHRtCitNYXJrIE5lbHNvbiA8bWFya25AaWVlZS5vcmc+IHdyb3RlIGFuIGFydGljbGUgYWJv dXQgemxpYiBmb3IgdGhlIEphbi4gIDE5OTcKK2lzc3VlIG9mIERyLiAgRG9iYidzIEpvdXJuYWw7 IGEgY29weSBvZiB0aGUgYXJ0aWNsZSBpcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly9tYXJrbmVsc29u LnVzLzE5OTcvMDEvMDEvemxpYi1lbmdpbmUvIC4KIAotVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJz aW9uIDEuMi4yIGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KK1RoZSBjaGFu Z2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuMTEgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hh bmdlTG9nLgogCi1VbnN1cHBvcnRlZCB0aGlyZCBwYXJ0eSBjb250cmlidXRpb25zIGFyZSBwcm92 aWRlZCBpbiBkaXJlY3RvcnkgImNvbnRyaWIiLgorVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29u dHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IGNvbnRyaWIvIC4KIAotQSBKYXZh IGltcGxlbWVudGF0aW9uIG9mIHpsaWIgaXMgYXZhaWxhYmxlIGluIHRoZSBKYXZhIERldmVsb3Bt ZW50IEtpdAotaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRp bC96aXAvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKLVNlZSB0aGUgemxpYiBob21lIHBhZ2UgaHR0cDov L3d3dy56bGliLm9yZyBmb3IgZGV0YWlscy4KK3psaWIgaXMgYXZhaWxhYmxlIGluIEphdmEgdXNp bmcgdGhlIGphdmEudXRpbC56aXAgcGFja2FnZSwgZG9jdW1lbnRlZCBhdAoraHR0cDovL2phdmEu c3VuLmNvbS9kZXZlbG9wZXIvdGVjaG5pY2FsQXJ0aWNsZXMvUHJvZ3JhbW1pbmcvY29tcHJlc3Np b24vIC4KIAotQSBQZXJsIGludGVyZmFjZSB0byB6bGliIHdyaXR0ZW4gYnkgUGF1bCBNYXJxdWVz cyA8cG1xc0BjcGFuLm9yZz4gaXMgaW4gdGhlCi1DUEFOIChDb21wcmVoZW5zaXZlIFBlcmwgQXJj aGl2ZSBOZXR3b3JrKSBzaXRlcwotaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVs ZS9Db21wcmVzcy8KK0EgUGVybCBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IFBhdWwgTWFy cXVlc3MgPHBtcXNAY3Bhbi5vcmc+IGlzIGF2YWlsYWJsZQorYXQgQ1BBTiAoQ29tcHJlaGVuc2l2 ZSBQZXJsIEFyY2hpdmUgTmV0d29yaykgc2l0ZXMsIGluY2x1ZGluZworaHR0cDovL3NlYXJjaC5j cGFuLm9yZy9+cG1xcy9JTy1Db21wcmVzcy1abGliLyAuCiAKIEEgUHl0aG9uIGludGVyZmFjZSB0 byB6bGliIHdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyA8YW1rQGFtay5jYT4gaXMKIGF2YWlsYWJs ZSBpbiBQeXRob24gMS41IGFuZCBsYXRlciB2ZXJzaW9ucywgc2VlCi1odHRwOi8vd3d3LnB5dGhv bi5vcmcvZG9jL2xpYi9tb2R1bGUtemxpYi5odG1sCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xp YnJhcnkvemxpYi5odG1sIC4KIAotQSB6bGliIGJpbmRpbmcgZm9yIFRDTCB3cml0dGVuIGJ5IEFu ZHJlYXMgS3VwcmllcyA8YS5rdXByaWVzQHdlc3RlbmQuY29tPiBpcwotYXZhaWxsYWJsZSBhdCBo dHRwOi8vd3d3Lm9jaGUuZGUvfmFrdXByaWVzL3NvZnQvdHJmL3RyZl96aXAuaHRtbAoremxpYiBp cyBidWlsdCBpbnRvIHRjbDogaHR0cDovL3dpa2kudGNsLnRrLzQ2MTAgLgogCiBBbiBleHBlcmlt ZW50YWwgcGFja2FnZSB0byByZWFkIGFuZCB3cml0ZSBmaWxlcyBpbiAuemlwIGZvcm1hdCwgd3Jp dHRlbiBvbiB0b3AKIG9mIHpsaWIgYnkgR2lsbGVzIFZvbGxhbnQgPGluZm9Ad2luaW1hZ2UuY29t PiwgaXMgYXZhaWxhYmxlIGluIHRoZQpAQCAtNzUsMjUgKzcwLDIxIEBACiAtIHpsaWIgZG9lc24n dCB3b3JrIG9uIEhQLVVYIDkuMDUgd2l0aCBzb21lIHZlcnNpb25zIG9mIC9iaW4vY2MuIEl0IHdv cmtzIHdpdGgKICAgb3RoZXIgY29tcGlsZXJzLiBVc2UgIm1ha2UgdGVzdCIgdG8gY2hlY2sgeW91 ciBjb21waWxlci4KIAotLSBnemRvcGVuIGlzIG5vdCBzdXBwb3J0ZWQgb24gUklTQ09TLCBCRU9T IGFuZCBieSBzb21lIE1hYyBjb21waWxlcnMuCistIGd6ZG9wZW4gaXMgbm90IHN1cHBvcnRlZCBv biBSSVNDT1Mgb3IgQkVPUy4KIAogLSBGb3IgUGFsbU9zLCBzZWUgaHR0cDovL3BhbG16bGliLnNv dXJjZWZvcmdlLm5ldC8KIAotLSBXaGVuIGJ1aWxkaW5nIGEgc2hhcmVkLCBpLmUuIGR5bmFtaWMg bGlicmFyeSBvbiBNYWMgT1MgWCwgdGhlIGxpYnJhcnkgbXVzdCBiZQotICBpbnN0YWxsZWQgYmVm b3JlIHRlc3RpbmcgKGRvICJtYWtlIGluc3RhbGwiIGJlZm9yZSAibWFrZSB0ZXN0IiksIHNpbmNl IHRoZQotICBsaWJyYXJ5IGxvY2F0aW9uIGlzIHNwZWNpZmllZCBpbiB0aGUgbGlicmFyeS4KLQog CiBBY2tub3dsZWRnbWVudHM6CiAKLSAgVGhlIGRlZmxhdGUgZm9ybWF0IHVzZWQgYnkgemxpYiB3 YXMgZGVmaW5lZCBieSBQaGlsIEthdHouIFRoZSBkZWZsYXRlCi0gIGFuZCB6bGliIHNwZWNpZmlj YXRpb25zIHdlcmUgd3JpdHRlbiBieSBMLiBQZXRlciBEZXV0c2NoLiBUaGFua3MgdG8gYWxsIHRo ZQotICBwZW9wbGUgd2hvIHJlcG9ydGVkIHByb2JsZW1zIGFuZCBzdWdnZXN0ZWQgdmFyaW91cyBp bXByb3ZlbWVudHMgaW4gemxpYjsKLSAgdGhleSBhcmUgdG9vIG51bWVyb3VzIHRvIGNpdGUgaGVy ZS4KKyAgVGhlIGRlZmxhdGUgZm9ybWF0IHVzZWQgYnkgemxpYiB3YXMgZGVmaW5lZCBieSBQaGls IEthdHouICBUaGUgZGVmbGF0ZSBhbmQKKyAgemxpYiBzcGVjaWZpY2F0aW9ucyB3ZXJlIHdyaXR0 ZW4gYnkgTC4gIFBldGVyIERldXRzY2guICBUaGFua3MgdG8gYWxsIHRoZQorICBwZW9wbGUgd2hv IHJlcG9ydGVkIHByb2JsZW1zIGFuZCBzdWdnZXN0ZWQgdmFyaW91cyBpbXByb3ZlbWVudHMgaW4g emxpYjsgdGhleQorICBhcmUgdG9vIG51bWVyb3VzIHRvIGNpdGUgaGVyZS4KIAogQ29weXJpZ2h0 IG5vdGljZToKIAotIChDKSAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxl cgorIChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRo aXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBp bXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxk IGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTExNCwxMyArMTA1LDExIEBACiAgIEplYW4tbG91 cCBHYWlsbHkgICAgICAgIE1hcmsgQWRsZXIKICAgamxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFk bGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQogCi1JZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4g YSBwcm9kdWN0LCB3ZSB3b3VsZCBhcHByZWNpYXRlICpub3QqCi1yZWNlaXZpbmcgbGVuZ3RoeSBs ZWdhbCBkb2N1bWVudHMgdG8gc2lnbi4gVGhlIHNvdXJjZXMgYXJlIHByb3ZpZGVkCi1mb3IgZnJl ZSBidXQgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZC4gIFRoZSBsaWJyYXJ5IGhhcyBiZWVu Ci1lbnRpcmVseSB3cml0dGVuIGJ5IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXI7IGl0 IGRvZXMgbm90Ci1pbmNsdWRlIHRoaXJkLXBhcnR5IGNvZGUuCitJZiB5b3UgdXNlIHRoZSB6bGli IGxpYnJhcnkgaW4gYSBwcm9kdWN0LCB3ZSB3b3VsZCBhcHByZWNpYXRlICpub3QqIHJlY2Vpdmlu ZworbGVuZ3RoeSBsZWdhbCBkb2N1bWVudHMgdG8gc2lnbi4gIFRoZSBzb3VyY2VzIGFyZSBwcm92 aWRlZCBmb3IgZnJlZSBidXQgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQuICBUaGUgbGli cmFyeSBoYXMgYmVlbiBlbnRpcmVseSB3cml0dGVuIGJ5IEplYW4tbG91cAorR2FpbGx5IGFuZCBN YXJrIEFkbGVyOyBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoaXJkLXBhcnR5IGNvZGUuCiAKLUlmIHlv dSByZWRpc3RyaWJ1dGUgbW9kaWZpZWQgc291cmNlcywgd2Ugd291bGQgYXBwcmVjaWF0ZSB0aGF0 IHlvdSBpbmNsdWRlCi1pbiB0aGUgZmlsZSBDaGFuZ2VMb2cgaGlzdG9yeSBpbmZvcm1hdGlvbiBk b2N1bWVudGluZyB5b3VyIGNoYW5nZXMuIFBsZWFzZQotcmVhZCB0aGUgRkFRIGZvciBtb3JlIGlu Zm9ybWF0aW9uIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgc291cmNlCi12ZXJzaW9u cy4KK0lmIHlvdSByZWRpc3RyaWJ1dGUgbW9kaWZpZWQgc291cmNlcywgd2Ugd291bGQgYXBwcmVj aWF0ZSB0aGF0IHlvdSBpbmNsdWRlIGluCit0aGUgZmlsZSBDaGFuZ2VMb2cgaGlzdG9yeSBpbmZv cm1hdGlvbiBkb2N1bWVudGluZyB5b3VyIGNoYW5nZXMuICBQbGVhc2UgcmVhZAordGhlIEZBUSBm b3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHNvdXJj ZSB2ZXJzaW9ucy4KZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMv Y21kL2dzL3psaWIvYWRsZXIzMi5jCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvYWRsZXIzMi5j CVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGli L2FkbGVyMzIuYwlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEsNzQgKzEsMTg2 IEBACiAvKiBhZGxlcjMyLmMgLS0gY29tcHV0ZSB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYSBk YXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgTWFyayBBZGxlcgorICogQ29w eXJpZ2h0IChDKSAxOTk1LTIwMTEsIDIwMTYgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMg b2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAog ICovCiAKLS8qIEAoIykgJElkOiBhZGxlcjMyLmMsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6 MzggZ2lsZXMgRXhwICQgKi8KKy8qIEAoIykgJElkJCAqLwogCi0jZGVmaW5lIFpMSUJfSU5URVJO QUwKLSNpbmNsdWRlICJ6bGliLmgiCisjaW5jbHVkZSAienV0aWwuaCIKIAotI2RlZmluZSBCQVNF IDY1NTIxVUwgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KK2xvY2Fs IHVMb25nIGFkbGVyMzJfY29tYmluZV8gT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6 X29mZjY0X3QgbGVuMikpOworCisjZGVmaW5lIEJBU0UgNjU1MjFVICAgICAvKiBsYXJnZXN0IHBy aW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLwogI2RlZmluZSBOTUFYIDU1NTIKIC8qIE5NQVggaXMg dGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisxKShCQVNFLTEpIDw9IDJe MzItMSAqLwogCi0jZGVmaW5lIERPMShidWYsaSkgIHtzMSArPSBidWZbaV07IHMyICs9IHMxO30K KyNkZWZpbmUgRE8xKGJ1ZixpKSAge2FkbGVyICs9IChidWYpW2ldOyBzdW0yICs9IGFkbGVyO30K ICNkZWZpbmUgRE8yKGJ1ZixpKSAgRE8xKGJ1ZixpKTsgRE8xKGJ1ZixpKzEpOwogI2RlZmluZSBE TzQoYnVmLGkpICBETzIoYnVmLGkpOyBETzIoYnVmLGkrMik7CiAjZGVmaW5lIERPOChidWYsaSkg IERPNChidWYsaSk7IERPNChidWYsaSs0KTsKICNkZWZpbmUgRE8xNihidWYpICAgRE84KGJ1Ziww KTsgRE84KGJ1Ziw4KTsKIAorLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2Vz IG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAtLQorICAgdHJ5IGl0IGJvdGggd2F5cyB0byBz ZWUgd2hpY2ggaXMgZmFzdGVyICovCiAjaWZkZWYgTk9fRElWSURFCisvKiBub3RlIHRoYXQgdGhp cyBhc3N1bWVzIEJBU0UgaXMgNjU1MjEsIHdoZXJlIDY1NTM2ICUgNjU1MjEgPT0gMTUKKyAgICh0 aGFuayB5b3UgdG8gSm9obiBSZWlzZXIgZm9yIHBvaW50aW5nIHRoaXMgb3V0KSAqLworIyAgZGVm aW5lIENIT1AoYSkgXAorICAgIGRvIHsgXAorICAgICAgICB1bnNpZ25lZCBsb25nIHRtcCA9IGEg Pj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZVTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwg NCkgLSB0bXA7IFwKKyAgICB9IHdoaWxlICgwKQorIyAgZGVmaW5lIE1PRDI4KGEpIFwKKyAgICBk byB7IFwKKyAgICAgICAgQ0hPUChhKTsgXAorICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJB U0U7IFwKKyAgICB9IHdoaWxlICgwKQogIyAgZGVmaW5lIE1PRChhKSBcCiAgICAgZG8geyBcCi0g ICAgICAgIGlmIChhID49IChCQVNFIDw8IDE2KSkgYSAtPSAoQkFTRSA8PCAxNik7IFwKLSAgICAg ICAgaWYgKGEgPj0gKEJBU0UgPDwgMTUpKSBhIC09IChCQVNFIDw8IDE1KTsgXAotICAgICAgICBp ZiAoYSA+PSAoQkFTRSA8PCAxNCkpIGEgLT0gKEJBU0UgPDwgMTQpOyBcCi0gICAgICAgIGlmIChh ID49IChCQVNFIDw8IDEzKSkgYSAtPSAoQkFTRSA8PCAxMyk7IFwKLSAgICAgICAgaWYgKGEgPj0g KEJBU0UgPDwgMTIpKSBhIC09IChCQVNFIDw8IDEyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFT RSA8PCAxMSkpIGEgLT0gKEJBU0UgPDwgMTEpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8 IDEwKSkgYSAtPSAoQkFTRSA8PCAxMCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOSkp IGEgLT0gKEJBU0UgPDwgOSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOCkpIGEgLT0g KEJBU0UgPDwgOCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNykpIGEgLT0gKEJBU0Ug PDwgNyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNikpIGEgLT0gKEJBU0UgPDwgNik7 IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNSkpIGEgLT0gKEJBU0UgPDwgNSk7IFwKLSAg ICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNCkpIGEgLT0gKEJBU0UgPDwgNCk7IFwKLSAgICAgICAg aWYgKGEgPj0gKEJBU0UgPDwgMykpIGEgLT0gKEJBU0UgPDwgMyk7IFwKLSAgICAgICAgaWYgKGEg Pj0gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJB U0UgPDwgMSkpIGEgLT0gKEJBU0UgPDwgMSk7IFwKKyAgICAgICAgQ0hPUChhKTsgXAorICAgICAg ICBNT0QyOChhKTsgXAorICAgIH0gd2hpbGUgKDApCisjICBkZWZpbmUgTU9ENjMoYSkgXAorICAg IGRvIHsgLyogdGhpcyBhc3N1bWVzIGEgaXMgbm90IG5lZ2F0aXZlICovIFwKKyAgICAgICAgel9v ZmY2NF90IHRtcCA9IGEgPj4gMzI7IFwKKyAgICAgICAgYSAmPSAweGZmZmZmZmZmTDsgXAorICAg ICAgICBhICs9ICh0bXAgPDwgOCkgLSAodG1wIDw8IDUpICsgdG1wOyBcCisgICAgICAgIHRtcCA9 IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8 PCA0KSAtIHRtcDsgXAorICAgICAgICB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhm ZmZmTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKICAgICAgICAgaWYgKGEg Pj0gQkFTRSkgYSAtPSBCQVNFOyBcCiAgICAgfSB3aGlsZSAoMCkKICNlbHNlCiAjICBkZWZpbmUg TU9EKGEpIGEgJT0gQkFTRQorIyAgZGVmaW5lIE1PRDI4KGEpIGEgJT0gQkFTRQorIyAgZGVmaW5l IE1PRDYzKGEpIGEgJT0gQkFTRQogI2VuZGlmCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3VM b25nIFpFWFBPUlQgYWRsZXIzMl96KGFkbGVyLCBidWYsIGxlbikKKyAgICB1TG9uZyBhZGxlcjsK KyAgICBjb25zdCBCeXRlZiAqYnVmOworICAgIHpfc2l6ZV90IGxlbjsKK3sKKyAgICB1bnNpZ25l ZCBsb25nIHN1bTI7CisgICAgdW5zaWduZWQgbjsKKworICAgIC8qIHNwbGl0IEFkbGVyLTMyIGlu dG8gY29tcG9uZW50IHN1bXMgKi8KKyAgICBzdW0yID0gKGFkbGVyID4+IDE2KSAmIDB4ZmZmZjsK KyAgICBhZGxlciAmPSAweGZmZmY7CisKKyAgICAvKiBpbiBjYXNlIHVzZXIgbGlrZXMgZG9pbmcg YSBieXRlIGF0IGEgdGltZSwga2VlcCBpdCBmYXN0ICovCisgICAgaWYgKGxlbiA9PSAxKSB7Cisg ICAgICAgIGFkbGVyICs9IGJ1ZlswXTsKKyAgICAgICAgaWYgKGFkbGVyID49IEJBU0UpCisgICAg ICAgICAgICBhZGxlciAtPSBCQVNFOworICAgICAgICBzdW0yICs9IGFkbGVyOworICAgICAgICBp ZiAoc3VtMiA+PSBCQVNFKQorICAgICAgICAgICAgc3VtMiAtPSBCQVNFOworICAgICAgICByZXR1 cm4gYWRsZXIgfCAoc3VtMiA8PCAxNik7CisgICAgfQorCisgICAgLyogaW5pdGlhbCBBZGxlci0z MiB2YWx1ZSAoZGVmZXJyZWQgY2hlY2sgZm9yIGxlbiA9PSAxIHNwZWVkKSAqLworICAgIGlmIChi dWYgPT0gWl9OVUxMKQorICAgICAgICByZXR1cm4gMUw7CisKKyAgICAvKiBpbiBjYXNlIHNob3J0 IGxlbmd0aHMgYXJlIHByb3ZpZGVkLCBrZWVwIGl0IHNvbWV3aGF0IGZhc3QgKi8KKyAgICBpZiAo bGVuIDwgMTYpIHsKKyAgICAgICAgd2hpbGUgKGxlbi0tKSB7CisgICAgICAgICAgICBhZGxlciAr PSAqYnVmKys7CisgICAgICAgICAgICBzdW0yICs9IGFkbGVyOworICAgICAgICB9CisgICAgICAg IGlmIChhZGxlciA+PSBCQVNFKQorICAgICAgICAgICAgYWRsZXIgLT0gQkFTRTsKKyAgICAgICAg TU9EMjgoc3VtMik7ICAgICAgICAgICAgLyogb25seSBhZGRlZCBzbyBtYW55IEJBU0UncyAqLwor ICAgICAgICByZXR1cm4gYWRsZXIgfCAoc3VtMiA8PCAxNik7CisgICAgfQorCisgICAgLyogZG8g bGVuZ3RoIE5NQVggYmxvY2tzIC0tIHJlcXVpcmVzIGp1c3Qgb25lIG1vZHVsbyBvcGVyYXRpb24g Ki8KKyAgICB3aGlsZSAobGVuID49IE5NQVgpIHsKKyAgICAgICAgbGVuIC09IE5NQVg7CisgICAg ICAgIG4gPSBOTUFYIC8gMTY7ICAgICAgICAgIC8qIE5NQVggaXMgZGl2aXNpYmxlIGJ5IDE2ICov CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIERPMTYoYnVmKTsgICAgICAgICAgLyogMTYgc3Vt cyB1bnJvbGxlZCAqLworICAgICAgICAgICAgYnVmICs9IDE2OworICAgICAgICB9IHdoaWxlICgt LW4pOworICAgICAgICBNT0QoYWRsZXIpOworICAgICAgICBNT0Qoc3VtMik7CisgICAgfQorCisg ICAgLyogZG8gcmVtYWluaW5nIGJ5dGVzIChsZXNzIHRoYW4gTk1BWCwgc3RpbGwganVzdCBvbmUg bW9kdWxvKSAqLworICAgIGlmIChsZW4pIHsgICAgICAgICAgICAgICAgICAvKiBhdm9pZCBtb2R1 bG9zIGlmIG5vbmUgcmVtYWluaW5nICovCisgICAgICAgIHdoaWxlIChsZW4gPj0gMTYpIHsKKyAg ICAgICAgICAgIGxlbiAtPSAxNjsKKyAgICAgICAgICAgIERPMTYoYnVmKTsKKyAgICAgICAgICAg IGJ1ZiArPSAxNjsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAobGVuLS0pIHsKKyAgICAgICAg ICAgIGFkbGVyICs9ICpidWYrKzsKKyAgICAgICAgICAgIHN1bTIgKz0gYWRsZXI7CisgICAgICAg IH0KKyAgICAgICAgTU9EKGFkbGVyKTsKKyAgICAgICAgTU9EKHN1bTIpOworICAgIH0KKworICAg IC8qIHJldHVybiByZWNvbWJpbmVkIHN1bXMgKi8KKyAgICByZXR1cm4gYWRsZXIgfCAoc3VtMiA8 PCAxNik7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIHVMb25nIFpFWFBPUlQgYWRsZXIz MihhZGxlciwgYnVmLCBsZW4pCiAgICAgdUxvbmcgYWRsZXI7CiAgICAgY29uc3QgQnl0ZWYgKmJ1 ZjsKICAgICB1SW50IGxlbjsKIHsKLSAgICB1bnNpZ25lZCBsb25nIHMxID0gYWRsZXIgJiAweGZm ZmY7Ci0gICAgdW5zaWduZWQgbG9uZyBzMiA9IChhZGxlciA+PiAxNikgJiAweGZmZmY7Ci0gICAg aW50IGs7CisgICAgcmV0dXJuIGFkbGVyMzJfeihhZGxlciwgYnVmLCBsZW4pOworfQogCi0gICAg aWYgKGJ1ZiA9PSBaX05VTEwpIHJldHVybiAxTDsKKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2xv Y2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8oYWRsZXIxLCBhZGxlcjIsIGxlbjIpCisgICAgdUxv bmcgYWRsZXIxOworICAgIHVMb25nIGFkbGVyMjsKKyAgICB6X29mZjY0X3QgbGVuMjsKK3sKKyAg ICB1bnNpZ25lZCBsb25nIHN1bTE7CisgICAgdW5zaWduZWQgbG9uZyBzdW0yOworICAgIHVuc2ln bmVkIHJlbTsKIAotICAgIHdoaWxlIChsZW4gPiAwKSB7Ci0gICAgICAgIGsgPSBsZW4gPCBOTUFY ID8gKGludClsZW4gOiBOTUFYOwotICAgICAgICBsZW4gLT0gazsKLSAgICAgICAgd2hpbGUgKGsg Pj0gMTYpIHsKLSAgICAgICAgICAgIERPMTYoYnVmKTsKLSAgICAgICAgICAgIGJ1ZiArPSAxNjsK LSAgICAgICAgICAgIGsgLT0gMTY7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGsgIT0gMCkgZG8g ewotICAgICAgICAgICAgczEgKz0gKmJ1ZisrOwotICAgICAgICAgICAgczIgKz0gczE7Ci0gICAg ICAgIH0gd2hpbGUgKC0tayk7Ci0gICAgICAgIE1PRChzMSk7Ci0gICAgICAgIE1PRChzMik7Ci0g ICAgfQotICAgIHJldHVybiAoczIgPDwgMTYpIHwgczE7CisgICAgLyogZm9yIG5lZ2F0aXZlIGxl biwgcmV0dXJuIGludmFsaWQgYWRsZXIzMiBhcyBhIGNsdWUgZm9yIGRlYnVnZ2luZyAqLworICAg IGlmIChsZW4yIDwgMCkKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZVTDsKKworICAgIC8qIHRo ZSBkZXJpdmF0aW9uIG9mIHRoaXMgZm9ybXVsYSBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0 aGUgcmVhZGVyICovCisgICAgTU9ENjMobGVuMik7ICAgICAgICAgICAgICAgIC8qIGFzc3VtZXMg bGVuMiA+PSAwICovCisgICAgcmVtID0gKHVuc2lnbmVkKWxlbjI7CisgICAgc3VtMSA9IGFkbGVy MSAmIDB4ZmZmZjsKKyAgICBzdW0yID0gcmVtICogc3VtMTsKKyAgICBNT0Qoc3VtMik7CisgICAg c3VtMSArPSAoYWRsZXIyICYgMHhmZmZmKSArIEJBU0UgLSAxOworICAgIHN1bTIgKz0gKChhZGxl cjEgPj4gMTYpICYgMHhmZmZmKSArICgoYWRsZXIyID4+IDE2KSAmIDB4ZmZmZikgKyBCQVNFIC0g cmVtOworICAgIGlmIChzdW0xID49IEJBU0UpIHN1bTEgLT0gQkFTRTsKKyAgICBpZiAoc3VtMSA+ PSBCQVNFKSBzdW0xIC09IEJBU0U7CisgICAgaWYgKHN1bTIgPj0gKCh1bnNpZ25lZCBsb25nKUJB U0UgPDwgMSkpIHN1bTIgLT0gKCh1bnNpZ25lZCBsb25nKUJBU0UgPDwgMSk7CisgICAgaWYgKHN1 bTIgPj0gQkFTRSkgc3VtMiAtPSBCQVNFOworICAgIHJldHVybiBzdW0xIHwgKHN1bTIgPDwgMTYp OwogfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCit1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29t YmluZShhZGxlcjEsIGFkbGVyMiwgbGVuMikKKyAgICB1TG9uZyBhZGxlcjE7CisgICAgdUxvbmcg YWRsZXIyOworICAgIHpfb2ZmX3QgbGVuMjsKK3sKKyAgICByZXR1cm4gYWRsZXIzMl9jb21iaW5l XyhhZGxlcjEsIGFkbGVyMiwgbGVuMik7Cit9CisKK3VMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21i aW5lNjQoYWRsZXIxLCBhZGxlcjIsIGxlbjIpCisgICAgdUxvbmcgYWRsZXIxOworICAgIHVMb25n IGFkbGVyMjsKKyAgICB6X29mZjY0X3QgbGVuMjsKK3sKKyAgICByZXR1cm4gYWRsZXIzMl9jb21i aW5lXyhhZGxlcjEsIGFkbGVyMiwgbGVuMik7Cit9CmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3 YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL2FsZ29yaXRobS50eHQKLS0tIGEvc3lzL3Ny Yy9jbWQvZ3MvemxpYi9hbGdvcml0aG0udHh0CVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIw MAorKysgL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMApAQCAtMSwyMDkg KzAsMCBAQAotMS4gQ29tcHJlc3Npb24gYWxnb3JpdGhtIChkZWZsYXRlKQotCi1UaGUgZGVmbGF0 aW9uIGFsZ29yaXRobSB1c2VkIGJ5IGd6aXAgKGFsc28gemlwIGFuZCB6bGliKSBpcyBhIHZhcmlh dGlvbiBvZgotTFo3NyAoTGVtcGVsLVppdiAxOTc3LCBzZWUgcmVmZXJlbmNlIGJlbG93KS4gSXQg ZmluZHMgZHVwbGljYXRlZCBzdHJpbmdzIGluCi10aGUgaW5wdXQgZGF0YS4gIFRoZSBzZWNvbmQg b2NjdXJyZW5jZSBvZiBhIHN0cmluZyBpcyByZXBsYWNlZCBieSBhCi1wb2ludGVyIHRvIHRoZSBw cmV2aW91cyBzdHJpbmcsIGluIHRoZSBmb3JtIG9mIGEgcGFpciAoZGlzdGFuY2UsCi1sZW5ndGgp LiAgRGlzdGFuY2VzIGFyZSBsaW1pdGVkIHRvIDMySyBieXRlcywgYW5kIGxlbmd0aHMgYXJlIGxp bWl0ZWQKLXRvIDI1OCBieXRlcy4gV2hlbiBhIHN0cmluZyBkb2VzIG5vdCBvY2N1ciBhbnl3aGVy ZSBpbiB0aGUgcHJldmlvdXMKLTMySyBieXRlcywgaXQgaXMgZW1pdHRlZCBhcyBhIHNlcXVlbmNl IG9mIGxpdGVyYWwgYnl0ZXMuICAoSW4gdGhpcwotZGVzY3JpcHRpb24sIGBzdHJpbmcnIG11c3Qg YmUgdGFrZW4gYXMgYW4gYXJiaXRyYXJ5IHNlcXVlbmNlIG9mIGJ5dGVzLAotYW5kIGlzIG5vdCBy ZXN0cmljdGVkIHRvIHByaW50YWJsZSBjaGFyYWN0ZXJzLikKLQotTGl0ZXJhbHMgb3IgbWF0Y2gg bGVuZ3RocyBhcmUgY29tcHJlc3NlZCB3aXRoIG9uZSBIdWZmbWFuIHRyZWUsIGFuZAotbWF0Y2gg ZGlzdGFuY2VzIGFyZSBjb21wcmVzc2VkIHdpdGggYW5vdGhlciB0cmVlLiBUaGUgdHJlZXMgYXJl IHN0b3JlZAotaW4gYSBjb21wYWN0IGZvcm0gYXQgdGhlIHN0YXJ0IG9mIGVhY2ggYmxvY2suIFRo ZSBibG9ja3MgY2FuIGhhdmUgYW55Ci1zaXplIChleGNlcHQgdGhhdCB0aGUgY29tcHJlc3NlZCBk YXRhIGZvciBvbmUgYmxvY2sgbXVzdCBmaXQgaW4KLWF2YWlsYWJsZSBtZW1vcnkpLiBBIGJsb2Nr IGlzIHRlcm1pbmF0ZWQgd2hlbiBkZWZsYXRlKCkgZGV0ZXJtaW5lcyB0aGF0Ci1pdCB3b3VsZCBi ZSB1c2VmdWwgdG8gc3RhcnQgYW5vdGhlciBibG9jayB3aXRoIGZyZXNoIHRyZWVzLiAoVGhpcyBp cwotc29tZXdoYXQgc2ltaWxhciB0byB0aGUgYmVoYXZpb3Igb2YgTFpXLWJhc2VkIF9jb21wcmVz c18uKQotCi1EdXBsaWNhdGVkIHN0cmluZ3MgYXJlIGZvdW5kIHVzaW5nIGEgaGFzaCB0YWJsZS4g QWxsIGlucHV0IHN0cmluZ3Mgb2YKLWxlbmd0aCAzIGFyZSBpbnNlcnRlZCBpbiB0aGUgaGFzaCB0 YWJsZS4gQSBoYXNoIGluZGV4IGlzIGNvbXB1dGVkIGZvcgotdGhlIG5leHQgMyBieXRlcy4gSWYg dGhlIGhhc2ggY2hhaW4gZm9yIHRoaXMgaW5kZXggaXMgbm90IGVtcHR5LCBhbGwKLXN0cmluZ3Mg aW4gdGhlIGNoYWluIGFyZSBjb21wYXJlZCB3aXRoIHRoZSBjdXJyZW50IGlucHV0IHN0cmluZywg YW5kCi10aGUgbG9uZ2VzdCBtYXRjaCBpcyBzZWxlY3RlZC4KLQotVGhlIGhhc2ggY2hhaW5zIGFy ZSBzZWFyY2hlZCBzdGFydGluZyB3aXRoIHRoZSBtb3N0IHJlY2VudCBzdHJpbmdzLCB0bwotZmF2 b3Igc21hbGwgZGlzdGFuY2VzIGFuZCB0aHVzIHRha2UgYWR2YW50YWdlIG9mIHRoZSBIdWZmbWFu IGVuY29kaW5nLgotVGhlIGhhc2ggY2hhaW5zIGFyZSBzaW5nbHkgbGlua2VkLiBUaGVyZSBhcmUg bm8gZGVsZXRpb25zIGZyb20gdGhlCi1oYXNoIGNoYWlucywgdGhlIGFsZ29yaXRobSBzaW1wbHkg ZGlzY2FyZHMgbWF0Y2hlcyB0aGF0IGFyZSB0b28gb2xkLgotCi1UbyBhdm9pZCBhIHdvcnN0LWNh c2Ugc2l0dWF0aW9uLCB2ZXJ5IGxvbmcgaGFzaCBjaGFpbnMgYXJlIGFyYml0cmFyaWx5Ci10cnVu Y2F0ZWQgYXQgYSBjZXJ0YWluIGxlbmd0aCwgZGV0ZXJtaW5lZCBieSBhIHJ1bnRpbWUgb3B0aW9u IChsZXZlbAotcGFyYW1ldGVyIG9mIGRlZmxhdGVJbml0KS4gU28gZGVmbGF0ZSgpIGRvZXMgbm90 IGFsd2F5cyBmaW5kIHRoZSBsb25nZXN0Ci1wb3NzaWJsZSBtYXRjaCBidXQgZ2VuZXJhbGx5IGZp bmRzIGEgbWF0Y2ggd2hpY2ggaXMgbG9uZyBlbm91Z2guCi0KLWRlZmxhdGUoKSBhbHNvIGRlZmVy cyB0aGUgc2VsZWN0aW9uIG9mIG1hdGNoZXMgd2l0aCBhIGxhenkgZXZhbHVhdGlvbgotbWVjaGFu aXNtLiBBZnRlciBhIG1hdGNoIG9mIGxlbmd0aCBOIGhhcyBiZWVuIGZvdW5kLCBkZWZsYXRlKCkg c2VhcmNoZXMgZm9yCi1hIGxvbmdlciBtYXRjaCBhdCB0aGUgbmV4dCBpbnB1dCBieXRlLiBJZiBh IGxvbmdlciBtYXRjaCBpcyBmb3VuZCwgdGhlCi1wcmV2aW91cyBtYXRjaCBpcyB0cnVuY2F0ZWQg dG8gYSBsZW5ndGggb2Ygb25lICh0aHVzIHByb2R1Y2luZyBhIHNpbmdsZQotbGl0ZXJhbCBieXRl KSBhbmQgdGhlIHByb2Nlc3Mgb2YgbGF6eSBldmFsdWF0aW9uIGJlZ2lucyBhZ2Fpbi4gT3RoZXJ3 aXNlLAotdGhlIG9yaWdpbmFsIG1hdGNoIGlzIGtlcHQsIGFuZCB0aGUgbmV4dCBtYXRjaCBzZWFy Y2ggaXMgYXR0ZW1wdGVkIG9ubHkgTgotc3RlcHMgbGF0ZXIuCi0KLVRoZSBsYXp5IG1hdGNoIGV2 YWx1YXRpb24gaXMgYWxzbyBzdWJqZWN0IHRvIGEgcnVudGltZSBwYXJhbWV0ZXIuIElmCi10aGUg Y3VycmVudCBtYXRjaCBpcyBsb25nIGVub3VnaCwgZGVmbGF0ZSgpIHJlZHVjZXMgdGhlIHNlYXJj aCBmb3IgYSBsb25nZXIKLW1hdGNoLCB0aHVzIHNwZWVkaW5nIHVwIHRoZSB3aG9sZSBwcm9jZXNz LiBJZiBjb21wcmVzc2lvbiByYXRpbyBpcyBtb3JlCi1pbXBvcnRhbnQgdGhhbiBzcGVlZCwgZGVm bGF0ZSgpIGF0dGVtcHRzIGEgY29tcGxldGUgc2Vjb25kIHNlYXJjaCBldmVuIGlmCi10aGUgZmly c3QgbWF0Y2ggaXMgYWxyZWFkeSBsb25nIGVub3VnaC4KLQotVGhlIGxhenkgbWF0Y2ggZXZhbHVh dGlvbiBpcyBub3QgcGVyZm9ybWVkIGZvciB0aGUgZmFzdGVzdCBjb21wcmVzc2lvbgotbW9kZXMg KGxldmVsIHBhcmFtZXRlciAxIHRvIDMpLiBGb3IgdGhlc2UgZmFzdCBtb2RlcywgbmV3IHN0cmlu Z3MKLWFyZSBpbnNlcnRlZCBpbiB0aGUgaGFzaCB0YWJsZSBvbmx5IHdoZW4gbm8gbWF0Y2ggd2Fz IGZvdW5kLCBvcgotd2hlbiB0aGUgbWF0Y2ggaXMgbm90IHRvbyBsb25nLiBUaGlzIGRlZ3JhZGVz IHRoZSBjb21wcmVzc2lvbiByYXRpbwotYnV0IHNhdmVzIHRpbWUgc2luY2UgdGhlcmUgYXJlIGJv dGggZmV3ZXIgaW5zZXJ0aW9ucyBhbmQgZmV3ZXIgc2VhcmNoZXMuCi0KLQotMi4gRGVjb21wcmVz c2lvbiBhbGdvcml0aG0gKGluZmxhdGUpCi0KLTIuMSBJbnRyb2R1Y3Rpb24KLQotVGhlIGtleSBx dWVzdGlvbiBpcyBob3cgdG8gcmVwcmVzZW50IGEgSHVmZm1hbiBjb2RlIChvciBhbnkgcHJlZml4 IGNvZGUpIHNvCi10aGF0IHlvdSBjYW4gZGVjb2RlIGZhc3QuICBUaGUgbW9zdCBpbXBvcnRhbnQg Y2hhcmFjdGVyaXN0aWMgaXMgdGhhdCBzaG9ydGVyCi1jb2RlcyBhcmUgbXVjaCBtb3JlIGNvbW1v biB0aGFuIGxvbmdlciBjb2Rlcywgc28gcGF5IGF0dGVudGlvbiB0byBkZWNvZGluZyB0aGUKLXNo b3J0IGNvZGVzIGZhc3QsIGFuZCBsZXQgdGhlIGxvbmcgY29kZXMgdGFrZSBsb25nZXIgdG8gZGVj b2RlLgotCi1pbmZsYXRlKCkgc2V0cyB1cCBhIGZpcnN0IGxldmVsIHRhYmxlIHRoYXQgY292ZXJz IHNvbWUgbnVtYmVyIG9mIGJpdHMgb2YKLWlucHV0IGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIGxv bmdlc3QgY29kZS4gIEl0IGdldHMgdGhhdCBtYW55IGJpdHMgZnJvbSB0aGUKLXN0cmVhbSwgYW5k IGxvb2tzIGl0IHVwIGluIHRoZSB0YWJsZS4gIFRoZSB0YWJsZSB3aWxsIHRlbGwgaWYgdGhlIG5l eHQKLWNvZGUgaXMgdGhhdCBtYW55IGJpdHMgb3IgbGVzcyBhbmQgaG93IG1hbnksIGFuZCBpZiBp dCBpcywgaXQgd2lsbCB0ZWxsCi10aGUgdmFsdWUsIGVsc2UgaXQgd2lsbCBwb2ludCB0byB0aGUg bmV4dCBsZXZlbCB0YWJsZSBmb3Igd2hpY2ggaW5mbGF0ZSgpCi1ncmFicyBtb3JlIGJpdHMgYW5k IHRyaWVzIHRvIGRlY29kZSBhIGxvbmdlciBjb2RlLgotCi1Ib3cgbWFueSBiaXRzIHRvIG1ha2Ug dGhlIGZpcnN0IGxvb2t1cCBpcyBhIHRyYWRlb2ZmIGJldHdlZW4gdGhlIHRpbWUgaXQKLXRha2Vz IHRvIGRlY29kZSBhbmQgdGhlIHRpbWUgaXQgdGFrZXMgdG8gYnVpbGQgdGhlIHRhYmxlLiAgSWYg YnVpbGRpbmcgdGhlCi10YWJsZSB0b29rIG5vIHRpbWUgKGFuZCBpZiB5b3UgaGFkIGluZmluaXRl IG1lbW9yeSksIHRoZW4gdGhlcmUgd291bGQgb25seQotYmUgYSBmaXJzdCBsZXZlbCB0YWJsZSB0 byBjb3ZlciBhbGwgdGhlIHdheSB0byB0aGUgbG9uZ2VzdCBjb2RlLiAgSG93ZXZlciwKLWJ1aWxk aW5nIHRoZSB0YWJsZSBlbmRzIHVwIHRha2luZyBhIGxvdCBsb25nZXIgZm9yIG1vcmUgYml0cyBz aW5jZSBzaG9ydAotY29kZXMgYXJlIHJlcGxpY2F0ZWQgbWFueSB0aW1lcyBpbiBzdWNoIGEgdGFi bGUuICBXaGF0IGluZmxhdGUoKSBkb2VzIGlzCi1zaW1wbHkgdG8gbWFrZSB0aGUgbnVtYmVyIG9m IGJpdHMgaW4gdGhlIGZpcnN0IHRhYmxlIGEgdmFyaWFibGUsIGFuZCAgdGhlbgotdG8gc2V0IHRo YXQgdmFyaWFibGUgZm9yIHRoZSBtYXhpbXVtIHNwZWVkLgotCi1Gb3IgaW5mbGF0ZSwgd2hpY2gg aGFzIDI4NiBwb3NzaWJsZSBjb2RlcyBmb3IgdGhlIGxpdGVyYWwvbGVuZ3RoIHRyZWUsIHRoZSBz aXplCi1vZiB0aGUgZmlyc3QgdGFibGUgaXMgbmluZSBiaXRzLiAgQWxzbyB0aGUgZGlzdGFuY2Ug dHJlZXMgaGF2ZSAzMCBwb3NzaWJsZQotdmFsdWVzLCBhbmQgdGhlIHNpemUgb2YgdGhlIGZpcnN0 IHRhYmxlIGlzIHNpeCBiaXRzLiAgTm90ZSB0aGF0IGZvciBlYWNoIG9mCi10aG9zZSBjYXNlcywg dGhlIHRhYmxlIGVuZGVkIHVwIG9uZSBiaXQgbG9uZ2VyIHRoYW4gdGhlIGBgYXZlcmFnZScnIGNv ZGUKLWxlbmd0aCwgaS5lLiB0aGUgY29kZSBsZW5ndGggb2YgYW4gYXBwcm94aW1hdGVseSBmbGF0 IGNvZGUgd2hpY2ggd291bGQgYmUgYQotbGl0dGxlIG1vcmUgdGhhbiBlaWdodCBiaXRzIGZvciAy ODYgc3ltYm9scyBhbmQgYSBsaXR0bGUgbGVzcyB0aGFuIGZpdmUgYml0cwotZm9yIDMwIHN5bWJv bHMuCi0KLQotMi4yIE1vcmUgZGV0YWlscyBvbiB0aGUgaW5mbGF0ZSB0YWJsZSBsb29rdXAKLQot T2ssIHlvdSB3YW50IHRvIGtub3cgd2hhdCB0aGlzIGNsZXZlcmx5IG9iZnVzY2F0ZWQgaW5mbGF0 ZSB0cmVlIGFjdHVhbGx5Ci1sb29rcyBsaWtlLiAgWW91IGFyZSBjb3JyZWN0IHRoYXQgaXQncyBu b3QgYSBIdWZmbWFuIHRyZWUuICBJdCBpcyBzaW1wbHkgYQotbG9va3VwIHRhYmxlIGZvciB0aGUg Zmlyc3QsIGxldCdzIHNheSwgbmluZSBiaXRzIG9mIGEgSHVmZm1hbiBzeW1ib2wuICBUaGUKLXN5 bWJvbCBjb3VsZCBiZSBhcyBzaG9ydCBhcyBvbmUgYml0IG9yIGFzIGxvbmcgYXMgMTUgYml0cy4g IElmIGEgcGFydGljdWxhcgotc3ltYm9sIGlzIHNob3J0ZXIgdGhhbiBuaW5lIGJpdHMsIHRoZW4g dGhhdCBzeW1ib2wncyB0cmFuc2xhdGlvbiBpcyBkdXBsaWNhdGVkCi1pbiBhbGwgdGhvc2UgZW50 cmllcyB0aGF0IHN0YXJ0IHdpdGggdGhhdCBzeW1ib2wncyBiaXRzLiAgRm9yIGV4YW1wbGUsIGlm IHRoZQotc3ltYm9sIGlzIGZvdXIgYml0cywgdGhlbiBpdCdzIGR1cGxpY2F0ZWQgMzIgdGltZXMg aW4gYSBuaW5lLWJpdCB0YWJsZS4gIElmIGEKLXN5bWJvbCBpcyBuaW5lIGJpdHMgbG9uZywgaXQg YXBwZWFycyBpbiB0aGUgdGFibGUgb25jZS4KLQotSWYgdGhlIHN5bWJvbCBpcyBsb25nZXIgdGhh biBuaW5lIGJpdHMsIHRoZW4gdGhhdCBlbnRyeSBpbiB0aGUgdGFibGUgcG9pbnRzCi10byBhbm90 aGVyIHNpbWlsYXIgdGFibGUgZm9yIHRoZSByZW1haW5pbmcgYml0cy4gIEFnYWluLCB0aGVyZSBh cmUgZHVwbGljYXRlZAotZW50cmllcyBhcyBuZWVkZWQuICBUaGUgaWRlYSBpcyB0aGF0IG1vc3Qg b2YgdGhlIHRpbWUgdGhlIHN5bWJvbCB3aWxsIGJlIHNob3J0Ci1hbmQgdGhlcmUgd2lsbCBvbmx5 IGJlIG9uZSB0YWJsZSBsb29rIHVwLiAgKFRoYXQncyB3aG9sZSBpZGVhIGJlaGluZCBkYXRhCi1j b21wcmVzc2lvbiBpbiB0aGUgZmlyc3QgcGxhY2UuKSAgRm9yIHRoZSBsZXNzIGZyZXF1ZW50IGxv bmcgc3ltYm9scywgdGhlcmUKLXdpbGwgYmUgdHdvIGxvb2t1cHMuICBJZiB5b3UgaGFkIGEgY29t cHJlc3Npb24gbWV0aG9kIHdpdGggcmVhbGx5IGxvbmcKLXN5bWJvbHMsIHlvdSBjb3VsZCBoYXZl IGFzIG1hbnkgbGV2ZWxzIG9mIGxvb2t1cHMgYXMgaXMgZWZmaWNpZW50LiAgRm9yCi1pbmZsYXRl LCB0d28gaXMgZW5vdWdoLgotCi1TbyBhIHRhYmxlIGVudHJ5IGVpdGhlciBwb2ludHMgdG8gYW5v dGhlciB0YWJsZSAoaW4gd2hpY2ggY2FzZSBuaW5lIGJpdHMgaW4KLXRoZSBhYm92ZSBleGFtcGxl IGFyZSBnb2JibGVkKSwgb3IgaXQgY29udGFpbnMgdGhlIHRyYW5zbGF0aW9uIGZvciB0aGUgc3lt Ym9sCi1hbmQgdGhlIG51bWJlciBvZiBiaXRzIHRvIGdvYmJsZS4gIFRoZW4geW91IHN0YXJ0IGFn YWluIHdpdGggdGhlIG5leHQKLXVuZ29iYmxlZCBiaXQuCi0KLVlvdSBtYXkgd29uZGVyOiB3aHkg bm90IGp1c3QgaGF2ZSBvbmUgbG9va3VwIHRhYmxlIGZvciBob3cgZXZlciBtYW55IGJpdHMgdGhl Ci1sb25nZXN0IHN5bWJvbCBpcz8gIFRoZSByZWFzb24gaXMgdGhhdCBpZiB5b3UgZG8gdGhhdCwg eW91IGVuZCB1cCBzcGVuZGluZwotbW9yZSB0aW1lIGZpbGxpbmcgaW4gZHVwbGljYXRlIHN5bWJv bCBlbnRyaWVzIHRoYW4geW91IGRvIGFjdHVhbGx5IGRlY29kaW5nLgotQXQgbGVhc3QgZm9yIGRl ZmxhdGUncyBvdXRwdXQgdGhhdCBnZW5lcmF0ZXMgbmV3IHRyZWVzIGV2ZXJ5IHNldmVyYWwgMTAn cyBvZgota2J5dGVzLiAgWW91IGNhbiBpbWFnaW5lIHRoYXQgZmlsbGluZyBpbiBhIDJeMTUgZW50 cnkgdGFibGUgZm9yIGEgMTUtYml0IGNvZGUKLXdvdWxkIHRha2UgdG9vIGxvbmcgaWYgeW91J3Jl IG9ubHkgZGVjb2Rpbmcgc2V2ZXJhbCB0aG91c2FuZCBzeW1ib2xzLiAgQXQgdGhlCi1vdGhlciBl eHRyZW1lLCB5b3UgY291bGQgbWFrZSBhIG5ldyB0YWJsZSBmb3IgZXZlcnkgYml0IGluIHRoZSBj b2RlLiAgSW4gZmFjdCwKLXRoYXQncyBlc3NlbnRpYWxseSBhIEh1ZmZtYW4gdHJlZS4gIEJ1dCB0 aGVuIHlvdSBzcGVuZCB0d28gbXVjaCB0aW1lCi10cmF2ZXJzaW5nIHRoZSB0cmVlIHdoaWxlIGRl Y29kaW5nLCBldmVuIGZvciBzaG9ydCBzeW1ib2xzLgotCi1TbyB0aGUgbnVtYmVyIG9mIGJpdHMg Zm9yIHRoZSBmaXJzdCBsb29rdXAgdGFibGUgaXMgYSB0cmFkZSBvZiB0aGUgdGltZSB0bwotZmls bCBvdXQgdGhlIHRhYmxlIHZzLiB0aGUgdGltZSBzcGVudCBsb29raW5nIGF0IHRoZSBzZWNvbmQg bGV2ZWwgYW5kIGFib3ZlIG9mCi10aGUgdGFibGUuCi0KLUhlcmUgaXMgYW4gZXhhbXBsZSwgc2Nh bGVkIGRvd246Ci0KLVRoZSBjb2RlIGJlaW5nIGRlY29kZWQsIHdpdGggMTAgc3ltYm9scywgZnJv bSAxIHRvIDYgYml0cyBsb25nOgotCi1BOiAwCi1COiAxMAotQzogMTEwMAotRDogMTEwMTAKLUU6 IDExMDExCi1GOiAxMTEwMAotRzogMTExMDEKLUg6IDExMTEwCi1JOiAxMTExMTAKLUo6IDExMTEx MQotCi1MZXQncyBtYWtlIHRoZSBmaXJzdCB0YWJsZSB0aHJlZSBiaXRzIGxvbmcgKGVpZ2h0IGVu dHJpZXMpOgotCi0wMDA6IEEsMQotMDAxOiBBLDEKLTAxMDogQSwxCi0wMTE6IEEsMQotMTAwOiBC LDIKLTEwMTogQiwyCi0xMTA6IC0+IHRhYmxlIFggKGdvYmJsZSAzIGJpdHMpCi0xMTE6IC0+IHRh YmxlIFkgKGdvYmJsZSAzIGJpdHMpCi0KLUVhY2ggZW50cnkgaXMgd2hhdCB0aGUgYml0cyBkZWNv ZGUgYXMgYW5kIGhvdyBtYW55IGJpdHMgdGhhdCBpcywgaS5lLiBob3cKLW1hbnkgYml0cyB0byBn b2JibGUuICBPciB0aGUgZW50cnkgcG9pbnRzIHRvIGFub3RoZXIgdGFibGUsIHdpdGggdGhlIG51 bWJlciBvZgotYml0cyB0byBnb2JibGUgaW1wbGljaXQgaW4gdGhlIHNpemUgb2YgdGhlIHRhYmxl LgotCi1UYWJsZSBYIGlzIHR3byBiaXRzIGxvbmcgc2luY2UgdGhlIGxvbmdlc3QgY29kZSBzdGFy dGluZyB3aXRoIDExMCBpcyBmaXZlIGJpdHMKLWxvbmc6Ci0KLTAwOiBDLDEKLTAxOiBDLDEKLTEw OiBELDIKLTExOiBFLDIKLQotVGFibGUgWSBpcyB0aHJlZSBiaXRzIGxvbmcgc2luY2UgdGhlIGxv bmdlc3QgY29kZSBzdGFydGluZyB3aXRoIDExMSBpcyBzaXgKLWJpdHMgbG9uZzoKLQotMDAwOiBG LDIKLTAwMTogRiwyCi0wMTA6IEcsMgotMDExOiBHLDIKLTEwMDogSCwyCi0xMDE6IEgsMgotMTEw OiBJLDMKLTExMTogSiwzCi0KLVNvIHdoYXQgd2UgaGF2ZSBoZXJlIGFyZSB0aHJlZSB0YWJsZXMg d2l0aCBhIHRvdGFsIG9mIDIwIGVudHJpZXMgdGhhdCBoYWQgdG8KLWJlIGNvbnN0cnVjdGVkLiAg VGhhdCdzIGNvbXBhcmVkIHRvIDY0IGVudHJpZXMgZm9yIGEgc2luZ2xlIHRhYmxlLiAgT3IKLWNv bXBhcmVkIHRvIDE2IGVudHJpZXMgZm9yIGEgSHVmZm1hbiB0cmVlIChzaXggdHdvIGVudHJ5IHRh YmxlcyBhbmQgb25lIGZvdXIKLWVudHJ5IHRhYmxlKS4gIEFzc3VtaW5nIHRoYXQgdGhlIGNvZGUg aWRlYWxseSByZXByZXNlbnRzIHRoZSBwcm9iYWJpbGl0eSBvZgotdGhlIHN5bWJvbHMsIGl0IHRh a2VzIG9uIHRoZSBhdmVyYWdlIDEuMjUgbG9va3VwcyBwZXIgc3ltYm9sLiAgVGhhdCdzIGNvbXBh cmVkCi10byBvbmUgbG9va3VwIGZvciB0aGUgc2luZ2xlIHRhYmxlLCBvciAxLjY2IGxvb2t1cHMg cGVyIHN5bWJvbCBmb3IgdGhlCi1IdWZmbWFuIHRyZWUuCi0KLVRoZXJlLCBJIHRoaW5rIHRoYXQg Z2l2ZXMgeW91IGEgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uICBGb3IgaW5mbGF0ZSwgdGhl Ci1tZWFuaW5nIG9mIGEgcGFydGljdWxhciBzeW1ib2wgaXMgb2Z0ZW4gbW9yZSB0aGFuIGp1c3Qg YSBsZXR0ZXIuICBJdCBjYW4gYmUgYQotYnl0ZSAoYSAibGl0ZXJhbCIpLCBvciBpdCBjYW4gYmUg ZWl0aGVyIGEgbGVuZ3RoIG9yIGEgZGlzdGFuY2Ugd2hpY2gKLWluZGljYXRlcyBhIGJhc2UgdmFs dWUgYW5kIGEgbnVtYmVyIG9mIGJpdHMgdG8gZmV0Y2ggYWZ0ZXIgdGhlIGNvZGUgdGhhdCBpcwot YWRkZWQgdG8gdGhlIGJhc2UgdmFsdWUuICBPciBpdCBtaWdodCBiZSB0aGUgc3BlY2lhbCBlbmQt b2YtYmxvY2sgY29kZS4gIFRoZQotZGF0YSBzdHJ1Y3R1cmVzIGNyZWF0ZWQgaW4gaW5mdHJlZXMu YyB0cnkgdG8gZW5jb2RlIGFsbCB0aGF0IGluZm9ybWF0aW9uCi1jb21wYWN0bHkgaW4gdGhlIHRh Ymxlcy4KLQotCi1KZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCi1qbG91cEBnemlw Lm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1Ci0KLQotUmVmZXJlbmNlczoK LQotW0xaNzddIFppdiBKLiwgTGVtcGVsIEEuLCBgYEEgVW5pdmVyc2FsIEFsZ29yaXRobSBmb3Ig U2VxdWVudGlhbCBEYXRhCi1Db21wcmVzc2lvbiwnJyBJRUVFIFRyYW5zYWN0aW9ucyBvbiBJbmZv cm1hdGlvbiBUaGVvcnksIFZvbC4gMjMsIE5vLiAzLAotcHAuIDMzNy0zNDMuCi0KLWBgREVGTEFU RSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24nJyBhdmFpbGFibGUgaW4KLWh0 dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1y IDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL2NvbXByZXNzLmMKLS0tIGEvc3lzL3Ny Yy9jbWQvZ3MvemxpYi9jb21wcmVzcy5jCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAor KysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2NvbXByZXNzLmMJV2VkIE1heSAyNyAxNzozOTozNyAy MDIwIC0wMzAwCkBAIC0xLDkgKzEsOSBAQAogLyogY29tcHJlc3MuYyAtLSBjb21wcmVzcyBhIG1l bW9yeSBidWZmZXIKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEplYW4tbG91cCBHYWlsbHku CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxNCwgMjAxNiBKZWFuLWxvdXAgR2FpbGx5 LCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwg c2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAotLyogQCgjKSAkSWQ6IGNvbXBy ZXNzLmMsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6MzggZ2lsZXMgRXhwICQgKi8KKy8qIEAo IykgJElkJCAqLwogCiAjZGVmaW5lIFpMSUJfSU5URVJOQUwKICNpbmNsdWRlICJ6bGliLmgiCkBA IC0yOCwxNiArMjgsMTEgQEAKIHsKICAgICB6X3N0cmVhbSBzdHJlYW07CiAgICAgaW50IGVycjsK KyAgICBjb25zdCB1SW50IG1heCA9ICh1SW50KS0xOworICAgIHVMb25nIGxlZnQ7CiAKLSAgICBz dHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOwotICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1 SW50KXNvdXJjZUxlbjsKLSNpZmRlZiBNQVhTRUdfNjRLCi0gICAgLyogQ2hlY2sgZm9yIHNvdXJj ZSA+IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KLSAgICBpZiAoKHVMb25nKXN0cmVhbS5hdmFp bF9pbiAhPSBzb3VyY2VMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKLSNlbmRpZgotICAgIHN0cmVh bS5uZXh0X291dCA9IGRlc3Q7Ci0gICAgc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpkZXN0TGVu OwotICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX291dCAhPSAqZGVzdExlbikgcmV0dXJuIFpf QlVGX0VSUk9SOworICAgIGxlZnQgPSAqZGVzdExlbjsKKyAgICAqZGVzdExlbiA9IDA7CiAKICAg ICBzdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKICAgICBzdHJlYW0uemZyZWUgPSAoZnJl ZV9mdW5jKTA7CkBAIC00NiwxNSArNDEsMjYgQEAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmc3Ry ZWFtLCBsZXZlbCk7CiAgICAgaWYgKGVyciAhPSBaX09LKSByZXR1cm4gZXJyOwogCi0gICAgZXJy ID0gZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7Ci0gICAgaWYgKGVyciAhPSBaX1NUUkVBTV9F TkQpIHsKLSAgICAgICAgZGVmbGF0ZUVuZCgmc3RyZWFtKTsKLSAgICAgICAgcmV0dXJuIGVyciA9 PSBaX09LID8gWl9CVUZfRVJST1IgOiBlcnI7Ci0gICAgfQorICAgIHN0cmVhbS5uZXh0X291dCA9 IGRlc3Q7CisgICAgc3RyZWFtLmF2YWlsX291dCA9IDA7CisgICAgc3RyZWFtLm5leHRfaW4gPSAo el9jb25zdCBCeXRlZiAqKXNvdXJjZTsKKyAgICBzdHJlYW0uYXZhaWxfaW4gPSAwOworCisgICAg ZG8geworICAgICAgICBpZiAoc3RyZWFtLmF2YWlsX291dCA9PSAwKSB7CisgICAgICAgICAgICBz dHJlYW0uYXZhaWxfb3V0ID0gbGVmdCA+ICh1TG9uZyltYXggPyBtYXggOiAodUludClsZWZ0Owor ICAgICAgICAgICAgbGVmdCAtPSBzdHJlYW0uYXZhaWxfb3V0OworICAgICAgICB9CisgICAgICAg IGlmIChzdHJlYW0uYXZhaWxfaW4gPT0gMCkgeworICAgICAgICAgICAgc3RyZWFtLmF2YWlsX2lu ID0gc291cmNlTGVuID4gKHVMb25nKW1heCA/IG1heCA6ICh1SW50KXNvdXJjZUxlbjsKKyAgICAg ICAgICAgIHNvdXJjZUxlbiAtPSBzdHJlYW0uYXZhaWxfaW47CisgICAgICAgIH0KKyAgICAgICAg ZXJyID0gZGVmbGF0ZSgmc3RyZWFtLCBzb3VyY2VMZW4gPyBaX05PX0ZMVVNIIDogWl9GSU5JU0gp OworICAgIH0gd2hpbGUgKGVyciA9PSBaX09LKTsKKwogICAgICpkZXN0TGVuID0gc3RyZWFtLnRv dGFsX291dDsKLQotICAgIGVyciA9IGRlZmxhdGVFbmQoJnN0cmVhbSk7Ci0gICAgcmV0dXJuIGVy cjsKKyAgICBkZWZsYXRlRW5kKCZzdHJlYW0pOworICAgIHJldHVybiBlcnIgPT0gWl9TVFJFQU1f RU5EID8gWl9PSyA6IGVycjsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NSw1ICs4 MSw2IEBACiB1TG9uZyBaRVhQT1JUIGNvbXByZXNzQm91bmQgKHNvdXJjZUxlbikKICAgICB1TG9u ZyBzb3VyY2VMZW47CiB7Ci0gICAgcmV0dXJuIHNvdXJjZUxlbiArIChzb3VyY2VMZW4gPj4gMTIp ICsgKHNvdXJjZUxlbiA+PiAxNCkgKyAxMTsKKyAgICByZXR1cm4gc291cmNlTGVuICsgKHNvdXJj ZUxlbiA+PiAxMikgKyAoc291cmNlTGVuID4+IDE0KSArCisgICAgICAgICAgIChzb3VyY2VMZW4g Pj4gMjUpICsgMTM7CiB9CmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdmOSBzeXMv c3JjL2NtZC9ncy96bGliL2NvbmZpZ3VyZQotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL2NvbmZp Z3VyZQlXZWQgTWF5IDI3IDAwOjA5OjQ2IDIwMjAgKzAyMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3Mv emxpYi9jb25maWd1cmUJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBAIC0xLDQ0MyAr MSw5MjEgQEAKICMhL2Jpbi9zaAotIyBjb25maWd1cmUgc2NyaXB0IGZvciB6bGliLiBUaGlzIHNj cmlwdCBpcyBuZWVkZWQgb25seSBpZgotIyB5b3Ugd2lzaCB0byBidWlsZCBhIHNoYXJlZCBsaWJy YXJ5IGFuZCB5b3VyIHN5c3RlbSBzdXBwb3J0cyB0aGVtLAotIyBvZiBpZiB5b3UgbmVlZCBzcGVj aWFsIGNvbXBpbGVyLCBmbGFncyBvciBpbnN0YWxsIGRpcmVjdG9yeS4KLSMgT3RoZXJ3aXNlLCB5 b3UgY2FuIGp1c3QgdXNlIGRpcmVjdGx5ICJtYWtlIHRlc3Q7IG1ha2UgaW5zdGFsbCIKKyMgY29u ZmlndXJlIHNjcmlwdCBmb3IgemxpYi4KICMKLSMgVG8gY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnks IHVzZSAiY29uZmlndXJlIC0tc2hhcmVkIjsgYnkgZGVmYXVsdCBhIHN0YXRpYwotIyBsaWJyYXJ5 IGlzIGNyZWF0ZWQuIElmIHRoZSBwcmltaXRpdmUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCBwcm92 aWRlZCBoZXJlCi0jIGRvZXMgbm90IHdvcmssIHVzZSBmdHA6Ly9wcmVwLmFpLm1pdC5lZHUvcHVi L2dudS9saWJ0b29sLSoudGFyLmd6CisjIE5vcm1hbGx5IGNvbmZpZ3VyZSBidWlsZHMgYm90aCBh IHN0YXRpYyBhbmQgYSBzaGFyZWQgbGlicmFyeS4KKyMgSWYgeW91IHdhbnQgdG8gYnVpbGQganVz dCBhIHN0YXRpYyBsaWJyYXJ5LCB1c2U6IC4vY29uZmlndXJlIC0tc3RhdGljCiAjCiAjIFRvIGlt cG9zZSBzcGVjaWZpYyBjb21waWxlciBvciBmbGFncyBvciBpbnN0YWxsIGRpcmVjdG9yeSwgdXNl IGZvciBleGFtcGxlOgogIyAgICBwcmVmaXg9JEhPTUUgQ0M9Y2MgQ0ZMQUdTPSItTzQiIC4vY29u ZmlndXJlCiAjIG9yIGZvciBjc2gvdGNzaCB1c2VyczoKICMgICAgKHNldGVudiBwcmVmaXggJEhP TUU7IHNldGVudiBDQyBjYzsgc2V0ZW52IENGTEFHUyAiLU80IjsgLi9jb25maWd1cmUpCi0jIExE U0hBUkVEIGlzIHRoZSBjb21tYW5kIHRvIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2hhcmVkIGxpYnJh cnkKIAogIyBJbmNvcnJlY3Qgc2V0dGluZ3Mgb2YgQ0Mgb3IgQ0ZMQUdTIG1heSBwcmV2ZW50IGNy ZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCiAjIElmIHlvdSBoYXZlIHByb2JsZW1zLCB0cnkgd2l0 aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTIGJlZm9yZSByZXBvcnRpbmcKICMgYW4gZXJyb3Iu CiAKLUxJQlM9bGliei5hCi1MREZMQUdTPSItTC4gJHtMSUJTfSIKLVZFUj1gc2VkIC1uIC1lICcv VkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgemxpYi5oYAotVkVSMj1gc2VkIC1uIC1l ICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcKVxcLi4qL1wxL3AnIDwgemxpYi5o YAotVkVSMT1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcKVxcLi4qL1wxL3An IDwgemxpYi5oYAotQVI9JHtBUi0iYXIgcmMifQotUkFOTElCPSR7UkFOTElCLSJyYW5saWIifQor IyBzdGFydCBvZmYgY29uZmlndXJlLmxvZworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiBj b25maWd1cmUubG9nCitlY2hvICQwICQqID4+IGNvbmZpZ3VyZS5sb2cKK2RhdGUgPj4gY29uZmln dXJlLmxvZworCisjIGdldCBzb3VyY2UgZGlyZWN0b3J5CitTUkNESVI9YGRpcm5hbWUgJDBgCitp ZiB0ZXN0ICRTUkNESVIgPSAiLiI7IHRoZW4KKyAgICBaSU5DPSIiCisgICAgWklOQ09VVD0iLUku IgorICAgIFNSQ0RJUj0iIgorZWxzZQorICAgIFpJTkM9Jy1pbmNsdWRlIHpjb25mLmgnCisgICAg WklOQ09VVD0nLUkuIC1JJChTUkNESVIpJworICAgIFNSQ0RJUj0iJFNSQ0RJUi8iCitmaQorCisj IHNldCBjb21tYW5kIHByZWZpeCBmb3IgY3Jvc3MtY29tcGlsYXRpb24KK2lmIFsgLW4gIiR7Q0hP U1R9IiBdOyB0aGVuCisgICAgdW5hbWU9ImBlY2hvICIke0NIT1NUfSIgfCBzZWQgLWUgJ3MvXlte LV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpJC9cMS8nIC1l ICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCktLiokL1wxLydgIgorICAgIENST1NTX1BSRUZJWD0i JHtDSE9TVH0tIgorZmkKKworIyBkZXN0aW5hdGlvbiBuYW1lIGZvciBzdGF0aWMgbGlicmFyeQor U1RBVElDTElCPWxpYnouYQorCisjIGV4dHJhY3QgemxpYiB2ZXJzaW9uIG51bWJlcnMgZnJvbSB6 bGliLmgKK1ZFUj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwg JHtTUkNESVJ9emxpYi5oYAorVkVSMz1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05 XSpcXC5bMC05XSpcXC5bMC05XSpcKS4qL1wxL3AnIDwgJHtTUkNESVJ9emxpYi5oYAorVkVSMj1g c2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcKVxcLi4qL1wxL3An IDwgJHtTUkNESVJ9emxpYi5oYAorVkVSMT1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChb MC05XSpcKVxcLi4qL1wxL3AnIDwgJHtTUkNESVJ9emxpYi5oYAorCisjIGVzdGFibGlzaCBjb21t YW5kcyBmb3IgbGlicmFyeSBidWlsZGluZworaWYgIiR7Q1JPU1NfUFJFRklYfWFyIiAtLXZlcnNp b24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KKyAgICBB Uj0ke0FSLSIke0NST1NTX1BSRUZJWH1hciJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9 IiAmJiBlY2hvIFVzaW5nICR7QVJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgICBB Uj0ke0FSLSJhciJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5n ICR7QVJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2ZpCitBUkZMQUdTPSR7QVJGTEFHUy0icmMi fQoraWYgIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2 L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCisgICAgUkFOTElCPSR7UkFOTElCLSIke0NS T1NTX1BSRUZJWH1yYW5saWIifQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNo byBVc2luZyAke1JBTkxJQn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICAgIFJBTkxJ Qj0ke1JBTkxJQi0icmFubGliIn0KK2ZpCitpZiAiJHtDUk9TU19QUkVGSVh9bm0iIC0tdmVyc2lv biA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgorICAgIE5N PSR7Tk0tIiR7Q1JPU1NfUFJFRklYfW5tIn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0i ICYmIGVjaG8gVXNpbmcgJHtOTX0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICAgIE5N PSR7Tk0tIm5tIn0KK2ZpCisKKyMgc2V0IGRlZmF1bHRzIGJlZm9yZSBwcm9jZXNzaW5nIGNvbW1h bmQgbGluZSBvcHRpb25zCitMRENPTkZJRz0ke0xEQ09ORklHLSJsZGNvbmZpZyJ9CitMRFNIQVJF RExJQkM9IiR7TERTSEFSRURMSUJDLS1sY30iCitBUkNIUz0KIHByZWZpeD0ke3ByZWZpeC0vdXNy L2xvY2FsfQogZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeC0nJHtwcmVmaXh9J30KIGxpYmRpcj0k e2xpYmRpci0nJHtleGVjX3ByZWZpeH0vbGliJ30KK3NoYXJlZGxpYmRpcj0ke3NoYXJlZGxpYmRp ci0nJHtsaWJkaXJ9J30KIGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyLScke3ByZWZpeH0vaW5jbHVk ZSd9CiBtYW5kaXI9JHttYW5kaXItJyR7cHJlZml4fS9zaGFyZS9tYW4nfQogc2hhcmVkX2V4dD0n LnNvJwotc2hhcmVkPTAKK3NoYXJlZD0xCitzb2xvPTAKK2NvdmVyPTAKK3pwcmVmaXg9MAoremNv bnN0PTAKK2J1aWxkNjQ9MAogZ2NjPTAKK3dhcm49MAorZGVidWc9MAogb2xkX2NjPSIkQ0MiCiBv bGRfY2ZsYWdzPSIkQ0ZMQUdTIgorT0JKQz0nJChPQkpaKSAkKE9CSkcpJworUElDX09CSkM9JyQo UElDX09CSlopICQoUElDX09CSkcpJwogCisjIGxlYXZlIHRoaXMgc2NyaXB0LCBvcHRpb25hbGx5 IGluIGEgYmFkIHdheQorbGVhdmUoKQoreworICBpZiB0ZXN0ICIkKiIgIT0gIjAiOyB0aGVuCisg ICAgZWNobyAiKiogJDAgYWJvcnRpbmcuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGZpCisg IHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5nY25vIC4vLS12 ZXJzaW9uCisgIGVjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gY29uZmlndXJlLmxvZworICBl Y2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGV4aXQgJDEK K30KKworIyBwcm9jZXNzIGNvbW1hbmQgbGluZSBvcHRpb25zCiB3aGlsZSB0ZXN0ICQjIC1nZSAx CiBkbwogY2FzZSAiJDEiIGluCi0gICAgLWgqIHwgLS1oKikKLSAgICAgIGVjaG8gJ3VzYWdlOicK LSAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLXNoYXJlZF0gWy0tcHJlZml4PVBSRUZJWF0gIFst LWV4ZWNfcHJlZml4PUVYUFJFRklYXScKLSAgICAgIGVjaG8gJyAgICAgWy0tbGliZGlyPUxJQkRJ Ul0gWy0taW5jbHVkZWRpcj1JTkNMVURFRElSXScKLSAgICAgICAgZXhpdCAwOzsKLSAgICAtcCo9 KiB8IC0tcCo9KikgcHJlZml4PWBlY2hvICQxIHwgc2VkICdzL1stYS16X10qPS8vJ2A7IHNoaWZ0 OzsKLSAgICAtZSo9KiB8IC0tZSo9KikgZXhlY19wcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvWy1h LXpfXSo9Ly8nYDsgc2hpZnQ7OwotICAgIC1sKj0qIHwgLS1saWJkaXI9KikgbGliZGlyPWBlY2hv ICQxIHwgc2VkICdzL1stYS16X10qPS8vJ2A7IHNoaWZ0OzsKLSAgICAtaSo9KiB8IC0taW5jbHVk ZWRpcj0qKSBpbmNsdWRlZGlyPWBlY2hvICQxIHwgc2VkICdzL1stYS16X10qPS8vJ2A7c2hpZnQ7 OwotICAgIC1wKiB8IC0tcCopIHByZWZpeD0iJDIiOyBzaGlmdDsgc2hpZnQ7OwotICAgIC1lKiB8 IC0tZSopIGV4ZWNfcHJlZml4PSIkMiI7IHNoaWZ0OyBzaGlmdDs7Ci0gICAgLWwqIHwgLS1sKikg bGliZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdDs7Ci0gICAgLWkqIHwgLS1pKikgaW5jbHVkZWRpcj0i JDIiOyBzaGlmdDsgc2hpZnQ7OwotICAgIC1zKiB8IC0tcyopIHNoYXJlZD0xOyBzaGlmdDs7Ci0g ICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxw IjsgZXhpdCAxOzsKKyAgICAtaCogfCAtLWhlbHApCisgICAgICBlY2hvICd1c2FnZTonIHwgdGVl IC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLWNvbnN0XSBbLS16 cHJlZml4XSBbLS1wcmVmaXg9UFJFRklYXSAgWy0tZXByZWZpeD1FWFBSRUZJWF0nIHwgdGVlIC1h IGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJk aXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScgfCB0ZWUgLWEgY29uZmlndXJlLmxv ZworICAgICAgZWNobyAnICAgIFstLWluY2x1ZGVkaXI9SU5DTFVERURJUl0gWy0tYXJjaHM9Ii1h cmNoIGkzODYgLWFyY2ggeDg2XzY0Il0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgICAg ZXhpdCAwIDs7CisgICAgLXAqPSogfCAtLXByZWZpeD0qKSBwcmVmaXg9YGVjaG8gJDEgfCBzZWQg J3MvLio9Ly8nYDsgc2hpZnQgOzsKKyAgICAtZSo9KiB8IC0tZXByZWZpeD0qKSBleGVjX3ByZWZp eD1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OworICAgIC1sKj0qIHwgLS1saWJk aXI9KikgbGliZGlyPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLS1z aGFyZWRsaWJkaXI9Kikgc2hhcmVkbGliZGlyPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNo aWZ0IDs7CisgICAgLWkqPSogfCAtLWluY2x1ZGVkaXI9KikgaW5jbHVkZWRpcj1gZWNobyAkMSB8 IHNlZCAncy8uKj0vLydgO3NoaWZ0IDs7CisgICAgLXUqPSogfCAtLXVuYW1lPSopIHVuYW1lPWBl Y2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7c2hpZnQgOzsKKyAgICAtcCogfCAtLXByZWZpeCkgcHJl Zml4PSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworICAgIC1lKiB8IC0tZXByZWZpeCkgZXhlY19wcmVm aXg9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisgICAgLWwqIHwgLS1saWJkaXIpIGxpYmRpcj0iJDIi OyBzaGlmdDsgc2hpZnQgOzsKKyAgICAtaSogfCAtLWluY2x1ZGVkaXIpIGluY2x1ZGVkaXI9IiQy Ijsgc2hpZnQ7IHNoaWZ0IDs7CisgICAgLXMqIHwgLS1zaGFyZWQgfCAtLWVuYWJsZS1zaGFyZWQp IHNoYXJlZD0xOyBzaGlmdCA7OworICAgIC10IHwgLS1zdGF0aWMpIHNoYXJlZD0wOyBzaGlmdCA7 OworICAgIC0tc29sbykgc29sbz0xOyBzaGlmdCA7OworICAgIC0tY292ZXIpIGNvdmVyPTE7IHNo aWZ0IDs7CisgICAgLXoqIHwgLS16cHJlZml4KSB6cHJlZml4PTE7IHNoaWZ0IDs7CisgICAgLTYq IHwgLS02NCkgYnVpbGQ2ND0xOyBzaGlmdCA7OworICAgIC1hKj0qIHwgLS1hcmNocz0qKSBBUkNI Uz1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OworICAgIC0tc3lzY29uZmRpcj0q KSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIiB8IHRlZSAtYSBjb25maWd1cmUu bG9nOyBzaGlmdCA7OworICAgIC0tbG9jYWxzdGF0ZWRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlv bjogLS1sb2NhbHN0YXRlZGlyIiB8IHRlZSAtYSBjb25maWd1cmUubG9nOyBzaGlmdCA7OworICAg IC1jKiB8IC0tY29uc3QpIHpjb25zdD0xOyBzaGlmdCA7OworICAgIC13KiB8IC0td2Fybikgd2Fy bj0xOyBzaGlmdCA7OworICAgIC1kKiB8IC0tZGVidWcpIGRlYnVnPTE7IHNoaWZ0IDs7CisgICAg KikKKyAgICAgIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSIgfCB0ZWUgLWEgY29uZmlndXJlLmxv ZworICAgICAgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIiB8IHRlZSAtYSBjb25maWd1cmUubG9n CisgICAgICBsZWF2ZSAxOzsKICAgICBlc2FjCiBkb25lCiAKKyMgdGVtcG9yYXJ5IGZpbGUgbmFt ZQogdGVzdD16dGVzdCQkCisKKyMgcHV0IGFyZ3VtZW50cyBpbiBsb2csIGFsc28gcHV0IHRlc3Qg ZmlsZSBpbiBsb2cgaWYgdXNlZCBpbiBhcmd1bWVudHMKK3Nob3coKQoreworICBjYXNlICIkKiIg aW4KKyAgICAqJHRlc3QuYyopCisgICAgICBlY2hvID09PSAkdGVzdC5jID09PSA+PiBjb25maWd1 cmUubG9nCisgICAgICBjYXQgJHRlc3QuYyA+PiBjb25maWd1cmUubG9nCisgICAgICBlY2hvID09 PSA+PiBjb25maWd1cmUubG9nOzsKKyAgZXNhYworICBlY2hvICQqID4+IGNvbmZpZ3VyZS5sb2cK K30KKworIyBjaGVjayBmb3IgZ2NjIHZzLiBjYyBhbmQgc2V0IGNvbXBpbGUgYW5kIGxpbmsgZmxh Z3MgYmFzZWQgb24gdGhlIHN5c3RlbSBpZGVudGlmaWVkIGJ5IHVuYW1lCiBjYXQgPiAkdGVzdC5j IDw8RU9GCiBleHRlcm4gaW50IGdldGNoYXIoKTsKIGludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hh cigpO30KIEVPRgogCi10ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yIGdjYy4uLgot Y2M9JHtDQy1nY2N9Cit0ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1Nf UFJFRklYfWdjYy4uLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitjYz0ke0NDLSR7Q1JPU1NfUFJF RklYfWdjY30KIGNmbGFncz0ke0NGTEFHUy0iLU8zIn0KICMgdG8gZm9yY2UgdGhlIGFzbSB2ZXJz aW9uIHVzZTogQ0ZMQUdTPSItTzMgLURBU01WIiAuL2NvbmZpZ3VyZQogY2FzZSAiJGNjIiBpbgot ICAqZ2NjKikgZ2NjPTE7OworICAqZ2NjKikgZ2NjPTEgOzsKKyAgKmNsYW5nKikgZ2NjPTEgOzsK K2VzYWMKK2Nhc2UgYCRjYyAtdiAyPiYxYCBpbgorICAqZ2NjKikgZ2NjPTEgOzsKKyAgKmNsYW5n KikgZ2NjPTEgOzsKIGVzYWMKIAotaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkY2Zs YWdzICR0ZXN0LmMpIDI+L2Rldi9udWxsOyB0aGVuCitzaG93ICRjYyAtYyAkdGVzdC5jCitpZiB0 ZXN0ICIkZ2NjIiAtZXEgMSAmJiAoJGNjIC1jICR0ZXN0LmMpID4+IGNvbmZpZ3VyZS5sb2cgMj4m MTsgdGhlbgorICBlY2hvIC4uLiB1c2luZyBnY2MgPj4gY29uZmlndXJlLmxvZwogICBDQz0iJGNj IgotICBTRkxBR1M9JHtDRkxBR1MtIi1mUElDIC1PMyJ9Ci0gIENGTEFHUz0iJGNmbGFncyIKLSAg Y2FzZSBgKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCi0gIExpbnV4 IHwgbGludXggfCBHTlUgfCBHTlUvKikgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQg LVdsLC1zb25hbWUsbGliei5zby4xIn07OwotICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiog fCBPUy8yKiApCi0gICAgICAgICAgICAgRVhFPScuZXhlJzs7CisgIENGTEFHUz0iJHtDRkxBR1Mt LU8zfSIKKyAgU0ZMQUdTPSIke0NGTEFHUy0tTzN9IC1mUElDIgorICBpZiB0ZXN0ICIkQVJDSFMi OyB0aGVuCisgICAgQ0ZMQUdTPSIke0NGTEFHU30gJHtBUkNIU30iCisgICAgTERGTEFHUz0iJHtM REZMQUdTfSAke0FSQ0hTfSIKKyAgZmkKKyAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgor ICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCisgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIK KyAgZmkKKyAgaWYgdGVzdCAiJHdhcm4iIC1lcSAxOyB0aGVuCisgICAgaWYgdGVzdCAiJHpjb25z dCIgLWVxIDE7IHRoZW4KKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLVdj YXN0LXF1YWwgLXBlZGFudGljIC1EWkxJQl9DT05TVCIKKyAgICBlbHNlCisgICAgICBDRkxBR1M9 IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKKyAgICBmaQorICBmaQorICBpZiB0 ZXN0ICRkZWJ1ZyAtZXEgMTsgdGhlbgorICAgIENGTEFHUz0iJHtDRkxBR1N9IC1EWkxJQl9ERUJV RyIKKyAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRFpMSUJfREVCVUciCisgIGZpCisgIGlmIHRlc3Qg LXogIiR1bmFtZSI7IHRoZW4KKyAgICB1bmFtZT1gKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikg Mj4vZGV2L251bGxgCisgIGZpCisgIGNhc2UgIiR1bmFtZSIgaW4KKyAgTGludXgqIHwgbGludXgq IHwgR05VIHwgR05VLyogfCBzb2xhcmlzKikKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0i JGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsJHtTUkNE SVJ9emxpYi5tYXAifSA7OworICAqQlNEIHwgKmJzZCogfCBEcmFnb25GbHkpCisgICAgICAgIExE U0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZl cnNpb24tc2NyaXB0LCR7U1JDRElSfXpsaWIubWFwIn0KKyAgICAgICAgTERDT05GSUc9ImxkY29u ZmlnIC1tIiA7OworICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiogfCBPUy8yKikKKyAgICAg ICAgRVhFPScuZXhlJyA7OworICBNSU5HVyogfCBtaW5ndyopCisjIHRlbXBvcmFyeSBieXBhc3MK KyAgICAgICAgcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0CisgICAgICAg IGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIiB8IHRlZSAtYSBj b25maWd1cmUubG9nCisgICAgICAgIGxlYXZlIDEKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJF RC0iJGNjIC1zaGFyZWQifQorICAgICAgICBMRFNIQVJFRExJQkM9IiIKKyAgICAgICAgRVhFPScu ZXhlJyA7OwogICBRTlgqKSAgIyBUaGlzIGlzIGZvciBRTlg2LiBJIHN1cHBvc2UgdGhhdCB0aGUg UU5YIHJ1bGUgYmVsb3cgaXMgZm9yIFFOWDIsUU5YNAogICAgICAgICAgIyAoYWxhaW4uYm9ubmVm b3lAaWNidC5jb20pCi0gICAgICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAt c2hhcmVkIC1XbCwtaGxpYnouc28uMSJ9OzsKLSAgSFAtVVgqKSAgICAgICAgTERTSEFSRUQ9JHtM RFNIQVJFRC0iJGNjIC1zaGFyZWQgJFNGTEFHUyJ9CisgICAgICAgICAgICAgICAgIExEU0hBUkVE PSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtaGxpYnouc28uMSJ9IDs7CisgIEhQLVVYKikK KyAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkICRTRkxBR1MifQorICAg ICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisg ICAgICAgICBpYTY0KQorICAgICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc28nCisgICAgICAg ICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbycgOzsKKyAgICAgICAgICopCiAgICAgICAgICAg ICAgICAgIHNoYXJlZF9leHQ9Jy5zbCcKLSAgICAgICAgICAgICAgICAgU0hBUkVETElCPSdsaWJ6 LnNsJzs7Ci0gIERhcndpbiopICAgc2hhcmVkX2V4dD0nLmR5bGliJworICAgICAgICAgICAgICAg ICBTSEFSRURMSUI9J2xpYnouc2wnIDs7CisgICAgICAgICBlc2FjIDs7CisgIERhcndpbiogfCBk YXJ3aW4qKQorICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5keWxpYicKICAgICAgICAgICAgICBT SEFSRURMSUI9bGlieiRzaGFyZWRfZXh0CiAgICAgICAgICAgICAgU0hBUkVETElCVj1saWJ6LiRW RVIkc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQk09bGliei4kVkVSMSRzaGFyZWRf ZXh0Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1keW5hbWljbGliIC1p bnN0YWxsX25hbWUgJGxpYmRpci8kU0hBUkVETElCViAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICRW RVIyIC1jdXJyZW50X3ZlcnNpb24gJFZFUiJ9OzsKLSAgKikgICAgICAgICAgICAgTERTSEFSRUQ9 JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifTs7CisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNI QVJFRC0iJGNjIC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJGxpYmRpci8kU0hBUkVETElCTSAt Y29tcGF0aWJpbGl0eV92ZXJzaW9uICRWRVIxIC1jdXJyZW50X3ZlcnNpb24gJFZFUjMifQorICAg ICAgICAgICAgIGlmIGxpYnRvb2wgLVYgMj4mMSB8IGdyZXAgQXBwbGUgPiAvZGV2L251bGw7IHRo ZW4KKyAgICAgICAgICAgICAgICAgQVI9ImxpYnRvb2wiCisgICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgICBBUj0iL3Vzci9iaW4vbGlidG9vbCIKKyAgICAgICAgICAgICBmaQorICAg ICAgICAgICAgIEFSRkxBR1M9Ii1vIiA7OworICAqKSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xE U0hBUkVELSIkY2MgLXNoYXJlZCJ9IDs7CiAgIGVzYWMKIGVsc2UKICAgIyBmaW5kIHN5c3RlbSBu YW1lIGFuZCBjb3JyZXNwb25kaW5nIGNjIG9wdGlvbnMKICAgQ0M9JHtDQy1jY30KLSAgY2FzZSBg KHVuYW1lIC1zciB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgorICBnY2M9MAorICBl Y2hvIC4uLiB1c2luZyAkQ0MgPj4gY29uZmlndXJlLmxvZworICBpZiB0ZXN0IC16ICIkdW5hbWUi OyB0aGVuCisgICAgdW5hbWU9YCh1bmFtZSAtc3IgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVs bGAKKyAgZmkKKyAgY2FzZSAiJHVuYW1lIiBpbgogICBIUC1VWCopICAgIFNGTEFHUz0ke0NGTEFH Uy0iLU8gK3oifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8ifQogIyAgICAgICAg ICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImxkIC1iICt2bm9jb21wYXR3YXJuaW5ncyJ9CiAgICAg ICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQgLWIifQorICAgICAgICAgY2FzZSBgKHVu YW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisgICAgICAgICBpYTY0KQor ICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5zbycKKyAgICAgICAgICAgICBTSEFSRURMSUI9J2xp Ynouc28nIDs7CisgICAgICAgICAqKQogICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5zbCcKLSAg ICAgICAgICAgICBTSEFSRURMSUI9J2xpYnouc2wnOzsKKyAgICAgICAgICAgICBTSEFSRURMSUI9 J2xpYnouc2wnIDs7CisgICAgICAgICBlc2FjIDs7CiAgIElSSVgqKSAgICAgU0ZMQUdTPSR7Q0ZM QUdTLSItYW5zaSAtTzIgLXJwYXRoIC4ifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0i LWFuc2kgLU8yIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVk In07OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQgLVdsLC1z b25hbWUsbGliei5zby4xIn0gOzsKICAgT1NGMVwgVjQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PIC1z dGQxIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KLSAgICAgICAg ICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkICAtV2wsLXNvbmFtZSxsaWJ6LnNv IC1XbCwtbXN5bSAtV2wsLXJwYXRoLCQobGliZGlyKSAtV2wsLXNldF92ZXJzaW9uLCR7VkVSfTox LjAifTs7CisgICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSAtV2wsLXJwYXRoLC4iCisg ICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLXNoYXJlZCAgLVdsLC1zb25hbWUs bGliei5zbyAtV2wsLW1zeW0gLVdsLC1ycGF0aCwkKGxpYmRpcikgLVdsLC1zZXRfdmVyc2lvbiwk e1ZFUn06MS4wIn0gOzsKICAgT1NGMSopICAgICBTRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0K ICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KLSAgICAgICAgICAgICBM RFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkIn07OworICAgICAgICAgICAgIExEU0hBUkVE PSR7TERTSEFSRUQtImNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xIn0gOzsKICAgUU5Y KikgICAgICBTRkxBR1M9JHtDRkxBR1MtIi00IC1PIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtD RkxBR1MtIi00IC1PIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyJ9CiAg ICAgICAgICAgICAgUkFOTElCPSR7UkFOTElCLSJ0cnVlIn0KLSAgICAgICAgICAgICBBUj0iY2Mg LUEiOzsKKyAgICAgICAgICAgICBBUj0iY2MiCisgICAgICAgICAgICAgQVJGTEFHUz0iLUEiIDs7 CiAgIFNDT19TVlwgMy4yKikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzMgLWR5IC1LUElDICJ9CiAgICAg ICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzMifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7 TERTSEFSRUQtImNjIC1keSAtS1BJQyAtRyJ9OzsKLSAgU3VuT1NcIDUqKSBTRkxBR1M9JHtDRkxB R1MtIi1mYXN0IC14Y2c4OSAtS1BJQyAtUi4ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFH Uy0iLWZhc3QgLXhjZzg5In0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAt RyJ9OzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtZHkgLUtQSUMgLUci fSA7OworICBTdW5PU1wgNSogfCBzb2xhcmlzKikKKyAgICAgICAgIExEU0hBUkVEPSR7TERTSEFS RUQtImNjIC1HIC1oIGxpYnokc2hhcmVkX2V4dC4kVkVSMSJ9CisgICAgICAgICBTRkxBR1M9JHtD RkxBR1MtIi1mYXN0IC1LUElDIn0KKyAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QifQor ICAgICAgICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgorICAgICAgICAgICAgICMgb2xk IHZlcnNpb25zIG9mIFN1blBSTy9Xb3Jrc2hvcC9TdHVkaW8gZG9uJ3Qgc3VwcG9ydCAtbTY0LAor ICAgICAgICAgICAgICMgYnV0IG5ld2VyIG9uZXMgZG8uICBDaGVjayBmb3IgaXQuCisgICAgICAg ICAgICAgZmxhZzY0PWAkQ0MgLWZsYWdzIHwgZWdyZXAgLS0gJ14tbTY0J2AKKyAgICAgICAgICAg ICBpZiB0ZXN0IHgiJGZsYWc2NCIgIT0geCIiIDsgdGhlbgorICAgICAgICAgICAgICAgICBDRkxB R1M9IiR7Q0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAt bTY0IgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgY2FzZSBgKHVuYW1lIC1t IHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisgICAgICAgICAgICAgICAgICAgaTg2 KikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9YW1kNjQiCisg ICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPWFtZDY0IiA7OworICAg ICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICBTRkxBR1M9IiRTRkxBR1Mg LXhhcmNoPXY5IgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD12 OSIgOzsKKyAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgIGZpCisgICAgICAgICBm aQorICAgICAgICAgaWYgdGVzdCAtbiAiJFpJTkMiOyB0aGVuCisgICAgICAgICAgICAgWklOQz0n LUktIC1JLiAtSSQoU1JDRElSKScKKyAgICAgICAgIGZpCisgICAgICAgICA7OwogICBTdW5PU1wg NCopIFNGTEFHUz0ke0NGTEFHUy0iLU8yIC1QSUMifQogICAgICAgICAgICAgIENGTEFHUz0ke0NG TEFHUy0iLU8yIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJsZCJ9OzsKKyAg ICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJsZCJ9IDs7CisgIFN1blN0dWRpb1wgOSop IFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjb2RlPXBpYzMyIC14dGFyZ2V0PXVsdHJhMyAteGFy Y2g9djliIn0KKyAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14dGFyZ2V0PXVs dHJhMyAteGFyY2g9djliIn0KKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAt eGFyY2g9djliIn0gOzsKICAgVU5JWF9TeXN0ZW1fVlwgNC4yLjApCiAgICAgICAgICAgICAgU0ZM QUdTPSR7Q0ZMQUdTLSItS1BJQyAtTyJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSIt TyJ9Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcifTs7CisgICAgICAg ICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcifSA7OwogICBVTklYX1NWXCA0LjJNUCkK ICAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1LY29uZm9ybV9waWMgLU8ifQogICAgICAg ICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8ifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERT SEFSRUQtImNjIC1HIn07OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1H In0gOzsKICAgT3BlblVOSVhcIDUpCiAgICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItS1BJ QyAtTyJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTyJ9Ci0gICAgICAgICAgICAg TERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcifTs7CisgICAgICAgICAgICAgTERTSEFSRUQ9JHtM RFNIQVJFRC0iY2MgLUcifSA7OwogICBBSVgqKSAgIyBDb3VydGVzeSBvZiBkYmFra2VyQGFycmF5 YXNvbHV0aW9ucy5jb20KICAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1PIC1xbWF4bWVt PTgxOTIifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8gLXFtYXhtZW09ODE5MiJ9 Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ieGxjIC1HIn07OwotICAjIHNlbmQg d29ya2luZyBvcHRpb25zIGZvciBvdGhlciBzeXN0ZW1zIHRvIHN1cHBvcnRAZ3ppcC5vcmcKKyAg ICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJ4bGMgLUcifSA7OworICAjIHNlbmQgd29y a2luZyBvcHRpb25zIGZvciBvdGhlciBzeXN0ZW1zIHRvIHpsaWJAZ3ppcC5vcmcKICAgKikgICAg ICAgICBTRkxBR1M9JHtDRkxBR1MtIi1PIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1Mt Ii1PIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkIn07Owor ICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQifSA7OwogICBlc2Fj CiBmaQogCisjIGRlc3RpbmF0aW9uIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyeSBpZiBub3QgZGVm aW5lZCBhYm92ZQogU0hBUkVETElCPSR7U0hBUkVETElCLSJsaWJ6JHNoYXJlZF9leHQifQogU0hB UkVETElCVj0ke1NIQVJFRExJQlYtImxpYnokc2hhcmVkX2V4dC4kVkVSIn0KIFNIQVJFRExJQk09 JHtTSEFSRURMSUJNLSJsaWJ6JHNoYXJlZF9leHQuJFZFUjEifQogCitlY2hvID4+IGNvbmZpZ3Vy ZS5sb2cKKworIyBkZWZpbmUgZnVuY3Rpb25zIGZvciB0ZXN0aW5nIGNvbXBpbGVyIGFuZCBsaWJy YXJ5IGNoYXJhY3RlcmlzdGljcyBhbmQgbG9nZ2luZyB0aGUgcmVzdWx0cworCitjYXQgPiAkdGVz dC5jIDw8RU9GCisjZXJyb3IgZXJyb3IKK0VPRgoraWYgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMp IDI+L2Rldi9udWxsOyB0aGVuCisgIHRyeSgpCisgIHsKKyAgICBzaG93ICQqCisgICAgdGVzdCAi YCggJCogKSAyPiYxIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2dgIiA9ICIiCisgIH0KKyAgZWNobyAt IHVzaW5nIGFueSBvdXRwdXQgZnJvbSBjb21waWxlciB0byBpbmRpY2F0ZSBhbiBlcnJvciA+PiBj b25maWd1cmUubG9nCitlbHNlCisgIHRyeSgpCisgIHsKKyAgICBzaG93ICQqCisgICAgKCAkKiAp ID4+IGNvbmZpZ3VyZS5sb2cgMj4mMQorICAgIHJldD0kPworICAgIGlmIHRlc3QgJHJldCAtbmUg MDsgdGhlbgorICAgICAgZWNobyAiKGV4aXQgY29kZSAiJHJldCIpIiA+PiBjb25maWd1cmUubG9n CisgICAgZmkKKyAgICByZXR1cm4gJHJldAorICB9CitmaQorCit0cnlib3RoKCkKK3sKKyAgc2hv dyAkKgorICBnb3Q9YCggJCogKSAyPiYxYAorICByZXQ9JD8KKyAgcHJpbnRmICVzICIkZ290IiA+ PiBjb25maWd1cmUubG9nCisgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgIHJldHVybiAk cmV0CisgIGZpCisgIHRlc3QgIiRnb3QiID0gIiIKK30KKworY2F0ID4gJHRlc3QuYyA8PCBFT0YK K2ludCBmb28oKSB7IHJldHVybiAwOyB9CitFT0YKK2VjaG8gIkNoZWNraW5nIGZvciBvYnNlc3Np dmUtY29tcHVsc2l2ZSBjb21waWxlciBvcHRpb25zLi4uIiA+PiBjb25maWd1cmUubG9nCitpZiB0 cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIkNvbXBp bGVyIGVycm9yIHJlcG9ydGluZyBpcyB0b28gaGFyc2ggZm9yICQwIChwZXJoYXBzIHJlbW92ZSAt V2Vycm9yKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgbGVhdmUgMQorZmkKKworZWNobyA+ PiBjb25maWd1cmUubG9nCisKKyMgc2VlIGlmIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIHN1cHBvcnRl ZAorY2F0ID4gJHRlc3QuYyA8PEVPRgorZXh0ZXJuIGludCBnZXRjaGFyKCk7CitpbnQgaGVsbG8o KSB7cmV0dXJuIGdldGNoYXIoKTt9CitFT0YKIGlmIHRlc3QgJHNoYXJlZCAtZXEgMTsgdGhlbgot ICBlY2hvIENoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0Li4uCisgIGVjaG8gQ2hl Y2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxv ZwogICAjIHdlIG11c3QgdGVzdCBpbiB0d28gc3RlcHMgKGNjIHRoZW4gbGQpLCByZXF1aXJlZCBh dCBsZWFzdCBvbiBTdW5PUyA0LngKLSAgaWYgdGVzdCAiYCgkQ0MgLWMgJFNGTEFHUyAkdGVzdC5j KSAyPiYxYCIgPSAiIiAmJgotICAgICB0ZXN0ICJgKCRMRFNIQVJFRCAtbyAkdGVzdCRzaGFyZWRf ZXh0ICR0ZXN0Lm8pIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgQ0ZMQUdTPSIkU0ZMQUdTIgotICAg IExJQlM9IiRTSEFSRURMSUJWIgotICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNI QVJFRExJQlYgd2l0aCAkQ0MuCisgIGlmIHRyeSAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jICYm CisgICAgIHRyeSAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm87 IHRoZW4KKyAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGgg JENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEg LXogIiRvbGRfY2ZsYWdzIjsgdGhlbgotICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9y dC4KKyAgICBlY2hvIE5vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIHwgdGVlIC1hIGNvbmZpZ3Vy ZS5sb2cKICAgICBzaGFyZWQ9MDsKICAgZWxzZQotICAgIGVjaG8gJ05vIHNoYXJlZCBsaWJyYXJ5 IHN1cHBvcnQ7IHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MnCisgICAgZWNobyAn Tm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENG TEFHUycgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIHNoYXJlZD0wOwogICBmaQogZmkKIGlm IHRlc3QgJHNoYXJlZCAtZXEgMDsgdGhlbgogICBMRFNIQVJFRD0iJENDIgotICBlY2hvIEJ1aWxk aW5nIHN0YXRpYyBsaWJyYXJ5ICRMSUJTIHZlcnNpb24gJFZFUiB3aXRoICRDQy4KKyAgQUxMPSJz dGF0aWMiCisgIFRFU1Q9ImFsbCB0ZXN0c3RhdGljIgorICBTSEFSRURMSUI9IiIKKyAgU0hBUkVE TElCVj0iIgorICBTSEFSRURMSUJNPSIiCisgIGVjaG8gQnVpbGRpbmcgc3RhdGljIGxpYnJhcnkg JFNUQVRJQ0xJQiB2ZXJzaW9uICRWRVIgd2l0aCAkQ0MuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cK IGVsc2UKLSAgTERGTEFHUz0iLUwuICR7U0hBUkVETElCVn0iCisgIEFMTD0ic3RhdGljIHNoYXJl ZCIKKyAgVEVTVD0iYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZCIKIGZpCiAKKyMgY2hlY2sgZm9y IHVuZGVyc2NvcmVzIGluIGV4dGVybmFsIG5hbWVzIGZvciB1c2UgYnkgYXNzZW1ibGVyIGNvZGUK K0NQUD0ke0NQUC0iJENDIC1FIn0KK2Nhc2UgJENGTEFHUyBpbgorICAqQVNNViopCisgICAgZWNo byA+PiBjb25maWd1cmUubG9nCisgICAgc2hvdyAiJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyIK KyAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyB8IHRlZSAtYSBjb25maWd1 cmUubG9nYCIgPSAiIjsgdGhlbgorICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgorICAg ICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLiB8 IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWxzZQorICAgICAgZWNobyBDaGVja2luZyBmb3Ig dW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFllcy4gfCB0ZWUgLWEgY29uZmlndXJlLmxv ZworICAgIGZpIDs7Citlc2FjCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZv ciBzaXplX3QKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1 ZGUgPHN0ZGxpYi5oPgorc2l6ZV90IGR1bW15ID0gMDsKK0VPRgoraWYgdHJ5ICRDQyAtYyAkQ0ZM QUdTICR0ZXN0LmM7IHRoZW4KKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHNpemVfdC4uLiBZZXMuIiB8 IHRlZSAtYSBjb25maWd1cmUubG9nCisgIG5lZWRfc2l6ZXQ9MAorZWxzZQorICBlY2hvICJDaGVj a2luZyBmb3Igc2l6ZV90Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBuZWVkX3Np emV0PTEKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGZpbmQgdGhlIHNpemVfdCBp bnRlZ2VyIHR5cGUsIGlmIG5lZWRlZAoraWYgdGVzdCAkbmVlZF9zaXpldCAtZXEgMTsgdGhlbgor ICBjYXQgPiAkdGVzdC5jIDw8RU9GCitsb25nIGxvbmcgZHVtbXkgPSAwOworRU9GCisgIGlmIHRy eSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGxv bmcgbG9uZy4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgY2F0ID4gJHRlc3Qu YyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbih2b2lkKSB7CisgICAgaWYgKHNp emVvZih2b2lkICopIDw9IHNpemVvZihpbnQpKSBwdXRzKCJpbnQiKTsKKyAgICBlbHNlIGlmIChz aXplb2Yodm9pZCAqKSA8PSBzaXplb2YobG9uZykpIHB1dHMoImxvbmciKTsKKyAgICBlbHNlIHB1 dHMoInpfbG9uZ2xvbmciKTsKKyAgICByZXR1cm4gMDsKK30KK0VPRgorICBlbHNlCisgICAgZWNo byAiQ2hlY2tpbmcgZm9yIGxvbmcgbG9uZy4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cK KyAgICBjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKHZv aWQpIHsKKyAgICBpZiAoc2l6ZW9mKHZvaWQgKikgPD0gc2l6ZW9mKGludCkpIHB1dHMoImludCIp OworICAgIGVsc2UgcHV0cygibG9uZyIpOworICAgIHJldHVybiAwOworfQorRU9GCisgIGZpCisg IGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgc2l6ZXQ9YC4v JHRlc3RgCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGEgcG9pbnRlci1zaXplIGludGVnZXIgdHlw ZS4uLiIgJHNpemV0Ii4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZWxzZQorICAgIGVjaG8g IkZhaWxlZCB0byBmaW5kIGEgcG9pbnRlci1zaXplIGludGVnZXIgdHlwZS4iIHwgdGVlIC1hIGNv bmZpZ3VyZS5sb2cKKyAgICBsZWF2ZSAxCisgIGZpCitmaQorCitpZiB0ZXN0ICRuZWVkX3NpemV0 IC1lcSAxOyB0aGVuCisgIENGTEFHUz0iJHtDRkxBR1N9IC1ETk9fU0laRV9UPSR7c2l6ZXR9Igor ICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX1NJWkVfVD0ke3NpemV0fSIKK2ZpCisKK2VjaG8gPj4g Y29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQsIGFuZCBpZiBu b25lLCBjaGVjayBmb3IgZnNlZWtvKCkKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KK29mZjY0X3QgZHVtbXkgPSAwOworRU9GCitpZiB0cnkgJENDIC1jICRDRkxB R1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYzsgdGhlbgorICBDRkxBR1M9IiR7Q0ZM QUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKKyAgU0ZMQUdTPSIke1NGTEFHU30gLURfTEFS R0VGSUxFNjRfU09VUkNFPTEiCisgIEFMTD0iJHtBTEx9IGFsbDY0IgorICBURVNUPSIke1RFU1R9 IHRlc3Q2NCIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIgfCB0ZWUgLWEg Y29uZmlndXJlLmxvZworICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iIHwgdGVl IC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4g Tm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBj YXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKHZvaWQpIHsK KyAgZnNlZWtvKE5VTEwsIDAsIDApOworICByZXR1cm4gMDsKK30KK0VPRgorICBpZiB0cnkgJEND ICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBm c2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlbHNlCisgICAgQ0ZMQUdT PSIke0NGTEFHU30gLUROT19GU0VFS08iCisgICAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19GU0VF S08iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBOby4iIHwgdGVlIC1hIGNvbmZp Z3VyZS5sb2cKKyAgZmkKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZv ciBzdHJlcnJvcigpIGZvciB1c2UgYnkgZ3oqIGZ1bmN0aW9ucworY2F0ID4gJHRlc3QuYyA8PEVP RgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CitpbnQgbWFpbigpIHsg cmV0dXJuIHN0cmxlbihzdHJlcnJvcihlcnJubykpOyB9CitFT0YKK2lmIHRyeSAkQ0MgJENGTEFH UyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4u LiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgIENGTEFHUz0iJHtDRkxBR1N9 IC1ETk9fU1RSRVJST1IiCisgIFNGTEFHUz0iJHtTRkxBR1N9IC1ETk9fU1RSRVJST1IiCisgIGVj aG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cK K2ZpCisKKyMgY29weSBjbGVhbiB6Y29uZi5oIGZvciBzdWJzZXF1ZW50IGVkaXRzCitjcCAtcCAk e1NSQ0RJUn16Y29uZi5oLmluIHpjb25mLmgKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMg Y2hlY2sgZm9yIHVuaXN0ZC5oIGFuZCBzYXZlIHJlc3VsdCBpbiB6Y29uZi5oCiBjYXQgPiAkdGVz dC5jIDw8RU9GCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0K IEVPRgotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhl bgotICBzZWQgPCB6Y29uZi5pbi5oICIvSEFWRV9VTklTVERfSC9zJTAlMSUiID4gemNvbmYuaAot ICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gWWVzLiIKK2lmIHRyeSAkQ0MgLWMgJENG TEFHUyAkdGVzdC5jOyB0aGVuCisgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfVU5JU1RE X0guKiBtYXkgYmUvcy9kZWYgSEFWRV9VTklTVERfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+ IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorICBlY2hvICJDaGVja2lu ZyBmb3IgdW5pc3RkLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQotICBj cCAtcCB6Y29uZi5pbi5oIHpjb25mLmgKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4u IE5vLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIE5vLiIgfCB0ZWUgLWEgY29u ZmlndXJlLmxvZwogZmkKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHN0 ZGFyZy5oIGFuZCBzYXZlIHJlc3VsdCBpbiB6Y29uZi5oCitjYXQgPiAkdGVzdC5jIDw8RU9GCisj aW5jbHVkZSA8c3RkYXJnLmg+CitpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgoraWYgdHJ5 ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgc2VkIDwgemNvbmYuaCAiL14jaWZkZWYg SEFWRV9TVERBUkdfSC4qIG1heSBiZS9zL2RlZiBIQVZFX1NUREFSR19IXCguKlwpIG1heSBiZS8g MVwxIHdhcy8iID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCisgIGVj aG8gIkNoZWNraW5nIGZvciBzdGRhcmcuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9n CitlbHNlCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdGRhcmcuaC4uLiBOby4iIHwgdGVlIC1hIGNv bmZpZ3VyZS5sb2cKK2ZpCisKKyMgaWYgdGhlIHpfIHByZWZpeCB3YXMgcmVxdWVzdGVkLCBzYXZl IHRoYXQgaW4gemNvbmYuaAoraWYgdGVzdCAkenByZWZpeCAtZXEgMTsgdGhlbgorICBzZWQgPCB6 Y29uZi5oICIvI2lmZGVmIFpfUFJFRklYLiogbWF5IGJlL3MvZGVmIFpfUFJFRklYXCguKlwpIG1h eSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5o CisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBlY2hvICJVc2luZyB6XyBwcmVmaXggb24gYWxs IHN5bWJvbHMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGlmIC0tc29sbyBjb21w aWxhdGlvbiB3YXMgcmVxdWVzdGVkLCBzYXZlIHRoYXQgaW4gemNvbmYuaCBhbmQgcmVtb3ZlIGd6 IHN0dWZmIGZyb20gb2JqZWN0IGxpc3RzCitpZiB0ZXN0ICRzb2xvIC1lcSAxOyB0aGVuCisgIHNl ZCAnLyNkZWZpbmUgWkNPTkZfSC9hXAorI2RlZmluZSBaX1NPTE8KKworJyA8IHpjb25mLmggPiB6 Y29uZi50ZW1wLmgKKyAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKK09CSkM9JyQoT0JKWiknCitQ SUNfT0JKQz0nJChQSUNfT0JKWiknCitmaQorCisjIGlmIGNvZGUgY292ZXJhZ2UgdGVzdGluZyB3 YXMgcmVxdWVzdGVkLCB1c2Ugb2xkZXIgZ2NjIGlmIGRlZmluZWQsIGUuZy4gImdjYy00LjIiIG9u IE1hYyBPUyBYCitpZiB0ZXN0ICRjb3ZlciAtZXEgMTsgdGhlbgorICBDRkxBR1M9IiR7Q0ZMQUdT fSAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisgIGlmIHRlc3QgLW4gIiRHQ0NfQ0xB U1NJQyI7IHRoZW4KKyAgICBDQz0kR0NDX0NMQVNTSUMKKyAgZmkKK2ZpCisKK2VjaG8gPj4gY29u ZmlndXJlLmxvZworCisjIGNvbmR1Y3QgYSBzZXJpZXMgb2YgdGVzdHMgdG8gcmVzb2x2ZSBlaWdo dCBwb3NzaWJsZSBjYXNlcyBvZiB1c2luZyAidnMiIG9yICJzIiBwcmludGYgZnVuY3Rpb25zCisj ICh1c2luZyBzdGRhcmcgb3Igbm90KSwgd2l0aCBvciB3aXRob3V0ICJuIiAocHJvdmluZyBzaXpl IG9mIGJ1ZmZlciksIGFuZCB3aXRoIG9yIHdpdGhvdXQgYQorIyByZXR1cm4gdmFsdWUuICBUaGUg bW9zdCBzZWN1cmUgcmVzdWx0IGlzIHZzbnByaW50ZigpIHdpdGggYSByZXR1cm4gdmFsdWUuICBz bnByaW50ZigpIHdpdGggYQorIyByZXR1cm4gdmFsdWUgaXMgc2VjdXJlIGFzIHdlbGwsIGJ1dCB0 aGVuIGd6cHJpbnRmKCkgd2lsbCBiZSBsaW1pdGVkIHRvIDIwIGFyZ3VtZW50cy4KIGNhdCA+ICR0 ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2lu Y2x1ZGUgInpjb25mLmgiCi0KIGludCBtYWluKCkKIHsKICNpZm5kZWYgU1REQwogICBjaG9rZSBt ZQogI2VuZGlmCi0KICAgcmV0dXJuIDA7CiB9CiBFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAk dGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRm KCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25m aWd1cmUubG9nCiAKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0g IiI7IHRoZW4KLSAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBv ciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgdnNbbl1wcmludGYoKSIKLQorICBlY2hvID4+IGNvbmZp Z3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j bHVkZSA8c3RkYXJnLmg+Ci0KLWludCBteXRlc3QoY2hhciAqZm10LCAuLi4pCitpbnQgbXl0ZXN0 KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBjaGFyIGJ1ZlsyMF07CiAgIHZhX2xpc3QgYXA7 Ci0KICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBm bXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJuIDA7CiB9CitpbnQgbWFpbigpCit7Cisg IHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7Cit9CitFT0YKKyAgaWYgdHJ5ICRDQyAk Q0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNu cHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAg ICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRl IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG15dGVzdChjb25zdCBjaGFyICpm bXQsIC4uLikKK3sKKyAgaW50IG47CisgIGNoYXIgYnVmWzIwXTsKKyAgdmFfbGlzdCBhcDsKKyAg dmFfc3RhcnQoYXAsIGZtdCk7CisgIG4gPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10 LCBhcCk7CisgIHZhX2VuZChhcCk7CisgIHJldHVybiBuOworfQogaW50IG1haW4oKQogewogICBy ZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCiAKLSAgaWYgdGVzdCAiYCgk Q0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8g IkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCisgICAgaWYgdHJ5 ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciBy ZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxv ZworICAgIGVsc2UKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIK KyAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKKyAgICAgIGVjaG8g IkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAt YSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNucHJp bnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5s b2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUg c3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNo byAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZmkKKyAg ZWxzZQorICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX3ZzbnByaW50ZiIKKyAgICBTRkxBR1M9IiRT RkxBR1MgLUROT192c25wcmludGYiCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50Zigp IGluIHN0ZGlvLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBX QVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50Zigp LiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0 IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiIHwgdGVl IC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1h IGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRl c3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLWlu dCBteXRlc3QoY2hhciAqZm10LCAuLi4pCitpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4u KQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0 YXJ0KGFwLCBmbXQpOwotICBuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXAp OworICBuID0gdnNwcmludGYoYnVmLCBmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJu IG47CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEp KTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYx YCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2 c25wcmludGYoKS4uLiBZZXMuIgotICAgIGVsc2UKLSAgICAgIENGTEFHUz0iJENGTEFHUyAtREhB U192c25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUg b2YgdnNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5 IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAi ICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNl Y3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgotICAgIGZpCi0gIGVsc2UK LSAgICBDRkxBR1M9IiRDRkxBR1MgLUROT192c25wcmludGYiCi0gICAgZWNobyAiQ2hlY2tpbmcg Zm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIgotICAgIGVjaG8gIiAgV0FSTklORzog dnNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdnNwcmludGYoKS4gemxpYiIK LSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZl ci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCi0KLSAg ICBjYXQgPiR0ZXN0LmMgPDxFT0YKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFy Zy5oPgotCi1pbnQgbXl0ZXN0KGNoYXIgKmZtdCwgLi4uKQotewotICBpbnQgbjsKLSAgY2hhciBi dWZbMjBdOwotICB2YV9saXN0IGFwOwotCi0gIHZhX3N0YXJ0KGFwLCBmbXQpOwotICBuID0gdnNw cmludGYoYnVmLCBmbXQsIGFwKTsKLSAgdmFfZW5kKGFwKTsKLSAgcmV0dXJuIG47Ci19Ci0KLWlu dCBtYWluKCkKLXsKLSAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKLX0KLUVPRgot Ci0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhl bgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4u IFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVj aG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIiB8IHRl ZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFT X3ZzcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9m IHZzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZz cHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNh biBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJp dHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBTRkxBR1M9IiRTRkxB R1MgLURIQVNfdnNwcmludGZfdm9pZCIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4g dmFsdWUgb2YgdnNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAg IGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBh IHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBi dWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHki IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIg fCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGZpCiBlbHNlCi0gIGVjaG8gIkNoZWNr aW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5n IHNbbl1wcmludGYoKSIKKyAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmlu dGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgc1tuXXByaW50ZigpLiIgfCB0ZWUgLWEgY29u ZmlndXJlLmxvZwogCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiR0ZXN0LmMgPDxF T0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBd OwotCiAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICJmb28iKTsKICAgcmV0dXJu IDA7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAot ICBpZiB0ZXN0ICJgKCRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0 aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMu IgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8g IkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29u ZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5j IDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogaW50IG15dGVzdCgpCiB7CiAgIGNoYXIgYnVm WzIwXTsKLQogICByZXR1cm4gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIp OwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAg ICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0g ICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gWWVz LiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAi Q2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1h IGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc25w cmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25w cmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmlu dGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1 aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIK LSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIFNGTEFHUz0iJFNGTEFHUyAt REhBU19zbnByaW50Zl92b2lkIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1 ZSBvZiBzbnByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNo byAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFs dWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxk IGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0 ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRl ZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZWxzZQogICAgIENGTEFHUz0iJENGTEFHUyAt RE5PX3NucHJpbnRmIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlv LmguLi4gTm8uIgotICAgIGVjaG8gIiAgV0FSTklORzogc25wcmludGYoKSBub3QgZm91bmQsIGZh bGxpbmcgYmFjayB0byBzcHJpbnRmKCkuIHpsaWIiCi0gICAgZWNobyAiICBjYW4gYnVpbGQgYnV0 IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiCi0gICAg ZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3NucHJp bnRmIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8u IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBXQVJOSU5HOiBzbnByaW50Zigp IG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHNwcmludGYoKS4gemxpYiIgfCB0ZWUgLWEgY29u ZmlndXJlLmxvZworICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9z c2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisg ICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAg ICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRl IDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHJldHVy biBzcHJpbnRmKGJ1ZiwgIiVzIiwgImZvbyIpOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVy biAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0 ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJu IHZhbHVlIG9mIHNwcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAk dGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNw cmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAg Q0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5n IGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FS TklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIi Ci0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0 cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisg ICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgorICAgICAgZWNobyAiQ2hl Y2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25m aWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc3ByaW50ZigpIGRv ZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAg ICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1m b3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVs bmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGZpCiBmaQog Ci1jYXQgPiR0ZXN0LmMgPDxFT0YKLSNpbmNsdWRlIDxlcnJuby5oPgotaW50IG1haW4oKSB7IHJl dHVybiAwOyB9CisjIHNlZSBpZiB3ZSBjYW4gaGlkZSB6bGliIGludGVybmFsIHN5bWJvbHMgdGhh dCBhcmUgbGlua2VkIGJldHdlZW4gc2VwYXJhdGUgc291cmNlIGZpbGVzCitpZiB0ZXN0ICIkZ2Nj IiAtZXEgMTsgdGhlbgorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgY2F0ID4gJHRlc3QuYyA8 PEVPRgorI2RlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJo aWRkZW4iKSkpCitpbnQgWkxJQl9JTlRFUk5BTCBmb287CitpbnQgbWFpbigpCit7CisgIHJldHVy biAwOworfQogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9 ICIiOyB0aGVuCi0gIGVjaG8gIkNoZWNraW5nIGZvciBlcnJuby5oLi4uIFllcy4iCi1lbHNlCi0g IGVjaG8gIkNoZWNraW5nIGZvciBlcnJuby5oLi4uIE5vLiIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1E Tk9fRVJSTk9fSCIKKyAgaWYgdHJ5Ym90aCAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisg ICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgU0ZMQUdTPSIkU0ZMQUdTIC1E SEFWRV9ISURERU4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5 KSBzdXBwb3J0Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZWxzZQorICAgIGVj aG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBOby4iIHwg dGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZmkKIGZpCiAKLWNhdCA+ICR0ZXN0LmMgPDxFT0YKLSNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+Ci1jYWRkcl90IGhlbGxvKCkgewotICByZXR1cm4gbW1hcCgoY2FkZHJfdCkwLCAo b2ZmX3QpMCwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCAwLCAob2ZmX3QpMCk7Ci19Ci1FT0YKLWlm IHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgQ0ZM QUdTPSIkQ0ZMQUdTIC1EVVNFX01NQVAiCi0gIGVjaG8gQ2hlY2tpbmcgZm9yIG1tYXAgc3VwcG9y dC4uLiBZZXMuCi1lbHNlCi0gIGVjaG8gQ2hlY2tpbmcgZm9yIG1tYXAgc3VwcG9ydC4uLiBOby4K LWZpCisjIHNob3cgdGhlIHJlc3VsdHMgaW4gdGhlIGxvZworZWNobyA+PiBjb25maWd1cmUubG9n CitlY2hvIEFMTCA9ICRBTEwgPj4gY29uZmlndXJlLmxvZworZWNobyBBUiA9ICRBUiA+PiBjb25m aWd1cmUubG9nCitlY2hvIEFSRkxBR1MgPSAkQVJGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hv IENDID0gJENDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ0ZMQUdTID0gJENGTEFHUyA+PiBjb25m aWd1cmUubG9nCitlY2hvIENQUCA9ICRDUFAgPj4gY29uZmlndXJlLmxvZworZWNobyBFWEUgPSAk RVhFID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERDT05GSUcgPSAkTERDT05GSUcgPj4gY29uZmln dXJlLmxvZworZWNobyBMREZMQUdTID0gJExERkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBM RFNIQVJFRCA9ICRMRFNIQVJFRCA+PiBjb25maWd1cmUubG9nCitlY2hvIExEU0hBUkVETElCQyA9 ICRMRFNIQVJFRExJQkMgPj4gY29uZmlndXJlLmxvZworZWNobyBPQkpDID0gJE9CSkMgPj4gY29u ZmlndXJlLmxvZworZWNobyBQSUNfT0JKQyA9ICRQSUNfT0JKQyA+PiBjb25maWd1cmUubG9nCitl Y2hvIFJBTkxJQiA9ICRSQU5MSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBTRkxBR1MgPSAkU0ZM QUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCID0gJFNIQVJFRExJQiA+PiBjb25m aWd1cmUubG9nCitlY2hvIFNIQVJFRExJQk0gPSAkU0hBUkVETElCTSA+PiBjb25maWd1cmUubG9n CitlY2hvIFNIQVJFRExJQlYgPSAkU0hBUkVETElCViA+PiBjb25maWd1cmUubG9nCitlY2hvIFNU QVRJQ0xJQiA9ICRTVEFUSUNMSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBURVNUID0gJFRFU1Qg Pj4gY29uZmlndXJlLmxvZworZWNobyBWRVIgPSAkVkVSID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8g Wl9VNCA9ICRaX1U0ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU1JDRElSID0gJFNSQ0RJUiA+PiBj b25maWd1cmUubG9nCitlY2hvIGV4ZWNfcHJlZml4ID0gJGV4ZWNfcHJlZml4ID4+IGNvbmZpZ3Vy ZS5sb2cKK2VjaG8gaW5jbHVkZWRpciA9ICRpbmNsdWRlZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2Vj aG8gbGliZGlyID0gJGxpYmRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIG1hbmRpciA9ICRtYW5k aXIgPj4gY29uZmlndXJlLmxvZworZWNobyBwcmVmaXggPSAkcHJlZml4ID4+IGNvbmZpZ3VyZS5s b2cKK2VjaG8gc2hhcmVkbGliZGlyID0gJHNoYXJlZGxpYmRpciA+PiBjb25maWd1cmUubG9nCitl Y2hvIHVuYW1lID0gJHVuYW1lID4+IGNvbmZpZ3VyZS5sb2cKIAotQ1BQPSR7Q1BQLSIkQ0MgLUUi fQotY2FzZSAkQ0ZMQUdTIGluCi0gICpBU01WKikKLSAgICBpZiB0ZXN0ICJgbm0gJHRlc3QubyB8 IGdyZXAgX2hlbGxvYCIgPSAiIjsgdGhlbgotICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5F IgotICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4u IE5vLgotICAgIGVsc2UKLSAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRl cm5hbCBuYW1lcy4uLiBZZXMuCi0gICAgZmk7OwotZXNhYworIyB1ZHBhdGUgTWFrZWZpbGUgd2l0 aCB0aGUgY29uZmlndXJlIHJlc3VsdHMKK3NlZCA8ICR7U1JDRElSfU1ha2VmaWxlLmluICIKKy9e Q0MgKj0vcyM9LiojPSRDQyMKKy9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIworL15TRkxBR1Mg Kj0vcyM9LiojPSRTRkxBR1MjCisvXkxERkxBR1MgKj0vcyM9LiojPSRMREZMQUdTIworL15MRFNI QVJFRCAqPS9zIz0uKiM9JExEU0hBUkVEIworL15DUFAgKj0vcyM9LiojPSRDUFAjCisvXlNUQVRJ Q0xJQiAqPS9zIz0uKiM9JFNUQVRJQ0xJQiMKKy9eU0hBUkVETElCICo9L3MjPS4qIz0kU0hBUkVE TElCIworL15TSEFSRURMSUJWICo9L3MjPS4qIz0kU0hBUkVETElCViMKKy9eU0hBUkVETElCTSAq PS9zIz0uKiM9JFNIQVJFRExJQk0jCisvXkFSICo9L3MjPS4qIz0kQVIjCisvXkFSRkxBR1MgKj0v cyM9LiojPSRBUkZMQUdTIworL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCisvXkxEQ09ORklH ICo9L3MjPS4qIz0kTERDT05GSUcjCisvXkxEU0hBUkVETElCQyAqPS9zIz0uKiM9JExEU0hBUkVE TElCQyMKKy9eRVhFICo9L3MjPS4qIz0kRVhFIworL15TUkNESVIgKj0vcyM9LiojPSRTUkNESVIj CisvXlpJTkMgKj0vcyM9LiojPSRaSU5DIworL15aSU5DT1VUICo9L3MjPS4qIz0kWklOQ09VVCMK Ky9ecHJlZml4ICo9L3MjPS4qIz0kcHJlZml4IworL15leGVjX3ByZWZpeCAqPS9zIz0uKiM9JGV4 ZWNfcHJlZml4IworL15saWJkaXIgKj0vcyM9LiojPSRsaWJkaXIjCisvXnNoYXJlZGxpYmRpciAq PS9zIz0uKiM9JHNoYXJlZGxpYmRpciMKKy9eaW5jbHVkZWRpciAqPS9zIz0uKiM9JGluY2x1ZGVk aXIjCisvXm1hbmRpciAqPS9zIz0uKiM9JG1hbmRpciMKKy9eT0JKQyAqPS9zIz0uKiM9ICRPQkpD IworL15QSUNfT0JKQyAqPS9zIz0uKiM9ICRQSUNfT0JKQyMKKy9eYWxsOiAqL3MjOi4qIzogJEFM TCMKKy9edGVzdDogKi9zIzouKiM6ICRURVNUIworIiA+IE1ha2VmaWxlCiAKLXJtIC1mICR0ZXN0 Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotCi0jIHVkcGF0ZSBNYWtlZmlsZQotc2VkIDwg TWFrZWZpbGUuaW4gIgorIyBjcmVhdGUgemxpYi5wYyB3aXRoIHRoZSBjb25maWd1cmUgcmVzdWx0 cworc2VkIDwgJHtTUkNESVJ9emxpYi5wYy5pbiAiCiAvXkNDICo9L3MjPS4qIz0kQ0MjCiAvXkNG TEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKIC9eQ1BQICo9L3MjPS4qIz0kQ1BQIwogL15MRFNIQVJF RCAqPS9zIz0uKiM9JExEU0hBUkVEIwotL15MSUJTICo9L3MjPS4qIz0kTElCUyMKKy9eU1RBVElD TElCICo9L3MjPS4qIz0kU1RBVElDTElCIwogL15TSEFSRURMSUIgKj0vcyM9LiojPSRTSEFSRURM SUIjCiAvXlNIQVJFRExJQlYgKj0vcyM9LiojPSRTSEFSRURMSUJWIwogL15TSEFSRURMSUJNICo9 L3MjPS4qIz0kU0hBUkVETElCTSMKIC9eQVIgKj0vcyM9LiojPSRBUiMKKy9eQVJGTEFHUyAqPS9z Iz0uKiM9JEFSRkxBR1MjCiAvXlJBTkxJQiAqPS9zIz0uKiM9JFJBTkxJQiMKIC9eRVhFICo9L3Mj PS4qIz0kRVhFIwogL15wcmVmaXggKj0vcyM9LiojPSRwcmVmaXgjCiAvXmV4ZWNfcHJlZml4ICo9 L3MjPS4qIz0kZXhlY19wcmVmaXgjCiAvXmxpYmRpciAqPS9zIz0uKiM9JGxpYmRpciMKKy9ec2hh cmVkbGliZGlyICo9L3MjPS4qIz0kc2hhcmVkbGliZGlyIwogL15pbmNsdWRlZGlyICo9L3MjPS4q Iz0kaW5jbHVkZWRpciMKIC9ebWFuZGlyICo9L3MjPS4qIz0kbWFuZGlyIwogL15MREZMQUdTICo9 L3MjPS4qIz0kTERGTEFHUyMKLSIgPiBNYWtlZmlsZQorIiB8IHNlZCAtZSAiCitzL1xAVkVSU0lP TlxALyRWRVIvZzsKKyIgPiB6bGliLnBjCisKKyMgZG9uZQorbGVhdmUgMApkaWZmIC1yIGEwNTc4 Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi9jcmMzMi5jCi0tLSBh L3N5cy9zcmMvY21kL2dzL3psaWIvY3JjMzIuYwlXZWQgTWF5IDI3IDAwOjA5OjQ2IDIwMjAgKzAy MDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9jcmMzMi5jCVdlZCBNYXkgMjcgMTc6Mzk6Mzcg MjAyMCAtMDMwMApAQCAtMSwxNSArMSwxNSBAQAogLyogY3JjMzIuYyAtLSBjb21wdXRlIHRoZSBD UkMtMzIgb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgTWFyayBB ZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTYg TWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNl ZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICoKICAqIFRoYW5rcyB0byBSb2RuZXkgQnJv d24gPHJicm93bjY0QGNzYy5jb20uYXU+IGZvciBoaXMgY29udHJpYnV0aW9uIG9mIGZhc3Rlcgog ICogQ1JDIG1ldGhvZHM6IGV4Y2x1c2l2ZS1vcmluZyAzMiBiaXRzIG9mIGRhdGEgYXQgYSB0aW1l LCBhbmQgcHJlLWNvbXB1dGluZwogICogdGFibGVzIGZvciB1cGRhdGluZyB0aGUgc2hpZnQgcmVn aXN0ZXIgaW4gb25lIHN0ZXAgd2l0aCB0aHJlZSBleGNsdXNpdmUtb3JzCi0gKiBpbnN0ZWFkIG9m IGZvdXIgc3RlcHMgd2l0aCBmb3VyIGV4Y2x1c2l2ZS1vcnMuICBUaGlzIHJlc3VsdHMgYWJvdXQg YSBmYWN0b3IKLSAqIG9mIHR3byBpbmNyZWFzZSBpbiBzcGVlZCBvbiBhIFBvd2VyIFBDIEc0IChQ UEM3NDU1KSB1c2luZyBnY2MgLU8zLgorICogaW5zdGVhZCBvZiBmb3VyIHN0ZXBzIHdpdGggZm91 ciBleGNsdXNpdmUtb3JzLiAgVGhpcyByZXN1bHRzIGluIGFib3V0IGEKKyAqIGZhY3RvciBvZiB0 d28gaW5jcmVhc2UgaW4gc3BlZWQgb24gYSBQb3dlciBQQyBHNCAoUFBDNzQ1NSkgdXNpbmcgZ2Nj IC1PMy4KICAqLwogCi0vKiBAKCMpICRJZDogY3JjMzIuYyx2IDEuMS4xLjEgMjAwNS8wNC8yNCAy MTozOTozNyBnaWxlcyBFeHAgJCAqLworLyogQCgjKSAkSWQkICovCiAKIC8qCiAgIE5vdGUgb24g dGhlIHVzZSBvZiBEWU5BTUlDX0NSQ19UQUJMRTogdGhlcmUgaXMgbm8gbXV0ZXggb3Igc2VtYXBo b3JlCkBAIC0xNyw2ICsxNyw4IEBACiAgIG9mIHRoZSBjcmMgdGFibGVzLiAgVGhlcmVmb3JlLCBp ZiB5b3UgI2RlZmluZSBEWU5BTUlDX0NSQ19UQUJMRSwgeW91IHNob3VsZAogICBmaXJzdCBjYWxs IGdldF9jcmNfdGFibGUoKSB0byBpbml0aWFsaXplIHRoZSB0YWJsZXMgYmVmb3JlIGFsbG93aW5n IG1vcmUgdGhhbgogICBvbmUgdGhyZWFkIHRvIHVzZSBjcmMzMigpLgorCisgIERZTkFNSUNfQ1JD X1RBQkxFIGFuZCBNQUtFQ1JDSCBjYW4gYmUgI2RlZmluZWQgdG8gd3JpdGUgb3V0IGNyYzMyLmgu CiAgKi8KIAogI2lmZGVmIE1BS0VDUkNICkBAIC0yOCw1MSArMzAsMzUgQEAKIAogI2luY2x1ZGUg Inp1dGlsLmgiICAgICAgLyogZm9yIFNUREMgYW5kIEZBUiBkZWZpbml0aW9ucyAqLwogCi0jZGVm aW5lIGxvY2FsIHN0YXRpYwotCi0vKiBGaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSBmb3Ig Y3JjMzJfbGl0dGxlKCkgYW5kIGNyYzMyX2JpZygpLiAqLwotI2lmbmRlZiBOT0JZRk9VUgotIyAg aWZkZWYgU1REQyAgICAgICAgICAgLyogbmVlZCBBTlNJIEMgbGltaXRzLmggdG8gZGV0ZXJtaW5l IHNpemVzICovCi0jICAgIGluY2x1ZGUgPGxpbWl0cy5oPgotIyAgICBkZWZpbmUgQllGT1VSCi0j ICAgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdTQ7Ci0jICAgIGVsc2UKLSMgICAgICBpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZV TCkKLSAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1NDsKLSMgICAgICBlbHNlCi0jICAg ICAgICBpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgICAgdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCB1NDsKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgdW5kZWYgQllGT1VS ICAgICAvKiBjYW4ndCBmaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSEgKi8KLSMgICAgICAg IGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmIC8qIFNUREMgKi8KLSNl bmRpZiAvKiAhTk9CWUZPVVIgKi8KLQogLyogRGVmaW5pdGlvbnMgZm9yIGRvaW5nIHRoZSBjcmMg Zm91ciBkYXRhIGJ5dGVzIGF0IGEgdGltZS4gKi8KKyNpZiAhZGVmaW5lZChOT0JZRk9VUikgJiYg ZGVmaW5lZChaX1U0KQorIyAgZGVmaW5lIEJZRk9VUgorI2VuZGlmCiAjaWZkZWYgQllGT1VSCi0j ICBkZWZpbmUgUkVWKHcpICgoKHcpPj4yNCkrKCgodyk+PjgpJjB4ZmYwMCkrIFwKLSAgICAgICAg ICAgICAgICAoKCh3KSYweGZmMDApPDw4KSsoKCh3KSYweGZmKTw8MjQpKQogICAgbG9jYWwgdW5z aWduZWQgbG9uZyBjcmMzMl9saXR0bGUgT0YoKHVuc2lnbmVkIGxvbmcsCi0gICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqLCB1bnNpZ25lZCkpOworICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgel9zaXplX3QpKTsK ICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnIE9GKCh1bnNpZ25lZCBsb25nLAotICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQp KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICosIHpf c2l6ZV90KSk7CiAjICBkZWZpbmUgVEJMUyA4CiAjZWxzZQogIyAgZGVmaW5lIFRCTFMgMQogI2Vu ZGlmIC8qIEJZRk9VUiAqLwogCisvKiBMb2NhbCBmdW5jdGlvbnMgZm9yIGNyYyBjb25jYXRlbmF0 aW9uICovCitsb2NhbCB1bnNpZ25lZCBsb25nIGdmMl9tYXRyaXhfdGltZXMgT0YoKHVuc2lnbmVk IGxvbmcgKm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyB2ZWMpKTsKK2xvY2FsIHZvaWQgZ2YyX21hdHJpeF9zcXVhcmUgT0YoKHVuc2ln bmVkIGxvbmcgKnNxdWFyZSwgdW5zaWduZWQgbG9uZyAqbWF0KSk7Citsb2NhbCB1TG9uZyBjcmMz Ml9jb21iaW5lXyBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmY2NF90IGxlbjIpKTsK KworCiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKIAogbG9jYWwgdm9sYXRpbGUgaW50IGNyY190 YWJsZV9lbXB0eSA9IDE7Ci1sb2NhbCB1bnNpZ25lZCBsb25nIEZBUiBjcmNfdGFibGVbVEJMU11b MjU2XTsKK2xvY2FsIHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdOwogbG9jYWwgdm9p ZCBtYWtlX2NyY190YWJsZSBPRigodm9pZCkpOwogI2lmZGVmIE1BS0VDUkNICi0gICBsb2NhbCB2 b2lkIHdyaXRlX3RhYmxlIE9GKChGSUxFICosIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICopKTsK KyAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3Qgel9jcmNfdCBGQVIg KikpOwogI2VuZGlmIC8qIE1BS0VDUkNIICovCi0KIC8qCiAgIEdlbmVyYXRlIHRhYmxlcyBmb3Ig YSBieXRlLXdpc2UgMzItYml0IENSQyBjYWxjdWxhdGlvbiBvbiB0aGUgcG9seW5vbWlhbDoKICAg eF4zMit4XjI2K3heMjMreF4yMit4XjE2K3heMTIreF4xMSt4XjEwK3heOCt4XjcreF41K3heNCt4 XjIreCsxLgpAQCAtMTAxLDkgKzg3LDkgQEAKICovCiBsb2NhbCB2b2lkIG1ha2VfY3JjX3RhYmxl KCkKIHsKLSAgICB1bnNpZ25lZCBsb25nIGM7CisgICAgel9jcmNfdCBjOwogICAgIGludCBuLCBr OwotICAgIHVuc2lnbmVkIGxvbmcgcG9seTsgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwg ZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KKyAgICB6X2NyY190IHBvbHk7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBwb2x5bm9taWFsIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuICovCiAgICAgLyogdGVy bXMgb2YgcG9seW5vbWlhbCBkZWZpbmluZyB0aGlzIGNyYyAoZXhjZXB0IHheMzIpOiAqLwogICAg IHN0YXRpYyB2b2xhdGlsZSBpbnQgZmlyc3QgPSAxOyAgICAgIC8qIGZsYWcgdG8gbGltaXQgY29u Y3VycmVudCBtYWtpbmcgKi8KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPSB7 MCwxLDIsNCw1LDcsOCwxMCwxMSwxMiwxNiwyMiwyMywyNn07CkBAIC0xMTUsMTMgKzEwMSwxMyBA QAogICAgICAgICBmaXJzdCA9IDA7CiAKICAgICAgICAgLyogbWFrZSBleGNsdXNpdmUtb3IgcGF0 dGVybiBmcm9tIHBvbHlub21pYWwgKDB4ZWRiODgzMjBVTCkgKi8KLSAgICAgICAgcG9seSA9IDBV TDsKLSAgICAgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihwKS9zaXplb2YodW5zaWduZWQgY2hh cik7IG4rKykKLSAgICAgICAgICAgIHBvbHkgfD0gMVVMIDw8ICgzMSAtIHBbbl0pOworICAgICAg ICBwb2x5ID0gMDsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IChpbnQpKHNpemVvZihwKS9zaXpl b2YodW5zaWduZWQgY2hhcikpOyBuKyspCisgICAgICAgICAgICBwb2x5IHw9ICh6X2NyY190KTEg PDwgKDMxIC0gcFtuXSk7CiAKICAgICAgICAgLyogZ2VuZXJhdGUgYSBjcmMgZm9yIGV2ZXJ5IDgt Yml0IHZhbHVlICovCiAgICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykgewotICAgICAg ICAgICAgYyA9ICh1bnNpZ25lZCBsb25nKW47CisgICAgICAgICAgICBjID0gKHpfY3JjX3QpbjsK ICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA4OyBrKyspCiAgICAgICAgICAgICAgICAgYyA9 IGMgJiAxID8gcG9seSBeIChjID4+IDEpIDogYyA+PiAxOwogICAgICAgICAgICAgY3JjX3RhYmxl WzBdW25dID0gYzsKQEAgLTEzMiwxMSArMTE4LDExIEBACiAgICAgICAgICAgIGFuZCB0aGVuIHRo ZSBieXRlIHJldmVyc2FsIG9mIHRob3NlIGFzIHdlbGwgYXMgdGhlIGZpcnN0IHRhYmxlICovCiAg ICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykgewogICAgICAgICAgICAgYyA9IGNyY190 YWJsZVswXVtuXTsKLSAgICAgICAgICAgIGNyY190YWJsZVs0XVtuXSA9IFJFVihjKTsKKyAgICAg ICAgICAgIGNyY190YWJsZVs0XVtuXSA9IFpTV0FQMzIoYyk7CiAgICAgICAgICAgICBmb3IgKGsg PSAxOyBrIDwgNDsgaysrKSB7CiAgICAgICAgICAgICAgICAgYyA9IGNyY190YWJsZVswXVtjICYg MHhmZl0gXiAoYyA+PiA4KTsKICAgICAgICAgICAgICAgICBjcmNfdGFibGVba11bbl0gPSBjOwot ICAgICAgICAgICAgICAgIGNyY190YWJsZVtrICsgNF1bbl0gPSBSRVYoYyk7CisgICAgICAgICAg ICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFpTV0FQMzIoYyk7CiAgICAgICAgICAgICB9CiAg ICAgICAgIH0KICNlbmRpZiAvKiBCWUZPVVIgKi8KQEAgLTE1OCw3ICsxNDQsNyBAQAogICAgICAg ICBpZiAob3V0ID09IE5VTEwpIHJldHVybjsKICAgICAgICAgZnByaW50ZihvdXQsICIvKiBjcmMz Mi5oIC0tIHRhYmxlcyBmb3IgcmFwaWQgQ1JDIGNhbGN1bGF0aW9uXG4iKTsKICAgICAgICAgZnBy aW50ZihvdXQsICIgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jXG4gKi9cblxu Iik7Ci0gICAgICAgIGZwcmludGYob3V0LCAibG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIg Iik7CisgICAgICAgIGZwcmludGYob3V0LCAibG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgIik7CiAg ICAgICAgIGZwcmludGYob3V0LCAiY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPVxue1xuICB7XG4iKTsK ICAgICAgICAgd3JpdGVfdGFibGUob3V0LCBjcmNfdGFibGVbMF0pOwogIyAgaWZkZWYgQllGT1VS CkBAIC0xNzgsMTIgKzE2NCwxMyBAQAogI2lmZGVmIE1BS0VDUkNICiBsb2NhbCB2b2lkIHdyaXRl X3RhYmxlKG91dCwgdGFibGUpCiAgICAgRklMRSAqb3V0OwotICAgIGNvbnN0IHVuc2lnbmVkIGxv bmcgRkFSICp0YWJsZTsKKyAgICBjb25zdCB6X2NyY190IEZBUiAqdGFibGU7CiB7CiAgICAgaW50 IG47CiAKICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCi0gICAgICAgIGZwcmludGYob3V0 LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAiICAgICIsIHRhYmxlW25dLAorICAgICAg ICBmcHJpbnRmKG91dCwgIiVzMHglMDhseFVMJXMiLCBuICUgNSA/ICIiIDogIiAgICAiLAorICAg ICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh0YWJsZVtuXSksCiAgICAgICAgICAgICAgICAg biA9PSAyNTUgPyAiXG4iIDogKG4gJSA1ID09IDQgPyAiLFxuIiA6ICIsICIpKTsKIH0KICNlbmRp ZiAvKiBNQUtFQ1JDSCAqLwpAQCAtMTk4LDEzICsxODUsMTMgQEAKIC8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgYXNtIHZlcnNpb25zIG9mIGNyYzMy KCkKICAqLwotY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUo KQorY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUoKQogewogI2lmZGVm IERZTkFNSUNfQ1JDX1RBQkxFCiAgICAgaWYgKGNyY190YWJsZV9lbXB0eSkKICAgICAgICAgbWFr ZV9jcmNfdGFibGUoKTsKICNlbmRpZiAvKiBEWU5BTUlDX0NSQ19UQUJMRSAqLwotICAgIHJldHVy biAoY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKiljcmNfdGFibGU7CisgICAgcmV0dXJuIChjb25z dCB6X2NyY190IEZBUiAqKWNyY190YWJsZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpA QCAtMjEyLDEwICsxOTksMTAgQEAKICNkZWZpbmUgRE84IERPMTsgRE8xOyBETzE7IERPMTsgRE8x OyBETzE7IERPMTsgRE8xCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVuc2lnbmVkIGxvbmcg WkVYUE9SVCBjcmMzMihjcmMsIGJ1ZiwgbGVuKQordW5zaWduZWQgbG9uZyBaRVhQT1JUIGNyYzMy X3ooY3JjLCBidWYsIGxlbikKICAgICB1bnNpZ25lZCBsb25nIGNyYzsKICAgICBjb25zdCB1bnNp Z25lZCBjaGFyIEZBUiAqYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKKyAgICB6X3NpemVfdCBsZW47 CiB7CiAgICAgaWYgKGJ1ZiA9PSBaX05VTEwpIHJldHVybiAwVUw7CiAKQEAgLTIyNiw3ICsyMTMs NyBAQAogCiAjaWZkZWYgQllGT1VSCiAgICAgaWYgKHNpemVvZih2b2lkICopID09IHNpemVvZihw dHJkaWZmX3QpKSB7Ci0gICAgICAgIHU0IGVuZGlhbjsKKyAgICAgICAgel9jcmNfdCBlbmRpYW47 CiAKICAgICAgICAgZW5kaWFuID0gMTsKICAgICAgICAgaWYgKCooKHVuc2lnbmVkIGNoYXIgKiko JmVuZGlhbikpKQpAQCAtMjQ2LDggKzIzMywyOSBAQAogICAgIHJldHVybiBjcmMgXiAweGZmZmZm ZmZmVUw7CiB9CiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3Vuc2lnbmVkIGxvbmcgWkVYUE9S VCBjcmMzMihjcmMsIGJ1ZiwgbGVuKQorICAgIHVuc2lnbmVkIGxvbmcgY3JjOworICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CisgICAgdUludCBsZW47Cit7CisgICAgcmV0dXJuIGNy YzMyX3ooY3JjLCBidWYsIGxlbik7Cit9CisKICNpZmRlZiBCWUZPVVIKIAorLyoKKyAgIFRoaXMg QllGT1VSIGNvZGUgYWNjZXNzZXMgdGhlIHBhc3NlZCB1bnNpZ25lZCBjaGFyICogYnVmZmVyIHdp dGggYSAzMi1iaXQKKyAgIGludGVnZXIgcG9pbnRlciB0eXBlLiBUaGlzIHZpb2xhdGVzIHRoZSBz dHJpY3QgYWxpYXNpbmcgcnVsZSwgd2hlcmUgYQorICAgY29tcGlsZXIgY2FuIGFzc3VtZSwgZm9y IG9wdGltaXphdGlvbiBwdXJwb3NlcywgdGhhdCB0d28gcG9pbnRlcnMgdG8KKyAgIGZ1bmRhbWVu dGFsbHkgZGlmZmVyZW50IHR5cGVzIHdvbid0IGV2ZXIgcG9pbnQgdG8gdGhlIHNhbWUgbWVtb3J5 LiBUaGlzIGNhbgorICAgbWFuaWZlc3QgYXMgYSBwcm9ibGVtIG9ubHkgaWYgb25lIG9mIHRoZSBw b2ludGVycyBpcyB3cml0dGVuIHRvLiBUaGlzIGNvZGUKKyAgIG9ubHkgcmVhZHMgZnJvbSB0aG9z ZSBwb2ludGVycy4gU28gbG9uZyBhcyB0aGlzIGNvZGUgcmVtYWlucyBpc29sYXRlZCBpbgorICAg dGhpcyBjb21waWxhdGlvbiB1bml0LCB0aGVyZSB3b24ndCBiZSBhIHByb2JsZW0uIEZvciB0aGlz IHJlYXNvbiwgdGhpcyBjb2RlCisgICBzaG91bGQgbm90IGJlIGNvcGllZCBhbmQgcGFzdGVkIGlu dG8gYSBjb21waWxhdGlvbiB1bml0IGluIHdoaWNoIG90aGVyIGNvZGUKKyAgIHdyaXRlcyB0byB0 aGUgYnVmZmVyIHRoYXQgaXMgcGFzc2VkIHRvIHRoZXNlIHJvdXRpbmVzLgorICovCisKIC8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0gKi8KICNkZWZpbmUgRE9MSVQ0IGMgXj0gKmJ1ZjQrKzsgXAogICAgICAg ICBjID0gY3JjX3RhYmxlWzNdW2MgJiAweGZmXSBeIGNyY190YWJsZVsyXVsoYyA+PiA4KSAmIDB4 ZmZdIF4gXApAQCAtMjU4LDE5ICsyNjYsMTkgQEAKIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJf bGl0dGxlKGNyYywgYnVmLCBsZW4pCiAgICAgdW5zaWduZWQgbG9uZyBjcmM7CiAgICAgY29uc3Qg dW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47CisgICAgel9zaXplX3Qg bGVuOwogewotICAgIHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpi dWY0OworICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190 IEZBUiAqYnVmNDsKIAotICAgIGMgPSAodTQpY3JjOworICAgIGMgPSAoel9jcmNfdCljcmM7CiAg ICAgYyA9IH5jOwogICAgIHdoaWxlIChsZW4gJiYgKChwdHJkaWZmX3QpYnVmICYgMykpIHsKICAg ICAgICAgYyA9IGNyY190YWJsZVswXVsoYyBeICpidWYrKykgJiAweGZmXSBeIChjID4+IDgpOwog ICAgICAgICBsZW4tLTsKICAgICB9CiAKLSAgICBidWY0ID0gKGNvbnN0IHU0IEZBUiAqKWJ1ZjsK KyAgICBidWY0ID0gKGNvbnN0IHpfY3JjX3QgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOwog ICAgIHdoaWxlIChsZW4gPj0gMzIpIHsKICAgICAgICAgRE9MSVQzMjsKICAgICAgICAgbGVuIC09 IDMyOwpAQCAtMjg5LDcgKzI5Nyw3IEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNk ZWZpbmUgRE9CSUc0IGMgXj0gKisrYnVmNDsgXAorI2RlZmluZSBET0JJRzQgYyBePSAqYnVmNCsr OyBcCiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bYyAmIDB4ZmZdIF4gY3JjX3RhYmxlWzVdWyhj ID4+IDgpICYgMHhmZl0gXiBcCiAgICAgICAgICAgICBjcmNfdGFibGVbNl1bKGMgPj4gMTYpICYg MHhmZl0gXiBjcmNfdGFibGVbN11bYyA+PiAyNF0KICNkZWZpbmUgRE9CSUczMiBET0JJRzQ7IERP QklHNDsgRE9CSUc0OyBET0JJRzQ7IERPQklHNDsgRE9CSUc0OyBET0JJRzQ7IERPQklHNApAQCAt Mjk4LDIwICszMDYsMTkgQEAKIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnKGNyYywgYnVm LCBsZW4pCiAgICAgdW5zaWduZWQgbG9uZyBjcmM7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBG QVIgKmJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47CisgICAgel9zaXplX3QgbGVuOwogewotICAgIHJl Z2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OworICAgIHJlZ2lz dGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKIAot ICAgIGMgPSBSRVYoKHU0KWNyYyk7CisgICAgYyA9IFpTV0FQMzIoKHpfY3JjX3QpY3JjKTsKICAg ICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAg ICAgICBjID0gY3JjX3RhYmxlWzRdWyhjID4+IDI0KSBeICpidWYrK10gXiAoYyA8PCA4KTsKICAg ICAgICAgbGVuLS07CiAgICAgfQogCi0gICAgYnVmNCA9IChjb25zdCB1NCBGQVIgKilidWY7Ci0g ICAgYnVmNC0tOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBG QVIgKilidWY7CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0JJRzMyOwogICAg ICAgICBsZW4gLT0gMzI7CkBAIC0zMjAsMTQgKzMyNywxMTYgQEAKICAgICAgICAgRE9CSUc0Owog ICAgICAgICBsZW4gLT0gNDsKICAgICB9Ci0gICAgYnVmNCsrOwogICAgIGJ1ZiA9IChjb25zdCB1 bnNpZ25lZCBjaGFyIEZBUiAqKWJ1ZjQ7CiAKICAgICBpZiAobGVuKSBkbyB7CiAgICAgICAgIGMg PSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChjIDw8IDgpOwogICAgIH0gd2hp bGUgKC0tbGVuKTsKICAgICBjID0gfmM7Ci0gICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShSRVYo YykpOworICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoWlNXQVAzMihjKSk7CiB9CiAKICNlbmRp ZiAvKiBCWUZPVVIgKi8KKworI2RlZmluZSBHRjJfRElNIDMyICAgICAgLyogZGltZW5zaW9uIG9m IEdGKDIpIHZlY3RvcnMgKGxlbmd0aCBvZiBDUkMpICovCisKKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0g Ki8KK2xvY2FsIHVuc2lnbmVkIGxvbmcgZ2YyX21hdHJpeF90aW1lcyhtYXQsIHZlYykKKyAgICB1 bnNpZ25lZCBsb25nICptYXQ7CisgICAgdW5zaWduZWQgbG9uZyB2ZWM7Cit7CisgICAgdW5zaWdu ZWQgbG9uZyBzdW07CisKKyAgICBzdW0gPSAwOworICAgIHdoaWxlICh2ZWMpIHsKKyAgICAgICAg aWYgKHZlYyAmIDEpCisgICAgICAgICAgICBzdW0gXj0gKm1hdDsKKyAgICAgICAgdmVjID4+PSAx OworICAgICAgICBtYXQrKzsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KKworLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSAqLworbG9jYWwgdm9pZCBnZjJfbWF0cml4X3NxdWFyZShzcXVhcmUsIG1hdCkK KyAgICB1bnNpZ25lZCBsb25nICpzcXVhcmU7CisgICAgdW5zaWduZWQgbG9uZyAqbWF0Oworewor ICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IEdGMl9ESU07IG4rKykKKyAgICAgICAg c3F1YXJlW25dID0gZ2YyX21hdHJpeF90aW1lcyhtYXQsIG1hdFtuXSk7Cit9CisKKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0gKi8KK2xvY2FsIHVMb25nIGNyYzMyX2NvbWJpbmVfKGNyYzEsIGNyYzIsIGxl bjIpCisgICAgdUxvbmcgY3JjMTsKKyAgICB1TG9uZyBjcmMyOworICAgIHpfb2ZmNjRfdCBsZW4y OworeworICAgIGludCBuOworICAgIHVuc2lnbmVkIGxvbmcgcm93OworICAgIHVuc2lnbmVkIGxv bmcgZXZlbltHRjJfRElNXTsgICAgLyogZXZlbi1wb3dlci1vZi10d28gemVyb3Mgb3BlcmF0b3Ig Ki8KKyAgICB1bnNpZ25lZCBsb25nIG9kZFtHRjJfRElNXTsgICAgIC8qIG9kZC1wb3dlci1vZi10 d28gemVyb3Mgb3BlcmF0b3IgKi8KKworICAgIC8qIGRlZ2VuZXJhdGUgY2FzZSAoYWxzbyBkaXNh bGxvdyBuZWdhdGl2ZSBsZW5ndGhzKSAqLworICAgIGlmIChsZW4yIDw9IDApCisgICAgICAgIHJl dHVybiBjcmMxOworCisgICAgLyogcHV0IG9wZXJhdG9yIGZvciBvbmUgemVybyBiaXQgaW4gb2Rk ICovCisgICAgb2RkWzBdID0gMHhlZGI4ODMyMFVMOyAgICAgICAgICAvKiBDUkMtMzIgcG9seW5v bWlhbCAqLworICAgIHJvdyA9IDE7CisgICAgZm9yIChuID0gMTsgbiA8IEdGMl9ESU07IG4rKykg eworICAgICAgICBvZGRbbl0gPSByb3c7CisgICAgICAgIHJvdyA8PD0gMTsKKyAgICB9CisKKyAg ICAvKiBwdXQgb3BlcmF0b3IgZm9yIHR3byB6ZXJvIGJpdHMgaW4gZXZlbiAqLworICAgIGdmMl9t YXRyaXhfc3F1YXJlKGV2ZW4sIG9kZCk7CisKKyAgICAvKiBwdXQgb3BlcmF0b3IgZm9yIGZvdXIg emVybyBiaXRzIGluIG9kZCAqLworICAgIGdmMl9tYXRyaXhfc3F1YXJlKG9kZCwgZXZlbik7CisK KyAgICAvKiBhcHBseSBsZW4yIHplcm9zIHRvIGNyYzEgKGZpcnN0IHNxdWFyZSB3aWxsIHB1dCB0 aGUgb3BlcmF0b3IgZm9yIG9uZQorICAgICAgIHplcm8gYnl0ZSwgZWlnaHQgemVybyBiaXRzLCBp biBldmVuKSAqLworICAgIGRvIHsKKyAgICAgICAgLyogYXBwbHkgemVyb3Mgb3BlcmF0b3IgZm9y IHRoaXMgYml0IG9mIGxlbjIgKi8KKyAgICAgICAgZ2YyX21hdHJpeF9zcXVhcmUoZXZlbiwgb2Rk KTsKKyAgICAgICAgaWYgKGxlbjIgJiAxKQorICAgICAgICAgICAgY3JjMSA9IGdmMl9tYXRyaXhf dGltZXMoZXZlbiwgY3JjMSk7CisgICAgICAgIGxlbjIgPj49IDE7CisKKyAgICAgICAgLyogaWYg bm8gbW9yZSBiaXRzIHNldCwgdGhlbiBkb25lICovCisgICAgICAgIGlmIChsZW4yID09IDApCisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBhbm90aGVyIGl0ZXJhdGlvbiBvZiB0aGUg bG9vcCB3aXRoIG9kZCBhbmQgZXZlbiBzd2FwcGVkICovCisgICAgICAgIGdmMl9tYXRyaXhfc3F1 YXJlKG9kZCwgZXZlbik7CisgICAgICAgIGlmIChsZW4yICYgMSkKKyAgICAgICAgICAgIGNyYzEg PSBnZjJfbWF0cml4X3RpbWVzKG9kZCwgY3JjMSk7CisgICAgICAgIGxlbjIgPj49IDE7CisKKyAg ICAgICAgLyogaWYgbm8gbW9yZSBiaXRzIHNldCwgdGhlbiBkb25lICovCisgICAgfSB3aGlsZSAo bGVuMiAhPSAwKTsKKworICAgIC8qIHJldHVybiBjb21iaW5lZCBjcmMgKi8KKyAgICBjcmMxIF49 IGNyYzI7CisgICAgcmV0dXJuIGNyYzE7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3VM b25nIFpFWFBPUlQgY3JjMzJfY29tYmluZShjcmMxLCBjcmMyLCBsZW4yKQorICAgIHVMb25nIGNy YzE7CisgICAgdUxvbmcgY3JjMjsKKyAgICB6X29mZl90IGxlbjI7Cit7CisgICAgcmV0dXJuIGNy YzMyX2NvbWJpbmVfKGNyYzEsIGNyYzIsIGxlbjIpOworfQorCit1TG9uZyBaRVhQT1JUIGNyYzMy X2NvbWJpbmU2NChjcmMxLCBjcmMyLCBsZW4yKQorICAgIHVMb25nIGNyYzE7CisgICAgdUxvbmcg Y3JjMjsKKyAgICB6X29mZjY0X3QgbGVuMjsKK3sKKyAgICByZXR1cm4gY3JjMzJfY29tYmluZV8o Y3JjMSwgY3JjMiwgbGVuMik7Cit9CmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdm OSBzeXMvc3JjL2NtZC9ncy96bGliL2NyYzMyLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9j cmMzMi5oCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9n cy96bGliL2NyYzMyLmgJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBAIC0yLDcgKzIs NyBAQAogICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY3JjMzIuYwogICovCiAKLWxvY2Fs IGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdID0KK2xvY2FsIGNv bnN0IHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdID0KIHsKICAgewogICAgIDB4MDAw MDAwMDBVTCwgMHg3NzA3MzA5NlVMLCAweGVlMGU2MTJjVUwsIDB4OTkwOTUxYmFVTCwgMHgwNzZk YzQxOVVMLApkaWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQv Z3MvemxpYi9kZWZsYXRlLmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9kZWZsYXRlLmMJV2Vk IE1heSAyNyAwMDowOTo0NiAyMDIwICswMjAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIvZGVm bGF0ZS5jCVdlZCBNYXkgMjcgMTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMSw1ICsxLDUgQEAKIC8q IGRlZmxhdGUuYyAtLSBjb21wcmVzcyBkYXRhIHVzaW5nIHRoZSBkZWZsYXRpb24gYWxnb3JpdGht Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJp Z2h0IChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogICogRm9y IGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNl IGluIHpsaWIuaAogICovCiAKQEAgLTM3LDcgKzM3LDcgQEAKICAqICBSRUZFUkVOQ0VTCiAgKgog ICogICAgICBEZXV0c2NoLCBMLlAuLCJERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3Bl Y2lmaWNhdGlvbiIuCi0gKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vd3d3LmlldGYub3JnL3Jm Yy9yZmMxOTUxLnR4dAorICogICAgICBBdmFpbGFibGUgaW4gaHR0cDovL3Rvb2xzLmlldGYub3Jn L2h0bWwvcmZjMTk1MQogICoKICAqICAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGUgUmFiaW4gYW5k IEthcnAgYWxnb3JpdGhtIGlzIGdpdmVuIGluIHRoZSBib29rCiAgKiAgICAgICAgICJBbGdvcml0 aG1zIiBieSBSLiBTZWRnZXdpY2ssIEFkZGlzb24tV2VzbGV5LCBwMjUyLgpAQCAtNDcsMTIgKzQ3 LDEyIEBACiAgKgogICovCiAKLS8qIEAoIykgJElkOiBkZWZsYXRlLmMsdiAxLjEuMS4xIDIwMDUv MDQvMjQgMjE6Mzk6NDAgZ2lsZXMgRXhwICQgKi8KKy8qIEAoIykgJElkJCAqLwogCiAjaW5jbHVk ZSAiZGVmbGF0ZS5oIgogCiBjb25zdCBjaGFyIGRlZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBk ZWZsYXRlIDEuMi4yIENvcHlyaWdodCAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseSAiOworICAg IiBkZWZsYXRlIDEuMi4xMSBDb3B5cmlnaHQgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5k IE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHBy b2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRp b24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNzMs MjcgKzczLDI5IEBACiB0eXBlZGVmIGJsb2NrX3N0YXRlICgqY29tcHJlc3NfZnVuYykgT0YoKGRl ZmxhdGVfc3RhdGUgKnMsIGludCBmbHVzaCkpOwogLyogQ29tcHJlc3Npb24gZnVuY3Rpb24uIFJl dHVybnMgdGhlIGJsb2NrIHN0YXRlIGFmdGVyIHRoZSBjYWxsLiAqLwogCitsb2NhbCBpbnQgZGVm bGF0ZVN0YXRlQ2hlY2sgICAgICBPRigoel9zdHJlYW1wIHN0cm0pKTsKK2xvY2FsIHZvaWQgc2xp ZGVfaGFzaCAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHZvaWQgZmlsbF93aW5k b3cgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVf c3RvcmVkIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKIGxvY2FsIGJsb2NrX3N0 YXRlIGRlZmxhdGVfZmFzdCAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKICNp Zm5kZWYgRkFTVEVTVAogbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9zbG93ICAgT0YoKGRlZmxh dGVfc3RhdGUgKnMsIGludCBmbHVzaCkpOwogI2VuZGlmCitsb2NhbCBibG9ja19zdGF0ZSBkZWZs YXRlX3JsZSAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7Citsb2NhbCBibG9j a19zdGF0ZSBkZWZsYXRlX2h1ZmYgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGZsdXNoKSk7 CiBsb2NhbCB2b2lkIGxtX2luaXQgICAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2Nh bCB2b2lkIHB1dFNob3J0TVNCICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCB1SW50IGIpKTsKIGxv Y2FsIHZvaWQgZmx1c2hfcGVuZGluZyAgT0YoKHpfc3RyZWFtcCBzdHJtKSk7Ci1sb2NhbCBpbnQg cmVhZF9idWYgICAgICAgIE9GKCh6X3N0cmVhbXAgc3RybSwgQnl0ZWYgKmJ1ZiwgdW5zaWduZWQg c2l6ZSkpOwotI2lmbmRlZiBGQVNURVNUCitsb2NhbCB1bnNpZ25lZCByZWFkX2J1ZiAgIE9GKCh6 X3N0cmVhbXAgc3RybSwgQnl0ZWYgKmJ1ZiwgdW5zaWduZWQgc2l6ZSkpOwogI2lmZGVmIEFTTVYK KyMgIHByYWdtYSBtZXNzYWdlKCJBc3NlbWJsZXIgY29kZSBtYXkgaGF2ZSBidWdzIC0tIHVzZSBh dCB5b3VyIG93biByaXNrIikKICAgICAgIHZvaWQgbWF0Y2hfaW5pdCBPRigodm9pZCkpOyAvKiBh c20gY29kZSBpbml0aWFsaXphdGlvbiAqLwogICAgICAgdUludCBsb25nZXN0X21hdGNoICBPRigo ZGVmbGF0ZV9zdGF0ZSAqcywgSVBvcyBjdXJfbWF0Y2gpKTsKICNlbHNlCiBsb2NhbCB1SW50IGxv bmdlc3RfbWF0Y2ggIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwogI2Vu ZGlmCi0jZW5kaWYKLWxvY2FsIHVJbnQgbG9uZ2VzdF9tYXRjaF9mYXN0IE9GKChkZWZsYXRlX3N0 YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RF QlVHCiBsb2NhbCAgdm9pZCBjaGVja19tYXRjaCBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgSVBvcyBz dGFydCwgSVBvcyBtYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3Ro KSk7CiAjZW5kaWYKQEAgLTExMCwxMSArMTEyLDYgQEAKICNlbmRpZgogLyogTWF0Y2hlcyBvZiBs ZW5ndGggMyBhcmUgZGlzY2FyZGVkIGlmIHRoZWlyIGRpc3RhbmNlIGV4Y2VlZHMgVE9PX0ZBUiAq LwogCi0jZGVmaW5lIE1JTl9MT09LQUhFQUQgKE1BWF9NQVRDSCtNSU5fTUFUQ0grMSkKLS8qIE1p bmltdW0gYW1vdW50IG9mIGxvb2thaGVhZCwgZXhjZXB0IGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0 IGZpbGUuCi0gKiBTZWUgZGVmbGF0ZS5jIGZvciBjb21tZW50cyBhYm91dCB0aGUgTUlOX01BVENI KzEuCi0gKi8KLQogLyogVmFsdWVzIGZvciBtYXhfbGF6eV9tYXRjaCwgZ29vZF9tYXRjaCBhbmQg bWF4X2NoYWluX2xlbmd0aCwgZGVwZW5kaW5nIG9uCiAgKiB0aGUgZGVzaXJlZCBwYWNrIGxldmVs ICgwLi45KS4gVGhlIHZhbHVlcyBnaXZlbiBiZWxvdyBoYXZlIGJlZW4gdHVuZWQgdG8KICAqIGV4 Y2x1ZGUgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBmb3IgcGF0aG9sb2dpY2FsIGZpbGVzLiBCZXR0 ZXIgdmFsdWVzIG1heSBiZQpAQCAtMTU0LDE4ICsxNTEsMTQgQEAKICAqIG1lYW5pbmcuCiAgKi8K IAotI2RlZmluZSBFUVVBTCAwCi0vKiByZXN1bHQgb2YgbWVtY21wIGZvciBlcXVhbCBzdHJpbmdz ICovCi0KLSNpZm5kZWYgTk9fRFVNTVlfREVDTAotc3RydWN0IHN0YXRpY190cmVlX2Rlc2NfcyB7 aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgorLyogcmFuayBa X0JMT0NLIGJldHdlZW4gWl9OT19GTFVTSCBhbmQgWl9QQVJUSUFMX0ZMVVNIICovCisjZGVmaW5l IFJBTksoZikgKCgoZikgKiAyKSAtICgoZikgPiA0ID8gOSA6IDApKQogCiAvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KICAqIFVwZGF0ZSBhIGhhc2ggdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgYnl0 ZQotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIHRvIFVQREFURV9IQVNIIGFyZSBtYWRl IHdpdGggY29uc2VjdXRpdmUKLSAqICAgIGlucHV0IGNoYXJhY3RlcnMsIHNvIHRoYXQgYSBydW5u aW5nIGhhc2gga2V5IGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZQotICogICAgcHJldmlvdXMga2V5 IGluc3RlYWQgb2YgY29tcGxldGUgcmVjYWxjdWxhdGlvbiBlYWNoIHRpbWUuCisgKiBJTiAgYXNz ZXJ0aW9uOiBhbGwgY2FsbHMgdG8gVVBEQVRFX0hBU0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2 ZSBpbnB1dAorICogICAgY2hhcmFjdGVycywgc28gdGhhdCBhIHJ1bm5pbmcgaGFzaCBrZXkgY2Fu IGJlIGNvbXB1dGVkIGZyb20gdGhlIHByZXZpb3VzCisgKiAgICBrZXkgaW5zdGVhZCBvZiBjb21w bGV0ZSByZWNhbGN1bGF0aW9uIGVhY2ggdGltZS4KICAqLwogI2RlZmluZSBVUERBVEVfSEFTSChz LGgsYykgKGggPSAoKChoKTw8cy0+aGFzaF9zaGlmdCkgXiAoYykpICYgcy0+aGFzaF9tYXNrKQog CkBAIC0xNzYsOSArMTY5LDkgQEAKICAqIHRoZSBwcmV2aW91cyBsZW5ndGggb2YgdGhlIGhhc2gg Y2hhaW4uCiAgKiBJZiB0aGlzIGZpbGUgaXMgY29tcGlsZWQgd2l0aCAtREZBU1RFU1QsIHRoZSBj b21wcmVzc2lvbiBsZXZlbCBpcyBmb3JjZWQKICAqIHRvIDEsIGFuZCBubyBoYXNoIGNoYWlucyBh cmUgbWFpbnRhaW5lZC4KLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBJTlNFUlRf U1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKLSAqICAgIGlucHV0IGNoYXJhY3RlcnMg YW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZAotICogICAgKGV4 Y2VwdCBmb3IgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgor ICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIElOU0VSVF9TVFJJTkcgYXJlIG1hZGUgd2l0 aCBjb25zZWN1dGl2ZSBpbnB1dAorICogICAgY2hhcmFjdGVycyBhbmQgdGhlIGZpcnN0IE1JTl9N QVRDSCBieXRlcyBvZiBzdHIgYXJlIHZhbGlkIChleGNlcHQgZm9yCisgKiAgICB0aGUgbGFzdCBN SU5fTUFUQ0gtMSBieXRlcyBvZiB0aGUgaW5wdXQgZmlsZSkuCiAgKi8KICNpZmRlZiBGQVNURVNU CiAjZGVmaW5lIElOU0VSVF9TVFJJTkcocywgc3RyLCBtYXRjaF9oZWFkKSBcCkBAIC0yMDAsNiAr MTkzLDM3IEBACiAgICAgcy0+aGVhZFtzLT5oYXNoX3NpemUtMV0gPSBOSUw7IFwKICAgICB6bWVt emVybygoQnl0ZWYgKilzLT5oZWFkLCAodW5zaWduZWQpKHMtPmhhc2hfc2l6ZS0xKSpzaXplb2Yo KnMtPmhlYWQpKTsKIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBTbGlkZSB0aGUgaGFzaCB0 YWJsZSB3aGVuIHNsaWRpbmcgdGhlIHdpbmRvdyBkb3duIChjb3VsZCBiZSBhdm9pZGVkIHdpdGgg MzIKKyAqIGJpdCB2YWx1ZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlKS4gV2Ugc2xp ZGUgZXZlbiB3aGVuIGxldmVsID09IDAgdG8KKyAqIGtlZXAgdGhlIGhhc2ggdGFibGUgY29uc2lz dGVudCBpZiB3ZSBzd2l0Y2ggYmFjayB0byBsZXZlbCA+IDAgbGF0ZXIuCisgKi8KK2xvY2FsIHZv aWQgc2xpZGVfaGFzaChzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgdW5zaWduZWQg biwgbTsKKyAgICBQb3NmICpwOworICAgIHVJbnQgd3NpemUgPSBzLT53X3NpemU7CisKKyAgICBu ID0gcy0+aGFzaF9zaXplOworICAgIHAgPSAmcy0+aGVhZFtuXTsKKyAgICBkbyB7CisgICAgICAg IG0gPSAqLS1wOworICAgICAgICAqcCA9IChQb3MpKG0gPj0gd3NpemUgPyBtIC0gd3NpemUgOiBO SUwpOworICAgIH0gd2hpbGUgKC0tbik7CisgICAgbiA9IHdzaXplOworI2lmbmRlZiBGQVNURVNU CisgICAgcCA9ICZzLT5wcmV2W25dOworICAgIGRvIHsKKyAgICAgICAgbSA9ICotLXA7CisgICAg ICAgICpwID0gKFBvcykobSA+PSB3c2l6ZSA/IG0gLSB3c2l6ZSA6IE5JTCk7CisgICAgICAgIC8q IElmIG4gaXMgbm90IG9uIGFueSBoYXNoIGNoYWluLCBwcmV2W25dIGlzIGdhcmJhZ2UgYnV0Cisg ICAgICAgICAqIGl0cyB2YWx1ZSB3aWxsIG5ldmVyIGJlIHVzZWQuCisgICAgICAgICAqLworICAg IH0gd2hpbGUgKC0tbik7CisjZW5kaWYKK30KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50 IFpFWFBPUlQgZGVmbGF0ZUluaXRfKHN0cm0sIGxldmVsLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkK ICAgICB6X3N0cmVhbXAgc3RybTsKQEAgLTI0MSwxMCArMjY1LDE5IEBACiAKICAgICBzdHJtLT5t c2cgPSBaX05VTEw7CiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7Cisj aWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAg ICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lk cGYpMDsKKyNlbmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykw KSBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVu YykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxz ZQorICAgICAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgogCiAjaWZkZWYgRkFTVEVT VAogICAgIGlmIChsZXZlbCAhPSAwKSBsZXZlbCA9IDE7CkBAIC0yNjQsNyArMjk3LDcgQEAKICNl bmRpZgogICAgIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8 IG1ldGhvZCAhPSBaX0RFRkxBVEVEIHx8CiAgICAgICAgIHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRv d0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8Ci0gICAgICAgIHN0cmF0ZWd5 IDwgMCB8fCBzdHJhdGVneSA+IFpfUkxFKSB7CisgICAgICAgIHN0cmF0ZWd5IDwgMCB8fCBzdHJh dGVneSA+IFpfRklYRUQgfHwgKHdpbmRvd0JpdHMgPT0gOCAmJiB3cmFwICE9IDEpKSB7CiAgICAg ICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICB9CiAgICAgaWYgKHdpbmRvd0JpdHMgPT0g OCkgd2luZG93Qml0cyA9IDk7ICAvKiB1bnRpbCAyNTYtYnl0ZSB3aW5kb3cgYnVnIGZpeGVkICov CkBAIC0yNzIsMTMgKzMwNSwxNSBAQAogICAgIGlmIChzID09IFpfTlVMTCkgcmV0dXJuIFpfTUVN X0VSUk9SOwogICAgIHN0cm0tPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKilz OwogICAgIHMtPnN0cm0gPSBzdHJtOworICAgIHMtPnN0YXR1cyA9IElOSVRfU1RBVEU7ICAgICAv KiB0byBwYXNzIHN0YXRlIHRlc3QgaW4gZGVmbGF0ZVJlc2V0KCkgKi8KIAogICAgIHMtPndyYXAg PSB3cmFwOwotICAgIHMtPndfYml0cyA9IHdpbmRvd0JpdHM7CisgICAgcy0+Z3poZWFkID0gWl9O VUxMOworICAgIHMtPndfYml0cyA9ICh1SW50KXdpbmRvd0JpdHM7CiAgICAgcy0+d19zaXplID0g MSA8PCBzLT53X2JpdHM7CiAgICAgcy0+d19tYXNrID0gcy0+d19zaXplIC0gMTsKIAotICAgIHMt Pmhhc2hfYml0cyA9IG1lbUxldmVsICsgNzsKKyAgICBzLT5oYXNoX2JpdHMgPSAodUludCltZW1M ZXZlbCArIDc7CiAgICAgcy0+aGFzaF9zaXplID0gMSA8PCBzLT5oYXNoX2JpdHM7CiAgICAgcy0+ aGFzaF9tYXNrID0gcy0+aGFzaF9zaXplIC0gMTsKICAgICBzLT5oYXNoX3NoaWZ0ID0gICgocy0+ aGFzaF9iaXRzK01JTl9NQVRDSC0xKS9NSU5fTUFUQ0gpOwpAQCAtMjg3LDYgKzMyMiw4IEBACiAg ICAgcy0+cHJldiAgID0gKFBvc2YgKikgIFpBTExPQyhzdHJtLCBzLT53X3NpemUsIHNpemVvZihQ b3MpKTsKICAgICBzLT5oZWFkICAgPSAoUG9zZiAqKSAgWkFMTE9DKHN0cm0sIHMtPmhhc2hfc2l6 ZSwgc2l6ZW9mKFBvcykpOwogCisgICAgcy0+aGlnaF93YXRlciA9IDA7ICAgICAgLyogbm90aGlu ZyB3cml0dGVuIHRvIHMtPndpbmRvdyB5ZXQgKi8KKwogICAgIHMtPmxpdF9idWZzaXplID0gMSA8 PCAobWVtTGV2ZWwgKyA2KTsgLyogMTZLIGVsZW1lbnRzIGJ5IGRlZmF1bHQgKi8KIAogICAgIG92 ZXJsYXkgPSAodXNoZiAqKSBaQUxMT0Moc3RybSwgcy0+bGl0X2J1ZnNpemUsIHNpemVvZih1c2gp KzIpOwpAQCAtMjk2LDcgKzMzMyw3IEBACiAgICAgaWYgKHMtPndpbmRvdyA9PSBaX05VTEwgfHwg cy0+cHJldiA9PSBaX05VTEwgfHwgcy0+aGVhZCA9PSBaX05VTEwgfHwKICAgICAgICAgcy0+cGVu ZGluZ19idWYgPT0gWl9OVUxMKSB7CiAgICAgICAgIHMtPnN0YXR1cyA9IEZJTklTSF9TVEFURTsK LSAgICAgICAgc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOworICAgICAg ICBzdHJtLT5tc2cgPSBFUlJfTVNHKFpfTUVNX0VSUk9SKTsKICAgICAgICAgZGVmbGF0ZUVuZCAo c3RybSk7CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9CkBAIC0zMTAsNiArMzQ3 LDMxIEBACiAgICAgcmV0dXJuIGRlZmxhdGVSZXNldChzdHJtKTsKIH0KIAorLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorICogQ2hlY2sgZm9yIGEgdmFsaWQgZGVmbGF0ZSBzdHJlYW0gc3RhdGUuIFJldHVy biAwIGlmIG9rLCAxIGlmIG5vdC4KKyAqLworbG9jYWwgaW50IGRlZmxhdGVTdGF0ZUNoZWNrIChz dHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAg aWYgKHN0cm0gPT0gWl9OVUxMIHx8CisgICAgICAgIHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVu YykwIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGlmIChzID09IFpfTlVMTCB8fCBzLT5zdHJtICE9IHN0 cm0gfHwgKHMtPnN0YXR1cyAhPSBJTklUX1NUQVRFICYmCisjaWZkZWYgR1pJUAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBHWklQX1NUQVRF ICYmCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LT5zdGF0dXMgIT0gRVhUUkFfU1RBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzLT5zdGF0dXMgIT0gTkFNRV9TVEFURSAmJgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBDT01NRU5UX1NUQVRFICYm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3RhdHVzICE9 IEhDUkNfU1RBVEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLT5zdGF0dXMgIT0gQlVTWV9TVEFURSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAhPSBGSU5JU0hfU1RBVEUpKQorICAgICAgICByZXR1 cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpF WFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgKHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgp CiAgICAgel9zdHJlYW1wIHN0cm07CkBAIC0zMTcsNTEgKzM3OSw5NyBAQAogICAgIHVJbnQgIGRp Y3RMZW5ndGg7CiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICB1SW50IGxlbmd0aCA9IGRp Y3RMZW5ndGg7Ci0gICAgdUludCBuOwotICAgIElQb3MgaGFzaF9oZWFkID0gMDsKKyAgICB1SW50 IHN0ciwgbjsKKyAgICBpbnQgd3JhcDsKKyAgICB1bnNpZ25lZCBhdmFpbDsKKyAgICB6X2NvbnN0 IHVuc2lnbmVkIGNoYXIgKm5leHQ7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+ c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMIHx8Ci0gICAgICAgIHN0cm0t PnN0YXRlLT53cmFwID09IDIgfHwKLSAgICAgICAgKHN0cm0tPnN0YXRlLT53cmFwID09IDEgJiYg c3RybS0+c3RhdGUtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSkKKyAgICBpZiAoZGVmbGF0ZVN0YXRl Q2hlY2soc3RybSkgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiBaX1NU UkVBTV9FUlJPUjsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgd3JhcCA9IHMtPndyYXA7Cisg ICAgaWYgKHdyYXAgPT0gMiB8fCAod3JhcCA9PSAxICYmIHMtPnN0YXR1cyAhPSBJTklUX1NUQVRF KSB8fCBzLT5sb29rYWhlYWQpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAg IHMgPSBzdHJtLT5zdGF0ZTsKLSAgICBpZiAocy0+d3JhcCkKKyAgICAvKiB3aGVuIHVzaW5nIHps aWIgd3JhcHBlcnMsIGNvbXB1dGUgQWRsZXItMzIgZm9yIHByb3ZpZGVkIGRpY3Rpb25hcnkgKi8K KyAgICBpZiAod3JhcCA9PSAxKQogICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+ YWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOworICAgIHMtPndyYXAgPSAwOyAgICAgICAg ICAgICAgICAgICAgLyogYXZvaWQgY29tcHV0aW5nIEFkbGVyLTMyIGluIHJlYWRfYnVmICovCiAK LSAgICBpZiAobGVuZ3RoIDwgTUlOX01BVENIKSByZXR1cm4gWl9PSzsKLSAgICBpZiAobGVuZ3Ro ID4gTUFYX0RJU1QocykpIHsKLSAgICAgICAgbGVuZ3RoID0gTUFYX0RJU1Qocyk7Ci0jaWZuZGVm IFVTRV9ESUNUX0hFQUQKLSAgICAgICAgZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gbGVuZ3Ro OyAvKiB1c2UgdGhlIHRhaWwgb2YgdGhlIGRpY3Rpb25hcnkgKi8KKyAgICAvKiBpZiBkaWN0aW9u YXJ5IHdvdWxkIGZpbGwgd2luZG93LCBqdXN0IHJlcGxhY2UgdGhlIGhpc3RvcnkgKi8KKyAgICBp ZiAoZGljdExlbmd0aCA+PSBzLT53X3NpemUpIHsKKyAgICAgICAgaWYgKHdyYXAgPT0gMCkgeyAg ICAgICAgICAgIC8qIGFscmVhZHkgZW1wdHkgb3RoZXJ3aXNlICovCisgICAgICAgICAgICBDTEVB Ul9IQVNIKHMpOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOworICAgICAgICAgICAgcy0+ YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CisgICAgICAgIH0K KyAgICAgICAgZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gcy0+d19zaXplOyAgLyogdXNlIHRo ZSB0YWlsICovCisgICAgICAgIGRpY3RMZW5ndGggPSBzLT53X3NpemU7CisgICAgfQorCisgICAg LyogaW5zZXJ0IGRpY3Rpb25hcnkgaW50byB3aW5kb3cgYW5kIGhhc2ggKi8KKyAgICBhdmFpbCA9 IHN0cm0tPmF2YWlsX2luOworICAgIG5leHQgPSBzdHJtLT5uZXh0X2luOworICAgIHN0cm0tPmF2 YWlsX2luID0gZGljdExlbmd0aDsKKyAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYg KilkaWN0aW9uYXJ5OworICAgIGZpbGxfd2luZG93KHMpOworICAgIHdoaWxlIChzLT5sb29rYWhl YWQgPj0gTUlOX01BVENIKSB7CisgICAgICAgIHN0ciA9IHMtPnN0cnN0YXJ0OworICAgICAgICBu ID0gcy0+bG9va2FoZWFkIC0gKE1JTl9NQVRDSC0xKTsKKyAgICAgICAgZG8geworICAgICAgICAg ICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0p OworI2lmbmRlZiBGQVNURVNUCisgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10g PSBzLT5oZWFkW3MtPmluc19oXTsKICNlbmRpZgorICAgICAgICAgICAgcy0+aGVhZFtzLT5pbnNf aF0gPSAoUG9zKXN0cjsKKyAgICAgICAgICAgIHN0cisrOworICAgICAgICB9IHdoaWxlICgtLW4p OworICAgICAgICBzLT5zdHJzdGFydCA9IHN0cjsKKyAgICAgICAgcy0+bG9va2FoZWFkID0gTUlO X01BVENILTE7CisgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgIH0KLSAgICB6bWVtY3B5KHMt PndpbmRvdywgZGljdGlvbmFyeSwgbGVuZ3RoKTsKLSAgICBzLT5zdHJzdGFydCA9IGxlbmd0aDsK LSAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKWxlbmd0aDsKLQotICAgIC8qIEluc2VydCBhbGwg c3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSAoZXhjZXB0IGZvciB0aGUgbGFzdCB0d28gYnl0ZXMp LgotICAgICAqIHMtPmxvb2thaGVhZCBzdGF5cyBudWxsLCBzbyBzLT5pbnNfaCB3aWxsIGJlIHJl Y29tcHV0ZWQgYXQgdGhlIG5leHQKLSAgICAgKiBjYWxsIG9mIGZpbGxfd2luZG93LgotICAgICAq LwotICAgIHMtPmluc19oID0gcy0+d2luZG93WzBdOwotICAgIFVQREFURV9IQVNIKHMsIHMtPmlu c19oLCBzLT53aW5kb3dbMV0pOwotICAgIGZvciAobiA9IDA7IG4gPD0gbGVuZ3RoIC0gTUlOX01B VENIOyBuKyspIHsKLSAgICAgICAgSU5TRVJUX1NUUklORyhzLCBuLCBoYXNoX2hlYWQpOwotICAg IH0KLSAgICBpZiAoaGFzaF9oZWFkKSBoYXNoX2hlYWQgPSAwOyAgLyogdG8gbWFrZSBjb21waWxl ciBoYXBweSAqLworICAgIHMtPnN0cnN0YXJ0ICs9IHMtPmxvb2thaGVhZDsKKyAgICBzLT5ibG9j a19zdGFydCA9IChsb25nKXMtPnN0cnN0YXJ0OworICAgIHMtPmluc2VydCA9IHMtPmxvb2thaGVh ZDsKKyAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPnByZXZf bGVuZ3RoID0gTUlOX01BVENILTE7CisgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKKyAgICBz dHJtLT5uZXh0X2luID0gbmV4dDsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGF2YWlsOworICAgIHMt PndyYXAgPSB3cmFwOwogICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ICovCi1pbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXQgKHN0cm0pCitpbnQgWkVYUE9SVCBkZWZsYXRl R2V0RGljdGlvbmFyeSAoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKKyAgICB6X3N0cmVh bXAgc3RybTsKKyAgICBCeXRlZiAqZGljdGlvbmFyeTsKKyAgICB1SW50ICAqZGljdExlbmd0aDsK K3sKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIHVJbnQgbGVuOworCisgICAgaWYgKGRlZmxh dGVTdGF0ZUNoZWNrKHN0cm0pKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAg cyA9IHN0cm0tPnN0YXRlOworICAgIGxlbiA9IHMtPnN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkOwor ICAgIGlmIChsZW4gPiBzLT53X3NpemUpCisgICAgICAgIGxlbiA9IHMtPndfc2l6ZTsKKyAgICBp ZiAoZGljdGlvbmFyeSAhPSBaX05VTEwgJiYgbGVuKQorICAgICAgICB6bWVtY3B5KGRpY3Rpb25h cnksIHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkIC0gbGVuLCBsZW4pOwor ICAgIGlmIChkaWN0TGVuZ3RoICE9IFpfTlVMTCkKKyAgICAgICAgKmRpY3RMZW5ndGggPSBsZW47 CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQ T1JUIGRlZmxhdGVSZXNldEtlZXAgKHN0cm0pCiAgICAgel9zdHJlYW1wIHN0cm07CiB7CiAgICAg ZGVmbGF0ZV9zdGF0ZSAqczsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0 ZSA9PSBaX05VTEwgfHwKLSAgICAgICAgc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTAgfHwg c3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSB7CisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNr KHN0cm0pKSB7CiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICB9CiAKQEAgLTM3 Niw3ICs0ODQsMTEgQEAKICAgICBpZiAocy0+d3JhcCA8IDApIHsKICAgICAgICAgcy0+d3JhcCA9 IC1zLT53cmFwOyAvKiB3YXMgbWFkZSBuZWdhdGl2ZSBieSBkZWZsYXRlKC4uLiwgWl9GSU5JU0gp OyAqLwogICAgIH0KLSAgICBzLT5zdGF0dXMgPSBzLT53cmFwID8gSU5JVF9TVEFURSA6IEJVU1lf U1RBVEU7CisgICAgcy0+c3RhdHVzID0KKyNpZmRlZiBHWklQCisgICAgICAgIHMtPndyYXAgPT0g MiA/IEdaSVBfU1RBVEUgOgorI2VuZGlmCisgICAgICAgIHMtPndyYXAgPyBJTklUX1NUQVRFIDog QlVTWV9TVEFURTsKICAgICBzdHJtLT5hZGxlciA9CiAjaWZkZWYgR1pJUAogICAgICAgICBzLT53 cmFwID09IDIgPyBjcmMzMigwTCwgWl9OVUxMLCAwKSA6CkBAIC0zODUsMjAgKzQ5Nyw3MCBAQAog ICAgIHMtPmxhc3RfZmx1c2ggPSBaX05PX0ZMVVNIOwogCiAgICAgX3RyX2luaXQocyk7Ci0gICAg bG1faW5pdChzKTsKIAogICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXQgKHN0cm0pCisgICAgel9zdHJlYW1wIHN0cm07 Cit7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGRlZmxhdGVSZXNldEtlZXAoc3RybSk7Cisg ICAgaWYgKHJldCA9PSBaX09LKQorICAgICAgICBsbV9pbml0KHN0cm0tPnN0YXRlKTsKKyAgICBy ZXR1cm4gcmV0OworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZs YXRlU2V0SGVhZGVyIChzdHJtLCBoZWFkKQorICAgIHpfc3RyZWFtcCBzdHJtOworICAgIGd6X2hl YWRlcnAgaGVhZDsKK3sKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkgfHwgc3RybS0+ c3RhdGUtPndyYXAgIT0gMikKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0 cm0tPnN0YXRlLT5nemhlYWQgPSBoZWFkOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyAoc3RybSwgcGVuZGlu ZywgYml0cykKKyAgICB1bnNpZ25lZCAqcGVuZGluZzsKKyAgICBpbnQgKmJpdHM7CisgICAgel9z dHJlYW1wIHN0cm07Cit7CisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4g Wl9TVFJFQU1fRVJST1I7CisgICAgaWYgKHBlbmRpbmcgIT0gWl9OVUxMKQorICAgICAgICAqcGVu ZGluZyA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nOworICAgIGlmIChiaXRzICE9IFpfTlVMTCkKKyAg ICAgICAgKmJpdHMgPSBzdHJtLT5zdGF0ZS0+YmlfdmFsaWQ7CisgICAgcmV0dXJuIFpfT0s7Cit9 CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIGludCBaRVhQT1JUIGRlZmxhdGVQcmltZSAoc3Ry bSwgYml0cywgdmFsdWUpCiAgICAgel9zdHJlYW1wIHN0cm07CiAgICAgaW50IGJpdHM7CiAgICAg aW50IHZhbHVlOwogewotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBa X05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfdmFsaWQg PSBiaXRzOwotICAgIHN0cm0tPnN0YXRlLT5iaV9idWYgPSAodXNoKSh2YWx1ZSAmICgoMSA8PCBi aXRzKSAtIDEpKTsKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCBwdXQ7CisKKyAgICBp ZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBz ID0gc3RybS0+c3RhdGU7CisgICAgaWYgKChCeXRlZiAqKShzLT5kX2J1ZikgPCBzLT5wZW5kaW5n X291dCArICgoQnVmX3NpemUgKyA3KSA+PiAzKSkKKyAgICAgICAgcmV0dXJuIFpfQlVGX0VSUk9S OworICAgIGRvIHsKKyAgICAgICAgcHV0ID0gQnVmX3NpemUgLSBzLT5iaV92YWxpZDsKKyAgICAg ICAgaWYgKHB1dCA+IGJpdHMpCisgICAgICAgICAgICBwdXQgPSBiaXRzOworICAgICAgICBzLT5i aV9idWYgfD0gKHVzaCkoKHZhbHVlICYgKCgxIDw8IHB1dCkgLSAxKSkgPDwgcy0+YmlfdmFsaWQp OworICAgICAgICBzLT5iaV92YWxpZCArPSBwdXQ7CisgICAgICAgIF90cl9mbHVzaF9iaXRzKHMp OworICAgICAgICB2YWx1ZSA+Pj0gcHV0OworICAgICAgICBiaXRzIC09IHB1dDsKKyAgICB9IHdo aWxlIChiaXRzKTsKICAgICByZXR1cm4gWl9PSzsKIH0KIApAQCAtNDEwLDkgKzU3Miw4IEBACiB7 CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICBjb21wcmVzc19mdW5jIGZ1bmM7Ci0gICAgaW50 IGVyciA9IFpfT0s7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0g Wl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNr KHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgcyA9IHN0cm0tPnN0YXRlOwogCiAj aWZkZWYgRkFTVEVTVApAQCAtNDIwLDE2ICs1ODEsMjggQEAKICNlbHNlCiAgICAgaWYgKGxldmVs ID09IFpfREVGQVVMVF9DT01QUkVTU0lPTikgbGV2ZWwgPSA2OwogI2VuZGlmCi0gICAgaWYgKGxl dmVsIDwgMCB8fCBsZXZlbCA+IDkgfHwgc3RyYXRlZ3kgPCAwIHx8IHN0cmF0ZWd5ID4gWl9STEUp IHsKKyAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gOSB8fCBzdHJhdGVneSA8IDAgfHwgc3Ry YXRlZ3kgPiBaX0ZJWEVEKSB7CiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICB9 CiAgICAgZnVuYyA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy0+bGV2ZWxdLmZ1bmM7CiAKLSAgICBp ZiAoZnVuYyAhPSBjb25maWd1cmF0aW9uX3RhYmxlW2xldmVsXS5mdW5jICYmIHN0cm0tPnRvdGFs X2luICE9IDApIHsKKyAgICBpZiAoKHN0cmF0ZWd5ICE9IHMtPnN0cmF0ZWd5IHx8IGZ1bmMgIT0g Y29uZmlndXJhdGlvbl90YWJsZVtsZXZlbF0uZnVuYykgJiYKKyAgICAgICAgcy0+aGlnaF93YXRl cikgewogICAgICAgICAvKiBGbHVzaCB0aGUgbGFzdCBidWZmZXI6ICovCi0gICAgICAgIGVyciA9 IGRlZmxhdGUoc3RybSwgWl9QQVJUSUFMX0ZMVVNIKTsKKyAgICAgICAgaW50IGVyciA9IGRlZmxh dGUoc3RybSwgWl9CTE9DSyk7CisgICAgICAgIGlmIChlcnIgPT0gWl9TVFJFQU1fRVJST1IpCisg ICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDAp CisgICAgICAgICAgICByZXR1cm4gWl9CVUZfRVJST1I7CiAgICAgfQogICAgIGlmIChzLT5sZXZl bCAhPSBsZXZlbCkgeworICAgICAgICBpZiAocy0+bGV2ZWwgPT0gMCAmJiBzLT5tYXRjaGVzICE9 IDApIHsKKyAgICAgICAgICAgIGlmIChzLT5tYXRjaGVzID09IDEpCisgICAgICAgICAgICAgICAg c2xpZGVfaGFzaChzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDTEVBUl9I QVNIKHMpOworICAgICAgICAgICAgcy0+bWF0Y2hlcyA9IDA7CisgICAgICAgIH0KICAgICAgICAg cy0+bGV2ZWwgPSBsZXZlbDsKICAgICAgICAgcy0+bWF4X2xhenlfbWF0Y2ggICA9IGNvbmZpZ3Vy YXRpb25fdGFibGVbbGV2ZWxdLm1heF9sYXp5OwogICAgICAgICBzLT5nb29kX21hdGNoICAgICAg ID0gY29uZmlndXJhdGlvbl90YWJsZVtsZXZlbF0uZ29vZF9sZW5ndGg7CkBAIC00MzcsNyArNjEw LDI2IEBACiAgICAgICAgIHMtPm1heF9jaGFpbl9sZW5ndGggPSBjb25maWd1cmF0aW9uX3RhYmxl W2xldmVsXS5tYXhfY2hhaW47CiAgICAgfQogICAgIHMtPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7Ci0g ICAgcmV0dXJuIGVycjsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVR1bmUoc3RybSwgZ29vZF9sZW5ndGgsIG1heF9sYXp5 LCBuaWNlX2xlbmd0aCwgbWF4X2NoYWluKQorICAgIHpfc3RyZWFtcCBzdHJtOworICAgIGludCBn b29kX2xlbmd0aDsKKyAgICBpbnQgbWF4X2xhenk7CisgICAgaW50IG5pY2VfbGVuZ3RoOworICAg IGludCBtYXhfY2hhaW47Cit7CisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKworICAgIGlmIChkZWZs YXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHMgPSBzdHJt LT5zdGF0ZTsKKyAgICBzLT5nb29kX21hdGNoID0gKHVJbnQpZ29vZF9sZW5ndGg7CisgICAgcy0+ bWF4X2xhenlfbWF0Y2ggPSAodUludCltYXhfbGF6eTsKKyAgICBzLT5uaWNlX21hdGNoID0gbmlj ZV9sZW5ndGg7CisgICAgcy0+bWF4X2NoYWluX2xlbmd0aCA9ICh1SW50KW1heF9jaGFpbjsKKyAg ICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDUyLDMzICs2NDQs NjggQEAKICAqIHJlc3VsdGluZyBmcm9tIHVzaW5nIGZpeGVkIGJsb2NrcyBpbnN0ZWFkIG9mIHN0 b3JlZCBibG9ja3MsIHdoaWNoIGRlZmxhdGUKICAqIGNhbiBlbWl0IG9uIGNvbXByZXNzZWQgZGF0 YSBmb3Igc29tZSBjb21iaW5hdGlvbnMgb2YgdGhlIHBhcmFtZXRlcnMuCiAgKgotICogVGhpcyBm dW5jdGlvbiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG8gcHJvdmlkZSBjbG9zZXIgdXBw ZXIgYm91bmRzCi0gKiBmb3IgZXZlcnkgY29tYmluYXRpb24gb2Ygd2luZG93Qml0cyBhbmQgbWVt TGV2ZWwsIGFzIHdlbGwgYXMgd3JhcC4KLSAqIEJ1dCBldmVuIHRoZSBjb25zZXJ2YXRpdmUgdXBw ZXIgYm91bmQgb2YgYWJvdXQgMTQlIGV4cGFuc2lvbiBkb2VzIG5vdAotICogc2VlbSBvbmVyb3Vz IGZvciBvdXRwdXQgYnVmZmVyIGFsbG9jYXRpb24uCisgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJl IG1vcmUgc29waGlzdGljYXRlZCB0byBwcm92aWRlIGNsb3NlciB1cHBlciBib3VuZHMgZm9yCisg KiBldmVyeSBjb21iaW5hdGlvbiBvZiB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbC4gIEJ1dCBldmVu IHRoZSBjb25zZXJ2YXRpdmUKKyAqIHVwcGVyIGJvdW5kIG9mIGFib3V0IDE0JSBleHBhbnNpb24g ZG9lcyBub3Qgc2VlbSBvbmVyb3VzIGZvciBvdXRwdXQgYnVmZmVyCisgKiBhbGxvY2F0aW9uLgog ICovCiB1TG9uZyBaRVhQT1JUIGRlZmxhdGVCb3VuZChzdHJtLCBzb3VyY2VMZW4pCiAgICAgel9z dHJlYW1wIHN0cm07CiAgICAgdUxvbmcgc291cmNlTGVuOwogewogICAgIGRlZmxhdGVfc3RhdGUg KnM7Ci0gICAgdUxvbmcgZGVzdExlbjsKKyAgICB1TG9uZyBjb21wbGVuLCB3cmFwbGVuOwogCi0g ICAgLyogY29uc2VydmF0aXZlIHVwcGVyIGJvdW5kICovCi0gICAgZGVzdExlbiA9IHNvdXJjZUxl biArCi0gICAgICAgICAgICAgICgoc291cmNlTGVuICsgNykgPj4gMykgKyAoKHNvdXJjZUxlbiAr IDYzKSA+PiA2KSArIDExOworICAgIC8qIGNvbnNlcnZhdGl2ZSB1cHBlciBib3VuZCBmb3IgY29t cHJlc3NlZCBkYXRhICovCisgICAgY29tcGxlbiA9IHNvdXJjZUxlbiArCisgICAgICAgICAgICAg ICgoc291cmNlTGVuICsgNykgPj4gMykgKyAoKHNvdXJjZUxlbiArIDYzKSA+PiA2KSArIDU7CiAK LSAgICAvKiBpZiBjYW4ndCBnZXQgcGFyYW1ldGVycywgcmV0dXJuIGNvbnNlcnZhdGl2ZSBib3Vu ZCAqLwotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpCi0g ICAgICAgIHJldHVybiBkZXN0TGVuOworICAgIC8qIGlmIGNhbid0IGdldCBwYXJhbWV0ZXJzLCBy ZXR1cm4gY29uc2VydmF0aXZlIGJvdW5kIHBsdXMgemxpYiB3cmFwcGVyICovCisgICAgaWYgKGRl ZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKQorICAgICAgICByZXR1cm4gY29tcGxlbiArIDY7CisKKyAg ICAvKiBjb21wdXRlIHdyYXBwZXIgbGVuZ3RoICovCisgICAgcyA9IHN0cm0tPnN0YXRlOworICAg IHN3aXRjaCAocy0+d3JhcCkgeworICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiByYXcgZGVmbGF0ZSAqLworICAgICAgICB3cmFwbGVuID0gMDsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHps aWIgd3JhcHBlciAqLworICAgICAgICB3cmFwbGVuID0gNiArIChzLT5zdHJzdGFydCA/IDQgOiAw KTsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgR1pJUAorICAgIGNhc2UgMjogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBnemlwIHdyYXBwZXIgKi8KKyAgICAgICAgd3JhcGxlbiA9 IDE4OworICAgICAgICBpZiAocy0+Z3poZWFkICE9IFpfTlVMTCkgeyAgICAgICAgICAvKiB1c2Vy LXN1cHBsaWVkIGd6aXAgaGVhZGVyICovCisgICAgICAgICAgICBCeXRlZiAqc3RyOworICAgICAg ICAgICAgaWYgKHMtPmd6aGVhZC0+ZXh0cmEgIT0gWl9OVUxMKQorICAgICAgICAgICAgICAgIHdy YXBsZW4gKz0gMiArIHMtPmd6aGVhZC0+ZXh0cmFfbGVuOworICAgICAgICAgICAgc3RyID0gcy0+ Z3poZWFkLT5uYW1lOworICAgICAgICAgICAgaWYgKHN0ciAhPSBaX05VTEwpCisgICAgICAgICAg ICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB3cmFwbGVuKys7CisgICAgICAgICAgICAg ICAgfSB3aGlsZSAoKnN0cisrKTsKKyAgICAgICAgICAgIHN0ciA9IHMtPmd6aGVhZC0+Y29tbWVu dDsKKyAgICAgICAgICAgIGlmIChzdHIgIT0gWl9OVUxMKQorICAgICAgICAgICAgICAgIGRvIHsK KyAgICAgICAgICAgICAgICAgICAgd3JhcGxlbisrOworICAgICAgICAgICAgICAgIH0gd2hpbGUg KCpzdHIrKyk7CisgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjKQorICAgICAgICAgICAg ICAgIHdyYXBsZW4gKz0gMjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZgorICAg IGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgY29tcGlsZXIg aGFwcGluZXNzICovCisgICAgICAgIHdyYXBsZW4gPSA2OworICAgIH0KIAogICAgIC8qIGlmIG5v dCBkZWZhdWx0IHBhcmFtZXRlcnMsIHJldHVybiBjb25zZXJ2YXRpdmUgYm91bmQgKi8KLSAgICBz ID0gc3RybS0+c3RhdGU7CiAgICAgaWYgKHMtPndfYml0cyAhPSAxNSB8fCBzLT5oYXNoX2JpdHMg IT0gOCArIDcpCi0gICAgICAgIHJldHVybiBkZXN0TGVuOworICAgICAgICByZXR1cm4gY29tcGxl biArIHdyYXBsZW47CiAKICAgICAvKiBkZWZhdWx0IHNldHRpbmdzOiByZXR1cm4gdGlnaHQgYm91 bmQgZm9yIHRoYXQgY2FzZSAqLwotICAgIHJldHVybiBjb21wcmVzc0JvdW5kKHNvdXJjZUxlbik7 CisgICAgcmV0dXJuIHNvdXJjZUxlbiArIChzb3VyY2VMZW4gPj4gMTIpICsgKHNvdXJjZUxlbiA+ PiAxNCkgKworICAgICAgICAgICAoc291cmNlTGVuID4+IDI1KSArIDEzIC0gNiArIHdyYXBsZW47 CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ5NSwzMCArNzIyLDQzIEBACiB9CiAKIC8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSAqIEZsdXNoIGFzIG11Y2ggcGVuZGluZyBvdXRwdXQgYXMgcG9z c2libGUuIEFsbCBkZWZsYXRlKCkgb3V0cHV0IGdvZXMKLSAqIHRocm91Z2ggdGhpcyBmdW5jdGlv biBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXQKLSAqIHRvIGF2b2lk IGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5uZXh0X291dCBidWZmZXIgYW5kIGNvcHlpbmcgaW50 byBpdC4KLSAqIChTZWUgYWxzbyByZWFkX2J1ZigpKS4KKyAqIEZsdXNoIGFzIG11Y2ggcGVuZGlu ZyBvdXRwdXQgYXMgcG9zc2libGUuIEFsbCBkZWZsYXRlKCkgb3V0cHV0LCBleGNlcHQgZm9yCisg KiBzb21lIGRlZmxhdGVfc3RvcmVkKCkgb3V0cHV0LCBnb2VzIHRocm91Z2ggdGhpcyBmdW5jdGlv biBzbyBzb21lCisgKiBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0IHRvIGF2b2lk IGFsbG9jYXRpbmcgYSBsYXJnZQorICogc3RybS0+bmV4dF9vdXQgYnVmZmVyIGFuZCBjb3B5aW5n IGludG8gaXQuIChTZWUgYWxzbyByZWFkX2J1ZigpKS4KICAqLwogbG9jYWwgdm9pZCBmbHVzaF9w ZW5kaW5nKHN0cm0pCiAgICAgel9zdHJlYW1wIHN0cm07CiB7Ci0gICAgdW5zaWduZWQgbGVuID0g c3RybS0+c3RhdGUtPnBlbmRpbmc7CisgICAgdW5zaWduZWQgbGVuOworICAgIGRlZmxhdGVfc3Rh dGUgKnMgPSBzdHJtLT5zdGF0ZTsKIAorICAgIF90cl9mbHVzaF9iaXRzKHMpOworICAgIGxlbiA9 IHMtPnBlbmRpbmc7CiAgICAgaWYgKGxlbiA+IHN0cm0tPmF2YWlsX291dCkgbGVuID0gc3RybS0+ YXZhaWxfb3V0OwogICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuOwogCi0gICAgem1lbWNweShzdHJt LT5uZXh0X291dCwgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0LCBsZW4pOworICAgIHptZW1jcHko c3RybS0+bmV4dF9vdXQsIHMtPnBlbmRpbmdfb3V0LCBsZW4pOwogICAgIHN0cm0tPm5leHRfb3V0 ICArPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0ICArPSBsZW47CisgICAgcy0+ cGVuZGluZ19vdXQgICs9IGxlbjsKICAgICBzdHJtLT50b3RhbF9vdXQgKz0gbGVuOwotICAgIHN0 cm0tPmF2YWlsX291dCAgLT0gbGVuOwotICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nIC09IGxlbjsK LSAgICBpZiAoc3RybS0+c3RhdGUtPnBlbmRpbmcgPT0gMCkgewotICAgICAgICBzdHJtLT5zdGF0 ZS0+cGVuZGluZ19vdXQgPSBzdHJtLT5zdGF0ZS0+cGVuZGluZ19idWY7CisgICAgc3RybS0+YXZh aWxfb3V0IC09IGxlbjsKKyAgICBzLT5wZW5kaW5nICAgICAgLT0gbGVuOworICAgIGlmIChzLT5w ZW5kaW5nID09IDApIHsKKyAgICAgICAgcy0+cGVuZGluZ19vdXQgPSBzLT5wZW5kaW5nX2J1ZjsK ICAgICB9CiB9CiAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVXBkYXRlIHRoZSBoZWFkZXIg Q1JDIHdpdGggdGhlIGJ5dGVzIHMtPnBlbmRpbmdfYnVmW2JlZy4ucy0+cGVuZGluZyAtIDFdLgor ICovCisjZGVmaW5lIEhDUkNfVVBEQVRFKGJlZykgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAo cy0+Z3poZWFkLT5oY3JjICYmIHMtPnBlbmRpbmcgPiAoYmVnKSkgXAorICAgICAgICAgICAgc3Ry bS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgcy0+cGVuZGluZ19idWYgKyAoYmVnKSwgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nIC0gKGJlZykpOyBcCisg ICAgfSB3aGlsZSAoMCkKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVm bGF0ZSAoc3RybSwgZmx1c2gpCiAgICAgel9zdHJlYW1wIHN0cm07CkBAIC01MjcsNzIgKzc2Nywy MSBAQAogICAgIGludCBvbGRfZmx1c2g7IC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2 aW91cyBkZWZsYXRlIGNhbGwgKi8KICAgICBkZWZsYXRlX3N0YXRlICpzOwogCi0gICAgaWYgKHN0 cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fAotICAgICAgICBmbHVzaCA+ IFpfRklOSVNIIHx8IGZsdXNoIDwgMCkgeworICAgIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJt KSB8fCBmbHVzaCA+IFpfQkxPQ0sgfHwgZmx1c2ggPCAwKSB7CiAgICAgICAgIHJldHVybiBaX1NU UkVBTV9FUlJPUjsKICAgICB9CiAgICAgcyA9IHN0cm0tPnN0YXRlOwogCiAgICAgaWYgKHN0cm0t Pm5leHRfb3V0ID09IFpfTlVMTCB8fAotICAgICAgICAoc3RybS0+bmV4dF9pbiA9PSBaX05VTEwg JiYgc3RybS0+YXZhaWxfaW4gIT0gMCkgfHwKKyAgICAgICAgKHN0cm0tPmF2YWlsX2luICE9IDAg JiYgc3RybS0+bmV4dF9pbiA9PSBaX05VTEwpIHx8CiAgICAgICAgIChzLT5zdGF0dXMgPT0gRklO SVNIX1NUQVRFICYmIGZsdXNoICE9IFpfRklOSVNIKSkgewogICAgICAgICBFUlJfUkVUVVJOKHN0 cm0sIFpfU1RSRUFNX0VSUk9SKTsKICAgICB9CiAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAw KSBFUlJfUkVUVVJOKHN0cm0sIFpfQlVGX0VSUk9SKTsKIAotICAgIHMtPnN0cm0gPSBzdHJtOyAv KiBqdXN0IGluIGNhc2UgKi8KICAgICBvbGRfZmx1c2ggPSBzLT5sYXN0X2ZsdXNoOwogICAgIHMt Pmxhc3RfZmx1c2ggPSBmbHVzaDsKIAotICAgIC8qIFdyaXRlIHRoZSBoZWFkZXIgKi8KLSAgICBp ZiAocy0+c3RhdHVzID09IElOSVRfU1RBVEUpIHsKLSNpZmRlZiBHWklQCi0gICAgICAgIGlmIChz LT53cmFwID09IDIpIHsKLSAgICAgICAgICAgIHB1dF9ieXRlKHMsIDMxKTsKLSAgICAgICAgICAg IHB1dF9ieXRlKHMsIDEzOSk7Ci0gICAgICAgICAgICBwdXRfYnl0ZShzLCA4KTsKLSAgICAgICAg ICAgIHB1dF9ieXRlKHMsIDApOwotICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7Ci0gICAgICAg ICAgICBwdXRfYnl0ZShzLCAwKTsKLSAgICAgICAgICAgIHB1dF9ieXRlKHMsIDApOwotICAgICAg ICAgICAgcHV0X2J5dGUocywgMCk7Ci0gICAgICAgICAgICBwdXRfYnl0ZShzLCBzLT5sZXZlbCA9 PSA5ID8gMiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAocy0+c3RyYXRlZ3kgPj0gWl9IVUZG TUFOX09OTFkgfHwgcy0+bGV2ZWwgPCAyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICA0IDog MCkpOwotICAgICAgICAgICAgcHV0X2J5dGUocywgMjU1KTsKLSAgICAgICAgICAgIHMtPnN0YXR1 cyA9IEJVU1lfU1RBVEU7Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKDBMLCBaX05V TEwsIDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICB7Ci0gICAg ICAgICAgICB1SW50IGhlYWRlciA9IChaX0RFRkxBVEVEICsgKChzLT53X2JpdHMtOCk8PDQpKSA8 PCA4OwotICAgICAgICAgICAgdUludCBsZXZlbF9mbGFnczsKLQotICAgICAgICAgICAgaWYgKHMt PnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMtPmxldmVsIDwgMikKLSAgICAgICAgICAg ICAgICBsZXZlbF9mbGFncyA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChzLT5sZXZlbCA8IDYp Ci0gICAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAo cy0+bGV2ZWwgPT0gNikKLSAgICAgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDI7Ci0gICAgICAg ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzOwotICAgICAgICAgICAg aGVhZGVyIHw9IChsZXZlbF9mbGFncyA8PCA2KTsKLSAgICAgICAgICAgIGlmIChzLT5zdHJzdGFy dCAhPSAwKSBoZWFkZXIgfD0gUFJFU0VUX0RJQ1Q7Ci0gICAgICAgICAgICBoZWFkZXIgKz0gMzEg LSAoaGVhZGVyICUgMzEpOwotCi0gICAgICAgICAgICBzLT5zdGF0dXMgPSBCVVNZX1NUQVRFOwot ICAgICAgICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTsKLQotICAgICAgICAgICAgLyogU2F2 ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovCi0gICAgICAgICAgICBp ZiAocy0+c3Ryc3RhcnQgIT0gMCkgewotICAgICAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsICh1 SW50KShzdHJtLT5hZGxlciA+PiAxNikpOwotICAgICAgICAgICAgICAgIHB1dFNob3J0TVNCKHMs ICh1SW50KShzdHJtLT5hZGxlciAmIDB4ZmZmZikpOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICB9Ci0gICAg fQotCiAgICAgLyogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZSAqLwog ICAgIGlmIChzLT5wZW5kaW5nICE9IDApIHsKICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsK QEAgLTYxMSw3ICs4MDAsNyBAQAogICAgICAqIGZsdXNoZXMuIEZvciByZXBlYXRlZCBhbmQgdXNl bGVzcyBjYWxscyB3aXRoIFpfRklOSVNILCB3ZSBrZWVwCiAgICAgICogcmV0dXJuaW5nIFpfU1RS RUFNX0VORCBpbnN0ZWFkIG9mIFpfQlVGX0VSUk9SLgogICAgICAqLwotICAgIH0gZWxzZSBpZiAo c3RybS0+YXZhaWxfaW4gPT0gMCAmJiBmbHVzaCA8PSBvbGRfZmx1c2ggJiYKKyAgICB9IGVsc2Ug aWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgUkFOSyhmbHVzaCkgPD0gUkFOSyhvbGRfZmx1c2gp ICYmCiAgICAgICAgICAgICAgICBmbHVzaCAhPSBaX0ZJTklTSCkgewogICAgICAgICBFUlJfUkVU VVJOKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICB9CkBAIC02MjEsMTMgKzgxMCwxOTcgQEAKICAg ICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgfQogCisgICAgLyogV3Jp dGUgdGhlIGhlYWRlciAqLworICAgIGlmIChzLT5zdGF0dXMgPT0gSU5JVF9TVEFURSkgeworICAg ICAgICAvKiB6bGliIGhlYWRlciAqLworICAgICAgICB1SW50IGhlYWRlciA9IChaX0RFRkxBVEVE ICsgKChzLT53X2JpdHMtOCk8PDQpKSA8PCA4OworICAgICAgICB1SW50IGxldmVsX2ZsYWdzOwor CisgICAgICAgIGlmIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8 IDIpCisgICAgICAgICAgICBsZXZlbF9mbGFncyA9IDA7CisgICAgICAgIGVsc2UgaWYgKHMtPmxl dmVsIDwgNikKKyAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMTsKKyAgICAgICAgZWxzZSBpZiAo cy0+bGV2ZWwgPT0gNikKKyAgICAgICAgICAgIGxldmVsX2ZsYWdzID0gMjsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzOworICAgICAgICBoZWFkZXIgfD0gKGxldmVs X2ZsYWdzIDw8IDYpOworICAgICAgICBpZiAocy0+c3Ryc3RhcnQgIT0gMCkgaGVhZGVyIHw9IFBS RVNFVF9ESUNUOworICAgICAgICBoZWFkZXIgKz0gMzEgLSAoaGVhZGVyICUgMzEpOworCisgICAg ICAgIHB1dFNob3J0TVNCKHMsIGhlYWRlcik7CisKKyAgICAgICAgLyogU2F2ZSB0aGUgYWRsZXIz MiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovCisgICAgICAgIGlmIChzLT5zdHJzdGFydCAh PSAwKSB7CisgICAgICAgICAgICBwdXRTaG9ydE1TQihzLCAodUludCkoc3RybS0+YWRsZXIgPj4g MTYpKTsKKyAgICAgICAgICAgIHB1dFNob3J0TVNCKHMsICh1SW50KShzdHJtLT5hZGxlciAmIDB4 ZmZmZikpOworICAgICAgICB9CisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMigwTCwgWl9O VUxMLCAwKTsKKyAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKKworICAgICAgICAvKiBD b21wcmVzc2lvbiBtdXN0IHN0YXJ0IHdpdGggYW4gZW1wdHkgcGVuZGluZyBidWZmZXIgKi8KKyAg ICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkg eworICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgcmV0dXJuIFpf T0s7CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgR1pJUAorICAgIGlmIChzLT5zdGF0dXMgPT0g R1pJUF9TVEFURSkgeworICAgICAgICAvKiBnemlwIGhlYWRlciAqLworICAgICAgICBzdHJtLT5h ZGxlciA9IGNyYzMyKDBMLCBaX05VTEwsIDApOworICAgICAgICBwdXRfYnl0ZShzLCAzMSk7Cisg ICAgICAgIHB1dF9ieXRlKHMsIDEzOSk7CisgICAgICAgIHB1dF9ieXRlKHMsIDgpOworICAgICAg ICBpZiAocy0+Z3poZWFkID09IFpfTlVMTCkgeworICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7 CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIDAp OworICAgICAgICAgICAgcHV0X2J5dGUocywgMCk7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAw KTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmxldmVsID09IDkgPyAyIDoKKyAgICAgICAg ICAgICAgICAgICAgIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8 IDIgPworICAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7CisgICAgICAgICAgICBwdXRfYnl0 ZShzLCBPU19DT0RFKTsKKyAgICAgICAgICAgIHMtPnN0YXR1cyA9IEJVU1lfU1RBVEU7CisKKyAg ICAgICAgICAgIC8qIENvbXByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBwZW5kaW5n IGJ1ZmZlciAqLworICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgICAg IGlmIChzLT5wZW5kaW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICBzLT5sYXN0X2ZsdXNoID0g LTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwdXRfYnl0ZShzLCAocy0+Z3poZWFkLT50 ZXh0ID8gMSA6IDApICsKKyAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmhjcmMgPyAy IDogMCkgKworICAgICAgICAgICAgICAgICAgICAgKHMtPmd6aGVhZC0+ZXh0cmEgPT0gWl9OVUxM ID8gMCA6IDQpICsKKyAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPm5hbWUgPT0gWl9O VUxMID8gMCA6IDgpICsKKyAgICAgICAgICAgICAgICAgICAgIChzLT5nemhlYWQtPmNvbW1lbnQg PT0gWl9OVUxMID8gMCA6IDE2KQorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg IHB1dF9ieXRlKHMsIChCeXRlKShzLT5nemhlYWQtPnRpbWUgJiAweGZmKSk7CisgICAgICAgICAg ICBwdXRfYnl0ZShzLCAoQnl0ZSkoKHMtPmd6aGVhZC0+dGltZSA+PiA4KSAmIDB4ZmYpKTsKKyAg ICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+IDE2KSAmIDB4 ZmYpKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIChCeXRlKSgocy0+Z3poZWFkLT50aW1lID4+ IDI0KSAmIDB4ZmYpKTsKKyAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmxldmVsID09IDkgPyAy IDoKKyAgICAgICAgICAgICAgICAgICAgIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8 fCBzLT5sZXZlbCA8IDIgPworICAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7CisgICAgICAg ICAgICBwdXRfYnl0ZShzLCBzLT5nemhlYWQtPm9zICYgMHhmZik7CisgICAgICAgICAgICBpZiAo cy0+Z3poZWFkLT5leHRyYSAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgICAgICBwdXRfYnl0ZShz LCBzLT5nemhlYWQtPmV4dHJhX2xlbiAmIDB4ZmYpOworICAgICAgICAgICAgICAgIHB1dF9ieXRl KHMsIChzLT5nemhlYWQtPmV4dHJhX2xlbiA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKHMtPmd6aGVhZC0+aGNyYykKKyAgICAgICAgICAgICAgICBzdHJtLT5h ZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzLT5wZW5kaW5nX2J1ZiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHMtPnBlbmRpbmcpOworICAgICAgICAgICAgcy0+Z3ppbmRl eCA9IDA7CisgICAgICAgICAgICBzLT5zdGF0dXMgPSBFWFRSQV9TVEFURTsKKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAocy0+c3RhdHVzID09IEVYVFJBX1NUQVRFKSB7CisgICAgICAgIGlmIChz LT5nemhlYWQtPmV4dHJhICE9IFpfTlVMTCkgeworICAgICAgICAgICAgdWxnIGJlZyA9IHMtPnBl bmRpbmc7ICAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLworICAgICAgICAgICAg dUludCBsZWZ0ID0gKHMtPmd6aGVhZC0+ZXh0cmFfbGVuICYgMHhmZmZmKSAtIHMtPmd6aW5kZXg7 CisgICAgICAgICAgICB3aGlsZSAocy0+cGVuZGluZyArIGxlZnQgPiBzLT5wZW5kaW5nX2J1Zl9z aXplKSB7CisgICAgICAgICAgICAgICAgdUludCBjb3B5ID0gcy0+cGVuZGluZ19idWZfc2l6ZSAt IHMtPnBlbmRpbmc7CisgICAgICAgICAgICAgICAgem1lbWNweShzLT5wZW5kaW5nX2J1ZiArIHMt PnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBzLT5nemhlYWQtPmV4dHJhICsgcy0+ Z3ppbmRleCwgY29weSk7CisgICAgICAgICAgICAgICAgcy0+cGVuZGluZyA9IHMtPnBlbmRpbmdf YnVmX3NpemU7CisgICAgICAgICAgICAgICAgSENSQ19VUERBVEUoYmVnKTsKKyAgICAgICAgICAg ICAgICBzLT5nemluZGV4ICs9IGNvcHk7CisgICAgICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhz dHJtKTsKKyAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CisgICAgICAgICAg ICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IFpfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJlZyA9IDA7CisgICAg ICAgICAgICAgICAgbGVmdCAtPSBjb3B5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgem1l bWNweShzLT5wZW5kaW5nX2J1ZiArIHMtPnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgIHMt Pmd6aGVhZC0+ZXh0cmEgKyBzLT5nemluZGV4LCBsZWZ0KTsKKyAgICAgICAgICAgIHMtPnBlbmRp bmcgKz0gbGVmdDsKKyAgICAgICAgICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAgICAgICBz LT5nemluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICBzLT5zdGF0dXMgPSBOQU1FX1NUQVRF OworICAgIH0KKyAgICBpZiAocy0+c3RhdHVzID09IE5BTUVfU1RBVEUpIHsKKyAgICAgICAgaWYg KHMtPmd6aGVhZC0+bmFtZSAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgIHVsZyBiZWcgPSBzLT5w ZW5kaW5nOyAgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi8KKyAgICAgICAgICAg IGludCB2YWw7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKHMtPnBlbmRp bmcgPT0gcy0+cGVuZGluZ19idWZfc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBIQ1JDX1VQ REFURShiZWcpOworICAgICAgICAgICAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOworICAg ICAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyAhPSAwKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBzLT5sYXN0X2ZsdXNoID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gWl9PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiZWcg PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWwgPSBzLT5nemhlYWQt Pm5hbWVbcy0+Z3ppbmRleCsrXTsKKyAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCB2YWwpOwor ICAgICAgICAgICAgfSB3aGlsZSAodmFsICE9IDApOworICAgICAgICAgICAgSENSQ19VUERBVEUo YmVnKTsKKyAgICAgICAgICAgIHMtPmd6aW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgIHMt PnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gQ09N TUVOVF9TVEFURSkgeworICAgICAgICBpZiAocy0+Z3poZWFkLT5jb21tZW50ICE9IFpfTlVMTCkg eworICAgICAgICAgICAgdWxnIGJlZyA9IHMtPnBlbmRpbmc7ICAgLyogc3RhcnQgb2YgYnl0ZXMg dG8gdXBkYXRlIGNyYyAqLworICAgICAgICAgICAgaW50IHZhbDsKKyAgICAgICAgICAgIGRvIHsK KyAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyA9PSBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7 CisgICAgICAgICAgICAgICAgICAgIEhDUkNfVVBEQVRFKGJlZyk7CisgICAgICAgICAgICAgICAg ICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5wZW5k aW5nICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBaX09LOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIGJlZyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIHZhbCA9IHMtPmd6aGVhZC0+Y29tbWVudFtzLT5nemluZGV4KytdOworICAg ICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CisgICAgICAgICAgICB9IHdoaWxlICh2YWwg IT0gMCk7CisgICAgICAgICAgICBIQ1JDX1VQREFURShiZWcpOworICAgICAgICB9CisgICAgICAg IHMtPnN0YXR1cyA9IEhDUkNfU1RBVEU7CisgICAgfQorICAgIGlmIChzLT5zdGF0dXMgPT0gSENS Q19TVEFURSkgeworICAgICAgICBpZiAocy0+Z3poZWFkLT5oY3JjKSB7CisgICAgICAgICAgICBp ZiAocy0+cGVuZGluZyArIDIgPiBzLT5wZW5kaW5nX2J1Zl9zaXplKSB7CisgICAgICAgICAgICAg ICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgICAgICAgICBpZiAocy0+cGVuZGluZyAh PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfZmx1c2ggPSAtMTsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIFpfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKHN0cm0tPmFkbGVyICYgMHhmZikpOwor ICAgICAgICAgICAgcHV0X2J5dGUocywgKEJ5dGUpKChzdHJtLT5hZGxlciA+PiA4KSAmIDB4ZmYp KTsKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CisgICAg ICAgIH0KKyAgICAgICAgcy0+c3RhdHVzID0gQlVTWV9TVEFURTsKKworICAgICAgICAvKiBDb21w cmVzc2lvbiBtdXN0IHN0YXJ0IHdpdGggYW4gZW1wdHkgcGVuZGluZyBidWZmZXIgKi8KKyAgICAg ICAgZmx1c2hfcGVuZGluZyhzdHJtKTsKKyAgICAgICAgaWYgKHMtPnBlbmRpbmcgIT0gMCkgewor ICAgICAgICAgICAgcy0+bGFzdF9mbHVzaCA9IC0xOworICAgICAgICAgICAgcmV0dXJuIFpfT0s7 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIC8qIFN0YXJ0IGEgbmV3IGJsb2NrIG9y IGNvbnRpbnVlIHRoZSBjdXJyZW50IG9uZS4KICAgICAgKi8KICAgICBpZiAoc3RybS0+YXZhaWxf aW4gIT0gMCB8fCBzLT5sb29rYWhlYWQgIT0gMCB8fAogICAgICAgICAoZmx1c2ggIT0gWl9OT19G TFVTSCAmJiBzLT5zdGF0dXMgIT0gRklOSVNIX1NUQVRFKSkgewogICAgICAgICBibG9ja19zdGF0 ZSBic3RhdGU7CiAKLSAgICAgICAgYnN0YXRlID0gKCooY29uZmlndXJhdGlvbl90YWJsZVtzLT5s ZXZlbF0uZnVuYykpKHMsIGZsdXNoKTsKKyAgICAgICAgYnN0YXRlID0gcy0+bGV2ZWwgPT0gMCA/ IGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSA6CisgICAgICAgICAgICAgICAgIHMtPnN0cmF0ZWd5 ID09IFpfSFVGRk1BTl9PTkxZID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6CisgICAgICAgICAg ICAgICAgIHMtPnN0cmF0ZWd5ID09IFpfUkxFID8gZGVmbGF0ZV9ybGUocywgZmx1c2gpIDoKKyAg ICAgICAgICAgICAgICAgKCooY29uZmlndXJhdGlvbl90YWJsZVtzLT5sZXZlbF0uZnVuYykpKHMs IGZsdXNoKTsKIAogICAgICAgICBpZiAoYnN0YXRlID09IGZpbmlzaF9zdGFydGVkIHx8IGJzdGF0 ZSA9PSBmaW5pc2hfZG9uZSkgewogICAgICAgICAgICAgcy0+c3RhdHVzID0gRklOSVNIX1NUQVRF OwpAQCAtNjQ4LDEzICsxMDIxLDE4IEBACiAgICAgICAgIGlmIChic3RhdGUgPT0gYmxvY2tfZG9u ZSkgewogICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfUEFSVElBTF9GTFVTSCkgewogICAgICAg ICAgICAgICAgIF90cl9hbGlnbihzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7IC8qIEZVTExfRkxV U0ggb3IgU1lOQ19GTFVTSCAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChmbHVzaCAhPSBaX0JM T0NLKSB7IC8qIEZVTExfRkxVU0ggb3IgU1lOQ19GTFVTSCAqLwogICAgICAgICAgICAgICAgIF90 cl9zdG9yZWRfYmxvY2socywgKGNoYXIqKTAsIDBMLCAwKTsKICAgICAgICAgICAgICAgICAvKiBG b3IgYSBmdWxsIGZsdXNoLCB0aGlzIGVtcHR5IGJsb2NrIHdpbGwgYmUgcmVjb2duaXplZAogICAg ICAgICAgICAgICAgICAqIGFzIGEgc3BlY2lhbCBtYXJrZXIgYnkgaW5mbGF0ZV9zeW5jKCkuCiAg ICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfRlVMTF9G TFVTSCkgewogICAgICAgICAgICAgICAgICAgICBDTEVBUl9IQVNIKHMpOyAgICAgICAgICAgICAv KiBmb3JnZXQgaGlzdG9yeSAqLworICAgICAgICAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFk ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CisgICAgICAgICAgICAgICAg ICAgICAgICBzLT5pbnNlcnQgPSAwOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTsK QEAgLTY2NCw3ICsxMDQyLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAg ICBBc3NlcnQoc3RybS0+YXZhaWxfb3V0ID4gMCwgImJ1ZzIiKTsKIAogICAgIGlmIChmbHVzaCAh PSBaX0ZJTklTSCkgcmV0dXJuIFpfT0s7CiAgICAgaWYgKHMtPndyYXAgPD0gMCkgcmV0dXJuIFpf U1RSRUFNX0VORDsKQEAgLTcwMSwxMyArMTA3OCw5IEBACiB7CiAgICAgaW50IHN0YXR1czsKIAot ICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBa X1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBa X1NUUkVBTV9FUlJPUjsKIAogICAgIHN0YXR1cyA9IHN0cm0tPnN0YXRlLT5zdGF0dXM7Ci0gICAg aWYgKHN0YXR1cyAhPSBJTklUX1NUQVRFICYmIHN0YXR1cyAhPSBCVVNZX1NUQVRFICYmCi0gICAg ICAgIHN0YXR1cyAhPSBGSU5JU0hfU1RBVEUpIHsKLSAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJP UjsKLSAgICB9CiAKICAgICAvKiBEZWFsbG9jYXRlIGluIHJldmVyc2Ugb3JkZXIgb2YgYWxsb2Nh dGlvbnM6ICovCiAgICAgVFJZX0ZSRUUoc3RybSwgc3RybS0+c3RhdGUtPnBlbmRpbmdfYnVmKTsK QEAgLTczOCwxOCArMTExMSwxOCBAQAogICAgIHVzaGYgKm92ZXJsYXk7CiAKIAotICAgIGlmIChz b3VyY2UgPT0gWl9OVUxMIHx8IGRlc3QgPT0gWl9OVUxMIHx8IHNvdXJjZS0+c3RhdGUgPT0gWl9O VUxMKSB7CisgICAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHNvdXJjZSkgfHwgZGVzdCA9PSBaX05V TEwpIHsKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIH0KIAogICAgIHNzID0g c291cmNlLT5zdGF0ZTsKIAotICAgICpkZXN0ID0gKnNvdXJjZTsKKyAgICB6bWVtY3B5KCh2b2lk cGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOwogCiAgICAgZHMgPSAo ZGVmbGF0ZV9zdGF0ZSAqKSBaQUxMT0MoZGVzdCwgMSwgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsK ICAgICBpZiAoZHMgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgZGVzdC0+c3Rh dGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKSBkczsKLSAgICAqZHMgPSAqc3M7Cisg ICAgem1lbWNweSgodm9pZHBmKWRzLCAodm9pZHBmKXNzLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkp OwogICAgIGRzLT5zdHJtID0gZGVzdDsKIAogICAgIGRzLT53aW5kb3cgPSAoQnl0ZWYgKikgWkFM TE9DKGRlc3QsIGRzLT53X3NpemUsIDIqc2l6ZW9mKEJ5dGUpKTsKQEAgLTc2NSw4ICsxMTM4LDgg QEAKICAgICB9CiAgICAgLyogZm9sbG93aW5nIHptZW1jcHkgZG8gbm90IHdvcmsgZm9yIDE2LWJp dCBNU0RPUyAqLwogICAgIHptZW1jcHkoZHMtPndpbmRvdywgc3MtPndpbmRvdywgZHMtPndfc2l6 ZSAqIDIgKiBzaXplb2YoQnl0ZSkpOwotICAgIHptZW1jcHkoZHMtPnByZXYsIHNzLT5wcmV2LCBk cy0+d19zaXplICogc2l6ZW9mKFBvcykpOwotICAgIHptZW1jcHkoZHMtPmhlYWQsIHNzLT5oZWFk LCBkcy0+aGFzaF9zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+ cHJldiwgKHZvaWRwZilzcy0+cHJldiwgZHMtPndfc2l6ZSAqIHNpemVvZihQb3MpKTsKKyAgICB6 bWVtY3B5KCh2b2lkcGYpZHMtPmhlYWQsICh2b2lkcGYpc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUg KiBzaXplb2YoUG9zKSk7CiAgICAgem1lbWNweShkcy0+cGVuZGluZ19idWYsIHNzLT5wZW5kaW5n X2J1ZiwgKHVJbnQpZHMtPnBlbmRpbmdfYnVmX3NpemUpOwogCiAgICAgZHMtPnBlbmRpbmdfb3V0 ID0gZHMtPnBlbmRpbmdfYnVmICsgKHNzLT5wZW5kaW5nX291dCAtIHNzLT5wZW5kaW5nX2J1Zik7 CkBAIC03ODgsNyArMTE2MSw3IEBACiAgKiBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+bmV4dF9p biBidWZmZXIgYW5kIGNvcHlpbmcgZnJvbSBpdC4KICAqIChTZWUgYWxzbyBmbHVzaF9wZW5kaW5n KCkpLgogICovCi1sb2NhbCBpbnQgcmVhZF9idWYoc3RybSwgYnVmLCBzaXplKQorbG9jYWwgdW5z aWduZWQgcmVhZF9idWYoc3RybSwgYnVmLCBzaXplKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAg IEJ5dGVmICpidWY7CiAgICAgdW5zaWduZWQgc2l6ZTsKQEAgLTgwMCwxOSArMTE3MywxOSBAQAog CiAgICAgc3RybS0+YXZhaWxfaW4gIC09IGxlbjsKIAorICAgIHptZW1jcHkoYnVmLCBzdHJtLT5u ZXh0X2luLCBsZW4pOwogICAgIGlmIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAxKSB7Ci0gICAgICAg IHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgc3RybS0+bmV4dF9pbiwgbGVuKTsK KyAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CiAg ICAgfQogI2lmZGVmIEdaSVAKICAgICBlbHNlIGlmIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAyKSB7 Ci0gICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHN0cm0tPm5leHRfaW4s IGxlbik7CisgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIGJ1ZiwgbGVu KTsKICAgICB9CiAjZW5kaWYKLSAgICB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTsK ICAgICBzdHJtLT5uZXh0X2luICArPSBsZW47CiAgICAgc3RybS0+dG90YWxfaW4gKz0gbGVuOwog Ci0gICAgcmV0dXJuIChpbnQpbGVuOworICAgIHJldHVybiBsZW47CiB9CiAKIC8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpAQCAtODM1LDEyICsxMjA4LDE1IEBACiAgICAgcy0+c3Ryc3RhcnQgPSAwOwog ICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CiAgICAgcy0+bG9va2FoZWFkID0gMDsKKyAgICBzLT5p bnNlcnQgPSAwOwogICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPnByZXZfbGVuZ3RoID0gTUlOX01B VENILTE7CiAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICBzLT5pbnNfaCA9IDA7Cisj aWZuZGVmIEZBU1RFU1QKICNpZmRlZiBBU01WCiAgICAgbWF0Y2hfaW5pdCgpOyAvKiBpbml0aWFs aXplIHRoZSBhc20gY29kZSAqLwogI2VuZGlmCisjZW5kaWYKIH0KIAogI2lmbmRlZiBGQVNURVNU CkBAIC04NjMsOSArMTIzOSw5IEBACiB7CiAgICAgdW5zaWduZWQgY2hhaW5fbGVuZ3RoID0gcy0+ bWF4X2NoYWluX2xlbmd0aDsvKiBtYXggaGFzaCBjaGFpbiBsZW5ndGggKi8KICAgICByZWdpc3Rl ciBCeXRlZiAqc2NhbiA9IHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmlu ZyAqLwotICAgIHJlZ2lzdGVyIEJ5dGVmICptYXRjaDsgICAgICAgICAgICAgICAgICAgICAgIC8q IG1hdGNoZWQgc3RyaW5nICovCisgICAgcmVnaXN0ZXIgQnl0ZWYgKm1hdGNoOyAgICAgICAgICAg ICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqLwogICAgIHJlZ2lzdGVyIGludCBsZW47ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi8KLSAg ICBpbnQgYmVzdF9sZW4gPSBzLT5wcmV2X2xlbmd0aDsgICAgICAgICAgICAgIC8qIGJlc3QgbWF0 Y2ggbGVuZ3RoIHNvIGZhciAqLworICAgIGludCBiZXN0X2xlbiA9IChpbnQpcy0+cHJldl9sZW5n dGg7ICAgICAgICAgLyogYmVzdCBtYXRjaCBsZW5ndGggc28gZmFyICovCiAgICAgaW50IG5pY2Vf bWF0Y2ggPSBzLT5uaWNlX21hdGNoOyAgICAgICAgICAgICAvKiBzdG9wIGlmIG1hdGNoIGxvbmcg ZW5vdWdoICovCiAgICAgSVBvcyBsaW1pdCA9IHMtPnN0cnN0YXJ0ID4gKElQb3MpTUFYX0RJU1Qo cykgPwogICAgICAgICBzLT5zdHJzdGFydCAtIChJUG9zKU1BWF9ESVNUKHMpIDogTklMOwpAQCAt OTAwLDcgKzEyNzYsNyBAQAogICAgIC8qIERvIG5vdCBsb29rIGZvciBtYXRjaGVzIGJleW9uZCB0 aGUgZW5kIG9mIHRoZSBpbnB1dC4gVGhpcyBpcyBuZWNlc3NhcnkKICAgICAgKiB0byBtYWtlIGRl ZmxhdGUgZGV0ZXJtaW5pc3RpYy4KICAgICAgKi8KLSAgICBpZiAoKHVJbnQpbmljZV9tYXRjaCA+ IHMtPmxvb2thaGVhZCkgbmljZV9tYXRjaCA9IHMtPmxvb2thaGVhZDsKKyAgICBpZiAoKHVJbnQp bmljZV9tYXRjaCA+IHMtPmxvb2thaGVhZCkgbmljZV9tYXRjaCA9IChpbnQpcy0+bG9va2FoZWFk OwogCiAgICAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUtTUlOX0xP T0tBSEVBRCwgIm5lZWQgbG9va2FoZWFkIik7CiAKQEAgLTkwOSw3ICsxMjg1LDEyIEBACiAgICAg ICAgIG1hdGNoID0gcy0+d2luZG93ICsgY3VyX21hdGNoOwogCiAgICAgICAgIC8qIFNraXAgdG8g bmV4dCBtYXRjaCBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGNhbm5vdCBpbmNyZWFzZQotICAgICAgICAg KiBvciBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIGxlc3MgdGhhbiAyOgorICAgICAgICAgKiBvciBp ZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIGxlc3MgdGhhbiAyLiAgTm90ZSB0aGF0IHRoZSBjaGVja3Mg YmVsb3cKKyAgICAgICAgICogZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBvY2N1ciBv Y2Nhc2lvbmFsbHkgZm9yIHBlcmZvcm1hbmNlCisgICAgICAgICAqIHJlYXNvbnMuICBUaGVyZWZv cmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd2lsbCBiZSBhY2Nlc3NlZCwgYW5kCisgICAgICAgICAq IGNvbmRpdGlvbmFsIGp1bXBzIHdpbGwgYmUgbWFkZSB0aGF0IGRlcGVuZCBvbiB0aG9zZSB2YWx1 ZXMuCisgICAgICAgICAqIEhvd2V2ZXIgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaXMgbGltaXRl ZCB0byB0aGUgbG9va2FoZWFkLCBzbworICAgICAgICAgKiB0aGUgb3V0cHV0IG9mIGRlZmxhdGUg aXMgbm90IGFmZmVjdGVkIGJ5IHRoZSB1bmluaXRpYWxpemVkIHZhbHVlcy4KICAgICAgICAgICov CiAjaWYgKGRlZmluZWQoVU5BTElHTkVEX09LKSAmJiBNQVhfTUFUQ0ggPT0gMjU4KQogICAgICAg ICAvKiBUaGlzIGNvZGUgYXNzdW1lcyBzaXplb2YodW5zaWduZWQgc2hvcnQpID09IDIuIERvIG5v dCB1c2UKQEAgLTk5NSwxMiArMTM3NiwxMyBAQAogICAgIHJldHVybiBzLT5sb29rYWhlYWQ7CiB9 CiAjZW5kaWYgLyogQVNNViAqLwotI2VuZGlmIC8qIEZBU1RFU1QgKi8KKworI2Vsc2UgLyogRkFT VEVTVCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE9wdGltaXplZCB2ZXJzaW9uIGZv ciBsZXZlbCA9PSAxIG9yIHN0cmF0ZWd5ID09IFpfUkxFIG9ubHkKKyAqIE9wdGltaXplZCB2ZXJz aW9uIGZvciBGQVNURVNUIG9ubHkKICAqLwotbG9jYWwgdUludCBsb25nZXN0X21hdGNoX2Zhc3Qo cywgY3VyX21hdGNoKQorbG9jYWwgdUludCBsb25nZXN0X21hdGNoKHMsIGN1cl9tYXRjaCkKICAg ICBkZWZsYXRlX3N0YXRlICpzOwogICAgIElQb3MgY3VyX21hdGNoOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogY3VycmVudCBtYXRjaCAqLwogewpAQCAtMTA1Myw3ICsxNDM1LDEzIEBA CiAgICAgcmV0dXJuICh1SW50KWxlbiA8PSBzLT5sb29rYWhlYWQgPyAodUludClsZW4gOiBzLT5s b29rYWhlYWQ7CiB9CiAKLSNpZmRlZiBERUJVRworI2VuZGlmIC8qIEZBU1RFU1QgKi8KKworI2lm ZGVmIFpMSUJfREVCVUcKKworI2RlZmluZSBFUVVBTCAwCisvKiByZXN1bHQgb2YgbWVtY21wIGZv ciBlcXVhbCBzdHJpbmdzICovCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ2hlY2sgdGhh dCB0aGUgbWF0Y2ggYXQgbWF0Y2hfc3RhcnQgaXMgaW5kZWVkIGEgbWF0Y2guCiAgKi8KQEAgLTEw NzksNyArMTQ2Nyw3IEBACiB9CiAjZWxzZQogIyAgZGVmaW5lIGNoZWNrX21hdGNoKHMsIHN0YXJ0 LCBtYXRjaCwgbGVuZ3RoKQotI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyogWkxJQl9ERUJV RyAqLwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEZpbGwgdGhlIHdpbmRvdyB3aGVuIHRo ZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuCkBAIC0xMDk0LDExICsxNDgyLDEyIEBA CiBsb2NhbCB2b2lkIGZpbGxfd2luZG93KHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsKLSAg ICByZWdpc3RlciB1bnNpZ25lZCBuLCBtOwotICAgIHJlZ2lzdGVyIFBvc2YgKnA7CisgICAgdW5z aWduZWQgbjsKICAgICB1bnNpZ25lZCBtb3JlOyAgICAvKiBBbW91bnQgb2YgZnJlZSBzcGFjZSBh dCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cuICovCiAgICAgdUludCB3c2l6ZSA9IHMtPndfc2l6ZTsK IAorICAgIEFzc2VydChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFELCAiYWxyZWFkeSBlbm91 Z2ggbG9va2FoZWFkIik7CisKICAgICBkbyB7CiAgICAgICAgIG1vcmUgPSAodW5zaWduZWQpKHMt PndpbmRvd19zaXplIC0odWxnKXMtPmxvb2thaGVhZCAtKHVsZylzLT5zdHJzdGFydCk7CiAKQEAg LTExMjAsMzggKzE1MDksMTQgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmIChzLT5zdHJzdGFy dCA+PSB3c2l6ZStNQVhfRElTVChzKSkgewogCi0gICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRv dywgcy0+d2luZG93K3dzaXplLCAodW5zaWduZWQpd3NpemUpOworICAgICAgICAgICAgem1lbWNw eShzLT53aW5kb3csIHMtPndpbmRvdyt3c2l6ZSwgKHVuc2lnbmVkKXdzaXplIC0gbW9yZSk7CiAg ICAgICAgICAgICBzLT5tYXRjaF9zdGFydCAtPSB3c2l6ZTsKICAgICAgICAgICAgIHMtPnN0cnN0 YXJ0ICAgIC09IHdzaXplOyAvKiB3ZSBub3cgaGF2ZSBzdHJzdGFydCA+PSBNQVhfRElTVCAqLwog ICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgLT0gKGxvbmcpIHdzaXplOwotCi0gICAgICAgICAg ICAvKiBTbGlkZSB0aGUgaGFzaCB0YWJsZSAoY291bGQgYmUgYXZvaWRlZCB3aXRoIDMyIGJpdCB2 YWx1ZXMKLSAgICAgICAgICAgICAgIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZSkuIFdl IHNsaWRlIGV2ZW4gd2hlbiBsZXZlbCA9PSAwCi0gICAgICAgICAgICAgICB0byBrZWVwIHRoZSBo YXNoIHRhYmxlIGNvbnNpc3RlbnQgaWYgd2Ugc3dpdGNoIGJhY2sgdG8gbGV2ZWwgPiAwCi0gICAg ICAgICAgICAgICBsYXRlci4gKFVzaW5nIGxldmVsIDAgcGVybWFuZW50bHkgaXMgbm90IGFuIG9w dGltYWwgdXNhZ2Ugb2YKLSAgICAgICAgICAgICAgIHpsaWIsIHNvIHdlIGRvbid0IGNhcmUgYWJv dXQgdGhpcyBwYXRob2xvZ2ljYWwgY2FzZS4pCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAg IG4gPSBzLT5oYXNoX3NpemU7Ci0gICAgICAgICAgICBwID0gJnMtPmhlYWRbbl07Ci0gICAgICAg ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgbSA9ICotLXA7Ci0gICAgICAgICAgICAgICAgKnAg PSAoUG9zKShtID49IHdzaXplID8gbS13c2l6ZSA6IE5JTCk7Ci0gICAgICAgICAgICB9IHdoaWxl ICgtLW4pOwotCi0gICAgICAgICAgICBuID0gd3NpemU7Ci0jaWZuZGVmIEZBU1RFU1QKLSAgICAg ICAgICAgIHAgPSAmcy0+cHJldltuXTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg ICBtID0gKi0tcDsKLSAgICAgICAgICAgICAgICAqcCA9IChQb3MpKG0gPj0gd3NpemUgPyBtLXdz aXplIDogTklMKTsKLSAgICAgICAgICAgICAgICAvKiBJZiBuIGlzIG5vdCBvbiBhbnkgaGFzaCBj aGFpbiwgcHJldltuXSBpcyBnYXJiYWdlIGJ1dAotICAgICAgICAgICAgICAgICAqIGl0cyB2YWx1 ZSB3aWxsIG5ldmVyIGJlIHVzZWQuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB9 IHdoaWxlICgtLW4pOwotI2VuZGlmCisgICAgICAgICAgICBzbGlkZV9oYXNoKHMpOwogICAgICAg ICAgICAgbW9yZSArPSB3c2l6ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocy0+c3RybS0+YXZh aWxfaW4gPT0gMCkgcmV0dXJuOworICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPT0gMCkg YnJlYWs7CiAKICAgICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6CiAgICAgICAgICAq ICAgIHN0cnN0YXJ0IDw9IFdTSVpFK01BWF9ESVNULTEgJiYgbG9va2FoZWFkIDw9IE1JTl9MT09L QUhFQUQgLSAxICYmCkBAIC0xMTcwLDk5ICsxNTM1LDI4MyBAQAogICAgICAgICBzLT5sb29rYWhl YWQgKz0gbjsKIAogICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0 IHdlIGhhdmUgc29tZSBpbnB1dDogKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5f TUFUQ0gpIHsKLSAgICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3MtPnN0cnN0YXJ0XTsK LSAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbcy0+c3Ryc3Rh cnQrMV0pOworICAgICAgICBpZiAocy0+bG9va2FoZWFkICsgcy0+aW5zZXJ0ID49IE1JTl9NQVRD SCkgeworICAgICAgICAgICAgdUludCBzdHIgPSBzLT5zdHJzdGFydCAtIHMtPmluc2VydDsKKyAg ICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3N0cl07CisgICAgICAgICAgICBVUERBVEVf SEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIDFdKTsKICNpZiBNSU5fTUFUQ0ggIT0g MwogICAgICAgICAgICAgQ2FsbCBVUERBVEVfSEFTSCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXMK ICNlbmRpZgorICAgICAgICAgICAgd2hpbGUgKHMtPmluc2VydCkgeworICAgICAgICAgICAgICAg IFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsK KyNpZm5kZWYgRkFTVEVTVAorICAgICAgICAgICAgICAgIHMtPnByZXZbc3RyICYgcy0+d19tYXNr XSA9IHMtPmhlYWRbcy0+aW5zX2hdOworI2VuZGlmCisgICAgICAgICAgICAgICAgcy0+aGVhZFtz LT5pbnNfaF0gPSAoUG9zKXN0cjsKKyAgICAgICAgICAgICAgICBzdHIrKzsKKyAgICAgICAgICAg ICAgICBzLT5pbnNlcnQtLTsKKyAgICAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkICsgcy0+ aW5zZXJ0IDwgTUlOX01BVENIKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3Mg dGhhbiBNSU5fTUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsCiAgICAgICAgICAqIGJ1dCB0 aGlzIGlzIG5vdCBpbXBvcnRhbnQgc2luY2Ugb25seSBsaXRlcmFsIGJ5dGVzIHdpbGwgYmUgZW1p dHRlZC4KICAgICAgICAgICovCiAKICAgICB9IHdoaWxlIChzLT5sb29rYWhlYWQgPCBNSU5fTE9P S0FIRUFEICYmIHMtPnN0cm0tPmF2YWlsX2luICE9IDApOworCisgICAgLyogSWYgdGhlIFdJTl9J TklUIGJ5dGVzIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZGF0YSBoYXZlIG5ldmVyIGJl ZW4KKyAgICAgKiB3cml0dGVuLCB0aGVuIHplcm8gdGhvc2UgYnl0ZXMgaW4gb3JkZXIgdG8gYXZv aWQgbWVtb3J5IGNoZWNrIHJlcG9ydHMgb2YKKyAgICAgKiB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6 ZWQgKG9yIHVuaW5pdGlhbGlzZWQgYXMgSnVsaWFuIHdyaXRlcykgYnl0ZXMgYnkKKyAgICAgKiB0 aGUgbG9uZ2VzdCBtYXRjaCByb3V0aW5lcy4gIFVwZGF0ZSB0aGUgaGlnaCB3YXRlciBtYXJrIGZv ciB0aGUgbmV4dAorICAgICAqIHRpbWUgdGhyb3VnaCBoZXJlLiAgV0lOX0lOSVQgaXMgc2V0IHRv IE1BWF9NQVRDSCBzaW5jZSB0aGUgbG9uZ2VzdCBtYXRjaAorICAgICAqIHJvdXRpbmVzIGFsbG93 IHNjYW5uaW5nIHRvIHN0cnN0YXJ0ICsgTUFYX01BVENILCBpZ25vcmluZyBsb29rYWhlYWQuCisg ICAgICovCisgICAgaWYgKHMtPmhpZ2hfd2F0ZXIgPCBzLT53aW5kb3dfc2l6ZSkgeworICAgICAg ICB1bGcgY3VyciA9IHMtPnN0cnN0YXJ0ICsgKHVsZykocy0+bG9va2FoZWFkKTsKKyAgICAgICAg dWxnIGluaXQ7CisKKyAgICAgICAgaWYgKHMtPmhpZ2hfd2F0ZXIgPCBjdXJyKSB7CisgICAgICAg ICAgICAvKiBQcmV2aW91cyBoaWdoIHdhdGVyIG1hcmsgYmVsb3cgY3VycmVudCBkYXRhIC0tIHpl cm8gV0lOX0lOSVQKKyAgICAgICAgICAgICAqIGJ5dGVzIG9yIHVwIHRvIGVuZCBvZiB3aW5kb3cs IHdoaWNoZXZlciBpcyBsZXNzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpbml0ID0g cy0+d2luZG93X3NpemUgLSBjdXJyOworICAgICAgICAgICAgaWYgKGluaXQgPiBXSU5fSU5JVCkK KyAgICAgICAgICAgICAgICBpbml0ID0gV0lOX0lOSVQ7CisgICAgICAgICAgICB6bWVtemVybyhz LT53aW5kb3cgKyBjdXJyLCAodW5zaWduZWQpaW5pdCk7CisgICAgICAgICAgICBzLT5oaWdoX3dh dGVyID0gY3VyciArIGluaXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocy0+aGlnaF93 YXRlciA8ICh1bGcpY3VyciArIFdJTl9JTklUKSB7CisgICAgICAgICAgICAvKiBIaWdoIHdhdGVy IG1hcmsgYXQgb3IgYWJvdmUgY3VycmVudCBkYXRhLCBidXQgYmVsb3cgY3VycmVudCBkYXRhCisg ICAgICAgICAgICAgKiBwbHVzIFdJTl9JTklUIC0tIHplcm8gb3V0IHRvIGN1cnJlbnQgZGF0YSBw bHVzIFdJTl9JTklULCBvciB1cAorICAgICAgICAgICAgICogdG8gZW5kIG9mIHdpbmRvdywgd2hp Y2hldmVyIGlzIGxlc3MuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGluaXQgPSAodWxn KWN1cnIgKyBXSU5fSU5JVCAtIHMtPmhpZ2hfd2F0ZXI7CisgICAgICAgICAgICBpZiAoaW5pdCA+ IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcikKKyAgICAgICAgICAgICAgICBpbml0ID0g cy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyOworICAgICAgICAgICAgem1lbXplcm8ocy0+ d2luZG93ICsgcy0+aGlnaF93YXRlciwgKHVuc2lnbmVkKWluaXQpOworICAgICAgICAgICAgcy0+ aGlnaF93YXRlciArPSBpbml0OworICAgICAgICB9CisgICAgfQorCisgICAgQXNzZXJ0KCh1bGcp cy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELAorICAgICAgICAg ICAibm90IGVub3VnaCByb29tIGZvciBzZWFyY2giKTsKIH0KIAogLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CiAgKiBGbHVzaCB0aGUgY3VycmVudCBibG9jaywgd2l0aCBnaXZlbiBlbmQtb2YtZmlsZSBm bGFnLgogICogSU4gYXNzZXJ0aW9uOiBzdHJzdGFydCBpcyBzZXQgdG8gdGhlIGVuZCBvZiB0aGUg Y3VycmVudCBtYXRjaC4KICAqLwotI2RlZmluZSBGTFVTSF9CTE9DS19PTkxZKHMsIGVvZikgeyBc CisjZGVmaW5lIEZMVVNIX0JMT0NLX09OTFkocywgbGFzdCkgeyBcCiAgICBfdHJfZmx1c2hfYmxv Y2socywgKHMtPmJsb2NrX3N0YXJ0ID49IDBMID8gXAogICAgICAgICAgICAgICAgICAgIChjaGFy ZiAqKSZzLT53aW5kb3dbKHVuc2lnbmVkKXMtPmJsb2NrX3N0YXJ0XSA6IFwKICAgICAgICAgICAg ICAgICAgICAoY2hhcmYgKilaX05VTEwpLCBcCiAgICAgICAgICAgICAgICAgKHVsZykoKGxvbmcp cy0+c3Ryc3RhcnQgLSBzLT5ibG9ja19zdGFydCksIFwKLSAgICAgICAgICAgICAgICAoZW9mKSk7 IFwKKyAgICAgICAgICAgICAgICAobGFzdCkpOyBcCiAgICBzLT5ibG9ja19zdGFydCA9IHMtPnN0 cnN0YXJ0OyBcCiAgICBmbHVzaF9wZW5kaW5nKHMtPnN0cm0pOyBcCiAgICBUcmFjZXYoKHN0ZGVy ciwiW0ZMVVNIXSIpKTsgXAogfQogCiAvKiBTYW1lIGJ1dCBmb3JjZSBwcmVtYXR1cmUgZXhpdCBp ZiBuZWNlc3NhcnkuICovCi0jZGVmaW5lIEZMVVNIX0JMT0NLKHMsIGVvZikgeyBcCi0gICBGTFVT SF9CTE9DS19PTkxZKHMsIGVvZik7IFwKLSAgIGlmIChzLT5zdHJtLT5hdmFpbF9vdXQgPT0gMCkg cmV0dXJuIChlb2YpID8gZmluaXNoX3N0YXJ0ZWQgOiBuZWVkX21vcmU7IFwKKyNkZWZpbmUgRkxV U0hfQkxPQ0socywgbGFzdCkgeyBcCisgICBGTFVTSF9CTE9DS19PTkxZKHMsIGxhc3QpOyBcCisg ICBpZiAocy0+c3RybS0+YXZhaWxfb3V0ID09IDApIHJldHVybiAobGFzdCkgPyBmaW5pc2hfc3Rh cnRlZCA6IG5lZWRfbW9yZTsgXAogfQogCisvKiBNYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGgg aW4gZGVmbGF0ZSBmb3JtYXQgKG5vdCBpbmNsdWRpbmcgaGVhZGVyKS4gKi8KKyNkZWZpbmUgTUFY X1NUT1JFRCA2NTUzNQorCisvKiBNaW5pbXVtIG9mIGEgYW5kIGIuICovCisjZGVmaW5lIE1JTihh LCBiKSAoKGEpID4gKGIpID8gKGIpIDogKGEpKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAq IENvcHkgd2l0aG91dCBjb21wcmVzc2lvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlu cHV0IHN0cmVhbSwgcmV0dXJuCiAgKiB0aGUgY3VycmVudCBibG9jayBzdGF0ZS4KLSAqIFRoaXMg ZnVuY3Rpb24gZG9lcyBub3QgaW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBkaWN0aW9uYXJ5IHNp bmNlCi0gKiB1bmNvbXByZXNzaWJsZSBkYXRhIGlzIHByb2JhYmx5IG5vdCB1c2VmdWwuIFRoaXMg ZnVuY3Rpb24gaXMgdXNlZAotICogb25seSBmb3IgdGhlIGxldmVsPTAgY29tcHJlc3Npb24gb3B0 aW9uLgotICogTk9URTogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb3B0aW1pemVkIHRvIGF2b2lk IGV4dHJhIGNvcHlpbmcgZnJvbQotICogd2luZG93IHRvIHBlbmRpbmdfYnVmLgorICoKKyAqIElu IGNhc2UgZGVmbGF0ZVBhcmFtcygpIGlzIHVzZWQgdG8gbGF0ZXIgc3dpdGNoIHRvIGEgbm9uLXpl cm8gY29tcHJlc3Npb24KKyAqIGxldmVsLCBzLT5tYXRjaGVzIChvdGhlcndpc2UgdW51c2VkIHdo ZW4gc3RvcmluZykga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlcgorICogb2YgaGFzaCB0YWJsZSBz bGlkZXMgdG8gcGVyZm9ybS4gSWYgcy0+bWF0Y2hlcyBpcyAxLCB0aGVuIG9uZSBoYXNoIHRhYmxl CisgKiBzbGlkZSB3aWxsIGJlIGRvbmUgd2hlbiBzd2l0Y2hpbmcuIElmIHMtPm1hdGNoZXMgaXMg MiwgdGhlIG1heGltdW0gdmFsdWUKKyAqIGFsbG93ZWQgaGVyZSwgdGhlbiB0aGUgaGFzaCB0YWJs ZSB3aWxsIGJlIGNsZWFyZWQsIHNpbmNlIHR3byBvciBtb3JlIHNsaWRlcworICogaXMgdGhlIHNh bWUgYXMgYSBjbGVhci4KKyAqCisgKiBkZWZsYXRlX3N0b3JlZCgpIGlzIHdyaXR0ZW4gdG8gbWlu aW1pemUgdGhlIG51bWJlciBvZiB0aW1lcyBhbiBpbnB1dCBieXRlIGlzCisgKiBjb3BpZWQuIEl0 IGlzIG1vc3QgZWZmaWNpZW50IHdpdGggbGFyZ2UgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLCB3 aGljaAorICogbWF4aW1pemVzIHRoZSBvcHBvcnR1bml0ZXMgdG8gaGF2ZSBhIHNpbmdsZSBjb3B5 IGZyb20gbmV4dF9pbiB0byBuZXh0X291dC4KICAqLwogbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0 ZV9zdG9yZWQocywgZmx1c2gpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICBpbnQgZmx1c2g7 CiB7Ci0gICAgLyogU3RvcmVkIGJsb2NrcyBhcmUgbGltaXRlZCB0byAweGZmZmYgYnl0ZXMsIHBl bmRpbmdfYnVmIGlzIGxpbWl0ZWQKLSAgICAgKiB0byBwZW5kaW5nX2J1Zl9zaXplLCBhbmQgZWFj aCBzdG9yZWQgYmxvY2sgaGFzIGEgNSBieXRlIGhlYWRlcjoKKyAgICAvKiBTbWFsbGVzdCB3b3J0 aHkgYmxvY2sgc2l6ZSB3aGVuIG5vdCBmbHVzaGluZyBvciBmaW5pc2hpbmcuIEJ5IGRlZmF1bHQK KyAgICAgKiB0aGlzIGlzIDMySy4gVGhpcyBjYW4gYmUgYXMgc21hbGwgYXMgNTA3IGJ5dGVzIGZv ciBtZW1MZXZlbCA9PSAxLiBGb3IKKyAgICAgKiBsYXJnZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZl cnMsIHRoZSBzdG9yZWQgYmxvY2sgc2l6ZSB3aWxsIGJlIGxhcmdlci4KICAgICAgKi8KLSAgICB1 bGcgbWF4X2Jsb2NrX3NpemUgPSAweGZmZmY7Ci0gICAgdWxnIG1heF9zdGFydDsKKyAgICB1bnNp Z25lZCBtaW5fYmxvY2sgPSBNSU4ocy0+cGVuZGluZ19idWZfc2l6ZSAtIDUsIHMtPndfc2l6ZSk7 CiAKLSAgICBpZiAobWF4X2Jsb2NrX3NpemUgPiBzLT5wZW5kaW5nX2J1Zl9zaXplIC0gNSkgewot ICAgICAgICBtYXhfYmxvY2tfc2l6ZSA9IHMtPnBlbmRpbmdfYnVmX3NpemUgLSA1OworICAgIC8q IENvcHkgYXMgbWFueSBtaW5fYmxvY2sgb3IgbGFyZ2VyIHN0b3JlZCBibG9ja3MgZGlyZWN0bHkg dG8gbmV4dF9vdXQgYXMKKyAgICAgKiBwb3NzaWJsZS4gSWYgZmx1c2hpbmcsIGNvcHkgdGhlIHJl bWFpbmluZyBhdmFpbGFibGUgaW5wdXQgdG8gbmV4dF9vdXQgYXMKKyAgICAgKiBzdG9yZWQgYmxv Y2tzLCBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2UuCisgICAgICovCisgICAgdW5zaWduZWQgbGVu LCBsZWZ0LCBoYXZlLCBsYXN0ID0gMDsKKyAgICB1bnNpZ25lZCB1c2VkID0gcy0+c3RybS0+YXZh aWxfaW47CisgICAgZG8geworICAgICAgICAvKiBTZXQgbGVuIHRvIHRoZSBtYXhpbXVtIHNpemUg YmxvY2sgdGhhdCB3ZSBjYW4gY29weSBkaXJlY3RseSB3aXRoIHRoZQorICAgICAgICAgKiBhdmFp bGFibGUgaW5wdXQgZGF0YSBhbmQgb3V0cHV0IHNwYWNlLiBTZXQgbGVmdCB0byBob3cgbXVjaCBv ZiB0aGF0CisgICAgICAgICAqIHdvdWxkIGJlIGNvcGllZCBmcm9tIHdoYXQncyBsZWZ0IGluIHRo ZSB3aW5kb3cuCisgICAgICAgICAqLworICAgICAgICBsZW4gPSBNQVhfU1RPUkVEOyAgICAgICAv KiBtYXhpbXVtIGRlZmxhdGUgc3RvcmVkIGJsb2NrIGxlbmd0aCAqLworICAgICAgICBoYXZlID0g KHMtPmJpX3ZhbGlkICsgNDIpID4+IDM7ICAgICAgICAgLyogbnVtYmVyIG9mIGhlYWRlciBieXRl cyAqLworICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfb3V0IDwgaGF2ZSkgICAgICAgICAgLyog bmVlZCByb29tIGZvciBoZWFkZXIgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg LyogbWF4aW11bSBzdG9yZWQgYmxvY2sgbGVuZ3RoIHRoYXQgd2lsbCBmaXQgaW4gYXZhaWxfb3V0 OiAqLworICAgICAgICBoYXZlID0gcy0+c3RybS0+YXZhaWxfb3V0IC0gaGF2ZTsKKyAgICAgICAg bGVmdCA9IHMtPnN0cnN0YXJ0IC0gcy0+YmxvY2tfc3RhcnQ7ICAgIC8qIGJ5dGVzIGxlZnQgaW4g d2luZG93ICovCisgICAgICAgIGlmIChsZW4gPiAodWxnKWxlZnQgKyBzLT5zdHJtLT5hdmFpbF9p bikKKyAgICAgICAgICAgIGxlbiA9IGxlZnQgKyBzLT5zdHJtLT5hdmFpbF9pbjsgICAgIC8qIGxp bWl0IGxlbiB0byB0aGUgaW5wdXQgKi8KKyAgICAgICAgaWYgKGxlbiA+IGhhdmUpCisgICAgICAg ICAgICBsZW4gPSBoYXZlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaW1pdCBsZW4gdG8g dGhlIG91dHB1dCAqLworCisgICAgICAgIC8qIElmIHRoZSBzdG9yZWQgYmxvY2sgd291bGQgYmUg bGVzcyB0aGFuIG1pbl9ibG9jayBpbiBsZW5ndGgsIG9yIGlmCisgICAgICAgICAqIHVuYWJsZSB0 byBjb3B5IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGlucHV0IHdoZW4gZmx1c2hpbmcsIHRoZW4gdHJ5 CisgICAgICAgICAqIGNvcHlpbmcgdG8gdGhlIHdpbmRvdyBhbmQgdGhlIHBlbmRpbmcgYnVmZmVy IGluc3RlYWQuIEFsc28gZG9uJ3QKKyAgICAgICAgICogd3JpdGUgYW4gZW1wdHkgYmxvY2sgd2hl biBmbHVzaGluZyAtLSBkZWZsYXRlKCkgZG9lcyB0aGF0LgorICAgICAgICAgKi8KKyAgICAgICAg aWYgKGxlbiA8IG1pbl9ibG9jayAmJiAoKGxlbiA9PSAwICYmIGZsdXNoICE9IFpfRklOSVNIKSB8 fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCA9PSBaX05PX0ZMVVNIIHx8 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAhPSBsZWZ0ICsgcy0+c3RybS0+ YXZhaWxfaW4pKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogTWFrZSBhIGR1bW15 IHN0b3JlZCBibG9jayBpbiBwZW5kaW5nIHRvIGdldCB0aGUgaGVhZGVyIGJ5dGVzLAorICAgICAg ICAgKiBpbmNsdWRpbmcgYW55IHBlbmRpbmcgYml0cy4gVGhpcyBhbHNvIHVwZGF0ZXMgdGhlIGRl YnVnZ2luZyBjb3VudHMuCisgICAgICAgICAqLworICAgICAgICBsYXN0ID0gZmx1c2ggPT0gWl9G SU5JU0ggJiYgbGVuID09IGxlZnQgKyBzLT5zdHJtLT5hdmFpbF9pbiA/IDEgOiAwOworICAgICAg ICBfdHJfc3RvcmVkX2Jsb2NrKHMsIChjaGFyICopMCwgMEwsIGxhc3QpOworCisgICAgICAgIC8q IFJlcGxhY2UgdGhlIGxlbmd0aHMgaW4gdGhlIGR1bW15IHN0b3JlZCBibG9jayB3aXRoIGxlbi4g Ki8KKyAgICAgICAgcy0+cGVuZGluZ19idWZbcy0+cGVuZGluZyAtIDRdID0gbGVuOworICAgICAg ICBzLT5wZW5kaW5nX2J1ZltzLT5wZW5kaW5nIC0gM10gPSBsZW4gPj4gODsKKyAgICAgICAgcy0+ cGVuZGluZ19idWZbcy0+cGVuZGluZyAtIDJdID0gfmxlbjsKKyAgICAgICAgcy0+cGVuZGluZ19i dWZbcy0+cGVuZGluZyAtIDFdID0gfmxlbiA+PiA4OworCisgICAgICAgIC8qIFdyaXRlIHRoZSBz dG9yZWQgYmxvY2sgaGVhZGVyIGJ5dGVzLiAqLworICAgICAgICBmbHVzaF9wZW5kaW5nKHMtPnN0 cm0pOworCisjaWZkZWYgWkxJQl9ERUJVRworICAgICAgICAvKiBVcGRhdGUgZGVidWdnaW5nIGNv dW50cyBmb3IgdGhlIGRhdGEgYWJvdXQgdG8gYmUgY29waWVkLiAqLworICAgICAgICBzLT5jb21w cmVzc2VkX2xlbiArPSBsZW4gPDwgMzsKKyAgICAgICAgcy0+Yml0c19zZW50ICs9IGxlbiA8PCAz OworI2VuZGlmCisKKyAgICAgICAgLyogQ29weSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUg d2luZG93IHRvIG5leHRfb3V0LiAqLworICAgICAgICBpZiAobGVmdCkgeworICAgICAgICAgICAg aWYgKGxlZnQgPiBsZW4pCisgICAgICAgICAgICAgICAgbGVmdCA9IGxlbjsKKyAgICAgICAgICAg IHptZW1jcHkocy0+c3RybS0+bmV4dF9vdXQsIHMtPndpbmRvdyArIHMtPmJsb2NrX3N0YXJ0LCBs ZWZ0KTsKKyAgICAgICAgICAgIHMtPnN0cm0tPm5leHRfb3V0ICs9IGxlZnQ7CisgICAgICAgICAg ICBzLT5zdHJtLT5hdmFpbF9vdXQgLT0gbGVmdDsKKyAgICAgICAgICAgIHMtPnN0cm0tPnRvdGFs X291dCArPSBsZWZ0OworICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgKz0gbGVmdDsKKyAgICAg ICAgICAgIGxlbiAtPSBsZWZ0OworICAgICAgICB9CisKKyAgICAgICAgLyogQ29weSB1bmNvbXBy ZXNzZWQgYnl0ZXMgZGlyZWN0bHkgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0LCB1cGRhdGluZwor ICAgICAgICAgKiB0aGUgY2hlY2sgdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBpZiAobGVu KSB7CisgICAgICAgICAgICByZWFkX2J1ZihzLT5zdHJtLCBzLT5zdHJtLT5uZXh0X291dCwgbGVu KTsKKyAgICAgICAgICAgIHMtPnN0cm0tPm5leHRfb3V0ICs9IGxlbjsKKyAgICAgICAgICAgIHMt PnN0cm0tPmF2YWlsX291dCAtPSBsZW47CisgICAgICAgICAgICBzLT5zdHJtLT50b3RhbF9vdXQg Kz0gbGVuOworICAgICAgICB9CisgICAgfSB3aGlsZSAobGFzdCA9PSAwKTsKKworICAgIC8qIFVw ZGF0ZSB0aGUgc2xpZGluZyB3aW5kb3cgd2l0aCB0aGUgbGFzdCBzLT53X3NpemUgYnl0ZXMgb2Yg dGhlIGNvcGllZAorICAgICAqIGRhdGEsIG9yIGFwcGVuZCBhbGwgb2YgdGhlIGNvcGllZCBkYXRh IHRvIHRoZSBleGlzdGluZyB3aW5kb3cgaWYgbGVzcworICAgICAqIHRoYW4gcy0+d19zaXplIGJ5 dGVzIHdlcmUgY29waWVkLiBBbHNvIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvCisgICAg ICogaW5zZXJ0IGluIHRoZSBoYXNoIHRhYmxlcywgaW4gdGhlIGV2ZW50IHRoYXQgZGVmbGF0ZVBh cmFtcygpIHN3aXRjaGVzIHRvCisgICAgICogYSBub24temVybyBjb21wcmVzc2lvbiBsZXZlbC4K KyAgICAgKi8KKyAgICB1c2VkIC09IHMtPnN0cm0tPmF2YWlsX2luOyAgICAgIC8qIG51bWJlciBv ZiBpbnB1dCBieXRlcyBkaXJlY3RseSBjb3BpZWQgKi8KKyAgICBpZiAodXNlZCkgeworICAgICAg ICAvKiBJZiBhbnkgaW5wdXQgd2FzIHVzZWQsIHRoZW4gbm8gdW51c2VkIGlucHV0IHJlbWFpbnMg aW4gdGhlIHdpbmRvdywKKyAgICAgICAgICogdGhlcmVmb3JlIHMtPmJsb2NrX3N0YXJ0ID09IHMt PnN0cnN0YXJ0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHVzZWQgPj0gcy0+d19zaXplKSB7 ICAgIC8qIHN1cHBsYW50IHRoZSBwcmV2aW91cyBoaXN0b3J5ICovCisgICAgICAgICAgICBzLT5t YXRjaGVzID0gMjsgICAgICAgICAvKiBjbGVhciBoYXNoICovCisgICAgICAgICAgICB6bWVtY3B5 KHMtPndpbmRvdywgcy0+c3RybS0+bmV4dF9pbiAtIHMtPndfc2l6ZSwgcy0+d19zaXplKTsKKyAg ICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gcy0+d19zaXplOworICAgICAgICB9CisgICAgICAgIGVs c2UgeworICAgICAgICAgICAgaWYgKHMtPndpbmRvd19zaXplIC0gcy0+c3Ryc3RhcnQgPD0gdXNl ZCkgeworICAgICAgICAgICAgICAgIC8qIFNsaWRlIHRoZSB3aW5kb3cgZG93bi4gKi8KKyAgICAg ICAgICAgICAgICBzLT5zdHJzdGFydCAtPSBzLT53X3NpemU7CisgICAgICAgICAgICAgICAgem1l bWNweShzLT53aW5kb3csIHMtPndpbmRvdyArIHMtPndfc2l6ZSwgcy0+c3Ryc3RhcnQpOworICAg ICAgICAgICAgICAgIGlmIChzLT5tYXRjaGVzIDwgMikKKyAgICAgICAgICAgICAgICAgICAgcy0+ bWF0Y2hlcysrOyAgIC8qIGFkZCBhIHBlbmRpbmcgc2xpZGVfaGFzaCgpICovCisgICAgICAgICAg ICB9CisgICAgICAgICAgICB6bWVtY3B5KHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0LCBzLT5zdHJt LT5uZXh0X2luIC0gdXNlZCwgdXNlZCk7CisgICAgICAgICAgICBzLT5zdHJzdGFydCArPSB1c2Vk OworICAgICAgICB9CisgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gcy0+c3Ryc3RhcnQ7CisgICAg ICAgIHMtPmluc2VydCArPSBNSU4odXNlZCwgcy0+d19zaXplIC0gcy0+aW5zZXJ0KTsKKyAgICB9 CisgICAgaWYgKHMtPmhpZ2hfd2F0ZXIgPCBzLT5zdHJzdGFydCkKKyAgICAgICAgcy0+aGlnaF93 YXRlciA9IHMtPnN0cnN0YXJ0OworCisgICAgLyogSWYgdGhlIGxhc3QgYmxvY2sgd2FzIHdyaXR0 ZW4gdG8gbmV4dF9vdXQsIHRoZW4gZG9uZS4gKi8KKyAgICBpZiAobGFzdCkKKyAgICAgICAgcmV0 dXJuIGZpbmlzaF9kb25lOworCisgICAgLyogSWYgZmx1c2hpbmcgYW5kIGFsbCBpbnB1dCBoYXMg YmVlbiBjb25zdW1lZCwgdGhlbiBkb25lLiAqLworICAgIGlmIChmbHVzaCAhPSBaX05PX0ZMVVNI ICYmIGZsdXNoICE9IFpfRklOSVNIICYmCisgICAgICAgIHMtPnN0cm0tPmF2YWlsX2luID09IDAg JiYgKGxvbmcpcy0+c3Ryc3RhcnQgPT0gcy0+YmxvY2tfc3RhcnQpCisgICAgICAgIHJldHVybiBi bG9ja19kb25lOworCisgICAgLyogRmlsbCB0aGUgd2luZG93IHdpdGggYW55IHJlbWFpbmluZyBp bnB1dC4gKi8KKyAgICBoYXZlID0gcy0+d2luZG93X3NpemUgLSBzLT5zdHJzdGFydCAtIDE7Cisg ICAgaWYgKHMtPnN0cm0tPmF2YWlsX2luID4gaGF2ZSAmJiBzLT5ibG9ja19zdGFydCA+PSAobG9u ZylzLT53X3NpemUpIHsKKyAgICAgICAgLyogU2xpZGUgdGhlIHdpbmRvdyBkb3duLiAqLworICAg ICAgICBzLT5ibG9ja19zdGFydCAtPSBzLT53X3NpemU7CisgICAgICAgIHMtPnN0cnN0YXJ0IC09 IHMtPndfc2l6ZTsKKyAgICAgICAgem1lbWNweShzLT53aW5kb3csIHMtPndpbmRvdyArIHMtPndf c2l6ZSwgcy0+c3Ryc3RhcnQpOworICAgICAgICBpZiAocy0+bWF0Y2hlcyA8IDIpCisgICAgICAg ICAgICBzLT5tYXRjaGVzKys7ICAgICAgICAgICAvKiBhZGQgYSBwZW5kaW5nIHNsaWRlX2hhc2go KSAqLworICAgICAgICBoYXZlICs9IHMtPndfc2l6ZTsgICAgICAgICAgLyogbW9yZSBzcGFjZSBu b3cgKi8KKyAgICB9CisgICAgaWYgKGhhdmUgPiBzLT5zdHJtLT5hdmFpbF9pbikKKyAgICAgICAg aGF2ZSA9IHMtPnN0cm0tPmF2YWlsX2luOworICAgIGlmIChoYXZlKSB7CisgICAgICAgIHJlYWRf YnVmKHMtPnN0cm0sIHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0LCBoYXZlKTsKKyAgICAgICAgcy0+ c3Ryc3RhcnQgKz0gaGF2ZTsKKyAgICB9CisgICAgaWYgKHMtPmhpZ2hfd2F0ZXIgPCBzLT5zdHJz dGFydCkKKyAgICAgICAgcy0+aGlnaF93YXRlciA9IHMtPnN0cnN0YXJ0OworCisgICAgLyogVGhl cmUgd2FzIG5vdCBlbm91Z2ggYXZhaWxfb3V0IHRvIHdyaXRlIGEgY29tcGxldGUgd29ydGh5IG9y IGZsdXNoZWQKKyAgICAgKiBzdG9yZWQgYmxvY2sgdG8gbmV4dF9vdXQuIFdyaXRlIGEgc3RvcmVk IGJsb2NrIHRvIHBlbmRpbmcgaW5zdGVhZCwgaWYgd2UKKyAgICAgKiBoYXZlIGVub3VnaCBpbnB1 dCBmb3IgYSB3b3J0aHkgYmxvY2ssIG9yIGlmIGZsdXNoaW5nIGFuZCB0aGVyZSBpcyBlbm91Z2gK KyAgICAgKiByb29tIGZvciB0aGUgcmVtYWluaW5nIGlucHV0IGFzIGEgc3RvcmVkIGJsb2NrIGlu IHRoZSBwZW5kaW5nIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBoYXZlID0gKHMtPmJpX3ZhbGlkICsg NDIpID4+IDM7ICAgICAgICAgLyogbnVtYmVyIG9mIGhlYWRlciBieXRlcyAqLworICAgICAgICAv KiBtYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggdGhhdCB3aWxsIGZpdCBpbiBwZW5kaW5nOiAq LworICAgIGhhdmUgPSBNSU4ocy0+cGVuZGluZ19idWZfc2l6ZSAtIGhhdmUsIE1BWF9TVE9SRUQp OworICAgIG1pbl9ibG9jayA9IE1JTihoYXZlLCBzLT53X3NpemUpOworICAgIGxlZnQgPSBzLT5z dHJzdGFydCAtIHMtPmJsb2NrX3N0YXJ0OworICAgIGlmIChsZWZ0ID49IG1pbl9ibG9jayB8fAor ICAgICAgICAoKGxlZnQgfHwgZmx1c2ggPT0gWl9GSU5JU0gpICYmIGZsdXNoICE9IFpfTk9fRkxV U0ggJiYKKyAgICAgICAgIHMtPnN0cm0tPmF2YWlsX2luID09IDAgJiYgbGVmdCA8PSBoYXZlKSkg eworICAgICAgICBsZW4gPSBNSU4obGVmdCwgaGF2ZSk7CisgICAgICAgIGxhc3QgPSBmbHVzaCA9 PSBaX0ZJTklTSCAmJiBzLT5zdHJtLT5hdmFpbF9pbiA9PSAwICYmCisgICAgICAgICAgICAgICBs ZW4gPT0gbGVmdCA/IDEgOiAwOworICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIChjaGFyZiAq KXMtPndpbmRvdyArIHMtPmJsb2NrX3N0YXJ0LCBsZW4sIGxhc3QpOworICAgICAgICBzLT5ibG9j a19zdGFydCArPSBsZW47CisgICAgICAgIGZsdXNoX3BlbmRpbmcocy0+c3RybSk7CiAgICAgfQog Ci0gICAgLyogQ29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gaW5wdXQgdG8gb3V0cHV0OiAq LwotICAgIGZvciAoOzspIHsKLSAgICAgICAgLyogRmlsbCB0aGUgd2luZG93IGFzIG11Y2ggYXMg cG9zc2libGU6ICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPD0gMSkgewotCi0gICAgICAg ICAgICBBc3NlcnQocy0+c3Ryc3RhcnQgPCBzLT53X3NpemUrTUFYX0RJU1QocykgfHwKLSAgICAg ICAgICAgICAgICAgICBzLT5ibG9ja19zdGFydCA+PSAobG9uZylzLT53X3NpemUsICJzbGlkZSB0 b28gbGF0ZSIpOwotCi0gICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKLSAgICAgICAgICAgIGlm IChzLT5sb29rYWhlYWQgPT0gMCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSByZXR1cm4gbmVlZF9t b3JlOwotCi0gICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIGJyZWFrOyAvKiBmbHVz aCB0aGUgY3VycmVudCBibG9jayAqLwotICAgICAgICB9Ci0gICAgICAgIEFzc2VydChzLT5ibG9j a19zdGFydCA+PSAwTCwgImJsb2NrIGdvbmUiKTsKLQotICAgICAgICBzLT5zdHJzdGFydCArPSBz LT5sb29rYWhlYWQ7Ci0gICAgICAgIHMtPmxvb2thaGVhZCA9IDA7Ci0KLSAgICAgICAgLyogRW1p dCBhIHN0b3JlZCBibG9jayBpZiBwZW5kaW5nX2J1ZiB3aWxsIGJlIGZ1bGw6ICovCi0gICAgICAg IG1heF9zdGFydCA9IHMtPmJsb2NrX3N0YXJ0ICsgbWF4X2Jsb2NrX3NpemU7Ci0gICAgICAgIGlm IChzLT5zdHJzdGFydCA9PSAwIHx8ICh1bGcpcy0+c3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7Ci0g ICAgICAgICAgICAvKiBzdHJzdGFydCA9PSAwIGlzIHBvc3NpYmxlIHdoZW4gd3JhcGFyb3VuZCBv biAxNi1iaXQgbWFjaGluZSAqLwotICAgICAgICAgICAgcy0+bG9va2FoZWFkID0gKHVJbnQpKHMt PnN0cnN0YXJ0IC0gbWF4X3N0YXJ0KTsKLSAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gKHVJbnQp bWF4X3N0YXJ0OwotICAgICAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7Ci0gICAgICAgIH0KLSAg ICAgICAgLyogRmx1c2ggaWYgd2UgbWF5IGhhdmUgdG8gc2xpZGUsIG90aGVyd2lzZSBibG9ja19z dGFydCBtYXkgYmVjb21lCi0gICAgICAgICAqIG5lZ2F0aXZlIGFuZCB0aGUgZGF0YSB3aWxsIGJl IGdvbmU6Ci0gICAgICAgICAqLwotICAgICAgICBpZiAocy0+c3Ryc3RhcnQgLSAodUludClzLT5i bG9ja19zdGFydCA+PSBNQVhfRElTVChzKSkgewotICAgICAgICAgICAgRkxVU0hfQkxPQ0socywg MCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5J U0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tf ZG9uZTsKKyAgICAvKiBXZSd2ZSBkb25lIGFsbCB3ZSBjYW4gd2l0aCB0aGUgYXZhaWxhYmxlIGlu cHV0IGFuZCBvdXRwdXQuICovCisgICAgcmV0dXJuIGxhc3QgPyBmaW5pc2hfc3RhcnRlZCA6IG5l ZWRfbW9yZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMjc2LDcgKzE4MjUsNyBA QAogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgaW50IGZsdXNoOwogewotICAgIElQb3MgaGFz aF9oZWFkID0gTklMOyAvKiBoZWFkIG9mIHRoZSBoYXNoIGNoYWluICovCisgICAgSVBvcyBoYXNo X2hlYWQ7ICAgICAgIC8qIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKi8KICAgICBpbnQgYmZsdXNo OyAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovCiAK ICAgICBmb3IgKDs7KSB7CkBAIC0xMjk2LDYgKzE4NDUsNyBAQAogICAgICAgICAvKiBJbnNlcnQg dGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlCiAgICAgICAg ICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNo IGNoYWluOgogICAgICAgICAgKi8KKyAgICAgICAgaGFzaF9oZWFkID0gTklMOwogICAgICAgICBp ZiAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgSU5TRVJUX1NUUklO RyhzLCBzLT5zdHJzdGFydCwgaGFzaF9oZWFkKTsKICAgICAgICAgfQpAQCAtMTMwOCwxOSArMTg1 OCw4IEBACiAgICAgICAgICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3 ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2gKICAgICAgICAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0 aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS4KICAgICAgICAgICAgICAq LwotI2lmZGVmIEZBU1RFU1QKLSAgICAgICAgICAgIGlmICgocy0+c3RyYXRlZ3kgPCBaX0hVRkZN QU5fT05MWSkgfHwKLSAgICAgICAgICAgICAgICAocy0+c3RyYXRlZ3kgPT0gWl9STEUgJiYgcy0+ c3Ryc3RhcnQgLSBoYXNoX2hlYWQgPT0gMSkpIHsKLSAgICAgICAgICAgICAgICBzLT5tYXRjaF9s ZW5ndGggPSBsb25nZXN0X21hdGNoX2Zhc3QgKHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9 Ci0jZWxzZQotICAgICAgICAgICAgaWYgKHMtPnN0cmF0ZWd5IDwgWl9IVUZGTUFOX09OTFkpIHsK LSAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoIChzLCBoYXNo X2hlYWQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzLT5zdHJhdGVneSA9PSBaX1JMRSAmJiBz LT5zdHJzdGFydCAtIGhhc2hfaGVhZCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgcy0+bWF0Y2hf bGVuZ3RoID0gbG9uZ2VzdF9tYXRjaF9mYXN0IChzLCBoYXNoX2hlYWQpOwotICAgICAgICAgICAg fQotI2VuZGlmCi0gICAgICAgICAgICAvKiBsb25nZXN0X21hdGNoKCkgb3IgbG9uZ2VzdF9tYXRj aF9mYXN0KCkgc2V0cyBtYXRjaF9zdGFydCAqLworICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3Ro ID0gbG9uZ2VzdF9tYXRjaCAocywgaGFzaF9oZWFkKTsKKyAgICAgICAgICAgIC8qIGxvbmdlc3Rf bWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovCiAgICAgICAgIH0KICAgICAgICAgaWYgKHMtPm1h dGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgIGNoZWNrX21hdGNoKHMsIHMt PnN0cnN0YXJ0LCBzLT5tYXRjaF9zdGFydCwgcy0+bWF0Y2hfbGVuZ3RoKTsKQEAgLTEzNjgsOCAr MTkwNywxNCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMs IDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAg cmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAg IHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0IDwgTUlOX01BVENILTEgPyBzLT5zdHJzdGFydCA6IE1J Tl9NQVRDSC0xOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9C TE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAo cy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9j a19kb25lOwogfQogCiAjaWZuZGVmIEZBU1RFU1QKQEAgLTEzODIsNyArMTkyNyw3IEBACiAgICAg ZGVmbGF0ZV9zdGF0ZSAqczsKICAgICBpbnQgZmx1c2g7CiB7Ci0gICAgSVBvcyBoYXNoX2hlYWQg PSBOSUw7ICAgIC8qIGhlYWQgb2YgaGFzaCBjaGFpbiAqLworICAgIElQb3MgaGFzaF9oZWFkOyAg ICAgICAgICAvKiBoZWFkIG9mIGhhc2ggY2hhaW4gKi8KICAgICBpbnQgYmZsdXNoOyAgICAgICAg ICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovCiAKICAgICAv KiBQcm9jZXNzIHRoZSBpbnB1dCBibG9jay4gKi8KQEAgLTE0MDMsNiArMTk0OCw3IEBACiAgICAg ICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBp biB0aGUKICAgICAgICAgICogZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQgdG8gdGhlIGhl YWQgb2YgdGhlIGhhc2ggY2hhaW46CiAgICAgICAgICAqLworICAgICAgICBoYXNoX2hlYWQgPSBO SUw7CiAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgICAg ICBJTlNFUlRfU1RSSU5HKHMsIHMtPnN0cnN0YXJ0LCBoYXNoX2hlYWQpOwogICAgICAgICB9CkBA IC0xNDE4LDEyICsxOTY0LDggQEAKICAgICAgICAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChp biBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaAogICAgICAgICAgICAgICogb2Yg dGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLgog ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAocy0+c3RyYXRlZ3kgPCBaX0hVRkZNQU5f T05MWSkgewotICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gg KHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpf UkxFICYmIHMtPnN0cnN0YXJ0IC0gaGFzaF9oZWFkID09IDEpIHsKLSAgICAgICAgICAgICAgICBz LT5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoX2Zhc3QgKHMsIGhhc2hfaGVhZCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICAvKiBsb25nZXN0X21hdGNoKCkgb3IgbG9uZ2VzdF9tYXRj aF9mYXN0KCkgc2V0cyBtYXRjaF9zdGFydCAqLworICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3Ro ID0gbG9uZ2VzdF9tYXRjaCAocywgaGFzaF9oZWFkKTsKKyAgICAgICAgICAgIC8qIGxvbmdlc3Rf bWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovCiAKICAgICAgICAgICAgIGlmIChzLT5tYXRjaF9s ZW5ndGggPD0gNSAmJiAocy0+c3RyYXRlZ3kgPT0gWl9GSUxURVJFRAogI2lmIFRPT19GQVIgPD0g MzI3NjcKQEAgLTE0OTYsNyArMjAzOCwxMjYgQEAKICAgICAgICAgX3RyX3RhbGx5X2xpdChzLCBz LT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0sIGJmbHVzaCk7CiAgICAgICAgIHMtPm1hdGNoX2F2YWls YWJsZSA9IDA7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsK LSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7 CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0cnN0YXJ0 IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZM VVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAg IGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJu IGJsb2NrX2RvbmU7CiB9CiAjZW5kaWYgLyogRkFTVEVTVCAqLworCisvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKyAqIEZvciBaX1JMRSwgc2ltcGx5IGxvb2sgZm9yIHJ1bnMgb2YgYnl0ZXMsIGdlbmVy YXRlIG1hdGNoZXMgb25seSBvZiBkaXN0YW5jZQorICogb25lLiAgRG8gbm90IG1haW50YWluIGEg aGFzaCB0YWJsZS4gIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mCisgKiBk ZWZsYXRlIHN3aXRjaGVzIGF3YXkgZnJvbSBaX1JMRS4pCisgKi8KK2xvY2FsIGJsb2NrX3N0YXRl IGRlZmxhdGVfcmxlKHMsIGZsdXNoKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IGZs dXNoOworeworICAgIGludCBiZmx1c2g7ICAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJs b2NrIG11c3QgYmUgZmx1c2hlZCAqLworICAgIHVJbnQgcHJldjsgICAgICAgICAgICAgIC8qIGJ5 dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovCisgICAgQnl0ZWYgKnNjYW4sICpzdHJlbmQ7 ICAgLyogc2NhbiBnb2VzIHVwIHRvIHN0cmVuZCBmb3IgbGVuZ3RoIG9mIHJ1biAqLworCisgICAg Zm9yICg7OykgeworICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91 Z2ggbG9va2FoZWFkLCBleGNlcHQKKyAgICAgICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQg ZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXMKKyAgICAgICAgICogZm9yIHRoZSBsb25nZXN0 IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgorICAgICAgICAgKi8KKyAgICAg ICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHsKKyAgICAgICAgICAgIGZpbGxfd2lu ZG93KHMpOworICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1 c2ggPT0gWl9OT19GTFVTSCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZWVkX21vcmU7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIGJyZWFrOyAv KiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqLworICAgICAgICB9CisKKyAgICAgICAgLyogU2Vl IGhvdyBtYW55IHRpbWVzIHRoZSBwcmV2aW91cyBieXRlIHJlcGVhdHMgKi8KKyAgICAgICAgcy0+ bWF0Y2hfbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gg JiYgcy0+c3Ryc3RhcnQgPiAwKSB7CisgICAgICAgICAgICBzY2FuID0gcy0+d2luZG93ICsgcy0+ c3Ryc3RhcnQgLSAxOworICAgICAgICAgICAgcHJldiA9ICpzY2FuOworICAgICAgICAgICAgaWYg KHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2FuKSB7 CisgICAgICAgICAgICAgICAgc3RyZW5kID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBNQVhf TUFUQ0g7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHBy ZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYKKyAgICAgICAgICAgICAgICAgICAg ICAgICBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2FuICYmCisgICAgICAgICAgICAg ICAgICAgICAgICAgcHJldiA9PSAqKytzY2FuICYmIHByZXYgPT0gKisrc2NhbiAmJgorICAgICAg ICAgICAgICAgICAgICAgICAgIHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKKyAgICAgICAgICAgICAg ICBzLT5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAodUludCkoc3RyZW5kIC0gc2Nhbik7Cisg ICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoX2xlbmd0aCA+IHMtPmxvb2thaGVhZCkKKyAgICAg ICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+bG9va2FoZWFkOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5k b3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOworICAgICAgICB9CisKKyAgICAgICAgLyogRW1pdCBt YXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJh bCAqLworICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgeworICAgICAg ICAgICAgY2hlY2tfbWF0Y2gocywgcy0+c3Ryc3RhcnQsIHMtPnN0cnN0YXJ0IC0gMSwgcy0+bWF0 Y2hfbGVuZ3RoKTsKKworICAgICAgICAgICAgX3RyX3RhbGx5X2Rpc3QocywgMSwgcy0+bWF0Y2hf bGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOworCisgICAgICAgICAgICBzLT5sb29rYWhlYWQg LT0gcy0+bWF0Y2hfbGVuZ3RoOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgKz0gcy0+bWF0Y2hf bGVuZ3RoOworICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gMDsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi8KKyAg ICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7 CisgICAgICAgICAgICBfdHJfdGFsbHlfbGl0IChzLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdLCBi Zmx1c2gpOworICAgICAgICAgICAgcy0+bG9va2FoZWFkLS07CisgICAgICAgICAgICBzLT5zdHJz dGFydCsrOworICAgICAgICB9CisgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDAp OworICAgIH0KKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkg eworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25l OworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDAp OworICAgIHJldHVybiBibG9ja19kb25lOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAq IEZvciBaX0hVRkZNQU5fT05MWSwgZG8gbm90IGxvb2sgZm9yIG1hdGNoZXMuICBEbyBub3QgbWFp bnRhaW4gYSBoYXNoIHRhYmxlLgorICogKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBy dW4gb2YgZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gSHVmZm1hbi4pCisgKi8KK2xvY2FsIGJs b2NrX3N0YXRlIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkKKyAgICBkZWZsYXRlX3N0YXRlICpzOwor ICAgIGludCBmbHVzaDsKK3sKKyAgICBpbnQgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYg Y3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KKworICAgIGZvciAoOzspIHsKKyAgICAg ICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovCisgICAg ICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgeworICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7 CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIHsKKyAgICAgICAgICAgICAgICBp ZiAoZmx1c2ggPT0gWl9OT19GTFVTSCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRf bW9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAvKiBmbHVzaCB0aGUgY3VycmVudCBi bG9jayAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogT3V0cHV0IGEg bGl0ZXJhbCBieXRlICovCisgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IDA7CisgICAgICAgIFRy YWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7CisgICAgICAgIF90 cl90YWxseV9saXQgKHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0sIGJmbHVzaCk7CisgICAgICAg IHMtPmxvb2thaGVhZC0tOworICAgICAgICBzLT5zdHJzdGFydCsrOworICAgICAgICBpZiAoYmZs dXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICB9CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBp ZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAg ICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAg ICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKK30KZGlmZiAt ciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvZGVmbGF0 ZS5oCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvZGVmbGF0ZS5oCVdlZCBNYXkgMjcgMDA6MDk6 NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2RlZmxhdGUuaAlXZWQgTWF5 IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmggLS0g aW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEpl YW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IEplYW4tbG91cCBHYWls bHkKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJp Z2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC04LDcgKzgsNyBAQAogICAgc3ViamVjdCB0 byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgogICovCiAKLS8q IEAoIykgJElkOiBkZWZsYXRlLmgsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6NDAgZ2lsZXMg RXhwICQgKi8KKy8qIEAoIykgJElkJCAqLwogCiAjaWZuZGVmIERFRkxBVEVfSAogI2RlZmluZSBE RUZMQVRFX0gKQEAgLTQ4LDkgKzQ4LDE5IEBACiAjZGVmaW5lIE1BWF9CSVRTIDE1CiAvKiBBbGwg Y29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi8KIAotI2RlZmluZSBJTklUX1NU QVRFICAgIDQyCi0jZGVmaW5lIEJVU1lfU1RBVEUgICAxMTMKLSNkZWZpbmUgRklOSVNIX1NUQVRF IDY2NgorI2RlZmluZSBCdWZfc2l6ZSAxNgorLyogc2l6ZSBvZiBiaXQgYnVmZmVyIGluIGJpX2J1 ZiAqLworCisjZGVmaW5lIElOSVRfU1RBVEUgICAgNDIgICAgLyogemxpYiBoZWFkZXIgLT4gQlVT WV9TVEFURSAqLworI2lmZGVmIEdaSVAKKyMgIGRlZmluZSBHWklQX1NUQVRFICA1NyAgICAvKiBn emlwIGhlYWRlciAtPiBCVVNZX1NUQVRFIHwgRVhUUkFfU1RBVEUgKi8KKyNlbmRpZgorI2RlZmlu ZSBFWFRSQV9TVEFURSAgIDY5ICAgIC8qIGd6aXAgZXh0cmEgYmxvY2sgLT4gTkFNRV9TVEFURSAq LworI2RlZmluZSBOQU1FX1NUQVRFICAgIDczICAgIC8qIGd6aXAgZmlsZSBuYW1lIC0+IENPTU1F TlRfU1RBVEUgKi8KKyNkZWZpbmUgQ09NTUVOVF9TVEFURSA5MSAgICAvKiBnemlwIGNvbW1lbnQg LT4gSENSQ19TVEFURSAqLworI2RlZmluZSBIQ1JDX1NUQVRFICAgMTAzICAgIC8qIGd6aXAgaGVh ZGVyIENSQyAtPiBCVVNZX1NUQVRFICovCisjZGVmaW5lIEJVU1lfU1RBVEUgICAxMTMgICAgLyog ZGVmbGF0ZSAtPiBGSU5JU0hfU1RBVEUgKi8KKyNkZWZpbmUgRklOSVNIX1NUQVRFIDY2NiAgICAv KiBzdHJlYW0gY29tcGxldGUgKi8KIC8qIFN0cmVhbSBzdGF0dXMgKi8KIAogCkBAIC03Niw3ICs4 Niw3IEBACiB0eXBlZGVmIHN0cnVjdCB0cmVlX2Rlc2NfcyB7CiAgICAgY3RfZGF0YSAqZHluX3Ry ZWU7ICAgICAgICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovCiAgICAgaW50ICAgICBtYXhfY29k ZTsgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi8K LSAgICBzdGF0aWNfdHJlZV9kZXNjICpzdGF0X2Rlc2M7IC8qIHRoZSBjb3JyZXNwb25kaW5nIHN0 YXRpYyB0cmVlICovCisgICAgY29uc3Qgc3RhdGljX3RyZWVfZGVzYyAqc3RhdF9kZXNjOyAgLyog dGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHRyZWUgKi8KIH0gRkFSIHRyZWVfZGVzYzsKIAogdHlw ZWRlZiB1c2ggUG9zOwpAQCAtOTMsOSArMTAzLDExIEBACiAgICAgQnl0ZWYgKnBlbmRpbmdfYnVm OyAgLyogb3V0cHV0IHN0aWxsIHBlbmRpbmcgKi8KICAgICB1bGcgICBwZW5kaW5nX2J1Zl9zaXpl OyAvKiBzaXplIG9mIHBlbmRpbmdfYnVmICovCiAgICAgQnl0ZWYgKnBlbmRpbmdfb3V0OyAgLyog bmV4dCBwZW5kaW5nIGJ5dGUgdG8gb3V0cHV0IHRvIHRoZSBzdHJlYW0gKi8KLSAgICBpbnQgICBw ZW5kaW5nOyAgICAgICAvKiBuYiBvZiBieXRlcyBpbiB0aGUgcGVuZGluZyBidWZmZXIgKi8KKyAg ICB1bGcgICBwZW5kaW5nOyAgICAgICAvKiBuYiBvZiBieXRlcyBpbiB0aGUgcGVuZGluZyBidWZm ZXIgKi8KICAgICBpbnQgICB3cmFwOyAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBi aXQgMSB0cnVlIGZvciBnemlwICovCi0gICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogU1RPUkVE IChmb3IgemlwIG9ubHkpIG9yIERFRkxBVEVEICovCisgICAgZ3pfaGVhZGVycCAgZ3poZWFkOyAg LyogZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gdG8gd3JpdGUgKi8KKyAgICB1bGcgICBnemluZGV4 OyAgICAgICAvKiB3aGVyZSBpbiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCAqLworICAgIEJ5dGUg IG1ldGhvZDsgICAgICAgIC8qIGNhbiBvbmx5IGJlIERFRkxBVEVEICovCiAgICAgaW50ICAgbGFz dF9mbHVzaDsgICAgLyogdmFsdWUgb2YgZmx1c2ggcGFyYW0gZm9yIHByZXZpb3VzIGRlZmxhdGUg Y2FsbCAqLwogCiAgICAgICAgICAgICAgICAgLyogdXNlZCBieSBkZWZsYXRlLmM6ICovCkBAIC0x ODIsNyArMTk0LDcgQEAKICAgICBpbnQgbmljZV9tYXRjaDsgLyogU3RvcCBzZWFyY2hpbmcgd2hl biBjdXJyZW50IG1hdGNoIGV4Y2VlZHMgdGhpcyAqLwogCiAgICAgICAgICAgICAgICAgLyogdXNl ZCBieSB0cmVlcy5jOiAqLwotICAgIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93 IHRvIHN1cHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworICAgIC8qIERpZG4ndCB1c2UgY3RfZGF0 YSB0eXBlZGVmIGJlbG93IHRvIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi8KICAgICBzdHJ1 Y3QgY3RfZGF0YV9zIGR5bl9sdHJlZVtIRUFQX1NJWkVdOyAgIC8qIGxpdGVyYWwgYW5kIGxlbmd0 aCB0cmVlICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAv KiBkaXN0YW5jZSB0cmVlICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBibF90cmVlWzIqQkxfQ09E RVMrMV07ICAvKiBIdWZmbWFuIHRyZWUgZm9yIGJpdCBsZW5ndGhzICovCkBAIC0yMzgsOSArMjUw LDkgQEAKICAgICB1bGcgb3B0X2xlbjsgICAgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBi bG9jayB3aXRoIG9wdGltYWwgdHJlZXMgKi8KICAgICB1bGcgc3RhdGljX2xlbjsgICAgIC8qIGJp dCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIHN0YXRpYyB0cmVlcyAqLwogICAgIHVJbnQg bWF0Y2hlczsgICAgICAgLyogbnVtYmVyIG9mIHN0cmluZyBtYXRjaGVzIGluIGN1cnJlbnQgYmxv Y2sgKi8KLSAgICBpbnQgbGFzdF9lb2JfbGVuOyAgIC8qIGJpdCBsZW5ndGggb2YgRU9CIGNvZGUg Zm9yIGxhc3QgYmxvY2sgKi8KKyAgICB1SW50IGluc2VydDsgICAgICAgIC8qIGJ5dGVzIGF0IGVu ZCBvZiB3aW5kb3cgbGVmdCB0byBpbnNlcnQgKi8KIAotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJ Ql9ERUJVRwogICAgIHVsZyBjb21wcmVzc2VkX2xlbjsgLyogdG90YWwgYml0IGxlbmd0aCBvZiBj b21wcmVzc2VkIGZpbGUgbW9kIDJeMzIgKi8KICAgICB1bGcgYml0c19zZW50OyAgICAgIC8qIGJp dCBsZW5ndGggb2YgY29tcHJlc3NlZCBkYXRhIHNlbnQgbW9kIDJeMzIgKi8KICNlbmRpZgpAQCAt MjU0LDEyICsyNjYsMTkgQEAKICAgICAgKiBhcmUgYWx3YXlzIHplcm8uCiAgICAgICovCiAKKyAg ICB1bGcgaGlnaF93YXRlcjsKKyAgICAvKiBIaWdoIHdhdGVyIG1hcmsgb2Zmc2V0IGluIHdpbmRv dyBmb3IgaW5pdGlhbGl6ZWQgYnl0ZXMgLS0gYnl0ZXMgYWJvdmUKKyAgICAgKiB0aGlzIGFyZSBz ZXQgdG8gemVybyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgd2FybmluZ3Mgd2hlbgor ICAgICAqIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgYWNjZXNzIGJ5dGVzIHBhc3QgdGhlIGlucHV0 LiAgVGhpcyBpcyB0aGVuCisgICAgICogdXBkYXRlZCB0byB0aGUgbmV3IGhpZ2ggd2F0ZXIgbWFy ay4KKyAgICAgKi8KKwogfSBGQVIgZGVmbGF0ZV9zdGF0ZTsKIAogLyogT3V0cHV0IGEgYnl0ZSBv biB0aGUgc3RyZWFtLgogICogSU4gYXNzZXJ0aW9uOiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiBw ZW5kaW5nX2J1Zi4KICAqLwotI2RlZmluZSBwdXRfYnl0ZShzLCBjKSB7cy0+cGVuZGluZ19idWZb cy0+cGVuZGluZysrXSA9IChjKTt9CisjZGVmaW5lIHB1dF9ieXRlKHMsIGMpIHtzLT5wZW5kaW5n X2J1ZltzLT5wZW5kaW5nKytdID0gKEJ5dGVmKShjKTt9CiAKIAogI2RlZmluZSBNSU5fTE9PS0FI RUFEIChNQVhfTUFUQ0grTUlOX01BVENIKzEpCkBAIC0yNzIsMTQgKzI5MSwxOSBAQAogICogZGlz dGFuY2VzIGFyZSBsaW1pdGVkIHRvIE1BWF9ESVNUIGluc3RlYWQgb2YgV1NJWkUuCiAgKi8KIAor I2RlZmluZSBXSU5fSU5JVCBNQVhfTUFUQ0gKKy8qIE51bWJlciBvZiBieXRlcyBhZnRlciBlbmQg b2YgZGF0YSBpbiB3aW5kb3cgdG8gaW5pdGlhbGl6ZSBpbiBvcmRlciB0byBhdm9pZAorICAgbWVt b3J5IGNoZWNrZXIgZXJyb3JzIGZyb20gbG9uZ2VzdCBtYXRjaCByb3V0aW5lcyAqLworCiAgICAg ICAgIC8qIGluIHRyZWVzLmMgKi8KLXZvaWQgX3RyX2luaXQgICAgICAgICBPRigoZGVmbGF0ZV9z dGF0ZSAqcykpOwotaW50ICBfdHJfdGFsbHkgICAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCB1 bnNpZ25lZCBkaXN0LCB1bnNpZ25lZCBsYykpOwotdm9pZCBfdHJfZmx1c2hfYmxvY2sgIE9GKChk ZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLCB1bGcgc3RvcmVkX2xlbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGVvZikpOwotdm9pZCBfdHJfYWxpZ24gICAgICAgIE9GKChkZWZs YXRlX3N0YXRlICpzKSk7Ci12b2lkIF90cl9zdG9yZWRfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUg KnMsIGNoYXJmICpidWYsIHVsZyBzdG9yZWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZW9mKSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2luaXQgT0YoKGRlZmxhdGVfc3Rh dGUgKnMpKTsKK2ludCBaTElCX0lOVEVSTkFMIF90cl90YWxseSBPRigoZGVmbGF0ZV9zdGF0ZSAq cywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJf Zmx1c2hfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCisgICAgICAgICAg ICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKK3ZvaWQgWkxJQl9JTlRF Uk5BTCBfdHJfZmx1c2hfYml0cyBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwordm9pZCBaTElCX0lO VEVSTkFMIF90cl9hbGlnbiBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwordm9pZCBaTElCX0lOVEVS TkFMIF90cl9zdG9yZWRfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCisg ICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKIAogI2Rl ZmluZSBkX2NvZGUoZGlzdCkgXAogICAgKChkaXN0KSA8IDI1NiA/IF9kaXN0X2NvZGVbZGlzdF0g OiBfZGlzdF9jb2RlWzI1NisoKGRpc3QpPj43KV0pCkBAIC0yODgsMTUgKzMxMiwxNSBAQAogICog dXNlZC4KICAqLwogCi0jaWZuZGVmIERFQlVHCisjaWZuZGVmIFpMSUJfREVCVUcKIC8qIElubGlu ZSB2ZXJzaW9ucyBvZiBfdHJfdGFsbHkgZm9yIHNwZWVkOiAqLwogCiAjaWYgZGVmaW5lZChHRU5f VFJFRVNfSCkgfHwgIWRlZmluZWQoU1REQykKLSAgZXh0ZXJuIHVjaCBfbGVuZ3RoX2NvZGVbXTsK LSAgZXh0ZXJuIHVjaCBfZGlzdF9jb2RlW107CisgIGV4dGVybiB1Y2ggWkxJQl9JTlRFUk5BTCBf bGVuZ3RoX2NvZGVbXTsKKyAgZXh0ZXJuIHVjaCBaTElCX0lOVEVSTkFMIF9kaXN0X2NvZGVbXTsK ICNlbHNlCi0gIGV4dGVybiBjb25zdCB1Y2ggX2xlbmd0aF9jb2RlW107Ci0gIGV4dGVybiBjb25z dCB1Y2ggX2Rpc3RfY29kZVtdOworICBleHRlcm4gY29uc3QgdWNoIFpMSUJfSU5URVJOQUwgX2xl bmd0aF9jb2RlW107CisgIGV4dGVybiBjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfZGlzdF9jb2Rl W107CiAjZW5kaWYKIAogIyBkZWZpbmUgX3RyX3RhbGx5X2xpdChzLCBjLCBmbHVzaCkgXApAQCAt MzA3LDggKzMzMSw4IEBACiAgICAgZmx1c2ggPSAocy0+bGFzdF9saXQgPT0gcy0+bGl0X2J1ZnNp emUtMSk7IFwKICAgIH0KICMgZGVmaW5lIF90cl90YWxseV9kaXN0KHMsIGRpc3RhbmNlLCBsZW5n dGgsIGZsdXNoKSBcCi0gIHsgdWNoIGxlbiA9IChsZW5ndGgpOyBcCi0gICAgdXNoIGRpc3QgPSAo ZGlzdGFuY2UpOyBcCisgIHsgdWNoIGxlbiA9ICh1Y2gpKGxlbmd0aCk7IFwKKyAgICB1c2ggZGlz dCA9ICh1c2gpKGRpc3RhbmNlKTsgXAogICAgIHMtPmRfYnVmW3MtPmxhc3RfbGl0XSA9IGRpc3Q7 IFwKICAgICBzLT5sX2J1ZltzLT5sYXN0X2xpdCsrXSA9IGxlbjsgXAogICAgIGRpc3QtLTsgXApk aWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi9l eGFtcGxlLmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9leGFtcGxlLmMJV2VkIE1heSAyNyAw MDowOTo0NiAyMDIwICswMjAwCisrKyAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcw ICswMDAwCkBAIC0xLDU2NyArMCwwIEBACi0vKiBleGFtcGxlLmMgLS0gdXNhZ2UgZXhhbXBsZSBv ZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAw MyBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFu ZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICovCi0KLS8qIEAoIykgJElk OiBleGFtcGxlLmMsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6MzcgZ2lsZXMgRXhwICQgKi8K LQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiemxpYi5oIgotCi0jaWZkZWYgU1REQwot IyAgaW5jbHVkZSA8c3RyaW5nLmg+Ci0jICBpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbHNlCi0gICBl eHRlcm4gdm9pZCBleGl0ICBPRigoaW50KSk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoVk1TKSB8 fCBkZWZpbmVkKFJJU0NPUykKLSMgIGRlZmluZSBURVNURklMRSAiZm9vLWd6IgotI2Vsc2UKLSMg IGRlZmluZSBURVNURklMRSAiZm9vLmd6IgotI2VuZGlmCi0KLSNkZWZpbmUgQ0hFQ0tfRVJSKGVy ciwgbXNnKSB7IFwKLSAgICBpZiAoZXJyICE9IFpfT0spIHsgXAotICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIiVzIGVycm9yOiAlZFxuIiwgbXNnLCBlcnIpOyBcCi0gICAgICAgIGV4aXQoMSk7IFwK LSAgICB9IFwKLX0KLQotY29uc3QgY2hhciBoZWxsb1tdID0gImhlbGxvLCBoZWxsbyEiOwotLyog ImhlbGxvIHdvcmxkIiB3b3VsZCBiZSBtb3JlIHN0YW5kYXJkLCBidXQgdGhlIHJlcGVhdGVkICJo ZWxsbyIKLSAqIHN0cmVzc2VzIHRoZSBjb21wcmVzc2lvbiBjb2RlIGJldHRlciwgc29ycnkuLi4K LSAqLwotCi1jb25zdCBjaGFyIGRpY3Rpb25hcnlbXSA9ICJoZWxsbyI7Ci11TG9uZyBkaWN0SWQ7 IC8qIEFkbGVyMzIgdmFsdWUgb2YgdGhlIGRpY3Rpb25hcnkgKi8KLQotdm9pZCB0ZXN0X2NvbXBy ZXNzICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Ci12b2lkIHRl c3RfZ3ppbyAgICAgICAgICBPRigoY29uc3QgY2hhciAqZm5hbWUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0 X2RlZmxhdGUgICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbikpOwotdm9pZCB0 ZXN0X2luZmxhdGUgICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7 Ci12b2lkIHRlc3RfbGFyZ2VfZGVmbGF0ZSBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVu LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29t cHJMZW4pKTsKLXZvaWQgdGVzdF9sYXJnZV9pbmZsYXRlIE9GKChCeXRlICpjb21wciwgdUxvbmcg Y29tcHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxv bmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0X2ZsdXNoICAgICAgICAgT0YoKEJ5dGUgKmNvbXBy LCB1TG9uZyAqY29tcHJMZW4pKTsKLXZvaWQgdGVzdF9zeW5jICAgICAgICAgIE9GKChCeXRlICpj b21wciwgdUxvbmcgY29tcHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAq dW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0X2RpY3RfZGVmbGF0ZSAgT0Yo KEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbikpOwotdm9pZCB0ZXN0X2RpY3RfaW5mbGF0ZSAg T0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Ci1pbnQgIG1haW4gICAgICAg ICAgICAgICBPRigoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkpOwotCi0vKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSAqIFRlc3QgY29tcHJlc3MoKSBhbmQgdW5jb21wcmVzcygpCi0gKi8KLXZvaWQgdGVz dF9jb21wcmVzcyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCi0gICAgQnl0 ZSAqY29tcHIsICp1bmNvbXByOwotICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOwotewot ICAgIGludCBlcnI7Ci0gICAgdUxvbmcgbGVuID0gKHVMb25nKXN0cmxlbihoZWxsbykrMTsKLQot ICAgIGVyciA9IGNvbXByZXNzKGNvbXByLCAmY29tcHJMZW4sIChjb25zdCBCeXRlZiopaGVsbG8s IGxlbik7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImNvbXByZXNzIik7Ci0KLSAgICBzdHJjcHkoKGNo YXIqKXVuY29tcHIsICJnYXJiYWdlIik7Ci0KLSAgICBlcnIgPSB1bmNvbXByZXNzKHVuY29tcHIs ICZ1bmNvbXByTGVuLCBjb21wciwgY29tcHJMZW4pOwotICAgIENIRUNLX0VSUihlcnIsICJ1bmNv bXByZXNzIik7Ci0KLSAgICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBoZWxsbykpIHsKLSAg ICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgdW5jb21wcmVzc1xuIik7Ci0gICAgICAgIGV4aXQo MSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJ1bmNvbXByZXNzKCk6ICVzXG4iLCAo Y2hhciAqKXVuY29tcHIpOwotICAgIH0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBU ZXN0IHJlYWQvd3JpdGUgb2YgLmd6IGZpbGVzCi0gKi8KLXZvaWQgdGVzdF9nemlvKGZuYW1lLCB1 bmNvbXByLCB1bmNvbXByTGVuKQotICAgIGNvbnN0IGNoYXIgKmZuYW1lOyAvKiBjb21wcmVzc2Vk IGZpbGUgbmFtZSAqLwotICAgIEJ5dGUgKnVuY29tcHI7Ci0gICAgdUxvbmcgdW5jb21wckxlbjsK LXsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgZnByaW50ZihzdGRlcnIsICJOT19HWkNPTVBS RVNTIC0tIGd6KiBmdW5jdGlvbnMgY2Fubm90IGNvbXByZXNzXG4iKTsKLSNlbHNlCi0gICAgaW50 IGVycjsKLSAgICBpbnQgbGVuID0gKGludClzdHJsZW4oaGVsbG8pKzE7Ci0gICAgZ3pGaWxlIGZp bGU7Ci0gICAgel9vZmZfdCBwb3M7Ci0KLSAgICBmaWxlID0gZ3pvcGVuKGZuYW1lLCAid2IiKTsK LSAgICBpZiAoZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pvcGVu IGVycm9yXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZ3pwdXRjKGZpbGUsICdo Jyk7Ci0gICAgaWYgKGd6cHV0cyhmaWxlLCAiZWxsbyIpICE9IDQpIHsKLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICJnenB1dHMgZXJyOiAlc1xuIiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7Ci0gICAg ICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIGlmIChnenByaW50ZihmaWxlLCAiLCAlcyEiLCAiaGVs bG8iKSAhPSA4KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pwcmludGYgZXJyOiAlc1xu IiwgZ3plcnJvcihmaWxlLCAmZXJyKSk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIGd6 c2VlayhmaWxlLCAxTCwgU0VFS19DVVIpOyAvKiBhZGQgb25lIHplcm8gYnl0ZSAqLwotICAgIGd6 Y2xvc2UoZmlsZSk7Ci0KLSAgICBmaWxlID0gZ3pvcGVuKGZuYW1lLCAicmIiKTsKLSAgICBpZiAo ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pvcGVuIGVycm9yXG4i KTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAi Z2FyYmFnZSIpOwotCi0gICAgaWYgKGd6cmVhZChmaWxlLCB1bmNvbXByLCAodW5zaWduZWQpdW5j b21wckxlbikgIT0gbGVuKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3pyZWFkIGVycjog JXNcbiIsIGd6ZXJyb3IoZmlsZSwgJmVycikpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAg ICBpZiAoc3RyY21wKChjaGFyKil1bmNvbXByLCBoZWxsbykpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJiYWQgZ3pyZWFkOiAlc1xuIiwgKGNoYXIqKXVuY29tcHIpOwotICAgICAgICBleGl0 KDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigiZ3pyZWFkKCk6ICVzXG4iLCAoY2hh ciopdW5jb21wcik7Ci0gICAgfQotCi0gICAgcG9zID0gZ3pzZWVrKGZpbGUsIC04TCwgU0VFS19D VVIpOwotICAgIGlmIChwb3MgIT0gNiB8fCBnenRlbGwoZmlsZSkgIT0gcG9zKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiZ3pzZWVrIGVycm9yLCBwb3M9JWxkLCBnenRlbGw9JWxkXG4iLAot ICAgICAgICAgICAgICAgIChsb25nKXBvcywgKGxvbmcpZ3p0ZWxsKGZpbGUpKTsKLSAgICAgICAg ZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoZ3pnZXRjKGZpbGUpICE9ICcgJykgewotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImd6Z2V0YyBlcnJvclxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0g ICAgfQotCi0gICAgaWYgKGd6dW5nZXRjKCcgJywgZmlsZSkgIT0gJyAnKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiZ3p1bmdldGMgZXJyb3JcbiIpOwotICAgICAgICBleGl0KDEpOwotICAg IH0KLQotICAgIGd6Z2V0cyhmaWxlLCAoY2hhciopdW5jb21wciwgKGludCl1bmNvbXByTGVuKTsK LSAgICBpZiAoc3RybGVuKChjaGFyKil1bmNvbXByKSAhPSA3KSB7IC8qICIgaGVsbG8hIiAqLwot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImd6Z2V0cyBlcnIgYWZ0ZXIgZ3pzZWVrOiAlc1xuIiwg Z3plcnJvcihmaWxlLCAmZXJyKSk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIGlmIChz dHJjbXAoKGNoYXIqKXVuY29tcHIsIGhlbGxvICsgNikpIHsKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJiYWQgZ3pnZXRzIGFmdGVyIGd6c2Vla1xuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJnemdldHMoKSBhZnRlciBnenNlZWs6ICVzXG4iLCAo Y2hhciopdW5jb21wcik7Ci0gICAgfQotCi0gICAgZ3pjbG9zZShmaWxlKTsKLSNlbmRpZgotfQot Ci0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggc21hbGwgYnVm ZmVycwotICovCi12b2lkIHRlc3RfZGVmbGF0ZShjb21wciwgY29tcHJMZW4pCi0gICAgQnl0ZSAq Y29tcHI7Ci0gICAgdUxvbmcgY29tcHJMZW47Ci17Ci0gICAgel9zdHJlYW0gY19zdHJlYW07IC8q IGNvbXByZXNzaW9uIHN0cmVhbSAqLwotICAgIGludCBlcnI7Ci0gICAgdUxvbmcgbGVuID0gKHVM b25nKXN0cmxlbihoZWxsbykrMTsKLQotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5j KTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0gICAgY19zdHJlYW0ub3Bh cXVlID0gKHZvaWRwZikwOwotCi0gICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RF RkFVTFRfQ09NUFJFU1NJT04pOwotICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwot Ci0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOwotICAgIGNfc3RyZWFtLm5l eHRfb3V0ID0gY29tcHI7Ci0KLSAgICB3aGlsZSAoY19zdHJlYW0udG90YWxfaW4gIT0gbGVuICYm IGNfc3RyZWFtLnRvdGFsX291dCA8IGNvbXByTGVuKSB7Ci0gICAgICAgIGNfc3RyZWFtLmF2YWls X2luID0gY19zdHJlYW0uYXZhaWxfb3V0ID0gMTsgLyogZm9yY2Ugc21hbGwgYnVmZmVycyAqLwot ICAgICAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIENI RUNLX0VSUihlcnIsICJkZWZsYXRlIik7Ci0gICAgfQotICAgIC8qIEZpbmlzaCB0aGUgc3RyZWFt LCBzdGlsbCBmb3JjaW5nIHNtYWxsIGJ1ZmZlcnM6ICovCi0gICAgZm9yICg7OykgewotICAgICAg ICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAxOwotICAgICAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVh bSwgWl9GSU5JU0gpOwotICAgICAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0g ICAgICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlIik7Ci0gICAgfQotCi0gICAgZXJyID0gZGVm bGF0ZUVuZCgmY19zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlRW5kIik7Ci19 Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGVzdCBpbmZsYXRlKCkgd2l0aCBzbWFsbCBi dWZmZXJzCi0gKi8KLXZvaWQgdGVzdF9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwg dW5jb21wckxlbikKLSAgICBCeXRlICpjb21wciwgKnVuY29tcHI7Ci0gICAgdUxvbmcgY29tcHJM ZW4sIHVuY29tcHJMZW47Ci17Ci0gICAgaW50IGVycjsKLSAgICB6X3N0cmVhbSBkX3N0cmVhbTsg LyogZGVjb21wcmVzc2lvbiBzdHJlYW0gKi8KLQotICAgIHN0cmNweSgoY2hhciopdW5jb21wciwg ImdhcmJhZ2UiKTsKLQotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAg ZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0gICAgZF9zdHJlYW0ub3BhcXVlID0gKHZv aWRwZikwOwotCi0gICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKLSAgICBkX3N0cmVhbS5h dmFpbF9pbiA9IDA7Ci0gICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNvbXByOwotCi0gICAgZXJy ID0gaW5mbGF0ZUluaXQoJmRfc3RyZWFtKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZUlu aXQiKTsKLQotICAgIHdoaWxlIChkX3N0cmVhbS50b3RhbF9vdXQgPCB1bmNvbXByTGVuICYmIGRf c3RyZWFtLnRvdGFsX2luIDwgY29tcHJMZW4pIHsKLSAgICAgICAgZF9zdHJlYW0uYXZhaWxfaW4g PSBkX3N0cmVhbS5hdmFpbF9vdXQgPSAxOyAvKiBmb3JjZSBzbWFsbCBidWZmZXJzICovCi0gICAg ICAgIGVyciA9IGluZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZMVVNIKTsKLSAgICAgICAgaWYgKGVy ciA9PSBaX1NUUkVBTV9FTkQpIGJyZWFrOwotICAgICAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0 ZSIpOwotICAgIH0KLQotICAgIGVyciA9IGluZmxhdGVFbmQoJmRfc3RyZWFtKTsKLSAgICBDSEVD S19FUlIoZXJyLCAiaW5mbGF0ZUVuZCIpOwotCi0gICAgaWYgKHN0cmNtcCgoY2hhciopdW5jb21w ciwgaGVsbG8pKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmFkIGluZmxhdGVcbiIpOwot ICAgICAgICBleGl0KDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigiaW5mbGF0ZSgp OiAlc1xuIiwgKGNoYXIgKil1bmNvbXByKTsKLSAgICB9Ci19Ci0KLS8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotICogVGVzdCBkZWZsYXRlKCkgd2l0aCBsYXJnZSBidWZmZXJzIGFuZCBkeW5hbWljIGNo YW5nZSBvZiBjb21wcmVzc2lvbiBsZXZlbAotICovCi12b2lkIHRlc3RfbGFyZ2VfZGVmbGF0ZShj b21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pCi0gICAgQnl0ZSAqY29tcHIsICp1 bmNvbXByOwotICAgIHVMb25nIGNvbXByTGVuLCB1bmNvbXByTGVuOwotewotICAgIHpfc3RyZWFt IGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KLSAgICBpbnQgZXJyOwotCi0gICAg Y19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChm cmVlX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7Ci0KLSAgICBlcnIg PSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9TUEVFRCk7Ci0gICAgQ0hFQ0tfRVJSKGVy ciwgImRlZmxhdGVJbml0Iik7Ci0KLSAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwotICAg IGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KWNvbXByTGVuOwotCi0gICAgLyogQXQgdGhpcyBw b2ludCwgdW5jb21wciBpcyBzdGlsbCBtb3N0bHkgemVyb2VzLCBzbyBpdCBzaG91bGQgY29tcHJl c3MKLSAgICAgKiB2ZXJ5IHdlbGw6Ci0gICAgICovCi0gICAgY19zdHJlYW0ubmV4dF9pbiA9IHVu Y29tcHI7Ci0gICAgY19zdHJlYW0uYXZhaWxfaW4gPSAodUludCl1bmNvbXByTGVuOwotICAgIGVy ciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX05PX0ZMVVNIKTsKLSAgICBDSEVDS19FUlIoZXJyLCAi ZGVmbGF0ZSIpOwotICAgIGlmIChjX3N0cmVhbS5hdmFpbF9pbiAhPSAwKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiZGVmbGF0ZSBub3QgZ3JlZWR5XG4iKTsKLSAgICAgICAgZXhpdCgxKTsK LSAgICB9Ci0KLSAgICAvKiBGZWVkIGluIGFscmVhZHkgY29tcHJlc3NlZCBkYXRhIGFuZCBzd2l0 Y2ggdG8gbm8gY29tcHJlc3Npb246ICovCi0gICAgZGVmbGF0ZVBhcmFtcygmY19zdHJlYW0sIFpf Tk9fQ09NUFJFU1NJT04sIFpfREVGQVVMVF9TVFJBVEVHWSk7Ci0gICAgY19zdHJlYW0ubmV4dF9p biA9IGNvbXByOwotICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW4vMjsKLSAg ICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9OT19GTFVTSCk7Ci0gICAgQ0hFQ0tfRVJSKGVy ciwgImRlZmxhdGUiKTsKLQotICAgIC8qIFN3aXRjaCBiYWNrIHRvIGNvbXByZXNzaW5nIG1vZGU6 ICovCi0gICAgZGVmbGF0ZVBhcmFtcygmY19zdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTiwgWl9G SUxURVJFRCk7Ci0gICAgY19zdHJlYW0ubmV4dF9pbiA9IHVuY29tcHI7Ci0gICAgY19zdHJlYW0u YXZhaWxfaW4gPSAodUludCl1bmNvbXByTGVuOwotICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFt LCBaX05PX0ZMVVNIKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZSIpOwotCi0gICAgZXJy ID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRklOSVNIKTsKLSAgICBpZiAoZXJyICE9IFpfU1RSRUFN X0VORCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImRlZmxhdGUgc2hvdWxkIHJlcG9ydCBa X1NUUkVBTV9FTkRcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBlcnIgPSBkZWZs YXRlRW5kKCZjX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVFbmQiKTsKLX0K LQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUZXN0IGluZmxhdGUoKSB3aXRoIGxhcmdlIGJ1 ZmZlcnMKLSAqLwotdm9pZCB0ZXN0X2xhcmdlX2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNv bXByLCB1bmNvbXByTGVuKQotICAgIEJ5dGUgKmNvbXByLCAqdW5jb21wcjsKLSAgICB1TG9uZyBj b21wckxlbiwgdW5jb21wckxlbjsKLXsKLSAgICBpbnQgZXJyOwotICAgIHpfc3RyZWFtIGRfc3Ry ZWFtOyAvKiBkZWNvbXByZXNzaW9uIHN0cmVhbSAqLwotCi0gICAgc3RyY3B5KChjaGFyKil1bmNv bXByLCAiZ2FyYmFnZSIpOwotCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsK LSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS5vcGFxdWUg PSAodm9pZHBmKTA7Ci0KLSAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwotICAgIGRfc3Ry ZWFtLmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW47Ci0KLSAgICBlcnIgPSBpbmZsYXRlSW5pdCgm ZF9zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlSW5pdCIpOwotCi0gICAgZm9y ICg7OykgewotICAgICAgICBkX3N0cmVhbS5uZXh0X291dCA9IHVuY29tcHI7ICAgICAgICAgICAg LyogZGlzY2FyZCB0aGUgb3V0cHV0ICovCi0gICAgICAgIGRfc3RyZWFtLmF2YWlsX291dCA9ICh1 SW50KXVuY29tcHJMZW47Ci0gICAgICAgIGVyciA9IGluZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZM VVNIKTsKLSAgICAgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQpIGJyZWFrOwotICAgICAgICBD SEVDS19FUlIoZXJyLCAibGFyZ2UgaW5mbGF0ZSIpOwotICAgIH0KLQotICAgIGVyciA9IGluZmxh dGVFbmQoJmRfc3RyZWFtKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZUVuZCIpOwotCi0g ICAgaWYgKGRfc3RyZWFtLnRvdGFsX291dCAhPSAyKnVuY29tcHJMZW4gKyBjb21wckxlbi8yKSB7 Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmFkIGxhcmdlIGluZmxhdGU6ICVsZFxuIiwgZF9z dHJlYW0udG90YWxfb3V0KTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9IGVsc2UgewotICAgICAg ICBwcmludGYoImxhcmdlX2luZmxhdGUoKTogT0tcbiIpOwotICAgIH0KLX0KLQotLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0gKiBUZXN0IGRlZmxhdGUoKSB3aXRoIGZ1bGwgZmx1c2gKLSAqLwotdm9p ZCB0ZXN0X2ZsdXNoKGNvbXByLCBjb21wckxlbikKLSAgICBCeXRlICpjb21wcjsKLSAgICB1TG9u ZyAqY29tcHJMZW47Ci17Ci0gICAgel9zdHJlYW0gY19zdHJlYW07IC8qIGNvbXByZXNzaW9uIHN0 cmVhbSAqLwotICAgIGludCBlcnI7Ci0gICAgdUludCBsZW4gPSAodUludClzdHJsZW4oaGVsbG8p KzE7Ci0KLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFt LnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsK LQotICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9O KTsKLSAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKLQotICAgIGNfc3RyZWFtLm5l eHRfaW4gID0gKEJ5dGVmKiloZWxsbzsKLSAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwot ICAgIGNfc3RyZWFtLmF2YWlsX2luID0gMzsKLSAgICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAodUlu dCkqY29tcHJMZW47Ci0gICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRlVMTF9GTFVTSCk7 Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGUiKTsKLQotICAgIGNvbXByWzNdKys7IC8qIGZv cmNlIGFuIGVycm9yIGluIGZpcnN0IGNvbXByZXNzZWQgYmxvY2sgKi8KLSAgICBjX3N0cmVhbS5h dmFpbF9pbiA9IGxlbiAtIDM7Ci0KLSAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9GSU5J U0gpOwotICAgIGlmIChlcnIgIT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIENIRUNLX0VSUihl cnIsICJkZWZsYXRlIik7Ci0gICAgfQotICAgIGVyciA9IGRlZmxhdGVFbmQoJmNfc3RyZWFtKTsK LSAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUVuZCIpOwotCi0gICAgKmNvbXByTGVuID0gY19z dHJlYW0udG90YWxfb3V0OwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFRlc3QgaW5m bGF0ZVN5bmMoKQotICovCi12b2lkIHRlc3Rfc3luYyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIs IHVuY29tcHJMZW4pCi0gICAgQnl0ZSAqY29tcHIsICp1bmNvbXByOwotICAgIHVMb25nIGNvbXBy TGVuLCB1bmNvbXByTGVuOwotewotICAgIGludCBlcnI7Ci0gICAgel9zdHJlYW0gZF9zdHJlYW07 IC8qIGRlY29tcHJlc3Npb24gc3RyZWFtICovCi0KLSAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIs ICJnYXJiYWdlIik7Ci0KLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAg IGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2 b2lkcGYpMDsKLQotICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7Ci0gICAgZF9zdHJlYW0u YXZhaWxfaW4gPSAyOyAvKiBqdXN0IHJlYWQgdGhlIHpsaWIgaGVhZGVyICovCi0KLSAgICBlcnIg PSBpbmZsYXRlSW5pdCgmZF9zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlSW5p dCIpOwotCi0gICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNvbXByOwotICAgIGRfc3RyZWFtLmF2 YWlsX291dCA9ICh1SW50KXVuY29tcHJMZW47Ci0KLSAgICBpbmZsYXRlKCZkX3N0cmVhbSwgWl9O T19GTFVTSCk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUiKTsKLQotICAgIGRfc3RyZWFt LmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW4tMjsgICAvKiByZWFkIGFsbCBjb21wcmVzc2VkIGRh dGEgKi8KLSAgICBlcnIgPSBpbmZsYXRlU3luYygmZF9zdHJlYW0pOyAgICAgICAgICAgLyogYnV0 IHNraXAgdGhlIGRhbWFnZWQgcGFydCAqLwotICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlU3lu YyIpOwotCi0gICAgZXJyID0gaW5mbGF0ZSgmZF9zdHJlYW0sIFpfRklOSVNIKTsKLSAgICBpZiAo ZXJyICE9IFpfREFUQV9FUlJPUikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluZmxhdGUg c2hvdWxkIHJlcG9ydCBEQVRBX0VSUk9SXG4iKTsKLSAgICAgICAgLyogQmVjYXVzZSBvZiBpbmNv cnJlY3QgYWRsZXIzMiAqLwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBlcnIgPSBpbmZs YXRlRW5kKCZkX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGVFbmQiKTsKLQot ICAgIHByaW50ZigiYWZ0ZXIgaW5mbGF0ZVN5bmMoKTogaGVsJXNcbiIsIChjaGFyICopdW5jb21w cik7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGVzdCBkZWZsYXRlKCkgd2l0aCBw cmVzZXQgZGljdGlvbmFyeQotICovCi12b2lkIHRlc3RfZGljdF9kZWZsYXRlKGNvbXByLCBjb21w ckxlbikKLSAgICBCeXRlICpjb21wcjsKLSAgICB1TG9uZyBjb21wckxlbjsKLXsKLSAgICB6X3N0 cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCi0gICAgaW50IGVycjsKLQot ICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUg PSAoZnJlZV9mdW5jKTA7Ci0gICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwotCi0gICAg ZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04pOwotICAgIENI RUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwotCi0gICAgZXJyID0gZGVmbGF0ZVNldERpY3Rp b25hcnkoJmNfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBC eXRlZiopZGljdGlvbmFyeSwgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKLSAgICBDSEVDS19FUlIoZXJy LCAiZGVmbGF0ZVNldERpY3Rpb25hcnkiKTsKLQotICAgIGRpY3RJZCA9IGNfc3RyZWFtLmFkbGVy OwotICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7Ci0gICAgY19zdHJlYW0uYXZhaWxfb3V0 ID0gKHVJbnQpY29tcHJMZW47Ci0KLSAgICBjX3N0cmVhbS5uZXh0X2luID0gKEJ5dGVmKiloZWxs bzsKLSAgICBjX3N0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKLQotICAg IGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7Ci0gICAgaWYgKGVyciAhPSBaX1NU UkVBTV9FTkQpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJkZWZsYXRlIHNob3VsZCByZXBv cnQgWl9TVFJFQU1fRU5EXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZXJyID0g ZGVmbGF0ZUVuZCgmY19zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlRW5kIik7 Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVGVzdCBpbmZsYXRlKCkgd2l0aCBhIHBy ZXNldCBkaWN0aW9uYXJ5Ci0gKi8KLXZvaWQgdGVzdF9kaWN0X2luZmxhdGUoY29tcHIsIGNvbXBy TGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKQotICAgIEJ5dGUgKmNvbXByLCAqdW5jb21wcjsKLSAg ICB1TG9uZyBjb21wckxlbiwgdW5jb21wckxlbjsKLXsKLSAgICBpbnQgZXJyOwotICAgIHpfc3Ry ZWFtIGRfc3RyZWFtOyAvKiBkZWNvbXByZXNzaW9uIHN0cmVhbSAqLwotCi0gICAgc3RyY3B5KChj aGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwotCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9j X2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBkX3N0cmVh bS5vcGFxdWUgPSAodm9pZHBmKTA7Ci0KLSAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwot ICAgIGRfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpY29tcHJMZW47Ci0KLSAgICBlcnIgPSBpbmZs YXRlSW5pdCgmZF9zdHJlYW0pOwotICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlSW5pdCIpOwot Ci0gICAgZF9zdHJlYW0ubmV4dF9vdXQgPSB1bmNvbXByOwotICAgIGRfc3RyZWFtLmF2YWlsX291 dCA9ICh1SW50KXVuY29tcHJMZW47Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGVyciA9IGlu ZmxhdGUoJmRfc3RyZWFtLCBaX05PX0ZMVVNIKTsKLSAgICAgICAgaWYgKGVyciA9PSBaX1NUUkVB TV9FTkQpIGJyZWFrOwotICAgICAgICBpZiAoZXJyID09IFpfTkVFRF9ESUNUKSB7Ci0gICAgICAg ICAgICBpZiAoZF9zdHJlYW0uYWRsZXIgIT0gZGljdElkKSB7Ci0gICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIGRpY3Rpb25hcnkiKTsKLSAgICAgICAgICAgICAgICBl eGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rp b25hcnkoJmRfc3RyZWFtLCAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGljdGlvbmFyeSkpOwotICAgICAgICB9 Ci0gICAgICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlIHdpdGggZGljdCIpOwotICAgIH0KLQot ICAgIGVyciA9IGluZmxhdGVFbmQoJmRfc3RyZWFtKTsKLSAgICBDSEVDS19FUlIoZXJyLCAiaW5m bGF0ZUVuZCIpOwotCi0gICAgaWYgKHN0cmNtcCgoY2hhciopdW5jb21wciwgaGVsbG8pKSB7Ci0g ICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmFkIGluZmxhdGUgd2l0aCBkaWN0XG4iKTsKLSAgICAg ICAgZXhpdCgxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoImluZmxhdGUgd2l0aCBk aWN0aW9uYXJ5OiAlc1xuIiwgKGNoYXIgKil1bmNvbXByKTsKLSAgICB9Ci19Ci0KLS8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotICogVXNhZ2U6ICBleGFtcGxlIFtvdXRwdXQuZ3ogIFtpbnB1dC5nel1d Ci0gKi8KLQotaW50IG1haW4oYXJnYywgYXJndikKLSAgICBpbnQgYXJnYzsKLSAgICBjaGFyICph cmd2W107Ci17Ci0gICAgQnl0ZSAqY29tcHIsICp1bmNvbXByOwotICAgIHVMb25nIGNvbXByTGVu ID0gMTAwMDAqc2l6ZW9mKGludCk7IC8qIGRvbid0IG92ZXJmbG93IG9uIE1TRE9TICovCi0gICAg dUxvbmcgdW5jb21wckxlbiA9IGNvbXByTGVuOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBteVZl cnNpb24gPSBaTElCX1ZFUlNJT047Ci0KLSAgICBpZiAoemxpYlZlcnNpb24oKVswXSAhPSBteVZl cnNpb25bMF0pIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbmNvbXBhdGlibGUgemxpYiB2 ZXJzaW9uXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLQotICAgIH0gZWxzZSBpZiAoc3RyY21wKHps aWJWZXJzaW9uKCksIFpMSUJfVkVSU0lPTikgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIndhcm5pbmc6IGRpZmZlcmVudCB6bGliIHZlcnNpb25cbiIpOwotICAgIH0KLQotICAgIHBy aW50ZigiemxpYiB2ZXJzaW9uICVzID0gMHglMDR4LCBjb21waWxlIGZsYWdzID0gMHglbHhcbiIs Ci0gICAgICAgICAgICBaTElCX1ZFUlNJT04sIFpMSUJfVkVSTlVNLCB6bGliQ29tcGlsZUZsYWdz KCkpOwotCi0gICAgY29tcHIgICAgPSAoQnl0ZSopY2FsbG9jKCh1SW50KWNvbXByTGVuLCAxKTsK LSAgICB1bmNvbXByICA9IChCeXRlKiljYWxsb2MoKHVJbnQpdW5jb21wckxlbiwgMSk7Ci0gICAg LyogY29tcHIgYW5kIHVuY29tcHIgYXJlIGNsZWFyZWQgdG8gYXZvaWQgcmVhZGluZyB1bmluaXRp YWxpemVkCi0gICAgICogZGF0YSBhbmQgdG8gZW5zdXJlIHRoYXQgdW5jb21wciBjb21wcmVzc2Vz IHdlbGwuCi0gICAgICovCi0gICAgaWYgKGNvbXByID09IFpfTlVMTCB8fCB1bmNvbXByID09IFpf TlVMTCkgewotICAgICAgICBwcmludGYoIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICBleGl0 KDEpOwotICAgIH0KLSAgICB0ZXN0X2NvbXByZXNzKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwg dW5jb21wckxlbik7Ci0KLSAgICB0ZXN0X2d6aW8oKGFyZ2MgPiAxID8gYXJndlsxXSA6IFRFU1RG SUxFKSwKLSAgICAgICAgICAgICAgdW5jb21wciwgdW5jb21wckxlbik7Ci0KLSAgICB0ZXN0X2Rl ZmxhdGUoY29tcHIsIGNvbXByTGVuKTsKLSAgICB0ZXN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVu LCB1bmNvbXByLCB1bmNvbXByTGVuKTsKLQotICAgIHRlc3RfbGFyZ2VfZGVmbGF0ZShjb21wciwg Y29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwotICAgIHRlc3RfbGFyZ2VfaW5mbGF0ZShj b21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwotCi0gICAgdGVzdF9mbHVzaChj b21wciwgJmNvbXByTGVuKTsKLSAgICB0ZXN0X3N5bmMoY29tcHIsIGNvbXByTGVuLCB1bmNvbXBy LCB1bmNvbXByTGVuKTsKLSAgICBjb21wckxlbiA9IHVuY29tcHJMZW47Ci0KLSAgICB0ZXN0X2Rp Y3RfZGVmbGF0ZShjb21wciwgY29tcHJMZW4pOwotICAgIHRlc3RfZGljdF9pbmZsYXRlKGNvbXBy LCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7Ci0KLSAgICBmcmVlKGNvbXByKTsKLSAg ICBmcmVlKHVuY29tcHIpOwotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLXIgYTA1NzhjNzk4ZTEw IC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL2d6Y2xvc2UuYwotLS0gL2Rldi9u dWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96 bGliL2d6Y2xvc2UuYwlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTAsMCArMSwy NSBAQAorLyogZ3pjbG9zZS5jIC0tIHpsaWIgZ3pjbG9zZSgpIGZ1bmN0aW9uCisgKiBDb3B5cmln aHQgKEMpIDIwMDQsIDIwMTAgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJp YnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNp bmNsdWRlICJnemd1dHMuaCIKKworLyogZ3pjbG9zZSgpIGlzIGluIGEgc2VwYXJhdGUgZmlsZSBz byB0aGF0IGl0IGlzIGxpbmtlZCBpbiBvbmx5IGlmIGl0IGlzIHVzZWQuCisgICBUaGF0IHdheSB0 aGUgb3RoZXIgZ3pjbG9zZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgaW5zdGVhZCB0byBhdm9pZCBs aW5raW5nIGluCisgICB1bm5lZWRlZCBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIHJvdXRp bmVzLiAqLworaW50IFpFWFBPUlQgZ3pjbG9zZShmaWxlKQorICAgIGd6RmlsZSBmaWxlOworewor I2lmbmRlZiBOT19HWkNPTVBSRVNTCisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgaWYgKGZp bGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0g KGd6X3N0YXRlcClmaWxlOworCisgICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPyBn emNsb3NlX3IoZmlsZSkgOiBnemNsb3NlX3coZmlsZSk7CisjZWxzZQorICAgIHJldHVybiBnemNs b3NlX3IoZmlsZSk7CisjZW5kaWYKK30KZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5 N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvZ3pndXRzLmgKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAx IDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9nemd1dHMuaAlX ZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTAsMCArMSwyMTggQEAKKy8qIGd6Z3V0 cy5oIC0tIHpsaWIgaW50ZXJuYWwgaGVhZGVyIGRlZmluaXRpb25zIGZvciBneiogb3BlcmF0aW9u cworICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAy MDE2IE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNl LCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaWZkZWYgX0xBUkdFRklM RTY0X1NPVVJDRQorIyAgaWZuZGVmIF9MQVJHRUZJTEVfU09VUkNFCisjICAgIGRlZmluZSBfTEFS R0VGSUxFX1NPVVJDRSAxCisjICBlbmRpZgorIyAgaWZkZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKyMg ICAgdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhB VkVfSElEREVOCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls aXR5ICgiaGlkZGVuIikpKQorI2Vsc2UKKyMgIGRlZmluZSBaTElCX0lOVEVSTkFMCisjZW5kaWYK KworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiemxpYi5oIgorI2lmZGVmIFNUREMKKyMg IGluY2x1ZGUgPHN0cmluZy5oPgorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjICBpbmNsdWRlIDxs aW1pdHMuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9QT1NJWF9TT1VSQ0UKKyMgIGRlZmluZSBfUE9T SVhfU09VUkNFCisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaWZkZWYgX1dJTjMyCisj ICBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8 fCBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9XSU4zMikKKyMgIGluY2x1ZGUgPGlvLmg+ CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisj ICBkZWZpbmUgV0lERUNIQVIKKyNlbmRpZgorCisjaWZkZWYgV0lOQVBJX0ZBTUlMWQorIyAgZGVm aW5lIG9wZW4gX29wZW4KKyMgIGRlZmluZSByZWFkIF9yZWFkCisjICBkZWZpbmUgd3JpdGUgX3dy aXRlCisjICBkZWZpbmUgY2xvc2UgX2Nsb3NlCisjZW5kaWYKKworI2lmZGVmIE5PX0RFRkxBVEUg ICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLworIyAgZGVm aW5lIE5PX0daQ09NUFJFU1MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDOTkpIHx8IChkZWZp bmVkKF9fVFVSQk9DX18pICYmIF9fVFVSQk9DX18gPj0gMHg1NTApCisjICBpZm5kZWYgSEFWRV9W U05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisK KyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAg ZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1T RE9TKSAmJiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKEJPUkxBTkRDID4gMHg0MTApCisjICBp Zm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRp ZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgIGlmZGVmIE1TRE9TCisvKiB2 c25wcmludGYgbWF5IGV4aXN0IG9uIHNvbWUgTVMtRE9TIGNvbXBpbGVycyAoREpHUFA/KSwKKyAg IGJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzdW1lIGl0IGRvZXNuJ3QuICovCisjICAgIGRlZmluZSBO T192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX1RVUkJPQ19fCisjICAgIGRlZmluZSBO T192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBXSU4zMgorLyogSW4gV2luMzIsIHZzbnBy aW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KKyMgICAg aWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisjICAgICAg aWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIg PCAxNTAwICkKKyMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgICAgICBl bmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fU0FTQworIyAgICBkZWZpbmUg Tk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgVk1TCisjICAgIGRlZmluZSBOT192c25w cmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX09TNDAwX18KKyMgICAgZGVmaW5lIE5PX3ZzbnBy aW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fTVZTX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50 ZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiB1bmxpa2Ugc25wcmludGYgKHdoaWNoIGlzIHJlcXVp cmVkIGluIEM5OSksIF9zbnByaW50ZiBkb2VzIG5vdCBndWFyYW50ZWUKKyAgIG51bGwgdGVybWlu YXRpb24gb2YgdGhlIHJlc3VsdCAtLSBob3dldmVyIHRoaXMgaXMgb25seSB1c2VkIGluIGd6bGli LmMgd2hlcmUKKyAgIHRoZSByZXN1bHQgaXMgYXNzdXJlZCB0byBmaXQgaW4gdGhlIHNwYWNlIHBy b3ZpZGVkICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTAwCisjICBk ZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKworI2lmbmRlZiBsb2NhbAorIyAgZGVm aW5lIGxvY2FsIHN0YXRpYworI2VuZGlmCisvKiBzaW5jZSAic3RhdGljIiBpcyB1c2VkIHRvIG1l YW4gdHdvIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRoaW5ncyBpbiBDLCB3ZQorICAgZGVmaW5lICJs b2NhbCIgZm9yIHRoZSBub24tc3RhdGljIG1lYW5pbmcgb2YgInN0YXRpYyIsIGZvciByZWFkYWJp bGl0eQorICAgKGNvbXBpbGUgd2l0aCAtRGxvY2FsIGlmIHlvdXIgZGVidWdnZXIgY2FuJ3QgZmlu ZCBzdGF0aWMgc3ltYm9scykgKi8KKworLyogZ3oqIGZ1bmN0aW9ucyBhbHdheXMgdXNlIGxpYnJh cnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgKi8KKyNpZm5kZWYgU1REQworICBleHRlcm4gdm9pZHAg IG1hbGxvYyBPRigodUludCBzaXplKSk7CisgIGV4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lk cGYgcHRyKSk7CisjZW5kaWYKKworLyogZ2V0IGVycm5vIGFuZCBzdHJlcnJvciBkZWZpbml0aW9u ICovCisjaWYgZGVmaW5lZCBVTkRFUl9DRQorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgZGVm aW5lIHpzdHJlcnJvcigpIGd6X3N0cndpbmVycm9yKChEV09SRClHZXRMYXN0RXJyb3IoKSkKKyNl bHNlCisjICBpZm5kZWYgTk9fU1RSRVJST1IKKyMgICAgaW5jbHVkZSA8ZXJybm8uaD4KKyMgICAg ZGVmaW5lIHpzdHJlcnJvcigpIHN0cmVycm9yKGVycm5vKQorIyAgZWxzZQorIyAgICBkZWZpbmUg enN0cmVycm9yKCkgInN0ZGlvIGVycm9yIChjb25zdWx0IGVycm5vKSIKKyMgIGVuZGlmCisjZW5k aWYKKworLyogcHJvdmlkZSBwcm90b3R5cGVzIGZvciB0aGVzZSB3aGVuIGJ1aWxkaW5nIHpsaWIg d2l0aG91dCBMRlMgKi8KKyNpZiAhZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSB8fCBfTEZT NjRfTEFSR0VGSUxFLTAgPT0gMAorICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQg T0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CisgICAgWkVYVEVSTiB6X29mZjY0X3Qg WkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOworICAgIFpFWFRF Uk4gel9vZmY2NF90IFpFWFBPUlQgZ3p0ZWxsNjQgT0YoKGd6RmlsZSkpOworICAgIFpFWFRFUk4g el9vZmY2NF90IFpFWFBPUlQgZ3pvZmZzZXQ2NCBPRigoZ3pGaWxlKSk7CisjZW5kaWYKKworLyog ZGVmYXVsdCBtZW1MZXZlbCAqLworI2lmIE1BWF9NRU1fTEVWRUwgPj0gOAorIyAgZGVmaW5lIERF Rl9NRU1fTEVWRUwgOAorI2Vsc2UKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMICBNQVhfTUVNX0xF VkVMCisjZW5kaWYKKworLyogZGVmYXVsdCBpL28gYnVmZmVyIHNpemUgLS0gZG91YmxlIHRoaXMg Zm9yIG91dHB1dCB3aGVuIHJlYWRpbmcgKHRoaXMgYW5kCisgICB0d2ljZSB0aGlzIG11c3QgYmUg YWJsZSB0byBmaXQgaW4gYW4gdW5zaWduZWQgdHlwZSkgKi8KKyNkZWZpbmUgR1pCVUZTSVpFIDgx OTIKKworLyogZ3ppcCBtb2RlcywgYWxzbyBwcm92aWRlIGEgbGl0dGxlIGludGVncml0eSBjaGVj ayBvbiB0aGUgcGFzc2VkIHN0cnVjdHVyZSAqLworI2RlZmluZSBHWl9OT05FIDAKKyNkZWZpbmUg R1pfUkVBRCA3MjQ3CisjZGVmaW5lIEdaX1dSSVRFIDMxMTUzCisjZGVmaW5lIEdaX0FQUEVORCAx ICAgICAvKiBtb2RlIHNldCB0byBHWl9XUklURSBhZnRlciB0aGUgZmlsZSBpcyBvcGVuZWQgKi8K KworLyogdmFsdWVzIGZvciBnel9zdGF0ZSBob3cgKi8KKyNkZWZpbmUgTE9PSyAwICAgICAgLyog bG9vayBmb3IgYSBnemlwIGhlYWRlciAqLworI2RlZmluZSBDT1BZIDEgICAgICAvKiBjb3B5IGlu cHV0IGRpcmVjdGx5ICovCisjZGVmaW5lIEdaSVAgMiAgICAgIC8qIGRlY29tcHJlc3MgYSBnemlw IHN0cmVhbSAqLworCisvKiBpbnRlcm5hbCBnemlwIGZpbGUgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUg Ki8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgLyogZXhwb3NlZCBjb250ZW50cyBmb3IgZ3pn ZXRjKCkgbWFjcm8gKi8KKyAgICBzdHJ1Y3QgZ3pGaWxlX3MgeDsgICAgICAvKiAieCIgZm9yIGV4 cG9zZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4LmhhdmU6IG51bWJlciBv ZiBieXRlcyBhdmFpbGFibGUgYXQgeC5uZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogeC5uZXh0OiBuZXh0IG91dHB1dCBkYXRhIHRvIGRlbGl2ZXIgb3Igd3JpdGUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4LnBvczogY3VycmVudCBwb3NpdGlvbiBpbiB1 bmNvbXByZXNzZWQgZGF0YSAqLworICAgICAgICAvKiB1c2VkIGZvciBib3RoIHJlYWRpbmcgYW5k IHdyaXRpbmcgKi8KKyAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAvKiBzZWUgZ3ppcCBtb2Rl cyBhYm92ZSAqLworICAgIGludCBmZDsgICAgICAgICAgICAgICAgIC8qIGZpbGUgZGVzY3JpcHRv ciAqLworICAgIGNoYXIgKnBhdGg7ICAgICAgICAgICAgIC8qIHBhdGggb3IgZmQgZm9yIGVycm9y IG1lc3NhZ2VzICovCisgICAgdW5zaWduZWQgc2l6ZTsgICAgICAgICAgLyogYnVmZmVyIHNpemUs IHplcm8gaWYgbm90IGFsbG9jYXRlZCB5ZXQgKi8KKyAgICB1bnNpZ25lZCB3YW50OyAgICAgICAg ICAvKiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGRlZmF1bHQgaXMgR1pCVUZTSVpFICovCisgICAg dW5zaWduZWQgY2hhciAqaW47ICAgICAgLyogaW5wdXQgYnVmZmVyIChkb3VibGUtc2l6ZWQgd2hl biB3cml0aW5nKSAqLworICAgIHVuc2lnbmVkIGNoYXIgKm91dDsgICAgIC8qIG91dHB1dCBidWZm ZXIgKGRvdWJsZS1zaXplZCB3aGVuIHJlYWRpbmcpICovCisgICAgaW50IGRpcmVjdDsgICAgICAg ICAgICAgLyogMCBpZiBwcm9jZXNzaW5nIGd6aXAsIDEgaWYgdHJhbnNwYXJlbnQgKi8KKyAgICAg ICAgLyoganVzdCBmb3IgcmVhZGluZyAqLworICAgIGludCBob3c7ICAgICAgICAgICAgICAgIC8q IDA6IGdldCBoZWFkZXIsIDE6IGNvcHksIDI6IGRlY29tcHJlc3MgKi8KKyAgICB6X29mZjY0X3Qg c3RhcnQ7ICAgICAgICAvKiB3aGVyZSB0aGUgZ3ppcCBkYXRhIHN0YXJ0ZWQsIGZvciByZXdpbmRp bmcgKi8KKyAgICBpbnQgZW9mOyAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGVuZCBvZiBpbnB1 dCBmaWxlIHJlYWNoZWQgKi8KKyAgICBpbnQgcGFzdDsgICAgICAgICAgICAgICAvKiB0cnVlIGlm IHJlYWQgcmVxdWVzdGVkIHBhc3QgZW5kICovCisgICAgICAgIC8qIGp1c3QgZm9yIHdyaXRpbmcg Ki8KKyAgICBpbnQgbGV2ZWw7ICAgICAgICAgICAgICAvKiBjb21wcmVzc2lvbiBsZXZlbCAqLwor ICAgIGludCBzdHJhdGVneTsgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCisg ICAgICAgIC8qIHNlZWsgcmVxdWVzdCAqLworICAgIHpfb2ZmNjRfdCBza2lwOyAgICAgICAgIC8q IGFtb3VudCB0byBza2lwIChhbHJlYWR5IHJld291bmQgaWYgYmFja3dhcmRzKSAqLworICAgIGlu dCBzZWVrOyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgc2VlayByZXF1ZXN0IHBlbmRpbmcgKi8K KyAgICAgICAgLyogZXJyb3IgaW5mb3JtYXRpb24gKi8KKyAgICBpbnQgZXJyOyAgICAgICAgICAg ICAgICAvKiBlcnJvciBjb2RlICovCisgICAgY2hhciAqbXNnOyAgICAgICAgICAgICAgLyogZXJy b3IgbWVzc2FnZSAqLworICAgICAgICAvKiB6bGliIGluZmxhdGUgb3IgZGVmbGF0ZSBzdHJlYW0g Ki8KKyAgICB6X3N0cmVhbSBzdHJtOyAgICAgICAgICAvKiBzdHJlYW0gc3RydWN0dXJlIGluLXBs YWNlIChub3QgYSBwb2ludGVyKSAqLworfSBnel9zdGF0ZTsKK3R5cGVkZWYgZ3pfc3RhdGUgRkFS ICpnel9zdGF0ZXA7CisKKy8qIHNoYXJlZCBmdW5jdGlvbnMgKi8KK3ZvaWQgWkxJQl9JTlRFUk5B TCBnel9lcnJvciBPRigoZ3pfc3RhdGVwLCBpbnQsIGNvbnN0IGNoYXIgKikpOworI2lmIGRlZmlu ZWQgVU5ERVJfQ0UKK2NoYXIgWkxJQl9JTlRFUk5BTCAqZ3pfc3Ryd2luZXJyb3IgT0YoKERXT1JE IGVycm9yKSk7CisjZW5kaWYKKworLyogR1RfT0ZGKHgpLCB3aGVyZSB4IGlzIGFuIHVuc2lnbmVk IHZhbHVlLCBpcyB0cnVlIGlmIHggPiBtYXhpbXVtIHpfb2ZmNjRfdAorICAgdmFsdWUgLS0gbmVl ZGVkIHdoZW4gY29tcGFyaW5nIHVuc2lnbmVkIHRvIHpfb2ZmNjRfdCwgd2hpY2ggaXMgc2lnbmVk CisgICAocG9zc2libGUgel9vZmY2NF90IHR5cGVzIG9mZl90LCBvZmY2NF90LCBhbmQgbG9uZyBh cmUgYWxsIHNpZ25lZCkgKi8KKyNpZmRlZiBJTlRfTUFYCisjICBkZWZpbmUgR1RfT0ZGKHgpIChz aXplb2YoaW50KSA9PSBzaXplb2Yoel9vZmY2NF90KSAmJiAoeCkgPiBJTlRfTUFYKQorI2Vsc2UK K3Vuc2lnbmVkIFpMSUJfSU5URVJOQUwgZ3pfaW50bWF4IE9GKCh2b2lkKSk7CisjICBkZWZpbmUg R1RfT0ZGKHgpIChzaXplb2YoaW50KSA9PSBzaXplb2Yoel9vZmY2NF90KSAmJiAoeCkgPiBnel9p bnRtYXgoKSkKKyNlbmRpZgpkaWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lz L3NyYy9jbWQvZ3MvemxpYi9nemlvLmMKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9nemlvLmMJ V2VkIE1heSAyNyAwMDowOTo0NiAyMDIwICswMjAwCisrKyAvZGV2L251bGwJVGh1IEphbiAwMSAw MDowMDowMCAxOTcwICswMDAwCkBAIC0xLDEwMDkgKzAsMCBAQAotLyogZ3ppby5jIC0tIElPIG9u IC5neiBmaWxlcwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgSmVhbi1sb3VwIEdhaWxseS4K LSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0 IG5vdGljZSBpbiB6bGliLmgKLSAqCi0gKiBDb21waWxlIHRoaXMgZmlsZSB3aXRoIC1ETk9fR1pD T01QUkVTUyB0byBhdm9pZCB0aGUgY29tcHJlc3Npb24gY29kZS4KLSAqLwotCi0vKiBAKCMpICRJ ZDogZ3ppby5jLHYgMS4xLjEuMSAyMDA1LzA0LzI0IDIxOjM5OjM5IGdpbGVzIEV4cCAkICovCi0K LSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAienV0aWwuaCIKLQotI2lmZGVmIE5PX0RF RkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGlibGl0eSB3aXRoIG9sZCBkZWZpbml0aW9uICovCi0j ICBkZWZpbmUgTk9fR1pDT01QUkVTUwotI2VuZGlmCi0KLSNpZm5kZWYgTk9fRFVNTVlfREVDTAot c3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVy cyAqLwotI2VuZGlmCi0KLSNpZm5kZWYgWl9CVUZTSVpFCi0jICBpZmRlZiBNQVhTRUdfNjRLCi0j ICAgIGRlZmluZSBaX0JVRlNJWkUgNDA5NiAvKiBtaW5pbWl6ZSBtZW1vcnkgdXNhZ2UgZm9yIDE2 LWJpdCBET1MgKi8KLSMgIGVsc2UKLSMgICAgZGVmaW5lIFpfQlVGU0laRSAxNjM4NAotIyAgZW5k aWYKLSNlbmRpZgotI2lmbmRlZiBaX1BSSU5URl9CVUZTSVpFCi0jICBkZWZpbmUgWl9QUklOVEZf QlVGU0laRSA0MDk2Ci0jZW5kaWYKLQotI2lmZGVmIF9fTVZTX18KLSMgIHByYWdtYSBtYXAgKGZk b3BlbiAsICJcMTc0XDE3NEZET1BFTiIpCi0gICBGSUxFICpmZG9wZW4oaW50LCBjb25zdCBjaGFy ICopOwotI2VuZGlmCi0KLSNpZm5kZWYgU1REQwotZXh0ZXJuIHZvaWRwICBtYWxsb2MgT0YoKHVJ bnQgc2l6ZSkpOwotZXh0ZXJuIHZvaWQgICBmcmVlICAgT0YoKHZvaWRwZiBwdHIpKTsKLSNlbmRp ZgotCi0jZGVmaW5lIEFMTE9DKHNpemUpIG1hbGxvYyhzaXplKQotI2RlZmluZSBUUllGUkVFKHAp IHtpZiAocCkgZnJlZShwKTt9Ci0KLXN0YXRpYyBpbnQgY29uc3QgZ3pfbWFnaWNbMl0gPSB7MHgx ZiwgMHg4Yn07IC8qIGd6aXAgbWFnaWMgaGVhZGVyICovCi0KLS8qIGd6aXAgZmxhZyBieXRlICov Ci0jZGVmaW5lIEFTQ0lJX0ZMQUcgICAweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBh c2NpaSB0ZXh0ICovCi0jZGVmaW5lIEhFQURfQ1JDICAgICAweDAyIC8qIGJpdCAxIHNldDogaGVh ZGVyIENSQyBwcmVzZW50ICovCi0jZGVmaW5lIEVYVFJBX0ZJRUxEICAweDA0IC8qIGJpdCAyIHNl dDogZXh0cmEgZmllbGQgcHJlc2VudCAqLwotI2RlZmluZSBPUklHX05BTUUgICAgMHgwOCAvKiBi aXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCi0jZGVmaW5lIENPTU1FTlQg ICAgICAweDEwIC8qIGJpdCA0IHNldDogZmlsZSBjb21tZW50IHByZXNlbnQgKi8KLSNkZWZpbmUg UkVTRVJWRUQgICAgIDB4RTAgLyogYml0cyA1Li43OiByZXNlcnZlZCAqLwotCi10eXBlZGVmIHN0 cnVjdCBnel9zdHJlYW0gewotICAgIHpfc3RyZWFtIHN0cmVhbTsKLSAgICBpbnQgICAgICB6X2Vy cjsgICAvKiBlcnJvciBjb2RlIGZvciBsYXN0IHN0cmVhbSBvcGVyYXRpb24gKi8KLSAgICBpbnQg ICAgICB6X2VvZjsgICAvKiBzZXQgaWYgZW5kIG9mIGlucHV0IGZpbGUgKi8KLSAgICBGSUxFICAg ICAqZmlsZTsgICAvKiAuZ3ogZmlsZSAqLwotICAgIEJ5dGUgICAgICppbmJ1ZjsgIC8qIGlucHV0 IGJ1ZmZlciAqLwotICAgIEJ5dGUgICAgICpvdXRidWY7IC8qIG91dHB1dCBidWZmZXIgKi8KLSAg ICB1TG9uZyAgICBjcmM7ICAgICAvKiBjcmMzMiBvZiB1bmNvbXByZXNzZWQgZGF0YSAqLwotICAg IGNoYXIgICAgICptc2c7ICAgIC8qIGVycm9yIG1lc3NhZ2UgKi8KLSAgICBjaGFyICAgICAqcGF0 aDsgICAvKiBwYXRoIG5hbWUgZm9yIGRlYnVnZ2luZyBvbmx5ICovCi0gICAgaW50ICAgICAgdHJh bnNwYXJlbnQ7IC8qIDEgaWYgaW5wdXQgZmlsZSBpcyBub3QgYSAuZ3ogZmlsZSAqLwotICAgIGNo YXIgICAgIG1vZGU7ICAgIC8qICd3JyBvciAncicgKi8KLSAgICB6X29mZl90ICBzdGFydDsgICAv KiBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgaW4gZmlsZSAoaGVhZGVyIHNraXBwZWQpICovCi0g ICAgel9vZmZfdCAgaW47ICAgICAgLyogYnl0ZXMgaW50byBkZWZsYXRlIG9yIGluZmxhdGUgKi8K LSAgICB6X29mZl90ICBvdXQ7ICAgICAvKiBieXRlcyBvdXQgb2YgZGVmbGF0ZSBvciBpbmZsYXRl ICovCi0gICAgaW50ICAgICAgYmFjazsgICAgLyogb25lIGNoYXJhY3RlciBwdXNoLWJhY2sgKi8K LSAgICBpbnQgICAgICBsYXN0OyAgICAvKiB0cnVlIGlmIHB1c2gtYmFjayBpcyBsYXN0IGNoYXJh Y3RlciAqLwotfSBnel9zdHJlYW07Ci0KLQotbG9jYWwgZ3pGaWxlIGd6X29wZW4gICAgICBPRigo Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50ICBmZCkpOwotbG9jYWwgaW50 IGRvX2ZsdXNoICAgICAgICBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOwotbG9jYWwgaW50 ICAgIGdldF9ieXRlICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCB2b2lkICAgY2hlY2tf aGVhZGVyIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIGludCAgICBkZXN0cm95ICAgICAgT0Yo KGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIHB1dExvbmcgICAgICBPRigoRklMRSAqZmls ZSwgdUxvbmcgeCkpOwotbG9jYWwgdUxvbmcgIGdldExvbmcgICAgICBPRigoZ3pfc3RyZWFtICpz KSk7Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBPcGVucyBhIGd6aXAgKC5neikgZmls ZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLiBUaGUgbW9kZSBwYXJhbWV0ZXIKLSAgIGlzIGFzIGlu IGZvcGVuICgicmIiIG9yICJ3YiIpLiBUaGUgZmlsZSBpcyBnaXZlbiBlaXRoZXIgYnkgZmlsZSBk ZXNjcmlwdG9yCi0gICBvciBwYXRoIG5hbWUgKGlmIGZkID09IC0xKS4KLSAgICAgZ3pfb3BlbiBy ZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCBvciBpZiB0aGVyZSB3 YXMKLSAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIChkZSljb21wcmVzc2lv biBzdGF0ZTsgZXJybm8KLSAgIGNhbiBiZSBjaGVja2VkIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28g Y2FzZXMgKGlmIGVycm5vIGlzIHplcm8sIHRoZQotICAgemxpYiBlcnJvciBpcyBaX01FTV9FUlJP UikuCi0qLwotbG9jYWwgZ3pGaWxlIGd6X29wZW4gKHBhdGgsIG1vZGUsIGZkKQotICAgIGNvbnN0 IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLSAgICBpbnQgIGZkOwotewotICAg IGludCBlcnI7Ci0gICAgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOyAvKiBjb21w cmVzc2lvbiBsZXZlbCAqLwotICAgIGludCBzdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsg LyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KLSAgICBjaGFyICpwID0gKGNoYXIqKW1vZGU7Ci0g ICAgZ3pfc3RyZWFtICpzOwotICAgIGNoYXIgZm1vZGVbODBdOyAvKiBjb3B5IG9mIG1vZGUsIHdp dGhvdXQgdGhlIGNvbXByZXNzaW9uIGxldmVsICovCi0gICAgY2hhciAqbSA9IGZtb2RlOwotCi0g ICAgaWYgKCFwYXRoIHx8ICFtb2RlKSByZXR1cm4gWl9OVUxMOwotCi0gICAgcyA9IChnel9zdHJl YW0gKilBTExPQyhzaXplb2YoZ3pfc3RyZWFtKSk7Ci0gICAgaWYgKCFzKSByZXR1cm4gWl9OVUxM OwotCi0gICAgcy0+c3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgcy0+c3RyZWFt LnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIHMtPnN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7 Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZiA9IFpfTlVMTDsKLSAgICBzLT5zdHJl YW0ubmV4dF9vdXQgPSBzLT5vdXRidWYgPSBaX05VTEw7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2lu ID0gcy0+c3RyZWFtLmF2YWlsX291dCA9IDA7Ci0gICAgcy0+ZmlsZSA9IE5VTEw7Ci0gICAgcy0+ el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBzLT5pbiA9IDA7Ci0gICAgcy0+ b3V0ID0gMDsKLSAgICBzLT5iYWNrID0gRU9GOwotICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05V TEwsIDApOwotICAgIHMtPm1zZyA9IE5VTEw7Ci0gICAgcy0+dHJhbnNwYXJlbnQgPSAwOwotCi0g ICAgcy0+cGF0aCA9IChjaGFyKilBTExPQyhzdHJsZW4ocGF0aCkrMSk7Ci0gICAgaWYgKHMtPnBh dGggPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7 Ci0gICAgfQotICAgIHN0cmNweShzLT5wYXRoLCBwYXRoKTsgLyogZG8gdGhpcyBlYXJseSBmb3Ig ZGVidWdnaW5nICovCi0KLSAgICBzLT5tb2RlID0gJ1wwJzsKLSAgICBkbyB7Ci0gICAgICAgIGlm ICgqcCA9PSAncicpIHMtPm1vZGUgPSAncic7Ci0gICAgICAgIGlmICgqcCA9PSAndycgfHwgKnAg PT0gJ2EnKSBzLT5tb2RlID0gJ3cnOwotICAgICAgICBpZiAoKnAgPj0gJzAnICYmICpwIDw9ICc5 JykgewotICAgICAgICAgICAgbGV2ZWwgPSAqcCAtICcwJzsKLSAgICAgICAgfSBlbHNlIGlmICgq cCA9PSAnZicpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpfRklMVEVSRUQ7Ci0gICAgICAgIH0g ZWxzZSBpZiAoKnAgPT0gJ2gnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0hVRkZNQU5fT05M WTsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnUicpIHsKLSAgICAgICAgICBzdHJhdGVneSA9 IFpfUkxFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKm0rKyA9ICpwOyAvKiBjb3B5 IHRoZSBtb2RlICovCi0gICAgICAgIH0KLSAgICB9IHdoaWxlICgqcCsrICYmIG0gIT0gZm1vZGUg KyBzaXplb2YoZm1vZGUpKTsKLSAgICBpZiAocy0+bW9kZSA9PSAnXDAnKSByZXR1cm4gZGVzdHJv eShzKSwgKGd6RmlsZSlaX05VTEw7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRl ZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIGVyciA9IFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAg ICAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCYocy0+c3RyZWFtKSwgbGV2ZWwsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBaX0RFRkxBVEVELCAtTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBz dHJhdGVneSk7Ci0gICAgICAgIC8qIHdpbmRvd0JpdHMgaXMgcGFzc2VkIDwgMCB0byBzdXBwcmVz cyB6bGliIGhlYWRlciAqLwotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1 ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwotI2VuZGlmCi0gICAgICAgIGlmIChlcnIgIT0g Wl9PSyB8fCBzLT5vdXRidWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzdHJv eShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBz LT5zdHJlYW0ubmV4dF9pbiAgPSBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwot Ci0gICAgICAgIGVyciA9IGluZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIC1NQVhfV0JJVFMpOwot ICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gdGVsbCB0aGF0IHRoZXJlIGlz IG5vIHpsaWIgaGVhZGVyLgotICAgICAgICAgKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGluZmxh dGUgKnJlcXVpcmVzKiBhbiBleHRyYSAiZHVtbXkiIGJ5dGUKLSAgICAgICAgICogYWZ0ZXIgdGhl IGNvbXByZXNzZWQgc3RyZWFtIGluIG9yZGVyIHRvIGNvbXBsZXRlIGRlY29tcHJlc3Npb24gYW5k Ci0gICAgICAgICAqIHJldHVybiBaX1NUUkVBTV9FTkQuIEhlcmUgdGhlIGd6aXAgQ1JDMzIgZW5z dXJlcyB0aGF0IDQgYnl0ZXMgYXJlCi0gICAgICAgICAqIHByZXNlbnQgYWZ0ZXIgdGhlIGNvbXBy ZXNzZWQgc3RyZWFtLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGVyciAhPSBaX09LIHx8IHMt PmluYnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZp bGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBa X0JVRlNJWkU7Ci0KLSAgICBlcnJubyA9IDA7Ci0gICAgcy0+ZmlsZSA9IGZkIDwgMCA/IEZfT1BF TihwYXRoLCBmbW9kZSkgOiAoRklMRSopZmRvcGVuKGZkLCBmbW9kZSk7Ci0KLSAgICBpZiAocy0+ ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVM TDsKLSAgICB9Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0gICAgICAgIC8qIFdyaXRlIGEg dmVyeSBzaW1wbGUgLmd6IGhlYWRlcjoKLSAgICAgICAgICovCi0gICAgICAgIGZwcmludGYocy0+ ZmlsZSwgIiVjJWMlYyVjJWMlYyVjJWMlYyVjIiwgZ3pfbWFnaWNbMF0sIGd6X21hZ2ljWzFdLAot ICAgICAgICAgICAgIFpfREVGTEFURUQsIDAgLypmbGFncyovLCAwLDAsMCwwIC8qdGltZSovLCAw IC8qeGZsYWdzKi8sIE9TX0NPREUpOwotICAgICAgICBzLT5zdGFydCA9IDEwTDsKLSAgICAgICAg LyogV2UgdXNlIDEwTCBpbnN0ZWFkIG9mIGZ0ZWxsKHMtPmZpbGUpIHRvIGJlY2F1c2UgZnRlbGwg Y2F1c2VzIGFuCi0gICAgICAgICAqIGZmbHVzaCBvbiBzb21lIHN5c3RlbXMuIFRoaXMgdmVyc2lv biBvZiB0aGUgbGlicmFyeSBkb2Vzbid0IHVzZQotICAgICAgICAgKiBzdGFydCBhbnl3YXkgaW4g d3JpdGUgbW9kZSwgc28gdGhpcyBpbml0aWFsaXphdGlvbiBpcyBub3QKLSAgICAgICAgICogbmVj ZXNzYXJ5LgotICAgICAgICAgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjaGVja19oZWFkZXIo cyk7IC8qIHNraXAgdGhlIC5neiBoZWFkZXIgKi8KLSAgICAgICAgcy0+c3RhcnQgPSBmdGVsbChz LT5maWxlKSAtIHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGd6Rmls ZSlzOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3op IGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4KLSovCi1nekZpbGUgWkVYUE9SVCBnem9wZW4g KHBhdGgsIG1vZGUpCi0gICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjb25zdCBjaGFyICptb2Rl OwotewotICAgIHJldHVybiBnel9vcGVuIChwYXRoLCBtb2RlLCAtMSk7Ci19Ci0KLS8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotICAgICBBc3NvY2lhdGUgYSBnekZpbGUgd2l0aCB0aGUgZmlsZSBkZXNj cmlwdG9yIGZkLiBmZCBpcyBub3QgZHVwJ2VkIGhlcmUKLSAgIHRvIG1pbWljIHRoZSBiZWhhdmlv KHUpciBvZiBmZG9wZW4uCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pkb3BlbiAoZmQsIG1vZGUpCi0g ICAgaW50IGZkOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci17Ci0gICAgY2hhciBuYW1lWzIwXTsK LQotICAgIGlmIChmZCA8IDApIHJldHVybiAoZ3pGaWxlKVpfTlVMTDsKLSAgICBzcHJpbnRmKG5h bWUsICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCi0KLSAgICByZXR1cm4gZ3pf b3BlbiAobmFtZSwgbW9kZSwgZmQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVw ZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIHN0cmF0ZWd5Ci0gKi8KLWludCBaRVhQT1JU IGd6c2V0cGFyYW1zIChmaWxlLCBsZXZlbCwgc3RyYXRlZ3kpCi0gICAgZ3pGaWxlIGZpbGU7Ci0g ICAgaW50IGxldmVsOwotICAgIGludCBzdHJhdGVneTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAo Z3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3Jykg cmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgLyogTWFrZSByb29tIHRvIGFsbG93IGZsdXNo aW5nICovCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgIHMt PnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRi dWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICBz LT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291 dCA9IFpfQlVGU0laRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmbGF0ZVBhcmFtcyAoJihzLT5z dHJlYW0pLCBsZXZlbCwgc3RyYXRlZ3kpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAg ICAgUmVhZCBhIGJ5dGUgZnJvbSBhIGd6X3N0cmVhbTsgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWls X2luLiBSZXR1cm4gRU9GCi0gICBmb3IgZW5kIG9mIGZpbGUuCi0gICBJTiBhc3NlcnRpb246IHRo ZSBzdHJlYW0gcyBoYXMgYmVlbiBzdWNlc3NmdWxseSBvcGVuZWQgZm9yIHJlYWRpbmcuCi0qLwot bG9jYWwgaW50IGdldF9ieXRlKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGlmIChzLT56 X2VvZikgcmV0dXJuIEVPRjsKLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAg ICAgICAgZXJybm8gPSAwOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSBmcmVhZChzLT5p bmJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFp bF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICBpZiAo ZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICByZXR1cm4g RU9GOwotICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0g ICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbi0tOwotICAgIHJldHVybiAqKHMtPnN0cmVhbS5u ZXh0X2luKSsrOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIENoZWNrIHRoZSBn emlwIGhlYWRlciBvZiBhIGd6X3N0cmVhbSBvcGVuZWQgZm9yIHJlYWRpbmcuIFNldCB0aGUgc3Ry ZWFtCi0gICAgbW9kZSB0byB0cmFuc3BhcmVudCBpZiB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgaXMg bm90IHByZXNlbnQ7IHNldCBzLT5lcnIKLSAgICB0byBaX0RBVEFfRVJST1IgaWYgdGhlIG1hZ2lj IGhlYWRlciBpcyBwcmVzZW50IGJ1dCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyCi0gICAgaXMgaW5j b3JyZWN0LgotICAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBhbHJlYWR5IGJlZW4g Y3JlYXRlZCBzdWNlc3NmdWxseTsKLSAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gaXMgemVybyBm b3IgdGhlIGZpcnN0IHRpbWUsIGJ1dCBtYXkgYmUgbm9uLXplcm8KLSAgICAgICBmb3IgY29uY2F0 ZW5hdGVkIC5neiBmaWxlcy4KLSovCi1sb2NhbCB2b2lkIGNoZWNrX2hlYWRlcihzKQotICAgIGd6 X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgbWV0aG9kOyAvKiBtZXRob2QgYnl0ZSAqLwotICAgIGlu dCBmbGFnczsgIC8qIGZsYWdzIGJ5dGUgKi8KLSAgICB1SW50IGxlbjsKLSAgICBpbnQgYzsKLQot ICAgIC8qIEFzc3VyZSB0d28gYnl0ZXMgaW4gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gcGVlayBhaGVh ZCAtLSBoYW5kbGUgY2FzZQotICAgICAgIHdoZXJlIGZpcnN0IGJ5dGUgb2YgaGVhZGVyIGlzIGF0 IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGUgbGFzdAotICAgICAgIGd6aXAgc2VnbWVu dCAqLwotICAgIGxlbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICBpZiAobGVuIDwgMikgewot ICAgICAgICBpZiAobGVuKSBzLT5pbmJ1ZlswXSA9IHMtPnN0cmVhbS5uZXh0X2luWzBdOwotICAg ICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGxlbiA9IGZyZWFkKHMtPmluYnVmICsgbGVuLCAxLCBa X0JVRlNJWkUgPj4gbGVuLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIGZlcnJv cihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxf aW4gKz0gbGVuOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAg ICBpZiAocy0+c3RyZWFtLmF2YWlsX2luIDwgMikgewotICAgICAgICAgICAgcy0+dHJhbnNwYXJl bnQgPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K LSAgICB9Ci0KLSAgICAvKiBQZWVrIGFoZWFkIHRvIGNoZWNrIHRoZSBnemlwIG1hZ2ljIGhlYWRl ciAqLwotICAgIGlmIChzLT5zdHJlYW0ubmV4dF9pblswXSAhPSBnel9tYWdpY1swXSB8fAotICAg ICAgICBzLT5zdHJlYW0ubmV4dF9pblsxXSAhPSBnel9tYWdpY1sxXSkgewotICAgICAgICBzLT50 cmFuc3BhcmVudCA9IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2 YWlsX2luIC09IDI7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gKz0gMjsKLQotICAgIC8qIENoZWNr IHRoZSByZXN0IG9mIHRoZSBnemlwIGhlYWRlciAqLwotICAgIG1ldGhvZCA9IGdldF9ieXRlKHMp OwotICAgIGZsYWdzID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKG1ldGhvZCAhPSBaX0RFRkxBVEVE IHx8IChmbGFncyAmIFJFU0VSVkVEKSAhPSAwKSB7Ci0gICAgICAgIHMtPnpfZXJyID0gWl9EQVRB X0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogRGlzY2FyZCB0aW1lLCB4 ZmxhZ3MgYW5kIE9TIGNvZGU6ICovCi0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCA2OyBsZW4rKykg KHZvaWQpZ2V0X2J5dGUocyk7Ci0KLSAgICBpZiAoKGZsYWdzICYgRVhUUkFfRklFTEQpICE9IDAp IHsgLyogc2tpcCB0aGUgZXh0cmEgZmllbGQgKi8KLSAgICAgICAgbGVuICA9ICAodUludClnZXRf Ynl0ZShzKTsKLSAgICAgICAgbGVuICs9ICgodUludClnZXRfYnl0ZShzKSk8PDg7Ci0gICAgICAg IC8qIGxlbiBpcyBnYXJiYWdlIGlmIEVPRiBidXQgdGhlIGxvb3AgYmVsb3cgd2lsbCBxdWl0IGFu eXdheSAqLwotICAgICAgICB3aGlsZSAobGVuLS0gIT0gMCAmJiBnZXRfYnl0ZShzKSAhPSBFT0Yp IDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIE9SSUdfTkFNRSkgIT0gMCkgeyAvKiBza2lwIHRo ZSBvcmlnaW5hbCBmaWxlIG5hbWUgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykp ICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIENPTU1FTlQpICE9 IDApIHsgICAvKiBza2lwIHRoZSAuZ3ogZmlsZSBjb21tZW50ICovCi0gICAgICAgIHdoaWxlICgo YyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxh Z3MgJiBIRUFEX0NSQykgIT0gMCkgeyAgLyogc2tpcCB0aGUgaGVhZGVyIGNyYyAqLwotICAgICAg ICBmb3IgKGxlbiA9IDA7IGxlbiA8IDI7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLSAgICB9 Ci0gICAgcy0+el9lcnIgPSBzLT56X2VvZiA/IFpfREFUQV9FUlJPUiA6IFpfT0s7Ci19Ci0KLSAv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSAqIENsZWFudXAgdGhlbiBmcmVlIHRoZSBnaXZlbiBnel9z dHJlYW0uIFJldHVybiBhIHpsaWIgZXJyb3IgY29kZS4KLSAgIFRyeSBmcmVlaW5nIGluIHRoZSBy ZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zLgotICovCi1sb2NhbCBpbnQgZGVzdHJveSAocykK LSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IGVyciA9IFpfT0s7Ci0KLSAgICBpZiAoIXMp IHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLQotICAgIGlm IChzLT5zdHJlYW0uc3RhdGUgIT0gTlVMTCkgewotICAgICAgICBpZiAocy0+bW9kZSA9PSAndycp IHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJP UjsKLSNlbHNlCi0gICAgICAgICAgICBlcnIgPSBkZWZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0j ZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChzLT5tb2RlID09ICdyJykgewotICAgICAgICAgICAg ZXJyID0gaW5mbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm IChzLT5maWxlICE9IE5VTEwgJiYgZmNsb3NlKHMtPmZpbGUpKSB7Ci0jaWZkZWYgRVNQSVBFCi0g ICAgICAgIGlmIChlcnJubyAhPSBFU1BJUEUpIC8qIGZjbG9zZSBpcyBicm9rZW4gZm9yIHBpcGVz IGluIEhQL1VYICovCi0jZW5kaWYKLSAgICAgICAgICAgIGVyciA9IFpfRVJSTk87Ci0gICAgfQot ICAgIGlmIChzLT56X2VyciA8IDApIGVyciA9IHMtPnpfZXJyOwotCi0gICAgVFJZRlJFRShzLT5p bmJ1Zik7Ci0gICAgVFJZRlJFRShzLT5vdXRidWYpOwotICAgIFRSWUZSRUUocy0+cGF0aCk7Ci0g ICAgVFJZRlJFRShzKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0vKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJv bSB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiBi eXRlcyBhY3R1YWxseSByZWFkICgwIGZvciBlbmQgb2YgZmlsZSkuCi0qLwotaW50IFpFWFBPUlQg Z3pyZWFkIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcCBidWY7 Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZp bGU7Ci0gICAgQnl0ZWYgKnN0YXJ0ID0gKEJ5dGVmKilidWY7IC8qIHN0YXJ0aW5nIHBvaW50IGZv ciBjcmMgY29tcHV0YXRpb24gKi8KLSAgICBCeXRlICAqbmV4dF9vdXQ7IC8qID09IHN0cmVhbS5u ZXh0X291dCBidXQgbm90IGZvcmNlZCBmYXIgKGZvciBNU0RPUykgKi8KLQotICAgIGlmIChzID09 IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlm IChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykgcmV0dXJu IC0xOwotICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHJldHVybiAwOyAgLyogRU9G ICovCi0KLSAgICBuZXh0X291dCA9IChCeXRlKilidWY7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0 ID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IGxlbjsKLQotICAgIGlm IChzLT5zdHJlYW0uYXZhaWxfb3V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgICpuZXh0 X291dCsrID0gcy0+YmFjazsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0Kys7Ci0gICAgICAg IHMtPnN0cmVhbS5hdmFpbF9vdXQtLTsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAg cy0+b3V0Kys7Ci0gICAgICAgIGlmIChzLT5sYXN0KSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9 IFpfU1RSRUFNX0VORDsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQot Ci0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCkgewotCi0gICAgICAgIGlmIChz LT50cmFuc3BhcmVudCkgewotICAgICAgICAgICAgLyogQ29weSBmaXJzdCB0aGUgbG9va2FoZWFk IGJ5dGVzOiAqLwotICAgICAgICAgICAgdUludCBuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAg ICAgICAgICAgaWYgKG4gPiBzLT5zdHJlYW0uYXZhaWxfb3V0KSBuID0gcy0+c3RyZWFtLmF2YWls X291dDsKLSAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgICAgIHptZW1jcHko cy0+c3RyZWFtLm5leHRfb3V0LCBzLT5zdHJlYW0ubmV4dF9pbiwgbik7Ci0gICAgICAgICAgICAg ICAgbmV4dF9vdXQgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBu ZXh0X291dDsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiAgICs9IG47Ci0gICAg ICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPSBuOwotICAgICAgICAgICAgICAgIHMt PnN0cmVhbS5hdmFpbF9pbiAgLT0gbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChz LT5zdHJlYW0uYXZhaWxfb3V0ID4gMCkgewotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFp bF9vdXQgLT0gZnJlYWQobmV4dF9vdXQsIDEsIHMtPnN0cmVhbS5hdmFpbF9vdXQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5maWxlKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGxlbiAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAg ICAgcy0+aW4gICs9IGxlbjsKLSAgICAgICAgICAgIHMtPm91dCArPSBsZW47Ci0gICAgICAgICAg ICBpZiAobGVuID09IDApIHMtPnpfZW9mID0gMTsKLSAgICAgICAgICAgIHJldHVybiAoaW50KWxl bjsKLSAgICAgICAgfQotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDAgJiYgIXMt PnpfZW9mKSB7Ci0KLSAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgIHMtPnN0cmVh bS5hdmFpbF9pbiA9IGZyZWFkKHMtPmluYnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpOwotICAg ICAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg cy0+el9lb2YgPSAxOwotICAgICAgICAgICAgICAgIGlmIChmZXJyb3Iocy0+ZmlsZSkpIHsKLSAg ICAgICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZlb2Yocy0+ ZmlsZSkpIHsgICAgICAgIC8qIGF2b2lkIGVycm9yIGZvciBlbXB0eSBmaWxlICovCi0gICAgICAg ICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9TVFJFQU1fRU5EOwotICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBz LT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICB9Ci0gICAgICAgIHMtPmluICs9 IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9v dXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gaW5mbGF0ZSgmKHMtPnN0cmVhbSksIFpfTk9fRkxVU0gp OwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCAt PSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVB TV9FTkQpIHsKLSAgICAgICAgICAgIC8qIENoZWNrIENSQyBhbmQgb3JpZ2luYWwgc2l6ZSAqLwot ICAgICAgICAgICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCBzdGFydCwgKHVJbnQpKHMtPnN0cmVh bS5uZXh0X291dCAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICBzdGFydCA9IHMtPnN0cmVhbS5uZXh0 X291dDsKLQotICAgICAgICAgICAgaWYgKGdldExvbmcocykgIT0gcy0+Y3JjKSB7Ci0gICAgICAg ICAgICAgICAgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICh2b2lkKWdldExvbmcocyk7Ci0gICAgICAgICAgICAgICAgLyogVGhl IHVuY29tcHJlc3NlZCBsZW5ndGggcmV0dXJuZWQgYnkgYWJvdmUgZ2V0bG9uZygpIG1heSBiZQot ICAgICAgICAgICAgICAgICAqIGRpZmZlcmVudCBmcm9tIHMtPm91dCBpbiBjYXNlIG9mIGNvbmNh dGVuYXRlZCAuZ3ogZmlsZXMuCi0gICAgICAgICAgICAgICAgICogQ2hlY2sgZm9yIHN1Y2ggZmls ZXM6Ci0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY2hlY2tfaGVhZGVyKHMp OwotICAgICAgICAgICAgICAgIGlmIChzLT56X2VyciA9PSBaX09LKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGluZmxhdGVSZXNldCgmKHMtPnN0cmVhbSkpOwotICAgICAgICAgICAgICAgICAgICBz LT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnpfZXJyICE9IFpfT0sgfHwgcy0+el9l b2YpIGJyZWFrOwotICAgIH0KLSAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUlu dCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLQotICAgIHJldHVybiAoaW50KShsZW4g LSBzLT5zdHJlYW0uYXZhaWxfb3V0KTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAg ICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gZ3pnZXRjIHJldHVy bnMgdGhpcyBieXRlCi0gICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgot Ki8KLWludCBaRVhQT1JUIGd6Z2V0YyhmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIHVu c2lnbmVkIGNoYXIgYzsKLQotICAgIHJldHVybiBnenJlYWQoZmlsZSwgJmMsIDEpID09IDEgPyBj IDogLTE7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBQdXNoIG9uZSBieXRl IGJhY2sgb250byB0aGUgc3RyZWFtLgotKi8KLWludCBaRVhQT1JUIGd6dW5nZXRjKGMsIGZpbGUp Ci0gICAgaW50IGM7Ci0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6 X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicgfHwg YyA9PSBFT0YgfHwgcy0+YmFjayAhPSBFT0YpIHJldHVybiBFT0Y7Ci0gICAgcy0+YmFjayA9IGM7 Ci0gICAgcy0+b3V0LS07Ci0gICAgcy0+bGFzdCA9IChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQp OwotICAgIGlmIChzLT5sYXN0KSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwot ICAgIHJldHVybiBjOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUmVhZHMg Ynl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJl Ci0gICByZWFkLCBvciBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVk IHRvIGJ1Ziwgb3IgYW4KLSAgIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4g IFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkCi0gICB3aXRoIGEgbnVsbCBjaGFyYWN0ZXIu Ci0gICAgICBnemdldHMgcmV0dXJucyBidWYsIG9yIFpfTlVMTCBpbiBjYXNlIG9mIGVycm9yLgot Ci0gICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1pemVkIGF0IGFs bC4KLSovCi1jaGFyICogWkVYUE9SVCBnemdldHMoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxl IGZpbGU7Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBsZW47Ci17Ci0gICAgY2hhciAqYiA9IGJ1 ZjsKLSAgICBpZiAoYnVmID09IFpfTlVMTCB8fCBsZW4gPD0gMCkgcmV0dXJuIFpfTlVMTDsKLQot ICAgIHdoaWxlICgtLWxlbiA+IDAgJiYgZ3pyZWFkKGZpbGUsIGJ1ZiwgMSkgPT0gMSAmJiAqYnVm KysgIT0gJ1xuJykgOwotICAgICpidWYgPSAnXDAnOwotICAgIHJldHVybiBiID09IGJ1ZiAmJiBs ZW4gPiAwID8gWl9OVUxMIDogYjsKLX0KLQotCi0jaWZuZGVmIE5PX0daQ09NUFJFU1MKLS8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXBy ZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3p3cml0ZSByZXR1cm5z IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9y KS4KLSovCi1pbnQgWkVYUE9SVCBnendyaXRlIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUg ZmlsZTsKLSAgICB2b2lkcGMgYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKLXsKLSAgICBnel9zdHJl YW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2Rl ICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgcy0+c3RyZWFtLm5leHRfaW4g PSAoQnl0ZWYqKWJ1ZjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSBsZW47Ci0KLSAgICB3aGls ZSAocy0+c3RyZWFtLmF2YWlsX2luICE9IDApIHsKLQotICAgICAgICBpZiAocy0+c3RyZWFtLmF2 YWlsX291dCA9PSAwKSB7Ci0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91 dGJ1ZjsKLSAgICAgICAgICAgIGlmIChmd3JpdGUocy0+b3V0YnVmLCAxLCBaX0JVRlNJWkUsIHMt PmZpbGUpICE9IFpfQlVGU0laRSkgewotICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJO TzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMt PnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+aW4g Kz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWls X291dDsKLSAgICAgICAgcy0+el9lcnIgPSBkZWZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19GTFVT SCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0 IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LKSBi cmVhazsKLSAgICB9Ci0gICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCAoY29uc3QgQnl0ZWYgKili dWYsIGxlbik7Ci0KLSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX2luKTsK LX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFu ZCB3cml0ZXMgdGhlIGFyZ3MgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgotICAgY29udHJv bCBvZiB0aGUgZm9ybWF0IHN0cmluZywgYXMgaW4gZnByaW50Zi4gZ3pwcmludGYgcmV0dXJucyB0 aGUgbnVtYmVyIG9mCi0gICB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBp biBjYXNlIG9mIGVycm9yKS4KLSovCi0jaWZkZWYgU1REQwotI2luY2x1ZGUgPHN0ZGFyZy5oPgot Ci1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0 LCAvKiBhcmdzICovIC4uLikKLXsKLSAgICBjaGFyIGJ1ZltaX1BSSU5URl9CVUZTSVpFXTsKLSAg ICB2YV9saXN0IHZhOwotICAgIGludCBsZW47Ci0KLSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9 IDA7Ci0gICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0jaWZkZWYgTk9fdnNucHJpbnRmCi0jICBp ZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICh2b2lkKXZzcHJpbnRmKGJ1ZiwgZm9ybWF0LCB2 YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemVvZihidWYp OyBsZW4rKykKLSAgICAgICAgaWYgKGJ1ZltsZW5dID09IDApIGJyZWFrOwotIyAgZWxzZQotICAg IGxlbiA9IHZzcHJpbnRmKGJ1ZiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSMgIGVu ZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJp bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAg bGVuID0gc3RybGVuKGJ1Zik7Ci0jICBlbHNlCi0gICAgbGVuID0gdnNucHJpbnRmKGJ1Ziwgc2l6 ZW9mKGJ1ZiksIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0jICBlbmRpZgotI2VuZGlm Ci0gICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSAoaW50KXNpemVvZihidWYpIHx8IGJ1ZltzaXpl b2YoYnVmKSAtIDFdICE9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnendyaXRl KGZpbGUsIGJ1ZiwgKHVuc2lnbmVkKWxlbik7Ci19Ci0jZWxzZSAvKiBub3QgQU5TSSBDICovCi0K LWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1 LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICAgICAgICAgICAgICAgICBhMTEsIGExMiwg YTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApCi0gICAgZ3pGaWxlIGZpbGU7 Ci0gICAgY29uc3QgY2hhciAqZm9ybWF0OwotICAgIGludCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2 LCBhNywgYTgsIGE5LCBhMTAsCi0gICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYs IGExNywgYTE4LCBhMTksIGEyMDsKLXsKLSAgICBjaGFyIGJ1ZltaX1BSSU5URl9CVUZTSVpFXTsK LSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwotI2lmZGVmIE5P X3NucHJpbnRmCi0jICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCi0gICAgc3ByaW50ZihidWYsIGZv cm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgYTksIGEx MCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAg ICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemVvZihidWYpOyBsZW4rKykKLSAgICAgICAgaWYgKGJ1 ZltsZW5dID09IDApIGJyZWFrOwotIyAgZWxzZQotICAgIGxlbiA9IHNwcmludGYoYnVmLCBmb3Jt YXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICBhOSwg YTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwot IyAgZW5kaWYKLSNlbHNlCi0jICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAotICAgIHNucHJpbnRm KGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4 LAotICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGEx NywgYTE4LCBhMTksIGEyMCk7Ci0gICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jICBlbHNlCi0gICAg bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwg YTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMs IGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0jICBlbmRpZgotI2VuZGlmCi0g ICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSBzaXplb2YoYnVmKSB8fCBidWZbc2l6ZW9mKGJ1Zikg LSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCBi dWYsIGxlbik7Ci19Ci0jZW5kaWYKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBXcml0 ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQg ZmlsZS4KLSAgIGd6cHV0YyByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyB3cml0dGVuLCBvciAt MSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0YyhmaWxlLCBjKQotICAg IGd6RmlsZSBmaWxlOwotICAgIGludCBjOwotewotICAgIHVuc2lnbmVkIGNoYXIgY2MgPSAodW5z aWduZWQgY2hhcikgYzsgLyogcmVxdWlyZWQgZm9yIGJpZyBlbmRpYW4gc3lzdGVtcyAqLwotCi0g ICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgJmNjLCAxKSA9PSAxID8gKGludCljYyA6IC0xOwotfQot Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgV3JpdGVzIHRoZSBnaXZlbiBudWxsLXRl cm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUsIGV4Y2x1ZGluZwotICAgdGhl IHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51 bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0qLwot aW50IFpFWFBPUlQgZ3pwdXRzKGZpbGUsIHMpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgY29uc3Qg Y2hhciAqczsKLXsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCAoY2hhciopcywgKHVuc2lnbmVk KXN0cmxlbihzKSk7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEZsdXNoZXMg YWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gVGhlIHBhcmFtZXRl cgotICAgZmx1c2ggaXMgYXMgaW4gdGhlIGRlZmxhdGUoKSBmdW5jdGlvbi4KLSovCi1sb2NhbCBp bnQgZG9fZmx1c2ggKGZpbGUsIGZsdXNoKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCBmbHVz aDsKLXsKLSAgICB1SW50IGxlbjsKLSAgICBpbnQgZG9uZSA9IDA7Ci0gICAgZ3pfc3RyZWFtICpz ID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAn dycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7 IC8qIHNob3VsZCBiZSB6ZXJvIGFscmVhZHkgYW55d2F5ICovCi0KLSAgICBmb3IgKDs7KSB7Ci0g ICAgICAgIGxlbiA9IFpfQlVGU0laRSAtIHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAg aWYgKGxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoKHVJbnQpZndyaXRlKHMtPm91dGJ1Ziwg MSwgbGVuLCBzLT5maWxlKSAhPSBsZW4pIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpf RVJSTk87Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFpfRVJSTk87Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBz LT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChk b25lKSBicmVhazsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAg ICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSksIGZsdXNoKTsKLSAgICAgICAgcy0+ b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgLyogSWdub3JlIHRoZSBzZWNv bmQgb2YgdHdvIGNvbnNlY3V0aXZlIGZsdXNoZXM6ICovCi0gICAgICAgIGlmIChsZW4gPT0gMCAm JiBzLT56X2VyciA9PSBaX0JVRl9FUlJPUikgcy0+el9lcnIgPSBaX09LOwotCi0gICAgICAgIC8q IGRlZmxhdGUgaGFzIGZpbmlzaGVkIGZsdXNoaW5nIG9ubHkgd2hlbiBpdCBoYXNuJ3QgdXNlZCB1 cAotICAgICAgICAgKiBhbGwgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZl cjoKLSAgICAgICAgICovCi0gICAgICAgIGRvbmUgPSAocy0+c3RyZWFtLmF2YWlsX291dCAhPSAw IHx8IHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCk7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyICE9 IFpfT0sgJiYgcy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBicmVhazsKLSAgICB9Ci0gICAgcmV0 dXJuICBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0KLWlu dCBaRVhQT1JUIGd6Zmx1c2ggKGZpbGUsIGZsdXNoKQotICAgICBnekZpbGUgZmlsZTsKLSAgICAg aW50IGZsdXNoOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0gICAg aW50IGVyciA9IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCk7Ci0KLSAgICBpZiAoZXJyKSByZXR1cm4g ZXJyOwotICAgIGZmbHVzaChzLT5maWxlKTsKLSAgICByZXR1cm4gIHMtPnpfZXJyID09IFpfU1RS RUFNX0VORCA/IFpfT0sgOiBzLT56X2VycjsKLX0KLSNlbmRpZiAvKiBOT19HWkNPTVBSRVNTICov Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgU2V0cyB0aGUgc3RhcnRpbmcgcG9zaXRp b24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZSBnaXZlbgotICAgY29tcHJl c3NlZCBmaWxlLiBUaGUgb2Zmc2V0IHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhl Ci0gICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBsb2NhdGlvbiBhcyBt ZWFzdXJlZCBpbiBieXRlcyBmcm9tCi0gICB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1bmNvbXByZXNz ZWQgc3RyZWFtLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotICAgICAgU0VFS19FTkQgaXMgbm90 IGltcGxlbWVudGVkLCByZXR1cm5zIGVycm9yLgotICAgICAgSW4gdGhpcyB2ZXJzaW9uIG9mIHRo ZSBsaWJyYXJ5LCBnenNlZWsgY2FuIGJlIGV4dHJlbWVseSBzbG93LgotKi8KLXpfb2ZmX3QgWkVY UE9SVCBnenNlZWsgKGZpbGUsIG9mZnNldCwgd2hlbmNlKQotICAgIGd6RmlsZSBmaWxlOwotICAg IHpfb2ZmX3Qgb2Zmc2V0OwotICAgIGludCB3aGVuY2U7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0g KGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgd2hlbmNlID09IFNFRUtf RU5EIHx8Ci0gICAgICAgIHMtPnpfZXJyID09IFpfRVJSTk8gfHwgcy0+el9lcnIgPT0gWl9EQVRB X0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAtMUw7Ci0gICAgfQotCi0gICAgaWYgKHMtPm1vZGUg PT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICByZXR1cm4gLTFMOwotI2Vs c2UKLSAgICAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkgewotICAgICAgICAgICAgb2Zmc2V0 IC09IHMtPmluOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXQgPCAwKSByZXR1cm4gLTFM OwotCi0gICAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIHpl cm8gYnl0ZXMgdG8gd3JpdGUuICovCi0gICAgICAgIGlmIChzLT5pbmJ1ZiA9PSBaX05VTEwpIHsK LSAgICAgICAgICAgIHMtPmluYnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7IC8qIGZvciBz ZWVraW5nICovCi0gICAgICAgICAgICBpZiAocy0+aW5idWYgPT0gWl9OVUxMKSByZXR1cm4gLTFM OwotICAgICAgICAgICAgem1lbXplcm8ocy0+aW5idWYsIFpfQlVGU0laRSk7Ci0gICAgICAgIH0K LSAgICAgICAgd2hpbGUgKG9mZnNldCA+IDApICB7Ci0gICAgICAgICAgICB1SW50IHNpemUgPSBa X0JVRlNJWkU7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0IDwgWl9CVUZTSVpFKSBzaXplID0gKHVJ bnQpb2Zmc2V0OwotCi0gICAgICAgICAgICBzaXplID0gZ3p3cml0ZShmaWxlLCBzLT5pbmJ1Ziwg c2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gLTFMOwotCi0gICAgICAg ICAgICBvZmZzZXQgLT0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcy0+aW47Ci0j ZW5kaWYKLSAgICB9Ci0gICAgLyogUmVzdCBvZiBmdW5jdGlvbiBpcyBmb3IgcmVhZGluZyBvbmx5 ICovCi0KLSAgICAvKiBjb21wdXRlIGFic29sdXRlIHBvc2l0aW9uICovCi0gICAgaWYgKHdoZW5j ZSA9PSBTRUVLX0NVUikgewotICAgICAgICBvZmZzZXQgKz0gcy0+b3V0OwotICAgIH0KLSAgICBp ZiAob2Zmc2V0IDwgMCkgcmV0dXJuIC0xTDsKLQotICAgIGlmIChzLT50cmFuc3BhcmVudCkgewot ICAgICAgICAvKiBtYXAgdG8gZnNlZWsgKi8KLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAg ICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBz LT5pbmJ1ZjsKLSAgICAgICAgaWYgKGZzZWVrKHMtPmZpbGUsIG9mZnNldCwgU0VFS19TRVQpIDwg MCkgcmV0dXJuIC0xTDsKLQotICAgICAgICBzLT5pbiA9IHMtPm91dCA9IG9mZnNldDsKLSAgICAg ICAgcmV0dXJuIG9mZnNldDsKLSAgICB9Ci0KLSAgICAvKiBGb3IgYSBuZWdhdGl2ZSBzZWVrLCBy ZXdpbmQgYW5kIHVzZSBwb3NpdGl2ZSBzZWVrICovCi0gICAgaWYgKG9mZnNldCA+PSBzLT5vdXQp IHsKLSAgICAgICAgb2Zmc2V0IC09IHMtPm91dDsKLSAgICB9IGVsc2UgaWYgKGd6cmV3aW5kKGZp bGUpIDwgMCkgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLSAgICAvKiBvZmZzZXQgaXMg bm93IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcC4gKi8KLQotICAgIGlmIChvZmZzZXQgIT0g MCAmJiBzLT5vdXRidWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgIHMtPm91dGJ1ZiA9IChCeXRlKilB TExPQyhaX0JVRlNJWkUpOwotICAgICAgICBpZiAocy0+b3V0YnVmID09IFpfTlVMTCkgcmV0dXJu IC0xTDsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCAmJiBzLT5iYWNrICE9IEVPRikgewotICAgICAg ICBzLT5iYWNrID0gRU9GOwotICAgICAgICBzLT5vdXQrKzsKLSAgICAgICAgb2Zmc2V0LS07Ci0g ICAgICAgIGlmIChzLT5sYXN0KSBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICB9Ci0gICAg d2hpbGUgKG9mZnNldCA+IDApICB7Ci0gICAgICAgIGludCBzaXplID0gWl9CVUZTSVpFOwotICAg ICAgICBpZiAob2Zmc2V0IDwgWl9CVUZTSVpFKSBzaXplID0gKGludClvZmZzZXQ7Ci0KLSAgICAg ICAgc2l6ZSA9IGd6cmVhZChmaWxlLCBzLT5vdXRidWYsICh1SW50KXNpemUpOwotICAgICAgICBp ZiAoc2l6ZSA8PSAwKSByZXR1cm4gLTFMOwotICAgICAgICBvZmZzZXQgLT0gc2l6ZTsKLSAgICB9 Ci0gICAgcmV0dXJuIHMtPm91dDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJl d2luZHMgaW5wdXQgZmlsZS4KLSovCi1pbnQgWkVYUE9SVCBnenJld2luZCAoZmlsZSkKLSAgICBn ekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0g ICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIC0xOwotCi0gICAgcy0+ el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBzLT5iYWNrID0gRU9GOwotICAg IHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1 ZjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBpZiAoIXMtPnRyYW5z cGFyZW50KSAodm9pZClpbmZsYXRlUmVzZXQoJnMtPnN0cmVhbSk7Ci0gICAgcy0+aW4gPSAwOwot ICAgIHMtPm91dCA9IDA7Ci0gICAgcmV0dXJuIGZzZWVrKHMtPmZpbGUsIHMtPnN0YXJ0LCBTRUVL X1NFVCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIHRoZSBzdGFy dGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlCi0gICBn aXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBv ZiBieXRlcyBpbiB0aGUKLSAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KLSovCi16X29mZl90 IFpFWFBPUlQgZ3p0ZWxsIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIHJldHVybiBn enNlZWsoZmlsZSwgMEwsIFNFRUtfQ1VSKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g ICAgIFJldHVybnMgMSB3aGVuIEVPRiBoYXMgcHJldmlvdXNseSBiZWVuIGRldGVjdGVkIHJlYWRp bmcgdGhlIGdpdmVuCi0gICBpbnB1dCBzdHJlYW0sIG90aGVyd2lzZSB6ZXJvLgotKi8KLWludCBa RVhQT1JUIGd6ZW9mIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAq cyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICAvKiBXaXRoIGNvbmNhdGVuYXRlZCBjb21wcmVz c2VkIGZpbGVzIHRoYXQgY2FuIGhhdmUgZW1iZWRkZWQKLSAgICAgKiBjcmMgdHJhaWxlcnMsIHpf ZW9mIGlzIG5vIGxvbmdlciB0aGUgb25seS9iZXN0IGluZGljYXRvciBvZiBFT0YKLSAgICAgKiBv biBhIGd6X3N0cmVhbS4gSGFuZGxlIGVuZC1vZi1zdHJlYW0gZXJyb3IgZXhwbGljaXRseSBoZXJl LgotICAgICAqLwotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAw OwotICAgIGlmIChzLT56X2VvZikgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHMtPnpfZXJyID09IFpf U1RSRUFNX0VORDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBPdXRwdXRzIGEgbG9u ZyBpbiBMU0Igb3JkZXIgdG8gdGhlIGdpdmVuIGZpbGUKLSovCi1sb2NhbCB2b2lkIHB1dExvbmcg KGZpbGUsIHgpCi0gICAgRklMRSAqZmlsZTsKLSAgICB1TG9uZyB4OwotewotICAgIGludCBuOwot ICAgIGZvciAobiA9IDA7IG4gPCA0OyBuKyspIHsKLSAgICAgICAgZnB1dGMoKGludCkoeCAmIDB4 ZmYpLCBmaWxlKTsKLSAgICAgICAgeCA+Pj0gODsKLSAgICB9Ci19Ci0KLS8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotICAgUmVhZHMgYSBsb25nIGluIExTQiBvcmRlciBmcm9tIHRoZSBnaXZlbiBnel9z dHJlYW0uIFNldHMgel9lcnIgaW4gY2FzZQotICAgb2YgZXJyb3IuCi0qLwotbG9jYWwgdUxvbmcg Z2V0TG9uZyAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgdUxvbmcgeCA9ICh1TG9uZyln ZXRfYnl0ZShzKTsKLSAgICBpbnQgYzsKLQotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8 PDg7Ci0gICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8MTY7Ci0gICAgYyA9IGdldF9ieXRl KHMpOwotICAgIGlmIChjID09IEVPRikgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgeCAr PSAoKHVMb25nKWMpPDwyNDsKLSAgICByZXR1cm4geDsKLX0KLQotLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2Vz IHRoZSBjb21wcmVzc2VkIGZpbGUKLSAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21w cmVzc2lvbiBzdGF0ZS4KLSovCi1pbnQgWkVYUE9SVCBnemNsb3NlIChmaWxlKQotICAgIGd6Rmls ZSBmaWxlOwotewotICAgIGludCBlcnI7Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSop ZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAg IGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0 dXJuIFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgZXJyID0gZG9fZmx1c2ggKGZpbGUs IFpfRklOSVNIKTsKLSAgICAgICAgaWYgKGVyciAhPSBaX09LKSByZXR1cm4gZGVzdHJveSgoZ3pf c3RyZWFtKilmaWxlKTsKLQotICAgICAgICBwdXRMb25nIChzLT5maWxlLCBzLT5jcmMpOwotICAg ICAgICBwdXRMb25nIChzLT5maWxlLCAodUxvbmcpKHMtPmluICYgMHhmZmZmZmZmZikpOwotI2Vu ZGlmCi0gICAgfQotICAgIHJldHVybiBkZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotfQotCi0v KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3Ig dGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJlZCBvbiB0aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQg ZmlsZS4gZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gSWYgYW4KLSAgIGVycm9y IG9jY3VyZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBub3QgaW4gdGhlIGNvbXByZXNzaW9uIGxp YnJhcnksCi0gICBlcnJudW0gaXMgc2V0IHRvIFpfRVJSTk8gYW5kIHRoZSBhcHBsaWNhdGlvbiBt YXkgY29uc3VsdCBlcnJubwotICAgdG8gZ2V0IHRoZSBleGFjdCBlcnJvciBjb2RlLgotKi8KLWNv bnN0IGNoYXIgKiBaRVhQT1JUIGd6ZXJyb3IgKGZpbGUsIGVycm51bSkKLSAgICBnekZpbGUgZmls ZTsKLSAgICBpbnQgKmVycm51bTsKLXsKLSAgICBjaGFyICptOwotICAgIGd6X3N0cmVhbSAqcyA9 IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgICplcnJu dW0gPSBaX1NUUkVBTV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIChjb25zdCBjaGFyKilFUlJfTVNH KFpfU1RSRUFNX0VSUk9SKTsKLSAgICB9Ci0gICAgKmVycm51bSA9IHMtPnpfZXJyOwotICAgIGlm ICgqZXJybnVtID09IFpfT0spIHJldHVybiAoY29uc3QgY2hhciopIiI7Ci0KLSAgICBtID0gKGNo YXIqKSgqZXJybnVtID09IFpfRVJSTk8gPyB6c3RyZXJyb3IoZXJybm8pIDogcy0+c3RyZWFtLm1z Zyk7Ci0KLSAgICBpZiAobSA9PSBOVUxMIHx8ICptID09ICdcMCcpIG0gPSAoY2hhciopRVJSX01T RyhzLT56X2Vycik7Ci0KLSAgICBUUllGUkVFKHMtPm1zZyk7Ci0gICAgcy0+bXNnID0gKGNoYXIq KUFMTE9DKHN0cmxlbihzLT5wYXRoKSArIHN0cmxlbihtKSArIDMpOwotICAgIGlmIChzLT5tc2cg PT0gWl9OVUxMKSByZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOwotICAg IHN0cmNweShzLT5tc2csIHMtPnBhdGgpOwotICAgIHN0cmNhdChzLT5tc2csICI6ICIpOwotICAg IHN0cmNhdChzLT5tc2csIG0pOwotICAgIHJldHVybiAoY29uc3QgY2hhciopcy0+bXNnOwotfQot Ci0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQ2xlYXIgdGhlIGVycm9yIGFuZCBlbmQtb2Yt ZmlsZSBmbGFncywgYW5kIGRvIHRoZSBzYW1lIGZvciB0aGUgcmVhbCBmaWxlLgotKi8KLXZvaWQg WkVYUE9SVCBnemNsZWFyZXJyIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0 cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSByZXR1cm47 Ci0gICAgaWYgKHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgcy0+el9lcnIgPSBaX09LOwotICAg IHMtPnpfZW9mID0gMDsKLSAgICBjbGVhcmVycihzLT5maWxlKTsKLX0KZGlmZiAtciBhMDU3OGM3 OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvZ3psaWIuYwotLS0gL2Rl di9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9zeXMvc3JjL2NtZC9n cy96bGliL2d6bGliLmMJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBAIC0wLDAgKzEs NjM3IEBACisvKiBnemxpYi5jIC0tIHpsaWIgZnVuY3Rpb25zIGNvbW1vbiB0byByZWFkaW5nIGFu ZCB3cml0aW5nIGd6aXAgZmlsZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IE1hcmsgQWRs ZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJp Z2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaW5jbHVkZSAiZ3pndXRzLmgiCisKKyNpZiBk ZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfX01J TkdXMzJfXykKKyMgIGRlZmluZSBMU0VFSyBfbHNlZWtpNjQKKyNlbHNlCisjaWYgZGVmaW5lZChf TEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBMU0VF SyBsc2VlazY0CisjZWxzZQorIyAgZGVmaW5lIExTRUVLIGxzZWVrCisjZW5kaWYKKyNlbmRpZgor CisvKiBMb2NhbCBmdW5jdGlvbnMgKi8KK2xvY2FsIHZvaWQgZ3pfcmVzZXQgT0YoKGd6X3N0YXRl cCkpOworbG9jYWwgZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IHZvaWQgKiwgaW50LCBjb25zdCBj aGFyICopKTsKKworI2lmIGRlZmluZWQgVU5ERVJfQ0UKKworLyogTWFwIHRoZSBXaW5kb3dzIGVy cm9yIG51bWJlciBpbiBFUlJPUiB0byBhIGxvY2FsZS1kZXBlbmRlbnQgZXJyb3IgbWVzc2FnZQor ICAgc3RyaW5nIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LiAgVHlwaWNhbGx5LCB0aGUgdmFs dWVzIGZvciBFUlJPUiBjb21lCisgICBmcm9tIEdldExhc3RFcnJvci4KKworICAgVGhlIHN0cmlu ZyBwb2ludGVkIHRvIHNoYWxsIG5vdCBiZSBtb2RpZmllZCBieSB0aGUgYXBwbGljYXRpb24sIGJ1 dCBtYXkgYmUKKyAgIG92ZXJ3cml0dGVuIGJ5IGEgc3Vic2VxdWVudCBjYWxsIHRvIGd6X3N0cndp bmVycm9yCisKKyAgIFRoZSBnel9zdHJ3aW5lcnJvciBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2Ug dGhlIGN1cnJlbnQgc2V0dGluZyBvZgorICAgR2V0TGFzdEVycm9yLiAqLworY2hhciBaTElCX0lO VEVSTkFMICpnel9zdHJ3aW5lcnJvciAoZXJyb3IpCisgICAgIERXT1JEIGVycm9yOworeworICAg IHN0YXRpYyBjaGFyIGJ1ZlsxMDI0XTsKKworICAgIHdjaGFyX3QgKm1zZ2J1ZjsKKyAgICBEV09S RCBsYXN0ZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgRFdPUkQgY2hhcnMgPSBGb3JtYXRNZXNz YWdlKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNCisgICAgICAgIHwgRk9STUFUX01FU1NBR0Vf QUxMT0NBVEVfQlVGRkVSLAorICAgICAgICBOVUxMLAorICAgICAgICBlcnJvciwKKyAgICAgICAg MCwgLyogRGVmYXVsdCBsYW5ndWFnZSAqLworICAgICAgICAoTFBWT0lEKSZtc2didWYsCisgICAg ICAgIDAsCisgICAgICAgIE5VTEwpOworICAgIGlmIChjaGFycyAhPSAwKSB7CisgICAgICAgIC8q IElmIHRoZXJlIGlzIGFuIFxyXG4gYXBwZW5kZWQsIHphcCBpdC4gICovCisgICAgICAgIGlmIChj aGFycyA+PSAyCisgICAgICAgICAgICAmJiBtc2didWZbY2hhcnMgLSAyXSA9PSAnXHInICYmIG1z Z2J1ZltjaGFycyAtIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGNoYXJzIC09IDI7CisgICAg ICAgICAgICBtc2didWZbY2hhcnNdID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFy cyA+IHNpemVvZiAoYnVmKSAtIDEpIHsKKyAgICAgICAgICAgIGNoYXJzID0gc2l6ZW9mIChidWYp IC0gMTsKKyAgICAgICAgICAgIG1zZ2J1ZltjaGFyc10gPSAwOworICAgICAgICB9CisKKyAgICAg ICAgd2NzdG9tYnMoYnVmLCBtc2didWYsIGNoYXJzICsgMSk7CisgICAgICAgIExvY2FsRnJlZSht c2didWYpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3ByaW50ZihidWYsICJ1bmtub3du IHdpbjMyIGVycm9yICglbGQpIiwgZXJyb3IpOworICAgIH0KKworICAgIFNldExhc3RFcnJvcihs YXN0ZXJyKTsKKyAgICByZXR1cm4gYnVmOworfQorCisjZW5kaWYgLyogVU5ERVJfQ0UgKi8KKwor LyogUmVzZXQgZ3ppcCBmaWxlIHN0YXRlICovCitsb2NhbCB2b2lkIGd6X3Jlc2V0KHN0YXRlKQor ICAgIGd6X3N0YXRlcCBzdGF0ZTsKK3sKKyAgICBzdGF0ZS0+eC5oYXZlID0gMDsgICAgICAgICAg ICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9 PSBHWl9SRUFEKSB7ICAgLyogZm9yIHJlYWRpbmcgLi4uICovCisgICAgICAgIHN0YXRlLT5lb2Yg PSAwOyAgICAgICAgICAgICAvKiBub3QgYXQgZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgc3RhdGUt PnBhc3QgPSAwOyAgICAgICAgICAgIC8qIGhhdmUgbm90IHJlYWQgcGFzdCBlbmQgeWV0ICovCisg ICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOyAgICAgICAgICAvKiBsb29rIGZvciBnemlwIGhlYWRl ciAqLworICAgIH0KKyAgICBzdGF0ZS0+c2VlayA9IDA7ICAgICAgICAgICAgICAgIC8qIG5vIHNl ZWsgcmVxdWVzdCBwZW5kaW5nICovCisgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOyAg ICAvKiBjbGVhciBlcnJvciAqLworICAgIHN0YXRlLT54LnBvcyA9IDA7ICAgICAgICAgICAgICAg Lyogbm8gdW5jb21wcmVzc2VkIGRhdGEgeWV0ICovCisgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4g PSAwOyAgICAgICAvKiBubyBpbnB1dCBkYXRhIHlldCAqLworfQorCisvKiBPcGVuIGEgZ3ppcCBm aWxlIGVpdGhlciBieSBuYW1lIG9yIGZpbGUgZGVzY3JpcHRvci4gKi8KK2xvY2FsIGd6RmlsZSBn el9vcGVuKHBhdGgsIGZkLCBtb2RlKQorICAgIGNvbnN0IHZvaWQgKnBhdGg7CisgICAgaW50IGZk OworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpf c2l6ZV90IGxlbjsKKyAgICBpbnQgb2ZsYWc7CisjaWZkZWYgT19DTE9FWEVDCisgICAgaW50IGNs b2V4ZWMgPSAwOworI2VuZGlmCisjaWZkZWYgT19FWENMCisgICAgaW50IGV4Y2x1c2l2ZSA9IDA7 CisjZW5kaWYKKworICAgIC8qIGNoZWNrIGlucHV0ICovCisgICAgaWYgKHBhdGggPT0gTlVMTCkK KyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBhbGxvY2F0ZSBnekZpbGUgc3RydWN0dXJl IHRvIHJldHVybiAqLworICAgIHN0YXRlID0gKGd6X3N0YXRlcCltYWxsb2Moc2l6ZW9mKGd6X3N0 YXRlKSk7CisgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAg IHN0YXRlLT5zaXplID0gMDsgICAgICAgICAgICAvKiBubyBidWZmZXJzIGFsbG9jYXRlZCB5ZXQg Ki8KKyAgICBzdGF0ZS0+d2FudCA9IEdaQlVGU0laRTsgICAgLyogcmVxdWVzdGVkIGJ1ZmZlciBz aXplICovCisgICAgc3RhdGUtPm1zZyA9IE5VTEw7ICAgICAgICAgIC8qIG5vIGVycm9yIG1lc3Nh Z2UgeWV0ICovCisKKyAgICAvKiBpbnRlcnByZXQgbW9kZSAqLworICAgIHN0YXRlLT5tb2RlID0g R1pfTk9ORTsKKyAgICBzdGF0ZS0+bGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisgICAg c3RhdGUtPnN0cmF0ZWd5ID0gWl9ERUZBVUxUX1NUUkFURUdZOworICAgIHN0YXRlLT5kaXJlY3Qg PSAwOworICAgIHdoaWxlICgqbW9kZSkgeworICAgICAgICBpZiAoKm1vZGUgPj0gJzAnICYmICpt b2RlIDw9ICc5JykKKyAgICAgICAgICAgIHN0YXRlLT5sZXZlbCA9ICptb2RlIC0gJzAnOworICAg ICAgICBlbHNlCisgICAgICAgICAgICBzd2l0Y2ggKCptb2RlKSB7CisgICAgICAgICAgICBjYXNl ICdyJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEdaX1JFQUQ7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisjaWZuZGVmIE5PX0daQ09NUFJFU1MKKyAgICAgICAgICAgIGNhc2UgJ3cn OgorICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gR1pfV1JJVEU7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ bW9kZSA9IEdaX0FQUEVORDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAg ICAgICAgY2FzZSAnKyc6ICAgICAgIC8qIGNhbid0IHJlYWQgYW5kIHdyaXRlIGF0IHRoZSBzYW1l IHRpbWUgKi8KKyAgICAgICAgICAgICAgICBmcmVlKHN0YXRlKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGNhc2UgJ2InOiAgICAgICAvKiBpZ25vcmUgLS0gd2ls bCByZXF1ZXN0IGJpbmFyeSBhbnl3YXkgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRl ZiBPX0NMT0VYRUMKKyAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIGNsb2V4 ZWMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgT19FWENMCisg ICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICBleGNsdXNpdmUgPSAxOworICAg ICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAg ICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgc3RhdGUtPnN0 cmF0ZWd5ID0gWl9IVUZGTUFOX09OTFk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlICdSJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX1JMRTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ0YnOgorICAgICAgICAg ICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfRklYRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0g MTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAv KiBjb3VsZCBjb25zaWRlciBhcyBhbiBlcnJvciwgYnV0IGp1c3QgaWdub3JlICovCisgICAgICAg ICAgICAgICAgOworICAgICAgICAgICAgfQorICAgICAgICBtb2RlKys7CisgICAgfQorCisgICAg LyogbXVzdCBwcm92aWRlIGFuICJyIiwgInciLCBvciAiYSIgKi8KKyAgICBpZiAoc3RhdGUtPm1v ZGUgPT0gR1pfTk9ORSkgeworICAgICAgICBmcmVlKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuIE5V TEw7CisgICAgfQorCisgICAgLyogY2FuJ3QgZm9yY2UgdHJhbnNwYXJlbnQgcmVhZCAqLworICAg IGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7CisgICAgICAgIGlmIChzdGF0ZS0+ZGlyZWN0 KSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwor ICAgICAgICB9CisgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOyAgICAgIC8qIGZvciBlbXB0eSBm aWxlICovCisgICAgfQorCisgICAgLyogc2F2ZSB0aGUgcGF0aCBuYW1lIGZvciBlcnJvciBtZXNz YWdlcyAqLworI2lmZGVmIFdJREVDSEFSCisgICAgaWYgKGZkID09IC0yKSB7CisgICAgICAgIGxl biA9IHdjc3RvbWJzKE5VTEwsIHBhdGgsIDApOworICAgICAgICBpZiAobGVuID09ICh6X3NpemVf dCktMSkKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAg ICAgICBsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKilwYXRoKTsKKyAgICBzdGF0ZS0+cGF0aCA9 IChjaGFyICopbWFsbG9jKGxlbiArIDEpOworICAgIGlmIChzdGF0ZS0+cGF0aCA9PSBOVUxMKSB7 CisgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjaWZk ZWYgV0lERUNIQVIKKyAgICBpZiAoZmQgPT0gLTIpCisgICAgICAgIGlmIChsZW4pCisgICAgICAg ICAgICB3Y3N0b21icyhzdGF0ZS0+cGF0aCwgcGF0aCwgbGVuICsgMSk7CisgICAgICAgIGVsc2UK KyAgICAgICAgICAgICooc3RhdGUtPnBhdGgpID0gMDsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiAh ZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgICAgICAo dm9pZClzbnByaW50ZihzdGF0ZS0+cGF0aCwgbGVuICsgMSwgIiVzIiwgKGNvbnN0IGNoYXIgKilw YXRoKTsKKyNlbHNlCisgICAgICAgIHN0cmNweShzdGF0ZS0+cGF0aCwgcGF0aCk7CisjZW5kaWYK KworICAgIC8qIGNvbXB1dGUgdGhlIGZsYWdzIGZvciBvcGVuKCkgKi8KKyAgICBvZmxhZyA9Cisj aWZkZWYgT19MQVJHRUZJTEUKKyAgICAgICAgT19MQVJHRUZJTEUgfAorI2VuZGlmCisjaWZkZWYg T19CSU5BUlkKKyAgICAgICAgT19CSU5BUlkgfAorI2VuZGlmCisjaWZkZWYgT19DTE9FWEVDCisg ICAgICAgIChjbG9leGVjID8gT19DTE9FWEVDIDogMCkgfAorI2VuZGlmCisgICAgICAgIChzdGF0 ZS0+bW9kZSA9PSBHWl9SRUFEID8KKyAgICAgICAgIE9fUkRPTkxZIDoKKyAgICAgICAgIChPX1dS T05MWSB8IE9fQ1JFQVQgfAorI2lmZGVmIE9fRVhDTAorICAgICAgICAgIChleGNsdXNpdmUgPyBP X0VYQ0wgOiAwKSB8CisjZW5kaWYKKyAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfV1JJVEUg PworICAgICAgICAgICBPX1RSVU5DIDoKKyAgICAgICAgICAgT19BUFBFTkQpKSk7CisKKyAgICAv KiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzIChvciBqdXN0IHVzZSBm ZCkgKi8KKyAgICBzdGF0ZS0+ZmQgPSBmZCA+IC0xID8gZmQgOiAoCisjaWZkZWYgV0lERUNIQVIK KyAgICAgICAgZmQgPT0gLTIgPyBfd29wZW4ocGF0aCwgb2ZsYWcsIDA2NjYpIDoKKyNlbmRpZgor ICAgICAgICBvcGVuKChjb25zdCBjaGFyICopcGF0aCwgb2ZsYWcsIDA2NjYpKTsKKyAgICBpZiAo c3RhdGUtPmZkID09IC0xKSB7CisgICAgICAgIGZyZWUoc3RhdGUtPnBhdGgpOworICAgICAgICBm cmVlKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzdGF0ZS0+ bW9kZSA9PSBHWl9BUFBFTkQpIHsKKyAgICAgICAgTFNFRUsoc3RhdGUtPmZkLCAwLCBTRUVLX0VO RCk7ICAvKiBzbyBnem9mZnNldCgpIGlzIGNvcnJlY3QgKi8KKyAgICAgICAgc3RhdGUtPm1vZGUg PSBHWl9XUklURTsgICAgICAgICAvKiBzaW1wbGlmeSBsYXRlciBjaGVja3MgKi8KKyAgICB9CisK KyAgICAvKiBzYXZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGZvciByZXdpbmRpbmcgKG9ubHkgaWYg cmVhZGluZykgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAgICAgICBz dGF0ZS0+c3RhcnQgPSBMU0VFSyhzdGF0ZS0+ZmQsIDAsIFNFRUtfQ1VSKTsKKyAgICAgICAgaWYg KHN0YXRlLT5zdGFydCA9PSAtMSkgc3RhdGUtPnN0YXJ0ID0gMDsKKyAgICB9CisKKyAgICAvKiBp bml0aWFsaXplIHN0cmVhbSAqLworICAgIGd6X3Jlc2V0KHN0YXRlKTsKKworICAgIC8qIHJldHVy biBzdHJlYW0gKi8KKyAgICByZXR1cm4gKGd6RmlsZSlzdGF0ZTsKK30KKworLyogLS0gc2VlIHps aWIuaCAtLSAqLworZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuKHBhdGgsIG1vZGUpCisgICAgY29uc3Qg Y2hhciAqcGF0aDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVu KHBhdGgsIC0xLCBtb2RlKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworZ3pGaWxlIFpF WFBPUlQgZ3pvcGVuNjQocGF0aCwgbW9kZSkKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNv bnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTEsIG1vZGUpOwor fQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitnekZpbGUgWkVYUE9SVCBnemRvcGVuKGZkLCBt b2RlKQorICAgIGludCBmZDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIGNoYXIgKnBh dGg7ICAgICAgICAgLyogaWRlbnRpZmllciBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICBnekZp bGUgZ3o7CisKKyAgICBpZiAoZmQgPT0gLTEgfHwgKHBhdGggPSAoY2hhciAqKW1hbGxvYyg3ICsg MyAqIHNpemVvZihpbnQpKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjaWYgIWRl ZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAodm9pZClz bnByaW50ZihwYXRoLCA3ICsgMyAqIHNpemVvZihpbnQpLCAiPGZkOiVkPiIsIGZkKTsKKyNlbHNl CisgICAgc3ByaW50ZihwYXRoLCAiPGZkOiVkPiIsIGZkKTsgICAvKiBmb3IgZGVidWdnaW5nICov CisjZW5kaWYKKyAgICBneiA9IGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpOworICAgIGZyZWUocGF0 aCk7CisgICAgcmV0dXJuIGd6OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCisjaWZkZWYg V0lERUNIQVIKK2d6RmlsZSBaRVhQT1JUIGd6b3Blbl93KHBhdGgsIG1vZGUpCisgICAgY29uc3Qg d2NoYXJfdCAqcGF0aDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9v cGVuKHBhdGgsIC0yLCBtb2RlKTsKK30KKyNlbmRpZgorCisvKiAtLSBzZWUgemxpYi5oIC0tICov CitpbnQgWkVYUE9SVCBnemJ1ZmZlcihmaWxlLCBzaXplKQorICAgIGd6RmlsZSBmaWxlOworICAg IHVuc2lnbmVkIHNpemU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGlu dGVybmFsIHN0cnVjdHVyZSBhbmQgY2hlY2sgaW50ZWdyaXR5ICovCisgICAgaWYgKGZpbGUgPT0g TlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwor ICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEICYmIHN0YXRlLT5tb2RlICE9IEdaX1dSSVRF KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBhbHJl YWR5IGFsbG9jYXRlZCBtZW1vcnkgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgIT0gMCkKKyAgICAg ICAgcmV0dXJuIC0xOworCisgICAgLyogY2hlY2sgYW5kIHNldCByZXF1ZXN0ZWQgc2l6ZSAqLwor ICAgIGlmICgoc2l6ZSA8PCAxKSA8IHNpemUpCisgICAgICAgIHJldHVybiAtMTsgICAgICAgICAg ICAgIC8qIG5lZWQgdG8gYmUgYWJsZSB0byBkb3VibGUgaXQgKi8KKyAgICBpZiAoc2l6ZSA8IDIp CisgICAgICAgIHNpemUgPSAyOyAgICAgICAgICAgICAgIC8qIG5lZWQgdHdvIGJ5dGVzIHRvIGNo ZWNrIG1hZ2ljIGhlYWRlciAqLworICAgIHN0YXRlLT53YW50ID0gc2l6ZTsKKyAgICByZXR1cm4g MDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pyZXdpbmQoZmls ZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBn ZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAg cmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sg dGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAo c3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9P SyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisg ICAgLyogYmFjayB1cCBhbmQgc3RhcnQgb3ZlciAqLworICAgIGlmIChMU0VFSyhzdGF0ZS0+ZmQs IHN0YXRlLT5zdGFydCwgU0VFS19TRVQpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAg Z3pfcmVzZXQoc3RhdGUpOworICAgIHJldHVybiAwOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0t ICovCit6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NChmaWxlLCBvZmZzZXQsIHdoZW5jZSkKKyAg ICBnekZpbGUgZmlsZTsKKyAgICB6X29mZjY0X3Qgb2Zmc2V0OworICAgIGludCB3aGVuY2U7Cit7 CisgICAgdW5zaWduZWQgbjsKKyAgICB6X29mZjY0X3QgcmV0OworICAgIGd6X3N0YXRlcCBzdGF0 ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGNoZWNrIGludGVncml0eSAq LworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9 IChnel9zdGF0ZXApZmlsZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCAmJiBzdGF0 ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogY2hlY2sg dGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBz dGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBj YW4gb25seSBzZWVrIGZyb20gc3RhcnQgb3IgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiAq LworICAgIGlmICh3aGVuY2UgIT0gU0VFS19TRVQgJiYgd2hlbmNlICE9IFNFRUtfQ1VSKQorICAg ICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBub3JtYWxpemUgb2Zmc2V0IHRvIGEgU0VFS19DVVIg c3BlY2lmaWNhdGlvbiAqLworICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpCisgICAgICAgIG9m ZnNldCAtPSBzdGF0ZS0+eC5wb3M7CisgICAgZWxzZSBpZiAoc3RhdGUtPnNlZWspCisgICAgICAg IG9mZnNldCArPSBzdGF0ZS0+c2tpcDsKKyAgICBzdGF0ZS0+c2VlayA9IDA7CisKKyAgICAvKiBp ZiB3aXRoaW4gcmF3IGFyZWEgd2hpbGUgcmVhZGluZywganVzdCBnbyB0aGVyZSAqLworICAgIGlm IChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gQ09QWSAmJgorICAgICAg ICAgICAgc3RhdGUtPngucG9zICsgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgcmV0ID0gTFNFRUso c3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+eC5oYXZlLCBTRUVLX0NVUik7CisgICAgICAgIGlm IChyZXQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHN0YXRlLT54Lmhh dmUgPSAwOworICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAw OworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX09L LCBOVUxMKTsKKyAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOworICAgICAgICBzdGF0 ZS0+eC5wb3MgKz0gb2Zmc2V0OworICAgICAgICByZXR1cm4gc3RhdGUtPngucG9zOworICAgIH0K KworICAgIC8qIGNhbGN1bGF0ZSBza2lwIGFtb3VudCwgcmV3aW5kaW5nIGlmIG5lZWRlZCBmb3Ig YmFjayBzZWVrIHdoZW4gcmVhZGluZyAqLworICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAg IGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEKSAgICAgICAgIC8qIHdyaXRpbmcgLS0gY2FuJ3Qg Z28gYmFja3dhcmRzICovCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIG9mZnNldCAr PSBzdGF0ZS0+eC5wb3M7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSAgICAgICAgICAgICAgICAg ICAgIC8qIGJlZm9yZSBzdGFydCBvZiBmaWxlISAqLworICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICBpZiAoZ3pyZXdpbmQoZmlsZSkgPT0gLTEpICAgICAgICAgICAvKiByZXdpbmQsIHRo ZW4gc2tpcCB0byBvZmZzZXQgKi8KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAg ICAvKiBpZiByZWFkaW5nLCBza2lwIHdoYXQncyBpbiBvdXRwdXQgYnVmZmVyIChvbmUgbGVzcyBn emdldGMoKSBjaGVjaykgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAg ICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2 ZSA+IG9mZnNldCA/CisgICAgICAgICAgICAodW5zaWduZWQpb2Zmc2V0IDogc3RhdGUtPnguaGF2 ZTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9 IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOworICAgICAgICBvZmZzZXQgLT0gbjsKKyAg ICB9CisKKyAgICAvKiByZXF1ZXN0IHNraXAgKGlmIG5vdCB6ZXJvKSAqLworICAgIGlmIChvZmZz ZXQpIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAxOworICAgICAgICBzdGF0ZS0+c2tpcCA9IG9m ZnNldDsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIG9mZnNldDsKK30KKworLyog LS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmZfdCBaRVhQT1JUIGd6c2VlayhmaWxlLCBvZmZzZXQs IHdoZW5jZSkKKyAgICBnekZpbGUgZmlsZTsKKyAgICB6X29mZl90IG9mZnNldDsKKyAgICBpbnQg d2hlbmNlOworeworICAgIHpfb2ZmNjRfdCByZXQ7CisKKyAgICByZXQgPSBnenNlZWs2NChmaWxl LCAoel9vZmY2NF90KW9mZnNldCwgd2hlbmNlKTsKKyAgICByZXR1cm4gcmV0ID09ICh6X29mZl90 KXJldCA/ICh6X29mZl90KXJldCA6IC0xOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6 X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NChmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAg IGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGNo ZWNrIGludGVncml0eSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAt MTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0g R1pfUkVBRCAmJiBzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgLyogcmV0dXJuIHBvc2l0aW9uICovCisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIChz dGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0g Ki8KK3pfb2ZmX3QgWkVYUE9SVCBnenRlbGwoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAg ICB6X29mZjY0X3QgcmV0OworCisgICAgcmV0ID0gZ3p0ZWxsNjQoZmlsZSk7CisgICAgcmV0dXJu IHJldCA9PSAoel9vZmZfdClyZXQgPyAoel9vZmZfdClyZXQgOiAtMTsKK30KKworLyogLS0gc2Vl IHpsaWIuaCAtLSAqLworel9vZmY2NF90IFpFWFBPUlQgZ3pvZmZzZXQ2NChmaWxlKQorICAgIGd6 RmlsZSBmaWxlOworeworICAgIHpfb2ZmNjRfdCBvZmZzZXQ7CisgICAgZ3pfc3RhdGVwIHN0YXRl OworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSBhbmQgY2hlY2sgaW50ZWdyaXR5ICov CisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0g KGd6X3N0YXRlcClmaWxlOworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEICYmIHN0YXRl LT5tb2RlICE9IEdaX1dSSVRFKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjb21wdXRl IGFuZCByZXR1cm4gZWZmZWN0aXZlIG9mZnNldCBpbiBmaWxlICovCisgICAgb2Zmc2V0ID0gTFNF RUsoc3RhdGUtPmZkLCAwLCBTRUVLX0NVUik7CisgICAgaWYgKG9mZnNldCA9PSAtMSkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSAgICAgICAgICAg ICAvKiByZWFkaW5nICovCisgICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+c3RybS5hdmFpbF9pbjsg ICAgIC8qIGRvbid0IGNvdW50IGJ1ZmZlcmVkIGlucHV0ICovCisgICAgcmV0dXJuIG9mZnNldDsK K30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmZfdCBaRVhQT1JUIGd6b2Zmc2V0KGZp bGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgel9vZmY2NF90IHJldDsKKworICAgIHJldCA9 IGd6b2Zmc2V0NjQoZmlsZSk7CisgICAgcmV0dXJuIHJldCA9PSAoel9vZmZfdClyZXQgPyAoel9v ZmZfdClyZXQgOiAtMTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQg Z3plb2YoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisK KyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAg ICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdGF0ZSA9IChnel9z dGF0ZXApZmlsZTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCAmJiBzdGF0ZS0+bW9k ZSAhPSBHWl9XUklURSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiByZXR1cm4gZW5kLW9m LWZpbGUgc3RhdGUgKi8KKyAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/IHN0YXRl LT5wYXN0IDogMDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworY29uc3QgY2hhciAqIFpF WFBPUlQgZ3plcnJvcihmaWxlLCBlcnJudW0pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgaW50ICpl cnJudW07Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0 cnVjdHVyZSBhbmQgY2hlY2sgaW50ZWdyaXR5ICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAg ICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYg KHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAg ICAgIHJldHVybiBOVUxMOworCisgICAgLyogcmV0dXJuIGVycm9yIGluZm9ybWF0aW9uICovCisg ICAgaWYgKGVycm51bSAhPSBOVUxMKQorICAgICAgICAqZXJybnVtID0gc3RhdGUtPmVycjsKKyAg ICByZXR1cm4gc3RhdGUtPmVyciA9PSBaX01FTV9FUlJPUiA/ICJvdXQgb2YgbWVtb3J5IiA6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1zZyA9PSBOVUxM ID8gIiIgOiBzdGF0ZS0+bXNnKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLwordm9pZCBa RVhQT1JUIGd6Y2xlYXJlcnIoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0 ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRl Z3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgc3Rh dGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYg c3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIGNsZWFy IGVycm9yIGFuZCBlbmQtb2YtZmlsZSAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFE KSB7CisgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7Cisg ICAgfQorICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKK30KKworLyogQ3JlYXRlIGFu IGVycm9yIG1lc3NhZ2UgaW4gYWxsb2NhdGVkIG1lbW9yeSBhbmQgc2V0IHN0YXRlLT5lcnIgYW5k CisgICBzdGF0ZS0+bXNnIGFjY29yZGluZ2x5LiAgRnJlZSBhbnkgcHJldmlvdXMgZXJyb3IgbWVz c2FnZSBhbHJlYWR5IHRoZXJlLiAgRG8KKyAgIG5vdCB0cnkgdG8gZnJlZSBvciBhbGxvY2F0ZSBz cGFjZSBpZiB0aGUgZXJyb3IgaXMgWl9NRU1fRVJST1IgKG91dCBvZgorICAgbWVtb3J5KS4gIFNp bXBseSBzYXZlIHRoZSBlcnJvciBtZXNzYWdlIGFzIGEgc3RhdGljIHN0cmluZy4gIElmIHRoZXJl IGlzIGFuCisgICBhbGxvY2F0aW9uIGZhaWx1cmUgY29uc3RydWN0aW5nIHRoZSBlcnJvciBtZXNz YWdlLCB0aGVuIGNvbnZlcnQgdGhlIGVycm9yIHRvCisgICBvdXQgb2YgbWVtb3J5LiAqLwordm9p ZCBaTElCX0lOVEVSTkFMIGd6X2Vycm9yKHN0YXRlLCBlcnIsIG1zZykKKyAgICBnel9zdGF0ZXAg c3RhdGU7CisgICAgaW50IGVycjsKKyAgICBjb25zdCBjaGFyICptc2c7Cit7CisgICAgLyogZnJl ZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZXNzYWdlIGFuZCBjbGVhciAqLworICAgIGlmIChzdGF0 ZS0+bXNnICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9NRU1fRVJST1Ip CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5tc2cpOworICAgICAgICBzdGF0ZS0+bXNnID0gTlVM TDsKKyAgICB9CisKKyAgICAvKiBpZiBmYXRhbCwgc2V0IHN0YXRlLT54LmhhdmUgdG8gMCBzbyB0 aGF0IHRoZSBnemdldGMoKSBtYWNybyBmYWlscyAqLworICAgIGlmIChlcnIgIT0gWl9PSyAmJiBl cnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworCisgICAgLyog c2V0IGVycm9yIGNvZGUsIGFuZCBpZiBubyBtZXNzYWdlLCB0aGVuIGRvbmUgKi8KKyAgICBzdGF0 ZS0+ZXJyID0gZXJyOworICAgIGlmIChtc2cgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisg ICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHJldHVybiBsaXRlcmFsIHN0cmluZyB3 aGVuIHJlcXVlc3RlZCAqLworICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpCisgICAgICAgIHJl dHVybjsKKworICAgIC8qIGNvbnN0cnVjdCBlcnJvciBtZXNzYWdlIHdpdGggcGF0aCAqLworICAg IGlmICgoc3RhdGUtPm1zZyA9IChjaGFyICopbWFsbG9jKHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBz dHJsZW4obXNnKSArIDMpKSA9PQorICAgICAgICAgICAgTlVMTCkgeworICAgICAgICBzdGF0ZS0+ ZXJyID0gWl9NRU1fRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgIWRlZmluZWQo Tk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAodm9pZClzbnByaW50 ZihzdGF0ZS0+bXNnLCBzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzLAorICAg ICAgICAgICAgICAgICAgICIlcyVzJXMiLCBzdGF0ZS0+cGF0aCwgIjogIiwgbXNnKTsKKyNlbHNl CisgICAgc3RyY3B5KHN0YXRlLT5tc2csIHN0YXRlLT5wYXRoKTsKKyAgICBzdHJjYXQoc3RhdGUt Pm1zZywgIjogIik7CisgICAgc3RyY2F0KHN0YXRlLT5tc2csIG1zZyk7CisjZW5kaWYKK30KKwor I2lmbmRlZiBJTlRfTUFYCisvKiBwb3J0YWJseSByZXR1cm4gbWF4aW11bSB2YWx1ZSBmb3IgYW4g aW50ICh3aGVuIGxpbWl0cy5oIHByZXN1bWVkIG5vdAorICAgYXZhaWxhYmxlKSAtLSB3ZSBuZWVk IHRvIGRvIHRoaXMgdG8gY292ZXIgY2FzZXMgd2hlcmUgMidzIGNvbXBsZW1lbnQgbm90CisgICB1 c2VkLCBzaW5jZSBDIHN0YW5kYXJkIHBlcm1pdHMgMSdzIGNvbXBsZW1lbnQgYW5kIHNpZ24tYml0 IHJlcHJlc2VudGF0aW9ucywKKyAgIG90aGVyd2lzZSB3ZSBjb3VsZCBqdXN0IHVzZSAoKHVuc2ln bmVkKS0xKSA+PiAxICovCit1bnNpZ25lZCBaTElCX0lOVEVSTkFMIGd6X2ludG1heCgpCit7Cisg ICAgdW5zaWduZWQgcCwgcTsKKworICAgIHAgPSAxOworICAgIGRvIHsKKyAgICAgICAgcSA9IHA7 CisgICAgICAgIHAgPDw9IDE7CisgICAgICAgIHArKzsKKyAgICB9IHdoaWxlIChwID4gcSk7Cisg ICAgcmV0dXJuIHEgPj4gMTsKK30KKyNlbmRpZgpkaWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0 NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi9nenJlYWQuYwotLS0gL2Rldi9udWxsCVRodSBK YW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2d6cmVh ZC5jCVdlZCBNYXkgMjcgMTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMCwwICsxLDY1NCBAQAorLyog Z3pyZWFkLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgZ3ppcCBmaWxlcworICogQ29w eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2IE1hcmsg QWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29w eXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaW5jbHVkZSAiZ3pndXRzLmgiCisKKy8q IExvY2FsIGZ1bmN0aW9ucyAqLworbG9jYWwgaW50IGd6X2xvYWQgT0YoKGd6X3N0YXRlcCwgdW5z aWduZWQgY2hhciAqLCB1bnNpZ25lZCwgdW5zaWduZWQgKikpOworbG9jYWwgaW50IGd6X2F2YWls IE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9sb29rIE9GKChnel9zdGF0ZXApKTsKK2xv Y2FsIGludCBnel9kZWNvbXAgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X2ZldGNoIE9G KChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9za2lwIE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRf dCkpOworbG9jYWwgel9zaXplX3QgZ3pfcmVhZCBPRigoZ3pfc3RhdGVwLCB2b2lkcCwgel9zaXpl X3QpKTsKKworLyogVXNlIHJlYWQoKSB0byBsb2FkIGEgYnVmZmVyIC0tIHJldHVybiAtMSBvbiBl cnJvciwgb3RoZXJ3aXNlIDAuICBSZWFkIGZyb20KKyAgIHN0YXRlLT5mZCwgYW5kIHVwZGF0ZSBz dGF0ZS0+ZW9mLCBzdGF0ZS0+ZXJyLCBhbmQgc3RhdGUtPm1zZyBhcyBhcHByb3ByaWF0ZS4KKyAg IFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gbG9vcCBvbiByZWFkKCksIHNpbmNlIHJlYWQoKSBpcyBu b3QgZ3VhcmFudGVlZCB0bworICAgcmVhZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCwg ZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGRlc2NyaXB0b3IuICovCitsb2NhbCBpbnQgZ3pfbG9h ZChzdGF0ZSwgYnVmLCBsZW4sIGhhdmUpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHVuc2ln bmVkIGNoYXIgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47CisgICAgdW5zaWduZWQgKmhhdmU7Cit7 CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBnZXQsIG1heCA9ICgodW5zaWduZWQpLTEgPj4g MikgKyAxOworCisgICAgKmhhdmUgPSAwOworICAgIGRvIHsKKyAgICAgICAgZ2V0ID0gbGVuIC0g KmhhdmU7CisgICAgICAgIGlmIChnZXQgPiBtYXgpCisgICAgICAgICAgICBnZXQgPSBtYXg7Cisg ICAgICAgIHJldCA9IHJlYWQoc3RhdGUtPmZkLCBidWYgKyAqaGF2ZSwgZ2V0KTsKKyAgICAgICAg aWYgKHJldCA8PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICpoYXZlICs9ICh1bnNp Z25lZClyZXQ7CisgICAgfSB3aGlsZSAoKmhhdmUgPCBsZW4pOworICAgIGlmIChyZXQgPCAwKSB7 CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CisgICAgICAg IHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHJldCA9PSAwKQorICAgICAgICBzdGF0ZS0+ZW9m ID0gMTsKKyAgICByZXR1cm4gMDsKK30KKworLyogTG9hZCB1cCBpbnB1dCBidWZmZXIgYW5kIHNl dCBlb2YgZmxhZyBpZiBsYXN0IGRhdGEgbG9hZGVkIC0tIHJldHVybiAtMSBvbgorICAgZXJyb3Is IDAgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlb2YgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZW5k IG9mIHRoZSBpbnB1dAorICAgZmlsZSBpcyByZWFjaGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkg YmUgdW51c2VkIGRhdGEgaW4gdGhlIGJ1ZmZlci4gIE9uY2UKKyAgIHRoYXQgZGF0YSBoYXMgYmVl biB1c2VkLCBubyBtb3JlIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZWFkIHRoZSBmaWxlLgor ICAgSWYgc3RybS0+YXZhaWxfaW4gIT0gMCwgdGhlbiB0aGUgY3VycmVudCBkYXRhIGlzIG1vdmVk IHRvIHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZSBpbnB1dCBidWZmZXIsIGFuZCB0aGVuIHRoZSBy ZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgd2l0aCB0aGUKKyAgIGF2YWlsYWJsZSBk YXRhIGZyb20gdGhlIGlucHV0IGZpbGUuICovCitsb2NhbCBpbnQgZ3pfYXZhaWwoc3RhdGUpCisg ICAgZ3pfc3RhdGVwIHN0YXRlOworeworICAgIHVuc2lnbmVkIGdvdDsKKyAgICB6X3N0cmVhbXAg c3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBz dGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN0 YXRlLT5lb2YgPT0gMCkgeworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsgICAgICAgLyog Y29weSB3aGF0J3MgdGhlcmUgdG8gdGhlIHN0YXJ0ICovCisgICAgICAgICAgICB1bnNpZ25lZCBj aGFyICpwID0gc3RhdGUtPmluOworICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgY2hhciAqcSA9 IHN0cm0tPm5leHRfaW47CisgICAgICAgICAgICB1bnNpZ25lZCBuID0gc3RybS0+YXZhaWxfaW47 CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKnArKyA9ICpxKys7CisgICAgICAg ICAgICB9IHdoaWxlICgtLW4pOworICAgICAgICB9CisgICAgICAgIGlmIChnel9sb2FkKHN0YXRl LCBzdGF0ZS0+aW4gKyBzdHJtLT5hdmFpbF9pbiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUt PnNpemUgLSBzdHJtLT5hdmFpbF9pbiwgJmdvdCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4g LTE7CisgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IGdvdDsKKyAgICAgICAgc3RybS0+bmV4dF9p biA9IHN0YXRlLT5pbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIExvb2sgZm9yIGd6 aXAgaGVhZGVyLCBzZXQgdXAgZm9yIGluZmxhdGUgb3IgY29weS4gIHN0YXRlLT54LmhhdmUgbXVz dCBiZSAwLgorICAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiwgYWxsb2NhdGUgcmVxdWly ZWQgbWVtb3J5LiAgc3RhdGUtPmhvdyB3aWxsIGJlCisgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGVy ZSBpcyBubyBtb3JlIGlucHV0IGRhdGEgYXZhaWxhYmxlLCB3aWxsIGJlIHNldCB0byBDT1BZCisg ICBpZiB0aGVyZSBpcyBubyBnemlwIGhlYWRlciBhbmQgZGlyZWN0IGNvcHlpbmcgd2lsbCBiZSBw ZXJmb3JtZWQsIG9yIGl0IHdpbGwKKyAgIGJlIHNldCB0byBHWklQIGZvciBkZWNvbXByZXNzaW9u LiAgSWYgZGlyZWN0IGNvcHlpbmcsIHRoZW4gbGVmdG92ZXIgaW5wdXQKKyAgIGRhdGEgZnJvbSB0 aGUgaW5wdXQgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgSW4g dGhhdAorICAgY2FzZSwgYWxsIGZ1cnRoZXIgZmlsZSByZWFkcyB3aWxsIGJlIGRpcmVjdGx5IHRv IGVpdGhlciB0aGUgb3V0cHV0IGJ1ZmZlciBvcgorICAgYSB1c2VyIGJ1ZmZlci4gIElmIGRlY29t cHJlc3NpbmcsIHRoZSBpbmZsYXRlIHN0YXRlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCisgICBnel9s b29rKCkgd2lsbCByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuICovCitsb2Nh bCBpbnQgZ3pfbG9vayhzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgel9zdHJl YW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGFsbG9jYXRlIHJlYWQgYnVmZmVy cyBhbmQgaW5mbGF0ZSBtZW1vcnkgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCkgeworICAg ICAgICAvKiBhbGxvY2F0ZSBidWZmZXJzICovCisgICAgICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25l ZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNp Z25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOworICAgICAgICBpZiAoc3RhdGUt PmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHN0 YXRlLT5vdXQpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pf ZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0YXRlLT5zaXplID0gc3RhdGUtPndhbnQ7 CisKKyAgICAgICAgLyogYWxsb2NhdGUgaW5mbGF0ZSBtZW1vcnkgKi8KKyAgICAgICAgc3RhdGUt PnN0cm0uemFsbG9jID0gWl9OVUxMOworICAgICAgICBzdGF0ZS0+c3RybS56ZnJlZSA9IFpfTlVM TDsKKyAgICAgICAgc3RhdGUtPnN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgICAgICBzdGF0ZS0+ c3RybS5hdmFpbF9pbiA9IDA7CisgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfaW4gPSBaX05VTEw7 CisgICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIDE1ICsgMTYpICE9IFpf T0spIHsgICAgLyogZ3VuemlwICovCisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAg ICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgc3RhdGUtPnNpemUgPSAwOwor ICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIp OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgLyogZ2V0 IGF0IGxlYXN0IHRoZSBtYWdpYyBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgaWYg KHN0cm0tPmF2YWlsX2luIDwgMikgeworICAgICAgICBpZiAoZ3pfYXZhaWwoc3RhdGUpID09IC0x KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0g MCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGxvb2sgZm9yIGd6aXAg bWFnaWMgYnl0ZXMgLS0gaWYgdGhlcmUsIGRvIGd6aXAgZGVjb2RpbmcgKG5vdGU6IHRoZXJlIGlz CisgICAgICAgYSBsb2dpY2FsIGRpbGVtbWEgaGVyZSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjYXNl IG9mIGEgcGFydGlhbGx5IHdyaXR0ZW4KKyAgICAgICBnemlwIGZpbGUsIHRvIHdpdCwgaWYgYSBz aW5nbGUgMzEgYnl0ZSBpcyB3cml0dGVuLCB0aGVuIHdlIGNhbm5vdCB0ZWxsCisgICAgICAgd2hl dGhlciB0aGlzIGlzIGEgc2luZ2xlLWJ5dGUgZmlsZSwgb3IganVzdCBhIHBhcnRpYWxseSB3cml0 dGVuIGd6aXAKKyAgICAgICBmaWxlIC0tIGZvciBoZXJlIHdlIGFzc3VtZSB0aGF0IGlmIGEgZ3pp cCBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4sIHRoZW4KKyAgICAgICB0aGUgaGVhZGVyIHdpbGwgYmUg d3JpdHRlbiBpbiBhIHNpbmdsZSBvcGVyYXRpb24sIHNvIHRoYXQgcmVhZGluZyBhCisgICAgICAg c2luZ2xlIGJ5dGUgaXMgc3VmZmljaWVudCBpbmRpY2F0aW9uIHRoYXQgaXQgaXMgbm90IGEgZ3pp cCBmaWxlKSAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA+IDEgJiYKKyAgICAgICAgICAgIHN0 cm0tPm5leHRfaW5bMF0gPT0gMzEgJiYgc3RybS0+bmV4dF9pblsxXSA9PSAxMzkpIHsKKyAgICAg ICAgaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgICAgICBzdGF0ZS0+aG93ID0gR1pJUDsKKyAgICAg ICAgc3RhdGUtPmRpcmVjdCA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8q IG5vIGd6aXAgaGVhZGVyIC0tIGlmIHdlIHdlcmUgZGVjb2RpbmcgZ3ppcCBiZWZvcmUsIHRoZW4g dGhpcyBpcyB0cmFpbGluZworICAgICAgIGdhcmJhZ2UuICBJZ25vcmUgdGhlIHRyYWlsaW5nIGdh cmJhZ2UgYW5kIGZpbmlzaC4gKi8KKyAgICBpZiAoc3RhdGUtPmRpcmVjdCA9PSAwKSB7CisgICAg ICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgc3RhdGUtPmVvZiA9IDE7CisgICAgICAg IHN0YXRlLT54LmhhdmUgPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBk b2luZyByYXcgaS9vLCBjb3B5IGFueSBsZWZ0b3ZlciBpbnB1dCB0byBvdXRwdXQgLS0gdGhpcyBh c3N1bWVzIHRoYXQKKyAgICAgICB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUg aW5wdXQgYnVmZmVyLCB3aGljaCBhbHNvIGFzc3VyZXMKKyAgICAgICBzcGFjZSBmb3IgZ3p1bmdl dGMoKSAqLworICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OworICAgIGlmIChzdHJtLT5h dmFpbF9pbikgeworICAgICAgICBtZW1jcHkoc3RhdGUtPngubmV4dCwgc3RybS0+bmV4dF9pbiwg c3RybS0+YXZhaWxfaW4pOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gc3RybS0+YXZhaWxfaW47 CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICB9CisgICAgc3RhdGUtPmhvdyA9IENP UFk7CisgICAgc3RhdGUtPmRpcmVjdCA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIERlY29t cHJlc3MgZnJvbSBpbnB1dCB0byB0aGUgcHJvdmlkZWQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBp biB0aGUgc3RhdGUuCisgICBPbiByZXR1cm4sIHN0YXRlLT54LmhhdmUgYW5kIHN0YXRlLT54Lm5l eHQgcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkCisgICBkYXRhLiAgSWYgdGhlIGd6aXAg c3RyZWFtIGNvbXBsZXRlcywgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9y CisgICB0aGUgbmV4dCBnemlwIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+eC5oYXZl IGlzIGRlcGxldGVkLiAgUmV0dXJucyAwCisgICBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAq LworbG9jYWwgaW50IGd6X2RlY29tcChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7Cisg ICAgaW50IHJldCA9IFpfT0s7CisgICAgdW5zaWduZWQgaGFkOworICAgIHpfc3RyZWFtcCBzdHJt ID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBmaWxsIG91dHB1dCBidWZmZXIgdXAgdG8gZW5k IG9mIGRlZmxhdGUgc3RyZWFtICovCisgICAgaGFkID0gc3RybS0+YXZhaWxfb3V0OworICAgIGRv IHsKKyAgICAgICAgLyogZ2V0IG1vcmUgaW5wdXQgZm9yIGluZmxhdGUoKSAqLworICAgICAgICBp ZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisgICAg ICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBm aWxlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGRlY29t cHJlc3MgYW5kIGhhbmRsZSBlcnJvcnMgKi8KKyAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBa X05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUiB8fCByZXQgPT0g Wl9ORUVEX0RJQ1QpIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJP UiwKKyAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0g Y29ycnVwdCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlm IChyZXQgPT0gWl9NRU1fRVJST1IpIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01F TV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgfQorICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeyAgICAgICAgICAgICAgLyog ZGVmbGF0ZSBzdHJlYW0gaW52YWxpZCAqLworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpf REFUQV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNv bXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOworICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ICYmIHJldCAhPSBaX1NU UkVBTV9FTkQpOworCisgICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgKi8KKyAgICBzdGF0 ZS0+eC5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OworICAgIHN0YXRlLT54Lm5leHQgPSBz dHJtLT5uZXh0X291dCAtIHN0YXRlLT54LmhhdmU7CisKKyAgICAvKiBpZiB0aGUgZ3ppcCBzdHJl YW0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgbG9vayBmb3IgYW5vdGhlciAqLworICAgIGlmIChy ZXQgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsKKworICAgIC8q IGdvb2QgZGVjb21wcmVzc2lvbiAqLworICAgIHJldHVybiAwOworfQorCisvKiBGZXRjaCBkYXRh IGFuZCBwdXQgaXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHN0YXRlLT54LmhhdmUg aXMgMC4KKyAgIERhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHRoZSBpbnB1dCBmaWxlIG9yIGRl Y29tcHJlc3NlZCBmcm9tIHRoZSBpbnB1dAorICAgZmlsZSBkZXBlbmRpbmcgb24gc3RhdGUtPmhv dy4gIElmIHN0YXRlLT5ob3cgaXMgTE9PSywgdGhlbiBhIGd6aXAgaGVhZGVyIGlzCisgICBsb29r ZWQgZm9yIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGNvcHkgb3IgZGVjb21wcmVzcy4gIFJldHVy bnMgLTEgb24gZXJyb3IsCisgICBvdGhlcndpc2UgMC4gIGd6X2ZldGNoKCkgd2lsbCBsZWF2ZSBz dGF0ZS0+aG93IGFzIENPUFkgb3IgR1pJUCB1bmxlc3MgdGhlCisgICBlbmQgb2YgdGhlIGlucHV0 IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkLiAg Ki8KK2xvY2FsIGludCBnel9mZXRjaChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7Cisg ICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIGRvIHsKKyAgICAgICAg c3dpdGNoKHN0YXRlLT5ob3cpIHsKKyAgICAgICAgY2FzZSBMT09LOiAgICAgIC8qIC0+IExPT0ss IENPUFkgKG9ubHkgaWYgbmV2ZXIgR1pJUCksIG9yIEdaSVAgKi8KKyAgICAgICAgICAgIGlmIChn el9sb29rKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg ICAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09QWTogICAgICAvKiAtPiBDT1BZICov CisgICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPm91dCwgc3RhdGUtPnNpemUg PDwgMSwgJihzdGF0ZS0+eC5oYXZlKSkKKyAgICAgICAgICAgICAgICAgICAgPT0gLTEpCisgICAg ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRl LT5vdXQ7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHWklQOiAgICAgIC8q IC0+IEdaSVAgb3IgTE9PSyAoaWYgZW5kIG9mIGd6aXAgc3RyZWFtKSAqLworICAgICAgICAgICAg c3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemUgPDwgMTsKKyAgICAgICAgICAgIHN0cm0tPm5l eHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09 IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUg KHN0YXRlLT54LmhhdmUgPT0gMCAmJiAoIXN0YXRlLT5lb2YgfHwgc3RybS0+YXZhaWxfaW4pKTsK KyAgICByZXR1cm4gMDsKK30KKworLyogU2tpcCBsZW4gdW5jb21wcmVzc2VkIGJ5dGVzIG9mIG91 dHB1dC4gIFJldHVybiAtMSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLiAqLworbG9jYWwgaW50IGd6 X3NraXAoc3RhdGUsIGxlbikKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgel9vZmY2NF90IGxl bjsKK3sKKyAgICB1bnNpZ25lZCBuOworCisgICAgLyogc2tpcCBvdmVyIGxlbiBieXRlcyBvciBy ZWFjaCBlbmQtb2YtZmlsZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0ICovCisgICAgd2hpbGUgKGxl bikKKyAgICAgICAgLyogc2tpcCBvdmVyIHdoYXRldmVyIGlzIGluIG91dHB1dCBidWZmZXIgKi8K KyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBHVF9PRkYoc3Rh dGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gbGVuID8KKyAgICAgICAg ICAgICAgICAodW5zaWduZWQpbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIHN0YXRl LT54LmhhdmUgLT0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAg ICAgIHN0YXRlLT54LnBvcyArPSBuOworICAgICAgICAgICAgbGVuIC09IG47CisgICAgICAgIH0K KworICAgICAgICAvKiBvdXRwdXQgYnVmZmVyIGVtcHR5IC0tIHJldHVybiBpZiB3ZSdyZSBhdCB0 aGUgZW5kIG9mIHRoZSBpbnB1dCAqLworICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0 YXRlLT5zdHJtLmF2YWlsX2luID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAv KiBuZWVkIG1vcmUgZGF0YSB0byBza2lwIC0tIGxvYWQgdXAgb3V0cHV0IGJ1ZmZlciAqLworICAg ICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3Ig aGVhZGVyIGlmIHJlcXVpcmVkICovCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09 IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIHJldHVybiAw OworfQorCisvKiBSZWFkIGxlbiBieXRlcyBpbnRvIGJ1ZiBmcm9tIGZpbGUsIG9yIGxlc3MgdGhh biBsZW4gdXAgdG8gdGhlIGVuZCBvZiB0aGUKKyAgIGlucHV0LiAgUmV0dXJuIHRoZSBudW1iZXIg b2YgYnl0ZXMgcmVhZC4gIElmIHplcm8gaXMgcmV0dXJuZWQsIGVpdGhlciB0aGUKKyAgIGVuZCBv ZiBmaWxlIHdhcyByZWFjaGVkLCBvciB0aGVyZSB3YXMgYW4gZXJyb3IuICBzdGF0ZS0+ZXJyIG11 c3QgYmUKKyAgIGNvbnN1bHRlZCBpbiB0aGF0IGNhc2UgdG8gZGV0ZXJtaW5lIHdoaWNoLiAqLwor bG9jYWwgel9zaXplX3QgZ3pfcmVhZChzdGF0ZSwgYnVmLCBsZW4pCisgICAgZ3pfc3RhdGVwIHN0 YXRlOworICAgIHZvaWRwIGJ1ZjsKKyAgICB6X3NpemVfdCBsZW47Cit7CisgICAgel9zaXplX3Qg Z290OworICAgIHVuc2lnbmVkIG47CisKKyAgICAvKiBpZiBsZW4gaXMgemVybywgYXZvaWQgdW5u ZWNlc3Nhcnkgb3BlcmF0aW9ucyAqLworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJu IDA7CisKKyAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5z ZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3NraXAoc3Rh dGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor ICAgIC8qIGdldCBsZW4gYnl0ZXMgdG8gYnVmLCBvciBsZXNzIHRoYW4gbGVuIGlmIGF0IHRoZSBl bmQgKi8KKyAgICBnb3QgPSAwOworICAgIGRvIHsKKyAgICAgICAgLyogc2V0IG4gdG8gdGhlIG1h eGltdW0gYW1vdW50IG9mIGxlbiB0aGF0IGZpdHMgaW4gYW4gdW5zaWduZWQgaW50ICovCisgICAg ICAgIG4gPSAtMTsKKyAgICAgICAgaWYgKG4gPiBsZW4pCisgICAgICAgICAgICBuID0gbGVuOwor CisgICAgICAgIC8qIGZpcnN0IGp1c3QgdHJ5IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQg YnVmZmVyICovCisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgICAgICBpZiAo c3RhdGUtPnguaGF2ZSA8IG4pCisgICAgICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmU7Cisg ICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKKyAgICAgICAgICAgIHN0 YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAg ICAgfQorCisgICAgICAgIC8qIG91dHB1dCBidWZmZXIgZW1wdHkgLS0gcmV0dXJuIGlmIHdlJ3Jl IGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0ICovCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5lb2Yg JiYgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCkgeworICAgICAgICAgICAgc3RhdGUtPnBhc3Qg PSAxOyAgICAgICAgLyogdHJpZWQgdG8gcmVhZCBwYXN0IGVuZCAqLworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBuZWVkIG91dHB1dCBkYXRhIC0tIGZvciBzbWFs bCBsZW4gb3IgbmV3IHN0cmVhbSBsb2FkIHVwIG91ciBvdXRwdXQKKyAgICAgICAgICAgYnVmZmVy ICovCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyB8fCBuIDwgKHN0YXRlLT5z aXplIDw8IDEpKSB7CisgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9y IGhlYWRlciBpZiByZXF1aXJlZCAqLworICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9 PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAg ICAgICAvKiBubyBwcm9ncmVzcyB5ZXQgLS0gZ28gYmFjayB0byBjb3B5IGFib3ZlICovCisgICAg ICAgICAgICAvKiB0aGUgY29weSBhYm92ZSBhc3N1cmVzIHRoYXQgd2Ugd2lsbCBsZWF2ZSB3aXRo IHNwYWNlIGluIHRoZQorICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlciwgYWxsb3dpbmcgYXQg bGVhc3Qgb25lIGd6dW5nZXRjKCkgdG8gc3VjY2VlZCAqLworICAgICAgICB9CisKKyAgICAgICAg LyogbGFyZ2UgbGVuIC0tIHJlYWQgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLworICAgICAg ICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAvKiByZWFkIGRpcmVjdGx5ICov CisgICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgKHVuc2lnbmVkIGNoYXIgKilidWYsIG4s ICZuKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAg ICAgIC8qIGxhcmdlIGxlbiAtLSBkZWNvbXByZXNzIGRpcmVjdGx5IGludG8gdXNlciBidWZmZXIg Ki8KKyAgICAgICAgZWxzZSB7ICAvKiBzdGF0ZS0+aG93ID09IEdaSVAgKi8KKyAgICAgICAgICAg IHN0YXRlLT5zdHJtLmF2YWlsX291dCA9IG47CisgICAgICAgICAgICBzdGF0ZS0+c3RybS5uZXh0 X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOworICAgICAgICAgICAgaWYgKGd6X2RlY29tcChz dGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBuID0g c3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworICAgICAgICB9 CisKKyAgICAgICAgLyogdXBkYXRlIHByb2dyZXNzICovCisgICAgICAgIGxlbiAtPSBuOworICAg ICAgICBidWYgPSAoY2hhciAqKWJ1ZiArIG47CisgICAgICAgIGdvdCArPSBuOworICAgICAgICBz dGF0ZS0+eC5wb3MgKz0gbjsKKyAgICB9IHdoaWxlIChsZW4pOworCisgICAgLyogcmV0dXJuIG51 bWJlciBvZiBieXRlcyByZWFkIGludG8gdXNlciBidWZmZXIgKi8KKyAgICByZXR1cm4gZ290Owor fQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnenJlYWQoZmlsZSwgYnVm LCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgdm9pZHAgYnVmOworICAgIHVuc2lnbmVkIGxl bjsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0 dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0 YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5n IGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5t b2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3Rh dGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHNp bmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3 aXNlIHJldHVybgorICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIGEgZmxhdyBpbiB0 aGUgaW50ZXJmYWNlKSAqLworICAgIGlmICgoaW50KWxlbiA8IDApIHsKKyAgICAgICAgZ3pfZXJy b3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLCAicmVxdWVzdCBkb2VzIG5vdCBmaXQgaW4gYW4gaW50 Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiByZWFkIGxlbiBvciBmZXdl ciBieXRlcyB0byBidWYgKi8KKyAgICBsZW4gPSBnel9yZWFkKHN0YXRlLCBidWYsIGxlbik7CisK KyAgICAvKiBjaGVjayBmb3IgYW4gZXJyb3IgKi8KKyAgICBpZiAobGVuID09IDAgJiYgc3RhdGUt PmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHJldHVy biAtMTsKKworICAgIC8qIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKHRoaXMgaXMg YXNzdXJlZCB0byBmaXQgaW4gYW4gaW50KSAqLworICAgIHJldHVybiAoaW50KWxlbjsKK30KKwor LyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9zaXplX3QgWkVYUE9SVCBnemZyZWFkKGJ1Ziwgc2l6 ZSwgbml0ZW1zLCBmaWxlKQorICAgIHZvaWRwIGJ1ZjsKKyAgICB6X3NpemVfdCBzaXplOworICAg IHpfc2l6ZV90IG5pdGVtczsKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICB6X3NpemVfdCBsZW47 CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAq LworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0g KGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0 aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9 IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVy ciAhPSBaX0JVRl9FUlJPUikpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogY29tcHV0ZSBi eXRlcyB0byByZWFkIC0tIGVycm9yIG9uIG92ZXJmbG93ICovCisgICAgbGVuID0gbml0ZW1zICog c2l6ZTsKKyAgICBpZiAoc2l6ZSAmJiBsZW4gLyBzaXplICE9IG5pdGVtcykgeworICAgICAgICBn el9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsICJyZXF1ZXN0IGRvZXMgbm90IGZpdCBpbiBh IHNpemVfdCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiByZWFkIGxlbiBv ciBmZXdlciBieXRlcyB0byBidWYsIHJldHVybiB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgcmVh ZCAqLworICAgIHJldHVybiBsZW4gPyBnel9yZWFkKHN0YXRlLCBidWYsIGxlbikgLyBzaXplIDog MDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAg dW5kZWYgel9nemdldGMKKyNlbHNlCisjICB1bmRlZiBnemdldGMKKyNlbmRpZgoraW50IFpFWFBP UlQgZ3pnZXRjKGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgaW50IHJldDsKKyAgICB1 bnNpZ25lZCBjaGFyIGJ1ZlsxXTsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQg aW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0 dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhh dCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisg ICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0g Wl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgLyogdHJ5IG91dHB1dCBidWZmZXIgKG5vIG5lZWQgdG8gY2hlY2sgZm9yIHNraXAgcmVx dWVzdCkgKi8KKyAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICBzdGF0ZS0+eC5oYXZl LS07CisgICAgICAgIHN0YXRlLT54LnBvcysrOworICAgICAgICByZXR1cm4gKihzdGF0ZS0+eC5u ZXh0KSsrOworICAgIH0KKworICAgIC8qIG5vdGhpbmcgdGhlcmUgLS0gdHJ5IGd6X3JlYWQoKSAq LworICAgIHJldCA9IGd6X3JlYWQoc3RhdGUsIGJ1ZiwgMSk7CisgICAgcmV0dXJuIHJldCA8IDEg PyAtMSA6IGJ1ZlswXTsKK30KKworaW50IFpFWFBPUlQgZ3pnZXRjXyhmaWxlKQorZ3pGaWxlIGZp bGU7Cit7CisgICAgcmV0dXJuIGd6Z2V0YyhmaWxlKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAt LSAqLworaW50IFpFWFBPUlQgZ3p1bmdldGMoYywgZmlsZSkKKyAgICBpbnQgYzsKKyAgICBnekZp bGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwg c3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSBy ZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0 YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBz dGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyog cHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAg ICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel9za2lwKHN0YXRlLCBzdGF0ZS0+c2tp cCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogY2FuJ3Qg cHVzaCBFT0YgKi8KKyAgICBpZiAoYyA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8q IGlmIG91dHB1dCBidWZmZXIgZW1wdHksIHB1dCBieXRlIGF0IGVuZCAoYWxsb3dzIG1vcmUgcHVz aGluZykgKi8KKyAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwKSB7CisgICAgICAgIHN0YXRlLT54 LmhhdmUgPSAxOworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+ c2l6ZSA8PCAxKSAtIDE7CisgICAgICAgIHN0YXRlLT54Lm5leHRbMF0gPSAodW5zaWduZWQgY2hh ciljOworICAgICAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOwor ICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICAvKiBpZiBubyByb29tLCBnaXZlIHVwICht dXN0IGhhdmUgYWxyZWFkeSBkb25lIGEgZ3p1bmdldGMoKSkgKi8KKyAgICBpZiAoc3RhdGUtPngu aGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpf REFUQV9FUlJPUiwgIm91dCBvZiByb29tIHRvIHB1c2ggY2hhcmFjdGVycyIpOworICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogc2xpZGUgb3V0cHV0IGRhdGEgaWYgbmVlZGVkIGFu ZCBpbnNlcnQgYnl0ZSBiZWZvcmUgZXhpc3RpbmcgZGF0YSAqLworICAgIGlmIChzdGF0ZS0+eC5u ZXh0ID09IHN0YXRlLT5vdXQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjID0gc3RhdGUt Pm91dCArIHN0YXRlLT54LmhhdmU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0 ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpOworICAgICAgICB3aGlsZSAoc3JjID4gc3RhdGUt Pm91dCkKKyAgICAgICAgICAgICotLWRlc3QgPSAqLS1zcmM7CisgICAgICAgIHN0YXRlLT54Lm5l eHQgPSBkZXN0OworICAgIH0KKyAgICBzdGF0ZS0+eC5oYXZlKys7CisgICAgc3RhdGUtPngubmV4 dC0tOworICAgIHN0YXRlLT54Lm5leHRbMF0gPSAodW5zaWduZWQgY2hhciljOworICAgIHN0YXRl LT54LnBvcy0tOworICAgIHN0YXRlLT5wYXN0ID0gMDsKKyAgICByZXR1cm4gYzsKK30KKworLyog LS0gc2VlIHpsaWIuaCAtLSAqLworY2hhciAqIFpFWFBPUlQgZ3pnZXRzKGZpbGUsIGJ1ZiwgbGVu KQorICAgIGd6RmlsZSBmaWxlOworICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQgbGVuOworeworICAg IHVuc2lnbmVkIGxlZnQsIG47CisgICAgY2hhciAqc3RyOworICAgIHVuc2lnbmVkIGNoYXIgKmVv bDsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBjaGVjayBwYXJhbWV0ZXJzIGFuZCBn ZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCB8fCBidWYgPT0g TlVMTCB8fCBsZW4gPCAxKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdGF0ZSA9IChnel9z dGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0 aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9S RUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JV Rl9FUlJPUikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogcHJvY2VzcyBhIHNraXAg cmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9 IDA7CisgICAgICAgIGlmIChnel9za2lwKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAg ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBjb3B5IG91dHB1dCBieXRlcyB1 cCB0byBuZXcgbGluZSBvciBsZW4gLSAxLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QgLS0KKyAgICAg ICBhcHBlbmQgYSB0ZXJtaW5hdGluZyB6ZXJvIHRvIHRoZSBzdHJpbmcgKHdlIGRvbid0IGNoZWNr IGZvciBhIHplcm8gaW4KKyAgICAgICB0aGUgY29udGVudHMsIGxldCB0aGUgdXNlciB3b3JyeSBh Ym91dCB0aGF0KSAqLworICAgIHN0ciA9IGJ1ZjsKKyAgICBsZWZ0ID0gKHVuc2lnbmVkKWxlbiAt IDE7CisgICAgaWYgKGxlZnQpIGRvIHsKKyAgICAgICAgLyogYXNzdXJlIHRoYXQgc29tZXRoaW5n IGlzIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09 IDAgJiYgZ3pfZmV0Y2goc3RhdGUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAg ICAgICAgICAgICAgIC8qIGVycm9yICovCisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDAp IHsgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsg ICAgICAgICAgICAvKiByZWFkIHBhc3QgZW5kICovCisgICAgICAgICAgICBicmVhazsgICAgICAg ICAgICAgICAgICAgICAgLyogcmV0dXJuIHdoYXQgd2UgaGF2ZSAqLworICAgICAgICB9CisKKyAg ICAgICAgLyogbG9vayBmb3IgZW5kLW9mLWxpbmUgaW4gY3VycmVudCBvdXRwdXQgYnVmZmVyICov CisgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+eC5oYXZl OworICAgICAgICBlb2wgPSAodW5zaWduZWQgY2hhciAqKW1lbWNocihzdGF0ZS0+eC5uZXh0LCAn XG4nLCBuKTsKKyAgICAgICAgaWYgKGVvbCAhPSBOVUxMKQorICAgICAgICAgICAgbiA9ICh1bnNp Z25lZCkoZW9sIC0gc3RhdGUtPngubmV4dCkgKyAxOworCisgICAgICAgIC8qIGNvcHkgdGhyb3Vn aCBlbmQtb2YtbGluZSwgb3IgcmVtYWluZGVyIGlmIG5vdCBmb3VuZCAqLworICAgICAgICBtZW1j cHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOwor ICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwor ICAgICAgICBsZWZ0IC09IG47CisgICAgICAgIGJ1ZiArPSBuOworICAgIH0gd2hpbGUgKGxlZnQg JiYgZW9sID09IE5VTEwpOworCisgICAgLyogcmV0dXJuIHRlcm1pbmF0ZWQgc3RyaW5nLCBvciBp ZiBub3RoaW5nLCBlbmQgb2YgZmlsZSAqLworICAgIGlmIChidWYgPT0gc3RyKQorICAgICAgICBy ZXR1cm4gTlVMTDsKKyAgICBidWZbMF0gPSAwOworICAgIHJldHVybiBzdHI7Cit9CisKKy8qIC0t IHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6ZGlyZWN0KGZpbGUpCisgICAgZ3pGaWxl IGZpbGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0 cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAg IHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogaWYgdGhlIHN0YXRlIGlzIG5vdCBr bm93biwgYnV0IHdlIGNhbiBmaW5kIG91dCwgdGhlbiBkbyBzbyAodGhpcyBpcworICAgICAgIG1h aW5seSBmb3IgcmlnaHQgYWZ0ZXIgYSBnem9wZW4oKSBvciBnemRvcGVuKCkpICovCisgICAgaWYg KHN0YXRlLT5tb2RlID09IEdaX1JFQUQgJiYgc3RhdGUtPmhvdyA9PSBMT09LICYmIHN0YXRlLT54 LmhhdmUgPT0gMCkKKyAgICAgICAgKHZvaWQpZ3pfbG9vayhzdGF0ZSk7CisKKyAgICAvKiByZXR1 cm4gMSBpZiB0cmFuc3BhcmVudCwgMCBpZiBwcm9jZXNzaW5nIGEgZ3ppcCBzdHJlYW0gKi8KKyAg ICByZXR1cm4gc3RhdGUtPmRpcmVjdDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50 IFpFWFBPUlQgZ3pjbG9zZV9yKGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgaW50IHJl dCwgZXJyOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1 Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1f RVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0 IHdlJ3JlIHJlYWRpbmcgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkKKyAgICAg ICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogZnJlZSBtZW1vcnkgYW5kIGNsb3Nl IGZpbGUgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgaW5mbGF0ZUVuZCgmKHN0 YXRlLT5zdHJtKSk7CisgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgIGZyZWUoc3Rh dGUtPmluKTsKKyAgICB9CisgICAgZXJyID0gc3RhdGUtPmVyciA9PSBaX0JVRl9FUlJPUiA/IFpf QlVGX0VSUk9SIDogWl9PSzsKKyAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CisgICAg ZnJlZShzdGF0ZS0+cGF0aCk7CisgICAgcmV0ID0gY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBmcmVl KHN0YXRlKTsKKyAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IGVycjsKK30KZGlmZiAtciBhMDU3 OGM3OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvZ3p3cml0ZS5jCi0t LSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3N5cy9zcmMv Y21kL2dzL3psaWIvZ3p3cml0ZS5jCVdlZCBNYXkgMjcgMTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAt MCwwICsxLDY2NSBAQAorLyogZ3p3cml0ZS5jIC0tIHpsaWIgZnVuY3Rpb25zIGZvciB3cml0aW5n IGd6aXAgZmlsZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IE1hcmsgQWRsZXIKKyAqIEZv ciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGlj ZSBpbiB6bGliLmgKKyAqLworCisjaW5jbHVkZSAiZ3pndXRzLmgiCisKKy8qIExvY2FsIGZ1bmN0 aW9ucyAqLworbG9jYWwgaW50IGd6X2luaXQgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6 X2NvbXAgT0YoKGd6X3N0YXRlcCwgaW50KSk7Citsb2NhbCBpbnQgZ3pfemVybyBPRigoZ3pfc3Rh dGVwLCB6X29mZjY0X3QpKTsKK2xvY2FsIHpfc2l6ZV90IGd6X3dyaXRlIE9GKChnel9zdGF0ZXAs IHZvaWRwYywgel9zaXplX3QpKTsKKworLyogSW5pdGlhbGl6ZSBzdGF0ZSBmb3Igd3JpdGluZyBh IGd6aXAgZmlsZS4gIE1hcmsgaW5pdGlhbGl6YXRpb24gYnkgc2V0dGluZworICAgc3RhdGUtPnNp emUgdG8gbm9uLXplcm8uICBSZXR1cm4gLTEgb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJl LCBvciAwIG9uCisgICBzdWNjZXNzLiAqLworbG9jYWwgaW50IGd6X2luaXQoc3RhdGUpCisgICAg Z3pfc3RhdGVwIHN0YXRlOworeworICAgIGludCByZXQ7CisgICAgel9zdHJlYW1wIHN0cm0gPSAm KHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGFsbG9jYXRlIGlucHV0IGJ1ZmZlciAoZG91YmxlIHNp emUgZm9yIGd6cHJpbnRmKSAqLworICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFs bG9jKHN0YXRlLT53YW50IDw8IDEpOworICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCkgeworICAg ICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBvbmx5IG5lZWQgb3V0cHV0IGJ1ZmZlciBh bmQgZGVmbGF0ZSBzdGF0ZSBpZiBjb21wcmVzc2luZyAqLworICAgIGlmICghc3RhdGUtPmRpcmVj dCkgeworICAgICAgICAvKiBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIHN0YXRl LT5vdXQgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgICAgIGlm IChzdGF0ZS0+b3V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAg ICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFsbG9jYXRl IGRlZmxhdGUgbWVtb3J5LCBzZXQgdXAgZm9yIGd6aXAgY29tcHJlc3Npb24gKi8KKyAgICAgICAg c3RybS0+emFsbG9jID0gWl9OVUxMOworICAgICAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKKyAg ICAgICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOworICAgICAgICByZXQgPSBkZWZsYXRlSW5pdDIo c3RybSwgc3RhdGUtPmxldmVsLCBaX0RFRkxBVEVELAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgTUFYX1dCSVRTICsgMTYsIERFRl9NRU1fTEVWRUwsIHN0YXRlLT5zdHJhdGVneSk7CisgICAg ICAgIGlmIChyZXQgIT0gWl9PSykgeworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAg ICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBa X01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg ICAgICAgfQorICAgICAgICBzdHJtLT5uZXh0X2luID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBt YXJrIHN0YXRlIGFzIGluaXRpYWxpemVkICovCisgICAgc3RhdGUtPnNpemUgPSBzdGF0ZS0+d2Fu dDsKKworICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyIGlmIGNvbXByZXNzaW5nICovCisg ICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRl LT5zaXplOworICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgIHN0 YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK Ky8qIENvbXByZXNzIHdoYXRldmVyIGlzIGF0IGF2YWlsX2luIGFuZCBuZXh0X2luIGFuZCB3cml0 ZSB0byB0aGUgb3V0cHV0IGZpbGUuCisgICBSZXR1cm4gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3Ig d3JpdGluZyB0byB0aGUgb3V0cHV0IGZpbGUgb3IgaWYgZ3pfaW5pdCgpCisgICBmYWlscyB0byBh bGxvY2F0ZSBtZW1vcnksIG90aGVyd2lzZSAwLiAgZmx1c2ggaXMgYXNzdW1lZCB0byBiZSBhIHZh bGlkCisgICBkZWZsYXRlKCkgZmx1c2ggdmFsdWUuICBJZiBmbHVzaCBpcyBaX0ZJTklTSCwgdGhl biB0aGUgZGVmbGF0ZSgpIHN0YXRlIGlzCisgICByZXNldCB0byBzdGFydCBhIG5ldyBnemlwIHN0 cmVhbS4gIElmIGd6LT5kaXJlY3QgaXMgdHJ1ZSwgdGhlbiBzaW1wbHkgd3JpdGUKKyAgIHRvIHRo ZSBvdXRwdXQgZmlsZSB3aXRob3V0IGNvbXByZXNzaW5nLCBhbmQgaWdub3JlIGZsdXNoLiAqLwor bG9jYWwgaW50IGd6X2NvbXAoc3RhdGUsIGZsdXNoKQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAg ICBpbnQgZmx1c2g7Cit7CisgICAgaW50IHJldCwgd3JpdDsKKyAgICB1bnNpZ25lZCBoYXZlLCBw dXQsIG1heCA9ICgodW5zaWduZWQpLTEgPj4gMikgKyAxOworICAgIHpfc3RyZWFtcCBzdHJtID0g JihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgaWYgdGhpcyBpcyB0aGUg Zmlyc3QgdGltZSB0aHJvdWdoICovCisgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5p dChzdGF0ZSkgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHdyaXRlIGRpcmVj dGx5IGlmIHJlcXVlc3RlZCAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIHdo aWxlIChzdHJtLT5hdmFpbF9pbikgeworICAgICAgICAgICAgcHV0ID0gc3RybS0+YXZhaWxfaW4g PiBtYXggPyBtYXggOiBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgICAgIHdyaXQgPSB3cml0ZShz dGF0ZS0+ZmQsIHN0cm0tPm5leHRfaW4sIHB1dCk7CisgICAgICAgICAgICBpZiAod3JpdCA8IDAp IHsKKyAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkp OworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHN0cm0tPmF2YWlsX2luIC09ICh1bnNpZ25lZCl3cml0OworICAgICAgICAgICAgc3RybS0+bmV4 dF9pbiArPSB3cml0OworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg IC8qIHJ1biBkZWZsYXRlKCkgb24gcHJvdmlkZWQgaW5wdXQgdW50aWwgaXQgcHJvZHVjZXMgbm8g bW9yZSBvdXRwdXQgKi8KKyAgICByZXQgPSBaX09LOworICAgIGRvIHsKKyAgICAgICAgLyogd3Jp dGUgb3V0IGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIGlmIGZ1bGwsIG9yIGlmIGZsdXNoaW5nLCBi dXQgaWYKKyAgICAgICAgICAgZG9pbmcgWl9GSU5JU0ggdGhlbiBkb24ndCB3cml0ZSB1bnRpbCB3 ZSBnZXQgdG8gWl9TVFJFQU1fRU5EICovCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9vdXQgPT0g MCB8fCAoZmx1c2ggIT0gWl9OT19GTFVTSCAmJgorICAgICAgICAgICAgKGZsdXNoICE9IFpfRklO SVNIIHx8IHJldCA9PSBaX1NUUkVBTV9FTkQpKSkgeworICAgICAgICAgICAgd2hpbGUgKHN0cm0t Pm5leHRfb3V0ID4gc3RhdGUtPngubmV4dCkgeworICAgICAgICAgICAgICAgIHB1dCA9IHN0cm0t Pm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCA+IChpbnQpbWF4ID8gbWF4IDoKKyAgICAgICAgICAg ICAgICAgICAgICAodW5zaWduZWQpKHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCk7Cisg ICAgICAgICAgICAgICAgd3JpdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RhdGUtPngubmV4dCwgcHV0 KTsKKyAgICAgICAgICAgICAgICBpZiAod3JpdCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAg Z3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZS0+ eC5uZXh0ICs9IHdyaXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RybS0+YXZh aWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+ c2l6ZTsKKyAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAg ICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKworICAgICAgICAvKiBjb21wcmVzcyAqLworICAgICAgICBoYXZlID0gc3RybS0+ YXZhaWxfb3V0OworICAgICAgICByZXQgPSBkZWZsYXRlKHN0cm0sIGZsdXNoKTsKKyAgICAgICAg aWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUikgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUs IFpfU1RSRUFNX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjog ZGVmbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICB9CisgICAgICAgIGhhdmUgLT0gc3RybS0+YXZhaWxfb3V0OworICAgIH0gd2hpbGUgKGhhdmUp OworCisgICAgLyogaWYgdGhhdCBjb21wbGV0ZWQgYSBkZWZsYXRlIHN0cmVhbSwgYWxsb3cgYW5v dGhlciB0byBzdGFydCAqLworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkKKyAgICAgICAgZGVm bGF0ZVJlc2V0KHN0cm0pOworCisgICAgLyogYWxsIGRvbmUsIG5vIGVycm9ycyAqLworICAgIHJl dHVybiAwOworfQorCisvKiBDb21wcmVzcyBsZW4gemVyb3MgdG8gb3V0cHV0LiAgUmV0dXJuIC0x IG9uIGEgd3JpdGUgZXJyb3Igb3IgbWVtb3J5CisgICBhbGxvY2F0aW9uIGZhaWx1cmUgYnkgZ3pf Y29tcCgpLCBvciAwIG9uIHN1Y2Nlc3MuICovCitsb2NhbCBpbnQgZ3pfemVybyhzdGF0ZSwgbGVu KQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X29mZjY0X3QgbGVuOworeworICAgIGludCBm aXJzdDsKKyAgICB1bnNpZ25lZCBuOworICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3Ry bSk7CisKKyAgICAvKiBjb25zdW1lIHdoYXRldmVyJ3MgbGVmdCBpbiB0aGUgaW5wdXQgYnVmZmVy ICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gp ID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjb21wcmVzcyBsZW4gemVyb3Mg KGxlbiBndWFyYW50ZWVkID4gMCkgKi8KKyAgICBmaXJzdCA9IDE7CisgICAgd2hpbGUgKGxlbikg eworICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT5zaXplKSB8fCAoel9vZmY2NF90KXN0YXRlLT5z aXplID4gbGVuID8KKyAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+c2l6ZTsKKyAg ICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICBtZW1zZXQoc3RhdGUtPmluLCAwLCBuKTsK KyAgICAgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBzdHJtLT5hdmFpbF9p biA9IG47CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgICAgIHN0YXRl LT54LnBvcyArPSBuOworICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0g LTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGxlbiAtPSBuOworICAgIH0KKyAg ICByZXR1cm4gMDsKK30KKworLyogV3JpdGUgbGVuIGJ5dGVzIGZyb20gYnVmIHRvIGZpbGUuICBS ZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiAgSWYKKyAgIHRoZSByZXR1cm5lZCB2 YWx1ZSBpcyBsZXNzIHRoYW4gbGVuLCB0aGVuIHRoZXJlIHdhcyBhbiBlcnJvci4gKi8KK2xvY2Fs IHpfc2l6ZV90IGd6X3dyaXRlKHN0YXRlLCBidWYsIGxlbikKKyAgICBnel9zdGF0ZXAgc3RhdGU7 CisgICAgdm9pZHBjIGJ1ZjsKKyAgICB6X3NpemVfdCBsZW47Cit7CisgICAgel9zaXplX3QgcHV0 ID0gbGVuOworCisgICAgLyogaWYgbGVuIGlzIHplcm8sIGF2b2lkIHVubmVjZXNzYXJ5IG9wZXJh dGlvbnMgKi8KKyAgICBpZiAobGVuID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyog YWxsb2NhdGUgbWVtb3J5IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLworICAg IGlmIChzdGF0ZS0+c2l6ZSA9PSAwICYmIGd6X2luaXQoc3RhdGUpID09IC0xKQorICAgICAgICBy ZXR1cm4gMDsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3Rh dGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVy byhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgICAgLyogZm9yIHNtYWxsIGxlbiwgY29weSB0byBpbnB1dCBidWZmZXIsIG90aGVyd2lz ZSBjb21wcmVzcyBkaXJlY3RseSAqLworICAgIGlmIChsZW4gPCBzdGF0ZS0+c2l6ZSkgeworICAg ICAgICAvKiBjb3B5IHRvIGlucHV0IGJ1ZmZlciwgY29tcHJlc3Mgd2hlbiBmdWxsICovCisgICAg ICAgIGRvIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGhhdmUsIGNvcHk7CisKKyAgICAgICAgICAg IGlmIChzdGF0ZS0+c3RybS5hdmFpbF9pbiA9PSAwKQorICAgICAgICAgICAgICAgIHN0YXRlLT5z dHJtLm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgo c3RhdGUtPnN0cm0ubmV4dF9pbiArIHN0YXRlLT5zdHJtLmF2YWlsX2luKSAtCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aW4pOworICAgICAgICAgICAgY29weSA9IHN0YXRl LT5zaXplIC0gaGF2ZTsKKyAgICAgICAgICAgIGlmIChjb3B5ID4gbGVuKQorICAgICAgICAgICAg ICAgIGNvcHkgPSBsZW47CisgICAgICAgICAgICBtZW1jcHkoc3RhdGUtPmluICsgaGF2ZSwgYnVm LCBjb3B5KTsKKyAgICAgICAgICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luICs9IGNvcHk7CisgICAg ICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gY29weTsKKyAgICAgICAgICAgIGJ1ZiA9IChjb25zdCBj aGFyICopYnVmICsgY29weTsKKyAgICAgICAgICAgIGxlbiAtPSBjb3B5OworICAgICAgICAgICAg aWYgKGxlbiAmJiBnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKyAgICAgICAgfSB3aGlsZSAobGVuKTsKKyAgICB9CisgICAgZWxzZSB7 CisgICAgICAgIC8qIGNvbnN1bWUgd2hhdGV2ZXIncyBsZWZ0IGluIHRoZSBpbnB1dCBidWZmZXIg Ki8KKyAgICAgICAgaWYgKHN0YXRlLT5zdHJtLmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpf Tk9fRkxVU0gpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLyogZGly ZWN0bHkgY29tcHJlc3MgdXNlciBidWZmZXIgdG8gZmlsZSAqLworICAgICAgICBzdGF0ZS0+c3Ry bS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilidWY7CisgICAgICAgIGRvIHsKKyAgICAgICAg ICAgIHVuc2lnbmVkIG4gPSAodW5zaWduZWQpLTE7CisgICAgICAgICAgICBpZiAobiA+IGxlbikK KyAgICAgICAgICAgICAgICBuID0gbGVuOworICAgICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxf aW4gPSBuOworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IG47CisgICAgICAgICAgICBpZiAo Z3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgICAgICBsZW4gLT0gbjsKKyAgICAgICAgfSB3aGlsZSAobGVuKTsKKyAgICB9 CisKKyAgICAvKiBpbnB1dCB3YXMgYWxsIGJ1ZmZlcmVkIG9yIGNvbXByZXNzZWQgKi8KKyAgICBy ZXR1cm4gcHV0OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnendy aXRlKGZpbGUsIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBmaWxlOworICAgIHZvaWRwYyBidWY7Cisg ICAgdW5zaWduZWQgbGVuOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBp bnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1 cm4gMDsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQg d2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRl LT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJu IDA7CisKKyAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0 cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KKyAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2 b2lkcyBhIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KKyAgICBpZiAoKGludClsZW4gPCAwKSB7 CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3Ro IGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg Lyogd3JpdGUgbGVuIGJ5dGVzIGZyb20gYnVmICh0aGUgcmV0dXJuIHZhbHVlIHdpbGwgZml0IGlu IGFuIGludCkgKi8KKyAgICByZXR1cm4gKGludClnel93cml0ZShzdGF0ZSwgYnVmLCBsZW4pOwor fQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X3NpemVfdCBaRVhQT1JUIGd6ZndyaXRlKGJ1 Ziwgc2l6ZSwgbml0ZW1zLCBmaWxlKQorICAgIHZvaWRwYyBidWY7CisgICAgel9zaXplX3Qgc2l6 ZTsKKyAgICB6X3NpemVfdCBuaXRlbXM7CisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgel9zaXpl X3QgbGVuOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1 Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBz dGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGlu ZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEda X1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAv KiBjb21wdXRlIGJ5dGVzIHRvIHJlYWQgLS0gZXJyb3Igb24gb3ZlcmZsb3cgKi8KKyAgICBsZW4g PSBuaXRlbXMgKiBzaXplOworICAgIGlmIChzaXplICYmIGxlbiAvIHNpemUgIT0gbml0ZW1zKSB7 CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJPUiwgInJlcXVlc3QgZG9lcyBu b3QgZml0IGluIGEgc2l6ZV90Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8q IHdyaXRlIGxlbiBieXRlcyB0byBidWYsIHJldHVybiB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMg d3JpdHRlbiAqLworICAgIHJldHVybiBsZW4gPyBnel93cml0ZShzdGF0ZSwgYnVmLCBsZW4pIC8g c2l6ZSA6IDA7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cHV0 YyhmaWxlLCBjKQorICAgIGd6RmlsZSBmaWxlOworICAgIGludCBjOworeworICAgIHVuc2lnbmVk IGhhdmU7CisgICAgdW5zaWduZWQgY2hhciBidWZbMV07CisgICAgZ3pfc3RhdGVwIHN0YXRlOwor ICAgIHpfc3RyZWFtcCBzdHJtOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwor ICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChn el9zdGF0ZXApZmlsZTsKKyAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBjaGVj ayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlm IChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAg IHJldHVybiAtMTsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAo c3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pf emVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICAgIC8qIHRyeSB3cml0aW5nIHRvIGlucHV0IGJ1ZmZlciBmb3Igc3BlZWQgKHN0 YXRlLT5zaXplID09IDAgaWYgYnVmZmVyIG5vdAorICAgICAgIGluaXRpYWxpemVkKSAqLworICAg IGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAg ICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgICAgIGhhdmUgPSAodW5z aWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAg ICAgICAgaWYgKGhhdmUgPCBzdGF0ZS0+c2l6ZSkgeworICAgICAgICAgICAgc3RhdGUtPmluW2hh dmVdID0gKHVuc2lnbmVkIGNoYXIpYzsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luKys7Cisg ICAgICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHhmZjsK KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIG5vIHJvb20gaW4gYnVmZmVyIG9yIG5vdCBpbml0 aWFsaXplZCwgdXNlIGd6X3dyaXRlKCkgKi8KKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhcilj OworICAgIGlmIChnel93cml0ZShzdGF0ZSwgYnVmLCAxKSAhPSAxKQorICAgICAgICByZXR1cm4g LTE7CisgICAgcmV0dXJuIGMgJiAweGZmOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitp bnQgWkVYUE9SVCBnenB1dHMoZmlsZSwgc3RyKQorICAgIGd6RmlsZSBmaWxlOworICAgIGNvbnN0 IGNoYXIgKnN0cjsKK3sKKyAgICBpbnQgcmV0OworICAgIHpfc2l6ZV90IGxlbjsKKyAgICBnel9z dGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYg KGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRl cClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJl J3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUt PmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiB3cml0ZSBzdHJpbmcg Ki8KKyAgICBsZW4gPSBzdHJsZW4oc3RyKTsKKyAgICByZXQgPSBnel93cml0ZShzdGF0ZSwgc3Ry LCBsZW4pOworICAgIHJldHVybiByZXQgPT0gMCAmJiBsZW4gIT0gMCA/IC0xIDogcmV0OworfQor CisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyNpbmNsdWRl IDxzdGRhcmcuaD4KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlRWQSBnenZw cmludGYoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3sKKyAg ICBpbnQgbGVuOworICAgIHVuc2lnbmVkIGxlZnQ7CisgICAgY2hhciAqbmV4dDsKKyAgICBnel9z dGF0ZXAgc3RhdGU7CisgICAgel9zdHJlYW1wIHN0cm07CisKKyAgICAvKiBnZXQgaW50ZXJuYWwg c3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RS RUFNX0VSUk9SOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIHN0cm0gPSAmKHN0 YXRlLT5zdHJtKTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0 aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0 YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAg LyogbWFrZSBzdXJlIHdlIGhhdmUgc29tZSBidWZmZXIgc3BhY2UgKi8KKyAgICBpZiAoc3RhdGUt PnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIHN0YXRl LT5lcnI7CisKKyAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRl LT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8o c3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJy OworICAgIH0KKworICAgIC8qIGRvIHRoZSBwcmludGYoKSBpbnRvIHRoZSBpbnB1dCBidWZmZXIs IHB1dCBsZW5ndGggaW4gbGVuIC0tIHRoZSBpbnB1dAorICAgICAgIGJ1ZmZlciBpcyBkb3VibGUt c2l6ZWQganVzdCBmb3IgdGhpcyBmdW5jdGlvbiwgc28gdGhlcmUgaXMgZ3VhcmFudGVlZCB0bwor ICAgICAgIGJlIHN0YXRlLT5zaXplIGJ5dGVzIGF2YWlsYWJsZSBhZnRlciB0aGUgY3VycmVudCBj b250ZW50cyAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICBzdHJtLT5u ZXh0X2luID0gc3RhdGUtPmluOworICAgIG5leHQgPSAoY2hhciAqKShzdGF0ZS0+aW4gKyAoc3Ry bS0+bmV4dF9pbiAtIHN0YXRlLT5pbikgKyBzdHJtLT5hdmFpbF9pbik7CisgICAgbmV4dFtzdGF0 ZS0+c2l6ZSAtIDFdID0gMDsKKyNpZmRlZiBOT192c25wcmludGYKKyMgIGlmZGVmIEhBU192c3By aW50Zl92b2lkCisgICAgKHZvaWQpdnNwcmludGYobmV4dCwgZm9ybWF0LCB2YSk7CisgICAgZm9y IChsZW4gPSAwOyBsZW4gPCBzdGF0ZS0+c2l6ZTsgbGVuKyspCisgICAgICAgIGlmIChuZXh0W2xl bl0gPT0gMCkgYnJlYWs7CisjICBlbHNlCisgICAgbGVuID0gdnNwcmludGYobmV4dCwgZm9ybWF0 LCB2YSk7CisjICBlbmRpZgorI2Vsc2UKKyMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAorICAg ICh2b2lkKXZzbnByaW50ZihuZXh0LCBzdGF0ZS0+c2l6ZSwgZm9ybWF0LCB2YSk7CisgICAgbGVu ID0gc3RybGVuKG5leHQpOworIyAgZWxzZQorICAgIGxlbiA9IHZzbnByaW50ZihuZXh0LCBzdGF0 ZS0+c2l6ZSwgZm9ybWF0LCB2YSk7CisjICBlbmRpZgorI2VuZGlmCisKKyAgICAvKiBjaGVjayB0 aGF0IHByaW50ZigpIHJlc3VsdHMgZml0IGluIGJ1ZmZlciAqLworICAgIGlmIChsZW4gPT0gMCB8 fCAodW5zaWduZWQpbGVuID49IHN0YXRlLT5zaXplIHx8IG5leHRbc3RhdGUtPnNpemUgLSAxXSAh PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0 aW9uLCBjb21wcmVzcyBmaXJzdCBoYWxmIGlmIHBhc3QgdGhhdCAqLworICAgIHN0cm0tPmF2YWls X2luICs9ICh1bnNpZ25lZClsZW47CisgICAgc3RhdGUtPngucG9zICs9IGxlbjsKKyAgICBpZiAo c3RybS0+YXZhaWxfaW4gPj0gc3RhdGUtPnNpemUpIHsKKyAgICAgICAgbGVmdCA9IHN0cm0tPmF2 YWlsX2luIC0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gc3RhdGUtPnNp emU7CisgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKKyAgICAg ICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyOworICAgICAgICBtZW1jcHkoc3RhdGUtPmluLCBzdGF0 ZS0+aW4gKyBzdGF0ZS0+c2l6ZSwgbGVmdCk7CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0 ZS0+aW47CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gbGVmdDsKKyAgICB9CisgICAgcmV0dXJu IGxlbjsKK30KKworaW50IFpFWFBPUlRWQSBnenByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hh ciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCB2YTsKKyAgICBpbnQgcmV0OworCisgICAg dmFfc3RhcnQodmEsIGZvcm1hdCk7CisgICAgcmV0ID0gZ3p2cHJpbnRmKGZpbGUsIGZvcm1hdCwg dmEpOworICAgIHZhX2VuZCh2YSk7CisgICAgcmV0dXJuIHJldDsKK30KKworI2Vsc2UgLyogIVNU REMgJiYgIVpfSEFWRV9TVERBUkdfSCAqLworCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQg WkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYs IGE3LCBhOCwgYTksIGExMCwKKyAgICAgICAgICAgICAgICAgICAgICAgYTExLCBhMTIsIGExMywg YTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKQorICAgIGd6RmlsZSBmaWxlOworICAg IGNvbnN0IGNoYXIgKmZvcm1hdDsKKyAgICBpbnQgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcs IGE4LCBhOSwgYTEwLAorICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcs IGExOCwgYTE5LCBhMjA7Cit7CisgICAgdW5zaWduZWQgbGVuLCBsZWZ0OworICAgIGNoYXIgKm5l eHQ7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpfc3RyZWFtcCBzdHJtOworCisgICAgLyog Z2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAg IHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAg ICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBjaGVjayB0aGF0IGNhbiByZWFsbHkg cGFzcyBwb2ludGVyIGluIGludHMgKi8KKyAgICBpZiAoc2l6ZW9mKGludCkgIT0gc2l6ZW9mKHZv aWQgKikpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIGNoZWNrIHRo YXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0 YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0 dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgc29tZSBidWZm ZXIgc3BhY2UgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9 PSAtMSkKKyAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnJvcjsKKworICAgIC8qIGNoZWNrIGZvciBz ZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNl ZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQor ICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnJvcjsKKyAgICB9CisKKyAgICAvKiBkbyB0aGUg cHJpbnRmKCkgaW50byB0aGUgaW5wdXQgYnVmZmVyLCBwdXQgbGVuZ3RoIGluIGxlbiAtLSB0aGUg aW5wdXQKKyAgICAgICBidWZmZXIgaXMgZG91YmxlLXNpemVkIGp1c3QgZm9yIHRoaXMgZnVuY3Rp b24sIHNvIHRoZXJlIGlzIGd1YXJhbnRlZWQgdG8KKyAgICAgICBiZSBzdGF0ZS0+c2l6ZSBieXRl cyBhdmFpbGFibGUgYWZ0ZXIgdGhlIGN1cnJlbnQgY29udGVudHMgKi8KKyAgICBpZiAoc3RybS0+ YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICBu ZXh0ID0gKGNoYXIgKikoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKTsKKyAgICBuZXh0 W3N0YXRlLT5zaXplIC0gMV0gPSAwOworI2lmZGVmIE5PX3NucHJpbnRmCisjICBpZmRlZiBIQVNf c3ByaW50Zl92b2lkCisgICAgc3ByaW50ZihuZXh0LCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBh NSwgYTYsIGE3LCBhOCwgYTksIGExMCwgYTExLCBhMTIsCisgICAgICAgICAgICBhMTMsIGExNCwg YTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBz aXplOyBsZW4rKykKKyAgICAgICAgaWYgKG5leHRbbGVuXSA9PSAwKQorICAgICAgICAgICAgYnJl YWs7CisjICBlbHNlCisgICAgbGVuID0gc3ByaW50ZihuZXh0LCBmb3JtYXQsIGExLCBhMiwgYTMs IGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwgYTExLAorICAgICAgICAgICAgICAgICAgYTEy LCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisjICBlbmRpZgorI2Vs c2UKKyMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCisgICAgc25wcmludGYobmV4dCwgc3RhdGUt PnNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwKKyAgICAg ICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTks IGEyMCk7CisgICAgbGVuID0gc3RybGVuKG5leHQpOworIyAgZWxzZQorICAgIGxlbiA9IHNucHJp bnRmKG5leHQsIHN0YXRlLT5zaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3 LCBhOCwKKyAgICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGEx NSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworIyAgZW5kaWYKKyNlbmRpZgorCisgICAgLyog Y2hlY2sgdGhhdCBwcmludGYoKSByZXN1bHRzIGZpdCBpbiBidWZmZXIgKi8KKyAgICBpZiAobGVu ID09IDAgfHwgbGVuID49IHN0YXRlLT5zaXplIHx8IG5leHRbc3RhdGUtPnNpemUgLSAxXSAhPSAw KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9u LCBjb21wcmVzcyBmaXJzdCBoYWxmIGlmIHBhc3QgdGhhdCAqLworICAgIHN0cm0tPmF2YWlsX2lu ICs9IGxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOworICAgIGlmIChzdHJtLT5hdmFpbF9p biA+PSBzdGF0ZS0+c2l6ZSkgeworICAgICAgICBsZWZ0ID0gc3RybS0+YXZhaWxfaW4gLSBzdGF0 ZS0+c2l6ZTsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBzdGF0ZS0+c2l6ZTsKKyAgICAgICAg aWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICAgICAgcmV0dXJu IHN0YXRlLT5lcnI7CisgICAgICAgIG1lbWNweShzdGF0ZS0+aW4sIHN0YXRlLT5pbiArIHN0YXRl LT5zaXplLCBsZWZ0KTsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICAg ICAgc3RybS0+YXZhaWxfaW4gPSBsZWZ0OworICAgIH0KKyAgICByZXR1cm4gKGludClsZW47Cit9 CisKKyNlbmRpZgorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnemZsdXNo KGZpbGUsIGZsdXNoKQorICAgIGd6RmlsZSBmaWxlOworICAgIGludCBmbHVzaDsKK3sKKyAgICBn el9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAg aWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0 YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5n IGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pf V1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJS T1I7CisKKyAgICAvKiBjaGVjayBmbHVzaCBwYXJhbWV0ZXIgKi8KKyAgICBpZiAoZmx1c2ggPCAw IHx8IGZsdXNoID4gWl9GSU5JU0gpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKwor ICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNlZWspIHsK KyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3Rh dGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnI7CisgICAgfQor CisgICAgLyogY29tcHJlc3MgcmVtYWluaW5nIGRhdGEgd2l0aCByZXF1ZXN0ZWQgZmx1c2ggKi8K KyAgICAodm9pZClnel9jb21wKHN0YXRlLCBmbHVzaCk7CisgICAgcmV0dXJuIHN0YXRlLT5lcnI7 Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6c2V0cGFyYW1zKGZp bGUsIGxldmVsLCBzdHJhdGVneSkKKyAgICBnekZpbGUgZmlsZTsKKyAgICBpbnQgbGV2ZWw7Cisg ICAgaW50IHN0cmF0ZWd5OworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X3N0cmVhbXAg c3RybTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9 PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pf c3RhdGVwKWZpbGU7CisgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogY2hlY2sg dGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAo c3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICBy ZXR1cm4gWl9TVFJFQU1fRVJST1I7CisKKyAgICAvKiBpZiBubyBjaGFuZ2UgaXMgcmVxdWVzdGVk LCB0aGVuIGRvIG5vdGhpbmcgKi8KKyAgICBpZiAobGV2ZWwgPT0gc3RhdGUtPmxldmVsICYmIHN0 cmF0ZWd5ID09IHN0YXRlLT5zdHJhdGVneSkKKyAgICAgICAgcmV0dXJuIFpfT0s7CisKKyAgICAv KiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAg ICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5z a2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS0+ZXJyOworICAgIH0KKworICAg IC8qIGNoYW5nZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGZvciBzdWJzZXF1ZW50IGlucHV0ICov CisgICAgaWYgKHN0YXRlLT5zaXplKSB7CisgICAgICAgIC8qIGZsdXNoIHByZXZpb3VzIGlucHV0 IHdpdGggcHJldmlvdXMgcGFyYW1ldGVycyBiZWZvcmUgY2hhbmdpbmcgKi8KKyAgICAgICAgaWYg KHN0cm0tPmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpfQkxPQ0spID09IC0xKQorICAgICAg ICAgICAgcmV0dXJuIHN0YXRlLT5lcnI7CisgICAgICAgIGRlZmxhdGVQYXJhbXMoc3RybSwgbGV2 ZWwsIHN0cmF0ZWd5KTsKKyAgICB9CisgICAgc3RhdGUtPmxldmVsID0gbGV2ZWw7CisgICAgc3Rh dGUtPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qIC0tIHNl ZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6Y2xvc2VfdyhmaWxlKQorICAgIGd6RmlsZSBm aWxlOworeworICAgIGludCByZXQgPSBaX09LOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAg IC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAg ICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7 CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgKi8KKyAgICBpZiAoc3RhdGUtPm1v ZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8q IGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNlZWspIHsKKyAgICAg ICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNr aXApID09IC0xKQorICAgICAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKKyAgICB9CisKKyAgICAv KiBmbHVzaCwgZnJlZSBtZW1vcnksIGFuZCBjbG9zZSBmaWxlICovCisgICAgaWYgKGd6X2NvbXAo c3RhdGUsIFpfRklOSVNIKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKKyAgICBp ZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAg ICAgICAodm9pZClkZWZsYXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKKyAgICAgICAgICAgIGZyZWUo c3RhdGUtPm91dCk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgIH0K KyAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CisgICAgZnJlZShzdGF0ZS0+cGF0aCk7 CisgICAgaWYgKGNsb3NlKHN0YXRlLT5mZCkgPT0gLTEpCisgICAgICAgIHJldCA9IFpfRVJSTk87 CisgICAgZnJlZShzdGF0ZSk7CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtciBhMDU3OGM3OThl MTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvaW5mYmFjay5jCi0tLSBhL3N5 cy9zcmMvY21kL2dzL3psaWIvaW5mYmFjay5jCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIw MAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2luZmJhY2suYwlXZWQgTWF5IDI3IDE3OjM5OjM3 IDIwMjAgLTAzMDAKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZiYWNrLmMgLS0gaW5mbGF0ZSB1c2lu ZyBhIGNhbGwtYmFjayBpbnRlcmZhY2UKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIE1hcmsg QWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IE1hcmsgQWRsZXIKICAqIEZvciBjb25k aXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6 bGliLmgKICAqLwogCkBAIC0yNiw3ICsyNiw3IEBACiAgICB3aW5kb3cgYW5kIG91dHB1dCBidWZm ZXIgdGhhdCBpcyAyKip3aW5kb3dCaXRzIGJ5dGVzLgogICovCiBpbnQgWkVYUE9SVCBpbmZsYXRl QmFja0luaXRfKHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdywgdmVyc2lvbiwgc3RyZWFtX3NpemUp Ci16X3N0cmVhbSBGQVIgKnN0cm07Cit6X3N0cmVhbXAgc3RybTsKIGludCB3aW5kb3dCaXRzOwog dW5zaWduZWQgY2hhciBGQVIgKndpbmRvdzsKIGNvbnN0IGNoYXIgKnZlcnNpb247CkBAIC00Miwx OSArNDIsMjkgQEAKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0cm0tPm1z ZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9y ICovCiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9T T0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAgICAgIHN0cm0t PnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNl bmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSBzdHJtLT56 ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lm ZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgIHN0 cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVf c3RhdGUgRkFSICopWkFMTE9DKHN0cm0sIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwogICAgIGlm IChzdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKICAgICBUcmFjZXYoKHN0ZGVy ciwgImluZmxhdGU6IGFsbG9jYXRlZFxuIikpOwotICAgIHN0cm0tPnN0YXRlID0gKHZvaWRwZilz dGF0ZTsKLSAgICBzdGF0ZS0+d2JpdHMgPSB3aW5kb3dCaXRzOworICAgIHN0cm0tPnN0YXRlID0g KHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKilzdGF0ZTsKKyAgICBzdGF0ZS0+ZG1heCA9IDMy NzY4VTsKKyAgICBzdGF0ZS0+d2JpdHMgPSAodUludCl3aW5kb3dCaXRzOwogICAgIHN0YXRlLT53 c2l6ZSA9IDFVIDw8IHdpbmRvd0JpdHM7CiAgICAgc3RhdGUtPndpbmRvdyA9IHdpbmRvdzsKLSAg ICBzdGF0ZS0+d3JpdGUgPSAwOworICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgc3RhdGUtPndo YXZlID0gMDsKICAgICByZXR1cm4gWl9PSzsKIH0KQEAgLTIzOCwyMSArMjQ4LDIxIEBACiAgICBh cmUgbm90IGNvcnJlY3QsIGkuZS4gc3RybSBpcyBaX05VTEwgb3IgdGhlIHN0YXRlIHdhcyBub3Qg aW5pdGlhbGl6ZWQuCiAgKi8KIGludCBaRVhQT1JUIGluZmxhdGVCYWNrKHN0cm0sIGluLCBpbl9k ZXNjLCBvdXQsIG91dF9kZXNjKQotel9zdHJlYW0gRkFSICpzdHJtOworel9zdHJlYW1wIHN0cm07 CiBpbl9mdW5jIGluOwogdm9pZCBGQVIgKmluX2Rlc2M7CiBvdXRfZnVuYyBvdXQ7CiB2b2lkIEZB UiAqb3V0X2Rlc2M7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAg ICB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29u c3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNp Z25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBo YXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1 bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwogICAgIHVuc2lnbmVk IGJpdHM7ICAgICAgICAgICAgICAvKiBiaXRzIGluIGJpdCBidWZmZXIgKi8KICAgICB1bnNpZ25l ZCBjb3B5OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN0b3JlZCBvciBtYXRjaCBieXRlcyB0 byBjb3B5ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmZyb207ICAgIC8qIHdoZXJlIHRvIGNv cHkgbWF0Y2ggYnl0ZXMgZnJvbSAqLwotICAgIGNvZGUgdGhpczsgICAgICAgICAgICAgICAgICAv KiBjdXJyZW50IGRlY29kaW5nIHRhYmxlIGVudHJ5ICovCisgICAgY29kZSBoZXJlOyAgICAgICAg ICAgICAgICAgIC8qIGN1cnJlbnQgZGVjb2RpbmcgdGFibGUgZW50cnkgKi8KICAgICBjb2RlIGxh c3Q7ICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovCiAgICAgdW5zaWdu ZWQgbGVuOyAgICAgICAgICAgICAgIC8qIGxlbmd0aCB0byBjb3B5IGZvciByZXBlYXRzLCBiaXRz IHRvIGRyb3AgKi8KICAgICBpbnQgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNv ZGUgKi8KQEAgLTM4OCwxOSArMzk4LDE4IEBACiAgICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7 CiAgICAgICAgICAgICB3aGlsZSAoc3RhdGUtPmhhdmUgPCBzdGF0ZS0+bmxlbiArIHN0YXRlLT5u ZGlzdCkgewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAg dGhpcyA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMpXTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCh1bnNpZ25lZCkodGhpcy5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMp XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkoaGVyZS5iaXRzKSA8PSBiaXRz KSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsIDwgMTYpIHsKLSAgICAgICAgICAgICAg ICAgICAgTkVFREJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMo dGhpcy5iaXRzKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUr K10gPSB0aGlzLnZhbDsKKyAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgeworICAg ICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgICAgICAg ICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOwogICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu dmFsID09IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMg KyAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA9PSAxNikgeworICAgICAgICAgICAgICAgICAg ICAgICAgTkVFREJJVFMoaGVyZS5iaXRzICsgMik7CisgICAgICAgICAgICAgICAgICAgICAgICBE Uk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5o YXZlID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hh ciAqKSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKQEAgLTQxMCwxNiArNDE5LDE2IEBACiAgICAgICAgICAg ICAgICAgICAgICAgICBjb3B5ID0gMyArIEJJVFMoMik7CiAgICAgICAgICAgICAgICAgICAgICAg ICBEUk9QQklUUygyKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICh0aGlzLnZhbCA9PSAxNykgewotICAgICAgICAgICAgICAgICAgICAgICAgTkVF REJJVFModGhpcy5iaXRzICsgMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyh0 aGlzLmJpdHMpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoZXJlLnZhbCA9PSAxNykg eworICAgICAgICAgICAgICAgICAgICAgICAgTkVFREJJVFMoaGVyZS5iaXRzICsgMyk7CisgICAg ICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAg ICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgQklU UygzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDMpOwogICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg ICAgICAgTkVFREJJVFModGhpcy5iaXRzICsgNyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBE Uk9QQklUUyh0aGlzLmJpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgTkVFREJJVFMoaGVy ZS5iaXRzICsgNyk7CisgICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMp OwogICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAg ICAgIGNvcHkgPSAxMSArIEJJVFMoNyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklU Uyg3KTsKQEAgLTQzNyw3ICs0NDYsMTYgQEAKICAgICAgICAgICAgIC8qIGhhbmRsZSBlcnJvciBi cmVha3MgaW4gd2hpbGUgKi8KICAgICAgICAgICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBCQUQpIGJy ZWFrOwogCi0gICAgICAgICAgICAvKiBidWlsZCBjb2RlIHRhYmxlcyAqLworICAgICAgICAgICAg LyogY2hlY2sgZm9yIGVuZC1vZi1ibG9jayBjb2RlIChiZXR0ZXIgaGF2ZSBvbmUpICovCisgICAg ICAgICAgICBpZiAoc3RhdGUtPmxlbnNbMjU2XSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc3Ry bS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIjsK KyAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogYnVpbGQgY29kZSB0YWJsZXMgLS0g bm90ZTogZG8gbm90IGNoYW5nZSB0aGUgbGVuYml0cyBvciBkaXN0Yml0cworICAgICAgICAgICAg ICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4g aW5mdHJlZXMuaAorICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50 cywgd2hpY2ggZGVwZW5kIG9uIHRob3NlIHZhbHVlcyAqLwogICAgICAgICAgICAgc3RhdGUtPm5l eHQgPSBzdGF0ZS0+Y29kZXM7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNv bnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7 CkBAIC00NzMsMjggKzQ5MSwyOCBAQAogCiAgICAgICAgICAgICAvKiBnZXQgYSBsaXRlcmFsLCBs ZW5ndGgsIG9yIGVuZC1vZi1ibG9jayBjb2RlICovCiAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0g ICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMp XTsKLSAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJy ZWFrOworICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+bGVuY29kZVtCSVRTKHN0YXRlLT5s ZW5iaXRzKV07CisgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkoaGVyZS5iaXRzKSA8PSBi aXRzKSBicmVhazsKICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgfQot ICAgICAgICAgICAgaWYgKHRoaXMub3AgJiYgKHRoaXMub3AgJiAweGYwKSA9PSAwKSB7Ci0gICAg ICAgICAgICAgICAgbGFzdCA9IHRoaXM7CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmJiAoaGVy ZS5vcCAmIDB4ZjApID09IDApIHsKKyAgICAgICAgICAgICAgICBsYXN0ID0gaGVyZTsKICAgICAg ICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+ bGVuY29kZVtsYXN0LnZhbCArCisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+bGVu Y29kZVtsYXN0LnZhbCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJJVFMobGFzdC5i aXRzICsgbGFzdC5vcCkgPj4gbGFzdC5iaXRzKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgo dW5zaWduZWQpKGxhc3QuYml0cyArIHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIGhlcmUuYml0cykgPD0gYml0 cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgIERST1BCSVRTKGxhc3QuYml0cyk7CiAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgc3RhdGUtPmxl bmd0aCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKKyAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0 cyk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoID0gKHVuc2lnbmVkKWhlcmUudmFsOwogCiAg ICAgICAgICAgICAvKiBwcm9jZXNzIGxpdGVyYWwgKi8KLSAgICAgICAgICAgIGlmICh0aGlzLm9w ID09IDApIHsKLSAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIHRoaXMudmFsID49IDB4 MjAgJiYgdGhpcy52YWwgPCAweDdmID8KKyAgICAgICAgICAgIGlmIChoZXJlLm9wID09IDApIHsK KyAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIGhlcmUudmFsID49IDB4MjAgJiYgaGVy ZS52YWwgPCAweDdmID8KICAgICAgICAgICAgICAgICAgICAgICAgICJpbmZsYXRlOiAgICAgICAg IGxpdGVyYWwgJyVjJ1xuIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAg ICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgdGhpcy52YWwpKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XG4iLCBoZXJlLnZhbCkpOwogICAg ICAgICAgICAgICAgIFJPT00oKTsKICAgICAgICAgICAgICAgICAqcHV0KysgPSAodW5zaWduZWQg Y2hhcikoc3RhdGUtPmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgbGVmdC0tOwpAQCAtNTAzLDIx ICs1MjEsMjEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogcHJvY2VzcyBlbmQg b2YgYmxvY2sgKi8KLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYgMzIpIHsKKyAgICAgICAgICAg IGlmIChoZXJlLm9wICYgMzIpIHsKICAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJp bmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOwogICAgICAgICAgICAgICAgIHN0YXRl LT5tb2RlID0gVFlQRTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAog ICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlICovCi0gICAgICAgICAgICBpZiAodGhpcy5vcCAm IDY0KSB7CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAg c3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKICAgICAg ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogbGVuZ3RoIGNvZGUgLS0gZ2V0IGV4dHJhIGJp dHMsIGlmIGFueSAqLwotICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVuc2lnbmVkKSh0aGlz Lm9wKSAmIDE1OworICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVuc2lnbmVkKShoZXJlLm9w KSAmIDE1OwogICAgICAgICAgICAgaWYgKHN0YXRlLT5leHRyYSAhPSAwKSB7CiAgICAgICAgICAg ICAgICAgTkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVu Z3RoICs9IEJJVFMoc3RhdGUtPmV4dHJhKTsKQEAgLTUyNywzMCArNTQ1LDMwIEBACiAKICAgICAg ICAgICAgIC8qIGdldCBkaXN0YW5jZSBjb2RlICovCiAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0g ICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5kaXN0Y29kZVtCSVRTKHN0YXRlLT5kaXN0Yml0 cyldOwotICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0gYml0cykg YnJlYWs7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5kaXN0Y29kZVtCSVRTKHN0YXRl LT5kaXN0Yml0cyldOworICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGhlcmUuYml0cykg PD0gYml0cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmICgodGhpcy5vcCAmIDB4ZjApID09IDApIHsKLSAgICAgICAgICAg ICAgICBsYXN0ID0gdGhpczsKKyAgICAgICAgICAgIGlmICgoaGVyZS5vcCAmIDB4ZjApID09IDAp IHsKKyAgICAgICAgICAgICAgICBsYXN0ID0gaGVyZTsKICAgICAgICAgICAgICAgICBmb3IgKDs7 KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+ZGlzdGNvZGVbbGFzdC52YWwg KworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmRpc3Rjb2RlW2xhc3QudmFsICsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSA+ PiBsYXN0LmJpdHMpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5i aXRzICsgdGhpcy5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYg KCh1bnNpZ25lZCkobGFzdC5iaXRzICsgaGVyZS5iaXRzKSA8PSBiaXRzKSBicmVhazsKICAgICAg ICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgRFJPUEJJVFMobGFzdC5iaXRzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERS T1BCSVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5vcCAmIDY0KSB7CisgICAg ICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiA2 NCkgewogICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFu Y2UgY29kZSI7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+b2Zmc2V0ID0g KHVuc2lnbmVkKXRoaXMudmFsOworICAgICAgICAgICAgc3RhdGUtPm9mZnNldCA9ICh1bnNpZ25l ZCloZXJlLnZhbDsKIAogICAgICAgICAgICAgLyogZ2V0IGRpc3RhbmNlIGV4dHJhIGJpdHMsIGlm IGFueSAqLwotICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVuc2lnbmVkKSh0aGlzLm9wKSAm IDE1OworICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVuc2lnbmVkKShoZXJlLm9wKSAmIDE1 OwogICAgICAgICAgICAgaWYgKHN0YXRlLT5leHRyYSAhPSAwKSB7CiAgICAgICAgICAgICAgICAg TkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+b2Zmc2V0ICs9 IEJJVFMoc3RhdGUtPmV4dHJhKTsKQEAgLTYxMSw3ICs2MjksNyBAQAogfQogCiBpbnQgWkVYUE9S VCBpbmZsYXRlQmFja0VuZChzdHJtKQotel9zdHJlYW0gRkFSICpzdHJtOworel9zdHJlYW1wIHN0 cm07CiB7CiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8 fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9F UlJPUjsKZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dz L3psaWIvaW5mY292ZXIuYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCAr MDAwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2luZmNvdmVyLmMJV2VkIE1heSAyNyAxNzoz OTozNyAyMDIwIC0wMzAwCkBAIC0wLDAgKzEsNjcxIEBACisvKiBpbmZjb3Zlci5jIC0tIHRlc3Qg emxpYidzIGluZmxhdGUgcm91dGluZXMgd2l0aCBmdWxsIGNvZGUgY292ZXJhZ2UKKyAqIENvcHly aWdodCAoQykgMjAxMSwgMjAxNiBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0 cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKwor LyogdG8gdXNlLCBkbzogLi9jb25maWd1cmUgLS1jb3ZlciAmJiBtYWtlIGNvdmVyICovCisKKyNp bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgInpsaWIuaCIKKworLyogZ2V0IGRlZmlu aXRpb24gb2YgaW50ZXJuYWwgc3RydWN0dXJlIHNvIHdlIGNhbiBtZXNzIHdpdGggaXQgKHNlZSBw dWxsKCkpLAorICAgYW5kIHNvIHdlIGNhbiBjYWxsIGluZmxhdGVfdHJlZXMoKSAoc2VlIGNvdmVy NSgpKSAqLworI2RlZmluZSBaTElCX0lOVEVSTkFMCisjaW5jbHVkZSAiaW5mdHJlZXMuaCIKKyNp bmNsdWRlICJpbmZsYXRlLmgiCisKKyNkZWZpbmUgbG9jYWwgc3RhdGljCisKKy8qIC0tIG1lbW9y eSB0cmFja2luZyByb3V0aW5lcyAtLSAqLworCisvKgorICAgVGhlc2UgbWVtb3J5IHRyYWNraW5n IHJvdXRpbmVzIGFyZSBwcm92aWRlZCB0byB6bGliIGFuZCB0cmFjayBhbGwgb2YgemxpYidzCisg ICBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucywgY2hlY2sgZm9yIExJRk8gb3BlcmF0aW9u cywga2VlcCBhIGN1cnJlbnQKKyAgIGFuZCBoaWdoIHdhdGVyIG1hcmsgb2YgdG90YWwgYnl0ZXMg cmVxdWVzdGVkLCBvcHRpb25hbGx5IHNldCBhIGxpbWl0IG9uIHRoZQorICAgdG90YWwgbWVtb3J5 IHRoYXQgY2FuIGJlIGFsbG9jYXRlZCwgYW5kIHdoZW4gZG9uZSBjaGVjayBmb3IgbWVtb3J5IGxl YWtzLgorCisgICBUaGV5IGFyZSB1c2VkIGFzIGZvbGxvd3M6CisKKyAgIHpfc3RyZWFtIHN0cm07 CisgICBtZW1fc2V0dXAoJnN0cm0pICAgICAgICAgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0cmFj a2luZyBhbmQgc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6YWxsb2MsIHpm cmVlLCBhbmQgb3BhcXVlIG1lbWJlcnMgb2Ygc3RybSB0byB1c2UKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtZW1vcnkgdHJhY2tpbmcgZm9yIGFsbCB6bGliIG9wZXJhdGlvbnMgb24gc3Ry bQorICAgbWVtX2xpbWl0KCZzdHJtLCBsaW1pdCkgIHNldHMgYSBsaW1pdCBvbiB0aGUgdG90YWwg Ynl0ZXMgcmVxdWVzdGVkIC0tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0 IHRoYXQgZXhjZWVkcyB0aGlzIGxpbWl0IHdpbGwgcmVzdWx0IGluIGFuCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWxsb2NhdGlvbiBmYWlsdXJlIChyZXR1cm5zIE5VTEwpIC0tIHNldHRp bmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgdG8gemVybyBtZWFucyBu byBsaW1pdCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZnRlciBtZW1fc2V0dXAoKQorICAgbWVtX3VzZWQoJnN0cm0sICJtc2ciKSAgIHByaW50cyB0 byBzdGRlcnIgIm1zZyIgYW5kIHRoZSB0b3RhbCBieXRlcyB1c2VkCisgICBtZW1faGlnaCgmc3Ry bSwgIm1zZyIpICAgcHJpbnRzIHRvIHN0ZGVyciAibXNnIiBhbmQgdGhlIGhpZ2ggd2F0ZXIgbWFy aworICAgbWVtX2RvbmUoJnN0cm0sICJtc2ciKSAgIGVuZHMgbWVtb3J5IHRyYWNraW5nLCByZWxl YXNlcyBhbGwgYWxsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhl IHRyYWNraW5nIGFzIHdlbGwgYXMgbGVha2VkIHpsaWIgYmxvY2tzLCBpZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFueS4gIElmIHRoZXJlIHdhcyBhbnl0aGluZyB1bnVzdWFsLCBzdWNo IGFzIGxlYWtlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcywgbm9uLUZJRk8g ZnJlZXMsIG9yIGZyZWVzIG9mIGFkZHJlc3NlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhbGxvY2F0ZWQsIHRoZW4gIm1zZyIgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JsZW0gaXMgcHJpbnRlZCB0byBzdGRlcnIuICBJ ZiBldmVyeXRoaW5nIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsLCBub3Ro aW5nIGlzIHByaW50ZWQuIG1lbV9kb25lIHJlc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJtIG1lbWJlcnMgdG8gWl9OVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBtZW1vcnkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uIHJvdXRpbmVzIG9uIHRoZSBu ZXh0IHpsaWIgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2lu ZyBzdHJtLgorICovCisKKy8qIHRoZXNlIGl0ZW1zIGFyZSBzdHJ1bmcgdG9nZXRoZXIgaW4gYSBs aW5rZWQgbGlzdCwgb25lIGZvciBlYWNoIGFsbG9jYXRpb24gKi8KK3N0cnVjdCBtZW1faXRlbSB7 CisgICAgdm9pZCAqcHRyOyAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYWxsb2NhdGVk IG1lbW9yeSAqLworICAgIHNpemVfdCBzaXplOyAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ZWQg c2l6ZSBvZiBhbGxvY2F0aW9uICovCisgICAgc3RydWN0IG1lbV9pdGVtICpuZXh0OyAgICAgIC8q IHBvaW50ZXIgdG8gbmV4dCBpdGVtIGluIGxpc3QsIG9yIE5VTEwgKi8KK307CisKKy8qIHRoaXMg c3RydWN0dXJlIGlzIGF0IHRoZSByb290IG9mIHRoZSBsaW5rZWQgbGlzdCwgYW5kIHRyYWNrcyBz dGF0aXN0aWNzICovCitzdHJ1Y3QgbWVtX3pvbmUgeworICAgIHN0cnVjdCBtZW1faXRlbSAqZmly c3Q7ICAgICAvKiBwb2ludGVyIHRvIGZpcnN0IGl0ZW0gaW4gbGlzdCwgb3IgTlVMTCAqLworICAg IHNpemVfdCB0b3RhbCwgaGlnaHdhdGVyOyAgICAvKiB0b3RhbCBhbGxvY2F0aW9ucywgYW5kIGxh cmdlc3QgdG90YWwgKi8KKyAgICBzaXplX3QgbGltaXQ7ICAgICAgICAgICAgICAgLyogbWVtb3J5 IGFsbG9jYXRpb24gbGltaXQsIG9yIDAgaWYgbm8gbGltaXQgKi8KKyAgICBpbnQgbm90bGlmbywg cm9ndWU7ICAgICAgICAgLyogY291bnRzIG9mIG5vbi1MSUZPIGZyZWVzIGFuZCByb2d1ZSBmcmVl cyAqLworfTsKKworLyogbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZSB0byBwYXNzIHRvIHpsaWIg Ki8KK2xvY2FsIHZvaWQgKm1lbV9hbGxvYyh2b2lkICptZW0sIHVuc2lnbmVkIGNvdW50LCB1bnNp Z25lZCBzaXplKQoreworICAgIHZvaWQgKnB0cjsKKyAgICBzdHJ1Y3QgbWVtX2l0ZW0gKml0ZW07 CisgICAgc3RydWN0IG1lbV96b25lICp6b25lID0gbWVtOworICAgIHNpemVfdCBsZW4gPSBjb3Vu dCAqIChzaXplX3Qpc2l6ZTsKKworICAgIC8qIGluZHVjZWQgYWxsb2NhdGlvbiBmYWlsdXJlICov CisgICAgaWYgKHpvbmUgPT0gTlVMTCB8fCAoem9uZS0+bGltaXQgJiYgem9uZS0+dG90YWwgKyBs ZW4gPiB6b25lLT5saW1pdCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogcGVyZm9y bSBhbGxvY2F0aW9uIHVzaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCBmaWxsIG1lbW9yeSB3aXRo IGEKKyAgICAgICBub24temVybyB2YWx1ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBpc24n dCBkZXBlbmRpbmcgb24gemVyb3MgKi8KKyAgICBwdHIgPSBtYWxsb2MobGVuKTsKKyAgICBpZiAo cHRyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbXNldChwdHIsIDB4YTUs IGxlbik7CisKKyAgICAvKiBjcmVhdGUgYSBuZXcgaXRlbSBmb3IgdGhlIGxpc3QgKi8KKyAgICBp dGVtID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtX2l0ZW0pKTsKKyAgICBpZiAoaXRlbSA9PSBO VUxMKSB7CisgICAgICAgIGZyZWUocHRyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor ICAgIGl0ZW0tPnB0ciA9IHB0cjsKKyAgICBpdGVtLT5zaXplID0gbGVuOworCisgICAgLyogaW5z ZXJ0IGl0ZW0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAqLworICAgIGl0ZW0tPm5leHQg PSB6b25lLT5maXJzdDsKKyAgICB6b25lLT5maXJzdCA9IGl0ZW07CisKKyAgICAvKiB1cGRhdGUg dGhlIHN0YXRpc3RpY3MgKi8KKyAgICB6b25lLT50b3RhbCArPSBpdGVtLT5zaXplOworICAgIGlm ICh6b25lLT50b3RhbCA+IHpvbmUtPmhpZ2h3YXRlcikKKyAgICAgICAgem9uZS0+aGlnaHdhdGVy ID0gem9uZS0+dG90YWw7CisKKyAgICAvKiByZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgKi8K KyAgICByZXR1cm4gcHRyOworfQorCisvKiBtZW1vcnkgZnJlZSByb3V0aW5lIHRvIHBhc3MgdG8g emxpYiAqLworbG9jYWwgdm9pZCBtZW1fZnJlZSh2b2lkICptZW0sIHZvaWQgKnB0cikKK3sKKyAg ICBzdHJ1Y3QgbWVtX2l0ZW0gKml0ZW0sICpuZXh0OworICAgIHN0cnVjdCBtZW1fem9uZSAqem9u ZSA9IG1lbTsKKworICAgIC8qIGlmIG5vIHpvbmUsIGp1c3QgZG8gYSBmcmVlICovCisgICAgaWYg KHpvbmUgPT0gTlVMTCkgeworICAgICAgICBmcmVlKHB0cik7CisgICAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICAvKiBwb2ludCBuZXh0IHRvIHRoZSBpdGVtIHRoYXQgbWF0Y2hlcyBwdHIsIG9y IE5VTEwgaWYgbm90IGZvdW5kIC0tIHJlbW92ZQorICAgICAgIHRoZSBpdGVtIGZyb20gdGhlIGxp bmtlZCBsaXN0IGlmIGZvdW5kICovCisgICAgbmV4dCA9IHpvbmUtPmZpcnN0OworICAgIGlmIChu ZXh0KSB7CisgICAgICAgIGlmIChuZXh0LT5wdHIgPT0gcHRyKQorICAgICAgICAgICAgem9uZS0+ Zmlyc3QgPSBuZXh0LT5uZXh0OyAgIC8qIGZpcnN0IG9uZSBpcyBpdCwgcmVtb3ZlIGZyb20gbGlz dCAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBzZWFyY2ggdGhlIGxpbmtlZCBsaXN0ICovCisgICAgICAgICAgICAgICAgaXRlbSA9 IG5leHQ7CisgICAgICAgICAgICAgICAgbmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgICAgICAgICB9 IHdoaWxlIChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+cHRyICE9IHB0cik7CisgICAgICAgICAgICBp ZiAobmV4dCkgeyAgICAgICAgICAgICAgICAgLyogaWYgZm91bmQsIHJlbW92ZSBmcm9tIGxpbmtl ZCBsaXN0ICovCisgICAgICAgICAgICAgICAgaXRlbS0+bmV4dCA9IG5leHQtPm5leHQ7CisgICAg ICAgICAgICAgICAgem9uZS0+bm90bGlmbysrOyAgICAgICAgLyogbm90IGEgTElGTyBmcmVlICov CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGlmIGZvdW5kLCB1 cGRhdGUgdGhlIHN0YXRpc3RpY3MgYW5kIGZyZWUgdGhlIGl0ZW0gKi8KKyAgICBpZiAobmV4dCkg eworICAgICAgICB6b25lLT50b3RhbCAtPSBuZXh0LT5zaXplOworICAgICAgICBmcmVlKG5leHQp OworICAgIH0KKworICAgIC8qIGlmIG5vdCBmb3VuZCwgdXBkYXRlIHRoZSByb2d1ZSBjb3VudCAq LworICAgIGVsc2UKKyAgICAgICAgem9uZS0+cm9ndWUrKzsKKworICAgIC8qIGluIGFueSBjYXNl LCBkbyB0aGUgcmVxdWVzdGVkIGZyZWUgd2l0aCB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlv biAqLworICAgIGZyZWUocHRyKTsKK30KKworLyogc2V0IHVwIGEgY29udHJvbGxlZCBtZW1vcnkg YWxsb2NhdGlvbiBzcGFjZSBmb3IgbW9uaXRvcmluZywgc2V0IHRoZSBzdHJlYW0KKyAgIHBhcmFt ZXRlcnMgdG8gdGhlIGNvbnRyb2xsZWQgcm91dGluZXMsIHdpdGggb3BhcXVlIHBvaW50aW5nIHRv IHRoZSBzcGFjZSAqLworbG9jYWwgdm9pZCBtZW1fc2V0dXAoel9zdHJlYW0gKnN0cm0pCit7Cisg ICAgc3RydWN0IG1lbV96b25lICp6b25lOworCisgICAgem9uZSA9IG1hbGxvYyhzaXplb2Yoc3Ry dWN0IG1lbV96b25lKSk7CisgICAgYXNzZXJ0KHpvbmUgIT0gTlVMTCk7CisgICAgem9uZS0+Zmly c3QgPSBOVUxMOworICAgIHpvbmUtPnRvdGFsID0gMDsKKyAgICB6b25lLT5oaWdod2F0ZXIgPSAw OworICAgIHpvbmUtPmxpbWl0ID0gMDsKKyAgICB6b25lLT5ub3RsaWZvID0gMDsKKyAgICB6b25l LT5yb2d1ZSA9IDA7CisgICAgc3RybS0+b3BhcXVlID0gem9uZTsKKyAgICBzdHJtLT56YWxsb2Mg PSBtZW1fYWxsb2M7CisgICAgc3RybS0+emZyZWUgPSBtZW1fZnJlZTsKK30KKworLyogc2V0IGEg bGltaXQgb24gdGhlIHRvdGFsIG1lbW9yeSBhbGxvY2F0aW9uLCBvciAwIHRvIHJlbW92ZSB0aGUg bGltaXQgKi8KK2xvY2FsIHZvaWQgbWVtX2xpbWl0KHpfc3RyZWFtICpzdHJtLCBzaXplX3QgbGlt aXQpCit7CisgICAgc3RydWN0IG1lbV96b25lICp6b25lID0gc3RybS0+b3BhcXVlOworCisgICAg em9uZS0+bGltaXQgPSBsaW1pdDsKK30KKworLyogc2hvdyB0aGUgY3VycmVudCB0b3RhbCByZXF1 ZXN0ZWQgYWxsb2NhdGlvbnMgaW4gYnl0ZXMgKi8KK2xvY2FsIHZvaWQgbWVtX3VzZWQoel9zdHJl YW0gKnN0cm0sIGNoYXIgKnByZWZpeCkKK3sKKyAgICBzdHJ1Y3QgbWVtX3pvbmUgKnpvbmUgPSBz dHJtLT5vcGFxdWU7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlbHUgYWxsb2NhdGVkXG4i LCBwcmVmaXgsIHpvbmUtPnRvdGFsKTsKK30KKworLyogc2hvdyB0aGUgaGlnaCB3YXRlciBhbGxv Y2F0aW9uIGluIGJ5dGVzICovCitsb2NhbCB2b2lkIG1lbV9oaWdoKHpfc3RyZWFtICpzdHJtLCBj aGFyICpwcmVmaXgpCit7CisgICAgc3RydWN0IG1lbV96b25lICp6b25lID0gc3RybS0+b3BhcXVl OworCisgICAgZnByaW50ZihzdGRlcnIsICIlczogJWx1IGhpZ2ggd2F0ZXIgbWFya1xuIiwgcHJl Zml4LCB6b25lLT5oaWdod2F0ZXIpOworfQorCisvKiByZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2Nh dGlvbiB6b25lIC0tIGlmIHRoZXJlIGFyZSBhbnkgc3VycHJpc2VzLCBub3RpZnkgKi8KK2xvY2Fs IHZvaWQgbWVtX2RvbmUoel9zdHJlYW0gKnN0cm0sIGNoYXIgKnByZWZpeCkKK3sKKyAgICBpbnQg Y291bnQgPSAwOworICAgIHN0cnVjdCBtZW1faXRlbSAqaXRlbSwgKm5leHQ7CisgICAgc3RydWN0 IG1lbV96b25lICp6b25lID0gc3RybS0+b3BhcXVlOworCisgICAgLyogc2hvdyBoaWdoIHdhdGVy IG1hcmsgKi8KKyAgICBtZW1faGlnaChzdHJtLCBwcmVmaXgpOworCisgICAgLyogZnJlZSBsZWZ0 b3ZlciBhbGxvY2F0aW9ucyBhbmQgaXRlbSBzdHJ1Y3R1cmVzLCBpZiBhbnkgKi8KKyAgICBpdGVt ID0gem9uZS0+Zmlyc3Q7CisgICAgd2hpbGUgKGl0ZW0gIT0gTlVMTCkgeworICAgICAgICBmcmVl KGl0ZW0tPnB0cik7CisgICAgICAgIG5leHQgPSBpdGVtLT5uZXh0OworICAgICAgICBmcmVlKGl0 ZW0pOworICAgICAgICBpdGVtID0gbmV4dDsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAg ICAvKiBpc3N1ZSBhbGVydHMgYWJvdXQgYW55dGhpbmcgdW5leHBlY3RlZCAqLworICAgIGlmIChj b3VudCB8fCB6b25lLT50b3RhbCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIqKiAlczogJWx1 IGJ5dGVzIGluICVkIGJsb2NrcyBub3QgZnJlZWRcbiIsCisgICAgICAgICAgICAgICAgcHJlZml4 LCB6b25lLT50b3RhbCwgY291bnQpOworICAgIGlmICh6b25lLT5ub3RsaWZvKQorICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIioqICVzOiAlZCBmcmVlcyBub3QgTElGT1xuIiwgcHJlZml4LCB6b25l LT5ub3RsaWZvKTsKKyAgICBpZiAoem9uZS0+cm9ndWUpCisgICAgICAgIGZwcmludGYoc3RkZXJy LCAiKiogJXM6ICVkIGZyZWVzIG5vdCByZWNvZ25pemVkXG4iLAorICAgICAgICAgICAgICAgIHBy ZWZpeCwgem9uZS0+cm9ndWUpOworCisgICAgLyogZnJlZSB0aGUgem9uZSBhbmQgZGVsZXRlIGZy b20gdGhlIHN0cmVhbSAqLworICAgIGZyZWUoem9uZSk7CisgICAgc3RybS0+b3BhcXVlID0gWl9O VUxMOworICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICBzdHJtLT56ZnJlZSA9IFpfTlVM TDsKK30KKworLyogLS0gaW5mbGF0ZSB0ZXN0IHJvdXRpbmVzIC0tICovCisKKy8qIERlY29kZSBh IGhleGFkZWNpbWFsIHN0cmluZywgc2V0ICpsZW4gdG8gbGVuZ3RoLCBpbltdIHRvIHRoZSBieXRl cy4gIFRoaXMKKyAgIGRlY29kZXMgbGliZXJhbGx5LCBpbiB0aGF0IGhleCBkaWdpdHMgY2FuIGJl IGFkamFjZW50LCBpbiB3aGljaCBjYXNlIHR3byBpbgorICAgYSByb3cgd3JpdGVzIGEgYnl0ZS4g IE9yIHRoZXkgY2FuIGJlIGRlbGltaXRlZCBieSBhbnkgbm9uLWhleCBjaGFyYWN0ZXIsCisgICB3 aGVyZSB0aGUgZGVsaW1pdGVycyBhcmUgaWdub3JlZCBleGNlcHQgd2hlbiBhIHNpbmdsZSBoZXgg ZGlnaXQgaXMgZm9sbG93ZWQKKyAgIGJ5IGEgZGVsaW1pdGVyLCB3aGVyZSB0aGF0IHNpbmdsZSBk aWdpdCB3cml0ZXMgYSBieXRlLiAgVGhlIHJldHVybmVkIGRhdGEgaXMKKyAgIGFsbG9jYXRlZCBh bmQgbXVzdCBldmVudHVhbGx5IGJlIGZyZWVkLiAgTlVMTCBpcyByZXR1cm5lZCBpZiBvdXQgb2Yg bWVtb3J5LgorICAgSWYgdGhlIGxlbmd0aCBpcyBub3QgbmVlZGVkLCB0aGVuIGxlbiBjYW4gYmUg TlVMTC4gKi8KK2xvY2FsIHVuc2lnbmVkIGNoYXIgKmgyYihjb25zdCBjaGFyICpoZXgsIHVuc2ln bmVkICpsZW4pCit7CisgICAgdW5zaWduZWQgY2hhciAqaW4sICpyZTsKKyAgICB1bnNpZ25lZCBu ZXh0LCB2YWw7CisKKyAgICBpbiA9IG1hbGxvYygoc3RybGVuKGhleCkgKyAxKSA+PiAxKTsKKyAg ICBpZiAoaW4gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmV4dCA9IDA7Cisg ICAgdmFsID0gMTsKKyAgICBkbyB7CisgICAgICAgIGlmICgqaGV4ID49ICcwJyAmJiAqaGV4IDw9 ICc5JykKKyAgICAgICAgICAgIHZhbCA9ICh2YWwgPDwgNCkgKyAqaGV4IC0gJzAnOworICAgICAg ICBlbHNlIGlmICgqaGV4ID49ICdBJyAmJiAqaGV4IDw9ICdGJykKKyAgICAgICAgICAgIHZhbCA9 ICh2YWwgPDwgNCkgKyAqaGV4IC0gJ0EnICsgMTA7CisgICAgICAgIGVsc2UgaWYgKCpoZXggPj0g J2EnICYmICpoZXggPD0gJ2YnKQorICAgICAgICAgICAgdmFsID0gKHZhbCA8PCA0KSArICpoZXgg LSAnYScgKyAxMDsKKyAgICAgICAgZWxzZSBpZiAodmFsICE9IDEgJiYgdmFsIDwgMzIpICAvKiBv bmUgZGlnaXQgZm9sbG93ZWQgYnkgZGVsaW1pdGVyICovCisgICAgICAgICAgICB2YWwgKz0gMjQw OyAgICAgICAgICAgICAgICAgLyogbWFrZSBpdCBsb29rIGxpa2UgdHdvIGRpZ2l0cyAqLworICAg ICAgICBpZiAodmFsID4gMjU1KSB7ICAgICAgICAgICAgICAgIC8qIGhhdmUgdHdvIGRpZ2l0cyAq LworICAgICAgICAgICAgaW5bbmV4dCsrXSA9IHZhbCAmIDB4ZmY7ICAgIC8qIHNhdmUgdGhlIGRl Y29kZWQgYnl0ZSAqLworICAgICAgICAgICAgdmFsID0gMTsgICAgICAgICAgICAgICAgICAgIC8q IHN0YXJ0IG92ZXIgKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCpoZXgrKyk7ICAgICAgIC8q IGdvIHRocm91Z2ggdGhlIGxvb3Agd2l0aCB0aGUgdGVybWluYXRpbmcgbnVsbCAqLworICAgIGlm IChsZW4gIT0gTlVMTCkKKyAgICAgICAgKmxlbiA9IG5leHQ7CisgICAgcmUgPSByZWFsbG9jKGlu LCBuZXh0KTsKKyAgICByZXR1cm4gcmUgPT0gTlVMTCA/IGluIDogcmU7Cit9CisKKy8qIGdlbmVy aWMgaW5mbGF0ZSgpIHJ1biwgd2hlcmUgaGV4IGlzIHRoZSBoZXhhZGVjaW1hbCBpbnB1dCBkYXRh LCB3aGF0IGlzIHRoZQorICAgdGV4dCB0byBpbmNsdWRlIGluIGFuIGVycm9yIG1lc3NhZ2UsIHN0 ZXAgaXMgaG93IG11Y2ggaW5wdXQgZGF0YSB0byBmZWVkCisgICBpbmZsYXRlKCkgb24gZWFjaCBj YWxsLCBvciB6ZXJvIHRvIGZlZWQgaXQgYWxsLCB3aW4gaXMgdGhlIHdpbmRvdyBiaXRzCisgICBw YXJhbWV0ZXIgdG8gaW5mbGF0ZUluaXQyKCksIGxlbiBpcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0 IGJ1ZmZlciwgYW5kIGVycgorICAgaXMgdGhlIGVycm9yIGNvZGUgZXhwZWN0ZWQgZnJvbSB0aGUg Zmlyc3QgaW5mbGF0ZSgpIGNhbGwgKHRoZSBzZWNvbmQKKyAgIGluZmxhdGUoKSBjYWxsIGlzIGV4 cGVjdGVkIHRvIHJldHVybiBaX1NUUkVBTV9FTkQpLiAgSWYgd2luIGlzIDQ3LCB0aGVuCisgICBo ZWFkZXIgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkIHdpdGggaW5mbGF0ZUdldEhlYWRlcigpLiAg SWYgYSB6bGliIHN0cmVhbQorICAgaXMgbG9va2luZyBmb3IgYSBkaWN0aW9uYXJ5LCB0aGVuIGFu IGVtcHR5IGRpY3Rpb25hcnkgaXMgcHJvdmlkZWQuCisgICBpbmZsYXRlKCkgaXMgcnVuIHVudGls IGFsbCBvZiB0aGUgaW5wdXQgZGF0YSBpcyBjb25zdW1lZC4gKi8KK2xvY2FsIHZvaWQgaW5mKGNo YXIgKmhleCwgY2hhciAqd2hhdCwgdW5zaWduZWQgc3RlcCwgaW50IHdpbiwgdW5zaWduZWQgbGVu LAorICAgICAgICAgICAgICAgaW50IGVycikKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVk IGhhdmU7CisgICAgdW5zaWduZWQgY2hhciAqaW4sICpvdXQ7CisgICAgel9zdHJlYW0gc3RybSwg Y29weTsKKyAgICBnel9oZWFkZXIgaGVhZDsKKworICAgIG1lbV9zZXR1cCgmc3RybSk7CisgICAg c3RybS5hdmFpbF9pbiA9IDA7CisgICAgc3RybS5uZXh0X2luID0gWl9OVUxMOworICAgIHJldCA9 IGluZmxhdGVJbml0Migmc3RybSwgd2luKTsKKyAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAg ICAgbWVtX2RvbmUoJnN0cm0sIHdoYXQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG91 dCA9IG1hbGxvYyhsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG91dCAhPSBO VUxMKTsKKyAgICBpZiAod2luID09IDQ3KSB7CisgICAgICAgIGhlYWQuZXh0cmEgPSBvdXQ7Cisg ICAgICAgIGhlYWQuZXh0cmFfbWF4ID0gbGVuOworICAgICAgICBoZWFkLm5hbWUgPSBvdXQ7Cisg ICAgICAgIGhlYWQubmFtZV9tYXggPSBsZW47CisgICAgICAgIGhlYWQuY29tbWVudCA9IG91dDsK KyAgICAgICAgaGVhZC5jb21tX21heCA9IGxlbjsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUdldEhl YWRlcigmc3RybSwgJmhlYWQpOyAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgfQorICAgIGlu ID0gaDJiKGhleCwgJmhhdmUpOyAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGluICE9IE5V TEwpOworICAgIGlmIChzdGVwID09IDAgfHwgc3RlcCA+IGhhdmUpCisgICAgICAgIHN0ZXAgPSBo YXZlOworICAgIHN0cm0uYXZhaWxfaW4gPSBzdGVwOworICAgIGhhdmUgLT0gc3RlcDsKKyAgICBz dHJtLm5leHRfaW4gPSBpbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVu OworICAgICAgICBzdHJtLm5leHRfb3V0ID0gb3V0OworICAgICAgICByZXQgPSBpbmZsYXRlKCZz dHJtLCBaX05PX0ZMVVNIKTsgICAgICAgYXNzZXJ0KGVyciA9PSA5IHx8IHJldCA9PSBlcnIpOwor ICAgICAgICBpZiAocmV0ICE9IFpfT0sgJiYgcmV0ICE9IFpfQlVGX0VSUk9SICYmIHJldCAhPSBa X05FRURfRElDVCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAocmV0ID09IFpfTkVF RF9ESUNUKSB7CisgICAgICAgICAgICByZXQgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmc3RybSwg aW4sIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXNzZXJ0KHJldCA9PSBaX0RBVEFfRVJST1IpOworICAgICAgICAgICAgbWVtX2xpbWl0KCZzdHJt LCAxKTsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZzdHJtLCBvdXQs IDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNz ZXJ0KHJldCA9PSBaX01FTV9FUlJPUik7CisgICAgICAgICAgICBtZW1fbGltaXQoJnN0cm0sIDAp OworICAgICAgICAgICAgKChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSAqKXN0cm0uc3RhdGUpLT5tb2Rl ID0gRElDVDsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZzdHJtLCBv dXQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICAgICAgICAgIHJldCA9IGluZmxhdGUoJnN0cm0sIFpf Tk9fRkxVU0gpOyAgIGFzc2VydChyZXQgPT0gWl9CVUZfRVJST1IpOworICAgICAgICB9CisgICAg ICAgIHJldCA9IGluZmxhdGVDb3B5KCZjb3B5LCAmc3RybSk7ICAgICAgICBhc3NlcnQocmV0ID09 IFpfT0spOworICAgICAgICByZXQgPSBpbmZsYXRlRW5kKCZjb3B5KTsgICAgICAgICAgICAgICAg YXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICAgICAgZXJyID0gOTsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBkb24ndCBjYXJlIG5leHQgdGltZSBhcm91bmQgKi8KKyAgICAgICAgaGF2ZSArPSBz dHJtLmF2YWlsX2luOworICAgICAgICBzdHJtLmF2YWlsX2luID0gc3RlcCA+IGhhdmUgPyBoYXZl IDogc3RlcDsKKyAgICAgICAgaGF2ZSAtPSBzdHJtLmF2YWlsX2luOworICAgIH0gd2hpbGUgKHN0 cm0uYXZhaWxfaW4pOworICAgIGZyZWUoaW4pOworICAgIGZyZWUob3V0KTsKKyAgICByZXQgPSBp bmZsYXRlUmVzZXQyKCZzdHJtLCAtOCk7ICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7 CisgICAgcmV0ID0gaW5mbGF0ZUVuZCgmc3RybSk7ICAgICAgICAgICAgICAgICAgICBhc3NlcnQo cmV0ID09IFpfT0spOworICAgIG1lbV9kb25lKCZzdHJtLCB3aGF0KTsKK30KKworLyogY292ZXIg YWxsIG9mIHRoZSBsaW5lcyBpbiBpbmZsYXRlLmMgdXAgdG8gaW5mbGF0ZSgpICovCitsb2NhbCB2 b2lkIGNvdmVyX3N1cHBvcnQodm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAgIHpfc3RyZWFtIHN0 cm07CisKKyAgICBtZW1fc2V0dXAoJnN0cm0pOworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAg IHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdCgmc3RybSk7ICAg ICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgbWVtX3VzZWQoJnN0cm0s ICJpbmZsYXRlIGluaXQiKTsKKyAgICByZXQgPSBpbmZsYXRlUHJpbWUoJnN0cm0sIDUsIDMxKTsg ICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgcmV0ID0gaW5mbGF0ZVByaW1lKCZz dHJtLCAtMSwgMCk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIHJldCA9IGlu ZmxhdGVTZXREaWN0aW9uYXJ5KCZzdHJtLCBaX05VTEwsIDApOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJP Uik7CisgICAgcmV0ID0gaW5mbGF0ZUVuZCgmc3RybSk7ICAgICAgICAgICAgICAgICAgICBhc3Nl cnQocmV0ID09IFpfT0spOworICAgIG1lbV9kb25lKCZzdHJtLCAicHJpbWUiKTsKKworICAgIGlu ZigiNjMgMCIsICJmb3JjZSB3aW5kb3cgYWxsb2NhdGlvbiIsIDAsIC0xNSwgMSwgWl9PSyk7Cisg ICAgaW5mKCI2MyAxOCA1IiwgImZvcmNlIHdpbmRvdyByZXBsYWNlbWVudCIsIDAsIC04LCAyNTks IFpfT0spOworICAgIGluZigiNjMgMTggNjggMzAgZDAgMCAwIiwgImZvcmNlIHNwbGl0IHdpbmRv dyB1cGRhdGUiLCA0LCAtOCwgMjU5LCBaX09LKTsKKyAgICBpbmYoIjMgMCIsICJ1c2UgZml4ZWQg YmxvY2tzIiwgMCwgLTE1LCAxLCBaX1NUUkVBTV9FTkQpOworICAgIGluZigiIiwgImJhZCB3aW5k b3cgc2l6ZSIsIDAsIDEsIDAsIFpfU1RSRUFNX0VSUk9SKTsKKworICAgIG1lbV9zZXR1cCgmc3Ry bSk7CisgICAgc3RybS5hdmFpbF9pbiA9IDA7CisgICAgc3RybS5uZXh0X2luID0gWl9OVUxMOwor ICAgIHJldCA9IGluZmxhdGVJbml0Xygmc3RybSwgWkxJQl9WRVJTSU9OIC0gMSwgKGludClzaXpl b2Yoel9zdHJlYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFzc2VydChyZXQgPT0gWl9WRVJTSU9OX0VSUk9SKTsKKyAgICBtZW1fZG9uZSgmc3Ry bSwgIndyb25nIHZlcnNpb24iKTsKKworICAgIHN0cm0uYXZhaWxfaW4gPSAwOworICAgIHN0cm0u bmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlSW5pdCgmc3RybSk7ICAgICAgICAg ICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgcmV0ID0gaW5mbGF0ZUVuZCgmc3Ry bSk7ICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIGZwdXRzKCJp bmZsYXRlIGJ1aWx0LWluIG1lbW9yeSByb3V0aW5lc1xuIiwgc3RkZXJyKTsKK30KKworLyogY292 ZXIgYWxsIGluZmxhdGUoKSBoZWFkZXIgYW5kIHRyYWlsZXIgY2FzZXMgYW5kIGNvZGUgYWZ0ZXIg aW5mbGF0ZSgpICovCitsb2NhbCB2b2lkIGNvdmVyX3dyYXAodm9pZCkKK3sKKyAgICBpbnQgcmV0 OworICAgIHpfc3RyZWFtIHN0cm0sIGNvcHk7CisgICAgdW5zaWduZWQgY2hhciBkaWN0WzI1N107 CisKKyAgICByZXQgPSBpbmZsYXRlKFpfTlVMTCwgMCk7ICAgICAgICAgICAgICAgICAgIGFzc2Vy dChyZXQgPT0gWl9TVFJFQU1fRVJST1IpOworICAgIHJldCA9IGluZmxhdGVFbmQoWl9OVUxMKTsg ICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgcmV0 ID0gaW5mbGF0ZUNvcHkoWl9OVUxMLCBaX05VTEwpOyAgICAgICAgICBhc3NlcnQocmV0ID09IFpf U1RSRUFNX0VSUk9SKTsKKyAgICBmcHV0cygiaW5mbGF0ZSBiYWQgcGFyYW1ldGVyc1xuIiwgc3Rk ZXJyKTsKKworICAgIGluZigiMWYgOGIgMCAwIiwgImJhZCBnemlwIG1ldGhvZCIsIDAsIDMxLCAw LCBaX0RBVEFfRVJST1IpOworICAgIGluZigiMWYgOGIgOCA4MCIsICJiYWQgZ3ppcCBmbGFncyIs IDAsIDMxLCAwLCBaX0RBVEFfRVJST1IpOworICAgIGluZigiNzcgODUiLCAiYmFkIHpsaWIgbWV0 aG9kIiwgMCwgMTUsIDAsIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCI4IDk5IiwgInNldCB3aW5k b3cgc2l6ZSBmcm9tIGhlYWRlciIsIDAsIDAsIDAsIFpfT0spOworICAgIGluZigiNzggOWMiLCAi YmFkIHpsaWIgd2luZG93IHNpemUiLCAwLCA4LCAwLCBaX0RBVEFfRVJST1IpOworICAgIGluZigi NzggOWMgNjMgMCAwIDAgMSAwIDEiLCAiY2hlY2sgYWRsZXIzMiIsIDAsIDE1LCAxLCBaX1NUUkVB TV9FTkQpOworICAgIGluZigiMWYgOGIgOCAxZSAwIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAwIiwg ImJhZCBoZWFkZXIgY3JjIiwgMCwgNDcsIDEsCisgICAgICAgIFpfREFUQV9FUlJPUik7CisgICAg aW5mKCIxZiA4YiA4IDIgMCAwIDAgMCAwIDAgMWQgMjYgMyAwIDAgMCAwIDAgMCAwIDAgMCIsICJj aGVjayBnemlwIGxlbmd0aCIsCisgICAgICAgIDAsIDQ3LCAwLCBaX1NUUkVBTV9FTkQpOworICAg IGluZigiNzggOTAiLCAiYmFkIHpsaWIgaGVhZGVyIGNoZWNrIiwgMCwgNDcsIDAsIFpfREFUQV9F UlJPUik7CisgICAgaW5mKCI4IGI4IDAgMCAwIDEiLCAibmVlZCBkaWN0aW9uYXJ5IiwgMCwgOCwg MCwgWl9ORUVEX0RJQ1QpOworICAgIGluZigiNzggOWMgNjMgMCIsICJjb21wdXRlIGFkbGVyMzIi LCAwLCAxNSwgMSwgWl9PSyk7CisKKyAgICBtZW1fc2V0dXAoJnN0cm0pOworICAgIHN0cm0uYXZh aWxfaW4gPSAwOworICAgIHN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRl SW5pdDIoJnN0cm0sIC04KTsKKyAgICBzdHJtLmF2YWlsX2luID0gMjsKKyAgICBzdHJtLm5leHRf aW4gPSAodm9pZCAqKSJceDYzIjsKKyAgICBzdHJtLmF2YWlsX291dCA9IDE7CisgICAgc3RybS5u ZXh0X291dCA9ICh2b2lkICopJnJldDsKKyAgICBtZW1fbGltaXQoJnN0cm0sIDEpOworICAgIHJl dCA9IGluZmxhdGUoJnN0cm0sIFpfTk9fRkxVU0gpOyAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBa X01FTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZSgmc3RybSwgWl9OT19GTFVTSCk7ICAgICAg ICAgICBhc3NlcnQocmV0ID09IFpfTUVNX0VSUk9SKTsKKyAgICBtZW1fbGltaXQoJnN0cm0sIDAp OworICAgIG1lbXNldChkaWN0LCAwLCAyNTcpOworICAgIHJldCA9IGluZmxhdGVTZXREaWN0aW9u YXJ5KCZzdHJtLCBkaWN0LCAyNTcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBtZW1fbGltaXQoJnN0cm0s IChzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpIDw8IDEpICsgMjU2KTsKKyAgICByZXQgPSBp bmZsYXRlUHJpbWUoJnN0cm0sIDE2LCAwKTsgICAgICAgICAgIGFzc2VydChyZXQgPT0gWl9PSyk7 CisgICAgc3RybS5hdmFpbF9pbiA9IDI7CisgICAgc3RybS5uZXh0X2luID0gKHZvaWQgKikiXHg4 MCI7CisgICAgcmV0ID0gaW5mbGF0ZVN5bmMoJnN0cm0pOyAgICAgICAgICAgICAgICAgICBhc3Nl cnQocmV0ID09IFpfREFUQV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZSgmc3RybSwgWl9OT19G TFVTSCk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfU1RSRUFNX0VSUk9SKTsKKyAgICBzdHJt LmF2YWlsX2luID0gNDsKKyAgICBzdHJtLm5leHRfaW4gPSAodm9pZCAqKSJcMFwwXHhmZlx4ZmYi OworICAgIHJldCA9IGluZmxhdGVTeW5jKCZzdHJtKTsgICAgICAgICAgICAgICAgICAgYXNzZXJ0 KHJldCA9PSBaX09LKTsKKyAgICAodm9pZClpbmZsYXRlU3luY1BvaW50KCZzdHJtKTsKKyAgICBy ZXQgPSBpbmZsYXRlQ29weSgmY29weSwgJnN0cm0pOyAgICAgICAgICAgIGFzc2VydChyZXQgPT0g Wl9NRU1fRVJST1IpOworICAgIG1lbV9saW1pdCgmc3RybSwgMCk7CisgICAgcmV0ID0gaW5mbGF0 ZVVuZGVybWluZSgmc3RybSwgMSk7ICAgICAgICAgICBhc3NlcnQocmV0ID09IFpfREFUQV9FUlJP Uik7CisgICAgKHZvaWQpaW5mbGF0ZU1hcmsoJnN0cm0pOworICAgIHJldCA9IGluZmxhdGVFbmQo JnN0cm0pOyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsKKyAgICBtZW1f ZG9uZSgmc3RybSwgIm1pc2NlbGxhbmVvdXMsIGZvcmNlIG1lbW9yeSBlcnJvcnMiKTsKK30KKwor LyogaW5wdXQgYW5kIG91dHB1dCBmdW5jdGlvbnMgZm9yIGluZmxhdGVCYWNrKCkgKi8KK2xvY2Fs IHVuc2lnbmVkIHB1bGwodm9pZCAqZGVzYywgdW5zaWduZWQgY2hhciAqKmJ1ZikKK3sKKyAgICBz dGF0aWMgdW5zaWduZWQgaW50IG5leHQgPSAwOworICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRh dFtdID0gezB4NjMsIDAsIDIsIDB9OworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlICpzdGF0ZTsK KworICAgIGlmIChkZXNjID09IFpfTlVMTCkgeworICAgICAgICBuZXh0ID0gMDsKKyAgICAgICAg cmV0dXJuIDA7ICAgLyogbm8gaW5wdXQgKGFscmVhZHkgcHJvdmlkZWQgYXQgbmV4dF9pbikgKi8K KyAgICB9CisgICAgc3RhdGUgPSAodm9pZCAqKSgoel9zdHJlYW0gKilkZXNjKS0+c3RhdGU7Cisg ICAgaWYgKHN0YXRlICE9IFpfTlVMTCkKKyAgICAgICAgc3RhdGUtPm1vZGUgPSBTWU5DOyAgICAg LyogZm9yY2UgYW4gb3RoZXJ3aXNlIGltcG9zc2libGUgc2l0dWF0aW9uICovCisgICAgcmV0dXJu IG5leHQgPCBzaXplb2YoZGF0KSA/ICgqYnVmID0gZGF0ICsgbmV4dCsrLCAxKSA6IDA7Cit9CisK K2xvY2FsIGludCBwdXNoKHZvaWQgKmRlc2MsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQg bGVuKQoreworICAgIGJ1ZiArPSBsZW47CisgICAgcmV0dXJuIGRlc2MgIT0gWl9OVUxMOyAgICAg IC8qIGZvcmNlIGVycm9yIGlmIGRlc2Mgbm90IG51bGwgKi8KK30KKworLyogY292ZXIgaW5mbGF0 ZUJhY2soKSB1cCB0byBjb21tb24gZGVmbGF0ZSBkYXRhIGNhc2VzIGFuZCBhZnRlciB0aG9zZSAq LworbG9jYWwgdm9pZCBjb3Zlcl9iYWNrKHZvaWQpCit7CisgICAgaW50IHJldDsKKyAgICB6X3N0 cmVhbSBzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgd2luWzMyNzY4XTsKKworICAgIHJldCA9IGlu ZmxhdGVCYWNrSW5pdF8oWl9OVUxMLCAwLCB3aW4sIDAsIDApOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1ZFUlNJT05fRVJS T1IpOworICAgIHJldCA9IGluZmxhdGVCYWNrSW5pdChaX05VTEwsIDAsIHdpbik7ICAgICAgYXNz ZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2soWl9OVUxM LCBaX05VTEwsIFpfTlVMTCwgWl9OVUxMLCBaX05VTEwpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7 CisgICAgcmV0ID0gaW5mbGF0ZUJhY2tFbmQoWl9OVUxMKTsgICAgICAgICAgICAgICBhc3NlcnQo cmV0ID09IFpfU1RSRUFNX0VSUk9SKTsKKyAgICBmcHV0cygiaW5mbGF0ZUJhY2sgYmFkIHBhcmFt ZXRlcnNcbiIsIHN0ZGVycik7CisKKyAgICBtZW1fc2V0dXAoJnN0cm0pOworICAgIHJldCA9IGlu ZmxhdGVCYWNrSW5pdCgmc3RybSwgMTUsIHdpbik7ICAgICAgYXNzZXJ0KHJldCA9PSBaX09LKTsK KyAgICBzdHJtLmF2YWlsX2luID0gMjsKKyAgICBzdHJtLm5leHRfaW4gPSAodm9pZCAqKSJceDAz IjsKKyAgICByZXQgPSBpbmZsYXRlQmFjaygmc3RybSwgcHVsbCwgWl9OVUxMLCBwdXNoLCBaX05V TEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNz ZXJ0KHJldCA9PSBaX1NUUkVBTV9FTkQpOworICAgICAgICAvKiBmb3JjZSBvdXRwdXQgZXJyb3Ig Ki8KKyAgICBzdHJtLmF2YWlsX2luID0gMzsKKyAgICBzdHJtLm5leHRfaW4gPSAodm9pZCAqKSJc eDYzXHgwMCI7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2soJnN0cm0sIHB1bGwsIFpfTlVMTCwgcHVz aCwgJnN0cm0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXNzZXJ0KHJldCA9PSBaX0JVRl9FUlJPUik7CisgICAgICAgIC8qIGZvcmNlIG1vZGUgZXJy b3IgYnkgbXVja2luZyB3aXRoIHN0YXRlICovCisgICAgcmV0ID0gaW5mbGF0ZUJhY2soJnN0cm0s IHB1bGwsICZzdHJtLCBwdXNoLCBaX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSBaX1NUUkVBTV9FUlJPUik7CisgICAg cmV0ID0gaW5mbGF0ZUJhY2tFbmQoJnN0cm0pOyAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09 IFpfT0spOworICAgIG1lbV9kb25lKCZzdHJtLCAiaW5mbGF0ZUJhY2sgYmFkIHN0YXRlIik7CisK KyAgICByZXQgPSBpbmZsYXRlQmFja0luaXQoJnN0cm0sIDE1LCB3aW4pOyAgICAgIGFzc2VydChy ZXQgPT0gWl9PSyk7CisgICAgcmV0ID0gaW5mbGF0ZUJhY2tFbmQoJnN0cm0pOyAgICAgICAgICAg ICAgICBhc3NlcnQocmV0ID09IFpfT0spOworICAgIGZwdXRzKCJpbmZsYXRlQmFjayBidWlsdC1p biBtZW1vcnkgcm91dGluZXNcbiIsIHN0ZGVycik7Cit9CisKKy8qIGRvIGEgcmF3IGluZmxhdGUg b2YgZGF0YSBpbiBoZXhhZGVjaW1hbCB3aXRoIGJvdGggaW5mbGF0ZSBhbmQgaW5mbGF0ZUJhY2sg Ki8KK2xvY2FsIGludCB0cnkoY2hhciAqaGV4LCBjaGFyICppZCwgaW50IGVycikKK3sKKyAgICBp bnQgcmV0OworICAgIHVuc2lnbmVkIGxlbiwgc2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyICppbiwg Km91dCwgKndpbjsKKyAgICBjaGFyICpwcmVmaXg7CisgICAgel9zdHJlYW0gc3RybTsKKworICAg IC8qIGNvbnZlcnQgdG8gaGV4ICovCisgICAgaW4gPSBoMmIoaGV4LCAmbGVuKTsKKyAgICBhc3Nl cnQoaW4gIT0gTlVMTCk7CisKKyAgICAvKiBhbGxvY2F0ZSB3b3JrIGFyZWFzICovCisgICAgc2l6 ZSA9IGxlbiA8PCAzOworICAgIG91dCA9IG1hbGxvYyhzaXplKTsKKyAgICBhc3NlcnQob3V0ICE9 IE5VTEwpOworICAgIHdpbiA9IG1hbGxvYygzMjc2OCk7CisgICAgYXNzZXJ0KHdpbiAhPSBOVUxM KTsKKyAgICBwcmVmaXggPSBtYWxsb2Moc3RybGVuKGlkKSArIDYpOworICAgIGFzc2VydChwcmVm aXggIT0gTlVMTCk7CisKKyAgICAvKiBmaXJzdCB3aXRoIGluZmxhdGUgKi8KKyAgICBzdHJjcHko cHJlZml4LCBpZCk7CisgICAgc3RyY2F0KHByZWZpeCwgIi1sYXRlIik7CisgICAgbWVtX3NldHVw KCZzdHJtKTsKKyAgICBzdHJtLmF2YWlsX2luID0gMDsKKyAgICBzdHJtLm5leHRfaW4gPSBaX05V TEw7CisgICAgcmV0ID0gaW5mbGF0ZUluaXQyKCZzdHJtLCBlcnIgPCAwID8gNDcgOiAtMTUpOwor ICAgIGFzc2VydChyZXQgPT0gWl9PSyk7CisgICAgc3RybS5hdmFpbF9pbiA9IGxlbjsKKyAgICBz dHJtLm5leHRfaW4gPSBpbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gc2l6 ZTsKKyAgICAgICAgc3RybS5uZXh0X291dCA9IG91dDsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZSgm c3RybSwgWl9UUkVFUyk7CisgICAgICAgIGFzc2VydChyZXQgIT0gWl9TVFJFQU1fRVJST1IgJiYg cmV0ICE9IFpfTUVNX0VSUk9SKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IgfHwg cmV0ID09IFpfTkVFRF9ESUNUKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAoc3Ry bS5hdmFpbF9pbiB8fCBzdHJtLmF2YWlsX291dCA9PSAwKTsKKyAgICBpZiAoZXJyKSB7CisgICAg ICAgIGFzc2VydChyZXQgPT0gWl9EQVRBX0VSUk9SKTsKKyAgICAgICAgYXNzZXJ0KHN0cmNtcChp ZCwgc3RybS5tc2cpID09IDApOworICAgIH0KKyAgICBpbmZsYXRlRW5kKCZzdHJtKTsKKyAgICBt ZW1fZG9uZSgmc3RybSwgcHJlZml4KTsKKworICAgIC8qIHRoZW4gd2l0aCBpbmZsYXRlQmFjayAq LworICAgIGlmIChlcnIgPj0gMCkgeworICAgICAgICBzdHJjcHkocHJlZml4LCBpZCk7CisgICAg ICAgIHN0cmNhdChwcmVmaXgsICItYmFjayIpOworICAgICAgICBtZW1fc2V0dXAoJnN0cm0pOwor ICAgICAgICByZXQgPSBpbmZsYXRlQmFja0luaXQoJnN0cm0sIDE1LCB3aW4pOworICAgICAgICBh c3NlcnQocmV0ID09IFpfT0spOworICAgICAgICBzdHJtLmF2YWlsX2luID0gbGVuOworICAgICAg ICBzdHJtLm5leHRfaW4gPSBpbjsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUJhY2soJnN0cm0sIHB1 bGwsIFpfTlVMTCwgcHVzaCwgWl9OVUxMKTsKKyAgICAgICAgYXNzZXJ0KHJldCAhPSBaX1NUUkVB TV9FUlJPUik7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGFzc2VydChyZXQgPT0g Wl9EQVRBX0VSUk9SKTsKKyAgICAgICAgICAgIGFzc2VydChzdHJjbXAoaWQsIHN0cm0ubXNnKSA9 PSAwKTsKKyAgICAgICAgfQorICAgICAgICBpbmZsYXRlQmFja0VuZCgmc3RybSk7CisgICAgICAg IG1lbV9kb25lKCZzdHJtLCBwcmVmaXgpOworICAgIH0KKworICAgIC8qIGNsZWFuIHVwICovCisg ICAgZnJlZShwcmVmaXgpOworICAgIGZyZWUod2luKTsKKyAgICBmcmVlKG91dCk7CisgICAgZnJl ZShpbik7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogY292ZXIgZGVmbGF0ZSBkYXRhIGNhc2Vz IGluIGJvdGggaW5mbGF0ZSgpIGFuZCBpbmZsYXRlQmFjaygpICovCitsb2NhbCB2b2lkIGNvdmVy X2luZmxhdGUodm9pZCkKK3sKKyAgICB0cnkoIjAgMCAwIDAgMCIsICJpbnZhbGlkIHN0b3JlZCBi bG9jayBsZW5ndGhzIiwgMSk7CisgICAgdHJ5KCIzIDAiLCAiZml4ZWQiLCAwKTsKKyAgICB0cnko IjYiLCAiaW52YWxpZCBibG9jayB0eXBlIiwgMSk7CisgICAgdHJ5KCIxIDEgMCBmZSBmZiAwIiwg InN0b3JlZCIsIDApOworICAgIHRyeSgiZmMgMCAwIiwgInRvbyBtYW55IGxlbmd0aCBvciBkaXN0 YW5jZSBzeW1ib2xzIiwgMSk7CisgICAgdHJ5KCI0IDAgZmUgZmYiLCAiaW52YWxpZCBjb2RlIGxl bmd0aHMgc2V0IiwgMSk7CisgICAgdHJ5KCI0IDAgMjQgNDkgMCIsICJpbnZhbGlkIGJpdCBsZW5n dGggcmVwZWF0IiwgMSk7CisgICAgdHJ5KCI0IDAgMjQgZTkgZmYgZmYiLCAiaW52YWxpZCBiaXQg bGVuZ3RoIHJlcGVhdCIsIDEpOworICAgIHRyeSgiNCAwIDI0IGU5IGZmIDZkIiwgImludmFsaWQg Y29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsIDEpOworICAgIHRyeSgiNCA4MCA0OSA5MiAy NCA0OSA5MiAyNCA3MSBmZiBmZiA5MyAxMSAwIiwKKyAgICAgICAgImludmFsaWQgbGl0ZXJhbC9s ZW5ndGhzIHNldCIsIDEpOworICAgIHRyeSgiNCA4MCA0OSA5MiAyNCA0OSA5MiAyNCBmIGI0IGZm IGZmIGMzIDg0IiwgImludmFsaWQgZGlzdGFuY2VzIHNldCIsIDEpOworICAgIHRyeSgiNCBjMCA4 MSA4IDAgMCAwIDAgMjAgN2YgZWIgYiAwIDAiLCAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2Rl IiwgMSk7CisgICAgdHJ5KCIyIDdlIGZmIGZmIiwgImludmFsaWQgZGlzdGFuY2UgY29kZSIsIDEp OworICAgIHRyeSgiYyBjMCA4MSAwIDAgMCAwIDAgOTAgZmYgNmIgNCAwIiwgImludmFsaWQgZGlz dGFuY2UgdG9vIGZhciBiYWNrIiwgMSk7CisKKyAgICAvKiBhbHNvIHRyYWlsZXIgbWlzbWF0Y2gg anVzdCBpbiBpbmZsYXRlKCkgKi8KKyAgICB0cnkoIjFmIDhiIDggMCAwIDAgMCAwIDAgMCAzIDAg MCAwIDAgMSIsICJpbmNvcnJlY3QgZGF0YSBjaGVjayIsIC0xKTsKKyAgICB0cnkoIjFmIDhiIDgg MCAwIDAgMCAwIDAgMCAzIDAgMCAwIDAgMCAwIDAgMCAxIiwKKyAgICAgICAgImluY29ycmVjdCBs ZW5ndGggY2hlY2siLCAtMSk7CisgICAgdHJ5KCI1IGMwIDIxIGQgMCAwIDAgODAgYjAgZmUgNmQg MmYgOTEgNmMiLCAicHVsbCAxNyIsIDApOworICAgIHRyeSgiNSBlMCA4MSA5MSAyNCBjYiBiMiAy YyA0OSBlMiBmIDJlIDhiIDlhIDQ3IDU2IDlmIGZiIGZlIGVjIGQyIGZmIDFmIiwKKyAgICAgICAg ImxvbmcgY29kZSIsIDApOworICAgIHRyeSgiZWQgYzAgMSAxIDAgMCAwIDQwIDIwIGZmIDU3IDFi IDQyIDJjIDRmIiwgImxlbmd0aCBleHRyYSIsIDApOworICAgIHRyeSgiZWQgY2YgYzEgYjEgMmMg NDcgMTAgYzQgMzAgZmEgNmYgMzUgMWQgMSA4MiA1OSAzZCBmYiBiZSAyZSAyYSBmYyBmIGMiLAor ICAgICAgICAibG9uZyBkaXN0YW5jZSBhbmQgZXh0cmEiLCAwKTsKKyAgICB0cnkoImVkIGMwIDgx IDAgMCAwIDAgODAgYTAgZmQgYTkgMTcgYTkgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwICIKKyAgICAgICAgIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDYiLCAid2luZG93 IGVuZCIsIDApOworICAgIGluZigiMiA4IDIwIDgwIDAgMyAwIiwgImluZmxhdGVfZmFzdCBUWVBF IHJldHVybiIsIDAsIC0xNSwgMjU4LAorICAgICAgICBaX1NUUkVBTV9FTkQpOworICAgIGluZigi NjMgMTggNSA0MCBjIDAiLCAid2luZG93IHdyYXAiLCAzLCAtOCwgMzAwLCBaX09LKTsKK30KKwor LyogY292ZXIgcmVtYWluaW5nIGxpbmVzIGluIGluZnRyZWVzLmMgKi8KK2xvY2FsIHZvaWQgY292 ZXJfdHJlZXModm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGJpdHM7CisgICAg dW5zaWduZWQgc2hvcnQgbGVuc1sxNl0sIHdvcmtbMTZdOworICAgIGNvZGUgKm5leHQsIHRhYmxl W0VOT1VHSF9ESVNUU107CisKKyAgICAvKiB3ZSBuZWVkIHRvIGNhbGwgaW5mbGF0ZV90YWJsZSgp IGRpcmVjdGx5IGluIG9yZGVyIHRvIG1hbmlmZXN0IG5vdC0KKyAgICAgICBlbm91Z2ggZXJyb3Jz LCBzaW5jZSB6bGliIGluc3VyZXMgdGhhdCBlbm91Z2ggaXMgYWx3YXlzIGVub3VnaCAqLworICAg IGZvciAoYml0cyA9IDA7IGJpdHMgPCAxNTsgYml0cysrKQorICAgICAgICBsZW5zW2JpdHNdID0g KHVuc2lnbmVkIHNob3J0KShiaXRzICsgMSk7CisgICAgbGVuc1sxNV0gPSAxNTsKKyAgICBuZXh0 ID0gdGFibGU7CisgICAgYml0cyA9IDE1OworICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMs IGxlbnMsIDE2LCAmbmV4dCwgJmJpdHMsIHdvcmspOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKKyAgICBuZXh0ID0gdGFi bGU7CisgICAgYml0cyA9IDE7CisgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgbGVucywg MTYsICZuZXh0LCAmYml0cywgd29yayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IDEpOworICAgIGZwdXRzKCJpbmZsYXRlX3Rh YmxlIG5vdCBlbm91Z2ggZXJyb3JzXG4iLCBzdGRlcnIpOworfQorCisvKiBjb3ZlciByZW1haW5p bmcgaW5mZmFzdC5jIGRlY29kaW5nIGFuZCB3aW5kb3cgY29weWluZyAqLworbG9jYWwgdm9pZCBj b3Zlcl9mYXN0KHZvaWQpCit7CisgICAgaW5mKCJlNSBlMCA4MSBhZCA2ZCBjYiBiMiAyYyBjOSAw MSAxZSA1OSA2MyBhZSA3ZCBlZSBmYiA0ZCBmZCBiNSAzNSA0MSA2OCIKKyAgICAgICAgIiBmZiA3 ZiAwZiAwIDAgMCIsICJmYXN0IGxlbmd0aCBleHRyYSBiaXRzIiwgMCwgLTgsIDI1OCwgWl9EQVRB X0VSUk9SKTsKKyAgICBpbmYoIjI1IGZkIDgxIGI1IDZkIDU5IGI2IDZhIDQ5IGVhIGFmIDM1IDYg MzQgZWIgOGMgYjkgZjYgYjkgMWUgZWYgNjcgNDkiCisgICAgICAgICIgNTAgZmUgZmYgZmYgM2Yg MCAwIiwgImZhc3QgZGlzdGFuY2UgZXh0cmEgYml0cyIsIDAsIC04LCAyNTgsCisgICAgICAgIFpf REFUQV9FUlJPUik7CisgICAgaW5mKCIzIDdlIDAgMCAwIDAgMCIsICJmYXN0IGludmFsaWQgZGlz dGFuY2UgY29kZSIsIDAsIC04LCAyNTgsCisgICAgICAgIFpfREFUQV9FUlJPUik7CisgICAgaW5m KCIxYiA3IDAgMCAwIDAgMCIsICJmYXN0IGludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsIDAs IC04LCAyNTgsCisgICAgICAgIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCJkIGM3IDEgYWUgZWIg MzggYyA0IDQxIGEwIDg3IDcyIGRlIGRmIGZiIDFmIGI4IDM2IGIxIDM4IDVkIGZmIGZmIDAiLAor ICAgICAgICAiZmFzdCAybmQgbGV2ZWwgY29kZXMgYW5kIHRvbyBmYXIgYmFjayIsIDAsIC04LCAy NTgsIFpfREFUQV9FUlJPUik7CisgICAgaW5mKCI2MyAxOCA1IDhjIDEwIDggMCAwIDAgMCIsICJ2 ZXJ5IGNvbW1vbiBjYXNlIiwgMCwgLTgsIDI1OSwgWl9PSyk7CisgICAgaW5mKCI2MyA2MCA2MCAx OCBjOSAwIDggMTggMTggMTggMjYgYzAgMjggMCAyOSAwIDAgMCIsCisgICAgICAgICJjb250aWd1 b3VzIGFuZCB3cmFwIGFyb3VuZCB3aW5kb3ciLCA2LCAtOCwgMjU5LCBaX09LKTsKKyAgICBpbmYo IjYzIDAgMyAwIDAgMCAwIDAiLCAiY29weSBkaXJlY3QgZnJvbSBvdXRwdXQiLCAwLCAtOCwgMjU5 LAorICAgICAgICBaX1NUUkVBTV9FTkQpOworfQorCitpbnQgbWFpbih2b2lkKQoreworICAgIGZw cmludGYoc3RkZXJyLCAiJXNcbiIsIHpsaWJWZXJzaW9uKCkpOworICAgIGNvdmVyX3N1cHBvcnQo KTsKKyAgICBjb3Zlcl93cmFwKCk7CisgICAgY292ZXJfYmFjaygpOworICAgIGNvdmVyX2luZmxh dGUoKTsKKyAgICBjb3Zlcl90cmVlcygpOworICAgIGNvdmVyX2Zhc3QoKTsKKyAgICByZXR1cm4g MDsKK30KZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dz L3psaWIvaW5mZmFzdC5jCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mZmFzdC5jCVdlZCBN YXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2luZmZh c3QuYwlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEsNSArMSw1IEBACiAvKiBp bmZmYXN0LmMgLS0gZmFzdCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgTWFy ayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTcgTWFyayBBZGxlcgogICogRm9yIGNv bmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGlu IHpsaWIuaAogICovCiAKQEAgLTgsMjYgKzgsOSBAQAogI2luY2x1ZGUgImluZmxhdGUuaCIKICNp bmNsdWRlICJpbmZmYXN0LmgiCiAKLSNpZm5kZWYgQVNNSU5GCi0KLS8qIEFsbG93IG1hY2hpbmUg ZGVwZW5kZW50IG9wdGltaXphdGlvbiBmb3IgcG9zdC1pbmNyZW1lbnQgb3IgcHJlLWluY3JlbWVu dC4KLSAgIEJhc2VkIG9uIHRlc3RpbmcgdG8gZGF0ZSwKLSAgIFByZS1pbmNyZW1lbnQgcHJlZmVy cmVkIGZvcjoKLSAgIC0gUG93ZXJQQyBHMyAoQWRsZXIpCi0gICAtIE1JUFMgUjUwMDAgKFJhbmRl cnMtUGVocnNvbikKLSAgIFBvc3QtaW5jcmVtZW50IHByZWZlcnJlZCBmb3I6Ci0gICAtIG5vbmUK LSAgIE5vIG1lYXN1cmFibGUgZGlmZmVyZW5jZToKLSAgIC0gUGVudGl1bSBJSUkgKEFuZGVyc29u KQotICAgLSBNNjgwNjAgKE5pa2wpCi0gKi8KLSNpZmRlZiBQT1NUSU5DCi0jICBkZWZpbmUgT0ZG IDAKLSMgIGRlZmluZSBQVVAoYSkgKihhKSsrCisjaWZkZWYgQVNNSU5GCisjICBwcmFnbWEgbWVz c2FnZSgiQXNzZW1ibGVyIGNvZGUgbWF5IGhhdmUgYnVncyAtLSB1c2UgYXQgeW91ciBvd24gcmlz ayIpCiAjZWxzZQotIyAgZGVmaW5lIE9GRiAxCi0jICBkZWZpbmUgUFVQKGEpICorKyhhKQotI2Vu ZGlmCiAKIC8qCiAgICBEZWNvZGUgbGl0ZXJhbCwgbGVuZ3RoLCBhbmQgZGlzdGFuY2UgY29kZXMg YW5kIHdyaXRlIG91dCB0aGUgcmVzdWx0aW5nCkBAIC02NCwxOSArNDcsMjIgQEAKICAgICAgIHJl cXVpcmVzIHN0cm0tPmF2YWlsX291dCA+PSAyNTggZm9yIGVhY2ggbG9vcCB0byBhdm9pZCBjaGVj a2luZyBmb3IKICAgICAgIG91dHB1dCBzcGFjZS4KICAqLwotdm9pZCBpbmZsYXRlX2Zhc3Qoc3Ry bSwgc3RhcnQpCit2b2lkIFpMSUJfSU5URVJOQUwgaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXJ0KQog el9zdHJlYW1wIHN0cm07CiB1bnNpZ25lZCBzdGFydDsgICAgICAgICAvKiBpbmZsYXRlKCkncyBz dGFydGluZyB2YWx1ZSBmb3Igc3RybS0+YXZhaWxfb3V0ICovCiB7CiAgICAgc3RydWN0IGluZmxh dGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyog bG9jYWwgc3RybS0+bmV4dF9pbiAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAv KiB3aGlsZSBpbiA8IGxhc3QsIGVub3VnaCBpbnB1dCBhdmFpbGFibGUgKi8KKyAgICB6X2NvbnN0 IHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCisg ICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbGFzdDsgICAgLyogaGF2ZSBlbm91Z2ggaW5w dXQgd2hpbGUgaW4gPCBsYXN0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKm91dDsgICAgIC8q IGxvY2FsIHN0cm0tPm5leHRfb3V0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmJlZzsgICAg IC8qIGluZmxhdGUoKSdzIGluaXRpYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBj aGFyIEZBUiAqZW5kOyAgICAgLyogd2hpbGUgb3V0IDwgZW5kLCBlbm91Z2ggc3BhY2UgYXZhaWxh YmxlICovCisjaWZkZWYgSU5GTEFURV9TVFJJQ1QKKyAgICB1bnNpZ25lZCBkbWF4OyAgICAgICAg ICAgICAgLyogbWF4aW11bSBkaXN0YW5jZSBmcm9tIHpsaWIgaGVhZGVyICovCisjZW5kaWYKICAg ICB1bnNpZ25lZCB3c2l6ZTsgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBu b3QgdXNpbmcgd2luZG93ICovCiAgICAgdW5zaWduZWQgd2hhdmU7ICAgICAgICAgICAgIC8qIHZh bGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi8KLSAgICB1bnNpZ25lZCB3cml0ZTsgICAgICAgICAg ICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovCisgICAgdW5zaWduZWQgd25leHQ7ICAgICAgICAg ICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5k b3c7ICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIHdzaXplICE9IDAgKi8KICAgICB1 bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogbG9jYWwgc3RybS0+aG9sZCAqLwogICAgIHVu c2lnbmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLT5iaXRzICovCkBAIC04NCw3 ICs3MCw3IEBACiAgICAgY29kZSBjb25zdCBGQVIgKmRjb2RlOyAgICAgIC8qIGxvY2FsIHN0cm0t PmRpc3Rjb2RlICovCiAgICAgdW5zaWduZWQgbG1hc2s7ICAgICAgICAgICAgIC8qIG1hc2sgZm9y IGZpcnN0IGxldmVsIG9mIGxlbmd0aCBjb2RlcyAqLwogICAgIHVuc2lnbmVkIGRtYXNrOyAgICAg ICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBkaXN0YW5jZSBjb2RlcyAqLwotICAg IGNvZGUgdGhpczsgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZWQgdGFibGUgZW50cnkgKi8K KyAgICBjb2RlIGhlcmU7ICAgICAgICAgICAgICAgICAgLyogcmV0cmlldmVkIHRhYmxlIGVudHJ5 ICovCiAgICAgdW5zaWduZWQgb3A7ICAgICAgICAgICAgICAgIC8qIGNvZGUgYml0cywgb3BlcmF0 aW9uLCBleHRyYSBiaXRzLCBvciAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgd2luZG93IHBvc2l0aW9uLCB3aW5kb3cgYnl0ZXMgdG8gY29weSAqLwogICAgIHVuc2lnbmVk IGxlbjsgICAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGgsIHVudXNlZCBieXRlcyAqLwpAQCAt OTMsMTQgKzc5LDE3IEBACiAKICAgICAvKiBjb3B5IHN0YXRlIHRvIGxvY2FsIHZhcmlhYmxlcyAq LwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwot ICAgIGluID0gc3RybS0+bmV4dF9pbiAtIE9GRjsKKyAgICBpbiA9IHN0cm0tPm5leHRfaW47CiAg ICAgbGFzdCA9IGluICsgKHN0cm0tPmF2YWlsX2luIC0gNSk7Ci0gICAgb3V0ID0gc3RybS0+bmV4 dF9vdXQgLSBPRkY7CisgICAgb3V0ID0gc3RybS0+bmV4dF9vdXQ7CiAgICAgYmVnID0gb3V0IC0g KHN0YXJ0IC0gc3RybS0+YXZhaWxfb3V0KTsKICAgICBlbmQgPSBvdXQgKyAoc3RybS0+YXZhaWxf b3V0IC0gMjU3KTsKKyNpZmRlZiBJTkZMQVRFX1NUUklDVAorICAgIGRtYXggPSBzdGF0ZS0+ZG1h eDsKKyNlbmRpZgogICAgIHdzaXplID0gc3RhdGUtPndzaXplOwogICAgIHdoYXZlID0gc3RhdGUt PndoYXZlOwotICAgIHdyaXRlID0gc3RhdGUtPndyaXRlOworICAgIHduZXh0ID0gc3RhdGUtPndu ZXh0OwogICAgIHdpbmRvdyA9IHN0YXRlLT53aW5kb3c7CiAgICAgaG9sZCA9IHN0YXRlLT5ob2xk OwogICAgIGJpdHMgPSBzdGF0ZS0+Yml0czsKQEAgLTExMywyOSArMTAyLDI5IEBACiAgICAgICAg aW5wdXQgZGF0YSBvciBvdXRwdXQgc3BhY2UgKi8KICAgICBkbyB7CiAgICAgICAgIGlmIChiaXRz IDwgMTUpIHsKLSAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKFBVUChpbikpIDw8 IGJpdHM7CisgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKSgqaW4rKykgPDwgYml0 czsKICAgICAgICAgICAgIGJpdHMgKz0gODsKLSAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVk IGxvbmcpKFBVUChpbikpIDw8IGJpdHM7CisgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBs b25nKSgqaW4rKykgPDwgYml0czsKICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgfQot ICAgICAgICB0aGlzID0gbGNvZGVbaG9sZCAmIGxtYXNrXTsKKyAgICAgICAgaGVyZSA9IGxjb2Rl W2hvbGQgJiBsbWFza107CiAgICAgICBkb2xlbjoKLSAgICAgICAgb3AgPSAodW5zaWduZWQpKHRo aXMuYml0cyk7CisgICAgICAgIG9wID0gKHVuc2lnbmVkKShoZXJlLmJpdHMpOwogICAgICAgICBo b2xkID4+PSBvcDsKICAgICAgICAgYml0cyAtPSBvcDsKLSAgICAgICAgb3AgPSAodW5zaWduZWQp KHRoaXMub3ApOworICAgICAgICBvcCA9ICh1bnNpZ25lZCkoaGVyZS5vcCk7CiAgICAgICAgIGlm IChvcCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovCi0gICAg ICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIHRoaXMudmFsID49IDB4MjAgJiYgdGhpcy52YWwgPCAw eDdmID8KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBo ZXJlLnZhbCA8IDB4N2YgPwogICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBs aXRlcmFsICclYydcbiIgOgotICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBs aXRlcmFsIDB4JTAyeFxuIiwgdGhpcy52YWwpKTsKLSAgICAgICAgICAgIFBVUChvdXQpID0gKHVu c2lnbmVkIGNoYXIpKHRoaXMudmFsKTsKKyAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAg ICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIGhlcmUudmFsKSk7CisgICAgICAgICAgICAqb3V0Kysg PSAodW5zaWduZWQgY2hhcikoaGVyZS52YWwpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg KG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqLwotICAgICAg ICAgICAgbGVuID0gKHVuc2lnbmVkKSh0aGlzLnZhbCk7CisgICAgICAgICAgICBsZW4gPSAodW5z aWduZWQpKGhlcmUudmFsKTsKICAgICAgICAgICAgIG9wICY9IDE1OyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIG51bWJlciBvZiBleHRyYSBiaXRzICovCiAgICAgICAgICAgICBpZiAob3Ap IHsKICAgICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7Ci0gICAgICAgICAgICAgICAgICAg IGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKFBVUChpbikpIDw8IGJpdHM7CisgICAgICAgICAgICAg ICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAg ICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg IGxlbiArPSAodW5zaWduZWQpaG9sZCAmICgoMVUgPDwgb3ApIC0gMSk7CkBAIC0xNDQsMjkgKzEz MywzNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5m bGF0ZTogICAgICAgICBsZW5ndGggJXVcbiIsIGxlbikpOwogICAgICAgICAgICAgaWYgKGJpdHMg PCAxNSkgewotICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVkIGxvbmcpKFBVUChpbikp IDw8IGJpdHM7CisgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoKmluKysp IDw8IGJpdHM7CiAgICAgICAgICAgICAgICAgYml0cyArPSA4OwotICAgICAgICAgICAgICAgIGhv bGQgKz0gKHVuc2lnbmVkIGxvbmcpKFBVUChpbikpIDw8IGJpdHM7CisgICAgICAgICAgICAgICAg aG9sZCArPSAodW5zaWduZWQgbG9uZykoKmluKyspIDw8IGJpdHM7CiAgICAgICAgICAgICAgICAg Yml0cyArPSA4OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcyA9IGRjb2RlW2hvbGQg JiBkbWFza107CisgICAgICAgICAgICBoZXJlID0gZGNvZGVbaG9sZCAmIGRtYXNrXTsKICAgICAg ICAgICBkb2Rpc3Q6Ci0gICAgICAgICAgICBvcCA9ICh1bnNpZ25lZCkodGhpcy5iaXRzKTsKKyAg ICAgICAgICAgIG9wID0gKHVuc2lnbmVkKShoZXJlLmJpdHMpOwogICAgICAgICAgICAgaG9sZCA+ Pj0gb3A7CiAgICAgICAgICAgICBiaXRzIC09IG9wOwotICAgICAgICAgICAgb3AgPSAodW5zaWdu ZWQpKHRoaXMub3ApOworICAgICAgICAgICAgb3AgPSAodW5zaWduZWQpKGhlcmUub3ApOwogICAg ICAgICAgICAgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAgLyogZGlzdGFuY2Ug YmFzZSAqLwotICAgICAgICAgICAgICAgIGRpc3QgPSAodW5zaWduZWQpKHRoaXMudmFsKTsKKyAg ICAgICAgICAgICAgICBkaXN0ID0gKHVuc2lnbmVkKShoZXJlLnZhbCk7CiAgICAgICAgICAgICAg ICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0 cyAqLwogICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKLSAgICAgICAgICAgICAgICAg ICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKKyAgICAgICAgICAg ICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoKmluKyspIDw8IGJpdHM7CiAgICAgICAg ICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBv cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQ KGluKSkgPDwgYml0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgKz0gKHVuc2lnbmVk IGxvbmcpKCppbisrKSA8PCBiaXRzOwogICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4 OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgIGRpc3QgKz0gKHVuc2lnbmVkKWhvbGQgJiAoKDFVIDw8IG9wKSAtIDEpOworI2lmZGVmIElO RkxBVEVfU1RSSUNUCisgICAgICAgICAgICAgICAgaWYgKGRpc3QgPiBkbWF4KSB7CisgICAgICAg ICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZh ciBiYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAg ICAgICAgIGhvbGQgPj49IG9wOwogICAgICAgICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAg ICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxu IiwgZGlzdCkpOwpAQCAtMTc0LDc5ICsxNzAsMTAxIEBACiAgICAgICAgICAgICAgICAgaWYgKGRp c3QgPiBvcCkgeyAgICAgICAgICAgICAgICAvKiBzZWUgaWYgY29weSBmcm9tIHdpbmRvdyAqLwog ICAgICAgICAgICAgICAgICAgICBvcCA9IGRpc3QgLSBvcDsgICAgICAgICAgICAgLyogZGlzdGFu Y2UgYmFjayBpbiB3aW5kb3cgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKG9wID4gd2hhdmUp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQg ZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5t b2RlID0gQkFEOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoc3RhdGUtPnNhbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJtLT5tc2cgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJp bnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElE X0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuIDw9 IG9wIC0gd2hhdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IDA7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSB3aGlsZSAoLS1sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgbGVuIC09IG9wIC0gd2hhdmU7CisgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gMDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0gd2hpbGUgKC0tb3AgPiB3aGF2ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo b3AgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0 OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9IHdoaWxlICgtLWxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICBmcm9tID0gd2luZG93IC0gT0ZGOwotICAgICAgICAgICAg ICAgICAgICBpZiAod3JpdGUgPT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24gY2FzZSAq LworICAgICAgICAgICAgICAgICAgICBmcm9tID0gd2luZG93OworICAgICAgICAgICAgICAgICAg ICBpZiAod25leHQgPT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24gY2FzZSAqLwogICAg ICAgICAgICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSAtIG9wOwogICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQp ID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAq ZnJvbSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9t IG91dHB1dCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdyaXRlIDwgb3ApIHsgICAgICAvKiB3 cmFwIGFyb3VuZCB3aW5kb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3Np emUgKyB3cml0ZSAtIG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgb3AgLT0gd3JpdGU7Cisg ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHduZXh0IDwgb3ApIHsgICAgICAvKiB3cmFwIGFy b3VuZCB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgKyB3 bmV4dCAtIG9wOworICAgICAgICAgICAgICAgICAgICAgICAgb3AgLT0gd25leHQ7CiAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gZW5k IG9mIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqb3V0KysgPSAqZnJvbSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hp bGUgKC0tb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSB3aW5kb3cgLSBP RkY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlIDwgbGVuKSB7ICAvKiBz b21lIGZyb20gc3RhcnQgb2Ygd2luZG93ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9wID0gd3JpdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHdpbmRv dzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod25leHQgPCBsZW4pIHsgIC8qIHNv bWUgZnJvbSBzdGFydCBvZiB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb3AgPSB3bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9w OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmcm9tID0gb3V0IC0gZGlzdDsgICAgICAvKiByZXN0IGZyb20gb3V0cHV0ICovCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAvKiBjb250aWd1b3VzIGluIHdpbmRvdyAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgZnJvbSArPSB3cml0ZSAtIG9wOworICAgICAgICAgICAgICAgICAgICAgICAgZnJv bSArPSB3bmV4dCAtIG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7 ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZyb20gPSBvdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqLwogICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg IHdoaWxlIChsZW4gPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBV UChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwot ICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAgICAgICAgICAgICAg Km91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpmcm9t Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXQr KyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOwogICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg ICAgICAgICBmcm9tID0gb3V0IC0gZGlzdDsgICAgICAgICAgLyogY29weSBkaXJlY3QgZnJvbSBv dXRwdXQgKi8KICAgICAgICAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg IC8qIG1pbmltdW0gbGVuZ3RoIGlzIHRocmVlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBQ VVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0g UFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqZnJvbSsrOworICAgICAgICAgICAg ICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpv dXQrKyA9ICpmcm9tKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAg ICAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7CiAgICAgICAgICAgICAgICAgICAgIGlm IChsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwor ICAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gKmZyb20rKzsKICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChsZW4gPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChv dXQpID0gUFVQKGZyb20pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICpm cm9tKys7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICgob3AgJiA2NCkgPT0gMCkgeyAgICAgICAgICAv KiAybmQgbGV2ZWwgZGlzdGFuY2UgY29kZSAqLwotICAgICAgICAgICAgICAgIHRoaXMgPSBkY29k ZVt0aGlzLnZhbCArIChob2xkICYgKCgxVSA8PCBvcCkgLSAxKSldOworICAgICAgICAgICAgICAg IGhlcmUgPSBkY29kZVtoZXJlLnZhbCArIChob2xkICYgKCgxVSA8PCBvcCkgLSAxKSldOwogICAg ICAgICAgICAgICAgIGdvdG8gZG9kaXN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxz ZSB7CkBAIC0yNTYsNyArMjc0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg ICBlbHNlIGlmICgob3AgJiA2NCkgPT0gMCkgeyAgICAgICAgICAgICAgLyogMm5kIGxldmVsIGxl bmd0aCBjb2RlICovCi0gICAgICAgICAgICB0aGlzID0gbGNvZGVbdGhpcy52YWwgKyAoaG9sZCAm ICgoMVUgPDwgb3ApIC0gMSkpXTsKKyAgICAgICAgICAgIGhlcmUgPSBsY29kZVtoZXJlLnZhbCAr IChob2xkICYgKCgxVSA8PCBvcCkgLSAxKSldOwogICAgICAgICAgICAgZ290byBkb2xlbjsKICAg ICAgICAgfQogICAgICAgICBlbHNlIGlmIChvcCAmIDMyKSB7ICAgICAgICAgICAgICAgICAgICAg LyogZW5kLW9mLWJsb2NrICovCkBAIC0yNzgsOCArMjk2LDggQEAKICAgICBob2xkICY9ICgxVSA8 PCBiaXRzKSAtIDE7CiAKICAgICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJldHVybiAqLwotICAgIHN0 cm0tPm5leHRfaW4gPSBpbiArIE9GRjsKLSAgICBzdHJtLT5uZXh0X291dCA9IG91dCArIE9GRjsK KyAgICBzdHJtLT5uZXh0X2luID0gaW47CisgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CiAgICAg c3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpKGluIDwgbGFzdCA/IDUgKyAobGFzdCAtIGluKSA6 IDUgLSAoaW4gLSBsYXN0KSk7CiAgICAgc3RybS0+YXZhaWxfb3V0ID0gKHVuc2lnbmVkKShvdXQg PCBlbmQgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU3ICsgKGVuZCAtIG91 dCkgOiAyNTcgLSAob3V0IC0gZW5kKSk7CkBAIC0yOTIsNyArMzEwLDcgQEAKICAgIGluZmxhdGVf ZmFzdCgpIHNwZWVkdXBzIHRoYXQgdHVybmVkIG91dCBzbG93ZXIgKG9uIGEgUG93ZXJQQyBHMyA3 NTBDWGUpOgogICAgLSBVc2luZyBiaXQgZmllbGRzIGZvciBjb2RlIHN0cnVjdHVyZQogICAgLSBE aWZmZXJlbnQgb3AgZGVmaW5pdGlvbiB0byBhdm9pZCAmIGZvciBleHRyYSBiaXRzIChkbyAmIGZv ciB0YWJsZSBiaXRzKQotICAgLSBUaHJlZSBzZXBhcmF0ZSBkZWNvZGluZyBkby1sb29wcyBmb3Ig ZGlyZWN0LCB3aW5kb3csIGFuZCB3cml0ZSA9PSAwCisgICAtIFRocmVlIHNlcGFyYXRlIGRlY29k aW5nIGRvLWxvb3BzIGZvciBkaXJlY3QsIHdpbmRvdywgYW5kIHduZXh0ID09IDAKICAgIC0gU3Bl Y2lhbCBjYXNlIGZvciBkaXN0YW5jZSA+IDEgY29waWVzIHRvIGRvIG92ZXJsYXBwZWQgbG9hZCBh bmQgc3RvcmUgY29weQogICAgLSBFeHBsaWNpdCBicmFuY2ggcHJlZGljdGlvbnMgKGJhc2VkIG9u IG1lYXN1cmVkIGJyYW5jaCBwcm9iYWJpbGl0aWVzKQogICAgLSBEZWZlcnJpbmcgbWF0Y2ggY29w eSBhbmQgaW50ZXJzcGVyc2VkIGl0IHdpdGggZGVjb2Rpbmcgc3Vic2VxdWVudCBjb2RlcwpkaWZm IC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZm YXN0LmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZmYXN0LmgJV2VkIE1heSAyNyAwMDow OTo0NiAyMDIwICswMjAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mZmFzdC5oCVdlZCBN YXkgMjcgMTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmZhc3QuaCAt LSBoZWFkZXIgdG8gdXNlIGluZmZhc3QuYwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgTWFy ayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMTAgTWFyayBBZGxlcgogICog Rm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90 aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTgsNCArOCw0IEBACiAgICBzdWJqZWN0IHRvIGNoYW5n ZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCiAgKi8KIAotdm9pZCBpbmZs YXRlX2Zhc3QgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBzdGFydCkpOwordm9pZCBaTElC X0lOVEVSTkFMIGluZmxhdGVfZmFzdCBPRigoel9zdHJlYW1wIHN0cm0sIHVuc2lnbmVkIHN0YXJ0 KSk7CmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96 bGliL2luZmZpeGVkLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZmaXhlZC5oCVdlZCBN YXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL2luZmZp eGVkLmgJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBAIC0yLDkgKzIsOSBAQAogICAg ICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG1ha2VmaXhlZCgpLgogICAgICAqLwogCi0g ICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0 aW9ucy4gSXQKLSAgICAgICBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29t cHJlc3Npb24gbGlicmFyeSBhbmQKLSAgICAgICBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGlj YXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgICAgLyogV0FSTklORzogdGhpcyBmaWxl IHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4KKyAgICAgICBJdCBpcyBwYXJ0 IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkgYW5kIGlzCisgICAgICAgc3Vi amVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgogICAg ICAqLwogCiAgICAgc3RhdGljIGNvbnN0IGNvZGUgbGVuZml4WzUxMl0gPSB7CmRpZmYgLXIgYTA1 NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL2luZmxhdGUuYwot LS0gYS9zeXMvc3JjL2NtZC9ncy96bGliL2luZmxhdGUuYwlXZWQgTWF5IDI3IDAwOjA5OjQ2IDIw MjAgKzAyMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZsYXRlLmMJV2VkIE1heSAyNyAx NzozOTozNyAyMDIwIC0wMzAwCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mbGF0ZS5jIC0tIHpsaWIg ZGVjb21wcmVzc2lvbgotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgTWFyayBBZGxlcgorICog Q29weXJpZ2h0IChDKSAxOTk1LTIwMTYgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2Yg ZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICov CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqIC0gUmVhcnJhbmdlIHdpbmRvdyBjb3BpZXMgaW4gaW5m bGF0ZV9mYXN0KCkgZm9yIHNwZWVkIGFuZCBzaW1wbGlmaWNhdGlvbgogICogLSBVbnJvbGwgbGFz dCBjb3B5IGZvciB3aW5kb3cgbWF0Y2ggaW4gaW5mbGF0ZV9mYXN0KCkKICAqIC0gVXNlIGxvY2Fs IGNvcGllcyBvZiB3aW5kb3cgdmFyaWFibGVzIGluIGluZmxhdGVfZmFzdCgpIGZvciBzcGVlZAot ICogLSBQdWxsIG91dCBjb21tb24gd3JpdGUgPT0gMCBjYXNlIGZvciBzcGVlZCBpbiBpbmZsYXRl X2Zhc3QoKQorICogLSBQdWxsIG91dCBjb21tb24gd25leHQgPT0gMCBjYXNlIGZvciBzcGVlZCBp biBpbmZsYXRlX2Zhc3QoKQogICogLSBNYWtlIG9wIGFuZCBsZW4gaW4gaW5mbGF0ZV9mYXN0KCkg dW5zaWduZWQgZm9yIGNvbnNpc3RlbmN5CiAgKiAtIEFkZCBGQVIgdG8gbGNvZGUgYW5kIGRjb2Rl IGRlY2xhcmF0aW9ucyBpbiBpbmZsYXRlX2Zhc3QoKQogICogLSBTaW1wbGlmaWVkIGJhZCBkaXN0 YW5jZSBjaGVjayBpbiBpbmZsYXRlX2Zhc3QoKQpAQCAtOTIsMzQgKzkyLDEwNCBAQAogI2VuZGlm CiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2xvY2FsIGludCBpbmZsYXRlU3RhdGVDaGVj ayBPRigoel9zdHJlYW1wIHN0cm0pKTsKIGxvY2FsIHZvaWQgZml4ZWR0YWJsZXMgT0YoKHN0cnVj dCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGUpKTsKLWxvY2FsIGludCB1cGRhdGV3aW5kb3cgT0Yo KHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBvdXQpKTsKK2xvY2FsIGludCB1cGRhdGV3aW5kb3cg T0YoKHpfc3RyZWFtcCBzdHJtLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29weSkpOwogI2lmZGVmIEJVSUxERklYRUQK ICAgIHZvaWQgbWFrZWZpeGVkIE9GKCh2b2lkKSk7CiAjZW5kaWYKLWxvY2FsIHVuc2lnbmVkIHN5 bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwK K2xvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgY29uc3Qg dW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxlbikpOwogCitsb2NhbCBpbnQgaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkKK3pfc3Ry ZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisgICAg aWYgKHN0cm0gPT0gWl9OVUxMIHx8CisgICAgICAgIHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVu YykwIHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAg aWYgKHN0YXRlID09IFpfTlVMTCB8fCBzdGF0ZS0+c3RybSAhPSBzdHJtIHx8CisgICAgICAgIHN0 YXRlLT5tb2RlIDwgSEVBRCB8fCBzdGF0ZS0+bW9kZSA+IFNZTkMpCisgICAgICAgIHJldHVybiAx OworICAgIHJldHVybiAwOworfQorCitpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwKHN0cm0p Cit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRl OworCisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJS T1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7 CisgICAgc3RybS0+dG90YWxfaW4gPSBzdHJtLT50b3RhbF9vdXQgPSBzdGF0ZS0+dG90YWwgPSAw OworICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKKyAgICBpZiAoc3RhdGUtPndyYXApICAgICAgICAv KiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovCisgICAgICAgIHN0 cm0tPmFkbGVyID0gc3RhdGUtPndyYXAgJiAxOworICAgIHN0YXRlLT5tb2RlID0gSEVBRDsKKyAg ICBzdGF0ZS0+bGFzdCA9IDA7CisgICAgc3RhdGUtPmhhdmVkaWN0ID0gMDsKKyAgICBzdGF0ZS0+ ZG1heCA9IDMyNzY4VTsKKyAgICBzdGF0ZS0+aGVhZCA9IFpfTlVMTDsKKyAgICBzdGF0ZS0+aG9s ZCA9IDA7CisgICAgc3RhdGUtPmJpdHMgPSAwOworICAgIHN0YXRlLT5sZW5jb2RlID0gc3RhdGUt PmRpc3Rjb2RlID0gc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7CisgICAgc3RhdGUtPnNhbmUg PSAxOworICAgIHN0YXRlLT5iYWNrID0gLTE7CisgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRl OiByZXNldFxuIikpOworICAgIHJldHVybiBaX09LOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRl UmVzZXQoc3RybSkKIHpfc3RyZWFtcCBzdHJtOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRl IEZBUiAqc3RhdGU7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0g Wl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNr KHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxh dGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7Ci0gICAgc3RybS0+dG90YWxfaW4gPSBzdHJtLT50 b3RhbF9vdXQgPSBzdGF0ZS0+dG90YWwgPSAwOwotICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKLSAg ICBzdHJtLT5hZGxlciA9IDE7ICAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2 YSB0ZXN0IHN1aXRlICovCi0gICAgc3RhdGUtPm1vZGUgPSBIRUFEOwotICAgIHN0YXRlLT5sYXN0 ID0gMDsKLSAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAwOwogICAgIHN0YXRlLT53c2l6ZSA9IDA7CiAg ICAgc3RhdGUtPndoYXZlID0gMDsKLSAgICBzdGF0ZS0+aG9sZCA9IDA7Ci0gICAgc3RhdGUtPmJp dHMgPSAwOwotICAgIHN0YXRlLT5sZW5jb2RlID0gc3RhdGUtPmRpc3Rjb2RlID0gc3RhdGUtPm5l eHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiByZXNldFxu IikpOwotICAgIHJldHVybiBaX09LOworICAgIHN0YXRlLT53bmV4dCA9IDA7CisgICAgcmV0dXJu IGluZmxhdGVSZXNldEtlZXAoc3RybSk7Cit9CisKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldDIo c3RybSwgd2luZG93Qml0cykKK3pfc3RyZWFtcCBzdHJtOworaW50IHdpbmRvd0JpdHM7Cit7Cisg ICAgaW50IHdyYXA7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAg IC8qIGdldCB0aGUgc3RhdGUgKi8KKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJl dHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBG QVIgKilzdHJtLT5zdGF0ZTsKKworICAgIC8qIGV4dHJhY3Qgd3JhcCByZXF1ZXN0IGZyb20gd2lu ZG93Qml0cyBwYXJhbWV0ZXIgKi8KKyAgICBpZiAod2luZG93Qml0cyA8IDApIHsKKyAgICAgICAg d3JhcCA9IDA7CisgICAgICAgIHdpbmRvd0JpdHMgPSAtd2luZG93Qml0czsKKyAgICB9CisgICAg ZWxzZSB7CisgICAgICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDU7CisjaWZkZWYgR1VO WklQCisgICAgICAgIGlmICh3aW5kb3dCaXRzIDwgNDgpCisgICAgICAgICAgICB3aW5kb3dCaXRz ICY9IDE1OworI2VuZGlmCisgICAgfQorCisgICAgLyogc2V0IG51bWJlciBvZiB3aW5kb3cgYml0 cywgZnJlZSB3aW5kb3cgaWYgZGlmZmVyZW50ICovCisgICAgaWYgKHdpbmRvd0JpdHMgJiYgKHdp bmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkpCisgICAgICAgIHJldHVybiBaX1NUUkVB TV9FUlJPUjsKKyAgICBpZiAoc3RhdGUtPndpbmRvdyAhPSBaX05VTEwgJiYgc3RhdGUtPndiaXRz ICE9ICh1bnNpZ25lZCl3aW5kb3dCaXRzKSB7CisgICAgICAgIFpGUkVFKHN0cm0sIHN0YXRlLT53 aW5kb3cpOworICAgICAgICBzdGF0ZS0+d2luZG93ID0gWl9OVUxMOworICAgIH0KKworICAgIC8q IHVwZGF0ZSBzdGF0ZSBhbmQgcmVzZXQgdGhlIHJlc3Qgb2YgaXQgKi8KKyAgICBzdGF0ZS0+d3Jh cCA9IHdyYXA7CisgICAgc3RhdGUtPndiaXRzID0gKHVuc2lnbmVkKXdpbmRvd0JpdHM7CisgICAg cmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTsKIH0KIAogaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQy XyhzdHJtLCB3aW5kb3dCaXRzLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSkKQEAgLTEyOCw2ICsxOTgs NyBAQAogY29uc3QgY2hhciAqdmVyc2lvbjsKIGludCBzdHJlYW1fc2l6ZTsKIHsKKyAgICBpbnQg cmV0OwogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CiAKICAgICBpZiAodmVy c2lvbiA9PSBaX05VTEwgfHwgdmVyc2lvblswXSAhPSBaTElCX1ZFUlNJT05bMF0gfHwKQEAgLTEz NiwzMyArMjA3LDMzIEBACiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1f RVJST1I7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2Fz ZSB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19m dW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwor I2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3Bh cXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAo ZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9 PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9F UlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAgICAg c3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopCiAgICAgICAgICAgICBaQUxMT0Mo c3RybSwgMSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09 IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0 ZTogYWxsb2NhdGVkXG4iKSk7Ci0gICAgc3RybS0+c3RhdGUgPSAodm9pZHBmKXN0YXRlOwotICAg IGlmICh3aW5kb3dCaXRzIDwgMCkgewotICAgICAgICBzdGF0ZS0+d3JhcCA9IDA7Ci0gICAgICAg IHdpbmRvd0JpdHMgPSAtd2luZG93Qml0czsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0 YXRlLT53cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAxOwotI2lmZGVmIEdVTlpJUAotICAgICAg ICBpZiAod2luZG93Qml0cyA8IDQ4KSB3aW5kb3dCaXRzICY9IDE1OwotI2VuZGlmCi0gICAgfQot ICAgIGlmICh3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUpIHsKKyAgICBzdHJtLT5z dGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopc3RhdGU7CisgICAgc3RhdGUtPnN0 cm0gPSBzdHJtOworICAgIHN0YXRlLT53aW5kb3cgPSBaX05VTEw7CisgICAgc3RhdGUtPm1vZGUg PSBIRUFEOyAgICAgLyogdG8gcGFzcyBzdGF0ZSB0ZXN0IGluIGluZmxhdGVSZXNldDIoKSAqLwor ICAgIHJldCA9IGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cyk7CisgICAgaWYgKHJldCAh PSBaX09LKSB7CiAgICAgICAgIFpGUkVFKHN0cm0sIHN0YXRlKTsKICAgICAgICAgc3RybS0+c3Rh dGUgPSBaX05VTEw7Ci0gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICB9Ci0gICAg c3RhdGUtPndiaXRzID0gKHVuc2lnbmVkKXdpbmRvd0JpdHM7Ci0gICAgc3RhdGUtPndpbmRvdyA9 IFpfTlVMTDsKLSAgICByZXR1cm4gaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgIHJldHVybiByZXQ7 CiB9CiAKIGludCBaRVhQT1JUIGluZmxhdGVJbml0XyhzdHJtLCB2ZXJzaW9uLCBzdHJlYW1fc2l6 ZSkKQEAgLTE3Myw2ICsyNDQsMjcgQEAKICAgICByZXR1cm4gaW5mbGF0ZUluaXQyXyhzdHJtLCBE RUZfV0JJVFMsIHZlcnNpb24sIHN0cmVhbV9zaXplKTsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0 ZVByaW1lKHN0cm0sIGJpdHMsIHZhbHVlKQorel9zdHJlYW1wIHN0cm07CitpbnQgYml0czsKK2lu dCB2YWx1ZTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAg aWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAg c3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgaWYg KGJpdHMgPCAwKSB7CisgICAgICAgIHN0YXRlLT5ob2xkID0gMDsKKyAgICAgICAgc3RhdGUtPmJp dHMgPSAwOworICAgICAgICByZXR1cm4gWl9PSzsKKyAgICB9CisgICAgaWYgKGJpdHMgPiAxNiB8 fCBzdGF0ZS0+Yml0cyArICh1SW50KWJpdHMgPiAzMikgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwor ICAgIHZhbHVlICY9ICgxTCA8PCBiaXRzKSAtIDE7CisgICAgc3RhdGUtPmhvbGQgKz0gKHVuc2ln bmVkKXZhbHVlIDw8IHN0YXRlLT5iaXRzOworICAgIHN0YXRlLT5iaXRzICs9ICh1SW50KWJpdHM7 CisgICAgcmV0dXJuIFpfT0s7Cit9CisKIC8qCiAgICBSZXR1cm4gc3RhdGUgd2l0aCBsZW5ndGgg YW5kIGRpc3RhbmNlIGRlY29kaW5nIHRhYmxlcyBhbmQgaW5kZXggc2l6ZXMgc2V0IHRvCiAgICBm aXhlZCBjb2RlIGRlY29kaW5nLiAgTm9ybWFsbHkgdGhpcyByZXR1cm5zIGZpeGVkIHRhYmxlcyBm cm9tIGluZmZpeGVkLmguCkBAIC0yNjcsOCArMzU5LDggQEAKICAgICBsb3cgPSAwOwogICAgIGZv ciAoOzspIHsKICAgICAgICAgaWYgKChsb3cgJSA3KSA9PSAwKSBwcmludGYoIlxuICAgICAgICAi KTsKLSAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9Iiwgc3RhdGUubGVuY29kZVtsb3ddLm9wLCBz dGF0ZS5sZW5jb2RlW2xvd10uYml0cywKLSAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGVbbG93 XS52YWwpOworICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCAobG93ICYgMTI3KSA9PSA5OSA/ IDY0IDogc3RhdGUubGVuY29kZVtsb3ddLm9wLAorICAgICAgICAgICAgICAgc3RhdGUubGVuY29k ZVtsb3ddLmJpdHMsIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOwogICAgICAgICBpZiAoKytsb3cg PT0gc2l6ZSkgYnJlYWs7CiAgICAgICAgIHB1dGNoYXIoJywnKTsKICAgICB9CkBAIC0zMDEsMTIg KzM5MywxMyBAQAogICAgb3V0cHV0IHdpbGwgZmFsbCBpbiB0aGUgb3V0cHV0IGRhdGEsIG1ha2lu ZyBtYXRjaCBjb3BpZXMgc2ltcGxlciBhbmQgZmFzdGVyLgogICAgVGhlIGFkdmFudGFnZSBtYXkg YmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy4K ICAqLwotbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpCitsb2NhbCBpbnQgdXBkYXRl d2luZG93KHN0cm0sIGVuZCwgY29weSkKIHpfc3RyZWFtcCBzdHJtOwotdW5zaWduZWQgb3V0Owor Y29uc3QgQnl0ZWYgKmVuZDsKK3Vuc2lnbmVkIGNvcHk7CiB7CiAgICAgc3RydWN0IGluZmxhdGVf c3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjb3B5LCBkaXN0OworICAgIHVuc2lnbmVk IGRpc3Q7CiAKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5z dGF0ZTsKIApAQCAtMzIxLDMwICs0MTQsMjkgQEAKICAgICAvKiBpZiB3aW5kb3cgbm90IGluIHVz ZSB5ZXQsIGluaXRpYWxpemUgKi8KICAgICBpZiAoc3RhdGUtPndzaXplID09IDApIHsKICAgICAg ICAgc3RhdGUtPndzaXplID0gMVUgPDwgc3RhdGUtPndiaXRzOwotICAgICAgICBzdGF0ZS0+d3Jp dGUgPSAwOworICAgICAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgICAgICBzdGF0ZS0+d2hhdmUg PSAwOwogICAgIH0KIAogICAgIC8qIGNvcHkgc3RhdGUtPndzaXplIG9yIGxlc3Mgb3V0cHV0IGJ5 dGVzIGludG8gdGhlIGNpcmN1bGFyIHdpbmRvdyAqLwotICAgIGNvcHkgPSBvdXQgLSBzdHJtLT5h dmFpbF9vdXQ7CiAgICAgaWYgKGNvcHkgPj0gc3RhdGUtPndzaXplKSB7Ci0gICAgICAgIHptZW1j cHkoc3RhdGUtPndpbmRvdywgc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53 c2l6ZSk7Ci0gICAgICAgIHN0YXRlLT53cml0ZSA9IDA7CisgICAgICAgIHptZW1jcHkoc3RhdGUt PndpbmRvdywgZW5kIC0gc3RhdGUtPndzaXplLCBzdGF0ZS0+d3NpemUpOworICAgICAgICBzdGF0 ZS0+d25leHQgPSAwOwogICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7CiAgICAg fQogICAgIGVsc2UgewotICAgICAgICBkaXN0ID0gc3RhdGUtPndzaXplIC0gc3RhdGUtPndyaXRl OworICAgICAgICBkaXN0ID0gc3RhdGUtPndzaXplIC0gc3RhdGUtPnduZXh0OwogICAgICAgICBp ZiAoZGlzdCA+IGNvcHkpIGRpc3QgPSBjb3B5OwotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5k b3cgKyBzdGF0ZS0+d3JpdGUsIHN0cm0tPm5leHRfb3V0IC0gY29weSwgZGlzdCk7CisgICAgICAg IHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7 CiAgICAgICAgIGNvcHkgLT0gZGlzdDsKICAgICAgICAgaWYgKGNvcHkpIHsKLSAgICAgICAgICAg IHptZW1jcHkoc3RhdGUtPndpbmRvdywgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBjb3B5KTsKLSAg ICAgICAgICAgIHN0YXRlLT53cml0ZSA9IGNvcHk7CisgICAgICAgICAgICB6bWVtY3B5KHN0YXRl LT53aW5kb3csIGVuZCAtIGNvcHksIGNvcHkpOworICAgICAgICAgICAgc3RhdGUtPnduZXh0ID0g Y29weTsKICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKICAgICAgICAg fQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLT53cml0ZSArPSBkaXN0OwotICAg ICAgICAgICAgaWYgKHN0YXRlLT53cml0ZSA9PSBzdGF0ZS0+d3NpemUpIHN0YXRlLT53cml0ZSA9 IDA7CisgICAgICAgICAgICBzdGF0ZS0+d25leHQgKz0gZGlzdDsKKyAgICAgICAgICAgIGlmIChz dGF0ZS0+d25leHQgPT0gc3RhdGUtPndzaXplKSBzdGF0ZS0+d25leHQgPSAwOwogICAgICAgICAg ICAgaWYgKHN0YXRlLT53aGF2ZSA8IHN0YXRlLT53c2l6ZSkgc3RhdGUtPndoYXZlICs9IGRpc3Q7 CiAgICAgICAgIH0KICAgICB9CkBAIC00NDUsMTEgKzUzNyw2IEBACiAgICAgICAgIGJpdHMgLT0g Yml0cyAmIDc7IFwKICAgICB9IHdoaWxlICgwKQogCi0vKiBSZXZlcnNlIHRoZSBieXRlcyBpbiBh IDMyLWJpdCB2YWx1ZSAqLwotI2RlZmluZSBSRVZFUlNFKHEpIFwKLSAgICAoKCgocSkgPj4gMjQp ICYgMHhmZikgKyAoKChxKSA+PiA4KSAmIDB4ZmYwMCkgKyBcCi0gICAgICgoKHEpICYgMHhmZjAw KSA8PCA4KSArICgoKHEpICYgMHhmZikgPDwgMjQpKQotCiAvKgogICAgaW5mbGF0ZSgpIHVzZXMg YSBzdGF0ZSBtYWNoaW5lIHRvIHByb2Nlc3MgYXMgbXVjaCBpbnB1dCBkYXRhIGFuZCBnZW5lcmF0 ZSBhcwogICAgbXVjaCBvdXRwdXQgZGF0YSBhcyBwb3NzaWJsZSBiZWZvcmUgcmV0dXJuaW5nLiAg VGhlIHN0YXRlIG1hY2hpbmUgaXMKQEAgLTUzNyw3ICs2MjQsNyBAQAogaW50IGZsdXNoOwogewog ICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBG QVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIg RkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKnB1 dDsgICAgIC8qIG5leHQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgaGF2ZSwgbGVmdDsgICAgICAg IC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgbG9uZyBob2xk OyAgICAgICAgIC8qIGJpdCBidWZmZXIgKi8KQEAgLTU0NSw3ICs2MzIsNyBAQAogICAgIHVuc2ln bmVkIGluLCBvdXQ7ICAgICAgICAgICAvKiBzYXZlIHN0YXJ0aW5nIGF2YWlsYWJsZSBpbnB1dCBh bmQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgY29weTsgICAgICAgICAgICAgIC8qIG51bWJlciBv ZiBzdG9yZWQgb3IgbWF0Y2ggYnl0ZXMgdG8gY29weSAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFS ICpmcm9tOyAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi8KLSAgICBjb2Rl IHRoaXM7ICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAq LworICAgIGNvZGUgaGVyZTsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGRlY29kaW5nIHRh YmxlIGVudHJ5ICovCiAgICAgY29kZSBsYXN0OyAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCB0 YWJsZSBlbnRyeSAqLwogICAgIHVuc2lnbmVkIGxlbjsgICAgICAgICAgICAgICAvKiBsZW5ndGgg dG8gY29weSBmb3IgcmVwZWF0cywgYml0cyB0byBkcm9wICovCiAgICAgaW50IHJldDsgICAgICAg ICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCkBAIC01NTUsNyArNjQyLDcgQEAKICAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgb3JkZXJbMTldID0gLyogcGVybXV0YXRpb24gb2Yg Y29kZSBsZW5ndGhzICovCiAgICAgICAgIHsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwg NSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1fTsKIAotICAgIGlmIChzdHJtID09IFpf TlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwgfHwgc3RybS0+bmV4dF9vdXQgPT0gWl9OVUxM IHx8CisgICAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pIHx8IHN0cm0tPm5leHRfb3V0ID09 IFpfTlVMTCB8fAogICAgICAgICAoc3RybS0+bmV4dF9pbiA9PSBaX05VTEwgJiYgc3RybS0+YXZh aWxfaW4gIT0gMCkpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIApAQCAtNTc1LDYg KzY2Miw4IEBACiAgICAgICAgICAgICBORUVEQklUUygxNik7CiAjaWZkZWYgR1VOWklQCiAgICAg ICAgICAgICBpZiAoKHN0YXRlLT53cmFwICYgMikgJiYgaG9sZCA9PSAweDhiMWYpIHsgIC8qIGd6 aXAgaGVhZGVyICovCisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT53Yml0cyA9PSAwKQorICAg ICAgICAgICAgICAgICAgICBzdGF0ZS0+d2JpdHMgPSAxNTsKICAgICAgICAgICAgICAgICBzdGF0 ZS0+Y2hlY2sgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKICAgICAgICAgICAgICAgICBDUkMyKHN0 YXRlLT5jaGVjaywgaG9sZCk7CiAgICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKQEAgLTU4Miw2 ICs2NzEsOCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg ICAgICAgc3RhdGUtPmZsYWdzID0gMDsgICAgICAgICAgIC8qIGV4cGVjdCB6bGliIGhlYWRlciAq LworICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAg ICBzdGF0ZS0+aGVhZC0+ZG9uZSA9IC0xOwogICAgICAgICAgICAgaWYgKCEoc3RhdGUtPndyYXAg JiAxKSB8fCAgIC8qIGNoZWNrIGlmIHpsaWIgaGVhZGVyIGFsbG93ZWQgKi8KICNlbHNlCiAgICAg ICAgICAgICBpZiAoCkBAIC01OTcsMTEgKzY4OCwxNSBAQAogICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRFJPUEJJVFMoNCk7Ci0gICAgICAgICAgICBp ZiAoQklUUyg0KSArIDggPiBzdGF0ZS0+d2JpdHMpIHsKKyAgICAgICAgICAgIGxlbiA9IEJJVFMo NCkgKyA4OworICAgICAgICAgICAgaWYgKHN0YXRlLT53Yml0cyA9PSAwKQorICAgICAgICAgICAg ICAgIHN0YXRlLT53Yml0cyA9IGxlbjsKKyAgICAgICAgICAgIGlmIChsZW4gPiAxNSB8fCBsZW4g PiBzdGF0ZS0+d2JpdHMpIHsKICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJp bnZhbGlkIHdpbmRvdyBzaXplIjsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsK ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRl LT5kbWF4ID0gMVUgPDwgbGVuOwogICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRl OiAgIHpsaWIgaGVhZGVyIG9rXG4iKSk7CiAgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRl LT5jaGVjayA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CiAgICAgICAgICAgICBzdGF0ZS0+bW9k ZSA9IGhvbGQgJiAweDIwMCA/IERJQ1RJRCA6IFRZUEU7CkBAIC02MjEsMzMgKzcxNiw1NiBAQAog ICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkg Q1JDMihzdGF0ZS0+Y2hlY2ssIGhvbGQpOworICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9 IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+dGV4dCA9IChpbnQpKChob2xk ID4+IDgpICYgMSk7CisgICAgICAgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgJiYg KHN0YXRlLT53cmFwICYgNCkpCisgICAgICAgICAgICAgICAgQ1JDMihzdGF0ZS0+Y2hlY2ssIGhv bGQpOwogICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0g VElNRTsKICAgICAgICAgY2FzZSBUSU1FOgogICAgICAgICAgICAgTkVFREJJVFMoMzIpOwotICAg ICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDIwMCkgQ1JDNChzdGF0ZS0+Y2hlY2ssIGhv bGQpOworICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAg ICAgICBzdGF0ZS0+aGVhZC0+dGltZSA9IGhvbGQ7CisgICAgICAgICAgICBpZiAoKHN0YXRlLT5m bGFncyAmIDB4MDIwMCkgJiYgKHN0YXRlLT53cmFwICYgNCkpCisgICAgICAgICAgICAgICAgQ1JD NChzdGF0ZS0+Y2hlY2ssIGhvbGQpOwogICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAg ICAgIHN0YXRlLT5tb2RlID0gT1M7CiAgICAgICAgIGNhc2UgT1M6CiAgICAgICAgICAgICBORUVE QklUUygxNik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSBDUkMyKHN0 YXRlLT5jaGVjaywgaG9sZCk7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxM KSB7CisgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPnhmbGFncyA9IChpbnQpKGhvbGQgJiAw eGZmKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+b3MgPSAoaW50KShob2xkID4+IDgp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDAp ICYmIChzdGF0ZS0+d3JhcCAmIDQpKQorICAgICAgICAgICAgICAgIENSQzIoc3RhdGUtPmNoZWNr LCBob2xkKTsKICAgICAgICAgICAgIElOSVRCSVRTKCk7CiAgICAgICAgICAgICBzdGF0ZS0+bW9k ZSA9IEVYTEVOOwogICAgICAgICBjYXNlIEVYTEVOOgogICAgICAgICAgICAgaWYgKHN0YXRlLT5m bGFncyAmIDB4MDQwMCkgewogICAgICAgICAgICAgICAgIE5FRURCSVRTKDE2KTsKICAgICAgICAg ICAgICAgICBzdGF0ZS0+bGVuZ3RoID0gKHVuc2lnbmVkKShob2xkKTsKLSAgICAgICAgICAgICAg ICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSBDUkMyKHN0YXRlLT5jaGVjaywgaG9sZCk7Cisg ICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAg ICAgICAgc3RhdGUtPmhlYWQtPmV4dHJhX2xlbiA9ICh1bnNpZ25lZClob2xkOworICAgICAgICAg ICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkK KyAgICAgICAgICAgICAgICAgICAgQ1JDMihzdGF0ZS0+Y2hlY2ssIGhvbGQpOwogICAgICAgICAg ICAgICAgIElOSVRCSVRTKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChz dGF0ZS0+aGVhZCAhPSBaX05VTEwpCisgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPmV4dHJh ID0gWl9OVUxMOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBFWFRSQTsKICAgICAgICAgY2Fz ZSBFWFRSQToKICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDA0MDApIHsKICAgICAg ICAgICAgICAgICBjb3B5ID0gc3RhdGUtPmxlbmd0aDsKICAgICAgICAgICAgICAgICBpZiAoY29w eSA+IGhhdmUpIGNvcHkgPSBoYXZlOwogICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApCisgICAgICAgICAgICAg ICAgICAgIGlmIChzdGF0ZS0+aGVhZCAhPSBaX05VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXRlLT5oZWFkLT5leHRyYSAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGxlbiA9IHN0YXRlLT5oZWFkLT5leHRyYV9sZW4gLSBzdGF0ZS0+bGVuZ3RoOworICAgICAg ICAgICAgICAgICAgICAgICAgem1lbWNweShzdGF0ZS0+aGVhZC0+ZXh0cmEgKyBsZW4sIG5leHQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArIGNvcHkgPiBzdGF0ZS0+aGVh ZC0+ZXh0cmFfbWF4ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmhl YWQtPmV4dHJhX21heCAtIGxlbiA6IGNvcHkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndy YXAgJiA0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5jaGVjayA9IGNyYzMyKHN0 YXRlLT5jaGVjaywgbmV4dCwgY29weSk7CiAgICAgICAgICAgICAgICAgICAgIGhhdmUgLT0gY29w eTsKICAgICAgICAgICAgICAgICAgICAgbmV4dCArPSBjb3B5OwpAQCAtNjU1LDYgKzc3Myw3IEBA CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+bGVuZ3RoKSBn b3RvIGluZl9sZWF2ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5sZW5ndGgg PSAwOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBOQU1FOwogICAgICAgICBjYXNlIE5BTUU6 CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmZsYWdzICYgMHgwODAwKSB7CkBAIC02NjIsMTMgKzc4 MSwyMCBAQAogICAgICAgICAgICAgICAgIGNvcHkgPSAwOwogICAgICAgICAgICAgICAgIGRvIHsK ICAgICAgICAgICAgICAgICAgICAgbGVuID0gKHVuc2lnbmVkKShuZXh0W2NvcHkrK10pOworICAg ICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMICYmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm5hbWUgIT0gWl9OVUxMICYmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA8IHN0YXRlLT5oZWFkLT5uYW1lX21h eCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5uYW1lW3N0YXRlLT5sZW5n dGgrK10gPSAoQnl0ZWYpbGVuOwogICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5 IDwgaGF2ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5mbGFncyAmIDB4MDIwMDApCisg ICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS0+d3Jh cCAmIDQpKQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2hlY2sgPSBjcmMzMihzdGF0ZS0+ Y2hlY2ssIG5leHQsIGNvcHkpOwogICAgICAgICAgICAgICAgIGhhdmUgLT0gY29weTsKICAgICAg ICAgICAgICAgICBuZXh0ICs9IGNvcHk7CiAgICAgICAgICAgICAgICAgaWYgKGxlbikgZ290byBp bmZfbGVhdmU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aGVh ZCAhPSBaX05VTEwpCisgICAgICAgICAgICAgICAgc3RhdGUtPmhlYWQtPm5hbWUgPSBaX05VTEw7 CisgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoID0gMDsKICAgICAgICAgICAgIHN0YXRlLT5tb2Rl ID0gQ09NTUVOVDsKICAgICAgICAgY2FzZSBDT01NRU5UOgogICAgICAgICAgICAgaWYgKHN0YXRl LT5mbGFncyAmIDB4MTAwMCkgewpAQCAtNjc2LDMxICs4MDIsNDEgQEAKICAgICAgICAgICAgICAg ICBjb3B5ID0gMDsKICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgIGxl biA9ICh1bnNpZ25lZCkobmV4dFtjb3B5KytdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0 YXRlLT5oZWFkICE9IFpfTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl LT5oZWFkLT5jb21tZW50ICE9IFpfTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXRlLT5sZW5ndGggPCBzdGF0ZS0+aGVhZC0+Y29tbV9tYXgpCisgICAgICAgICAgICAgICAg ICAgICAgICBzdGF0ZS0+aGVhZC0+Y29tbWVudFtzdGF0ZS0+bGVuZ3RoKytdID0gKEJ5dGVmKWxl bjsKICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpOwotICAgICAg ICAgICAgICAgIGlmIChzdGF0ZS0+ZmxhZ3MgJiAweDAyMDAwKQorICAgICAgICAgICAgICAgIGlm ICgoc3RhdGUtPmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUtPndyYXAgJiA0KSkKICAgICAgICAg ICAgICAgICAgICAgc3RhdGUtPmNoZWNrID0gY3JjMzIoc3RhdGUtPmNoZWNrLCBuZXh0LCBjb3B5 KTsKICAgICAgICAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICAgICAgICAgbmV4dCAr PSBjb3B5OwogICAgICAgICAgICAgICAgIGlmIChsZW4pIGdvdG8gaW5mX2xlYXZlOwogICAgICAg ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhlYWQgIT0gWl9OVUxMKQorICAg ICAgICAgICAgICAgIHN0YXRlLT5oZWFkLT5jb21tZW50ID0gWl9OVUxMOwogICAgICAgICAgICAg c3RhdGUtPm1vZGUgPSBIQ1JDOwogICAgICAgICBjYXNlIEhDUkM6CiAgICAgICAgICAgICBpZiAo c3RhdGUtPmZsYWdzICYgMHgwMjAwKSB7CiAgICAgICAgICAgICAgICAgTkVFREJJVFMoMTYpOwot ICAgICAgICAgICAgICAgIGlmIChob2xkICE9IChzdGF0ZS0+Y2hlY2sgJiAweGZmZmYpKSB7Cisg ICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+d3JhcCAmIDQpICYmIGhvbGQgIT0gKHN0YXRlLT5j aGVjayAmIDB4ZmZmZikpIHsKICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIg KikiaGVhZGVyIGNyYyBtaXNtYXRjaCI7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2Rl ID0gQkFEOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChzdGF0ZS0+aGVhZCAhPSBaX05VTEwpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+aGVhZC0+ aGNyYyA9IChpbnQpKChzdGF0ZS0+ZmxhZ3MgPj4gOSkgJiAxKTsKKyAgICAgICAgICAgICAgICBz dGF0ZS0+aGVhZC0+ZG9uZSA9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHJtLT5h ZGxlciA9IHN0YXRlLT5jaGVjayA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwogICAgICAgICAgICAg c3RhdGUtPm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAg Y2FzZSBESUNUSUQ6CiAgICAgICAgICAgICBORUVEQklUUygzMik7Ci0gICAgICAgICAgICBzdHJt LT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFJFVkVSU0UoaG9sZCk7CisgICAgICAgICAgICBzdHJt LT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFpTV0FQMzIoaG9sZCk7CiAgICAgICAgICAgICBJTklU QklUUygpOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESUNUOwogICAgICAgICBjYXNlIERJ Q1Q6CkBAIC03MTEsNyArODQ3LDcgQEAKICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUt PmNoZWNrID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKICAgICAgICAgICAgIHN0YXRlLT5tb2Rl ID0gVFlQRTsKICAgICAgICAgY2FzZSBUWVBFOgotICAgICAgICAgICAgaWYgKGZsdXNoID09IFpf QkxPQ0spIGdvdG8gaW5mX2xlYXZlOworICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfQkxPQ0sg fHwgZmx1c2ggPT0gWl9UUkVFUykgZ290byBpbmZfbGVhdmU7CiAgICAgICAgIGNhc2UgVFlQRURP OgogICAgICAgICAgICAgaWYgKHN0YXRlLT5sYXN0KSB7CiAgICAgICAgICAgICAgICAgQllURUJJ VFMoKTsKQEAgLTczMSw3ICs4NjcsMTEgQEAKICAgICAgICAgICAgICAgICBmaXhlZHRhYmxlcyhz dGF0ZSk7CiAgICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgZml4 ZWQgY29kZXMgYmxvY2slc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0 ID8gIiAobGFzdCkiIDogIiIpKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTjsg ICAgICAgICAgICAgIC8qIGRlY29kZSBjb2RlcyAqLworICAgICAgICAgICAgICAgIHN0YXRlLT5t b2RlID0gTEVOXzsgICAgICAgICAgICAgLyogZGVjb2RlIGNvZGVzICovCisgICAgICAgICAgICAg ICAgaWYgKGZsdXNoID09IFpfVFJFRVMpIHsKKyAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMo Mik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOworICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgYmxvY2sgKi8KICAgICAgICAgICAgICAgICBU cmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICBkeW5hbWljIGNvZGVzIGJsb2NrJXNcbiIsCkBA IC03NTYsNiArODk2LDkgQEAKICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTog ICAgICAgc3RvcmVkIGxlbmd0aCAldVxuIiwKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxl bmd0aCkpOwogICAgICAgICAgICAgSU5JVEJJVFMoKTsKKyAgICAgICAgICAgIHN0YXRlLT5tb2Rl ID0gQ09QWV87CisgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9UUkVFUykgZ290byBpbmZfbGVh dmU7CisgICAgICAgIGNhc2UgQ09QWV86CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IENPUFk7 CiAgICAgICAgIGNhc2UgQ09QWToKICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOwpA QCAtODAxLDcgKzk0NCw3IEBACiAgICAgICAgICAgICB3aGlsZSAoc3RhdGUtPmhhdmUgPCAxOSkK ICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tvcmRlcltzdGF0ZS0+aGF2ZSsrXV0gPSAwOwog ICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0 ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAg ICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAg ICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDc7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3Rh YmxlKENPREVTLCBzdGF0ZS0+bGVucywgMTksICYoc3RhdGUtPm5leHQpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmKHN0YXRlLT5sZW5iaXRzKSwgc3RhdGUtPndvcmspOwpAQCAt ODE2LDE5ICs5NTksMTggQEAKICAgICAgICAgY2FzZSBDT0RFTEVOUzoKICAgICAgICAgICAgIHdo aWxlIChzdGF0ZS0+aGF2ZSA8IHN0YXRlLT5ubGVuICsgc3RhdGUtPm5kaXN0KSB7CiAgICAgICAg ICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmxl bmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHVu c2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBo ZXJlID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOworICAgICAgICAgICAg ICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBpZiAodGhpcy52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyh0 aGlzLmJpdHMpOwotICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAg ICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IHRoaXMudmFsOwor ICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7CisgICAgICAgICAgICAgICAgICAg IERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0 YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWwgPT0gMTYpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyArIDIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKGhlcmUudmFsID09IDE2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyho ZXJlLmJpdHMgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0 cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYml0 IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2Rl ID0gQkFEOwpAQCAtODM4LDE2ICs5ODAsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNv cHkgPSAzICsgQklUUygyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDIpOwog ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMu dmFsID09IDE3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMg KyAzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7CisgICAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhlcmUudmFsID09IDE3KSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAw OwogICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyBCSVRTKDMpOwogICAgICAgICAg ICAgICAgICAgICAgICAgRFJPUEJJVFMoMyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyh0 aGlzLmJpdHMgKyA3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0 cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyA3KTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAg ICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDExICsg QklUUyg3KTsKICAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDcpOwpAQCAtODY1LDkg KzEwMDcsMTggQEAKICAgICAgICAgICAgIC8qIGhhbmRsZSBlcnJvciBicmVha3MgaW4gd2hpbGUg Ki8KICAgICAgICAgICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBCQUQpIGJyZWFrOwogCi0gICAgICAg ICAgICAvKiBidWlsZCBjb2RlIHRhYmxlcyAqLworICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVu ZC1vZi1ibG9jayBjb2RlIChiZXR0ZXIgaGF2ZSBvbmUpICovCisgICAgICAgICAgICBpZiAoc3Rh dGUtPmxlbnNbMjU2XSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIg KikiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIjsKKyAgICAgICAgICAgICAg ICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgLyogYnVpbGQgY29kZSB0YWJsZXMgLS0gbm90ZTogZG8gbm90IGNo YW5nZSB0aGUgbGVuYml0cyBvciBkaXN0Yml0cworICAgICAgICAgICAgICAgdmFsdWVzIGhlcmUg KDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAorICAg ICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50cywgd2hpY2ggZGVwZW5k IG9uIHRob3NlIHZhbHVlcyAqLwogICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29k ZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0 ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAq KShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7CiAgICAgICAg ICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxlbiwg JihzdGF0ZS0+bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUt PmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC04NzYsNyArMTAyNyw3IEBACiAgICAgICAgICAg ICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAoY29kZSBjb25zdCBGQVIgKiko c3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmRpc3Rjb2RlID0gKGNvbnN0IGNvZGUg RkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5kaXN0Yml0cyA9IDY7CiAg ICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS0+bGVucyArIHN0YXRl LT5ubGVuLCBzdGF0ZS0+bmRpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0 ZS0+bmV4dCksICYoc3RhdGUtPmRpc3RiaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtODg2LDk0ICsx MDM3LDExMCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg ICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBva1xuIikpOworICAg ICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU5fOworICAgICAgICAgICAgaWYgKGZsdXNoID09IFpf VFJFRVMpIGdvdG8gaW5mX2xlYXZlOworICAgICAgICBjYXNlIExFTl86CiAgICAgICAgICAgICBz dGF0ZS0+bW9kZSA9IExFTjsKICAgICAgICAgY2FzZSBMRU46CiAgICAgICAgICAgICBpZiAoaGF2 ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7CiAgICAgICAgICAgICAgICAgUkVTVE9SRSgpOwogICAg ICAgICAgICAgICAgIGluZmxhdGVfZmFzdChzdHJtLCBvdXQpOwogICAgICAgICAgICAgICAgIExP QUQoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gVFlQRSkKKyAgICAgICAg ICAgICAgICAgICAgc3RhdGUtPmJhY2sgPSAtMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5iYWNrID0gMDsKICAgICAgICAgICAgIGZv ciAoOzspIHsKLSAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0 ZS0+bGVuYml0cyldOwotICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykg PD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5sZW5jb2RlW0JJ VFMoc3RhdGUtPmxlbmJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJl LmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5vcCAmJiAodGhpcy5vcCAmIDB4ZjApID09 IDApIHsKLSAgICAgICAgICAgICAgICBsYXN0ID0gdGhpczsKKyAgICAgICAgICAgIGlmIChoZXJl Lm9wICYmIChoZXJlLm9wICYgMHhmMCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGxhc3QgPSBo ZXJlOwogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp cyA9IHN0YXRlLT5sZW5jb2RlW2xhc3QudmFsICsKKyAgICAgICAgICAgICAgICAgICAgaGVyZSA9 IHN0YXRlLT5sZW5jb2RlW2xhc3QudmFsICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo QklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSA+PiBsYXN0LmJpdHMpXTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgdGhpcy5iaXRzKSA8PSBiaXRzKSBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgaGVyZS5i aXRzKSA8PSBiaXRzKSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgRFJPUEJJVFMobGFzdC5iaXRzKTsKKyAg ICAgICAgICAgICAgICBzdGF0ZS0+YmFjayArPSBsYXN0LmJpdHM7CiAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgc3RhdGUtPmxlbmd0 aCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKLSAgICAgICAgICAgIGlmICgoaW50KSh0aGlzLm9wKSA9 PSAwKSB7Ci0gICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCB0aGlzLnZhbCA+PSAweDIw ICYmIHRoaXMudmFsIDwgMHg3ZiA/CisgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwor ICAgICAgICAgICAgc3RhdGUtPmJhY2sgKz0gaGVyZS5iaXRzOworICAgICAgICAgICAgc3RhdGUt Pmxlbmd0aCA9ICh1bnNpZ25lZCloZXJlLnZhbDsKKyAgICAgICAgICAgIGlmICgoaW50KShoZXJl Lm9wKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+ PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAiaW5m bGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgotICAgICAgICAgICAgICAgICAgICAgICAg ImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIHRoaXMudmFsKSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgaGVy ZS52YWwpKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExJVDsKICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYgMzIp IHsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgMzIpIHsKICAgICAgICAgICAgICAgICBUcmFj ZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOworICAgICAg ICAgICAgICAgIHN0YXRlLT5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUg PSBUWVBFOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKHRoaXMub3AgJiA2NCkgeworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiA2NCkgewog ICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgbGl0ZXJhbC9sZW5n dGggY29kZSI7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAo dW5zaWduZWQpKHRoaXMub3ApICYgMTU7CisgICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5z aWduZWQpKGhlcmUub3ApICYgMTU7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTkVYVDsK ICAgICAgICAgY2FzZSBMRU5FWFQ6CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmV4dHJhKSB7CiAg ICAgICAgICAgICAgICAgTkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBz dGF0ZS0+bGVuZ3RoICs9IEJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBEUk9Q QklUUyhzdGF0ZS0+ZXh0cmEpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iYWNrICs9IHN0YXRl LT5leHRyYTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImlu ZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBzdGF0ZS0+bGVuZ3RoKSk7CisgICAgICAgICAg ICBzdGF0ZS0+d2FzID0gc3RhdGUtPmxlbmd0aDsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0g RElTVDsKICAgICAgICAgY2FzZSBESVNUOgogICAgICAgICAgICAgZm9yICg7OykgewotICAgICAg ICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+ZGlzdGNvZGVbQklUUyhzdGF0ZS0+ZGlzdGJpdHMpXTsK LSAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFr OworICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+ZGlzdGNvZGVbQklUUyhzdGF0ZS0+ZGlz dGJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJp dHMpIGJyZWFrOwogICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoKHRoaXMub3AgJiAweGYwKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg bGFzdCA9IHRoaXM7CisgICAgICAgICAgICBpZiAoKGhlcmUub3AgJiAweGYwKSA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgbGFzdCA9IGhlcmU7CiAgICAgICAgICAgICAgICAgZm9yICg7Oykgewot ICAgICAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmRpc3Rjb2RlW2xhc3QudmFsICsKKyAg ICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5kaXN0Y29kZVtsYXN0LnZhbCArCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKEJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkgPj4gbGFz dC5iaXRzKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyAr IHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICgodW5z aWduZWQpKGxhc3QuYml0cyArIGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CiAgICAgICAgICAg ICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg IERST1BCSVRTKGxhc3QuYml0cyk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJhY2sgKz0gbGFz dC5iaXRzOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsK LSAgICAgICAgICAgIGlmICh0aGlzLm9wICYgNjQpIHsKKyAgICAgICAgICAgIERST1BCSVRTKGhl cmUuYml0cyk7CisgICAgICAgICAgICBzdGF0ZS0+YmFjayArPSBoZXJlLmJpdHM7CisgICAgICAg ICAgICBpZiAoaGVyZS5vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNo YXIgKikiaW52YWxpZCBkaXN0YW5jZSBjb2RlIjsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9k ZSA9IEJBRDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIHN0YXRlLT5vZmZzZXQgPSAodW5zaWduZWQpdGhpcy52YWw7Ci0gICAgICAgICAgICBzdGF0 ZS0+ZXh0cmEgPSAodW5zaWduZWQpKHRoaXMub3ApICYgMTU7CisgICAgICAgICAgICBzdGF0ZS0+ b2Zmc2V0ID0gKHVuc2lnbmVkKWhlcmUudmFsOworICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0g KHVuc2lnbmVkKShoZXJlLm9wKSAmIDE1OwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESVNU RVhUOwogICAgICAgICBjYXNlIERJU1RFWFQ6CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmV4dHJh KSB7CiAgICAgICAgICAgICAgICAgTkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAg ICAgICBzdGF0ZS0+b2Zmc2V0ICs9IEJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAg ICBEUk9QQklUUyhzdGF0ZS0+ZXh0cmEpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iYWNrICs9 IHN0YXRlLT5leHRyYTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+b2Zm c2V0ID4gc3RhdGUtPndoYXZlICsgb3V0IC0gbGVmdCkgeworI2lmZGVmIElORkxBVEVfU1RSSUNU CisgICAgICAgICAgICBpZiAoc3RhdGUtPm9mZnNldCA+IHN0YXRlLT5kbWF4KSB7CiAgICAgICAg ICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJh Y2siOwogICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICBUcmFjZXZ2KChzdGRl cnIsICJpbmZsYXRlOiAgICAgICAgIGRpc3RhbmNlICV1XG4iLCBzdGF0ZS0+b2Zmc2V0KSk7CiAg ICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE1BVENIOwogICAgICAgICBjYXNlIE1BVENIOgpAQCAt OTgxLDEyICsxMTQ4LDMyIEBACiAgICAgICAgICAgICBjb3B5ID0gb3V0IC0gbGVmdDsKICAgICAg ICAgICAgIGlmIChzdGF0ZS0+b2Zmc2V0ID4gY29weSkgeyAgICAgICAgIC8qIGNvcHkgZnJvbSB3 aW5kb3cgKi8KICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPm9mZnNldCAtIGNvcHk7Ci0g ICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS0+d3JpdGUpIHsKLSAgICAgICAgICAgICAg ICAgICAgY29weSAtPSBzdGF0ZS0+d3JpdGU7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBz dGF0ZS0+d2hhdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5zYW5lKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3Rh bmNlIHRvbyBmYXIgYmFjayI7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9 IEJBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICB9CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisg ICAgICAgICAgICAgICAgICAgIFRyYWNlKChzdGRlcnIsICJpbmZsYXRlLmMgdG9vIGZhclxuIikp OworICAgICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLT53aGF2ZTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS0+bGVuZ3RoKSBjb3B5ID0gc3RhdGUtPmxlbmd0aDsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSBjb3B5ID0gbGVmdDsKKyAgICAg ICAgICAgICAgICAgICAgbGVmdCAtPSBjb3B5OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ bGVuZ3RoIC09IGNvcHk7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICpwdXQrKyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tY29w eSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+bGVuZ3RoID09IDApIHN0YXRlLT5t b2RlID0gTEVOOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLT53bmV4dCkgeworICAg ICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLT53bmV4dDsKICAgICAgICAgICAgICAgICAg ICAgZnJvbSA9IHN0YXRlLT53aW5kb3cgKyAoc3RhdGUtPndzaXplIC0gY29weSk7CiAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZnJv bSA9IHN0YXRlLT53aW5kb3cgKyAoc3RhdGUtPndyaXRlIC0gY29weSk7CisgICAgICAgICAgICAg ICAgICAgIGZyb20gPSBzdGF0ZS0+d2luZG93ICsgKHN0YXRlLT53bmV4dCAtIGNvcHkpOwogICAg ICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUtPmxlbmd0aCkgY29weSA9IHN0YXRlLT5sZW5n dGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBjb3B5IGZyb20gb3V0cHV0ICovCkBAIC0xMDEzLDE1ICsxMjAwLDE1IEBA CiAgICAgICAgICAgICAgICAgb3V0IC09IGxlZnQ7CiAgICAgICAgICAgICAgICAgc3RybS0+dG90 YWxfb3V0ICs9IG91dDsKICAgICAgICAgICAgICAgICBzdGF0ZS0+dG90YWwgKz0gb3V0OwotICAg ICAgICAgICAgICAgIGlmIChvdXQpCisgICAgICAgICAgICAgICAgaWYgKChzdGF0ZS0+d3JhcCAm IDQpICYmIG91dCkKICAgICAgICAgICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+Y2hl Y2sgPQogICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFKHN0YXRlLT5jaGVjaywgcHV0IC0g b3V0LCBvdXQpOwogICAgICAgICAgICAgICAgIG91dCA9IGxlZnQ7Ci0gICAgICAgICAgICAgICAg aWYgKCgKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT53cmFwICYgNCkgJiYgKAogI2lmZGVm IEdVTlpJUAogICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmZsYWdzID8gaG9sZCA6CiAjZW5k aWYKLSAgICAgICAgICAgICAgICAgICAgIFJFVkVSU0UoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykg eworICAgICAgICAgICAgICAgICAgICAgWlNXQVAzMihob2xkKSkgIT0gc3RhdGUtPmNoZWNrKSB7 CiAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImluY29ycmVjdCBkYXRh IGNoZWNrIjsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA2NSw4ICsxMjUyLDkgQEAKICAgICAgKi8KICAgaW5m X2xlYXZlOgogICAgIFJFU1RPUkUoKTsKLSAgICBpZiAoc3RhdGUtPndzaXplIHx8IChzdGF0ZS0+ bW9kZSA8IENIRUNLICYmIG91dCAhPSBzdHJtLT5hdmFpbF9vdXQpKQotICAgICAgICBpZiAodXBk YXRld2luZG93KHN0cm0sIG91dCkpIHsKKyAgICBpZiAoc3RhdGUtPndzaXplIHx8IChvdXQgIT0g c3RybS0+YXZhaWxfb3V0ICYmIHN0YXRlLT5tb2RlIDwgQkFEICYmCisgICAgICAgICAgICAoc3Rh dGUtPm1vZGUgPCBDSEVDSyB8fCBmbHVzaCAhPSBaX0ZJTklTSCkpKQorICAgICAgICBpZiAodXBk YXRld2luZG93KHN0cm0sIHN0cm0tPm5leHRfb3V0LCBvdXQgLSBzdHJtLT5hdmFpbF9vdXQpKSB7 CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE1FTTsKICAgICAgICAgICAgIHJldHVybiBaX01F TV9FUlJPUjsKICAgICAgICAgfQpAQCAtMTA3NSwxMSArMTI2MywxMiBAQAogICAgIHN0cm0tPnRv dGFsX2luICs9IGluOwogICAgIHN0cm0tPnRvdGFsX291dCArPSBvdXQ7CiAgICAgc3RhdGUtPnRv dGFsICs9IG91dDsKLSAgICBpZiAoc3RhdGUtPndyYXAgJiYgb3V0KQorICAgIGlmICgoc3RhdGUt PndyYXAgJiA0KSAmJiBvdXQpCiAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0K ICAgICAgICAgICAgIFVQREFURShzdGF0ZS0+Y2hlY2ssIHN0cm0tPm5leHRfb3V0IC0gb3V0LCBv dXQpOwotICAgIHN0cm0tPmRhdGFfdHlwZSA9IHN0YXRlLT5iaXRzICsgKHN0YXRlLT5sYXN0ID8g NjQgOiAwKSArCi0gICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IFRZUEUgPyAx MjggOiAwKTsKKyAgICBzdHJtLT5kYXRhX3R5cGUgPSAoaW50KXN0YXRlLT5iaXRzICsgKHN0YXRl LT5sYXN0ID8gNjQgOiAwKSArCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09 IFRZUEUgPyAxMjggOiAwKSArCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09 IExFTl8gfHwgc3RhdGUtPm1vZGUgPT0gQ09QWV8gPyAyNTYgOiAwKTsKICAgICBpZiAoKChpbiA9 PSAwICYmIG91dCA9PSAwKSB8fCBmbHVzaCA9PSBaX0ZJTklTSCkgJiYgcmV0ID09IFpfT0spCiAg ICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOwogICAgIHJldHVybiByZXQ7CkBAIC0xMDg5LDcgKzEy NzgsNyBAQAogel9zdHJlYW1wIHN0cm07CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFS ICpzdGF0ZTsKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxM IHx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hl Y2soc3RybSkpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChz dHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKICAgICBpZiAoc3RhdGUtPndp bmRvdyAhPSBaX05VTEwpIFpGUkVFKHN0cm0sIHN0YXRlLT53aW5kb3cpOwpAQCAtMTA5OSw0NCAr MTI4OCw4MSBAQAogICAgIHJldHVybiBaX09LOwogfQogCitpbnQgWkVYUE9SVCBpbmZsYXRlR2V0 RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQorel9zdHJlYW1wIHN0cm07 CitCeXRlZiAqZGljdGlvbmFyeTsKK3VJbnQgKmRpY3RMZW5ndGg7Cit7CisgICAgc3RydWN0IGlu ZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIC8qIGNoZWNrIHN0YXRlICovCisgICAgaWYg KGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3Rh dGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisKKyAgICAvKiBj b3B5IGRpY3Rpb25hcnkgKi8KKyAgICBpZiAoc3RhdGUtPndoYXZlICYmIGRpY3Rpb25hcnkgIT0g Wl9OVUxMKSB7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSwgc3RhdGUtPndpbmRvdyArIHN0 YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25leHQp OworICAgICAgICB6bWVtY3B5KGRpY3Rpb25hcnkgKyBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25l eHQsCisgICAgICAgICAgICAgICAgc3RhdGUtPndpbmRvdywgc3RhdGUtPnduZXh0KTsKKyAgICB9 CisgICAgaWYgKGRpY3RMZW5ndGggIT0gWl9OVUxMKQorICAgICAgICAqZGljdExlbmd0aCA9IHN0 YXRlLT53aGF2ZTsKKyAgICByZXR1cm4gWl9PSzsKK30KKwogaW50IFpFWFBPUlQgaW5mbGF0ZVNl dERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKIHpfc3RyZWFtcCBzdHJt OwogY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnk7CiB1SW50IGRpY3RMZW5ndGg7CiB7CiAgICAgc3Ry dWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBsb25nIGlkOworICAg IHVuc2lnbmVkIGxvbmcgZGljdGlkOworICAgIGludCByZXQ7CiAKICAgICAvKiBjaGVjayBzdGF0 ZSAqLwotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJl dHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJl dHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBG QVIgKilzdHJtLT5zdGF0ZTsKLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gRElDVCkgcmV0dXJuIFpf U1RSRUFNX0VSUk9SOworICAgIGlmIChzdGF0ZS0+d3JhcCAhPSAwICYmIHN0YXRlLT5tb2RlICE9 IERJQ1QpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAgIC8qIGNoZWNrIGZv ciBjb3JyZWN0IGRpY3Rpb25hcnkgaWQgKi8KLSAgICBpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwg MCk7Ci0gICAgaWQgPSBhZGxlcjMyKGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKLSAgICBp ZiAoaWQgIT0gc3RhdGUtPmNoZWNrKSByZXR1cm4gWl9EQVRBX0VSUk9SOworICAgIC8qIGNoZWNr IGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWRlbnRpZmllciAqLworICAgIGlmIChzdGF0ZS0+bW9k ZSA9PSBESUNUKSB7CisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Cisg ICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsK KyAgICAgICAgaWYgKGRpY3RpZCAhPSBzdGF0ZS0+Y2hlY2spCisgICAgICAgICAgICByZXR1cm4g Wl9EQVRBX0VSUk9SOworICAgIH0KIAotICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cg Ki8KLSAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPmF2YWlsX291dCkpIHsKKyAgICAv KiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3 aWxsIGFtZW5kIHRoZQorICAgICAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUg Ki8KKyAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSArIGRpY3RMZW5ndGgs IGRpY3RMZW5ndGgpOworICAgIGlmIChyZXQpIHsKICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07 CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9Ci0gICAgaWYgKGRpY3RMZW5ndGgg PiBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBkaWN0aW9u YXJ5ICsgZGljdExlbmd0aCAtIHN0YXRlLT53c2l6ZSwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+ d3NpemUpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7Ci0gICAgfQotICAg IGVsc2UgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d3NpemUgLSBk aWN0TGVuZ3RoLCBkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgIGRpY3RMZW5ndGgpOwotICAg ICAgICBzdGF0ZS0+d2hhdmUgPSBkaWN0TGVuZ3RoOwotICAgIH0KICAgICBzdGF0ZS0+aGF2ZWRp Y3QgPSAxOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBkaWN0aW9uYXJ5IHNldFxu IikpOwogICAgIHJldHVybiBaX09LOwogfQogCitpbnQgWkVYUE9SVCBpbmZsYXRlR2V0SGVhZGVy KHN0cm0sIGhlYWQpCit6X3N0cmVhbXAgc3RybTsKK2d6X2hlYWRlcnAgaGVhZDsKK3sKKyAgICBz dHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgLyogY2hlY2sgc3RhdGUgKi8K KyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsK KyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAg ICBpZiAoKHN0YXRlLT53cmFwICYgMikgPT0gMCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisg ICAgLyogc2F2ZSBoZWFkZXIgc3RydWN0dXJlICovCisgICAgc3RhdGUtPmhlYWQgPSBoZWFkOwor ICAgIGhlYWQtPmRvbmUgPSAwOworICAgIHJldHVybiBaX09LOworfQorCiAvKgogICAgU2VhcmNo IGJ1ZlswLi5sZW4tMV0gZm9yIHRoZSBwYXR0ZXJuOiAwLCAwLCAweGZmLCAweGZmLiAgUmV0dXJu IHdoZW4gZm91bmQKICAgIG9yIHdoZW4gb3V0IG9mIGlucHV0LiAgV2hlbiBjYWxsZWQsICpoYXZl IGlzIHRoZSBudW1iZXIgb2YgcGF0dGVybiBieXRlcwpAQCAtMTE1MCw3ICsxMzc2LDcgQEAKICAq LwogbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaChoYXZlLCBidWYsIGxlbikKIHVuc2lnbmVkIEZB UiAqaGF2ZTsKLXVuc2lnbmVkIGNoYXIgRkFSICpidWY7Citjb25zdCB1bnNpZ25lZCBjaGFyIEZB UiAqYnVmOwogdW5zaWduZWQgbGVuOwogewogICAgIHVuc2lnbmVkIGdvdDsKQEAgLTExODAsNyAr MTQwNiw3IEBACiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAogICAgIC8q IGNoZWNrIHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3Rh dGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKGluZmxhdGVTdGF0 ZUNoZWNrKHN0cm0pKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RhdGUgPSAoc3RydWN0 IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAgICAgaWYgKHN0cm0tPmF2YWlsX2lu ID09IDAgJiYgc3RhdGUtPmJpdHMgPCA4KSByZXR1cm4gWl9CVUZfRVJST1I7CiAKQEAgLTEyMjcs NyArMTQ1Myw3IEBACiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKIAot ICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBa X1NUUkVBTV9FUlJPUjsKKyAgICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHJldHVybiBa X1NUUkVBTV9FUlJPUjsKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilz dHJtLT5zdGF0ZTsKICAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gU1RPUkVEICYmIHN0YXRlLT5i aXRzID09IDA7CiB9CkBAIC0xMjM5LDEwICsxNDY1LDEwIEBACiAgICAgc3RydWN0IGluZmxhdGVf c3RhdGUgRkFSICpzdGF0ZTsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKmNvcHk7CiAg ICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdzsKKyAgICB1bnNpZ25lZCB3c2l6ZTsKIAogICAg IC8qIGNoZWNrIGlucHV0ICovCi0gICAgaWYgKGRlc3QgPT0gWl9OVUxMIHx8IHNvdXJjZSA9PSBa X05VTEwgfHwgc291cmNlLT5zdGF0ZSA9PSBaX05VTEwgfHwKLSAgICAgICAgc291cmNlLT56YWxs b2MgPT0gKGFsbG9jX2Z1bmMpMCB8fCBzb3VyY2UtPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyAg ICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc291cmNlKSB8fCBkZXN0ID09IFpfTlVMTCkKICAgICAg ICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0 YXRlIEZBUiAqKXNvdXJjZS0+c3RhdGU7CiAKQEAgLTEyNjEsMTQgKzE0ODcsNzUgQEAKICAgICB9 CiAKICAgICAvKiBjb3B5IHN0YXRlICovCi0gICAgKmRlc3QgPSAqc291cmNlOwotICAgICpjb3B5 ID0gKnN0YXRlOwotICAgIGNvcHktPmxlbmNvZGUgPSBjb3B5LT5jb2RlcyArIChzdGF0ZS0+bGVu Y29kZSAtIHN0YXRlLT5jb2Rlcyk7Ci0gICAgY29weS0+ZGlzdGNvZGUgPSBjb3B5LT5jb2RlcyAr IChzdGF0ZS0+ZGlzdGNvZGUgLSBzdGF0ZS0+Y29kZXMpOworICAgIHptZW1jcHkoKHZvaWRwZilk ZXN0LCAodm9pZHBmKXNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgem1lbWNweSgodm9p ZHBmKWNvcHksICh2b2lkcGYpc3RhdGUsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwor ICAgIGNvcHktPnN0cm0gPSBkZXN0OworICAgIGlmIChzdGF0ZS0+bGVuY29kZSA+PSBzdGF0ZS0+ Y29kZXMgJiYKKyAgICAgICAgc3RhdGUtPmxlbmNvZGUgPD0gc3RhdGUtPmNvZGVzICsgRU5PVUdI IC0gMSkgeworICAgICAgICBjb3B5LT5sZW5jb2RlID0gY29weS0+Y29kZXMgKyAoc3RhdGUtPmxl bmNvZGUgLSBzdGF0ZS0+Y29kZXMpOworICAgICAgICBjb3B5LT5kaXN0Y29kZSA9IGNvcHktPmNv ZGVzICsgKHN0YXRlLT5kaXN0Y29kZSAtIHN0YXRlLT5jb2Rlcyk7CisgICAgfQogICAgIGNvcHkt Pm5leHQgPSBjb3B5LT5jb2RlcyArIChzdGF0ZS0+bmV4dCAtIHN0YXRlLT5jb2Rlcyk7Ci0gICAg aWYgKHdpbmRvdyAhPSBaX05VTEwpCi0gICAgICAgIHptZW1jcHkod2luZG93LCBzdGF0ZS0+d2lu ZG93LCAxVSA8PCBzdGF0ZS0+d2JpdHMpOworICAgIGlmICh3aW5kb3cgIT0gWl9OVUxMKSB7Cisg ICAgICAgIHdzaXplID0gMVUgPDwgc3RhdGUtPndiaXRzOworICAgICAgICB6bWVtY3B5KHdpbmRv dywgc3RhdGUtPndpbmRvdywgd3NpemUpOworICAgIH0KICAgICBjb3B5LT53aW5kb3cgPSB3aW5k b3c7Ci0gICAgZGVzdC0+c3RhdGUgPSAodm9pZHBmKWNvcHk7CisgICAgZGVzdC0+c3RhdGUgPSAo c3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKWNvcHk7CiAgICAgcmV0dXJuIFpfT0s7CiB9CisK K2ludCBaRVhQT1JUIGluZmxhdGVVbmRlcm1pbmUoc3RybSwgc3VidmVydCkKK3pfc3RyZWFtcCBz dHJtOworaW50IHN1YnZlcnQ7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0 ZTsKKworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuIFpfU1RSRUFNX0VS Uk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRl OworI2lmZGVmIElORkxBVEVfQUxMT1dfSU5WQUxJRF9ESVNUQU5DRV9UT09GQVJfQVJSUgorICAg IHN0YXRlLT5zYW5lID0gIXN1YnZlcnQ7CisgICAgcmV0dXJuIFpfT0s7CisjZWxzZQorICAgICh2 b2lkKXN1YnZlcnQ7CisgICAgc3RhdGUtPnNhbmUgPSAxOworICAgIHJldHVybiBaX0RBVEFfRVJS T1I7CisjZW5kaWYKK30KKworaW50IFpFWFBPUlQgaW5mbGF0ZVZhbGlkYXRlKHN0cm0sIGNoZWNr KQorel9zdHJlYW1wIHN0cm07CitpbnQgY2hlY2s7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3Rh dGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJu IFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAq KXN0cm0tPnN0YXRlOworICAgIGlmIChjaGVjaykKKyAgICAgICAgc3RhdGUtPndyYXAgfD0gNDsK KyAgICBlbHNlCisgICAgICAgIHN0YXRlLT53cmFwICY9IH40OworICAgIHJldHVybiBaX09LOwor fQorCitsb25nIFpFWFBPUlQgaW5mbGF0ZU1hcmsoc3RybSkKK3pfc3RyZWFtcCBzdHJtOworewor ICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICBpZiAoaW5mbGF0ZVN0 YXRlQ2hlY2soc3RybSkpCisgICAgICAgIHJldHVybiAtKDFMIDw8IDE2KTsKKyAgICBzdGF0ZSA9 IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAgICByZXR1cm4gKGxv bmcpKCgodW5zaWduZWQgbG9uZykoKGxvbmcpc3RhdGUtPmJhY2spKSA8PCAxNikgKworICAgICAg ICAoc3RhdGUtPm1vZGUgPT0gQ09QWSA/IHN0YXRlLT5sZW5ndGggOgorICAgICAgICAgICAgKHN0 YXRlLT5tb2RlID09IE1BVENIID8gc3RhdGUtPndhcyAtIHN0YXRlLT5sZW5ndGggOiAwKSk7Cit9 CisKK3Vuc2lnbmVkIGxvbmcgWkVYUE9SVCBpbmZsYXRlQ29kZXNVc2VkKHN0cm0pCit6X3N0cmVh bXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworICAgIGlm IChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgcmV0dXJuICh1bnNpZ25lZCBsb25nKS0xOworICAg IHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHJl dHVybiAodW5zaWduZWQgbG9uZykoc3RhdGUtPm5leHQgLSBzdGF0ZS0+Y29kZXMpOworfQpkaWZm IC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZs YXRlLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZsYXRlLmgJV2VkIE1heSAyNyAwMDow OTo0NiAyMDIwICswMjAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mbGF0ZS5oCVdlZCBN YXkgMjcgMTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmxhdGUuaCAt LSBpbnRlcm5hbCBpbmZsYXRlIHN0YXRlIGRlZmluaXRpb24KLSAqIENvcHlyaWdodCAoQykgMTk5 NS0yMDAzIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IE1hcmsgQWRsZXIK ICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0 IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xOCw4ICsxOCw3IEBACiAKIC8qIFBvc3NpYmxl IGluZmxhdGUgbW9kZXMgYmV0d2VlbiBpbmZsYXRlKCkgY2FsbHMgKi8KIHR5cGVkZWYgZW51bSB7 Ci0gICAgSEVBRCwgICAgICAgLyogaTogd2FpdGluZyBmb3IgbWFnaWMgaGVhZGVyICovCi0jaWZk ZWYgR1VOWklQCisgICAgSEVBRCA9IDE2MTgwLCAgIC8qIGk6IHdhaXRpbmcgZm9yIG1hZ2ljIGhl YWRlciAqLwogICAgIEZMQUdTLCAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1ldGhvZCBhbmQgZmxh Z3MgKGd6aXApICovCiAgICAgVElNRSwgICAgICAgLyogaTogd2FpdGluZyBmb3IgbW9kaWZpY2F0 aW9uIHRpbWUgKGd6aXApICovCiAgICAgT1MsICAgICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0 cmEgZmxhZ3MgYW5kIG9wZXJhdGluZyBzeXN0ZW0gKGd6aXApICovCkBAIC0yOCwyNiArMjcsMjUg QEAKICAgICBOQU1FLCAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgZmlsZSBuYW1lIChn emlwKSAqLwogICAgIENPTU1FTlQsICAgIC8qIGk6IHdhaXRpbmcgZm9yIGVuZCBvZiBjb21tZW50 IChnemlwKSAqLwogICAgIEhDUkMsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGhlYWRlciBjcmMg KGd6aXApICovCi0jZW5kaWYKICAgICBESUNUSUQsICAgICAvKiBpOiB3YWl0aW5nIGZvciBkaWN0 aW9uYXJ5IGNoZWNrIHZhbHVlICovCiAgICAgRElDVCwgICAgICAgLyogd2FpdGluZyBmb3IgaW5m bGF0ZVNldERpY3Rpb25hcnkoKSBjYWxsICovCiAgICAgICAgIFRZUEUsICAgICAgIC8qIGk6IHdh aXRpbmcgZm9yIHR5cGUgYml0cywgaW5jbHVkaW5nIGxhc3QtZmxhZyBiaXQgKi8KICAgICAgICAg VFlQRURPLCAgICAgLyogaTogc2FtZSwgYnV0IHNraXAgY2hlY2sgdG8gZXhpdCBpbmZsYXRlIG9u IG5ldyBibG9jayAqLwogICAgICAgICBTVE9SRUQsICAgICAvKiBpOiB3YWl0aW5nIGZvciBzdG9y ZWQgc2l6ZSAobGVuZ3RoIGFuZCBjb21wbGVtZW50KSAqLworICAgICAgICBDT1BZXywgICAgICAv KiBpL286IHNhbWUgYXMgQ09QWSBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqLwogICAg ICAgICBDT1BZLCAgICAgICAvKiBpL286IHdhaXRpbmcgZm9yIGlucHV0IG9yIG91dHB1dCB0byBj b3B5IHN0b3JlZCBibG9jayAqLwogICAgICAgICBUQUJMRSwgICAgICAvKiBpOiB3YWl0aW5nIGZv ciBkeW5hbWljIGJsb2NrIHRhYmxlIGxlbmd0aHMgKi8KICAgICAgICAgTEVOTEVOUywgICAgLyog aTogd2FpdGluZyBmb3IgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovCiAgICAgICAgIENPREVM RU5TLCAgIC8qIGk6IHdhaXRpbmcgZm9yIGxlbmd0aC9saXQgYW5kIGRpc3RhbmNlIGNvZGUgbGVu Z3RocyAqLwotICAgICAgICAgICAgTEVOLCAgICAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3Ro L2xpdCBjb2RlICovCisgICAgICAgICAgICBMRU5fLCAgICAgICAvKiBpOiBzYW1lIGFzIExFTiBi ZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqLworICAgICAgICAgICAgTEVOLCAgICAgICAg LyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdC9lb2IgY29kZSAqLwogICAgICAgICAgICAgTEVO RVhULCAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi8KICAgICAgICAg ICAgIERJU1QsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGNvZGUgKi8KICAgICAg ICAgICAgIERJU1RFWFQsICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGV4dHJhIGJpdHMg Ki8KICAgICAgICAgICAgIE1BVENILCAgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFj ZSB0byBjb3B5IHN0cmluZyAqLwogICAgICAgICAgICAgTElULCAgICAgICAgLyogbzogd2FpdGlu ZyBmb3Igb3V0cHV0IHNwYWNlIHRvIHdyaXRlIGxpdGVyYWwgKi8KICAgICBDSEVDSywgICAgICAv KiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgY2hlY2sgdmFsdWUgKi8KLSNpZmRlZiBHVU5aSVAKICAg ICBMRU5HVEgsICAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgbGVuZ3RoIChnemlwKSAqLwot I2VuZGlmCiAgICAgRE9ORSwgICAgICAgLyogZmluaXNoZWQgY2hlY2ssIGRvbmUgLS0gcmVtYWlu IGhlcmUgdW50aWwgcmVzZXQgKi8KICAgICBCQUQsICAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9y IC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovCiAgICAgTUVNLCAgICAgICAgLyogZ290IGFu IGluZmxhdGUoKSBtZW1vcnkgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi8KQEAg LTU3LDE5ICs1NSwyMSBAQAogLyoKICAgICBTdGF0ZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIGFib3Zl IG1vZGVzIC0KIAotICAgIChtb3N0IG1vZGVzIGNhbiBnbyB0byB0aGUgQkFEIG9yIE1FTSBtb2Rl IC0tIG5vdCBzaG93biBmb3IgY2xhcml0eSkKKyAgICAobW9zdCBtb2RlcyBjYW4gZ28gdG8gQkFE IG9yIE1FTSBvbiBlcnJvciAtLSBub3Qgc2hvd24gZm9yIGNsYXJpdHkpCiAKICAgICBQcm9jZXNz IGhlYWRlcjoKLSAgICAgICAgSEVBRCAtPiAoZ3ppcCkgb3IgKHpsaWIpCi0gICAgICAgIChnemlw KSAtPiBGTEFHUyAtPiBUSU1FIC0+IE9TIC0+IEVYTEVOIC0+IEVYVFJBIC0+IE5BTUUKLSAgICAg ICAgTkFNRSAtPiBDT01NRU5UIC0+IEhDUkMgLT4gVFlQRQorICAgICAgICBIRUFEIC0+IChnemlw KSBvciAoemxpYikgb3IgKHJhdykKKyAgICAgICAgKGd6aXApIC0+IEZMQUdTIC0+IFRJTUUgLT4g T1MgLT4gRVhMRU4gLT4gRVhUUkEgLT4gTkFNRSAtPiBDT01NRU5UIC0+CisgICAgICAgICAgICAg ICAgICBIQ1JDIC0+IFRZUEUKICAgICAgICAgKHpsaWIpIC0+IERJQ1RJRCBvciBUWVBFCiAgICAg ICAgIERJQ1RJRCAtPiBESUNUIC0+IFRZUEUKKyAgICAgICAgKHJhdykgLT4gVFlQRURPCiAgICAg UmVhZCBkZWZsYXRlIGJsb2NrczoKLSAgICAgICAgICAgIFRZUEUgLT4gU1RPUkVEIG9yIFRBQkxF IG9yIExFTiBvciBDSEVDSwotICAgICAgICAgICAgU1RPUkVEIC0+IENPUFkgLT4gVFlQRQotICAg ICAgICAgICAgVEFCTEUgLT4gTEVOTEVOUyAtPiBDT0RFTEVOUyAtPiBMRU4KLSAgICBSZWFkIGRl ZmxhdGUgY29kZXM6CisgICAgICAgICAgICBUWVBFIC0+IFRZUEVETyAtPiBTVE9SRUQgb3IgVEFC TEUgb3IgTEVOXyBvciBDSEVDSworICAgICAgICAgICAgU1RPUkVEIC0+IENPUFlfIC0+IENPUFkg LT4gVFlQRQorICAgICAgICAgICAgVEFCTEUgLT4gTEVOTEVOUyAtPiBDT0RFTEVOUyAtPiBMRU5f CisgICAgICAgICAgICBMRU5fIC0+IExFTgorICAgIFJlYWQgZGVmbGF0ZSBjb2RlcyBpbiBmaXhl ZCBvciBkeW5hbWljIGJsb2NrOgogICAgICAgICAgICAgICAgIExFTiAtPiBMRU5FWFQgb3IgTElU IG9yIFRZUEUKICAgICAgICAgICAgICAgICBMRU5FWFQgLT4gRElTVCAtPiBESVNURVhUIC0+IE1B VENIIC0+IExFTgogICAgICAgICAgICAgICAgIExJVCAtPiBMRU4KQEAgLTc3LDIwICs3NywyNSBA QAogICAgICAgICBDSEVDSyAtPiBMRU5HVEggLT4gRE9ORQogICovCiAKLS8qIHN0YXRlIG1haW50 YWluZWQgYmV0d2VlbiBpbmZsYXRlKCkgY2FsbHMuICBBcHByb3hpbWF0ZWx5IDdLIGJ5dGVzLiAq LworLyogU3RhdGUgbWFpbnRhaW5lZCBiZXR3ZWVuIGluZmxhdGUoKSBjYWxscyAtLSBhcHByb3hp bWF0ZWx5IDdLIGJ5dGVzLCBub3QKKyAgIGluY2x1ZGluZyB0aGUgYWxsb2NhdGVkIHNsaWRpbmcg d2luZG93LCB3aGljaCBpcyB1cCB0byAzMksgYnl0ZXMuICovCiBzdHJ1Y3QgaW5mbGF0ZV9zdGF0 ZSB7CisgICAgel9zdHJlYW1wIHN0cm07ICAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byB0 aGlzIHpsaWIgc3RyZWFtICovCiAgICAgaW5mbGF0ZV9tb2RlIG1vZGU7ICAgICAgICAgIC8qIGN1 cnJlbnQgaW5mbGF0ZSBtb2RlICovCiAgICAgaW50IGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8q IHRydWUgaWYgcHJvY2Vzc2luZyBsYXN0IGJsb2NrICovCi0gICAgaW50IHdyYXA7ICAgICAgICAg ICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8K KyAgICBpbnQgd3JhcDsgICAgICAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwg Yml0IDEgdHJ1ZSBmb3IgZ3ppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Yml0IDIgdHJ1ZSB0byB2YWxpZGF0ZSBjaGVjayB2YWx1ZSAqLwogICAgIGludCBoYXZlZGljdDsg ICAgICAgICAgICAgICAvKiB0cnVlIGlmIGRpY3Rpb25hcnkgcHJvdmlkZWQgKi8KICAgICBpbnQg ZmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogZ3ppcCBoZWFkZXIgbWV0aG9kIGFuZCBmbGFncyAo MCBpZiB6bGliKSAqLworICAgIHVuc2lnbmVkIGRtYXg7ICAgICAgICAgICAgICAvKiB6bGliIGhl YWRlciBtYXggZGlzdGFuY2UgKElORkxBVEVfU1RSSUNUKSAqLwogICAgIHVuc2lnbmVkIGxvbmcg Y2hlY2s7ICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBjaGVjayB2YWx1ZSAqLwogICAgIHVu c2lnbmVkIGxvbmcgdG90YWw7ICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBvdXRwdXQgY291 bnQgKi8KKyAgICBnel9oZWFkZXJwIGhlYWQ7ICAgICAgICAgICAgLyogd2hlcmUgdG8gc2F2ZSBn emlwIGhlYWRlciBpbmZvcm1hdGlvbiAqLwogICAgICAgICAvKiBzbGlkaW5nIHdpbmRvdyAqLwog ICAgIHVuc2lnbmVkIHdiaXRzOyAgICAgICAgICAgICAvKiBsb2cgYmFzZSAyIG9mIHJlcXVlc3Rl ZCB3aW5kb3cgc2l6ZSAqLwogICAgIHVuc2lnbmVkIHdzaXplOyAgICAgICAgICAgICAvKiB3aW5k b3cgc2l6ZSBvciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi8KICAgICB1bnNpZ25lZCB3aGF2 ZTsgICAgICAgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqLwotICAgIHVuc2ln bmVkIHdyaXRlOyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi8KKyAgICB1bnNp Z25lZCB3bmV4dDsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovCiAgICAgdW5z aWduZWQgY2hhciBGQVIgKndpbmRvdzsgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYg bmVlZGVkICovCiAgICAgICAgIC8qIGJpdCBhY2N1bXVsYXRvciAqLwogICAgIHVuc2lnbmVkIGxv bmcgaG9sZDsgICAgICAgICAvKiBpbnB1dCBiaXQgYWNjdW11bGF0b3IgKi8KQEAgLTExNCw0ICsx MTksNyBAQAogICAgIHVuc2lnbmVkIHNob3J0IGxlbnNbMzIwXTsgICAvKiB0ZW1wb3Jhcnkgc3Rv cmFnZSBmb3IgY29kZSBsZW5ndGhzICovCiAgICAgdW5zaWduZWQgc2hvcnQgd29ya1syODhdOyAg IC8qIHdvcmsgYXJlYSBmb3IgY29kZSB0YWJsZSBidWlsZGluZyAqLwogICAgIGNvZGUgY29kZXNb RU5PVUdIXTsgICAgICAgICAvKiBzcGFjZSBmb3IgY29kZSB0YWJsZXMgKi8KKyAgICBpbnQgc2Fu ZTsgICAgICAgICAgICAgICAgICAgLyogaWYgZmFsc2UsIGFsbG93IGludmFsaWQgZGlzdGFuY2Ug dG9vIGZhciAqLworICAgIGludCBiYWNrOyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGJhY2sg b2YgbGFzdCB1bnByb2Nlc3NlZCBsZW5ndGgvbGl0ICovCisgICAgdW5zaWduZWQgd2FzOyAgICAg ICAgICAgICAgIC8qIGluaXRpYWwgbGVuZ3RoIG9mIG1hdGNoICovCiB9OwpkaWZmIC1yIGEwNTc4 Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZ0cmVlcy5jCi0t LSBhL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mdHJlZXMuYwlXZWQgTWF5IDI3IDAwOjA5OjQ2IDIw MjAgKzAyMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi9pbmZ0cmVlcy5jCVdlZCBNYXkgMjcg MTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZnRyZWVzLmMgLS0gZ2Vu ZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQg KEMpIDE5OTUtMjAwNCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNyBNYXJr IEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNv cHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUg TUFYQklUUyAxNQogCiBjb25zdCBjaGFyIGluZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBpbmZs YXRlIDEuMi4yIENvcHlyaWdodCAxOTk1LTIwMDQgTWFyayBBZGxlciAiOworICAgIiBpbmZsYXRl IDEuMi4xMSBDb3B5cmlnaHQgMTk5NS0yMDE3IE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1 c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdl bGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29t ZSByZWFzb24geW91IGNhbm5vdApAQCAtMjksNyArMjksNyBAQAogICAgdGFibGUgaW5kZXggYml0 cy4gIEl0IHdpbGwgZGlmZmVyIGlmIHRoZSByZXF1ZXN0IGlzIGdyZWF0ZXIgdGhhbiB0aGUKICAg IGxvbmdlc3QgY29kZSBvciBpZiBpdCBpcyBsZXNzIHRoYW4gdGhlIHNob3J0ZXN0IGNvZGUuCiAg Ki8KLWludCBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGNvZGVzLCB0YWJsZSwgYml0cywgd29y aykKK2ludCBaTElCX0lOVEVSTkFMIGluZmxhdGVfdGFibGUodHlwZSwgbGVucywgY29kZXMsIHRh YmxlLCBiaXRzLCB3b3JrKQogY29kZXR5cGUgdHlwZTsKIHVuc2lnbmVkIHNob3J0IEZBUiAqbGVu czsKIHVuc2lnbmVkIGNvZGVzOwpAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgdW5zaWduZWQgZmls bDsgICAgICAgICAgICAgIC8qIGluZGV4IGZvciByZXBsaWNhdGluZyBlbnRyaWVzICovCiAgICAg dW5zaWduZWQgbG93OyAgICAgICAgICAgICAgIC8qIGxvdyBiaXRzIGZvciBjdXJyZW50IHJvb3Qg ZW50cnkgKi8KICAgICB1bnNpZ25lZCBtYXNrOyAgICAgICAgICAgICAgLyogbWFzayBmb3IgbG93 IHJvb3QgYml0cyAqLwotICAgIGNvZGUgdGhpczsgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBl bnRyeSBmb3IgZHVwbGljYXRpb24gKi8KKyAgICBjb2RlIGhlcmU7ICAgICAgICAgICAgICAgICAg LyogdGFibGUgZW50cnkgZm9yIGR1cGxpY2F0aW9uICovCiAgICAgY29kZSBGQVIgKm5leHQ7ICAg ICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIHRhYmxlICovCiAgICAgY29uc3Qg dW5zaWduZWQgc2hvcnQgRkFSICpiYXNlOyAgICAgLyogYmFzZSB2YWx1ZSB0YWJsZSB0byB1c2Ug Ki8KICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBGQVIgKmV4dHJhOyAgICAvKiBleHRyYSBiaXRz IHRhYmxlIHRvIHVzZSAqLwotICAgIGludCBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB1c2Ug YmFzZSBhbmQgZXh0cmEgZm9yIHN5bWJvbCA+IGVuZCAqLworICAgIHVuc2lnbmVkIG1hdGNoOyAg ICAgICAgICAgICAvKiB1c2UgYmFzZSBhbmQgZXh0cmEgZm9yIHN5bWJvbCA+PSBtYXRjaCAqLwog ICAgIHVuc2lnbmVkIHNob3J0IGNvdW50W01BWEJJVFMrMV07ICAgIC8qIG51bWJlciBvZiBjb2Rl cyBvZiBlYWNoIGxlbmd0aCAqLwogICAgIHVuc2lnbmVkIHNob3J0IG9mZnNbTUFYQklUUysxXTsg ICAgIC8qIG9mZnNldHMgaW4gdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovCiAgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIHNob3J0IGxiYXNlWzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1 IGJhc2UgKi8KQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgMzUsIDQzLCA1MSwgNTksIDY3LCA4 MywgOTksIDExNSwgMTMxLCAxNjMsIDE5NSwgMjI3LCAyNTgsIDAsIDB9OwogICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBzaG9ydCBsZXh0WzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1 IGV4dHJhICovCiAgICAgICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3 LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LAotICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIw LCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgMTk5LCAxOTh9OworICAgICAgICAxOSwgMTks IDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzcsIDIwMn07CiAg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2Ug Y29kZXMgMC4uMjkgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcs IDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsCiAgICAgICAgIDI1NywgMzg1LCA1MTMsIDc2 OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSwKQEAgLTExNSwxNSArMTE1LDE1 IEBACiAgICAgICAgIGlmIChjb3VudFttYXhdICE9IDApIGJyZWFrOwogICAgIGlmIChyb290ID4g bWF4KSByb290ID0gbWF4OwogICAgIGlmIChtYXggPT0gMCkgeyAgICAgICAgICAgICAgICAgICAg IC8qIG5vIHN5bWJvbHMgdG8gY29kZSBhdCBhbGwgKi8KLSAgICAgICAgdGhpcy5vcCA9ICh1bnNp Z25lZCBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCi0gICAgICAgIHRoaXMu Yml0cyA9ICh1bnNpZ25lZCBjaGFyKTE7Ci0gICAgICAgIHRoaXMudmFsID0gKHVuc2lnbmVkIHNo b3J0KTA7Ci0gICAgICAgICooKnRhYmxlKSsrID0gdGhpczsgICAgICAgICAgICAgLyogbWFrZSBh IHRhYmxlIHRvIGZvcmNlIGFuIGVycm9yICovCi0gICAgICAgICooKnRhYmxlKSsrID0gdGhpczsK KyAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUg bWFya2VyICovCisgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKTE7CisgICAgICAg IGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgICooKnRhYmxlKSsrID0gaGVy ZTsgICAgICAgICAgICAgLyogbWFrZSBhIHRhYmxlIHRvIGZvcmNlIGFuIGVycm9yICovCisgICAg ICAgICooKnRhYmxlKSsrID0gaGVyZTsKICAgICAgICAgKmJpdHMgPSAxOwogICAgICAgICByZXR1 cm4gMDsgICAgIC8qIG5vIHN5bWJvbHMsIGJ1dCB3YWl0IGZvciBkZWNvZGluZyB0byByZXBvcnQg ZXJyb3IgKi8KICAgICB9Ci0gICAgZm9yIChtaW4gPSAxOyBtaW4gPD0gTUFYQklUUzsgbWluKysp CisgICAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKQogICAgICAgICBpZiAoY291bnRb bWluXSAhPSAwKSBicmVhazsKICAgICBpZiAocm9vdCA8IG1pbikgcm9vdCA9IG1pbjsKIApAQCAt MTM0LDcgKzEzNCw3IEBACiAgICAgICAgIGxlZnQgLT0gY291bnRbbGVuXTsKICAgICAgICAgaWYg KGxlZnQgPCAwKSByZXR1cm4gLTE7ICAgICAgICAvKiBvdmVyLXN1YnNjcmliZWQgKi8KICAgICB9 Ci0gICAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09IENPREVTIHx8IChjb2RlcyAtIGNvdW50WzBd ICE9IDEpKSkKKyAgICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT0gQ09ERVMgfHwgbWF4ICE9IDEp KQogICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY29tcGxldGUg c2V0ICovCiAKICAgICAvKiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBl YWNoIGxlbmd0aCBmb3Igc29ydGluZyAqLwpAQCAtMTY2LDExICsxNjYsMTAgQEAKICAgICAgICBl bnRlcmVkIGluIHRoZSB0YWJsZXMuCiAKICAgICAgICB1c2VkIGtlZXBzIHRyYWNrIG9mIGhvdyBt YW55IHRhYmxlIGVudHJpZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZQotICAgICAgIHBy b3ZpZGVkICp0YWJsZSBzcGFjZS4gIEl0IGlzIGNoZWNrZWQgd2hlbiBhIExFTlMgdGFibGUgaXMg YmVpbmcgbWFkZQotICAgICAgIGFnYWluc3QgdGhlIHNwYWNlIGluICp0YWJsZSwgRU5PVUdILCBt aW51cyB0aGUgbWF4aW11bSBzcGFjZSBuZWVkZWQgYnkKLSAgICAgICB0aGUgd29yc3QgY2FzZSBk aXN0YW5jZSBjb2RlLCBNQVhELiAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgdGhlCi0g ICAgICAgc3VmZmljaWVuY3kgb2YgRU5PVUdIIGhhcyBub3QgYmVlbiBwcm92ZW4gZXhoYXVzdGl2 ZWx5LCBoZW5jZSB0aGUgY2hlY2suCi0gICAgICAgVGhpcyBhc3N1bWVzIHRoYXQgd2hlbiB0eXBl ID09IExFTlMsIGJpdHMgPT0gOS4KKyAgICAgICBwcm92aWRlZCAqdGFibGUgc3BhY2UuICBJdCBp cyBjaGVja2VkIGZvciBMRU5TIGFuZCBESVNUIHRhYmxlcyBhZ2FpbnN0CisgICAgICAgdGhlIGNv bnN0YW50cyBFTk9VR0hfTEVOUyBhbmQgRU5PVUdIX0RJU1RTIHRvIGd1YXJkIGFnYWluc3QgY2hh bmdlcyBpbgorICAgICAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBT ZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmgKKyAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlv bi4KIAogICAgICAgIHN5bSBpbmNyZW1lbnRzIHRocm91Z2ggYWxsIHN5bWJvbHMsIGFuZCB0aGUg bG9vcCB0ZXJtaW5hdGVzIHdoZW4KICAgICAgICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5l LiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzCkBAIC0xODIsMTkgKzE4MSwx NyBAQAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgQ09ERVM6CiAgICAgICAgIGJhc2Ug PSBleHRyYSA9IHdvcms7ICAgIC8qIGR1bW15IHZhbHVlLS1ub3QgdXNlZCAqLwotICAgICAgICBl bmQgPSAxOTsKKyAgICAgICAgbWF0Y2ggPSAyMDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBM RU5TOgogICAgICAgICBiYXNlID0gbGJhc2U7Ci0gICAgICAgIGJhc2UgLT0gMjU3OwogICAgICAg ICBleHRyYSA9IGxleHQ7Ci0gICAgICAgIGV4dHJhIC09IDI1NzsKLSAgICAgICAgZW5kID0gMjU2 OworICAgICAgICBtYXRjaCA9IDI1NzsKICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAg ICAgICAgICAvKiBESVNUUyAqLworICAgIGRlZmF1bHQ6ICAgIC8qIERJU1RTICovCiAgICAgICAg IGJhc2UgPSBkYmFzZTsKICAgICAgICAgZXh0cmEgPSBkZXh0OwotICAgICAgICBlbmQgPSAtMTsK KyAgICAgICAgbWF0Y2ggPSAwOwogICAgIH0KIAogICAgIC8qIGluaXRpYWxpemUgc3RhdGUgZm9y IGxvb3AgKi8KQEAgLTIwOSwzMiArMjA2LDM0IEBACiAgICAgbWFzayA9IHVzZWQgLSAxOyAgICAg ICAgICAgIC8qIG1hc2sgZm9yIGNvbXBhcmluZyBsb3cgKi8KIAogICAgIC8qIGNoZWNrIGF2YWls YWJsZSB0YWJsZSBzcGFjZSAqLwotICAgIGlmICh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9V R0ggLSBNQVhEKQorICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykg fHwKKyAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCiAgICAg ICAgIHJldHVybiAxOwogCiAgICAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUg ZW50cmllcyAqLwogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogY3JlYXRlIHRhYmxlIGVudHJ5 ICovCi0gICAgICAgIHRoaXMuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKLSAg ICAgICAgaWYgKChpbnQpKHdvcmtbc3ltXSkgPCBlbmQpIHsKLSAgICAgICAgICAgIHRoaXMub3Ag PSAodW5zaWduZWQgY2hhcikwOwotICAgICAgICAgICAgdGhpcy52YWwgPSB3b3JrW3N5bV07Cisg ICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKKyAgICAgICAg aWYgKHdvcmtbc3ltXSArIDFVIDwgbWF0Y2gpIHsKKyAgICAgICAgICAgIGhlcmUub3AgPSAodW5z aWduZWQgY2hhcikwOworICAgICAgICAgICAgaGVyZS52YWwgPSB3b3JrW3N5bV07CiAgICAgICAg IH0KLSAgICAgICAgZWxzZSBpZiAoKGludCkod29ya1tzeW1dKSA+IGVuZCkgewotICAgICAgICAg ICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKShleHRyYVt3b3JrW3N5bV1dKTsKLSAgICAgICAg ICAgIHRoaXMudmFsID0gYmFzZVt3b3JrW3N5bV1dOworICAgICAgICBlbHNlIGlmICh3b3JrW3N5 bV0gPj0gbWF0Y2gpIHsKKyAgICAgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcikoZXh0 cmFbd29ya1tzeW1dIC0gbWF0Y2hdKTsKKyAgICAgICAgICAgIGhlcmUudmFsID0gYmFzZVt3b3Jr W3N5bV0gLSBtYXRjaF07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0 aGlzLm9wID0gKHVuc2lnbmVkIGNoYXIpKDMyICsgNjQpOyAgICAgICAgIC8qIGVuZCBvZiBibG9j ayAqLwotICAgICAgICAgICAgdGhpcy52YWwgPSAwOworICAgICAgICAgICAgaGVyZS5vcCA9ICh1 bnNpZ25lZCBjaGFyKSgzMiArIDY0KTsgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgKi8KKyAgICAg ICAgICAgIGhlcmUudmFsID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIHJlcGxpY2F0ZSBm b3IgdGhvc2UgaW5kaWNlcyB3aXRoIGxvdyBsZW4gYml0cyBlcXVhbCB0byBodWZmICovCiAgICAg ICAgIGluY3IgPSAxVSA8PCAobGVuIC0gZHJvcCk7CiAgICAgICAgIGZpbGwgPSAxVSA8PCBjdXJy OworICAgICAgICBtaW4gPSBmaWxsOyAgICAgICAgICAgICAgICAgLyogc2F2ZSBvZmZzZXQgdG8g bmV4dCB0YWJsZSAqLwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBmaWxsIC09IGluY3I7Ci0g ICAgICAgICAgICBuZXh0WyhodWZmID4+IGRyb3ApICsgZmlsbF0gPSB0aGlzOworICAgICAgICAg ICAgbmV4dFsoaHVmZiA+PiBkcm9wKSArIGZpbGxdID0gaGVyZTsKICAgICAgICAgfSB3aGlsZSAo ZmlsbCAhPSAwKTsKIAogICAgICAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0 IGNvZGUgaHVmZiAqLwpAQCAtMjYyLDcgKzI2MSw3IEBACiAgICAgICAgICAgICAgICAgZHJvcCA9 IHJvb3Q7CiAKICAgICAgICAgICAgIC8qIGluY3JlbWVudCBwYXN0IGxhc3QgdGFibGUgKi8KLSAg ICAgICAgICAgIG5leHQgKz0gMVUgPDwgY3VycjsKKyAgICAgICAgICAgIG5leHQgKz0gbWluOyAg ICAgICAgICAgIC8qIGhlcmUgbWluIGlzIDEgPDwgY3VyciAqLwogCiAgICAgICAgICAgICAvKiBk ZXRlcm1pbmUgbGVuZ3RoIG9mIG5leHQgdGFibGUgKi8KICAgICAgICAgICAgIGN1cnIgPSBsZW4g LSBkcm9wOwpAQCAtMjc2LDcgKzI3NSw4IEBACiAKICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBl bm91Z2ggc3BhY2UgKi8KICAgICAgICAgICAgIHVzZWQgKz0gMVUgPDwgY3VycjsKLSAgICAgICAg ICAgIGlmICh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0ggLSBNQVhEKQorICAgICAgICAg ICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAg ICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKQogICAgICAgICAg ICAgICAgIHJldHVybiAxOwogCiAgICAgICAgICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRh YmxlIHRvIHN1Yi10YWJsZSAqLwpAQCAtMjg3LDM4ICsyODcsMTQgQEAKICAgICAgICAgfQogICAg IH0KIAotICAgIC8qCi0gICAgICAgRmlsbCBpbiByZXN0IG9mIHRhYmxlIGZvciBpbmNvbXBsZXRl IGNvZGVzLiAgVGhpcyBsb29wIGlzIHNpbWlsYXIgdG8gdGhlCi0gICAgICAgbG9vcCBhYm92ZSBp biBpbmNyZW1lbnRpbmcgaHVmZiBmb3IgdGFibGUgaW5kaWNlcy4gIEl0IGlzIGFzc3VtZWQgdGhh dAotICAgICAgIGxlbiBpcyBlcXVhbCB0byBjdXJyICsgZHJvcCwgc28gdGhlcmUgaXMgbm8gbG9v cCBuZWVkZWQgdG8gaW5jcmVtZW50Ci0gICAgICAgdGhyb3VnaCBoaWdoIGluZGV4IGJpdHMuICBX aGVuIHRoZSBjdXJyZW50IHN1Yi10YWJsZSBpcyBmaWxsZWQsIHRoZSBsb29wCi0gICAgICAgZHJv cHMgYmFjayB0byB0aGUgcm9vdCB0YWJsZSB0byBmaWxsIGluIGFueSByZW1haW5pbmcgZW50cmll cyB0aGVyZS4KLSAgICAgKi8KLSAgICB0aGlzLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAg ICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KLSAgICB0aGlzLmJpdHMgPSAodW5z aWduZWQgY2hhcikobGVuIC0gZHJvcCk7Ci0gICAgdGhpcy52YWwgPSAodW5zaWduZWQgc2hvcnQp MDsKLSAgICB3aGlsZSAoaHVmZiAhPSAwKSB7Ci0gICAgICAgIC8qIHdoZW4gZG9uZSB3aXRoIHN1 Yi10YWJsZSwgZHJvcCBiYWNrIHRvIHJvb3QgdGFibGUgKi8KLSAgICAgICAgaWYgKGRyb3AgIT0g MCAmJiAoaHVmZiAmIG1hc2spICE9IGxvdykgewotICAgICAgICAgICAgZHJvcCA9IDA7Ci0gICAg ICAgICAgICBsZW4gPSByb290OwotICAgICAgICAgICAgbmV4dCA9ICp0YWJsZTsKLSAgICAgICAg ICAgIHRoaXMuYml0cyA9ICh1bnNpZ25lZCBjaGFyKWxlbjsKLSAgICAgICAgfQotCi0gICAgICAg IC8qIHB1dCBpbnZhbGlkIGNvZGUgbWFya2VyIGluIHRhYmxlICovCi0gICAgICAgIG5leHRbaHVm ZiA+PiBkcm9wXSA9IHRoaXM7Ci0KLSAgICAgICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUg bGVuLWJpdCBjb2RlIGh1ZmYgKi8KLSAgICAgICAgaW5jciA9IDFVIDw8IChsZW4gLSAxKTsKLSAg ICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKQotICAgICAgICAgICAgaW5jciA+Pj0gMTsKLSAgICAg ICAgaWYgKGluY3IgIT0gMCkgewotICAgICAgICAgICAgaHVmZiAmPSBpbmNyIC0gMTsKLSAgICAg ICAgICAgIGh1ZmYgKz0gaW5jcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAg ICBodWZmID0gMDsKKyAgICAvKiBmaWxsIGluIHJlbWFpbmluZyB0YWJsZSBlbnRyeSBpZiBjb2Rl IGlzIGluY29tcGxldGUgKGd1YXJhbnRlZWQgdG8gaGF2ZQorICAgICAgIGF0IG1vc3Qgb25lIHJl bWFpbmluZyBlbnRyeSwgc2luY2UgaWYgdGhlIGNvZGUgaXMgaW5jb21wbGV0ZSwgdGhlCisgICAg ICAgbWF4aW11bSBjb2RlIGxlbmd0aCB0aGF0IHdhcyBhbGxvd2VkIHRvIGdldCB0aGlzIGZhciBp cyBvbmUgYml0KSAqLworICAgIGlmIChodWZmICE9IDApIHsKKyAgICAgICAgaGVyZS5vcCA9ICh1 bnNpZ25lZCBjaGFyKTY0OyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KKyAg ICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOworICAgICAgICBo ZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOworICAgICAgICBuZXh0W2h1ZmZdID0gaGVyZTsK ICAgICB9CiAKICAgICAvKiBzZXQgcmV0dXJuIHBhcmFtZXRlcnMgKi8KZGlmZiAtciBhMDU3OGM3 OThlMTAgLXIgMzdiNDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvaW5mdHJlZXMuaAotLS0g YS9zeXMvc3JjL2NtZC9ncy96bGliL2luZnRyZWVzLmgJV2VkIE1heSAyNyAwMDowOTo0NiAyMDIw ICswMjAwCisrKyBiL3N5cy9zcmMvY21kL2dzL3psaWIvaW5mdHJlZXMuaAlXZWQgTWF5IDI3IDE3 OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5oIC0tIGhlYWRl ciB0byB1c2UgaW5mdHJlZXMuYwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgTWFyayBBZGxl cgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAgTWFyayBBZGxlcgogICogRm9yIGNv bmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGlu IHpsaWIuaAogICovCiAKQEAgLTM1LDIxICszNSwyOCBAQAogICAgIDAxMDAwMDAwIC0gaW52YWxp ZCBjb2RlCiAgKi8KIAotLyogTWF4aW11bSBzaXplIG9mIGR5bmFtaWMgdHJlZS4gIFRoZSBtYXhp bXVtIGZvdW5kIGluIGEgbG9uZyBidXQgbm9uLQotICAgZXhoYXVzdGl2ZSBzZWFyY2ggd2FzIDEw MDQgY29kZSBzdHJ1Y3R1cmVzICg4NTAgZm9yIGxlbmd0aC9saXRlcmFscwotICAgYW5kIDE1NCBm b3IgZGlzdGFuY2VzLCB0aGUgbGF0dGVyIGFjdHVhbGx5IHRoZSByZXN1bHQgb2YgYW4KLSAgIGV4 aGF1c3RpdmUgc2VhcmNoKS4gIFRoZSB0cnVlIG1heGltdW0gaXMgbm90IGtub3duLCBidXQgdGhl IHZhbHVlCi0gICBiZWxvdyBpcyBtb3JlIHRoYW4gc2FmZS4gKi8KLSNkZWZpbmUgRU5PVUdIIDE0 NDAKLSNkZWZpbmUgTUFYRCAxNTQKKy8qIE1heGltdW0gc2l6ZSBvZiB0aGUgZHluYW1pYyB0YWJs ZS4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2RlIHN0cnVjdHVyZXMgaXMKKyAgIDE0NDQsIHdo aWNoIGlzIHRoZSBzdW0gb2YgODUyIGZvciBsaXRlcmFsL2xlbmd0aCBjb2RlcyBhbmQgNTkyIGZv ciBkaXN0YW5jZQorICAgY29kZXMuICBUaGVzZSB2YWx1ZXMgd2VyZSBmb3VuZCBieSBleGhhdXN0 aXZlIHNlYXJjaGVzIHVzaW5nIHRoZSBwcm9ncmFtCisgICBleGFtcGxlcy9lbm91Z2guYyBmb3Vu ZCBpbiB0aGUgemxpYiBkaXN0cmlidHV0aW9uLiAgVGhlIGFyZ3VtZW50cyB0byB0aGF0CisgICBw cm9ncmFtIGFyZSB0aGUgbnVtYmVyIG9mIHN5bWJvbHMsIHRoZSBpbml0aWFsIHJvb3QgdGFibGUg c2l6ZSwgYW5kIHRoZQorICAgbWF4aW11bSBiaXQgbGVuZ3RoIG9mIGEgY29kZS4gICJlbm91Z2gg Mjg2IDkgMTUiIGZvciBsaXRlcmFsL2xlbmd0aCBjb2RlcworICAgcmV0dXJucyByZXR1cm5zIDg1 MiwgYW5kICJlbm91Z2ggMzAgNiAxNSIgZm9yIGRpc3RhbmNlIGNvZGVzIHJldHVybnMgNTkyLgor ICAgVGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplICg5IG9yIDYpIGlzIGZvdW5kIGluIHRoZSBm aWZ0aCBhcmd1bWVudCBvZiB0aGUKKyAgIGluZmxhdGVfdGFibGUoKSBjYWxscyBpbiBpbmZsYXRl LmMgYW5kIGluZmJhY2suYy4gIElmIHRoZSByb290IHRhYmxlIHNpemUgaXMKKyAgIGNoYW5nZWQs IHRoZW4gdGhlc2UgbWF4aW11bSBzaXplcyB3b3VsZCBiZSBuZWVkIHRvIGJlIHJlY2FsY3VsYXRl ZCBhbmQKKyAgIHVwZGF0ZWQuICovCisjZGVmaW5lIEVOT1VHSF9MRU5TIDg1MgorI2RlZmluZSBF Tk9VR0hfRElTVFMgNTkyCisjZGVmaW5lIEVOT1VHSCAoRU5PVUdIX0xFTlMrRU5PVUdIX0RJU1RT KQogCi0vKiBUeXBlIG9mIGNvZGUgdG8gYnVpbGQgZm9yIGluZnRhYmxlKCkgKi8KKy8qIFR5cGUg b2YgY29kZSB0byBidWlsZCBmb3IgaW5mbGF0ZV90YWJsZSgpICovCiB0eXBlZGVmIGVudW0gewog ICAgIENPREVTLAogICAgIExFTlMsCiAgICAgRElTVFMKIH0gY29kZXR5cGU7CiAKLWV4dGVybiBp bnQgaW5mbGF0ZV90YWJsZSBPRigoY29kZXR5cGUgdHlwZSwgdW5zaWduZWQgc2hvcnQgRkFSICps ZW5zLAoraW50IFpMSUJfSU5URVJOQUwgaW5mbGF0ZV90YWJsZSBPRigoY29kZXR5cGUgdHlwZSwg dW5zaWduZWQgc2hvcnQgRkFSICpsZW5zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjb2RlcywgY29kZSBGQVIgKiBGQVIgKnRhYmxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBGQVIgKmJpdHMsIHVuc2lnbmVkIHNob3J0IEZBUiAqd29yaykp OwpkaWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3Mvemxp Yi9taW5pZ3ppcC5jCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvbWluaWd6aXAuYwlXZWQgTWF5 IDI3IDAwOjA5OjQ2IDIwMjAgKzAyMDAKKysrIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAw IDE5NzAgKzAwMDAKQEAgLTEsMzIyICswLDAgQEAKLS8qIG1pbmlnemlwLmMgLS0gc2ltdWxhdGUg Z3ppcCB1c2luZyB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMp IDE5OTUtMjAwMiBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJp YnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICovCi0KLS8q Ci0gKiBtaW5pZ3ppcCBpcyBhIG1pbmltYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGd6aXAgdXRp bGl0eS4gVGhpcyBpcwotICogb25seSBhbiBleGFtcGxlIG9mIHVzaW5nIHpsaWIgYW5kIGlzbid0 IG1lYW50IHRvIHJlcGxhY2UgdGhlCi0gKiBmdWxsLWZlYXR1cmVkIGd6aXAuIE5vIGF0dGVtcHQg aXMgbWFkZSB0byBkZWFsIHdpdGggZmlsZSBzeXN0ZW1zCi0gKiBsaW1pdGluZyBuYW1lcyB0byAx NCBvciA4KzMgY2hhcmFjdGVycywgZXRjLi4uIEVycm9yIGNoZWNraW5nIGlzCi0gKiB2ZXJ5IGxp bWl0ZWQuIFNvIHVzZSBtaW5pZ3ppcCBvbmx5IGZvciB0ZXN0aW5nOyB1c2UgZ3ppcCBmb3IgdGhl Ci0gKiByZWFsIHRoaW5nLiBPbiBNU0RPUywgdXNlIG9ubHkgb24gZmlsZSBuYW1lcyB3aXRob3V0 IGV4dGVuc2lvbgotICogb3IgaW4gcGlwZSBtb2RlLgotICovCi0KLS8qIEAoIykgJElkOiBtaW5p Z3ppcC5jLHYgMS4xLjEuMSAyMDA1LzA0LzI0IDIxOjM5OjQyIGdpbGVzIEV4cCAkICovCi0KLSNp bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInpsaWIuaCIKLQotI2lmZGVmIFNUREMKLSMgIGlu Y2x1ZGUgPHN0cmluZy5oPgotIyAgaW5jbHVkZSA8c3RkbGliLmg+Ci0jZWxzZQotICAgZXh0ZXJu IHZvaWQgZXhpdCAgT0YoKGludCkpOwotI2VuZGlmCi0KLSNpZmRlZiBVU0VfTU1BUAotIyAgaW5j bHVkZSA8c3lzL3R5cGVzLmg+Ci0jICBpbmNsdWRlIDxzeXMvbW1hbi5oPgotIyAgaW5jbHVkZSA8 c3lzL3N0YXQuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChPUzIp IHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKLSMgIGluY2x1ZGUgPGZj bnRsLmg+Ci0jICBpbmNsdWRlIDxpby5oPgotIyAgZGVmaW5lIFNFVF9CSU5BUllfTU9ERShmaWxl KSBzZXRtb2RlKGZpbGVubyhmaWxlKSwgT19CSU5BUlkpCi0jZWxzZQotIyAgZGVmaW5lIFNFVF9C SU5BUllfTU9ERShmaWxlKQotI2VuZGlmCi0KLSNpZmRlZiBWTVMKLSMgIGRlZmluZSB1bmxpbmsg ZGVsZXRlCi0jICBkZWZpbmUgR1pfU1VGRklYICItZ3oiCi0jZW5kaWYKLSNpZmRlZiBSSVNDT1MK LSMgIGRlZmluZSB1bmxpbmsgcmVtb3ZlCi0jICBkZWZpbmUgR1pfU1VGRklYICItZ3oiCi0jICBk ZWZpbmUgZmlsZW5vKGZpbGUpIGZpbGUtPl9fZmlsZQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX01X RVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9v cwotIyAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmlsZW5vICovCi0jZW5kaWYKLQotI2lmbmRl ZiBXSU4zMiAvKiB1bmxpbmsgYWxyZWFkeSBpbiBzdGRpby5oIGZvciBXSU4zMiAqLwotICBleHRl cm4gaW50IHVubGluayBPRigoY29uc3QgY2hhciAqKSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBHWl9T VUZGSVgKLSMgIGRlZmluZSBHWl9TVUZGSVggIi5neiIKLSNlbmRpZgotI2RlZmluZSBTVUZGSVhf TEVOIChzaXplb2YoR1pfU1VGRklYKS0xKQotCi0jZGVmaW5lIEJVRkxFTiAgICAgIDE2Mzg0Ci0j ZGVmaW5lIE1BWF9OQU1FX0xFTiAxMDI0Ci0KLSNpZmRlZiBNQVhTRUdfNjRLCi0jICBkZWZpbmUg bG9jYWwgc3RhdGljCi0gICAvKiBOZWVkZWQgZm9yIHN5c3RlbXMgd2l0aCBsaW1pdGF0aW9uIG9u IHN0YWNrIHNpemUuICovCi0jZWxzZQotIyAgZGVmaW5lIGxvY2FsCi0jZW5kaWYKLQotY2hhciAq cHJvZzsKLQotdm9pZCBlcnJvciAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICptc2cpKTsKLXZv aWQgZ3pfY29tcHJlc3MgICAgICBPRigoRklMRSAgICppbiwgZ3pGaWxlIG91dCkpOwotI2lmZGVm IFVTRV9NTUFQCi1pbnQgIGd6X2NvbXByZXNzX21tYXAgT0YoKEZJTEUgICAqaW4sIGd6RmlsZSBv dXQpKTsKLSNlbmRpZgotdm9pZCBnel91bmNvbXByZXNzICAgIE9GKChnekZpbGUgaW4sIEZJTEUg ICAqb3V0KSk7Ci12b2lkIGZpbGVfY29tcHJlc3MgICAgT0YoKGNoYXIgICpmaWxlLCBjaGFyICpt b2RlKSk7Ci12b2lkIGZpbGVfdW5jb21wcmVzcyAgT0YoKGNoYXIgICpmaWxlKSk7Ci1pbnQgIG1h aW4gICAgICAgICAgICAgT0YoKGludCBhcmdjLCBjaGFyICphcmd2W10pKTsKLQotLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0gKiBEaXNwbGF5IGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQKLSAqLwotdm9p ZCBlcnJvcihtc2cpCi0gICAgY29uc3QgY2hhciAqbXNnOwotewotICAgIGZwcmludGYoc3RkZXJy LCAiJXM6ICVzXG4iLCBwcm9nLCBtc2cpOwotICAgIGV4aXQoMSk7Ci19Ci0KLS8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotICogQ29tcHJlc3MgaW5wdXQgdG8gb3V0cHV0IHRoZW4gY2xvc2UgYm90aCBm aWxlcy4KLSAqLwotCi12b2lkIGd6X2NvbXByZXNzKGluLCBvdXQpCi0gICAgRklMRSAgICppbjsK LSAgICBnekZpbGUgb3V0OwotewotICAgIGxvY2FsIGNoYXIgYnVmW0JVRkxFTl07Ci0gICAgaW50 IGxlbjsKLSAgICBpbnQgZXJyOwotCi0jaWZkZWYgVVNFX01NQVAKLSAgICAvKiBUcnkgZmlyc3Qg Y29tcHJlc3Npbmcgd2l0aCBtbWFwLiBJZiBtbWFwIGZhaWxzIChtaW5pZ3ppcCB1c2VkIGluIGEK LSAgICAgKiBwaXBlKSwgdXNlIHRoZSBub3JtYWwgZnJlYWQgbG9vcC4KLSAgICAgKi8KLSAgICBp ZiAoZ3pfY29tcHJlc3NfbW1hcChpbiwgb3V0KSA9PSBaX09LKSByZXR1cm47Ci0jZW5kaWYKLSAg ICBmb3IgKDs7KSB7Ci0gICAgICAgIGxlbiA9IChpbnQpZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVm KSwgaW4pOwotICAgICAgICBpZiAoZmVycm9yKGluKSkgewotICAgICAgICAgICAgcGVycm9yKCJm cmVhZCIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVu ID09IDApIGJyZWFrOwotCi0gICAgICAgIGlmIChnendyaXRlKG91dCwgYnVmLCAodW5zaWduZWQp bGVuKSAhPSBsZW4pIGVycm9yKGd6ZXJyb3Iob3V0LCAmZXJyKSk7Ci0gICAgfQotICAgIGZjbG9z ZShpbik7Ci0gICAgaWYgKGd6Y2xvc2Uob3V0KSAhPSBaX09LKSBlcnJvcigiZmFpbGVkIGd6Y2xv c2UiKTsKLX0KLQotI2lmZGVmIFVTRV9NTUFQIC8qIE1NQVAgdmVyc2lvbiwgTWlndWVsIEFsYnJl Y2h0IDxtYWxicmVjaEBlc28ub3JnPiAqLwotCi0vKiBUcnkgY29tcHJlc3NpbmcgdGhlIGlucHV0 IGZpbGUgYXQgb25jZSB1c2luZyBtbWFwLiBSZXR1cm4gWl9PSyBpZgotICogaWYgc3VjY2Vzcywg Wl9FUlJOTyBvdGhlcndpc2UuCi0gKi8KLWludCBnel9jb21wcmVzc19tbWFwKGluLCBvdXQpCi0g ICAgRklMRSAgICppbjsKLSAgICBnekZpbGUgb3V0OwotewotICAgIGludCBsZW47Ci0gICAgaW50 IGVycjsKLSAgICBpbnQgaWZkID0gZmlsZW5vKGluKTsKLSAgICBjYWRkcl90IGJ1ZjsgICAgLyog bW1hcCdlZCBidWZmZXIgZm9yIHRoZSBlbnRpcmUgaW5wdXQgZmlsZSAqLwotICAgIG9mZl90IGJ1 Zl9sZW47ICAvKiBsZW5ndGggb2YgdGhlIGlucHV0IGZpbGUgKi8KLSAgICBzdHJ1Y3Qgc3RhdCBz YjsKLQotICAgIC8qIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgbmVlZGVkIGZvciBt bWFwOiAqLwotICAgIGlmIChmc3RhdChpZmQsICZzYikgPCAwKSByZXR1cm4gWl9FUlJOTzsKLSAg ICBidWZfbGVuID0gc2Iuc3Rfc2l6ZTsKLSAgICBpZiAoYnVmX2xlbiA8PSAwKSByZXR1cm4gWl9F UlJOTzsKLQotICAgIC8qIE5vdyBkbyB0aGUgYWN0dWFsIG1tYXA6ICovCi0gICAgYnVmID0gbW1h cCgoY2FkZHJfdCkgMCwgYnVmX2xlbiwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBpZmQsIChvZmZf dCkwKTsKLSAgICBpZiAoYnVmID09IChjYWRkcl90KSgtMSkpIHJldHVybiBaX0VSUk5POwotCi0g ICAgLyogQ29tcHJlc3MgdGhlIHdob2xlIGZpbGUgYXQgb25jZTogKi8KLSAgICBsZW4gPSBnendy aXRlKG91dCwgKGNoYXIgKilidWYsICh1bnNpZ25lZClidWZfbGVuKTsKLQotICAgIGlmIChsZW4g IT0gKGludClidWZfbGVuKSBlcnJvcihnemVycm9yKG91dCwgJmVycikpOwotCi0gICAgbXVubWFw KGJ1ZiwgYnVmX2xlbik7Ci0gICAgZmNsb3NlKGluKTsKLSAgICBpZiAoZ3pjbG9zZShvdXQpICE9 IFpfT0spIGVycm9yKCJmYWlsZWQgZ3pjbG9zZSIpOwotICAgIHJldHVybiBaX09LOwotfQotI2Vu ZGlmIC8qIFVTRV9NTUFQICovCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVW5jb21wcmVz cyBpbnB1dCB0byBvdXRwdXQgdGhlbiBjbG9zZSBib3RoIGZpbGVzLgotICovCi12b2lkIGd6X3Vu Y29tcHJlc3MoaW4sIG91dCkKLSAgICBnekZpbGUgaW47Ci0gICAgRklMRSAgICpvdXQ7Ci17Ci0g ICAgbG9jYWwgY2hhciBidWZbQlVGTEVOXTsKLSAgICBpbnQgbGVuOwotICAgIGludCBlcnI7Ci0K LSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGxlbiA9IGd6cmVhZChpbiwgYnVmLCBzaXplb2YoYnVm KSk7Ci0gICAgICAgIGlmIChsZW4gPCAwKSBlcnJvciAoZ3plcnJvcihpbiwgJmVycikpOwotICAg ICAgICBpZiAobGVuID09IDApIGJyZWFrOwotCi0gICAgICAgIGlmICgoaW50KWZ3cml0ZShidWYs IDEsICh1bnNpZ25lZClsZW4sIG91dCkgIT0gbGVuKSB7Ci0gICAgICAgICAgICBlcnJvcigiZmFp bGVkIGZ3cml0ZSIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmY2xvc2Uob3V0KSkgZXJy b3IoImZhaWxlZCBmY2xvc2UiKTsKLQotICAgIGlmIChnemNsb3NlKGluKSAhPSBaX09LKSBlcnJv cigiZmFpbGVkIGd6Y2xvc2UiKTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENv bXByZXNzIHRoZSBnaXZlbiBmaWxlOiBjcmVhdGUgYSBjb3JyZXNwb25kaW5nIC5neiBmaWxlIGFu ZCByZW1vdmUgdGhlCi0gKiBvcmlnaW5hbC4KLSAqLwotdm9pZCBmaWxlX2NvbXByZXNzKGZpbGUs IG1vZGUpCi0gICAgY2hhciAgKmZpbGU7Ci0gICAgY2hhciAgKm1vZGU7Ci17Ci0gICAgbG9jYWwg Y2hhciBvdXRmaWxlW01BWF9OQU1FX0xFTl07Ci0gICAgRklMRSAgKmluOwotICAgIGd6RmlsZSBv dXQ7Ci0KLSAgICBzdHJjcHkob3V0ZmlsZSwgZmlsZSk7Ci0gICAgc3RyY2F0KG91dGZpbGUsIEda X1NVRkZJWCk7Ci0KLSAgICBpbiA9IGZvcGVuKGZpbGUsICJyYiIpOwotICAgIGlmIChpbiA9PSBO VUxMKSB7Ci0gICAgICAgIHBlcnJvcihmaWxlKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0g ICAgb3V0ID0gZ3pvcGVuKG91dGZpbGUsIG1vZGUpOwotICAgIGlmIChvdXQgPT0gTlVMTCkgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBnem9wZW4gJXNcbiIsIHByb2csIG91 dGZpbGUpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBnel9jb21wcmVzcyhpbiwgb3V0 KTsKLQotICAgIHVubGluayhmaWxlKTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAq IFVuY29tcHJlc3MgdGhlIGdpdmVuIGZpbGUgYW5kIHJlbW92ZSB0aGUgb3JpZ2luYWwuCi0gKi8K LXZvaWQgZmlsZV91bmNvbXByZXNzKGZpbGUpCi0gICAgY2hhciAgKmZpbGU7Ci17Ci0gICAgbG9j YWwgY2hhciBidWZbTUFYX05BTUVfTEVOXTsKLSAgICBjaGFyICppbmZpbGUsICpvdXRmaWxlOwot ICAgIEZJTEUgICpvdXQ7Ci0gICAgZ3pGaWxlIGluOwotICAgIHVJbnQgbGVuID0gKHVJbnQpc3Ry bGVuKGZpbGUpOwotCi0gICAgc3RyY3B5KGJ1ZiwgZmlsZSk7Ci0KLSAgICBpZiAobGVuID4gU1VG RklYX0xFTiAmJiBzdHJjbXAoZmlsZStsZW4tU1VGRklYX0xFTiwgR1pfU1VGRklYKSA9PSAwKSB7 Ci0gICAgICAgIGluZmlsZSA9IGZpbGU7Ci0gICAgICAgIG91dGZpbGUgPSBidWY7Ci0gICAgICAg IG91dGZpbGVbbGVuLTNdID0gJ1wwJzsKLSAgICB9IGVsc2UgewotICAgICAgICBvdXRmaWxlID0g ZmlsZTsKLSAgICAgICAgaW5maWxlID0gYnVmOwotICAgICAgICBzdHJjYXQoaW5maWxlLCBHWl9T VUZGSVgpOwotICAgIH0KLSAgICBpbiA9IGd6b3BlbihpbmZpbGUsICJyYiIpOwotICAgIGlmIChp biA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGd6b3BlbiAl c1xuIiwgcHJvZywgaW5maWxlKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgb3V0ID0g Zm9wZW4ob3V0ZmlsZSwgIndiIik7Ci0gICAgaWYgKG91dCA9PSBOVUxMKSB7Ci0gICAgICAgIHBl cnJvcihmaWxlKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBnel91bmNvbXByZXNz KGluLCBvdXQpOwotCi0gICAgdW5saW5rKGluZmlsZSk7Ci19Ci0KLQotLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0gKiBVc2FnZTogIG1pbmlnemlwIFstZF0gWy1mXSBbLWhdIFstcl0gWy0xIHRvIC05 XSBbZmlsZXMuLi5dCi0gKiAgIC1kIDogZGVjb21wcmVzcwotICogICAtZiA6IGNvbXByZXNzIHdp dGggWl9GSUxURVJFRAotICogICAtaCA6IGNvbXByZXNzIHdpdGggWl9IVUZGTUFOX09OTFkKLSAq ICAgLXIgOiBjb21wcmVzcyB3aXRoIFpfUkxFCi0gKiAgIC0xIHRvIC05IDogY29tcHJlc3Npb24g bGV2ZWwKLSAqLwotCi1pbnQgbWFpbihhcmdjLCBhcmd2KQotICAgIGludCBhcmdjOwotICAgIGNo YXIgKmFyZ3ZbXTsKLXsKLSAgICBpbnQgdW5jb21wciA9IDA7Ci0gICAgZ3pGaWxlIGZpbGU7Ci0g ICAgY2hhciBvdXRtb2RlWzIwXTsKLQotICAgIHN0cmNweShvdXRtb2RlLCAid2I2ICIpOwotCi0g ICAgcHJvZyA9IGFyZ3ZbMF07Ci0gICAgYXJnYy0tLCBhcmd2Kys7Ci0KLSAgICB3aGlsZSAoYXJn YyA+IDApIHsKLSAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICItZCIpID09IDApCi0gICAgICAgIHVu Y29tcHIgPSAxOwotICAgICAgZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiLWYiKSA9PSAwKQotICAg ICAgICBvdXRtb2RlWzNdID0gJ2YnOwotICAgICAgZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiLWgi KSA9PSAwKQotICAgICAgICBvdXRtb2RlWzNdID0gJ2gnOwotICAgICAgZWxzZSBpZiAoc3RyY21w KCphcmd2LCAiLXIiKSA9PSAwKQotICAgICAgICBvdXRtb2RlWzNdID0gJ1InOwotICAgICAgZWxz ZSBpZiAoKCphcmd2KVswXSA9PSAnLScgJiYgKCphcmd2KVsxXSA+PSAnMScgJiYgKCphcmd2KVsx XSA8PSAnOScgJiYKLSAgICAgICAgICAgICAgICgqYXJndilbMl0gPT0gMCkKLSAgICAgICAgb3V0 bW9kZVsyXSA9ICgqYXJndilbMV07Ci0gICAgICBlbHNlCi0gICAgICAgIGJyZWFrOwotICAgICAg YXJnYy0tLCBhcmd2Kys7Ci0gICAgfQotICAgIGlmIChhcmdjID09IDApIHsKLSAgICAgICAgU0VU X0JJTkFSWV9NT0RFKHN0ZGluKTsKLSAgICAgICAgU0VUX0JJTkFSWV9NT0RFKHN0ZG91dCk7Ci0g ICAgICAgIGlmICh1bmNvbXByKSB7Ci0gICAgICAgICAgICBmaWxlID0gZ3pkb3BlbihmaWxlbm8o c3RkaW4pLCAicmIiKTsKLSAgICAgICAgICAgIGlmIChmaWxlID09IE5VTEwpIGVycm9yKCJjYW4n dCBnemRvcGVuIHN0ZGluIik7Ci0gICAgICAgICAgICBnel91bmNvbXByZXNzKGZpbGUsIHN0ZG91 dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaWxlID0gZ3pkb3BlbihmaWxlbm8o c3Rkb3V0KSwgb3V0bW9kZSk7Ci0gICAgICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSBlcnJvcigi Y2FuJ3QgZ3pkb3BlbiBzdGRvdXQiKTsKLSAgICAgICAgICAgIGd6X2NvbXByZXNzKHN0ZGluLCBm aWxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAg IGlmICh1bmNvbXByKSB7Ci0gICAgICAgICAgICAgICAgZmlsZV91bmNvbXByZXNzKCphcmd2KTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmlsZV9jb21wcmVzcygqYXJn diwgb3V0bW9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGFyZ3YrKywgLS1h cmdjKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3 YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL3RyZWVzLmMKLS0tIGEvc3lzL3NyYy9jbWQv Z3MvemxpYi90cmVlcy5jCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMv c3JjL2NtZC9ncy96bGliL3RyZWVzLmMJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBA IC0xLDUgKzEsNiBAQAogLyogdHJlZXMuYyAtLSBvdXRwdXQgZGVmbGF0ZWQgZGF0YSB1c2luZyBI dWZmbWFuIGNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgSmVhbi1sb3VwIEdhaWxs eQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTcgSmVhbi1sb3VwIEdhaWxseQorICogZGV0ZWN0 X2RhdGFfdHlwZSgpIGZ1bmN0aW9uIHByb3ZpZGVkIGZyZWVseSBieSBDb3NtaW4gVHJ1dGEsIDIw MDYKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJp Z2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0yOSwxMyArMzAsMTMgQEAKICAqICAgICAg ICAgIEFkZGlzb24tV2VzbGV5LCAxOTgzLiBJU0JOIDAtMjAxLTA2NjcyLTYuCiAgKi8KIAotLyog QCgjKSAkSWQ6IHRyZWVzLmMsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6MzkgZ2lsZXMgRXhw ICQgKi8KKy8qIEAoIykgJElkJCAqLwogCiAvKiAjZGVmaW5lIEdFTl9UUkVFU19IICovCiAKICNp bmNsdWRlICJkZWZsYXRlLmgiCiAKLSNpZmRlZiBERUJVRworI2lmZGVmIFpMSUJfREVCVUcKICMg IGluY2x1ZGUgPGN0eXBlLmg+CiAjZW5kaWYKIApAQCAtNzMsMTEgKzc0LDYgQEAKICAqIHByb2Jh YmlsaXR5LCB0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQg bGVuZ3RoIGNvZGVzLgogICovCiAKLSNkZWZpbmUgQnVmX3NpemUgKDggKiAyKnNpemVvZihjaGFy KSkKLS8qIE51bWJlciBvZiBiaXRzIHVzZWQgd2l0aGluIGJpX2J1Zi4gKGJpX2J1ZiBtaWdodCBi ZSBpbXBsZW1lbnRlZCBvbgotICogbW9yZSB0aGFuIDE2IGJpdHMgb24gc29tZSBzeXN0ZW1zLikK LSAqLwotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBp bml0aWFsaXplZCBvbmx5IG9uY2UuCiAgKi8KQEAgLTEyNiwxMyArMTIyLDEzIEBACiAgICAgaW50 ICAgICBtYXhfbGVuZ3RoOyAgICAgICAgICAvKiBtYXggYml0IGxlbmd0aCBmb3IgdGhlIGNvZGVz ICovCiB9OwogCi1sb2NhbCBzdGF0aWNfdHJlZV9kZXNjICBzdGF0aWNfbF9kZXNjID0KK2xvY2Fs IGNvbnN0IHN0YXRpY190cmVlX2Rlc2MgIHN0YXRpY19sX2Rlc2MgPQoge3N0YXRpY19sdHJlZSwg ZXh0cmFfbGJpdHMsIExJVEVSQUxTKzEsIExfQ09ERVMsIE1BWF9CSVRTfTsKIAotbG9jYWwgc3Rh dGljX3RyZWVfZGVzYyAgc3RhdGljX2RfZGVzYyA9Citsb2NhbCBjb25zdCBzdGF0aWNfdHJlZV9k ZXNjICBzdGF0aWNfZF9kZXNjID0KIHtzdGF0aWNfZHRyZWUsIGV4dHJhX2RiaXRzLCAwLCAgICAg ICAgICBEX0NPREVTLCBNQVhfQklUU307CiAKLWxvY2FsIHN0YXRpY190cmVlX2Rlc2MgIHN0YXRp Y19ibF9kZXNjID0KK2xvY2FsIGNvbnN0IHN0YXRpY190cmVlX2Rlc2MgIHN0YXRpY19ibF9kZXNj ID0KIHsoY29uc3QgY3RfZGF0YSAqKTAsIGV4dHJhX2JsYml0cywgMCwgICBCTF9DT0RFUywgTUFY X0JMX0JJVFN9OwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1MCwyNCArMTQ2LDIyIEBA CiBsb2NhbCBpbnQgIGJ1aWxkX2JsX3RyZWUgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2Nh bCB2b2lkIHNlbmRfYWxsX3RyZWVzIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgbGNvZGVzLCBp bnQgZGNvZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsY29kZXMpKTsK LWxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGN0X2RhdGEg Kmx0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RfZGF0YSAqZHRyZWUpKTsK LWxvY2FsIHZvaWQgc2V0X2RhdGFfdHlwZSAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK2xvY2Fs IHZvaWQgY29tcHJlc3NfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNvbnN0IGN0X2RhdGEg Kmx0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3RfZGF0YSAqZHRy ZWUpKTsKK2xvY2FsIGludCAgZGV0ZWN0X2RhdGFfdHlwZSBPRigoZGVmbGF0ZV9zdGF0ZSAqcykp OwogbG9jYWwgdW5zaWduZWQgYmlfcmV2ZXJzZSBPRigodW5zaWduZWQgdmFsdWUsIGludCBsZW5n dGgpKTsKIGxvY2FsIHZvaWQgYmlfd2luZHVwICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsK IGxvY2FsIHZvaWQgYmlfZmx1c2ggICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWxvY2Fs IHZvaWQgY29weV9ibG9jayAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsIHVu c2lnbmVkIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWFkZXIpKTsK IAogI2lmZGVmIEdFTl9UUkVFU19ICiBsb2NhbCB2b2lkIGdlbl90cmVlc19oZWFkZXIgT0YoKHZv aWQpKTsKICNlbmRpZgogCi0jaWZuZGVmIERFQlVHCisjaWZuZGVmIFpMSUJfREVCVUcKICMgIGRl ZmluZSBzZW5kX2NvZGUocywgYywgdHJlZSkgc2VuZF9iaXRzKHMsIHRyZWVbY10uQ29kZSwgdHJl ZVtjXS5MZW4pCiAgICAvKiBTZW5kIGEgY29kZSBvZiB0aGUgZ2l2ZW4gdHJlZS4gYyBhbmQgdHJl ZSBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyAqLwogCi0jZWxzZSAvKiBERUJVRyAqLworI2Vs c2UgLyogIVpMSUJfREVCVUcgKi8KICMgIGRlZmluZSBzZW5kX2NvZGUocywgYywgdHJlZSkgXAog ICAgICB7IGlmICh6X3ZlcmJvc2U+MikgZnByaW50ZihzdGRlcnIsIlxuY2QgJTNkICIsKGMpKTsg XAogICAgICAgIHNlbmRfYml0cyhzLCB0cmVlW2NdLkNvZGUsIHRyZWVbY10uTGVuKTsgfQpAQCAt MTg2LDcgKzE4MCw3IEBACiAgKiBTZW5kIGEgdmFsdWUgb24gYSBnaXZlbiBudW1iZXIgb2YgYml0 cy4KICAqIElOIGFzc2VydGlvbjogbGVuZ3RoIDw9IDE2IGFuZCB2YWx1ZSBmaXRzIGluIGxlbmd0 aCBiaXRzLgogICovCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiBsb2NhbCB2b2lk IHNlbmRfYml0cyAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgdmFsdWUsIGludCBsZW5n dGgpKTsKIAogbG9jYWwgdm9pZCBzZW5kX2JpdHMocywgdmFsdWUsIGxlbmd0aCkKQEAgLTIwMywz MSArMTk3LDMxIEBACiAgICAgICogdW51c2VkIGJpdHMgaW4gdmFsdWUuCiAgICAgICovCiAgICAg aWYgKHMtPmJpX3ZhbGlkID4gKGludClCdWZfc2l6ZSAtIGxlbmd0aCkgewotICAgICAgICBzLT5i aV9idWYgfD0gKHZhbHVlIDw8IHMtPmJpX3ZhbGlkKTsKKyAgICAgICAgcy0+YmlfYnVmIHw9ICh1 c2gpdmFsdWUgPDwgcy0+YmlfdmFsaWQ7CiAgICAgICAgIHB1dF9zaG9ydChzLCBzLT5iaV9idWYp OwogICAgICAgICBzLT5iaV9idWYgPSAodXNoKXZhbHVlID4+IChCdWZfc2l6ZSAtIHMtPmJpX3Zh bGlkKTsKICAgICAgICAgcy0+YmlfdmFsaWQgKz0gbGVuZ3RoIC0gQnVmX3NpemU7CiAgICAgfSBl bHNlIHsKLSAgICAgICAgcy0+YmlfYnVmIHw9IHZhbHVlIDw8IHMtPmJpX3ZhbGlkOworICAgICAg ICBzLT5iaV9idWYgfD0gKHVzaCl2YWx1ZSA8PCBzLT5iaV92YWxpZDsKICAgICAgICAgcy0+Ymlf dmFsaWQgKz0gbGVuZ3RoOwogICAgIH0KIH0KLSNlbHNlIC8qICFERUJVRyAqLworI2Vsc2UgLyog IVpMSUJfREVCVUcgKi8KIAogI2RlZmluZSBzZW5kX2JpdHMocywgdmFsdWUsIGxlbmd0aCkgXAog eyBpbnQgbGVuID0gbGVuZ3RoO1wKICAgaWYgKHMtPmJpX3ZhbGlkID4gKGludClCdWZfc2l6ZSAt IGxlbikge1wKLSAgICBpbnQgdmFsID0gdmFsdWU7XAotICAgIHMtPmJpX2J1ZiB8PSAodmFsIDw8 IHMtPmJpX3ZhbGlkKTtcCisgICAgaW50IHZhbCA9IChpbnQpdmFsdWU7XAorICAgIHMtPmJpX2J1 ZiB8PSAodXNoKXZhbCA8PCBzLT5iaV92YWxpZDtcCiAgICAgcHV0X3Nob3J0KHMsIHMtPmJpX2J1 Zik7XAogICAgIHMtPmJpX2J1ZiA9ICh1c2gpdmFsID4+IChCdWZfc2l6ZSAtIHMtPmJpX3ZhbGlk KTtcCiAgICAgcy0+YmlfdmFsaWQgKz0gbGVuIC0gQnVmX3NpemU7XAogICB9IGVsc2Uge1wKLSAg ICBzLT5iaV9idWYgfD0gKHZhbHVlKSA8PCBzLT5iaV92YWxpZDtcCisgICAgcy0+YmlfYnVmIHw9 ICh1c2gpKHZhbHVlKSA8PCBzLT5iaV92YWxpZDtcCiAgICAgcy0+YmlfdmFsaWQgKz0gbGVuO1wK ICAgfVwKIH0KLSNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIFpMSUJfREVCVUcgKi8KIAog CiAvKiB0aGUgYXJndW1lbnRzIG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzICovCkBAIC0yNTAs MTEgKzI0NCwxMyBAQAogICAgIGlmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47CiAKICAgICAv KiBGb3Igc29tZSBlbWJlZGRlZCB0YXJnZXRzLCBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3QgaW5p dGlhbGl6ZWQ6ICovCisjaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlMKICAgICBzdGF0aWNf bF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2x0cmVlOwogICAgIHN0YXRpY19sX2Rlc2MuZXh0 cmFfYml0cyA9IGV4dHJhX2xiaXRzOwogICAgIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBz dGF0aWNfZHRyZWU7CiAgICAgc3RhdGljX2RfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfZGJpdHM7 CiAgICAgc3RhdGljX2JsX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2JsYml0czsKKyNlbmRpZgog CiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBsZW5ndGggKDAuLjI1NSkgLT4gbGVuZ3Ro IGNvZGUgKDAuLjI4KSAqLwogICAgIGxlbmd0aCA9IDA7CkBAIC0zMTksNyArMzE1LDcgQEAKICAq IEdlbmVyZXJhdGUgdGhlIGZpbGUgdHJlZXMuaCBkZXNjcmliaW5nIHRoZSBzdGF0aWMgdHJlZXMu CiAgKi8KICNpZmRlZiBHRU5fVFJFRVNfSAotIyAgaWZuZGVmIERFQlVHCisjICBpZm5kZWYgWkxJ Ql9ERUJVRwogIyAgICBpbmNsdWRlIDxzdGRpby5oPgogIyAgZW5kaWYKIApAQCAtMzQ4LDEzICsz NDQsMTQgQEAKICAgICAgICAgICAgICAgICBzdGF0aWNfZHRyZWVbaV0uTGVuLCBTRVBBUkFUT1Io aSwgRF9DT0RFUy0xLCA1KSk7CiAgICAgfQogCi0gICAgZnByaW50ZihoZWFkZXIsICJjb25zdCB1 Y2ggX2Rpc3RfY29kZVtESVNUX0NPREVfTEVOXSA9IHtcbiIpOworICAgIGZwcmludGYoaGVhZGVy LCAiY29uc3QgdWNoIFpMSUJfSU5URVJOQUwgX2Rpc3RfY29kZVtESVNUX0NPREVfTEVOXSA9IHtc biIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBESVNUX0NPREVfTEVOOyBpKyspIHsKICAgICAgICAg ZnByaW50ZihoZWFkZXIsICIlMnUlcyIsIF9kaXN0X2NvZGVbaV0sCiAgICAgICAgICAgICAgICAg U0VQQVJBVE9SKGksIERJU1RfQ09ERV9MRU4tMSwgMjApKTsKICAgICB9CiAKLSAgICBmcHJpbnRm KGhlYWRlciwgImNvbnN0IHVjaCBfbGVuZ3RoX2NvZGVbTUFYX01BVENILU1JTl9NQVRDSCsxXT0g e1xuIik7CisgICAgZnByaW50ZihoZWFkZXIsCisgICAgICAgICJjb25zdCB1Y2ggWkxJQl9JTlRF Uk5BTCBfbGVuZ3RoX2NvZGVbTUFYX01BVENILU1JTl9NQVRDSCsxXT0ge1xuIik7CiAgICAgZm9y IChpID0gMDsgaSA8IE1BWF9NQVRDSC1NSU5fTUFUQ0grMTsgaSsrKSB7CiAgICAgICAgIGZwcmlu dGYoaGVhZGVyLCAiJTJ1JXMiLCBfbGVuZ3RoX2NvZGVbaV0sCiAgICAgICAgICAgICAgICAgU0VQ QVJBVE9SKGksIE1BWF9NQVRDSC1NSU5fTUFUQ0gsIDIwKSk7CkBAIC0zNzksNyArMzc2LDcgQEAK IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQogICogSW5pdGlhbGl6ZSB0aGUgdHJlZSBkYXRhIHN0cnVj dHVyZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtLgogICovCi12b2lkIF90cl9pbml0KHMpCit2b2lk IFpMSUJfSU5URVJOQUwgX3RyX2luaXQocykKICAgICBkZWZsYXRlX3N0YXRlICpzOwogewogICAg IHRyX3N0YXRpY19pbml0KCk7CkBAIC0zOTUsOCArMzkyLDcgQEAKIAogICAgIHMtPmJpX2J1ZiA9 IDA7CiAgICAgcy0+YmlfdmFsaWQgPSAwOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVu b3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KLSNpZmRlZiBERUJVRworI2lmZGVmIFpMSUJf REVCVUcKICAgICBzLT5jb21wcmVzc2VkX2xlbiA9IDBMOwogICAgIHMtPmJpdHNfc2VudCA9IDBM OwogI2VuZGlmCkBAIC01MjQsMTIgKzUyMCwxMiBAQAogICAgICAgICB4Yml0cyA9IDA7CiAgICAg ICAgIGlmIChuID49IGJhc2UpIHhiaXRzID0gZXh0cmFbbi1iYXNlXTsKICAgICAgICAgZiA9IHRy ZWVbbl0uRnJlcTsKLSAgICAgICAgcy0+b3B0X2xlbiArPSAodWxnKWYgKiAoYml0cyArIHhiaXRz KTsKLSAgICAgICAgaWYgKHN0cmVlKSBzLT5zdGF0aWNfbGVuICs9ICh1bGcpZiAqIChzdHJlZVtu XS5MZW4gKyB4Yml0cyk7CisgICAgICAgIHMtPm9wdF9sZW4gKz0gKHVsZylmICogKHVuc2lnbmVk KShiaXRzICsgeGJpdHMpOworICAgICAgICBpZiAoc3RyZWUpIHMtPnN0YXRpY19sZW4gKz0gKHVs ZylmICogKHVuc2lnbmVkKShzdHJlZVtuXS5MZW4gKyB4Yml0cyk7CiAgICAgfQogICAgIGlmIChv dmVyZmxvdyA9PSAwKSByZXR1cm47CiAKLSAgICBUcmFjZSgoc3RkZXJyLCJcbmJpdCBsZW5ndGgg b3ZlcmZsb3dcbiIpKTsKKyAgICBUcmFjZXYoKHN0ZGVyciwiXG5iaXQgbGVuZ3RoIG92ZXJmbG93 XG4iKSk7CiAgICAgLyogVGhpcyBoYXBwZW5zIGZvciBleGFtcGxlIG9uIG9iajIgYW5kIHBpYyBv ZiB0aGUgQ2FsZ2FyeSBjb3JwdXMgKi8KIAogICAgIC8qIEZpbmQgdGhlIGZpcnN0IGJpdCBsZW5n dGggd2hpY2ggY291bGQgaW5jcmVhc2U6ICovCkBAIC01NTUsMTAgKzU1MSw5IEBACiAgICAgICAg IHdoaWxlIChuICE9IDApIHsKICAgICAgICAgICAgIG0gPSBzLT5oZWFwWy0taF07CiAgICAgICAg ICAgICBpZiAobSA+IG1heF9jb2RlKSBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh0cmVlW21d LkxlbiAhPSAodW5zaWduZWQpIGJpdHMpIHsKLSAgICAgICAgICAgICAgICBUcmFjZSgoc3RkZXJy LCJjb2RlICVkIGJpdHMgJWQtPiVkXG4iLCBtLCB0cmVlW21dLkxlbiwgYml0cykpOwotICAgICAg ICAgICAgICAgIHMtPm9wdF9sZW4gKz0gKChsb25nKWJpdHMgLSAobG9uZyl0cmVlW21dLkxlbikK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoobG9uZyl0cmVlW21dLkZyZXE7CisgICAg ICAgICAgICBpZiAoKHVuc2lnbmVkKSB0cmVlW21dLkxlbiAhPSAodW5zaWduZWQpIGJpdHMpIHsK KyAgICAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwiY29kZSAlZCBiaXRzICVkLT4lZFxuIiwg bSwgdHJlZVttXS5MZW4sIGJpdHMpKTsKKyAgICAgICAgICAgICAgICBzLT5vcHRfbGVuICs9ICgo dWxnKWJpdHMgLSB0cmVlW21dLkxlbikgKiB0cmVlW21dLkZyZXE7CiAgICAgICAgICAgICAgICAg dHJlZVttXS5MZW4gPSAodXNoKWJpdHM7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuLS07 CkBAIC01ODAsNyArNTc1LDcgQEAKICAgICB1c2hmICpibF9jb3VudDsgICAgICAgICAgICAvKiBu dW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoICovCiB7CiAgICAgdXNoIG5leHRfY29k ZVtNQVhfQklUUysxXTsgLyogbmV4dCBjb2RlIHZhbHVlIGZvciBlYWNoIGJpdCBsZW5ndGggKi8K LSAgICB1c2ggY29kZSA9IDA7ICAgICAgICAgICAgICAvKiBydW5uaW5nIGNvZGUgdmFsdWUgKi8K KyAgICB1bnNpZ25lZCBjb2RlID0gMDsgICAgICAgICAvKiBydW5uaW5nIGNvZGUgdmFsdWUgKi8K ICAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi8KICAgICBpbnQg bjsgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlIGluZGV4ICovCiAKQEAgLTU4OCw3ICs1ODMs OCBAQAogICAgICAqIHdpdGhvdXQgYml0IHJldmVyc2FsLgogICAgICAqLwogICAgIGZvciAoYml0 cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewotICAgICAgICBuZXh0X2NvZGVbYml0 c10gPSBjb2RlID0gKGNvZGUgKyBibF9jb3VudFtiaXRzLTFdKSA8PCAxOworICAgICAgICBjb2Rl ID0gKGNvZGUgKyBibF9jb3VudFtiaXRzLTFdKSA8PCAxOworICAgICAgICBuZXh0X2NvZGVbYml0 c10gPSAodXNoKWNvZGU7CiAgICAgfQogICAgIC8qIENoZWNrIHRoYXQgdGhlIGJpdCBjb3VudHMg aW4gYmxfY291bnQgYXJlIGNvbnNpc3RlbnQuIFRoZSBsYXN0IGNvZGUKICAgICAgKiBtdXN0IGJl IGFsbCBvbmVzLgpAQCAtNjAxLDcgKzU5Nyw3IEBACiAgICAgICAgIGludCBsZW4gPSB0cmVlW25d LkxlbjsKICAgICAgICAgaWYgKGxlbiA9PSAwKSBjb250aW51ZTsKICAgICAgICAgLyogTm93IHJl dmVyc2UgdGhlIGJpdHMgKi8KLSAgICAgICAgdHJlZVtuXS5Db2RlID0gYmlfcmV2ZXJzZShuZXh0 X2NvZGVbbGVuXSsrLCBsZW4pOworICAgICAgICB0cmVlW25dLkNvZGUgPSAodXNoKWJpX3JldmVy c2UobmV4dF9jb2RlW2xlbl0rKywgbGVuKTsKIAogICAgICAgICBUcmFjZWN2KHRyZWUgIT0gc3Rh dGljX2x0cmVlLCAoc3RkZXJyLCJcbm4gJTNkICVjIGwgJTJkIGMgJTR4ICgleCkgIiwKICAgICAg ICAgICAgICBuLCAoaXNncmFwaChuKSA/IG4gOiAnICcpLCBsZW4sIHRyZWVbbl0uQ29kZSwgbmV4 dF9jb2RlW2xlbl0tMSkpOwpAQCAtODIzLDcgKzgxOSw3IEBACiAgICAgICAgIGlmIChzLT5ibF90 cmVlW2JsX29yZGVyW21heF9ibGluZGV4XV0uTGVuICE9IDApIGJyZWFrOwogICAgIH0KICAgICAv KiBVcGRhdGUgb3B0X2xlbiB0byBpbmNsdWRlIHRoZSBiaXQgbGVuZ3RoIHRyZWUgYW5kIGNvdW50 cyAqLwotICAgIHMtPm9wdF9sZW4gKz0gMyoobWF4X2JsaW5kZXgrMSkgKyA1KzUrNDsKKyAgICBz LT5vcHRfbGVuICs9IDMqKCh1bGcpbWF4X2JsaW5kZXgrMSkgKyA1KzUrNDsKICAgICBUcmFjZXYo KHN0ZGVyciwgIlxuZHluIHRyZWVzOiBkeW4gJWxkLCBzdGF0ICVsZCIsCiAgICAgICAgICAgICBz LT5vcHRfbGVuLCBzLT5zdGF0aWNfbGVuKSk7CiAKQEAgLTg2NCw2NSArODYwLDU5IEBACiAvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KICAqIFNlbmQgYSBzdG9yZWQgYmxvY2sKICAqLwotdm9pZCBfdHJf c3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgZW9mKQordm9pZCBaTElCX0lOVEVSTkFM IF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KQogICAgIGRlZmxhdGVf c3RhdGUgKnM7CiAgICAgY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5wdXQgYmxvY2sgKi8KICAgICB1 bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KLSAgICBpbnQgZW9m OyAgICAgICAgICAvKiB0cnVlIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAq LworICAgIGludCBsYXN0OyAgICAgICAgIC8qIG9uZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2Nr IGZvciBhIGZpbGUgKi8KIHsKLSAgICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSzw8MSkrZW9m LCAzKTsgIC8qIHNlbmQgYmxvY2sgdHlwZSAqLwotI2lmZGVmIERFQlVHCisgICAgc2VuZF9iaXRz KHMsIChTVE9SRURfQkxPQ0s8PDEpK2xhc3QsIDMpOyAgICAvKiBzZW5kIGJsb2NrIHR5cGUgKi8K KyAgICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCisg ICAgcHV0X3Nob3J0KHMsICh1c2gpc3RvcmVkX2xlbik7CisgICAgcHV0X3Nob3J0KHMsICh1c2gp fnN0b3JlZF9sZW4pOworICAgIHptZW1jcHkocy0+cGVuZGluZ19idWYgKyBzLT5wZW5kaW5nLCAo Qnl0ZWYgKilidWYsIHN0b3JlZF9sZW4pOworICAgIHMtPnBlbmRpbmcgKz0gc3RvcmVkX2xlbjsK KyNpZmRlZiBaTElCX0RFQlVHCiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gPSAocy0+Y29tcHJlc3Nl ZF9sZW4gKyAzICsgNykgJiAodWxnKX43TDsKICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAoc3Rv cmVkX2xlbiArIDQpIDw8IDM7CisgICAgcy0+Yml0c19zZW50ICs9IDIqMTY7CisgICAgcy0+Yml0 c19zZW50ICs9IHN0b3JlZF9sZW48PDM7CiAjZW5kaWYKLSAgICBjb3B5X2Jsb2NrKHMsIGJ1Ziwg KHVuc2lnbmVkKXN0b3JlZF9sZW4sIDEpOyAvKiB3aXRoIGhlYWRlciAqLworfQorCisvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKyAqIEZsdXNoIHRoZSBiaXRzIGluIHRoZSBiaXQgYnVmZmVyIHRvIHBl bmRpbmcgb3V0cHV0IChsZWF2ZXMgYXQgbW9zdCA3IGJpdHMpCisgKi8KK3ZvaWQgWkxJQl9JTlRF Uk5BTCBfdHJfZmx1c2hfYml0cyhzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgYmlf Zmx1c2gocyk7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogU2VuZCBvbmUgZW1wdHkg c3RhdGljIGJsb2NrIHRvIGdpdmUgZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZS4KICAqIFRo aXMgdGFrZXMgMTAgYml0cywgb2Ygd2hpY2ggNyBtYXkgcmVtYWluIGluIHRoZSBiaXQgYnVmZmVy LgotICogVGhlIGN1cnJlbnQgaW5mbGF0ZSBjb2RlIHJlcXVpcmVzIDkgYml0cyBvZiBsb29rYWhl YWQuIElmIHRoZQotICogbGFzdCB0d28gY29kZXMgZm9yIHRoZSBwcmV2aW91cyBibG9jayAocmVh bCBjb2RlIHBsdXMgRU9CKSB3ZXJlIGNvZGVkCi0gKiBvbiA1IGJpdHMgb3IgbGVzcywgaW5mbGF0 ZSBtYXkgaGF2ZSBvbmx5IDUrMyBiaXRzIG9mIGxvb2thaGVhZCB0byBkZWNvZGUKLSAqIHRoZSBs YXN0IHJlYWwgY29kZS4gSW4gdGhpcyBjYXNlIHdlIHNlbmQgdHdvIGVtcHR5IHN0YXRpYyBibG9j a3MgaW5zdGVhZAotICogb2Ygb25lLiAoVGhlcmUgYXJlIG5vIHByb2JsZW1zIGlmIHRoZSBwcmV2 aW91cyBibG9jayBpcyBzdG9yZWQgb3IgZml4ZWQuKQotICogVG8gc2ltcGxpZnkgdGhlIGNvZGUs IHdlIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBvZiBsYXN0IHJlYWwgY29kZSBlbmNvZGVkCi0gKiBv biBvbmUgYml0IG9ubHkuCiAgKi8KLXZvaWQgX3RyX2FsaWduKHMpCit2b2lkIFpMSUJfSU5URVJO QUwgX3RyX2FsaWduKHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsKICAgICBzZW5kX2JpdHMo cywgU1RBVElDX1RSRUVTPDwxLCAzKTsKICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0 aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogICAgIHMtPmNvbXBy ZXNzZWRfbGVuICs9IDEwTDsgLyogMyBmb3IgYmxvY2sgdHlwZSwgNyBmb3IgRU9CICovCiAjZW5k aWYKICAgICBiaV9mbHVzaChzKTsKLSAgICAvKiBPZiB0aGUgMTAgYml0cyBmb3IgdGhlIGVtcHR5 IGJsb2NrLCB3ZSBoYXZlIGFscmVhZHkgc2VudAotICAgICAqICgxMCAtIGJpX3ZhbGlkKSBiaXRz LiBUaGUgbG9va2FoZWFkIGZvciB0aGUgbGFzdCByZWFsIGNvZGUgKGJlZm9yZQotICAgICAqIHRo ZSBFT0Igb2YgdGhlIHByZXZpb3VzIGJsb2NrKSB3YXMgdGh1cyBhdCBsZWFzdCBvbmUgcGx1cyB0 aGUgbGVuZ3RoCi0gICAgICogb2YgdGhlIEVPQiBwbHVzIHdoYXQgd2UgaGF2ZSBqdXN0IHNlbnQg b2YgdGhlIGVtcHR5IHN0YXRpYyBibG9jay4KLSAgICAgKi8KLSAgICBpZiAoMSArIHMtPmxhc3Rf ZW9iX2xlbiArIDEwIC0gcy0+YmlfdmFsaWQgPCA5KSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCBT VEFUSUNfVFJFRVM8PDEsIDMpOwotICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0 aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEw TDsKLSNlbmRpZgotICAgICAgICBiaV9mbHVzaChzKTsKLSAgICB9Ci0gICAgcy0+bGFzdF9lb2Jf bGVuID0gNzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBEZXRlcm1pbmUgdGhlIGJl c3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWMK LSAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6 aXAgZmlsZS4KKyAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgd3JpdGUgb3V0IHRoZSBlbmNvZGVkIGJs b2NrLgogICovCi12b2lkIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGVvZikK K3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBs YXN0KQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5w dXQgYmxvY2ssIG9yIE5VTEwgaWYgdG9vIG9sZCAqLwogICAgIHVsZyBzdG9yZWRfbGVuOyAgIC8q IGxlbmd0aCBvZiBpbnB1dCBibG9jayAqLwotICAgIGludCBlb2Y7ICAgICAgICAgIC8qIHRydWUg aWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovCisgICAgaW50IGxhc3Q7ICAg ICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqLwogewog ICAgIHVsZyBvcHRfbGVuYiwgc3RhdGljX2xlbmI7IC8qIG9wdF9sZW4gYW5kIHN0YXRpY19sZW4g aW4gYnl0ZXMgKi8KICAgICBpbnQgbWF4X2JsaW5kZXggPSAwOyAgLyogaW5kZXggb2YgbGFzdCBi aXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHplcm8gZnJlcSAqLwpAQCAtOTMwLDggKzkyMCw5IEBACiAg ICAgLyogQnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgdW5sZXNzIGEgc3RvcmVkIGJsb2NrIGlzIGZv cmNlZCAqLwogICAgIGlmIChzLT5sZXZlbCA+IDApIHsKIAotICAgICAgICAgLyogQ2hlY2sgaWYg dGhlIGZpbGUgaXMgYXNjaWkgb3IgYmluYXJ5ICovCi0gICAgICAgIGlmIChzLT5zdHJtLT5kYXRh X3R5cGUgPT0gWl9VTktOT1dOKSBzZXRfZGF0YV90eXBlKHMpOworICAgICAgICAvKiBDaGVjayBp ZiB0aGUgZmlsZSBpcyBiaW5hcnkgb3IgdGV4dCAqLworICAgICAgICBpZiAocy0+c3RybS0+ZGF0 YV90eXBlID09IFpfVU5LTk9XTikKKyAgICAgICAgICAgIHMtPnN0cm0tPmRhdGFfdHlwZSA9IGRl dGVjdF9kYXRhX3R5cGUocyk7CiAKICAgICAgICAgLyogQ29uc3RydWN0IHRoZSBsaXRlcmFsIGFu ZCBkaXN0YW5jZSB0cmVlcyAqLwogICAgICAgICBidWlsZF90cmVlKHMsICh0cmVlX2Rlc2MgKiko JihzLT5sX2Rlc2MpKSk7CkBAIC05NzcsMjQgKzk2OCwyNiBAQAogICAgICAgICAgKiBzdWNjZXNz ZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG8KICAg ICAgICAgICogdHJhbnNmb3JtIGEgYmxvY2sgaW50byBhIHN0b3JlZCBibG9jay4KICAgICAgICAg ICovCi0gICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBlb2YpOwor ICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCk7CiAKICNp ZmRlZiBGT1JDRV9TVEFUSUMKICAgICB9IGVsc2UgaWYgKHN0YXRpY19sZW5iID49IDApIHsgLyog Zm9yY2Ugc3RhdGljIHRyZWVzICovCiAjZWxzZQotICAgIH0gZWxzZSBpZiAoc3RhdGljX2xlbmIg PT0gb3B0X2xlbmIpIHsKKyAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpfRklYRUQgfHwg c3RhdGljX2xlbmIgPT0gb3B0X2xlbmIpIHsKICNlbmRpZgotICAgICAgICBzZW5kX2JpdHMocywg KFNUQVRJQ19UUkVFUzw8MSkrZW9mLCAzKTsKLSAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGN0 X2RhdGEgKilzdGF0aWNfbHRyZWUsIChjdF9kYXRhICopc3RhdGljX2R0cmVlKTsKLSNpZmRlZiBE RUJVRworICAgICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUzw8MSkrbGFzdCwgMyk7Cisg ICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopc3RhdGljX2x0cmVlLAor ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7Cisj aWZkZWYgWkxJQl9ERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+c3Rh dGljX2xlbjsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCAoRFlO X1RSRUVTPDwxKStlb2YsIDMpOworICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUzw8MSkr bGFzdCwgMyk7CiAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMtPmxfZGVzYy5tYXhfY29kZSsx LCBzLT5kX2Rlc2MubWF4X2NvZGUrMSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5k ZXgrMSk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVl LCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7Ci0jaWZkZWYgREVCVUcKKyAgICAgICAgY29tcHJl c3NfYmxvY2socywgKGNvbnN0IGN0X2RhdGEgKilzLT5keW5fbHRyZWUsCisgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2R0cmVlKTsKKyNpZmRlZiBaTElCX0RF QlVHCiAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDMgKyBzLT5vcHRfbGVuOwogI2VuZGlm CiAgICAgfQpAQCAtMTAwNCwyMSArOTk3LDIxIEBACiAgICAgICovCiAgICAgaW5pdF9ibG9jayhz KTsKIAotICAgIGlmIChlb2YpIHsKKyAgICBpZiAobGFzdCkgewogICAgICAgICBiaV93aW5kdXAo cyk7Ci0jaWZkZWYgREVCVUcKKyNpZmRlZiBaTElCX0RFQlVHCiAgICAgICAgIHMtPmNvbXByZXNz ZWRfbGVuICs9IDc7ICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCiAjZW5kaWYKICAgICB9 CiAgICAgVHJhY2V2KChzdGRlcnIsIlxuY29tcHJsZW4gJWx1KCVsdSkgIiwgcy0+Y29tcHJlc3Nl ZF9sZW4+PjMsCi0gICAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuLTcqZW9mKSk7CisgICAgICAg ICAgIHMtPmNvbXByZXNzZWRfbGVuLTcqbGFzdCkpOwogfQogCiAvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KICAqIFNhdmUgdGhlIG1hdGNoIGluZm8gYW5kIHRhbGx5IHRoZSBmcmVxdWVuY3kgY291bnRz LiBSZXR1cm4gdHJ1ZSBpZgogICogdGhlIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkLgog ICovCi1pbnQgX3RyX3RhbGx5IChzLCBkaXN0LCBsYykKK2ludCBaTElCX0lOVEVSTkFMIF90cl90 YWxseSAocywgZGlzdCwgbGMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICB1bnNpZ25lZCBk aXN0OyAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi8KICAgICB1bnNpZ25lZCBsYzsg ICAgLyogbWF0Y2ggbGVuZ3RoLU1JTl9NQVRDSCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdD09 MCkgKi8KQEAgLTEwNzAsOCArMTA2Myw4IEBACiAgKi8KIGxvY2FsIHZvaWQgY29tcHJlc3NfYmxv Y2socywgbHRyZWUsIGR0cmVlKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgY3RfZGF0YSAq bHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLwotICAgIGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5j ZSB0cmVlICovCisgICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLwor ICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCiB7CiAgICAgdW5z aWduZWQgZGlzdDsgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwogICAgIGlu dCBsYzsgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBk aXN0ID09IDApICovCkBAIC0xMTAxLDcgKzEwOTQsNyBAQAogICAgICAgICAgICAgc2VuZF9jb2Rl KHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqLwogICAg ICAgICAgICAgZXh0cmEgPSBleHRyYV9kYml0c1tjb2RlXTsKICAgICAgICAgICAgIGlmIChleHRy YSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZGlzdCAtPSBiYXNlX2Rpc3RbY29kZV07CisgICAg ICAgICAgICAgICAgZGlzdCAtPSAodW5zaWduZWQpYmFzZV9kaXN0W2NvZGVdOwogICAgICAgICAg ICAgICAgIHNlbmRfYml0cyhzLCBkaXN0LCBleHRyYSk7ICAgLyogc2VuZCB0aGUgZXh0cmEgZGlz dGFuY2UgYml0cyAqLwogICAgICAgICAgICAgfQogICAgICAgICB9IC8qIGxpdGVyYWwgb3IgbWF0 Y2ggcGFpciA/ICovCkBAIC0xMTEzLDI1ICsxMTA2LDQ4IEBACiAgICAgfSB3aGlsZSAobHggPCBz LT5sYXN0X2xpdCk7CiAKICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7Ci0gICAg cy0+bGFzdF9lb2JfbGVuID0gbHRyZWVbRU5EX0JMT0NLXS5MZW47CiB9CiAKIC8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotICogU2V0IHRoZSBkYXRhIHR5cGUgdG8gQVNDSUkgb3IgQklOQVJZLCB1c2lu ZyBhIGNydWRlIGFwcHJveGltYXRpb246Ci0gKiBiaW5hcnkgaWYgbW9yZSB0aGFuIDIwJSBvZiB0 aGUgYnl0ZXMgYXJlIDw9IDYgb3IgPj0gMTI4LCBhc2NpaSBvdGhlcndpc2UuCi0gKiBJTiBhc3Nl cnRpb246IHRoZSBmaWVsZHMgZnJlcSBvZiBkeW5fbHRyZWUgYXJlIHNldCBhbmQgdGhlIHRvdGFs IG9mIGFsbAotICogZnJlcXVlbmNpZXMgZG9lcyBub3QgZXhjZWVkIDY0SyAodG8gZml0IGluIGFu IGludCBvbiAxNiBiaXQgbWFjaGluZXMpLgorICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBU RVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisgKiAtIFRFWFQg aWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6CisgKiAgICBhKSBUaGVy ZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhl CisgKiAgICAgICAiYmxhY2sgbGlzdCIgKDAuLjYsIDE0Li4yNSwgMjguLjMxKS4KKyAqICAgIGIp IFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwcmludGFibGUgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0 aGUKKyAqICAgICAgICJ3aGl0ZSBsaXN0IiAoOSB7VEFCfSwgMTAge0xGfSwgMTMge0NSfSwgMzIu LjI1NSkuCisgKiAtIEJJTkFSWSBvdGhlcndpc2UuCisgKiAtIFRoZSBmb2xsb3dpbmcgcGFydGlh bGx5LXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBmb3JtIGEKKyAqICAgImdyYXkgbGlzdCIg dGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobToKKyAqICAgKDcge0JF TH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS4KKyAqIElO IGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LgogICovCi1s b2NhbCB2b2lkIHNldF9kYXRhX3R5cGUocykKK2xvY2FsIGludCBkZXRlY3RfZGF0YV90eXBlKHMp CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsKLSAgICBpbnQgbiA9IDA7Ci0gICAgdW5zaWduZWQg YXNjaWlfZnJlcSA9IDA7Ci0gICAgdW5zaWduZWQgYmluX2ZyZXEgPSAwOwotICAgIHdoaWxlIChu IDwgNykgICAgICAgIGJpbl9mcmVxICs9IHMtPmR5bl9sdHJlZVtuKytdLkZyZXE7Ci0gICAgd2hp bGUgKG4gPCAxMjgpICAgIGFzY2lpX2ZyZXEgKz0gcy0+ZHluX2x0cmVlW24rK10uRnJlcTsKLSAg ICB3aGlsZSAobiA8IExJVEVSQUxTKSBiaW5fZnJlcSArPSBzLT5keW5fbHRyZWVbbisrXS5GcmVx OwotICAgIHMtPnN0cm0tPmRhdGFfdHlwZSA9IGJpbl9mcmVxID4gKGFzY2lpX2ZyZXEgPj4gMikg PyBaX0JJTkFSWSA6IFpfQVNDSUk7CisgICAgLyogYmxhY2tfbWFzayBpcyB0aGUgYml0IG1hc2sg b2YgYmxhY2stbGlzdGVkIGJ5dGVzCisgICAgICogc2V0IGJpdHMgMC4uNiwgMTQuLjI1LCBhbmQg MjguLjMxCisgICAgICogMHhmM2ZmYzA3ZiA9IGJpbmFyeSAxMTExMDAxMTExMTExMTExMTEwMDAw MDAwMTExMTExMQorICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgYmxhY2tfbWFzayA9IDB4ZjNm ZmMwN2ZVTDsKKyAgICBpbnQgbjsKKworICAgIC8qIENoZWNrIGZvciBub24tdGV4dHVhbCAoImJs YWNrLWxpc3RlZCIpIGJ5dGVzLiAqLworICAgIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxh Y2tfbWFzayA+Pj0gMSkKKyAgICAgICAgaWYgKChibGFja19tYXNrICYgMSkgJiYgKHMtPmR5bl9s dHJlZVtuXS5GcmVxICE9IDApKQorICAgICAgICAgICAgcmV0dXJuIFpfQklOQVJZOworCisgICAg LyogQ2hlY2sgZm9yIHRleHR1YWwgKCJ3aGl0ZS1saXN0ZWQiKSBieXRlcy4gKi8KKyAgICBpZiAo cy0+ZHluX2x0cmVlWzldLkZyZXEgIT0gMCB8fCBzLT5keW5fbHRyZWVbMTBdLkZyZXEgIT0gMAor ICAgICAgICAgICAgfHwgcy0+ZHluX2x0cmVlWzEzXS5GcmVxICE9IDApCisgICAgICAgIHJldHVy biBaX1RFWFQ7CisgICAgZm9yIChuID0gMzI7IG4gPCBMSVRFUkFMUzsgbisrKQorICAgICAgICBp ZiAocy0+ZHluX2x0cmVlW25dLkZyZXEgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBaX1RFWFQ7 CisKKyAgICAvKiBUaGVyZSBhcmUgbm8gImJsYWNrLWxpc3RlZCIgb3IgIndoaXRlLWxpc3RlZCIg Ynl0ZXM6CisgICAgICogdGhpcyBzdHJlYW0gZWl0aGVyIGlzIGVtcHR5IG9yIGhhcyB0b2xlcmF0 ZWQgKCJncmF5LWxpc3RlZCIpIGJ5dGVzIG9ubHkuCisgICAgICovCisgICAgcmV0dXJuIFpfQklO QVJZOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTExODEsMzUgKzExOTcsNyBAQAog ICAgIH0KICAgICBzLT5iaV9idWYgPSAwOwogICAgIHMtPmJpX3ZhbGlkID0gMDsKLSNpZmRlZiBE RUJVRworI2lmZGVmIFpMSUJfREVCVUcKICAgICBzLT5iaXRzX3NlbnQgPSAocy0+Yml0c19zZW50 KzcpICYgfjc7CiAjZW5kaWYKIH0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5IGEg c3RvcmVkIGJsb2NrLCBzdG9yaW5nIGZpcnN0IHRoZSBsZW5ndGggYW5kIGl0cwotICogb25lJ3Mg Y29tcGxlbWVudCBpZiByZXF1ZXN0ZWQuCi0gKi8KLWxvY2FsIHZvaWQgY29weV9ibG9jayhzLCBi dWYsIGxlbiwgaGVhZGVyKQotICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgY2hhcmYgICAgKmJ1 ZjsgICAgLyogdGhlIGlucHV0IGRhdGEgKi8KLSAgICB1bnNpZ25lZCBsZW47ICAgICAvKiBpdHMg bGVuZ3RoICovCi0gICAgaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIg bXVzdCBiZSB3cml0dGVuICovCi17Ci0gICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24g b24gYnl0ZSBib3VuZGFyeSAqLwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBs b29rYWhlYWQgZm9yIGluZmxhdGUgKi8KLQotICAgIGlmIChoZWFkZXIpIHsKLSAgICAgICAgcHV0 X3Nob3J0KHMsICh1c2gpbGVuKTsKLSAgICAgICAgcHV0X3Nob3J0KHMsICh1c2gpfmxlbik7Ci0j aWZkZWYgREVCVUcKLSAgICAgICAgcy0+Yml0c19zZW50ICs9IDIqMTY7Ci0jZW5kaWYKLSAgICB9 Ci0jaWZkZWYgREVCVUcKLSAgICBzLT5iaXRzX3NlbnQgKz0gKHVsZylsZW48PDM7Ci0jZW5kaWYK LSAgICB3aGlsZSAobGVuLS0pIHsKLSAgICAgICAgcHV0X2J5dGUocywgKmJ1ZisrKTsKLSAgICB9 Ci19CmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96 bGliL3RyZWVzLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi90cmVlcy5oCVdlZCBNYXkgMjcg MDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMvc3JjL2NtZC9ncy96bGliL3RyZWVzLmgJV2Vk IE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBAIC03MCw3ICs3MCw3IEBACiB7ezE5fSx7IDV9 fSwge3sxMX0seyA1fX0sIHt7Mjd9LHsgNX19LCB7eyA3fSx7IDV9fSwge3syM30seyA1fX0KIH07 CiAKLWNvbnN0IHVjaCBfZGlzdF9jb2RlW0RJU1RfQ09ERV9MRU5dID0geworY29uc3QgdWNoIFpM SUJfSU5URVJOQUwgX2Rpc3RfY29kZVtESVNUX0NPREVfTEVOXSA9IHsKICAwLCAgMSwgIDIsICAz LCAgNCwgIDQsICA1LCAgNSwgIDYsICA2LCAgNiwgIDYsICA3LCAgNywgIDcsICA3LCAgOCwgIDgs ICA4LCAgOCwKICA4LCAgOCwgIDgsICA4LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDks IDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAs IDEwLCAxMCwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwK QEAgLTk5LDcgKzk5LDcgQEAKIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5 LCAyOSwgMjkKIH07CiAKLWNvbnN0IHVjaCBfbGVuZ3RoX2NvZGVbTUFYX01BVENILU1JTl9NQVRD SCsxXT0geworY29uc3QgdWNoIFpMSUJfSU5URVJOQUwgX2xlbmd0aF9jb2RlW01BWF9NQVRDSC1N SU5fTUFUQ0grMV09IHsKICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA4LCAg OSwgIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEyLCAxMiwKIDEzLCAxMywgMTMsIDEzLCAx NCwgMTQsIDE0LCAxNCwgMTUsIDE1LCAxNSwgMTUsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2 LCAxNiwKIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsIDE4 LCAxOCwgMTgsIDE4LCAxOSwgMTksIDE5LCAxOSwKZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdi NDQ2Y2M5N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvdW5jb21wci5jCi0tLSBhL3N5cy9zcmMvY21k L2dzL3psaWIvdW5jb21wci5jCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9z eXMvc3JjL2NtZC9ncy96bGliL3VuY29tcHIuYwlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAz MDAKQEAgLTEsNjEgKzEsOTMgQEAKIC8qIHVuY29tcHIuYyAtLSBkZWNvbXByZXNzIGEgbWVtb3J5 IGJ1ZmZlcgotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgSmVhbi1sb3VwIEdhaWxseS4KKyAq IENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDEwLCAyMDE0LCAyMDE2IEplYW4tbG91cCBHYWls bHksIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNl LCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCi0vKiBAKCMpICRJZDogdW5j b21wci5jLHYgMS4xLjEuMSAyMDA1LzA0LzI0IDIxOjM5OjM4IGdpbGVzIEV4cCAkICovCisvKiBA KCMpICRJZCQgKi8KIAogI2RlZmluZSBaTElCX0lOVEVSTkFMCiAjaW5jbHVkZSAiemxpYi5oIgog CiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgRGVjb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVm ZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcwotICAgdGhlIGJ5 dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRo ZSB0b3RhbAotICAgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJl IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZQotICAgZW50aXJlIHVuY29tcHJlc3NlZCBkYXRhLiAo VGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgaGF2ZQotICAgYmVlbiBzYXZl ZCBwcmV2aW91c2x5IGJ5IHRoZSBjb21wcmVzc29yIGFuZCB0cmFuc21pdHRlZCB0byB0aGUgZGVj b21wcmVzc29yCi0gICBieSBzb21lIG1lY2hhbmlzbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlz IGNvbXByZXNzaW9uIGxpYnJhcnkuKQotICAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1 YWwgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIuCi0gICAgIFRoaXMgZnVuY3Rpb24gY2Fu IGJlIHVzZWQgdG8gZGVjb21wcmVzcyBhIHdob2xlIGZpbGUgYXQgb25jZSBpZiB0aGUKLSAgIGlu cHV0IGZpbGUgaXMgbW1hcCdlZC4KKyAgICAgRGVjb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVy IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gICpzb3VyY2VMZW4gaXMKKyAgIHRoZSBieXRl IGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVXBvbiBlbnRyeSwgKmRlc3RMZW4gaXMgdGhl IHRvdGFsIHNpemUKKyAgIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUg bGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGVudGlyZQorICAgdW5jb21wcmVzc2VkIGRhdGEuIChU aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBoYXZlIGJlZW4gc2F2ZWQKKyAg IHByZXZpb3VzbHkgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBkZWNv bXByZXNzb3IgYnkgc29tZQorICAgbWVjaGFuaXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMg Y29tcHJlc3Npb24gbGlicmFyeS4pIFVwb24gZXhpdCwKKyAgICpkZXN0TGVuIGlzIHRoZSBzaXpl IG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBhbmQgKnNvdXJjZUxlbiBpcyB0aGUgbnVtYmVyCisg ICBvZiBzb3VyY2UgYnl0ZXMgY29uc3VtZWQuIFVwb24gcmV0dXJuLCBzb3VyY2UgKyAqc291cmNl TGVuIHBvaW50cyB0byB0aGUKKyAgIGZpcnN0IHVudXNlZCBpbnB1dCBieXRlLgogCi0gICAgIHVu Y29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdh cyBub3QKLSAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5v dWdoIHJvb20gaW4gdGhlIG91dHB1dAotICAgYnVmZmVyLCBvciBaX0RBVEFfRVJST1IgaWYgdGhl IGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZC4KKyAgICAgdW5jb21wcmVzcyByZXR1cm5zIFpfT0sg aWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9y eSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0 IGJ1ZmZlciwgb3IKKyAgIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVw dGVkLCBpbmNsdWRpbmcgaWYgdGhlIGlucHV0IGRhdGEgaXMKKyAgIGFuIGluY29tcGxldGUgemxp YiBzdHJlYW0uCiAqLworaW50IFpFWFBPUlQgdW5jb21wcmVzczIgKGRlc3QsIGRlc3RMZW4sIHNv dXJjZSwgc291cmNlTGVuKQorICAgIEJ5dGVmICpkZXN0OworICAgIHVMb25nZiAqZGVzdExlbjsK KyAgICBjb25zdCBCeXRlZiAqc291cmNlOworICAgIHVMb25nICpzb3VyY2VMZW47Cit7CisgICAg el9zdHJlYW0gc3RyZWFtOworICAgIGludCBlcnI7CisgICAgY29uc3QgdUludCBtYXggPSAodUlu dCktMTsKKyAgICB1TG9uZyBsZW4sIGxlZnQ7CisgICAgQnl0ZSBidWZbMV07ICAgIC8qIGZvciBk ZXRlY3Rpb24gb2YgaW5jb21wbGV0ZSBzdHJlYW0gd2hlbiAqZGVzdExlbiA9PSAwICovCisKKyAg ICBsZW4gPSAqc291cmNlTGVuOworICAgIGlmICgqZGVzdExlbikgeworICAgICAgICBsZWZ0ID0g KmRlc3RMZW47CisgICAgICAgICpkZXN0TGVuID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAg ICAgIGxlZnQgPSAxOworICAgICAgICBkZXN0ID0gYnVmOworICAgIH0KKworICAgIHN0cmVhbS5u ZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CisgICAgc3RyZWFtLmF2YWlsX2luID0g MDsKKyAgICBzdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKKyAgICBzdHJlYW0uemZyZWUg PSAoZnJlZV9mdW5jKTA7CisgICAgc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKKworICAgIGVy ciA9IGluZmxhdGVJbml0KCZzdHJlYW0pOworICAgIGlmIChlcnIgIT0gWl9PSykgcmV0dXJuIGVy cjsKKworICAgIHN0cmVhbS5uZXh0X291dCA9IGRlc3Q7CisgICAgc3RyZWFtLmF2YWlsX291dCA9 IDA7CisKKyAgICBkbyB7CisgICAgICAgIGlmIChzdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKKyAg ICAgICAgICAgIHN0cmVhbS5hdmFpbF9vdXQgPSBsZWZ0ID4gKHVMb25nKW1heCA/IG1heCA6ICh1 SW50KWxlZnQ7CisgICAgICAgICAgICBsZWZ0IC09IHN0cmVhbS5hdmFpbF9vdXQ7CisgICAgICAg IH0KKyAgICAgICAgaWYgKHN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBzdHJl YW0uYXZhaWxfaW4gPSBsZW4gPiAodUxvbmcpbWF4ID8gbWF4IDogKHVJbnQpbGVuOworICAgICAg ICAgICAgbGVuIC09IHN0cmVhbS5hdmFpbF9pbjsKKyAgICAgICAgfQorICAgICAgICBlcnIgPSBp bmZsYXRlKCZzdHJlYW0sIFpfTk9fRkxVU0gpOworICAgIH0gd2hpbGUgKGVyciA9PSBaX09LKTsK KworICAgICpzb3VyY2VMZW4gLT0gbGVuICsgc3RyZWFtLmF2YWlsX2luOworICAgIGlmIChkZXN0 ICE9IGJ1ZikKKyAgICAgICAgKmRlc3RMZW4gPSBzdHJlYW0udG90YWxfb3V0OworICAgIGVsc2Ug aWYgKHN0cmVhbS50b3RhbF9vdXQgJiYgZXJyID09IFpfQlVGX0VSUk9SKQorICAgICAgICBsZWZ0 ID0gMTsKKworICAgIGluZmxhdGVFbmQoJnN0cmVhbSk7CisgICAgcmV0dXJuIGVyciA9PSBaX1NU UkVBTV9FTkQgPyBaX09LIDoKKyAgICAgICAgICAgZXJyID09IFpfTkVFRF9ESUNUID8gWl9EQVRB X0VSUk9SICA6CisgICAgICAgICAgIGVyciA9PSBaX0JVRl9FUlJPUiAmJiBsZWZ0ICsgc3RyZWFt LmF2YWlsX291dCA/IFpfREFUQV9FUlJPUiA6CisgICAgICAgICAgIGVycjsKK30KKwogaW50IFpF WFBPUlQgdW5jb21wcmVzcyAoZGVzdCwgZGVzdExlbiwgc291cmNlLCBzb3VyY2VMZW4pCiAgICAg Qnl0ZWYgKmRlc3Q7CiAgICAgdUxvbmdmICpkZXN0TGVuOwogICAgIGNvbnN0IEJ5dGVmICpzb3Vy Y2U7CiAgICAgdUxvbmcgc291cmNlTGVuOwogewotICAgIHpfc3RyZWFtIHN0cmVhbTsKLSAgICBp bnQgZXJyOwotCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKLSAgICBzdHJl YW0uYXZhaWxfaW4gPSAodUludClzb3VyY2VMZW47Ci0gICAgLyogQ2hlY2sgZm9yIHNvdXJjZSA+ IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KLSAgICBpZiAoKHVMb25nKXN0cmVhbS5hdmFpbF9p biAhPSBzb3VyY2VMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKLQotICAgIHN0cmVhbS5uZXh0X291 dCA9IGRlc3Q7Ci0gICAgc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpkZXN0TGVuOwotICAgIGlm ICgodUxvbmcpc3RyZWFtLmF2YWlsX291dCAhPSAqZGVzdExlbikgcmV0dXJuIFpfQlVGX0VSUk9S OwotCi0gICAgc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgc3RyZWFtLnpmcmVl ID0gKGZyZWVfZnVuYykwOwotCi0gICAgZXJyID0gaW5mbGF0ZUluaXQoJnN0cmVhbSk7Ci0gICAg aWYgKGVyciAhPSBaX09LKSByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gaW5mbGF0ZSgmc3RyZWFt LCBaX0ZJTklTSCk7Ci0gICAgaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgaW5m bGF0ZUVuZCgmc3RyZWFtKTsKLSAgICAgICAgaWYgKGVyciA9PSBaX05FRURfRElDVCB8fCAoZXJy ID09IFpfQlVGX0VSUk9SICYmIHN0cmVhbS5hdmFpbF9pbiA9PSAwKSkKLSAgICAgICAgICAgIHJl dHVybiBaX0RBVEFfRVJST1I7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgICpkZXN0 TGVuID0gc3RyZWFtLnRvdGFsX291dDsKLQotICAgIGVyciA9IGluZmxhdGVFbmQoJnN0cmVhbSk7 Ci0gICAgcmV0dXJuIGVycjsKKyAgICByZXR1cm4gdW5jb21wcmVzczIoZGVzdCwgZGVzdExlbiwg c291cmNlLCAmc291cmNlTGVuKTsKIH0KZGlmZiAtciBhMDU3OGM3OThlMTAgLXIgMzdiNDQ2Y2M5 N2Y5IHN5cy9zcmMvY21kL2dzL3psaWIvemNvbmYuaAotLS0gYS9zeXMvc3JjL2NtZC9ncy96bGli L3pjb25mLmgJV2VkIE1heSAyNyAwMDowOTo0NiAyMDIwICswMjAwCisrKyBiL3N5cy9zcmMvY21k L2dzL3psaWIvemNvbmYuaAlXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAgLTAzMDAKQEAgLTEsOSAr MSw5IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Np b24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseS4K KyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE2IEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIK ICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0 IG5vdGljZSBpbiB6bGliLmgKICAqLwogCi0vKiBAKCMpICRJZDogemNvbmYuaCx2IDEuMS4xLjEg MjAwNS8wNC8yNCAyMTozOTozOCBnaWxlcyBFeHAgJCAqLworLyogQCgjKSAkSWQkICovCiAKICNp Zm5kZWYgWkNPTkZfSAogI2RlZmluZSBaQ09ORl9ICkBAIC0xMSw0OCArMTEsMTU4IEBACiAvKgog ICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5k IGxpYnJhcnkgZnVuY3Rpb25zLAogICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3Rh bmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCisgKiBFdmVuIGJldHRl ciB0aGFuIGNvbXBpbGluZyB3aXRoIC1EWl9QUkVGSVggd291bGQgYmUgdG8gdXNlIGNvbmZpZ3Vy ZSB0byBzZXQKKyAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1 cmUgLS16cHJlZml4Ii4KICAqLwotI2lmZGVmIFpfUFJFRklYCisjaWZkZWYgWl9QUkVGSVggICAg IC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX1BS RUZJWF9TRVQKKworLyogYWxsIGxpbmtlZCBzeW1ib2xzIGFuZCBpbml0IG1hY3JvcyAqLworIyAg ZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKKyMgIGRlZmluZSBfbGVu Z3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKKyMgIGRlZmluZSBfdHJfYWxpZ24gICAg ICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9f dHJfZmx1c2hfYml0cworIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVz aF9ibG9jaworIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CisjICBk ZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jaworIyAgZGVmaW5l IF90cl90YWxseSAgICAgICAgICAgICB6X190cl90YWxseQorIyAgZGVmaW5lIGFkbGVyMzIgICAg ICAgICAgICAgICB6X2FkbGVyMzIKKyMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9h ZGxlcjMyX2NvbWJpbmUKKyMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMy X2NvbWJpbmU2NAorIyAgZGVmaW5lIGFkbGVyMzJfeiAgICAgICAgICAgICB6X2FkbGVyMzJfegor IyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29t cHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAg ICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYK KyMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgorIyAgZGVmaW5lIGNyYzMy X2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKKyMgIGRlZmluZSBjcmMzMl9jb21iaW5l NjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKKyMgIGRlZmluZSBjcmMzMl96ICAgICAgICAgICAg ICAgel9jcmMzMl96CisjICBkZWZpbmUgZGVmbGF0ZSAgICAgICAgICAgICAgIHpfZGVmbGF0ZQor IyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgICAgICAgICB6X2RlZmxhdGVCb3VuZAorIyAgZGVmaW5l IGRlZmxhdGVDb3B5ICAgICAgICAgICB6X2RlZmxhdGVDb3B5CisjICBkZWZpbmUgZGVmbGF0ZUVu ZCAgICAgICAgICAgIHpfZGVmbGF0ZUVuZAorIyAgZGVmaW5lIGRlZmxhdGVHZXREaWN0aW9uYXJ5 ICB6X2RlZmxhdGVHZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgZGVmbGF0ZUluaXQgICAgICAgICAg IHpfZGVmbGF0ZUluaXQKKyMgIGRlZmluZSBkZWZsYXRlSW5pdDIgICAgICAgICAgel9kZWZsYXRl SW5pdDIKKyMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAj ICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCi0jICBkZWZpbmUg ZGVmbGF0ZSAgICAgICAgICAgICAgIHpfZGVmbGF0ZQotIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAg ICAgICAgICB6X2RlZmxhdGVFbmQKKyMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9k ZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBl bmRpbmcKKyMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKKyMg IGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBk ZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCisjICBkZWZpbmUgZGVmbGF0 ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRl U2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCisjICBkZWZpbmUgZGVmbGF0ZVR1bmUg ICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKKyMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAg el9kZWZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dl dF9jcmNfdGFibGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAg ICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9n el9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVy cm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBk ZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pj bG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAg ICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9n emNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0Cisj ICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBn emVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAg ICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pm bHVzaAorIyAgICBkZWZpbmUgZ3pmcmVhZCAgICAgICAgICAgICAgIHpfZ3pmcmVhZAorIyAgICBk ZWZpbmUgZ3pmd3JpdGUgICAgICAgICAgICAgIHpfZ3pmd3JpdGUKKyMgICAgZGVmaW5lIGd6Z2V0 YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAg ICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRz CisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZp bmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVu ICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAg ICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cg ICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRm ICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAg ICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwor IyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBn enJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAg ICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9n enNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMK KyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUg Z3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAg ICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAg el9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUK KyMgIGVuZGlmCisjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQorIyAg ZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCisjICBkZWZpbmUgaW5m bGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKKyMgIGRlZmluZSBpbmZsYXRlQmFj a0luaXQgICAgICAgel9pbmZsYXRlQmFja0luaXQKKyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXRf ICAgICAgel9pbmZsYXRlQmFja0luaXRfCisjICBkZWZpbmUgaW5mbGF0ZUNvZGVzVXNlZCAgICAg IHpfaW5mbGF0ZUNvZGVzVXNlZAorIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2lu ZmxhdGVDb3B5CisjICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAor IyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5Cisj ICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5mbGF0ZUdldEhlYWRlcgorIyAgZGVm aW5lIGluZmxhdGVJbml0ICAgICAgICAgICB6X2luZmxhdGVJbml0CisjICBkZWZpbmUgaW5mbGF0 ZUluaXQyICAgICAgICAgIHpfaW5mbGF0ZUluaXQyCisjICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAg ICAgICAgIHpfaW5mbGF0ZUluaXQyXwogIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6 X2luZmxhdGVJbml0XwotIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUK LSMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCi0jICBkZWZpbmUg ZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwotIyAgZGVmaW5lIGRlZmxhdGVT ZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5Ci0jICBkZWZpbmUgZGVmbGF0ZUNv cHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKLSMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAg ICAgel9kZWZsYXRlUmVzZXQKLSMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZs YXRlUGFyYW1zCi0jICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5k Ci0jICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCi0jICBkZWZp bmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXworIyAgZGVmaW5lIGluZmxh dGVNYXJrICAgICAgICAgICB6X2luZmxhdGVNYXJrCisjICBkZWZpbmUgaW5mbGF0ZVByaW1lICAg ICAgICAgIHpfaW5mbGF0ZVByaW1lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpf aW5mbGF0ZVJlc2V0CisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJl c2V0MgorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAK ICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQog IyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUg aW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAotIyAgZGVmaW5lIGluZmxh dGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5Ci0jICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAg ICAgICAgIHpfaW5mbGF0ZVJlc2V0Ci0jICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpf aW5mbGF0ZUJhY2sKLSMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFj a0VuZAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZp bmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NC b3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAg ICAgICB6X3VuY29tcHJlc3MKLSMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxl cjMyCi0jICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKLSMgIGRlZmluZSBn ZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCisjICBkZWZpbmUgaW5mbGF0ZVVu ZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVWYWxpZGF0 ZSAgICAgICB6X2luZmxhdGVWYWxpZGF0ZQorIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAg ICB6X2luZmxhdGVfY29weXJpZ2h0CisjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpf aW5mbGF0ZV9mYXN0CisjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90 YWJsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAg IHpfdW5jb21wcmVzcworIyAgICBkZWZpbmUgdW5jb21wcmVzczIgICAgICAgICAgIHpfdW5jb21w cmVzczIKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9y CisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96 Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVu ZGlmCisjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwor IyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKKy8qIGFsbCB6 bGliIHR5cGVkZWZzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLwogIyAgZGVmaW5lIEJ5dGUgICAg ICAgICAgICAgICAgICB6X0J5dGUKKyMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9C eXRlZgorIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKKyMgIGRl ZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgorIyAgZGVmaW5lIGZyZWVfZnVuYyAg ICAgICAgICAgICB6X2ZyZWVfZnVuYworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pG aWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgorIyAgZGVmaW5lIGd6X2hlYWRl ciAgICAgICAgICAgICB6X2d6X2hlYWRlcgorIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAg ICB6X2d6X2hlYWRlcnAKKyMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5j CisjICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgorIyAgZGVmaW5lIG91dF9m dW5jICAgICAgICAgICAgICB6X291dF9mdW5jCiAjICBkZWZpbmUgdUludCAgICAgICAgICAgICAg ICAgIHpfdUludAorIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCiAjICBk ZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKLSMgIGRlZmluZSBCeXRlZiAgICAg ICAgICAgICAgICAgel9CeXRlZgotIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2No YXJmCi0jICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgotIyAgZGVmaW5lIHVJ bnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCiAjICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAg ICAgIHpfdUxvbmdmCisjICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKKyMg IGRlZmluZSB2b2lkcGMgICAgICAgICAgICAgICAgel92b2lkcGMKICMgIGRlZmluZSB2b2lkcGYg ICAgICAgICAgICAgICAgel92b2lkcGYKLSMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAg el92b2lkcAorCisvKiBhbGwgemxpYiBzdHJ1Y3RzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLwor IyAgZGVmaW5lIGd6X2hlYWRlcl9zICAgICAgICAgICB6X2d6X2hlYWRlcl9zCisjICBkZWZpbmUg aW50ZXJuYWxfc3RhdGUgICAgICAgIHpfaW50ZXJuYWxfc3RhdGUKKwogI2VuZGlmCiAKICNpZiBk ZWZpbmVkKF9fTVNET1NfXykgJiYgIWRlZmluZWQoTVNET1MpCkBAIC02NCw4ICsxNzQsMTAgQEAK ICNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQogIyAgZGVmaW5lIFdJ TkRPV1MKICNlbmRpZgotI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18p KSAmJiAhZGVmaW5lZChXSU4zMikKLSMgIGRlZmluZSBXSU4zMgorI2lmIGRlZmluZWQoX1dJTjMy KSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQorIyAgaWZuZGVm IFdJTjMyCisjICAgIGRlZmluZSBXSU4zMgorIyAgZW5kaWYKICNlbmRpZgogI2lmIChkZWZpbmVk KE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQo V0lOMzIpCiAjICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYm ICFkZWZpbmVkKF9fMzg2X18pCkBAIC0xMTksOSArMjMxLDI1IEBACiAjICBlbmRpZgogI2VuZGlm CiAKLS8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6 ICovCi0jaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRI SU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKLSMgIGRlZmluZSBOT19EVU1NWV9ERUNMCisjaWYgZGVm aW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3Qg Y29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKKyNpZmRlZiBaX1NPTE8K KyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyNlbHNlCisjICBkZWZpbmUgel9s b25nbG9uZyBsb25nIGxvbmcKKyMgIGlmIGRlZmluZWQoTk9fU0laRV9UKQorICAgICB0eXBlZGVm IHVuc2lnbmVkIE5PX1NJWkVfVCB6X3NpemVfdDsKKyMgIGVsaWYgZGVmaW5lZChTVERDKQorIyAg ICBpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgdHlwZWRlZiBzaXplX3Qgel9zaXplX3Q7CisjICBl bHNlCisgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X3NpemVfdDsKKyMgIGVuZGlmCisjICB1 bmRlZiB6X2xvbmdsb25nCiAjZW5kaWYKIAogLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwg aW4gZGVmbGF0ZUluaXQyICovCkBAIC0xNTEsNyArMjc5LDcgQEAKICBPZiBjb3Vyc2UgdGhpcyB3 aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gp LgogCiAgICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVz KSAxIDw8IHdpbmRvd0JpdHMKLSB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1 bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCisgdGhhdCBpcywgMzJLIGZvciB3aW5kb3dC aXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGFib3V0IDcga2lsb2J5dGVzCiAgZm9yIHNtYWxs IG9iamVjdHMuCiAqLwogCkBAIC0xNjUsNiArMjkzLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAK KyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBp ZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUg Wl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQor IyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIg YXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNt YWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMg d2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBt YXkgaGF2ZQpAQCAtMjc4LDQ5ICs0MTQsMTIxIEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZv aWRwOwogI2VuZGlmCiAKLSNpZiAwICAgICAgICAgICAvKiBIQVZFX1VOSVNURF9IIC0tIHRoaXMg bGluZSBpcyB1cGRhdGVkIGJ5IC4vY29uZmlndXJlICovCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMu aD4gLyogZm9yIG9mZl90ICovCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgLyogZm9yIFNFRUtf KiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAv KiBmb3Igb2ZmX3QgKi8KKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYm IGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09 IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05H X01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMg IGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2ln bmVkIHNob3J0CiAjICBlbmRpZgotIyAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKICNlbmRpZgotI2lm bmRlZiBTRUVLX1NFVAorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7Cisj ZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKworI2lmIDEg ICAgLyogd2FzIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFW RV9VTklTVERfSAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBz ZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gK KyNlbmRpZgorCisjaWZkZWYgU1REQworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxz eXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lm IGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9T T0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisj ICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAg aW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCisj ZW5kaWYKKworLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBf TEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKKyAqICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0Ug MSIgYXMgcmVxdWVzdGluZyA2NC1iaXQgb3BlcmF0aW9ucywgKGV2ZW4KKyAqIHRob3VnaCB0aGUg Zm9ybWVyIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExGUyBkb2N1bWVudCksIGJ1dCBjb25zaWRl cmluZworICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBf TEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCisgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2 NC1iaXQgb3BlcmF0aW9ucworICovCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAm JiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyMgIHVuZGVmIF9MQVJHRUZJTEU2NF9T T1VSQ0UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9I QVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVm IFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdF RklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNF RUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAg ICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYK KyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBl bmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAm JiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRl ZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5l IFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBf RklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBa X1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9T T0xPKQogIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdp bm5pbmcgb2YgZmlsZS4gICovCiAjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyog U2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwogIyAgZGVmaW5lIFNFRUtfRU5EICAgICAg ICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KICNl bmRpZgorCiAjaWZuZGVmIHpfb2ZmX3QKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgog Ci0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYK LQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSMgIGlmZGVm IEZBUgotIyAgICB1bmRlZiBGQVIKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9M QVJHRTY0KQorIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CisjZWxzZQorIyAgaWYgZGVmaW5l ZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAg IGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90 IHpfb2ZmX3QKICMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBw b3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KICNpZiBkZWZpbmVkKF9f TVZTX18pCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQotIyAgIHByYWdtYSBt YXAoZGVmbGF0ZUluaXQyXywiREVJTjIiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVF TkQiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCi0jICAgcHJhZ21hIG1h cChpbmZsYXRlSW5pdF8sIklOSU4iKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5J TjIiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQotIyAgIHByYWdtYSBtYXAo aW5mbGF0ZVN5bmMsIklOU1kiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnks IklOU0VESSIpCi0jICAgcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCi0jICAgcHJh Z21hIG1hcChpbmZsYXRlX3RhYmxlLCJJTlRBQkwiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9m YXN0LCJJTkZBIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQor ICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQorICAjcHJhZ21hIG1hcChkZWZsYXRl SW5pdDJfLCJERUlOMiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKKyAgI3By YWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0 XywiSU5JTiIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKKyAgI3ByYWdt YSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5T WSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQorICAjcHJh Z21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfdGFi bGUsIklOVEFCTCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCisgICNwcmFn bWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQogI2VuZGlmCiAKICNlbmRpZiAvKiBa Q09ORl9IICovCmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2Nt ZC9ncy96bGliL3pjb25mLmguaW4KLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5 NzAgKzAwMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi96Y29uZi5oLmluCVdlZCBNYXkgMjcg MTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMCwwICsxLDUzNCBAQAorLyogemNvbmYuaCAtLSBjb25m aWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAo QykgMTk5NS0yMDE2IEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRp b25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGli LmgKKyAqLworCisvKiBAKCMpICRJZCQgKi8KKworI2lmbmRlZiBaQ09ORl9ICisjZGVmaW5lIFpD T05GX0gKKworLyoKKyAqIElmIHlvdSAqcmVhbGx5KiBuZWVkIGEgdW5pcXVlIHByZWZpeCBmb3Ig YWxsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywKKyAqIGNvbXBpbGUgd2l0aCAtRFpfUFJF RklYLiBUaGUgInN0YW5kYXJkIiB6bGliIHNob3VsZCBiZSBjb21waWxlZCB3aXRob3V0IGl0Lgor ICogRXZlbiBiZXR0ZXIgdGhhbiBjb21waWxpbmcgd2l0aCAtRFpfUFJFRklYIHdvdWxkIGJlIHRv IHVzZSBjb25maWd1cmUgdG8gc2V0CisgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNp bmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCisgKi8KKyNpZmRlZiBaX1BSRUZJWCAgICAgLyog bWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklY X1NFVAorCisvKiBhbGwgbGlua2VkIHN5bWJvbHMgYW5kIGluaXQgbWFjcm9zICovCisjICBkZWZp bmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQorIyAgZGVmaW5lIF9sZW5ndGhf Y29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQorIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAg ICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9m bHVzaF9iaXRzCisjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Js b2NrCisjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKKyMgIGRlZmlu ZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCisjICBkZWZpbmUgX3Ry X3RhbGx5ICAgICAgICAgICAgIHpfX3RyX3RhbGx5CisjICBkZWZpbmUgYWRsZXIzMiAgICAgICAg ICAgICAgIHpfYWRsZXIzMgorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVy MzJfY29tYmluZQorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29t YmluZTY0CisjICBkZWZpbmUgYWRsZXIzMl96ICAgICAgICAgICAgIHpfYWRsZXIzMl96CisjICBp Zm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVz cworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRl ZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgorIyAg ZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCisjICBkZWZpbmUgY3JjMzJfY29t YmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQorIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAg ICAgICB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGNyYzMyX3ogICAgICAgICAgICAgICB6 X2NyYzMyX3oKKyMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCisjICBk ZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCisjICBkZWZpbmUgZGVm bGF0ZUNvcHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKKyMgIGRlZmluZSBkZWZsYXRlRW5kICAg ICAgICAgICAgel9kZWZsYXRlRW5kCisjICBkZWZpbmUgZGVmbGF0ZUdldERpY3Rpb25hcnkgIHpf ZGVmbGF0ZUdldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRlSW5pdCAgICAgICAgICAgel9k ZWZsYXRlSW5pdAorIyAgZGVmaW5lIGRlZmxhdGVJbml0MiAgICAgICAgICB6X2RlZmxhdGVJbml0 MgorIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KKyMgIGRl ZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KKyMgIGRlZmluZSBkZWZs YXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRp bmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKKyMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAg ICAgel9kZWZsYXRlUHJpbWUKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZs YXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRL ZWVwCisjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25h cnkKKyMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCisj ICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKKyMgIGRlZmluZSBk ZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGdldF9j cmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAg ZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9p bnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9y ICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAg ICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVh cmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBk ZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNs b3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAg ICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9n emRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBk ZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVz aCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pmcmVhZCAgICAgICAgICAg ICAgIHpfZ3pmcmVhZAorIyAgICBkZWZpbmUgZ3pmd3JpdGUgICAgICAgICAgICAgIHpfZ3pmd3Jp dGUKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZp bmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAg ICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAg el9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2 NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmlu ZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMg ICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYK KyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmlu ZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAg ICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpf Z3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAg ICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNl ZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAg ICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6 X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMg ICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBn enZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAg ICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCisjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAg ICAgICAgIHpfaW5mbGF0ZQorIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxh dGVCYWNrCisjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQK KyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXQgICAgICAgel9pbmZsYXRlQmFja0luaXQKKyMgIGRl ZmluZSBpbmZsYXRlQmFja0luaXRfICAgICAgel9pbmZsYXRlQmFja0luaXRfCisjICBkZWZpbmUg aW5mbGF0ZUNvZGVzVXNlZCAgICAgIHpfaW5mbGF0ZUNvZGVzVXNlZAorIyAgZGVmaW5lIGluZmxh dGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5CisjICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAg ICAgICAgIHpfaW5mbGF0ZUVuZAorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2lu ZmxhdGVHZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5m bGF0ZUdldEhlYWRlcgorIyAgZGVmaW5lIGluZmxhdGVJbml0ICAgICAgICAgICB6X2luZmxhdGVJ bml0CisjICBkZWZpbmUgaW5mbGF0ZUluaXQyICAgICAgICAgIHpfaW5mbGF0ZUluaXQyCisjICBk ZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXworIyAgZGVmaW5lIGlu ZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0XworIyAgZGVmaW5lIGluZmxhdGVNYXJr ICAgICAgICAgICB6X2luZmxhdGVNYXJrCisjICBkZWZpbmUgaW5mbGF0ZVByaW1lICAgICAgICAg IHpfaW5mbGF0ZVByaW1lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0 ZVJlc2V0CisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0Mgor IyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKKyMgIGRl ZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVm aW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCisjICBkZWZpbmUgaW5mbGF0 ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAorIyAgZGVmaW5lIGluZmxhdGVVbmRl cm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlVmFsaWRhdGUg ICAgICAgel9pbmZsYXRlVmFsaWRhdGUKKyMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAg el9pbmZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2lu ZmxhdGVfZmFzdAorIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFi bGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6 X3VuY29tcHJlc3MKKyMgICAgZGVmaW5lIHVuY29tcHJlc3MyICAgICAgICAgICB6X3VuY29tcHJl c3MyCisjICBlbmRpZgorIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgor IyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNh bGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRp ZgorIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKKyMg IGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgorCisvKiBhbGwgemxp YiB0eXBlZGVmcyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBCeXRlICAgICAg ICAgICAgICAgICAgel9CeXRlCisjICBkZWZpbmUgQnl0ZWYgICAgICAgICAgICAgICAgIHpfQnl0 ZWYKKyMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCisjICBkZWZp bmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKKyMgIGRlZmluZSBmcmVlX2Z1bmMgICAg ICAgICAgICAgel9mcmVlX2Z1bmMKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6Rmls ZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKKyMgIGRlZmluZSBnel9oZWFkZXIg ICAgICAgICAgICAgel9nel9oZWFkZXIKKyMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAg el9nel9oZWFkZXJwCisjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwor IyAgZGVmaW5lIGludGYgICAgICAgICAgICAgICAgICB6X2ludGYKKyMgIGRlZmluZSBvdXRfZnVu YyAgICAgICAgICAgICAgel9vdXRfZnVuYworIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAg ICB6X3VJbnQKKyMgIGRlZmluZSB1SW50ZiAgICAgICAgICAgICAgICAgel91SW50ZgorIyAgZGVm aW5lIHVMb25nICAgICAgICAgICAgICAgICB6X3VMb25nCisjICBkZWZpbmUgdUxvbmdmICAgICAg ICAgICAgICAgIHpfdUxvbmdmCisjICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9p ZHAKKyMgIGRlZmluZSB2b2lkcGMgICAgICAgICAgICAgICAgel92b2lkcGMKKyMgIGRlZmluZSB2 b2lkcGYgICAgICAgICAgICAgICAgel92b2lkcGYKKworLyogYWxsIHpsaWIgc3RydWN0cyBpbiB6 bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBnel9oZWFkZXJfcyAgICAgICAgICAgel9n el9oZWFkZXJfcworIyAgZGVmaW5lIGludGVybmFsX3N0YXRlICAgICAgICB6X2ludGVybmFsX3N0 YXRlCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9T KQorIyAgZGVmaW5lIE1TRE9TCisjZW5kaWYKKyNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVk KF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCisjICBkZWZpbmUgT1MyCisjZW5kaWYKKyNpZiBk ZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQorIyAgZGVmaW5lIFdJTkRPV1MK KyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRl ZmluZWQoX19XSU4zMl9fKQorIyAgaWZuZGVmIFdJTjMyCisjICAgIGRlZmluZSBXSU4zMgorIyAg ZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVm aW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCisjICBpZiAhZGVmaW5lZChfX0dOVUNf XykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCisjICAgIGlmbmRl ZiBTWVMxNkJJVAorIyAgICAgIGRlZmluZSBTWVMxNkJJVAorIyAgICBlbmRpZgorIyAgZW5kaWYK KyNlbmRpZgorCisvKgorICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2Mg ZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKKyAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGlt ZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KKyAqLworI2lmZGVmIFNZUzE2 QklUCisjICBkZWZpbmUgTUFYU0VHXzY0SworI2VuZGlmCisjaWZkZWYgTVNET1MKKyMgIGRlZmlu ZSBVTkFMSUdORURfT0sKKyNlbmRpZgorCisjaWZkZWYgX19TVERDX1ZFUlNJT05fXworIyAgaWZu ZGVmIFNUREMKKyMgICAgZGVmaW5lIFNUREMKKyMgIGVuZGlmCisjICBpZiBfX1NURENfVkVSU0lP Tl9fID49IDE5OTkwMUwKKyMgICAgaWZuZGVmIFNUREM5OQorIyAgICAgIGRlZmluZSBTVERDOTkK KyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVm aW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCisjICBkZWZpbmUgU1REQwor I2VuZGlmCisjaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmlu ZWQoX19CT1JMQU5EQ19fKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChT VERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJ TjMyKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVm aW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQorIyAgZGVmaW5lIFNUREMKKyNlbmRp ZgorCisjaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJp ZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKKyNpZm5k ZWYgU1REQworIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYg IWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLworIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90 ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KKyMgIGVuZGlmCisjZW5kaWYK KworI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmlu ZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCisjaWZk ZWYgWl9TT0xPCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9zaXplX3Q7CisjZWxzZQorIyAg ZGVmaW5lIHpfbG9uZ2xvbmcgbG9uZyBsb25nCisjICBpZiBkZWZpbmVkKE5PX1NJWkVfVCkKKyAg ICAgdHlwZWRlZiB1bnNpZ25lZCBOT19TSVpFX1Qgel9zaXplX3Q7CisjICBlbGlmIGRlZmluZWQo U1REQykKKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+CisgICAgIHR5cGVkZWYgc2l6ZV90IHpfc2l6 ZV90OworIyAgZWxzZQorICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9zaXplX3Q7CisjICBl bmRpZgorIyAgdW5kZWYgel9sb25nbG9uZworI2VuZGlmCisKKy8qIE1heGltdW0gdmFsdWUgZm9y IG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqLworI2lmbmRlZiBNQVhfTUVNX0xFVkVMCisjICBp ZmRlZiBNQVhTRUdfNjRLCisjICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDgKKyMgIGVsc2UKKyMg ICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBNYXhpbXVt IHZhbHVlIGZvciB3aW5kb3dCaXRzIGluIGRlZmxhdGVJbml0MiBhbmQgaW5mbGF0ZUluaXQyLgor ICogV0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBl eHRyYWN0IC5neiBmaWxlcworICogY3JlYXRlZCBieSBnemlwLiAoRmlsZXMgY3JlYXRlZCBieSBt aW5pZ3ppcCBjYW4gc3RpbGwgYmUgZXh0cmFjdGVkIGJ5CisgKiBnemlwLikKKyAqLworI2lmbmRl ZiBNQVhfV0JJVFMKKyMgIGRlZmluZSBNQVhfV0JJVFMgICAxNSAvKiAzMksgTFo3NyB3aW5kb3cg Ki8KKyNlbmRpZgorCisvKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUg KGluIGJ5dGVzKToKKyAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAo bWVtTGV2ZWwrOSkpCisgdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBm b3IgbWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCisgcGx1cyBhIGZldyBraWxvYnl0ZXMg Zm9yIHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKKyB0 aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxl IHdpdGgKKyAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZF TD03IgorIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24g KHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCisKKyAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZv ciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cworIHRoYXQgaXMsIDMySyBm b3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhYm91dCA3IGtpbG9ieXRlcwor IGZvciBzbWFsbCBvYmplY3RzLgorKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlw ZSBkZWNsYXJhdGlvbnMgKi8KKworI2lmbmRlZiBPRiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICov CisjICBpZmRlZiBTVERDCisjICAgIGRlZmluZSBPRihhcmdzKSAgYXJncworIyAgZWxzZQorIyAg ICBkZWZpbmUgT0YoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgWl9BUkcg LyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMp IHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFy Z3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRp ZgorCisvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5 IGZvciBNU0RPUyBtaXhlZAorICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBt b2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KKyAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5 IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQorICogdG8g ZGVmaW5lIE5PX01FTUNQWSBpbiB6dXRpbC5oLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlIG1peGVk IG1vZGVsLAorICoganVzdCBkZWZpbmUgRkFSIHRvIGJlIGVtcHR5LgorICovCisjaWZkZWYgU1lT MTZCSVQKKyMgIGlmIGRlZmluZWQoTV9JODZTTSkgfHwgZGVmaW5lZChNX0k4Nk1NKQorICAgICAv KiBNU0Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCisjICAgIGRlZmluZSBTTUFMTF9NRURJVU0K KyMgICAgaWZkZWYgX01TQ19WRVIKKyMgICAgICBkZWZpbmUgRkFSIF9mYXIKKyMgICAgZWxzZQor IyAgICAgIGRlZmluZSBGQVIgZmFyCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWYgKGRlZmlu ZWQoX19TTUFMTF9fKSB8fCBkZWZpbmVkKF9fTUVESVVNX18pKQorICAgICAvKiBUdXJibyBDIHNt YWxsIG9yIG1lZGl1bSBtb2RlbCAqLworIyAgICBkZWZpbmUgU01BTExfTUVESVVNCisjICAgIGlm ZGVmIF9fQk9STEFORENfXworIyAgICAgIGRlZmluZSBGQVIgX2ZhcgorIyAgICBlbHNlCisjICAg ICAgZGVmaW5lIEZBUiBmYXIKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRl ZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikKKyAgIC8qIElmIGJ1aWxkaW5nIG9yIHVz aW5nIHpsaWIgYXMgYSBETEwsIGRlZmluZSBaTElCX0RMTC4KKyAgICAqIFRoaXMgaXMgbm90IG1h bmRhdG9yeSwgYnV0IGl0IG9mZmVycyBhIGxpdHRsZSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KKyAg ICAqLworIyAgaWZkZWYgWkxJQl9ETEwKKyMgICAgaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZp bmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+PSAweDUwMCkpCisjICAgICAgaWZk ZWYgWkxJQl9JTlRFUk5BTAorIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNw ZWMoZGxsZXhwb3J0KQorIyAgICAgIGVsc2UKKyMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVy biBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5k aWYgIC8qIFpMSUJfRExMICovCisgICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIHdpdGgg dGhlIFdJTkFQSS9XSU5BUElWIGNhbGxpbmcgY29udmVudGlvbiwKKyAgICAqIGRlZmluZSBaTElC X1dJTkFQSS4KKyAgICAqIENhdXRpb246IHRoZSBzdGFuZGFyZCBaTElCMS5ETEwgaXMgTk9UIGNv bXBpbGVkIHVzaW5nIFpMSUJfV0lOQVBJLgorICAgICovCisjICBpZmRlZiBaTElCX1dJTkFQSQor IyAgICBpZmRlZiBGQVIKKyMgICAgICB1bmRlZiBGQVIKKyMgICAgZW5kaWYKKyMgICAgaW5jbHVk ZSA8d2luZG93cy5oPgorICAgICAvKiBObyBuZWVkIGZvciBfZXhwb3J0LCB1c2UgWkxJQi5ERUYg aW5zdGVhZC4gKi8KKyAgICAgLyogRm9yIGNvbXBsZXRlIFdpbmRvd3MgY29tcGF0aWJpbGl0eSwg dXNlIFdJTkFQSSwgbm90IF9fc3RkY2FsbC4gKi8KKyMgICAgZGVmaW5lIFpFWFBPUlQgV0lOQVBJ CisjICAgIGlmZGVmIFdJTjMyCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBXSU5BUElWCisjICAg IGVsc2UKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIEZBUiBDREVDTAorIyAgICBlbmRpZgorIyAg ZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19CRU9TX18pCisjICBpZmRlZiBaTElCX0RM TAorIyAgICBpZmRlZiBaTElCX0lOVEVSTkFMCisjICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2Rl Y2xzcGVjKGRsbGV4cG9ydCkKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxs ZXhwb3J0KQorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRs bGltcG9ydCkKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQor IyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFpFWFRFUk4KKyMgIGRlZmlu ZSBaRVhURVJOIGV4dGVybgorI2VuZGlmCisjaWZuZGVmIFpFWFBPUlQKKyMgIGRlZmluZSBaRVhQ T1JUCisjZW5kaWYKKyNpZm5kZWYgWkVYUE9SVFZBCisjICBkZWZpbmUgWkVYUE9SVFZBCisjZW5k aWYKKworI2lmbmRlZiBGQVIKKyMgIGRlZmluZSBGQVIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo X19NQUNUWVBFU19fKQordHlwZWRlZiB1bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICov CisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9y ZSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nICB1TG9uZzsgLyogMzIgYml0cyBvciBtb3JlICov CisKKyNpZmRlZiBTTUFMTF9NRURJVU0KKyAgIC8qIEJvcmxhbmQgQy9DKysgYW5kIHNvbWUgb2xk IE1TQyB2ZXJzaW9ucyBpZ25vcmUgRkFSIGluc2lkZSB0eXBlZGVmICovCisjICBkZWZpbmUgQnl0 ZWYgQnl0ZSBGQVIKKyNlbHNlCisgICB0eXBlZGVmIEJ5dGUgIEZBUiBCeXRlZjsKKyNlbmRpZgor dHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7Cit0eXBlZGVmIGludCAgIEZBUiBpbnRmOwordHlwZWRl ZiB1SW50ICBGQVIgdUludGY7Cit0eXBlZGVmIHVMb25nIEZBUiB1TG9uZ2Y7CisKKyNpZmRlZiBT VERDCisgICB0eXBlZGVmIHZvaWQgY29uc3QgKnZvaWRwYzsKKyAgIHR5cGVkZWYgdm9pZCBGQVIg ICAqdm9pZHBmOworICAgdHlwZWRlZiB2b2lkICAgICAgICp2b2lkcDsKKyNlbHNlCisgICB0eXBl ZGVmIEJ5dGUgY29uc3QgKnZvaWRwYzsKKyAgIHR5cGVkZWYgQnl0ZSBGQVIgICAqdm9pZHBmOwor ICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoWl9V NCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1p dHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0 IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZp bmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVM KQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisj aWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1 bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVU5JU1REX0ggICAg LyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFW RV9VTklTVERfSAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBz ZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gK KyNlbmRpZgorCisjaWZkZWYgU1REQworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxz eXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lm IGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9T T0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisj ICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAg aW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCisj ZW5kaWYKKworLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBf TEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKKyAqICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0Ug MSIgYXMgcmVxdWVzdGluZyA2NC1iaXQgb3BlcmF0aW9ucywgKGV2ZW4KKyAqIHRob3VnaCB0aGUg Zm9ybWVyIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExGUyBkb2N1bWVudCksIGJ1dCBjb25zaWRl cmluZworICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBf TEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCisgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2 NC1iaXQgb3BlcmF0aW9ucworICovCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAm JiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyMgIHVuZGVmIF9MQVJHRUZJTEU2NF9T T1VSQ0UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9I QVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVm IFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdF RklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNF RUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAg ICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYK KyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBl bmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAm JiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRl ZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5l IFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBf RklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBa X1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9T T0xPKQorIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdp bm5pbmcgb2YgZmlsZS4gICovCisjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyog U2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLworIyAgZGVmaW5lIFNFRUtfRU5EICAgICAg ICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KKyNl bmRpZgorCisjaWZuZGVmIHpfb2ZmX3QKKyMgIGRlZmluZSB6X29mZl90IGxvbmcKKyNlbmRpZgor CisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKKyMgIGRlZmluZSB6 X29mZjY0X3Qgb2ZmNjRfdAorI2Vsc2UKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5l ZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9f aW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgor I2VuZGlmCisKKy8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBs YXJnZXIgdGhhbiA4IGJ5dGVzICovCisjaWYgZGVmaW5lZChfX01WU19fKQorICAjcHJhZ21hIG1h cChkZWZsYXRlSW5pdF8sIkRFSU4iKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlO MiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKKyAgI3ByYWdtYSBtYXAoZGVm bGF0ZUJvdW5kLCJERUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCisg ICNwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0 ZUVuZCwiSU5FTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCisgICNwcmFn bWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQorICAjcHJhZ21hIG1hcChjb21w cmVzc0JvdW5kLCJDTUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIp CisgICNwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCisgICNwcmFnbWEgbWFwKGluZmxh dGVfY29weXJpZ2h0LCJJTkNPUFkiKQorI2VuZGlmCisKKyNlbmRpZiAvKiBaQ09ORl9IICovCmRp ZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL3pj b25mLmluLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3MvemxpYi96Y29uZi5pbi5oCVdlZCBNYXkgMjcg MDA6MDk6NDYgMjAyMCArMDIwMAorKysgL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3 MCArMDAwMApAQCAtMSwzMjYgKzAsMCBAQAotLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9m IHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA0 IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5k IHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKi8KLQotLyogQCgjKSAkSWQ6 IHpjb25mLmluLmgsdiAxLjEuMS4xIDIwMDUvMDQvMjQgMjE6Mzk6MzcgZ2lsZXMgRXhwICQgKi8K LQotI2lmbmRlZiBaQ09ORl9ICi0jZGVmaW5lIFpDT05GX0gKLQotLyoKLSAqIElmIHlvdSAqcmVh bGx5KiBuZWVkIGEgdW5pcXVlIHByZWZpeCBmb3IgYWxsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0 aW9ucywKLSAqIGNvbXBpbGUgd2l0aCAtRFpfUFJFRklYLiBUaGUgInN0YW5kYXJkIiB6bGliIHNo b3VsZCBiZSBjb21waWxlZCB3aXRob3V0IGl0LgotICovCi0jaWZkZWYgWl9QUkVGSVgKLSMgIGRl ZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KLSMgIGRlZmluZSBkZWZs YXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCi0jICBkZWZpbmUgZGVmbGF0ZUVuZCAgICAgICAg ICAgIHpfZGVmbGF0ZUVuZAotIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxh dGVJbml0XwotIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKLSMgIGRl ZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCi0jICBkZWZpbmUgZGVmbGF0 ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwotIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0 aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5Ci0jICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAg ICAgICAgIHpfZGVmbGF0ZUNvcHkKLSMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9k ZWZsYXRlUmVzZXQKLSMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFy YW1zCi0jICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCi0jICBk ZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCi0jICBkZWZpbmUgaW5m bGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXwotIyAgZGVmaW5lIGluZmxhdGVTZXRE aWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5Ci0jICBkZWZpbmUgaW5mbGF0ZVN5bmMg ICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKLSMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAg el9pbmZsYXRlU3luY1BvaW50Ci0jICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5m bGF0ZUNvcHkKLSMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQK LSMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawotIyAgZGVmaW5l IGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCi0jICBkZWZpbmUgY29tcHJl c3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAg ICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVz c0JvdW5kCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcwotIyAg ZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKLSMgIGRlZmluZSBjcmMzMiAg ICAgICAgICAgICAgICAgel9jcmMzMgotIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6 X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IK LQotIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKLSMgIGRlZmluZSB1SW50 ICAgICAgICAgICAgICAgICAgel91SW50Ci0jICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAg IHpfdUxvbmcKLSMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgotIyAgZGVm aW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCi0jICBkZWZpbmUgaW50ZiAgICAgICAg ICAgICAgICAgIHpfaW50ZgotIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRm Ci0jICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCi0jICBkZWZpbmUgdm9p ZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmCi0jICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAg ICAgIHpfdm9pZHAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVk KE1TRE9TKQotIyAgZGVmaW5lIE1TRE9TCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChPU18yKSB8fCBk ZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCi0jICBkZWZpbmUgT1MyCi0jZW5kaWYK LSNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQotIyAgZGVmaW5lIFdJ TkRPV1MKLSNlbmRpZgotI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18p KSAmJiAhZGVmaW5lZChXSU4zMikKLSMgIGRlZmluZSBXSU4zMgotI2VuZGlmCi0jaWYgKGRlZmlu ZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5l ZChXSU4zMikKLSMgIGlmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykg JiYgIWRlZmluZWQoX18zODZfXykKLSMgICAgaWZuZGVmIFNZUzE2QklUCi0jICAgICAgZGVmaW5l IFNZUzE2QklUCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBDb21waWxl IHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUg bW9yZQotICogdGhhbiA2NGsgYnl0ZXMgYXQgYSB0aW1lIChuZWVkZWQgb24gc3lzdGVtcyB3aXRo IDE2LWJpdCBpbnQpLgotICovCi0jaWZkZWYgU1lTMTZCSVQKLSMgIGRlZmluZSBNQVhTRUdfNjRL Ci0jZW5kaWYKLSNpZmRlZiBNU0RPUwotIyAgZGVmaW5lIFVOQUxJR05FRF9PSwotI2VuZGlmCi0K LSNpZmRlZiBfX1NURENfVkVSU0lPTl9fCi0jICBpZm5kZWYgU1REQwotIyAgICBkZWZpbmUgU1RE QwotIyAgZW5kaWYKLSMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotIyAgICBpZm5k ZWYgU1REQzk5Ci0jICAgICAgZGVmaW5lIFNUREM5OQotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNl bmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVk KF9fY3BsdXNwbHVzKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERD KSAmJiAoZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pKQotIyAgZGVm aW5lIFNUREMKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE1TRE9TKSB8 fCBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpKQotIyAgZGVmaW5lIFNUREMKLSNl bmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChfX0hP U19BSVhfXykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBf XykgJiYgIWRlZmluZWQoU1REQykgICAgLyogaVNlcmllcyAoZm9ybWVybHkgQVMvNDAwKS4gKi8K LSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLQotI2lmbmRlZiBTVERDCi0jICBpZm5kZWYgY29uc3Qg LyogY2Fubm90IHVzZSAhZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChjb25zdCkgb24gTWFjICov Ci0jICAgIGRlZmluZSBjb25zdCAgICAgICAvKiBub3RlOiBuZWVkIGEgbW9yZSBnZW50bGUgc29s dXRpb24gaGVyZSAqLwotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBTb21lIE1hYyBjb21waWxlcnMg bWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwotI2lmIGRlZmluZWQoX19NV0VSS1Nf Xyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCi0j ICBkZWZpbmUgTk9fRFVNTVlfREVDTAotI2VuZGlmCi0KLS8qIE1heGltdW0gdmFsdWUgZm9yIG1l bUxldmVsIGluIGRlZmxhdGVJbml0MiAqLwotI2lmbmRlZiBNQVhfTUVNX0xFVkVMCi0jICBpZmRl ZiBNQVhTRUdfNjRLCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDgKLSMgIGVsc2UKLSMgICAg ZGVmaW5lIE1BWF9NRU1fTEVWRUwgOQotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNYXhpbXVtIHZh bHVlIGZvciB3aW5kb3dCaXRzIGluIGRlZmxhdGVJbml0MiBhbmQgaW5mbGF0ZUluaXQyLgotICog V0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBleHRy YWN0IC5neiBmaWxlcwotICogY3JlYXRlZCBieSBnemlwLiAoRmlsZXMgY3JlYXRlZCBieSBtaW5p Z3ppcCBjYW4gc3RpbGwgYmUgZXh0cmFjdGVkIGJ5Ci0gKiBnemlwLikKLSAqLwotI2lmbmRlZiBN QVhfV0JJVFMKLSMgIGRlZmluZSBNQVhfV0JJVFMgICAxNSAvKiAzMksgTFo3NyB3aW5kb3cgKi8K LSNlbmRpZgotCi0vKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGlu IGJ5dGVzKToKLSAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVt TGV2ZWwrOSkpCi0gdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBmb3Ig bWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCi0gcGx1cyBhIGZldyBraWxvYnl0ZXMgZm9y IHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKLSB0aGUg ZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdp dGgKLSAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03 IgotIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRo ZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCi0KLSAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBp bmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cwotIHRoYXQgaXMsIDMySyBmb3Ig d2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKLSBmb3Ig c21hbGwgb2JqZWN0cy4KLSovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgZGVj bGFyYXRpb25zICovCi0KLSNpZm5kZWYgT0YgLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotIyAg aWZkZWYgU1REQwotIyAgICBkZWZpbmUgT0YoYXJncykgIGFyZ3MKLSMgIGVsc2UKLSMgICAgZGVm aW5lIE9GKGFyZ3MpICAoKQotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBUaGUgZm9sbG93aW5nIGRl ZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAotICogbW9k ZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9j YXRpb25zKS4KLSAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNE T1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQotICogdG8gZGVmaW5lIE5PX01FTUNQWSBpbiB6dXRp bC5oLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlIG1peGVkIG1vZGVsLAotICoganVzdCBkZWZpbmUg RkFSIHRvIGJlIGVtcHR5LgotICovCi0jaWZkZWYgU1lTMTZCSVQKLSMgIGlmIGRlZmluZWQoTV9J ODZTTSkgfHwgZGVmaW5lZChNX0k4Nk1NKQotICAgICAvKiBNU0Mgc21hbGwgb3IgbWVkaXVtIG1v ZGVsICovCi0jICAgIGRlZmluZSBTTUFMTF9NRURJVU0KLSMgICAgaWZkZWYgX01TQ19WRVIKLSMg ICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0j ICAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQoX19TTUFMTF9fKSB8fCBkZWZpbmVk KF9fTUVESVVNX18pKQotICAgICAvKiBUdXJibyBDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwot IyAgICBkZWZpbmUgU01BTExfTUVESVVNCi0jICAgIGlmZGVmIF9fQk9STEFORENfXwotIyAgICAg IGRlZmluZSBGQVIgX2ZhcgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIEZBUiBmYXIKLSMgICAg ZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5l ZChXSU4zMikKLSAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgYXMgYSBETEwsIGRlZmlu ZSBaTElCX0RMTC4KLSAgICAqIFRoaXMgaXMgbm90IG1hbmRhdG9yeSwgYnV0IGl0IG9mZmVycyBh IGxpdHRsZSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KLSAgICAqLwotIyAgaWZkZWYgWkxJQl9ETEwK LSMgICAgaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9f Qk9STEFORENfXyA+PSAweDUwMCkpCi0jICAgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAg ICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICAgIGVs c2UKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkK LSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYgIC8qIFpMSUJfRExMICovCi0gICAv KiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIHdpdGggdGhlIFdJTkFQSS9XSU5BUElWIGNhbGxp bmcgY29udmVudGlvbiwKLSAgICAqIGRlZmluZSBaTElCX1dJTkFQSS4KLSAgICAqIENhdXRpb246 IHRoZSBzdGFuZGFyZCBaTElCMS5ETEwgaXMgTk9UIGNvbXBpbGVkIHVzaW5nIFpMSUJfV0lOQVBJ LgotICAgICovCi0jICBpZmRlZiBaTElCX1dJTkFQSQotIyAgICBpZmRlZiBGQVIKLSMgICAgICB1 bmRlZiBGQVIKLSMgICAgZW5kaWYKLSMgICAgaW5jbHVkZSA8d2luZG93cy5oPgotICAgICAvKiBO byBuZWVkIGZvciBfZXhwb3J0LCB1c2UgWkxJQi5ERUYgaW5zdGVhZC4gKi8KLSAgICAgLyogRm9y IGNvbXBsZXRlIFdpbmRvd3MgY29tcGF0aWJpbGl0eSwgdXNlIFdJTkFQSSwgbm90IF9fc3RkY2Fs bC4gKi8KLSMgICAgZGVmaW5lIFpFWFBPUlQgV0lOQVBJCi0jICAgIGlmZGVmIFdJTjMyCi0jICAg ICAgZGVmaW5lIFpFWFBPUlRWQSBXSU5BUElWCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgWkVY UE9SVFZBIEZBUiBDREVDTAotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVm aW5lZCAoX19CRU9TX18pCi0jICBpZmRlZiBaTElCX0RMTAotIyAgICBpZmRlZiBaTElCX0lOVEVS TkFMCi0jICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAg ICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICBlbHNlCi0jICAg ICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgICBkZWZpbmUg WkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNl bmRpZgotCi0jaWZuZGVmIFpFWFRFUk4KLSMgIGRlZmluZSBaRVhURVJOIGV4dGVybgotI2VuZGlm Ci0jaWZuZGVmIFpFWFBPUlQKLSMgIGRlZmluZSBaRVhQT1JUCi0jZW5kaWYKLSNpZm5kZWYgWkVY UE9SVFZBCi0jICBkZWZpbmUgWkVYUE9SVFZBCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSMgIGRl ZmluZSBGQVIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19NQUNUWVBFU19fKQotdHlwZWRlZiB1 bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICovCi0jZW5kaWYKLXR5cGVkZWYgdW5zaWdu ZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9yZSAqLwotdHlwZWRlZiB1bnNpZ25lZCBs b25nICB1TG9uZzsgLyogMzIgYml0cyBvciBtb3JlICovCi0KLSNpZmRlZiBTTUFMTF9NRURJVU0K LSAgIC8qIEJvcmxhbmQgQy9DKysgYW5kIHNvbWUgb2xkIE1TQyB2ZXJzaW9ucyBpZ25vcmUgRkFS IGluc2lkZSB0eXBlZGVmICovCi0jICBkZWZpbmUgQnl0ZWYgQnl0ZSBGQVIKLSNlbHNlCi0gICB0 eXBlZGVmIEJ5dGUgIEZBUiBCeXRlZjsKLSNlbmRpZgotdHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7 Ci10eXBlZGVmIGludCAgIEZBUiBpbnRmOwotdHlwZWRlZiB1SW50ICBGQVIgdUludGY7Ci10eXBl ZGVmIHVMb25nIEZBUiB1TG9uZ2Y7Ci0KLSNpZmRlZiBTVERDCi0gICB0eXBlZGVmIHZvaWQgY29u c3QgKnZvaWRwYzsKLSAgIHR5cGVkZWYgdm9pZCBGQVIgICAqdm9pZHBmOwotICAgdHlwZWRlZiB2 b2lkICAgICAgICp2b2lkcDsKLSNlbHNlCi0gICB0eXBlZGVmIEJ5dGUgY29uc3QgKnZvaWRwYzsK LSAgIHR5cGVkZWYgQnl0ZSBGQVIgICAqdm9pZHBmOwotICAgdHlwZWRlZiBCeXRlICAgICAgICp2 b2lkcDsKLSNlbmRpZgotCi0jaWYgMCAgICAgICAgICAgLyogSEFWRV9VTklTVERfSCAtLSB0aGlz IGxpbmUgaXMgdXBkYXRlZCBieSAuL2NvbmZpZ3VyZSAqLwotIyAgaW5jbHVkZSA8c3lzL3R5cGVz Lmg+IC8qIGZvciBvZmZfdCAqLwotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgIC8qIGZvciBTRUVL XyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAg LyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKLSNlbmRp ZgotI2lmbmRlZiBTRUVLX1NFVAotIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8q IFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCi0jICBkZWZpbmUgU0VFS19DVVIgICAg ICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwotIyAgZGVmaW5l IFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMg Im9mZnNldCIgKi8KLSNlbmRpZgotI2lmbmRlZiB6X29mZl90Ci0jICBkZWZpbmUgel9vZmZfdCBs b25nCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnBy aW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJp bnRmCi0jICBpZmRlZiBGQVIKLSMgICAgdW5kZWYgRkFSCi0jICBlbmRpZgotI2VuZGlmCi0KLS8q IE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4 IGJ5dGVzICovCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUlu aXRfLCJERUlOIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0Ml8sIkRFSU4yIikKLSMgICBw cmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVCb3Vu ZCwiREVCTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXRfLCJJTklOIikKLSMgICBwcmFn bWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVFbmQs IklORU5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVTeW5jLCJJTlNZIikKLSMgICBwcmFnbWEg bWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQotIyAgIHByYWdtYSBtYXAoY29tcHJl c3NCb3VuZCwiQ01CTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV90YWJsZSwiSU5UQUJMIikK LSMgICBwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCi0jICAgcHJhZ21hIG1hcChpbmZs YXRlX2NvcHlyaWdodCwiSU5DT1BZIikKLSNlbmRpZgotCi0jZW5kaWYgLyogWkNPTkZfSCAqLwpk aWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi96 bGliLjMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIv c3lzL3NyYy9jbWQvZ3MvemxpYi96bGliLjMJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAw CkBAIC0wLDAgKzEsMTQ5IEBACisuVEggWkxJQiAzICIxNSBKYW4gMjAxNyIKKy5TSCBOQU1FCit6 bGliIFwtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeQorLlNIIFNZTk9QU0lTCitb c2VlCisuSSB6bGliLmgKK2ZvciBmdWxsIGRlc2NyaXB0aW9uXQorLlNIIERFU0NSSVBUSU9OCitU aGUKKy5JIHpsaWIKK2xpYnJhcnkgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lv biBsaWJyYXJ5LgorVGhlIGNvZGUgaXMgdGhyZWFkIHNhZmUsIGFzc3VtaW5nIHRoYXQgdGhlIHN0 YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zCit1c2VkIGFyZSB0aHJlYWQgc2FmZSwgc3VjaCBhcyBt ZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KK0l0IHByb3ZpZGVzIGluLW1lbW9yeSBjb21wcmVz c2lvbiBhbmQgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMsCitpbmNsdWRpbmcgaW50ZWdyaXR5IGNo ZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEuCitUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJh cnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kIChkZWZsYXRpb24pCitidXQg b3RoZXIgYWxnb3JpdGhtcyBtYXkgYmUgYWRkZWQgbGF0ZXIKK3dpdGggdGhlIHNhbWUgc3RyZWFt IGludGVyZmFjZS4KKy5MUAorQ29tcHJlc3Npb24gY2FuIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3Rl cCBpZiB0aGUgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoCitvciBjYW4gYmUgZG9uZSBieSByZXBl YXRlZCBjYWxscyBvZiB0aGUgY29tcHJlc3Npb24gZnVuY3Rpb24uCitJbiB0aGUgbGF0dGVyIGNh c2UsCit0aGUgYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1 bWUgdGhlIG91dHB1dAorKHByb3ZpZGluZyBtb3JlIG91dHB1dCBzcGFjZSkgYmVmb3JlIGVhY2gg Y2FsbC4KKy5MUAorVGhlIGxpYnJhcnkgYWxzbyBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5n IGZpbGVzIGluCisuSVIgZ3ppcCAoMSkKKyguZ3opIGZvcm1hdAord2l0aCBhbiBpbnRlcmZhY2Ug c2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvLgorLkxQCitUaGUgbGlicmFyeSBkb2VzIG5vdCBpbnN0 YWxsIGFueSBzaWduYWwgaGFuZGxlci4KK1RoZSBkZWNvZGVyIGNoZWNrcyB0aGUgY29uc2lzdGVu Y3kgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwKK3NvIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlciBj cmFzaCBldmVuIGluIHRoZSBjYXNlIG9mIGNvcnJ1cHRlZCBpbnB1dC4KKy5MUAorQWxsIGZ1bmN0 aW9ucyBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmls ZQorLklSIHpsaWIuaCAuCitUaGUgZGlzdHJpYnV0aW9uIHNvdXJjZSBpbmNsdWRlcyBleGFtcGxl cyBvZiB1c2Ugb2YgdGhlIGxpYnJhcnkKK2luIHRoZSBmaWxlcworLkkgdGVzdC9leGFtcGxlLmMK K2FuZAorLklSIHRlc3QvbWluaWd6aXAuYywKK2FzIHdlbGwgYXMgb3RoZXIgZXhhbXBsZXMgaW4g dGhlCisuSVIgZXhhbXBsZXMvCitkaXJlY3RvcnkuCisuTFAKK0NoYW5nZXMgdG8gdGhpcyB2ZXJz aW9uIGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlCisuSSBDaGFuZ2VMb2cKK3RoYXQgYWNjb21w YW5pZXMgdGhlIHNvdXJjZS4KKy5MUAorLkkgemxpYgoraXMgYnVpbHQgaW4gdG8gbWFueSBsYW5n dWFnZXMgYW5kIG9wZXJhdGluZyBzeXN0ZW1zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRv CitKYXZhLCBQeXRob24sIC5ORVQsIFBIUCwgUGVybCwgUnVieSwgU3dpZnQsIGFuZCBHby4KKy5M UAorQW4gZXhwZXJpbWVudGFsIHBhY2thZ2UgdG8gcmVhZCBhbmQgd3JpdGUgZmlsZXMgaW4gdGhl IC56aXAgZm9ybWF0LAord3JpdHRlbiBvbiB0b3Agb2YKKy5JIHpsaWIKK2J5IEdpbGxlcyBWb2xs YW50IChpbmZvQHdpbmltYWdlLmNvbSksCitpcyBhdmFpbGFibGUgYXQ6CisuSVAKK2h0dHA6Ly93 d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvbWluaXppcC5odG1sCithbmQgYWxzbyBpbiB0aGUKKy5J IGNvbnRyaWIvbWluaXppcAorZGlyZWN0b3J5IG9mIHRoZSBtYWluCisuSSB6bGliCitzb3VyY2Ug ZGlzdHJpYnV0aW9uLgorLlNIICJTRUUgQUxTTyIKK1RoZQorLkkgemxpYgord2ViIHNpdGUgY2Fu IGJlIGZvdW5kIGF0OgorLklQCitodHRwOi8vemxpYi5uZXQvCisuTFAKK1RoZSBkYXRhIGZvcm1h dCB1c2VkIGJ5IHRoZQorLkkgemxpYgorbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDCisoUmVx dWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXM6CisuSVAKK2h0dHA6 Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRy YWlsZXIgZm9ybWF0KQorLmJyCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxIChm b3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKKy5icgoraHR0cDovL3Rvb2xz LmlldGYub3JnL2h0bWwvcmZjMTk1MiAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBm b3JtYXQpCisuTFAKK01hcmsgTmVsc29uIHdyb3RlIGFuIGFydGljbGUgYWJvdXQKKy5JIHpsaWIK K2ZvciB0aGUgSmFuLiAxOTk3IGlzc3VlIG9mICBEci4gRG9iYidzIEpvdXJuYWw7CithIGNvcHkg b2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0OgorLklQCitodHRwOi8vbWFya25lbHNvbi51 cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLworLlNIICJSRVBPUlRJTkcgUFJPQkxFTVMiCitCZWZv cmUgcmVwb3J0aW5nIGEgcHJvYmxlbSwKK3BsZWFzZSBjaGVjayB0aGUKKy5JIHpsaWIKK3dlYiBz aXRlIHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZgorLklSIHps aWIgOworb3RoZXJ3aXNlLAorb2J0YWluIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQgc2VlIGlmIHRo ZSBwcm9ibGVtIHN0aWxsIGV4aXN0cy4KK1BsZWFzZSByZWFkIHRoZQorLkkgemxpYgorRkFRIGF0 OgorLklQCitodHRwOi8vemxpYi5uZXQvemxpYl9mYXEuaHRtbAorLkxQCitiZWZvcmUgYXNraW5n IGZvciBoZWxwLgorU2VuZCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHRvIHpsaWJAZ3ppcC5v cmcsCitvciAoZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uKSB0byBHaWxsZXMgVm9sbGFudCAo aW5mb0B3aW5pbWFnZS5jb20pLgorLlNIIEFVVEhPUlMgQU5EIExJQ0VOU0UKK1ZlcnNpb24gMS4y LjExCisuTFAKK0NvcHlyaWdodCAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkgYW5kIE1h cmsgQWRsZXIKKy5MUAorVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0 IGFueSBleHByZXNzIG9yIGltcGxpZWQKK3dhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUg YXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKK2FyaXNpbmcgZnJvbSB0aGUg dXNlIG9mIHRoaXMgc29mdHdhcmUuCisuTFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlv bmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAoraW5jbHVkaW5nIGNvbW1l cmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAor ZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorLkxQCisubnIg c3RlcCAxIDEKKy5JUCBcbltzdGVwXS4gMworVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11 c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKK2NsYWltIHRoYXQgeW91IHdy b3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCitpbiBh IHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24g d291bGQgYmUKK2FwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisuSVAgXG4rW3N0ZXBd LgorQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNo LCBhbmQgbXVzdCBub3QgYmUKK21pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBz b2Z0d2FyZS4KKy5JUCBcbitbc3RlcF0uCitUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQg b3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorLkxQCitKZWFuLWxvdXAg R2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCisuYnIKK2psb3VwQGd6aXAub3JnICAgICAgICAgIG1h ZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKKy5MUAorVGhlIGRlZmxhdGUgZm9ybWF0IHVzZWQgYnkK Ky5JIHpsaWIKK3dhcyBkZWZpbmVkIGJ5IFBoaWwgS2F0ei4KK1RoZSBkZWZsYXRlIGFuZAorLkkg emxpYgorc3BlY2lmaWNhdGlvbnMgd2VyZSB3cml0dGVuIGJ5IEwuIFBldGVyIERldXRzY2guCitU aGFua3MgdG8gYWxsIHRoZSBwZW9wbGUgd2hvIHJlcG9ydGVkIHByb2JsZW1zIGFuZCBzdWdnZXN0 ZWQgdmFyaW91cworaW1wcm92ZW1lbnRzIGluCisuSVIgemxpYiA7Cit3aG8gYXJlIHRvbyBudW1l cm91cyB0byBjaXRlIGhlcmUuCisuTFAKK1VOSVggbWFudWFsIHBhZ2UgYnkgUi4gUC4gQy4gUm9k Z2VycywKK1UuUy4gTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZSAocm9kZ2Vyc0BubG0ubmlo LmdvdikuCisuXCIgZW5kIG9mIG1hbiBwYWdlCmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3YjQ0 NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL3psaWIuMy5tYW4KLS0tIGEvc3lzL3NyYy9jbWQv Z3MvemxpYi96bGliLjMubWFuCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgL2Rl di9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMApAQCAtMSwxNTkgKzAsMCBAQAot LlRIIFpMSUIgMyAiMyBPY3RvYmVyIDIwMDQiCi0uU0ggTkFNRQotemxpYiBcLSBjb21wcmVzc2lv bi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKLS5TSCBTWU5PUFNJUwotW3NlZQotLkkgemxpYi5oCi1m b3IgZnVsbCBkZXNjcmlwdGlvbl0KLS5TSCBERVNDUklQVElPTgotVGhlCi0uSSB6bGliCi1saWJy YXJ5IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KLVRoZSBj b2RlIGlzIHRocmVhZCBzYWZlLgotSXQgcHJvdmlkZXMgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGFu ZCBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywKLWluY2x1ZGluZyBpbnRlZ3JpdHkgY2hlY2tzIG9m IHRoZSB1bmNvbXByZXNzZWQgZGF0YS4KLVRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBzdXBw b3J0cyBvbmx5IG9uZSBjb21wcmVzc2lvbiBtZXRob2QgKGRlZmxhdGlvbikKLWJ1dCBvdGhlciBh bGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIKLWFuZCB3aWxsIGhhdmUgdGhlIHNhbWUgc3Ry ZWFtIGludGVyZmFjZS4KLS5MUAotQ29tcHJlc3Npb24gY2FuIGJlIGRvbmUgaW4gYSBzaW5nbGUg c3RlcCBpZiB0aGUgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoCi0oZm9yIGV4YW1wbGUgaWYgYW4g aW5wdXQgZmlsZSBpcyBtbWFwJ2VkKSwKLW9yIGNhbiBiZSBkb25lIGJ5IHJlcGVhdGVkIGNhbGxz IG9mIHRoZSBjb21wcmVzc2lvbiBmdW5jdGlvbi4KLUluIHRoZSBsYXR0ZXIgY2FzZSwKLXRoZSBh cHBsaWNhdGlvbiBtdXN0IHByb3ZpZGUgbW9yZSBpbnB1dCBhbmQvb3IgY29uc3VtZSB0aGUgb3V0 cHV0Ci0ocHJvdmlkaW5nIG1vcmUgb3V0cHV0IHNwYWNlKSBiZWZvcmUgZWFjaCBjYWxsLgotLkxQ Ci1UaGUgbGlicmFyeSBhbHNvIHN1cHBvcnRzIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgaW4K LS5JUiBnemlwICgxKQotKC5neikgZm9ybWF0Ci13aXRoIGFuIGludGVyZmFjZSBzaW1pbGFyIHRv IHRoYXQgb2Ygc3RkaW8uCi0uTFAKLVRoZSBsaWJyYXJ5IGRvZXMgbm90IGluc3RhbGwgYW55IHNp Z25hbCBoYW5kbGVyLgotVGhlIGRlY29kZXIgY2hlY2tzIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUg Y29tcHJlc3NlZCBkYXRhLAotc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyIGNyYXNoIGV2ZW4g aW4gY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCi0uTFAKLUFsbCBmdW5jdGlvbnMgb2YgdGhlIGNv bXByZXNzaW9uIGxpYnJhcnkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUKLS5JUiB6bGliLmgg LgotVGhlIGRpc3RyaWJ1dGlvbiBzb3VyY2UgaW5jbHVkZXMgZXhhbXBsZXMgb2YgdXNlIG9mIHRo ZSBsaWJyYXJ5Ci1pbiB0aGUgZmlsZXMKLS5JIGV4YW1wbGUuYwotYW5kCi0uSVIgbWluaWd6aXAu YyAuCi0uTFAKLUNoYW5nZXMgdG8gdGhpcyB2ZXJzaW9uIGFyZSBkb2N1bWVudGVkIGluIHRoZSBm aWxlCi0uSSBDaGFuZ2VMb2cKLXRoYXQgYWNjb21wYW5pZXMgdGhlIHNvdXJjZSwKLWFuZCBhcmUg Y29uY2VybmVkIHByaW1hcmlseSB3aXRoIGJ1ZyBmaXhlcyBhbmQgcG9ydGFiaWxpdHkgZW5oYW5j ZW1lbnRzLgotLkxQCi1BIEphdmEgaW1wbGVtZW50YXRpb24gb2YKLS5JIHpsaWIKLWlzIGF2YWls YWJsZSBpbiB0aGUgSmF2YSBEZXZlbG9wbWVudCBLaXQgMS4xOgotLklQCi1odHRwOi8vd3d3Lmph dmFzb2Z0LmNvbS9wcm9kdWN0cy9KREsvMS4xL2RvY3MvYXBpL1BhY2thZ2UtamF2YS51dGlsLnpp cC5odG1sCi0uTFAKLUEgUGVybCBpbnRlcmZhY2UgdG8KLS5JUiB6bGliICwKLXdyaXR0ZW4gYnkg UGF1bCBNYXJxdWVzcyAocG1xc0BjcGFuLm9yZyksCi1pcyBhdmFpbGFibGUgYXQgQ1BBTiAoQ29t cHJlaGVuc2l2ZSBQZXJsIEFyY2hpdmUgTmV0d29yaykgc2l0ZXMsCi1pbmNsdWRpbmc6Ci0uSVAK LWh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvQ29tcHJlc3MvCi0uTFAKLUEg UHl0aG9uIGludGVyZmFjZSB0bwotLklSIHpsaWIgLAotd3JpdHRlbiBieSBBLk0uIEt1Y2hsaW5n IChhbWtAbWFnbmV0LmNvbSksCi1pcyBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIg dmVyc2lvbnM6Ci0uSVAKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvbGliL21vZHVsZS16bGli Lmh0bWwKLS5MUAotQQotLkkgemxpYgotYmluZGluZyBmb3IKLS5JUiB0Y2wgKDEpLAotd3JpdHRl biBieSBBbmRyZWFzIEt1cHJpZXMgKGEua3Vwcmllc0B3ZXN0ZW5kLmNvbSksCi1pcyBhdmFpbGxh YmxlIGF0OgotLklQCi1odHRwOi8vd3d3Lndlc3RlbmQuY29tL35rdXByaWVzL2RvYy90cmYvbWFu L21hbi5odG1sCi0uTFAKLUFuIGV4cGVyaW1lbnRhbCBwYWNrYWdlIHRvIHJlYWQgYW5kIHdyaXRl IGZpbGVzIGluIC56aXAgZm9ybWF0LAotd3JpdHRlbiBvbiB0b3Agb2YKLS5JIHpsaWIKLWJ5IEdp bGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSksCi1pcyBhdmFpbGFibGUgYXQ6Ci0uSVAK LWh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvdW56aXAuaHRtbAotYW5kIGFsc28gaW4g dGhlCi0uSSBjb250cmliL21pbml6aXAKLWRpcmVjdG9yeSBvZiB0aGUgbWFpbgotLkkgemxpYgot d2ViIHNpdGUuCi0uU0ggIlNFRSBBTFNPIgotVGhlCi0uSSB6bGliCi13ZWIgc2l0ZSBjYW4gYmUg Zm91bmQgYXQgZWl0aGVyIG9mIHRoZXNlIGxvY2F0aW9uczoKLS5JUAotaHR0cDovL3d3dy56bGli Lm9yZwotLmJyCi1odHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvCi0uTFAKLVRoZSBkYXRhIGZvcm1h dCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQwotKFJlcXVlc3Qg Zm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzOgotLklQCi1odHRwOi8vd3d3 LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoY29uY2VybmluZyB6bGliIGZvcm1hdCkKLS5icgot aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MS50eHQgKGNvbmNlcm5pbmcgZGVmbGF0ZSBm b3JtYXQpCi0uYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTIudHh0IChjb25jZXJu aW5nIGd6aXAgZm9ybWF0KQotLkxQCi1UaGVzZSBkb2N1bWVudHMgYXJlIGFsc28gYXZhaWxhYmxl IGluIG90aGVyIGZvcm1hdHMgZnJvbToKLS5JUAotZnRwOi8vZnRwLnV1Lm5ldC9ncmFwaGljcy9w bmcvZG9jdW1lbnRzL3psaWIvemRvYy1pbmRleC5odG1sCi0uTFAKLU1hcmsgTmVsc29uIChtYXJr bkBpZWVlLm9yZykgd3JvdGUgYW4gYXJ0aWNsZSBhYm91dAotLkkgemxpYgotZm9yIHRoZSBKYW4u IDE5OTcgaXNzdWUgb2YgIERyLiBEb2JiJ3MgSm91cm5hbDsKLWEgY29weSBvZiB0aGUgYXJ0aWNs ZSBpcyBhdmFpbGFibGUgYXQ6Ci0uSVAKLWh0dHA6Ly9kb2dtYS5uZXQvbWFya24vYXJ0aWNsZXMv emxpYnRvb2wvemxpYnRvb2wuaHRtCi0uU0ggIlJFUE9SVElORyBQUk9CTEVNUyIKLUJlZm9yZSBy ZXBvcnRpbmcgYSBwcm9ibGVtLAotcGxlYXNlIGNoZWNrIHRoZQotLkkgemxpYgotd2ViIHNpdGUg dG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mCi0uSVIgemxpYiA7 Ci1vdGhlcndpc2UsCi1vYnRhaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZCBzZWUgaWYgdGhlIHBy b2JsZW0gc3RpbGwgZXhpc3RzLgotUGxlYXNlIHJlYWQgdGhlCi0uSSB6bGliCi1GQVEgYXQ6Ci0u SVAKLWh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi96bGliX2ZhcS5odG1sCi0uTFAKLWJlZm9yZSBh c2tpbmcgZm9yIGhlbHAuCi1TZW5kIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgdG8gemxpYkBn emlwLm9yZywKLW9yIChmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24pIHRvIEdpbGxlcyBWb2xs YW50IChpbmZvQHdpbmltYWdlLmNvbSkuCi0uU0ggQVVUSE9SUwotVmVyc2lvbiAxLjIuMgotQ29w eXJpZ2h0IChDKSAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCi1h bmQgTWFyayBBZGxlciAobWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdSkuCi0uTFAKLVRoaXMgc29m dHdhcmUgaXMgcHJvdmlkZWQgImFzLWlzLCIKLXdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGll ZCB3YXJyYW50eS4KLUluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUg Zm9yIGFueSBkYW1hZ2VzCi1hcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgot U2VlIHRoZSBkaXN0cmlidXRpb24gZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byByZXF1aXJlbWVu dHMKLWdvdmVybmluZyByZWRpc3RyaWJ1dGlvbi4KLVRoZSBkZWZsYXRlIGZvcm1hdCB1c2VkIGJ5 Ci0uSSB6bGliCi13YXMgZGVmaW5lZCBieSBQaGlsIEthdHouCi1UaGUgZGVmbGF0ZSBhbmQKLS5J IHpsaWIKLXNwZWNpZmljYXRpb25zIHdlcmUgd3JpdHRlbiBieSBMLiBQZXRlciBEZXV0c2NoLgot VGhhbmtzIHRvIGFsbCB0aGUgcGVvcGxlIHdobyByZXBvcnRlZCBwcm9ibGVtcyBhbmQgc3VnZ2Vz dGVkIHZhcmlvdXMKLWltcHJvdmVtZW50cyBpbgotLklSIHpsaWIgOwotd2hvIGFyZSB0b28gbnVt ZXJvdXMgdG8gY2l0ZSBoZXJlLgotLkxQCi1VTklYIG1hbnVhbCBwYWdlIGJ5IFIuIFAuIEMuIFJv ZGdlcnMsCi1VLlMuIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUgKHJvZGdlcnNAbmxtLm5p aC5nb3YpLgotLlwiIGVuZCBvZiBtYW4gcGFnZQpkaWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0 NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi96bGliLmgKLS0tIGEvc3lzL3NyYy9jbWQvZ3Mv emxpYi96bGliLmgJV2VkIE1heSAyNyAwMDowOTo0NiAyMDIwICswMjAwCisrKyBiL3N5cy9zcmMv Y21kL2dzL3psaWIvemxpYi5oCVdlZCBNYXkgMjcgMTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMSw3 ICsxLDcgQEAKIC8qIHpsaWIuaCAtLSBpbnRlcmZhY2Ugb2YgdGhlICd6bGliJyBnZW5lcmFsIHB1 cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeQotICB2ZXJzaW9uIDEuMi4yLCBPY3RvYmVyIDNyZCwg MjAwNAorICB2ZXJzaW9uIDEuMi4xMSwgSmFudWFyeSAxNXRoLCAyMDE3CiAKLSAgQ29weXJpZ2h0 IChDKSAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICBDb3B5cmln aHQgKEMpIDE5OTUtMjAxNyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhp cyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGlt cGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQg bGlhYmxlIGZvciBhbnkgZGFtYWdlcwpAQCAtMjQsOCArMjQsOCBAQAogCiAKICAgVGhlIGRhdGEg Zm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVx dWVzdCBmb3IKLSAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3d3 dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQKLSAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQg KGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4KKyAgQ29tbWVu dHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwv cmZjMTk1MAorICAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kIHJm YzE5NTIgKGd6aXAgZm9ybWF0KS4KICovCiAKICNpZm5kZWYgWkxJQl9ICkBAIC0zNyw0MSArMzcs NDUgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIu MiIKLSNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjIwCisjZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4y LjExIgorI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyYjAKKyNkZWZpbmUgWkxJQl9WRVJfTUFKT1Ig MQorI2RlZmluZSBaTElCX1ZFUl9NSU5PUiAyCisjZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDEx CisjZGVmaW5lIFpMSUJfVkVSX1NVQlJFVklTSU9OIDAKIAogLyoKLSAgICAgVGhlICd6bGliJyBj b21wcmVzc2lvbiBsaWJyYXJ5IHByb3ZpZGVzIGluLW1lbW9yeSBjb21wcmVzc2lvbiBhbmQKLSAg ZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMsIGluY2x1ZGluZyBpbnRlZ3JpdHkgY2hlY2tzIG9mIHRo ZSB1bmNvbXByZXNzZWQKLSAgZGF0YS4gIFRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBzdXBw b3J0cyBvbmx5IG9uZSBjb21wcmVzc2lvbiBtZXRob2QKLSAgKGRlZmxhdGlvbikgYnV0IG90aGVy IGFsZ29yaXRobXMgd2lsbCBiZSBhZGRlZCBsYXRlciBhbmQgd2lsbCBoYXZlIHRoZSBzYW1lCi0g IHN0cmVhbSBpbnRlcmZhY2UuCisgICAgVGhlICd6bGliJyBjb21wcmVzc2lvbiBsaWJyYXJ5IHBy b3ZpZGVzIGluLW1lbW9yeSBjb21wcmVzc2lvbiBhbmQKKyAgZGVjb21wcmVzc2lvbiBmdW5jdGlv bnMsIGluY2x1ZGluZyBpbnRlZ3JpdHkgY2hlY2tzIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4K KyAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIG9ubHkgb25lIGNvbXByZXNz aW9uIG1ldGhvZCAoZGVmbGF0aW9uKQorICBidXQgb3RoZXIgYWxnb3JpdGhtcyB3aWxsIGJlIGFk ZGVkIGxhdGVyIGFuZCB3aWxsIGhhdmUgdGhlIHNhbWUgc3RyZWFtCisgIGludGVyZmFjZS4KIAot ICAgICBDb21wcmVzc2lvbiBjYW4gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwIGlmIHRoZSBidWZm ZXJzIGFyZSBsYXJnZQotICBlbm91Z2ggKGZvciBleGFtcGxlIGlmIGFuIGlucHV0IGZpbGUgaXMg bW1hcCdlZCksIG9yIGNhbiBiZSBkb25lIGJ5Ci0gIHJlcGVhdGVkIGNhbGxzIG9mIHRoZSBjb21w cmVzc2lvbiBmdW5jdGlvbi4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlCi0gIGFwcGxpY2F0aW9u IG11c3QgcHJvdmlkZSBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1lIHRoZSBvdXRwdXQKKyAgICBD b21wcmVzc2lvbiBjYW4gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwIGlmIHRoZSBidWZmZXJzIGFy ZSBsYXJnZSBlbm91Z2gsCisgIG9yIGNhbiBiZSBkb25lIGJ5IHJlcGVhdGVkIGNhbGxzIG9mIHRo ZSBjb21wcmVzc2lvbiBmdW5jdGlvbi4gIEluIHRoZSBsYXR0ZXIKKyAgY2FzZSwgdGhlIGFwcGxp Y2F0aW9uIG11c3QgcHJvdmlkZSBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1lIHRoZSBvdXRwdXQK ICAgKHByb3ZpZGluZyBtb3JlIG91dHB1dCBzcGFjZSkgYmVmb3JlIGVhY2ggY2FsbC4KIAotICAg ICBUaGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB1c2VkIGJ5IGRlZmF1bHQgYnkgdGhlIGluLW1l bW9yeSBmdW5jdGlvbnMgaXMKKyAgICBUaGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB1c2VkIGJ5 IGRlZmF1bHQgYnkgdGhlIGluLW1lbW9yeSBmdW5jdGlvbnMgaXMKICAgdGhlIHpsaWIgZm9ybWF0 LCB3aGljaCBpcyBhIHpsaWIgd3JhcHBlciBkb2N1bWVudGVkIGluIFJGQyAxOTUwLCB3cmFwcGVk CiAgIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLCB3aGljaCBpcyBpdHNlbGYgZG9jdW1lbnRlZCBp biBSRkMgMTk1MS4KIAotICAgICBUaGUgbGlicmFyeSBhbHNvIHN1cHBvcnRzIHJlYWRpbmcgYW5k IHdyaXRpbmcgZmlsZXMgaW4gZ3ppcCAoLmd6KSBmb3JtYXQKKyAgICBUaGUgbGlicmFyeSBhbHNv IHN1cHBvcnRzIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgaW4gZ3ppcCAoLmd6KSBmb3JtYXQK ICAgd2l0aCBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvIHVzaW5nIHRoZSBm dW5jdGlvbnMgdGhhdCBzdGFydAogICB3aXRoICJneiIuICBUaGUgZ3ppcCBmb3JtYXQgaXMgZGlm ZmVyZW50IGZyb20gdGhlIHpsaWIgZm9ybWF0LiAgZ3ppcCBpcyBhCiAgIGd6aXAgd3JhcHBlciwg ZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4K IAotICAgICBUaGlzIGxpYnJhcnkgY2FuIG9wdGlvbmFsbHkgcmVhZCBhbmQgd3JpdGUgZ3ppcCBz dHJlYW1zIGluIG1lbW9yeSBhcyB3ZWxsLgorICAgIFRoaXMgbGlicmFyeSBjYW4gb3B0aW9uYWxs eSByZWFkIGFuZCB3cml0ZSBnemlwIGFuZCByYXcgZGVmbGF0ZSBzdHJlYW1zIGluCisgIG1lbW9y eSBhcyB3ZWxsLgogCi0gICAgIFRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQgdG8gYmUgY29t cGFjdCBhbmQgZmFzdCBmb3IgdXNlIGluIG1lbW9yeQorICAgIFRoZSB6bGliIGZvcm1hdCB3YXMg ZGVzaWduZWQgdG8gYmUgY29tcGFjdCBhbmQgZmFzdCBmb3IgdXNlIGluIG1lbW9yeQogICBhbmQg b24gY29tbXVuaWNhdGlvbnMgY2hhbm5lbHMuICBUaGUgZ3ppcCBmb3JtYXQgd2FzIGRlc2lnbmVk IGZvciBzaW5nbGUtCiAgIGZpbGUgY29tcHJlc3Npb24gb24gZmlsZSBzeXN0ZW1zLCBoYXMgYSBs YXJnZXIgaGVhZGVyIHRoYW4gemxpYiB0byBtYWludGFpbgogICBkaXJlY3RvcnkgaW5mb3JtYXRp b24sIGFuZCB1c2VzIGEgZGlmZmVyZW50LCBzbG93ZXIgY2hlY2sgbWV0aG9kIHRoYW4gemxpYi4K IAotICAgICBUaGUgbGlicmFyeSBkb2VzIG5vdCBpbnN0YWxsIGFueSBzaWduYWwgaGFuZGxlci4g VGhlIGRlY29kZXIgY2hlY2tzCi0gIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgY29tcHJlc3NlZCBk YXRhLCBzbyB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIKLSAgY3Jhc2ggZXZlbiBpbiBjYXNlIG9m IGNvcnJ1cHRlZCBpbnB1dC4KKyAgICBUaGUgbGlicmFyeSBkb2VzIG5vdCBpbnN0YWxsIGFueSBz aWduYWwgaGFuZGxlci4gIFRoZSBkZWNvZGVyIGNoZWNrcworICB0aGUgY29uc2lzdGVuY3kgb2Yg dGhlIGNvbXByZXNzZWQgZGF0YSwgc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyIGNyYXNoCisg IGV2ZW4gaW4gdGhlIGNhc2Ugb2YgY29ycnVwdGVkIGlucHV0LgogKi8KIAogdHlwZWRlZiB2b2lk cGYgKCphbGxvY19mdW5jKSBPRigodm9pZHBmIG9wYXF1ZSwgdUludCBpdGVtcywgdUludCBzaXpl KSk7CkBAIC04MCw2OCArODQsOTQgQEAKIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKIAogdHlwZWRl ZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7Ci0gICAgQnl0ZWYgICAgKm5leHRfaW47ICAvKiBuZXh0IGlu cHV0IGJ5dGUgKi8KKyAgICB6X2NvbnN0IEJ5dGVmICpuZXh0X2luOyAgICAgLyogbmV4dCBpbnB1 dCBieXRlICovCiAgICAgdUludCAgICAgYXZhaWxfaW47ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZh aWxhYmxlIGF0IG5leHRfaW4gKi8KLSAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG5i IG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxfaW47ICAv KiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KIAotICAgIEJ5dGVm ICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICov CisgICAgQnl0ZWYgICAgKm5leHRfb3V0OyAvKiBuZXh0IG91dHB1dCBieXRlIHdpbGwgZ28gaGVy ZSAqLwogICAgIHVJbnQgICAgIGF2YWlsX291dDsgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQg bmV4dF9vdXQgKi8KLSAgICB1TG9uZyAgICB0b3RhbF9vdXQ7IC8qIHRvdGFsIG5iIG9mIGJ5dGVz IG91dHB1dCBzbyBmYXIgKi8KKyAgICB1TG9uZyAgICB0b3RhbF9vdXQ7IC8qIHRvdGFsIG51bWJl ciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCiAKLSAgICBjaGFyICAgICAqbXNnOyAgICAgIC8q IGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLworICAgIHpfY29uc3QgY2hh ciAqbXNnOyAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCiAgICAg c3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqc3RhdGU7IC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxp Y2F0aW9ucyAqLwogCiAgICAgYWxsb2NfZnVuYyB6YWxsb2M7ICAvKiB1c2VkIHRvIGFsbG9jYXRl IHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogICAgIGZyZWVfZnVuYyAgemZyZWU7ICAgLyogdXNlZCB0 byBmcmVlIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogICAgIHZvaWRwZiAgICAgb3BhcXVlOyAgLyog cHJpdmF0ZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gemFsbG9jIGFuZCB6ZnJlZSAqLwogCi0gICAg aW50ICAgICBkYXRhX3R5cGU7ICAvKiBiZXN0IGd1ZXNzIGFib3V0IHRoZSBkYXRhIHR5cGU6IGFz Y2lpIG9yIGJpbmFyeSAqLwotICAgIHVMb25nICAgYWRsZXI7ICAgICAgLyogYWRsZXIzMiB2YWx1 ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgICBpbnQgICAgIGRhdGFfdHlwZTsgIC8q IGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciBkZWZsYXRlLCBvciB0aGUgZGVjb2Rpbmcgc3RhdGUgZm9y IGluZmxhdGUgKi8KKyAgICB1TG9uZyAgIGFkbGVyOyAgICAgIC8qIEFkbGVyLTMyIG9yIENSQy0z MiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi8KICAgICB1TG9uZyAgIHJlc2VydmVk OyAgIC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiB9IHpfc3RyZWFtOwogCiB0eXBlZGVm IHpfc3RyZWFtIEZBUiAqel9zdHJlYW1wOwogCiAvKgotICAgVGhlIGFwcGxpY2F0aW9uIG11c3Qg dXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luIHdoZW4gYXZhaWxfaW4gaGFzCi0gICBkcm9wcGVk IHRvIHplcm8uIEl0IG11c3QgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgd2hlbiBhdmFp bF9vdXQKLSAgIGhhcyBkcm9wcGVkIHRvIHplcm8uIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluaXRp YWxpemUgemFsbG9jLCB6ZnJlZSBhbmQKLSAgIG9wYXF1ZSBiZWZvcmUgY2FsbGluZyB0aGUgaW5p dCBmdW5jdGlvbi4gQWxsIG90aGVyIGZpZWxkcyBhcmUgc2V0IGJ5IHRoZQotICAgY29tcHJlc3Np b24gbGlicmFyeSBhbmQgbXVzdCBub3QgYmUgdXBkYXRlZCBieSB0aGUgYXBwbGljYXRpb24uCisg ICAgIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIHBhc3NlZCB0byBhbmQgZnJvbSB6bGliIHJvdXRp bmVzLiAgU2VlIFJGQyAxOTUyCisgIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIG1lYW5pbmdzIG9m IHRoZXNlIGZpZWxkcy4KKyovCit0eXBlZGVmIHN0cnVjdCBnel9oZWFkZXJfcyB7CisgICAgaW50 ICAgICB0ZXh0OyAgICAgICAvKiB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBiZWxpZXZlZCB0byBi ZSB0ZXh0ICovCisgICAgdUxvbmcgICB0aW1lOyAgICAgICAvKiBtb2RpZmljYXRpb24gdGltZSAq LworICAgIGludCAgICAgeGZsYWdzOyAgICAgLyogZXh0cmEgZmxhZ3MgKG5vdCB1c2VkIHdoZW4g d3JpdGluZyBhIGd6aXAgZmlsZSkgKi8KKyAgICBpbnQgICAgIG9zOyAgICAgICAgIC8qIG9wZXJh dGluZyBzeXN0ZW0gKi8KKyAgICBCeXRlZiAgICpleHRyYTsgICAgIC8qIHBvaW50ZXIgdG8gZXh0 cmEgZmllbGQgb3IgWl9OVUxMIGlmIG5vbmUgKi8KKyAgICB1SW50ICAgIGV4dHJhX2xlbjsgIC8q IGV4dHJhIGZpZWxkIGxlbmd0aCAodmFsaWQgaWYgZXh0cmEgIT0gWl9OVUxMKSAqLworICAgIHVJ bnQgICAgZXh0cmFfbWF4OyAgLyogc3BhY2UgYXQgZXh0cmEgKG9ubHkgd2hlbiByZWFkaW5nIGhl YWRlcikgKi8KKyAgICBCeXRlZiAgICpuYW1lOyAgICAgIC8qIHBvaW50ZXIgdG8gemVyby10ZXJt aW5hdGVkIGZpbGUgbmFtZSBvciBaX05VTEwgKi8KKyAgICB1SW50ICAgIG5hbWVfbWF4OyAgIC8q IHNwYWNlIGF0IG5hbWUgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi8KKyAgICBCeXRlZiAg ICpjb21tZW50OyAgIC8qIHBvaW50ZXIgdG8gemVyby10ZXJtaW5hdGVkIGNvbW1lbnQgb3IgWl9O VUxMICovCisgICAgdUludCAgICBjb21tX21heDsgICAvKiBzcGFjZSBhdCBjb21tZW50IChvbmx5 IHdoZW4gcmVhZGluZyBoZWFkZXIpICovCisgICAgaW50ICAgICBoY3JjOyAgICAgICAvKiB0cnVl IGlmIHRoZXJlIHdhcyBvciB3aWxsIGJlIGEgaGVhZGVyIGNyYyAqLworICAgIGludCAgICAgZG9u ZTsgICAgICAgLyogdHJ1ZSB3aGVuIGRvbmUgcmVhZGluZyBnemlwIGhlYWRlciAobm90IHVzZWQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gd3JpdGluZyBhIGd6aXAgZmlsZSkgKi8K K30gZ3pfaGVhZGVyOwogCi0gICBUaGUgb3BhcXVlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBhcHBs aWNhdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QKLSAgIHBhcmFtZXRlciBmb3IgY2Fs bHMgb2YgemFsbG9jIGFuZCB6ZnJlZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjdXN0b20KLSAg IG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBhdHRhY2hlcyBubyBt ZWFuaW5nIHRvIHRoZQordHlwZWRlZiBnel9oZWFkZXIgRkFSICpnel9oZWFkZXJwOworCisvKgor ICAgICBUaGUgYXBwbGljYXRpb24gbXVzdCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4gd2hl biBhdmFpbF9pbiBoYXMgZHJvcHBlZAorICAgdG8gemVyby4gIEl0IG11c3QgdXBkYXRlIG5leHRf b3V0IGFuZCBhdmFpbF9vdXQgd2hlbiBhdmFpbF9vdXQgaGFzIGRyb3BwZWQKKyAgIHRvIHplcm8u ICBUaGUgYXBwbGljYXRpb24gbXVzdCBpbml0aWFsaXplIHphbGxvYywgemZyZWUgYW5kIG9wYXF1 ZSBiZWZvcmUKKyAgIGNhbGxpbmcgdGhlIGluaXQgZnVuY3Rpb24uICBBbGwgb3RoZXIgZmllbGRz IGFyZSBzZXQgYnkgdGhlIGNvbXByZXNzaW9uCisgICBsaWJyYXJ5IGFuZCBtdXN0IG5vdCBiZSB1 cGRhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKworICAgICBUaGUgb3BhcXVlIHZhbHVlIHByb3Zp ZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QKKyAgIHBh cmFtZXRlciBmb3IgY2FsbHMgb2YgemFsbG9jIGFuZCB6ZnJlZS4gIFRoaXMgY2FuIGJlIHVzZWZ1 bCBmb3IgY3VzdG9tCisgICBtZW1vcnkgbWFuYWdlbWVudC4gIFRoZSBjb21wcmVzc2lvbiBsaWJy YXJ5IGF0dGFjaGVzIG5vIG1lYW5pbmcgdG8gdGhlCiAgICBvcGFxdWUgdmFsdWUuCiAKLSAgIHph bGxvYyBtdXN0IHJldHVybiBaX05VTEwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgZm9y IHRoZSBvYmplY3QuCisgICAgIHphbGxvYyBtdXN0IHJldHVybiBaX05VTEwgaWYgdGhlcmUgaXMg bm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBvYmplY3QuCiAgICBJZiB6bGliIGlzIHVzZWQgaW4g YSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbiwgemFsbG9jIGFuZCB6ZnJlZSBtdXN0IGJlCi0g ICB0aHJlYWQgc2FmZS4KKyAgIHRocmVhZCBzYWZlLiAgSW4gdGhhdCBjYXNlLCB6bGliIGlzIHRo cmVhZC1zYWZlLiAgV2hlbiB6YWxsb2MgYW5kIHpmcmVlIGFyZQorICAgWl9OVUxMIG9uIGVudHJ5 IHRvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgdGhleSBhcmUgc2V0IHRvIGludGVybmFs CisgICByb3V0aW5lcyB0aGF0IHVzZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgbWFs bG9jKCkgYW5kIGZyZWUoKS4KIAotICAgT24gMTYtYml0IHN5c3RlbXMsIHRoZSBmdW5jdGlvbnMg emFsbG9jIGFuZCB6ZnJlZSBtdXN0IGJlIGFibGUgdG8gYWxsb2NhdGUKLSAgIGV4YWN0bHkgNjU1 MzYgYnl0ZXMsIGJ1dCB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4g dGhpcwotICAgaWYgdGhlIHN5bWJvbCBNQVhTRUdfNjRLIGlzIGRlZmluZWQgKHNlZSB6Y29uZi5o KS4gV0FSTklORzogT24gTVNET1MsCi0gICBwb2ludGVycyByZXR1cm5lZCBieSB6YWxsb2MgZm9y IG9iamVjdHMgb2YgZXhhY3RseSA2NTUzNiBieXRlcyAqbXVzdCoKLSAgIGhhdmUgdGhlaXIgb2Zm c2V0IG5vcm1hbGl6ZWQgdG8gemVyby4gVGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbgot ICAgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5IGVuc3VyZXMgdGhpcyAoc2VlIHp1dGlsLmMpLiBU byByZWR1Y2UgbWVtb3J5Ci0gICByZXF1aXJlbWVudHMgYW5kIGF2b2lkIGFueSBhbGxvY2F0aW9u IG9mIDY0SyBvYmplY3RzLCBhdCB0aGUgZXhwZW5zZSBvZgotICAgY29tcHJlc3Npb24gcmF0aW8s IGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCAtRE1BWF9XQklUUz0xNCAoc2VlIHpjb25mLmgpLgor ICAgICBPbiAxNi1iaXQgc3lzdGVtcywgdGhlIGZ1bmN0aW9ucyB6YWxsb2MgYW5kIHpmcmVlIG11 c3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgZXhhY3RseSA2NTUzNiBieXRlcywgYnV0IHdpbGwg bm90IGJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGlzIGlmCisgICB0aGUgc3lt Ym9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiAgV0FSTklORzogT24gTVNE T1MsIHBvaW50ZXJzCisgICByZXR1cm5lZCBieSB6YWxsb2MgZm9yIG9iamVjdHMgb2YgZXhhY3Rs eSA2NTUzNiBieXRlcyAqbXVzdCogaGF2ZSB0aGVpcgorICAgb2Zmc2V0IG5vcm1hbGl6ZWQgdG8g emVyby4gIFRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhpcwor ICAgbGlicmFyeSBlbnN1cmVzIHRoaXMgKHNlZSB6dXRpbC5jKS4gIFRvIHJlZHVjZSBtZW1vcnkg cmVxdWlyZW1lbnRzIGFuZCBhdm9pZAorICAgYW55IGFsbG9jYXRpb24gb2YgNjRLIG9iamVjdHMs IGF0IHRoZSBleHBlbnNlIG9mIGNvbXByZXNzaW9uIHJhdGlvLCBjb21waWxlCisgICB0aGUgbGli cmFyeSB3aXRoIC1ETUFYX1dCSVRTPTE0IChzZWUgemNvbmYuaCkuCiAKLSAgIFRoZSBmaWVsZHMg dG90YWxfaW4gYW5kIHRvdGFsX291dCBjYW4gYmUgdXNlZCBmb3Igc3RhdGlzdGljcyBvcgotICAg cHJvZ3Jlc3MgcmVwb3J0cy4gQWZ0ZXIgY29tcHJlc3Npb24sIHRvdGFsX2luIGhvbGRzIHRoZSB0 b3RhbCBzaXplIG9mCi0gICB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBm b3IgdXNlIGluIHRoZSBkZWNvbXByZXNzb3IKLSAgIChwYXJ0aWN1bGFybHkgaWYgdGhlIGRlY29t cHJlc3NvciB3YW50cyB0byBkZWNvbXByZXNzIGV2ZXJ5dGhpbmcgaW4KLSAgIGEgc2luZ2xlIHN0 ZXApLgorICAgICBUaGUgZmllbGRzIHRvdGFsX2luIGFuZCB0b3RhbF9vdXQgY2FuIGJlIHVzZWQg Zm9yIHN0YXRpc3RpY3Mgb3IgcHJvZ3Jlc3MKKyAgIHJlcG9ydHMuICBBZnRlciBjb21wcmVzc2lv biwgdG90YWxfaW4gaG9sZHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlCisgICB1bmNvbXByZXNzZWQg ZGF0YSBhbmQgbWF5IGJlIHNhdmVkIGZvciB1c2UgYnkgdGhlIGRlY29tcHJlc3NvciAocGFydGlj dWxhcmx5CisgICBpZiB0aGUgZGVjb21wcmVzc29yIHdhbnRzIHRvIGRlY29tcHJlc3MgZXZlcnl0 aGluZyBpbiBhIHNpbmdsZSBzdGVwKS4KICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGNvbnN0YW50cyAqLwogCiAjZGVmaW5lIFpfTk9fRkxVU0ggICAgICAwCi0jZGVmaW5lIFpfUEFS VElBTF9GTFVTSCAxIC8qIHdpbGwgYmUgcmVtb3ZlZCwgdXNlIFpfU1lOQ19GTFVTSCBpbnN0ZWFk ICovCisjZGVmaW5lIFpfUEFSVElBTF9GTFVTSCAxCiAjZGVmaW5lIFpfU1lOQ19GTFVTSCAgICAy CiAjZGVmaW5lIFpfRlVMTF9GTFVTSCAgICAzCiAjZGVmaW5lIFpfRklOSVNIICAgICAgICA0CiAj ZGVmaW5lIFpfQkxPQ0sgICAgICAgICA1CisjZGVmaW5lIFpfVFJFRVMgICAgICAgICA2CiAvKiBB bGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZv ciBkZXRhaWxzICovCiAKICNkZWZpbmUgWl9PSyAgICAgICAgICAgIDAKQEAgLTE1Myw4ICsxODMs OCBAQAogI2RlZmluZSBaX01FTV9FUlJPUiAgICAoLTQpCiAjZGVmaW5lIFpfQlVGX0VSUk9SICAg ICgtNSkKICNkZWZpbmUgWl9WRVJTSU9OX0VSUk9SICgtNikKLS8qIFJldHVybiBjb2RlcyBmb3Ig dGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZQotICogdmFs dWVzIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQg bm9ybWFsIGV2ZW50cy4KKy8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29t cHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKKyAqIGFyZSBlcnJvcnMsIHBvc2l0 aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KICAqLwog CiAjZGVmaW5lIFpfTk9fQ09NUFJFU1NJT04gICAgICAgICAwCkBAIC0xNjYsMTMgKzE5NiwxNSBA QAogI2RlZmluZSBaX0ZJTFRFUkVEICAgICAgICAgICAgMQogI2RlZmluZSBaX0hVRkZNQU5fT05M WSAgICAgICAgMgogI2RlZmluZSBaX1JMRSAgICAgICAgICAgICAgICAgMworI2RlZmluZSBaX0ZJ WEVEICAgICAgICAgICAgICAgNAogI2RlZmluZSBaX0RFRkFVTFRfU1RSQVRFR1kgICAgMAogLyog Y29tcHJlc3Npb24gc3RyYXRlZ3k7IHNlZSBkZWZsYXRlSW5pdDIoKSBiZWxvdyBmb3IgZGV0YWls cyAqLwogCiAjZGVmaW5lIFpfQklOQVJZICAgMAotI2RlZmluZSBaX0FTQ0lJICAgIDEKKyNkZWZp bmUgWl9URVhUICAgICAxCisjZGVmaW5lIFpfQVNDSUkgICAgWl9URVhUICAgLyogZm9yIGNvbXBh dGliaWxpdHkgd2l0aCAxLjIuMiBhbmQgZWFybGllciAqLwogI2RlZmluZSBaX1VOS05PV04gIDIK LS8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGlu ZmxhdGUoKSkgKi8KKy8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkIGZv ciBkZWZsYXRlKCkgKi8KIAogI2RlZmluZSBaX0RFRkxBVEVEICAgOAogLyogVGhlIGRlZmxhdGUg Y29tcHJlc3Npb24gbWV0aG9kICh0aGUgb25seSBvbmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lv bikgKi8KQEAgLTE4MiwxMzAgKzIxNCwxNjIgQEAKICNkZWZpbmUgemxpYl92ZXJzaW9uIHpsaWJW ZXJzaW9uKCkKIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgPCAxLjAuMiAqLwog CisKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2ljIGZ1bmN0aW9ucyAqLwogCiBaRVhU RVJOIGNvbnN0IGNoYXIgKiBaRVhQT1JUIHpsaWJWZXJzaW9uIE9GKCh2b2lkKSk7CiAvKiBUaGUg YXBwbGljYXRpb24gY2FuIGNvbXBhcmUgemxpYlZlcnNpb24gYW5kIFpMSUJfVkVSU0lPTiBmb3Ig Y29uc2lzdGVuY3kuCi0gICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGRpZmZlcnMsIHRoZSBsaWJy YXJ5IGNvZGUgYWN0dWFsbHkgdXNlZCBpcwotICAgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgemxp Yi5oIGhlYWRlciBmaWxlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgotICAgVGhpcyBjaGVjayBp cyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0LgorICAg SWYgdGhlIGZpcnN0IGNoYXJhY3RlciBkaWZmZXJzLCB0aGUgbGlicmFyeSBjb2RlIGFjdHVhbGx5 IHVzZWQgaXMgbm90CisgICBjb21wYXRpYmxlIHdpdGggdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSB1 c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIFRoaXMgY2hlY2sKKyAgIGlzIGF1dG9tYXRpY2FsbHkg bWFkZSBieSBkZWZsYXRlSW5pdCBhbmQgaW5mbGF0ZUluaXQuCiAgKi8KIAogLyoKIFpFWFRFUk4g aW50IFpFWFBPUlQgZGVmbGF0ZUluaXQgT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgbGV2ZWwpKTsK IAotICAgICBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBjb21wcmVz c2lvbi4gVGhlIGZpZWxkcwotICAgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5p dGlhbGl6ZWQgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuCi0gICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFy ZSBzZXQgdG8gWl9OVUxMLCBkZWZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8KLSAgIHVzZSBkZWZh dWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorICAgICBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwg c3RyZWFtIHN0YXRlIGZvciBjb21wcmVzc2lvbi4gIFRoZSBmaWVsZHMKKyAgIHphbGxvYywgemZy ZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieSB0aGUgY2FsbGVyLiAg SWYKKyAgIHphbGxvYyBhbmQgemZyZWUgYXJlIHNldCB0byBaX05VTEwsIGRlZmxhdGVJbml0IHVw ZGF0ZXMgdGhlbSB0byB1c2UgZGVmYXVsdAorICAgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCiAKICAg ICAgVGhlIGNvbXByZXNzaW9uIGxldmVsIG11c3QgYmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBv ciBiZXR3ZWVuIDAgYW5kIDk6Ci0gICAxIGdpdmVzIGJlc3Qgc3BlZWQsIDkgZ2l2ZXMgYmVzdCBj b21wcmVzc2lvbiwgMCBnaXZlcyBubyBjb21wcmVzc2lvbiBhdAotICAgYWxsICh0aGUgaW5wdXQg ZGF0YSBpcyBzaW1wbHkgY29waWVkIGEgYmxvY2sgYXQgYSB0aW1lKS4KLSAgIFpfREVGQVVMVF9D T01QUkVTU0lPTiByZXF1ZXN0cyBhIGRlZmF1bHQgY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFu ZAotICAgY29tcHJlc3Npb24gKGN1cnJlbnRseSBlcXVpdmFsZW50IHRvIGxldmVsIDYpLgorICAg MSBnaXZlcyBiZXN0IHNwZWVkLCA5IGdpdmVzIGJlc3QgY29tcHJlc3Npb24sIDAgZ2l2ZXMgbm8g Y29tcHJlc3Npb24gYXQgYWxsCisgICAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBh IGJsb2NrIGF0IGEgdGltZSkuICBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgIHJlcXVlc3RzIGEg ZGVmYXVsdCBjb21wcm9taXNlIGJldHdlZW4gc3BlZWQgYW5kIGNvbXByZXNzaW9uIChjdXJyZW50 bHkKKyAgIGVxdWl2YWxlbnQgdG8gbGV2ZWwgNikuCiAKLSAgICAgZGVmbGF0ZUluaXQgcmV0dXJu cyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKLSAgIGVub3Vn aCBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGxldmVsIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNz aW9uIGxldmVsLAorICAgICBkZWZsYXRlSW5pdCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9N RU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9TVFJFQU1fRVJS T1IgaWYgbGV2ZWwgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbGV2ZWwsIG9yCiAgICBaX1ZF UlNJT05fRVJST1IgaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uICh6bGliX3ZlcnNpb24pIGlz IGluY29tcGF0aWJsZQotICAgd2l0aCB0aGUgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIg KFpMSUJfVkVSU0lPTikuCi0gICBtc2cgaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJy b3IgbWVzc2FnZS4gIGRlZmxhdGVJbml0IGRvZXMgbm90Ci0gICBwZXJmb3JtIGFueSBjb21wcmVz c2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorICAgd2l0aCB0aGUgdmVyc2lv biBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIgKFpMSUJfVkVSU0lPTikuICBtc2cgaXMgc2V0IHRvIG51 bGwKKyAgIGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdCBkb2VzIG5v dCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjoKKyAgIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxh dGUoKS4KICovCiAKIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlIE9GKCh6X3N0cmVhbXAg c3RybSwgaW50IGZsdXNoKSk7CiAvKgogICAgIGRlZmxhdGUgY29tcHJlc3NlcyBhcyBtdWNoIGRh dGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dAotICBidWZmZXIgYmVjb21l cyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIEl0IG1heSBpbnRyb2R1 Y2Ugc29tZQotICBvdXRwdXQgbGF0ZW5jeSAocmVhZGluZyBpbnB1dCB3aXRob3V0IHByb2R1Y2lu ZyBhbnkgb3V0cHV0KSBleGNlcHQgd2hlbgorICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUg b3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuICBJdCBtYXkgaW50cm9kdWNlCisgIHNvbWUgb3V0 cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkg ZXhjZXB0IHdoZW4KICAgZm9yY2VkIHRvIGZsdXNoLgogCi0gICAgVGhlIGRldGFpbGVkIHNlbWFu dGljcyBhcmUgYXMgZm9sbG93cy4gZGVmbGF0ZSBwZXJmb3JtcyBvbmUgb3IgYm90aCBvZiB0aGUK KyAgICBUaGUgZGV0YWlsZWQgc2VtYW50aWNzIGFyZSBhcyBmb2xsb3dzLiAgZGVmbGF0ZSBwZXJm b3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKICAgZm9sbG93aW5nIGFjdGlvbnM6CiAKICAgLSBDb21w cmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IG5leHRfaW4gYW5kIHVwZGF0ZSBuZXh0X2luIGFu ZCBhdmFpbF9pbgotICAgIGFjY29yZGluZ2x5LiBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9j ZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CisgICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxs IGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CiAgICAgZW5vdWdo IHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGFuZCBhdmFpbF9pbiBhcmUgdXBk YXRlZCBhbmQKICAgICBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRo ZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgogCi0gIC0gUHJvdmlkZSBtb3JlIG91dHB1dCBzdGFy dGluZyBhdCBuZXh0X291dCBhbmQgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQKLSAgICBh Y2NvcmRpbmdseS4gVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIgZmx1c2gg aXMgbm9uIHplcm8uCisgIC0gR2VuZXJhdGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9v dXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CisgICAgYWNjb3JkaW5nbHkuICBU aGlzIGFjdGlvbiBpcyBmb3JjZWQgaWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBub24gemVyby4K ICAgICBGb3JjaW5nIGZsdXNoIGZyZXF1ZW50bHkgZGVncmFkZXMgdGhlIGNvbXByZXNzaW9uIHJh dGlvLCBzbyB0aGlzIHBhcmFtZXRlcgotICAgIHNob3VsZCBiZSBzZXQgb25seSB3aGVuIG5lY2Vz c2FyeSAoaW4gaW50ZXJhY3RpdmUgYXBwbGljYXRpb25zKS4KLSAgICBTb21lIG91dHB1dCBtYXkg YmUgcHJvdmlkZWQgZXZlbiBpZiBmbHVzaCBpcyBub3Qgc2V0LgorICAgIHNob3VsZCBiZSBzZXQg b25seSB3aGVuIG5lY2Vzc2FyeS4gIFNvbWUgb3V0cHV0IG1heSBiZSBwcm92aWRlZCBldmVuIGlm CisgICAgZmx1c2ggaXMgemVyby4KIAotICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZSgpLCB0 aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0Ci0gIG9uZSBvZiB0aGUg YWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1 bWluZwotICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIGF2YWlsX2luIG9yIGF2YWlsX291dCBh Y2NvcmRpbmdseTsgYXZhaWxfb3V0Ci0gIHNob3VsZCBuZXZlciBiZSB6ZXJvIGJlZm9yZSB0aGUg Y2FsbC4gVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZQotICBjb21wcmVzc2VkIG91dHB1 dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1 bGwKLSAgKGF2YWlsX291dCA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mIGRlZmxhdGUoKS4g SWYgZGVmbGF0ZSByZXR1cm5zIFpfT0sKLSAgYW5kIHdpdGggemVybyBhdmFpbF9vdXQsIGl0IG11 c3QgYmUgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZQotICBvdXRwdXQgYnVm ZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KKyAgICBCZWZv cmUgdGhlIGNhbGwgb2YgZGVmbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0 aGF0IGF0IGxlYXN0CisgIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlk aW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZyBtb3JlCisgIG91dHB1dCwgYW5kIHVwZGF0 aW5nIGF2YWlsX2luIG9yIGF2YWlsX291dCBhY2NvcmRpbmdseTsgYXZhaWxfb3V0IHNob3VsZAor ICBuZXZlciBiZSB6ZXJvIGJlZm9yZSB0aGUgY2FsbC4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gY29u c3VtZSB0aGUgY29tcHJlc3NlZAorICBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yIGV4YW1wbGUg d2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsIChhdmFpbF9vdXQKKyAgPT0gMCksIG9yIGFm dGVyIGVhY2ggY2FsbCBvZiBkZWZsYXRlKCkuICBJZiBkZWZsYXRlIHJldHVybnMgWl9PSyBhbmQg d2l0aAorICB6ZXJvIGF2YWlsX291dCwgaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgbWFr aW5nIHJvb20gaW4gdGhlIG91dHB1dAorICBidWZmZXIgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBt b3JlIG91dHB1dCBwZW5kaW5nLiBTZWUgZGVmbGF0ZVBlbmRpbmcoKSwKKyAgd2hpY2ggY2FuIGJl IHVzZWQgaWYgZGVzaXJlZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlcmUgaXMgbW9y ZSBvdXB1dAorICBpbiB0aGF0IGNhc2UuCisKKyAgICBOb3JtYWxseSB0aGUgcGFyYW1ldGVyIGZs dXNoIGlzIHNldCB0byBaX05PX0ZMVVNILCB3aGljaCBhbGxvd3MgZGVmbGF0ZSB0bworICBkZWNp ZGUgaG93IG11Y2ggZGF0YSB0byBhY2N1bXVsYXRlIGJlZm9yZSBwcm9kdWNpbmcgb3V0cHV0LCBp biBvcmRlciB0bworICBtYXhpbWl6ZSBjb21wcmVzc2lvbi4KIAogICAgIElmIHRoZSBwYXJhbWV0 ZXIgZmx1c2ggaXMgc2V0IHRvIFpfU1lOQ19GTFVTSCwgYWxsIHBlbmRpbmcgb3V0cHV0IGlzCiAg IGZsdXNoZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgYW5kIHRoZSBvdXRwdXQgaXMgYWxpZ25lZCBv biBhIGJ5dGUgYm91bmRhcnksIHNvCi0gIHRoYXQgdGhlIGRlY29tcHJlc3NvciBjYW4gZ2V0IGFs bCBpbnB1dCBkYXRhIGF2YWlsYWJsZSBzbyBmYXIuIChJbiBwYXJ0aWN1bGFyCi0gIGF2YWlsX2lu IGlzIHplcm8gYWZ0ZXIgdGhlIGNhbGwgaWYgZW5vdWdoIG91dHB1dCBzcGFjZSBoYXMgYmVlbiBw cm92aWRlZAotICBiZWZvcmUgdGhlIGNhbGwuKSAgRmx1c2hpbmcgbWF5IGRlZ3JhZGUgY29tcHJl c3Npb24gZm9yIHNvbWUgY29tcHJlc3Npb24KLSAgYWxnb3JpdGhtcyBhbmQgc28gaXQgc2hvdWxk IGJlIHVzZWQgb25seSB3aGVuIG5lY2Vzc2FyeS4KKyAgdGhhdCB0aGUgZGVjb21wcmVzc29yIGNh biBnZXQgYWxsIGlucHV0IGRhdGEgYXZhaWxhYmxlIHNvIGZhci4gIChJbgorICBwYXJ0aWN1bGFy IGF2YWlsX2luIGlzIHplcm8gYWZ0ZXIgdGhlIGNhbGwgaWYgZW5vdWdoIG91dHB1dCBzcGFjZSBo YXMgYmVlbgorICBwcm92aWRlZCBiZWZvcmUgdGhlIGNhbGwuKSBGbHVzaGluZyBtYXkgZGVncmFk ZSBjb21wcmVzc2lvbiBmb3Igc29tZQorICBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGFuZCBzbyBp dCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LiAgVGhpcworICBjb21wbGV0ZXMg dGhlIGN1cnJlbnQgZGVmbGF0ZSBibG9jayBhbmQgZm9sbG93cyBpdCB3aXRoIGFuIGVtcHR5IHN0 b3JlZCBibG9jaworICB0aGF0IGlzIHRocmVlIGJpdHMgcGx1cyBmaWxsZXIgYml0cyB0byB0aGUg bmV4dCBieXRlLCBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzCisgICgwMCAwMCBmZiBmZikuCisKKyAg ICBJZiBmbHVzaCBpcyBzZXQgdG8gWl9QQVJUSUFMX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQg aXMgZmx1c2hlZCB0byB0aGUKKyAgb3V0cHV0IGJ1ZmZlciwgYnV0IHRoZSBvdXRwdXQgaXMgbm90 IGFsaWduZWQgdG8gYSBieXRlIGJvdW5kYXJ5LiAgQWxsIG9mIHRoZQorICBpbnB1dCBkYXRhIHNv IGZhciB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgZGVjb21wcmVzc29yLCBhcyBmb3IgWl9TWU5D X0ZMVVNILgorICBUaGlzIGNvbXBsZXRlcyB0aGUgY3VycmVudCBkZWZsYXRlIGJsb2NrIGFuZCBm b2xsb3dzIGl0IHdpdGggYW4gZW1wdHkgZml4ZWQKKyAgY29kZXMgYmxvY2sgdGhhdCBpcyAxMCBi aXRzIGxvbmcuICBUaGlzIGFzc3VyZXMgdGhhdCBlbm91Z2ggYnl0ZXMgYXJlIG91dHB1dAorICBp biBvcmRlciBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBmaW5pc2ggdGhlIGJsb2NrIGJlZm9yZSB0 aGUgZW1wdHkgZml4ZWQKKyAgY29kZXMgYmxvY2suCisKKyAgICBJZiBmbHVzaCBpcyBzZXQgdG8g Wl9CTE9DSywgYSBkZWZsYXRlIGJsb2NrIGlzIGNvbXBsZXRlZCBhbmQgZW1pdHRlZCwgYXMKKyAg Zm9yIFpfU1lOQ19GTFVTSCwgYnV0IHRoZSBvdXRwdXQgaXMgbm90IGFsaWduZWQgb24gYSBieXRl IGJvdW5kYXJ5LCBhbmQgdXAgdG8KKyAgc2V2ZW4gYml0cyBvZiB0aGUgY3VycmVudCBibG9jayBh cmUgaGVsZCB0byBiZSB3cml0dGVuIGFzIHRoZSBuZXh0IGJ5dGUgYWZ0ZXIKKyAgdGhlIG5leHQg ZGVmbGF0ZSBibG9jayBpcyBjb21wbGV0ZWQuICBJbiB0aGlzIGNhc2UsIHRoZSBkZWNvbXByZXNz b3IgbWF5IG5vdAorICBiZSBwcm92aWRlZCBlbm91Z2ggYml0cyBhdCB0aGlzIHBvaW50IGluIG9y ZGVyIHRvIGNvbXBsZXRlIGRlY29tcHJlc3Npb24gb2YKKyAgdGhlIGRhdGEgcHJvdmlkZWQgc28g ZmFyIHRvIHRoZSBjb21wcmVzc29yLiAgSXQgbWF5IG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQK KyAgYmxvY2sgdG8gYmUgZW1pdHRlZC4gIFRoaXMgaXMgZm9yIGFkdmFuY2VkIGFwcGxpY2F0aW9u cyB0aGF0IG5lZWQgdG8gY29udHJvbAorICB0aGUgZW1pc3Npb24gb2YgZGVmbGF0ZSBibG9ja3Mu CiAKICAgICBJZiBmbHVzaCBpcyBzZXQgdG8gWl9GVUxMX0ZMVVNILCBhbGwgb3V0cHV0IGlzIGZs dXNoZWQgYXMgd2l0aAogICBaX1NZTkNfRkxVU0gsIGFuZCB0aGUgY29tcHJlc3Npb24gc3RhdGUg aXMgcmVzZXQgc28gdGhhdCBkZWNvbXByZXNzaW9uIGNhbgogICByZXN0YXJ0IGZyb20gdGhpcyBw b2ludCBpZiBwcmV2aW91cyBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gZGFtYWdlZCBvciBpZgot ICByYW5kb20gYWNjZXNzIGlzIGRlc2lyZWQuIFVzaW5nIFpfRlVMTF9GTFVTSCB0b28gb2Z0ZW4g Y2FuIHNlcmlvdXNseSBkZWdyYWRlCi0gIHRoZSBjb21wcmVzc2lvbi4KKyAgcmFuZG9tIGFjY2Vz cyBpcyBkZXNpcmVkLiAgVXNpbmcgWl9GVUxMX0ZMVVNIIHRvbyBvZnRlbiBjYW4gc2VyaW91c2x5 IGRlZ3JhZGUKKyAgY29tcHJlc3Npb24uCiAKICAgICBJZiBkZWZsYXRlIHJldHVybnMgd2l0aCBh dmFpbF9vdXQgPT0gMCwgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZ2FpbgogICB3aXRo IHRoZSBzYW1lIHZhbHVlIG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgYW5kIG1vcmUgb3V0cHV0IHNw YWNlICh1cGRhdGVkCiAgIGF2YWlsX291dCksIHVudGlsIHRoZSBmbHVzaCBpcyBjb21wbGV0ZSAo ZGVmbGF0ZSByZXR1cm5zIHdpdGggbm9uLXplcm8KLSAgYXZhaWxfb3V0KS4gSW4gdGhlIGNhc2Ug b2YgYSBaX0ZVTExfRkxVU0ggb3IgWl9TWU5DX0ZMVVNILCBtYWtlIHN1cmUgdGhhdAorICBhdmFp bF9vdXQpLiAgSW4gdGhlIGNhc2Ugb2YgYSBaX0ZVTExfRkxVU0ggb3IgWl9TWU5DX0ZMVVNILCBt YWtlIHN1cmUgdGhhdAogICBhdmFpbF9vdXQgaXMgZ3JlYXRlciB0aGFuIHNpeCB0byBhdm9pZCBy ZXBlYXRlZCBmbHVzaCBtYXJrZXJzIGR1ZSB0bwogICBhdmFpbF9vdXQgPT0gMCBvbiByZXR1cm4u CiAKICAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX0ZJTklTSCwgcGVuZGlu ZyBpbnB1dCBpcyBwcm9jZXNzZWQsCi0gIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgYW5kIGRl ZmxhdGUgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBpZiB0aGVyZQotICB3YXMgZW5vdWdoIG91 dHB1dCBzcGFjZTsgaWYgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9PSywgdGhpcyBmdW5jdGlvbiBt dXN0IGJlCi0gIGNhbGxlZCBhZ2FpbiB3aXRoIFpfRklOSVNIIGFuZCBtb3JlIG91dHB1dCBzcGFj ZSAodXBkYXRlZCBhdmFpbF9vdXQpIGJ1dCBubwotICBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0 IHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IuIEFmdGVyCi0gIGRlZmxhdGUg aGFzIHJldHVybmVkIFpfU1RSRUFNX0VORCwgdGhlIG9ubHkgcG9zc2libGUgb3BlcmF0aW9ucyBv biB0aGUKLSAgc3RyZWFtIGFyZSBkZWZsYXRlUmVzZXQgb3IgZGVmbGF0ZUVuZC4KKyAgcGVuZGlu ZyBvdXRwdXQgaXMgZmx1c2hlZCBhbmQgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5E IGlmIHRoZXJlIHdhcworICBlbm91Z2ggb3V0cHV0IHNwYWNlLiAgSWYgZGVmbGF0ZSByZXR1cm5z IHdpdGggWl9PSyBvciBaX0JVRl9FUlJPUiwgdGhpcworICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxl ZCBhZ2FpbiB3aXRoIFpfRklOSVNIIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZAorICBh dmFpbF9vdXQpIGJ1dCBubyBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0IHJldHVybnMgd2l0aCBa X1NUUkVBTV9FTkQgb3IgYW4KKyAgZXJyb3IuICBBZnRlciBkZWZsYXRlIGhhcyByZXR1cm5lZCBa X1NUUkVBTV9FTkQsIHRoZSBvbmx5IHBvc3NpYmxlIG9wZXJhdGlvbnMKKyAgb24gdGhlIHN0cmVh bSBhcmUgZGVmbGF0ZVJlc2V0IG9yIGRlZmxhdGVFbmQuCiAKLSAgICBaX0ZJTklTSCBjYW4gYmUg dXNlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCBpZiBhbGwgdGhlIGNvbXByZXNzaW9u Ci0gIGlzIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcC4gSW4gdGhpcyBjYXNlLCBhdmFpbF9v dXQgbXVzdCBiZSBhdCBsZWFzdAotICB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5k IChzZWUgYmVsb3cpLiBJZiBkZWZsYXRlIGRvZXMgbm90IHJldHVybgotICBaX1NUUkVBTV9FTkQs IHRoZW4gaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgIFpf RklOSVNIIGNhbiBiZSB1c2VkIGluIHRoZSBmaXJzdCBkZWZsYXRlIGNhbGwgYWZ0ZXIgZGVmbGF0 ZUluaXQgaWYgYWxsIHRoZQorICBjb21wcmVzc2lvbiBpcyB0byBiZSBkb25lIGluIGEgc2luZ2xl IHN0ZXAuICBJbiBvcmRlciB0byBjb21wbGV0ZSBpbiBvbmUKKyAgY2FsbCwgYXZhaWxfb3V0IG11 c3QgYmUgYXQgbGVhc3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlCisg IGJlbG93KS4gIFRoZW4gZGVmbGF0ZSBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBaX1NUUkVBTV9F TkQuICBJZiBub3QgZW5vdWdoCisgIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgZGVmbGF0ZSB3 aWxsIG5vdCByZXR1cm4gWl9TVFJFQU1fRU5ELCBhbmQgaXQgbXVzdAorICBiZSBjYWxsZWQgYWdh aW4gYXMgZGVzY3JpYmVkIGFib3ZlLgogCi0gICAgZGVmbGF0ZSgpIHNldHMgc3RybS0+YWRsZXIg dG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIGlucHV0IHJlYWQKLSAgc28gZmFyICh0aGF0 IGlzLCB0b3RhbF9pbiBieXRlcykuCisgICAgZGVmbGF0ZSgpIHNldHMgc3RybS0+YWRsZXIgdG8g dGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCByZWFkCisgIHNvIGZhciAodGhhdCBp cywgdG90YWxfaW4gYnl0ZXMpLiAgSWYgYSBnemlwIHN0cmVhbSBpcyBiZWluZyBnZW5lcmF0ZWQs IHRoZW4KKyAgc3RybS0+YWRsZXIgd2lsbCBiZSB0aGUgQ1JDLTMyIGNoZWNrc3VtIG9mIHRoZSBp bnB1dCByZWFkIHNvIGZhci4gIChTZWUKKyAgZGVmbGF0ZUluaXQyIGJlbG93LikKIAotICAgIGRl ZmxhdGUoKSBtYXkgdXBkYXRlIGRhdGFfdHlwZSBpZiBpdCBjYW4gbWFrZSBhIGdvb2QgZ3Vlc3Mg YWJvdXQKLSAgdGhlIGlucHV0IGRhdGEgdHlwZSAoWl9BU0NJSSBvciBaX0JJTkFSWSkuIEluIGRv dWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkCi0gIGJpbmFyeS4gVGhpcyBmaWVsZCBpcyBvbmx5 IGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBhbmQgZG9lcyBub3QgYWZmZWN0Ci0gIHRoZSBjb21w cmVzc2lvbiBhbGdvcml0aG0gaW4gYW55IG1hbm5lci4KKyAgICBkZWZsYXRlKCkgbWF5IHVwZGF0 ZSBzdHJtLT5kYXRhX3R5cGUgaWYgaXQgY2FuIG1ha2UgYSBnb29kIGd1ZXNzIGFib3V0CisgIHRo ZSBpbnB1dCBkYXRhIHR5cGUgKFpfQklOQVJZIG9yIFpfVEVYVCkuICBJZiBpbiBkb3VidCwgdGhl IGRhdGEgaXMKKyAgY29uc2lkZXJlZCBiaW5hcnkuICBUaGlzIGZpZWxkIGlzIG9ubHkgZm9yIGlu Zm9ybWF0aW9uIHB1cnBvc2VzIGFuZCBkb2VzIG5vdAorICBhZmZlY3QgdGhlIGNvbXByZXNzaW9u IGFsZ29yaXRobSBpbiBhbnkgbWFubmVyLgogCiAgICAgZGVmbGF0ZSgpIHJldHVybnMgWl9PSyBp ZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQKICAgcHJvY2Vzc2VkIG9y IG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIGFsbCBpbnB1dCBoYXMgYmVl bgogICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBwcm9kdWNlZCAob25seSB3aGVu IGZsdXNoIGlzIHNldCB0bwogICBaX0ZJTklTSCksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJl YW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUKLSAgaWYgbmV4dF9pbiBvciBu ZXh0X291dCB3YXMgTlVMTCksIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxl Ci0gIChmb3IgZXhhbXBsZSBhdmFpbF9pbiBvciBhdmFpbF9vdXQgd2FzIHplcm8pLiBOb3RlIHRo YXQgWl9CVUZfRVJST1IgaXMgbm90Ci0gIGZhdGFsLCBhbmQgZGVmbGF0ZSgpIGNhbiBiZSBjYWxs ZWQgYWdhaW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dAotICBzcGFjZSB0byBjb250 aW51ZSBjb21wcmVzc2luZy4KKyAgaWYgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgWl9OVUxMIG9y IHRoZSBzdGF0ZSB3YXMgaW5hZHZlcnRlbnRseSB3cml0dGVuIG92ZXIKKyAgYnkgdGhlIGFwcGxp Y2F0aW9uKSwgb3IgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUgKGZvciBl eGFtcGxlCisgIGF2YWlsX2luIG9yIGF2YWlsX291dCB3YXMgemVybykuICBOb3RlIHRoYXQgWl9C VUZfRVJST1IgaXMgbm90IGZhdGFsLCBhbmQKKyAgZGVmbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdh aW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dCBzcGFjZSB0bworICBjb250aW51ZSBj b21wcmVzc2luZy4KICovCiAKIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlRW5kIE9GKCh6 X3N0cmVhbXAgc3RybSkpOwogLyoKICAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRh IHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KLSAgIFRoaXMgZnVuY3Rpb24g ZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKLSAg IHBlbmRpbmcgb3V0cHV0LgorICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNz ZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueSBwZW5kaW5nCisgICBvdXRwdXQuCiAKICAg ICAgZGVmbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYg dGhlCiAgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRo ZSBzdHJlYW0gd2FzIGZyZWVkCi0gICBwcmVtYXR1cmVseSAoc29tZSBpbnB1dCBvciBvdXRwdXQg d2FzIGRpc2NhcmRlZCkuIEluIHRoZSBlcnJvciBjYXNlLAotICAgbXNnIG1heSBiZSBzZXQgYnV0 IHRoZW4gcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUKKyAgIHBy ZW1hdHVyZWx5IChzb21lIGlucHV0IG9yIG91dHB1dCB3YXMgZGlzY2FyZGVkKS4gIEluIHRoZSBl cnJvciBjYXNlLCBtc2cKKyAgIG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEgc3RhdGlj IHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUKICAgIGRlYWxsb2NhdGVkKS4KICovCiAKQEAgLTMx MywxMzQgKzM3NywxNTcgQEAKIC8qCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJbml0IE9G KCh6X3N0cmVhbXAgc3RybSkpOwogCi0gICAgIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJl YW0gc3RhdGUgZm9yIGRlY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKKyAgICAgSW5pdGlhbGl6ZXMg dGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgZGVjb21wcmVzc2lvbi4gIFRoZSBmaWVsZHMK ICAgIG5leHRfaW4sIGF2YWlsX2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBp bml0aWFsaXplZCBiZWZvcmUgYnkKLSAgIHRoZSBjYWxsZXIuIElmIG5leHRfaW4gaXMgbm90IFpf TlVMTCBhbmQgYXZhaWxfaW4gaXMgbGFyZ2UgZW5vdWdoICh0aGUgZXhhY3QKLSAgIHZhbHVlIGRl cGVuZHMgb24gdGhlIGNvbXByZXNzaW9uIG1ldGhvZCksIGluZmxhdGVJbml0IGRldGVybWluZXMg dGhlCi0gICBjb21wcmVzc2lvbiBtZXRob2QgZnJvbSB0aGUgemxpYiBoZWFkZXIgYW5kIGFsbG9j YXRlcyBhbGwgZGF0YSBzdHJ1Y3R1cmVzCi0gICBhY2NvcmRpbmdseTsgb3RoZXJ3aXNlIHRoZSBh bGxvY2F0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGNhbGwgb2YKLSAgIGluZmxh dGUuICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBpbmZsYXRlSW5pdCB1 cGRhdGVzIHRoZW0gdG8KLSAgIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorICAg dGhlIGNhbGxlci4gIEluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgaW5mbGF0ZSwgdGhlIHByb3Zp ZGVkIGlucHV0IGlzIG5vdAorICAgcmVhZCBvciBjb25zdW1lZC4gIFRoZSBhbGxvY2F0aW9uIG9m IGEgc2xpZGluZyB3aW5kb3cgd2lsbCBiZSBkZWZlcnJlZCB0bworICAgdGhlIGZpcnN0IGNhbGwg b2YgaW5mbGF0ZSAoaWYgdGhlIGRlY29tcHJlc3Npb24gZG9lcyBub3QgY29tcGxldGUgb24gdGhl CisgICBmaXJzdCBjYWxsKS4gIElmIHphbGxvYyBhbmQgemZyZWUgYXJlIHNldCB0byBaX05VTEws IGluZmxhdGVJbml0IHVwZGF0ZXMKKyAgIHRoZW0gdG8gdXNlIGRlZmF1bHQgYWxsb2NhdGlvbiBm dW5jdGlvbnMuCiAKICAgICAgaW5mbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpf TUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCiAgICBtZW1vcnksIFpfVkVSU0lPTl9F UlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhl Ci0gICB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlci4gIG1zZyBpcyBzZXQgdG8gbnVsbCBp ZiB0aGVyZSBpcyBubyBlcnJvcgotICAgbWVzc2FnZS4gaW5mbGF0ZUluaXQgZG9lcyBub3QgcGVy Zm9ybSBhbnkgZGVjb21wcmVzc2lvbiBhcGFydCBmcm9tIHJlYWRpbmcKLSAgIHRoZSB6bGliIGhl YWRlciBpZiBwcmVzZW50OiB0aGlzIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICAoU28gbmV4 dF9pbiBhbmQKLSAgIGF2YWlsX2luIG1heSBiZSBtb2RpZmllZCwgYnV0IG5leHRfb3V0IGFuZCBh dmFpbF9vdXQgYXJlIHVuY2hhbmdlZC4pCisgICB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxl ciwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHBhcmFtZXRlcnMgYXJlCisgICBpbnZhbGlkLCBz dWNoIGFzIGEgbnVsbCBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUuICBtc2cgaXMgc2V0IHRvIG51 bGwgaWYKKyAgIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBpbmZsYXRlSW5pdCBkb2VzIG5v dCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uLgorICAgQWN0dWFsIGRlY29tcHJlc3Npb24gd2ls bCBiZSBkb25lIGJ5IGluZmxhdGUoKS4gIFNvIG5leHRfaW4sIGFuZCBhdmFpbF9pbiwKKyAgIG5l eHRfb3V0LCBhbmQgYXZhaWxfb3V0IGFyZSB1bnVzZWQgYW5kIHVuY2hhbmdlZC4gIFRoZSBjdXJy ZW50CisgICBpbXBsZW1lbnRhdGlvbiBvZiBpbmZsYXRlSW5pdCgpIGRvZXMgbm90IHByb2Nlc3Mg YW55IGhlYWRlciBpbmZvcm1hdGlvbiAtLQorICAgdGhhdCBpcyBkZWZlcnJlZCB1bnRpbCBpbmZs YXRlKCkgaXMgY2FsbGVkLgogKi8KIAogCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGUgT0Yo KHpfc3RyZWFtcCBzdHJtLCBpbnQgZmx1c2gpKTsKIC8qCiAgICAgaW5mbGF0ZSBkZWNvbXByZXNz ZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKLSAg YnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiBJ dCBtYXkgaW50cm9kdWNlCisgIGJ1ZmZlciBiZWNvbWVzIGVtcHR5IG9yIHRoZSBvdXRwdXQgYnVm ZmVyIGJlY29tZXMgZnVsbC4gIEl0IG1heSBpbnRyb2R1Y2UKICAgc29tZSBvdXRwdXQgbGF0ZW5j eSAocmVhZGluZyBpbnB1dCB3aXRob3V0IHByb2R1Y2luZyBhbnkgb3V0cHV0KSBleGNlcHQgd2hl bgogICBmb3JjZWQgdG8gZmx1c2guCiAKLSAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMg Zm9sbG93cy4gaW5mbGF0ZSBwZXJmb3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKKyAgVGhlIGRldGFp bGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gIGluZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJv dGggb2YgdGhlCiAgIGZvbGxvd2luZyBhY3Rpb25zOgogCiAgIC0gRGVjb21wcmVzcyBtb3JlIGlu cHV0IHN0YXJ0aW5nIGF0IG5leHRfaW4gYW5kIHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbgot ICAgIGFjY29yZGluZ2x5LiBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1 c2UgdGhlcmUgaXMgbm90Ci0gICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBu ZXh0X2luIGlzIHVwZGF0ZWQgYW5kIHByb2Nlc3NpbmcKLSAgICB3aWxsIHJlc3VtZSBhdCB0aGlz IHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIGluZmxhdGUoKS4KKyAgICBhY2NvcmRpbmdseS4g IElmIG5vdCBhbGwgaW5wdXQgY2FuIGJlIHByb2Nlc3NlZCAoYmVjYXVzZSB0aGVyZSBpcyBub3QK KyAgICBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciksIHRoZW4gbmV4dF9pbiBhbmQg YXZhaWxfaW4gYXJlIHVwZGF0ZWQKKyAgICBhY2NvcmRpbmdseSwgYW5kIHByb2Nlc3Npbmcgd2ls bCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZgorICAgIGluZmxhdGUo KS4KIAotICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVw ZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0Ci0gICAgYWNjb3JkaW5nbHkuICBpbmZsYXRlKCkg cHJvdmlkZXMgYXMgbXVjaCBvdXRwdXQgYXMgcG9zc2libGUsIHVudGlsIHRoZXJlCi0gICAgaXMg bm8gbW9yZSBpbnB1dCBkYXRhIG9yIG5vIG1vcmUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXIg KHNlZSBiZWxvdwotICAgIGFib3V0IHRoZSBmbHVzaCBwYXJhbWV0ZXIpLgorICAtIEdlbmVyYXRl IG1vcmUgb3V0cHV0IHN0YXJ0aW5nIGF0IG5leHRfb3V0IGFuZCB1cGRhdGUgbmV4dF9vdXQgYW5k IGF2YWlsX291dAorICAgIGFjY29yZGluZ2x5LiAgaW5mbGF0ZSgpIHByb3ZpZGVzIGFzIG11Y2gg b3V0cHV0IGFzIHBvc3NpYmxlLCB1bnRpbCB0aGVyZSBpcworICAgIG5vIG1vcmUgaW5wdXQgZGF0 YSBvciBubyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyIChzZWUgYmVsb3cgYWJvdXQK KyAgICB0aGUgZmx1c2ggcGFyYW1ldGVyKS4KIAotICBCZWZvcmUgdGhlIGNhbGwgb2YgaW5mbGF0 ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0Ci0gIG9uZSBv ZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29y IGNvbnN1bWluZwotICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIHRoZSBuZXh0XyogYW5kIGF2 YWlsXyogdmFsdWVzIGFjY29yZGluZ2x5LgotICBUaGUgYXBwbGljYXRpb24gY2FuIGNvbnN1bWUg dGhlIHVuY29tcHJlc3NlZCBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yCi0gIGV4YW1wbGUgd2hl biB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsIChhdmFpbF9vdXQgPT0gMCksIG9yIGFmdGVyIGVh Y2gKLSAgY2FsbCBvZiBpbmZsYXRlKCkuIElmIGluZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRo IHplcm8gYXZhaWxfb3V0LCBpdAotICBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcg cm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlCi0gIG1pZ2h0IGJlIG1vcmUg b3V0cHV0IHBlbmRpbmcuCisgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGluZmxhdGUoKSwgdGhlIGFw cGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlv bnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcg bW9yZQorICBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVl cyBhY2NvcmRpbmdseS4gIElmIHRoZQorICBjYWxsZXIgb2YgaW5mbGF0ZSgpIGRvZXMgbm90IHBy b3ZpZGUgYm90aCBhdmFpbGFibGUgaW5wdXQgYW5kIGF2YWlsYWJsZQorICBvdXRwdXQgc3BhY2Us IGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBwcm9ncmVzcyBtYWRlLiAgVGhl CisgIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdoZW4g aXQgd2FudHMsIGZvciBleGFtcGxlCisgIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAo YXZhaWxfb3V0ID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YKKyAgaW5mbGF0ZSgpLiAgSWYg aW5mbGF0ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGggemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUK KyAgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyIGJl Y2F1c2UgdGhlcmUgbWlnaHQgYmUKKyAgbW9yZSBvdXRwdXQgcGVuZGluZy4KIAotICAgIFRoZSBm bHVzaCBwYXJhbWV0ZXIgb2YgaW5mbGF0ZSgpIGNhbiBiZSBaX05PX0ZMVVNILCBaX1NZTkNfRkxV U0gsCi0gIFpfRklOSVNILCBvciBaX0JMT0NLLiBaX1NZTkNfRkxVU0ggcmVxdWVzdHMgdGhhdCBp bmZsYXRlKCkgZmx1c2ggYXMgbXVjaAotICBvdXRwdXQgYXMgcG9zc2libGUgdG8gdGhlIG91dHB1 dCBidWZmZXIuIFpfQkxPQ0sgcmVxdWVzdHMgdGhhdCBpbmZsYXRlKCkgc3RvcAotICBpZiBhbmQg d2hlbiBpdCBnZXQgdG8gdGhlIG5leHQgZGVmbGF0ZSBibG9jayBib3VuZGFyeS4gV2hlbiBkZWNv ZGluZyB0aGUgemxpYgotICBvciBnemlwIGZvcm1hdCwgdGhpcyB3aWxsIGNhdXNlIGluZmxhdGUo KSB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCi0gIGhlYWRlciBhbmQgYmVmb3JlIHRo ZSBmaXJzdCBibG9jay4gV2hlbiBkb2luZyBhIHJhdyBpbmZsYXRlLCBpbmZsYXRlKCkgd2lsbAot ICBnbyBhaGVhZCBhbmQgcHJvY2VzcyB0aGUgZmlyc3QgYmxvY2ssIGFuZCB3aWxsIHJldHVybiB3 aGVuIGl0IGdldHMgdG8gdGhlIGVuZAotICBvZiB0aGF0IGJsb2NrLCBvciB3aGVuIGl0IHJ1bnMg b3V0IG9mIGRhdGEuCisgICAgVGhlIGZsdXNoIHBhcmFtZXRlciBvZiBpbmZsYXRlKCkgY2FuIGJl IFpfTk9fRkxVU0gsIFpfU1lOQ19GTFVTSCwgWl9GSU5JU0gsCisgIFpfQkxPQ0ssIG9yIFpfVFJF RVMuICBaX1NZTkNfRkxVU0ggcmVxdWVzdHMgdGhhdCBpbmZsYXRlKCkgZmx1c2ggYXMgbXVjaAor ICBvdXRwdXQgYXMgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIuICBaX0JMT0NLIHJlcXVl c3RzIHRoYXQgaW5mbGF0ZSgpCisgIHN0b3AgaWYgYW5kIHdoZW4gaXQgZ2V0cyB0byB0aGUgbmV4 dCBkZWZsYXRlIGJsb2NrIGJvdW5kYXJ5LiAgV2hlbiBkZWNvZGluZworICB0aGUgemxpYiBvciBn emlwIGZvcm1hdCwgdGhpcyB3aWxsIGNhdXNlIGluZmxhdGUoKSB0byByZXR1cm4gaW1tZWRpYXRl bHkKKyAgYWZ0ZXIgdGhlIGhlYWRlciBhbmQgYmVmb3JlIHRoZSBmaXJzdCBibG9jay4gIFdoZW4g ZG9pbmcgYSByYXcgaW5mbGF0ZSwKKyAgaW5mbGF0ZSgpIHdpbGwgZ28gYWhlYWQgYW5kIHByb2Nl c3MgdGhlIGZpcnN0IGJsb2NrLCBhbmQgd2lsbCByZXR1cm4gd2hlbiBpdAorICBnZXRzIHRvIHRo ZSBlbmQgb2YgdGhhdCBibG9jaywgb3Igd2hlbiBpdCBydW5zIG91dCBvZiBkYXRhLgogCiAgICAg VGhlIFpfQkxPQ0sgb3B0aW9uIGFzc2lzdHMgaW4gYXBwZW5kaW5nIHRvIG9yIGNvbWJpbmluZyBk ZWZsYXRlIHN0cmVhbXMuCi0gIEFsc28gdG8gYXNzaXN0IGluIHRoaXMsIG9uIHJldHVybiBpbmZs YXRlKCkgd2lsbCBzZXQgc3RybS0+ZGF0YV90eXBlIHRvIHRoZQotICBudW1iZXIgb2YgdW51c2Vk IGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSB0YWtlbiBmcm9tIHN0cm0tPm5leHRfaW4sIHBsdXMgNjQK LSAgaWYgaW5mbGF0ZSgpIGlzIGN1cnJlbnRseSBkZWNvZGluZyB0aGUgbGFzdCBibG9jayBpbiB0 aGUgZGVmbGF0ZSBzdHJlYW0sCi0gIHBsdXMgMTI4IGlmIGluZmxhdGUoKSByZXR1cm5lZCBpbW1l ZGlhdGVseSBhZnRlciBkZWNvZGluZyBhbiBlbmQtb2YtYmxvY2sKLSAgY29kZSBvciBkZWNvZGlu ZyB0aGUgY29tcGxldGUgaGVhZGVyIHVwIHRvIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBieXRlIG9m IHRoZQotICBkZWZsYXRlIHN0cmVhbS4gVGhlIGVuZC1vZi1ibG9jayB3aWxsIG5vdCBiZSBpbmRp Y2F0ZWQgdW50aWwgYWxsIG9mIHRoZQotICB1bmNvbXByZXNzZWQgZGF0YSBmcm9tIHRoYXQgYmxv Y2sgaGFzIGJlZW4gd3JpdHRlbiB0byBzdHJtLT5uZXh0X291dC4gIFRoZQotICBudW1iZXIgb2Yg dW51c2VkIGJpdHMgbWF5IGluIGdlbmVyYWwgYmUgZ3JlYXRlciB0aGFuIHNldmVuLCBleGNlcHQg d2hlbgotICBiaXQgNyBvZiBkYXRhX3R5cGUgaXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBudW1i ZXIgb2YgdW51c2VkIGJpdHMgd2lsbCBiZQotICBsZXNzIHRoYW4gZWlnaHQuCisgIFRvIGFzc2lz dCBpbiB0aGlzLCBvbiByZXR1cm4gaW5mbGF0ZSgpIGFsd2F5cyBzZXRzIHN0cm0tPmRhdGFfdHlw ZSB0byB0aGUKKyAgbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgdGFrZW4g ZnJvbSBzdHJtLT5uZXh0X2luLCBwbHVzIDY0IGlmCisgIGluZmxhdGUoKSBpcyBjdXJyZW50bHkg ZGVjb2RpbmcgdGhlIGxhc3QgYmxvY2sgaW4gdGhlIGRlZmxhdGUgc3RyZWFtLCBwbHVzCisgIDEy OCBpZiBpbmZsYXRlKCkgcmV0dXJuZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVjb2RpbmcgYW4gZW5k LW9mLWJsb2NrIGNvZGUgb3IKKyAgZGVjb2RpbmcgdGhlIGNvbXBsZXRlIGhlYWRlciB1cCB0byBq dXN0IGJlZm9yZSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgZGVmbGF0ZQorICBzdHJlYW0uICBUaGUg ZW5kLW9mLWJsb2NrIHdpbGwgbm90IGJlIGluZGljYXRlZCB1bnRpbCBhbGwgb2YgdGhlIHVuY29t cHJlc3NlZAorICBkYXRhIGZyb20gdGhhdCBibG9jayBoYXMgYmVlbiB3cml0dGVuIHRvIHN0cm0t Pm5leHRfb3V0LiAgVGhlIG51bWJlciBvZgorICB1bnVzZWQgYml0cyBtYXkgaW4gZ2VuZXJhbCBi ZSBncmVhdGVyIHRoYW4gc2V2ZW4sIGV4Y2VwdCB3aGVuIGJpdCA3IG9mCisgIGRhdGFfdHlwZSBp cyBzZXQsIGluIHdoaWNoIGNhc2UgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyB3aWxsIGJlIGxl c3MgdGhhbgorICBlaWdodC4gIGRhdGFfdHlwZSBpcyBzZXQgYXMgbm90ZWQgaGVyZSBldmVyeSB0 aW1lIGluZmxhdGUoKSByZXR1cm5zIGZvciBhbGwKKyAgZmx1c2ggb3B0aW9ucywgYW5kIHNvIGNh biBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYW1vdW50IG9mIGN1cnJlbnRseQorICBjb25zdW1l ZCBpbnB1dCBpbiBiaXRzLgorCisgICAgVGhlIFpfVFJFRVMgb3B0aW9uIGJlaGF2ZXMgYXMgWl9C TE9DSyBkb2VzLCBidXQgaXQgYWxzbyByZXR1cm5zIHdoZW4gdGhlCisgIGVuZCBvZiBlYWNoIGRl ZmxhdGUgYmxvY2sgaGVhZGVyIGlzIHJlYWNoZWQsIGJlZm9yZSBhbnkgYWN0dWFsIGRhdGEgaW4g dGhhdAorICBibG9jayBpcyBkZWNvZGVkLiAgVGhpcyBhbGxvd3MgdGhlIGNhbGxlciB0byBkZXRl cm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUKKyAgZGVmbGF0ZSBibG9jayBoZWFkZXIgZm9yIGxhdGVy IHVzZSBpbiByYW5kb20gYWNjZXNzIHdpdGhpbiBhIGRlZmxhdGUgYmxvY2suCisgIDI1NiBpcyBh ZGRlZCB0byB0aGUgdmFsdWUgb2Ygc3RybS0+ZGF0YV90eXBlIHdoZW4gaW5mbGF0ZSgpIHJldHVy bnMKKyAgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgZGVmbGF0ZSBi bG9jayBoZWFkZXIuCiAKICAgICBpbmZsYXRlKCkgc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCB1 bnRpbCBpdCByZXR1cm5zIFpfU1RSRUFNX0VORCBvciBhbgotICBlcnJvci4gSG93ZXZlciBpZiBh bGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcAotICAo YSBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUg c2V0IHRvCi0gIFpfRklOSVNILiBJbiB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJv Y2Vzc2VkIGFuZCBhbGwgcGVuZGluZwotICBvdXRwdXQgaXMgZmx1c2hlZDsgYXZhaWxfb3V0IG11 c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZQotICB1bmNvbXByZXNzZWQgZGF0YS4g KFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkCi0g IGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24g b24gdGhpcyBzdHJlYW0gbXVzdAotICBiZSBpbmZsYXRlRW5kIHRvIGRlYWxsb2NhdGUgdGhlIGRl Y29tcHJlc3Npb24gc3RhdGUuIFRoZSB1c2Ugb2YgWl9GSU5JU0gKLSAgaXMgbmV2ZXIgcmVxdWly ZWQsIGJ1dCBjYW4gYmUgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJv YWNoCi0gIG1heSBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIGluZmxhdGUoKSBjYWxsLgorICBlcnJv ci4gIEhvd2V2ZXIgaWYgYWxsIGRlY29tcHJlc3Npb24gaXMgdG8gYmUgcGVyZm9ybWVkIGluIGEg c2luZ2xlIHN0ZXAgKGEKKyAgc2luZ2xlIGNhbGwgb2YgaW5mbGF0ZSksIHRoZSBwYXJhbWV0ZXIg Zmx1c2ggc2hvdWxkIGJlIHNldCB0byBaX0ZJTklTSC4gIEluCisgIHRoaXMgY2FzZSBhbGwgcGVu ZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQgYW5kIGFsbCBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVk OworICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgb2YgdGhlIHVu Y29tcHJlc3NlZCBkYXRhIGZvciB0aGUKKyAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiAgKFRoZSBz aXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuCisgIHNhdmVkIGJ5IHRo ZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSAgVGhlIHVzZSBvZiBaX0ZJTklTSCBpcyBu b3QKKyAgcmVxdWlyZWQgdG8gcGVyZm9ybSBhbiBpbmZsYXRpb24gaW4gb25lIHN0ZXAuICBIb3dl dmVyIGl0IG1heSBiZSB1c2VkIHRvCisgIGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBw cm9hY2ggY2FuIGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUgaW5mbGF0ZSgpCisgIGNhbGwuICBaX0ZJ TklTSCBhbHNvIGluZm9ybXMgaW5mbGF0ZSB0byBub3QgbWFpbnRhaW4gYSBzbGlkaW5nIHdpbmRv dyBpZiB0aGUKKyAgc3RyZWFtIGNvbXBsZXRlcywgd2hpY2ggcmVkdWNlcyBpbmZsYXRlJ3MgbWVt b3J5IGZvb3RwcmludC4gIElmIHRoZSBzdHJlYW0KKyAgZG9lcyBub3QgY29tcGxldGUsIGVpdGhl ciBiZWNhdXNlIG5vdCBhbGwgb2YgdGhlIHN0cmVhbSBpcyBwcm92aWRlZCBvciBub3QKKyAgZW5v dWdoIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgdGhlbiBhIHNsaWRpbmcgd2luZG93IHdpbGwg YmUgYWxsb2NhdGVkIGFuZAorICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBjb250 aW51ZSB0aGUgb3BlcmF0aW9uIGFzIGlmIFpfTk9fRkxVU0ggaGFkCisgIGJlZW4gdXNlZC4KIAog ICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBpbmZsYXRlKCkgYWx3YXlzIGZsdXNoZXMgYXMg bXVjaCBvdXRwdXQgYXMKICAgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIsIGFuZCBhbHdh eXMgdXNlcyB0aGUgZmFzdGVyIGFwcHJvYWNoIG9uIHRoZQotICBmaXJzdCBjYWxsLiBTbyB0aGUg b25seSBlZmZlY3Qgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9u Ci0gIGlzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpLCBhcyBub3RlZCBiZWxvdywg b3Igd2hlbiBpdCByZXR1cm5zIGVhcmx5Ci0gIGJlY2F1c2UgWl9CTE9DSyBpcyB1c2VkLgorICBm aXJzdCBjYWxsLiAgU28gdGhlIGVmZmVjdHMgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlz IGltcGxlbWVudGF0aW9uIGFyZQorICBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUoKSBh cyBub3RlZCBiZWxvdywgd2hlbiBpbmZsYXRlKCkgcmV0dXJucyBlYXJseQorICB3aGVuIFpfQkxP Q0sgb3IgWl9UUkVFUyBpcyB1c2VkLCBhbmQgd2hlbiBpbmZsYXRlKCkgYXZvaWRzIHRoZSBhbGxv Y2F0aW9uIG9mCisgIG1lbW9yeSBmb3IgYSBzbGlkaW5nIHdpbmRvdyB3aGVuIFpfRklOSVNIIGlz IHVzZWQuCiAKICAgICAgSWYgYSBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYWZ0ZXIgdGhp cyBjYWxsIChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkKLSAgYmVsb3cpLCBpbmZsYXRlIHNldHMg c3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkKKyAg YmVsb3cpLCBpbmZsYXRlIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3Vt IG9mIHRoZSBkaWN0aW9uYXJ5CiAgIGNob3NlbiBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJu cyBaX05FRURfRElDVDsgb3RoZXJ3aXNlIGl0IHNldHMKLSAgc3RybS0+YWRsZXIgdG8gdGhlIGFk bGVyMzIgY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZCBzbyBmYXIgKHRoYXQgaXMsCisg IHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1 Y2VkIHNvIGZhciAodGhhdCBpcywKICAgdG90YWxfb3V0IGJ5dGVzKSBhbmQgcmV0dXJucyBaX09L LCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IgY29kZSBhcyBkZXNjcmliZWQKLSAgYmVsb3cuIEF0 IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRl ZCBhZGxlcjMyCisgIGJlbG93LiAgQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBpbmZsYXRlKCkg Y2hlY2tzIHRoYXQgaXRzIGNvbXB1dGVkIEFkbGVyLTMyCiAgIGNoZWNrc3VtIGlzIGVxdWFsIHRv IHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECiAg IG9ubHkgaWYgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QuCiAKLSAgICBpbmZsYXRlKCkgd2lsbCBk ZWNvbXByZXNzIGFuZCBjaGVjayBlaXRoZXIgemxpYi13cmFwcGVkIG9yIGd6aXAtd3JhcHBlZAot ICBkZWZsYXRlIGRhdGEuICBUaGUgaGVhZGVyIHR5cGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxs eS4gIEFueSBpbmZvcm1hdGlvbgotICBjb250YWluZWQgaW4gdGhlIGd6aXAgaGVhZGVyIGlzIG5v dCByZXRhaW5lZCwgc28gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0aGF0Ci0gIGluZm9ybWF0aW9u IHNob3VsZCBpbnN0ZWFkIHVzZSByYXcgaW5mbGF0ZSwgc2VlIGluZmxhdGVJbml0MigpIGJlbG93 LCBvcgotICBpbmZsYXRlQmFjaygpIGFuZCBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9m IHRoZSBnemlwIGhlYWRlciBhbmQKLSAgdHJhaWxlci4KKyAgICBpbmZsYXRlKCkgY2FuIGRlY29t cHJlc3MgYW5kIGNoZWNrIGVpdGhlciB6bGliLXdyYXBwZWQgb3IgZ3ppcC13cmFwcGVkCisgIGRl ZmxhdGUgZGF0YS4gIFRoZSBoZWFkZXIgdHlwZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBp ZiByZXF1ZXN0ZWQgd2hlbgorICBpbml0aWFsaXppbmcgd2l0aCBpbmZsYXRlSW5pdDIoKS4gIEFu eSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGd6aXAKKyAgaGVhZGVyIGlzIG5vdCByZXRh aW5lZCB1bmxlc3MgaW5mbGF0ZUdldEhlYWRlcigpIGlzIHVzZWQuICBXaGVuIHByb2Nlc3NpbmcK KyAgZ3ppcC13cmFwcGVkIGRlZmxhdGUgZGF0YSwgc3RybS0+YWRsZXIzMiBpcyBzZXQgdG8gdGhl IENSQy0zMiBvZiB0aGUgb3V0cHV0CisgIHByb2R1Y2VkIHNvIGZhci4gIFRoZSBDUkMtMzIgaXMg Y2hlY2tlZCBhZ2FpbnN0IHRoZSBnemlwIHRyYWlsZXIsIGFzIGlzIHRoZQorICB1bmNvbXByZXNz ZWQgbGVuZ3RoLCBtb2R1bG8gMl4zMi4KIAogICAgIGluZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYg c29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAogICBvciBt b3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21w cmVzc2VkIGRhdGEgaGFzCiAgIGJlZW4gcmVhY2hlZCBhbmQgYWxsIHVuY29tcHJlc3NlZCBvdXRw dXQgaGFzIGJlZW4gcHJvZHVjZWQsIFpfTkVFRF9ESUNUIGlmIGEKICAgcHJlc2V0IGRpY3Rpb25h cnkgaXMgbmVlZGVkIGF0IHRoaXMgcG9pbnQsIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0 YSB3YXMKICAgY29ycnVwdGVkIChpbnB1dCBzdHJlYW0gbm90IGNvbmZvcm1pbmcgdG8gdGhlIHps aWIgZm9ybWF0IG9yIGluY29ycmVjdCBjaGVjawotICB2YWx1ZSksIFpfU1RSRUFNX0VSUk9SIGlm IHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlCi0gIGlm IG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIE5VTEwpLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMg bm90IGVub3VnaCBtZW1vcnksCi0gIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNzIGlzIHBvc3Np YmxlIG9yIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlCi0gIG91dHB1dCBidWZm ZXIgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLiBOb3RlIHRoYXQgWl9CVUZfRVJST1IgaXMgbm90IGZh dGFsLCBhbmQKKyAgdmFsdWUsIGluIHdoaWNoIGNhc2Ugc3RybS0+bXNnIHBvaW50cyB0byBhIHN0 cmluZyB3aXRoIGEgbW9yZSBzcGVjaWZpYworICBlcnJvciksIFpfU1RSRUFNX0VSUk9SIGlmIHRo ZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlCisgIG5leHRf aW4gb3IgbmV4dF9vdXQgd2FzIFpfTlVMTCwgb3IgdGhlIHN0YXRlIHdhcyBpbmFkdmVydGVudGx5 IHdyaXR0ZW4gb3ZlcgorICBieSB0aGUgYXBwbGljYXRpb24pLCBaX01FTV9FUlJPUiBpZiB0aGVy ZSB3YXMgbm90IGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SCisgIGlmIG5vIHByb2dyZXNzIHdh cyBwb3NzaWJsZSBvciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQK KyAgYnVmZmVyIHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4gIE5vdGUgdGhhdCBaX0JVRl9FUlJPUiBp cyBub3QgZmF0YWwsIGFuZAogICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB3aXRoIG1v cmUgaW5wdXQgYW5kIG1vcmUgb3V0cHV0IHNwYWNlIHRvCi0gIGNvbnRpbnVlIGRlY29tcHJlc3Np bmcuIElmIFpfREFUQV9FUlJPUiBpcyByZXR1cm5lZCwgdGhlIGFwcGxpY2F0aW9uIG1heSB0aGVu Ci0gIGNhbGwgaW5mbGF0ZVN5bmMoKSB0byBsb29rIGZvciBhIGdvb2QgY29tcHJlc3Npb24gYmxv Y2sgaWYgYSBwYXJ0aWFsIHJlY292ZXJ5Ci0gIG9mIHRoZSBkYXRhIGlzIGRlc2lyZWQuCisgIGNv bnRpbnVlIGRlY29tcHJlc3NpbmcuICBJZiBaX0RBVEFfRVJST1IgaXMgcmV0dXJuZWQsIHRoZSBh cHBsaWNhdGlvbiBtYXkKKyAgdGhlbiBjYWxsIGluZmxhdGVTeW5jKCkgdG8gbG9vayBmb3IgYSBn b29kIGNvbXByZXNzaW9uIGJsb2NrIGlmIGEgcGFydGlhbAorICByZWNvdmVyeSBvZiB0aGUgZGF0 YSBpcyB0byBiZSBhdHRlbXB0ZWQuCiAqLwogCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0 ZUVuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCiAgICAgIEFsbCBkeW5hbWljYWxseSBhbGxv Y2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCi0gICBUaGlz IGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1 c2ggYW55Ci0gICBwZW5kaW5nIG91dHB1dC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55 IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkgcGVuZGluZworICAgb3V0 cHV0LgogCi0gICAgIGluZmxhdGVFbmQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFN X0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RhdGUKLSAgIHdhcyBpbmNvbnNpc3RlbnQuIEluIHRoZSBl cnJvciBjYXNlLCBtc2cgbWF5IGJlIHNldCBidXQgdGhlbiBwb2ludHMgdG8gYQotICAgc3RhdGlj IHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQpLgorICAgICBpbmZsYXRlRW5k IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFt IHN0YXRlCisgICB3YXMgaW5jb25zaXN0ZW50LgogKi8KIAorCiAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBZHZhbmNlZCBmdW5jdGlvbnMgKi8KIAogLyoKQEAgLTQ1NSw1MyArNTQyLDcwIEBA CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZW1MZXZlbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHN0cmF0ZWd5KSk7CiAKLSAg ICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgZGVmbGF0ZUluaXQgd2l0aCBtb3JlIGNvbXBy ZXNzaW9uIG9wdGlvbnMuIFRoZQotICAgZmllbGRzIG5leHRfaW4sIHphbGxvYywgemZyZWUgYW5k IG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieQotICAgdGhlIGNhbGxlci4KKyAg ICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgZGVmbGF0ZUluaXQgd2l0aCBtb3JlIGNvbXBy ZXNzaW9uIG9wdGlvbnMuICBUaGUKKyAgIGZpZWxkcyBuZXh0X2luLCB6YWxsb2MsIHpmcmVlIGFu ZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkgdGhlCisgICBjYWxsZXIuCiAK LSAgICAgVGhlIG1ldGhvZCBwYXJhbWV0ZXIgaXMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4gSXQg bXVzdCBiZSBaX0RFRkxBVEVEIGluCisgICAgIFRoZSBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBj b21wcmVzc2lvbiBtZXRob2QuICBJdCBtdXN0IGJlIFpfREVGTEFURUQgaW4KICAgIHRoaXMgdmVy c2lvbiBvZiB0aGUgbGlicmFyeS4KIAogICAgICBUaGUgd2luZG93Qml0cyBwYXJhbWV0ZXIgaXMg dGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUKLSAgICh0aGUgc2l6ZSBv ZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZv ciB0aGlzCi0gICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiBMYXJnZXIgdmFsdWVzIG9mIHRoaXMg cGFyYW1ldGVyIHJlc3VsdCBpbiBiZXR0ZXIKLSAgIGNvbXByZXNzaW9uIGF0IHRoZSBleHBlbnNl IG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYKKyAgICh0aGUgc2l6 ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiAgSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSA4Li4x NSBmb3IgdGhpcworICAgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gIExhcmdlciB2YWx1ZXMgb2Yg dGhpcyBwYXJhbWV0ZXIgcmVzdWx0IGluIGJldHRlcgorICAgY29tcHJlc3Npb24gYXQgdGhlIGV4 cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYKICAgIGRl ZmxhdGVJbml0IGlzIHVzZWQgaW5zdGVhZC4KIAotICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJl IC04Li4tMTUgZm9yIHJhdyBkZWZsYXRlLiBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCi0gICBk ZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4gZGVmbGF0ZSgpIHdpbGwgdGhlbiBnZW5lcmF0ZSBy YXcgZGVmbGF0ZSBkYXRhCi0gICB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZCB3 aWxsIG5vdCBjb21wdXRlIGFuIGFkbGVyMzIgY2hlY2sgdmFsdWUuCisgICAgIEZvciB0aGUgY3Vy cmVudCBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlKCksIGEgd2luZG93Qml0cyB2YWx1ZSBvZiA4 IChhCisgICB3aW5kb3cgc2l6ZSBvZiAyNTYgYnl0ZXMpIGlzIG5vdCBzdXBwb3J0ZWQuICBBcyBh IHJlc3VsdCwgYSByZXF1ZXN0IGZvciA4CisgICB3aWxsIHJlc3VsdCBpbiA5IChhIDUxMi1ieXRl IHdpbmRvdykuICBJbiB0aGF0IGNhc2UsIHByb3ZpZGluZyA4IHRvCisgICBpbmZsYXRlSW5pdDIo KSB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciB3aGVuIHRoZSB6bGliIGhlYWRlciB3aXRoIDkgaXMK KyAgIGNoZWNrZWQgYWdhaW5zdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgaW5mbGF0ZSgpLiAgVGhl IHJlbWVkeSBpcyB0byBub3QgdXNlIDgKKyAgIHdpdGggZGVmbGF0ZUluaXQyKCkgd2l0aCB0aGlz IGluaXRpYWxpemF0aW9uLCBvciBhdCBsZWFzdCBpbiB0aGF0IGNhc2UgdXNlIDkKKyAgIHdpdGgg aW5mbGF0ZUluaXQyKCkuCiAKLSAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRo YW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZW5jb2RpbmcuIEFkZAorICAgICB3aW5kb3dCaXRzIGNh biBhbHNvIGJlIC04Li4tMTUgZm9yIHJhdyBkZWZsYXRlLiAgSW4gdGhpcyBjYXNlLCAtd2luZG93 Qml0cworICAgZGV0ZXJtaW5lcyB0aGUgd2luZG93IHNpemUuICBkZWZsYXRlKCkgd2lsbCB0aGVu IGdlbmVyYXRlIHJhdyBkZWZsYXRlIGRhdGEKKyAgIHdpdGggbm8gemxpYiBoZWFkZXIgb3IgdHJh aWxlciwgYW5kIHdpbGwgbm90IGNvbXB1dGUgYSBjaGVjayB2YWx1ZS4KKworICAgICB3aW5kb3dC aXRzIGNhbiBhbHNvIGJlIGdyZWF0ZXIgdGhhbiAxNSBmb3Igb3B0aW9uYWwgZ3ppcCBlbmNvZGlu Zy4gIEFkZAogICAgMTYgdG8gd2luZG93Qml0cyB0byB3cml0ZSBhIHNpbXBsZSBnemlwIGhlYWRl ciBhbmQgdHJhaWxlciBhcm91bmQgdGhlCi0gICBjb21wcmVzc2VkIGRhdGEgaW5zdGVhZCBvZiBh IHpsaWIgd3JhcHBlci4gVGhlIGd6aXAgaGVhZGVyIHdpbGwgaGF2ZSBubwotICAgZmlsZSBuYW1l LCBubyBleHRyYSBkYXRhLCBubyBjb21tZW50LCBubyBtb2RpZmljYXRpb24gdGltZSAoc2V0IHRv IHplcm8pLAotICAgbm8gaGVhZGVyIGNyYywgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwg YmUgc2V0IHRvIDI1NSAodW5rbm93bikuICBJZiBhCi0gICBnemlwIHN0cmVhbSBpcyBiZWluZyB3 cml0dGVuLCBzdHJtLT5hZGxlciBpcyBhIGNyYzMyIGluc3RlYWQgb2YgYW4gYWRsZXIzMi4KKyAg IGNvbXByZXNzZWQgZGF0YSBpbnN0ZWFkIG9mIGEgemxpYiB3cmFwcGVyLiAgVGhlIGd6aXAgaGVh ZGVyIHdpbGwgaGF2ZSBubworICAgZmlsZSBuYW1lLCBubyBleHRyYSBkYXRhLCBubyBjb21tZW50 LCBubyBtb2RpZmljYXRpb24gdGltZSAoc2V0IHRvIHplcm8pLCBubworICAgaGVhZGVyIGNyYywg YW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgYmUgc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSB2 YWx1ZSwKKyAgIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdhcyBkZXRlcm1pbmVkIGF0IGNvbXBp bGUgdGltZS4gIElmIGEgZ3ppcCBzdHJlYW0gaXMKKyAgIGJlaW5nIHdyaXR0ZW4sIHN0cm0tPmFk bGVyIGlzIGEgQ1JDLTMyIGluc3RlYWQgb2YgYW4gQWRsZXItMzIuCisKKyAgICAgRm9yIHJhdyBk ZWZsYXRlIG9yIGd6aXAgZW5jb2RpbmcsIGEgcmVxdWVzdCBmb3IgYSAyNTYtYnl0ZSB3aW5kb3cg aXMKKyAgIHJlamVjdGVkIGFzIGludmFsaWQsIHNpbmNlIG9ubHkgdGhlIHpsaWIgaGVhZGVyIHBy b3ZpZGVzIGEgbWVhbnMgb2YKKyAgIHRyYW5zbWl0dGluZyB0aGUgd2luZG93IHNpemUgdG8gdGhl IGRlY29tcHJlc3Nvci4KIAogICAgICBUaGUgbWVtTGV2ZWwgcGFyYW1ldGVyIHNwZWNpZmllcyBo b3cgbXVjaCBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZAotICAgZm9yIHRoZSBpbnRlcm5hbCBj b21wcmVzc2lvbiBzdGF0ZS4gbWVtTGV2ZWw9MSB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dAotICAg aXMgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsgbWVtTGV2ZWw9OSB1c2VzIG1h eGltdW0gbWVtb3J5Ci0gICBmb3Igb3B0aW1hbCBzcGVlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMg OC4gU2VlIHpjb25mLmggZm9yIHRvdGFsIG1lbW9yeQotICAgdXNhZ2UgYXMgYSBmdW5jdGlvbiBv ZiB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbC4KKyAgIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Np b24gc3RhdGUuICBtZW1MZXZlbD0xIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzCisgICBzbG93 IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvOyBtZW1MZXZlbD05IHVzZXMgbWF4aW11bSBt ZW1vcnkgZm9yCisgICBvcHRpbWFsIHNwZWVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4gIFNl ZSB6Y29uZi5oIGZvciB0b3RhbCBtZW1vcnkgdXNhZ2UKKyAgIGFzIGEgZnVuY3Rpb24gb2Ygd2lu ZG93Qml0cyBhbmQgbWVtTGV2ZWwuCiAKLSAgICAgVGhlIHN0cmF0ZWd5IHBhcmFtZXRlciBpcyB1 c2VkIHRvIHR1bmUgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVXNlIHRoZQorICAgICBUaGUg c3RyYXRlZ3kgcGFyYW1ldGVyIGlzIHVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3Jp dGhtLiAgVXNlIHRoZQogICAgdmFsdWUgWl9ERUZBVUxUX1NUUkFURUdZIGZvciBub3JtYWwgZGF0 YSwgWl9GSUxURVJFRCBmb3IgZGF0YSBwcm9kdWNlZCBieSBhCiAgICBmaWx0ZXIgKG9yIHByZWRp Y3RvciksIFpfSFVGRk1BTl9PTkxZIHRvIGZvcmNlIEh1ZmZtYW4gZW5jb2Rpbmcgb25seSAobm8K ICAgIHN0cmluZyBtYXRjaCksIG9yIFpfUkxFIHRvIGxpbWl0IG1hdGNoIGRpc3RhbmNlcyB0byBv bmUgKHJ1bi1sZW5ndGgKLSAgIGVuY29kaW5nKS4gRmlsdGVyZWQgZGF0YSBjb25zaXN0cyBtb3N0 bHkgb2Ygc21hbGwgdmFsdWVzIHdpdGggYSBzb21ld2hhdAotICAgcmFuZG9tIGRpc3RyaWJ1dGlv bi4gSW4gdGhpcyBjYXNlLCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIHR1bmVkIHRvCi0g ICBjb21wcmVzcyB0aGVtIGJldHRlci4gVGhlIGVmZmVjdCBvZiBaX0ZJTFRFUkVEIGlzIHRvIGZv cmNlIG1vcmUgSHVmZm1hbgorICAgZW5jb2RpbmcpLiAgRmlsdGVyZWQgZGF0YSBjb25zaXN0cyBt b3N0bHkgb2Ygc21hbGwgdmFsdWVzIHdpdGggYSBzb21ld2hhdAorICAgcmFuZG9tIGRpc3RyaWJ1 dGlvbi4gIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyB0dW5lZCB0 bworICAgY29tcHJlc3MgdGhlbSBiZXR0ZXIuICBUaGUgZWZmZWN0IG9mIFpfRklMVEVSRUQgaXMg dG8gZm9yY2UgbW9yZSBIdWZmbWFuCiAgICBjb2RpbmcgYW5kIGxlc3Mgc3RyaW5nIG1hdGNoaW5n OyBpdCBpcyBzb21ld2hhdCBpbnRlcm1lZGlhdGUgYmV0d2VlbgotICAgWl9ERUZBVUxUIGFuZCBa X0hVRkZNQU5fT05MWS4gWl9STEUgaXMgZGVzaWduZWQgdG8gYmUgYWxtb3N0IGFzIGZhc3QgYXMK LSAgIFpfSFVGRk1BTl9PTkxZLCBidXQgZ2l2ZSBiZXR0ZXIgY29tcHJlc3Npb24gZm9yIFBORyBp bWFnZSBkYXRhLiBUaGUgc3RyYXRlZ3kKLSAgIHBhcmFtZXRlciBvbmx5IGFmZmVjdHMgdGhlIGNv bXByZXNzaW9uIHJhdGlvIGJ1dCBub3QgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZQotICAgY29tcHJl c3NlZCBvdXRwdXQgZXZlbiBpZiBpdCBpcyBub3Qgc2V0IGFwcHJvcHJpYXRlbHkuCisgICBaX0RF RkFVTFRfU1RSQVRFR1kgYW5kIFpfSFVGRk1BTl9PTkxZLiAgWl9STEUgaXMgZGVzaWduZWQgdG8g YmUgYWxtb3N0IGFzCisgICBmYXN0IGFzIFpfSFVGRk1BTl9PTkxZLCBidXQgZ2l2ZSBiZXR0ZXIg Y29tcHJlc3Npb24gZm9yIFBORyBpbWFnZSBkYXRhLiAgVGhlCisgICBzdHJhdGVneSBwYXJhbWV0 ZXIgb25seSBhZmZlY3RzIHRoZSBjb21wcmVzc2lvbiByYXRpbyBidXQgbm90IHRoZQorICAgY29y cmVjdG5lc3Mgb2YgdGhlIGNvbXByZXNzZWQgb3V0cHV0IGV2ZW4gaWYgaXQgaXMgbm90IHNldCBh cHByb3ByaWF0ZWx5LgorICAgWl9GSVhFRCBwcmV2ZW50cyB0aGUgdXNlIG9mIGR5bmFtaWMgSHVm Zm1hbiBjb2RlcywgYWxsb3dpbmcgZm9yIGEgc2ltcGxlcgorICAgZGVjb2RlciBmb3Igc3BlY2lh bCBhcHBsaWNhdGlvbnMuCiAKLSAgICAgIGRlZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3Vj Y2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKLSAgIG1lbW9yeSwgWl9T VFJFQU1fRVJST1IgaWYgYSBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoc3VjaCBhcyBhbiBpbnZhbGlk Ci0gICBtZXRob2QpLiBtc2cgaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVz c2FnZS4gIGRlZmxhdGVJbml0MiBkb2VzCi0gICBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246 IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyAgICAgZGVmbGF0ZUluaXQyIHJldHVy bnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAor ICAgbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBhbnkgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1 Y2ggYXMgYW4gaW52YWxpZAorICAgbWV0aG9kKSwgb3IgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6 bGliIGxpYnJhcnkgdmVyc2lvbiAoemxpYl92ZXJzaW9uKSBpcworICAgaW5jb21wYXRpYmxlIHdp dGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLiAgbXNn IGlzCisgICBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0 ZUluaXQyIGRvZXMgbm90IHBlcmZvcm0gYW55CisgICBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJl IGRvbmUgYnkgZGVmbGF0ZSgpLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0 RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCkBAIC01MDksMzYgKzYxMyw2NSBAQAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0 aCkpOwogLyoKICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJv bSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQotICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXBy ZXNzZWQgb3V0cHV0LiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCi0gICBpbW1lZGlhdGVs eSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yIGRlZmxhdGVSZXNldCwgYmVmb3Jl IGFueQotICAgY2FsbCBvZiBkZWZsYXRlLiBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29y IG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUKLSAgIGRpY3Rpb25hcnkgKHNlZSBpbmZsYXRlU2V0 RGljdGlvbmFyeSkuCisgICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQu ICBXaGVuIHVzaW5nIHRoZSB6bGliIGZvcm1hdCwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBiZSBj YWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvcgorICAg ZGVmbGF0ZVJlc2V0LCBhbmQgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUuICBXaGVuIGRvaW5n IHJhdyBkZWZsYXRlLCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBlaXRoZXIgYmVm b3JlIGFueSBjYWxsIG9mIGRlZmxhdGUsIG9yIGltbWVkaWF0ZWx5CisgICBhZnRlciB0aGUgY29t cGxldGlvbiBvZiBhIGRlZmxhdGUgYmxvY2ssIGkuZS4gYWZ0ZXIgYWxsIGlucHV0IGhhcyBiZWVu CisgICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBkZWxpdmVyZWQgd2hlbiB1c2lu ZyBhbnkgb2YgdGhlIGZsdXNoCisgICBvcHRpb25zIFpfQkxPQ0ssIFpfUEFSVElBTF9GTFVTSCwg Wl9TWU5DX0ZMVVNILCBvciBaX0ZVTExfRkxVU0guICBUaGUKKyAgIGNvbXByZXNzb3IgYW5kIGRl Y29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQorICAg aW5mbGF0ZVNldERpY3Rpb25hcnkpLgogCiAgICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25z aXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkKICAgIHRvIGJl IGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhl IG1vc3QgY29tbW9ubHkKLSAgIHVzZWQgc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRo ZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKKyAgIHVzZWQgc3RyaW5ncyBwcmVmZXJh Ymx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuICBVc2luZyBhCiAgICBk aWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBp cyBzaG9ydCBhbmQgY2FuIGJlCiAgICBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUg ZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlciB0aGFuCiAgICB3aXRoIHRoZSBkZWZh dWx0IGVtcHR5IGRpY3Rpb25hcnkuCiAKICAgICAgRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRo ZSBjb21wcmVzc2lvbiBkYXRhIHN0cnVjdHVyZXMgc2VsZWN0ZWQgYnkKICAgIGRlZmxhdGVJbml0 IG9yIGRlZmxhdGVJbml0MiwgYSBwYXJ0IG9mIHRoZSBkaWN0aW9uYXJ5IG1heSBpbiBlZmZlY3Qg YmUKLSAgIGRpc2NhcmRlZCwgZm9yIGV4YW1wbGUgaWYgdGhlIGRpY3Rpb25hcnkgaXMgbGFyZ2Vy IHRoYW4gdGhlIHdpbmRvdyBzaXplIGluCi0gICBkZWZsYXRlIG9yIGRlZmxhdGUyLiBUaHVzIHRo ZSBzdHJpbmdzIG1vc3QgbGlrZWx5IHRvIGJlIHVzZWZ1bCBzaG91bGQgYmUKLSAgIHB1dCBhdCB0 aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LCBub3QgYXQgdGhlIGZyb250LgorICAgZGlzY2FyZGVk LCBmb3IgZXhhbXBsZSBpZiB0aGUgZGljdGlvbmFyeSBpcyBsYXJnZXIgdGhhbiB0aGUgd2luZG93 IHNpemUKKyAgIHByb3ZpZGVkIGluIGRlZmxhdGVJbml0IG9yIGRlZmxhdGVJbml0Mi4gIFRodXMg dGhlIHN0cmluZ3MgbW9zdCBsaWtlbHkgdG8gYmUKKyAgIHVzZWZ1bCBzaG91bGQgYmUgcHV0IGF0 IHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnksIG5vdCBhdCB0aGUgZnJvbnQuICBJbgorICAgYWRk aXRpb24sIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGRlZmxhdGUgd2lsbCB1c2UgYXQg bW9zdCB0aGUgd2luZG93CisgICBzaXplIG1pbnVzIDI2MiBieXRlcyBvZiB0aGUgcHJvdmlkZWQg ZGljdGlvbmFyeS4KIAotICAgICBVcG9uIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLCBzdHJtLT5h ZGxlciBpcyBzZXQgdG8gdGhlIGFkbGVyMzIgdmFsdWUKKyAgICAgVXBvbiByZXR1cm4gb2YgdGhp cyBmdW5jdGlvbiwgc3RybS0+YWRsZXIgaXMgc2V0IHRvIHRoZSBBZGxlci0zMiB2YWx1ZQogICAg b2YgdGhlIGRpY3Rpb25hcnk7IHRoZSBkZWNvbXByZXNzb3IgbWF5IGxhdGVyIHVzZSB0aGlzIHZh bHVlIHRvIGRldGVybWluZQotICAgd2hpY2ggZGljdGlvbmFyeSBoYXMgYmVlbiB1c2VkIGJ5IHRo ZSBjb21wcmVzc29yLiAoVGhlIGFkbGVyMzIgdmFsdWUKKyAgIHdoaWNoIGRpY3Rpb25hcnkgaGFz IGJlZW4gdXNlZCBieSB0aGUgY29tcHJlc3Nvci4gIChUaGUgQWRsZXItMzIgdmFsdWUKICAgIGFw cGxpZXMgdG8gdGhlIHdob2xlIGRpY3Rpb25hcnkgZXZlbiBpZiBvbmx5IGEgc3Vic2V0IG9mIHRo ZSBkaWN0aW9uYXJ5IGlzCiAgICBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLikgSWYg YSByYXcgZGVmbGF0ZSB3YXMgcmVxdWVzdGVkLCB0aGVuIHRoZQotICAgYWRsZXIzMiB2YWx1ZSBp cyBub3QgY29tcHV0ZWQgYW5kIHN0cm0tPmFkbGVyIGlzIG5vdCBzZXQuCisgICBBZGxlci0zMiB2 YWx1ZSBpcyBub3QgY29tcHV0ZWQgYW5kIHN0cm0tPmFkbGVyIGlzIG5vdCBzZXQuCiAKICAgICAg ZGVmbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFN X0VSUk9SIGlmIGEKLSAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIE5VTEwgZGljdGlv bmFyeSkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcworICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKGUu Zy4gIGRpY3Rpb25hcnkgYmVpbmcgWl9OVUxMKSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCiAgICBp bmNvbnNpc3RlbnQgKGZvciBleGFtcGxlIGlmIGRlZmxhdGUgaGFzIGFscmVhZHkgYmVlbiBjYWxs ZWQgZm9yIHRoaXMgc3RyZWFtCi0gICBvciBpZiB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGlzIGJz b3J0KS4gZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKLSAgIHBlcmZvcm0gYW55IGNvbXBy ZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisgICBvciBpZiBub3QgYXQg YSBibG9jayBib3VuZGFyeSBmb3IgcmF3IGRlZmxhdGUpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkg ZG9lcworICAgbm90IHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBi eSBkZWZsYXRlKCkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVHZXREaWN0aW9u YXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJ5dGVmICpkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdUludCAgKmRpY3RMZW5ndGgpKTsKKy8qCisgICAgIFJldHVy bnMgdGhlIHNsaWRpbmcgZGljdGlvbmFyeSBiZWluZyBtYWludGFpbmVkIGJ5IGRlZmxhdGUuICBk aWN0TGVuZ3RoIGlzCisgICBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGljdGlv bmFyeSwgYW5kIHRoYXQgbWFueSBieXRlcyBhcmUgY29waWVkCisgICB0byBkaWN0aW9uYXJ5LiAg ZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdoIHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcwor ICAgYWx3YXlzIGVub3VnaC4gIElmIGRlZmxhdGVHZXREaWN0aW9uYXJ5KCkgaXMgY2FsbGVkIHdp dGggZGljdGlvbmFyeSBlcXVhbCB0bworICAgWl9OVUxMLCB0aGVuIG9ubHkgdGhlIGRpY3Rpb25h cnkgbGVuZ3RoIGlzIHJldHVybmVkLCBhbmQgbm90aGluZyBpcyBjb3BpZWQuCisgICBTaW1pbGFy eSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEwsIHRoZW4gaXQgaXMgbm90IHNldC4KKworICAgICBk ZWZsYXRlR2V0RGljdGlvbmFyeSgpIG1heSByZXR1cm4gYSBsZW5ndGggbGVzcyB0aGFuIHRoZSB3 aW5kb3cgc2l6ZSwgZXZlbgorICAgd2hlbiBtb3JlIHRoYW4gdGhlIHdpbmRvdyBzaXplIGluIGlu cHV0IGhhcyBiZWVuIHByb3ZpZGVkLiBJdCBtYXkgcmV0dXJuIHVwCisgICB0byAyNTggYnl0ZXMg bGVzcyBpbiB0aGF0IGNhc2UsIGR1ZSB0byBob3cgemxpYidzIGltcGxlbWVudGF0aW9uIG9mIGRl ZmxhdGUKKyAgIG1hbmFnZXMgdGhlIHNsaWRpbmcgd2luZG93IGFuZCBsb29rYWhlYWQgZm9yIG1h dGNoZXMsIHdoZXJlIG1hdGNoZXMgY2FuIGJlCisgICB1cCB0byAyNTggYnl0ZXMgbG9uZy4gSWYg dGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRoZSBsYXN0IHdpbmRvdy1zaXplIGJ5dGVzIG9mCisgICBp bnB1dCwgdGhlbiB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgc2F2ZWQgYnkgdGhlIGFwcGxpY2F0aW9u IG91dHNpZGUgb2YgemxpYi4KKworICAgICBkZWZsYXRlR2V0RGljdGlvbmFyeSByZXR1cm5zIFpf T0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3RhdGUg aXMgaW5jb25zaXN0ZW50LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlQ29weSBP Rigoel9zdHJlYW1wIGRlc3QsCkBAIC01NDgsMjYgKzY4MSwyNiBAQAogCiAgICAgIFRoaXMgZnVu Y3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIHNldmVyYWwgY29tcHJlc3Npb24gc3RyYXRlZ2llcyB3 aWxsIGJlCiAgICB0cmllZCwgZm9yIGV4YW1wbGUgd2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlz IG9mIHByZS1wcm9jZXNzaW5nIHRoZSBpbnB1dAotICAgZGF0YSB3aXRoIGEgZmlsdGVyLiBUaGUg c3RyZWFtcyB0aGF0IHdpbGwgYmUgZGlzY2FyZGVkIHNob3VsZCB0aGVuIGJlIGZyZWVkCisgICBk YXRhIHdpdGggYSBmaWx0ZXIuICBUaGUgc3RyZWFtcyB0aGF0IHdpbGwgYmUgZGlzY2FyZGVkIHNo b3VsZCB0aGVuIGJlIGZyZWVkCiAgICBieSBjYWxsaW5nIGRlZmxhdGVFbmQuICBOb3RlIHRoYXQg ZGVmbGF0ZUNvcHkgZHVwbGljYXRlcyB0aGUgaW50ZXJuYWwKLSAgIGNvbXByZXNzaW9uIHN0YXRl IHdoaWNoIGNhbiBiZSBxdWl0ZSBsYXJnZSwgc28gdGhpcyBzdHJhdGVneSBpcyBzbG93IGFuZAot ICAgY2FuIGNvbnN1bWUgbG90cyBvZiBtZW1vcnkuCisgICBjb21wcmVzc2lvbiBzdGF0ZSB3aGlj aCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHRoaXMgc3RyYXRlZ3kgaXMgc2xvdyBhbmQgY2FuCisg ICBjb25zdW1lIGxvdHMgb2YgbWVtb3J5LgogCiAgICAgIGRlZmxhdGVDb3B5IHJldHVybnMgWl9P SyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVt b3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25z aXN0ZW50Ci0gICAoc3VjaCBhcyB6YWxsb2MgYmVpbmcgTlVMTCkuIG1zZyBpcyBsZWZ0IHVuY2hh bmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKKyAgIChzdWNoIGFzIHphbGxvYyBiZWluZyBaX05VTEwp LiAgbXNnIGlzIGxlZnQgdW5jaGFuZ2VkIGluIGJvdGggc291cmNlIGFuZAogICAgZGVzdGluYXRp b24uCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVSZXNldCBPRigoel9zdHJlYW1w IHN0cm0pKTsKIC8qCi0gICAgIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBkZWZsYXRl RW5kIGZvbGxvd2VkIGJ5IGRlZmxhdGVJbml0LAotICAgYnV0IGRvZXMgbm90IGZyZWUgYW5kIHJl YWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4KLSAgIFRoZSBzdHJl YW0gd2lsbCBrZWVwIHRoZSBzYW1lIGNvbXByZXNzaW9uIGxldmVsIGFuZCBhbnkgb3RoZXIgYXR0 cmlidXRlcwotICAgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBieSBkZWZsYXRlSW5pdDIuCisgICAg IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBkZWZsYXRlRW5kIGZvbGxvd2VkIGJ5IGRl ZmxhdGVJbml0LCBidXQKKyAgIGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgdGhlIGludGVy bmFsIGNvbXByZXNzaW9uIHN0YXRlLiAgVGhlIHN0cmVhbQorICAgd2lsbCBsZWF2ZSB0aGUgY29t cHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVl bgorICAgc2V0IHVuY2hhbmdlZC4KIAotICAgICAgZGVmbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBp ZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3Rh dGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgTlVMTCku CisgICAgIGRlZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1f RVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1 Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCkuCiAqLwogCiBaRVhURVJOIGludCBa RVhQT1JUIGRlZmxhdGVQYXJhbXMgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNTc1LDQ0ICs3MDgs MTIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJhdGVn eSkpOwogLyoKICAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBh bmQgY29tcHJlc3Npb24gc3RyYXRlZ3kuICBUaGUKLSAgIGludGVycHJldGF0aW9uIG9mIGxldmVs IGFuZCBzdHJhdGVneSBpcyBhcyBpbiBkZWZsYXRlSW5pdDIuICBUaGlzIGNhbiBiZQorICAgaW50 ZXJwcmV0YXRpb24gb2YgbGV2ZWwgYW5kIHN0cmF0ZWd5IGlzIGFzIGluIGRlZmxhdGVJbml0Migp LiAgVGhpcyBjYW4gYmUKICAgIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gY29tcHJlc3Npb24gYW5k IHN0cmFpZ2h0IGNvcHkgb2YgdGhlIGlucHV0IGRhdGEsIG9yCi0gICB0byBzd2l0Y2ggdG8gYSBk aWZmZXJlbnQga2luZCBvZiBpbnB1dCBkYXRhIHJlcXVpcmluZyBhIGRpZmZlcmVudAotICAgc3Ry YXRlZ3kuIElmIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBjaGFuZ2VkLCB0aGUgaW5wdXQgYXZh aWxhYmxlIHNvIGZhcgotICAgaXMgY29tcHJlc3NlZCB3aXRoIHRoZSBvbGQgbGV2ZWwgKGFuZCBt YXkgYmUgZmx1c2hlZCk7IHRoZSBuZXcgbGV2ZWwgd2lsbAotICAgdGFrZSBlZmZlY3Qgb25seSBh dCB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KKyAgIHRvIHN3aXRjaCB0byBhIGRpZmZlcmVu dCBraW5kIG9mIGlucHV0IGRhdGEgcmVxdWlyaW5nIGEgZGlmZmVyZW50IHN0cmF0ZWd5LgorICAg SWYgdGhlIGNvbXByZXNzaW9uIGFwcHJvYWNoICh3aGljaCBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBs ZXZlbCkgb3IgdGhlCisgICBzdHJhdGVneSBpcyBjaGFuZ2VkLCBhbmQgaWYgYW55IGlucHV0IGhh cyBiZWVuIGNvbnN1bWVkIGluIGEgcHJldmlvdXMKKyAgIGRlZmxhdGUoKSBjYWxsLCB0aGVuIHRo ZSBpbnB1dCBhdmFpbGFibGUgc28gZmFyIGlzIGNvbXByZXNzZWQgd2l0aCB0aGUgb2xkCisgICBs ZXZlbCBhbmQgc3RyYXRlZ3kgdXNpbmcgZGVmbGF0ZShzdHJtLCBaX0JMT0NLKS4gIFRoZXJlIGFy ZSB0aHJlZSBhcHByb2FjaGVzCisgICBmb3IgdGhlIGNvbXByZXNzaW9uIGxldmVscyAwLCAxLi4z LCBhbmQgNC4uOSByZXNwZWN0aXZlbHkuICBUaGUgbmV3IGxldmVsCisgICBhbmQgc3RyYXRlZ3kg d2lsbCB0YWtlIGVmZmVjdCBhdCB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KIAotICAgICBC ZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZVBhcmFtcywgdGhlIHN0cmVhbSBzdGF0ZSBtdXN0IGJl IHNldCBhcyBmb3IKLSAgIGEgY2FsbCBvZiBkZWZsYXRlKCksIHNpbmNlIHRoZSBjdXJyZW50bHkg YXZhaWxhYmxlIGlucHV0IG1heSBoYXZlIHRvCi0gICBiZSBjb21wcmVzc2VkIGFuZCBmbHVzaGVk LiBJbiBwYXJ0aWN1bGFyLCBzdHJtLT5hdmFpbF9vdXQgbXVzdCBiZSBub24temVyby4KKyAgICAg SWYgYSBkZWZsYXRlKHN0cm0sIFpfQkxPQ0spIGlzIHBlcmZvcm1lZCBieSBkZWZsYXRlUGFyYW1z KCksIGFuZCBpdCBkb2VzCisgICBub3QgaGF2ZSBlbm91Z2ggb3V0cHV0IHNwYWNlIHRvIGNvbXBs ZXRlLCB0aGVuIHRoZSBwYXJhbWV0ZXIgY2hhbmdlIHdpbGwgbm90CisgICB0YWtlIGVmZmVjdC4g IEluIHRoaXMgY2FzZSwgZGVmbGF0ZVBhcmFtcygpIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2l0aCB0 aGUKKyAgIHNhbWUgcGFyYW1ldGVycyBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgdG8gdHJ5IGFnYWlu LgogCi0gICAgIGRlZmxhdGVQYXJhbXMgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFN X0VSUk9SIGlmIHRoZSBzb3VyY2UKLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IG9y IGlmIGEgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLCBaX0JVRl9FUlJPUgotICAgaWYgc3RybS0+YXZh aWxfb3V0IHdhcyB6ZXJvLgorICAgICBJbiBvcmRlciB0byBhc3N1cmUgYSBjaGFuZ2UgaW4gdGhl IHBhcmFtZXRlcnMgb24gdGhlIGZpcnN0IHRyeSwgdGhlCisgICBkZWZsYXRlIHN0cmVhbSBzaG91 bGQgYmUgZmx1c2hlZCB1c2luZyBkZWZsYXRlKCkgd2l0aCBaX0JMT0NLIG9yIG90aGVyIGZsdXNo CisgICByZXF1ZXN0IHVudGlsIHN0cm0uYXZhaWxfb3V0IGlzIG5vdCB6ZXJvLCBiZWZvcmUgY2Fs bGluZyBkZWZsYXRlUGFyYW1zKCkuCisgICBUaGVuIG5vIG1vcmUgaW5wdXQgZGF0YSBzaG91bGQg YmUgcHJvdmlkZWQgYmVmb3JlIHRoZSBkZWZsYXRlUGFyYW1zKCkgY2FsbC4KKyAgIElmIHRoaXMg aXMgZG9uZSwgdGhlIG9sZCBsZXZlbCBhbmQgc3RyYXRlZ3kgd2lsbCBiZSBhcHBsaWVkIHRvIHRo ZSBkYXRhCisgICBjb21wcmVzc2VkIGJlZm9yZSBkZWZsYXRlUGFyYW1zKCksIGFuZCB0aGUgbmV3 IGxldmVsIGFuZCBzdHJhdGVneSB3aWxsIGJlCisgICBhcHBsaWVkIHRvIHRoZSB0aGUgZGF0YSBj b21wcmVzc2VkIGFmdGVyIGRlZmxhdGVQYXJhbXMoKS4KKworICAgICBkZWZsYXRlUGFyYW1zIHJl dHVybnMgWl9PSyBvbiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVh bQorICAgc3RhdGUgd2FzIGluY29uc2lzdGVudCBvciBpZiBhIHBhcmFtZXRlciB3YXMgaW52YWxp ZCwgb3IgWl9CVUZfRVJST1IgaWYKKyAgIHRoZXJlIHdhcyBub3QgZW5vdWdoIG91dHB1dCBzcGFj ZSB0byBjb21wbGV0ZSB0aGUgY29tcHJlc3Npb24gb2YgdGhlCisgICBhdmFpbGFibGUgaW5wdXQg ZGF0YSBiZWZvcmUgYSBjaGFuZ2UgaW4gdGhlIHN0cmF0ZWd5IG9yIGFwcHJvYWNoLiAgTm90ZSB0 aGF0CisgICBpbiB0aGUgY2FzZSBvZiBhIFpfQlVGX0VSUk9SLCB0aGUgcGFyYW1ldGVycyBhcmUg bm90IGNoYW5nZWQuICBBIHJldHVybgorICAgdmFsdWUgb2YgWl9CVUZfRVJST1IgaXMgbm90IGZh dGFsLCBpbiB3aGljaCBjYXNlIGRlZmxhdGVQYXJhbXMoKSBjYW4gYmUKKyAgIHJldHJpZWQgd2l0 aCBtb3JlIG91dHB1dCBzcGFjZS4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVR1 bmUgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGdvb2RfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IG1heF9sYXp5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5p Y2VfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9j aGFpbikpOworLyoKKyAgICAgRmluZSB0dW5lIGRlZmxhdGUncyBpbnRlcm5hbCBjb21wcmVzc2lv biBwYXJhbWV0ZXJzLiAgVGhpcyBzaG91bGQgb25seSBiZQorICAgdXNlZCBieSBzb21lb25lIHdo byB1bmRlcnN0YW5kcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgemxpYidzIGRlZmxhdGUgZm9yCisg ICBzZWFyY2hpbmcgZm9yIHRoZSBiZXN0IG1hdGNoaW5nIHN0cmluZywgYW5kIGV2ZW4gdGhlbiBv bmx5IGJ5IHRoZSBtb3N0CisgICBmYW5hdGljIG9wdGltaXplciB0cnlpbmcgdG8gc3F1ZWV6ZSBv dXQgdGhlIGxhc3QgY29tcHJlc3NlZCBiaXQgZm9yIHRoZWlyCisgICBzcGVjaWZpYyBpbnB1dCBk YXRhLiAgUmVhZCB0aGUgZGVmbGF0ZS5jIHNvdXJjZSBjb2RlIGZvciB0aGUgbWVhbmluZyBvZiB0 aGUKKyAgIG1heF9sYXp5LCBnb29kX2xlbmd0aCwgbmljZV9sZW5ndGgsIGFuZCBtYXhfY2hhaW4g cGFyYW1ldGVycy4KKworICAgICBkZWZsYXRlVHVuZSgpIGNhbiBiZSBjYWxsZWQgYWZ0ZXIgZGVm bGF0ZUluaXQoKSBvciBkZWZsYXRlSW5pdDIoKSwgYW5kCisgICByZXR1cm5zIFpfT0sgb24gc3Vj Y2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgZm9yIGFuIGludmFsaWQgZGVmbGF0ZSBzdHJlYW0uCisg Ki8KKwogWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGRlZmxhdGVCb3VuZCBPRigoel9zdHJlYW1wIHN0 cm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TG9uZyBzb3VyY2VM ZW4pKTsKIC8qCiAgICAgIGRlZmxhdGVCb3VuZCgpIHJldHVybnMgYW4gdXBwZXIgYm91bmQgb24g dGhlIGNvbXByZXNzZWQgc2l6ZSBhZnRlcgotICAgZGVmbGF0aW9uIG9mIHNvdXJjZUxlbiBieXRl cy4gIEl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIGRlZmxhdGVJbml0KCkKLSAgIG9yIGRlZmxhdGVJ bml0MigpLiAgVGhpcyB3b3VsZCBiZSB1c2VkIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIK LSAgIGZvciBkZWZsYXRpb24gaW4gYSBzaW5nbGUgcGFzcywgYW5kIHNvIHdvdWxkIGJlIGNhbGxl ZCBiZWZvcmUgZGVmbGF0ZSgpLgorICAgZGVmbGF0aW9uIG9mIHNvdXJjZUxlbiBieXRlcy4gIEl0 IG11c3QgYmUgY2FsbGVkIGFmdGVyIGRlZmxhdGVJbml0KCkgb3IKKyAgIGRlZmxhdGVJbml0Migp LCBhbmQgYWZ0ZXIgZGVmbGF0ZVNldEhlYWRlcigpLCBpZiB1c2VkLiAgVGhpcyB3b3VsZCBiZSB1 c2VkCisgICB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIGZvciBkZWZsYXRpb24gaW4gYSBz aW5nbGUgcGFzcywgYW5kIHNvIHdvdWxkIGJlCisgICBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4g IElmIHRoYXQgZmlyc3QgZGVmbGF0ZSgpIGNhbGwgaXMgcHJvdmlkZWQgdGhlCisgICBzb3VyY2VM ZW4gaW5wdXQgYnl0ZXMsIGFuIG91dHB1dCBidWZmZXIgYWxsb2NhdGVkIHRvIHRoZSBzaXplIHJl dHVybmVkIGJ5CisgICBkZWZsYXRlQm91bmQoKSwgYW5kIHRoZSBmbHVzaCB2YWx1ZSBaX0ZJTklT SCwgdGhlbiBkZWZsYXRlKCkgaXMgZ3VhcmFudGVlZAorICAgdG8gcmV0dXJuIFpfU1RSRUFNX0VO RC4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNvbXByZXNzZWQgc2l6ZSB0bwor ICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCgpIGlm IGZsdXNoIG9wdGlvbnMgb3RoZXIKKyAgIHRoYW4gWl9GSU5JU0ggb3IgWl9OT19GTFVTSCBhcmUg dXNlZC4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVBlbmRpbmcgT0YoKHpfc3Ry ZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgKnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KmJpdHMpKTsKKy8qCisgICAgIGRlZmxhdGVQZW5kaW5nKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9m IGJ5dGVzIGFuZCBiaXRzIG9mIG91dHB1dCB0aGF0IGhhdmUKKyAgIGJlZW4gZ2VuZXJhdGVkLCBi dXQgbm90IHlldCBwcm92aWRlZCBpbiB0aGUgYXZhaWxhYmxlIG91dHB1dC4gIFRoZSBieXRlcyBu b3QKKyAgIHByb3ZpZGVkIHdvdWxkIGJlIGR1ZSB0byB0aGUgYXZhaWxhYmxlIG91dHB1dCBzcGFj ZSBoYXZpbmcgYmVpbmcgY29uc3VtZWQuCisgICBUaGUgbnVtYmVyIG9mIGJpdHMgb2Ygb3V0cHV0 IG5vdCBwcm92aWRlZCBhcmUgYmV0d2VlbiAwIGFuZCA3LCB3aGVyZSB0aGV5CisgICBhd2FpdCBt b3JlIGJpdHMgdG8gam9pbiB0aGVtIGluIG9yZGVyIHRvIGZpbGwgb3V0IGEgZnVsbCBieXRlLiAg SWYgcGVuZGluZworICAgb3IgYml0cyBhcmUgWl9OVUxMLCB0aGVuIHRob3NlIHZhbHVlcyBhcmUg bm90IHNldC4KKworICAgICBkZWZsYXRlUGVuZGluZyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywg b3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNv bnNpc3RlbnQuCisgKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgT0YoKHpf c3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBi aXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOwog LyoKICAgICAgZGVmbGF0ZVByaW1lKCkgaW5zZXJ0cyBiaXRzIGluIHRoZSBkZWZsYXRlIG91dHB1 dCBzdHJlYW0uICBUaGUgaW50ZW50Ci0gIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv IHN0YXJ0IG9mZiB0aGUgZGVmbGF0ZSBvdXRwdXQgd2l0aCB0aGUKLSAgYml0cyBsZWZ0b3ZlciBm cm9tIGEgcHJldmlvdXMgZGVmbGF0ZSBzdHJlYW0gd2hlbiBhcHBlbmRpbmcgdG8gaXQuICBBcyBz dWNoLAotICB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHJhdyBkZWZsYXRlLCBh bmQgbXVzdCBiZSB1c2VkIGJlZm9yZSB0aGUKLSAgZmlyc3QgZGVmbGF0ZSgpIGNhbGwgYWZ0ZXIg YSBkZWZsYXRlSW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZQotICBsZXNz IHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlIGxlYXN0IHNpZ25pZmlj YW50IGJpdHMgb2YKLSAgdmFsdWUgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgb3V0cHV0LgorICAg aXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgb2ZmIHRoZSBkZWZsYXRlIG91 dHB1dCB3aXRoIHRoZSBiaXRzCisgICBsZWZ0b3ZlciBmcm9tIGEgcHJldmlvdXMgZGVmbGF0ZSBz dHJlYW0gd2hlbiBhcHBlbmRpbmcgdG8gaXQuICBBcyBzdWNoLCB0aGlzCisgICBmdW5jdGlvbiBj YW4gb25seSBiZSB1c2VkIGZvciByYXcgZGVmbGF0ZSwgYW5kIG11c3QgYmUgdXNlZCBiZWZvcmUg dGhlIGZpcnN0CisgICBkZWZsYXRlKCkgY2FsbCBhZnRlciBhIGRlZmxhdGVJbml0MigpIG9yIGRl ZmxhdGVSZXNldCgpLiAgYml0cyBtdXN0IGJlIGxlc3MKKyAgIHRoYW4gb3IgZXF1YWwgdG8gMTYs IGFuZCB0aGF0IG1hbnkgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdmFsdWUKKyAg IHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIG91dHB1dC4KIAotICAgICAgZGVmbGF0ZVByaW1lIHJl dHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisg ICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9CVUZfRVJST1IgaWYg dGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIHJvb20gaW4gdGhlIGludGVybmFsIGJ1ZmZlciB0byBp bnNlcnQgdGhlIGJpdHMsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc291cmNlIHN0cmVh bSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZs YXRlU2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3pfaGVhZGVycCBoZWFkKSk7CisvKgorICAgICBkZWZsYXRlU2V0 SGVhZGVyKCkgcHJvdmlkZXMgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gZm9yIHdoZW4gYSBnemlw CisgICBzdHJlYW0gaXMgcmVxdWVzdGVkIGJ5IGRlZmxhdGVJbml0MigpLiAgZGVmbGF0ZVNldEhl YWRlcigpIG1heSBiZSBjYWxsZWQKKyAgIGFmdGVyIGRlZmxhdGVJbml0MigpIG9yIGRlZmxhdGVS ZXNldCgpIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgb2YKKyAgIGRlZmxhdGUoKS4gIFRoZSB0 ZXh0LCB0aW1lLCBvcywgZXh0cmEgZmllbGQsIG5hbWUsIGFuZCBjb21tZW50IGluZm9ybWF0aW9u CisgICBpbiB0aGUgcHJvdmlkZWQgZ3pfaGVhZGVyIHN0cnVjdHVyZSBhcmUgd3JpdHRlbiB0byB0 aGUgZ3ppcCBoZWFkZXIgKHhmbGFnIGlzCisgICBpZ25vcmVkIC0tIHRoZSBleHRyYSBmbGFncyBh cmUgc2V0IGFjY29yZGluZyB0byB0aGUgY29tcHJlc3Npb24gbGV2ZWwpLiAgVGhlCisgICBjYWxs ZXIgbXVzdCBhc3N1cmUgdGhhdCwgaWYgbm90IFpfTlVMTCwgbmFtZSBhbmQgY29tbWVudCBhcmUg dGVybWluYXRlZCB3aXRoCisgICBhIHplcm8gYnl0ZSwgYW5kIHRoYXQgaWYgZXh0cmEgaXMgbm90 IFpfTlVMTCwgdGhhdCBleHRyYV9sZW4gYnl0ZXMgYXJlCisgICBhdmFpbGFibGUgdGhlcmUuICBJ ZiBoY3JjIGlzIHRydWUsIGEgZ3ppcCBoZWFkZXIgY3JjIGlzIGluY2x1ZGVkLiAgTm90ZSB0aGF0 CisgICB0aGUgY3VycmVudCB2ZXJzaW9ucyBvZiB0aGUgY29tbWFuZC1saW5lIHZlcnNpb24gb2Yg Z3ppcCAodXAgdGhyb3VnaCB2ZXJzaW9uCisgICAxLjMueCkgZG8gbm90IHN1cHBvcnQgaGVhZGVy IGNyYydzLCBhbmQgd2lsbCByZXBvcnQgdGhhdCBpdCBpcyBhICJtdWx0aS1wYXJ0CisgICBnemlw IGZpbGUiIGFuZCBnaXZlIHVwLgorCisgICAgIElmIGRlZmxhdGVTZXRIZWFkZXIgaXMgbm90IHVz ZWQsIHRoZSBkZWZhdWx0IGd6aXAgaGVhZGVyIGhhcyB0ZXh0IGZhbHNlLAorICAgdGhlIHRpbWUg c2V0IHRvIHplcm8sIGFuZCBvcyBzZXQgdG8gMjU1LCB3aXRoIG5vIGV4dHJhLCBuYW1lLCBvciBj b21tZW50CisgICBmaWVsZHMuICBUaGUgZ3ppcCBoZWFkZXIgaXMgcmV0dXJuZWQgdG8gdGhlIGRl ZmF1bHQgc3RhdGUgYnkgZGVmbGF0ZVJlc2V0KCkuCisKKyAgICAgZGVmbGF0ZVNldEhlYWRlciBy ZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQog ICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCiAqLwogCkBAIC02MjAsNDMgKzgzMiw1 MyBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdDIgT0YoKHpfc3RyZWFtcCBzdHJt LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cykp OwogCi0gICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGluZmxhdGVJbml0IHdpdGggYW4g ZXh0cmEgcGFyYW1ldGVyLiBUaGUKKyAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgaW5m bGF0ZUluaXQgd2l0aCBhbiBleHRyYSBwYXJhbWV0ZXIuICBUaGUKICAgIGZpZWxkcyBuZXh0X2lu LCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQK ICAgIGJlZm9yZSBieSB0aGUgY2FsbGVyLgogCiAgICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRl ciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSBtYXhpbXVtIHdpbmRvdwogICAgc2l6 ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUg cmFuZ2UgOC4uMTUgZm9yCi0gICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIFRoZSBkZWZh dWx0IHZhbHVlIGlzIDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQKLSAgIGluc3RlYWQuIHdpbmRv d0JpdHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdpbmRvd0JpdHMgdmFs dWUKKyAgIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlz IDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQKKyAgIGluc3RlYWQuICB3aW5kb3dCaXRzIG11c3Qg YmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3aW5kb3dCaXRzIHZhbHVlCiAgICBwcm92 aWRlZCB0byBkZWZsYXRlSW5pdDIoKSB3aGlsZSBjb21wcmVzc2luZywgb3IgaXQgbXVzdCBiZSBl cXVhbCB0byAxNSBpZgotICAgZGVmbGF0ZUluaXQyKCkgd2FzIG5vdCB1c2VkLiBJZiBhIGNvbXBy ZXNzZWQgc3RyZWFtIHdpdGggYSBsYXJnZXIgd2luZG93CisgICBkZWZsYXRlSW5pdDIoKSB3YXMg bm90IHVzZWQuICBJZiBhIGNvbXByZXNzZWQgc3RyZWFtIHdpdGggYSBsYXJnZXIgd2luZG93CiAg ICBzaXplIGlzIGdpdmVuIGFzIGlucHV0LCBpbmZsYXRlKCkgd2lsbCByZXR1cm4gd2l0aCB0aGUg ZXJyb3IgY29kZQogICAgWl9EQVRBX0VSUk9SIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFsbG9jYXRl IGEgbGFyZ2VyIHdpbmRvdy4KIAotICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIC04Li4tMTUg Zm9yIHJhdyBpbmZsYXRlLiBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCi0gICBkZXRlcm1pbmVz IHRoZSB3aW5kb3cgc2l6ZS4gaW5mbGF0ZSgpIHdpbGwgdGhlbiBwcm9jZXNzIHJhdyBkZWZsYXRl IGRhdGEsCisgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgemVybyB0byByZXF1ZXN0IHRoYXQg aW5mbGF0ZSB1c2UgdGhlIHdpbmRvdyBzaXplIGluCisgICB0aGUgemxpYiBoZWFkZXIgb2YgdGhl IGNvbXByZXNzZWQgc3RyZWFtLgorCisgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0x NSBmb3IgcmF3IGluZmxhdGUuICBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCisgICBkZXRlcm1p bmVzIHRoZSB3aW5kb3cgc2l6ZS4gIGluZmxhdGUoKSB3aWxsIHRoZW4gcHJvY2VzcyByYXcgZGVm bGF0ZSBkYXRhLAogICAgbm90IGxvb2tpbmcgZm9yIGEgemxpYiBvciBnemlwIGhlYWRlciwgbm90 IGdlbmVyYXRpbmcgYSBjaGVjayB2YWx1ZSwgYW5kIG5vdAotICAgbG9va2luZyBmb3IgYW55IGNo ZWNrIHZhbHVlcyBmb3IgY29tcGFyaXNvbiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIFRoaXMK KyAgIGxvb2tpbmcgZm9yIGFueSBjaGVjayB2YWx1ZXMgZm9yIGNvbXBhcmlzb24gYXQgdGhlIGVu ZCBvZiB0aGUgc3RyZWFtLiAgVGhpcwogICAgaXMgZm9yIHVzZSB3aXRoIG90aGVyIGZvcm1hdHMg dGhhdCB1c2UgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdAotICAgc3VjaCBhcyB6 aXAuICBUaG9zZSBmb3JtYXRzIHByb3ZpZGUgdGhlaXIgb3duIGNoZWNrIHZhbHVlcy4gSWYgYSBj dXN0b20KKyAgIHN1Y2ggYXMgemlwLiAgVGhvc2UgZm9ybWF0cyBwcm92aWRlIHRoZWlyIG93biBj aGVjayB2YWx1ZXMuICBJZiBhIGN1c3RvbQogICAgZm9ybWF0IGlzIGRldmVsb3BlZCB1c2luZyB0 aGUgcmF3IGRlZmxhdGUgZm9ybWF0IGZvciBjb21wcmVzc2VkIGRhdGEsIGl0IGlzCi0gICByZWNv bW1lbmRlZCB0aGF0IGEgY2hlY2sgdmFsdWUgc3VjaCBhcyBhbiBhZGxlcjMyIG9yIGEgY3JjMzIg YmUgYXBwbGllZCB0bworICAgcmVjb21tZW5kZWQgdGhhdCBhIGNoZWNrIHZhbHVlIHN1Y2ggYXMg YW4gQWRsZXItMzIgb3IgYSBDUkMtMzIgYmUgYXBwbGllZCB0bwogICAgdGhlIHVuY29tcHJlc3Nl ZCBkYXRhIGFzIGlzIGRvbmUgaW4gdGhlIHpsaWIsIGd6aXAsIGFuZCB6aXAgZm9ybWF0cy4gIEZv cgotICAgbW9zdCBhcHBsaWNhdGlvbnMsIHRoZSB6bGliIGZvcm1hdCBzaG91bGQgYmUgdXNlZCBh cyBpcy4gTm90ZSB0aGF0IGNvbW1lbnRzCisgICBtb3N0IGFwcGxpY2F0aW9ucywgdGhlIHpsaWIg Zm9ybWF0IHNob3VsZCBiZSB1c2VkIGFzIGlzLiAgTm90ZSB0aGF0IGNvbW1lbnRzCiAgICBhYm92 ZSBvbiB0aGUgdXNlIGluIGRlZmxhdGVJbml0MigpIGFwcGxpZXMgdG8gdGhlIG1hZ25pdHVkZSBv ZiB3aW5kb3dCaXRzLgogCi0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgZ3JlYXRlciB0aGFu IDE1IGZvciBvcHRpb25hbCBnemlwIGRlY29kaW5nLiBBZGQKKyAgICAgd2luZG93Qml0cyBjYW4g YWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZGVjb2RpbmcuICBBZGQK ICAgIDMyIHRvIHdpbmRvd0JpdHMgdG8gZW5hYmxlIHpsaWIgYW5kIGd6aXAgZGVjb2Rpbmcgd2l0 aCBhdXRvbWF0aWMgaGVhZGVyCiAgICBkZXRlY3Rpb24sIG9yIGFkZCAxNiB0byBkZWNvZGUgb25s eSB0aGUgZ3ppcCBmb3JtYXQgKHRoZSB6bGliIGZvcm1hdCB3aWxsCi0gICByZXR1cm4gYSBaX0RB VEFfRVJST1IuICBJZiBhIGd6aXAgc3RyZWFtIGlzIGJlaW5nIGRlY29kZWQsIHN0cm0tPmFkbGVy IGlzCi0gICBhIGNyYzMyIGluc3RlYWQgb2YgYW4gYWRsZXIzMi4KKyAgIHJldHVybiBhIFpfREFU QV9FUlJPUikuICBJZiBhIGd6aXAgc3RyZWFtIGlzIGJlaW5nIGRlY29kZWQsIHN0cm0tPmFkbGVy IGlzIGEKKyAgIENSQy0zMiBpbnN0ZWFkIG9mIGFuIEFkbGVyLTMyLiAgVW5saWtlIHRoZSBndW56 aXAgdXRpbGl0eSBhbmQgZ3pyZWFkKCkgKHNlZQorICAgYmVsb3cpLCBpbmZsYXRlKCkgd2lsbCBu b3QgYXV0b21hdGljYWxseSBkZWNvZGUgY29uY2F0ZW5hdGVkIGd6aXAgc3RyZWFtcy4KKyAgIGlu ZmxhdGUoKSB3aWxsIHJldHVybiBaX1NUUkVBTV9FTkQgYXQgdGhlIGVuZCBvZiB0aGUgZ3ppcCBz dHJlYW0uICBUaGUgc3RhdGUKKyAgIHdvdWxkIG5lZWQgdG8gYmUgcmVzZXQgdG8gY29udGludWUg ZGVjb2RpbmcgYSBzdWJzZXF1ZW50IGd6aXAgc3RyZWFtLgogCiAgICAgIGluZmxhdGVJbml0MiBy ZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91 Z2gKLSAgIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgYSBwYXJhbWV0ZXIgaXMgaW52YWxpZCAo c3VjaCBhcyBhIG5lZ2F0aXZlCi0gICBtZW1MZXZlbCkuIG1zZyBpcyBzZXQgdG8gbnVsbCBpZiB0 aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgaW5mbGF0ZUluaXQyCi0gICBkb2VzIG5vdCBwZXJm b3JtIGFueSBkZWNvbXByZXNzaW9uIGFwYXJ0IGZyb20gcmVhZGluZyB0aGUgemxpYiBoZWFkZXIg aWYKLSAgIHByZXNlbnQ6IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGluZmxhdGUoKS4gKFNvIG5leHRf aW4gYW5kIGF2YWlsX2luIG1heSBiZQotICAgbW9kaWZpZWQsIGJ1dCBuZXh0X291dCBhbmQgYXZh aWxfb3V0IGFyZSB1bmNoYW5nZWQuKQorICAgbWVtb3J5LCBaX1ZFUlNJT05fRVJST1IgaWYgdGhl IHpsaWIgbGlicmFyeSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgdmVyc2lv biBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBwYXJhbWV0 ZXJzIGFyZQorICAgaW52YWxpZCwgc3VjaCBhcyBhIG51bGwgcG9pbnRlciB0byB0aGUgc3RydWN0 dXJlLiAgbXNnIGlzIHNldCB0byBudWxsIGlmCisgICB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdl LiAgaW5mbGF0ZUluaXQyIGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24KKyAgIGFw YXJ0IGZyb20gcG9zc2libHkgcmVhZGluZyB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogYWN0 dWFsIGRlY29tcHJlc3Npb24KKyAgIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICAoU28gbmV4 dF9pbiBhbmQgYXZhaWxfaW4gbWF5IGJlIG1vZGlmaWVkLCBidXQKKyAgIG5leHRfb3V0IGFuZCBh dmFpbF9vdXQgYXJlIHVudXNlZCBhbmQgdW5jaGFuZ2VkLikgVGhlIGN1cnJlbnQgaW1wbGVtZW50 YXRpb24KKyAgIG9mIGluZmxhdGVJbml0MigpIGRvZXMgbm90IHByb2Nlc3MgYW55IGhlYWRlciBp bmZvcm1hdGlvbiAtLSB0aGF0IGlzCisgICBkZWZlcnJlZCB1bnRpbCBpbmZsYXRlKCkgaXMgY2Fs bGVkLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeSBPRigo el9zdHJlYW1wIHN0cm0sCkBAIC02NjQsMzMgKzg4Niw1NiBAQAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOwogLyoKICAgICAg SW5pdGlhbGl6ZXMgdGhlIGRlY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiB1 bmNvbXByZXNzZWQgYnl0ZQotICAgc2VxdWVuY2UuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxs ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjYWxsIG9mIGluZmxhdGUKLSAgIGlmIHRoaXMgY2FsbCBy ZXR1cm5lZCBaX05FRURfRElDVC4gVGhlIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVz c29yCi0gICBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBhZGxlcjMyIHZhbHVlIHJldHVybmVk IGJ5IHRoaXMgY2FsbCBvZgotICAgaW5mbGF0ZS4gVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJl c3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCi0gICBkaWN0aW9uYXJ5IChzZWUgZGVmbGF0 ZVNldERpY3Rpb25hcnkpLgorICAgc2VxdWVuY2UuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2Fs bGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiBpbmZsYXRlLAorICAgaWYgdGhhdCBjYWxs IHJldHVybmVkIFpfTkVFRF9ESUNULiAgVGhlIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21w cmVzc29yCisgICBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBBZGxlci0zMiB2YWx1ZSByZXR1 cm5lZCBieSB0aGF0IGNhbGwgb2YgaW5mbGF0ZS4KKyAgIFRoZSBjb21wcmVzc29yIGFuZCBkZWNv bXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKKyAgIGRl ZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4g YmUgY2FsbGVkIGF0IGFueQorICAgdGltZSB0byBzZXQgdGhlIGRpY3Rpb25hcnkuICBJZiB0aGUg cHJvdmlkZWQgZGljdGlvbmFyeSBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICB3aW5kb3cgYW5kIHRo ZXJlIGlzIGFscmVhZHkgZGF0YSBpbiB0aGUgd2luZG93LCB0aGVuIHRoZSBwcm92aWRlZCBkaWN0 aW9uYXJ5CisgICB3aWxsIGFtZW5kIHdoYXQncyB0aGVyZS4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0 IGluc3VyZSB0aGF0IHRoZSBkaWN0aW9uYXJ5CisgICB0aGF0IHdhcyB1c2VkIGZvciBjb21wcmVz c2lvbiBpcyBwcm92aWRlZC4KIAogICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpf T0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYQotICAgcGFyYW1ldGVyIGlzIGludmFs aWQgKHN1Y2ggYXMgTlVMTCBkaWN0aW9uYXJ5KSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCisgICBw YXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRo ZSBzdHJlYW0gc3RhdGUgaXMKICAgIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBn aXZlbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICBleHBlY3RlZCBvbmUgKGluY29y cmVjdCBhZGxlcjMyIHZhbHVlKS4gaW5mbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKKyAgIGV4 cGVjdGVkIG9uZSAoaW5jb3JyZWN0IEFkbGVyLTMyIHZhbHVlKS4gIGluZmxhdGVTZXREaWN0aW9u YXJ5IGRvZXMgbm90CiAgICBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUg ZG9uZSBieSBzdWJzZXF1ZW50IGNhbGxzIG9mCiAgICBpbmZsYXRlKCkuCiAqLwogCitaRVhURVJO IGludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVmICpkaWN0aW9u YXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAg KmRpY3RMZW5ndGgpKTsKKy8qCisgICAgIFJldHVybnMgdGhlIHNsaWRpbmcgZGljdGlvbmFyeSBi ZWluZyBtYWludGFpbmVkIGJ5IGluZmxhdGUuICBkaWN0TGVuZ3RoIGlzCisgICBzZXQgdG8gdGhl IG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGljdGlvbmFyeSwgYW5kIHRoYXQgbWFueSBieXRlcyBh cmUgY29waWVkCisgICB0byBkaWN0aW9uYXJ5LiAgZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdo IHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcworICAgYWx3YXlzIGVub3VnaC4gIElmIGluZmxh dGVHZXREaWN0aW9uYXJ5KCkgaXMgY2FsbGVkIHdpdGggZGljdGlvbmFyeSBlcXVhbCB0bworICAg Wl9OVUxMLCB0aGVuIG9ubHkgdGhlIGRpY3Rpb25hcnkgbGVuZ3RoIGlzIHJldHVybmVkLCBhbmQg bm90aGluZyBpcyBjb3BpZWQuCisgICBTaW1pbGFyeSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEws IHRoZW4gaXQgaXMgbm90IHNldC4KKworICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSByZXR1cm5z IFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3Rh dGUgaXMgaW5jb25zaXN0ZW50LgorKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU3lu YyBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCi0gICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2Vk IGRhdGEgdW50aWwgYSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUgdGhlCi0gIGRlc2NyaXB0 aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwg YWxsCi0gIGF2YWlsYWJsZSBpbnB1dCBpcyBza2lwcGVkLiBObyBvdXRwdXQgaXMgcHJvdmlkZWQu CisgICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgcG9zc2libGUgZnVs bCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlCisgICBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGRlZmxh dGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCisgICBhdmFp bGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gIE5vIG91dHB1dCBpcyBwcm92aWRlZC4KIAotICAgIGlu ZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91 bmQsIFpfQlVGX0VSUk9SCi0gIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFf RVJST1IgaWYgbm8gZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCi0gIG9yIFpfU1RSRUFNX0VS Uk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuIEluIHRoZSBzdWNj ZXNzCi0gIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCBjdXJyZW50 IHZhbHVlIG9mIHRvdGFsX2luIHdoaWNoCi0gIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVz c2VkIGRhdGEgd2FzIGZvdW5kLiBJbiB0aGUgZXJyb3IgY2FzZSwgdGhlCi0gIGFwcGxpY2F0aW9u IG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlIGlucHV0IGVh Y2ggdGltZSwKLSAgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCisgICAg IGluZmxhdGVTeW5jIHNlYXJjaGVzIGZvciBhIDAwIDAwIEZGIEZGIHBhdHRlcm4gaW4gdGhlIGNv bXByZXNzZWQgZGF0YS4KKyAgIEFsbCBmdWxsIGZsdXNoIHBvaW50cyBoYXZlIHRoaXMgcGF0dGVy biwgYnV0IG5vdCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcworICAgcGF0dGVybiBhcmUgZnVsbCBm bHVzaCBwb2ludHMuCisKKyAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgcG9zc2li bGUgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKKyAgIFpfQlVGX0VSUk9SIGlmIG5v IG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQK KyAgIGhhcyBiZWVuIGZvdW5kLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVj dHVyZSB3YXMgaW5jb25zaXN0ZW50LgorICAgSW4gdGhlIHN1Y2Nlc3MgY2FzZSwgdGhlIGFwcGxp Y2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YKKyAgIHRvdGFsX2lu IHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAg SW4gdGhlCisgICBlcnJvciBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2Fs bCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUKKyAgIGlucHV0IGVhY2ggdGltZSwgdW50aWwg c3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCiAqLwogCiBaRVhURVJOIGludCBaRVhQ T1JUIGluZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTcwNSwyMiArOTUwLDEyNSBA QAogCiAgICAgIGluZmxhdGVDb3B5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJP UiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0 aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50Ci0gICAoc3VjaCBhcyB6YWxs b2MgYmVpbmcgTlVMTCkuIG1zZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQK KyAgIChzdWNoIGFzIHphbGxvYyBiZWluZyBaX05VTEwpLiAgbXNnIGlzIGxlZnQgdW5jaGFuZ2Vk IGluIGJvdGggc291cmNlIGFuZAogICAgZGVzdGluYXRpb24uCiAqLwogCiBaRVhURVJOIGludCBa RVhQT1JUIGluZmxhdGVSZXNldCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCiAgICAgIFRoaXMg ZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBpbmZsYXRlRW5kIGZvbGxvd2VkIGJ5IGluZmxhdGVJ bml0LAotICAgYnV0IGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5h bCBkZWNvbXByZXNzaW9uIHN0YXRlLgotICAgVGhlIHN0cmVhbSB3aWxsIGtlZXAgYXR0cmlidXRl cyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IGluZmxhdGVJbml0Mi4KKyAgIGJ1dCBkb2VzIG5v dCBmcmVlIGFuZCByZWFsbG9jYXRlIHRoZSBpbnRlcm5hbCBkZWNvbXByZXNzaW9uIHN0YXRlLiAg VGhlCisgICBzdHJlYW0gd2lsbCBrZWVwIGF0dHJpYnV0ZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNl dCBieSBpbmZsYXRlSW5pdDIuCiAKLSAgICAgIGluZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYg c3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQotICAgc3RyZWFtIHN0YXRl IHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIE5VTEwpLgor ICAgICBpbmZsYXRlUmVzZXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VS Uk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChzdWNo IGFzIHphbGxvYyBvciBzdGF0ZSBiZWluZyBaX05VTEwpLgorKi8KKworWkVYVEVSTiBpbnQgWkVY UE9SVCBpbmZsYXRlUmVzZXQyIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHdpbmRvd0JpdHMpKTsKKy8qCisgICAgIFRoaXMgZnVu Y3Rpb24gaXMgdGhlIHNhbWUgYXMgaW5mbGF0ZVJlc2V0LCBidXQgaXQgYWxzbyBwZXJtaXRzIGNo YW5naW5nCisgICB0aGUgd3JhcCBhbmQgd2luZG93IHNpemUgcmVxdWVzdHMuICBUaGUgd2luZG93 Qml0cyBwYXJhbWV0ZXIgaXMgaW50ZXJwcmV0ZWQKKyAgIHRoZSBzYW1lIGFzIGl0IGlzIGZvciBp bmZsYXRlSW5pdDIuICBJZiB0aGUgd2luZG93IHNpemUgaXMgY2hhbmdlZCwgdGhlbiB0aGUKKyAg IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSB3aW5kb3cgaXMgZnJlZWQsIGFuZCB0aGUgd2luZG93 IHdpbGwgYmUgcmVhbGxvY2F0ZWQKKyAgIGJ5IGluZmxhdGUoKSBpZiBuZWVkZWQuCisKKyAgICAg aW5mbGF0ZVJlc2V0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1Ig aWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMg emFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCksIG9yIGlmCisgICB0aGUgd2luZG93Qml0cyBw YXJhbWV0ZXIgaXMgaW52YWxpZC4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVBy aW1lIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg dmFsdWUpKTsKKy8qCisgICAgIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBiaXRzIGluIHRoZSBpbmZs YXRlIGlucHV0IHN0cmVhbS4gIFRoZSBpbnRlbnQgaXMKKyAgIHRoYXQgdGhpcyBmdW5jdGlvbiBp cyB1c2VkIHRvIHN0YXJ0IGluZmxhdGluZyBhdCBhIGJpdCBwb3NpdGlvbiBpbiB0aGUKKyAgIG1p ZGRsZSBvZiBhIGJ5dGUuICBUaGUgcHJvdmlkZWQgYml0cyB3aWxsIGJlIHVzZWQgYmVmb3JlIGFu eSBieXRlcyBhcmUgdXNlZAorICAgZnJvbSBuZXh0X2luLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQg b25seSBiZSB1c2VkIHdpdGggcmF3IGluZmxhdGUsIGFuZAorICAgc2hvdWxkIGJlIHVzZWQgYmVm b3JlIHRoZSBmaXJzdCBpbmZsYXRlKCkgY2FsbCBhZnRlciBpbmZsYXRlSW5pdDIoKSBvcgorICAg aW5mbGF0ZVJlc2V0KCkuICBiaXRzIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDE2LCBh bmQgdGhhdCBtYW55IG9mIHRoZQorICAgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB2YWx1ZSB3 aWxsIGJlIGluc2VydGVkIGluIHRoZSBpbnB1dC4KKworICAgICBJZiBiaXRzIGlzIG5lZ2F0aXZl LCB0aGVuIHRoZSBpbnB1dCBzdHJlYW0gYml0IGJ1ZmZlciBpcyBlbXB0aWVkLiAgVGhlbgorICAg aW5mbGF0ZVByaW1lKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBwdXQgYml0cyBpbiB0aGUgYnVm ZmVyLiAgVGhpcyBpcyB1c2VkCisgICB0byBjbGVhciBvdXQgYml0cyBsZWZ0b3ZlciBhZnRlciBm ZWVkaW5nIGluZmxhdGUgYSBibG9jayBkZXNjcmlwdGlvbiBwcmlvcgorICAgdG8gZmVlZGluZyBp bmZsYXRlIGNvZGVzLgorCisgICAgIGluZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vz cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBp bmNvbnNpc3RlbnQuCisqLworCitaRVhURVJOIGxvbmcgWkVYUE9SVCBpbmZsYXRlTWFyayBPRigo el9zdHJlYW1wIHN0cm0pKTsKKy8qCisgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFs dWVzLCBvbmUgaW4gdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIHJldHVybgorICAgdmFsdWUsIGFu ZCB0aGUgb3RoZXIgaW4gdGhlIHJlbWFpbmluZyB1cHBlciBiaXRzLCBvYnRhaW5lZCBieSBzaGlm dGluZyB0aGUKKyAgIHJldHVybiB2YWx1ZSBkb3duIDE2IGJpdHMuICBJZiB0aGUgdXBwZXIgdmFs dWUgaXMgLTEgYW5kIHRoZSBsb3dlciB2YWx1ZSBpcworICAgemVybywgdGhlbiBpbmZsYXRlKCkg aXMgY3VycmVudGx5IGRlY29kaW5nIGluZm9ybWF0aW9uIG91dHNpZGUgb2YgYSBibG9jay4KKyAg IElmIHRoZSB1cHBlciB2YWx1ZSBpcyAtMSBhbmQgdGhlIGxvd2VyIHZhbHVlIGlzIG5vbi16ZXJv LCB0aGVuIGluZmxhdGUgaXMgaW4KKyAgIHRoZSBtaWRkbGUgb2YgYSBzdG9yZWQgYmxvY2ssIHdp dGggdGhlIGxvd2VyIHZhbHVlIGVxdWFsaW5nIHRoZSBudW1iZXIgb2YKKyAgIGJ5dGVzIGZyb20g dGhlIGlucHV0IHJlbWFpbmluZyB0byBjb3B5LiAgSWYgdGhlIHVwcGVyIHZhbHVlIGlzIG5vdCAt MSwgdGhlbgorICAgaXQgaXMgdGhlIG51bWJlciBvZiBiaXRzIGJhY2sgZnJvbSB0aGUgY3VycmVu dCBiaXQgcG9zaXRpb24gaW4gdGhlIGlucHV0IG9mCisgICB0aGUgY29kZSAobGl0ZXJhbCBvciBs ZW5ndGgvZGlzdGFuY2UgcGFpcikgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gIEluCisgICB0 aGF0IGNhc2UgdGhlIGxvd2VyIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxyZWFkeSBl bWl0dGVkIGZvciB0aGF0CisgICBjb2RlLgorCisgICAgIEEgY29kZSBpcyBiZWluZyBwcm9jZXNz ZWQgaWYgaW5mbGF0ZSBpcyB3YWl0aW5nIGZvciBtb3JlIGlucHV0IHRvIGNvbXBsZXRlCisgICBk ZWNvZGluZyBvZiB0aGUgY29kZSwgb3IgaWYgaXQgaGFzIGNvbXBsZXRlZCBkZWNvZGluZyBidXQg aXMgd2FpdGluZyBmb3IKKyAgIG1vcmUgb3V0cHV0IHNwYWNlIHRvIHdyaXRlIHRoZSBsaXRlcmFs IG9yIG1hdGNoIGRhdGEuCisKKyAgICAgaW5mbGF0ZU1hcmsoKSBpcyB1c2VkIHRvIG1hcmsgbG9j YXRpb25zIGluIHRoZSBpbnB1dCBkYXRhIGZvciByYW5kb20KKyAgIGFjY2Vzcywgd2hpY2ggbWF5 IGJlIGF0IGJpdCBwb3NpdGlvbnMsIGFuZCB0byBub3RlIHRob3NlIGNhc2VzIHdoZXJlIHRoZQor ICAgb3V0cHV0IG9mIGEgY29kZSBtYXkgc3BhbiBib3VuZGFyaWVzIG9mIHJhbmRvbSBhY2Nlc3Mg YmxvY2tzLiAgVGhlIGN1cnJlbnQKKyAgIGxvY2F0aW9uIGluIHRoZSBpbnB1dCBzdHJlYW0gY2Fu IGJlIGRldGVybWluZWQgZnJvbSBhdmFpbF9pbiBhbmQgZGF0YV90eXBlCisgICBhcyBub3RlZCBp biB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBaX0JMT0NLIGZsdXNoIHBhcmFtZXRlciBmb3IgaW5m bGF0ZS4KKworICAgICBpbmZsYXRlTWFyayByZXR1cm5zIHRoZSB2YWx1ZSBub3RlZCBhYm92ZSwg b3IgLTY1NTM2IGlmIHRoZSBwcm92aWRlZAorICAgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5j b25zaXN0ZW50LgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlR2V0SGVhZGVyIE9G KCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3pfaGVhZGVycCBoZWFkKSk7CisvKgorICAgICBpbmZsYXRlR2V0SGVhZGVyKCkgcmVxdWVz dHMgdGhhdCBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBiZSBzdG9yZWQgaW4gdGhlCisgICBwcm92 aWRlZCBnel9oZWFkZXIgc3RydWN0dXJlLiAgaW5mbGF0ZUdldEhlYWRlcigpIG1heSBiZSBjYWxs ZWQgYWZ0ZXIKKyAgIGluZmxhdGVJbml0MigpIG9yIGluZmxhdGVSZXNldCgpLCBhbmQgYmVmb3Jl IHRoZSBmaXJzdCBjYWxsIG9mIGluZmxhdGUoKS4KKyAgIEFzIGluZmxhdGUoKSBwcm9jZXNzZXMg dGhlIGd6aXAgc3RyZWFtLCBoZWFkLT5kb25lIGlzIHplcm8gdW50aWwgdGhlIGhlYWRlcgorICAg aXMgY29tcGxldGVkLCBhdCB3aGljaCB0aW1lIGhlYWQtPmRvbmUgaXMgc2V0IHRvIG9uZS4gIElm IGEgemxpYiBzdHJlYW0gaXMKKyAgIGJlaW5nIGRlY29kZWQsIHRoZW4gaGVhZC0+ZG9uZSBpcyBz ZXQgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3aWxsIGJlCisgICBubyBnemlwIGhlYWRl ciBpbmZvcm1hdGlvbiBmb3J0aGNvbWluZy4gIE5vdGUgdGhhdCBaX0JMT0NLIG9yIFpfVFJFRVMg Y2FuIGJlCisgICB1c2VkIHRvIGZvcmNlIGluZmxhdGUoKSB0byByZXR1cm4gaW1tZWRpYXRlbHkg YWZ0ZXIgaGVhZGVyIHByb2Nlc3NpbmcgaXMKKyAgIGNvbXBsZXRlIGFuZCBiZWZvcmUgYW55IGFj dHVhbCBkYXRhIGlzIGRlY29tcHJlc3NlZC4KKworICAgICBUaGUgdGV4dCwgdGltZSwgeGZsYWdz LCBhbmQgb3MgZmllbGRzIGFyZSBmaWxsZWQgaW4gd2l0aCB0aGUgZ3ppcCBoZWFkZXIKKyAgIGNv bnRlbnRzLiAgaGNyYyBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGVyZSBpcyBhIGhlYWRlciBDUkMuICAo VGhlIGhlYWRlciBDUkMKKyAgIHdhcyB2YWxpZCBpZiBkb25lIGlzIHNldCB0byBvbmUuKSBJZiBl eHRyYSBpcyBub3QgWl9OVUxMLCB0aGVuIGV4dHJhX21heAorICAgY29udGFpbnMgdGhlIG1heGlt dW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIHRvIGV4dHJhLiAgT25jZSBkb25lIGlzIHRydWUs CisgICBleHRyYV9sZW4gY29udGFpbnMgdGhlIGFjdHVhbCBleHRyYSBmaWVsZCBsZW5ndGgsIGFu ZCBleHRyYSBjb250YWlucyB0aGUKKyAgIGV4dHJhIGZpZWxkLCBvciB0aGF0IGZpZWxkIHRydW5j YXRlZCBpZiBleHRyYV9tYXggaXMgbGVzcyB0aGFuIGV4dHJhX2xlbi4KKyAgIElmIG5hbWUgaXMg bm90IFpfTlVMTCwgdGhlbiB1cCB0byBuYW1lX21heCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRo ZXJlLAorICAgdGVybWluYXRlZCB3aXRoIGEgemVybyB1bmxlc3MgdGhlIGxlbmd0aCBpcyBncmVh dGVyIHRoYW4gbmFtZV9tYXguICBJZgorICAgY29tbWVudCBpcyBub3QgWl9OVUxMLCB0aGVuIHVw IHRvIGNvbW1fbWF4IGNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gdGhlcmUsCisgICB0ZXJtaW5hdGVk IHdpdGggYSB6ZXJvIHVubGVzcyB0aGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBjb21tX21heC4g IFdoZW4gYW55CisgICBvZiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCBhcmUgbm90IFpfTlVMTCBh bmQgdGhlIHJlc3BlY3RpdmUgZmllbGQgaXMgbm90CisgICBwcmVzZW50IGluIHRoZSBoZWFkZXIs IHRoZW4gdGhhdCBmaWVsZCBpcyBzZXQgdG8gWl9OVUxMIHRvIHNpZ25hbCBpdHMKKyAgIGFic2Vu Y2UuICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIGRlZmxhdGVTZXRIZWFkZXIoKSB3aXRoIHRoZSBy ZXR1cm5lZAorICAgc3RydWN0dXJlIHRvIGR1cGxpY2F0ZSB0aGUgaGVhZGVyLiAgSG93ZXZlciBp ZiB0aG9zZSBmaWVsZHMgYXJlIHNldCB0bworICAgYWxsb2NhdGVkIG1lbW9yeSwgdGhlbiB0aGUg YXBwbGljYXRpb24gd2lsbCBuZWVkIHRvIHNhdmUgdGhvc2UgcG9pbnRlcnMKKyAgIGVsc2V3aGVy ZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGV2ZW50dWFsbHkgZnJlZWQuCisKKyAgICAgSWYgaW5mbGF0 ZUdldEhlYWRlciBpcyBub3QgdXNlZCwgdGhlbiB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIGlzIHNp bXBseQorICAgZGlzY2FyZGVkLiAgVGhlIGhlYWRlciBpcyBhbHdheXMgY2hlY2tlZCBmb3IgdmFs aWRpdHksIGluY2x1ZGluZyB0aGUgaGVhZGVyCisgICBDUkMgaWYgcHJlc2VudC4gIGluZmxhdGVS ZXNldCgpIHdpbGwgcmVzZXQgdGhlIHByb2Nlc3MgdG8gZGlzY2FyZCB0aGUgaGVhZGVyCisgICBp bmZvcm1hdGlvbi4gIFRoZSBhcHBsaWNhdGlvbiB3b3VsZCBuZWVkIHRvIGNhbGwgaW5mbGF0ZUdl dEhlYWRlcigpIGFnYWluIHRvCisgICByZXRyaWV2ZSB0aGUgaGVhZGVyIGZyb20gdGhlIG5leHQg Z3ppcCBzdHJlYW0uCisKKyAgICAgaW5mbGF0ZUdldEhlYWRlciByZXR1cm5zIFpfT0sgaWYgc3Vj Y2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdh cyBpbmNvbnNpc3RlbnQuCiAqLwogCiAvKgotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFj a0luaXQgT0YoKHpfc3RyZWFtIEZBUiAqc3RybSwgaW50IHdpbmRvd0JpdHMsCitaRVhURVJOIGlu dCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdCBPRigoel9zdHJlYW1wIHN0cm0sIGludCB3aW5kb3dC aXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgRkFSICp3aW5kb3cpKTsKIAogICAgICBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdHJlYW0g c3RhdGUgZm9yIGRlY29tcHJlc3Npb24gdXNpbmcgaW5mbGF0ZUJhY2soKQpAQCAtNzM2LDM4ICsx MDg0LDQwIEBACiAgICAgIFNlZSBpbmZsYXRlQmFjaygpIGZvciB0aGUgdXNhZ2Ugb2YgdGhlc2Ug cm91dGluZXMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0IHdpbGwgcmV0dXJuIFpfT0sgb24gc3Vj Y2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYW55IG9mCi0gICB0aGUgcGFyYW1hdGVycyBhcmUgaW52 YWxpZCwgWl9NRU1fRVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdAotICAgYmUg YWxsb2NhdGVkLCBvciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJh cnkgZG9lcyBub3QKLSAgIG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4KKyAg IHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwg c3RhdGUgY291bGQgbm90IGJlCisgICBhbGxvY2F0ZWQsIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0 aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2VzIG5vdCBtYXRjaAorICAgdGhlIHZlcnNpb24g b2YgdGhlIGhlYWRlciBmaWxlLgogKi8KIAotdHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9G KCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7Cit0eXBlZGVmIHVuc2ln bmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwogdHlwZWRlZiBpbnQg KCpvdXRfZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVk KSk7CiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2sgT0YoKHpfc3RyZWFtIEZBUiAq c3RybSwKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2sgT0YoKHpfc3RyZWFtcCBzdHJt LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fZnVuYyBpbiwgdm9pZCBG QVIgKmluX2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZnVu YyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOwogLyoKICAgICAgaW5mbGF0ZUJhY2soKSBkb2Vz IGEgcmF3IGluZmxhdGUgd2l0aCBhIHNpbmdsZSBjYWxsIHVzaW5nIGEgY2FsbC1iYWNrCi0gICBp bnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRo YW4gaW5mbGF0ZSgpIGZvcgotICAgZmlsZSBpL28gYXBwbGljYXRpb25zIGluIHRoYXQgaXQgYXZv aWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0aGUKLSAgIHNsaWRpbmcgd2luZG93 IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dCBidWZmZXIuICBU aGlzCi0gICBmdW5jdGlvbiB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhl IG91dHB1dCBidWZmZXIgcGFzc2VkIGJ5Ci0gICB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFz dCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCisgICBpbnRlcmZhY2UgZm9yIGlucHV0IGFu ZCBvdXRwdXQuICBUaGlzIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IHRoYW4KKyAgIGlu ZmxhdGUoKSBmb3IgZmlsZSBpL28gYXBwbGljYXRpb25zLCBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5 aW5nIGJldHdlZW4gdGhlCisgICBvdXRwdXQgYW5kIHRoZSBzbGlkaW5nIHdpbmRvdyBieSBzaW1w bHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci4gIGluZmxh dGUoKSBjYW4gYmUgZmFzdGVyIG9uIG1vZGVybiBDUFVzIHdoZW4gdXNlZCB3aXRoIGxhcmdlCisg ICBidWZmZXJzLiAgaW5mbGF0ZUJhY2soKSB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBj aGFuZ2UgdGhlIG91dHB1dAorICAgYnVmZmVyIHBhc3NlZCBieSB0aGUgb3V0cHV0IGZ1bmN0aW9u LCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCiAKICAgICAgaW5mbGF0ZUJh Y2tJbml0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0 YXRlCiAgICBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCB0aGUgdXNlci1wcm92aWRl ZCB3aW5kb3cgYnVmZmVyLgogICAgaW5mbGF0ZUJhY2soKSBtYXkgdGhlbiBiZSB1c2VkIG11bHRp cGxlIHRpbWVzIHRvIGluZmxhdGUgYSBjb21wbGV0ZSwgcmF3Ci0gICBkZWZsYXRlIHN0cmVhbSB3 aXRoIGVhY2ggY2FsbC4gIGluZmxhdGVCYWNrRW5kKCkgaXMgdGhlbiBjYWxsZWQgdG8gZnJlZQot ICAgdGhlIGFsbG9jYXRlZCBzdGF0ZS4KKyAgIGRlZmxhdGUgc3RyZWFtIHdpdGggZWFjaCBjYWxs LiAgaW5mbGF0ZUJhY2tFbmQoKSBpcyB0aGVuIGNhbGxlZCB0byBmcmVlIHRoZQorICAgYWxsb2Nh dGVkIHN0YXRlLgogCiAgICAgIEEgcmF3IGRlZmxhdGUgc3RyZWFtIGlzIG9uZSB3aXRoIG5vIHps aWIgb3IgZ3ppcCBoZWFkZXIgb3IgdHJhaWxlci4KICAgIFRoaXMgcm91dGluZSB3b3VsZCBub3Jt YWxseSBiZSB1c2VkIGluIGEgdXRpbGl0eSB0aGF0IHJlYWRzIHppcCBvciBnemlwCiAgICBmaWxl cyBhbmQgd3JpdGVzIG91dCB1bmNvbXByZXNzZWQgZmlsZXMuICBUaGUgdXRpbGl0eSB3b3VsZCBk ZWNvZGUgdGhlCi0gICBoZWFkZXIgYW5kIHByb2Nlc3MgdGhlIHRyYWlsZXIgb24gaXRzIG93biwg aGVuY2UgdGhpcyByb3V0aW5lIGV4cGVjdHMKLSAgIG9ubHkgdGhlIHJhdyBkZWZsYXRlIHN0cmVh bSB0byBkZWNvbXByZXNzLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKLSAgIG5vcm1hbCBi ZWhhdmlvciBvZiBpbmZsYXRlKCksIHdoaWNoIGV4cGVjdHMgZWl0aGVyIGEgemxpYiBvciBnemlw IGhlYWRlciBhbmQKLSAgIHRyYWlsZXIgYXJvdW5kIHRoZSBkZWZsYXRlIHN0cmVhbS4KKyAgIGhl YWRlciBhbmQgcHJvY2VzcyB0aGUgdHJhaWxlciBvbiBpdHMgb3duLCBoZW5jZSB0aGlzIHJvdXRp bmUgZXhwZWN0cyBvbmx5CisgICB0aGUgcmF3IGRlZmxhdGUgc3RyZWFtIHRvIGRlY29tcHJlc3Mu ICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0CisgICBiZWhhdmlvciBvZiBpbmZs YXRlKCksIHdoaWNoIGV4cGVjdHMgYSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBhcm91bmQgdGhl CisgICBkZWZsYXRlIHN0cmVhbS4KIAogICAgICBpbmZsYXRlQmFjaygpIHVzZXMgdHdvIHN1YnJv dXRpbmVzIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIgdGhhdCBhcmUgdGhlbgogICAgY2FsbGVkIGJ5 IGluZmxhdGVCYWNrKCkgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBpbmZsYXRlQmFjaygpIGNhbGxz IHRob3NlCkBAIC03NzYsMTIgKzExMjYsMTIgQEAKICAgIHBhcmFtZXRlcnMgYW5kIHJldHVybiB0 eXBlcyBhcmUgZGVmaW5lZCBhYm92ZSBpbiB0aGUgaW5fZnVuYyBhbmQgb3V0X2Z1bmMKICAgIHR5 cGVkZWZzLiAgaW5mbGF0ZUJhY2soKSB3aWxsIGNhbGwgaW4oaW5fZGVzYywgJmJ1Zikgd2hpY2gg c2hvdWxkIHJldHVybiB0aGUKICAgIG51bWJlciBvZiBieXRlcyBvZiBwcm92aWRlZCBpbnB1dCwg YW5kIGEgcG9pbnRlciB0byB0aGF0IGlucHV0IGluIGJ1Zi4gIElmCi0gICB0aGVyZSBpcyBubyBp bnB1dCBhdmFpbGFibGUsIGluKCkgbXVzdCByZXR1cm4gemVyby0tYnVmIGlzIGlnbm9yZWQgaW4g dGhhdAotICAgY2FzZS0tYW5kIGluZmxhdGVCYWNrKCkgd2lsbCByZXR1cm4gYSBidWZmZXIgZXJy b3IuICBpbmZsYXRlQmFjaygpIHdpbGwgY2FsbAotICAgb3V0KG91dF9kZXNjLCBidWYsIGxlbikg dG8gd3JpdGUgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGJ1ZlswLi5sZW4tMV0uICBvdXQoKQotICAg c2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIG5vbi16ZXJvIG9uIGZhaWx1cmUuICBJ ZiBvdXQoKSByZXR1cm5zCi0gICBub24temVybywgaW5mbGF0ZUJhY2soKSB3aWxsIHJldHVybiB3 aXRoIGFuIGVycm9yLiAgTmVpdGhlciBpbigpIG5vciBvdXQoKQotICAgYXJlIHBlcm1pdHRlZCB0 byBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aW5kb3cgcHJvdmlkZWQgdG8KKyAgIHRoZXJl IGlzIG5vIGlucHV0IGF2YWlsYWJsZSwgaW4oKSBtdXN0IHJldHVybiB6ZXJvIC0tIGJ1ZiBpcyBp Z25vcmVkIGluIHRoYXQKKyAgIGNhc2UgLS0gYW5kIGluZmxhdGVCYWNrKCkgd2lsbCByZXR1cm4g YSBidWZmZXIgZXJyb3IuICBpbmZsYXRlQmFjaygpIHdpbGwKKyAgIGNhbGwgb3V0KG91dF9kZXNj LCBidWYsIGxlbikgdG8gd3JpdGUgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGJ1ZlswLi5sZW4tMV0u CisgICBvdXQoKSBzaG91bGQgcmV0dXJuIHplcm8gb24gc3VjY2Vzcywgb3Igbm9uLXplcm8gb24g ZmFpbHVyZS4gIElmIG91dCgpCisgICByZXR1cm5zIG5vbi16ZXJvLCBpbmZsYXRlQmFjaygpIHdp bGwgcmV0dXJuIHdpdGggYW4gZXJyb3IuICBOZWl0aGVyIGluKCkgbm9yCisgICBvdXQoKSBhcmUg cGVybWl0dGVkIHRvIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIHdpbmRvdyBwcm92aWRlZCB0 bwogICAgaW5mbGF0ZUJhY2tJbml0KCksIHdoaWNoIGlzIGFsc28gdGhlIGJ1ZmZlciB0aGF0IG91 dCgpIHVzZXMgdG8gd3JpdGUgZnJvbS4KICAgIFRoZSBsZW5ndGggd3JpdHRlbiBieSBvdXQoKSB3 aWxsIGJlIGF0IG1vc3QgdGhlIHdpbmRvdyBzaXplLiAgQW55IG5vbi16ZXJvCiAgICBhbW91bnQg b2YgaW5wdXQgbWF5IGJlIHByb3ZpZGVkIGJ5IGluKCkuCkBAIC03OTIsNyArMTE0Miw3IEBACiAg ICBjYWxsaW5nIGluZmxhdGVCYWNrKCkuICBJZiBzdHJtLT5uZXh0X2luIGlzIFpfTlVMTCwgdGhl biBpbigpIHdpbGwgYmUgY2FsbGVkCiAgICBpbW1lZGlhdGVseSBmb3IgaW5wdXQuICBJZiBzdHJt LT5uZXh0X2luIGlzIG5vdCBaX05VTEwsIHRoZW4gc3RybS0+YXZhaWxfaW4KICAgIG11c3QgYWxz byBiZSBpbml0aWFsaXplZCwgYW5kIHRoZW4gaWYgc3RybS0+YXZhaWxfaW4gaXMgbm90IHplcm8s IGlucHV0IHdpbGwKLSAgIGluaXRpYWxseSBiZSB0YWtlbiBmcm9tIHN0cm0tPm5leHRfaW5bMCAu LiBzdHJtLT5hdmFpbF9pbiAtIDFdLgorICAgaW5pdGlhbGx5IGJlIHRha2VuIGZyb20gc3RybS0+ bmV4dF9pblswIC4uICBzdHJtLT5hdmFpbF9pbiAtIDFdLgogCiAgICAgIFRoZSBpbl9kZXNjIGFu ZCBvdXRfZGVzYyBwYXJhbWV0ZXJzIG9mIGluZmxhdGVCYWNrKCkgaXMgcGFzc2VkIGFzIHRoZQog ICAgZmlyc3QgcGFyYW1ldGVyIG9mIGluKCkgYW5kIG91dCgpIHJlc3BlY3RpdmVseSB3aGVuIHRo ZXkgYXJlIGNhbGxlZC4gIFRoZXNlCkBAIC04MDIsMTggKzExNTIsMTggQEAKICAgICAgT24gcmV0 dXJuLCBpbmZsYXRlQmFjaygpIHdpbGwgc2V0IHN0cm0tPm5leHRfaW4gYW5kIHN0cm0tPmF2YWls X2luIHRvCiAgICBwYXNzIGJhY2sgYW55IHVudXNlZCBpbnB1dCB0aGF0IHdhcyBwcm92aWRlZCBi eSB0aGUgbGFzdCBpbigpIGNhbGwuICBUaGUKICAgIHJldHVybiB2YWx1ZXMgb2YgaW5mbGF0ZUJh Y2soKSBjYW4gYmUgWl9TVFJFQU1fRU5EIG9uIHN1Y2Nlc3MsIFpfQlVGX0VSUk9SCi0gICBpZiBp bigpIG9yIG91dCgpIHJldHVybmVkIGFuIGVycm9yLCBaX0RBVEFfRVJST1IgaWYgdGhlcmUgd2Fz IGEgZm9ybWF0Ci0gICBlcnJvciBpbiB0aGUgZGVmbGF0ZSBzdHJlYW0gKGluIHdoaWNoIGNhc2Ug c3RybS0+bXNnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGUKLSAgIG5hdHVyZSBvZiB0aGUgZXJyb3Ip LCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBub3QgcHJvcGVybHkKLSAgIGlu aXRpYWxpemVkLiAgSW4gdGhlIGNhc2Ugb2YgWl9CVUZfRVJST1IsIGFuIGlucHV0IG9yIG91dHB1 dCBlcnJvciBjYW4gYmUKLSAgIGRpc3Rpbmd1aXNoZWQgdXNpbmcgc3RybS0+bmV4dF9pbiB3aGlj aCB3aWxsIGJlIFpfTlVMTCBvbmx5IGlmIGluKCkgcmV0dXJuZWQKLSAgIGFuIGVycm9yLiAgSWYg c3RybS0+bmV4dCBpcyBub3QgWl9OVUxMLCB0aGVuIHRoZSBaX0JVRl9FUlJPUiB3YXMgZHVlIHRv Ci0gICBvdXQoKSByZXR1cm5pbmcgbm9uLXplcm8uICAoaW4oKSB3aWxsIGFsd2F5cyBiZSBjYWxs ZWQgYmVmb3JlIG91dCgpLCBzbwotICAgc3RybS0+bmV4dF9pbiBpcyBhc3N1cmVkIHRvIGJlIGRl ZmluZWQgaWYgb3V0KCkgcmV0dXJucyBub24temVyby4pICBOb3RlCi0gICB0aGF0IGluZmxhdGVC YWNrKCkgY2Fubm90IHJldHVybiBaX09LLgorICAgaWYgaW4oKSBvciBvdXQoKSByZXR1cm5lZCBh biBlcnJvciwgWl9EQVRBX0VSUk9SIGlmIHRoZXJlIHdhcyBhIGZvcm1hdCBlcnJvcgorICAgaW4g dGhlIGRlZmxhdGUgc3RyZWFtIChpbiB3aGljaCBjYXNlIHN0cm0tPm1zZyBpcyBzZXQgdG8gaW5k aWNhdGUgdGhlIG5hdHVyZQorICAgb2YgdGhlIGVycm9yKSwgb3IgWl9TVFJFQU1fRVJST1IgaWYg dGhlIHN0cmVhbSB3YXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkLgorICAgSW4gdGhlIGNhc2Ug b2YgWl9CVUZfRVJST1IsIGFuIGlucHV0IG9yIG91dHB1dCBlcnJvciBjYW4gYmUgZGlzdGluZ3Vp c2hlZAorICAgdXNpbmcgc3RybS0+bmV4dF9pbiB3aGljaCB3aWxsIGJlIFpfTlVMTCBvbmx5IGlm IGluKCkgcmV0dXJuZWQgYW4gZXJyb3IuICBJZgorICAgc3RybS0+bmV4dF9pbiBpcyBub3QgWl9O VUxMLCB0aGVuIHRoZSBaX0JVRl9FUlJPUiB3YXMgZHVlIHRvIG91dCgpIHJldHVybmluZworICAg bm9uLXplcm8uICAoaW4oKSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIG91dCgpLCBzbyBz dHJtLT5uZXh0X2luIGlzCisgICBhc3N1cmVkIHRvIGJlIGRlZmluZWQgaWYgb3V0KCkgcmV0dXJu cyBub24temVyby4pICBOb3RlIHRoYXQgaW5mbGF0ZUJhY2soKQorICAgY2Fubm90IHJldHVybiBa X09LLgogKi8KIAotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0VuZCBPRigoel9zdHJl YW0gRkFSICpzdHJtKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrRW5kIE9GKCh6 X3N0cmVhbXAgc3RybSkpOwogLyoKICAgICAgQWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgaW5mbGF0 ZUJhY2tJbml0KCkgaXMgZnJlZWQuCiAKQEAgLTgzMSw3ICsxMTgxLDcgQEAKICAgICAgNy42OiBz aXplIG9mIHpfb2ZmX3QKIAogICAgIENvbXBpbGVyLCBhc3NlbWJsZXIsIGFuZCBkZWJ1ZyBvcHRp b25zOgotICAgICA4OiBERUJVRworICAgICA4OiBaTElCX0RFQlVHCiAgICAgIDk6IEFTTVYgb3Ig QVNNSU5GIC0tIHVzZSBBU00gY29kZQogICAgICAxMDogWkxJQl9XSU5BUEkgLS0gZXhwb3J0ZWQg ZnVuY3Rpb25zIHVzZSB0aGUgV0lOQVBJIGNhbGxpbmcgY29udmVudGlvbgogICAgICAxMTogMCAo cmVzZXJ2ZWQpCkBAIC04NjIsMjcgKzEyMTIsMjggQEAKICAgICAgMjctMzE6IDAgKHJlc2VydmVk KQogICovCiAKKyNpZm5kZWYgWl9TT0xPCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0 aWxpdHkgZnVuY3Rpb25zICovCiAKIC8qCi0gICAgIFRoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5j dGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUKLSAgIGJhc2ljIHN0cmVhbS1vcmll bnRlZCBmdW5jdGlvbnMuIFRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UsIHNvbWUKLSAgIGRlZmF1 bHQgb3B0aW9ucyBhcmUgYXNzdW1lZCAoY29tcHJlc3Npb24gbGV2ZWwgYW5kIG1lbW9yeSB1c2Fn ZSwKLSAgIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucykuIFRoZSBzb3VyY2Ug Y29kZSBvZiB0aGVzZQotICAgdXRpbGl0eSBmdW5jdGlvbnMgY2FuIGVhc2lseSBiZSBtb2RpZmll ZCBpZiB5b3UgbmVlZCBzcGVjaWFsIG9wdGlvbnMuCisgICAgIFRoZSBmb2xsb3dpbmcgdXRpbGl0 eSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUgYmFzaWMKKyAgIHN0cmVh bS1vcmllbnRlZCBmdW5jdGlvbnMuICBUbyBzaW1wbGlmeSB0aGUgaW50ZXJmYWNlLCBzb21lIGRl ZmF1bHQgb3B0aW9ucworICAgYXJlIGFzc3VtZWQgKGNvbXByZXNzaW9uIGxldmVsIGFuZCBtZW1v cnkgdXNhZ2UsIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uCisgICBmdW5jdGlvbnMpLiAgVGhl IHNvdXJjZSBjb2RlIG9mIHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIGNhbiBiZSBtb2RpZmllZCBp ZgorICAgeW91IG5lZWQgc3BlY2lhbCBvcHRpb25zLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9S VCBjb21wcmVzcyBPRigoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNl TGVuKSk7CiAvKgogICAgICBDb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRl c3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcwotICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRo ZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbAotICAgc2l6 ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2 YWx1ZSByZXR1cm5lZAotICAgYnkgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiBVcG9uIGV4aXQs IGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZQotICAgY29tcHJlc3NlZCBidWZmZXIu Ci0gICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29tcHJlc3MgYSB3aG9sZSBmaWxl IGF0IG9uY2UgaWYgdGhlCi0gICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuCisgICB0aGUgYnl0ZSBs ZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0 b3RhbCBzaXplCisgICBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0 IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4p LiAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgIGNvbXBy ZXNzZWQgZGF0YS4gIGNvbXByZXNzKCkgaXMgZXF1aXZhbGVudCB0byBjb21wcmVzczIoKSB3aXRo IGEgbGV2ZWwKKyAgIHBhcmFtZXRlciBvZiBaX0RFRkFVTFRfQ09NUFJFU1NJT04uCisKICAgICAg Y29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdh cyBub3QKICAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5v dWdoIHJvb20gaW4gdGhlIG91dHB1dAogICAgYnVmZmVyLgpAQCAtODkyLDEyICsxMjQzLDEyIEBA CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwg dUxvbmcgc291cmNlTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs ZXZlbCkpOwogLyoKLSAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBk ZXN0aW5hdGlvbiBidWZmZXIuIFRoZSBsZXZlbAorICAgICBDb21wcmVzc2VzIHRoZSBzb3VyY2Ug YnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIFRoZSBsZXZlbAogICAgcGFyYW1l dGVyIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIGRlZmxhdGVJbml0LiAgc291cmNlTGVuIGlz IHRoZSBieXRlCi0gICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuIFVwb24gZW50cnksIGRl c3RMZW4gaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlCisgICBsZW5ndGggb2YgdGhlIHNvdXJjZSBi dWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQogICAg ZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1 cm5lZCBieQotICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiBVcG9uIGV4aXQsIGRlc3RMZW4g aXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZQotICAgY29tcHJlc3NlZCBidWZmZXIuCisgICBjb21w cmVzc0JvdW5kKHNvdXJjZUxlbikuICBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBz aXplIG9mIHRoZQorICAgY29tcHJlc3NlZCBkYXRhLgogCiAgICAgIGNvbXByZXNzMiByZXR1cm5z IFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKICAg IG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUg b3V0cHV0IGJ1ZmZlciwKQEAgLTkwNywxNTkgKzEyNTgsMzA2IEBACiBaRVhURVJOIHVMb25nIFpF WFBPUlQgY29tcHJlc3NCb3VuZCBPRigodUxvbmcgc291cmNlTGVuKSk7CiAvKgogICAgICBjb21w cmVzc0JvdW5kKCkgcmV0dXJucyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29tcHJlc3NlZCBzaXpl IGFmdGVyCi0gICBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIG9uIHNvdXJjZUxlbiBieXRlcy4g IEl0IHdvdWxkIGJlIHVzZWQgYmVmb3JlCi0gICBhIGNvbXByZXNzKCkgb3IgY29tcHJlc3MyKCkg Y2FsbCB0byBhbGxvY2F0ZSB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICAgY29tcHJlc3MoKSBv ciBjb21wcmVzczIoKSBvbiBzb3VyY2VMZW4gYnl0ZXMuICBJdCB3b3VsZCBiZSB1c2VkIGJlZm9y ZSBhCisgICBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIGNhbGwgdG8gYWxsb2NhdGUgdGhlIGRl c3RpbmF0aW9uIGJ1ZmZlci4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgdW5jb21wcmVzcyBP RigoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pKTsKIC8q CiAgICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlv biBidWZmZXIuICBzb3VyY2VMZW4gaXMKLSAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNl IGJ1ZmZlci4gVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwKLSAgIHNpemUgb2YgdGhl IGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0 aGUKLSAgIGVudGlyZSB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXBy ZXNzZWQgZGF0YSBtdXN0IGhhdmUKLSAgIGJlZW4gc2F2ZWQgcHJldmlvdXNseSBieSB0aGUgY29t cHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvcgotICAgYnkgc29tZSBt ZWNoYW5pc20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikK LSAgIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNvbXByZXNz ZWQgYnVmZmVyLgotICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRlY29tcHJlc3Mg YSB3aG9sZSBmaWxlIGF0IG9uY2UgaWYgdGhlCi0gICBpbnB1dCBmaWxlIGlzIG1tYXAnZWQuCisg ICB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0 TGVuIGlzIHRoZSB0b3RhbCBzaXplCisgICBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGlj aCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUKKyAgIHVuY29tcHJlc3Nl ZCBkYXRhLiAgKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGhhdmUgYmVl biBzYXZlZAorICAgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQg dG8gdGhlIGRlY29tcHJlc3NvciBieSBzb21lCisgICBtZWNoYW5pc20gb3V0c2lkZSB0aGUgc2Nv cGUgb2YgdGhpcyBjb21wcmVzc2lvbiBsaWJyYXJ5LikgVXBvbiBleGl0LCBkZXN0TGVuCisgICBp cyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgogCiAgICAgIHVuY29t cHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBu b3QKICAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdo IHJvb20gaW4gdGhlIG91dHB1dAotICAgYnVmZmVyLCBvciBaX0RBVEFfRVJST1IgaWYgdGhlIGlu cHV0IGRhdGEgd2FzIGNvcnJ1cHRlZCBvciBpbmNvbXBsZXRlLgorICAgYnVmZmVyLCBvciBaX0RB VEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZCBvciBpbmNvbXBsZXRlLiAg SW4KKyAgIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgdW5jb21wcmVz cygpIHdpbGwgZmlsbCB0aGUgb3V0cHV0CisgICBidWZmZXIgd2l0aCB0aGUgdW5jb21wcmVzc2Vk IGRhdGEgdXAgdG8gdGhhdCBwb2ludC4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgdW5jb21w cmVzczIgT0YoKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nICpzb3VyY2VM ZW4pKTsKKy8qCisgICAgIFNhbWUgYXMgdW5jb21wcmVzcywgZXhjZXB0IHRoYXQgc291cmNlTGVu IGlzIGEgcG9pbnRlciwgd2hlcmUgdGhlCisgICBsZW5ndGggb2YgdGhlIHNvdXJjZSBpcyAqc291 cmNlTGVuLiAgT24gcmV0dXJuLCAqc291cmNlTGVuIGlzIHRoZSBudW1iZXIgb2YKKyAgIHNvdXJj ZSBieXRlcyBjb25zdW1lZC4KKyovCiAKLXR5cGVkZWYgdm9pZHAgZ3pGaWxlOworICAgICAgICAg ICAgICAgICAgICAgICAgLyogZ3ppcCBmaWxlIGFjY2VzcyBmdW5jdGlvbnMgKi8KIAotWkVYVEVS TiBnekZpbGUgWkVYUE9SVCBnem9wZW4gIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFy ICptb2RlKSk7CiAvKgotICAgICBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBv ciB3cml0aW5nLiBUaGUgbW9kZSBwYXJhbWV0ZXIKLSAgIGlzIGFzIGluIGZvcGVuICgicmIiIG9y ICJ3YiIpIGJ1dCBjYW4gYWxzbyBpbmNsdWRlIGEgY29tcHJlc3Npb24gbGV2ZWwKLSAgICgid2I5 Iikgb3IgYSBzdHJhdGVneTogJ2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gn IGZvcgotICAgSHVmZm1hbiBvbmx5IGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIiwgb3IgJ1InIGZv ciBydW4tbGVuZ3RoIGVuY29kaW5nCi0gICBhcyBpbiAid2IxUiIuIChTZWUgdGhlIGRlc2NyaXB0 aW9uIG9mIGRlZmxhdGVJbml0MiBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICAgYWJvdXQgdGhlIHN0 cmF0ZWd5IHBhcmFtZXRlci4pCisgICAgIFRoaXMgbGlicmFyeSBzdXBwb3J0cyByZWFkaW5nIGFu ZCB3cml0aW5nIGZpbGVzIGluIGd6aXAgKC5neikgZm9ybWF0IHdpdGgKKyAgIGFuIGludGVyZmFj ZSBzaW1pbGFyIHRvIHRoYXQgb2Ygc3RkaW8sIHVzaW5nIHRoZSBmdW5jdGlvbnMgdGhhdCBzdGFy dCB3aXRoCisgICAiZ3oiLiAgVGhlIGd6aXAgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB6 bGliIGZvcm1hdC4gIGd6aXAgaXMgYSBnemlwCisgICB3cmFwcGVyLCBkb2N1bWVudGVkIGluIFJG QyAxOTUyLCB3cmFwcGVkIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLgorKi8KKwordHlwZWRlZiBz dHJ1Y3QgZ3pGaWxlX3MgKmd6RmlsZTsgICAgLyogc2VtaS1vcGFxdWUgZ3ppcCBmaWxlIGRlc2Ny aXB0b3IgKi8KKworLyoKK1pFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIE9GKChjb25zdCBj aGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKSk7CisKKyAgICAgT3BlbnMgYSBnemlwICguZ3op IGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBhcwor ICAgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikgYnV0IGNhbiBhbHNvIGluY2x1ZGUgYSBjb21wcmVz c2lvbiBsZXZlbCAoIndiOSIpIG9yCisgICBhIHN0cmF0ZWd5OiAnZicgZm9yIGZpbHRlcmVkIGRh dGEgYXMgaW4gIndiNmYiLCAnaCcgZm9yIEh1ZmZtYW4tb25seQorICAgY29tcHJlc3Npb24gYXMg aW4gIndiMWgiLCAnUicgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcgYXMgaW4gIndiMVIiLCBvciAn RicKKyAgIGZvciBmaXhlZCBjb2RlIGNvbXByZXNzaW9uIGFzIGluICJ3YjlGIi4gIChTZWUgdGhl IGRlc2NyaXB0aW9uIG9mCisgICBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJv dXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pICAnVCcgd2lsbAorICAgcmVxdWVzdCB0cmFuc3Bh cmVudCB3cml0aW5nIG9yIGFwcGVuZGluZyB3aXRoIG5vIGNvbXByZXNzaW9uIGFuZCBub3QgdXNp bmcKKyAgIHRoZSBnemlwIGZvcm1hdC4KKworICAgICAiYSIgY2FuIGJlIHVzZWQgaW5zdGVhZCBv ZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwKKyAgIGJlIHdy aXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJy b3IsIHNpbmNlCisgICByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBp cyBub3Qgc3VwcG9ydGVkLiAgVGhlIGFkZGl0aW9uIG9mCisgICAieCIgd2hlbiB3cml0aW5nIHdp bGwgY3JlYXRlIHRoZSBmaWxlIGV4Y2x1c2l2ZWx5LCB3aGljaCBmYWlscyBpZiB0aGUgZmlsZQor ICAgYWxyZWFkeSBleGlzdHMuICBPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgdGhlIGFkZGl0 aW9uIG9mICJlIiB3aGVuCisgICByZWFkaW5nIG9yIHdyaXRpbmcgd2lsbCBzZXQgdGhlIGZsYWcg dG8gY2xvc2UgdGhlIGZpbGUgb24gYW4gZXhlY3ZlKCkgY2FsbC4KKworICAgICBUaGVzZSBmdW5j dGlvbnMsIGFzIHdlbGwgYXMgZ3ppcCwgd2lsbCByZWFkIGFuZCBkZWNvZGUgYSBzZXF1ZW5jZSBv ZiBnemlwCisgICBzdHJlYW1zIGluIGEgZmlsZS4gIFRoZSBhcHBlbmQgZnVuY3Rpb24gb2YgZ3pv cGVuKCkgY2FuIGJlIHVzZWQgdG8gY3JlYXRlCisgICBzdWNoIGEgZmlsZS4gIChBbHNvIHNlZSBn emZsdXNoKCkgZm9yIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMuKSAgV2hlbgorICAgYXBwZW5kaW5n LCBnem9wZW4gZG9lcyBub3QgdGVzdCB3aGV0aGVyIHRoZSBmaWxlIGJlZ2lucyB3aXRoIGEgZ3pp cCBzdHJlYW0sCisgICBub3IgZG9lcyBpdCBsb29rIGZvciB0aGUgZW5kIG9mIHRoZSBnemlwIHN0 cmVhbXMgdG8gYmVnaW4gYXBwZW5kaW5nLiAgZ3pvcGVuCisgICB3aWxsIHNpbXBseSBhcHBlbmQg YSBnemlwIHN0cmVhbSB0byB0aGUgZXhpc3RpbmcgZmlsZS4KIAogICAgICBnem9wZW4gY2FuIGJl IHVzZWQgdG8gcmVhZCBhIGZpbGUgd2hpY2ggaXMgbm90IGluIGd6aXAgZm9ybWF0OyBpbiB0aGlz Ci0gICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0 IGRlY29tcHJlc3Npb24uCisgICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0 aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBXaGVuCisgICByZWFkaW5nLCB0aGlzIHdp bGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSBieSBsb29raW5nIGZvciB0aGUgbWFnaWMgdHdv LQorICAgYnl0ZSBnemlwIGhlYWRlci4KIAotICAgICBnem9wZW4gcmV0dXJucyBOVUxMIGlmIHRo ZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3IgaWYgdGhlcmUgd2FzCi0gICBpbnN1ZmZpY2ll bnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGU7IGVycm5vCi0g ICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNhc2VzIChpZiBlcnJubyBp cyB6ZXJvLCB0aGUKLSAgIHpsaWIgZXJyb3IgaXMgWl9NRU1fRVJST1IpLiAgKi8KKyAgICAgZ3pv cGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBpZiB0aGVy ZSB3YXMKKyAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGd6RmlsZSBzdGF0 ZSwgb3IgaWYgYW4gaW52YWxpZCBtb2RlIHdhcworICAgc3BlY2lmaWVkIChhbiAncicsICd3Jywg b3IgJ2EnIHdhcyBub3QgcHJvdmlkZWQsIG9yICcrJyB3YXMgcHJvdmlkZWQpLgorICAgZXJybm8g Y2FuIGJlIGNoZWNrZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWFzb24gZ3pvcGVuIGZhaWxlZCB3 YXMgdGhhdCB0aGUKKyAgIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZC4KKyovCiAKLVpFWFRFUk4g Z3pGaWxlIFpFWFBPUlQgZ3pkb3BlbiAgT0YoKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkpOwor WkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnemRvcGVuIE9GKChpbnQgZmQsIGNvbnN0IGNoYXIgKm1v ZGUpKTsKIC8qCi0gICAgIGd6ZG9wZW4oKSBhc3NvY2lhdGVzIGEgZ3pGaWxlIHdpdGggdGhlIGZp bGUgZGVzY3JpcHRvciBmZC4gIEZpbGUKLSAgIGRlc2NyaXB0b3JzIGFyZSBvYnRhaW5lZCBmcm9t IGNhbGxzIGxpa2Ugb3BlbiwgZHVwLCBjcmVhdCwgcGlwZSBvcgotICAgZmlsZW5vIChpbiB0aGUg ZmlsZSBoYXMgYmVlbiBwcmV2aW91c2x5IG9wZW5lZCB3aXRoIGZvcGVuKS4KLSAgIFRoZSBtb2Rl IHBhcmFtZXRlciBpcyBhcyBpbiBnem9wZW4uCi0gICAgIFRoZSBuZXh0IGNhbGwgb2YgZ3pjbG9z ZSBvbiB0aGUgcmV0dXJuZWQgZ3pGaWxlIHdpbGwgYWxzbyBjbG9zZSB0aGUKLSAgIGZpbGUgZGVz Y3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQpLCBtb2RlKSBjbG9zZXMgdGhl IGZpbGUKLSAgIGRlc2NyaXB0b3IgZmQuIElmIHlvdSB3YW50IHRvIGtlZXAgZmQgb3BlbiwgdXNl IGd6ZG9wZW4oZHVwKGZkKSwgbW9kZSkuCi0gICAgIGd6ZG9wZW4gcmV0dXJucyBOVUxMIGlmIHRo ZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlCi0gICB0aGUgKGRlKWNvbXBy ZXNzaW9uIHN0YXRlLgorICAgICBnemRvcGVuIGFzc29jaWF0ZXMgYSBnekZpbGUgd2l0aCB0aGUg ZmlsZSBkZXNjcmlwdG9yIGZkLiAgRmlsZSBkZXNjcmlwdG9ycworICAgYXJlIG9idGFpbmVkIGZy b20gY2FsbHMgbGlrZSBvcGVuLCBkdXAsIGNyZWF0LCBwaXBlIG9yIGZpbGVubyAoaWYgdGhlIGZp bGUKKyAgIGhhcyBiZWVuIHByZXZpb3VzbHkgb3BlbmVkIHdpdGggZm9wZW4pLiAgVGhlIG1vZGUg cGFyYW1ldGVyIGlzIGFzIGluIGd6b3Blbi4KKworICAgICBUaGUgbmV4dCBjYWxsIG9mIGd6Y2xv c2Ugb24gdGhlIHJldHVybmVkIGd6RmlsZSB3aWxsIGFsc28gY2xvc2UgdGhlIGZpbGUKKyAgIGRl c2NyaXB0b3IgZmQsIGp1c3QgbGlrZSBmY2xvc2UoZmRvcGVuKGZkLCBtb2RlKSkgY2xvc2VzIHRo ZSBmaWxlIGRlc2NyaXB0b3IKKyAgIGZkLiAgSWYgeW91IHdhbnQgdG8ga2VlcCBmZCBvcGVuLCB1 c2UgZmQgPSBkdXAoZmRfa2VlcCk7IGd6ID0gZ3pkb3BlbihmZCwKKyAgIG1vZGUpOy4gIFRoZSBk dXBsaWNhdGVkIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHNhdmVkIHRvIGF2b2lkIGEgbGVhaywgc2lu Y2UKKyAgIGd6ZG9wZW4gZG9lcyBub3QgY2xvc2UgZmQgaWYgaXQgZmFpbHMuICBJZiB5b3UgYXJl IHVzaW5nIGZpbGVubygpIHRvIGdldCB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgRklM RSAqLCB0aGVuIHlvdSB3aWxsIGhhdmUgdG8gdXNlIGR1cCgpIHRvIGF2b2lkCisgICBkb3VibGUt Y2xvc2UoKWluZyB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgQm90aCBnemNsb3NlKCkgYW5kIGZjbG9z ZSgpIHdpbGwKKyAgIGNsb3NlIHRoZSBhc3NvY2lhdGVkIGZpbGUgZGVzY3JpcHRvciwgc28gdGhl eSBuZWVkIHRvIGhhdmUgZGlmZmVyZW50IGZpbGUKKyAgIGRlc2NyaXB0b3JzLgorCisgICAgIGd6 ZG9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFs bG9jYXRlIHRoZQorICAgZ3pGaWxlIHN0YXRlLCBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzIHNwZWNp ZmllZCAoYW4gJ3InLCAndycsIG9yICdhJyB3YXMgbm90CisgICBwcm92aWRlZCwgb3IgJysnIHdh cyBwcm92aWRlZCksIG9yIGlmIGZkIGlzIC0xLiAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBub3QK KyAgIHVzZWQgdW50aWwgdGhlIG5leHQgZ3oqIHJlYWQsIHdyaXRlLCBzZWVrLCBvciBjbG9zZSBv cGVyYXRpb24sIHNvIGd6ZG9wZW4KKyAgIHdpbGwgbm90IGRldGVjdCBpZiBmZCBpcyBpbnZhbGlk ICh1bmxlc3MgZmQgaXMgLTEpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemJ1ZmZlciBP RigoZ3pGaWxlIGZpbGUsIHVuc2lnbmVkIHNpemUpKTsKKy8qCisgICAgIFNldCB0aGUgaW50ZXJu YWwgYnVmZmVyIHNpemUgdXNlZCBieSB0aGlzIGxpYnJhcnkncyBmdW5jdGlvbnMuICBUaGUKKyAg IGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgODE5MiBieXRlcy4gIFRoaXMgZnVuY3Rpb24gbXVzdCBi ZSBjYWxsZWQgYWZ0ZXIKKyAgIGd6b3BlbigpIG9yIGd6ZG9wZW4oKSwgYW5kIGJlZm9yZSBhbnkg b3RoZXIgY2FsbHMgdGhhdCByZWFkIG9yIHdyaXRlIHRoZQorICAgZmlsZS4gIFRoZSBidWZmZXIg bWVtb3J5IGFsbG9jYXRpb24gaXMgYWx3YXlzIGRlZmVycmVkIHRvIHRoZSBmaXJzdCByZWFkIG9y CisgICB3cml0ZS4gIFRocmVlIHRpbWVzIHRoYXQgc2l6ZSBpbiBidWZmZXIgc3BhY2UgaXMgYWxs b2NhdGVkLiAgQSBsYXJnZXIgYnVmZmVyCisgICBzaXplIG9mLCBmb3IgZXhhbXBsZSwgNjRLIG9y IDEyOEsgYnl0ZXMgd2lsbCBub3RpY2VhYmx5IGluY3JlYXNlIHRoZSBzcGVlZAorICAgb2YgZGVj b21wcmVzc2lvbiAocmVhZGluZykuCisKKyAgICAgVGhlIG5ldyBidWZmZXIgc2l6ZSBhbHNvIGFm ZmVjdHMgdGhlIG1heGltdW0gbGVuZ3RoIGZvciBnenByaW50ZigpLgorCisgICAgIGd6YnVmZmVy KCkgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUsIHN1Y2ggYXMgYmVpbmcg Y2FsbGVkCisgICB0b28gbGF0ZS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pzZXRwYXJh bXMgT0YoKGd6RmlsZSBmaWxlLCBpbnQgbGV2ZWwsIGludCBzdHJhdGVneSkpOwogLyoKLSAgICAg RHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvciBzdHJhdGVneS4gU2Vl IHRoZSBkZXNjcmlwdGlvbgotICAgb2YgZGVmbGF0ZUluaXQyIGZvciB0aGUgbWVhbmluZyBvZiB0 aGVzZSBwYXJhbWV0ZXJzLgotICAgICBnenNldHBhcmFtcyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vz cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGZpbGUgd2FzIG5vdAotICAgb3BlbmVkIGZvciB3 cml0aW5nLgorICAgICBEeW5hbWljYWxseSB1cGRhdGUgdGhlIGNvbXByZXNzaW9uIGxldmVsIG9y IHN0cmF0ZWd5LiAgU2VlIHRoZSBkZXNjcmlwdGlvbgorICAgb2YgZGVmbGF0ZUluaXQyIGZvciB0 aGUgbWVhbmluZyBvZiB0aGVzZSBwYXJhbWV0ZXJzLiAgUHJldmlvdXNseSBwcm92aWRlZAorICAg ZGF0YSBpcyBmbHVzaGVkIGJlZm9yZSB0aGUgcGFyYW1ldGVyIGNoYW5nZS4KKworICAgICBnenNl dHBhcmFtcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGZp bGUgd2FzIG5vdAorICAgb3BlbmVkIGZvciB3cml0aW5nLCBaX0VSUk5PIGlmIHRoZXJlIGlzIGFu IGVycm9yIHdyaXRpbmcgdGhlIGZsdXNoZWQgZGF0YSwKKyAgIG9yIFpfTUVNX0VSUk9SIGlmIHRo ZXJlIGlzIGEgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuCiAqLwogCi1aRVhURVJOIGludCBaRVhQ T1JUICAgIGd6cmVhZCAgT0YoKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbikp OworWkVYVEVSTiBpbnQgWkVYUE9SVCBnenJlYWQgT0YoKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYs IHVuc2lnbmVkIGxlbikpOwogLyoKLSAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNv bXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgSWYgdGhlIGlucHV0 IGZpbGUgd2FzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVt YmVyCi0gICBvZiBieXRlcyBpbnRvIHRoZSBidWZmZXIuCi0gICAgIGd6cmVhZCByZXR1cm5zIHRo ZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQgKDAgZm9yCi0gICBl bmQgb2YgZmlsZSwgLTEgZm9yIGVycm9yKS4gKi8KKyAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJl ciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgSWYKKyAg IHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUg Z2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIgZGlyZWN0bHkgZnJvbSB0 aGUgZmlsZS4KIAotWkVYVEVSTiBpbnQgWkVYUE9SVCAgICBnendyaXRlIE9GKChnekZpbGUgZmls ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZHBjIGJ1ZiwgdW5zaWdu ZWQgbGVuKSk7CisgICAgIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQgb2YgYSBnemlwIHN0cmVhbSBp biB0aGUgaW5wdXQsIGd6cmVhZCB3aWxsIGNvbnRpbnVlCisgICB0byByZWFkLCBsb29raW5nIGZv ciBhbm90aGVyIGd6aXAgc3RyZWFtLiAgQW55IG51bWJlciBvZiBnemlwIHN0cmVhbXMgbWF5IGJl CisgICBjb25jYXRlbmF0ZWQgaW4gdGhlIGlucHV0IGZpbGUsIGFuZCB3aWxsIGFsbCBiZSBkZWNv bXByZXNzZWQgYnkgZ3pyZWFkKCkuCisgICBJZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGd6aXAg c3RyZWFtIGlzIGVuY291bnRlcmVkIGFmdGVyIGEgZ3ppcCBzdHJlYW0sCisgICB0aGF0IHJlbWFp bmluZyB0cmFpbGluZyBnYXJiYWdlIGlzIGlnbm9yZWQgKGFuZCBubyBlcnJvciBpcyByZXR1cm5l ZCkuCisKKyAgICAgZ3pyZWFkIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBnemlwIGZpbGUgdGhhdCBp cyBiZWluZyBjb25jdXJyZW50bHkgd3JpdHRlbi4KKyAgIFVwb24gcmVhY2hpbmcgdGhlIGVuZCBv ZiB0aGUgaW5wdXQsIGd6cmVhZCB3aWxsIHJldHVybiB3aXRoIHRoZSBhdmFpbGFibGUKKyAgIGRh dGEuICBJZiB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSBnemVycm9yIGlzIFpfT0sgb3IgWl9C VUZfRVJST1IsIHRoZW4KKyAgIGd6Y2xlYXJlcnIgY2FuIGJlIHVzZWQgdG8gY2xlYXIgdGhlIGVu ZCBvZiBmaWxlIGluZGljYXRvciBpbiBvcmRlciB0byBwZXJtaXQKKyAgIGd6cmVhZCB0byBiZSB0 cmllZCBhZ2Fpbi4gIFpfT0sgaW5kaWNhdGVzIHRoYXQgYSBnemlwIHN0cmVhbSB3YXMgY29tcGxl dGVkCisgICBvbiB0aGUgbGFzdCBnenJlYWQuICBaX0JVRl9FUlJPUiBpbmRpY2F0ZXMgdGhhdCB0 aGUgaW5wdXQgZmlsZSBlbmRlZCBpbiB0aGUKKyAgIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLiAg Tm90ZSB0aGF0IGd6cmVhZCBkb2VzIG5vdCByZXR1cm4gLTEgaW4gdGhlIGV2ZW50CisgICBvZiBh biBpbmNvbXBsZXRlIGd6aXAgc3RyZWFtLiAgVGhpcyBlcnJvciBpcyBkZWZlcnJlZCB1bnRpbCBn emNsb3NlKCksIHdoaWNoCisgICB3aWxsIHJldHVybiBaX0JVRl9FUlJPUiBpZiB0aGUgbGFzdCBn enJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAKKyAgIHN0cmVhbS4gIEFsdGVybmF0 aXZlbHksIGd6ZXJyb3IgY2FuIGJlIHVzZWQgYmVmb3JlIGd6Y2xvc2UgdG8gZGV0ZWN0IHRoaXMK KyAgIGNhc2UuCisKKyAgICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNz ZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZCwgbGVzcyB0aGFuCisgICBsZW4gZm9yIGVuZCBvZiBmaWxl LCBvciAtMSBmb3IgZXJyb3IuICBJZiBsZW4gaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBhbiBpbnQs CisgICB0aGVuIG5vdGhpbmcgaXMgcmVhZCwgLTEgaXMgcmV0dXJuZWQsIGFuZCB0aGUgZXJyb3Ig c3RhdGUgaXMgc2V0IHRvCisgICBaX1NUUkVBTV9FUlJPUi4KKyovCisKK1pFWFRFUk4gel9zaXpl X3QgWkVYUE9SVCBnemZyZWFkIE9GKCh2b2lkcCBidWYsIHpfc2l6ZV90IHNpemUsIHpfc2l6ZV90 IG5pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnekZpbGUgZmls ZSkpOworLyoKKyAgICAgUmVhZCB1cCB0byBuaXRlbXMgaXRlbXMgb2Ygc2l6ZSBzaXplIGZyb20g ZmlsZSB0byBidWYsIG90aGVyd2lzZSBvcGVyYXRpbmcKKyAgIGFzIGd6cmVhZCgpIGRvZXMuICBU aGlzIGR1cGxpY2F0ZXMgdGhlIGludGVyZmFjZSBvZiBzdGRpbydzIGZyZWFkKCksIHdpdGgKKyAg IHNpemVfdCByZXF1ZXN0IGFuZCByZXR1cm4gdHlwZXMuICBJZiB0aGUgbGlicmFyeSBkZWZpbmVz IHNpemVfdCwgdGhlbgorICAgel9zaXplX3QgaXMgaWRlbnRpY2FsIHRvIHNpemVfdC4gIElmIG5v dCwgdGhlbiB6X3NpemVfdCBpcyBhbiB1bnNpZ25lZAorICAgaW50ZWdlciB0eXBlIHRoYXQgY2Fu IGNvbnRhaW4gYSBwb2ludGVyLgorCisgICAgIGd6ZnJlYWQoKSByZXR1cm5zIHRoZSBudW1iZXIg b2YgZnVsbCBpdGVtcyByZWFkIG9mIHNpemUgc2l6ZSwgb3IgemVybyBpZgorICAgdGhlIGVuZCBv ZiB0aGUgZmlsZSB3YXMgcmVhY2hlZCBhbmQgYSBmdWxsIGl0ZW0gY291bGQgbm90IGJlIHJlYWQs IG9yIGlmCisgICB0aGVyZSB3YXMgYW4gZXJyb3IuICBnemVycm9yKCkgbXVzdCBiZSBjb25zdWx0 ZWQgaWYgemVybyBpcyByZXR1cm5lZCBpbgorICAgb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZXJl IHdhcyBhbiBlcnJvci4gIElmIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiBzaXplIGFuZAorICAgbml0 ZW1zIG92ZXJmbG93cywgaS5lLiB0aGUgcHJvZHVjdCBkb2VzIG5vdCBmaXQgaW4gYSB6X3NpemVf dCwgdGhlbiBub3RoaW5nCisgICBpcyByZWFkLCB6ZXJvIGlzIHJldHVybmVkLCBhbmQgdGhlIGVy cm9yIHN0YXRlIGlzIHNldCB0byBaX1NUUkVBTV9FUlJPUi4KKworICAgICBJbiB0aGUgZXZlbnQg dGhhdCB0aGUgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZCBhbmQgb25seSBhIHBhcnRpYWwgaXRlbSBp cworICAgYXZhaWxhYmxlIGF0IHRoZSBlbmQsIGkuZS4gdGhlIHJlbWFpbmluZyB1bmNvbXByZXNz ZWQgZGF0YSBsZW5ndGggaXMgbm90IGEKKyAgIG11bHRpcGxlIG9mIHNpemUsIHRoZW4gdGhlIGZp bmFsIHBhcnRpYWwgaXRlbSBpcyBuZXZldGhlbGVzcyByZWFkIGludG8gYnVmCisgICBhbmQgdGhl IGVuZC1vZi1maWxlIGZsYWcgaXMgc2V0LiAgVGhlIGxlbmd0aCBvZiB0aGUgcGFydGlhbCBpdGVt IHJlYWQgaXMgbm90CisgICBwcm92aWRlZCwgYnV0IGNvdWxkIGJlIGluZmVycmVkIGZyb20gdGhl IHJlc3VsdCBvZiBnenRlbGwoKS4gIFRoaXMgYmVoYXZpb3IKKyAgIGlzIHRoZSBzYW1lIGFzIHRo ZSBiZWhhdmlvciBvZiBmcmVhZCgpIGltcGxlbWVudGF0aW9ucyBpbiBjb21tb24gbGlicmFyaWVz LAorICAgYnV0IGl0IHByZXZlbnRzIHRoZSBkaXJlY3QgdXNlIG9mIGd6ZnJlYWQoKSB0byByZWFk IGEgY29uY3VycmVudGx5IHdyaXR0ZW4KKyAgIGZpbGUsIHJlc2V0aW5nIGFuZCByZXRyeWluZyBv biBlbmQtb2YtZmlsZSwgd2hlbiBzaXplIGlzIG5vdCAxLgorKi8KKworWkVYVEVSTiBpbnQgWkVY UE9SVCBnendyaXRlIE9GKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZHBjIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CiAvKgogICAgICBXcml0ZXMgdGhlIGdp dmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxl LgotICAgZ3p3cml0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFj dHVhbGx5IHdyaXR0ZW4KLSAgICgwIGluIGNhc2Ugb2YgZXJyb3IpLgorICAgZ3p3cml0ZSByZXR1 cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gb3IgMCBpbiBjYXNl IG9mCisgICBlcnJvci4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlRWQSAgIGd6cHJpbnRmIE9G KChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKK1pFWFRFUk4gel9zaXpl X3QgWkVYUE9SVCBnemZ3cml0ZSBPRigodm9pZHBjIGJ1Ziwgel9zaXplX3Qgc2l6ZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9zaXplX3Qgbml0ZW1zLCBnekZpbGUg ZmlsZSkpOwogLyoKLSAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3Mg dG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgotICAgY29udHJvbCBvZiB0aGUgZm9ybWF0IHN0 cmluZywgYXMgaW4gZnByaW50Zi4gZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCi0gICB1 bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4g IFRoZSBudW1iZXIgb2YKLSAgIHVuY29tcHJlc3NlZCBieXRlcyB3cml0dGVuIGlzIGxpbWl0ZWQg dG8gNDA5NS4gVGhlIGNhbGxlciBzaG91bGQgYXNzdXJlIHRoYXQKLSAgIHRoaXMgbGltaXQgaXMg bm90IGV4Y2VlZGVkLiBJZiBpdCBpcyBleGNlZWRlZCwgdGhlbiBnenByaW50ZigpIHdpbGwgcmV0 dXJuCi0gICByZXR1cm4gYW4gZXJyb3IgKDApIHdpdGggbm90aGluZyB3cml0dGVuLiBJbiB0aGlz IGNhc2UsIHRoZXJlIG1heSBhbHNvIGJlIGEKKyAgICAgZ3pmd3JpdGUoKSB3cml0ZXMgbml0ZW1z IGl0ZW1zIG9mIHNpemUgc2l6ZSBmcm9tIGJ1ZiB0byBmaWxlLCBkdXBsaWNhdGluZworICAgdGhl IGludGVyZmFjZSBvZiBzdGRpbydzIGZ3cml0ZSgpLCB3aXRoIHNpemVfdCByZXF1ZXN0IGFuZCBy ZXR1cm4gdHlwZXMuICBJZgorICAgdGhlIGxpYnJhcnkgZGVmaW5lcyBzaXplX3QsIHRoZW4gel9z aXplX3QgaXMgaWRlbnRpY2FsIHRvIHNpemVfdC4gIElmIG5vdCwKKyAgIHRoZW4gel9zaXplX3Qg aXMgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHRoYXQgY2FuIGNvbnRhaW4gYSBwb2ludGVyLgor CisgICAgIGd6ZndyaXRlKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZ1bGwgaXRlbXMgd3JpdHRl biBvZiBzaXplIHNpemUsIG9yIHplcm8KKyAgIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gIElmIHRo ZSBtdWx0aXBsaWNhdGlvbiBvZiBzaXplIGFuZCBuaXRlbXMgb3ZlcmZsb3dzLAorICAgaS5lLiB0 aGUgcHJvZHVjdCBkb2VzIG5vdCBmaXQgaW4gYSB6X3NpemVfdCwgdGhlbiBub3RoaW5nIGlzIHdy aXR0ZW4sIHplcm8KKyAgIGlzIHJldHVybmVkLCBhbmQgdGhlIGVycm9yIHN0YXRlIGlzIHNldCB0 byBaX1NUUkVBTV9FUlJPUi4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBa X0FSRygoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisvKgorICAgICBD b252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb21wcmVz c2VkIGZpbGUgdW5kZXIKKyAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZw cmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAgIHVuY29tcHJlc3NlZCBi eXRlcyBhY3R1YWxseSB3cml0dGVuLCBvciBhIG5lZ2F0aXZlIHpsaWIgZXJyb3IgY29kZSBpbiBj YXNlCisgICBvZiBlcnJvci4gIFRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIHdyaXR0 ZW4gaXMgbGltaXRlZCB0byA4MTkxLCBvcgorICAgb25lIGxlc3MgdGhhbiB0aGUgYnVmZmVyIHNp emUgZ2l2ZW4gdG8gZ3pidWZmZXIoKS4gIFRoZSBjYWxsZXIgc2hvdWxkIGFzc3VyZQorICAgdGhh dCB0aGlzIGxpbWl0IGlzIG5vdCBleGNlZWRlZC4gIElmIGl0IGlzIGV4Y2VlZGVkLCB0aGVuIGd6 cHJpbnRmKCkgd2lsbAorICAgcmV0dXJuIGFuIGVycm9yICgwKSB3aXRoIG5vdGhpbmcgd3JpdHRl bi4gIEluIHRoaXMgY2FzZSwgdGhlcmUgbWF5IGFsc28gYmUgYQogICAgYnVmZmVyIG92ZXJmbG93 IHdpdGggdW5wcmVkaWN0YWJsZSBjb25zZXF1ZW5jZXMsIHdoaWNoIGlzIHBvc3NpYmxlIG9ubHkg aWYKICAgIHpsaWIgd2FzIGNvbXBpbGVkIHdpdGggdGhlIGluc2VjdXJlIGZ1bmN0aW9ucyBzcHJp bnRmKCkgb3IgdnNwcmludGYoKQogICAgYmVjYXVzZSB0aGUgc2VjdXJlIHNucHJpbnRmKCkgb3Ig dnNucHJpbnRmKCkgZnVuY3Rpb25zIHdlcmUgbm90IGF2YWlsYWJsZS4KKyAgIFRoaXMgY2FuIGJl IGRldGVybWluZWQgdXNpbmcgemxpYkNvbXBpbGVGbGFncygpLgogKi8KIAogWkVYVEVSTiBpbnQg WkVYUE9SVCBnenB1dHMgT0YoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpzKSk7CiAvKgotICAg ICAgV3JpdGVzIHRoZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVz c2VkIGZpbGUsIGV4Y2x1ZGluZworICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bGwtdGVybWluYXRl ZCBzdHJpbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSwgZXhjbHVkaW5nCiAgICB0aGUgdGVybWlu YXRpbmcgbnVsbCBjaGFyYWN0ZXIuCi0gICAgICBnenB1dHMgcmV0dXJucyB0aGUgbnVtYmVyIG9m IGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KKworICAgICBnenB1 dHMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2Fz ZSBvZiBlcnJvci4KICovCiAKIFpFWFRFUk4gY2hhciAqIFpFWFBPUlQgZ3pnZXRzIE9GKChnekZp bGUgZmlsZSwgY2hhciAqYnVmLCBpbnQgbGVuKSk7CiAvKgotICAgICAgUmVhZHMgYnl0ZXMgZnJv bSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlIHJlYWQsIG9y Ci0gICBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwg b3IgYW4gZW5kLW9mLWZpbGUKLSAgIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIFRoZSBzdHJp bmcgaXMgdGhlbiB0ZXJtaW5hdGVkIHdpdGggYSBudWxsCi0gICBjaGFyYWN0ZXIuCi0gICAgICBn emdldHMgcmV0dXJucyBidWYsIG9yIFpfTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICAgICBSZWFk cyBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgdW50aWwgbGVuLTEgY2hhcmFjdGVycyBh cmUgcmVhZCwgb3IgYQorICAgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQgdHJhbnNmZXJy ZWQgdG8gYnVmLCBvciBhbiBlbmQtb2YtZmlsZQorICAgY29uZGl0aW9uIGlzIGVuY291bnRlcmVk LiAgSWYgYW55IGNoYXJhY3RlcnMgYXJlIHJlYWQgb3IgaWYgbGVuID09IDEsIHRoZQorICAgc3Ry aW5nIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIG51bGwgY2hhcmFjdGVyLiAgSWYgbm8gY2hhcmFjdGVy cyBhcmUgcmVhZCBkdWUKKyAgIHRvIGFuIGVuZC1vZi1maWxlIG9yIGxlbiA8IDEsIHRoZW4gdGhl IGJ1ZmZlciBpcyBsZWZ0IHVudG91Y2hlZC4KKworICAgICBnemdldHMgcmV0dXJucyBidWYgd2hp Y2ggaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCBvciBpdCByZXR1cm5zIE5VTEwKKyAgIGZv ciBlbmQtb2YtZmlsZSBvciBpbiBjYXNlIG9mIGVycm9yLiAgSWYgdGhlcmUgd2FzIGFuIGVycm9y LCB0aGUgY29udGVudHMgYXQKKyAgIGJ1ZiBhcmUgaW5kZXRlcm1pbmF0ZS4KICovCiAKLVpFWFRF Uk4gaW50IFpFWFBPUlQgICAgZ3pwdXRjIE9GKChnekZpbGUgZmlsZSwgaW50IGMpKTsKK1pFWFRF Uk4gaW50IFpFWFBPUlQgZ3pwdXRjIE9GKChnekZpbGUgZmlsZSwgaW50IGMpKTsKIC8qCi0gICAg ICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXBy ZXNzZWQgZmlsZS4KLSAgIGd6cHV0YyByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyB3cml0dGVu LCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgorICAgICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFu IHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gIGd6cHV0YworICAgcmV0 dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4K ICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOwor WkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGMgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICAg UmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiBnemdldGMgcmV0dXJucyB0 aGlzIGJ5dGUKLSAgIG9yIC0xIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuCisgICAg IFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIGd6Z2V0YyByZXR1cm5z IHRoaXMgYnl0ZSBvciAtMQorICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4gIFRo aXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYWNybyBmb3Igc3BlZWQuCisgICBBcyBzdWNoLCBpdCBk b2VzIG5vdCBkbyBhbGwgb2YgdGhlIGNoZWNraW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgZG8uICBJ LmUuCisgICBpdCBkb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgZmlsZSBpcyBOVUxMLCBub3Igd2hl dGhlciB0aGUgc3RydWN0dXJlIGZpbGUKKyAgIHBvaW50cyB0byBoYXMgYmVlbiBjbG9iYmVyZWQg b3Igbm90LgogKi8KIAotWkVYVEVSTiBpbnQgWkVYUE9SVCAgICBnenVuZ2V0YyBPRigoaW50IGMs IGd6RmlsZSBmaWxlKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGd6dW5nZXRjIE9GKChpbnQgYywg Z3pGaWxlIGZpbGUpKTsKIC8qCi0gICAgICBQdXNoIG9uZSBjaGFyYWN0ZXIgYmFjayBvbnRvIHRo ZSBzdHJlYW0gdG8gYmUgcmVhZCBhZ2FpbiBsYXRlci4KLSAgIE9ubHkgb25lIGNoYXJhY3RlciBv ZiBwdXNoLWJhY2sgaXMgYWxsb3dlZC4gIGd6dW5nZXRjKCkgcmV0dXJucyB0aGUKLSAgIGNoYXJh Y3RlciBwdXNoZWQsIG9yIC0xIG9uIGZhaWx1cmUuICBnenVuZ2V0YygpIHdpbGwgZmFpbCBpZiBh Ci0gICBjaGFyYWN0ZXIgaGFzIGJlZW4gcHVzaGVkIGJ1dCBub3QgcmVhZCB5ZXQsIG9yIGlmIGMg aXMgLTEuIFRoZSBwdXNoZWQKLSAgIGNoYXJhY3RlciB3aWxsIGJlIGRpc2NhcmRlZCBpZiB0aGUg c3RyZWFtIGlzIHJlcG9zaXRpb25lZCB3aXRoIGd6c2VlaygpCi0gICBvciBnenJld2luZCgpLgor ICAgICBQdXNoIG9uZSBjaGFyYWN0ZXIgYmFjayBvbnRvIHRoZSBzdHJlYW0gdG8gYmUgcmVhZCBh cyB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICBvbiB0aGUgbmV4dCByZWFkLiAgQXQgbGVhc3Qgb25l IGNoYXJhY3RlciBvZiBwdXNoLWJhY2sgaXMgYWxsb3dlZC4KKyAgIGd6dW5nZXRjKCkgcmV0dXJu cyB0aGUgY2hhcmFjdGVyIHB1c2hlZCwgb3IgLTEgb24gZmFpbHVyZS4gIGd6dW5nZXRjKCkgd2ls bAorICAgZmFpbCBpZiBjIGlzIC0xLCBhbmQgbWF5IGZhaWwgaWYgYSBjaGFyYWN0ZXIgaGFzIGJl ZW4gcHVzaGVkIGJ1dCBub3QgcmVhZAorICAgeWV0LiAgSWYgZ3p1bmdldGMgaXMgdXNlZCBpbW1l ZGlhdGVseSBhZnRlciBnem9wZW4gb3IgZ3pkb3BlbiwgYXQgbGVhc3QgdGhlCisgICBvdXRwdXQg YnVmZmVyIHNpemUgb2YgcHVzaGVkIGNoYXJhY3RlcnMgaXMgYWxsb3dlZC4gIChTZWUgZ3pidWZm ZXIgYWJvdmUuKQorICAgVGhlIHB1c2hlZCBjaGFyYWN0ZXIgd2lsbCBiZSBkaXNjYXJkZWQgaWYg dGhlIHN0cmVhbSBpcyByZXBvc2l0aW9uZWQgd2l0aAorICAgZ3pzZWVrKCkgb3IgZ3pyZXdpbmQo KS4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pmbHVzaCBPRigoZ3pGaWxlIGZpbGUs IGludCBmbHVzaCkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemZsdXNoIE9GKChnekZpbGUgZmls ZSwgaW50IGZsdXNoKSk7CiAvKgotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRv IHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSBwYXJhbWV0ZXIKLSAgIGZsdXNoIGlzIGFzIGluIHRo ZSBkZWZsYXRlKCkgZnVuY3Rpb24uIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIKLSAgIGVy cm9yIG51bWJlciAoc2VlIGZ1bmN0aW9uIGd6ZXJyb3IgYmVsb3cpLiBnemZsdXNoIHJldHVybnMg Wl9PSyBpZgotICAgdGhlIGZsdXNoIHBhcmFtZXRlciBpcyBaX0ZJTklTSCBhbmQgYWxsIG91dHB1 dCBjb3VsZCBiZSBmbHVzaGVkLgotICAgICBnemZsdXNoIHNob3VsZCBiZSBjYWxsZWQgb25seSB3 aGVuIHN0cmljdGx5IG5lY2Vzc2FyeSBiZWNhdXNlIGl0IGNhbgotICAgZGVncmFkZSBjb21wcmVz c2lvbi4KKyAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3Nl ZCBmaWxlLiAgVGhlIHBhcmFtZXRlciBmbHVzaAorICAgaXMgYXMgaW4gdGhlIGRlZmxhdGUoKSBm dW5jdGlvbi4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIgZXJyb3IgbnVtYmVyCisgICAo c2VlIGZ1bmN0aW9uIGd6ZXJyb3IgYmVsb3cpLiAgZ3pmbHVzaCBpcyBvbmx5IHBlcm1pdHRlZCB3 aGVuIHdyaXRpbmcuCisKKyAgICAgSWYgdGhlIGZsdXNoIHBhcmFtZXRlciBpcyBaX0ZJTklTSCwg dGhlIHJlbWFpbmluZyBkYXRhIGlzIHdyaXR0ZW4gYW5kIHRoZQorICAgZ3ppcCBzdHJlYW0gaXMg Y29tcGxldGVkIGluIHRoZSBvdXRwdXQuICBJZiBnendyaXRlKCkgaXMgY2FsbGVkIGFnYWluLCBh IG5ldworICAgZ3ppcCBzdHJlYW0gd2lsbCBiZSBzdGFydGVkIGluIHRoZSBvdXRwdXQuICBnenJl YWQoKSBpcyBhYmxlIHRvIHJlYWQgc3VjaAorICAgY29uY2F0ZW5hdGVkIGd6aXAgc3RyZWFtcy4K KworICAgICBnemZsdXNoIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIHN0cmljdGx5IG5lY2Vz c2FyeSBiZWNhdXNlIGl0IHdpbGwKKyAgIGRlZ3JhZGUgY29tcHJlc3Npb24gaWYgY2FsbGVkIHRv byBvZnRlbi4KICovCiAKLVpFWFRFUk4gel9vZmZfdCBaRVhQT1JUICAgIGd6c2VlayBPRigoZ3pG aWxlIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfb2ZmX3Qg b2Zmc2V0LCBpbnQgd2hlbmNlKSk7CiAvKgotICAgICAgU2V0cyB0aGUgc3RhcnRpbmcgcG9zaXRp b24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJl c3NlZCBmaWxlLiBUaGUgb2Zmc2V0IHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhl Ci0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uIFRoZSB3aGVuY2UgcGFyYW1ldGVyIGlzIGRl ZmluZWQgYXMgaW4gbHNlZWsoMik7CitaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWsgT0Yo KGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X29mZl90 IG9mZnNldCwgaW50IHdoZW5jZSkpOworCisgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9u IGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KKyAgIGNvbXByZXNz ZWQgZmlsZS4gIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUK KyAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4gIFRoZSB3aGVuY2UgcGFyYW1ldGVyIGlzIGRl ZmluZWQgYXMgaW4gbHNlZWsoMik7CiAgICB0aGUgdmFsdWUgU0VFS19FTkQgaXMgbm90IHN1cHBv cnRlZC4KKwogICAgICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcsIHRoaXMgZnVu Y3Rpb24gaXMgZW11bGF0ZWQgYnV0IGNhbiBiZQotICAgZXh0cmVtZWx5IHNsb3cuIElmIHRoZSBm aWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZywgb25seSBmb3J3YXJkIHNlZWtzIGFyZQorICAgZXh0 cmVtZWx5IHNsb3cuICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcsIG9ubHkgZm9y d2FyZCBzZWVrcyBhcmUKICAgIHN1cHBvcnRlZDsgZ3pzZWVrIHRoZW4gY29tcHJlc3NlcyBhIHNl cXVlbmNlIG9mIHplcm9lcyB1cCB0byB0aGUgbmV3CiAgICBzdGFydGluZyBwb3NpdGlvbi4KIAot ICAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVh c3VyZWQgaW4gYnl0ZXMgZnJvbQorICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9m ZnNldCBsb2NhdGlvbiBhcyBtZWFzdXJlZCBpbiBieXRlcyBmcm9tCiAgICB0aGUgYmVnaW5uaW5n IG9mIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLCBpbgog ICAgcGFydGljdWxhciBpZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcgYW5kIHRoZSBu ZXcgc3RhcnRpbmcgcG9zaXRpb24KICAgIHdvdWxkIGJlIGJlZm9yZSB0aGUgY3VycmVudCBwb3Np dGlvbi4KQEAgLTEwNjksNjMgKzE1NjcsMTM0IEBACiAvKgogICAgICBSZXdpbmRzIHRoZSBnaXZl biBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGZvciByZWFkaW5nLgogCi0g ICBnenJld2luZChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIChpbnQpZ3pzZWVrKGZpbGUsIDBMLCBT RUVLX1NFVCkKKyAgICAgZ3pyZXdpbmQoZmlsZSkgaXMgZXF1aXZhbGVudCB0byAoaW50KWd6c2Vl ayhmaWxlLCAwTCwgU0VFS19TRVQpCiAqLwogCisvKgogWkVYVEVSTiB6X29mZl90IFpFWFBPUlQg ICAgZ3p0ZWxsIE9GKChnekZpbGUgZmlsZSkpOworCisgICAgIFJldHVybnMgdGhlIHN0YXJ0aW5n IHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KKyAg IGNvbXByZXNzZWQgZmlsZS4gIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBvZiBi eXRlcyBpbiB0aGUKKyAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbSwgYW5kIGlzIHplcm8gd2hl biBzdGFydGluZywgZXZlbiBpZiBhcHBlbmRpbmcgb3IKKyAgIHJlYWRpbmcgYSBnemlwIHN0cmVh bSBmcm9tIHRoZSBtaWRkbGUgb2YgYSBmaWxlIHVzaW5nIGd6ZG9wZW4oKS4KKworICAgICBnenRl bGwoZmlsZSkgaXMgZXF1aXZhbGVudCB0byBnenNlZWsoZmlsZSwgMEwsIFNFRUtfQ1VSKQorKi8K KwogLyoKLSAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6 cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBv c2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNz ZWQgZGF0YSBzdHJlYW0uCitaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnem9mZnNldCBPRigoZ3pG aWxlIGZpbGUpKTsKIAotICAgZ3p0ZWxsKGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gZ3pzZWVrKGZp bGUsIDBMLCBTRUVLX0NVUikKKyAgICAgUmV0dXJucyB0aGUgY3VycmVudCBvZmZzZXQgaW4gdGhl IGZpbGUgYmVpbmcgcmVhZCBvciB3cml0dGVuLiAgVGhpcyBvZmZzZXQKKyAgIGluY2x1ZGVzIHRo ZSBjb3VudCBvZiBieXRlcyB0aGF0IHByZWNlZGUgdGhlIGd6aXAgc3RyZWFtLCBmb3IgZXhhbXBs ZSB3aGVuCisgICBhcHBlbmRpbmcgb3Igd2hlbiB1c2luZyBnemRvcGVuKCkgZm9yIHJlYWRpbmcu ICBXaGVuIHJlYWRpbmcsIHRoZSBvZmZzZXQKKyAgIGRvZXMgbm90IGluY2x1ZGUgYXMgeWV0IHVu dXNlZCBidWZmZXJlZCBpbnB1dC4gIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQKKyAgIGZv ciBhIHByb2dyZXNzIGluZGljYXRvci4gIE9uIGVycm9yLCBnem9mZnNldCgpIHJldHVybnMgLTEu CiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6ZW9mIE9GKChnekZpbGUgZmlsZSkpOwogLyoK LSAgICAgUmV0dXJucyAxIHdoZW4gRU9GIGhhcyBwcmV2aW91c2x5IGJlZW4gZGV0ZWN0ZWQgcmVh ZGluZyB0aGUgZ2l2ZW4KLSAgIGlucHV0IHN0cmVhbSwgb3RoZXJ3aXNlIHplcm8uCisgICAgIFJl dHVybnMgdHJ1ZSAoMSkgaWYgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBoYXMgYmVlbiBzZXQg d2hpbGUgcmVhZGluZywKKyAgIGZhbHNlICgwKSBvdGhlcndpc2UuICBOb3RlIHRoYXQgdGhlIGVu ZC1vZi1maWxlIGluZGljYXRvciBpcyBzZXQgb25seSBpZiB0aGUKKyAgIHJlYWQgdHJpZWQgdG8g Z28gcGFzdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgYnV0IGNhbWUgdXAgc2hvcnQuICBUaGVyZWZv cmUsCisgICBqdXN0IGxpa2UgZmVvZigpLCBnemVvZigpIG1heSByZXR1cm4gZmFsc2UgZXZlbiBp ZiB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8KKyAgIHJlYWQsIGluIHRoZSBldmVudCB0aGF0IHRo ZSBsYXN0IHJlYWQgcmVxdWVzdCB3YXMgZm9yIHRoZSBleGFjdCBudW1iZXIgb2YKKyAgIGJ5dGVz IHJlbWFpbmluZyBpbiB0aGUgaW5wdXQgZmlsZS4gIFRoaXMgd2lsbCBoYXBwZW4gaWYgdGhlIGlu cHV0IGZpbGUgc2l6ZQorICAgaXMgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhlIGJ1ZmZlciBzaXpl LgorCisgICAgIElmIGd6ZW9mKCkgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSByZWFkIGZ1bmN0aW9u cyB3aWxsIHJldHVybiBubyBtb3JlIGRhdGEsCisgICB1bmxlc3MgdGhlIGVuZC1vZi1maWxlIGlu ZGljYXRvciBpcyByZXNldCBieSBnemNsZWFyZXJyKCkgYW5kIHRoZSBpbnB1dCBmaWxlCisgICBo YXMgZ3Jvd24gc2luY2UgdGhlIHByZXZpb3VzIGVuZCBvZiBmaWxlIHdhcyBkZXRlY3RlZC4KKyov CisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pkaXJlY3QgT0YoKGd6RmlsZSBmaWxlKSk7CisvKgor ICAgICBSZXR1cm5zIHRydWUgKDEpIGlmIGZpbGUgaXMgYmVpbmcgY29waWVkIGRpcmVjdGx5IHdo aWxlIHJlYWRpbmcsIG9yIGZhbHNlCisgICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJl aW5nIGRlY29tcHJlc3NlZC4KKworICAgICBJZiB0aGUgaW5wdXQgZmlsZSBpcyBlbXB0eSwgZ3pk aXJlY3QoKSB3aWxsIHJldHVybiB0cnVlLCBzaW5jZSB0aGUgaW5wdXQKKyAgIGRvZXMgbm90IGNv bnRhaW4gYSBnemlwIHN0cmVhbS4KKworICAgICBJZiBnemRpcmVjdCgpIGlzIHVzZWQgaW1tZWRp YXRlbHkgYWZ0ZXIgZ3pvcGVuKCkgb3IgZ3pkb3BlbigpIGl0IHdpbGwKKyAgIGNhdXNlIGJ1ZmZl cnMgdG8gYmUgYWxsb2NhdGVkIHRvIGFsbG93IHJlYWRpbmcgdGhlIGZpbGUgdG8gZGV0ZXJtaW5l IGlmIGl0CisgICBpcyBhIGd6aXAgZmlsZS4gIFRoZXJlZm9yZSBpZiBnemJ1ZmZlcigpIGlzIHVz ZWQsIGl0IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCisgICBnemRpcmVjdCgpLgorCisgICAgIFdo ZW4gd3JpdGluZywgZ3pkaXJlY3QoKSByZXR1cm5zIHRydWUgKDEpIGlmIHRyYW5zcGFyZW50IHdy aXRpbmcgd2FzCisgICByZXF1ZXN0ZWQgKCJ3VCIgZm9yIHRoZSBnem9wZW4oKSBtb2RlKSwgb3Ig ZmFsc2UgKDApIG90aGVyd2lzZS4gIChOb3RlOgorICAgZ3pkaXJlY3QoKSBpcyBub3QgbmVlZGVk IHdoZW4gd3JpdGluZy4gIFRyYW5zcGFyZW50IHdyaXRpbmcgbXVzdCBiZQorICAgZXhwbGljaXRs eSByZXF1ZXN0ZWQsIHNvIHRoZSBhcHBsaWNhdGlvbiBhbHJlYWR5IGtub3dzIHRoZSBhbnN3ZXIu ICBXaGVuCisgICBsaW5raW5nIHN0YXRpY2FsbHksIHVzaW5nIGd6ZGlyZWN0KCkgd2lsbCBpbmNs dWRlIGFsbCBvZiB0aGUgemxpYiBjb2RlIGZvcgorICAgZ3ppcCBmaWxlIHJlYWRpbmcgYW5kIGRl Y29tcHJlc3Npb24sIHdoaWNoIG1heSBub3QgYmUgZGVzaXJlZC4pCiAqLwogCiBaRVhURVJOIGlu dCBaRVhQT1JUICAgIGd6Y2xvc2UgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICBGbHVzaGVz IGFsbCBwZW5kaW5nIG91dHB1dCBpZiBuZWNlc3NhcnksIGNsb3NlcyB0aGUgY29tcHJlc3NlZCBm aWxlCi0gICBhbmQgZGVhbGxvY2F0ZXMgYWxsIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGUuIFRo ZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIKLSAgIGVycm9yIG51bWJlciAoc2VlIGZ1bmN0aW9u IGd6ZXJyb3IgYmVsb3cpLgorICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpZiBuZWNl c3NhcnksIGNsb3NlcyB0aGUgY29tcHJlc3NlZCBmaWxlIGFuZAorICAgZGVhbGxvY2F0ZXMgdGhl IChkZSljb21wcmVzc2lvbiBzdGF0ZS4gIE5vdGUgdGhhdCBvbmNlIGZpbGUgaXMgY2xvc2VkLCB5 b3UKKyAgIGNhbm5vdCBjYWxsIGd6ZXJyb3Igd2l0aCBmaWxlLCBzaW5jZSBpdHMgc3RydWN0dXJl cyBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQuCisgICBnemNsb3NlIG11c3Qgbm90IGJlIGNhbGxlZCBt b3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBmaWxlLCBqdXN0IGFzIGZyZWUKKyAgIG11c3Qgbm90 IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBhbGxvY2F0aW9uLgorCisgICAg IGd6Y2xvc2Ugd2lsbCByZXR1cm4gWl9TVFJFQU1fRVJST1IgaWYgZmlsZSBpcyBub3QgdmFsaWQs IFpfRVJSTk8gb24gYQorICAgZmlsZSBvcGVyYXRpb24gZXJyb3IsIFpfTUVNX0VSUk9SIGlmIG91 dCBvZiBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZQorICAgbGFzdCByZWFkIGVuZGVkIGluIHRo ZSBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbSwgb3IgWl9PSyBvbiBzdWNjZXNzLgorKi8KKworWkVY VEVSTiBpbnQgWkVYUE9SVCBnemNsb3NlX3IgT0YoKGd6RmlsZSBmaWxlKSk7CitaRVhURVJOIGlu dCBaRVhQT1JUIGd6Y2xvc2VfdyBPRigoZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFNhbWUgYXMg Z3pjbG9zZSgpLCBidXQgZ3pjbG9zZV9yKCkgaXMgb25seSBmb3IgdXNlIHdoZW4gcmVhZGluZywg YW5kCisgICBnemNsb3NlX3coKSBpcyBvbmx5IGZvciB1c2Ugd2hlbiB3cml0aW5nIG9yIGFwcGVu ZGluZy4gIFRoZSBhZHZhbnRhZ2UgdG8KKyAgIHVzaW5nIHRoZXNlIGluc3RlYWQgb2YgZ3pjbG9z ZSgpIGlzIHRoYXQgdGhleSBhdm9pZCBsaW5raW5nIGluIHpsaWIKKyAgIGNvbXByZXNzaW9uIG9y IGRlY29tcHJlc3Npb24gY29kZSB0aGF0IGlzIG5vdCB1c2VkIHdoZW4gb25seSByZWFkaW5nIG9y IG9ubHkKKyAgIHdyaXRpbmcgcmVzcGVjdGl2ZWx5LiAgSWYgZ3pjbG9zZSgpIGlzIHVzZWQsIHRo ZW4gYm90aCBjb21wcmVzc2lvbiBhbmQKKyAgIGRlY29tcHJlc3Npb24gY29kZSB3aWxsIGJlIGlu Y2x1ZGVkIHRoZSBhcHBsaWNhdGlvbiB3aGVuIGxpbmtpbmcgdG8gYSBzdGF0aWMKKyAgIHpsaWIg bGlicmFyeS4KICovCiAKIFpFWFRFUk4gY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciBPRigo Z3pGaWxlIGZpbGUsIGludCAqZXJybnVtKSk7CiAvKgotICAgICBSZXR1cm5zIHRoZSBlcnJvciBt ZXNzYWdlIGZvciB0aGUgbGFzdCBlcnJvciB3aGljaCBvY2N1cnJlZCBvbiB0aGUKLSAgIGdpdmVu IGNvbXByZXNzZWQgZmlsZS4gZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gSWYg YW4KLSAgIGVycm9yIG9jY3VycmVkIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgbm90IGluIHRoZSBj b21wcmVzc2lvbiBsaWJyYXJ5LAotICAgZXJybnVtIGlzIHNldCB0byBaX0VSUk5PIGFuZCB0aGUg YXBwbGljYXRpb24gbWF5IGNvbnN1bHQgZXJybm8KLSAgIHRvIGdldCB0aGUgZXhhY3QgZXJyb3Ig Y29kZS4KKyAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Ig d2hpY2ggb2NjdXJyZWQgb24gdGhlIGdpdmVuCisgICBjb21wcmVzc2VkIGZpbGUuICBlcnJudW0g aXMgc2V0IHRvIHpsaWIgZXJyb3IgbnVtYmVyLiAgSWYgYW4gZXJyb3Igb2NjdXJyZWQKKyAgIGlu IHRoZSBmaWxlIHN5c3RlbSBhbmQgbm90IGluIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LCBlcnJu dW0gaXMgc2V0IHRvCisgICBaX0VSUk5PIGFuZCB0aGUgYXBwbGljYXRpb24gbWF5IGNvbnN1bHQg ZXJybm8gdG8gZ2V0IHRoZSBleGFjdCBlcnJvciBjb2RlLgorCisgICAgIFRoZSBhcHBsaWNhdGlv biBtdXN0IG5vdCBtb2RpZnkgdGhlIHJldHVybmVkIHN0cmluZy4gIEZ1dHVyZSBjYWxscyB0bwor ICAgdGhpcyBmdW5jdGlvbiBtYXkgaW52YWxpZGF0ZSB0aGUgcHJldmlvdXNseSByZXR1cm5lZCBz dHJpbmcuICBJZiBmaWxlIGlzCisgICBjbG9zZWQsIHRoZW4gdGhlIHN0cmluZyBwcmV2aW91c2x5 IHJldHVybmVkIGJ5IGd6ZXJyb3Igd2lsbCBubyBsb25nZXIgYmUKKyAgIGF2YWlsYWJsZS4KKwor ICAgICBnemVycm9yKCkgc2hvdWxkIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggZXJyb3JzIGZyb20g ZW5kLW9mLWZpbGUgZm9yIHRob3NlCisgICBmdW5jdGlvbnMgYWJvdmUgdGhhdCBkbyBub3QgZGlz dGluZ3Vpc2ggdGhvc2UgY2FzZXMgaW4gdGhlaXIgcmV0dXJuIHZhbHVlcy4KICovCiAKIFpFWFRF Uk4gdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICBD bGVhcnMgdGhlIGVycm9yIGFuZCBlbmQtb2YtZmlsZSBmbGFncyBmb3IgZmlsZS4gVGhpcyBpcyBh bmFsb2dvdXMgdG8gdGhlCi0gICBjbGVhcmVycigpIGZ1bmN0aW9uIGluIHN0ZGlvLiBUaGlzIGlz IHVzZWZ1bCBmb3IgY29udGludWluZyB0byByZWFkIGEgZ3ppcAorICAgICBDbGVhcnMgdGhlIGVy cm9yIGFuZCBlbmQtb2YtZmlsZSBmbGFncyBmb3IgZmlsZS4gIFRoaXMgaXMgYW5hbG9nb3VzIHRv IHRoZQorICAgY2xlYXJlcnIoKSBmdW5jdGlvbiBpbiBzdGRpby4gIFRoaXMgaXMgdXNlZnVsIGZv ciBjb250aW51aW5nIHRvIHJlYWQgYSBnemlwCiAgICBmaWxlIHRoYXQgaXMgYmVpbmcgd3JpdHRl biBjb25jdXJyZW50bHkuCiAqLwogCisjZW5kaWYgLyogIVpfU09MTyAqLworCiAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KIAogLyoKICAgICAgVGhlc2Ug ZnVuY3Rpb25zIGFyZSBub3QgcmVsYXRlZCB0byBjb21wcmVzc2lvbiBidXQgYXJlIGV4cG9ydGVk Ci0gICBhbnl3YXkgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIHVzZWZ1bCBpbiBhcHBsaWNhdGlvbnMg dXNpbmcgdGhlCi0gICBjb21wcmVzc2lvbiBsaWJyYXJ5LgorICAgYW55d2F5IGJlY2F1c2UgdGhl eSBtaWdodCBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZSBjb21wcmVzc2lvbgor ICAgbGlicmFyeS4KICovCiAKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyIE9GKCh1TG9u ZyBhZGxlciwgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKLQogLyoKICAgICAgVXBkYXRl IGEgcnVubmluZyBBZGxlci0zMiBjaGVja3N1bSB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFd IGFuZAotICAgcmV0dXJuIHRoZSB1cGRhdGVkIGNoZWNrc3VtLiBJZiBidWYgaXMgTlVMTCwgdGhp cyBmdW5jdGlvbiByZXR1cm5zCi0gICB0aGUgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhl IGNoZWNrc3VtLgotICAgQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzIHJlbGlhYmxl IGFzIGEgQ1JDMzIgYnV0IGNhbiBiZSBjb21wdXRlZAotICAgbXVjaCBmYXN0ZXIuIFVzYWdlIGV4 YW1wbGU6CisgICByZXR1cm4gdGhlIHVwZGF0ZWQgY2hlY2tzdW0uICBJZiBidWYgaXMgWl9OVUxM LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlCisgICByZXF1aXJlZCBpbml0aWFsIHZhbHVlIGZv ciB0aGUgY2hlY2tzdW0uCisKKyAgICAgQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFz IHJlbGlhYmxlIGFzIGEgQ1JDLTMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKKyAgIG11Y2ggZmFzdGVy LgorCisgICBVc2FnZSBleGFtcGxlOgogCiAgICAgIHVMb25nIGFkbGVyID0gYWRsZXIzMigwTCwg Wl9OVUxMLCAwKTsKIApAQCAtMTEzNSwxMiArMTcwNCwzMSBAQAogICAgICBpZiAoYWRsZXIgIT0g b3JpZ2luYWxfYWRsZXIpIGVycm9yKCk7CiAqLwogCitaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRs ZXIzMl96IE9GKCh1TG9uZyBhZGxlciwgY29uc3QgQnl0ZWYgKmJ1ZiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHpfc2l6ZV90IGxlbikpOworLyoKKyAgICAgU2FtZSBhcyBh ZGxlcjMyKCksIGJ1dCB3aXRoIGEgc2l6ZV90IGxlbmd0aC4KKyovCisKKy8qCitaRVhURVJOIHVM b25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9GKCh1TG9uZyBhZGxlcjEsIHVMb25nIGFkbGVy MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfb2ZmX3QgbGVu MikpOworCisgICAgIENvbWJpbmUgdHdvIEFkbGVyLTMyIGNoZWNrc3VtcyBpbnRvIG9uZS4gIEZv ciB0d28gc2VxdWVuY2VzIG9mIGJ5dGVzLCBzZXExCisgICBhbmQgc2VxMiB3aXRoIGxlbmd0aHMg bGVuMSBhbmQgbGVuMiwgQWRsZXItMzIgY2hlY2tzdW1zIHdlcmUgY2FsY3VsYXRlZCBmb3IKKyAg IGVhY2gsIGFkbGVyMSBhbmQgYWRsZXIyLiAgYWRsZXIzMl9jb21iaW5lKCkgcmV0dXJucyB0aGUg QWRsZXItMzIgY2hlY2tzdW0gb2YKKyAgIHNlcTEgYW5kIHNlcTIgY29uY2F0ZW5hdGVkLCByZXF1 aXJpbmcgb25seSBhZGxlcjEsIGFkbGVyMiwgYW5kIGxlbjIuICBOb3RlCisgICB0aGF0IHRoZSB6 X29mZl90IHR5cGUgKGxpa2Ugb2ZmX3QpIGlzIGEgc2lnbmVkIGludGVnZXIuICBJZiBsZW4yIGlz CisgICBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBoYXMgbm8gbWVhbmluZyBvciB1dGlsaXR5LgorKi8K KwogWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyICAgT0YoKHVMb25nIGNyYywgY29uc3QgQnl0 ZWYgKmJ1ZiwgdUludCBsZW4pKTsKIC8qCi0gICAgIFVwZGF0ZSBhIHJ1bm5pbmcgY3JjIHdpdGgg dGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kIHJldHVybiB0aGUgdXBkYXRlZAotICAgY3JjLiBJ ZiBidWYgaXMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1aXJlZCBpbml0aWFs IHZhbHVlCi0gICBmb3IgdGhlIGNyYy4gUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdz IGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZAotICAgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQg c2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgICBVcGRhdGUgYSBydW5u aW5nIENSQy0zMiB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlCisg ICB1cGRhdGVkIENSQy0zMi4gIElmIGJ1ZiBpcyBaX05VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJu cyB0aGUgcmVxdWlyZWQKKyAgIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBw b3N0LWNvbmRpdGlvbmluZyAob25lJ3MgY29tcGxlbWVudCkgaXMKKyAgIHBlcmZvcm1lZCB3aXRo aW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUgYXBwbGljYXRp b24uCisKICAgIFVzYWdlIGV4YW1wbGU6CiAKICAgICAgdUxvbmcgY3JjID0gY3JjMzIoMEwsIFpf TlVMTCwgMCk7CkBAIC0xMTUxLDYgKzE3MzksMjIgQEAKICAgICAgaWYgKGNyYyAhPSBvcmlnaW5h bF9jcmMpIGVycm9yKCk7CiAqLwogCitaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfeiBPRigo dUxvbmcgYWRsZXIsIGNvbnN0IEJ5dGVmICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgel9zaXplX3QgbGVuKSk7CisvKgorICAgICBTYW1lIGFzIGNyYzMyKCksIGJ1dCB3 aXRoIGEgc2l6ZV90IGxlbmd0aC4KKyovCisKKy8qCitaRVhURVJOIHVMb25nIFpFWFBPUlQgY3Jj MzJfY29tYmluZSBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmZfdCBsZW4yKSk7CisK KyAgICAgQ29tYmluZSB0d28gQ1JDLTMyIGNoZWNrIHZhbHVlcyBpbnRvIG9uZS4gIEZvciB0d28g c2VxdWVuY2VzIG9mIGJ5dGVzLAorICAgc2VxMSBhbmQgc2VxMiB3aXRoIGxlbmd0aHMgbGVuMSBh bmQgbGVuMiwgQ1JDLTMyIGNoZWNrIHZhbHVlcyB3ZXJlCisgICBjYWxjdWxhdGVkIGZvciBlYWNo LCBjcmMxIGFuZCBjcmMyLiAgY3JjMzJfY29tYmluZSgpIHJldHVybnMgdGhlIENSQy0zMgorICAg Y2hlY2sgdmFsdWUgb2Ygc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5 IGNyYzEsIGNyYzIsIGFuZAorICAgbGVuMi4KKyovCisKIAogICAgICAgICAgICAgICAgICAgICAg ICAgLyogdmFyaW91cyBoYWNrcywgZG9uJ3QgbG9vayA6KSAqLwogCkBAIC0xMTY3LDMxICsxNzcx LDEzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFt X3NpemUpKTsKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQyXyBPRigoel9zdHJlYW1w IHN0cm0sIGludCAgd2luZG93Qml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwgaW50IHN0cmVhbV9zaXplKSk7Ci1aRVhURVJOIGlu dCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdF8gT0YoKHpfc3RyZWFtIEZBUiAqc3RybSwgaW50IHdp bmRvd0JpdHMsCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdF8gT0YoKHpfc3Ry ZWFtcCBzdHJtLCBpbnQgd2luZG93Qml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7Ci0jZGVmaW5l IGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCi0gICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSks IChsZXZlbCksICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKLSNkZWZpbmUg aW5mbGF0ZUluaXQoc3RybSkgXAotICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCAgICAgICAg ICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCi0jZGVmaW5lIGRlZmxhdGVJ bml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kp IFwKLSAgICAgICAgZGVmbGF0ZUluaXQyXygoc3RybSksKGxldmVsKSwobWV0aG9kKSwod2luZG93 Qml0cyksKG1lbUxldmVsKSxcCi0gICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgICAg ICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKLSNkZWZpbmUgaW5mbGF0ZUlu aXQyKHN0cm0sIHdpbmRvd0JpdHMpIFwKLSAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3 aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQotI2RlZmluZSBpbmZs YXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCi0gICAgICAgIGluZmxhdGVC YWNrSW5pdF8oKHN0cm0pLCAod2luZG93Qml0cyksICh3aW5kb3cpLCBcCi0gICAgICAgIFpMSUJf VkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKLQotCi0jaWYgIWRlZmluZWQoWlVUSUxfSCkgJiYg IWRlZmluZWQoTk9fRFVNTVlfREVDTCkKLSAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBk dW1teTt9OyAvKiBoYWNrIGZvciBidWdneSBjb21waWxlcnMgKi8KKyNpZmRlZiBaX1BSRUZJWF9T RVQKKyMgIGRlZmluZSB6X2RlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCisgICAgICAgICAgZGVm bGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0 cmVhbSkpCisjICBkZWZpbmUgel9pbmZsYXRlSW5pdChzdHJtKSBcCisgICAgICAgICAgaW5mbGF0 ZUluaXRfKChzdHJtKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjICBk ZWZpbmUgel9kZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVt TGV2ZWwsIHN0cmF0ZWd5KSBcCisgICAgICAgICAgZGVmbGF0ZUluaXQyXygoc3RybSksKGxldmVs KSwobWV0aG9kKSwod2luZG93Qml0cyksKG1lbUxldmVsKSxcCisgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyYXRlZ3kpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMg IGRlZmluZSB6X2luZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCisgICAgICAgICAgaW5m bGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBcCisgICAgICAg ICAgICAgICAgICAgICAgICAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjICBkZWZpbmUgel9pbmZs YXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCisgICAgICAgICAgaW5mbGF0 ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorI2Vs c2UKKyMgIGRlZmluZSBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgXAorICAgICAgICAgIGRlZmxh dGVJbml0Xygoc3RybSksIChsZXZlbCksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJl YW0pKQorIyAgZGVmaW5lIGluZmxhdGVJbml0KHN0cm0pIFwKKyAgICAgICAgICBpbmZsYXRlSW5p dF8oKHN0cm0pLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmlu ZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWws IHN0cmF0ZWd5KSBcCisgICAgICAgICAgZGVmbGF0ZUluaXQyXygoc3RybSksKGxldmVsKSwobWV0 aG9kKSwod2luZG93Qml0cyksKG1lbUxldmVsKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAo c3RyYXRlZ3kpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKyMgIGRlZmlu ZSBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAorICAgICAgICAgIGluZmxhdGVJbml0 Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgXAorICAgICAgICAgICAgICAg ICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0pKQorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5p dChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKKyAgICAgICAgICBpbmZsYXRlQmFja0luaXRf KChzdHJtKSwgKHdpbmRvd0JpdHMpLCAod2luZG93KSwgXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZW5kaWYKIAorI2lm bmRlZiBaX1NPTE8KKworLyogZ3pnZXRjKCkgbWFjcm8gYW5kIGl0cyBzdXBwb3J0aW5nIGZ1bmN0 aW9uIGFuZCBleHBvc2VkIGRhdGEgc3RydWN0dXJlLiAgTm90ZQorICogdGhhdCB0aGUgcmVhbCBp bnRlcm5hbCBzdGF0ZSBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBleHBvc2VkIHN0cnVjdHVyZS4K KyAqIFRoaXMgYWJicmV2aWF0ZWQgc3RydWN0dXJlIGV4cG9zZXMganVzdCBlbm91Z2ggZm9yIHRo ZSBnemdldGMoKSBtYWNyby4gIFRoZQorICogdXNlciBzaG91bGQgbm90IG1lc3Mgd2l0aCB0aGVz ZSBleHBvc2VkIGVsZW1lbnRzLCBzaW5jZSB0aGVpciBuYW1lcyBvcgorICogYmVoYXZpb3IgY291 bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMgZXZlbiBjYXByaWNpb3VzbHkuICBUaGV5 IGNhbgorICogb25seSBiZSB1c2VkIGJ5IHRoZSBnemdldGMoKSBtYWNyby4gIFlvdSBoYXZlIGJl ZW4gd2FybmVkLgorICovCitzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIHVuc2lnbmVkIGhhdmU7Cisg ICAgdW5zaWduZWQgY2hhciAqbmV4dDsKKyAgICB6X29mZjY0X3QgcG9zOworfTsKK1pFWFRFUk4g aW50IFpFWFBPUlQgZ3pnZXRjXyBPRigoZ3pGaWxlIGZpbGUpKTsgIC8qIGJhY2t3YXJkIGNvbXBh dGliaWxpdHkgKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjICBk ZWZpbmUgel9nemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0s IChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IChnemdldGMpKGcpKQorI2Vsc2UKKyMgIGRl ZmluZSBnemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChn KS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IChnemdldGMpKGcpKQorI2VuZGlmCisKKy8qIHBy b3ZpZGUgNjQtYml0IG9mZnNldCBmdW5jdGlvbnMgaWYgX0xBUkdFRklMRTY0X1NPVVJDRSBkZWZp bmVkLCBhbmQvb3IKKyAqIGNoYW5nZSB0aGUgcmVndWxhciBmdW5jdGlvbnMgdG8gNjQgYml0cyBp ZiBfRklMRV9PRkZTRVRfQklUUyBpcyA2NCAoaWYKKyAqIGJvdGggYXJlIHRydWUsIHRoZSBhcHBs aWNhdGlvbiBnZXRzIHRoZSAqNjQgZnVuY3Rpb25zLCBhbmQgdGhlIHJlZ3VsYXIKKyAqIGZ1bmN0 aW9ucyBhcmUgY2hhbmdlZCB0byA2NCBiaXRzKSAtLSBpbiBjYXNlIHRoZXNlIGFyZSBzZXQgb24g c3lzdGVtcworICogd2l0aG91dCBsYXJnZSBmaWxlIHN1cHBvcnQsIF9MRlM2NF9MQVJHRUZJTEUg bXVzdCBhbHNvIGJlIHRydWUKKyAqLworI2lmZGVmIFpfTEFSR0U2NAorICAgWkVYVEVSTiBnekZp bGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKyAg IFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgel9vZmY2NF90 LCBpbnQpKTsKKyAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3p0ZWxsNjQgT0YoKGd6Rmls ZSkpOworICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0IE9GKChnekZpbGUp KTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmU2NCBPRigodUxvbmcs IHVMb25nLCB6X29mZjY0X3QpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21i aW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmY2NF90KSk7CisjZW5kaWYKKworI2lmICFkZWZp bmVkKFpMSUJfSU5URVJOQUwpICYmIGRlZmluZWQoWl9XQU5UNjQpCisjICBpZmRlZiBaX1BSRUZJ WF9TRVQKKyMgICAgZGVmaW5lIHpfZ3pvcGVuIHpfZ3pvcGVuNjQKKyMgICAgZGVmaW5lIHpfZ3pz ZWVrIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIHpfZ3p0ZWxsIHpfZ3p0ZWxsNjQKKyMgICAgZGVm aW5lIHpfZ3pvZmZzZXQgel9nem9mZnNldDY0CisjICAgIGRlZmluZSB6X2FkbGVyMzJfY29tYmlu ZSB6X2FkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSB6X2NyYzMyX2NvbWJpbmUgel9jcmMz Ml9jb21iaW5lNjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAorIyAgICBk ZWZpbmUgZ3pzZWVrIGd6c2VlazY0CisjICAgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKKyMgICAg ZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBh ZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5l NjQKKyMgIGVuZGlmCisjICBpZm5kZWYgWl9MQVJHRTY0CisgICAgIFpFWFRFUk4gZ3pGaWxlIFpF WFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CisgICAgIFpF WFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmX3QsIGludCkp OworICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7Cisg ICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOworICAg ICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9u Zywgel9vZmZfdCkpOworICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0 IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyMgIGVuZGlmCisjZWxzZQorICAgWkVYVEVS TiBnekZpbGUgWkVYUE9SVCBnem9wZW4gT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7 CisgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWsgT0YoKGd6RmlsZSwgel9vZmZfdCwg aW50KSk7CisgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGwgT0YoKGd6RmlsZSkpOwor ICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pvZmZzZXQgT0YoKGd6RmlsZSkpOworICAgWkVY VEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29m Zl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcs IHVMb25nLCB6X29mZl90KSk7CisjZW5kaWYKKworI2Vsc2UgLyogWl9TT0xPICovCisKKyAgIFpF WFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9v ZmZfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25n LCB1TG9uZywgel9vZmZfdCkpOworCisjZW5kaWYgLyogIVpfU09MTyAqLworCisvKiB1bmRvY3Vt ZW50ZWQgZnVuY3Rpb25zICovCiBaRVhURVJOIGNvbnN0IGNoYXIgICAqIFpFWFBPUlQgekVycm9y ICAgICAgICAgICBPRigoaW50KSk7Ci1aRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5m bGF0ZVN5bmNQb2ludCBPRigoel9zdHJlYW1wIHopKTsKLVpFWFRFUk4gY29uc3QgdUxvbmdmICog WkVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7CitaRVhURVJOIGludCAgICAgICAg ICAgIFpFWFBPUlQgaW5mbGF0ZVN5bmNQb2ludCBPRigoel9zdHJlYW1wKSk7CitaRVhURVJOIGNv bnN0IHpfY3JjX3QgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7Cita RVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZSBPRigoel9zdHJl YW1wLCBpbnQpKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlVmFsaWRh dGUgT0YoKHpfc3RyZWFtcCwgaW50KSk7CitaRVhURVJOIHVuc2lnbmVkIGxvbmcgIFpFWFBPUlQg aW5mbGF0ZUNvZGVzVXNlZCBPRiAoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBpbnQgICAgICAgICAg ICBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBpbnQg ICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworI2lm IChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSkgJiYgIWRlZmluZWQoWl9T T0xPKQorWkVYVEVSTiBnekZpbGUgICAgICAgICBaRVhQT1JUIGd6b3Blbl93IE9GKChjb25zdCB3 Y2hhcl90ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICptb2RlKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmlu ZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworWkVYVEVSTiBpbnQgICAgICAg ICAgICBaRVhQT1JUVkEgZ3p2cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9s aXN0IHZhKSk7CisjICBlbmRpZgorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZm IC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3MvemxpYi96bGli LnBjLmluCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBi L3N5cy9zcmMvY21kL2dzL3psaWIvemxpYi5wYy5pbglXZWQgTWF5IDI3IDE3OjM5OjM3IDIwMjAg LTAzMDAKQEAgLTAsMCArMSwxMyBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhl Y19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK3NoYXJlZGxpYmRpcj1Ac2hhcmVkbGliZGlyQAor aW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogemxpYgorRGVzY3JpcHRpb246IHpsaWIg Y29tcHJlc3Npb24gbGlicmFyeQorVmVyc2lvbjogQFZFUlNJT05ACisKK1JlcXVpcmVzOgorTGli czogLUwke2xpYmRpcn0gLUwke3NoYXJlZGxpYmRpcn0gLWx6CitDZmxhZ3M6IC1JJHtpbmNsdWRl ZGlyfQpkaWZmIC1yIGEwNTc4Yzc5OGUxMCAtciAzN2I0NDZjYzk3Zjkgc3lzL3NyYy9jbWQvZ3Mv emxpYi96dXRpbC5jCi0tLSBhL3N5cy9zcmMvY21kL2dzL3psaWIvenV0aWwuYwlXZWQgTWF5IDI3 IDAwOjA5OjQ2IDIwMjAgKzAyMDAKKysrIGIvc3lzL3NyYy9jbWQvZ3MvemxpYi96dXRpbC5jCVdl ZCBNYXkgMjcgMTc6Mzk6MzcgMjAyMCAtMDMwMApAQCAtMSwzMSArMSwyNyBAQAogLyogenV0aWwu YyAtLSB0YXJnZXQgZGVwZW5kZW50IHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgY29tcHJlc3Np b24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgSmVhbi1sb3VwIEdhaWxseS4K KyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDE3IEplYW4tbG91cCBHYWlsbHkKICAqIEZvciBjb25k aXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6 bGliLmgKICAqLwogCi0vKiBAKCMpICRJZDogenV0aWwuYyx2IDEuMS4xLjEgMjAwNS8wNC8yNCAy MTozOTozOCBnaWxlcyBFeHAgJCAqLworLyogQCgjKSAkSWQkICovCiAKICNpbmNsdWRlICJ6dXRp bC5oIgotCi0jaWZuZGVmIE5PX0RVTU1ZX0RFQ0wKLXN0cnVjdCBpbnRlcm5hbF9zdGF0ZSAgICAg IHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLworI2lmbmRlZiBaX1NPTE8K KyMgIGluY2x1ZGUgImd6Z3V0cy5oIgogI2VuZGlmCiAKLSNpZm5kZWYgU1REQwotZXh0ZXJuIHZv aWQgZXhpdCBPRigoaW50KSk7Ci0jZW5kaWYKLQotY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNn WzEwXSA9IHsKLSJuZWVkIGRpY3Rpb25hcnkiLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAg Ki8KLSJzdHJlYW0gZW5kIiwgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi8KLSIi LCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi8KLSJmaWxlIGVy cm9yIiwgICAgICAgICAgLyogWl9FUlJOTyAgICAgICAgICgtMSkgKi8KLSJzdHJlYW0gZXJyb3Ii LCAgICAgICAgLyogWl9TVFJFQU1fRVJST1IgICgtMikgKi8KLSJkYXRhIGVycm9yIiwgICAgICAg ICAgLyogWl9EQVRBX0VSUk9SICAgICgtMykgKi8KLSJpbnN1ZmZpY2llbnQgbWVtb3J5IiwgLyog Wl9NRU1fRVJST1IgICAgICgtNCkgKi8KLSJidWZmZXIgZXJyb3IiLCAgICAgICAgLyogWl9CVUZf RVJST1IgICAgICgtNSkgKi8KLSJpbmNvbXBhdGlibGUgdmVyc2lvbiIsLyogWl9WRVJTSU9OX0VS Uk9SICgtNikgKi8KLSIifTsKK3pfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsK KyAgICAoel9jb25zdCBjaGFyICopIm5lZWQgZGljdGlvbmFyeSIsICAgICAvKiBaX05FRURfRElD VCAgICAgICAyICAqLworICAgICh6X2NvbnN0IGNoYXIgKikic3RyZWFtIGVuZCIsICAgICAgICAg IC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovCisgICAgKHpfY29uc3QgY2hhciAqKSIiLCAgICAg ICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi8KKyAgICAoel9jb25zdCBj aGFyICopImZpbGUgZXJyb3IiLCAgICAgICAgICAvKiBaX0VSUk5PICAgICAgICAgKC0xKSAqLwor ICAgICh6X2NvbnN0IGNoYXIgKikic3RyZWFtIGVycm9yIiwgICAgICAgIC8qIFpfU1RSRUFNX0VS Uk9SICAoLTIpICovCisgICAgKHpfY29uc3QgY2hhciAqKSJkYXRhIGVycm9yIiwgICAgICAgICAg LyogWl9EQVRBX0VSUk9SICAgICgtMykgKi8KKyAgICAoel9jb25zdCBjaGFyICopImluc3VmZmlj aWVudCBtZW1vcnkiLCAvKiBaX01FTV9FUlJPUiAgICAgKC00KSAqLworICAgICh6X2NvbnN0IGNo YXIgKikiYnVmZmVyIGVycm9yIiwgICAgICAgIC8qIFpfQlVGX0VSUk9SICAgICAoLTUpICovCisg ICAgKHpfY29uc3QgY2hhciAqKSJpbmNvbXBhdGlibGUgdmVyc2lvbiIsLyogWl9WRVJTSU9OX0VS Uk9SICgtNikgKi8KKyAgICAoel9jb25zdCBjaGFyICopIiIKK307CiAKIAogY29uc3QgY2hhciAq IFpFWFBPUlQgemxpYlZlcnNpb24oKQpAQCAtMzgsMzEgKzM0LDMxIEBACiAgICAgdUxvbmcgZmxh Z3M7CiAKICAgICBmbGFncyA9IDA7Ci0gICAgc3dpdGNoIChzaXplb2YodUludCkpIHsKKyAgICBz d2l0Y2ggKChpbnQpKHNpemVvZih1SW50KSkpIHsKICAgICBjYXNlIDI6ICAgICBicmVhazsKICAg ICBjYXNlIDQ6ICAgICBmbGFncyArPSAxOyAgICAgYnJlYWs7CiAgICAgY2FzZSA4OiAgICAgZmxh Z3MgKz0gMjsgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6ICAgIGZsYWdzICs9IDM7CiAgICAgfQot ICAgIHN3aXRjaCAoc2l6ZW9mKHVMb25nKSkgeworICAgIHN3aXRjaCAoKGludCkoc2l6ZW9mKHVM b25nKSkpIHsKICAgICBjYXNlIDI6ICAgICBicmVhazsKICAgICBjYXNlIDQ6ICAgICBmbGFncyAr PSAxIDw8IDI7ICAgICAgICBicmVhazsKICAgICBjYXNlIDg6ICAgICBmbGFncyArPSAyIDw8IDI7 ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzIDw8IDI7CiAgICAgfQot ICAgIHN3aXRjaCAoc2l6ZW9mKHZvaWRwZikpIHsKKyAgICBzd2l0Y2ggKChpbnQpKHNpemVvZih2 b2lkcGYpKSkgewogICAgIGNhc2UgMjogICAgIGJyZWFrOwogICAgIGNhc2UgNDogICAgIGZsYWdz ICs9IDEgPDwgNDsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgODogICAgIGZsYWdzICs9IDIgPDwg NDsgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6ICAgIGZsYWdzICs9IDMgPDwgNDsKICAgICB9 Ci0gICAgc3dpdGNoIChzaXplb2Yoel9vZmZfdCkpIHsKKyAgICBzd2l0Y2ggKChpbnQpKHNpemVv Zih6X29mZl90KSkpIHsKICAgICBjYXNlIDI6ICAgICBicmVhazsKICAgICBjYXNlIDQ6ICAgICBm bGFncyArPSAxIDw8IDY7ICAgICAgICBicmVhazsKICAgICBjYXNlIDg6ICAgICBmbGFncyArPSAy IDw8IDY7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzIDw8IDY7CiAg ICAgfQotI2lmZGVmIERFQlVHCisjaWZkZWYgWkxJQl9ERUJVRwogICAgIGZsYWdzICs9IDEgPDwg ODsKICNlbmRpZgogI2lmIGRlZmluZWQoQVNNVikgfHwgZGVmaW5lZChBU01JTkYpCkBAIC03OCw1 MiArNzQsNTIgQEAKICAgICBmbGFncyArPSAxIDw8IDEzOwogI2VuZGlmCiAjaWZkZWYgTk9fR1pD T01QUkVTUwotICAgIGZsYWdzICs9IDEgPDwgMTY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMTY7CiAj ZW5kaWYKICNpZmRlZiBOT19HWklQCi0gICAgZmxhZ3MgKz0gMSA8PCAxNzsKKyAgICBmbGFncyAr PSAxTCA8PCAxNzsKICNlbmRpZgogI2lmZGVmIFBLWklQX0JVR19XT1JLQVJPVU5ECi0gICAgZmxh Z3MgKz0gMSA8PCAyMDsKKyAgICBmbGFncyArPSAxTCA8PCAyMDsKICNlbmRpZgogI2lmZGVmIEZB U1RFU1QKLSAgICBmbGFncyArPSAxIDw8IDIxOworICAgIGZsYWdzICs9IDFMIDw8IDIxOwogI2Vu ZGlmCi0jaWZkZWYgU1REQworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1RE QVJHX0gpCiAjICBpZmRlZiBOT192c25wcmludGYKLSAgICAgICAgZmxhZ3MgKz0gMSA8PCAyNTsK KyAgICBmbGFncyArPSAxTCA8PCAyNTsKICMgICAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAg ICAgICAgZmxhZ3MgKz0gMSA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5k aWYKICMgIGVsc2UKICMgICAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdz ICs9IDEgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbmRp ZgogI2Vsc2UKLSAgICAgICAgZmxhZ3MgKz0gMSA8PCAyNDsKKyAgICBmbGFncyArPSAxTCA8PCAy NDsKICMgIGlmZGVmIE5PX3NucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDEgPDwgMjU7CisgICAg ZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICAgICAg ZmxhZ3MgKz0gMSA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMg IGVsc2UKICMgICAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMSA8 PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5k aWYKICAgICByZXR1cm4gZmxhZ3M7CiB9CiAKLSNpZmRlZiBERUJVRwotCisjaWZkZWYgWkxJQl9E RUJVRworI2luY2x1ZGUgPHN0ZGxpYi5oPgogIyAgaWZuZGVmIHZlcmJvc2UKICMgICAgZGVmaW5l IHZlcmJvc2UgMAogIyAgZW5kaWYKLWludCB6X3ZlcmJvc2UgPSB2ZXJib3NlOworaW50IFpMSUJf SU5URVJOQUwgel92ZXJib3NlID0gdmVyYm9zZTsKIAotdm9pZCB6X2Vycm9yIChtKQordm9pZCBa TElCX0lOVEVSTkFMIHpfZXJyb3IgKG0pCiAgICAgY2hhciAqbTsKIHsKICAgICBmcHJpbnRmKHN0 ZGVyciwgIiVzXG4iLCBtKTsKQEAgLTE0MSwxMyArMTM3LDE2IEBACiB9CiAKICNpZiBkZWZpbmVk KF9XSU4zMl9XQ0UpCi0gICAgLyogZG9lcyBub3QgZXhpc3Qgb24gV0NFICovCisgICAgLyogVGhl IE1pY3Jvc29mdCBDIFJ1bi1UaW1lIExpYnJhcnkgZm9yIFdpbmRvd3MgQ0UgZG9lc24ndCBoYXZl CisgICAgICogZXJybm8uICBXZSBkZWZpbmUgaXQgYXMgYSBnbG9iYWwgdmFyaWFibGUgdG8gc2lt cGxpZnkgcG9ydGluZy4KKyAgICAgKiBJdHMgdmFsdWUgaXMgYWx3YXlzIDAgYW5kIHNob3VsZCBu b3QgYmUgdXNlZC4KKyAgICAgKi8KICAgICBpbnQgZXJybm8gPSAwOwogI2VuZGlmCiAKICNpZm5k ZWYgSEFWRV9NRU1DUFkKIAotdm9pZCB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgbGVuKQordm9pZCBa TElCX0lOVEVSTkFMIHptZW1jcHkoZGVzdCwgc291cmNlLCBsZW4pCiAgICAgQnl0ZWYqIGRlc3Q7 CiAgICAgY29uc3QgQnl0ZWYqIHNvdXJjZTsKICAgICB1SW50ICBsZW47CkBAIC0xNTgsNyArMTU3 LDcgQEAKICAgICB9IHdoaWxlICgtLWxlbiAhPSAwKTsKIH0KIAotaW50IHptZW1jbXAoczEsIHMy LCBsZW4pCitpbnQgWkxJQl9JTlRFUk5BTCB6bWVtY21wKHMxLCBzMiwgbGVuKQogICAgIGNvbnN0 IEJ5dGVmKiBzMTsKICAgICBjb25zdCBCeXRlZiogczI7CiAgICAgdUludCAgbGVuOwpAQCAtMTcx LDcgKzE3MCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgem1lbXplcm8oZGVzdCwgbGVu KQordm9pZCBaTElCX0lOVEVSTkFMIHptZW16ZXJvKGRlc3QsIGxlbikKICAgICBCeXRlZiogZGVz dDsKICAgICB1SW50ICBsZW47CiB7CkBAIC0xODIsNiArMTgxLDcgQEAKIH0KICNlbmRpZgogCisj aWZuZGVmIFpfU09MTwogCiAjaWZkZWYgU1lTMTZCSVQKIApAQCAtMjE0LDExICsyMTQsMTMgQEAK ICAqIGEgcHJvdGVjdGVkIHN5c3RlbSBsaWtlIE9TLzIuIFVzZSBNaWNyb3NvZnQgQyBpbnN0ZWFk LgogICovCiAKLXZvaWRwZiB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywg dW5zaWduZWQgc2l6ZSkKK3ZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgKHZvaWRwZiBvcGFx dWUsIHVuc2lnbmVkIGl0ZW1zLCB1bnNpZ25lZCBzaXplKQogewotICAgIHZvaWRwZiBidWYgPSBv cGFxdWU7IC8qIGp1c3QgdG8gbWFrZSBzb21lIGNvbXBpbGVycyBoYXBweSAqLworICAgIHZvaWRw ZiBidWY7CiAgICAgdWxnIGJzaXplID0gKHVsZylpdGVtcypzaXplOwogCisgICAgKHZvaWQpb3Bh cXVlOworCiAgICAgLyogSWYgd2UgYWxsb2NhdGUgbGVzcyB0aGFuIDY1NTIwIGJ5dGVzLCB3ZSBh c3N1bWUgdGhhdCBmYXJtYWxsb2MKICAgICAgKiB3aWxsIHJldHVybiBhIHVzYWJsZSBwb2ludGVy IHdoaWNoIGRvZXNuJ3QgaGF2ZSB0byBiZSBub3JtYWxpemVkLgogICAgICAqLwpAQCAtMjM4LDkg KzI0MCwxMiBAQAogICAgIHJldHVybiBidWY7CiB9CiAKLXZvaWQgIHpjZnJlZSAodm9pZHBmIG9w YXF1ZSwgdm9pZHBmIHB0cikKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgKHZvaWRwZiBvcGFx dWUsIHZvaWRwZiBwdHIpCiB7CiAgICAgaW50IG47CisKKyAgICAodm9pZClvcGFxdWU7CisKICAg ICBpZiAoKih1c2gqKSZwdHIgIT0gMCkgeyAvKiBvYmplY3QgPCA2NEsgKi8KICAgICAgICAgZmFy ZnJlZShwdHIpOwogICAgICAgICByZXR1cm47CkBAIC0yNTYsNyArMjYxLDYgQEAKICAgICAgICAg bmV4dF9wdHItLTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwdHIgPSBvcGFxdWU7IC8q IGp1c3QgdG8gbWFrZSBzb21lIGNvbXBpbGVycyBoYXBweSAqLwogICAgIEFzc2VydCgwLCAiemNm cmVlOiBwdHIgbm90IGZvdW5kIik7CiB9CiAKQEAgLTI3MywxNSArMjc3LDE1IEBACiAjICBkZWZp bmUgX2hmcmVlICAgaGZyZWUKICNlbmRpZgogCi12b2lkcGYgemNhbGxvYyAodm9pZHBmIG9wYXF1 ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6 Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1SW50IGl0ZW1zLCB1SW50IHNpemUpCiB7Ci0gICAgaWYg KG9wYXF1ZSkgb3BhcXVlID0gMDsgLyogdG8gbWFrZSBjb21waWxlciBoYXBweSAqLworICAgICh2 b2lkKW9wYXF1ZTsKICAgICByZXR1cm4gX2hhbGxvYygobG9uZylpdGVtcywgc2l6ZSk7CiB9CiAK LXZvaWQgIHpjZnJlZSAodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKK3ZvaWQgWkxJQl9JTlRF Uk5BTCB6Y2ZyZWUgKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCiB7Ci0gICAgaWYgKG9wYXF1 ZSkgb3BhcXVlID0gMDsgLyogdG8gbWFrZSBjb21waWxlciBoYXBweSAqLworICAgICh2b2lkKW9w YXF1ZTsKICAgICBfaGZyZWUocHRyKTsKIH0KIApAQCAtMjk4LDIyICszMDIsMjQgQEAKIGV4dGVy biB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7CiAjZW5kaWYKIAotdm9pZHBmIHpjYWxs b2MgKG9wYXF1ZSwgaXRlbXMsIHNpemUpCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIChv cGFxdWUsIGl0ZW1zLCBzaXplKQogICAgIHZvaWRwZiBvcGFxdWU7CiAgICAgdW5zaWduZWQgaXRl bXM7CiAgICAgdW5zaWduZWQgc2l6ZTsKIHsKLSAgICBpZiAob3BhcXVlKSBpdGVtcyArPSBzaXpl IC0gc2l6ZTsgLyogbWFrZSBjb21waWxlciBoYXBweSAqLworICAgICh2b2lkKW9wYXF1ZTsKICAg ICByZXR1cm4gc2l6ZW9mKHVJbnQpID4gMiA/ICh2b2lkcGYpbWFsbG9jKGl0ZW1zICogc2l6ZSkg OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWRwZiljYWxsb2MoaXRlbXMsIHNp emUpOwogfQogCi12b2lkICB6Y2ZyZWUgKG9wYXF1ZSwgcHRyKQordm9pZCBaTElCX0lOVEVSTkFM IHpjZnJlZSAob3BhcXVlLCBwdHIpCiAgICAgdm9pZHBmIG9wYXF1ZTsKICAgICB2b2lkcGYgcHRy OwogeworICAgICh2b2lkKW9wYXF1ZTsKICAgICBmcmVlKHB0cik7Ci0gICAgaWYgKG9wYXF1ZSkg cmV0dXJuOyAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCiB9CiAKICNlbmRpZiAvKiBNWV9aQ0FM TE9DICovCisKKyNlbmRpZiAvKiAhWl9TT0xPICovCmRpZmYgLXIgYTA1NzhjNzk4ZTEwIC1yIDM3 YjQ0NmNjOTdmOSBzeXMvc3JjL2NtZC9ncy96bGliL3p1dGlsLmgKLS0tIGEvc3lzL3NyYy9jbWQv Z3MvemxpYi96dXRpbC5oCVdlZCBNYXkgMjcgMDA6MDk6NDYgMjAyMCArMDIwMAorKysgYi9zeXMv c3JjL2NtZC9ncy96bGliL3p1dGlsLmgJV2VkIE1heSAyNyAxNzozOTozNyAyMDIwIC0wMzAwCkBA IC0xLDUgKzEsNSBAQAogLyogenV0aWwuaCAtLSBpbnRlcm5hbCBpbnRlcmZhY2UgYW5kIGNvbmZp Z3VyYXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5 NS0yMDAzIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxNiBKZWFu LWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRp b24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCwy OSArOCwzNyBAQAogICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25s eSB1c2UgemxpYi5oLgogICovCiAKLS8qIEAoIykgJElkOiB6dXRpbC5oLHYgMS4xLjEuMSAyMDA1 LzA0LzI0IDIxOjM5OjM4IGdpbGVzIEV4cCAkICovCisvKiBAKCMpICRJZCQgKi8KIAogI2lmbmRl ZiBaVVRJTF9ICiAjZGVmaW5lIFpVVElMX0gKIAotI2RlZmluZSBaTElCX0lOVEVSTkFMCisjaWZk ZWYgSEFWRV9ISURERU4KKyMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZp c2liaWxpdHkgKCJoaWRkZW4iKSkpCisjZWxzZQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKKyNl bmRpZgorCiAjaW5jbHVkZSAiemxpYi5oIgogCi0jaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3Rk ZGVmLmg+CisjaWYgZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICBpZiAhKGRl ZmluZWQoX1dJTjMyX1dDRSkgJiYgZGVmaW5lZChfTVNDX1ZFUikpCisjICAgIGluY2x1ZGUgPHN0 ZGRlZi5oPgorIyAgZW5kaWYKICMgIGluY2x1ZGUgPHN0cmluZy5oPgogIyAgaW5jbHVkZSA8c3Rk bGliLmg+CiAjZW5kaWYKLSNpZmRlZiBOT19FUlJOT19ICi0gICAgZXh0ZXJuIGludCBlcnJubzsK LSNlbHNlCi0jICAgaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIFpfU09MTworICAgdHlwZWRl ZiBsb25nIHB0cmRpZmZfdDsgIC8qIGd1ZXNzIC0tIHdpbGwgYmUgY2F1Z2h0IGlmIGd1ZXNzIGlz IHdyb25nICovCiAjZW5kaWYKIAogI2lmbmRlZiBsb2NhbAogIyAgZGVmaW5lIGxvY2FsIHN0YXRp YwogI2VuZGlmCi0vKiBjb21waWxlIHdpdGggLURsb2NhbCBpZiB5b3VyIGRlYnVnZ2VyIGNhbid0 IGZpbmQgc3RhdGljIHN5bWJvbHMgKi8KKy8qIHNpbmNlICJzdGF0aWMiIGlzIHVzZWQgdG8gbWVh biB0d28gY29tcGxldGVseSBkaWZmZXJlbnQgdGhpbmdzIGluIEMsIHdlCisgICBkZWZpbmUgImxv Y2FsIiBmb3IgdGhlIG5vbi1zdGF0aWMgbWVhbmluZyBvZiAic3RhdGljIiwgZm9yIHJlYWRhYmls aXR5CisgICAoY29tcGlsZSB3aXRoIC1EbG9jYWwgaWYgeW91ciBkZWJ1Z2dlciBjYW4ndCBmaW5k IHN0YXRpYyBzeW1ib2xzKSAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaDsKIHR5cGVk ZWYgdWNoIEZBUiB1Y2hmOwpAQCAtMzgsMTMgKzQ2LDEzIEBACiB0eXBlZGVmIHVzaCBGQVIgdXNo ZjsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOwogCi1leHRlcm4gY29uc3QgY2hhciAqIGNv bnN0IHpfZXJybXNnWzEwXTsgLyogaW5kZXhlZCBieSAyLXpsaWJfZXJyb3IgKi8KK2V4dGVybiB6 X2NvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vy cm9yICovCiAvKiAoc2l6ZSBnaXZlbiB0byBhdm9pZCBzaWxseSB3YXJuaW5ncyB3aXRoIFZpc3Vh bCBDKyspICovCiAKICNkZWZpbmUgRVJSX01TRyhlcnIpIHpfZXJybXNnW1pfTkVFRF9ESUNULShl cnIpXQogCiAjZGVmaW5lIEVSUl9SRVRVUk4oc3RybSxlcnIpIFwKLSAgcmV0dXJuIChzdHJtLT5t c2cgPSAoY2hhciopRVJSX01TRyhlcnIpLCAoZXJyKSkKKyAgcmV0dXJuIChzdHJtLT5tc2cgPSBF UlJfTVNHKGVyciksIChlcnIpKQogLyogVG8gYmUgdXNlZCBvbmx5IHdoZW4gdGhlIHN0YXRlIGlz IGtub3duIHRvIGJlIHZhbGlkICovCiAKICAgICAgICAgLyogY29tbW9uIGNvbnN0YW50cyAqLwpA QCAtNzYsNjcgKzg0LDkwIEBACiAKICNpZiBkZWZpbmVkKE1TRE9TKSB8fCAoZGVmaW5lZChXSU5E T1dTKSAmJiAhZGVmaW5lZChXSU4zMikpCiAjICBkZWZpbmUgT1NfQ09ERSAgMHgwMAotIyAgaWYg ZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgICAgaWYoX19T VERDX18gPT0gMSkgJiYgKGRlZmluZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09NUEFDVF9f KSkKLSAgICAgICAvKiBBbGxvdyBjb21waWxhdGlvbiB3aXRoIEFOU0kga2V5d29yZHMgb25seSBl bmFibGVkICovCi0gICAgICAgdm9pZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKLSAg ICAgICB2b2lkICpfQ2RlY2wgZmFybWFsbG9jKCB1bnNpZ25lZCBsb25nIG5ieXRlcyApOwotIyAg ICBlbHNlCi0jICAgICAgaW5jbHVkZSA8YWxsb2MuaD4KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAg aWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKKyMgICAgICBp ZiAoX19TVERDX18gPT0gMSkgJiYgKGRlZmluZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09N UEFDVF9fKSkKKyAgICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3Jk cyBvbmx5IGVuYWJsZWQgKi8KKyAgICAgICAgIHZvaWQgX0NkZWNsIGZhcmZyZWUoIHZvaWQgKmJs b2NrICk7CisgICAgICAgICB2b2lkICpfQ2RlY2wgZmFybWFsbG9jKCB1bnNpZ25lZCBsb25nIG5i eXRlcyApOworIyAgICAgIGVsc2UKKyMgICAgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICAgICAg ZW5kaWYKKyMgICAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KKyMgICAgICBpbmNsdWRlIDxtYWxs b2MuaD4KICMgICAgZW5kaWYKLSMgIGVsc2UgLyogTVNDIG9yIERKR1BQICovCisjICBlbmRpZgor I2VuZGlmCisKKyNpZmRlZiBBTUlHQQorIyAgZGVmaW5lIE9TX0NPREUgIDEKKyNlbmRpZgorCisj aWYgZGVmaW5lZChWQVhDKSB8fCBkZWZpbmVkKFZNUykKKyMgIGRlZmluZSBPU19DT0RFICAyCisj ICBkZWZpbmUgRl9PUEVOKG5hbWUsIG1vZGUpIFwKKyAgICAgZm9wZW4oKG5hbWUpLCAobW9kZSks ICJtYmM9NjAiLCAiY3R4PXN0bSIsICJyZm09Zml4IiwgIm1ycz01MTIiKQorI2VuZGlmCisKKyNp ZmRlZiBfXzM3MF9fCisjICBpZiBfX1RBUkdFVF9MSUJfXyA8IDB4MjAwMDAwMDAKKyMgICAgZGVm aW5lIE9TX0NPREUgNAorIyAgZWxpZiBfX1RBUkdFVF9MSUJfXyA8IDB4NDAwMDAwMDAKKyMgICAg ZGVmaW5lIE9TX0NPREUgMTEKKyMgIGVsc2UKKyMgICAgZGVmaW5lIE9TX0NPREUgOAorIyAgZW5k aWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBVEFSSSkgfHwgZGVmaW5lZChhdGFyaXN0KQorIyAg ZGVmaW5lIE9TX0NPREUgIDUKKyNlbmRpZgorCisjaWZkZWYgT1MyCisjICBkZWZpbmUgT1NfQ09E RSAgNgorIyAgaWYgZGVmaW5lZChNX0k4NikgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgICBpbmNs dWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIEFNSUdBCi0jICBkZWZp bmUgT1NfQ09ERSAgMHgwMQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFZBWEMpIHx8IGRlZmluZWQo Vk1TKQotIyAgZGVmaW5lIE9TX0NPREUgIDB4MDIKLSMgIGRlZmluZSBGX09QRU4obmFtZSwgbW9k ZSkgXAotICAgICBmb3BlbigobmFtZSksIChtb2RlKSwgIm1iYz02MCIsICJjdHg9c3RtIiwgInJm bT1maXgiLCAibXJzPTUxMiIpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQVRBUkkpIHx8IGRlZmlu ZWQoYXRhcmlzdCkKLSMgIGRlZmluZSBPU19DT0RFICAweDA1Ci0jZW5kaWYKLQotI2lmZGVmIE9T MgotIyAgZGVmaW5lIE9TX0NPREUgIDB4MDYKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChNQUNPUykg fHwgZGVmaW5lZChUQVJHRVRfT1NfTUFDKQotIyAgZGVmaW5lIE9TX0NPREUgIDB4MDcKLSMgIGlm IGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29z ICE9IF9fd2luMzJfb3MKLSMgICAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCi0j ICBlbHNlCi0jICAgIGlmbmRlZiBmZG9wZW4KLSMgICAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUp IE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KKyMgIGRlZmluZSBPU19DT0RFICA3CisjICBpZm5kZWYg Wl9TT0xPCisjICAgIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVf b3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKKyMgICAgICBpbmNsdWRlIDx1bml4Lmg+IC8q IGZvciBmZG9wZW4gKi8KKyMgICAgZWxzZQorIyAgICAgIGlmbmRlZiBmZG9wZW4KKyMgICAgICAg IGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgICAgIGVu ZGlmCiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBUT1BTMjAKLSMgIGRl ZmluZSBPU19DT0RFICAweDBhCisjaWZkZWYgX19hY29ybgorIyAgZGVmaW5lIE9TX0NPREUgMTMK ICNlbmRpZgogCi0jaWZkZWYgV0lOMzIKLSMgIGlmbmRlZiBfX0NZR1dJTl9fICAvKiBDeWd3aW4g aXMgVW5peCwgbm90IFdpbjMyICovCi0jICAgIGRlZmluZSBPU19DT0RFICAweDBiCi0jICBlbmRp ZgorI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBkZWZpbmUg T1NfQ09ERSAgMTAKICNlbmRpZgogCi0jaWZkZWYgX181MFNFUklFUyAvKiBQcmltZS9QUklNT1Mg Ki8KLSMgIGRlZmluZSBPU19DT0RFICAweDBmCisjaWZkZWYgX0JFT1NfCisjICBkZWZpbmUgT1Nf Q09ERSAgMTYKKyNlbmRpZgorCisjaWZkZWYgX19UT1NfT1M0MDBfXworIyAgZGVmaW5lIE9TX0NP REUgMTgKKyNlbmRpZgorCisjaWZkZWYgX19BUFBMRV9fCisjICBkZWZpbmUgT1NfQ09ERSAxOQog I2VuZGlmCiAKICNpZiBkZWZpbmVkKF9CRU9TXykgfHwgZGVmaW5lZChSSVNDT1MpCiAjICBkZWZp bmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KICNlbmRpZgogCi0jaWYg KGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+IDYwMCkpCisjaWYgKGRlZmluZWQoX01T Q19WRVIpICYmIChfTVNDX1ZFUiA+IDYwMCkpICYmICFkZWZpbmVkIF9fSU5URVJJWAogIyAgaWYg ZGVmaW5lZChfV0lOMzJfV0NFKQogIyAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyog Tm8gZmRvcGVuKCkgKi8KICMgICAgaWZuZGVmIF9QVFJESUZGX1RfREVGSU5FRApAQCAtMTQ4LDEw ICsxNzksMjMgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19f KSAmJiAhZGVmaW5lZChNU0RPUykKKyAgI3ByYWdtYSB3YXJuIC04MDA0CisgICNwcmFnbWEgd2Fy biAtODAwOAorICAjcHJhZ21hIHdhcm4gLTgwNjYKKyNlbmRpZgorCisvKiBwcm92aWRlIHByb3Rv dHlwZXMgZm9yIHRoZXNlIHdoZW4gYnVpbGRpbmcgemxpYiB3aXRob3V0IExGUyAqLworI2lmICFk ZWZpbmVkKF9XSU4zMikgJiYgXAorICAgICghZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSB8 fCBfTEZTNjRfTEFSR0VGSUxFLTAgPT0gMCkKKyAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRs ZXIzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworICAgIFpFWFRFUk4g dUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkp OworI2VuZGlmCisKICAgICAgICAgLyogY29tbW9uIGRlZmF1bHRzICovCiAKICNpZm5kZWYgT1Nf Q09ERQotIyAgZGVmaW5lIE9TX0NPREUgIDB4MDMgIC8qIGFzc3VtZSBVbml4ICovCisjICBkZWZp bmUgT1NfQ09ERSAgMyAgICAgLyogYXNzdW1lIFVuaXggKi8KICNlbmRpZgogCiAjaWZuZGVmIEZf T1BFTgpAQCAtMTYwLDQ5ICsyMDQsNyBAQAogCiAgICAgICAgICAvKiBmdW5jdGlvbnMgKi8KIAot I2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJPQ19f ID49IDB4NTUwKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZFX1ZT TlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19DWUdXSU5fXykKLSMgIGlm bmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVuZGlm Ci0jZW5kaWYKLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgIGlmZGVmIE1TRE9TCi0gICAgIC8q IHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAot ICAgICAgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLwotIyAgICBk ZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgX19UVVJCT0NfXwotIyAgICBk ZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgV0lOMzIKLSAgICAgLyogSW4g V2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50 Zi4gKi8KLSMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmlu dGYpCi0jICAgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCi0jICAgIGVuZGlmCi0jICBl bmRpZgotIyAgaWZkZWYgX19TQVNDCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVuZGlm Ci0jZW5kaWYKLSNpZmRlZiBWTVMKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0j aWZkZWYgSEFWRV9TVFJFUlJPUgotIyAgaWZuZGVmIFZNUwotICAgICBleHRlcm4gY2hhciAqc3Ry ZXJyb3IgT0YoKGludCkpOwotIyAgZW5kaWYKLSMgIGRlZmluZSB6c3RyZXJyb3IoZXJybnVtKSBz dHJlcnJvcihlcnJudW0pCi0jZWxzZQotIyAgZGVmaW5lIHpzdHJlcnJvcihlcnJudW0pICIiCi0j ZW5kaWYKLQotI2lmIGRlZmluZWQocHlyKQorI2lmIGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKFpf U09MTykKICMgIGRlZmluZSBOT19NRU1DUFkKICNlbmRpZgogI2lmIGRlZmluZWQoU01BTExfTUVE SVVNKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19TQ19fKQpAQCAtMjI2LDE2 ICsyMjgsMTYgQEAKICMgICAgZGVmaW5lIHptZW16ZXJvKGRlc3QsIGxlbikgbWVtc2V0KGRlc3Qs IDAsIGxlbikKICMgIGVuZGlmCiAjZWxzZQotICAgZXh0ZXJuIHZvaWQgem1lbWNweSAgT0YoKEJ5 dGVmKiBkZXN0LCBjb25zdCBCeXRlZiogc291cmNlLCB1SW50IGxlbikpOwotICAgZXh0ZXJuIGlu dCAgem1lbWNtcCAgT0YoKGNvbnN0IEJ5dGVmKiBzMSwgY29uc3QgQnl0ZWYqIHMyLCB1SW50IGxl bikpOwotICAgZXh0ZXJuIHZvaWQgem1lbXplcm8gT0YoKEJ5dGVmKiBkZXN0LCB1SW50IGxlbikp OworICAgdm9pZCBaTElCX0lOVEVSTkFMIHptZW1jcHkgT0YoKEJ5dGVmKiBkZXN0LCBjb25zdCBC eXRlZiogc291cmNlLCB1SW50IGxlbikpOworICAgaW50IFpMSUJfSU5URVJOQUwgem1lbWNtcCBP RigoY29uc3QgQnl0ZWYqIHMxLCBjb25zdCBCeXRlZiogczIsIHVJbnQgbGVuKSk7CisgICB2b2lk IFpMSUJfSU5URVJOQUwgem1lbXplcm8gT0YoKEJ5dGVmKiBkZXN0LCB1SW50IGxlbikpOwogI2Vu ZGlmCiAKIC8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBa TElCX0RFQlVHCiAjICBpbmNsdWRlIDxzdGRpby5oPgotICAgZXh0ZXJuIGludCB6X3ZlcmJvc2U7 Ci0gICBleHRlcm4gdm9pZCB6X2Vycm9yICAgIE9GKChjaGFyICptKSk7CisgICBleHRlcm4gaW50 IFpMSUJfSU5URVJOQUwgel92ZXJib3NlOworICAgZXh0ZXJuIHZvaWQgWkxJQl9JTlRFUk5BTCB6 X2Vycm9yIE9GKChjaGFyICptKSk7CiAjICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShj b25kKSkgel9lcnJvcihtc2cpO30KICMgIGRlZmluZSBUcmFjZSh4KSB7aWYgKHpfdmVyYm9zZT49 MCkgZnByaW50ZiB4IDt9CiAjICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAoel92ZXJib3NlPjApIGZw cmludGYgeCA7fQpAQCAtMjUxLDEzICsyNTMsMTkgQEAKICMgIGRlZmluZSBUcmFjZWN2KGMseCkK ICNlbmRpZgogCi0KLXZvaWRwZiB6Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBp dGVtcywgdW5zaWduZWQgc2l6ZSkpOwotdm9pZCAgIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUs IHZvaWRwZiBwdHIpKTsKKyNpZm5kZWYgWl9TT0xPCisgICB2b2lkcGYgWkxJQl9JTlRFUk5BTCB6 Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUpKTsKKyAgIHZvaWQgWkxJQl9JTlRF Uk5BTCB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisjZW5kaWYKIAog I2RlZmluZSBaQUxMT0Moc3RybSwgaXRlbXMsIHNpemUpIFwKICAgICAgICAgICAgKCooKHN0cm0p LT56YWxsb2MpKSgoc3RybSktPm9wYXF1ZSwgKGl0ZW1zKSwgKHNpemUpKQogI2RlZmluZSBaRlJF RShzdHJtLCBhZGRyKSAgKCooKHN0cm0pLT56ZnJlZSkpKChzdHJtKS0+b3BhcXVlLCAodm9pZHBm KShhZGRyKSkKICNkZWZpbmUgVFJZX0ZSRUUocywgcCkge2lmIChwKSBaRlJFRShzLCBwKTt9CiAK Ky8qIFJldmVyc2UgdGhlIGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCisjZGVmaW5lIFpTV0FQ MzIocSkgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAor ICAgICAgICAgICAgICAgICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYp IDw8IDI0KSkKKwogI2VuZGlmIC8qIFpVVElMX0ggKi8K --00000000000081486005a6a86c78--