Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ksELL-00075T-QE for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Dec 2020 00:19:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ksELK-00027i-Fx for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Dec 2020 00:18:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ksELK-00027b-0N for pgsql-hackers@lists.postgresql.org; Thu, 24 Dec 2020 00:18:58 +0000 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ksELG-0000My-V2 for pgsql-hackers@postgresql.org; Thu, 24 Dec 2020 00:18:56 +0000 Received: by mail-pg1-x536.google.com with SMTP id g15so566260pgu.9 for ; Wed, 23 Dec 2020 16:18:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=i5FqyhKuTSKZHOm+OLmeFX1qI1TDm6I0Fy+O99VJhDs=; b=fXCPWYqxBky1AqI5yB+/bobQdDwUeHWZNO3lnvUAa6i25VY/t7HuenFz/BuF2m3Edi 1/dtnSHl+w14D2WpLDE+FUhCnkofqc/ETCcRaxPOqkY+gYrPth8lhdE4Y+eUqSOgawsE P+dB+WyxYZU6nKaYAeV4hUroihYKfwq9lhiGL1H4TZoLrnyOqR3p/x52Wr0zC1mK+2fM Vl/jkAvTm7462c8kydLbPfb6B3bVAENCINRw27hDZPokCWH2KEU4XPg+vmC5J10TaZR+ cv0Q3TAnu52BHAI0okQpD5HpJLde4Ce9yJ1I9yowhbBgxBr8BLGiERB8hrnX91sYtHLH NnwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=i5FqyhKuTSKZHOm+OLmeFX1qI1TDm6I0Fy+O99VJhDs=; b=K63MSFk2IgOfu2B+UsnCiATgB6i3XEyFoEt5gWvBDdNW9UHIitVQVAvYGeqzCD169g 6VvxdCkU7Zuqgv27OgNNig+OzHjBfBEtFo+Z7nkrVhNgngCbJ6m0+88EILPmrdz3sY80 gut5mLM0rfsuAC9GgF2/QAqKr2gN6+N4gK9VUBg1LfflXoaJY57Ns9VAqjchIlnQfaBA TTxsKCYeG3SYFBtdyYQtbrIWcWuXiM7/huEmtuniIddNIRDmgmypZ2aMDB/I3KCBsyHA vrzV8RHv3+hf6b80W+UrOrJER7GxyrQ0mRDTuMr4YCgRZ85uN4WlwD7VW8k7jhqx/fPS yIHg== X-Gm-Message-State: AOAM533bpKylKSuvehwwnMyEJEyOwct18+zdX5B95KbBZ5Q2LGnm/ade DEiFhMlJg+jAI5t6mxTr5goXvi07sJ+zyhnOaBw= X-Google-Smtp-Source: ABdhPJyLra2qEPhQt4W/94iGLg4S8lJkWnyenyAYd5+nCZZcROD9b11KKhkJ9wrRxuOJgHnG+Ylsl7l5hSo8pBfjUWc= X-Received: by 2002:a63:1f26:: with SMTP id f38mr26814331pgf.258.1608769133874; Wed, 23 Dec 2020 16:18:53 -0800 (PST) MIME-Version: 1.0 References: <20201217050522.GU30237@telsasoft.com> <20201217204442.GX30237@telsasoft.com> <20201218175439.GA30237@telsasoft.com> <20201221074725.GF30237@telsasoft.com> In-Reply-To: <20201221074725.GF30237@telsasoft.com> From: Bharath Rupireddy Date: Thu, 24 Dec 2020 05:48:42 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Justin Pryzby Cc: PostgreSQL-development , Andres Freund , Luc Vlaming , Paul Guo Content-Type: multipart/mixed; boundary="000000000000c041c705b72ac06c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000c041c705b72ac06c Content-Type: text/plain; charset="UTF-8" On Mon, Dec 21, 2020 at 1:17 PM Justin Pryzby wrote: > On Fri, Dec 18, 2020 at 11:54:39AM -0600, Justin Pryzby wrote: > > On Fri, Dec 18, 2020 at 07:39:14AM +0530, Bharath Rupireddy wrote: > > > On Fri, Dec 18, 2020 at 2:14 AM Justin Pryzby wrote: > > > > Are you thinking that TableInsertState would eventually have additional > > > > attributes which would apply to other tableams, but not to heap ? Is > > > > heap_insert_begin() really specific to heap ? It's allocating and populating a > > > > structure based on its arguments, but those same arguments would be passed to > > > > every other AM's insert_begin routine, too. Do you need a more flexible data > > > > structure, something that would also accomodate extensions? I'm thinking of > > > > reloptions as a loose analogy. > > > > > > I could not think of other tableam attributes now. But +1 to have that > > > kind of flexible structure for TableInsertState. So, it can have > > > tableam type and attributes within the union for each type. > > > > Right now you have heap_insert_begin(), and I asked if it was really > > heap-specific. Right now, it populates a struct based on a static list of > > arguments, which are what heap uses. > > > > If you were to implement a burp_insert_begin(), how would it differ from > > heap's? With the current API, they'd (have to) be the same, which means either > > that it should apply to all AMs (or have a "default" implementation that can be > > overridden by an AM), or that this API assumes that other AMs will want to do > > exactly what heap does, and fails to allow other AMs to implement optimizations > > for bulk inserts as claimed. > > > > I don't think using a "union" solves the problem, since it can only accommodate > > core AMs, and not extensions, so I suggested something like reloptions, which > > have a "namespace" prefix (and core has toast.*, like ALTER TABLE t SET > > toast.autovacuum_enabled). > > I think you'd want to handle things like: > > - a compressed AM wants to specify a threshold for a tuple's *compressed* size > (maybe in addition to the uncompressed size); > - a "columnar" AM wants to specify a threshold size for a column, rather > than for each tuple; > > I'm not proposing to handle those specific parameters, but rather pointing out > that your implementation doesn't allow handling AM-specific considerations, > which I think was the goal. > > The TableInsertState structure would need to store those, and then the AM's > multi_insert_v2 routine would need to make use of them. > > It feels a bit like we'd introduce the idea of an "AM option", except that it > wouldn't be user-facing (or maybe some of them would be?). Maybe I've > misunderstood though, so other opinions are welcome. Attaching a v2 patch for the new table AMs. This patch has following changes: 1) Made the TableInsertState structure generic by having a void pointer for multi insert state and defined the heap specific multi insert state information in heapam.h. This way each AM can have it's own multi insert state structure and dereference the void pointer using that structure inside the respective AM implementations. 2) Earlier in the v1 patch, the bulk insert state allocation/deallocation was moved to AM level, but I see that there's nothing specific in doing so and I think it should be independent of AM. So I'm doing that in table_insert_begin() and table_insert_end(). Because of this, I had to move the BulkInsert function declarations from heapam.h to tableam.h 3) Corrected the typos and tried to adjust indentation of the code. Note that I have not yet made the multi_insert_v2 API optional as suggested earlier. I will think more on this and update. I'm not posting the updated 0002 to 0004 patches, I plan to do so after a couple of reviews happen on the design of the APIs in 0001. Thoughts? With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com --000000000000c041c705b72ac06c Content-Type: application/x-patch; name="v2-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Disposition: attachment; filename="v2-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kj234inx0 RnJvbSBjYWI3YmFhNmY1YzAyMjk4MTZlMDlhODg3YzA0NjhhMWNhNGVkY2NiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAyNCBEZWMgMjAyMCAwNToxODoxMyArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjJdIE5ldyBUYWJsZSBBTXMgZm9yIE11bHRpIGFuZCBTaW5nbGUgSW5z ZXJ0cwoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyB0YWJsZSBhY2Nlc3MgbWV0aG9kcyBmb3Ig bXVsdGkgYW5kCnNpbmdsZSBpbnNlcnRzLiBBbHNvIGltcGxlbWVudHMvcmVhcnJhbmdlcyB0aGUg b3V0c2lkZSBjb2RlIGZvcgpoZWFwIGFtIGludG8gdGhlc2UgbmV3IEFQSXMuCgpNYWluIGRlc2ln biBnb2FsIG9mIHRoZXNlIG5ldyBBUElzIGlzIHRvIGdpdmUgZmxleGliaWxpdHkgdG8KdGFibGVh bSBkZXZlbG9wZXJzIGluIGltcGxlbWVudGluZyBtdWx0aSBpbnNlcnQgbG9naWMgZGVwZW5kZW50 IG9uCnRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZW5naW5lLiBDdXJyZW50bHksIGZvciBhbGwgdGhl IHVuZGVybHlpbmcKc3RvcmFnZSBlbmdpbmVzLCB3ZSBmb2xsb3cgdGhlIHNhbWUgbXVsdGkgaW5z ZXJ0IGxvZ2ljIHN1Y2ggYXMgd2hlbgphbmQgaG93IHRvIGZsdXNoIHRoZSBidWZmZXJlZCB0dXBs ZXMsIHR1cGxlIHNpemUgY2FsY3VsYXRpb24sIGFuZAp0aGlzIGxvZ2ljIGRvZXNuJ3QgdGFrZSBp bnRvIGFjY291bnQgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBlbmdpbmUKY2FwYWJpbGl0aWVzLgoK V2UgY2FuIGFsc28gYXZvaWQgZHVwbGljYXRpbmcgbXVsdGkgaW5zZXJ0IGNvZGUgKGZvciBleGlz dGluZyBDT1BZLAphbmQgdXBjb21pbmcgQ1RBUywgQ1JFQVRFL1JFRlJFU0ggTUFUIFZJRVcgYW5k IElOU0VSVCBTRUxFQ1RzKS4gV2UKY2FuIGFsc28gbW92ZSBidWxrIGluc2VydCBzdGF0ZSBhbGxv Y2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaW5zaWRlCnRoZXNlIEFQSXMKLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgIHwgMjA2ICsrKysrKysrKysrKysrKysrKysr KysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgICA1ICsKIHNy Yy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgfCAgIDcgKwogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jICAgICAgICB8ICA4MyArKysrKysrKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgfCAgNTMgKysrKystCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgIHwgIDkzICsrKysrKysrKysKIHNyYy9pbmNs dWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmggICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2Vk LCA0NDIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bS5jCmluZGV4IGE5NTgzZjMxMDMuLmJhYTBmMzAzMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bS5jCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRl ICJ1dGlscy9pbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUg InV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3BjY2FjaGUuaCIKQEAgLTIzNzEs NiArMjM3MiwyMTEgQEAgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxl VGFibGVTbG90ICoqc2xvdHMsIGludCBudHVwbGVzLAogCXBnc3RhdF9jb3VudF9oZWFwX2luc2Vy dChyZWxhdGlvbiwgbnR1cGxlcyk7CiB9CiAKKy8qCisgKiBoZWFwX2luc2VydF9iZWdpbiAtIGFs bG9jYXRlIGFuZCBpbml0aWFsaXplIFRhYmxlSW5zZXJ0U3RhdGUKKyAqCisgKiBGb3Igc2luZ2xl IGluc2VydHM6CisgKiAgMSkgU3BlY2lmeSBpc19tdWx0aSBhcyBmYWxzZSwgdGhlbiBtdWx0aSBp bnNlcnQgc3RhdGUgd2lsbCBiZSBOVUxMLgorICoKKyAqIEZvciBtdWx0aSBpbnNlcnRzOgorICog IDEpIFNwZWNpZnkgaXNfbXVsdGkgYXMgdHJ1ZSwgdGhlbiBtdWx0aSBpbnNlcnQgc3RhdGUgd2ls bCBiZSBhbGxvY2F0ZWQgYW5kCisgKiAJICAgaW5pdGlhbGl6ZWQuCisgKgorICogIE90aGVyIGlu cHV0IHBhcmFtZXRlcnMgaS5lLiByZWxhdGlvbiwgY29tbWFuZCBpZCwgb3B0aW9ucyBhcmUgY29t bW9uIGZvcgorICogIGJvdGggc2luZ2xlIGFuZCBtdWx0aSBpbnNlcnRzLgorICovCitUYWJsZUlu c2VydFN0YXRlKgoraGVhcF9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVsLCBDb21tYW5kSWQgY2lk LCBpbnQgb3B0aW9ucywgYm9vbCBpc19tdWx0aSkKK3sKKwlUYWJsZUluc2VydFN0YXRlICpzdGF0 ZTsKKworCXN0YXRlID0gcGFsbG9jMChzaXplb2YoVGFibGVJbnNlcnRTdGF0ZSkpOworCXN0YXRl LT5yZWwgPSByZWw7CisJc3RhdGUtPmNpZCA9IGNpZDsKKwlzdGF0ZS0+b3B0aW9ucyA9IG9wdGlv bnM7CisJLyogQmVsb3cgcGFyYW1ldGVycyBhcmUgbm90IHVzZWQgZm9yIHNpbmdsZSBpbnNlcnRz LiAqLworCXN0YXRlLT5taXN0YXRlID0gTlVMTDsKKwlzdGF0ZS0+Y2xlYXJfbWlfc2xvdHMgPSBm YWxzZTsKKwlzdGF0ZS0+Zmx1c2hlZCA9IGZhbHNlOworCisJaWYgKGlzX211bHRpKQorCXsKKwkJ SGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisKKwkJbWlzdGF0ZSA9IHBhbGxvYzAoc2l6 ZW9mKEhlYXBNdWx0aUluc2VydFN0YXRlKSk7CisJCW1pc3RhdGUtPnNsb3RzID0KKwkJCQlwYWxs b2MwKHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1BWF9CVUZGRVJFRF9UVVBMRVMpOworCQlt aXN0YXRlLT5tYXhfc2xvdHMgPSBNQVhfQlVGRkVSRURfVFVQTEVTOworCQltaXN0YXRlLT5tYXhf c2l6ZSA9IE1BWF9CVUZGRVJFRF9CWVRFUzsKKwkJbWlzdGF0ZS0+Y3VyX3Nsb3RzID0gMDsKKwkJ bWlzdGF0ZS0+Y3VyX3NpemUgPSAwOworCQkvKgorCQkgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgbWVt b3J5IGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgb25jZSBwZXIKKwkJICogbXVsdGkgaW5z ZXJ0IGJhdGNoLgorCQkgKi8KKwkJbWlzdGF0ZS0+Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENy ZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSAiaGVhcF9tdWx0aV9pbnNl cnQiLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlzdGF0ZS0+bWlz dGF0ZSA9IG1pc3RhdGU7CisJCXN0YXRlLT5jbGVhcl9taV9zbG90cyA9IHRydWU7CisJCXN0YXRl LT5mbHVzaGVkCT0gZmFsc2U7CisJfQorCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogaGVh cF9pbnNlcnRfdjIgLSBpbnNlcnQgc2luZ2xlIHR1cGxlIGludG8gYSBoZWFwCisgKgorICogSW5z ZXJ0IHR1cGxlIGZyb20gdGhlIHNsb3QgaW50byB0YWJsZS4gVGhpcyBpcyBsaWtlIGhlYXBfaW5z ZXJ0KCkuIFRoZSBvbmx5CisgKiBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIHBhcmFtZXRlcnMgYXJl IGluc2lkZSB0YWJsZSBpbnNlcnQgc3RhdGUgc3RydWN0dXJlLgorICovCit2b2lkCitoZWFwX2lu c2VydF92MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7 CisJYm9vbAkJc2hvdWxkRnJlZSA9IHRydWU7CisJSGVhcFR1cGxlCXR1cGxlID0gRXhlY0ZldGNo U2xvdEhlYXBUdXBsZShzbG90LCB0cnVlLCAmc2hvdWxkRnJlZSk7CisKKwkvKiBVcGRhdGUgdGhl IHR1cGxlIHdpdGggdGFibGUgb2lkICovCisJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25H ZXRSZWxpZChzdGF0ZS0+cmVsKTsKKwl0dXBsZS0+dF90YWJsZU9pZCA9IHNsb3QtPnR0c190YWJs ZU9pZDsKKworCS8qIFBlcmZvcm0gdGhlIGluc2VydGlvbiwgYW5kIGNvcHkgdGhlIHJlc3VsdGlu ZyBJdGVtUG9pbnRlciAqLworCWhlYXBfaW5zZXJ0KHN0YXRlLT5yZWwsIHR1cGxlLCBzdGF0ZS0+ Y2lkLCBzdGF0ZS0+b3B0aW9ucywgc3RhdGUtPmJpc3RhdGUpOworCUl0ZW1Qb2ludGVyQ29weSgm dHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOworCisJaWYgKHNob3VsZEZyZWUpCisJCXBm cmVlKHR1cGxlKTsKK30KKworLyoKKyAqIGhlYXBfbXVsdGlfaW5zZXJ0X3YyIC0gaW5zZXJ0IG11 bHRpcGxlIHR1cGxlcyBpbnRvIGEgaGVhcAorICoKKyAqIENvbXB1dGUgdGhlIHNpemUgb2YgdGhl IHR1cGxlLCBzdG9yZSBpdCBpbnRvIHRoZSBidWZmZXJlZCBzbG90cyBhbmQgaW5zZXJ0CisgKiB0 aGUgdHVwbGVzKGZsdXNoKSBmcm9tIHRoZSBidWZmZXJlZCBzbG90cyBvbmUgYXQgYSB0aW1lIGlu dG8gdGhlIHRhYmxlLgorICoKKyAqIEZsdXNoIGNhbiBoYXBwZW46CisgKiAgMSkgZWl0aGVyIGlm IGFsbCB0aGUgc2xvdHMgYXJlIGZpbGxlZCB1cAorICogIDIpIG9yIGlmIHRoZSB0b3RhbCB0dXBs ZSBzaXplIG9mIHRoZSBjdXJyZW50bHkgYnVmZmVyZWQgc2xvdHMgYXJlID49CisgKiAgICAgbWF4 X3NpemUuCisgKi8KK3ZvaWQKK2hlYXBfbXVsdGlfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUg KnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlUdXBsZVRhYmxlU2xvdCAgKmJhdGNo c2xvdDsKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZSA9IChIZWFwTXVsdGlJbnNlcnRT dGF0ZSAqKXN0YXRlLT5taXN0YXRlOworCVNpemUgc3o7CisKKwlBc3NlcnQobWlzdGF0ZSAmJiBt aXN0YXRlLT5zbG90cyk7CisKKwlpZiAobWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3Rz XSA9PSBOVUxMKQorCQltaXN0YXRlLT5zbG90c1ttaXN0YXRlLT5jdXJfc2xvdHNdID0KKwkJCQkJ CQkJCXRhYmxlX3Nsb3RfY3JlYXRlKHN0YXRlLT5yZWwsIE5VTEwpOworCisJYmF0Y2hzbG90ID0g bWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXTsKKworCUV4ZWNDb3B5U2xvdChiYXRj aHNsb3QsIHNsb3QpOworCisJLyogUmVzZXQgdGhlIGZsdXNoIHN0YXRlIGlmIHByZXZpb3VzbHkg c2V0LiAqLworCWlmIChzdGF0ZS0+Zmx1c2hlZCkKKwkJc3RhdGUtPmZsdXNoZWQgPSBmYWxzZTsK KworCS8qCisJICogQ2FsY3VsYXRlIHRoZSB0dXBsZSBzaXplIGFmdGVyIHRoZSBvcmlnaW5hbCBz bG90IGlzIGNvcGllZCwgYmVjYXVzZSB0aGUKKwkgKiBjb3BpZWQgc2xvdCB0eXBlIGFuZCB0aGUg dHVwbGUgc2l6ZSBtYXkgY2hhbmdlLgorCSAqLworCXN6ID0gR2V0VHVwbGVTaXplKGJhdGNoc2xv dCwgbWlzdGF0ZS0+bWF4X3NpemUpOworCisJQXNzZXJ0KHN6ID4gMCk7CisKKwltaXN0YXRlLT5j dXJfc2xvdHMrKzsKKwltaXN0YXRlLT5jdXJfc2l6ZSArPSBzejsKKworCWlmIChtaXN0YXRlLT5j dXJfc2xvdHMgPj0gbWlzdGF0ZS0+bWF4X3Nsb3RzIHx8CisJCW1pc3RhdGUtPmN1cl9zaXplID49 IG1pc3RhdGUtPm1heF9zaXplKQorCQloZWFwX211bHRpX2luc2VydF9mbHVzaChzdGF0ZSk7Cit9 CisKKy8qCisgKiBoZWFwX211bHRpX2luc2VydF9mbHVzaCAtIGZsdXNoIHRoZSB0dXBsZXMgZnJv bSBidWZmZXJlZCBzbG90cyBpZiBhbnkKKyAqCisgKiBGbHVzaCB0aGUgYnVmZmVyZWQgdHVwbGVz LCBpbmRpY2F0ZSB0aGUgY2FsbGVyIHRoYXQgdGhlIGZsdXNoaW5nIGhhcHBlbmVkCisgKiBhbmQg Y2xlYXIgdGhlIHNsb3RzIGlmIHRoZXkgYXJlIG5vdCByZXF1aXJlZCBvdXRzaWRlLiBSZXNldCB0 aGUgcGFyYW1ldGVycy4KKyAqLwordm9pZAoraGVhcF9tdWx0aV9pbnNlcnRfZmx1c2goVGFibGVJ bnNlcnRTdGF0ZSAqc3RhdGUpCit7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGUgPSAo SGVhcE11bHRpSW5zZXJ0U3RhdGUgKilzdGF0ZS0+bWlzdGF0ZTsKKwlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisKKwlBc3NlcnQobWlzdGF0ZSAmJiBtaXN0YXRlLT5zbG90cyAmJiBtaXN0YXRl LT5jdXJfc2xvdHMgPj0gMCAmJgorCQkgICBtaXN0YXRlLT5jb250ZXh0KTsKKworCWlmIChtaXN0 YXRlLT5jdXJfc2xvdHMgPT0gMCkKKwl7CisJCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisJCXJl dHVybjsKKwl9CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG1pc3RhdGUt PmNvbnRleHQpOworCisJaGVhcF9tdWx0aV9pbnNlcnQoc3RhdGUtPnJlbCwgbWlzdGF0ZS0+c2xv dHMsIG1pc3RhdGUtPmN1cl9zbG90cywKKwkJCQkJICBzdGF0ZS0+Y2lkLCBzdGF0ZS0+b3B0aW9u cywgc3RhdGUtPmJpc3RhdGUpOworCisJTWVtb3J5Q29udGV4dFJlc2V0KG1pc3RhdGUtPmNvbnRl eHQpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCS8qCisJICogRG8g bm90IGNsZWFyIHRoZSBzbG90cyBhbHdheXMuIFNvbWV0aW1lcyBjYWxsZXJzIG1heSB3YW50IHRo ZSBzbG90cyBmb3IKKwkgKiBpbmRleCBpbnNlcnRpb25zIG9yIGFmdGVyIHJvdyB0cmlnZ2VyIGV4 ZWN1dGlvbnMgaW4gd2hpY2ggY2FzZSB0aGV5IGhhdmUKKwkgKiB0byBjbGVhciB0aGUgdHVwbGVz IGJlZm9yZSB1c2luZyBmb3IgdGhlIG5leHQgaW5zZXJ0IGJhdGNoLgorCSAqLworCWlmIChzdGF0 ZS0+Y2xlYXJfbWlfc2xvdHMpCisJeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWlz dGF0ZS0+Y3VyX3Nsb3RzOyBpKyspCisJCQlFeGVjQ2xlYXJUdXBsZShtaXN0YXRlLT5zbG90c1tp XSk7CisJfQorCisJbWlzdGF0ZS0+Y3VyX3Nsb3RzID0gMDsKKwltaXN0YXRlLT5jdXJfc2l6ZSA9 IDA7CisJc3RhdGUtPmZsdXNoZWQgPSB0cnVlOworfQorCisvKgorICogaGVhcF9pbnNlcnRfZW5k IC0gY2xlYW4gdXAgdGhlIFRhYmxlSW5zZXJ0U3RhdGUKKyAqCisgKiBGb3IgbXVsdGkgaW5zZXJ0 cywgZW5zdXJlIHRvIGZsdXNoIGFsbCB0aGUgcmVtYWluaW5nIGJ1ZmZlcnMgd2l0aAorICogaGVh cF9tdWx0aV9pbnNlcnRfZmx1c2ggYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gQnVmZmVy ZWQgc2xvdHMgYXJlCisgKiBkcm9wcGVkLCBzaG9ydC1saXZlZCBtZW1vcnkgY29udGV4dCBpcyBk ZWxldGVkIGFuZCBtaXN0YXRlIGlzIGZyZWVkIHVwLgorICoKKyAqIEFuZCBmaW5hbGx5IGZyZWUg dXAgVGFibGVJbnNlcnRTdGF0ZS4KKyAqLwordm9pZAoraGVhcF9pbnNlcnRfZW5kKFRhYmxlSW5z ZXJ0U3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+bWlzdGF0ZSkKKwl7CisJCUhlYXBNdWx0 aUluc2VydFN0YXRlICptaXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopc3RhdGUtPm1p c3RhdGU7CisJCWludCBpOworCisJCS8qIEVuc3VyZSB0aGF0IHRoZSBidWZmZXJzIGhhdmUgYmVl biBmbHVzaGVkIGJlZm9yZS4gKi8KKwkJQXNzZXJ0KG1pc3RhdGUtPnNsb3RzICYmIG1pc3RhdGUt PmN1cl9zbG90cyA9PSAwICYmCisJCQkgICBtaXN0YXRlLT5jb250ZXh0KTsKKworCQlmb3IgKGkg PSAwOyBpIDwgbWlzdGF0ZS0+bWF4X3Nsb3RzICYmIG1pc3RhdGUtPnNsb3RzW2ldICE9IE5VTEw7 IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QobWlzdGF0ZS0+c2xvdHNbaV0p OworCisJCU1lbW9yeUNvbnRleHREZWxldGUobWlzdGF0ZS0+Y29udGV4dCk7CisKKwkJcGZyZWUo bWlzdGF0ZS0+c2xvdHMpOworCQlwZnJlZShtaXN0YXRlKTsKKwl9CisKKwlwZnJlZShzdGF0ZSk7 Cit9CisKIC8qCiAgKglzaW1wbGVfaGVhcF9pbnNlcnQgLSBpbnNlcnQgYSB0dXBsZQogICoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDNlZWEyMTViODUuLmVi M2RhMTJkOWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAt MjU1NCw2ICsyNTU0LDExIEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0 aG9kcyA9IHsKIAkudHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2Vy dF9zcGVjdWxhdGl2ZSwKIAkudHVwbGVfY29tcGxldGVfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVw bGVfY29tcGxldGVfc3BlY3VsYXRpdmUsCiAJLm11bHRpX2luc2VydCA9IGhlYXBfbXVsdGlfaW5z ZXJ0LAorCS50dXBsZV9pbnNlcnRfYmVnaW4gPSBoZWFwX2luc2VydF9iZWdpbiwKKwkudHVwbGVf aW5zZXJ0X3YyID0gaGVhcF9pbnNlcnRfdjIsCisJLm11bHRpX2luc2VydF92MiA9IGhlYXBfbXVs dGlfaW5zZXJ0X3YyLAorCS5tdWx0aV9pbnNlcnRfZmx1c2ggPSBoZWFwX211bHRpX2luc2VydF9m bHVzaCwKKwkudHVwbGVfaW5zZXJ0X2VuZCA9IGhlYXBfaW5zZXJ0X2VuZCwKIAkudHVwbGVfZGVs ZXRlID0gaGVhcGFtX3R1cGxlX2RlbGV0ZSwKIAkudHVwbGVfdXBkYXRlID0gaGVhcGFtX3R1cGxl X3VwZGF0ZSwKIAkudHVwbGVfbG9jayA9IGhlYXBhbV90dXBsZV9sb2NrLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90YWJsZS90YWJsZWFtYXBpLmMKaW5kZXggNThkZTA3NDNiYS4uNmJlYzA2NTllNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBAIC03OCw2ICs3OCwxMyBAQCBHZXRUYWJs ZUFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT50dXBsZV9jb21wbGV0 ZV9zcGVjdWxhdGl2ZSAhPSBOVUxMKTsKIAogCUFzc2VydChyb3V0aW5lLT5tdWx0aV9pbnNlcnQg IT0gTlVMTCk7CisKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfaW5zZXJ0X2JlZ2luICE9IE5VTEwp OworCUFzc2VydChyb3V0aW5lLT50dXBsZV9pbnNlcnRfdjIgIT0gTlVMTCk7CisJQXNzZXJ0KHJv dXRpbmUtPm11bHRpX2luc2VydF92MiAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+bXVsdGlf aW5zZXJ0X2ZsdXNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9pbnNlcnRfZW5k ICE9IE5VTEwpOworCiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2RlbGV0ZSAhPSBOVUxMKTsKIAlB c3NlcnQocm91dGluZS0+dHVwbGVfdXBkYXRlICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50 dXBsZV9sb2NrICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1R1cGxlcy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCmluZGV4IDRjOTBh YzUyMzYuLmZhNmY0OTRhYjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNU dXBsZXMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKQEAgLTE1OSw3 ICsxNTksMTEgQEAgdHRzX3ZpcnR1YWxfbWF0ZXJpYWxpemUoVHVwbGVUYWJsZVNsb3QgKnNsb3Qp CiAJaWYgKFRUU19TSE9VTERGUkVFKHNsb3QpKQogCQlyZXR1cm47CiAKLQkvKiBjb21wdXRlIHNp emUgb2YgbWVtb3J5IHJlcXVpcmVkICovCisJLyoKKwkgKiBDb21wdXRlIHNpemUgb2YgbWVtb3J5 IHJlcXVpcmVkLiBUaGlzIHNpemUgY2FsY3VsYXRpb24gY29kZSBpcyBhbHNvIHVzZWQKKwkgKiBp biBHZXRUdXBsZVNpemUoKSwgaGVuY2UgZW5zdXJlIHRvIGhhdmUgdGhlIHNhbWUgY2hhbmdlcyBv ciBmaXhlcyBoZXJlCisJICogYW5kIGFsc28gdGhlcmUuCisJICovCiAJZm9yIChpbnQgbmF0dCA9 IDA7IG5hdHQgPCBkZXNjLT5uYXR0czsgbmF0dCsrKQogCXsKIAkJRm9ybV9wZ19hdHRyaWJ1dGUg YXR0ID0gVHVwbGVEZXNjQXR0cihkZXNjLCBuYXR0KTsKQEAgLTEyMzksNiArMTI0Myw4MyBAQCBF eGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KFR1cGxlVGFibGVTbG90ICpzbG90KQogCXBmcmVl KHNsb3QpOwogfQogCisvKgorICogR2V0VHVwbGVTaXplIC0gQ29tcHV0ZSB0aGUgdHVwbGUgc2l6 ZSBnaXZlbiBhIHRhYmxlIHNsb3QuCisgKgorICogRm9yIGhlYXAgdHVwbGUsIGJ1ZmZlciB0dXBs ZSBhbmQgbWluaW1hbCB0dXBsZSBzbG90IHR5cGVzIHJldHVybiB0aGUgYWN0dWFsCisgKiB0dXBs ZSBzaXplIHRoYXQgZXhpc3RzLiBGb3IgdmlydHVhbCB0dXBsZSwgdGhlIHNpemUgaXMgY2FsY3Vs YXRlZCBhcyB0aGUKKyAqIHNsb3QgZG9lcyBub3QgaGF2ZSB0aGUgdHVwbGUgc2l6ZS4gSWYgdGhl IGNvbXB1dGVkIHNpemUgZXhjZWVkcyB0aGUgZ2l2ZW4KKyAqIG1heHNpemUgZm9yIHRoZSB2aXJ0 dWFsIHR1cGxlLCB0aGlzIGZ1bmN0aW9uIGV4aXRzLCBub3QgaW52ZXN0aW5nIHRpbWUgaW4KKyAq IGZ1cnRoZXIgdW5uZWNlc3NhcnkgY2FsY3VsYXRpb24uCisgKgorICogSW1wb3J0YW50IE5vdGVz OgorICogMSkgU2l6ZSBjYWxjdWxhdGlvbiBjb2RlIGZvciB2aXJ0dWFsIHNsb3RzIGlzIGJlaW5n IHVzZWQgZnJvbQorICogCSAgdHRzX3ZpcnR1YWxfbWF0ZXJpYWxpemUoKSwgaGVuY2UgZW5zdXJl IHRvIGhhdmUgdGhlIHNhbWUgY2hhbmdlcyBvciBmaXhlcworICogCSAgaGVyZSBhbmQgYWxzbyB0 aGVyZS4KKyAqIDIpIEN1cnJlbnRseSwgR2V0VHVwbGVTaXplKCkgaGFuZGxlcyB0aGUgZXhpc3Rp bmcgaGVhcCwgYnVmZmVyLCBtaW5pbWFsIGFuZAorICogCSAgdmlydHVhbCBzbG90cy4gRW5zdXJl IHRvIGFkZCByZWxhdGVkIGNvZGUgaW4gY2FzZSBhbnkgbmV3IHNsb3QgdHlwZSBpcworICogICAg aW50cm9kdWNlZC4KKyAqLworaW5saW5lIFNpemUKK0dldFR1cGxlU2l6ZShUdXBsZVRhYmxlU2xv dCAqc2xvdCwgU2l6ZSBtYXhzaXplKQoreworCVNpemUgc3ogPSAwOworCUhlYXBUdXBsZSB0dXBs ZSA9IE5VTEw7CisKKwlpZiAoVFRTX0lTX0hFQVBUVVBMRShzbG90KSkKKwkJdHVwbGUgPSAoKEhl YXBUdXBsZVRhYmxlU2xvdCAqKSBzbG90KS0+dHVwbGU7CisJZWxzZSBpZihUVFNfSVNfQlVGRkVS VFVQTEUoc2xvdCkpCisJCXR1cGxlID0gKChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xv dCktPmJhc2UudHVwbGU7CisJZWxzZSBpZihUVFNfSVNfTUlOSU1BTFRVUExFKHNsb3QpKQorCQl0 dXBsZSA9ICgoTWluaW1hbFR1cGxlVGFibGVTbG90ICopIHNsb3QpLT50dXBsZTsKKwllbHNlIGlm KFRUU19JU19WSVJUVUFMKHNsb3QpKQorCXsKKwkJLyoKKwkJICogU2l6ZSBjYWxjdWxhdGlvbiBj b2RlIGJlaW5nIHVzZWQgaGVyZSBpcyBmcm9tCisJCSAqIHR0c192aXJ0dWFsX21hdGVyaWFsaXpl KCksIGVuc3VyZSB0byBoYXZlIHRoZSBzYW1lIGNoYW5nZXMgb3IgZml4ZXMKKwkJICogaGVyZSBh bmQgYWxzbyB0aGVyZS4KKwkJICovCisJCVR1cGxlRGVzYwlkZXNjID0gc2xvdC0+dHRzX3R1cGxl RGVzY3JpcHRvcjsKKworCQlmb3IgKGludCBuYXR0ID0gMDsgbmF0dCA8IGRlc2MtPm5hdHRzOyBu YXR0KyspCisJCXsKKwkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIoZGVz YywgbmF0dCk7CisJCQlEYXR1bQkJdmFsOworCisJCQlpZiAoYXR0LT5hdHRieXZhbCkKKwkJCQlz eiArPSBhdHQtPmF0dGxlbjsKKworCQkJaWYgKHNsb3QtPnR0c19pc251bGxbbmF0dF0pCisJCQkJ Y29udGludWU7CisKKwkJCXZhbCA9IHNsb3QtPnR0c192YWx1ZXNbbmF0dF07CisKKwkJCWlmIChh dHQtPmF0dGxlbiA9PSAtMSAmJgorCQkJCVZBUkFUVF9JU19FWFRFUk5BTF9FWFBBTkRFRChEYXR1 bUdldFBvaW50ZXIodmFsKSkpCisJCQl7CisJCQkJc3ogPSBhdHRfYWxpZ25fbm9taW5hbChzeiwg YXR0LT5hdHRhbGlnbik7CisJCQkJc3ogKz0gRU9IX2dldF9mbGF0X3NpemUoRGF0dW1HZXRFT0hQ KHZhbCkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXN6ID0gYXR0X2FsaWduX25vbWluYWwo c3osIGF0dC0+YXR0YWxpZ24pOworCQkJCXN6ID0gYXR0X2FkZGxlbmd0aF9kYXR1bShzeiwgYXR0 LT5hdHRsZW4sIHZhbCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgbm90IGludGVyZXN0 ZWQgaW4gcHJvY2VlZGluZyBmdXJ0aGVyIGlmIHRoZSBjb21wdXRlZCBzaXplCisJCQkgKiBjcm9z c2VzIG1heHNpemUgbGltaXQgdGhhdCB3ZSBhcmUgbG9va2luZyBmb3IuCisJCQkgKi8KKwkJCWlm IChtYXhzaXplICE9IDAgJiYgc3ogPj0gbWF4c2l6ZSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwor CWlmICh0dXBsZSAhPSBOVUxMICYmICFUVFNfSVNfVklSVFVBTChzbG90KSkKKwkJc3ogPSB0dXBs ZS0+dF9sZW47CisKKwlyZXR1cm4gc3o7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCSAgdHVwbGUg dGFibGUgc2xvdCBhY2Nlc3NvciBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1NGIyZWI3 Mzc4Li5jOTgxYjQ3NThkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0zNiwxMSArMzYsMjYgQEAKICNk ZWZpbmUgSEVBUF9JTlNFUlRfTk9fTE9HSUNBTAlUQUJMRV9JTlNFUlRfTk9fTE9HSUNBTAogI2Rl ZmluZSBIRUFQX0lOU0VSVF9TUEVDVUxBVElWRSAweDAwMTAKIAotdHlwZWRlZiBzdHJ1Y3QgQnVs a0luc2VydFN0YXRlRGF0YSAqQnVsa0luc2VydFN0YXRlOwogc3RydWN0IFR1cGxlVGFibGVTbG90 OwogCiAjZGVmaW5lIE1heExvY2tUdXBsZU1vZGUJTG9ja1R1cGxlRXhjbHVzaXZlCiAKKy8qCisg KiBObyBtb3JlIHRoYW4gdGhpcyBtYW55IHR1cGxlcyBwZXIgc2luZ2xlIG11bHRpIGluc2VydCBi YXRjaAorICoKKyAqIENhdXRpb246IERvbid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3Vs ZCBlbmQgdXAgd2l0aCB0aGlzIG1hbnkgdHVwbGVzCisgKiBzdG9yZWQgaW4gbXVsdGkgaW5zZXJ0 IGJ1ZmZlci4gSW5jcmVhc2luZyB0aGlzIGNhbiBjYXVzZSBxdWFkcmF0aWMgZ3Jvd3RoIGluCisg KiBtZW1vcnkgcmVxdWlyZW1lbnRzIGR1cmluZyBjb3BpZXMgaW50byBwYXJ0aXRpb25lZCB0YWJs ZXMgd2l0aCBhIGxhcmdlCisgKiBudW1iZXIgb2YgcGFydGl0aW9ucy4KKyAqLworI2RlZmluZSBN QVhfQlVGRkVSRURfVFVQTEVTCQkxMDAwCisKKy8qCisgKiBGbHVzaCBtdWx0aSBpbnNlcnQgYnVm ZmVycyBpZiB0aGVyZSBhcmUgPj0gdGhpcyBtYW55IGJ5dGVzLCBhcyBjb3VudGVkIGJ5CisgKiB0 aGUgc2l6ZSBvZiB0aGUgdHVwbGVzIGJ1ZmZlcmVkLgorICovCisjZGVmaW5lIE1BWF9CVUZGRVJF RF9CWVRFUwkJNjU1MzUKKwogLyoKICAqIERlc2NyaXB0b3IgZm9yIGhlYXAgdGFibGUgc2NhbnMu CiAgKi8KQEAgLTkzLDYgKzEwOCwyOSBAQCB0eXBlZGVmIGVudW0KIAlIRUFQVFVQTEVfREVMRVRF X0lOX1BST0dSRVNTCS8qIGRlbGV0aW5nIHhhY3QgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KIH0g SFRTVl9SZXN1bHQ7CiAKKy8qIEhvbGRzIHRoZSBtdWx0aSBpbnNlcnQgc3RhdGUgZm9yIGhlYXAg YWNjZXNzIG1ldGhvZC4gKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBNdWx0aUluc2VydFN0YXRlCit7 CisJLyogU3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeSBjb250ZXh0IGJlZm9yZSBmbHVzaGlu Zy4gKi8KKwlNZW1vcnlDb250ZXh0ICAgICAgIGNvbnRleHQ7CisJLyogQXJyYXkgb2YgYnVmZmVy ZWQgc2xvdHMuICovCisJVHVwbGVUYWJsZVNsb3QgICAgICAqKnNsb3RzOworCS8qIE1heGltdW0g bnVtYmVyIG9mIHNsb3RzIHRoYXQgY2FuIGJlIGJ1ZmZlcmVkLiAqLworCWludDMyICAgICAgICAg ICAgICAgbWF4X3Nsb3RzOworCS8qIE51bWJlciBvZiBzbG90cyB0aGF0IGFyZSBjdXJyZW50bHkg YnVmZmVyZWQuICovCisJaW50MzIgICAgICAgICAgICAgICBjdXJfc2xvdHM7CisJLyoKKwkgKiBN YXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiBhbGwgdGhlIHR1cGxlcyB0aGF0IGEgc2luZ2xlIGJh dGNoIG9mCisJICogYnVmZmVyZWQgc2xvdHMgY2FuIGhvbGQuCisJICovCisJaW50NjQgICAgICAg ICAgICAgICBtYXhfc2l6ZTsKKwkvKgorCSAqIFRvdGFsIHR1cGxlIHNpemUgKGluIGJ5dGVzKSBv ZiB0aGUgc2xvdHMgdGhhdCBhcmUgY3VycmVudGx5IGJ1ZmZlcmVkLgorCSAqIEZsdXNoIHRoZSBi dWZmZXJlZCBzbG90cyB3aGVuIGN1cl9zaXplID49IG1heF9zaXplLgorCSAqLworCWludDY0ICAg ICAgICAgICAgICAgY3VyX3NpemU7Cit9IEhlYXBNdWx0aUluc2VydFN0YXRlOworCiAvKiAtLS0t LS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0 aG9kCiAgKgpAQCAtMTMwLDE1ICsxNjgsMjAgQEAgZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCiBleHRlcm4gdm9p ZCBoZWFwX2dldF9sYXRlc3RfdGlkKFRhYmxlU2NhbkRlc2Mgc2NhbiwgSXRlbVBvaW50ZXIgdGlk KTsKIAotZXh0ZXJuIEJ1bGtJbnNlcnRTdGF0ZSBHZXRCdWxrSW5zZXJ0U3RhdGUodm9pZCk7Ci1l eHRlcm4gdm9pZCBGcmVlQnVsa0luc2VydFN0YXRlKEJ1bGtJbnNlcnRTdGF0ZSk7Ci1leHRlcm4g dm9pZCBSZWxlYXNlQnVsa0luc2VydFN0YXRlUGluKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsK LQogZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0 dXAsIENvbW1hbmRJZCBjaWQsCiAJCQkJCQlpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJp c3RhdGUpOwogZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24s IHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAogCQkJCQkJCSAgaW50IG50dXBsZXMsIENv bW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAogCQkJCQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3Rh dGUpOworCitleHRlcm4gVGFibGVJbnNlcnRTdGF0ZSogaGVhcF9pbnNlcnRfYmVnaW4oUmVsYXRp b24gcmVsLCBDb21tYW5kSWQgY2lkLAorCQkJCQkJCQkJCSAgIGludCBvcHRpb25zLCBib29sIGlz X211bHRpKTsKK2V4dGVybiB2b2lkIGhlYXBfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0 YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2Vy dF92MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpz bG90KTsKK2V4dGVybiB2b2lkIGhlYXBfbXVsdGlfaW5zZXJ0X2ZsdXNoKFRhYmxlSW5zZXJ0U3Rh dGUgKnN0YXRlKTsKK2V4dGVybiB2b2lkIGhlYXBfaW5zZXJ0X2VuZChUYWJsZUluc2VydFN0YXRl ICpzdGF0ZSk7CisKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRp b24sIEl0ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jv c3NjaGVjaywgYm9vbCB3YWl0LAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQs IGJvb2wgY2hhbmdpbmdQYXJ0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJs ZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDM4N2ViMzRhNjEuLmYz MjA1YTUyMGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMTI4LDYgKzEyOCwzOCBAQCB0eXBlZGVm IHN0cnVjdCBUTV9GYWlsdXJlRGF0YQogCWJvb2wJCXRyYXZlcnNlZDsKIH0gVE1fRmFpbHVyZURh dGE7CiAKKy8qIEhvbGRzIHRoZSB0YWJsZSBpbnNlcnQgc3RhdGUuICovCit0eXBlZGVmIHN0cnVj dCBUYWJsZUluc2VydFN0YXRlCit7CisJUmVsYXRpb24JcmVsOworCS8qIEJ1bGsgaW5zZXJ0IHN0 YXRlIGlmIHJlcXVlc3RlZCwgb3RoZXJ3aXNlIE5VTEwuICovCisJc3RydWN0IEJ1bGtJbnNlcnRT dGF0ZURhdGEgICAgICpiaXN0YXRlOworCUNvbW1hbmRJZAljaWQ7CisJaW50CQlvcHRpb25zOwor CS8qIE11bHRpIGluc2VydCBzdGF0ZSBpZiByZXF1ZXN0ZWQsIG90aGVyd2lzZSBOVUxMLiAqLwor CXZvaWQJKm1pc3RhdGU7CisJLyoKKwkgKiBWYWxpZCBvbmx5IGZvciBtdWx0aSBpbnNlcnRzIHRo YXQgaXMgd2hlbiBtaXN0YXRlIGlzIG5vbiBOVUxMLgorCSAqIFdoZXRoZXIgdG8gY2xlYXIgdGhl IGJ1ZmZlcmVkIHNsb3RzIGFmdGVyIGVhY2ggZmx1c2g/IElmIHRoZSByZWxhdGlvbgorCSAqIGhh cyBpbmRleGVzIG9yIGFmdGVyIHJvdyB0cmlnZ2VycywgdGhlIGJ1ZmZlcmVkIHNsb3RzIGFyZSBy ZXF1aXJlZAorCSAqIG91dHNpZGUgbXVsdGkgaW5zZXJ0IEFNLCBpbiB3aGljaCBjYXNlLCBjbGVh biB0aGVtIGluIHRoZSBjYWxsZXIgdXNpbmcKKwkgKiBFeGVjQ2xlYXJUdXBsZSgpIG91dHNpZGUg dGhlIG11bHRpIGluc2VydCBBTS4gSWYgdHJ1ZSwgd2hpY2ggaXMgZGVmYXVsdCwKKwkgKiBtdWx0 aSBpbnNlcnQgQU0gd2lsbCBjbGVhciB0aGUgc2xvdHMuCisJICoKKwkgKiBJdCBpcyBnb29kIHRv IHNldCB0aGlzIGZsYWcgYnkgbG9va2luZyBhdCB3aGV0aGVyIHRoZSB0YWJsZSBpcyBoYXZpbmcK KwkgKiBhbnkgaW5kZXhlcyBvciBhZnRlciByb3cgdHJpZ2dlcnMgYXQgdGhlIGJlZ2lubmluZyBv ZiBtdWx0aSBpbnNlcnQKKwkgKiBvcGVyYXRpb24sIHByZWNpc2VseSBhZnRlciBjYWxsaW5nIGJl Z2luIGluc2VydCBBTS4KKwkgKi8KKwlib29sCWNsZWFyX21pX3Nsb3RzOworCS8qCisJICogVmFs aWQgb25seSBmb3IgbXVsdGkgaW5zZXJ0cyB0aGF0IGlzIHdoZW4gbWlzdGF0ZSBpcyBub24gTlVM TC4KKwkgKiBJbml0aWFsbHkgZmFsc2UsIHNldCB0byB0cnVlIGJ5IG11bHRpIGluc2VydCBBTSB3 aGVuZXZlciBpdCBmbHVzaGVzIHRoZQorCSAqIGJ1ZmZlcmVkIHNsb3RzLiBDYWxsZXIgY2FuIHVz ZSB0aGlzIGZsYWcgdG8gaW5zZXJ0IGludG8gaW5kZXhlcyBvcgorCSAqIGV4ZWN1dGUgYWZ0ZXIg cm93IHRyaWdnZXJzIGFuZCBzbyBvbiBpZiBhbnkuCisJICovCisJYm9vbAlmbHVzaGVkOworfVRh YmxlSW5zZXJ0U3RhdGU7CisKIC8qICJvcHRpb25zIiBmbGFnIGJpdHMgZm9yIHRhYmxlX3R1cGxl X2luc2VydCAqLwogLyogVEFCTEVfSU5TRVJUX1NLSVBfV0FMIHdhcyAweDAwMDE7IFJlbGF0aW9u TmVlZHNXQUwoKSBub3cgZ292ZXJucyAqLwogI2RlZmluZSBUQUJMRV9JTlNFUlRfU0tJUF9GU00J CTB4MDAwMgpAQCAtMzc2LDYgKzQwOCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGlu ZQogCXZvaWQJCSgqbXVsdGlfaW5zZXJ0KSAoUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAq KnNsb3RzLCBpbnQgbnNsb3RzLAogCQkJCQkJCQkgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMs IHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpiaXN0YXRlKTsKIAorCVRhYmxlSW5zZXJ0U3Rh dGUqICgqdHVwbGVfaW5zZXJ0X2JlZ2luKSAoUmVsYXRpb24gcmVsLCBDb21tYW5kSWQgY2lkLAor CQkJCQkJCQkJCQkgaW50IG9wdGlvbnMsIGJvb2wgaXNfbXVsdGkpOworCisJdm9pZCAoKnR1cGxl X2luc2VydF92MikgKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCk7CisKKwl2b2lkICgqbXVsdGlfaW5zZXJ0X3YyKSAoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUs IFR1cGxlVGFibGVTbG90ICpzbG90KTsKKworCXZvaWQgKCptdWx0aV9pbnNlcnRfZmx1c2gpIChU YWJsZUluc2VydFN0YXRlICpzdGF0ZSk7CisKKwl2b2lkICgqdHVwbGVfaW5zZXJ0X2VuZCkgKFRh YmxlSW5zZXJ0U3RhdGUgKnN0YXRlKTsKKwogCS8qIHNlZSB0YWJsZV90dXBsZV9kZWxldGUoKSBm b3IgcmVmZXJlbmNlIGFib3V0IHBhcmFtZXRlcnMgKi8KIAlUTV9SZXN1bHQJKCp0dXBsZV9kZWxl dGUpIChSZWxhdGlvbiByZWwsCiAJCQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsCkBAIC03MjMsNiAr NzY2LDggQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIH0gVGFibGVBbVJvdXRpbmU7 CiAKIAordHlwZWRlZiBzdHJ1Y3QgQnVsa0luc2VydFN0YXRlRGF0YSAqQnVsa0luc2VydFN0YXRl OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTbG90IGZ1bmN0aW9ucy4KICAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KQEAgLTc0MSw2ICs3ODYsMTAgQEAgZXh0ZXJuIGNvbnN0IFR1cGxlVGFi bGVTbG90T3BzICp0YWJsZV9zbG90X2NhbGxiYWNrcyhSZWxhdGlvbiByZWwpOwogICovCiBleHRl cm4gVHVwbGVUYWJsZVNsb3QgKnRhYmxlX3Nsb3RfY3JlYXRlKFJlbGF0aW9uIHJlbCwgTGlzdCAq KnJlZ2xpc3QpOwogCisvKiBCdWxrIGluc2VydCBzdGF0ZSBmdW5jdGlvbnMuICovCitleHRlcm4g QnVsa0luc2VydFN0YXRlIEdldEJ1bGtJbnNlcnRTdGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIEZy ZWVCdWxrSW5zZXJ0U3RhdGUoQnVsa0luc2VydFN0YXRlKTsKK2V4dGVybiB2b2lkIFJlbGVhc2VC dWxrSW5zZXJ0U3RhdGVQaW4oQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKiBUYWJsZSBzY2FuIGZ1bmN0aW9ucy4KQEAgLTEyMzcsNiArMTI4Niw1 MCBAQCB0YWJsZV9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqKnNs b3RzLCBpbnQgbnNsb3RzLAogCQkJCQkJCQkgIGNpZCwgb3B0aW9ucywgYmlzdGF0ZSk7CiB9CiAK K3N0YXRpYyBpbmxpbmUgVGFibGVJbnNlcnRTdGF0ZSoKK3RhYmxlX2luc2VydF9iZWdpbihSZWxh dGlvbiByZWwsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAorCQkJCSAgIGJvb2wgYWxsb2Nf YmlzdGF0ZSwgYm9vbCBpc19tdWx0aSkKK3sKKwlUYWJsZUluc2VydFN0YXRlICpzdGF0ZSA9IHJl bC0+cmRfdGFibGVhbS0+dHVwbGVfaW5zZXJ0X2JlZ2luKHJlbCwgY2lkLAorCQkJCQkJCQkJCW9w dGlvbnMsIGlzX211bHRpKTsKKworCS8qIEFsbG9jYXRlIGJ1bGsgaW5zZXJ0IHN0YXRlIGhlcmUs IHNpbmNlIGl0J3MgQU0gaW5kZXBlbmRlbnQuICovCisJaWYgKGFsbG9jX2Jpc3RhdGUpCisJCXN0 YXRlLT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJZWxzZQorCQlzdGF0ZS0+Ymlz dGF0ZSA9IE5VTEw7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor dGFibGVfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCkKK3sKKwlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfdjIoc3RhdGUs IHNsb3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX211bHRpX2luc2VydF92MihU YWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJc3RhdGUt PnJlbC0+cmRfdGFibGVhbS0+bXVsdGlfaW5zZXJ0X3YyKHN0YXRlLCBzbG90KTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkCit0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2goVGFibGVJbnNlcnRTdGF0 ZSAqc3RhdGUpCit7CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+bXVsdGlfaW5zZXJ0X2ZsdXNo KHN0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbnNlcnRfZW5kKFRhYmxl SW5zZXJ0U3RhdGUgKnN0YXRlKQoreworCS8qIERlYWxsb2NhdGUgYnVsayBpbnNlcnQgc3RhdGUg aGVyZSwgc2luY2UgaXQncyBBTSBpbmRlcGVuZGVudC4gKi8KKwlpZiAoc3RhdGUtPmJpc3RhdGUp CisJCUZyZWVCdWxrSW5zZXJ0U3RhdGUoc3RhdGUtPmJpc3RhdGUpOworCisJc3RhdGUtPnJlbC0+ cmRfdGFibGVhbS0+dHVwbGVfaW5zZXJ0X2VuZChzdGF0ZSk7Cit9CisKIC8qCiAgKiBEZWxldGUg YSB0dXBsZS4KICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAppbmRleCBmN2RmNzBiNWFiLi5kN2My ODRkOGUzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCisrKyBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKQEAgLTMzMCw2ICszMzAsNyBAQCBleHRl cm4gdm9pZCBzbG90X2dldG1pc3NpbmdhdHRycyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IHN0 YXJ0QXR0TnVtLAogCQkJCQkJCQkgaW50IGxhc3RBdHROdW0pOwogZXh0ZXJuIHZvaWQgc2xvdF9n ZXRzb21lYXR0cnNfaW50KFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgYXR0bnVtKTsKIAorZXh0 ZXJuIFNpemUgR2V0VHVwbGVTaXplKFR1cGxlVGFibGVTbG90ICpzbG90LCBTaXplIG1heHNpemUp OwogCiAjaWZuZGVmIEZST05URU5ECiAKLS0gCjIuMjUuMQoK --000000000000c041c705b72ac06c--