Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whwuM-000VN9-2C for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 22:07:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whwuL-00EsuX-0M for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jul 2026 22:07:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whwuK-00EsuG-0v for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 22:07:49 +0000 Received: from mail-yw1-x112b.google.com ([2607:f8b0:4864:20::112b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whwuE-00000000Njg-17Zi for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 22:07:48 +0000 Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-81062fdeaf5so22197847b3.0 for ; Thu, 09 Jul 2026 15:07:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783634862; x=1784239662; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:from:to:cc :subject:date:message-id:reply-to:content-type; bh=irbJ5VRSoBWRdWpWfZx3rP3H9NPImUiW5FF1RzPZCGA=; b=ffJFSZCjSgueNfWgm+fmUeRr1xnRsHdai+SrY197K43x2JtfGavAz9uZSheMZG3ZZl KOwFmQPdH5szNVIzD9lG9i6qk4yaS0MotraiMniBiF488Qlqcx4umMyIIPIh1s4Ek5P4 za8kMNN8B48Cq6UmmLlZ0p7hnDzRck4TqhqxdY3xdsTXPvw2fLa5J0pEM2YwmRavwNxC KlFVZ4bBi9c3vp0cCMhX5I60JxSc0Hj/4SbdMBtcJKZYig3LQ8lJHq5gk/1lKVVm9GSQ mRDPqousF56AOfRmd5u1xAbz77aOshGOlSVn9sLMs5YnWjdwPczU8rxR9rYnPQoxsYF6 9EIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783634862; x=1784239662; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=irbJ5VRSoBWRdWpWfZx3rP3H9NPImUiW5FF1RzPZCGA=; b=ApNYdiJTlNmVXOyQ3LK6RQ3LX8I/WffCIMSqNDdpBGWoLEPTW9Iaqs+FwdQDx99Cra UCiY6KCH2h/t/PDlAfANUqMPG2As9ujYDsJrWGQYac59ien2CCDbaj4eNfpoRWQb0fdO nT2ncXKnB0RppeRNqqAJBH8Gz/2JcttM3IE2z5NvfrLWXaAg+Ulyx/6O0KHqG/RhJlr1 31/AvP1gKLPhdA4AYqwhjC+D3xSPrb+w2rOnBPnVtp+CHFVCcta4TMcK8um+Ls+xSRmo UvGtXYmd/RorNjJoAaF8ov46Si3vaCZSgSkgtXOwlzghp2nNSU6cN1xsgMzWXP++Bjoe kr0g== X-Forwarded-Encrypted: i=1; AHgh+RoadTXtMPeFnT/T6n+eaSyhAQLxaUMuXa7Fko/YgqFPO5fOikwbPCtbynCbEgxPt2f4YfXqCK4Ub5m6GfRk@lists.postgresql.org X-Gm-Message-State: AOJu0YwTP8p/LoHOBSnPfHEJGPUmFPh89d4yMJS+wNmM6+QyM8f11UPH SFRWDzIxKZIUX8xmClASEXYNU1X++XT0RJBou/R5QmUSThGlfbVeA339 X-Gm-Gg: AfdE7ck1O26cWvGmnv5nFUfAPOnfc6em4/hpqwoCGCjFSRpVqHbkoVpA5s366st5Fe3 m3B7+pp7ZsKo+oWYyyD/f4WR2FNP/GTzm66OzeqBoJHbi7ncGKkYxoMfWVQDymKtBAzMxUh8WwJ dHsqpZSFBPkKdxL2UkzDwXkRwACEh/klebuAzsaICFTucXyH6KYRvq6a41pdjmANGYDXh5bchaV I2wmNjLHV5ocwdY2eqaBy7wPlzVTXpjffi/GeuMRvGXXZK+RbuOn0rIN4xLJEsKlaHz8suGaZuB /ZrxeWBbn7LBIFkJ75A25zwrlBWVP9mDkmN4BuQdCipkHnoojc30DCxk2ahwGkxYGt0mtKRbgz6 zSfO/5diSlDSK4SXINys6OkfPy94s0GMT29pYf+5m5RDM2/A3xKXyJw9MznN5jKZC9Uln0WkLBN UIi765nAUqxmWxxGozySy7CUHCoW4OhfoVDlDRvpPC2/haSqIWnm3hUEGnRjllNjlj7ycwmAb1v NIaKy2Qku6Al4TwW6LsvvncmA== X-Received: by 2002:a05:690c:e20e:20b0:80e:3b:17 with SMTP id 00721157ae682-81e7bc8782bmr6665197b3.26.1783634861669; Thu, 09 Jul 2026 15:07:41 -0700 (PDT) Received: from ?IPV6:2600:1700:8952:80:6917:4d0a:ddec:9c89? ([2600:1700:8952:80:6917:4d0a:ddec:9c89]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81e6be9834dsm30796087b3.9.2026.07.09.15.07.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 09 Jul 2026 15:07:40 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------fr8ceRE6XeXSiRRez4jk4c2e" Message-ID: Date: Thu, 9 Jul 2026 17:07:15 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pg_dump: use threads for parallel workers on all platforms To: Heikki Linnakangas , PostgreSQL Hackers Cc: Thomas Munro , Andrew Dunstan References: <8c712d76-ecf7-4749-a6d8-dddc01f298ec@gmail.com> <3cccb1c0-4852-478c-9c5d-fbffea56ad53@iki.fi> Content-Language: en-US From: Bryan Green In-Reply-To: <3cccb1c0-4852-478c-9c5d-fbffea56ad53@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------fr8ceRE6XeXSiRRez4jk4c2e Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 7/5/2026 6:21 PM, Heikki Linnakangas wrote: > On 02/07/2026 19:30, Bryan Green wrote: >> None of this is broken; it works. It's threads pretending to be >> processes because the code was written for processes, and the port kept >> the protocol rather than rethinking it. I'd like to stop. >> >> One model everywhere should be threads on all platforms, coordinated by >> an in-process work queue-- a mutex and a couple of condition variables-- >> instead of two worker models bridged by an inter-process protocol. > > +1 > >> To be clear, the unification is on the queue, not on what Windows does >> today. Teaching the non-Windows side to talk to its own threads over a >> socket, a byte at a time, would just be the same trick on more >> platforms-- that's the part worth deleting, not copying. >> >> I've done the Windows half, both to prove it out and because it's the >> coordination layer the non-Windows side would adopt. ... > > I see why you developed this that way, and it makes a lot of sense. > However, it has one downside: the Windows-only code cannot be tested > without Windows. At quick glance, it looks reasonable, but I'm a little > nervous committing more Windows-only code without being able to easily > play with it myself. > > Once you have the final patch ready to switch non-Windows systems to > threaded model too, that gets easier. > I have reworked the patches: 0001-0002 are standalone for Windows. 0003-0005 are dependent on Thomas Munro's pthread.h. >> With the thread rework, fmtId's static return value, is now >> _Thread_local. > +1. This is the first _Thread_local in our codebase. It's in C11, so it > should just work, but we'll see if the buildfarm shows any surprises... > > With this, the getLocalPQExpBuffer hook is never set. I think we can > just remove it, and rename defaultGetLocalPQExpBuffer() to > getLocalPQExpBuffer() directly. > Agreed. > I noticed that we currently call setFmtEncoding() in multiple places in > src/bin/pg_dump. I haven't looked at them closely, but I wonder if > there's some kind of thread-safety hazards there even without these > patches. > There is fmtIdEncoding which is a plain static, and on Windows each dump worker already calls setup_connection() -> setFmtEncoding() on its own thread. Every writer stores the same value (the encoding is fixed for the whole archive), so it's a same-value race. On the restore side the leader sets it once (processEncodingEntry) and the workers only read it. > And what about the 'quote_all_identifiers' global variable? Is that set > correctly in both models? I guess it's inherited through fork(). > getopt_long writes it during option parsing (--quote-all-identifiers points straight at the global), before any worker or connection exists, and nothing touches it again. > - Heikki > I expect changes to be needed. Thomas, I hope this is more of a help than not. 0001-0002 stand alone and touch only Windows: fmtId()'s scratch buffer becomes _Thread_local, and the Windows workers exchange work over an in-process channel rather than a loopback socket driven by select(). They're useful on their own and don't depend on the rest. 0003-0005 do the unification on top of Thomas Munro's pg_threads.h, so you will need his patch [v1-0002-port-Provide-minimal-pg_threads.h-API.patch] to install pg_threads API: 0003 ports the channel's locks to that API (mechanical, no behavior change); 0004 switches all platforms to threads and deletes the fork(), pgpipe() and select() code; 0005 drops the string command protocol for plain structs, now that the leader and workers share an address space. Changes since v1: - v1's _beginthreadex-failure check was committed separately as 75e201bf95, so it's dropped here. - Dropped the standalone 64-worker-cap patch; 0004 removes that limit for free by joining workers individually. - Extended the series past Windows: 0003-0005 unify all platforms on threads atop pg_threads.h. - Per review, fmtId()'s getLocalPQExpBuffer indirection is removed in 0001 now that nothing overrides it. -- Bryan Green EDB: https://www.enterprisedb.com --------------fr8ceRE6XeXSiRRez4jk4c2e Content-Type: text/plain; charset=UTF-8; name="v2-0001-Give-fmtId-s-temporary-buffer-thread-local-storag.patch" Content-Disposition: attachment; filename*0="v2-0001-Give-fmtId-s-temporary-buffer-thread-local-storag.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NTNiMzdmMmViM2FkYzQyOWM4MzY1YzkyMmE3NmQzOTc5YmRlMTBmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAxMTo0MDo1OCAtMDUwMApTdWJqZWN0OiBb UEFUQ0ggdjIgMS81XSBHaXZlIGZtdElkKCkncyB0ZW1wb3JhcnkgYnVmZmVyIHRocmVhZC1s b2NhbCBzdG9yYWdlCgpnZXRMb2NhbFBRRXhwQnVmZmVyKCkgcmV0dXJucyBhIGZ1bmN0aW9u LXNjb3BlIHN0YXRpYyBidWZmZXIsIHVuc2FmZSB3aGVuCmZtdElkKCkgYW5kIGZtdFF1YWxp ZmllZElkKCkgcnVuIGluIG11bHRpcGxlIHRocmVhZHMuICBPbiBXaW5kb3dzLCB3aGVyZQpw Z19kdW1wJ3MgcGFyYWxsZWwgd29ya2VycyBhcmUgdGhyZWFkcywgdGhpcyB3YXMgcGF0Y2hl ZCBvdmVyIGF0IHJ1bnRpbWUKYnkgc3dhcHBpbmcgaW4gYSBUTFMtYmFzZWQgYnVmZmVyIGZy b20gUGFyYWxsZWxCYWNrdXBTdGFydCgpLgoKTWFyayB0aGUgZGVmYXVsdCBidWZmZXIgQzEx IF9UaHJlYWRfbG9jYWwgaW5zdGVhZC4gIEVhY2ggdGhyZWFkIGdldHMgaXRzCm93biwgc28g dGhlIFdpbmRvd3MgVGxzQWxsb2MvVGxzR2V0VmFsdWUgd29ya2Fyb3VuZCBnb2VzLiAgV2l0 aCBubyBjYWxsZXIKbGVmdCB0byBvdmVycmlkZSBpdCB0aGUgZ2V0TG9jYWxQUUV4cEJ1ZmZl ciBpbmRpcmVjdGlvbiBpcyBwb2ludGxlc3MgdG9vOgpkcm9wIHRoZSBmdW5jdGlvbiBwb2lu dGVyLCBmb2xkIHRoZSBkZWZhdWx0IGludG8gYSBwbGFpbiBzdGF0aWMKZ2V0TG9jYWxQUUV4 cEJ1ZmZlcigpLCBhbmQgcmVtb3ZlIGl0cyBub3ctb2Jzb2xldGUgZXh0ZXJuLgotLS0KIHNy Yy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgIHwgNTIgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIHNyYy9mZV91dGlscy9zdHJpbmdfdXRpbHMuYyAgICAgICAgIHwg MTMgKysrLS0tLS0KIHNyYy9pbmNsdWRlL2ZlX3V0aWxzL3N0cmluZ191dGlscy5oIHwgIDEg LQogMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDYxIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BhcmFsbGVsLmMKaW5kZXggNGEwZDA0YjY0Ni4uYjMwZTdkYjVhNiAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bh cmFsbGVsLmMKQEAgLTE5Myw5ICsxOTMsNiBAQCBzdGF0aWMgQ1JJVElDQUxfU0VDVElPTiBz aWduYWxfaW5mb19sb2NrOwogCiAKICNpZmRlZiBXSU4zMgotLyogZmlsZS1zY29wZSB2YXJp YWJsZXMgKi8KLXN0YXRpYyBEV09SRCB0bHNfaW5kZXg7Ci0KIC8qIGdsb2JhbGx5IHZpc2li bGUgdmFyaWFibGVzIChuZWVkZWQgYnkgZXhpdF9uaWNlbHkpICovCiBib29sCQlwYXJhbGxl bF9pbml0X2RvbmUgPSBmYWxzZTsKIERXT1JECQltYWluVGhyZWFkSWQ7CkBAIC0yNDMsOCAr MjQwLDYgQEAgaW5pdF9wYXJhbGxlbF9kdW1wX3V0aWxzKHZvaWQpCiAJCVdTQURBVEEJCXdz YURhdGE7CiAJCWludAkJCWVycjsKIAotCQkvKiBQcmVwYXJlIGZvciB0aHJlYWRlZCBvcGVy YXRpb24gKi8KLQkJdGxzX2luZGV4ID0gVGxzQWxsb2MoKTsKIAkJbWFpblRocmVhZElkID0g R2V0Q3VycmVudFRocmVhZElkKCk7CiAKIAkJLyogSW5pdGlhbGl6ZSBzb2NrZXQgYWNjZXNz ICovCkBAIC0yODAsNDggKzI3NSw2IEBAIEdldE15UFNsb3QoUGFyYWxsZWxTdGF0ZSAqcHN0 YXRlKQogCXJldHVybiBOVUxMOwogfQogCi0vKgotICogQSB0aHJlYWQtbG9jYWwgdmVyc2lv biBvZiBnZXRMb2NhbFBRRXhwQnVmZmVyKCkuCi0gKgotICogTm9uLXJlZW50cmFudCBidXQg cmVkdWNlcyBtZW1vcnkgbGVha2FnZTogd2UnbGwgY29uc3VtZSBvbmUgYnVmZmVyIHBlcgot ICogdGhyZWFkLCB3aGljaCBpcyBtdWNoIGJldHRlciB0aGFuIG9uZSBwZXIgZm10SWQvZm10 UXVhbGlmaWVkSWQgY2FsbC4KLSAqLwotI2lmZGVmIFdJTjMyCi1zdGF0aWMgUFFFeHBCdWZm ZXIKLWdldFRocmVhZExvY2FsUFFFeHBCdWZmZXIodm9pZCkKLXsKLQkvKgotCSAqIFRoZSBU bHMgY29kZSBnb2VzIGF3cnkgaWYgd2UgdXNlIGEgc3RhdGljIHZhciwgc28gd2UgcHJvdmlk ZSBmb3IgYm90aAotCSAqIHN0YXRpYyBhbmQgYXV0bywgYW5kIG9taXQgYW55IHVzZSBvZiB0 aGUgc3RhdGljIHZhciB3aGVuIHVzaW5nIFRscy4gV2UKLQkgKiByZWx5IG9uIFRsc0dldFZh bHVlKCkgdG8gcmV0dXJuIDAgaWYgdGhlIHZhbHVlIGlzIG5vdCB5ZXQgc2V0LgotCSAqLwot CXN0YXRpYyBQUUV4cEJ1ZmZlciBzX2lkX3JldHVybiA9IE5VTEw7Ci0JUFFFeHBCdWZmZXIg aWRfcmV0dXJuOwotCi0JaWYgKHBhcmFsbGVsX2luaXRfZG9uZSkKLQkJaWRfcmV0dXJuID0g KFBRRXhwQnVmZmVyKSBUbHNHZXRWYWx1ZSh0bHNfaW5kZXgpOwotCWVsc2UKLQkJaWRfcmV0 dXJuID0gc19pZF9yZXR1cm47Ci0KLQlpZiAoaWRfcmV0dXJuKQkJCQkvKiBmaXJzdCB0aW1l IHRocm91Z2g/ICovCi0JewotCQkvKiBzYW1lIGJ1ZmZlciwganVzdCB3aXBlIGNvbnRlbnRz ICovCi0JCXJlc2V0UFFFeHBCdWZmZXIoaWRfcmV0dXJuKTsKLQl9Ci0JZWxzZQotCXsKLQkJ LyogbmV3IGJ1ZmZlciAqLwotCQlpZF9yZXR1cm4gPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwot CQlpZiAocGFyYWxsZWxfaW5pdF9kb25lKQotCQkJVGxzU2V0VmFsdWUodGxzX2luZGV4LCBp ZF9yZXR1cm4pOwotCQllbHNlCi0JCQlzX2lkX3JldHVybiA9IGlkX3JldHVybjsKLQl9Ci0K LQlyZXR1cm4gaWRfcmV0dXJuOwotfQotI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCi0KIC8q CiAgKiBwZ19kdW1wIGFuZCBwZ19yZXN0b3JlIGNhbGwgdGhpcyB0byByZWdpc3RlciB0aGUg Y2xlYW51cCBoYW5kbGVyCiAgKiBhcyBzb29uIGFzIHRoZXkndmUgY3JlYXRlZCB0aGUgQXJj aGl2ZUhhbmRsZS4KQEAgLTkxNCwxMSArODY3LDYgQEAgUGFyYWxsZWxCYWNrdXBTdGFydChB cmNoaXZlSGFuZGxlICpBSCkKIAlwc3RhdGUtPnBhcmFsbGVsU2xvdCA9CiAJCXBnX21hbGxv YzBfYXJyYXkoUGFyYWxsZWxTbG90LCBwc3RhdGUtPm51bVdvcmtlcnMpOwogCi0jaWZkZWYg V0lOMzIKLQkvKiBNYWtlIGZtdElkKCkgYW5kIGZtdFF1YWxpZmllZElkKCkgdXNlIHRocmVh ZC1sb2NhbCBzdG9yYWdlICovCi0JZ2V0TG9jYWxQUUV4cEJ1ZmZlciA9IGdldFRocmVhZExv Y2FsUFFFeHBCdWZmZXI7Ci0jZW5kaWYKLQogCS8qCiAJICogU2V0IHRoZSBwc3RhdGUgaW4g c2h1dGRvd25faW5mbywgdG8gdGVsbCB0aGUgZXhpdCBoYW5kbGVyIHRoYXQgaXQgbXVzdAog CSAqIGNsZWFuIHVwIHdvcmtlcnMgYXMgd2VsbCBhcyB0aGUgbWFpbiBkYXRhYmFzZSBjb25u ZWN0aW9uLiAgQnV0IHdlIGRvbid0CmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvc3RyaW5n X3V0aWxzLmMgYi9zcmMvZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmMKaW5kZXggN2E3NjIyNTFm My4uZjA1YmJmODliZCAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0aWxzL3N0cmluZ191dGlscy5j CisrKyBiL3NyYy9mZV91dGlscy9zdHJpbmdfdXRpbHMuYwpAQCAtMjEsMTEgKzIxLDggQEAK ICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJtYi9wZ193 Y2hhci5oIgogCi1zdGF0aWMgUFFFeHBCdWZmZXIgZGVmYXVsdEdldExvY2FsUFFFeHBCdWZm ZXIodm9pZCk7Ci0KIC8qIEdsb2JhbHMgZXhwb3J0ZWQgYnkgdGhpcyBmaWxlICovCiBpbnQJ CQlxdW90ZV9hbGxfaWRlbnRpZmllcnMgPSAwOwotUFFFeHBCdWZmZXIgKCpnZXRMb2NhbFBR RXhwQnVmZmVyKSAodm9pZCkgPSBkZWZhdWx0R2V0TG9jYWxQUUV4cEJ1ZmZlcjsKIAogc3Rh dGljIGludAlmbXRJZEVuY29kaW5nID0gLTE7CiAKQEAgLTM0LDE0ICszMSwxNCBAQCBzdGF0 aWMgaW50CWZtdElkRW5jb2RpbmcgPSAtMTsKICAqIFJldHVybnMgYSB0ZW1wb3JhcnkgUFFF eHBCdWZmZXIsIHZhbGlkIHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIGZ1bmN0aW9uLgog ICogVGhpcyBpcyB1c2VkIGJ5IGZtdElkIGFuZCBmbXRRdWFsaWZpZWRJZC4KICAqCi0gKiBO b24tcmVlbnRyYW50IGFuZCBub24tdGhyZWFkLXNhZmUgYnV0IHJlZHVjZXMgbWVtb3J5IGxl YWthZ2UuIFlvdSBjYW4KLSAqIHJlcGxhY2UgdGhpcyB3aXRoIGEgY3VzdG9tIHZlcnNpb24g Ynkgc2V0dGluZyB0aGUgZ2V0TG9jYWxQUUV4cEJ1ZmZlcgotICogZnVuY3Rpb24gcG9pbnRl ci4KKyAqIFRoZSBidWZmZXIgaXMgdGhyZWFkLWxvY2FsLCBzbyB0aGlzIGlzIHNhZmUgdG8g Y2FsbCBmcm9tIG11bHRpcGxlIHRocmVhZHMKKyAqIGF0IG9uY2U7IGVhY2ggdGhyZWFkIGdl dHMgaXRzIG93bi4gIEl0IGlzIG5vdCByZWVudHJhbnQgd2l0aGluIGEgdGhyZWFkLAorICog YnV0IGl0IHJlZHVjZXMgbWVtb3J5IGxlYWthZ2UuCiAgKi8KIHN0YXRpYyBQUUV4cEJ1ZmZl cgotZGVmYXVsdEdldExvY2FsUFFFeHBCdWZmZXIodm9pZCkKK2dldExvY2FsUFFFeHBCdWZm ZXIodm9pZCkKIHsKLQlzdGF0aWMgUFFFeHBCdWZmZXIgaWRfcmV0dXJuID0gTlVMTDsKKwlz dGF0aWMgX1RocmVhZF9sb2NhbCBQUUV4cEJ1ZmZlciBpZF9yZXR1cm4gPSBOVUxMOwogCiAJ aWYgKGlkX3JldHVybikJCQkJLyogZmlyc3QgdGltZSB0aHJvdWdoPyAqLwogCXsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3N0cmluZ191dGlscy5oIGIvc3JjL2luY2x1 ZGUvZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgKaW5kZXggMDY4MGJiM2MxOS4uNDhlM2I2OWFm YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgKKysr IGIvc3JjL2luY2x1ZGUvZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgKQEAgLTIxLDcgKzIxLDYg QEAKIAogLyogR2xvYmFsIHZhcmlhYmxlcyBjb250cm9sbGluZyBiZWhhdmlvciBvZiBmbXRJ ZCgpIGFuZCBmbXRRdWFsaWZpZWRJZCgpICovCiBleHRlcm4gUEdETExJTVBPUlQgaW50IHF1 b3RlX2FsbF9pZGVudGlmaWVyczsKLWV4dGVybiBQUUV4cEJ1ZmZlciAoKmdldExvY2FsUFFF eHBCdWZmZXIpICh2b2lkKTsKIAogLyogRnVuY3Rpb25zICovCiBleHRlcm4gY29uc3QgY2hh ciAqZm10SWQoY29uc3QgY2hhciAqcmF3aWQpOwotLSAKMi41NC4wLndpbmRvd3MuMQoK --------------fr8ceRE6XeXSiRRez4jk4c2e Content-Type: text/plain; charset=UTF-8; name="v2-0002-pg_dump-dispatch-parallel-workers-in-process-on-W.patch" Content-Disposition: attachment; filename*0="v2-0002-pg_dump-dispatch-parallel-workers-in-process-on-W.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhNDA1Zjg1MjgxMjYxYTI3M2RhNTI1OGIxMzk3ZGQ2YjYyY2JjNTNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogU3VuLCAyOCBKdW4gMjAyNiAxMjowNToxMCAtMDUwMApTdWJqZWN0OiBb UEFUQ0ggdjIgMi81XSBwZ19kdW1wOiBkaXNwYXRjaCBwYXJhbGxlbCB3b3JrZXJzIGluLXBy b2Nlc3Mgb24KIFdpbmRvd3MKCk9uIFdpbmRvd3MgdGhlIHBhcmFsbGVsIHdvcmtlcnMgYXJl IHRocmVhZHMgaW4gdGhlIGxlYWRlcidzIHByb2Nlc3MsIGJ1dAp0aGV5IHJlYWNoZWQgdGhl IGxlYWRlciB0aHJvdWdoIHRoZSBzYW1lIHRyYW5zcG9ydCBhcyBVbml4IHdvcmtlcgpwcm9j ZXNzZXM6IHBncGlwZSgpIChhIGxvb3BiYWNrIFRDUCBzb2NrZXQgcGFpciksIHNlbGVjdCgp LCBhbmQgYQpieXRlLWF0LWEtdGltZSBzdHJpbmcgcHJvdG9jb2wuICBUaGF0IGlzIHBvaW50 bGVzcyB3aGVuIHRoZSB3b3JrZXJzIHNoYXJlCnRoZSBsZWFkZXIncyBhZGRyZXNzIHNwYWNl LgoKR2l2ZSBlYWNoIFBhcmFsbGVsU2xvdCBhbiBpbi1wcm9jZXNzIGNoYW5uZWwgaW5zdGVh ZCAtLSBhIGNvbW1hbmQgc2xvdAphbmQgYSByZXNwb25zZSBzbG90IHVuZGVyIGEgY3JpdGlj YWwgc2VjdGlvbiwgd2l0aCBvbmUgY29uZGl0aW9uIHZhcmlhYmxlCnRvIHdha2UgdGhlIHdv cmtlciBhbmQgb25lIHRvIHdha2UgdGhlIGxlYWRlci4gIE1lc3NhZ2VzIHBhc3MgYXMgbWFs bG9jJ2QKc3RyaW5nczsgZGlzcGF0Y2ggd3JpdGVzIHRvIG1lbW9yeSByYXRoZXIgdGhhbiBh IHNvY2tldC4KClRoZSBwaXBlIGFsc28gc2lnbmFsbGVkIHdvcmtlciBkZWF0aCB0aHJvdWdo IEVPRi4gIFRoZSBjaGFubmVsIGhhcyBub25lLAphbmQgZXhpdF9uaWNlbHkoKSBlbmRzIG9u bHkgdGhlIHdvcmtlciB0aHJlYWQsIHNvIGEgZmFpbGVkIHdvcmtlciAtLSBmb3IKaW5zdGFu Y2UgYSBjb25uZWN0aW9uIHRoYXQgZmFpbHMgd2hlbiAtaiBleGNlZWRzIG1heF9jb25uZWN0 aW9ucyAtLSB3b3VsZApoYW5nIHRoZSBsZWFkZXIgZm9yZXZlci4gIEEgZHlpbmcgd29ya2Vy IG5vdyBzZXRzIHNsb3QtPndvcmtlckRpZWQgYW5kCndha2VzIHRoZSBsZWFkZXIsIGFuZCBn ZXRNZXNzYWdlRnJvbVdvcmtlcigpIHJldHVybnMgTlVMTCBqdXN0IGFzIHRoZQpVbml4IHBh dGggZG9lcyBvbiBFT0YuICBGb3IgdGhlIGxlYWRlciB0byBuYW1lIHRoZSBkZWFkIHdvcmtl ciwgZWFjaAp3b3JrZXIgcmVjb3JkcyBpdHMgb3duIHRocmVhZCBpZCBvbiBlbnRyeSByYXRo ZXIgdGhhbiB0cnVzdGluZwpfYmVnaW50aHJlYWRleCgpJ3Mgb3V0cHV0IGFyZ3VtZW50LCB3 aGljaCBjYW4gbGFnIHRoZSB0aHJlYWQncyBzdGFydC4KClRoZSBVbml4IHBhdGggaXMgdW50 b3VjaGVkOyB0aGUgbm93LXVudXNlZCBwZ3BpcGUoKSwgc2VsZWN0X2xvb3AoKSwgYW5kCnJl YWRNZXNzYWdlRnJvbVBpcGUoKSBzdGF5IHVudGlsIHRoZSB3b3JrZXIgbW9kZWwgaXMgdW5p ZmllZCBvbiB0aHJlYWRzLgotLS0KIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIHwgMTk1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCAxNjcgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpp bmRleCBiMzBlN2RiNWE2Li5iODlkMzk0OTEwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtMTA3 LDYgKzEwNywxOSBAQCBzdHJ1Y3QgUGFyYWxsZWxTbG90CiAJaW50CQkJcGlwZVJldlJlYWQ7 CS8qIGNoaWxkJ3MgZW5kIG9mIHRoZSBwaXBlcyAqLwogCWludAkJCXBpcGVSZXZXcml0ZTsK IAorI2lmZGVmIFdJTjMyCisKKwkvKgorCSAqIEluLXByb2Nlc3MgY2hhbm5lbCB1c2VkIGlu c3RlYWQgb2YgdGhlIHBpcGVzIHdoZW4gd29ya2VycyBhcmUgdGhyZWFkcy4KKwkgKiBBIG1l c3NhZ2UgaXMgYSBtYWxsb2MnZCBzdHJpbmc7IG93bmVyc2hpcCBwYXNzZXMgdG8gdGhlIHJl Y2VpdmVyLgorCSAqIFByb3RlY3RlZCBieSBtc2dfbG9jay4KKwkgKi8KKwljaGFyCSAgICpj bWRNc2c7CQkJLyogY29tbWFuZCBwZW5kaW5nIGZvciB0aGUgd29ya2VyLCBvciBOVUxMICov CisJY2hhcgkgICAqcmVzcE1zZzsJCS8qIHJlc3BvbnNlIHBlbmRpbmcgZm9yIHRoZSBsZWFk ZXIsIG9yIE5VTEwgKi8KKwlib29sCQljaGFuQ2xvc2VkOwkJLyogbGVhZGVyIGNsb3NlZCB0 aGUgY29tbWFuZCBjaGFubmVsIChFT0YpICovCisJYm9vbAkJd29ya2VyRGllZDsJCS8qIHdv cmtlciBleGl0ZWQgd2l0aG91dCBzZW5kaW5nIGEgcmVzcG9uc2UgKi8KKyNlbmRpZgorCiAJ LyogQ2hpbGQgcHJvY2Vzcy90aHJlYWQgaWRlbnRpdHkgaW5mbzogKi8KICNpZmRlZiBXSU4z MgogCXVpbnRwdHJfdAloVGhyZWFkOwpAQCAtMTc2LDYgKzE4OSwxNSBAQCBzdGF0aWMgdm9s YXRpbGUgRHVtcFNpZ25hbEluZm9ybWF0aW9uIHNpZ25hbF9pbmZvOwogCiAjaWZkZWYgV0lO MzIKIHN0YXRpYyBDUklUSUNBTF9TRUNUSU9OIHNpZ25hbF9pbmZvX2xvY2s7CisKKy8qCisg KiBTeW5jaHJvbml6YXRpb24gZm9yIHRoZSBpbi1wcm9jZXNzIGNoYW5uZWxzIChzZWUgc3Ry dWN0IFBhcmFsbGVsU2xvdCkuCisgKiBtc2dfbG9jayBwcm90ZWN0cyB0aGUgcGVyLXNsb3Qg Y21kTXNnL3Jlc3BNc2cvY2hhbkNsb3NlZC93b3JrZXJEaWVkIGZpZWxkczsKKyAqIHdvcmtl cl9jdiB3YWtlcyBhIHdvcmtlciwgbGVhZGVyX2N2IHdha2VzIHRoZSBsZWFkZXIuCisgKi8K K3N0YXRpYyBDUklUSUNBTF9TRUNUSU9OIG1zZ19sb2NrOworc3RhdGljIENPTkRJVElPTl9W QVJJQUJMRSB3b3JrZXJfY3Y7CitzdGF0aWMgQ09ORElUSU9OX1ZBUklBQkxFIGxlYWRlcl9j djsKICNlbmRpZgogCiAvKgpAQCAtMjEwLDExICsyMzIsMTEgQEAgc3RhdGljIHZvaWQgUnVu V29ya2VyKEFyY2hpdmVIYW5kbGUgKkFILCBQYXJhbGxlbFNsb3QgKnNsb3QpOwogc3RhdGlj IGludAlHZXRJZGxlV29ya2VyKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgYm9v bCBIYXNFdmVyeVdvcmtlclRlcm1pbmF0ZWQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKTsKIHN0 YXRpYyB2b2lkIGxvY2tUYWJsZUZvcldvcmtlcihBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50 cnkgKnRlKTsKLXN0YXRpYyB2b2lkIFdhaXRGb3JDb21tYW5kcyhBcmNoaXZlSGFuZGxlICpB SCwgaW50IHBpcGVmZFsyXSk7CitzdGF0aWMgdm9pZCBXYWl0Rm9yQ29tbWFuZHMoQXJjaGl2 ZUhhbmRsZSAqQUgsIFBhcmFsbGVsU2xvdCAqc2xvdCk7CiBzdGF0aWMgYm9vbCBMaXN0ZW5U b1dvcmtlcnMoQXJjaGl2ZUhhbmRsZSAqQUgsIFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwKIAkJ CQkJCQlib29sIGRvX3dhaXQpOwotc3RhdGljIGNoYXIgKmdldE1lc3NhZ2VGcm9tTGVhZGVy KGludCBwaXBlZmRbMl0pOwotc3RhdGljIHZvaWQgc2VuZE1lc3NhZ2VUb0xlYWRlcihpbnQg cGlwZWZkWzJdLCBjb25zdCBjaGFyICpzdHIpOworc3RhdGljIGNoYXIgKmdldE1lc3NhZ2VG cm9tTGVhZGVyKFBhcmFsbGVsU2xvdCAqc2xvdCk7CitzdGF0aWMgdm9pZCBzZW5kTWVzc2Fn ZVRvTGVhZGVyKFBhcmFsbGVsU2xvdCAqc2xvdCwgY29uc3QgY2hhciAqc3RyKTsKIHN0YXRp YyBpbnQJc2VsZWN0X2xvb3AoaW50IG1heEZkLCBmZF9zZXQgKndvcmtlcnNldCk7CiBzdGF0 aWMgY2hhciAqZ2V0TWVzc2FnZUZyb21Xb3JrZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlLAog CQkJCQkJCQkgIGJvb2wgZG9fd2FpdCwgaW50ICp3b3JrZXIpOwpAQCAtMjQyLDYgKzI2NCwx MSBAQCBpbml0X3BhcmFsbGVsX2R1bXBfdXRpbHModm9pZCkKIAogCQltYWluVGhyZWFkSWQg PSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKIAorCQkvKiBJbml0aWFsaXplIHRoZSBpbi1wcm9j ZXNzIG1lc3NhZ2UtY2hhbm5lbCBzeW5jaHJvbml6YXRpb24gKi8KKwkJSW5pdGlhbGl6ZUNy aXRpY2FsU2VjdGlvbigmbXNnX2xvY2spOworCQlJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFi bGUoJndvcmtlcl9jdik7CisJCUluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZSgmbGVhZGVy X2N2KTsKKwogCQkvKiBJbml0aWFsaXplIHNvY2tldCBhY2Nlc3MgKi8KIAkJZXJyID0gV1NB U3RhcnR1cChNQUtFV09SRCgyLCAyKSwgJndzYURhdGEpOwogCQlpZiAoZXJyICE9IDApCkBA IC0zMTQsMTkgKzM0MSwyMiBAQCBhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24oaW50IGNvZGUs IHZvaWQgKmFyZykKIAkJZWxzZQogCQl7CiAJCQkvKgotCQkJICogV2UncmUgYSB3b3JrZXIu ICBTaHV0IGRvd24gb3VyIG93biBEQiBjb25uZWN0aW9uIGlmIGFueS4gIE9uCi0JCQkgKiBX aW5kb3dzLCB3ZSBhbHNvIGhhdmUgdG8gY2xvc2Ugb3VyIGNvbW11bmljYXRpb24gc29ja2V0 cywgdG8KLQkJCSAqIGVtdWxhdGUgd2hhdCB3aWxsIGhhcHBlbiBvbiBVbml4IHdoZW4gdGhl IHdvcmtlciBwcm9jZXNzIGV4aXRzLgotCQkJICogKFdpdGhvdXQgdGhpcywgaWYgdGhpcyBp cyBhIHByZW1hdHVyZSBleGl0LCB0aGUgbGVhZGVyIHdvdWxkCi0JCQkgKiBmYWlsIHRvIGRl dGVjdCBpdCBiZWNhdXNlIHRoZXJlIHdvdWxkIGJlIG5vIEVPRiBjb25kaXRpb24gb24KLQkJ CSAqIHRoZSBvdGhlciBlbmQgb2YgdGhlIHBpcGUuKQorCQkJICogV2UncmUgYSB3b3JrZXIu ICBTaHV0IGRvd24gb3VyIG93biBEQiBjb25uZWN0aW9uIGlmIGFueS4KIAkJCSAqLwogCQkJ aWYgKHNsb3QtPkFIKQogCQkJCURpc2Nvbm5lY3REYXRhYmFzZSgmKHNsb3QtPkFILT5wdWJs aWMpKTsKIAogI2lmZGVmIFdJTjMyCi0JCQljbG9zZXNvY2tldChzbG90LT5waXBlUmV2UmVh ZCk7Ci0JCQljbG9zZXNvY2tldChzbG90LT5waXBlUmV2V3JpdGUpOworCQkJLyoKKwkJCSAq IFRlbGwgdGhlIGxlYWRlciB3ZSdyZSBnb25lIHNvIGl0IHN0b3BzIHdhaXRpbmcgZm9yIG91 ciByZXBseS4KKwkJCSAqIE9uIFVuaXggdGhlIHdvcmtlciBpcyBhIHByb2Nlc3Mgd2hvc2Ug ZXhpdCBjbG9zZXMgdGhlIHBpcGUgYW5kCisJCQkgKiB0aGUgbGVhZGVyIHNlZXMgRU9GOyB0 aGUgaW4tcHJvY2VzcyBjaGFubmVsIGhhcyBubyBFT0YsIGFuZAorCQkJICogZXhpdF9uaWNl bHkoKSBlbmRzIG9ubHkgdGhpcyB0aHJlYWQsIHNvIHNpZ25hbCBpdCBleHBsaWNpdGx5Lgor CQkJICovCisJCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmbXNnX2xvY2spOworCQkJc2xvdC0+ d29ya2VyRGllZCA9IHRydWU7CisJCQlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJmxlYWRl cl9jdik7CisJCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbXNnX2xvY2spOwogI2VuZGlmCiAJ CX0KIAl9CkBAIC0zNTEsNiArMzgxLDE3IEBAIFNodXRkb3duV29ya2Vyc0hhcmQoUGFyYWxs ZWxTdGF0ZSAqcHN0YXRlKQogewogCWludAkJCWk7CiAKKwkvKgorCSAqIFRlbGwgYW55IHdv cmtlcnMgdGhhdCBhcmUgd2FpdGluZyBmb3IgY29tbWFuZHMgdGhhdCB0aGV5IGNhbiBleGl0 LgorCSAqLworI2lmZGVmIFdJTjMyCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2Nr KTsKKwlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCisJCXBzdGF0 ZS0+cGFyYWxsZWxTbG90W2ldLmNoYW5DbG9zZWQgPSB0cnVlOworCVdha2VBbGxDb25kaXRp b25WYXJpYWJsZSgmd29ya2VyX2N2KTsKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbXNnX2xv Y2spOworI2Vsc2UKKwogCS8qCiAJICogQ2xvc2Ugb3VyIHdyaXRlIGVuZCBvZiB0aGUgc29j a2V0cyBzbyB0aGF0IGFueSB3b3JrZXJzIHdhaXRpbmcgZm9yCiAJICogY29tbWFuZHMga25v dyB0aGV5IGNhbiBleGl0LiAgKE5vdGU6IHNvbWUgb2YgdGhlIHBpcGVXcml0ZSBmaWVsZHMg bWlnaHQKQEAgLTM1OSw2ICs0MDAsNyBAQCBTaHV0ZG93bldvcmtlcnNIYXJkKFBhcmFsbGVs U3RhdGUgKnBzdGF0ZSkKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3Jr ZXJzOyBpKyspCiAJCWNsb3Nlc29ja2V0KHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpcGVX cml0ZSk7CisjZW5kaWYKIAogCS8qCiAJICogRm9yY2UgZWFybHkgdGVybWluYXRpb24gb2Yg YW55IGNvbW1hbmRzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KQEAgLTc3OSwxMiArODIxLDYg QEAgc2V0X2NhbmNlbF9zbG90X2FyY2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZl SGFuZGxlICpBSCkKIHN0YXRpYyB2b2lkCiBSdW5Xb3JrZXIoQXJjaGl2ZUhhbmRsZSAqQUgs IFBhcmFsbGVsU2xvdCAqc2xvdCkKIHsKLQlpbnQJCQlwaXBlZmRbMl07Ci0KLQkvKiBmZXRj aCBjaGlsZCBlbmRzIG9mIHBpcGVzICovCi0JcGlwZWZkW1BJUEVfUkVBRF0gPSBzbG90LT5w aXBlUmV2UmVhZDsKLQlwaXBlZmRbUElQRV9XUklURV0gPSBzbG90LT5waXBlUmV2V3JpdGU7 Ci0KIAkvKgogCSAqIENsb25lIHRoZSBhcmNoaXZlIHNvIHRoYXQgd2UgaGF2ZSBvdXIgb3du IHN0YXRlIHRvIHdvcmsgd2l0aCwgYW5kIGluCiAJICogcGFydGljdWxhciBvdXIgb3duIGRh dGFiYXNlIGNvbm5lY3Rpb24uCkBAIC04MDcsNyArODQzLDcgQEAgUnVuV29ya2VyKEFyY2hp dmVIYW5kbGUgKkFILCBQYXJhbGxlbFNsb3QgKnNsb3QpCiAJLyoKIAkgKiBFeGVjdXRlIGNv bW1hbmRzIHVudGlsIGRvbmUuCiAJICovCi0JV2FpdEZvckNvbW1hbmRzKEFILCBwaXBlZmQp OworCVdhaXRGb3JDb21tYW5kcyhBSCwgc2xvdCk7CiAKIAkvKgogCSAqIERpc2Nvbm5lY3Qg ZnJvbSBkYXRhYmFzZSBhbmQgY2xlYW4gdXAuCkBAIC04MzAsNiArODY2LDE1IEBAIGluaXRf c3Bhd25lZF93b3JrZXJfd2luMzIoV29ya2VySW5mbyAqd2kpCiAJLyogRG9uJ3QgbmVlZCBX b3JrZXJJbmZvIGFueW1vcmUgKi8KIAlmcmVlKHdpKTsKIAorCS8qCisJICogUmVjb3JkIG91 ciB0aHJlYWQgaWQgc28gR2V0TXlQU2xvdCgpIGNhbiB0ZWxsIHVzIGZyb20gdGhlIGxlYWRl ci4gIERvCisJICogdGhpcyBiZWZvcmUgYW55dGhpbmcgdGhhdCBtaWdodCBjYWxsIGV4aXRf bmljZWx5KCk6IHRoZSBjbGVhbnVwIGhhbmRsZXIKKwkgKiB1c2VzIEdldE15UFNsb3QoKSwg YW5kIG1pc3Rha2luZyBhIGZhaWxpbmcgd29ya2VyIGZvciB0aGUgbGVhZGVyCisJICogZGVh ZGxvY2tzIHNodXRkb3duLiAgV2UgY2FuJ3QgdHJ1c3QgdGhlIGxlYWRlciB0byBoYXZlIHN0 b3JlZCB0aGUgaWQKKwkgKiBmcm9tIF9iZWdpbnRocmVhZGV4KCkgeWV0LCBzaW5jZSB0aGlz IHRocmVhZCBtYXkgcnVuIGJlZm9yZSB0aGF0IHJldHVybnMuCisJICovCisJc2xvdC0+dGhy ZWFkSWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKwogCS8qIFJ1biB0aGUgd29ya2VyIC4u LiAqLwogCVJ1bldvcmtlcihBSCwgc2xvdCk7CiAKQEAgLTg5NSwxMSArOTQwLDEyIEBAIFBh cmFsbGVsQmFja3VwU3RhcnQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXVpbnRwdHJfdAloYW5k bGU7CiAjZWxzZQogCQlwaWRfdAkJcGlkOwotI2VuZGlmCi0JCVBhcmFsbGVsU2xvdCAqc2xv dCA9ICYocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0pOwogCQlpbnQJCQlwaXBlTVdbMl0sCiAJ CQkJCXBpcGVXTVsyXTsKKyNlbmRpZgorCQlQYXJhbGxlbFNsb3QgKnNsb3QgPSAmKHBzdGF0 ZS0+cGFyYWxsZWxTbG90W2ldKTsKIAorI2lmbmRlZiBXSU4zMgogCQkvKiBDcmVhdGUgY29t bXVuaWNhdGlvbiBwaXBlcyBmb3IgdGhpcyB3b3JrZXIgKi8KIAkJaWYgKHBncGlwZShwaXBl TVcpIDwgMCB8fCBwZ3BpcGUocGlwZVdNKSA8IDApCiAJCQlwZ19mYXRhbCgiY291bGQgbm90 IGNyZWF0ZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzOiAlbSIpOwpAQCAtOTEwLDYgKzk1Niw3 IEBAIFBhcmFsbGVsQmFja3VwU3RhcnQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCS8qIGNoaWxk J3MgZW5kcyBvZiB0aGUgcGlwZXMgKi8KIAkJc2xvdC0+cGlwZVJldlJlYWQgPSBwaXBlTVdb UElQRV9SRUFEXTsKIAkJc2xvdC0+cGlwZVJldldyaXRlID0gcGlwZVdNW1BJUEVfV1JJVEVd OworI2VuZGlmCiAKICNpZmRlZiBXSU4zMgogCQkvKiBDcmVhdGUgdHJhbnNpZW50IHN0cnVj dHVyZSB0byBwYXNzIGFyZ3MgdG8gd29ya2VyIGZ1bmN0aW9uICovCkBAIC05MTgsOCArOTY1 LDEzIEBAIFBhcmFsbGVsQmFja3VwU3RhcnQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXdpLT5B SCA9IEFIOwogCQl3aS0+c2xvdCA9IHNsb3Q7CiAKKwkJLyoKKwkJICogVGhlIHdvcmtlciBz dG9yZXMgaXRzIG93biB0aHJlYWQgaWQgKHNlZSBpbml0X3NwYXduZWRfd29ya2VyX3dpbjMy KSwKKwkJICogc28gZG9uJ3QgYXNrIF9iZWdpbnRocmVhZGV4KCkgdG8gcmVwb3J0IGl0IC0t IHRoYXQgd291bGQgcmFjZSBpdHMKKwkJICogc3RvcmUuCisJCSAqLwogCQloYW5kbGUgPSBf YmVnaW50aHJlYWRleChOVUxMLCAwLCAodm9pZCAqKSAmaW5pdF9zcGF3bmVkX3dvcmtlcl93 aW4zMiwKLQkJCQkJCQkJd2ksIDAsICYoc2xvdC0+dGhyZWFkSWQpKTsKKwkJCQkJCQkJd2ks IDAsIE5VTEwpOwogCQlpZiAoaGFuZGxlID09IDApCiAJCQlwZ19mYXRhbCgiY291bGQgbm90 IGNyZWF0ZSB3b3JrZXIgdGhyZWFkOiAlbSIpOwogCQlzbG90LT5oVGhyZWFkID0gaGFuZGxl OwpAQCAtMTAxNSwxMiArMTA2NywyMSBAQCBQYXJhbGxlbEJhY2t1cEVuZChBcmNoaXZlSGFu ZGxlICpBSCwgUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogCS8qIFRoZXJlIHNob3VsZCBub3Qg YmUgYW55IHVuZmluaXNoZWQgam9icyAqLwogCUFzc2VydChJc0V2ZXJ5V29ya2VySWRsZShw c3RhdGUpKTsKIAorCS8qIFRlbGwgdGhlIHdvcmtlcnMgdGhleSBjYW4gZXhpdCAqLworI2lm ZGVmIFdJTjMyCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwlmb3IgKGkg PSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCisJCXBzdGF0ZS0+cGFyYWxsZWxT bG90W2ldLmNoYW5DbG9zZWQgPSB0cnVlOworCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgm d29ya2VyX2N2KTsKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbXNnX2xvY2spOworI2Vsc2UK IAkvKiBDbG9zZSB0aGUgc29ja2V0cyBzbyB0aGF0IHRoZSB3b3JrZXJzIGtub3cgdGhleSBj YW4gZXhpdCAqLwogCWZvciAoaSA9IDA7IGkgPCBwc3RhdGUtPm51bVdvcmtlcnM7IGkrKykK IAl7CiAJCWNsb3Nlc29ja2V0KHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpcGVSZWFkKTsK IAkJY2xvc2Vzb2NrZXQocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0ucGlwZVdyaXRlKTsKIAl9 CisjZW5kaWYKIAogCS8qIFdhaXQgZm9yIHRoZW0gdG8gZXhpdCAqLwogCVdhaXRGb3JUZXJt aW5hdGluZ1dvcmtlcnMocHN0YXRlKTsKQEAgLTEyODEsNyArMTM0Miw3IEBAIGxvY2tUYWJs ZUZvcldvcmtlcihBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogICogUmVhZCBh bmQgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIHRoZSBsZWFkZXIgdW50aWwgd2Ugc2VlIEVPRiBv biB0aGUgcGlwZS4KICAqLwogc3RhdGljIHZvaWQKLVdhaXRGb3JDb21tYW5kcyhBcmNoaXZl SGFuZGxlICpBSCwgaW50IHBpcGVmZFsyXSkKK1dhaXRGb3JDb21tYW5kcyhBcmNoaXZlSGFu ZGxlICpBSCwgUGFyYWxsZWxTbG90ICpzbG90KQogewogCWNoYXIJICAgKmNvbW1hbmQ7CiAJ VG9jRW50cnkgICAqdGU7CkBAIC0xMjkxLDcgKzEzNTIsNyBAQCBXYWl0Rm9yQ29tbWFuZHMo QXJjaGl2ZUhhbmRsZSAqQUgsIGludCBwaXBlZmRbMl0pCiAKIAlmb3IgKDs7KQogCXsKLQkJ aWYgKCEoY29tbWFuZCA9IGdldE1lc3NhZ2VGcm9tTGVhZGVyKHBpcGVmZCkpKQorCQlpZiAo IShjb21tYW5kID0gZ2V0TWVzc2FnZUZyb21MZWFkZXIoc2xvdCkpKQogCQl7CiAJCQkvKiBF T0YsIHNvIGRvbmUgKi8KIAkJCXJldHVybjsKQEAgLTEzMTksNyArMTM4MCw3IEBAIFdhaXRG b3JDb21tYW5kcyhBcmNoaXZlSGFuZGxlICpBSCwgaW50IHBpcGVmZFsyXSkKIAkJLyogUmV0 dXJuIHN0YXR1cyB0byBsZWFkZXIgKi8KIAkJYnVpbGRXb3JrZXJSZXNwb25zZShBSCwgdGUs IGFjdCwgc3RhdHVzLCBidWYsIHNpemVvZihidWYpKTsKIAotCQlzZW5kTWVzc2FnZVRvTGVh ZGVyKHBpcGVmZCwgYnVmKTsKKwkJc2VuZE1lc3NhZ2VUb0xlYWRlcihzbG90LCBidWYpOwog CiAJCS8qIGNvbW1hbmQgd2FzIHBnX21hbGxvYydkIGFuZCB3ZSBhcmUgcmVzcG9uc2libGUg Zm9yIGZyZWUoKWluZyBpdC4gKi8KIAkJZnJlZShjb21tYW5kKTsKQEAgLTE0NjEsOSArMTUy MiwyMSBAQCBXYWl0Rm9yV29ya2VycyhBcmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxTdGF0 ZSAqcHN0YXRlLCBXRldfV2FpdE9wdGlvbiBtb2RlKQogICogVGhpcyBmdW5jdGlvbiBpcyBl eGVjdXRlZCBpbiB3b3JrZXIgcHJvY2Vzc2VzLgogICovCiBzdGF0aWMgY2hhciAqCi1nZXRN ZXNzYWdlRnJvbUxlYWRlcihpbnQgcGlwZWZkWzJdKQorZ2V0TWVzc2FnZUZyb21MZWFkZXIo UGFyYWxsZWxTbG90ICpzbG90KQogewotCXJldHVybiByZWFkTWVzc2FnZUZyb21QaXBlKHBp cGVmZFtQSVBFX1JFQURdKTsKKyNpZmRlZiBXSU4zMgorCWNoYXIJICAgKm1zZzsKKworCUVu dGVyQ3JpdGljYWxTZWN0aW9uKCZtc2dfbG9jayk7CisJd2hpbGUgKHNsb3QtPmNtZE1zZyA9 PSBOVUxMICYmICFzbG90LT5jaGFuQ2xvc2VkKQorCQlTbGVlcENvbmRpdGlvblZhcmlhYmxl Q1MoJndvcmtlcl9jdiwgJm1zZ19sb2NrLCBJTkZJTklURSk7CisJbXNnID0gc2xvdC0+Y21k TXNnOwkJCS8qIE5VTEwgaGVyZSBtZWFucyB0aGUgY2hhbm5lbCB3YXMgY2xvc2VkICovCisJ c2xvdC0+Y21kTXNnID0gTlVMTDsKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbXNnX2xvY2sp OworCXJldHVybiBtc2c7CisjZWxzZQorCXJldHVybiByZWFkTWVzc2FnZUZyb21QaXBlKHNs b3QtPnBpcGVSZXZSZWFkKTsKKyNlbmRpZgogfQogCiAvKgpAQCAtMTQ3MiwxMiArMTU0NSwy MCBAQCBnZXRNZXNzYWdlRnJvbUxlYWRlcihpbnQgcGlwZWZkWzJdKQogICogVGhpcyBmdW5j dGlvbiBpcyBleGVjdXRlZCBpbiB3b3JrZXIgcHJvY2Vzc2VzLgogICovCiBzdGF0aWMgdm9p ZAotc2VuZE1lc3NhZ2VUb0xlYWRlcihpbnQgcGlwZWZkWzJdLCBjb25zdCBjaGFyICpzdHIp CitzZW5kTWVzc2FnZVRvTGVhZGVyKFBhcmFsbGVsU2xvdCAqc2xvdCwgY29uc3QgY2hhciAq c3RyKQogeworI2lmZGVmIFdJTjMyCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2Nr KTsKKwlBc3NlcnQoc2xvdC0+cmVzcE1zZyA9PSBOVUxMKTsKKwlzbG90LT5yZXNwTXNnID0g cGdfc3RyZHVwKHN0cik7CisJV2FrZUFsbENvbmRpdGlvblZhcmlhYmxlKCZsZWFkZXJfY3Yp OworCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZtc2dfbG9jayk7CisjZWxzZQogCWludAkJCWxl biA9IHN0cmxlbihzdHIpICsgMTsKIAotCWlmIChwaXBld3JpdGUocGlwZWZkW1BJUEVfV1JJ VEVdLCBzdHIsIGxlbikgIT0gbGVuKQorCWlmIChwaXBld3JpdGUoc2xvdC0+cGlwZVJldldy aXRlLCBzdHIsIGxlbikgIT0gbGVuKQogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRv IHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWw6ICVtIik7CisjZW5kaWYKIH0KIAogLyoKQEAg LTE1MjYsNiArMTYwNyw1MyBAQCBzZWxlY3RfbG9vcChpbnQgbWF4RmQsIGZkX3NldCAqd29y a2Vyc2V0KQogc3RhdGljIGNoYXIgKgogZ2V0TWVzc2FnZUZyb21Xb3JrZXIoUGFyYWxsZWxT dGF0ZSAqcHN0YXRlLCBib29sIGRvX3dhaXQsIGludCAqd29ya2VyKQogeworI2lmZGVmIFdJ TjMyCisJaW50CQkJaTsKKworCS8qCisJICogUmV0dXJuIHRoZSBmaXJzdCBwZW5kaW5nIHJl c3BvbnNlOyBpZiBub25lIGFuZCBkb193YWl0LCBzbGVlcCBvbgorCSAqIGxlYWRlcl9jdiB1 bnRpbCBhIHdvcmtlciBwb3N0cyBvbmUuCisJICovCisJRW50ZXJDcml0aWNhbFNlY3Rpb24o Jm1zZ19sb2NrKTsKKwlmb3IgKDs7KQorCXsKKwkJYm9vbAkJYW55RGllZCA9IGZhbHNlOwor CisJCWZvciAoaSA9IDA7IGkgPCBwc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKKwkJeworCQkJ Y2hhcgkgICAqbXNnOworCisJCQlpZiAoIVdPUktFUl9JU19SVU5OSU5HKHBzdGF0ZS0+cGFy YWxsZWxTbG90W2ldLndvcmtlclN0YXR1cykpCisJCQkJY29udGludWU7CisJCQltc2cgPSBw c3RhdGUtPnBhcmFsbGVsU2xvdFtpXS5yZXNwTXNnOworCQkJaWYgKG1zZyAhPSBOVUxMKQor CQkJeworCQkJCXBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnJlc3BNc2cgPSBOVUxMOworCQkJ CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZtc2dfbG9jayk7CisJCQkJKndvcmtlciA9IGk7CisJ CQkJcmV0dXJuIG1zZzsKKwkJCX0KKwkJCWlmIChwc3RhdGUtPnBhcmFsbGVsU2xvdFtpXS53 b3JrZXJEaWVkKQorCQkJCWFueURpZWQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogQSB3 b3JrZXIgZGllZCB3aXRob3V0IHJlc3BvbmRpbmc6IHJldHVybiBOVUxMIGFzIHRoZSBVbml4 IHBhdGggZG9lcworCQkgKiBvbiBFT0YsIHNvIHRoZSBjYWxsZXIgcmVwb3J0cyB0aGUgZmFp bHVyZSBpbnN0ZWFkIG9mIGhhbmdpbmcuCisJCSAqLworCQlpZiAoYW55RGllZCkKKwkJewor CQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwkJCXJldHVybiBOVUxMOwor CQl9CisJCWlmICghZG9fd2FpdCkKKwkJeworCQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJm1z Z19sb2NrKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCVNsZWVwQ29uZGl0aW9uVmFyaWFi bGVDUygmbGVhZGVyX2N2LCAmbXNnX2xvY2ssIElORklOSVRFKTsKKwl9CisjZWxzZQogCWlu dAkJCWk7CiAJZmRfc2V0CQl3b3JrZXJzZXQ7CiAJaW50CQkJbWF4RmQgPSAtMTsKQEAgLTE1 ODEsNiArMTcwOSw3IEBAIGdldE1lc3NhZ2VGcm9tV29ya2VyKFBhcmFsbGVsU3RhdGUgKnBz dGF0ZSwgYm9vbCBkb193YWl0LCBpbnQgKndvcmtlcikKIAl9CiAJQXNzZXJ0KGZhbHNlKTsK IAlyZXR1cm4gTlVMTDsKKyNlbmRpZgogfQogCiAvKgpAQCAtMTU5MSwxMiArMTcyMCwyMiBA QCBnZXRNZXNzYWdlRnJvbVdvcmtlcihQYXJhbGxlbFN0YXRlICpwc3RhdGUsIGJvb2wgZG9f d2FpdCwgaW50ICp3b3JrZXIpCiBzdGF0aWMgdm9pZAogc2VuZE1lc3NhZ2VUb1dvcmtlcihQ YXJhbGxlbFN0YXRlICpwc3RhdGUsIGludCB3b3JrZXIsIGNvbnN0IGNoYXIgKnN0cikKIHsK KyNpZmRlZiBXSU4zMgorCVBhcmFsbGVsU2xvdCAqc2xvdCA9ICZwc3RhdGUtPnBhcmFsbGVs U2xvdFt3b3JrZXJdOworCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwlB c3NlcnQoc2xvdC0+Y21kTXNnID09IE5VTEwpOworCXNsb3QtPmNtZE1zZyA9IHBnX3N0cmR1 cChzdHIpOworCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmd29ya2VyX2N2KTsKKwlMZWF2 ZUNyaXRpY2FsU2VjdGlvbigmbXNnX2xvY2spOworI2Vsc2UKIAlpbnQJCQlsZW4gPSBzdHJs ZW4oc3RyKSArIDE7CiAKIAlpZiAocGlwZXdyaXRlKHBzdGF0ZS0+cGFyYWxsZWxTbG90W3dv cmtlcl0ucGlwZVdyaXRlLCBzdHIsIGxlbikgIT0gbGVuKQogCXsKIAkJcGdfZmF0YWwoImNv dWxkIG5vdCB3cml0ZSB0byB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsOiAlbSIpOwogCX0K KyNlbmRpZgogfQogCiAvKgotLSAKMi41NC4wLndpbmRvd3MuMQoK --------------fr8ceRE6XeXSiRRez4jk4c2e Content-Type: text/plain; charset=UTF-8; name="v2-0003-pg_dump-port-the-parallel-channel-to-pg_threads.h.patch" Content-Disposition: attachment; filename*0="v2-0003-pg_dump-port-the-parallel-channel-to-pg_threads.h.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiNzMxN2ViNTMzZDUxYjdiM2ZjNTZjNjNkZTE4OTllMjk4ZWQwYTk5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCA5IEp1bCAyMDI2IDEyOjA5OjEwIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MiAzLzVdIHBnX2R1bXA6IHBvcnQgdGhlIHBhcmFsbGVsIGNoYW5uZWwgdG8gcGdf dGhyZWFkcy5oCiBwcmltaXRpdmVzCgpUaGUgaW4tcHJvY2VzcyBjb21tYW5kIGNoYW5uZWwg dXNlZCBXaW5kb3dzIENSSVRJQ0FMX1NFQ1RJT04gYW5kCkNPTkRJVElPTl9WQVJJQUJMRSBk aXJlY3RseS4gIFN3YXAgdGhlbSBmb3IgdGhlIHBvcnRhYmxlIHBnX3RocmVhZHMuaAplcXVp dmFsZW50cyAocGdfbXR4X3QvcGdfY25kX3QpIHNvIHRoZSBzYW1lIGNoYW5uZWwgY2FuIHNl cnZlCm5vbi1XaW5kb3dzIHdvcmtlcnMgb25jZSB0aGV5IGJlY29tZSB0aHJlYWRzLiAgU3Rp bGwgYnVpbHQgb25seSB1bmRlcgpXSU4zMjsgYSBmb2xsb3ctdXAgcmVtb3ZlcyB0aGF0IHJl c3RyaWN0aW9uIGFsb25nIHdpdGggdGhlIGZvcmsoKS9waXBlCndvcmtlciBwYXRoLgotLS0K IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIHwgODQgKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCA0 MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwu YyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IGI4OWQzOTQ5MTAuLjQ5NTlm MTBkODEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAi ZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNs dWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX3RocmVhZHMuaCIK ICNpZmRlZiBXSU4zMgogI2luY2x1ZGUgInBvcnQvcGdfYnN3YXAuaCIKICNlbmRpZgpAQCAt MTg4LDE2ICsxODksMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgRHVtcFNpZ25hbEluZm9ybWF0aW9u CiBzdGF0aWMgdm9sYXRpbGUgRHVtcFNpZ25hbEluZm9ybWF0aW9uIHNpZ25hbF9pbmZvOwog CiAjaWZkZWYgV0lOMzIKLXN0YXRpYyBDUklUSUNBTF9TRUNUSU9OIHNpZ25hbF9pbmZvX2xv Y2s7CitzdGF0aWMgcGdfbXR4X3Qgc2lnbmFsX2luZm9fbG9jayA9IFBHX01UWF9JTklUOwog CiAvKgogICogU3luY2hyb25pemF0aW9uIGZvciB0aGUgaW4tcHJvY2VzcyBjaGFubmVscyAo c2VlIHN0cnVjdCBQYXJhbGxlbFNsb3QpLgogICogbXNnX2xvY2sgcHJvdGVjdHMgdGhlIHBl ci1zbG90IGNtZE1zZy9yZXNwTXNnL2NoYW5DbG9zZWQvd29ya2VyRGllZCBmaWVsZHM7CiAg KiB3b3JrZXJfY3Ygd2FrZXMgYSB3b3JrZXIsIGxlYWRlcl9jdiB3YWtlcyB0aGUgbGVhZGVy LgogICovCi1zdGF0aWMgQ1JJVElDQUxfU0VDVElPTiBtc2dfbG9jazsKLXN0YXRpYyBDT05E SVRJT05fVkFSSUFCTEUgd29ya2VyX2N2Owotc3RhdGljIENPTkRJVElPTl9WQVJJQUJMRSBs ZWFkZXJfY3Y7CitzdGF0aWMgcGdfbXR4X3QgbXNnX2xvY2sgPSBQR19NVFhfSU5JVDsKK3N0 YXRpYyBwZ19jbmRfdCB3b3JrZXJfY3Y7CitzdGF0aWMgcGdfY25kX3QgbGVhZGVyX2N2Owog I2VuZGlmCiAKIC8qCkBAIC0yNjQsMTAgKzI2NSw5IEBAIGluaXRfcGFyYWxsZWxfZHVtcF91 dGlscyh2b2lkKQogCiAJCW1haW5UaHJlYWRJZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwog Ci0JCS8qIEluaXRpYWxpemUgdGhlIGluLXByb2Nlc3MgbWVzc2FnZS1jaGFubmVsIHN5bmNo cm9uaXphdGlvbiAqLwotCQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZtc2dfbG9jayk7 Ci0JCUluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZSgmd29ya2VyX2N2KTsKLQkJSW5pdGlh bGl6ZUNvbmRpdGlvblZhcmlhYmxlKCZsZWFkZXJfY3YpOworCQkvKiBJbml0aWFsaXplIHRo ZSBpbi1wcm9jZXNzIG1lc3NhZ2UtY2hhbm5lbCBjb25kaXRpb24gdmFyaWFibGVzICovCisJ CXBnX2NuZF9pbml0KCZ3b3JrZXJfY3YpOworCQlwZ19jbmRfaW5pdCgmbGVhZGVyX2N2KTsK IAogCQkvKiBJbml0aWFsaXplIHNvY2tldCBhY2Nlc3MgKi8KIAkJZXJyID0gV1NBU3RhcnR1 cChNQUtFV09SRCgyLCAyKSwgJndzYURhdGEpOwpAQCAtMzUzLDEwICszNTMsMTAgQEAgYXJj aGl2ZV9jbG9zZV9jb25uZWN0aW9uKGludCBjb2RlLCB2b2lkICphcmcpCiAJCQkgKiB0aGUg bGVhZGVyIHNlZXMgRU9GOyB0aGUgaW4tcHJvY2VzcyBjaGFubmVsIGhhcyBubyBFT0YsIGFu ZAogCQkJICogZXhpdF9uaWNlbHkoKSBlbmRzIG9ubHkgdGhpcyB0aHJlYWQsIHNvIHNpZ25h bCBpdCBleHBsaWNpdGx5LgogCQkJICovCi0JCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmbXNn X2xvY2spOworCQkJcGdfbXR4X2xvY2soJm1zZ19sb2NrKTsKIAkJCXNsb3QtPndvcmtlckRp ZWQgPSB0cnVlOwotCQkJV2FrZUFsbENvbmRpdGlvblZhcmlhYmxlKCZsZWFkZXJfY3YpOwot CQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwkJCXBnX2NuZF9icm9hZGNh c3QoJmxlYWRlcl9jdik7CisJCQlwZ19tdHhfdW5sb2NrKCZtc2dfbG9jayk7CiAjZW5kaWYK IAkJfQogCX0KQEAgLTM4NSwxMSArMzg1LDExIEBAIFNodXRkb3duV29ya2Vyc0hhcmQoUGFy YWxsZWxTdGF0ZSAqcHN0YXRlKQogCSAqIFRlbGwgYW55IHdvcmtlcnMgdGhhdCBhcmUgd2Fp dGluZyBmb3IgY29tbWFuZHMgdGhhdCB0aGV5IGNhbiBleGl0LgogCSAqLwogI2lmZGVmIFdJ TjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwlwZ19tdHhfbG9jaygm bXNnX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBwc3RhdGUtPm51bVdvcmtlcnM7IGkrKykK IAkJcHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0uY2hhbkNsb3NlZCA9IHRydWU7Ci0JV2FrZUFs bENvbmRpdGlvblZhcmlhYmxlKCZ3b3JrZXJfY3YpOwotCUxlYXZlQ3JpdGljYWxTZWN0aW9u KCZtc2dfbG9jayk7CisJcGdfY25kX2Jyb2FkY2FzdCgmd29ya2VyX2N2KTsKKwlwZ19tdHhf dW5sb2NrKCZtc2dfbG9jayk7CiAjZWxzZQogCiAJLyoKQEAgLTQyMCw3ICs0MjAsNyBAQCBT aHV0ZG93bldvcmtlcnNIYXJkKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSkKIAkgKiBPbiBXaW5k b3dzLCBzZW5kIHF1ZXJ5IGNhbmNlbHMgZGlyZWN0bHkgdG8gdGhlIHdvcmtlcnMnIGJhY2tl bmRzLiAgVXNlCiAJICogYSBjcml0aWNhbCBzZWN0aW9uIHRvIGVuc3VyZSB3b3JrZXIgdGhy ZWFkcyBkb24ndCBjaGFuZ2Ugc3RhdGUuCiAJICovCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24o JnNpZ25hbF9pbmZvX2xvY2spOworCXBnX210eF9sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsK IAlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCiAJewogCQlBcmNo aXZlSGFuZGxlICpBSCA9IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLkFIOwpAQCAtNDI5LDcg KzQyOSw3IEBAIFNodXRkb3duV29ya2Vyc0hhcmQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQog CQlpZiAoQUggIT0gTlVMTCAmJiBBSC0+Y29ubkNhbmNlbCAhPSBOVUxMKQogCQkJKHZvaWQp IFBRY2FuY2VsKEFILT5jb25uQ2FuY2VsLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKIAl9 Ci0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCXBnX210eF91 bmxvY2soJnNpZ25hbF9pbmZvX2xvY2spOwogI2VuZGlmCiAKIAkvKiBOb3cgd2FpdCBmb3Ig dGhlbSB0byB0ZXJtaW5hdGUuICovCkBAIC02NDcsNyArNjQ3LDcgQEAgY29uc29sZUhhbmRs ZXIoRFdPUkQgZHdDdHJsVHlwZSkKIAkJc2V0X2NhbmNlbF9pbl9wcm9ncmVzcygpOwogCiAJ CS8qIENyaXRpY2FsIHNlY3Rpb24gcHJldmVudHMgY2hhbmdpbmcgZGF0YSB3ZSBsb29rIGF0 IGhlcmUgKi8KLQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwor CQlwZ19tdHhfbG9jaygmc2lnbmFsX2luZm9fbG9jayk7CiAKIAkJLyoKIAkJICogSWYgaW4g cGFyYWxsZWwgbW9kZSwgc2VuZCBRdWVyeUNhbmNlbCB0byBlYWNoIHdvcmtlcidzIGNvbm5l Y3RlZApAQCAtNjc1LDcgKzY3NSw3IEBAIGNvbnNvbGVIYW5kbGVyKERXT1JEIGR3Q3RybFR5 cGUpCiAJCQkodm9pZCkgUFFjYW5jZWwoc2lnbmFsX2luZm8ubXlBSC0+Y29ubkNhbmNlbCwK IAkJCQkJCQllcnJidWYsIHNpemVvZihlcnJidWYpKTsKIAotCQlMZWF2ZUNyaXRpY2FsU2Vj dGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJCXBnX210eF91bmxvY2soJnNpZ25hbF9pbmZv X2xvY2spOwogCiAJCS8qCiAJCSAqIFJlcG9ydCB3ZSdyZSBxdWl0dGluZywgdXNpbmcgbm90 aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4KQEAgLTcwNCw4ICs3MDQsNiBAQCBzZXRfY2Fu Y2VsX2hhbmRsZXIodm9pZCkKIAl7CiAJCXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0ID0gdHJ1 ZTsKIAotCQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsK LQogCQlTZXRDb25zb2xlQ3RybEhhbmRsZXIoY29uc29sZUhhbmRsZXIsIFRSVUUpOwogCX0K IH0KQEAgLTczOCw3ICs3MzYsNyBAQCBzZXRfYXJjaGl2ZV9jYW5jZWxfaW5mbyhBcmNoaXZl SGFuZGxlICpBSCwgUEdjb25uICpjb25uKQogCSAqLwogCiAjaWZkZWYgV0lOMzIKLQlFbnRl ckNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJcGdfbXR4X2xvY2soJnNp Z25hbF9pbmZvX2xvY2spOwogI2VuZGlmCiAKIAkvKiBGcmVlIHRoZSBvbGQgb25lIGlmIHdl IGhhdmUgb25lICovCkBAIC03NjgsNyArNzY2LDcgQEAgc2V0X2FyY2hpdmVfY2FuY2VsX2lu Zm8oQXJjaGl2ZUhhbmRsZSAqQUgsIFBHY29ubiAqY29ubikKICNlbmRpZgogCiAjaWZkZWYg V0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJcGdf bXR4X3VubG9jaygmc2lnbmFsX2luZm9fbG9jayk7CiAjZW5kaWYKIH0KIApAQCAtNzgyLDEz ICs3ODAsMTMgQEAgc3RhdGljIHZvaWQKIHNldF9jYW5jZWxfcHN0YXRlKFBhcmFsbGVsU3Rh dGUgKnBzdGF0ZSkKIHsKICNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZz aWduYWxfaW5mb19sb2NrKTsKKwlwZ19tdHhfbG9jaygmc2lnbmFsX2luZm9fbG9jayk7CiAj ZW5kaWYKIAogCXNpZ25hbF9pbmZvLnBzdGF0ZSA9IHBzdGF0ZTsKIAogI2lmZGVmIFdJTjMy Ci0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCXBnX210eF91 bmxvY2soJnNpZ25hbF9pbmZvX2xvY2spOwogI2VuZGlmCiB9CiAKQEAgLTgwMiwxMyArODAw LDEzIEBAIHN0YXRpYyB2b2lkCiBzZXRfY2FuY2VsX3Nsb3RfYXJjaGl2ZShQYXJhbGxlbFNs b3QgKnNsb3QsIEFyY2hpdmVIYW5kbGUgKkFIKQogewogI2lmZGVmIFdJTjMyCi0JRW50ZXJD cml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCXBnX210eF9sb2NrKCZzaWdu YWxfaW5mb19sb2NrKTsKICNlbmRpZgogCiAJc2xvdC0+QUggPSBBSDsKIAogI2lmZGVmIFdJ TjMyCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCXBnX210 eF91bmxvY2soJnNpZ25hbF9pbmZvX2xvY2spOwogI2VuZGlmCiB9CiAKQEAgLTEwNjksMTEg KzEwNjcsMTEgQEAgUGFyYWxsZWxCYWNrdXBFbmQoQXJjaGl2ZUhhbmRsZSAqQUgsIFBhcmFs bGVsU3RhdGUgKnBzdGF0ZSkKIAogCS8qIFRlbGwgdGhlIHdvcmtlcnMgdGhleSBjYW4gZXhp dCAqLwogI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsK KwlwZ19tdHhfbG9jaygmbXNnX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBwc3RhdGUtPm51 bVdvcmtlcnM7IGkrKykKIAkJcHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0uY2hhbkNsb3NlZCA9 IHRydWU7Ci0JV2FrZUFsbENvbmRpdGlvblZhcmlhYmxlKCZ3b3JrZXJfY3YpOwotCUxlYXZl Q3JpdGljYWxTZWN0aW9uKCZtc2dfbG9jayk7CisJcGdfY25kX2Jyb2FkY2FzdCgmd29ya2Vy X2N2KTsKKwlwZ19tdHhfdW5sb2NrKCZtc2dfbG9jayk7CiAjZWxzZQogCS8qIENsb3NlIHRo ZSBzb2NrZXRzIHNvIHRoYXQgdGhlIHdvcmtlcnMga25vdyB0aGV5IGNhbiBleGl0ICovCiAJ Zm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQpAQCAtMTUyNywxMiAr MTUyNSwxMiBAQCBnZXRNZXNzYWdlRnJvbUxlYWRlcihQYXJhbGxlbFNsb3QgKnNsb3QpCiAj aWZkZWYgV0lOMzIKIAljaGFyCSAgICptc2c7CiAKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigm bXNnX2xvY2spOworCXBnX210eF9sb2NrKCZtc2dfbG9jayk7CiAJd2hpbGUgKHNsb3QtPmNt ZE1zZyA9PSBOVUxMICYmICFzbG90LT5jaGFuQ2xvc2VkKQotCQlTbGVlcENvbmRpdGlvblZh cmlhYmxlQ1MoJndvcmtlcl9jdiwgJm1zZ19sb2NrLCBJTkZJTklURSk7CisJCXBnX2NuZF93 YWl0KCZ3b3JrZXJfY3YsICZtc2dfbG9jayk7CiAJbXNnID0gc2xvdC0+Y21kTXNnOwkJCS8q IE5VTEwgaGVyZSBtZWFucyB0aGUgY2hhbm5lbCB3YXMgY2xvc2VkICovCiAJc2xvdC0+Y21k TXNnID0gTlVMTDsKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbXNnX2xvY2spOworCXBnX210 eF91bmxvY2soJm1zZ19sb2NrKTsKIAlyZXR1cm4gbXNnOwogI2Vsc2UKIAlyZXR1cm4gcmVh ZE1lc3NhZ2VGcm9tUGlwZShzbG90LT5waXBlUmV2UmVhZCk7CkBAIC0xNTQ4LDExICsxNTQ2 LDExIEBAIHN0YXRpYyB2b2lkCiBzZW5kTWVzc2FnZVRvTGVhZGVyKFBhcmFsbGVsU2xvdCAq c2xvdCwgY29uc3QgY2hhciAqc3RyKQogewogI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0aWNh bFNlY3Rpb24oJm1zZ19sb2NrKTsKKwlwZ19tdHhfbG9jaygmbXNnX2xvY2spOwogCUFzc2Vy dChzbG90LT5yZXNwTXNnID09IE5VTEwpOwogCXNsb3QtPnJlc3BNc2cgPSBwZ19zdHJkdXAo c3RyKTsKLQlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJmxlYWRlcl9jdik7Ci0JTGVhdmVD cml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwlwZ19jbmRfYnJvYWRjYXN0KCZsZWFkZXJf Y3YpOworCXBnX210eF91bmxvY2soJm1zZ19sb2NrKTsKICNlbHNlCiAJaW50CQkJbGVuID0g c3RybGVuKHN0cikgKyAxOwogCkBAIC0xNjE0LDcgKzE2MTIsNyBAQCBnZXRNZXNzYWdlRnJv bVdvcmtlcihQYXJhbGxlbFN0YXRlICpwc3RhdGUsIGJvb2wgZG9fd2FpdCwgaW50ICp3b3Jr ZXIpCiAJICogUmV0dXJuIHRoZSBmaXJzdCBwZW5kaW5nIHJlc3BvbnNlOyBpZiBub25lIGFu ZCBkb193YWl0LCBzbGVlcCBvbgogCSAqIGxlYWRlcl9jdiB1bnRpbCBhIHdvcmtlciBwb3N0 cyBvbmUuCiAJICovCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwlwZ19t dHhfbG9jaygmbXNnX2xvY2spOwogCWZvciAoOzspCiAJewogCQlib29sCQlhbnlEaWVkID0g ZmFsc2U7CkBAIC0xNjI5LDcgKzE2MjcsNyBAQCBnZXRNZXNzYWdlRnJvbVdvcmtlcihQYXJh bGxlbFN0YXRlICpwc3RhdGUsIGJvb2wgZG9fd2FpdCwgaW50ICp3b3JrZXIpCiAJCQlpZiAo bXNnICE9IE5VTEwpCiAJCQl7CiAJCQkJcHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0ucmVzcE1z ZyA9IE5VTEw7Ci0JCQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJm1zZ19sb2NrKTsKKwkJCQlw Z19tdHhfdW5sb2NrKCZtc2dfbG9jayk7CiAJCQkJKndvcmtlciA9IGk7CiAJCQkJcmV0dXJu IG1zZzsKIAkJCX0KQEAgLTE2NDMsMTUgKzE2NDEsMTUgQEAgZ2V0TWVzc2FnZUZyb21Xb3Jr ZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlLCBib29sIGRvX3dhaXQsIGludCAqd29ya2VyKQog CQkgKi8KIAkJaWYgKGFueURpZWQpCiAJCXsKLQkJCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZt c2dfbG9jayk7CisJCQlwZ19tdHhfdW5sb2NrKCZtc2dfbG9jayk7CiAJCQlyZXR1cm4gTlVM TDsKIAkJfQogCQlpZiAoIWRvX3dhaXQpCiAJCXsKLQkJCUxlYXZlQ3JpdGljYWxTZWN0aW9u KCZtc2dfbG9jayk7CisJCQlwZ19tdHhfdW5sb2NrKCZtc2dfbG9jayk7CiAJCQlyZXR1cm4g TlVMTDsKIAkJfQotCQlTbGVlcENvbmRpdGlvblZhcmlhYmxlQ1MoJmxlYWRlcl9jdiwgJm1z Z19sb2NrLCBJTkZJTklURSk7CisJCXBnX2NuZF93YWl0KCZsZWFkZXJfY3YsICZtc2dfbG9j ayk7CiAJfQogI2Vsc2UKIAlpbnQJCQlpOwpAQCAtMTcyMywxMSArMTcyMSwxMSBAQCBzZW5k TWVzc2FnZVRvV29ya2VyKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwgaW50IHdvcmtlciwgY29u c3QgY2hhciAqc3RyKQogI2lmZGVmIFdJTjMyCiAJUGFyYWxsZWxTbG90ICpzbG90ID0gJnBz dGF0ZS0+cGFyYWxsZWxTbG90W3dvcmtlcl07CiAKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigm bXNnX2xvY2spOworCXBnX210eF9sb2NrKCZtc2dfbG9jayk7CiAJQXNzZXJ0KHNsb3QtPmNt ZE1zZyA9PSBOVUxMKTsKIAlzbG90LT5jbWRNc2cgPSBwZ19zdHJkdXAoc3RyKTsKLQlXYWtl QWxsQ29uZGl0aW9uVmFyaWFibGUoJndvcmtlcl9jdik7Ci0JTGVhdmVDcml0aWNhbFNlY3Rp b24oJm1zZ19sb2NrKTsKKwlwZ19jbmRfYnJvYWRjYXN0KCZ3b3JrZXJfY3YpOworCXBnX210 eF91bmxvY2soJm1zZ19sb2NrKTsKICNlbHNlCiAJaW50CQkJbGVuID0gc3RybGVuKHN0cikg KyAxOwogCi0tIAoyLjU0LjAud2luZG93cy4xCgo= --------------fr8ceRE6XeXSiRRez4jk4c2e Content-Type: text/plain; charset=UTF-8; name="v2-0004-pg_dump-use-threads-on-all-platforms-and-remove-t.patch" Content-Disposition: attachment; filename*0="v2-0004-pg_dump-use-threads-on-all-platforms-and-remove-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1YmY3MDdiY2I5ZTNjMWEwZmY1ZDk2Y2MyNmI4ODY4NTRkMWU5MDA1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCA5IEp1bCAyMDI2IDEzOjE4OjI0IC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MiA0LzVdIHBnX2R1bXA6IHVzZSB0aHJlYWRzIG9uIGFsbCBwbGF0Zm9ybXMgYW5k IHJlbW92ZSB0aGUKIGZvcmsvcGlwZSBwYXRoCgpQYXJhbGxlbCBkdW1wIGFuZCByZXN0b3Jl IHVzZWQgd29ya2VyIHByb2Nlc3NlcyBvbiBub24tV2luZG93cyAoZm9yaygpCnBsdXMgc29j a2V0cGFpciBwaXBlcyBhbmQgc2VsZWN0KCkpIGFuZCB0aHJlYWRzIG9uIFdpbmRvd3MuICBO b3cgZXZlcnkKcGxhdGZvcm0gdXNlcyB0aHJlYWRzLCBjb29yZGluYXRlZCBieSB0aGUgaW4t cHJvY2VzcyBjaGFubmVsIHRoYXQgd2FzCmludHJvZHVjZWQgZm9yIFdpbmRvd3MuCgpDcmVh dGUgd29ya2VycyB3aXRoIHBnX3RocmRfY3JlYXRlKCkgYW5kIHJlYXAgdGhlbSB3aXRoIHBn X3RocmRfam9pbigpLAp3aGljaCBhbHNvIHJldGlyZXMgdGhlIE1BWElNVU1fV0FJVF9PQkpF Q1RTIHdvcmtlciBjYXAgb24gV2luZG93cy4gIEEKd29ya2VyIGZpbmRzIGl0cyBvd24gc2xv dCB0aHJvdWdoIGEgdGhyZWFkX2xvY2FsIHBvaW50ZXIgcmF0aGVyIHRoYW4KbWF0Y2hpbmcg cGlkL3RocmVhZElkLCBhbmQgZXhpdF9uaWNlbHkoKSBlbmRzIG9ubHkgdGhlIGNhbGxpbmcg dGhyZWFkCnZpYSBwZ190aHJkX2V4aXQoKS4gIFRoZSBjb21tYW5kIGNoYW5uZWwgKGNtZE1z Zy9yZXNwTXNnIHVuZGVyIG1zZ19sb2NrLAp3b3JrZXJfY3YvbGVhZGVyX2N2KSBiZWNvbWVz IHRoZSBzb2xlIHRyYW5zcG9ydCwgc28gcGdwaXBlKCksIHNlbGVjdCgpLApyZWFkTWVzc2Fn ZUZyb21QaXBlKCkgYW5kIHRoZSBwZXItc2xvdCBwaXBlIGRlc2NyaXB0b3JzIGFsbCBnby4K CkNhbmNlbGxhdGlvbiBpcyB1bmlmaWVkOiB3aXRoIG5vIHdvcmtlciBwcm9jZXNzZXMgdG8g c2lnbmFsLCB0aGUgVW5peApoYW5kbGVyIGNhbmNlbHMgZWFjaCB3b3JrZXIncyBiYWNrZW5k IHdpdGggUFFjYW5jZWwoKSBqdXN0IGFzIHRoZQpXaW5kb3dzIGNvbnNvbGUgaGFuZGxlciBk b2VzLCBhbmQgdGhlIGlzX2NhbmNlbF9pbl9wcm9ncmVzcygpIGZsYWcgdGhhdApzaWxlbmNl cyB0aGUgcmVzdWx0aW5nIHdvcmtlciBlcnJvcnMgaXMgbm8gbG9uZ2VyIFdpbmRvd3Mtb25s eS4KClJlcXVpcmVzIHRoZSBwZ190aHJlYWRzLmggcG9ydGFibGUgdGhyZWFkaW5nIEFQSS4K LS0tCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgfCAgIDggKy0KIHNyYy9i aW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICB8IDkyMyArKysrKystLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICAgICAgICB8ICAgNyAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jIHwgIDM2ICstCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmggfCAgMTUgKy0KIDUgZmlsZXMgY2hhbmdlZCwg MTk4IGluc2VydGlvbnMoKyksIDc5MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQK aW5kZXggNzliZDUwMzY4NC4uNWZkZjE4MTI4YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAt MjIsNyArMjIsNyBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiBwZ19kdW1w X2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJwZ2R1bXBfY29tbW9uJywKICAgcGdfZHVt cF9jb21tb25fc291cmNlcywKICAgY19wY2g6IHBjaF9wb3N0Z3Jlc19mZV9oLAotICBkZXBl bmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgbHo0LCB6bGliLCB6c3RkXSwKKyAg ZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIGx6NCwgemxpYiwgenN0ZCwg dGhyZWFkX2RlcF0sCiAgIGt3YXJnczogaW50ZXJuYWxfbGliX2FyZ3MsCiApCiAKQEAgLTQy LDcgKzQyLDcgQEAgZW5kaWYKIHBnX2R1bXAgPSBleGVjdXRhYmxlKCdwZ19kdW1wJywKICAg cGdfZHVtcF9zb3VyY2VzLAogICBsaW5rX3dpdGg6IFtwZ19kdW1wX2NvbW1vbl0sCi0gIGRl cGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCB6bGliXSwKKyAgZGVwZW5kZW5j aWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIHpsaWIsIHRocmVhZF9kZXBdLAogICBrd2Fy Z3M6IGRlZmF1bHRfYmluX2FyZ3MsCiApCiBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wCkBAIC02 MSw3ICs2MSw3IEBAIGVuZGlmCiBwZ19kdW1wYWxsID0gZXhlY3V0YWJsZSgncGdfZHVtcGFs bCcsCiAgIHBnX2R1bXBhbGxfc291cmNlcywKICAgbGlua193aXRoOiBbcGdfZHVtcF9jb21t b25dLAotICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgemxpYl0sCisg IGRlcGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCB6bGliLCB0aHJlYWRfZGVw XSwKICAga3dhcmdzOiBkZWZhdWx0X2Jpbl9hcmdzLAogKQogYmluX3RhcmdldHMgKz0gcGdf ZHVtcGFsbApAQCAtODAsNyArODAsNyBAQCBlbmRpZgogcGdfcmVzdG9yZSA9IGV4ZWN1dGFi bGUoJ3BnX3Jlc3RvcmUnLAogICBwZ19yZXN0b3JlX3NvdXJjZXMsCiAgIGxpbmtfd2l0aDog W3BnX2R1bXBfY29tbW9uXSwKLSAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGli cHEsIHpsaWJdLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgemxp YiwgdGhyZWFkX2RlcF0sCiAgIGt3YXJnczogZGVmYXVsdF9iaW5fYXJncywKICkKIGJpbl90 YXJnZXRzICs9IHBnX3Jlc3RvcmUKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJh bGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXggNDk1OWYxMGQ4MS4u MGM5OGJlNmY0YSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTE2LDEzICsxNiwxMyBAQAogLyoK ICAqIFBhcmFsbGVsIG9wZXJhdGlvbiB3b3JrcyBsaWtlIHRoaXM6CiAgKgotICogVGhlIG9y aWdpbmFsLCBsZWFkZXIgcHJvY2VzcyBjYWxscyBQYXJhbGxlbEJhY2t1cFN0YXJ0KCksIHdo aWNoIGZvcmtzIG9mZgotICogdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNz ZXMsIHdoaWNoIGVhY2ggZW50ZXIgV2FpdEZvckNvbW1hbmRzKCkuCisgKiBUaGUgb3JpZ2lu YWwsIGxlYWRlciB0aHJlYWQgY2FsbHMgUGFyYWxsZWxCYWNrdXBTdGFydCgpLCB3aGljaCBz dGFydHMKKyAqIHRoZSBkZXNpcmVkIG51bWJlciBvZiB3b3JrZXIgdGhyZWFkcywgd2hpY2gg ZWFjaCBlbnRlciBXYWl0Rm9yQ29tbWFuZHMoKS4KICAqCi0gKiBUaGUgbGVhZGVyIHByb2Nl c3MgZGlzcGF0Y2hlcyBhbiBpbmRpdmlkdWFsIHdvcmsgaXRlbSB0byBvbmUgb2YgdGhlIHdv cmtlcgotICogcHJvY2Vzc2VzIGluIERpc3BhdGNoSm9iRm9yVG9jRW50cnkoKS4gIFdlIHNl bmQgYSBjb21tYW5kIHN0cmluZyBzdWNoIGFzCisgKiBUaGUgbGVhZGVyIHRocmVhZCBkaXNw YXRjaGVzIGFuIGluZGl2aWR1YWwgd29yayBpdGVtIHRvIG9uZSBvZiB0aGUgd29ya2VyCisg KiB0aHJlYWRzIGluIERpc3BhdGNoSm9iRm9yVG9jRW50cnkoKS4gIFdlIHNlbmQgYSBjb21t YW5kIHN0cmluZyBzdWNoIGFzCiAgKiAiRFVNUCAxMjM0IiBvciAiUkVTVE9SRSAxMjM0Iiwg d2hlcmUgMTIzNCBpcyB0aGUgVG9jRW50cnkgSUQuCi0gKiBUaGUgd29ya2VyIHByb2Nlc3Mg cmVjZWl2ZXMgYW5kIGRlY29kZXMgdGhlIGNvbW1hbmQgYW5kIHBhc3NlcyBpdCB0byB0aGUK KyAqIFRoZSB3b3JrZXIgcmVjZWl2ZXMgYW5kIGRlY29kZXMgdGhlIGNvbW1hbmQgYW5kIHBh c3NlcyBpdCB0byB0aGUKICAqIHJvdXRpbmUgcG9pbnRlZCB0byBieSBBSC0+V29ya2VySm9i RHVtcFB0ciBvciBBSC0+V29ya2VySm9iUmVzdG9yZVB0ciwKICAqIHdoaWNoIGFyZSByb3V0 aW5lcyBvZiB0aGUgY3VycmVudCBhcmNoaXZlIGZvcm1hdC4gIFRoYXQgcm91dGluZSBwZXJm b3JtcwogICogdGhlIHJlcXVpcmVkIGFjdGlvbiAoZHVtcCBvciByZXN0b3JlKSBhbmQgcmV0 dXJucyBhbiBpbnRlZ2VyIHN0YXR1cyBjb2RlLgpAQCAtMzEsNTAgKzMxLDQyIEBACiAgKiBE aXNwYXRjaEpvYkZvclRvY0VudHJ5KCkuICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZG9lcyBz dGF0ZSB1cGRhdGluZwogICogZm9yIHRoZSBsZWFkZXIgY29udHJvbCBsb2dpYyBpbiBwZ19i YWNrdXBfYXJjaGl2ZXIuYy4KICAqCisgKiBDb21tYW5kcyBhbmQgcmVzcG9uc2VzIGFyZSBl eGNoYW5nZWQgdGhyb3VnaCBhIHNtYWxsIGluLXByb2Nlc3MgY2hhbm5lbCBpbgorICogZWFj aCB3b3JrZXIncyBQYXJhbGxlbFNsb3QgKHNlZSBiZWxvdyksIHByb3RlY3RlZCBieSBtc2df bG9jay4gIFRoZSBsZWFkZXIKKyAqIGFuZCB3b3JrZXJzIGFyZSBhbGwgdGhyZWFkcyBpbiB0 aGUgc2FtZSBwcm9jZXNzLgorICoKICAqIEluIHByaW5jaXBsZSBhZGRpdGlvbmFsIGFyY2hp dmUtZm9ybWF0LXNwZWNpZmljIGluZm9ybWF0aW9uIG1pZ2h0IGJlIG5lZWRlZAogICogaW4g Y29tbWFuZHMgb3Igd29ya2VyIHN0YXR1cyByZXNwb25zZXMsIGJ1dCBzbyBmYXIgdGhhdCBo YXNuJ3QgcHJvdmVkCiAgKiBuZWNlc3NhcnksIHNpbmNlIHdvcmtlcnMgaGF2ZSBmdWxsIGNv cGllcyBvZiB0aGUgQXJjaGl2ZUhhbmRsZS9Ub2NFbnRyeQotICogZGF0YSBzdHJ1Y3R1cmVz LiAgUmVtZW1iZXIgdGhhdCB3ZSBoYXZlIGZvcmtlZCBvZmYgdGhlIHdvcmtlcnMgb25seSBh ZnRlcgotICogd2UgaGF2ZSByZWFkIGluIHRoZSBjYXRhbG9nLiAgVGhhdCdzIHdoeSBvdXIg d29ya2VyIHByb2Nlc3NlcyBjYW4gYWxzbwotICogYWNjZXNzIHRoZSBjYXRhbG9nIGluZm9y bWF0aW9uLiAgKEluIHRoZSBXaW5kb3dzIGNhc2UsIHRoZSB3b3JrZXJzIGFyZQotICogdGhy ZWFkcyBpbiB0aGUgc2FtZSBwcm9jZXNzLiAgVG8gYXZvaWQgcHJvYmxlbXMsIHRoZXkgd29y ayB3aXRoIGNsb25lZAotICogY29waWVzIG9mIHRoZSBBcmNoaXZlIGRhdGEgc3RydWN0dXJl OyBzZWUgUnVuV29ya2VyKCkuKQorICogZGF0YSBzdHJ1Y3R1cmVzLiAgUmVtZW1iZXIgdGhh dCB3ZSBoYXZlIHN0YXJ0ZWQgdGhlIHdvcmtlcnMgb25seSBhZnRlciB3ZQorICogaGF2ZSBy ZWFkIGluIHRoZSBjYXRhbG9nLiAgVGhhdCdzIHdoeSBvdXIgd29ya2VyIHRocmVhZHMgY2Fu IGFsc28gYWNjZXNzCisgKiB0aGUgY2F0YWxvZyBpbmZvcm1hdGlvbi4gIFRvIGF2b2lkIHBy b2JsZW1zLCB3b3JrZXJzIG9wZXJhdGUgb24gY2xvbmVkCisgKiBjb3BpZXMgb2YgdGhlIEFy Y2hpdmUgZGF0YSBzdHJ1Y3R1cmU7IHNlZSBSdW5Xb3JrZXIoKS4KICAqCi0gKiBJbiB0aGUg bGVhZGVyIHByb2Nlc3MsIHRoZSB3b3JrZXJTdGF0dXMgZmllbGQgZm9yIGVhY2ggd29ya2Vy IGhhcyBvbmUgb2YKLSAqIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICoJCVdSS1JfTk9UX1NU QVJURUQ6IHdlJ3ZlIG5vdCB5ZXQgZm9ya2VkIHRoaXMgd29ya2VyCisgKiBUaGUgd29ya2Vy U3RhdHVzIGZpZWxkIGZvciBlYWNoIHdvcmtlciBpcyBvbmx5IGFjY2Vzc2VkIGJ5IHRoZSBs ZWFkZXIsIGFuZAorICogaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAqCQlX UktSX05PVF9TVEFSVEVEOiB3ZSd2ZSBub3QgeWV0IHN0YXJ0ZWQgdGhpcyB3b3JrZXIKICAq CQlXUktSX0lETEU6IGl0J3Mgd2FpdGluZyBmb3IgYSBjb21tYW5kCiAgKgkJV1JLUl9XT1JL SU5HOiBpdCdzIHdvcmtpbmcgb24gYSBjb21tYW5kCi0gKgkJV1JLUl9URVJNSU5BVEVEOiBw cm9jZXNzIGVuZGVkCisgKgkJV1JLUl9URVJNSU5BVEVEOiB3b3JrZXIgdGhyZWFkIGVuZGVk CiAgKiBUaGUgcHN0YXRlLT50ZVtdIGVudHJ5IGZvciBlYWNoIHdvcmtlciBpcyB2YWxpZCB3 aGVuIGl0J3MgaW4gV1JLUl9XT1JLSU5HCiAgKiBzdGF0ZSwgYW5kIG11c3QgYmUgTlVMTCBp biBvdGhlciBzdGF0ZXMuCiAgKi8KIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKLSNp Zm5kZWYgV0lOMzIKLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jaW5jbHVkZSA8c3lzL3dh aXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1 ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUg ImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCiAjaW5j bHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAjaW5jbHVkZSAicG9ydC9wZ190aHJlYWRzLmgi Ci0jaWZkZWYgV0lOMzIKLSNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCi0jZW5kaWYKLQot LyogTW5lbW9uaWMgbWFjcm9zIGZvciBpbmRleGluZyB0aGUgZmQgYXJyYXkgcmV0dXJuZWQg YnkgcGlwZSgyKSAqLwotI2RlZmluZSBQSVBFX1JFQUQJCQkJCQkJMAotI2RlZmluZSBQSVBF X1dSSVRFCQkJCQkJCTEKIAogI2RlZmluZSBOT19TTE9UICgtMSkJCQkvKiBGYWlsdXJlIHJl c3VsdCBmb3IgR2V0SWRsZVdvcmtlcigpICovCiAKLS8qIFdvcmtlciBwcm9jZXNzIHN0YXR1 c2VzICovCisvKiBXb3JrZXIgdGhyZWFkIHN0YXR1c2VzICovCiB0eXBlZGVmIGVudW0KIHsK IAlXUktSX05PVF9TVEFSVEVEID0gMCwKQEAgLTg5LDkgKzgxLDggQEAgdHlwZWRlZiBlbnVt CiAvKgogICogUHJpdmF0ZSBwZXItcGFyYWxsZWwtd29ya2VyIHN0YXRlICh0eXBlZGVmIGZv ciB0aGlzIGlzIGluIHBhcmFsbGVsLmgpLgogICoKLSAqIE11Y2ggb2YgdGhpcyBpcyB2YWxp ZCBvbmx5IGluIHRoZSBsZWFkZXIgcHJvY2VzcyAob3IsIG9uIFdpbmRvd3MsIHNob3VsZAot ICogYmUgdG91Y2hlZCBvbmx5IGJ5IHRoZSBsZWFkZXIgdGhyZWFkKS4gIEJ1dCB0aGUgQUgg ZmllbGQgc2hvdWxkIGJlIHRvdWNoZWQKLSAqIG9ubHkgYnkgd29ya2Vycy4gIFRoZSBwaXBl IGRlc2NyaXB0b3JzIGFyZSB2YWxpZCBldmVyeXdoZXJlLgorICogTXVjaCBvZiB0aGlzIGlz IHZhbGlkIG9ubHkgaW4gdGhlIGxlYWRlciB0aHJlYWQuICBCdXQgdGhlIEFIIGZpZWxkIHNo b3VsZAorICogYmUgdG91Y2hlZCBvbmx5IGJ5IHRoZSBvd25pbmcgd29ya2VyIHRocmVhZC4K ICAqLwogc3RydWN0IFBhcmFsbGVsU2xvdAogewpAQCAtMTAzLDM4ICs5NCwyMiBAQCBzdHJ1 Y3QgUGFyYWxsZWxTbG90CiAKIAlBcmNoaXZlSGFuZGxlICpBSDsJCQkvKiBBcmNoaXZlIGRh dGEgd29ya2VyIGlzIHVzaW5nICovCiAKLQlpbnQJCQlwaXBlUmVhZDsJCS8qIGxlYWRlcidz IGVuZCBvZiB0aGUgcGlwZXMgKi8KLQlpbnQJCQlwaXBlV3JpdGU7Ci0JaW50CQkJcGlwZVJl dlJlYWQ7CS8qIGNoaWxkJ3MgZW5kIG9mIHRoZSBwaXBlcyAqLwotCWludAkJCXBpcGVSZXZX cml0ZTsKLQotI2lmZGVmIFdJTjMyCi0KIAkvKgotCSAqIEluLXByb2Nlc3MgY2hhbm5lbCB1 c2VkIGluc3RlYWQgb2YgdGhlIHBpcGVzIHdoZW4gd29ya2VycyBhcmUgdGhyZWFkcy4KLQkg KiBBIG1lc3NhZ2UgaXMgYSBtYWxsb2MnZCBzdHJpbmc7IG93bmVyc2hpcCBwYXNzZXMgdG8g dGhlIHJlY2VpdmVyLgotCSAqIFByb3RlY3RlZCBieSBtc2dfbG9jay4KKwkgKiBJbi1wcm9j ZXNzIGNoYW5uZWwgdXNlZCB0byBleGNoYW5nZSBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBsZWFk ZXIgYW5kCisJICogdGhpcyB3b3JrZXIuICBBIG1lc3NhZ2UgaXMgYSBtYWxsb2MnZCBzdHJp bmc7IG93bmVyc2hpcCBwYXNzZXMgdG8gdGhlCisJICogcmVjZWl2ZXIuICBBbGwgZmllbGRz IGFyZSBwcm90ZWN0ZWQgYnkgbXNnX2xvY2suCiAJICovCiAJY2hhcgkgICAqY21kTXNnOwkJ CS8qIGNvbW1hbmQgcGVuZGluZyBmb3IgdGhlIHdvcmtlciwgb3IgTlVMTCAqLwogCWNoYXIJ ICAgKnJlc3BNc2c7CQkvKiByZXNwb25zZSBwZW5kaW5nIGZvciB0aGUgbGVhZGVyLCBvciBO VUxMICovCiAJYm9vbAkJY2hhbkNsb3NlZDsJCS8qIGxlYWRlciBjbG9zZWQgdGhlIGNvbW1h bmQgY2hhbm5lbCAoRU9GKSAqLwogCWJvb2wJCXdvcmtlckRpZWQ7CQkvKiB3b3JrZXIgZXhp dGVkIHdpdGhvdXQgc2VuZGluZyBhIHJlc3BvbnNlICovCi0jZW5kaWYKIAotCS8qIENoaWxk IHByb2Nlc3MvdGhyZWFkIGlkZW50aXR5IGluZm86ICovCi0jaWZkZWYgV0lOMzIKLQl1aW50 cHRyX3QJaFRocmVhZDsKLQl1bnNpZ25lZCBpbnQgdGhyZWFkSWQ7Ci0jZWxzZQotCXBpZF90 CQlwaWQ7Ci0jZW5kaWYKKwlwZ190aHJkX3QJdGhyZWFkOwkJCS8qIHdvcmtlciB0aHJlYWQg aWRlbnRpdHkgKi8KIH07CiAKLSNpZmRlZiBXSU4zMgotCiAvKgotICogU3RydWN0dXJlIHRv IGhvbGQgaW5mbyBwYXNzZWQgYnkgX2JlZ2ludGhyZWFkZXgoKSB0byB0aGUgZnVuY3Rpb24g aXQgY2FsbHMKLSAqIHZpYSBpdHMgc2luZ2xlIGFsbG93ZWQgYXJndW1lbnQuCisgKiBTdHJ1 Y3R1cmUgdG8gaG9sZCBpbmZvIHBhc3NlZCB0byBhIG5ld2x5LXN0YXJ0ZWQgd29ya2VyIHRo cmVhZCB2aWEgaXRzCisgKiBzaW5nbGUgYWxsb3dlZCBhcmd1bWVudC4KICAqLwogdHlwZWRl ZiBzdHJ1Y3QKIHsKQEAgLTE0MiwyMCArMTE3LDYgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlQYXJh bGxlbFNsb3QgKnNsb3Q7CQkJLyogdGhpcyB3b3JrZXIncyBwYXJhbGxlbCBzbG90ICovCiB9 IFdvcmtlckluZm87CiAKLS8qIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgcGlwZSBhY2Nl c3MgKi8KLXN0YXRpYyBpbnQJcGdwaXBlKGludCBoYW5kbGVzWzJdKTsKLSNkZWZpbmUgcGlw ZXJlYWQoYSxiLGMpCQlyZWN2KGEsYixjLDApCi0jZGVmaW5lIHBpcGV3cml0ZShhLGIsYykJ c2VuZChhLGIsYywwKQotCi0jZWxzZQkJCQkJCQkvKiAhV0lOMzIgKi8KLQotLyogTm9uLVdp bmRvd3MgaW1wbGVtZW50YXRpb24gb2YgcGlwZSBhY2Nlc3MgKi8KLSNkZWZpbmUgcGdwaXBl KGEpCQkJcGlwZShhKQotI2RlZmluZSBwaXBlcmVhZChhLGIsYykJCXJlYWQoYSxiLGMpCi0j ZGVmaW5lIHBpcGV3cml0ZShhLGIsYykJd3JpdGUoYSxiLGMpCi0KLSNlbmRpZgkJCQkJCQkv KiBXSU4zMiAqLwotCiAvKgogICogU3RhdGUgaW5mbyBmb3IgYXJjaGl2ZV9jbG9zZV9jb25u ZWN0aW9uKCkgc2h1dGRvd24gY2FsbGJhY2suCiAgKi8KQEAgLTE3MSw5ICsxMzIsOCBAQCBz dGF0aWMgU2h1dGRvd25JbmZvcm1hdGlvbiBzaHV0ZG93bl9pbmZvOwogICogU3RhdGUgaW5m byBmb3Igc2lnbmFsIGhhbmRsaW5nLgogICogV2UgYXNzdW1lIHNpZ25hbF9pbmZvIGluaXRp YWxpemVzIHRvIHplcm9lcy4KICAqCi0gKiBPbiBVbml4LCBteUFIIGlzIHRoZSBsZWFkZXIg REIgY29ubmVjdGlvbiBpbiB0aGUgbGVhZGVyIHByb2Nlc3MsIGFuZCB0aGUKLSAqIHdvcmtl cidzIG93biBjb25uZWN0aW9uIGluIHdvcmtlciBwcm9jZXNzZXMuICBPbiBXaW5kb3dzLCB3 ZSBoYXZlIG9ubHkgb25lCi0gKiBpbnN0YW5jZSBvZiBzaWduYWxfaW5mbywgc28gbXlBSCBp cyB0aGUgbGVhZGVyIGNvbm5lY3Rpb24gYW5kIHRoZSB3b3JrZXIKKyAqIFNpbmNlIHRoZSB3 b3JrZXJzIGFyZSB0aHJlYWRzIGluIHRoZSBsZWFkZXIgcHJvY2VzcywgdGhlcmUncyBvbmx5 IG9uZQorICogaW5zdGFuY2Ugb2Ygc2lnbmFsX2luZm86IG15QUggaXMgdGhlIGxlYWRlciBj b25uZWN0aW9uLCBhbmQgdGhlIHdvcmtlcgogICogY29ubmVjdGlvbnMgbXVzdCBiZSBkdWcg b3V0IG9mIHBzdGF0ZS0+cGFyYWxsZWxTbG90W10uCiAgKi8KIHR5cGVkZWYgc3RydWN0IER1 bXBTaWduYWxJbmZvcm1hdGlvbgpAQCAtMTgxLDE0ICsxNDEsMTAgQEAgdHlwZWRlZiBzdHJ1 Y3QgRHVtcFNpZ25hbEluZm9ybWF0aW9uCiAJQXJjaGl2ZUhhbmRsZSAqbXlBSDsJCS8qIGRh dGFiYXNlIGNvbm5lY3Rpb24gdG8gaXNzdWUgY2FuY2VsIGZvciAqLwogCVBhcmFsbGVsU3Rh dGUgKnBzdGF0ZTsJCS8qIHBhcmFsbGVsIHN0YXRlLCBpZiBhbnkgKi8KIAlib29sCQloYW5k bGVyX3NldDsJLyogc2lnbmFsIGhhbmRsZXIgc2V0IHVwIGluIHRoaXMgcHJvY2Vzcz8gKi8K LSNpZm5kZWYgV0lOMzIKLQlib29sCQlhbV93b3JrZXI7CQkvKiBhbSBJIGEgd29ya2VyIHBy b2Nlc3M/ICovCi0jZW5kaWYKIH0gRHVtcFNpZ25hbEluZm9ybWF0aW9uOwogCiBzdGF0aWMg dm9sYXRpbGUgRHVtcFNpZ25hbEluZm9ybWF0aW9uIHNpZ25hbF9pbmZvOwogCi0jaWZkZWYg V0lOMzIKIHN0YXRpYyBwZ19tdHhfdCBzaWduYWxfaW5mb19sb2NrID0gUEdfTVRYX0lOSVQ7 CiAKIC8qCkBAIC0xOTksNyArMTU1LDYgQEAgc3RhdGljIHBnX210eF90IHNpZ25hbF9pbmZv X2xvY2sgPSBQR19NVFhfSU5JVDsKIHN0YXRpYyBwZ19tdHhfdCBtc2dfbG9jayA9IFBHX01U WF9JTklUOwogc3RhdGljIHBnX2NuZF90IHdvcmtlcl9jdjsKIHN0YXRpYyBwZ19jbmRfdCBs ZWFkZXJfY3Y7Ci0jZW5kaWYKIAogLyoKICAqIFdyaXRlIGEgc2ltcGxlIHN0cmluZyB0byBz dGRlcnIgLS0tIG11c3QgYmUgc2FmZSBpbiBhIHNpZ25hbCBoYW5kbGVyLgpAQCAtMjE1LDM1 ICsxNzAsMzIgQEAgc3RhdGljIHBnX2NuZF90IGxlYWRlcl9jdjsKIAl9IHdoaWxlICgwKQog CiAKLSNpZmRlZiBXSU4zMgotLyogZ2xvYmFsbHkgdmlzaWJsZSB2YXJpYWJsZXMgKG5lZWRl ZCBieSBleGl0X25pY2VseSkgKi8KLWJvb2wJCXBhcmFsbGVsX2luaXRfZG9uZSA9IGZhbHNl OwotRFdPUkQJCW1haW5UaHJlYWRJZDsKLSNlbmRpZgkJCQkJCQkvKiBXSU4zMiAqLworLyog UG9pbnRlciB0byBlYWNoIHdvcmtlciB0aHJlYWQncyBQYXJhbGxlbFNsb3QuICBOVUxMIGlu IHRoZSBsZWFkZXIgdGhyZWFkLiAqLworc3RhdGljIHRocmVhZF9sb2NhbCBQYXJhbGxlbFNs b3QgKnBhcmFsbGVsX3Nsb3RfdGhyZWFkX2xvY2FsOworCisvKiBTZXQgb25jZSBpbml0X3Bh cmFsbGVsX2R1bXBfdXRpbHMoKSBoYXMgcnVuIChuZWVkZWQgYnkgZXhpdF9uaWNlbHkpLiAq Lworc3RhdGljIGJvb2wgcGFyYWxsZWxfaW5pdF9kb25lID0gZmFsc2U7CiAKIC8qIExvY2Fs IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBQYXJhbGxlbFNsb3QgKkdldE15UFNs b3QoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKTsKIHN0YXRpYyB2b2lkIGFyY2hpdmVfY2xvc2Vf Y29ubmVjdGlvbihpbnQgY29kZSwgdm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIFNodXRkb3du V29ya2Vyc0hhcmQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKTsKIHN0YXRpYyB2b2lkIFdhaXRG b3JUZXJtaW5hdGluZ1dvcmtlcnMoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKTsKK3N0YXRpYyB2 b2lkIGhhbmRsZV9hc3luY19jYW5jZWxsYXRpb24odm9pZCk7CiBzdGF0aWMgdm9pZCBzZXRf Y2FuY2VsX2hhbmRsZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBzZXRfY2FuY2VsX3BzdGF0ZShQ YXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIHZvaWQgc2V0X2NhbmNlbF9zbG90X2Fy Y2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMg dm9pZCBSdW5Xb3JrZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIFBhcmFsbGVsU2xvdCAqc2xvdCk7 CiBzdGF0aWMgaW50CUdldElkbGVXb3JrZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKTsKLXN0 YXRpYyBib29sIEhhc0V2ZXJ5V29ya2VyVGVybWluYXRlZChQYXJhbGxlbFN0YXRlICpwc3Rh dGUpOwogc3RhdGljIHZvaWQgbG9ja1RhYmxlRm9yV29ya2VyKEFyY2hpdmVIYW5kbGUgKkFI LCBUb2NFbnRyeSAqdGUpOwogc3RhdGljIHZvaWQgV2FpdEZvckNvbW1hbmRzKEFyY2hpdmVI YW5kbGUgKkFILCBQYXJhbGxlbFNsb3QgKnNsb3QpOwogc3RhdGljIGJvb2wgTGlzdGVuVG9X b3JrZXJzKEFyY2hpdmVIYW5kbGUgKkFILCBQYXJhbGxlbFN0YXRlICpwc3RhdGUsCiAJCQkJ CQkJYm9vbCBkb193YWl0KTsKIHN0YXRpYyBjaGFyICpnZXRNZXNzYWdlRnJvbUxlYWRlcihQ YXJhbGxlbFNsb3QgKnNsb3QpOwogc3RhdGljIHZvaWQgc2VuZE1lc3NhZ2VUb0xlYWRlcihQ YXJhbGxlbFNsb3QgKnNsb3QsIGNvbnN0IGNoYXIgKnN0cik7Ci1zdGF0aWMgaW50CXNlbGVj dF9sb29wKGludCBtYXhGZCwgZmRfc2V0ICp3b3JrZXJzZXQpOwogc3RhdGljIGNoYXIgKmdl dE1lc3NhZ2VGcm9tV29ya2VyKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJICBi b29sIGRvX3dhaXQsIGludCAqd29ya2VyKTsKIHN0YXRpYyB2b2lkIHNlbmRNZXNzYWdlVG9X b3JrZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQlpbnQgd29ya2VyLCBjb25z dCBjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKnJlYWRNZXNzYWdlRnJvbVBpcGUoaW50IGZk KTsKIAogI2RlZmluZSBtZXNzYWdlU3RhcnRzV2l0aChtc2csIHByZWZpeCkgXAogCShzdHJu Y21wKG1zZywgcHJlZml4LCBzdHJsZW4ocHJlZml4KSkgPT0gMCkKQEAgLTI1Nyw0OSArMjA5 LDM1IEBAIHN0YXRpYyBjaGFyICpyZWFkTWVzc2FnZUZyb21QaXBlKGludCBmZCk7CiB2b2lk CiBpbml0X3BhcmFsbGVsX2R1bXBfdXRpbHModm9pZCkKIHsKLSNpZmRlZiBXSU4zMgogCWlm ICghcGFyYWxsZWxfaW5pdF9kb25lKQogCXsKKyNpZmRlZiBXSU4zMgogCQlXU0FEQVRBCQl3 c2FEYXRhOwogCQlpbnQJCQllcnI7CiAKLQkJbWFpblRocmVhZElkID0gR2V0Q3VycmVudFRo cmVhZElkKCk7Ci0KLQkJLyogSW5pdGlhbGl6ZSB0aGUgaW4tcHJvY2VzcyBtZXNzYWdlLWNo YW5uZWwgY29uZGl0aW9uIHZhcmlhYmxlcyAqLwotCQlwZ19jbmRfaW5pdCgmd29ya2VyX2N2 KTsKLQkJcGdfY25kX2luaXQoJmxlYWRlcl9jdik7Ci0KIAkJLyogSW5pdGlhbGl6ZSBzb2Nr ZXQgYWNjZXNzICovCiAJCWVyciA9IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMiksICZ3c2FE YXRhKTsKIAkJaWYgKGVyciAhPSAwKQogCQkJcGdfZmF0YWwoIiVzKCkgZmFpbGVkOiBlcnJv ciBjb2RlICVkIiwgIldTQVN0YXJ0dXAiLCBlcnIpOworI2VuZGlmCisKKwkJLyogSW5pdGlh bGl6ZSB0aGUgaW4tcHJvY2VzcyBtZXNzYWdlLWNoYW5uZWwgY29uZGl0aW9uIHZhcmlhYmxl cyAqLworCQlwZ19jbmRfaW5pdCgmd29ya2VyX2N2KTsKKwkJcGdfY25kX2luaXQoJmxlYWRl cl9jdik7CiAKIAkJcGFyYWxsZWxfaW5pdF9kb25lID0gdHJ1ZTsKIAl9Ci0jZW5kaWYKIH0K IAogLyoKLSAqIEZpbmQgdGhlIFBhcmFsbGVsU2xvdCBmb3IgdGhlIGN1cnJlbnQgd29ya2Vy IHByb2Nlc3Mgb3IgdGhyZWFkLgorICogUmV0dXJucyB0cnVlIGluIGEgcGFyYWxsZWwgd29y a2VyIHRocmVhZCwgZmFsc2UgaW4gdGhlIGxlYWRlciB0aHJlYWQuCiAgKgotICogUmV0dXJu cyBOVUxMIGlmIG5vIG1hdGNoaW5nIHNsb3QgaXMgZm91bmQgKHRoaXMgaW1wbGllcyB3ZSdy ZSB0aGUgbGVhZGVyKS4KKyAqIEV4cG9ydGVkIGZvciB1c2UgYnkgZXhpdF9uaWNlbHkoKS4K ICAqLwotc3RhdGljIFBhcmFsbGVsU2xvdCAqCi1HZXRNeVBTbG90KFBhcmFsbGVsU3RhdGUg KnBzdGF0ZSkKK2Jvb2wKK2FtX3BhcmFsbGVsX3dvcmtlcl90aHJlYWQodm9pZCkKIHsKLQlp bnQJCQlpOwotCi0JZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQot CXsKLSNpZmRlZiBXSU4zMgotCQlpZiAocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0udGhyZWFk SWQgPT0gR2V0Q3VycmVudFRocmVhZElkKCkpCi0jZWxzZQotCQlpZiAocHN0YXRlLT5wYXJh bGxlbFNsb3RbaV0ucGlkID09IGdldHBpZCgpKQotI2VuZGlmCi0JCQlyZXR1cm4gJihwc3Rh dGUtPnBhcmFsbGVsU2xvdFtpXSk7Ci0JfQotCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBh cmFsbGVsX2luaXRfZG9uZSAmJiBwYXJhbGxlbF9zbG90X3RocmVhZF9sb2NhbCAhPSBOVUxM OwogfQogCiAvKgpAQCAtMzI1LDcgKzI2Myw3IEBAIGFyY2hpdmVfY2xvc2VfY29ubmVjdGlv bihpbnQgY29kZSwgdm9pZCAqYXJnKQogCWlmIChzaS0+cHN0YXRlKQogCXsKIAkJLyogSW4g cGFyYWxsZWwgbW9kZSwgbXVzdCBmaWd1cmUgb3V0IHdobyB3ZSBhcmUgKi8KLQkJUGFyYWxs ZWxTbG90ICpzbG90ID0gR2V0TXlQU2xvdChzaS0+cHN0YXRlKTsKKwkJUGFyYWxsZWxTbG90 ICpzbG90ID0gcGFyYWxsZWxfc2xvdF90aHJlYWRfbG9jYWw7CiAKIAkJaWYgKCFzbG90KQog CQl7CkBAIC0zNDYsMTggKzI4NCwxNSBAQCBhcmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24oaW50 IGNvZGUsIHZvaWQgKmFyZykKIAkJCWlmIChzbG90LT5BSCkKIAkJCQlEaXNjb25uZWN0RGF0 YWJhc2UoJihzbG90LT5BSC0+cHVibGljKSk7CiAKLSNpZmRlZiBXSU4zMgogCQkJLyoKIAkJ CSAqIFRlbGwgdGhlIGxlYWRlciB3ZSdyZSBnb25lIHNvIGl0IHN0b3BzIHdhaXRpbmcgZm9y IG91ciByZXBseS4KLQkJCSAqIE9uIFVuaXggdGhlIHdvcmtlciBpcyBhIHByb2Nlc3Mgd2hv c2UgZXhpdCBjbG9zZXMgdGhlIHBpcGUgYW5kCi0JCQkgKiB0aGUgbGVhZGVyIHNlZXMgRU9G OyB0aGUgaW4tcHJvY2VzcyBjaGFubmVsIGhhcyBubyBFT0YsIGFuZAotCQkJICogZXhpdF9u aWNlbHkoKSBlbmRzIG9ubHkgdGhpcyB0aHJlYWQsIHNvIHNpZ25hbCBpdCBleHBsaWNpdGx5 LgorCQkJICogVGhlIGluLXByb2Nlc3MgY2hhbm5lbCBoYXMgbm8gRU9GIGNvbmRpdGlvbiwg YW5kIGV4aXRfbmljZWx5KCkKKwkJCSAqIGVuZHMgb25seSB0aGlzIHRocmVhZCwgc28gd2Ug bXVzdCBzaWduYWwgdGhlIGxlYWRlciBleHBsaWNpdGx5LgogCQkJICovCiAJCQlwZ19tdHhf bG9jaygmbXNnX2xvY2spOwogCQkJc2xvdC0+d29ya2VyRGllZCA9IHRydWU7CiAJCQlwZ19j bmRfYnJvYWRjYXN0KCZsZWFkZXJfY3YpOwogCQkJcGdfbXR4X3VubG9jaygmbXNnX2xvY2sp OwotI2VuZGlmCiAJCX0KIAl9CiAJZWxzZQpAQCAtMzgyLDQzICszMTcsMjAgQEAgU2h1dGRv d25Xb3JrZXJzSGFyZChQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAJaW50CQkJaTsKIAogCS8q Ci0JICogVGVsbCBhbnkgd29ya2VycyB0aGF0IGFyZSB3YWl0aW5nIGZvciBjb21tYW5kcyB0 aGF0IHRoZXkgY2FuIGV4aXQuCisJICogVGVsbCBhbnkgd29ya2VycyB0aGF0IGFyZSB3YWl0 aW5nIGZvciBjb21tYW5kcyB0aGF0IHRoZXkgY2FuIGV4aXQgYnkKKwkgKiBjbG9zaW5nIHRo ZWlyIGNvbW1hbmQgY2hhbm5lbHMuCiAJICovCi0jaWZkZWYgV0lOMzIKIAlwZ19tdHhfbG9j aygmbXNnX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBwc3RhdGUtPm51bVdvcmtlcnM7IGkr KykKIAkJcHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0uY2hhbkNsb3NlZCA9IHRydWU7CiAJcGdf Y25kX2Jyb2FkY2FzdCgmd29ya2VyX2N2KTsKIAlwZ19tdHhfdW5sb2NrKCZtc2dfbG9jayk7 Ci0jZWxzZQotCi0JLyoKLQkgKiBDbG9zZSBvdXIgd3JpdGUgZW5kIG9mIHRoZSBzb2NrZXRz IHNvIHRoYXQgYW55IHdvcmtlcnMgd2FpdGluZyBmb3IKLQkgKiBjb21tYW5kcyBrbm93IHRo ZXkgY2FuIGV4aXQuICAoTm90ZTogc29tZSBvZiB0aGUgcGlwZVdyaXRlIGZpZWxkcyBtaWdo dAotCSAqIHN0aWxsIGJlIHplcm8sIGlmIHdlIGZhaWxlZCB0byBpbml0aWFsaXplIGFsbCB0 aGUgd29ya2Vycy4gIEhlbmNlLCBqdXN0Ci0JICogaWdub3JlIGVycm9ycyBoZXJlLikKLQkg Ki8KLQlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCi0JCWNsb3Nl c29ja2V0KHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpcGVXcml0ZSk7Ci0jZW5kaWYKLQot CS8qCi0JICogRm9yY2UgZWFybHkgdGVybWluYXRpb24gb2YgYW55IGNvbW1hbmRzIGN1cnJl bnRseSBpbiBwcm9ncmVzcy4KLQkgKi8KLSNpZm5kZWYgV0lOMzIKLQkvKiBPbiBub24tV2lu ZG93cywgc2VuZCBTSUdURVJNIHRvIGVhY2ggd29ya2VyIHByb2Nlc3MuICovCi0JZm9yIChp ID0gMDsgaSA8IHBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQotCXsKLQkJcGlkX3QJCXBpZCA9 IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpZDsKLQotCQlpZiAocGlkICE9IDApCi0JCQlr aWxsKHBpZCwgU0lHVEVSTSk7Ci0JfQotI2Vsc2UKIAogCS8qCi0JICogT24gV2luZG93cywg c2VuZCBxdWVyeSBjYW5jZWxzIGRpcmVjdGx5IHRvIHRoZSB3b3JrZXJzJyBiYWNrZW5kcy4g IFVzZQotCSAqIGEgY3JpdGljYWwgc2VjdGlvbiB0byBlbnN1cmUgd29ya2VyIHRocmVhZHMg ZG9uJ3QgY2hhbmdlIHN0YXRlLgorCSAqIEZvcmNlIGVhcmx5IHRlcm1pbmF0aW9uIG9mIGFu eSBjb21tYW5kcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgYnkKKwkgKiBzZW5kaW5nIHF1ZXJ5 IGNhbmNlbHMgZGlyZWN0bHkgdG8gdGhlIHdvcmtlcnMnIGJhY2tlbmRzLiAgVXNlCisJICog c2lnbmFsX2luZm9fbG9jayB0byBlbnN1cmUgd29ya2VyIHRocmVhZHMgZG9uJ3QgY2hhbmdl IHRoZSBBSCBwb2ludGVycworCSAqIGNvbmN1cnJlbnRseS4KIAkgKi8KIAlwZ19tdHhfbG9j aygmc2lnbmFsX2luZm9fbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bnVtV29y a2VyczsgaSsrKQpAQCAtNDMwLDcgKzM0Miw2IEBAIFNodXRkb3duV29ya2Vyc0hhcmQoUGFy YWxsZWxTdGF0ZSAqcHN0YXRlKQogCQkJKHZvaWQpIFBRY2FuY2VsKEFILT5jb25uQ2FuY2Vs LCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKIAl9CiAJcGdfbXR4X3VubG9jaygmc2lnbmFs X2luZm9fbG9jayk7Ci0jZW5kaWYKIAogCS8qIE5vdyB3YWl0IGZvciB0aGVtIHRvIHRlcm1p bmF0ZS4gKi8KIAlXYWl0Rm9yVGVybWluYXRpbmdXb3JrZXJzKHBzdGF0ZSk7CkBAIC00NDIs NjQgKzM1MywyMyBAQCBTaHV0ZG93bldvcmtlcnNIYXJkKFBhcmFsbGVsU3RhdGUgKnBzdGF0 ZSkKIHN0YXRpYyB2b2lkCiBXYWl0Rm9yVGVybWluYXRpbmdXb3JrZXJzKFBhcmFsbGVsU3Rh dGUgKnBzdGF0ZSkKIHsKLQl3aGlsZSAoIUhhc0V2ZXJ5V29ya2VyVGVybWluYXRlZChwc3Rh dGUpKQorCWZvciAoaW50IGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCiAJ ewotCQlQYXJhbGxlbFNsb3QgKnNsb3QgPSBOVUxMOwotCQlpbnQJCQlqOwotCi0jaWZuZGVm IFdJTjMyCi0JCS8qIE9uIG5vbi1XaW5kb3dzLCB1c2Ugd2FpdCgpIHRvIHdhaXQgZm9yIG5l eHQgd29ya2VyIHRvIGVuZCAqLworCQlQYXJhbGxlbFNsb3QgKnNsb3QgPSAmcHN0YXRlLT5w YXJhbGxlbFNsb3RbaV07CiAJCWludAkJCXN0YXR1czsKLQkJcGlkX3QJCXBpZCA9IHdhaXQo JnN0YXR1cyk7Ci0KLQkJLyogRmluZCBkZWFkIHdvcmtlcidzIHNsb3QsIGFuZCBjbGVhciB0 aGUgUElEIGZpZWxkICovCi0JCWZvciAoaiA9IDA7IGogPCBwc3RhdGUtPm51bVdvcmtlcnM7 IGorKykKLQkJewotCQkJc2xvdCA9ICYocHN0YXRlLT5wYXJhbGxlbFNsb3Rbal0pOwotCQkJ aWYgKHNsb3QtPnBpZCA9PSBwaWQpCi0JCQl7Ci0JCQkJc2xvdC0+cGlkID0gMDsKLQkJCQli cmVhazsKLQkJCX0KLQkJfQotI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8KLQkJLyogT24gV2lu ZG93cywgd2UgbXVzdCB1c2UgV2FpdEZvck11bHRpcGxlT2JqZWN0cygpICovCi0JCUhBTkRM RQkgICAqbHBIYW5kbGVzID0gcGdfbWFsbG9jX2FycmF5KEhBTkRMRSwgcHN0YXRlLT5udW1X b3JrZXJzKTsKLQkJaW50CQkJbnJ1biA9IDA7Ci0JCURXT1JECQlyZXQ7Ci0JCXVpbnRwdHJf dAloVGhyZWFkOwotCi0JCWZvciAoaiA9IDA7IGogPCBwc3RhdGUtPm51bVdvcmtlcnM7IGor KykKLQkJewotCQkJaWYgKFdPUktFUl9JU19SVU5OSU5HKHBzdGF0ZS0+cGFyYWxsZWxTbG90 W2pdLndvcmtlclN0YXR1cykpCi0JCQl7Ci0JCQkJbHBIYW5kbGVzW25ydW5dID0gKEhBTkRM RSkgcHN0YXRlLT5wYXJhbGxlbFNsb3Rbal0uaFRocmVhZDsKLQkJCQlucnVuKys7Ci0JCQl9 Ci0JCX0KLQkJcmV0ID0gV2FpdEZvck11bHRpcGxlT2JqZWN0cyhucnVuLCBscEhhbmRsZXMs IGZhbHNlLCBJTkZJTklURSk7Ci0JCUFzc2VydChyZXQgIT0gV0FJVF9GQUlMRUQpOwotCQlo VGhyZWFkID0gKHVpbnRwdHJfdCkgbHBIYW5kbGVzW3JldCAtIFdBSVRfT0JKRUNUXzBdOwot CQlwZ19mcmVlKGxwSGFuZGxlcyk7CiAKLQkJLyogRmluZCBkZWFkIHdvcmtlcidzIHNsb3Qs IGFuZCBjbGVhciB0aGUgaFRocmVhZCBmaWVsZCAqLwotCQlmb3IgKGogPSAwOyBqIDwgcHN0 YXRlLT5udW1Xb3JrZXJzOyBqKyspCisJCS8qCisJCSAqIEpvaW4gZXZlcnkgd29ya2VyIHRo YXQgd2FzIGFjdHVhbGx5IHN0YXJ0ZWQgKGkuZS4gaXMgSURMRSBvcgorCQkgKiBXT1JLSU5H KS4gIFNraXAgc2xvdHMgdGhhdCBuZXZlciBzdGFydGVkIG9yIHdlcmUgYWxyZWFkeSByZWFw ZWQ7CisJCSAqIHRoZWlyIHRocmVhZCBoYW5kbGUgaXMgbm90IHZhbGlkIHRvIGpvaW4uCisJ CSAqLworCQlpZiAoV09SS0VSX0lTX1JVTk5JTkcoc2xvdC0+d29ya2VyU3RhdHVzKSkKIAkJ ewotCQkJc2xvdCA9ICYocHN0YXRlLT5wYXJhbGxlbFNsb3Rbal0pOwotCQkJaWYgKHNsb3Qt PmhUaHJlYWQgPT0gaFRocmVhZCkKLQkJCXsKLQkJCQkvKiBGb3IgY2xlYW5saW5lc3MsIGNs b3NlIGhhbmRsZXMgZm9yIGRlYWQgdGhyZWFkcyAqLwotCQkJCUNsb3NlSGFuZGxlKChIQU5E TEUpIHNsb3QtPmhUaHJlYWQpOwotCQkJCXNsb3QtPmhUaHJlYWQgPSAodWludHB0cl90KSBJ TlZBTElEX0hBTkRMRV9WQUxVRTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCWlmIChwZ190aHJk X2pvaW4oc2xvdC0+dGhyZWFkLCAmc3RhdHVzKSAhPSBwZ190aHJkX3N1Y2Nlc3MpCisJCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBqb2luIHdvcmtlciB0aHJlYWQgJWQiLCBpKTsKKwkJCXNs b3QtPndvcmtlclN0YXR1cyA9IFdSS1JfVEVSTUlOQVRFRDsKKwkJCXBzdGF0ZS0+dGVbaV0g PSBOVUxMOwogCQl9Ci0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KLQotCQkvKiBPbiBhbGwg cGxhdGZvcm1zLCB1cGRhdGUgd29ya2VyU3RhdHVzIGFuZCB0ZVtdIGFzIHdlbGwgKi8KLQkJ QXNzZXJ0KGogPCBwc3RhdGUtPm51bVdvcmtlcnMpOwotCQlzbG90LT53b3JrZXJTdGF0dXMg PSBXUktSX1RFUk1JTkFURUQ7Ci0JCXBzdGF0ZS0+dGVbal0gPSBOVUxMOwogCX0KIH0KIApA QCAtNTE3LDYyICszODcsNTIgQEAgV2FpdEZvclRlcm1pbmF0aW5nV29ya2VycyhQYXJhbGxl bFN0YXRlICpwc3RhdGUpCiAgKiB0aGVyZSB0b28uICBOb3RlIHRoYXQgc2VuZGluZyB0aGUg Y2FuY2VsIGRpcmVjdGx5IGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyCiAgKiBpcyBzYWZlIGJl Y2F1c2UgUFFjYW5jZWwoKSBpcyB3cml0dGVuIHRvIG1ha2UgaXQgc28uCiAgKgotICogSW4g cGFyYWxsZWwgb3BlcmF0aW9uIG9uIFVuaXgsIGVhY2ggcHJvY2VzcyBpcyByZXNwb25zaWJs ZSBmb3IgY2FuY2VsaW5nCi0gKiBpdHMgb3duIGNvbm5lY3Rpb24gKHRoaXMgbXVzdCBiZSBz byBiZWNhdXNlIG5vYm9keSBlbHNlIGhhcyBhY2Nlc3MgdG8gaXQpLgotICogRnVydGhlcm1v cmUsIHRoZSBsZWFkZXIgcHJvY2VzcyBzaG91bGQgYXR0ZW1wdCB0byBmb3J3YXJkIGl0cyBz aWduYWwgdG8KLSAqIGVhY2ggY2hpbGQuICBJbiBzaW1wbGUgbWFudWFsIHVzZSBvZiBwZ19k dW1wL3BnX3Jlc3RvcmUsIGZvcndhcmRpbmcgaXNuJ3QKLSAqIG5lZWRlZCBiZWNhdXNlIHR5 cGluZyBjb250cm9sLUMgYXQgdGhlIGNvbnNvbGUgd291bGQgZGVsaXZlciBTSUdJTlQgdG8K LSAqIGV2ZXJ5IG1lbWJlciBvZiB0aGUgdGVybWluYWwgcHJvY2VzcyBncm91cCAtLS0gYnV0 IGluIG90aGVyIHNjZW5hcmlvcyBpdAotICogbWlnaHQgYmUgdGhhdCBvbmx5IHRoZSBsZWFk ZXIgZ2V0cyBzaWduYWxlZC4KLSAqCi0gKiBPbiBXaW5kb3dzLCB0aGUgY2FuY2VsIGhhbmRs ZXIgcnVucyBpbiBhIHNlcGFyYXRlIHRocmVhZCwgYmVjYXVzZSB0aGF0J3MKLSAqIGhvdyBT ZXRDb25zb2xlQ3RybEhhbmRsZXIgd29ya3MuICBCZWNhdXNlIHRoZSB3b3JrZXJzIGFyZSB0 aHJlYWRzIGluIHRoaXMKLSAqIHNhbWUgcHJvY2Vzcywgd2Ugc2V0IGEgZmxhZyAoaXNfY2Fu Y2VsX2luX3Byb2dyZXNzKCkpIHNvIHRoZXkgc3RheSBxdWlldAotICogYWJvdXQgdGhlIHF1 ZXJ5IGNhbmNlbGxhdGlvbnMgaW5zdGVhZCBvZiBjbHV0dGVyaW5nIHRoZSBzY3JlZW4sIHRo ZW4gc2VuZAotICogY2FuY2VscyBvbiBhbGwgYWN0aXZlIGNvbm5lY3Rpb25zIGFuZCByZXR1 cm4gRkFMU0UsIHdoaWNoIHdpbGwgYWxsb3cgdGhlCi0gKiBwcm9jZXNzIHRvIGRpZS4gIEZv ciBzYWZldHkncyBzYWtlLCB3ZSB1c2UgYSBjcml0aWNhbCBzZWN0aW9uIHRvIHByb3RlY3QK LSAqIHRoZSBQR2NhbmNlbCBzdHJ1Y3R1cmVzIGFnYWluc3QgYmVpbmcgY2hhbmdlZCB3aGls ZSB0aGUgc2lnbmFsIHRocmVhZCBydW5zLgorICogVGhlIHdvcmtlcnMgYXJlIHRocmVhZHMg aW4gdGhlIGxlYWRlciBwcm9jZXNzIG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHRoZQorICogY2Fu Y2VsIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGV2ZXJ5d2hlcmUsIGluIGhhbmRsZV9hc3lu Y19jYW5jZWxsYXRpb24oKS4KICAqLwogCi0jaWZuZGVmIFdJTjMyCi0KIC8qCi0gKiBTaWdu YWwgaGFuZGxlciAoVW5peCBvbmx5KQorICogQ29tbW9uIGNhbmNlbGxhdGlvbiBsb2dpYyBm b3IgdGhlIFVuaXggc2lnbmFsIGhhbmRsZXIgYW5kIHRoZSBXaW5kb3dzCisgKiBjb25zb2xl IGhhbmRsZXIuCisgKgorICogVW5peDogcnVucyBpbiBhIHNpZ25hbCBoYW5kbGVyIChhc3lu Yy1zaWduYWwtc2FmZSBvcGVyYXRpb25zIG9ubHkpLgorICoKKyAqIFdpbmRvd3M6IHJ1bnMg aW4gYSBzeXN0ZW0tcHJvdmlkZWQgdGhyZWFkIHdpdGggc2lnbmFsX2luZm9fbG9jayBoZWxk IGJ5CisgKiB0aGUgY2FsbGVyLgogICovCiBzdGF0aWMgdm9pZAotc2lnVGVybUhhbmRsZXIo U0lHTkFMX0FSR1MpCitoYW5kbGVfYXN5bmNfY2FuY2VsbGF0aW9uKHZvaWQpCiB7Ci0JaW50 CQkJaTsKIAljaGFyCQllcnJidWZbMV07CiAKIAkvKgotCSAqIFNvbWUgcGxhdGZvcm1zIGFs bG93IGRlbGl2ZXJ5IG9mIG5ldyBzaWduYWxzIHRvIGludGVycnVwdCBhbiBhY3RpdmUKLQkg KiBzaWduYWwgaGFuZGxlci4gIFRoYXQgY291bGQgbXVjayB1cCBvdXIgYXR0ZW1wdCB0byBz ZW5kIFBRY2FuY2VsLCBzbwotCSAqIGRpc2FibGUgdGhlIHNpZ25hbHMgdGhhdCBzZXRfY2Fu Y2VsX2hhbmRsZXIgZW5hYmxlZC4KKwkgKiBUZWxsIHdvcmtlciB0aHJlYWRzIHRvIHN0YXkg cXVpZXQgYWJvdXQgdGhlIHF1ZXJ5IGNhbmNlbGxhdGlvbnMgd2UncmUKKwkgKiBhYm91dCB0 byBzZW5kIHRoZW07IG90aGVyd2lzZSB0aGV5J2QgcmVwb3J0IHRoZW0gYXMgZXJyb3JzIGFu ZCBjbHV0dGVyCisJICogdGhlIHVzZXIncyBzY3JlZW4uICBUaGlzIG11c3QgYmUgc2V0IGJl Zm9yZSB3ZSBzZW5kIGFueSBjYW5jZWwsIHNvIHRoYXQKKwkgKiBhIHdvcmtlciBpcyBndWFy YW50ZWVkIHRvIHNlZSBpdCBieSB0aGUgdGltZSBpdHMgcXVlcnkgZmFpbHMgYXMgYQorCSAq IHJlc3VsdC4KIAkgKi8KLQlwcXNpZ25hbChTSUdJTlQsIFBHX1NJR19JR04pOwotCXBxc2ln bmFsKFNJR1RFUk0sIFBHX1NJR19JR04pOwotCXBxc2lnbmFsKFNJR1FVSVQsIFBHX1NJR19J R04pOworCXNldF9jYW5jZWxfaW5fcHJvZ3Jlc3MoKTsKIAogCS8qCi0JICogSWYgd2UncmUg aW4gdGhlIGxlYWRlciwgZm9yd2FyZCBzaWduYWwgdG8gYWxsIHdvcmtlcnMuICAoSXQgc2Vl bXMgYmVzdAotCSAqIHRvIGRvIHRoaXMgYmVmb3JlIFBRY2FuY2VsOyBraWxsaW5nIHRoZSBs ZWFkZXIgdHJhbnNhY3Rpb24gd2lsbCByZXN1bHQKLQkgKiBpbiBpbnZhbGlkLXNuYXBzaG90 IGVycm9ycyBmcm9tIGFjdGl2ZSB3b3JrZXJzLCB3aGljaCBtYXliZSB3ZSBjYW4KLQkgKiBx dWlldCBieSBraWxsaW5nIHdvcmtlcnMgZmlyc3QuKSAgSWdub3JlIGFueSBlcnJvcnMuCisJ ICogSWYgaW4gcGFyYWxsZWwgbW9kZSwgc2VuZCBRdWVyeUNhbmNlbCB0byBlYWNoIHdvcmtl cidzIGNvbm5lY3RlZAorCSAqIGJhY2tlbmQuICBEbyB0aGlzIGJlZm9yZSBjYW5jZWxpbmcg dGhlIG1haW4gdHJhbnNhY3Rpb24sIGVsc2Ugd2UgbWlnaHQKKwkgKiBnZXQgaW52YWxpZC1z bmFwc2hvdCBlcnJvcnMgcmVwb3J0ZWQgYmVmb3JlIHdlIGNhbiBzdG9wIHRoZSB3b3JrZXJz LgorCSAqIElnbm9yZSBlcnJvcnMsIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0 IHRoZW0gYW55d2F5LgogCSAqLwogCWlmIChzaWduYWxfaW5mby5wc3RhdGUgIT0gTlVMTCkK IAl7Ci0JCWZvciAoaSA9IDA7IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7 IGkrKykKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdv cmtlcnM7IGkrKykKIAkJewotCQkJcGlkX3QJCXBpZCA9IHNpZ25hbF9pbmZvLnBzdGF0ZS0+ cGFyYWxsZWxTbG90W2ldLnBpZDsKKwkJCUFyY2hpdmVIYW5kbGUgKkFIID0gc2lnbmFsX2lu Zm8ucHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0uQUg7CiAKLQkJCWlmIChwaWQgIT0gMCkKLQkJ CQlraWxsKHBpZCwgU0lHVEVSTSk7CisJCQlpZiAoQUggIT0gTlVMTCAmJiBBSC0+Y29ubkNh bmNlbCAhPSBOVUxMKQorCQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNhbmNlbCwgZXJy YnVmLCBzaXplb2YoZXJyYnVmKSk7CiAJCX0KIAl9CiAKIAkvKgotCSAqIFNlbmQgUXVlcnlD YW5jZWwgaWYgd2UgaGF2ZSBhIGNvbm5lY3Rpb24gdG8gc2VuZCB0by4gIElnbm9yZSBlcnJv cnMsCisJICogU2VuZCBRdWVyeUNhbmNlbCB0byBsZWFkZXIgY29ubmVjdGlvbiwgaWYgZW5h YmxlZC4gIElnbm9yZSBlcnJvcnMsCiAJICogdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8g YWJvdXQgdGhlbSBhbnl3YXkuCiAJICovCiAJaWYgKHNpZ25hbF9pbmZvLm15QUggIT0gTlVM TCAmJiBzaWduYWxfaW5mby5teUFILT5jb25uQ2FuY2VsICE9IE5VTEwpCkBAIC01ODAsMTcg KzQ0MCwzMyBAQCBzaWdUZXJtSGFuZGxlcihTSUdOQUxfQVJHUykKIAogCS8qCiAJICogUmVw b3J0IHdlJ3JlIHF1aXR0aW5nLCB1c2luZyBub3RoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhh biB3cml0ZSgyKS4KLQkgKiBXaGVuIGluIHBhcmFsbGVsIG9wZXJhdGlvbiwgb25seSB0aGUg bGVhZGVyIHByb2Nlc3Mgc2hvdWxkIGRvIHRoaXMuCiAJICovCi0JaWYgKCFzaWduYWxfaW5m by5hbV93b3JrZXIpCisJaWYgKHByb2duYW1lKQogCXsKLQkJaWYgKHByb2duYW1lKQotCQl7 Ci0JCQl3cml0ZV9zdGRlcnIocHJvZ25hbWUpOwotCQkJd3JpdGVfc3RkZXJyKCI6ICIpOwot CQl9Ci0JCXdyaXRlX3N0ZGVycigidGVybWluYXRlZCBieSB1c2VyXG4iKTsKKwkJd3JpdGVf c3RkZXJyKHByb2duYW1lKTsKKwkJd3JpdGVfc3RkZXJyKCI6ICIpOwogCX0KKwl3cml0ZV9z dGRlcnIoInRlcm1pbmF0ZWQgYnkgdXNlclxuIik7Cit9CisKKyNpZm5kZWYgV0lOMzIKKwor LyoKKyAqIFNpZ25hbCBoYW5kbGVyIChVbml4IG9ubHkpCisgKi8KK3N0YXRpYyB2b2lkCitz aWdUZXJtSGFuZGxlcihTSUdOQUxfQVJHUykKK3sKKwkvKgorCSAqIFNvbWUgcGxhdGZvcm1z IGFsbG93IGRlbGl2ZXJ5IG9mIG5ldyBzaWduYWxzIHRvIGludGVycnVwdCBhbiBhY3RpdmUK KwkgKiBzaWduYWwgaGFuZGxlci4gIFRoYXQgY291bGQgbXVjayB1cCBvdXIgYXR0ZW1wdCB0 byBzZW5kIFBRY2FuY2VsLCBzbworCSAqIGRpc2FibGUgdGhlIHNpZ25hbHMgdGhhdCBzZXRf Y2FuY2VsX2hhbmRsZXIgZW5hYmxlZC4KKwkgKi8KKwlwcXNpZ25hbChTSUdJTlQsIFBHX1NJ R19JR04pOworCXBxc2lnbmFsKFNJR1RFUk0sIFBHX1NJR19JR04pOworCXBxc2lnbmFsKFNJ R1FVSVQsIFBHX1NJR19JR04pOworCisJaGFuZGxlX2FzeW5jX2NhbmNlbGxhdGlvbigpOwog CiAJLyoKIAkgKiBBbmQgZGllLCB1c2luZyBfZXhpdCgpIG5vdCBleGl0KCkgYmVjYXVzZSB0 aGUgbGF0dGVyIHdpbGwgaW52b2tlIGF0ZXhpdApAQCAtNjA1LDEwICs0ODEsNiBAQCBzaWdU ZXJtSGFuZGxlcihTSUdOQUxfQVJHUykKIHN0YXRpYyB2b2lkCiBzZXRfY2FuY2VsX2hhbmRs ZXIodm9pZCkKIHsKLQkvKgotCSAqIFdoZW4gZm9ya2luZywgc2lnbmFsX2luZm8uaGFuZGxl cl9zZXQgd2lsbCBwcm9wYWdhdGUgaW50byB0aGUgbmV3Ci0JICogcHJvY2VzcywgYnV0IHRo YXQncyBmaW5lIGJlY2F1c2UgdGhlIHNpZ25hbCBoYW5kbGVyIHN0YXRlIGRvZXMgdG9vLgot CSAqLwogCWlmICghc2lnbmFsX2luZm8uaGFuZGxlcl9zZXQpCiAJewogCQlzaWduYWxfaW5m by5oYW5kbGVyX3NldCA9IHRydWU7CkBAIC02MjQsNzAgKzQ5NiwxOSBAQCBzZXRfY2FuY2Vs X2hhbmRsZXIodm9pZCkKIC8qCiAgKiBDb25zb2xlIGludGVycnVwdCBoYW5kbGVyIC0tLSBy dW5zIGluIGEgbmV3bHktc3RhcnRlZCB0aHJlYWQuCiAgKgotICogQWZ0ZXIgc3RvcHBpbmcg b3RoZXIgdGhyZWFkcyBhbmQgc2VuZGluZyBjYW5jZWwgcmVxdWVzdHMgb24gYWxsIG9wZW4K LSAqIGNvbm5lY3Rpb25zLCB3ZSByZXR1cm4gRkFMU0Ugd2hpY2ggd2lsbCBhbGxvdyB0aGUg ZGVmYXVsdCBFeGl0UHJvY2VzcygpCi0gKiBhY3Rpb24gdG8gYmUgdGFrZW4uCisgKiBBZnRl ciBzZW5kaW5nIGNhbmNlbCByZXF1ZXN0cyBvbiBhbGwgb3BlbiBjb25uZWN0aW9ucywgd2Ug cmV0dXJuIEZBTFNFCisgKiB3aGljaCB3aWxsIGFsbG93IHRoZSBkZWZhdWx0IEV4aXRQcm9j ZXNzKCkgYWN0aW9uIHRvIGJlIHRha2VuLgogICovCiBzdGF0aWMgQk9PTCBXSU5BUEkKIGNv bnNvbGVIYW5kbGVyKERXT1JEIGR3Q3RybFR5cGUpCiB7Ci0JaW50CQkJaTsKLQljaGFyCQll cnJidWZbMV07Ci0KIAlpZiAoZHdDdHJsVHlwZSA9PSBDVFJMX0NfRVZFTlQgfHwKIAkJZHdD dHJsVHlwZSA9PSBDVFJMX0JSRUFLX0VWRU5UKQogCXsKLQkJLyoKLQkJICogVGVsbCB3b3Jr ZXIgdGhyZWFkcyB0byBzdGF5IHF1aWV0IGFib3V0IHRoZSBxdWVyeSBjYW5jZWxsYXRpb25z Ci0JCSAqIHdlJ3JlIGFib3V0IHRvIHNlbmQgdGhlbTsgb3RoZXJ3aXNlIHRoZXknZCByZXBv cnQgdGhlbSBhcyBlcnJvcnMKLQkJICogYW5kIGNsdXR0ZXIgdGhlIHVzZXIncyBzY3JlZW4u ICBUaGlzIG11c3QgYmUgc2V0IGJlZm9yZSB3ZSBzZW5kIGFueQotCQkgKiBjYW5jZWwsIHNv IHRoYXQgYSB3b3JrZXIgaXMgZ3VhcmFudGVlZCB0byBzZWUgaXQgYnkgdGhlIHRpbWUgaXRz Ci0JCSAqIHF1ZXJ5IGZhaWxzIGFzIGEgcmVzdWx0LgotCQkgKi8KLQkJc2V0X2NhbmNlbF9p bl9wcm9ncmVzcygpOwotCiAJCS8qIENyaXRpY2FsIHNlY3Rpb24gcHJldmVudHMgY2hhbmdp bmcgZGF0YSB3ZSBsb29rIGF0IGhlcmUgKi8KIAkJcGdfbXR4X2xvY2soJnNpZ25hbF9pbmZv X2xvY2spOwotCi0JCS8qCi0JCSAqIElmIGluIHBhcmFsbGVsIG1vZGUsIHNlbmQgUXVlcnlD YW5jZWwgdG8gZWFjaCB3b3JrZXIncyBjb25uZWN0ZWQKLQkJICogYmFja2VuZC4gIERvIHRo aXMgYmVmb3JlIGNhbmNlbGluZyB0aGUgbWFpbiB0cmFuc2FjdGlvbiwgZWxzZSB3ZQotCQkg KiBtaWdodCBnZXQgaW52YWxpZC1zbmFwc2hvdCBlcnJvcnMgcmVwb3J0ZWQgYmVmb3JlIHdl IGNhbiBzdG9wIHRoZQotCQkgKiB3b3JrZXJzLiAgSWdub3JlIGVycm9ycywgdGhlcmUncyBu b3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhlbQotCQkgKiBhbnl3YXkuCi0JCSAqLwotCQlp ZiAoc2lnbmFsX2luZm8ucHN0YXRlICE9IE5VTEwpCi0JCXsKLQkJCWZvciAoaSA9IDA7IGkg PCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKLQkJCXsKLQkJCQlBcmNo aXZlSGFuZGxlICpBSCA9IHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLkFI OwotCi0JCQkJaWYgKEFIICE9IE5VTEwgJiYgQUgtPmNvbm5DYW5jZWwgIT0gTlVMTCkKLQkJ CQkJKHZvaWQpIFBRY2FuY2VsKEFILT5jb25uQ2FuY2VsLCBlcnJidWYsIHNpemVvZihlcnJi dWYpKTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIFNlbmQgUXVlcnlDYW5jZWwgdG8gbGVh ZGVyIGNvbm5lY3Rpb24sIGlmIGVuYWJsZWQuICBJZ25vcmUgZXJyb3JzLAotCQkgKiB0aGVy ZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGVtIGFueXdheS4KLQkJICovCi0JCWlm IChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFsX2luZm8ubXlBSC0+Y29ubkNh bmNlbCAhPSBOVUxMKQotCQkJKHZvaWQpIFBRY2FuY2VsKHNpZ25hbF9pbmZvLm15QUgtPmNv bm5DYW5jZWwsCi0JCQkJCQkJZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0KKwkJaGFuZGxl X2FzeW5jX2NhbmNlbGxhdGlvbigpOwogCQlwZ19tdHhfdW5sb2NrKCZzaWduYWxfaW5mb19s b2NrKTsKLQotCQkvKgotCQkgKiBSZXBvcnQgd2UncmUgcXVpdHRpbmcsIHVzaW5nIG5vdGhp bmcgbW9yZSBjb21wbGljYXRlZCB0aGFuCi0JCSAqIHdyaXRlKDIpLiAgV2Ugc2hvdWxkIGJl IGFibGUgdG8gdXNlIHBnX2xvZ18qKCkgaGVyZSwgYnV0IGZvciBub3cgd2UKLQkJICogc3Rh eSBhbGlnbmVkIHdpdGggdGhlIHNpZ1Rlcm1IYW5kbGVyIGJlaGF2aW9yLgotCQkgKi8KLQkJ aWYgKHByb2duYW1lKQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIocHJvZ25hbWUpOwotCQkJd3Jp dGVfc3RkZXJyKCI6ICIpOwotCQl9Ci0JCXdyaXRlX3N0ZGVycigidGVybWluYXRlZCBieSB1 c2VyXG4iKTsKIAl9CiAKIAkvKiBBbHdheXMgcmV0dXJuIEZBTFNFIHRvIGFsbG93IHNpZ25h bCBoYW5kbGluZyB0byBjb250aW51ZSAqLwpAQCAtNzIzLDIxICs1NDQsMTUgQEAgc2V0X2Fy Y2hpdmVfY2FuY2VsX2luZm8oQXJjaGl2ZUhhbmRsZSAqQUgsIFBHY29ubiAqY29ubikKIAlQ R2NhbmNlbCAgICpvbGRDb25uQ2FuY2VsOwogCiAJLyoKLQkgKiBBY3RpdmF0ZSB0aGUgaW50 ZXJydXB0IGhhbmRsZXIgaWYgd2UgZGlkbid0IHlldCBpbiB0aGlzIHByb2Nlc3MuICBPbgot CSAqIFdpbmRvd3MsIHRoaXMgYWxzbyBpbml0aWFsaXplcyBzaWduYWxfaW5mb19sb2NrOyB0 aGVyZWZvcmUgaXQncwotCSAqIGltcG9ydGFudCB0aGF0IHRoaXMgaGFwcGVuIGF0IGxlYXN0 IG9uY2UgYmVmb3JlIHdlIGZvcmsgb2ZmIGFueQotCSAqIHRocmVhZHMuCisJICogQWN0aXZh dGUgdGhlIGludGVycnVwdCBoYW5kbGVyIGlmIHdlIGRpZG4ndCB5ZXQgaW4gdGhpcyBwcm9j ZXNzLgogCSAqLwogCXNldF9jYW5jZWxfaGFuZGxlcigpOwogCiAJLyoKLQkgKiBPbiBVbml4 LCB3ZSBhc3N1bWUgdGhhdCBzdG9yaW5nIGEgcG9pbnRlciB2YWx1ZSBpcyBhdG9taWMgd2l0 aCByZXNwZWN0Ci0JICogdG8gYW55IHBvc3NpYmxlIHNpZ25hbCBpbnRlcnJ1cHQuICBPbiBX aW5kb3dzLCB1c2UgYSBjcml0aWNhbCBzZWN0aW9uLgorCSAqIFNlcmlhbGl6ZSB1cGRhdGVz IHRvIHRoZSBjYW5jZWwgcG9pbnRlcnMgdW5kZXIgc2lnbmFsX2luZm9fbG9jazsgb24KKwkg KiBXaW5kb3dzIHRoaXMgYWxzbyBpbnRlcmxvY2tzIGFnYWluc3QgdGhlIGNvbnNvbGUtaGFu ZGxlciB0aHJlYWQuCiAJICovCi0KLSNpZmRlZiBXSU4zMgogCXBnX210eF9sb2NrKCZzaWdu YWxfaW5mb19sb2NrKTsKLSNlbmRpZgogCiAJLyogRnJlZSB0aGUgb2xkIG9uZSBpZiB3ZSBo YXZlIG9uZSAqLwogCW9sZENvbm5DYW5jZWwgPSBBSC0+Y29ubkNhbmNlbDsKQEAgLTc1Miwy MiArNTY3LDE0IEBAIHNldF9hcmNoaXZlX2NhbmNlbF9pbmZvKEFyY2hpdmVIYW5kbGUgKkFI LCBQR2Nvbm4gKmNvbm4pCiAJCUFILT5jb25uQ2FuY2VsID0gUFFnZXRDYW5jZWwoY29ubik7 CiAKIAkvKgotCSAqIE9uIFVuaXgsIHRoZXJlJ3Mgb25seSBldmVyIG9uZSBhY3RpdmUgQXJj aGl2ZUhhbmRsZSBwZXIgcHJvY2Vzcywgc28gd2UKLQkgKiBjYW4ganVzdCBzZXQgc2lnbmFs X2luZm8ubXlBSCB1bmNvbmRpdGlvbmFsbHkuICBPbiBXaW5kb3dzLCBkbyB0aGF0Ci0JICog b25seSBpbiB0aGUgbWFpbiB0aHJlYWQ7IHdvcmtlciB0aHJlYWRzIGhhdmUgdG8gbWFrZSBz dXJlIHRoZWlyCi0JICogQXJjaGl2ZUhhbmRsZSBhcHBlYXJzIGluIHRoZSBwc3RhdGUgZGF0 YSwgd2hpY2ggaXMgZGVhbHQgd2l0aCBpbgotCSAqIFJ1bldvcmtlcigpLgorCSAqIFNldCB0 aGUgbGVhZGVyJ3MgbXlBSCwgdW5sZXNzIHdlJ3JlIGluIGEgd29ya2VyIHRocmVhZC4gIFdv cmtlcnMgbWFrZQorCSAqIHN1cmUgdGhlaXIgQXJjaGl2ZUhhbmRsZSBhcHBlYXJzIGluIHRo ZSBwc3RhdGUgZGF0YSwgd2hpY2ggaXMgZGVhbHQKKwkgKiB3aXRoIGluIFJ1bldvcmtlcigp LgogCSAqLwotI2lmbmRlZiBXSU4zMgotCXNpZ25hbF9pbmZvLm15QUggPSBBSDsKLSNlbHNl Ci0JaWYgKG1haW5UaHJlYWRJZCA9PSBHZXRDdXJyZW50VGhyZWFkSWQoKSkKKwlpZiAocGFy YWxsZWxfc2xvdF90aHJlYWRfbG9jYWwgPT0gTlVMTCkKIAkJc2lnbmFsX2luZm8ubXlBSCA9 IEFIOwotI2VuZGlmCiAKLSNpZmRlZiBXSU4zMgogCXBnX210eF91bmxvY2soJnNpZ25hbF9p bmZvX2xvY2spOwotI2VuZGlmCiB9CiAKIC8qCkBAIC03NzksMTUgKzU4Niw5IEBAIHNldF9h cmNoaXZlX2NhbmNlbF9pbmZvKEFyY2hpdmVIYW5kbGUgKkFILCBQR2Nvbm4gKmNvbm4pCiBz dGF0aWMgdm9pZAogc2V0X2NhbmNlbF9wc3RhdGUoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQog ewotI2lmZGVmIFdJTjMyCiAJcGdfbXR4X2xvY2soJnNpZ25hbF9pbmZvX2xvY2spOwotI2Vu ZGlmCi0KIAlzaWduYWxfaW5mby5wc3RhdGUgPSBwc3RhdGU7Ci0KLSNpZmRlZiBXSU4zMgog CXBnX210eF91bmxvY2soJnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlmCiB9CiAKIC8qCkBA IC03OTksMzQgKzYwMCwyNCBAQCBzZXRfY2FuY2VsX3BzdGF0ZShQYXJhbGxlbFN0YXRlICpw c3RhdGUpCiBzdGF0aWMgdm9pZAogc2V0X2NhbmNlbF9zbG90X2FyY2hpdmUoUGFyYWxsZWxT bG90ICpzbG90LCBBcmNoaXZlSGFuZGxlICpBSCkKIHsKLSNpZmRlZiBXSU4zMgogCXBnX210 eF9sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgotCiAJc2xvdC0+QUggPSBBSDsK LQotI2lmZGVmIFdJTjMyCiAJcGdfbXR4X3VubG9jaygmc2lnbmFsX2luZm9fbG9jayk7Ci0j ZW5kaWYKIH0KIAogCiAvKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYm90aCBV bml4IGFuZCBXaW5kb3dzIHZhcmlhbnRzIHRvIHNldCB1cAotICogYW5kIHJ1biBhIHdvcmtl ciBwcm9jZXNzLiAgQ2FsbGVyIHNob3VsZCBleGl0IHRoZSBwcm9jZXNzIChvciB0aHJlYWQp Ci0gKiB1cG9uIHJldHVybi4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNldCB1 cCBhbmQgcnVuIGEgd29ya2VyIHRocmVhZC4gIENhbGxlciBzaG91bGQKKyAqIGV4aXQgdGhl IHRocmVhZCB1cG9uIHJldHVybi4KICAqLwogc3RhdGljIHZvaWQKIFJ1bldvcmtlcihBcmNo aXZlSGFuZGxlICpBSCwgUGFyYWxsZWxTbG90ICpzbG90KQogewogCS8qCiAJICogQ2xvbmUg dGhlIGFyY2hpdmUgc28gdGhhdCB3ZSBoYXZlIG91ciBvd24gc3RhdGUgdG8gd29yayB3aXRo LCBhbmQgaW4KLQkgKiBwYXJ0aWN1bGFyIG91ciBvd24gZGF0YWJhc2UgY29ubmVjdGlvbi4K LQkgKgotCSAqIFdlIGNsb25lIG9uIFVuaXggYXMgd2VsbCBhcyBXaW5kb3dzLCBldmVuIHRo b3VnaCB0ZWNobmljYWxseSB3ZSBkb24ndAotCSAqIG5lZWQgdG8gYmVjYXVzZSBmb3JrKCkg Z2l2ZXMgdXMgYSBjb3B5IGluIG91ciBvd24gYWRkcmVzcyBzcGFjZQotCSAqIGFscmVhZHku ICBCdXQgQ2xvbmVBcmNoaXZlIHJlc2V0cyB0aGUgc3RhdGUgaW5mb3JtYXRpb24gYW5kIGFs c28gY2xvbmVzCi0JICogdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2hpY2ggYm90aCBzZWVt IGtpbmRhIGhlbHBmdWwuCisJICogcGFydGljdWxhciBvdXIgb3duIGRhdGFiYXNlIGNvbm5l Y3Rpb24uICBDbG9uZUFyY2hpdmUgcmVzZXRzIHRoZSBzdGF0ZQorCSAqIGluZm9ybWF0aW9u IGFuZCBhbHNvIGNsb25lcyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiwgYm90aCBvZiB3aGlj aCBhcmUKKwkgKiBlc3NlbnRpYWwgc2luY2Ugd29ya2VyIHRocmVhZHMgc2hhcmUgdGhlIGxl YWRlcidzIGFkZHJlc3Mgc3BhY2UuCiAJICovCiAJQUggPSBDbG9uZUFyY2hpdmUoQUgpOwog CkBAIC04NTIsMTIgKzY0MywxMiBAQCBSdW5Xb3JrZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIFBh cmFsbGVsU2xvdCAqc2xvdCkKIH0KIAogLyoKLSAqIFRocmVhZCBiYXNlIGZ1bmN0aW9uIGZv ciBXaW5kb3dzCisgKiBUaHJlYWQgc3RhcnQgZnVuY3Rpb24gZm9yIGFsbCBwbGF0Zm9ybXMu ICBNYXRjaGVzIHBnX3RocmRfc3RhcnRfdC4KICAqLwotI2lmZGVmIFdJTjMyCi1zdGF0aWMg dW5zaWduZWQgX19zdGRjYWxsCi1pbml0X3NwYXduZWRfd29ya2VyX3dpbjMyKFdvcmtlcklu Zm8gKndpKQorc3RhdGljIGludAord29ya2VyX3RocmVhZF9tYWluKHZvaWQgKmFyZ3VtZW50 KQogeworCVdvcmtlckluZm8gKndpID0gYXJndW1lbnQ7CiAJQXJjaGl2ZUhhbmRsZSAqQUgg PSB3aS0+QUg7CiAJUGFyYWxsZWxTbG90ICpzbG90ID0gd2ktPnNsb3Q7CiAKQEAgLTg2NSwy NyArNjU2LDI0IEBAIGluaXRfc3Bhd25lZF93b3JrZXJfd2luMzIoV29ya2VySW5mbyAqd2kp CiAJZnJlZSh3aSk7CiAKIAkvKgotCSAqIFJlY29yZCBvdXIgdGhyZWFkIGlkIHNvIEdldE15 UFNsb3QoKSBjYW4gdGVsbCB1cyBmcm9tIHRoZSBsZWFkZXIuICBEbwotCSAqIHRoaXMgYmVm b3JlIGFueXRoaW5nIHRoYXQgbWlnaHQgY2FsbCBleGl0X25pY2VseSgpOiB0aGUgY2xlYW51 cCBoYW5kbGVyCi0JICogdXNlcyBHZXRNeVBTbG90KCksIGFuZCBtaXN0YWtpbmcgYSBmYWls aW5nIHdvcmtlciBmb3IgdGhlIGxlYWRlcgotCSAqIGRlYWRsb2NrcyBzaHV0ZG93bi4gIFdl IGNhbid0IHRydXN0IHRoZSBsZWFkZXIgdG8gaGF2ZSBzdG9yZWQgdGhlIGlkCi0JICogZnJv bSBfYmVnaW50aHJlYWRleCgpIHlldCwgc2luY2UgdGhpcyB0aHJlYWQgbWF5IHJ1biBiZWZv cmUgdGhhdCByZXR1cm5zLgorCSAqIFJlY29yZCBvdXIgc2xvdCBzbyB0aGF0IGFyY2hpdmVf Y2xvc2VfY29ubmVjdGlvbigpIGFuZAorCSAqIGFtX3BhcmFsbGVsX3dvcmtlcl90aHJlYWQo KSBjYW4gdGVsbCB1cyBmcm9tIHRoZSBsZWFkZXIuICBEbyB0aGlzCisJICogYmVmb3JlIGFu eXRoaW5nIHRoYXQgbWlnaHQgY2FsbCBleGl0X25pY2VseSgpOiB0aGUgY2xlYW51cCBoYW5k bGVyIHVzZXMKKwkgKiB0aGlzIHBvaW50ZXIsIGFuZCBtaXN0YWtpbmcgYSBmYWlsaW5nIHdv cmtlciBmb3IgdGhlIGxlYWRlciBkZWFkbG9ja3MKKwkgKiBzaHV0ZG93bi4KIAkgKi8KLQlz bG90LT50aHJlYWRJZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOworCXBhcmFsbGVsX3Nsb3Rf dGhyZWFkX2xvY2FsID0gc2xvdDsKIAogCS8qIFJ1biB0aGUgd29ya2VyIC4uLiAqLwogCVJ1 bldvcmtlcihBSCwgc2xvdCk7CiAKIAkvKiBFeGl0IHRoZSB0aHJlYWQgKi8KLQlfZW5kdGhy ZWFkZXgoMCk7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAog LyoKICAqIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGEgcGFyYWxsZWwgZHVtcCBvciByZXN0b3Jl IGJ5IHNwYXduaW5nIG9mZiB0aGUgd29ya2VyCi0gKiBwcm9jZXNzZXMuICBGb3IgV2luZG93 cywgaXQgY3JlYXRlcyBhIG51bWJlciBvZiB0aHJlYWRzOyBvbiBVbml4IHRoZQotICogd29y a2VycyBhcmUgY3JlYXRlZCB3aXRoIGZvcmsoKS4KKyAqIHRocmVhZHMuCiAgKi8KIFBhcmFs bGVsU3RhdGUgKgogUGFyYWxsZWxCYWNrdXBTdGFydChBcmNoaXZlSGFuZGxlICpBSCkKQEAg LTkxMywxMjIgKzcwMSw0NCBAQCBQYXJhbGxlbEJhY2t1cFN0YXJ0KEFyY2hpdmVIYW5kbGUg KkFIKQogCS8qCiAJICogU2V0IHRoZSBwc3RhdGUgaW4gc2h1dGRvd25faW5mbywgdG8gdGVs bCB0aGUgZXhpdCBoYW5kbGVyIHRoYXQgaXQgbXVzdAogCSAqIGNsZWFuIHVwIHdvcmtlcnMg YXMgd2VsbCBhcyB0aGUgbWFpbiBkYXRhYmFzZSBjb25uZWN0aW9uLiAgQnV0IHdlIGRvbid0 Ci0JICogc2V0IHRoaXMgaW4gc2lnbmFsX2luZm8geWV0LCBiZWNhdXNlIHdlIGRvbid0IHdh bnQgY2hpbGQgcHJvY2Vzc2VzIHRvCi0JICogaW5oZXJpdCBub24tTlVMTCBzaWduYWxfaW5m by5wc3RhdGUuCisJICogc2V0IHRoaXMgaW4gc2lnbmFsX2luZm8geWV0LCBiZWNhdXNlIHVu dGlsIHRoZSB3b3JrZXJzIGhhdmUgc29tZXRoaW5nCisJICogdG8gZG8gd2Ugd2FudCBhIGNh bmNlbCB0byBqdXN0IGtpbGwgdGhlIGxlYWRlciBjb25uZWN0aW9uLgogCSAqLwogCXNodXRk b3duX2luZm8ucHN0YXRlID0gcHN0YXRlOwogCiAJLyoKLQkgKiBUZW1wb3JhcmlseSBkaXNh YmxlIHF1ZXJ5IGNhbmNlbGxhdGlvbiBvbiB0aGUgbGVhZGVyIGNvbm5lY3Rpb24uICBUaGlz Ci0JICogZW5zdXJlcyB0aGF0IGNoaWxkIHByb2Nlc3NlcyB3b24ndCBpbmhlcml0IHZhbGlk IEFILT5jb25uQ2FuY2VsCi0JICogc2V0dGluZ3MgYW5kIHRodXMgd29uJ3QgdHJ5IHRvIGlz c3VlIGNhbmNlbHMgYWdhaW5zdCB0aGUgbGVhZGVyJ3MKLQkgKiBjb25uZWN0aW9uLiAgTm8g aGFybSBpcyBkb25lIGlmIHdlIGZhaWwgd2hpbGUgaXQncyBkaXNhYmxlZCwgYmVjYXVzZQot CSAqIHRoZSBsZWFkZXIgY29ubmVjdGlvbiBpcyBpZGxlIGF0IHRoaXMgcG9pbnQgYW55d2F5 LgorCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgcXVlcnkgY2FuY2VsbGF0aW9uIG9uIHRoZSBs ZWFkZXIgY29ubmVjdGlvbi4gIE5vCisJICogaGFybSBpcyBkb25lIGlmIHdlIGZhaWwgd2hp bGUgaXQncyBkaXNhYmxlZCwgYmVjYXVzZSB0aGUgbGVhZGVyCisJICogY29ubmVjdGlvbiBp cyBpZGxlIGF0IHRoaXMgcG9pbnQgYW55d2F5LgogCSAqLwogCXNldF9hcmNoaXZlX2NhbmNl bF9pbmZvKEFILCBOVUxMKTsKIAotCS8qIEVuc3VyZSBzdGRpbyBzdGF0ZSBpcyBxdWllc2Nl ZCBiZWZvcmUgZm9ya2luZyAqLworCS8qIEVuc3VyZSBzdGRpbyBzdGF0ZSBpcyBxdWllc2Nl ZCBiZWZvcmUgc3RhcnRpbmcgd29ya2VycyAqLwogCWZmbHVzaChOVUxMKTsKIAogCS8qIENy ZWF0ZSBkZXNpcmVkIG51bWJlciBvZiB3b3JrZXJzICovCiAJZm9yIChpID0gMDsgaSA8IHBz dGF0ZS0+bnVtV29ya2VyczsgaSsrKQogCXsKLSNpZmRlZiBXSU4zMgogCQlXb3JrZXJJbmZv ICp3aTsKLQkJdWludHB0cl90CWhhbmRsZTsKLSNlbHNlCi0JCXBpZF90CQlwaWQ7Ci0JCWlu dAkJCXBpcGVNV1syXSwKLQkJCQkJcGlwZVdNWzJdOwotI2VuZGlmCiAJCVBhcmFsbGVsU2xv dCAqc2xvdCA9ICYocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0pOwogCi0jaWZuZGVmIFdJTjMy Ci0JCS8qIENyZWF0ZSBjb21tdW5pY2F0aW9uIHBpcGVzIGZvciB0aGlzIHdvcmtlciAqLwot CQlpZiAocGdwaXBlKHBpcGVNVykgPCAwIHx8IHBncGlwZShwaXBlV00pIDwgMCkKLQkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGNvbW11bmljYXRpb24gY2hhbm5lbHM6ICVtIik7 Ci0KLQkJLyogbGVhZGVyJ3MgZW5kcyBvZiB0aGUgcGlwZXMgKi8KLQkJc2xvdC0+cGlwZVJl YWQgPSBwaXBlV01bUElQRV9SRUFEXTsKLQkJc2xvdC0+cGlwZVdyaXRlID0gcGlwZU1XW1BJ UEVfV1JJVEVdOwotCQkvKiBjaGlsZCdzIGVuZHMgb2YgdGhlIHBpcGVzICovCi0JCXNsb3Qt PnBpcGVSZXZSZWFkID0gcGlwZU1XW1BJUEVfUkVBRF07Ci0JCXNsb3QtPnBpcGVSZXZXcml0 ZSA9IHBpcGVXTVtQSVBFX1dSSVRFXTsKLSNlbmRpZgotCi0jaWZkZWYgV0lOMzIKIAkJLyog Q3JlYXRlIHRyYW5zaWVudCBzdHJ1Y3R1cmUgdG8gcGFzcyBhcmdzIHRvIHdvcmtlciBmdW5j dGlvbiAqLwogCQl3aSA9IHBnX21hbGxvY19vYmplY3QoV29ya2VySW5mbyk7Ci0KIAkJd2kt PkFIID0gQUg7CiAJCXdpLT5zbG90ID0gc2xvdDsKIAotCQkvKgotCQkgKiBUaGUgd29ya2Vy IHN0b3JlcyBpdHMgb3duIHRocmVhZCBpZCAoc2VlIGluaXRfc3Bhd25lZF93b3JrZXJfd2lu MzIpLAotCQkgKiBzbyBkb24ndCBhc2sgX2JlZ2ludGhyZWFkZXgoKSB0byByZXBvcnQgaXQg LS0gdGhhdCB3b3VsZCByYWNlIGl0cwotCQkgKiBzdG9yZS4KLQkJICovCi0JCWhhbmRsZSA9 IF9iZWdpbnRocmVhZGV4KE5VTEwsIDAsICh2b2lkICopICZpbml0X3NwYXduZWRfd29ya2Vy X3dpbjMyLAotCQkJCQkJCQl3aSwgMCwgTlVMTCk7Ci0JCWlmIChoYW5kbGUgPT0gMCkKLQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIHdvcmtlciB0aHJlYWQ6ICVtIik7Ci0JCXNs b3QtPmhUaHJlYWQgPSBoYW5kbGU7Ci0JCXNsb3QtPndvcmtlclN0YXR1cyA9IFdSS1JfSURM RTsKLSNlbHNlCQkJCQkJCS8qICFXSU4zMiAqLwotCQlwaWQgPSBmb3JrKCk7Ci0JCWlmIChw aWQgPT0gMCkKLQkJewotCQkJLyogd2UgYXJlIHRoZSB3b3JrZXIgKi8KLQkJCWludAkJCWo7 Ci0KLQkJCS8qIHRoaXMgaXMgbmVlZGVkIGZvciBHZXRNeVBTbG90KCkgKi8KLQkJCXNsb3Qt PnBpZCA9IGdldHBpZCgpOwotCi0JCQkvKiBpbnN0cnVjdCBzaWduYWwgaGFuZGxlciB0aGF0 IHdlJ3JlIGluIGEgd29ya2VyIG5vdyAqLwotCQkJc2lnbmFsX2luZm8uYW1fd29ya2VyID0g dHJ1ZTsKKwkJaWYgKHBnX3RocmRfY3JlYXRlKCZzbG90LT50aHJlYWQsIHdvcmtlcl90aHJl YWRfbWFpbiwgd2kpICE9CisJCQlwZ190aHJkX3N1Y2Nlc3MpCisJCQlwZ19mYXRhbCgiY291 bGQgbm90IGNyZWF0ZSB3b3JrZXIgdGhyZWFkIik7CiAKLQkJCS8qIGNsb3NlIHJlYWQgZW5k IG9mIFdvcmtlciAtPiBMZWFkZXIgKi8KLQkJCWNsb3Nlc29ja2V0KHBpcGVXTVtQSVBFX1JF QURdKTsKLQkJCS8qIGNsb3NlIHdyaXRlIGVuZCBvZiBMZWFkZXIgLT4gV29ya2VyICovCi0J CQljbG9zZXNvY2tldChwaXBlTVdbUElQRV9XUklURV0pOwotCi0JCQkvKgotCQkJICogQ2xv c2UgYWxsIGluaGVyaXRlZCBmZHMgZm9yIGNvbW11bmljYXRpb24gb2YgdGhlIGxlYWRlciB3 aXRoCi0JCQkgKiBwcmV2aW91c2x5LWZvcmtlZCB3b3JrZXJzLgotCQkJICovCi0JCQlmb3Ig KGogPSAwOyBqIDwgaTsgaisrKQotCQkJewotCQkJCWNsb3Nlc29ja2V0KHBzdGF0ZS0+cGFy YWxsZWxTbG90W2pdLnBpcGVSZWFkKTsKLQkJCQljbG9zZXNvY2tldChwc3RhdGUtPnBhcmFs bGVsU2xvdFtqXS5waXBlV3JpdGUpOwotCQkJfQotCi0JCQkvKiBSdW4gdGhlIHdvcmtlciAu Li4gKi8KLQkJCVJ1bldvcmtlcihBSCwgc2xvdCk7Ci0KLQkJCS8qIFdlIGNhbiBqdXN0IGV4 aXQoMCkgd2hlbiBkb25lICovCi0JCQlleGl0KDApOwotCQl9Ci0JCWVsc2UgaWYgKHBpZCA8 IDApCi0JCXsKLQkJCS8qIGZvcmsgZmFpbGVkICovCi0JCQlwZ19mYXRhbCgiY291bGQgbm90 IGNyZWF0ZSB3b3JrZXIgcHJvY2VzczogJW0iKTsKLQkJfQotCi0JCS8qIEluIExlYWRlciBh ZnRlciBzdWNjZXNzZnVsIGZvcmsgKi8KLQkJc2xvdC0+cGlkID0gcGlkOwogCQlzbG90LT53 b3JrZXJTdGF0dXMgPSBXUktSX0lETEU7Ci0KLQkJLyogY2xvc2UgcmVhZCBlbmQgb2YgTGVh ZGVyIC0+IFdvcmtlciAqLwotCQljbG9zZXNvY2tldChwaXBlTVdbUElQRV9SRUFEXSk7Ci0J CS8qIGNsb3NlIHdyaXRlIGVuZCBvZiBXb3JrZXIgLT4gTGVhZGVyICovCi0JCWNsb3Nlc29j a2V0KHBpcGVXTVtQSVBFX1dSSVRFXSk7Ci0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAl9 CiAKIAkvKgotCSAqIEhhdmluZyBmb3JrZWQgb2ZmIHRoZSB3b3JrZXJzLCBkaXNhYmxlIFNJ R1BJUEUgc28gdGhhdCBsZWFkZXIgaXNuJ3QKLQkgKiBraWxsZWQgaWYgaXQgdHJpZXMgdG8g c2VuZCBhIGNvbW1hbmQgdG8gYSBkZWFkIHdvcmtlci4gIFdlIGRvbid0IHdhbnQKLQkgKiB0 aGUgd29ya2VycyB0byBpbmhlcml0IHRoaXMgc2V0dGluZywgdGhvdWdoLgorCSAqIEhhdmlu ZyBzdGFydGVkIHRoZSB3b3JrZXJzLCBkaXNhYmxlIFNJR1BJUEUgc28gdGhhdCB0aGUgcHJv Y2VzcyBpc24ndAorCSAqIGtpbGxlZCBpZiB0aGUgbGVhZGVyIHRyaWVzIHRvIHdyaXRlIHRv IGEgYmFja2VuZCBvdmVyIGEgYnJva2VuCisJICogY29ubmVjdGlvbi4gIChsaWJwcSBzdGls bCB1c2VzIHNvY2tldHMgZXZlbiB0aG91Z2ggb3VyIG93biB3b3JrZXIKKwkgKiBjb21tdW5p Y2F0aW9uIG5vIGxvbmdlciBkb2VzLikKIAkgKi8KICNpZm5kZWYgV0lOMzIKIAlwcXNpZ25h bChTSUdQSVBFLCBQR19TSUdfSUdOKTsKQEAgLTEwNDAsMTAgKzc1MCwxMSBAQCBQYXJhbGxl bEJhY2t1cFN0YXJ0KEFyY2hpdmVIYW5kbGUgKkFIKQogCXNldF9hcmNoaXZlX2NhbmNlbF9p bmZvKEFILCBBSC0+Y29ubmVjdGlvbik7CiAKIAkvKgotCSAqIFRlbGwgdGhlIGNhbmNlbCBz aWduYWwgaGFuZGxlciB0byBmb3J3YXJkIHNpZ25hbHMgdG8gd29ya2VyIHByb2Nlc3NlcywK LQkgKiB0b28uICAoQXMgd2l0aCBxdWVyeSBjYW5jZWwsIHdlIGRpZCBub3QgbmVlZCB0aGlz IGVhcmxpZXIgYmVjYXVzZSB0aGUKLQkgKiB3b3JrZXJzIGhhdmUgbm90IHlldCBiZWVuIGdp dmVuIGFueXRoaW5nIHRvIGRvOyBpZiB3ZSBkaWUgYmVmb3JlIHRoaXMKLQkgKiBwb2ludCwg YW55IGFscmVhZHktc3RhcnRlZCB3b3JrZXJzIHdpbGwgc2VlIEVPRiBhbmQgcXVpdCBwcm9t cHRseS4pCisJICogVGVsbCB0aGUgY2FuY2VsIHNpZ25hbCBoYW5kbGVyIGFib3V0IHRoZSB3 b3JrZXJzIHNvIGl0IGNhbiBjYW5jZWwgdGhlaXIKKwkgKiBiYWNrZW5kcyB0b28uICAoQXMg d2l0aCBxdWVyeSBjYW5jZWwsIHdlIGRpZCBub3QgbmVlZCB0aGlzIGVhcmxpZXIKKwkgKiBi ZWNhdXNlIHRoZSB3b3JrZXJzIGhhdmUgbm90IHlldCBiZWVuIGdpdmVuIGFueXRoaW5nIHRv IGRvOyBpZiB3ZSBkaWUKKwkgKiBiZWZvcmUgdGhpcyBwb2ludCwgYW55IGFscmVhZHktc3Rh cnRlZCB3b3JrZXJzIHdpbGwgc2VlIHRoZWlyIGNvbW1hbmQKKwkgKiBjaGFubmVscyBjbG9z ZSBhbmQgcXVpdCBwcm9tcHRseS4pCiAJICovCiAJc2V0X2NhbmNlbF9wc3RhdGUocHN0YXRl KTsKIApAQCAtMTA2NSwyMSArNzc2LDEyIEBAIFBhcmFsbGVsQmFja3VwRW5kKEFyY2hpdmVI YW5kbGUgKkFILCBQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAJLyogVGhlcmUgc2hvdWxkIG5v dCBiZSBhbnkgdW5maW5pc2hlZCBqb2JzICovCiAJQXNzZXJ0KElzRXZlcnlXb3JrZXJJZGxl KHBzdGF0ZSkpOwogCi0JLyogVGVsbCB0aGUgd29ya2VycyB0aGV5IGNhbiBleGl0ICovCi0j aWZkZWYgV0lOMzIKKwkvKiBUZWxsIHRoZSB3b3JrZXJzIHRoZXkgY2FuIGV4aXQgYnkgY2xv c2luZyB0aGVpciBjb21tYW5kIGNoYW5uZWxzICovCiAJcGdfbXR4X2xvY2soJm1zZ19sb2Nr KTsKIAlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCiAJCXBzdGF0 ZS0+cGFyYWxsZWxTbG90W2ldLmNoYW5DbG9zZWQgPSB0cnVlOwogCXBnX2NuZF9icm9hZGNh c3QoJndvcmtlcl9jdik7CiAJcGdfbXR4X3VubG9jaygmbXNnX2xvY2spOwotI2Vsc2UKLQkv KiBDbG9zZSB0aGUgc29ja2V0cyBzbyB0aGF0IHRoZSB3b3JrZXJzIGtub3cgdGhleSBjYW4g ZXhpdCAqLwotCWZvciAoaSA9IDA7IGkgPCBwc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKLQl7 Ci0JCWNsb3Nlc29ja2V0KHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpcGVSZWFkKTsKLQkJ Y2xvc2Vzb2NrZXQocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0ucGlwZVdyaXRlKTsKLQl9Ci0j ZW5kaWYKIAogCS8qIFdhaXQgZm9yIHRoZW0gdG8gZXhpdCAqLwogCVdhaXRGb3JUZXJtaW5h dGluZ1dvcmtlcnMocHN0YXRlKTsKQEAgLTEyNTIsMjIgKzk1NCw2IEBAIEdldElkbGVXb3Jr ZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogCXJldHVybiBOT19TTE9UOwogfQogCi0vKgot ICogUmV0dXJuIHRydWUgaWZmIG5vIHdvcmtlciBpcyBydW5uaW5nLgotICovCi1zdGF0aWMg Ym9vbAotSGFzRXZlcnlXb3JrZXJUZXJtaW5hdGVkKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSkK LXsKLQlpbnQJCQlpOwotCi0JZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bnVtV29ya2Vyczsg aSsrKQotCXsKLQkJaWYgKFdPUktFUl9JU19SVU5OSU5HKHBzdGF0ZS0+cGFyYWxsZWxTbG90 W2ldLndvcmtlclN0YXR1cykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVl OwotfQotCiAvKgogICogUmV0dXJuIHRydWUgaWZmIGV2ZXJ5IHdvcmtlciBpcyBpbiB0aGUg V1JLUl9JRExFIHN0YXRlLgogICovCkBAIC0xMzM1LDkgKzEwMjEsMTAgQEAgbG9ja1RhYmxl Rm9yV29ya2VyKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiB9CiAKIC8qCi0g KiBXYWl0Rm9yQ29tbWFuZHM6IG1haW4gcm91dGluZSBmb3IgYSB3b3JrZXIgcHJvY2Vzcy4K KyAqIFdhaXRGb3JDb21tYW5kczogbWFpbiByb3V0aW5lIGZvciBhIHdvcmtlciB0aHJlYWQu CiAgKgotICogUmVhZCBhbmQgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIHRoZSBsZWFkZXIgdW50 aWwgd2Ugc2VlIEVPRiBvbiB0aGUgcGlwZS4KKyAqIFJlYWQgYW5kIGV4ZWN1dGUgY29tbWFu ZHMgZnJvbSB0aGUgbGVhZGVyIHVudGlsIHRoZSBjb21tYW5kIGNoYW5uZWwgaXMKKyAqIGNs b3NlZC4KICAqLwogc3RhdGljIHZvaWQKIFdhaXRGb3JDb21tYW5kcyhBcmNoaXZlSGFuZGxl ICpBSCwgUGFyYWxsZWxTbG90ICpzbG90KQpAQCAtMTQxMiw5ICsxMDk5LDkgQEAgTGlzdGVu VG9Xb3JrZXJzKEFyY2hpdmVIYW5kbGUgKkFILCBQYXJhbGxlbFN0YXRlICpwc3RhdGUsIGJv b2wgZG9fd2FpdCkKIAogCWlmICghbXNnKQogCXsKLQkJLyogSWYgZG9fd2FpdCBpcyB0cnVl LCB3ZSBtdXN0IGhhdmUgZGV0ZWN0ZWQgRU9GIG9uIHNvbWUgc29ja2V0ICovCisJCS8qIElm IGRvX3dhaXQgaXMgdHJ1ZSwgYSB3b3JrZXIgbXVzdCBoYXZlIGRpZWQgd2l0aG91dCByZXNw b25kaW5nICovCiAJCWlmIChkb193YWl0KQotCQkJcGdfZmF0YWwoImEgd29ya2VyIHByb2Nl c3MgZGllZCB1bmV4cGVjdGVkbHkiKTsKKwkJCXBnX2ZhdGFsKCJhIHdvcmtlciB0aHJlYWQg ZGllZCB1bmV4cGVjdGVkbHkiKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMTUxNSwx NCArMTIwMiwxMyBAQCBXYWl0Rm9yV29ya2VycyhBcmNoaXZlSGFuZGxlICpBSCwgUGFyYWxs ZWxTdGF0ZSAqcHN0YXRlLCBXRldfV2FpdE9wdGlvbiBtb2RlKQogLyoKICAqIFJlYWQgb25l IGNvbW1hbmQgbWVzc2FnZSBmcm9tIHRoZSBsZWFkZXIsIGJsb2NraW5nIGlmIG5lY2Vzc2Fy eQogICogdW50aWwgb25lIGlzIGF2YWlsYWJsZSwgYW5kIHJldHVybiBpdCBhcyBhIG1hbGxv YydkIHN0cmluZy4KLSAqIE9uIEVPRiwgcmV0dXJuIE5VTEwuCisgKiBPbiBjaGFubmVsIGNs b3NlLCByZXR1cm4gTlVMTC4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGlu IHdvcmtlciBwcm9jZXNzZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHdv cmtlciB0aHJlYWRzLgogICovCiBzdGF0aWMgY2hhciAqCiBnZXRNZXNzYWdlRnJvbUxlYWRl cihQYXJhbGxlbFNsb3QgKnNsb3QpCiB7Ci0jaWZkZWYgV0lOMzIKIAljaGFyCSAgICptc2c7 CiAKIAlwZ19tdHhfbG9jaygmbXNnX2xvY2spOwpAQCAtMTUzMiw4MCArMTIxOCw0MCBAQCBn ZXRNZXNzYWdlRnJvbUxlYWRlcihQYXJhbGxlbFNsb3QgKnNsb3QpCiAJc2xvdC0+Y21kTXNn ID0gTlVMTDsKIAlwZ19tdHhfdW5sb2NrKCZtc2dfbG9jayk7CiAJcmV0dXJuIG1zZzsKLSNl bHNlCi0JcmV0dXJuIHJlYWRNZXNzYWdlRnJvbVBpcGUoc2xvdC0+cGlwZVJldlJlYWQpOwot I2VuZGlmCiB9CiAKIC8qCiAgKiBTZW5kIGEgc3RhdHVzIG1lc3NhZ2UgdG8gdGhlIGxlYWRl ci4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHdvcmtlciBwcm9jZXNz ZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHdvcmtlciB0aHJlYWRzLgog ICovCiBzdGF0aWMgdm9pZAogc2VuZE1lc3NhZ2VUb0xlYWRlcihQYXJhbGxlbFNsb3QgKnNs b3QsIGNvbnN0IGNoYXIgKnN0cikKIHsKLSNpZmRlZiBXSU4zMgogCXBnX210eF9sb2NrKCZt c2dfbG9jayk7CiAJQXNzZXJ0KHNsb3QtPnJlc3BNc2cgPT0gTlVMTCk7CiAJc2xvdC0+cmVz cE1zZyA9IHBnX3N0cmR1cChzdHIpOwogCXBnX2NuZF9icm9hZGNhc3QoJmxlYWRlcl9jdik7 CiAJcGdfbXR4X3VubG9jaygmbXNnX2xvY2spOwotI2Vsc2UKLQlpbnQJCQlsZW4gPSBzdHJs ZW4oc3RyKSArIDE7Ci0KLQlpZiAocGlwZXdyaXRlKHNsb3QtPnBpcGVSZXZXcml0ZSwgc3Ry LCBsZW4pICE9IGxlbikKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byB0aGUgY29t bXVuaWNhdGlvbiBjaGFubmVsOiAlbSIpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBXYWl0IHVu dGlsIHNvbWUgZGVzY3JpcHRvciBpbiAid29ya2Vyc2V0IiBiZWNvbWVzIHJlYWRhYmxlLgot ICogUmV0dXJucyAtMSBvbiBlcnJvciwgZWxzZSB0aGUgbnVtYmVyIG9mIHJlYWRhYmxlIGRl c2NyaXB0b3JzLgotICovCi1zdGF0aWMgaW50Ci1zZWxlY3RfbG9vcChpbnQgbWF4RmQsIGZk X3NldCAqd29ya2Vyc2V0KQotewotCWludAkJCWk7Ci0JZmRfc2V0CQlzYXZlU2V0ID0gKndv cmtlcnNldDsKLQotCWZvciAoOzspCi0JewotCQkqd29ya2Vyc2V0ID0gc2F2ZVNldDsKLQkJ aSA9IHNlbGVjdChtYXhGZCArIDEsIHdvcmtlcnNldCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0K LSNpZm5kZWYgV0lOMzIKLQkJaWYgKGkgPCAwICYmIGVycm5vID09IEVJTlRSKQotCQkJY29u dGludWU7Ci0jZWxzZQotCQlpZiAoaSA9PSBTT0NLRVRfRVJST1IgJiYgV1NBR2V0TGFzdEVy cm9yKCkgPT0gV1NBRUlOVFIpCi0JCQljb250aW51ZTsKLSNlbmRpZgotCQlicmVhazsKLQl9 Ci0KLQlyZXR1cm4gaTsKIH0KIAotCiAvKgotICogQ2hlY2sgZm9yIG1lc3NhZ2VzIGZyb20g d29ya2VyIHByb2Nlc3Nlcy4KKyAqIENoZWNrIGZvciBtZXNzYWdlcyBmcm9tIHdvcmtlciB0 aHJlYWRzLgogICoKICAqIElmIGEgbWVzc2FnZSBpcyBhdmFpbGFibGUsIHJldHVybiBpdCBh cyBhIG1hbGxvYydkIHN0cmluZywgYW5kIHB1dCB0aGUKICAqIGluZGV4IG9mIHRoZSBzZW5k aW5nIHdvcmtlciBpbiAqd29ya2VyLgogICoKICAqIElmIG5vdGhpbmcgaXMgYXZhaWxhYmxl LCB3YWl0IGlmICJkb193YWl0IiBpcyB0cnVlLCBlbHNlIHJldHVybiBOVUxMLgogICoKLSAq IElmIHdlIGRldGVjdCBFT0Ygb24gYW55IHNvY2tldCwgd2UnbGwgcmV0dXJuIE5VTEwuICBJ dCdzIG5vdCBncmVhdCB0aGF0Ci0gKiB0aGF0J3MgaGFyZCB0byBkaXN0aW5ndWlzaCBmcm9t IHRoZSBuby1kYXRhLWF2YWlsYWJsZSBjYXNlLCBidXQgZm9yIG5vdworICogSWYgYSB3b3Jr ZXIgaGFzIGRpZWQgd2l0aG91dCByZXNwb25kaW5nLCB3ZSdsbCByZXR1cm4gTlVMTC4gIEl0 J3Mgbm90IGdyZWF0CisgKiB0aGF0IHRoYXQncyBoYXJkIHRvIGRpc3Rpbmd1aXNoIGZyb20g dGhlIG5vLWRhdGEtYXZhaWxhYmxlIGNhc2UsIGJ1dCBmb3Igbm93CiAgKiBvdXIgb25lIGNh bGxlciBpcyBva2F5IHdpdGggdGhhdC4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1 dGVkIGluIHRoZSBsZWFkZXIgcHJvY2Vzcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0 ZWQgaW4gdGhlIGxlYWRlciB0aHJlYWQuCiAgKi8KIHN0YXRpYyBjaGFyICoKIGdldE1lc3Nh Z2VGcm9tV29ya2VyKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwgYm9vbCBkb193YWl0LCBpbnQg KndvcmtlcikKIHsKLSNpZmRlZiBXSU4zMgogCWludAkJCWk7CiAKIAkvKgpAQCAtMTYzNiw4 ICsxMjgyLDggQEAgZ2V0TWVzc2FnZUZyb21Xb3JrZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRl LCBib29sIGRvX3dhaXQsIGludCAqd29ya2VyKQogCQl9CiAKIAkJLyoKLQkJICogQSB3b3Jr ZXIgZGllZCB3aXRob3V0IHJlc3BvbmRpbmc6IHJldHVybiBOVUxMIGFzIHRoZSBVbml4IHBh dGggZG9lcwotCQkgKiBvbiBFT0YsIHNvIHRoZSBjYWxsZXIgcmVwb3J0cyB0aGUgZmFpbHVy ZSBpbnN0ZWFkIG9mIGhhbmdpbmcuCisJCSAqIEEgd29ya2VyIGRpZWQgd2l0aG91dCByZXNw b25kaW5nOiByZXR1cm4gTlVMTCBzbyB0aGUgY2FsbGVyIHJlcG9ydHMKKwkJICogdGhlIGZh aWx1cmUgaW5zdGVhZCBvZiBoYW5naW5nLgogCQkgKi8KIAkJaWYgKGFueURpZWQpCiAJCXsK QEAgLTE2NTEsNzQgKzEyOTcsMTYgQEAgZ2V0TWVzc2FnZUZyb21Xb3JrZXIoUGFyYWxsZWxT dGF0ZSAqcHN0YXRlLCBib29sIGRvX3dhaXQsIGludCAqd29ya2VyKQogCQl9CiAJCXBnX2Nu ZF93YWl0KCZsZWFkZXJfY3YsICZtc2dfbG9jayk7CiAJfQotI2Vsc2UKLQlpbnQJCQlpOwot CWZkX3NldAkJd29ya2Vyc2V0OwotCWludAkJCW1heEZkID0gLTE7Ci0Jc3RydWN0IHRpbWV2 YWwgbm93YWl0ID0gezAsIDB9OwotCi0JLyogY29uc3RydWN0IGJpdG1hcCBvZiBzb2NrZXQg ZGVzY3JpcHRvcnMgZm9yIHNlbGVjdCgpICovCi0JRkRfWkVSTygmd29ya2Vyc2V0KTsKLQlm b3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJzOyBpKyspCi0JewotCQlpZiAoIVdP UktFUl9JU19SVU5OSU5HKHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLndvcmtlclN0YXR1cykp Ci0JCQljb250aW51ZTsKLQkJRkRfU0VUKHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpcGVS ZWFkLCAmd29ya2Vyc2V0KTsKLQkJaWYgKHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpcGVS ZWFkID4gbWF4RmQpCi0JCQltYXhGZCA9IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpcGVS ZWFkOwotCX0KLQotCWlmIChkb193YWl0KQotCXsKLQkJaSA9IHNlbGVjdF9sb29wKG1heEZk LCAmd29ya2Vyc2V0KTsKLQkJQXNzZXJ0KGkgIT0gMCk7Ci0JfQotCWVsc2UKLQl7Ci0JCWlm ICgoaSA9IHNlbGVjdChtYXhGZCArIDEsICZ3b3JrZXJzZXQsIE5VTEwsIE5VTEwsICZub3dh aXQpKSA9PSAwKQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGkgPCAwKQotCQlwZ19m YXRhbCgiJXMoKSBmYWlsZWQ6ICVtIiwgInNlbGVjdCIpOwotCi0JZm9yIChpID0gMDsgaSA8 IHBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQotCXsKLQkJY2hhcgkgICAqbXNnOwotCi0JCWlm ICghV09SS0VSX0lTX1JVTk5JTkcocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0ud29ya2VyU3Rh dHVzKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIUZEX0lTU0VUKHBzdGF0ZS0+cGFyYWxsZWxT bG90W2ldLnBpcGVSZWFkLCAmd29ya2Vyc2V0KSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0J CSAqIFJlYWQgdGhlIG1lc3NhZ2UgaWYgYW55LiAgSWYgdGhlIHNvY2tldCBpcyByZWFkeSBi ZWNhdXNlIG9mIEVPRiwKLQkJICogd2UnbGwgcmV0dXJuIE5VTEwgaW5zdGVhZCAoYW5kIHRo ZSBzb2NrZXQgd2lsbCBzdGF5IHJlYWR5LCBzbyB0aGUKLQkJICogY29uZGl0aW9uIHdpbGwg cGVyc2lzdCkuCi0JCSAqCi0JCSAqIE5vdGU6IGJlY2F1c2UgdGhpcyBpcyBhIGJsb2NraW5n IHJlYWQsIHdlJ2xsIHdhaXQgaWYgb25seSBwYXJ0IG9mCi0JCSAqIHRoZSBtZXNzYWdlIGlz IGF2YWlsYWJsZS4gIFdhaXRpbmcgYSBsb25nIHRpbWUgd291bGQgYmUgYmFkLCBidXQKLQkJ ICogc2luY2Ugd29ya2VyIHN0YXR1cyBtZXNzYWdlcyBhcmUgc2hvcnQgYW5kIGFyZSBhbHdh eXMgc2VudCBpbiBvbmUKLQkJICogb3BlcmF0aW9uLCBpdCBzaG91bGRuJ3QgYmUgYSBwcm9i bGVtIGluIHByYWN0aWNlLgotCQkgKi8KLQkJbXNnID0gcmVhZE1lc3NhZ2VGcm9tUGlwZShw c3RhdGUtPnBhcmFsbGVsU2xvdFtpXS5waXBlUmVhZCk7Ci0JCSp3b3JrZXIgPSBpOwotCQly ZXR1cm4gbXNnOwotCX0KLQlBc3NlcnQoZmFsc2UpOwotCXJldHVybiBOVUxMOwotI2VuZGlm CiB9CiAKIC8qCi0gKiBTZW5kIGEgY29tbWFuZCBtZXNzYWdlIHRvIHRoZSBzcGVjaWZpZWQg d29ya2VyIHByb2Nlc3MuCisgKiBTZW5kIGEgY29tbWFuZCBtZXNzYWdlIHRvIHRoZSBzcGVj aWZpZWQgd29ya2VyIHRocmVhZC4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVk IGluIHRoZSBsZWFkZXIgcHJvY2Vzcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQg aW4gdGhlIGxlYWRlciB0aHJlYWQuCiAgKi8KIHN0YXRpYyB2b2lkCiBzZW5kTWVzc2FnZVRv V29ya2VyKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwgaW50IHdvcmtlciwgY29uc3QgY2hhciAq c3RyKQogewotI2lmZGVmIFdJTjMyCiAJUGFyYWxsZWxTbG90ICpzbG90ID0gJnBzdGF0ZS0+ cGFyYWxsZWxTbG90W3dvcmtlcl07CiAKIAlwZ19tdHhfbG9jaygmbXNnX2xvY2spOwpAQCAt MTcyNiwxNjEgKzEzMTQsNCBAQCBzZW5kTWVzc2FnZVRvV29ya2VyKFBhcmFsbGVsU3RhdGUg KnBzdGF0ZSwgaW50IHdvcmtlciwgY29uc3QgY2hhciAqc3RyKQogCXNsb3QtPmNtZE1zZyA9 IHBnX3N0cmR1cChzdHIpOwogCXBnX2NuZF9icm9hZGNhc3QoJndvcmtlcl9jdik7CiAJcGdf bXR4X3VubG9jaygmbXNnX2xvY2spOwotI2Vsc2UKLQlpbnQJCQlsZW4gPSBzdHJsZW4oc3Ry KSArIDE7Ci0KLQlpZiAocGlwZXdyaXRlKHBzdGF0ZS0+cGFyYWxsZWxTbG90W3dvcmtlcl0u cGlwZVdyaXRlLCBzdHIsIGxlbikgIT0gbGVuKQotCXsKLQkJcGdfZmF0YWwoImNvdWxkIG5v dCB3cml0ZSB0byB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsOiAlbSIpOwotCX0KLSNlbmRp ZgotfQotCi0vKgotICogUmVhZCBvbmUgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgcGlw ZSAoZmQpLCBibG9ja2luZyBpZiBuZWNlc3NhcnkKLSAqIHVudGlsIG9uZSBpcyBhdmFpbGFi bGUsIGFuZCByZXR1cm4gaXQgYXMgYSBtYWxsb2MnZCBzdHJpbmcuCi0gKiBPbiBFT0YsIHJl dHVybiBOVUxMLgotICoKLSAqIEEgIm1lc3NhZ2UiIG9uIHRoZSBjaGFubmVsIGlzIGp1c3Qg YSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgotICovCi1zdGF0aWMgY2hhciAqCi1yZWFkTWVz c2FnZUZyb21QaXBlKGludCBmZCkKLXsKLQljaGFyCSAgICptc2c7Ci0JaW50CQkJbXNnc2l6 ZSwKLQkJCQlidWZzaXplOwotCWludAkJCXJldDsKLQotCS8qCi0JICogSW4gdGhlb3J5LCBp ZiB3ZSBsZXQgcGlwZXJlYWQoKSByZWFkIG11bHRpcGxlIGJ5dGVzLCBpdCBtaWdodCBnaXZl IHVzCi0JICogYmFjayBmcmFnbWVudHMgb2YgbXVsdGlwbGUgbWVzc2FnZXMuICAoVGhhdCBj YW4ndCBhY3R1YWxseSBvY2N1ciwgc2luY2UKLQkgKiBuZWl0aGVyIGxlYWRlciBub3Igd29y a2VycyBzZW5kIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSB3aXRob3V0IHdhaXRpbmcKLQkgKiBm b3IgYSByZXBseSwgYnV0IHdlIGRvbid0IHdpc2ggdG8gYXNzdW1lIHRoYXQgaGVyZS4pICBG b3Igc2ltcGxpY2l0eSwKLQkgKiByZWFkIGEgYnl0ZSBhdCBhIHRpbWUgdW50aWwgd2UgZ2V0 IHRoZSB0ZXJtaW5hdGluZyAnXDAnLiAgVGhpcyBtZXRob2QKLQkgKiBpcyBhIGJpdCBpbmVm ZmljaWVudCwgYnV0IHNpbmNlIHRoaXMgaXMgb25seSB1c2VkIGZvciByZWxhdGl2ZWx5IHNo b3J0Ci0JICogY29tbWFuZCBhbmQgc3RhdHVzIHN0cmluZ3MsIGl0IHNob3VsZG4ndCBtYXR0 ZXIuCi0JICovCi0JYnVmc2l6ZSA9IDY0OwkJCQkvKiBjb3VsZCBiZSBhbnkgbnVtYmVyICov Ci0JbXNnID0gKGNoYXIgKikgcGdfbWFsbG9jKGJ1ZnNpemUpOwotCW1zZ3NpemUgPSAwOwot CWZvciAoOzspCi0JewotCQlBc3NlcnQobXNnc2l6ZSA8IGJ1ZnNpemUpOwotCQlyZXQgPSBw aXBlcmVhZChmZCwgbXNnICsgbXNnc2l6ZSwgMSk7Ci0JCWlmIChyZXQgPD0gMCkKLQkJCWJy ZWFrOwkJCQkvKiBlcnJvciBvciBjb25uZWN0aW9uIGNsb3N1cmUgKi8KLQotCQlBc3NlcnQo cmV0ID09IDEpOwotCi0JCWlmIChtc2dbbXNnc2l6ZV0gPT0gJ1wwJykKLQkJCXJldHVybiBt c2c7CQkJLyogY29sbGVjdGVkIHdob2xlIG1lc3NhZ2UgKi8KLQotCQltc2dzaXplKys7Ci0J CWlmIChtc2dzaXplID09IGJ1ZnNpemUpIC8qIGVubGFyZ2UgYnVmZmVyIGlmIG5lZWRlZCAq LwotCQl7Ci0JCQlidWZzaXplICs9IDE2OwkJLyogY291bGQgYmUgYW55IG51bWJlciAqLwot CQkJbXNnID0gKGNoYXIgKikgcGdfcmVhbGxvYyhtc2csIGJ1ZnNpemUpOwotCQl9Ci0JfQot Ci0JLyogT3RoZXIgZW5kIGhhcyBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gKi8KLQlwZ19mcmVl KG1zZyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNpZmRlZiBXSU4zMgotCi0vKgotICogVGhp cyBpcyBhIHJlcGxhY2VtZW50IHZlcnNpb24gb2YgcGlwZSgyKSBmb3IgV2luZG93cyB3aGlj aCBhbGxvd3MgdGhlIHBpcGUKLSAqIGhhbmRsZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3QoKS4K LSAqCi0gKiBSZWFkcyBhbmQgd3JpdGVzIG9uIHRoZSBwaXBlIG11c3QgZ28gdGhyb3VnaCBw aXBlcmVhZCgpL3BpcGV3cml0ZSgpLgotICoKLSAqIEZvciBjb25zaXN0ZW5jeSB3aXRoIFVu aXggd2UgZGVjbGFyZSB0aGUgcmV0dXJuZWQgaGFuZGxlcyBhcyAiaW50Ii4KLSAqIFRoaXMg aXMgb2theSBldmVuIG9uIFdJTjY0IGJlY2F1c2Ugc3lzdGVtIGhhbmRsZXMgYXJlIG5vdCBt b3JlIHRoYW4KLSAqIDMyIGJpdHMgd2lkZSwgYnV0IHdlIGRvIGhhdmUgdG8gZG8gc29tZSBj YXN0aW5nLgotICovCi1zdGF0aWMgaW50Ci1wZ3BpcGUoaW50IGhhbmRsZXNbMl0pCi17Ci0J cGdzb2NrZXQJcywKLQkJCQl0bXBfc29jazsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2Vydl9h ZGRyOwotCWludAkJCWxlbiA9IHNpemVvZihzZXJ2X2FkZHIpOwotCi0JLyogV2UgaGF2ZSB0 byB1c2UgdGhlIFVuaXggc29ja2V0IGludmFsaWQgZmlsZSBkZXNjcmlwdG9yIHZhbHVlIGhl cmUuICovCi0JaGFuZGxlc1swXSA9IGhhbmRsZXNbMV0gPSAtMTsKLQotCS8qCi0JICogc2V0 dXAgbGlzdGVuIHNvY2tldAotCSAqLwotCWlmICgocyA9IHNvY2tldChBRl9JTkVULCBTT0NL X1NUUkVBTSwgMCkpID09IFBHSU5WQUxJRF9TT0NLRVQpCi0JewotCQlwZ19sb2dfZXJyb3Io InBncGlwZTogY291bGQgbm90IGNyZWF0ZSBzb2NrZXQ6IGVycm9yIGNvZGUgJWQiLAotCQkJ CQkgV1NBR2V0TGFzdEVycm9yKCkpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbWVtc2V0KCZz ZXJ2X2FkZHIsIDAsIHNpemVvZihzZXJ2X2FkZHIpKTsKLQlzZXJ2X2FkZHIuc2luX2ZhbWls eSA9IEFGX0lORVQ7Ci0Jc2Vydl9hZGRyLnNpbl9wb3J0ID0gcGdfaHRvbjE2KDApOwotCXNl cnZfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBwZ19odG9uMzIoSU5BRERSX0xPT1BCQUNLKTsK LQlpZiAoYmluZChzLCAoU09DS0FERFIgKikgJnNlcnZfYWRkciwgbGVuKSA9PSBTT0NLRVRf RVJST1IpCi0JewotCQlwZ19sb2dfZXJyb3IoInBncGlwZTogY291bGQgbm90IGJpbmQ6IGVy cm9yIGNvZGUgJWQiLAotCQkJCQkgV1NBR2V0TGFzdEVycm9yKCkpOwotCQljbG9zZXNvY2tl dChzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAobGlzdGVuKHMsIDEpID09IFNPQ0tFVF9F UlJPUikKLQl7Ci0JCXBnX2xvZ19lcnJvcigicGdwaXBlOiBjb3VsZCBub3QgbGlzdGVuOiBl cnJvciBjb2RlICVkIiwKLQkJCQkJIFdTQUdldExhc3RFcnJvcigpKTsKLQkJY2xvc2Vzb2Nr ZXQocyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKGdldHNvY2tuYW1lKHMsIChTT0NLQURE UiAqKSAmc2Vydl9hZGRyLCAmbGVuKSA9PSBTT0NLRVRfRVJST1IpCi0JewotCQlwZ19sb2df ZXJyb3IoInBncGlwZTogJXMoKSBmYWlsZWQ6IGVycm9yIGNvZGUgJWQiLCAiZ2V0c29ja25h bWUiLAotCQkJCQkgV1NBR2V0TGFzdEVycm9yKCkpOwotCQljbG9zZXNvY2tldChzKTsKLQkJ cmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogc2V0dXAgcGlwZSBoYW5kbGVzCi0JICovCi0J aWYgKCh0bXBfc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpID09IFBH SU5WQUxJRF9TT0NLRVQpCi0JewotCQlwZ19sb2dfZXJyb3IoInBncGlwZTogY291bGQgbm90 IGNyZWF0ZSBzZWNvbmQgc29ja2V0OiBlcnJvciBjb2RlICVkIiwKLQkJCQkJIFdTQUdldExh c3RFcnJvcigpKTsKLQkJY2xvc2Vzb2NrZXQocyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaGFu ZGxlc1sxXSA9IChpbnQpIHRtcF9zb2NrOwotCi0JaWYgKGNvbm5lY3QoaGFuZGxlc1sxXSwg KFNPQ0tBRERSICopICZzZXJ2X2FkZHIsIGxlbikgPT0gU09DS0VUX0VSUk9SKQotCXsKLQkJ cGdfbG9nX2Vycm9yKCJwZ3BpcGU6IGNvdWxkIG5vdCBjb25uZWN0IHNvY2tldDogZXJyb3Ig Y29kZSAlZCIsCi0JCQkJCSBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCWNsb3Nlc29ja2V0KGhh bmRsZXNbMV0pOwotCQloYW5kbGVzWzFdID0gLTE7Ci0JCWNsb3Nlc29ja2V0KHMpOwotCQly ZXR1cm4gLTE7Ci0JfQotCWlmICgodG1wX3NvY2sgPSBhY2NlcHQocywgKFNPQ0tBRERSICop ICZzZXJ2X2FkZHIsICZsZW4pKSA9PSBQR0lOVkFMSURfU09DS0VUKQotCXsKLQkJcGdfbG9n X2Vycm9yKCJwZ3BpcGU6IGNvdWxkIG5vdCBhY2NlcHQgY29ubmVjdGlvbjogZXJyb3IgY29k ZSAlZCIsCi0JCQkJCSBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCWNsb3Nlc29ja2V0KGhhbmRs ZXNbMV0pOwotCQloYW5kbGVzWzFdID0gLTE7Ci0JCWNsb3Nlc29ja2V0KHMpOwotCQlyZXR1 cm4gLTE7Ci0JfQotCWhhbmRsZXNbMF0gPSAoaW50KSB0bXBfc29jazsKLQotCWNsb3Nlc29j a2V0KHMpOwotCXJldHVybiAwOwogfQotCi0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oIGIvc3JjL2Jpbi9wZ19kdW1w L3BhcmFsbGVsLmgKaW5kZXggZjc1NTdjZDA4OS4uMDY3NjRlZWZjYSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFs bGVsLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAogI2luY2x1 ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgorI2luY2x1ZGUgInBvcnQvcGdfdGhyZWFkcy5o IgogCiAvKiBGdW5jdGlvbiB0byBjYWxsIGluIGxlYWRlciBwcm9jZXNzIG9uIGNvbXBsZXRp b24gb2YgYSB3b3JrZXIgdGFzayAqLwogdHlwZWRlZiB2b2lkICgqUGFyYWxsZWxDb21wbGV0 aW9uUHRyKSAoQXJjaGl2ZUhhbmRsZSAqQUgsCkBAIC02MCwxMiArNjEsOCBAQCB0eXBlZGVm IHN0cnVjdCBQYXJhbGxlbFN0YXRlCiAJUGFyYWxsZWxTbG90ICpwYXJhbGxlbFNsb3Q7IC8q IHByaXZhdGUgaW5mbyBhYm91dCBlYWNoIHdvcmtlciAqLwogfSBQYXJhbGxlbFN0YXRlOwog Ci0jaWZkZWYgV0lOMzIKLWV4dGVybiBib29sIHBhcmFsbGVsX2luaXRfZG9uZTsKLWV4dGVy biBEV09SRCBtYWluVGhyZWFkSWQ7Ci0jZW5kaWYKLQogZXh0ZXJuIHZvaWQgaW5pdF9wYXJh bGxlbF9kdW1wX3V0aWxzKHZvaWQpOworZXh0ZXJuIGJvb2wgYW1fcGFyYWxsZWxfd29ya2Vy X3RocmVhZCh2b2lkKTsKIAogZXh0ZXJuIGJvb2wgSXNFdmVyeVdvcmtlcklkbGUoUGFyYWxs ZWxTdGF0ZSAqcHN0YXRlKTsKIGV4dGVybiB2b2lkIFdhaXRGb3JXb3JrZXJzKEFyY2hpdmVI YW5kbGUgKkFILCBQYXJhbGxlbFN0YXRlICpwc3RhdGUsCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X3V0aWxzLmMKaW5kZXggNmQ3YWU5YWZjNS4uY2UwZTA1OTU1NCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdXRpbHMuYwpAQCAtMTMsMjUgKzEzLDIyIEBACiAgKi8KICNpbmNsdWRlICJw b3N0Z3Jlc19mZS5oIgogCi0jaWZkZWYgV0lOMzIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgot I2VuZGlmCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisjaW5jbHVkZSAicG9ydC9w Z190aHJlYWRzLmgiCiAKIC8qIEdsb2JhbHMgZXhwb3J0ZWQgYnkgdGhpcyBmaWxlICovCiBj b25zdCBjaGFyICpwcm9nbmFtZSA9IE5VTEw7CiAKLSNpZmRlZiBXSU4zMgotCiAvKgogICog RmxhZyB0ZWxsaW5nIHdvcmtlciB0aHJlYWRzIHRvIHN0YXkgcXVpZXQgYWJvdXQgcXVlcnkg ZmFpbHVyZXMgYmVjYXVzZQogICogd2UncmUgY2FuY2VsbGluZyB0aGVpciBxdWVyaWVzIGFz IHBhcnQgb2YgdGVhcmluZyBkb3duIHRoZSBwcm9jZXNzLiAgU2VlCiAgKiB0aGUgY29tbWVu dCBpbiBwZ19iYWNrdXBfdXRpbHMuaC4KICAqCi0gKiBUaGUgY2FuY2VsIHRocmVhZCB3cml0 ZXMgaXQgd2hpbGUgd29ya2VyIHRocmVhZHMgcmVhZCBpdCwgc28gaXQncyBtYXJrZWQKKyAq IFRoZSBjYW5jZWwgaGFuZGxlciB3cml0ZXMgaXQgd2hpbGUgd29ya2VyIHRocmVhZHMgcmVh ZCBpdCwgc28gaXQncyBtYXJrZWQKICAqIHZvbGF0aWxlIHRvIGtlZXAgdGhlIGNvbXBpbGVy IGZyb20gY2FjaGluZyB0aGUgdmFsdWUuICBBIHBsYWluIHZvbGF0aWxlCiAgKiBib29sIGlz bid0IGEgbWVtb3J5IGJhcnJpZXIsIGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGhlcmUuICBBIGxv dCBvZiB0aGluZ3MKLSAqIGhhcHBlbiBiZXR3ZWVuIHNldF9jYW5jZWxfaW5fcHJvZ3Jlc3Mo KSBpbiB0aGUgY2FuY2VsIHRocmVhZCBhbmQgdGhlIG90aGVyCisgKiBoYXBwZW4gYmV0d2Vl biBzZXRfY2FuY2VsX2luX3Byb2dyZXNzKCkgaW4gdGhlIGNhbmNlbCBoYW5kbGVyIGFuZCB0 aGUgb3RoZXIKICAqIHRocmVhZHMgY2FsbGluZyBpc19jYW5jZWxfaW5fcHJvZ3Jlc3MoKSwg aW5jbHVkaW5nIG5ldHdvcmsgb3BlcmF0aW9ucywKICAqIHdoaWNoIGltcGxpY2l0bHkgYWN0 IGFzIG1lbW9yeSBiYXJyaWVycy4gIEZ1cnRoZXJtb3JlLCB0aGUgZmxhZyBpcyBvbmx5CiAg KiBldmVyIGZsaXBwZWQgb25lIHdheSAoZmFsc2UgdG8gdHJ1ZSkgYW5kIGEgd29ya2VyIGJy aWVmbHkgb2JzZXJ2aW5nIHRoZQpAQCAtNDAsNyArMzcsNyBAQCBjb25zdCBjaGFyICpwcm9n bmFtZSA9IE5VTEw7CiAgKiBjYW5jZWxsZWQiIGVycm9ycyBkdXJpbmcgdGhlIHNodXRkb3du IHByb2Nlc3MuCiAgKgogICogWFhYOiBUaGlzIHNob3VsZCBiZSBzd2FwcGVkIG91dCBmb3Ig YSBwcm9wZXIgYXRvbWljIHdoZW4gd2UgaGF2ZSB0aG9zZSBpbgotICogdGhlIGZyb250ZW5k IGNvZGUsIHNvIHRoYXQgd2Ugd291bGRuJ3QgbmVlZCB0byByYXRpb25hbGl6ZWUgYWxsIG9m IHRoZQorICogdGhlIGZyb250ZW5kIGNvZGUsIHNvIHRoYXQgd2Ugd291bGRuJ3QgbmVlZCB0 byByYXRpb25hbGl6ZSBhbGwgb2YgdGhlCiAgKiBhYm92ZS4KICAqLwogc3RhdGljIHZvbGF0 aWxlIGJvb2wgY2FuY2VsSW5Qcm9ncmVzcyA9IGZhbHNlOwpAQCAtNTcsOCArNTQsNiBAQCBp c19jYW5jZWxfaW5fcHJvZ3Jlc3Modm9pZCkKIAlyZXR1cm4gY2FuY2VsSW5Qcm9ncmVzczsK IH0KIAotI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCi0KICNkZWZpbmUgTUFYX09OX0VYSVRf TklDRUxZCQkJCTIwCiAKIHN0YXRpYyBzdHJ1Y3QKQEAgLTExMywxOCArMTA4LDEzIEBAIG9u X2V4aXRfbmljZWx5KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICph cmcpCiAgKiBSdW4gYWNjdW11bGF0ZWQgb25fZXhpdF9uaWNlbHkgY2FsbGJhY2tzIGluIHJl dmVyc2Ugb3JkZXIgYW5kIHRoZW4gZXhpdAogICogd2l0aG91dCBwcmludGluZyBhbnkgbWVz c2FnZS4KICAqCi0gKiBJZiBydW5uaW5nIGluIGEgcGFyYWxsZWwgd29ya2VyIHRocmVhZCBv biBXaW5kb3dzLCB3ZSBvbmx5IGV4aXQgdGhlIHRocmVhZCwKLSAqIG5vdCB0aGUgd2hvbGUg cHJvY2Vzcy4KKyAqIElmIHJ1bm5pbmcgaW4gYSBwYXJhbGxlbCB3b3JrZXIgdGhyZWFkLCB3 ZSBvbmx5IGV4aXQgdGhlIHRocmVhZCwgbm90IHRoZQorICogd2hvbGUgcHJvY2Vzcy4KICAq Ci0gKiBOb3RlIHRoYXQgaW4gcGFyYWxsZWwgb3BlcmF0aW9uIG9uIFdpbmRvd3MsIHRoZSBj YWxsYmFjayhzKSB3aWxsIGJlIHJ1bgotICogYnkgZWFjaCB0aHJlYWQgc2luY2UgdGhlIGxp c3Qgc3RhdGUgaXMgbmVjZXNzYXJpbHkgc2hhcmVkIGJ5IGFsbCB0aHJlYWRzOwotICogZWFj aCBjYWxsYmFjayBtdXN0IGNvbnRhaW4gbG9naWMgdG8gZW5zdXJlIGl0IGRvZXMgb25seSB3 aGF0J3MgYXBwcm9wcmlhdGUKLSAqIGZvciBpdHMgdGhyZWFkLiAgT24gVW5peCwgY2FsbGJh Y2tzIGFyZSBhbHNvIHJ1biBieSBlYWNoIHByb2Nlc3MsIGJ1dCBvbmx5Ci0gKiBmb3IgY2Fs bGJhY2tzIGVzdGFibGlzaGVkIGJlZm9yZSB3ZSBmb3JrIG9mZiB0aGUgY2hpbGQgcHJvY2Vz c2VzLiAgKEl0J2QKLSAqIGJlIGNsZWFuZXIgdG8gcmVzZXQgdGhlIGxpc3QgYWZ0ZXIgZm9y aygpLCBhbmQgbGV0IGVhY2ggY2hpbGQgZXN0YWJsaXNoCi0gKiBpdHMgb3duIGNhbGxiYWNr czsgYnV0IHRoZW4gdGhlIGJlaGF2aW9yIHdvdWxkIGJlIGNvbXBsZXRlbHkgaW5jb25zaXN0 ZW50Ci0gKiBiZXR3ZWVuIFdpbmRvd3MgYW5kIFVuaXguICBGb3Igbm93LCBqdXN0IGJlIHN1 cmUgdG8gZXN0YWJsaXNoIGNhbGxiYWNrcwotICogYmVmb3JlIGZvcmtpbmcgdG8gYXZvaWQg aW5jb25zaXN0ZW5jeS4pCisgKiBOb3RlIHRoYXQgaW4gcGFyYWxsZWwgb3BlcmF0aW9uLCB0 aGUgY2FsbGJhY2socykgd2lsbCBiZSBydW4gYnkgZWFjaCB0aHJlYWQKKyAqIHNpbmNlIHRo ZSBsaXN0IHN0YXRlIGlzIG5lY2Vzc2FyaWx5IHNoYXJlZCBieSBhbGwgdGhyZWFkczsgZWFj aCBjYWxsYmFjaworICogbXVzdCBjb250YWluIGxvZ2ljIHRvIGVuc3VyZSBpdCBkb2VzIG9u bHkgd2hhdCdzIGFwcHJvcHJpYXRlIGZvciBpdHMKKyAqIHRocmVhZC4KICAqLwogdm9pZAog ZXhpdF9uaWNlbHkoaW50IGNvZGUpCkBAIC0xMzUsMTAgKzEyNSw4IEBAIGV4aXRfbmljZWx5 KGludCBjb2RlKQogCQlvbl9leGl0X25pY2VseV9saXN0W2ldLmZ1bmN0aW9uKGNvZGUsCiAJ CQkJCQkJCQkJb25fZXhpdF9uaWNlbHlfbGlzdFtpXS5hcmcpOwogCi0jaWZkZWYgV0lOMzIK LQlpZiAocGFyYWxsZWxfaW5pdF9kb25lICYmIEdldEN1cnJlbnRUaHJlYWRJZCgpICE9IG1h aW5UaHJlYWRJZCkKLQkJX2VuZHRocmVhZGV4KGNvZGUpOwotI2VuZGlmCisJaWYgKGFtX3Bh cmFsbGVsX3dvcmtlcl90aHJlYWQoKSkKKwkJcGdfdGhyZF9leGl0KGNvZGUpOwogCiAJZXhp dChjb2RlKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRp bHMuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaAppbmRleCA4ZTBkZDQ3 OGNiLi44MmU4YzY2MDQ4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X3V0aWxzLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oCkBAIC0z MiwyNSArMzIsMTYgQEAgZXh0ZXJuIHZvaWQgb25fZXhpdF9uaWNlbHkob25fZXhpdF9uaWNl bHlfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFyZyk7CiBwZ19ub3JldHVybiBleHRlcm4g dm9pZCBleGl0X25pY2VseShpbnQgY29kZSk7CiAKIC8qCi0gKiBPbiBXaW5kb3dzIHRoZSBw YXJhbGxlbCB3b3JrZXJzIGFyZSB0aHJlYWRzIGluc2lkZSB0aGUgbGVhZGVyIHByb2Nlc3Mu Ci0gKiBXaGVuIGEgY2FuY2VsIGlzIHByb2Nlc3NlZCB0aGVyZSwgdGhlIGxlYWRlciBzZW5k cyBjYW5jZWxzIHRvIHRoZSB3b3JrZXJzJworICogVGhlIHBhcmFsbGVsIHdvcmtlcnMgYXJl IHRocmVhZHMgaW5zaWRlIHRoZSBsZWFkZXIgcHJvY2VzcyBvbiBhbGwgcGxhdGZvcm1zLgor ICogV2hlbiBhIGNhbmNlbCBpcyBwcm9jZXNzZWQsIHRoZSBsZWFkZXIgc2VuZHMgY2FuY2Vs cyB0byB0aGUgd29ya2VycycKICAqIGluLWZsaWdodCBxdWVyaWVzOyB3aXRob3V0IHRoaXMg ZmxhZyBlYWNoIHdvcmtlciB3b3VsZCB0aGVuIHJlcG9ydCB0aGUKICAqIHJlc3VsdGluZyAi Y2FuY2VsaW5nIHN0YXRlbWVudCBkdWUgdG8gdXNlciByZXF1ZXN0IiBlcnJvciBhbmQgY2x1 dHRlciB0aGUKICAqIHNjcmVlbiBpbiB0aGUgYnJpZWYgd2luZG93IGJlZm9yZSB0aGUgd2hv bGUgcHJvY2VzcyBleGl0cy4gIFRoZSBjYW5jZWwKLSAqIHRocmVhZCBzZXRzIHRoaXMgZmxh ZyBiZWZvcmUgc2VuZGluZyBhbnkgY2FuY2VsLCBhbmQgd29ya2VyIHRocmVhZHMgY2hlY2sK KyAqIGhhbmRsZXIgc2V0cyB0aGlzIGZsYWcgYmVmb3JlIHNlbmRpbmcgYW55IGNhbmNlbCwg YW5kIHdvcmtlciB0aHJlYWRzIGNoZWNrCiAgKiBpdCBiZWZvcmUgcmVwb3J0aW5nIGEgcXVl cnkgZmFpbHVyZS4KLSAqCi0gKiBPbiBvdGhlciBwbGF0Zm9ybXMgdGhlIHdvcmtlcnMgYXJl IHNlcGFyYXRlIHByb2Nlc3NlcyB0aGF0IGp1c3QgX2V4aXQoKQotICogd2hlbiBjYW5jZWxs ZWQsIHNvIHRoZXkgbmV2ZXIgcmVhY2ggdGhlIGVycm9yLXJlcG9ydGluZyBjb2RlOyB0aGVy ZSB0aGUKLSAqIGNoZWNrIGlzIGNvbXBpbGVkIG91dCB0byBhIGNvbnN0YW50IGZhbHNlIGFu ZCB0aGUgdW5kZXJseWluZyBmbGFnIGRvZXNuJ3QKLSAqIGV4aXN0LgogICovCi0jaWZkZWYg V0lOMzIKIGV4dGVybiB2b2lkIHNldF9jYW5jZWxfaW5fcHJvZ3Jlc3Modm9pZCk7CiBleHRl cm4gYm9vbCBpc19jYW5jZWxfaW5fcHJvZ3Jlc3Modm9pZCk7Ci0jZWxzZQotI2RlZmluZSBp c19jYW5jZWxfaW5fcHJvZ3Jlc3MoKSBmYWxzZQotI2VuZGlmCiAKIC8qIEluIHBnX2R1bXAs IHdlIG1vZGlmeSBwZ19mYXRhbCB0byBjYWxsIGV4aXRfbmljZWx5IGluc3RlYWQgb2YgZXhp dCAqLwogI3VuZGVmIHBnX2ZhdGFsCi0tIAoyLjU0LjAud2luZG93cy4xCgo= --------------fr8ceRE6XeXSiRRez4jk4c2e Content-Type: text/plain; charset=UTF-8; name="v2-0005-pg_dump-pass-worker-commands-as-structs-instead-o.patch" Content-Disposition: attachment; filename*0="v2-0005-pg_dump-pass-worker-commands-as-structs-instead-o.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmYzU0NjNjMGExZTBhYTNjNWIwMGIxZTRhNTRkOWI0ZTM5ZjdlZmQyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCA5IEp1bCAyMDI2IDE1OjI2OjQ3IC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MiA1LzVdIHBnX2R1bXA6IHBhc3Mgd29ya2VyIGNvbW1hbmRzIGFzIHN0cnVjdHMg aW5zdGVhZCBvZgogc3RyaW5ncwoKTm93IHRoYXQgdGhlIGxlYWRlciBhbmQgd29ya2VycyBz aGFyZSBhbiBhZGRyZXNzIHNwYWNlLCB0aGVyZSdzIG5vCnJlYXNvbiB0byBzZXJpYWxpemUg ZWFjaCBjb21tYW5kIGFuZCByZXNwb25zZSB0byBhIHN0cmluZyBhbmQgcGFyc2UgaXQKYmFj ay4gIFNlbmQgYSBXb3JrZXJDb21tYW5kIGFuZCBXb3JrZXJSZXNwb25zZSBieSB2YWx1ZSB0 aHJvdWdoIHRoZQpjaGFubmVsIGluc3RlYWQsIHJlbW92aW5nIGJ1aWxkV29ya2VyQ29tbWFu ZCgpL3BhcnNlV29ya2VyQ29tbWFuZCgpIGFuZAp0aGVpciByZXNwb25zZSBjb3VudGVycGFy dHMgYWxvbmcgd2l0aCB0aGUgIkRVTVAgJWQiIC8gIk9LICVkICVkICVkIgpmb3JtYXR0aW5n LgoKVGhpcyBkcm9wcyB0aGUgbmV2ZXItdXNlZCBwcm92aXNpb24gZm9yIGZvcm1hdCBtb2R1 bGVzIHRvIGFkZApmb3JtYXQtc3BlY2lmaWMgZGF0YSB0byBhIGNvbW1hbmQgb3IgcmVzcG9u c2UsIGJ1dCBhIHN0cnVjdCBjYW4gZ2FpbiBhCmZpZWxkIGp1c3QgYXMgZWFzaWx5IHNob3Vs ZCB0aGF0IGV2ZXIgYmUgd2FudGVkLgotLS0KIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5j ICAgICAgIHwgMzEwICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IHwgICAyICsKIDIgZmlsZXMgY2hhbmdlZCwgMTA1 IGluc2VydGlvbnMoKyksIDIwNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4 IDBjOThiZTZmNGEuLjI5YzVhMzcyYzQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w YXJhbGxlbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0yMCwxMiAr MjAsMTEgQEAKICAqIHRoZSBkZXNpcmVkIG51bWJlciBvZiB3b3JrZXIgdGhyZWFkcywgd2hp Y2ggZWFjaCBlbnRlciBXYWl0Rm9yQ29tbWFuZHMoKS4KICAqCiAgKiBUaGUgbGVhZGVyIHRo cmVhZCBkaXNwYXRjaGVzIGFuIGluZGl2aWR1YWwgd29yayBpdGVtIHRvIG9uZSBvZiB0aGUg d29ya2VyCi0gKiB0aHJlYWRzIGluIERpc3BhdGNoSm9iRm9yVG9jRW50cnkoKS4gIFdlIHNl bmQgYSBjb21tYW5kIHN0cmluZyBzdWNoIGFzCi0gKiAiRFVNUCAxMjM0IiBvciAiUkVTVE9S RSAxMjM0Iiwgd2hlcmUgMTIzNCBpcyB0aGUgVG9jRW50cnkgSUQuCi0gKiBUaGUgd29ya2Vy IHJlY2VpdmVzIGFuZCBkZWNvZGVzIHRoZSBjb21tYW5kIGFuZCBwYXNzZXMgaXQgdG8gdGhl Ci0gKiByb3V0aW5lIHBvaW50ZWQgdG8gYnkgQUgtPldvcmtlckpvYkR1bXBQdHIgb3IgQUgt PldvcmtlckpvYlJlc3RvcmVQdHIsCi0gKiB3aGljaCBhcmUgcm91dGluZXMgb2YgdGhlIGN1 cnJlbnQgYXJjaGl2ZSBmb3JtYXQuICBUaGF0IHJvdXRpbmUgcGVyZm9ybXMKLSAqIHRoZSBy ZXF1aXJlZCBhY3Rpb24gKGR1bXAgb3IgcmVzdG9yZSkgYW5kIHJldHVybnMgYW4gaW50ZWdl ciBzdGF0dXMgY29kZS4KKyAqIHRocmVhZHMgaW4gRGlzcGF0Y2hKb2JGb3JUb2NFbnRyeSgp LiAgV2UgaGFuZCBvdmVyIGEgV29ya2VyQ29tbWFuZCBuYW1pbmcKKyAqIHRoZSBhY3Rpb24g dG8gdGFrZSBhbmQgdGhlIFRvY0VudHJ5IHRvIGFjdCBvbi4gIFRoZSB3b3JrZXIgcnVucyB0 aGUgcm91dGluZQorICogcG9pbnRlZCB0byBieSBBSC0+V29ya2VySm9iRHVtcFB0ciBvciBB SC0+V29ya2VySm9iUmVzdG9yZVB0ciwgd2hpY2ggYXJlCisgKiByb3V0aW5lcyBvZiB0aGUg Y3VycmVudCBhcmNoaXZlIGZvcm1hdC4gIFRoYXQgcm91dGluZSBwZXJmb3JtcyB0aGUgcmVx dWlyZWQKKyAqIGFjdGlvbiAoZHVtcCBvciByZXN0b3JlKSBhbmQgcmV0dXJucyBhbiBpbnRl Z2VyIHN0YXR1cyBjb2RlLgogICogVGhpcyBpcyBwYXNzZWQgYmFjayB0byB0aGUgbGVhZGVy IHdoZXJlIHdlIHBhc3MgaXQgdG8gdGhlCiAgKiBQYXJhbGxlbENvbXBsZXRpb25QdHIgY2Fs bGJhY2sgZnVuY3Rpb24gdGhhdCB3YXMgcGFzc2VkIHRvCiAgKiBEaXNwYXRjaEpvYkZvclRv Y0VudHJ5KCkuICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZG9lcyBzdGF0ZSB1cGRhdGluZwpA QCAtNzgsNiArNzcsMjUgQEAgdHlwZWRlZiBlbnVtCiAjZGVmaW5lIFdPUktFUl9JU19SVU5O SU5HKHdvcmtlclN0YXR1cykgXAogCSgod29ya2VyU3RhdHVzKSA9PSBXUktSX0lETEUgfHwg KHdvcmtlclN0YXR1cykgPT0gV1JLUl9XT1JLSU5HKQogCisvKgorICogQSBjb21tYW5kIGhh bmRlZCBmcm9tIHRoZSBsZWFkZXIgdG8gYSB3b3JrZXI6IHRoZSBhY3Rpb24gdG8gdGFrZSBh bmQgdGhlCisgKiBUb2NFbnRyeSB0byB0YWtlIGl0IG9uLgorICovCit0eXBlZGVmIHN0cnVj dAoreworCVRfQWN0aW9uCWFjdDsJCQkvKiBBQ1RfRFVNUCBvciBBQ1RfUkVTVE9SRSAqLwor CUR1bXBJZAkJZHVtcElkOwkJCS8qIFRvY0VudHJ5IHRvIGFjdCBvbiAqLworfSBXb3JrZXJD b21tYW5kOworCisvKgorICogQSB3b3JrZXIncyByZXNwb25zZSBiYWNrIHRvIHRoZSBsZWFk ZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50CQkJc3RhdHVzOwkJCS8qIHN0YXR1 cyBjb2RlIGZyb20gdGhlIHdvcmtlcidzIGpvYiAqLworCWludAkJCW5fZXJyb3JzOwkJLyog ZXJyb3JzIHRvIGZvbGQgaW50byB0aGUgbGVhZGVyJ3MgY291bnQgKi8KK30gV29ya2VyUmVz cG9uc2U7CisKIC8qCiAgKiBQcml2YXRlIHBlci1wYXJhbGxlbC13b3JrZXIgc3RhdGUgKHR5 cGVkZWYgZm9yIHRoaXMgaXMgaW4gcGFyYWxsZWwuaCkuCiAgKgpAQCAtOTYsMTEgKzExNCwx NCBAQCBzdHJ1Y3QgUGFyYWxsZWxTbG90CiAKIAkvKgogCSAqIEluLXByb2Nlc3MgY2hhbm5l bCB1c2VkIHRvIGV4Y2hhbmdlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIGxlYWRlciBhbmQKLQkg KiB0aGlzIHdvcmtlci4gIEEgbWVzc2FnZSBpcyBhIG1hbGxvYydkIHN0cmluZzsgb3duZXJz aGlwIHBhc3NlcyB0byB0aGUKLQkgKiByZWNlaXZlci4gIEFsbCBmaWVsZHMgYXJlIHByb3Rl Y3RlZCBieSBtc2dfbG9jay4KKwkgKiB0aGlzIHdvcmtlci4gIFNpbmNlIHRoZSB0d28gc2hh cmUgYW4gYWRkcmVzcyBzcGFjZSB0aGUgbWVzc2FnZXMgYXJlCisJICogcGFzc2VkIGJ5IHZh bHVlIHJhdGhlciB0aGFuIHNlcmlhbGl6ZWQuICBBbGwgZmllbGRzIGFyZSBwcm90ZWN0ZWQg YnkKKwkgKiBtc2dfbG9jay4KIAkgKi8KLQljaGFyCSAgICpjbWRNc2c7CQkJLyogY29tbWFu ZCBwZW5kaW5nIGZvciB0aGUgd29ya2VyLCBvciBOVUxMICovCi0JY2hhcgkgICAqcmVzcE1z ZzsJCS8qIHJlc3BvbnNlIHBlbmRpbmcgZm9yIHRoZSBsZWFkZXIsIG9yIE5VTEwgKi8KKwli b29sCQljbWRQZW5kaW5nOwkJLyogYSBjb21tYW5kIGlzIHdhaXRpbmcgZm9yIHRoZSB3b3Jr ZXIgKi8KKwlXb3JrZXJDb21tYW5kIGNtZDsJCQkvKiB0aGUgcGVuZGluZyBjb21tYW5kICov CisJYm9vbAkJcmVzcFBlbmRpbmc7CS8qIGEgcmVzcG9uc2UgaXMgd2FpdGluZyBmb3IgdGhl IGxlYWRlciAqLworCVdvcmtlclJlc3BvbnNlIHJlc3A7CQkvKiB0aGUgcGVuZGluZyByZXNw b25zZSAqLwogCWJvb2wJCWNoYW5DbG9zZWQ7CQkvKiBsZWFkZXIgY2xvc2VkIHRoZSBjb21t YW5kIGNoYW5uZWwgKEVPRikgKi8KIAlib29sCQl3b3JrZXJEaWVkOwkJLyogd29ya2VyIGV4 aXRlZCB3aXRob3V0IHNlbmRpbmcgYSByZXNwb25zZSAqLwogCkBAIC0xNDksNyArMTcwLDcg QEAgc3RhdGljIHBnX210eF90IHNpZ25hbF9pbmZvX2xvY2sgPSBQR19NVFhfSU5JVDsKIAog LyoKICAqIFN5bmNocm9uaXphdGlvbiBmb3IgdGhlIGluLXByb2Nlc3MgY2hhbm5lbHMgKHNl ZSBzdHJ1Y3QgUGFyYWxsZWxTbG90KS4KLSAqIG1zZ19sb2NrIHByb3RlY3RzIHRoZSBwZXIt c2xvdCBjbWRNc2cvcmVzcE1zZy9jaGFuQ2xvc2VkL3dvcmtlckRpZWQgZmllbGRzOworICog bXNnX2xvY2sgcHJvdGVjdHMgdGhlIHBlci1zbG90IGNtZC9yZXNwIGFuZCB0aGVpciBwZW5k aW5nL2Nsb3NlZC9kaWVkIGZsYWdzOwogICogd29ya2VyX2N2IHdha2VzIGEgd29ya2VyLCBs ZWFkZXJfY3Ygd2FrZXMgdGhlIGxlYWRlci4KICAqLwogc3RhdGljIHBnX210eF90IG1zZ19s b2NrID0gUEdfTVRYX0lOSVQ7CkBAIC0xOTAsMTUgKzIxMSwxMiBAQCBzdGF0aWMgdm9pZCBs b2NrVGFibGVGb3JXb3JrZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBz dGF0aWMgdm9pZCBXYWl0Rm9yQ29tbWFuZHMoQXJjaGl2ZUhhbmRsZSAqQUgsIFBhcmFsbGVs U2xvdCAqc2xvdCk7CiBzdGF0aWMgYm9vbCBMaXN0ZW5Ub1dvcmtlcnMoQXJjaGl2ZUhhbmRs ZSAqQUgsIFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQlib29sIGRvX3dhaXQpOwot c3RhdGljIGNoYXIgKmdldE1lc3NhZ2VGcm9tTGVhZGVyKFBhcmFsbGVsU2xvdCAqc2xvdCk7 Ci1zdGF0aWMgdm9pZCBzZW5kTWVzc2FnZVRvTGVhZGVyKFBhcmFsbGVsU2xvdCAqc2xvdCwg Y29uc3QgY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpnZXRNZXNzYWdlRnJvbVdvcmtlcihQ YXJhbGxlbFN0YXRlICpwc3RhdGUsCi0JCQkJCQkJCSAgYm9vbCBkb193YWl0LCBpbnQgKndv cmtlcik7Ci1zdGF0aWMgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKFBhcmFsbGVsU3RhdGUg KnBzdGF0ZSwKLQkJCQkJCQkJaW50IHdvcmtlciwgY29uc3QgY2hhciAqc3RyKTsKLQotI2Rl ZmluZSBtZXNzYWdlU3RhcnRzV2l0aChtc2csIHByZWZpeCkgXAotCShzdHJuY21wKG1zZywg cHJlZml4LCBzdHJsZW4ocHJlZml4KSkgPT0gMCkKK3N0YXRpYyBib29sIGdldE1lc3NhZ2VG cm9tTGVhZGVyKFBhcmFsbGVsU2xvdCAqc2xvdCwgV29ya2VyQ29tbWFuZCAqY21kKTsKK3N0 YXRpYyB2b2lkIHNlbmRNZXNzYWdlVG9MZWFkZXIoUGFyYWxsZWxTbG90ICpzbG90LCBXb3Jr ZXJSZXNwb25zZSByZXNwKTsKK3N0YXRpYyBib29sIGdldE1lc3NhZ2VGcm9tV29ya2VyKFBh cmFsbGVsU3RhdGUgKnBzdGF0ZSwgYm9vbCBkb193YWl0LAorCQkJCQkJCQkgaW50ICp3b3Jr ZXIsIFdvcmtlclJlc3BvbnNlICpyZXNwKTsKK3N0YXRpYyB2b2lkIHNlbmRNZXNzYWdlVG9X b3JrZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlLCBpbnQgd29ya2VyLAorCQkJCQkJCQlXb3Jr ZXJDb21tYW5kIGNtZCk7CiAKIAogLyoKQEAgLTc5OSwxMDggKzgxNyw2IEBAIFBhcmFsbGVs QmFja3VwRW5kKEFyY2hpdmVIYW5kbGUgKkFILCBQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAJ ZnJlZShwc3RhdGUpOwogfQogCi0vKgotICogVGhlc2UgbmV4dCBmb3VyIGZ1bmN0aW9ucyBo YW5kbGUgY29uc3RydWN0aW9uIGFuZCBwYXJzaW5nIG9mIHRoZSBjb21tYW5kCi0gKiBzdHJp bmdzIGFuZCByZXNwb25zZSBzdHJpbmdzIGZvciBwYXJhbGxlbCB3b3JrZXJzLgotICoKLSAq IEN1cnJlbnRseSwgdGhlc2UgY2FuIGJlIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gg YXJjaGl2ZSBmb3JtYXQgd2UgYXJlCi0gKiBwcm9jZXNzaW5nLiAgSW4gZnV0dXJlLCB3ZSBt aWdodCB3YW50IHRvIGxldCBmb3JtYXQgbW9kdWxlcyBvdmVycmlkZSB0aGVzZQotICogZnVu Y3Rpb25zIHRvIGFkZCBmb3JtYXQtc3BlY2lmaWMgZGF0YSB0byBhIGNvbW1hbmQgb3IgcmVz cG9uc2UuCi0gKi8KLQotLyoKLSAqIGJ1aWxkV29ya2VyQ29tbWFuZDogZm9ybWF0IGEgY29t bWFuZCBzdHJpbmcgdG8gc2VuZCB0byBhIHdvcmtlci4KLSAqCi0gKiBUaGUgc3RyaW5nIGlz IGJ1aWx0IGluIHRoZSBjYWxsZXItc3VwcGxpZWQgYnVmZmVyIG9mIHNpemUgYnVmbGVuLgot ICovCi1zdGF0aWMgdm9pZAotYnVpbGRXb3JrZXJDb21tYW5kKEFyY2hpdmVIYW5kbGUgKkFI LCBUb2NFbnRyeSAqdGUsIFRfQWN0aW9uIGFjdCwKLQkJCQkgICBjaGFyICpidWYsIGludCBi dWZsZW4pCi17Ci0JaWYgKGFjdCA9PSBBQ1RfRFVNUCkKLQkJc25wcmludGYoYnVmLCBidWZs ZW4sICJEVU1QICVkIiwgdGUtPmR1bXBJZCk7Ci0JZWxzZSBpZiAoYWN0ID09IEFDVF9SRVNU T1JFKQotCQlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIlJFU1RPUkUgJWQiLCB0ZS0+ZHVtcElk KTsKLQllbHNlCi0JCUFzc2VydChmYWxzZSk7Ci19Ci0KLS8qCi0gKiBwYXJzZVdvcmtlckNv bW1hbmQ6IGludGVycHJldCBhIGNvbW1hbmQgc3RyaW5nIGluIGEgd29ya2VyLgotICovCi1z dGF0aWMgdm9pZAotcGFyc2VXb3JrZXJDb21tYW5kKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqKnRlLCBUX0FjdGlvbiAqYWN0LAotCQkJCSAgIGNvbnN0IGNoYXIgKm1zZykKLXsK LQlEdW1wSWQJCWR1bXBJZDsKLQlpbnQJCQluQnl0ZXM7Ci0KLQlpZiAobWVzc2FnZVN0YXJ0 c1dpdGgobXNnLCAiRFVNUCAiKSkKLQl7Ci0JCSphY3QgPSBBQ1RfRFVNUDsKLQkJc3NjYW5m KG1zZywgIkRVTVAgJWQlbiIsICZkdW1wSWQsICZuQnl0ZXMpOwotCQlBc3NlcnQobkJ5dGVz ID09IHN0cmxlbihtc2cpKTsKLQkJKnRlID0gZ2V0VG9jRW50cnlCeUR1bXBJZChBSCwgZHVt cElkKTsKLQkJQXNzZXJ0KCp0ZSAhPSBOVUxMKTsKLQl9Ci0JZWxzZSBpZiAobWVzc2FnZVN0 YXJ0c1dpdGgobXNnLCAiUkVTVE9SRSAiKSkKLQl7Ci0JCSphY3QgPSBBQ1RfUkVTVE9SRTsK LQkJc3NjYW5mKG1zZywgIlJFU1RPUkUgJWQlbiIsICZkdW1wSWQsICZuQnl0ZXMpOwotCQlB c3NlcnQobkJ5dGVzID09IHN0cmxlbihtc2cpKTsKLQkJKnRlID0gZ2V0VG9jRW50cnlCeUR1 bXBJZChBSCwgZHVtcElkKTsKLQkJQXNzZXJ0KCp0ZSAhPSBOVUxMKTsKLQl9Ci0JZWxzZQot CQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGNvbW1hbmQgcmVjZWl2ZWQgZnJvbSBsZWFkZXI6 IFwiJXNcIiIsCi0JCQkJIG1zZyk7Ci19Ci0KLS8qCi0gKiBidWlsZFdvcmtlclJlc3BvbnNl OiBmb3JtYXQgYSByZXNwb25zZSBzdHJpbmcgdG8gc2VuZCB0byB0aGUgbGVhZGVyLgotICoK LSAqIFRoZSBzdHJpbmcgaXMgYnVpbHQgaW4gdGhlIGNhbGxlci1zdXBwbGllZCBidWZmZXIg b2Ygc2l6ZSBidWZsZW4uCi0gKi8KLXN0YXRpYyB2b2lkCi1idWlsZFdvcmtlclJlc3BvbnNl KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIFRfQWN0aW9uIGFjdCwgaW50IHN0 YXR1cywKLQkJCQkJY2hhciAqYnVmLCBpbnQgYnVmbGVuKQotewotCXNucHJpbnRmKGJ1Ziwg YnVmbGVuLCAiT0sgJWQgJWQgJWQiLAotCQkJIHRlLT5kdW1wSWQsCi0JCQkgc3RhdHVzLAot CQkJIHN0YXR1cyA9PSBXT1JLRVJfSUdOT1JFRF9FUlJPUlMgPyBBSC0+cHVibGljLm5fZXJy b3JzIDogMCk7Ci19Ci0KLS8qCi0gKiBwYXJzZVdvcmtlclJlc3BvbnNlOiBwYXJzZSB0aGUg c3RhdHVzIG1lc3NhZ2UgcmV0dXJuZWQgYnkgYSB3b3JrZXIuCi0gKgotICogUmV0dXJucyB0 aGUgaW50ZWdlciBzdGF0dXMgY29kZSwgYW5kIG1heSB1cGRhdGUgZmllbGRzIG9mIEFIIGFu ZC9vciB0ZS4KLSAqLwotc3RhdGljIGludAotcGFyc2VXb3JrZXJSZXNwb25zZShBcmNoaXZl SGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLAotCQkJCQljb25zdCBjaGFyICptc2cpCi17Ci0J RHVtcElkCQlkdW1wSWQ7Ci0JaW50CQkJbkJ5dGVzLAotCQkJCW5fZXJyb3JzOwotCWludAkJ CXN0YXR1cyA9IDA7Ci0KLQlpZiAobWVzc2FnZVN0YXJ0c1dpdGgobXNnLCAiT0sgIikpCi0J ewotCQlzc2NhbmYobXNnLCAiT0sgJWQgJWQgJWQlbiIsICZkdW1wSWQsICZzdGF0dXMsICZu X2Vycm9ycywgJm5CeXRlcyk7Ci0KLQkJQXNzZXJ0KGR1bXBJZCA9PSB0ZS0+ZHVtcElkKTsK LQkJQXNzZXJ0KG5CeXRlcyA9PSBzdHJsZW4obXNnKSk7Ci0KLQkJQUgtPnB1YmxpYy5uX2Vy cm9ycyArPSBuX2Vycm9yczsKLQl9Ci0JZWxzZQotCQlwZ19mYXRhbCgiaW52YWxpZCBtZXNz YWdlIHJlY2VpdmVkIGZyb20gd29ya2VyOiBcIiVzXCIiLAotCQkJCSBtc2cpOwotCi0JcmV0 dXJuIHN0YXR1czsKLX0KLQogLyoKICAqIERpc3BhdGNoIGEgam9iIHRvIHNvbWUgZnJlZSB3 b3JrZXIuCiAgKgpAQCAtOTE5LDE2ICs4MzUsMTYgQEAgRGlzcGF0Y2hKb2JGb3JUb2NFbnRy eShBcmNoaXZlSGFuZGxlICpBSCwKIAkJCQkJICAgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsK IAlpbnQJCQl3b3JrZXI7Ci0JY2hhcgkJYnVmWzI1Nl07CisJV29ya2VyQ29tbWFuZCBjbWQ7 CiAKIAkvKiBHZXQgYSB3b3JrZXIsIHdhaXRpbmcgaWYgbm9uZSBhcmUgaWRsZSAqLwogCXdo aWxlICgod29ya2VyID0gR2V0SWRsZVdvcmtlcihwc3RhdGUpKSA9PSBOT19TTE9UKQogCQlX YWl0Rm9yV29ya2VycyhBSCwgcHN0YXRlLCBXRldfT05FX0lETEUpOwogCi0JLyogQ29uc3Ry dWN0IGFuZCBzZW5kIGNvbW1hbmQgc3RyaW5nICovCi0JYnVpbGRXb3JrZXJDb21tYW5kKEFI LCB0ZSwgYWN0LCBidWYsIHNpemVvZihidWYpKTsKLQotCXNlbmRNZXNzYWdlVG9Xb3JrZXIo cHN0YXRlLCB3b3JrZXIsIGJ1Zik7CisJLyogSGFuZCB0aGUgd29ya2VyIGl0cyBjb21tYW5k ICovCisJY21kLmFjdCA9IGFjdDsKKwljbWQuZHVtcElkID0gdGUtPmR1bXBJZDsKKwlzZW5k TWVzc2FnZVRvV29ya2VyKHBzdGF0ZSwgd29ya2VyLCBjbWQpOwogCiAJLyogUmVtZW1iZXIg d29ya2VyIGlzIGJ1c3ksIGFuZCB3aGljaCBUb2NFbnRyeSBpdCdzIHdvcmtpbmcgb24gKi8K IAlwc3RhdGUtPnBhcmFsbGVsU2xvdFt3b3JrZXJdLndvcmtlclN0YXR1cyA9IFdSS1JfV09S S0lORzsKQEAgLTEwMjksMjQgKzk0NSwxNyBAQCBsb2NrVGFibGVGb3JXb3JrZXIoQXJjaGl2 ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBXYWl0Rm9yQ29tbWFu ZHMoQXJjaGl2ZUhhbmRsZSAqQUgsIFBhcmFsbGVsU2xvdCAqc2xvdCkKIHsKLQljaGFyCSAg ICpjb21tYW5kOworCVdvcmtlckNvbW1hbmQgY21kOwogCVRvY0VudHJ5ICAgKnRlOwotCVRf QWN0aW9uCWFjdDsKIAlpbnQJCQlzdGF0dXMgPSAwOwotCWNoYXIJCWJ1ZlsyNTZdOworCVdv cmtlclJlc3BvbnNlIHJlc3A7CiAKLQlmb3IgKDs7KQorCXdoaWxlIChnZXRNZXNzYWdlRnJv bUxlYWRlcihzbG90LCAmY21kKSkKIAl7Ci0JCWlmICghKGNvbW1hbmQgPSBnZXRNZXNzYWdl RnJvbUxlYWRlcihzbG90KSkpCi0JCXsKLQkJCS8qIEVPRiwgc28gZG9uZSAqLwotCQkJcmV0 dXJuOwotCQl9CisJCXRlID0gZ2V0VG9jRW50cnlCeUR1bXBJZChBSCwgY21kLmR1bXBJZCk7 CisJCUFzc2VydCh0ZSAhPSBOVUxMKTsKIAotCQkvKiBEZWNvZGUgdGhlIGNvbW1hbmQgKi8K LQkJcGFyc2VXb3JrZXJDb21tYW5kKEFILCAmdGUsICZhY3QsIGNvbW1hbmQpOwotCi0JCWlm IChhY3QgPT0gQUNUX0RVTVApCisJCWlmIChjbWQuYWN0ID09IEFDVF9EVU1QKQogCQl7CiAJ CQkvKiBBY3F1aXJlIGxvY2sgb24gdGhpcyB0YWJsZSB3aXRoaW4gdGhlIHdvcmtlcidzIHNl c3Npb24gKi8KIAkJCWxvY2tUYWJsZUZvcldvcmtlcihBSCwgdGUpOwpAQCAtMTA1NCw3ICs5 NjMsNyBAQCBXYWl0Rm9yQ29tbWFuZHMoQXJjaGl2ZUhhbmRsZSAqQUgsIFBhcmFsbGVsU2xv dCAqc2xvdCkKIAkJCS8qIFBlcmZvcm0gdGhlIGR1bXAgY29tbWFuZCAqLwogCQkJc3RhdHVz ID0gKEFILT5Xb3JrZXJKb2JEdW1wUHRyKSAoQUgsIHRlKTsKIAkJfQotCQllbHNlIGlmIChh Y3QgPT0gQUNUX1JFU1RPUkUpCisJCWVsc2UgaWYgKGNtZC5hY3QgPT0gQUNUX1JFU1RPUkUp CiAJCXsKIAkJCS8qIFBlcmZvcm0gdGhlIHJlc3RvcmUgY29tbWFuZCAqLwogCQkJc3RhdHVz ID0gKEFILT5Xb3JrZXJKb2JSZXN0b3JlUHRyKSAoQUgsIHRlKTsKQEAgLTEwNjMsMTIgKzk3 Miw5IEBAIFdhaXRGb3JDb21tYW5kcyhBcmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxTbG90 ICpzbG90KQogCQkJQXNzZXJ0KGZhbHNlKTsKIAogCQkvKiBSZXR1cm4gc3RhdHVzIHRvIGxl YWRlciAqLwotCQlidWlsZFdvcmtlclJlc3BvbnNlKEFILCB0ZSwgYWN0LCBzdGF0dXMsIGJ1 Ziwgc2l6ZW9mKGJ1ZikpOwotCi0JCXNlbmRNZXNzYWdlVG9MZWFkZXIoc2xvdCwgYnVmKTsK LQotCQkvKiBjb21tYW5kIHdhcyBwZ19tYWxsb2MnZCBhbmQgd2UgYXJlIHJlc3BvbnNpYmxl IGZvciBmcmVlKClpbmcgaXQuICovCi0JCWZyZWUoY29tbWFuZCk7CisJCXJlc3Auc3RhdHVz ID0gc3RhdHVzOworCQlyZXNwLm5fZXJyb3JzID0gKHN0YXR1cyA9PSBXT1JLRVJfSUdOT1JF RF9FUlJPUlMpID8gQUgtPnB1YmxpYy5uX2Vycm9ycyA6IDA7CisJCXNlbmRNZXNzYWdlVG9M ZWFkZXIoc2xvdCwgcmVzcCk7CiAJfQogfQogCkBAIC0xMDkyLDEyICs5OTgsMTIgQEAgc3Rh dGljIGJvb2wKIExpc3RlblRvV29ya2VycyhBcmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxT dGF0ZSAqcHN0YXRlLCBib29sIGRvX3dhaXQpCiB7CiAJaW50CQkJd29ya2VyOwotCWNoYXIJ ICAgKm1zZzsKKwlXb3JrZXJSZXNwb25zZSByZXNwOworCVBhcmFsbGVsU2xvdCAqc2xvdDsK KwlUb2NFbnRyeSAgICp0ZTsKIAogCS8qIFRyeSB0byBjb2xsZWN0IGEgc3RhdHVzIG1lc3Nh Z2UgKi8KLQltc2cgPSBnZXRNZXNzYWdlRnJvbVdvcmtlcihwc3RhdGUsIGRvX3dhaXQsICZ3 b3JrZXIpOwotCi0JaWYgKCFtc2cpCisJaWYgKCFnZXRNZXNzYWdlRnJvbVdvcmtlcihwc3Rh dGUsIGRvX3dhaXQsICZ3b3JrZXIsICZyZXNwKSkKIAl7CiAJCS8qIElmIGRvX3dhaXQgaXMg dHJ1ZSwgYSB3b3JrZXIgbXVzdCBoYXZlIGRpZWQgd2l0aG91dCByZXNwb25kaW5nICovCiAJ CWlmIChkb193YWl0KQpAQCAtMTEwNiwyMyArMTAxMiwxMyBAQCBMaXN0ZW5Ub1dvcmtlcnMo QXJjaGl2ZUhhbmRsZSAqQUgsIFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSwgYm9vbCBkb193YWl0 KQogCX0KIAogCS8qIFByb2Nlc3MgaXQgYW5kIHVwZGF0ZSBvdXIgaWRlYSBvZiB0aGUgd29y a2VyJ3Mgc3RhdHVzICovCi0JaWYgKG1lc3NhZ2VTdGFydHNXaXRoKG1zZywgIk9LICIpKQot CXsKLQkJUGFyYWxsZWxTbG90ICpzbG90ID0gJnBzdGF0ZS0+cGFyYWxsZWxTbG90W3dvcmtl cl07Ci0JCVRvY0VudHJ5ICAgKnRlID0gcHN0YXRlLT50ZVt3b3JrZXJdOwotCQlpbnQJCQlz dGF0dXM7Ci0KLQkJc3RhdHVzID0gcGFyc2VXb3JrZXJSZXNwb25zZShBSCwgdGUsIG1zZyk7 Ci0JCXNsb3QtPmNhbGxiYWNrKEFILCB0ZSwgc3RhdHVzLCBzbG90LT5jYWxsYmFja19kYXRh KTsKLQkJc2xvdC0+d29ya2VyU3RhdHVzID0gV1JLUl9JRExFOwotCQlwc3RhdGUtPnRlW3dv cmtlcl0gPSBOVUxMOwotCX0KLQllbHNlCi0JCXBnX2ZhdGFsKCJpbnZhbGlkIG1lc3NhZ2Ug cmVjZWl2ZWQgZnJvbSB3b3JrZXI6IFwiJXNcIiIsCi0JCQkJIG1zZyk7CisJc2xvdCA9ICZw c3RhdGUtPnBhcmFsbGVsU2xvdFt3b3JrZXJdOworCXRlID0gcHN0YXRlLT50ZVt3b3JrZXJd OwogCi0JLyogRnJlZSB0aGUgc3RyaW5nIHJldHVybmVkIGZyb20gZ2V0TWVzc2FnZUZyb21X b3JrZXIgKi8KLQlmcmVlKG1zZyk7CisJQUgtPnB1YmxpYy5uX2Vycm9ycyArPSByZXNwLm5f ZXJyb3JzOworCXNsb3QtPmNhbGxiYWNrKEFILCB0ZSwgcmVzcC5zdGF0dXMsIHNsb3QtPmNh bGxiYWNrX2RhdGEpOworCXNsb3QtPndvcmtlclN0YXR1cyA9IFdSS1JfSURMRTsKKwlwc3Rh dGUtPnRlW3dvcmtlcl0gPSBOVUxMOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMjAwLDU3 ICsxMDk2LDYzIEBAIFdhaXRGb3JXb3JrZXJzKEFyY2hpdmVIYW5kbGUgKkFILCBQYXJhbGxl bFN0YXRlICpwc3RhdGUsIFdGV19XYWl0T3B0aW9uIG1vZGUpCiB9CiAKIC8qCi0gKiBSZWFk IG9uZSBjb21tYW5kIG1lc3NhZ2UgZnJvbSB0aGUgbGVhZGVyLCBibG9ja2luZyBpZiBuZWNl c3NhcnkKLSAqIHVudGlsIG9uZSBpcyBhdmFpbGFibGUsIGFuZCByZXR1cm4gaXQgYXMgYSBt YWxsb2MnZCBzdHJpbmcuCi0gKiBPbiBjaGFubmVsIGNsb3NlLCByZXR1cm4gTlVMTC4KKyAq IFdhaXQgZm9yIHRoZSBuZXh0IGNvbW1hbmQgZnJvbSB0aGUgbGVhZGVyLiAgUmV0dXJucyB0 cnVlIGFuZCBmaWxscyAqY21kIHdoZW4KKyAqIG9uZSBhcnJpdmVzLCBvciBmYWxzZSBpZiB0 aGUgbGVhZGVyIGNsb3NlZCB0aGUgY2hhbm5lbCwgbWVhbmluZyB0aGUgd29ya2VyCisgKiBz aG91bGQgZXhpdC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHdvcmtl ciB0aHJlYWRzLgogICovCi1zdGF0aWMgY2hhciAqCi1nZXRNZXNzYWdlRnJvbUxlYWRlcihQ YXJhbGxlbFNsb3QgKnNsb3QpCitzdGF0aWMgYm9vbAorZ2V0TWVzc2FnZUZyb21MZWFkZXIo UGFyYWxsZWxTbG90ICpzbG90LCBXb3JrZXJDb21tYW5kICpjbWQpCiB7Ci0JY2hhcgkgICAq bXNnOworCWJvb2wJCWdvdENtZDsKIAogCXBnX210eF9sb2NrKCZtc2dfbG9jayk7Ci0Jd2hp bGUgKHNsb3QtPmNtZE1zZyA9PSBOVUxMICYmICFzbG90LT5jaGFuQ2xvc2VkKQorCXdoaWxl ICghc2xvdC0+Y21kUGVuZGluZyAmJiAhc2xvdC0+Y2hhbkNsb3NlZCkKIAkJcGdfY25kX3dh aXQoJndvcmtlcl9jdiwgJm1zZ19sb2NrKTsKLQltc2cgPSBzbG90LT5jbWRNc2c7CQkJLyog TlVMTCBoZXJlIG1lYW5zIHRoZSBjaGFubmVsIHdhcyBjbG9zZWQgKi8KLQlzbG90LT5jbWRN c2cgPSBOVUxMOworCWdvdENtZCA9IHNsb3QtPmNtZFBlbmRpbmc7CisJaWYgKGdvdENtZCkK Kwl7CisJCSpjbWQgPSBzbG90LT5jbWQ7CisJCXNsb3QtPmNtZFBlbmRpbmcgPSBmYWxzZTsK Kwl9CiAJcGdfbXR4X3VubG9jaygmbXNnX2xvY2spOwotCXJldHVybiBtc2c7CisJcmV0dXJu IGdvdENtZDsKIH0KIAogLyoKLSAqIFNlbmQgYSBzdGF0dXMgbWVzc2FnZSB0byB0aGUgbGVh ZGVyLgorICogU2VuZCBhIHN0YXR1cyByZXNwb25zZSB0byB0aGUgbGVhZGVyLgogICoKICAq IFRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgaW4gd29ya2VyIHRocmVhZHMuCiAgKi8KIHN0 YXRpYyB2b2lkCi1zZW5kTWVzc2FnZVRvTGVhZGVyKFBhcmFsbGVsU2xvdCAqc2xvdCwgY29u c3QgY2hhciAqc3RyKQorc2VuZE1lc3NhZ2VUb0xlYWRlcihQYXJhbGxlbFNsb3QgKnNsb3Qs IFdvcmtlclJlc3BvbnNlIHJlc3ApCiB7CiAJcGdfbXR4X2xvY2soJm1zZ19sb2NrKTsKLQlB c3NlcnQoc2xvdC0+cmVzcE1zZyA9PSBOVUxMKTsKLQlzbG90LT5yZXNwTXNnID0gcGdfc3Ry ZHVwKHN0cik7CisJQXNzZXJ0KCFzbG90LT5yZXNwUGVuZGluZyk7CisJc2xvdC0+cmVzcCA9 IHJlc3A7CisJc2xvdC0+cmVzcFBlbmRpbmcgPSB0cnVlOwogCXBnX2NuZF9icm9hZGNhc3Qo JmxlYWRlcl9jdik7CiAJcGdfbXR4X3VubG9jaygmbXNnX2xvY2spOwogfQogCiAvKgotICog Q2hlY2sgZm9yIG1lc3NhZ2VzIGZyb20gd29ya2VyIHRocmVhZHMuCisgKiBDaGVjayBmb3Ig YSByZXNwb25zZSBmcm9tIGEgd29ya2VyIHRocmVhZC4KICAqCi0gKiBJZiBhIG1lc3NhZ2Ug aXMgYXZhaWxhYmxlLCByZXR1cm4gaXQgYXMgYSBtYWxsb2MnZCBzdHJpbmcsIGFuZCBwdXQg dGhlCi0gKiBpbmRleCBvZiB0aGUgc2VuZGluZyB3b3JrZXIgaW4gKndvcmtlci4KKyAqIElm IG9uZSBpcyBhdmFpbGFibGUsIGZpbGwgKnJlc3AsIHB1dCB0aGUgaW5kZXggb2YgdGhlIHNl bmRpbmcgd29ya2VyIGluCisgKiAqd29ya2VyLCBhbmQgcmV0dXJuIHRydWUuCiAgKgotICog SWYgbm90aGluZyBpcyBhdmFpbGFibGUsIHdhaXQgaWYgImRvX3dhaXQiIGlzIHRydWUsIGVs c2UgcmV0dXJuIE5VTEwuCisgKiBJZiBub3RoaW5nIGlzIGF2YWlsYWJsZSwgd2FpdCBpZiAi ZG9fd2FpdCIgaXMgdHJ1ZSwgZWxzZSByZXR1cm4gZmFsc2UuCiAgKgotICogSWYgYSB3b3Jr ZXIgaGFzIGRpZWQgd2l0aG91dCByZXNwb25kaW5nLCB3ZSdsbCByZXR1cm4gTlVMTC4gIEl0 J3Mgbm90IGdyZWF0CisgKiBJZiBhIHdvcmtlciBoYXMgZGllZCB3aXRob3V0IHJlc3BvbmRp bmcsIHdlJ2xsIHJldHVybiBmYWxzZS4gIEl0J3Mgbm90IGdyZWF0CiAgKiB0aGF0IHRoYXQn cyBoYXJkIHRvIGRpc3Rpbmd1aXNoIGZyb20gdGhlIG5vLWRhdGEtYXZhaWxhYmxlIGNhc2Us IGJ1dCBmb3Igbm93CiAgKiBvdXIgb25lIGNhbGxlciBpcyBva2F5IHdpdGggdGhhdC4KICAq CiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHRoZSBsZWFkZXIgdGhyZWFkLgog ICovCi1zdGF0aWMgY2hhciAqCi1nZXRNZXNzYWdlRnJvbVdvcmtlcihQYXJhbGxlbFN0YXRl ICpwc3RhdGUsIGJvb2wgZG9fd2FpdCwgaW50ICp3b3JrZXIpCitzdGF0aWMgYm9vbAorZ2V0 TWVzc2FnZUZyb21Xb3JrZXIoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlLCBib29sIGRvX3dhaXQs IGludCAqd29ya2VyLAorCQkJCQkgV29ya2VyUmVzcG9uc2UgKnJlc3ApCiB7CiAJaW50CQkJ aTsKIApAQCAtMTI2NSw1MyArMTE2Nyw0NyBAQCBnZXRNZXNzYWdlRnJvbVdvcmtlcihQYXJh bGxlbFN0YXRlICpwc3RhdGUsIGJvb2wgZG9fd2FpdCwgaW50ICp3b3JrZXIpCiAKIAkJZm9y IChpID0gMDsgaSA8IHBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQogCQl7Ci0JCQljaGFyCSAg ICptc2c7Ci0KIAkJCWlmICghV09SS0VSX0lTX1JVTk5JTkcocHN0YXRlLT5wYXJhbGxlbFNs b3RbaV0ud29ya2VyU3RhdHVzKSkKIAkJCQljb250aW51ZTsKLQkJCW1zZyA9IHBzdGF0ZS0+ cGFyYWxsZWxTbG90W2ldLnJlc3BNc2c7Ci0JCQlpZiAobXNnICE9IE5VTEwpCisJCQlpZiAo cHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0ucmVzcFBlbmRpbmcpCiAJCQl7Ci0JCQkJcHN0YXRl LT5wYXJhbGxlbFNsb3RbaV0ucmVzcE1zZyA9IE5VTEw7CisJCQkJKnJlc3AgPSBwc3RhdGUt PnBhcmFsbGVsU2xvdFtpXS5yZXNwOworCQkJCXBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnJl c3BQZW5kaW5nID0gZmFsc2U7CiAJCQkJcGdfbXR4X3VubG9jaygmbXNnX2xvY2spOwogCQkJ CSp3b3JrZXIgPSBpOwotCQkJCXJldHVybiBtc2c7CisJCQkJcmV0dXJuIHRydWU7CiAJCQl9 CiAJCQlpZiAocHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0ud29ya2VyRGllZCkKIAkJCQlhbnlE aWVkID0gdHJ1ZTsKIAkJfQogCiAJCS8qCi0JCSAqIEEgd29ya2VyIGRpZWQgd2l0aG91dCBy ZXNwb25kaW5nOiByZXR1cm4gTlVMTCBzbyB0aGUgY2FsbGVyIHJlcG9ydHMKLQkJICogdGhl IGZhaWx1cmUgaW5zdGVhZCBvZiBoYW5naW5nLgorCQkgKiBBIHdvcmtlciBkaWVkIHdpdGhv dXQgcmVzcG9uZGluZywgb3Igbm90aGluZyBpcyBwZW5kaW5nIGFuZCB0aGUKKwkJICogY2Fs bGVyIGRvZXNuJ3Qgd2FudCB0byB3YWl0OiByZXBvcnQgdGhhdCB0aGVyZSdzIG5vIG1lc3Nh Z2UuCiAJCSAqLwotCQlpZiAoYW55RGllZCkKKwkJaWYgKGFueURpZWQgfHwgIWRvX3dhaXQp CiAJCXsKIAkJCXBnX210eF91bmxvY2soJm1zZ19sb2NrKTsKLQkJCXJldHVybiBOVUxMOwot CQl9Ci0JCWlmICghZG9fd2FpdCkKLQkJewotCQkJcGdfbXR4X3VubG9jaygmbXNnX2xvY2sp OwotCQkJcmV0dXJuIE5VTEw7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJcGdfY25kX3dh aXQoJmxlYWRlcl9jdiwgJm1zZ19sb2NrKTsKIAl9CiB9CiAKIC8qCi0gKiBTZW5kIGEgY29t bWFuZCBtZXNzYWdlIHRvIHRoZSBzcGVjaWZpZWQgd29ya2VyIHRocmVhZC4KKyAqIFNlbmQg YSBjb21tYW5kIHRvIHRoZSBzcGVjaWZpZWQgd29ya2VyIHRocmVhZC4KICAqCiAgKiBUaGlz IGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHRoZSBsZWFkZXIgdGhyZWFkLgogICovCiBzdGF0 aWMgdm9pZAotc2VuZE1lc3NhZ2VUb1dvcmtlcihQYXJhbGxlbFN0YXRlICpwc3RhdGUsIGlu dCB3b3JrZXIsIGNvbnN0IGNoYXIgKnN0cikKK3NlbmRNZXNzYWdlVG9Xb3JrZXIoUGFyYWxs ZWxTdGF0ZSAqcHN0YXRlLCBpbnQgd29ya2VyLCBXb3JrZXJDb21tYW5kIGNtZCkKIHsKIAlQ YXJhbGxlbFNsb3QgKnNsb3QgPSAmcHN0YXRlLT5wYXJhbGxlbFNsb3Rbd29ya2VyXTsKIAog CXBnX210eF9sb2NrKCZtc2dfbG9jayk7Ci0JQXNzZXJ0KHNsb3QtPmNtZE1zZyA9PSBOVUxM KTsKLQlzbG90LT5jbWRNc2cgPSBwZ19zdHJkdXAoc3RyKTsKKwlBc3NlcnQoIXNsb3QtPmNt ZFBlbmRpbmcpOworCXNsb3QtPmNtZCA9IGNtZDsKKwlzbG90LT5jbWRQZW5kaW5nID0gdHJ1 ZTsKIAlwZ19jbmRfYnJvYWRjYXN0KCZ3b3JrZXJfY3YpOwogCXBnX210eF91bmxvY2soJm1z Z19sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTlhMGYwYTBm YS4uYWU1ZjI4ODQ0NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM0ODUs MTEgKzM0ODUsMTMgQEAgV29yZEVudHJ5UG9zVmVjdG9yCiBXb3JkRW50cnlQb3NWZWN0b3Ix CiBXb3JrVGFibGVTY2FuCiBXb3JrVGFibGVTY2FuU3RhdGUKK1dvcmtlckNvbW1hbmQKIFdv cmtlckluZm8KIFdvcmtlckluZm9EYXRhCiBXb3JrZXJKb2JEdW1wUHRyVHlwZQogV29ya2Vy Sm9iUmVzdG9yZVB0clR5cGUKIFdvcmtlck5vZGVJbnN0cnVtZW50YXRpb24KK1dvcmtlclJl c3BvbnNlCiBXb3JraW5nX1N0YXRlCiBXcml0ZUJ1ZlB0clR5cGUKIFdyaXRlQnl0ZVB0clR5 cGUKLS0gCjIuNTQuMC53aW5kb3dzLjEKCg== --------------fr8ceRE6XeXSiRRez4jk4c2e--