From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13947 invoked by alias); 24 Aug 2012 18:38:20 -0000 Received: (qmail 13886 invoked by uid 22791); 24 Aug 2012 18:38:11 -0000 X-SWARE-Spam-Status: No, hits=-5.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-ob0-f169.google.com (HELO mail-ob0-f169.google.com) (209.85.214.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 24 Aug 2012 18:37:51 +0000 Received: by obhx4 with SMTP id x4so5669087obh.0 for ; Fri, 24 Aug 2012 11:37:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=LcBbUAu2zcIGKA3Hr824uyWc1zX5k9z8HTrqKeMkGzE=; b=Ts6mP6N4d/xEXGzjbjLvQfup95Oc6abUN8UBu7hAHjMLoxZsCFo1rzbYdMhil+FD3s z1IBNGEgL0lUZSirn+tm8SpeJT4iCI8hcY+FRVtHQuzPKi2C5zNKGXVFfmvGeAb0pVRs lzQ5M1bJBEM8+QLnIrbI6ssVdoyOJqLixVoc6nMNGk6smGfeB2Rnvw5VjmY/5oUSaPoW /x+aPp7XfH6u8nE4+lT1/BpuE7hYdsiK9NHVJIY8vht51lc6bYJo17zpu61ozxVAsLcv cmRW8ZNURZpUsK0njBPSM/6sj5/l3c68nzptrJkkWczu1rAUqoY0olln6zr4W4LyvXoO VM9w== Received: by 10.182.98.108 with SMTP id eh12mr4678968obb.6.1345833470544; Fri, 24 Aug 2012 11:37:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.98.108 with SMTP id eh12mr4678959obb.6.1345833470437; Fri, 24 Aug 2012 11:37:50 -0700 (PDT) Received: by 10.182.58.193 with HTTP; Fri, 24 Aug 2012 11:37:50 -0700 (PDT) In-Reply-To: References: Date: Fri, 24 Aug 2012 19:01:00 -0000 Message-ID: Subject: Re: [patch] Gold linker patch to provide plugin support for mapping some text sections to an unique ELF segment. From: Sriraman Tallam To: Cary Coutant Cc: Ian Lance Taylor , binutils Content-Type: multipart/mixed; boundary=14dae93a15cdeeaa9b04c807450a X-System-Of-Record: true X-Gm-Message-State: ALoCoQmzqUBIfwOqpppagR47+1msQ3MAIRJotIiSvBYiTnCd8bfTJU40B6gugx/jtuY7buKWsmYHAIuDvI5fop1EB52ej49Ea1piASihQQCcYeZovvCRpl/mSy+5QpUWK0ffErbSFGovNWzCyOqOZkwPRIrBsPYF2vQJUNj7K1mnQv2o2w9c+ph9k4zsDPTzF20oKqUJjReE X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00448.txt.bz2 --14dae93a15cdeeaa9b04c807450a Content-Type: text/plain; charset=ISO-8859-1 Content-length: 856 Hi Ian/Cary, Thanks. Made all the changes and submitted. I will update GCC trunk with the new plugin-api.h. Submitted patch attached. -Sri. On Fri, Aug 24, 2012 at 10:40 AM, Cary Coutant wrote: >> I have made all the changes and attached the patch. > > @@ -1734,8 +1788,13 @@ Layout::attach_allocated_section_to_segm > p != this->segment_list_.end(); > ++p) > { > + // No need to go through the loop if a unique segment is needed. > + if (os->is_unique_segment()) > + break; > > I'd suggest moving this test outside the for loop. If this condition > is true, there's no point even entering the loop. (I'd hope the > compiler is smart enough to figure that out anyway, but I think it > would be clearer to the reader. > > Aside from that and what Ian noted, it looks good to me. > > -cary --14dae93a15cdeeaa9b04c807450a Content-Type: text/plain; charset=US-ASCII; name="segment_patch.txt" Content-Disposition: attachment; filename="segment_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h69mgoh50 Content-length: 62489 SW5kZXg6IGdvbGQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL0NoYW5nZUxvZyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS45NDEKZGlmZiAtdSAtdSAtcCAtcjEuOTQxIENo YW5nZUxvZwotLS0gZ29sZC9DaGFuZ2VMb2cJMjIgQXVnIDIwMTIgMTg6MjY6 MzIgLTAwMDAJMS45NDEKKysrIGdvbGQvQ2hhbmdlTG9nCTI0IEF1ZyAyMDEy IDE4OjE2OjU4IC0wMDAwCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTItMDgtMjQg IFNyaXJhbWFuIFRhbGxhbSAgPHRtc3JpcmFtQGdvb2dsZS5jb20+CisKKwkq IGdvbGQuY2MgKHF1ZXVlX21pZGRsZV90YXNrcyk6IENhbGwgbGF5b3V0IGFn YWluIHdoZW4gdW5pcXVlCisJc2VnbWVudHMgZm9yIHNlY3Rpb25zIGlzIGRl c2lyZWQuCisJKiBsYXlvdXQuY2MgKExheW91dDo6TGF5b3V0KTogSW5pdGlh bGl6ZSBuZXcgbWVtYmVycy4KKwkoTGF5b3V0OjpnZXRfb3V0cHV0X3NlY3Rp b25fZmxhZ3MpOiBOZXcgZnVuY3Rpb24uCisJKExheW91dDo6Y2hvb3NlX291 dHB1dF9zZWN0aW9uKTogQ2FsbCBnZXRfb3V0cHV0X3NlY3Rpb25fZmxhZ3Mu CisJKExheW91dDo6bGF5b3V0KTogTWFrZSBvdXRwdXQgc2VjdGlvbiBmb3Ig bWFwcGluZyB0byBhIHVuaXF1ZSBzZWdtZW50LgorCShMYXlvdXQ6Omluc2Vy dF9zZWN0aW9uX3NlZ21lbnRfbWFwKTogTmV3IGZ1bmN0aW9uLgorCShMYXlv dXQ6OmF0dGFjaF9hbGxvY2F0ZWRfc2VjdGlvbl90b19zZWdtZW50KTogTWFr ZSB1bmlxdWUgc2VnbWVudCBmb3IKKwlvdXRwdXQgc2VjdGlvbnMgbWFya2Vk IHNvLiAKKwkoTGF5b3V0OjpzZWdtZW50X3ByZWNlZGVzKTogQ2hlY2sgZm9y IHVuaXF1ZSBzZWdtZW50cyB3aGVuIHNvcnRpbmcuCisJKiBsYXlvdXQuaCAo TGF5b3V0OjpVbmlxdWVfc2VnbWVudF9pbmZvKTogTmV3IHN0cnVjdC4KKwko TGF5b3V0OjpTZWN0aW9uX3NlZ21lbnRfbWFwKTogTmV3IHR5cGVkZWYuCisJ KExheW91dDo6aW5zZXJ0X3NlY3Rpb25fc2VnbWVudF9tYXApOiBOZXcgZnVu Y3Rpb24uCisJKExheW91dDo6Z2V0X291dHB1dF9zZWN0aW9uX2ZsYWdzKTog TmV3IGZ1bmN0aW9uLgorCShMYXlvdXQ6OmlzX3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9uc19zcGVjaWZpZWQpOiBOZXcgZnVuY3Rpb24uCisJKExheW91 dDo6c2V0X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9uc19zcGVjaWZpZWQp OiBOZXcgZnVuY3Rpb24uCisJKExheW91dDo6dW5pcXVlX3NlZ21lbnRfZm9y X3NlY3Rpb25zX3NwZWNpZmllZF8pOiBOZXcgbWVtYmVyLgorCShMYXlvdXQ6 OnNlY3Rpb25fc2VnbWVudF9tYXBfKTogTmV3IG1lbWJlci4KKwkqIG9iamVj dC5jYyAoU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRv X2xheW91dCk6CisJUmVuYW1lIGlzX2djX3Bhc3Nfb25lIHRvIGlzX3Bhc3Nf b25lLgorCVJlbmFtZSBpc19nY19wYXNzX3R3byB0byBpc19wYXNzX3R3by4K KwlSZW5hbWUgaXNfZ2Nfb3JfaWNmIHRvIGlzX3R3b19wYXNzLgorCUNoZWNr IGZvciB3aGljaCBwYXNzIGJhc2VkIG9uIHdoZXRoZXIgc3ltYm9scyBkYXRh IGlzIHByZXNlbnQuCisJTWFrZSBpdCB0d28gcGFzcyB3aGVuIHVuaXF1ZSBz ZWdtZW50cyBmb3Igc2VjdGlvbnMgaXMgZGVzaXJlZC4KKwkqIG91dHB1dC5j YyAoT3V0cHV0X3NlY3Rpb246Ok91dHB1dF9zZWN0aW9uKTogSW5pdGlhbGl6 ZSBuZXcKKwltZW1iZXJzLgorCSogb3V0cHV0LmggKE91dHB1dF9zZWN0aW9u Ojppc191bmlxdWVfc2VnbWVudCk6IE5ldyBmdW5jdGlvbi4KKwkoT3V0cHV0 X3NlY3Rpb246OnNldF9pc191bmlxdWVfc2VnbWVudCk6IE5ldyBmdW5jdGlv bi4KKwkoT3V0cHV0X3NlY3Rpb246OmlzX3VuaXF1ZV9zZWdtZW50Xyk6IE5l dyBtZW1iZXIuCisJKE91dHB1dF9zZWN0aW9uOjpleHRyYV9zZWdtZW50X2Zs YWdzKTogTmV3IGZ1bmN0aW9uLgorCShPdXRwdXRfc2VjdGlvbjo6c2V0X2V4 dHJhX3NlZ21lbnRfZmxhZ3MpOiBOZXcgZnVuY3Rpb24uCisJKE91dHB1dF9z ZWN0aW9uOjpleHRyYV9zZWdtZW50X2ZsYWdzXyk6IE5ldyBtZW1iZXIuCisJ KE91dHB1dF9zZWN0aW9uOjpzZWdtZW50X2FsaWdubWVudCk6IE5ldyBmdW5j dGlvbi4KKwkoT3V0cHV0X3NlY3Rpb246OnNldF9zZWdtZW50X2FsaWdubWVu dCk6IE5ldyBmdW5jdGlvbi4KKwkoT3V0cHV0X3NlY3Rpb246OnNlZ21lbnRf YWxpZ25tZW50Xyk6IE5ldyBtZW1iZXIuCisJKE91dHB1dF9zZWdtZW50OjpP dXRwdXRfc2VnbWVudCk6IEluaXRpYWxpemUgaXNfdW5pcXVlX3NlZ21lbnRf LgorCShPdXRwdXRfc2VnbWVudDo6aXNfdW5pcXVlX3NlZ21lbnQpOiBOZXcg ZnVuY3Rpb24uCisJKE91dHB1dF9zZWdtZW50OjpzZXRfaXNfdW5pcXVlX3Nl Z21lbnQpOiBOZXcgZnVuY3Rpb24uCisJKE91dHB1dF9zZWdtZW50Ojppc191 bmlxdWVfc2VnbWVudF8pOiBOZXcgbWVtYmVyLgorCSogcGx1Z2luLmNjIChh bGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMpOiBOZXcgZnVuY3Rp b24uCisJKHVuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyk6IE5ldyBmdW5j dGlvbi4KKwkoUGx1Z2luOjpsb2FkKTogQWRkIG5ldyBmdW5jdGlvbnMgdG8g dHJhbnNmZXIgdmVjdG9yLgorCSogTWFrZWZpbGUuYW0gKHBsdWdpbl9maW5h bF9sYXlvdXQucmVhZGVsZi5zdGRvdXQpOiBBZGQgcmVhZGVsZiBvdXRwdXQu CisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9w bHVnaW5fZmluYWxfbGF5b3V0LnNoOiBDaGVjayBpZiB1bmlxdWUgc2VnbWVu dAorCWZ1bmN0aW9uYWxpdHkgd29ya3MuCisJKiB0ZXN0c3VpdGUvcGx1Z2lu X3NlY3Rpb25fb3JkZXIuYyAob25sb2FkKTogQ2hlY2sgaWYgbmV3IGludGVy ZmFjZXMKKwlhcmUgYXZhaWxhYmxlLgorCShhbGxvd191bmlxdWVfc2VnbWVu dF9mb3Jfc2VjdGlvbnMpOiBOZXcgZ2xvYmFsLgorCSh1bmlxdWVfc2VnbWVu dF9mb3Jfc2VjdGlvbnMpOiBOZXcgZ2xvYmFsLgorCShjbGFpbV9maWxlX2hv b2spOiBDYWxsIGFsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucy4K KwkoYWxsX3N5bWJvbHNfcmVhZF9ob29rKTogQ2FsbCB1bmlxdWVfc2VnbWVu dF9mb3Jfc2VjdGlvbnMuCisJCisKIDIwMTItMDgtMjIgIENhcnkgQ291dGFu dCAgPGNjb3V0YW50QGdvb2dsZS5jb20+CiAKIAkqIGxheW91dC5jYyAoTGF5 b3V0OjppbmNsdWRlX3NlY3Rpb24pOiBEb24ndCBhc3NlcnQgb24gR1JPVVAK SW5kZXg6IGdvbGQvZ29sZC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ29sZC9nb2xkLmNjLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEwMApkaWZmIC11IC11IC1wIC1yMS4xMDAgZ29sZC5j YwotLS0gZ29sZC9nb2xkLmNjCTE2IEp1bCAyMDEyIDE5OjAwOjE4IC0wMDAw CTEuMTAwCisrKyBnb2xkL2dvbGQuY2MJMjQgQXVnIDIwMTIgMTg6MTY6NTgg LTAwMDAKQEAgLTUzMCwxMSArNTMwLDEzIEBAIHF1ZXVlX21pZGRsZV90YXNr cyhjb25zdCBHZW5lcmFsX29wdGlvbnMKIAogICAvLyBDYWxsIE9iamVjdDo6 bGF5b3V0IGZvciB0aGUgc2Vjb25kIHRpbWUgdG8gZGV0ZXJtaW5lIHRoZQog ICAvLyBvdXRwdXRfc2VjdGlvbnMgZm9yIGFsbCByZWZlcmVuY2VkIGlucHV0 IHNlY3Rpb25zLiAgV2hlbgotICAvLyAtLWdjLXNlY3Rpb25zIG9yIC0taWNm IGlzIHR1cm5lZCBvbiwgT2JqZWN0OjpsYXlvdXQgaXMKLSAgLy8gY2FsbGVk IHR3aWNlLiAgSXQgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lIHdoZW4gdGhl Ci0gIC8vIHN5bWJvbHMgYXJlIGFkZGVkLgorICAvLyAtLWdjLXNlY3Rpb25z IG9yIC0taWNmIGlzIHR1cm5lZCBvbiwgb3Igd2hlbiBjZXJ0YWluIGlucHV0 CisgIC8vIHNlY3Rpb25zIGhhdmUgdG8gYmUgbWFwcGVkIHRvIHVuaXF1ZSBz ZWdtZW50cywgT2JqZWN0OjpsYXlvdXQKKyAgLy8gaXMgY2FsbGVkIHR3aWNl LiAgSXQgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lIHdoZW4gc3ltYm9scwor ICAvLyBhcmUgYWRkZWQuCiAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCku Z2Nfc2VjdGlvbnMoKQotICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9ucygp LmljZl9lbmFibGVkKCkpCisgICAgICB8fCBwYXJhbWV0ZXJzLT5vcHRpb25z KCkuaWNmX2VuYWJsZWQoKQorICAgICAgfHwgbGF5b3V0LT5pc191bmlxdWVf c2VnbWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lmaWVkKCkpCiAgICAgewogICAg ICAgZm9yIChJbnB1dF9vYmplY3RzOjpSZWxvYmpfaXRlcmF0b3IgcCA9IGlu cHV0X29iamVjdHMtPnJlbG9ial9iZWdpbigpOwogCSAgIHAgIT0gaW5wdXRf b2JqZWN0cy0+cmVsb2JqX2VuZCgpOwpJbmRleDogZ29sZC9sYXlvdXQuY2MK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dvbGQvbGF5b3V0LmNjLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzNQpk aWZmIC11IC11IC1wIC1yMS4yMzUgbGF5b3V0LmNjCi0tLSBnb2xkL2xheW91 dC5jYwkyMiBBdWcgMjAxMiAxODoyNjozMiAtMDAwMAkxLjIzNQorKysgZ29s ZC9sYXlvdXQuY2MJMjQgQXVnIDIwMTIgMTg6MTY6NTggLTAwMDAKQEAgLTQw OCwxMiArNDA4LDE0IEBAIExheW91dDo6TGF5b3V0KGludCBudW1iZXJfb2Zf aW5wdXRfZmlsZXMKICAgICByZXNpemVkX3NpZ25hdHVyZXNfKGZhbHNlKSwK ICAgICBoYXZlX3N0YWJzdHJfc2VjdGlvbl8oZmFsc2UpLAogICAgIHNlY3Rp b25fb3JkZXJpbmdfc3BlY2lmaWVkXyhmYWxzZSksCisgICAgdW5pcXVlX3Nl Z21lbnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZF8oZmFsc2UpLAogICAgIGlu Y3JlbWVudGFsX2lucHV0c18oTlVMTCksCiAgICAgcmVjb3JkX291dHB1dF9z ZWN0aW9uX2RhdGFfZnJvbV9zY3JpcHRfKGZhbHNlKSwKICAgICBzY3JpcHRf b3V0cHV0X3NlY3Rpb25fZGF0YV9saXN0XygpLAogICAgIHNlZ21lbnRfc3Rh dGVzXyhOVUxMKSwKICAgICByZWxheGF0aW9uX2RlYnVnX2NoZWNrXyhOVUxM KSwKICAgICBzZWN0aW9uX29yZGVyX21hcF8oKSwKKyAgICBzZWN0aW9uX3Nl Z21lbnRfbWFwXygpLAogICAgIGlucHV0X3NlY3Rpb25fcG9zaXRpb25fKCks CiAgICAgaW5wdXRfc2VjdGlvbl9nbG9iXygpLAogICAgIGluY3JlbWVudGFs X2Jhc2VfKE5VTEwpLApAQCAtODI0LDYgKzgyNiwyNyBAQCBMYXlvdXQ6Omtl ZXBfaW5wdXRfc2VjdGlvbihjb25zdCBSZWxvYmoqCiAgIHJldHVybiBuYW1l ICE9IE5VTEwgJiYga2VlcDsKIH0KIAorLy8gQ2xlYXIgdGhlIGlucHV0IHNl Y3Rpb24gZmxhZ3MgdGhhdCBzaG91bGQgbm90IGJlIGNvcGllZCB0byB0aGUK Ky8vIG91dHB1dCBzZWN0aW9uLgorCitlbGZjcHA6OkVsZl9Yd29yZAorTGF5 b3V0OjpnZXRfb3V0cHV0X3NlY3Rpb25fZmxhZ3MoZWxmY3BwOjpFbGZfWHdv cmQgaW5wdXRfc2VjdGlvbl9mbGFncykKK3sKKyAgLy8gU29tZSBmbGFncyBp biB0aGUgaW5wdXQgc2VjdGlvbiBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2Fs bHkKKyAgLy8gY29waWVkIHRvIHRoZSBvdXRwdXQgc2VjdGlvbi4KKyAgaW5w dXRfc2VjdGlvbl9mbGFncyAmPSB+IChlbGZjcHA6OlNIRl9JTkZPX0xJTksK KwkJCSAgICB8IGVsZmNwcDo6U0hGX0dST1VQCisJCQkgICAgfCBlbGZjcHA6 OlNIRl9NRVJHRQorCQkJICAgIHwgZWxmY3BwOjpTSEZfU1RSSU5HUyk7CisK KyAgLy8gV2Ugb25seSBjbGVhciB0aGUgU0hGX0xJTktfT1JERVIgZmxhZyBp biBmb3IKKyAgLy8gYSBub24tcmVsb2NhdGFibGUgbGluay4KKyAgaWYgKCFw YXJhbWV0ZXJzLT5vcHRpb25zKCkucmVsb2NhdGFibGUoKSkKKyAgICBpbnB1 dF9zZWN0aW9uX2ZsYWdzICY9IH5lbGZjcHA6OlNIRl9MSU5LX09SREVSOwor CisgIHJldHVybiBpbnB1dF9zZWN0aW9uX2ZsYWdzOworfQorCiAvLyBQaWNr IHRoZSBvdXRwdXQgc2VjdGlvbiB0byB1c2UgZm9yIHNlY3Rpb24gTkFNRSwg aW4gaW5wdXQgZmlsZQogLy8gUkVMT0JKLCB3aXRoIHR5cGUgVFlQRSBhbmQg ZmxhZ3MgRkxBR1MuICBSRUxPQkogbWF5IGJlIE5VTEwgZm9yIGEKIC8vIGxp bmtlciBjcmVhdGVkIHNlY3Rpb24uICBJU19JTlBVVF9TRUNUSU9OIGlzIHRy dWUgaWYgd2UgYXJlCkBAIC04NDIsMTcgKzg2NSw3IEBAIExheW91dDo6Y2hv b3NlX291dHB1dF9zZWN0aW9uKGNvbnN0IFJlbG8KICAgLy8gc2VjdGlvbnMg dG8gc2VnbWVudHMuCiAgIGdvbGRfYXNzZXJ0KCFpc19pbnB1dF9zZWN0aW9u IHx8ICF0aGlzLT5zZWN0aW9uc19hcmVfYXR0YWNoZWRfKTsKIAotICAvLyBT b21lIGZsYWdzIGluIHRoZSBpbnB1dCBzZWN0aW9uIHNob3VsZCBub3QgYmUg YXV0b21hdGljYWxseQotICAvLyBjb3BpZWQgdG8gdGhlIG91dHB1dCBzZWN0 aW9uLgotICBmbGFncyAmPSB+IChlbGZjcHA6OlNIRl9JTkZPX0xJTksKLQkg ICAgICB8IGVsZmNwcDo6U0hGX0dST1VQCi0JICAgICAgfCBlbGZjcHA6OlNI Rl9NRVJHRQotCSAgICAgIHwgZWxmY3BwOjpTSEZfU1RSSU5HUyk7Ci0KLSAg Ly8gV2Ugb25seSBjbGVhciB0aGUgU0hGX0xJTktfT1JERVIgZmxhZyBpbiBm b3IKLSAgLy8gYSBub24tcmVsb2NhdGFibGUgbGluay4KLSAgaWYgKCFwYXJh bWV0ZXJzLT5vcHRpb25zKCkucmVsb2NhdGFibGUoKSkKLSAgICBmbGFncyAm PSB+ZWxmY3BwOjpTSEZfTElOS19PUkRFUjsKKyAgZmxhZ3MgPSB0aGlzLT5n ZXRfb3V0cHV0X3NlY3Rpb25fZmxhZ3MoZmxhZ3MpOwogCiAgIGlmICh0aGlz LT5zY3JpcHRfb3B0aW9uc18tPnNhd19zZWN0aW9uc19jbGF1c2UoKSkKICAg ICB7CkBAIC0xMDU0LDkgKzEwNjcsMzcgQEAgTGF5b3V0OjpsYXlvdXQoU2l6 ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYgogICAgIH0KICAgZWxzZQogICAgIHsK LSAgICAgIG9zID0gdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKG9iamVj dCwgbmFtZSwgc2hfdHlwZSwKLQkJCQkgICAgICAgc2hkci5nZXRfc2hfZmxh Z3MoKSwgdHJ1ZSwKLQkJCQkgICAgICAgT1JERVJfSU5WQUxJRCwgZmFsc2Up OworICAgICAgLy8gUGx1Z2lucyBjYW4gY2hvb3NlIHRvIHBsYWNlIG9uZSBv ciBtb3JlIHN1YnNldHMgb2Ygc2VjdGlvbnMgaW4KKyAgICAgIC8vIHVuaXF1 ZSBzZWdtZW50cyBhbmQgdGhpcyBpcyBkb25lIGJ5IG1hcHBpbmcgdGhlc2Ug c2VjdGlvbiBzdWJzZXRzCisgICAgICAvLyB0byB1bmlxdWUgb3V0cHV0IHNl Y3Rpb25zLiAgQ2hlY2sgaWYgdGhpcyBzZWN0aW9uIG5lZWRzIHRvIGJlCisg ICAgICAvLyByZW1hcHBlZCB0byBhIHVuaXF1ZSBvdXRwdXQgc2VjdGlvbi4K KyAgICAgIFNlY3Rpb25fc2VnbWVudF9tYXA6Oml0ZXJhdG9yIGl0CisJICA9 IHRoaXMtPnNlY3Rpb25fc2VnbWVudF9tYXBfLmZpbmQoQ29uc3Rfc2VjdGlv bl9pZChvYmplY3QsIHNobmR4KSk7CisgICAgICBpZiAoaXQgPT0gdGhpcy0+ c2VjdGlvbl9zZWdtZW50X21hcF8uZW5kKCkpCisJeworICAgICAgICAgIG9z ID0gdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKG9iamVjdCwgbmFtZSwg c2hfdHlwZSwKKwkJCQkJICAgc2hkci5nZXRfc2hfZmxhZ3MoKSwgdHJ1ZSwK KwkJCQkJICAgT1JERVJfSU5WQUxJRCwgZmFsc2UpOworCX0KKyAgICAgIGVs c2UKKwl7CisJICAvLyBXZSBrbm93IHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQg c2VjdGlvbiwgZGlyZWN0bHkgY2FsbAorCSAgLy8gZ2V0X291dHB1dF9zZWN0 aW9uIGhlcmUgYnktcGFzc2luZyBjaG9vc2Vfb3V0cHV0X3NlY3Rpb24uCisJ ICBlbGZjcHA6OkVsZl9Yd29yZCBmbGFncworCSAgICA9IHRoaXMtPmdldF9v dXRwdXRfc2VjdGlvbl9mbGFncyhzaGRyLmdldF9zaF9mbGFncygpKTsKKwor CSAgY29uc3QgY2hhciogb3NfbmFtZSA9IGl0LT5zZWNvbmQtPm5hbWU7CisJ ICBTdHJpbmdwb29sOjpLZXkgbmFtZV9rZXk7CisJICBvc19uYW1lID0gdGhp cy0+bmFtZXBvb2xfLmFkZChvc19uYW1lLCB0cnVlLCAmbmFtZV9rZXkpOwor CSAgb3MgPSB0aGlzLT5nZXRfb3V0cHV0X3NlY3Rpb24ob3NfbmFtZSwgbmFt ZV9rZXksIHNoX3R5cGUsIGZsYWdzLAorCQkJCQlPUkRFUl9JTlZBTElELCBm YWxzZSk7CisJICBpZiAoIW9zLT5pc191bmlxdWVfc2VnbWVudCgpKQorCSAg ICB7CisJICAgICAgb3MtPnNldF9pc191bmlxdWVfc2VnbWVudCgpOworCSAg ICAgIG9zLT5zZXRfZXh0cmFfc2VnbWVudF9mbGFncyhpdC0+c2Vjb25kLT5m bGFncyk7CisJICAgICAgb3MtPnNldF9zZWdtZW50X2FsaWdubWVudChpdC0+ c2Vjb25kLT5hbGlnbik7CisJICAgIH0KKwl9CiAgICAgICBpZiAob3MgPT0g TlVMTCkKIAlyZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMTE2LDYgKzExNTcs MTUgQEAgTGF5b3V0OjpsYXlvdXQoU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwg YgogICByZXR1cm4gb3M7CiB9CiAKKy8vIE1hcHMgc2VjdGlvbiBTRUNOIHRv IFNFR01FTlQgcy4KK3ZvaWQKK0xheW91dDo6aW5zZXJ0X3NlY3Rpb25fc2Vn bWVudF9tYXAoQ29uc3Rfc2VjdGlvbl9pZCBzZWNuLAorCQkJCSAgIFVuaXF1 ZV9zZWdtZW50X2luZm8gKnMpCit7CisgIGdvbGRfYXNzZXJ0KHRoaXMtPnVu aXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9uc19zcGVjaWZpZWRfKTsgCisgIHRo aXMtPnNlY3Rpb25fc2VnbWVudF9tYXBfW3NlY25dID0gczsKK30KKwogLy8g SGFuZGxlIGEgcmVsb2NhdGlvbiBzZWN0aW9uIHdoZW4gZG9pbmcgYSByZWxv Y2F0YWJsZSBsaW5rLgogCiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdf ZW5kaWFuPgpAQCAtMTcxOCw2ICsxNzY4LDEwIEBAIExheW91dDo6YXR0YWNo X2FsbG9jYXRlZF9zZWN0aW9uX3RvX3NlZ20KIAogICBlbGZjcHA6OkVsZl9X b3JkIHNlZ19mbGFncyA9IExheW91dDo6c2VjdGlvbl9mbGFnc190b19zZWdt ZW50KGZsYWdzKTsKIAorICAvLyBJZiB0aGlzIG91dHB1dCBzZWN0aW9uJ3Mg c2VnbWVudCBoYXMgZXh0cmEgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlIHNldCwK KyAgLy8gY29taW5nIGZyb20gYSBsaW5rZXIgcGx1Z2luLCBkbyB0aGF0Lgor ICBzZWdfZmxhZ3MgfD0gb3MtPmV4dHJhX3NlZ21lbnRfZmxhZ3MoKTsKKwog ICAvLyBDaGVjayBmb3IgLS1zZWN0aW9uLXN0YXJ0LgogICB1aW50NjRfdCBh ZGRyOwogICBib29sIGlzX2FkZHJlc3Nfc2V0ID0gcGFyYW1ldGVycy0+b3B0 aW9ucygpLnNlY3Rpb25fc3RhcnQob3MtPm5hbWUoKSwgJmFkZHIpOwpAQCAt MTczMCw0NSArMTc4NCw1MSBAQCBMYXlvdXQ6OmF0dGFjaF9hbGxvY2F0ZWRf c2VjdGlvbl90b19zZWdtCiAgIC8vIGhhdmUgdG8gdXNlIGEgbGlua2VyIHNj cmlwdC4KIAogICBTZWdtZW50X2xpc3Q6OmNvbnN0X2l0ZXJhdG9yIHA7Ci0g IGZvciAocCA9IHRoaXMtPnNlZ21lbnRfbGlzdF8uYmVnaW4oKTsKLSAgICAg ICBwICE9IHRoaXMtPnNlZ21lbnRfbGlzdF8uZW5kKCk7Ci0gICAgICAgKytw KQorICBpZiAoIW9zLT5pc191bmlxdWVfc2VnbWVudCgpKQogICAgIHsKLSAg ICAgIGlmICgoKnApLT50eXBlKCkgIT0gZWxmY3BwOjpQVF9MT0FEKQotCWNv bnRpbnVlOwotICAgICAgaWYgKCFwYXJhbWV0ZXJzLT5vcHRpb25zKCkub21h Z2ljKCkKLQkgICYmICgoKnApLT5mbGFncygpICYgZWxmY3BwOjpQRl9XKSAh PSAoc2VnX2ZsYWdzICYgZWxmY3BwOjpQRl9XKSkKLQljb250aW51ZTsKLSAg ICAgIGlmICgodGFyZ2V0LT5pc29sYXRlX2V4ZWNpbnN0cigpIHx8IHBhcmFt ZXRlcnMtPm9wdGlvbnMoKS5yb3NlZ21lbnQoKSkKLQkgICYmICgoKnApLT5m bGFncygpICYgZWxmY3BwOjpQRl9YKSAhPSAoc2VnX2ZsYWdzICYgZWxmY3Bw OjpQRl9YKSkKLQljb250aW51ZTsKLSAgICAgIC8vIElmIC1UYnNzIHdhcyBz cGVjaWZpZWQsIHdlIG5lZWQgdG8gc2VwYXJhdGUgdGhlIGRhdGEgYW5kIEJT UwotICAgICAgLy8gc2VnbWVudHMuCi0gICAgICBpZiAocGFyYW1ldGVycy0+ b3B0aW9ucygpLnVzZXJfc2V0X1Ric3MoKSkKLQl7Ci0JICBpZiAoKG9zLT50 eXBlKCkgPT0gZWxmY3BwOjpTSFRfTk9CSVRTKQotCSAgICAgID09ICgqcCkt Pmhhc19hbnlfZGF0YV9zZWN0aW9ucygpKQotCSAgICBjb250aW51ZTsKLQl9 Ci0gICAgICBpZiAob3MtPmlzX2xhcmdlX2RhdGFfc2VjdGlvbigpICYmICEo KnApLT5pc19sYXJnZV9kYXRhX3NlZ21lbnQoKSkKLQljb250aW51ZTsKLQot ICAgICAgaWYgKGlzX2FkZHJlc3Nfc2V0KQorICAgICAgZm9yIChwID0gdGhp cy0+c2VnbWVudF9saXN0Xy5iZWdpbigpOworIAkgICBwICE9IHRoaXMtPnNl Z21lbnRfbGlzdF8uZW5kKCk7CisJICAgKytwKQogCXsKLQkgIGlmICgoKnAp LT5hcmVfYWRkcmVzc2VzX3NldCgpKQotCSAgICBjb250aW51ZTsKLQotCSAg KCpwKS0+YWRkX2luaXRpYWxfb3V0cHV0X2RhdGEob3MpOwotCSAgKCpwKS0+ dXBkYXRlX2ZsYWdzX2Zvcl9vdXRwdXRfc2VjdGlvbihzZWdfZmxhZ3MpOwot CSAgKCpwKS0+c2V0X2FkZHJlc3NlcyhhZGRyLCBhZGRyKTsKLQkgIGJyZWFr OwotCX0KLQotICAgICAgKCpwKS0+YWRkX291dHB1dF9zZWN0aW9uX3RvX2xv YWQodGhpcywgb3MsIHNlZ19mbGFncyk7Ci0gICAgICBicmVhazsKKwkgIGlm ICgoKnApLT50eXBlKCkgIT0gZWxmY3BwOjpQVF9MT0FEKSAgICAgICAgICAg ICAgICAgICAgICAgIAorCSAgICBjb250aW51ZTsgICAgICAgICAgICAgICAg ICAgICAgICAKKwkgIGlmICgoKnApLT5pc191bmlxdWVfc2VnbWVudCgpKSAg ICAgICAgICAgICAgICAgICAgICAgIAorCSAgICBjb250aW51ZTsgICAgICAg ICAgICAgICAgICAgICAgICAKKwkgIGlmICghcGFyYW1ldGVycy0+b3B0aW9u cygpLm9tYWdpYygpICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgICAg JiYgKCgqcCktPmZsYWdzKCkgJiBlbGZjcHA6OlBGX1cpICE9IChzZWdfZmxh Z3MgJiBlbGZjcHA6OlBGX1cpKSAgICAgICAgICAgICAgICAgICAgICAgIAor CSAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAKKwkgIGlm ICgodGFyZ2V0LT5pc29sYXRlX2V4ZWNpbnN0cigpIHx8IHBhcmFtZXRlcnMt Pm9wdGlvbnMoKS5yb3NlZ21lbnQoKSkgICAgICAgICAgICAgICAgICAgICAg ICAKKwkgICAgICAmJiAoKCpwKS0+ZmxhZ3MoKSAmIGVsZmNwcDo6UEZfWCkg IT0gKHNlZ19mbGFncyAmIGVsZmNwcDo6UEZfWCkpICAgICAgICAgICAgICAg ICAgICAgICAgCisJICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAg ICAgIAorCSAgLy8gSWYgLVRic3Mgd2FzIHNwZWNpZmllZCwgd2UgbmVlZCB0 byBzZXBhcmF0ZSB0aGUgZGF0YSBhbmQgQlNTICAgICAgICAgICAgICAgICAg ICAgICAgCisJICAvLyBzZWdtZW50cy4gICAgICAgICAgICAgICAgICAgICAg ICAKKwkgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkudXNlcl9zZXRfVGJz cygpKSAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICB7ICAgICAgICAg ICAgICAgICAgICAgICAgCisJICAgICAgaWYgKChvcy0+dHlwZSgpID09IGVs ZmNwcDo6U0hUX05PQklUUykgICAgICAgICAgICAgICAgICAgICAgICAKKwkg ICAgICAgICAgPT0gKCpwKS0+aGFzX2FueV9kYXRhX3NlY3Rpb25zKCkpICAg ICAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICBjb250aW51ZTsgICAg ICAgICAgICAgICAgICAgICAgICAKKwkgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgIAorCSAgaWYgKG9zLT5pc19sYXJnZV9kYXRhX3NlY3Rpb24oKSAm JiAhKCpwKS0+aXNfbGFyZ2VfZGF0YV9zZWdtZW50KCkpICAgICAgICAgICAg ICAgICAgICAgICAgCisJICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAg ICAgICAgIAorCSAgICAgICAgICAgICAgICAgICAgCisJICBpZiAoaXNfYWRk cmVzc19zZXQpICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgIHsgICAg ICAgICAgICAgICAgICAgICAgICAKKwkgICAgICBpZiAoKCpwKS0+YXJlX2Fk ZHJlc3Nlc19zZXQoKSkgICAgICAgICAgICAgICAgICAgICAgICAKKwkgICAg ICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICAg ICAgICAgICAgICAgICAgCisJICAgICAgKCpwKS0+YWRkX2luaXRpYWxfb3V0 cHV0X2RhdGEob3MpOyAgICAgICAgICAgICAgICAgICAgICAgIAorCSAgICAg ICgqcCktPnVwZGF0ZV9mbGFnc19mb3Jfb3V0cHV0X3NlY3Rpb24oc2VnX2Zs YWdzKTsgICAgICAgICAgICAgICAgICAgICAgICAKKwkgICAgICAoKnApLT5z ZXRfYWRkcmVzc2VzKGFkZHIsIGFkZHIpOyAgICAgICAgICAgICAgICAgICAg ICAgIAorCSAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgIAor CSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCisJICAgICAgICAgICAg ICAgICAgICAKKwkgICgqcCktPmFkZF9vdXRwdXRfc2VjdGlvbl90b19sb2Fk KHRoaXMsIG9zLCBzZWdfZmxhZ3MpOyAgICAgICAgICAgICAgICAgICAgICAg IAorCSAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgCisJfSAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgIH0KIAotICBpZiAocCA9PSB0aGlz LT5zZWdtZW50X2xpc3RfLmVuZCgpKQorICBpZiAocCA9PSB0aGlzLT5zZWdt ZW50X2xpc3RfLmVuZCgpCisgICAgICB8fCBvcy0+aXNfdW5pcXVlX3NlZ21l bnQoKSkKICAgICB7CiAgICAgICBPdXRwdXRfc2VnbWVudCogb3NlZyA9IHRo aXMtPm1ha2Vfb3V0cHV0X3NlZ21lbnQoZWxmY3BwOjpQVF9MT0FELAogCQkJ CQkJICAgICAgIHNlZ19mbGFncyk7CkBAIC0xNzc3LDYgKzE4MzcsMTQgQEAg TGF5b3V0OjphdHRhY2hfYWxsb2NhdGVkX3NlY3Rpb25fdG9fc2VnbQogICAg ICAgb3NlZy0+YWRkX291dHB1dF9zZWN0aW9uX3RvX2xvYWQodGhpcywgb3Ms IHNlZ19mbGFncyk7CiAgICAgICBpZiAoaXNfYWRkcmVzc19zZXQpCiAJb3Nl Zy0+c2V0X2FkZHJlc3NlcyhhZGRyLCBhZGRyKTsKKyAgICAgIC8vIENoZWNr IGlmIHNlZ21lbnQgc2hvdWxkIGJlIG1hcmtlZCB1bmlxdWUuICBGb3Igc2Vn bWVudHMgbWFya2VkCisgICAgICAvLyB1bmlxdWUgYnkgbGlua2VyIHBsdWdp bnMsIHNldCB0aGUgbmV3IGFsaWdubWVudCBpZiBzcGVjaWZpZWQuCisgICAg ICBpZiAob3MtPmlzX3VuaXF1ZV9zZWdtZW50KCkpCisJeworCSAgb3NlZy0+ c2V0X2lzX3VuaXF1ZV9zZWdtZW50KCk7CisJICBpZiAob3MtPnNlZ21lbnRf YWxpZ25tZW50KCkgIT0gMCkKKwkgICAgb3NlZy0+c2V0X21pbmltdW1fcF9h bGlnbihvcy0+c2VnbWVudF9hbGlnbm1lbnQoKSk7CisJfQogICAgIH0KIAog ICAvLyBJZiB3ZSBzZWUgYSBsb2FkYWJsZSBTSFRfTk9URSBzZWN0aW9uLCB3 ZSBjcmVhdGUgYSBQVF9OT1RFCkBAIC0zMTIxLDkgKzMxODksMTEgQEAgTGF5 b3V0OjpzZWdtZW50X3ByZWNlZGVzKGNvbnN0IE91dHB1dF9zZQogCiAgIC8v IFdlIHNob3VsZG4ndCBnZXQgaGVyZS0td2Ugc2hvdWxkbid0IGNyZWF0ZSBz ZWdtZW50cyB3aGljaCB3ZQogICAvLyBjYW4ndCBkaXN0aW5ndWlzaC4gIFVu bGVzcyBvZiBjb3Vyc2Ugd2UgYXJlIHVzaW5nIGEgd2VpcmQgbGlua2VyCi0g IC8vIHNjcmlwdCBvciBvdmVybGFwcGluZyAtLXNlY3Rpb24tc3RhcnQgb3B0 aW9ucy4KKyAgLy8gc2NyaXB0IG9yIG92ZXJsYXBwaW5nIC0tc2VjdGlvbi1z dGFydCBvcHRpb25zLiAgV2UgY291bGQgYWxzbyBnZXQKKyAgLy8gaGVyZSBp ZiBwbHVnaW5zIHdhbnQgdW5pcXVlIHNlZ21lbnRzIGZvciBzdWJzZXRzIG9m IHNlY3Rpb25zLgogICBnb2xkX2Fzc2VydCh0aGlzLT5zY3JpcHRfb3B0aW9u c18tPnNhd19waGRyc19jbGF1c2UoKQotCSAgICAgIHx8IHBhcmFtZXRlcnMt Pm9wdGlvbnMoKS5hbnlfc2VjdGlvbl9zdGFydCgpKTsKKwkgICAgICB8fCBw YXJhbWV0ZXJzLT5vcHRpb25zKCkuYW55X3NlY3Rpb25fc3RhcnQoKQorCSAg ICAgIHx8IHRoaXMtPmlzX3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9uc19z cGVjaWZpZWQoKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogZ29s ZC9sYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ29sZC9sYXlvdXQuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xMDQKZGlmZiAtdSAtdSAtcCAtcjEuMTA0IGxheW91dC5oCi0tLSBn b2xkL2xheW91dC5oCTE0IEF1ZyAyMDEyIDA4OjMxOjU2IC0wMDAwCTEuMTA0 CisrKyBnb2xkL2xheW91dC5oCTI0IEF1ZyAyMDEyIDE4OjE2OjU4IC0wMDAw CkBAIC01MjgsNiArNTI4LDMwIEBAIGNsYXNzIExheW91dAogICBnZXRfc2Vj dGlvbl9vcmRlcl9tYXAoKQogICB7IHJldHVybiAmdGhpcy0+c2VjdGlvbl9v cmRlcl9tYXBfOyB9CiAKKyAgLy8gU3RydWN0IHRvIHN0b3JlIHNlZ21lbnQg aW5mbyB3aGVuIG1hcHBpbmcgc29tZSBpbnB1dCBzZWN0aW9ucyB0bworICAv LyB1bmlxdWUgc2VnbWVudHMgdXNpbmcgbGlua2VyIHBsdWdpbnMuICBNYXBw aW5nIGFuIGlucHV0IHNlY3Rpb24gdG8KKyAgLy8gYSB1bmlxdWUgc2VnbWVu dCBpcyBkb25lIGJ5IGZpcnN0IHBsYWNpbmcgc3VjaCBpbnB1dCBzZWN0aW9u cyBpbgorICAvLyB1bmlxdWUgb3V0cHV0IHNlY3Rpb25zIGFuZCB0aGVuIG1h cHBpbmcgdGhlIG91dHB1dCBzZWN0aW9uIHRvIGEKKyAgLy8gdW5pcXVlIHNl Z21lbnQuICBOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgc2VjdGlv bi4gIEZMQUdTCisgIC8vIGFuZCBBTElHTiBhcmUgdGhlIGV4dHJhIGZsYWdz IGFuZCBhbGlnbm1lbnQgb2YgdGhlIHNlZ21lbnQuCisgIHN0cnVjdCBVbmlx dWVfc2VnbWVudF9pbmZvCisgIHsKKyAgICAvLyBJZGVudGlmaWVyIGZvciB0 aGUgc2VnbWVudC4gIEVMRiBzZWdtZW50cyBkb250IGhhdmUgbmFtZXMuCisg ICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAvLyBBZGRpdGlvbmFsIHNlZ21l bnQgZmxhZ3MuCisgICAgdWludDY0X3QgZmxhZ3M7CisgICAgLy8gU2VnbWVu dCBhbGlnbm1lbnQuCisgICAgdWludDY0X3QgYWxpZ247CisgIH07CisKKyAg Ly8gTWFwcGluZyBmcm9tIGlucHV0IHNlY3Rpb24gdG8gc2VnbWVudC4KKyAg dHlwZWRlZiBzdGQ6Om1hcDxDb25zdF9zZWN0aW9uX2lkLCBVbmlxdWVfc2Vn bWVudF9pbmZvKj4KKyAgU2VjdGlvbl9zZWdtZW50X21hcDsKKworICAvLyBN YXBzIHNlY3Rpb24gU0VDTiB0byBTRUdNRU5UIHMuCisgIHZvaWQKKyAgaW5z ZXJ0X3NlY3Rpb25fc2VnbWVudF9tYXAoQ29uc3Rfc2VjdGlvbl9pZCBzZWNu LCBVbmlxdWVfc2VnbWVudF9pbmZvICpzKTsKKyAgCiAgIGJvb2wKICAgaXNf c2VjdGlvbl9vcmRlcmluZ19zcGVjaWZpZWQoKQogICB7IHJldHVybiB0aGlz LT5zZWN0aW9uX29yZGVyaW5nX3NwZWNpZmllZF87IH0KQEAgLTUzNiw2ICs1 NjAsMTQgQEAgY2xhc3MgTGF5b3V0CiAgIHNldF9zZWN0aW9uX29yZGVyaW5n X3NwZWNpZmllZCgpCiAgIHsgdGhpcy0+c2VjdGlvbl9vcmRlcmluZ19zcGVj aWZpZWRfID0gdHJ1ZTsgfQogCisgIGJvb2wKKyAgaXNfdW5pcXVlX3NlZ21l bnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZCgpIGNvbnN0CisgIHsgcmV0dXJu IHRoaXMtPnVuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9uc19zcGVjaWZpZWRf OyB9CisKKyAgdm9pZAorICBzZXRfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rp b25zX3NwZWNpZmllZCgpCisgIHsgdGhpcy0+dW5pcXVlX3NlZ21lbnRfZm9y X3NlY3Rpb25zX3NwZWNpZmllZF8gPSB0cnVlOyB9CisKICAgLy8gRm9yIGlu Y3JlbWVudGFsIHVwZGF0ZXMsIGFsbG9jYXRlIGEgYmxvY2sgb2YgbWVtb3J5 IGZyb20gdGhlCiAgIC8vIGZyZWUgbGlzdC4gIEZpbmQgYSBibG9jayBzdGFy dGluZyBhdCBvciBhZnRlciBNSU5PRkYuCiAgIG9mZl90CkBAIC0xMDcwLDYg KzExMDIsMTEgQEAgY2xhc3MgTGF5b3V0CiAJCSAgICAgZWxmY3BwOjpFbGZf V29yZCB0eXBlLCBlbGZjcHA6OkVsZl9Yd29yZCBmbGFncywKIAkJICAgICBP dXRwdXRfc2VjdGlvbl9vcmRlciBvcmRlciwgYm9vbCBpc19yZWxybyk7CiAK KyAgLy8gQ2xlYXIgdGhlIGlucHV0IHNlY3Rpb24gZmxhZ3MgdGhhdCBzaG91 bGQgbm90IGJlIGNvcGllZCB0byB0aGUKKyAgLy8gb3V0cHV0IHNlY3Rpb24u CisgIGVsZmNwcDo6RWxmX1h3b3JkCisgIGdldF9vdXRwdXRfc2VjdGlvbl9m bGFncyAoZWxmY3BwOjpFbGZfWHdvcmQgaW5wdXRfc2VjdGlvbl9mbGFncyk7 CisKICAgLy8gQ2hvb3NlIHRoZSBvdXRwdXQgc2VjdGlvbiBmb3IgTkFNRSBp biBSRUxPQkouCiAgIE91dHB1dF9zZWN0aW9uKgogICBjaG9vc2Vfb3V0cHV0 X3NlY3Rpb24oY29uc3QgUmVsb2JqKiByZWxvYmosIGNvbnN0IGNoYXIqIG5h bWUsCkBAIC0xMzM2LDYgKzEzNzMsOSBAQCBjbGFzcyBMYXlvdXQKICAgLy8g VHJ1ZSBpZiB0aGUgaW5wdXQgc2VjdGlvbnMgaW4gdGhlIG91dHB1dCBzZWN0 aW9ucyBzaG91bGQgYmUgc29ydGVkCiAgIC8vIGFzIHNwZWNpZmllZCBpbiBh IHNlY3Rpb24gb3JkZXJpbmcgZmlsZS4KICAgYm9vbCBzZWN0aW9uX29yZGVy aW5nX3NwZWNpZmllZF87CisgIC8vIFRydWUgaWYgc29tZSBpbnB1dCBzZWN0 aW9ucyBuZWVkIHRvIGJlIG1hcHBlZCB0byBhIHVuaXF1ZSBzZWdtZW50LAor ICAvLyBhZnRlciBiZWluZyBtYXBwZWQgdG8gYSB1bmlxdWUgT3V0cHV0X3Nl Y3Rpb24uCisgIGJvb2wgdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zX3Nw ZWNpZmllZF87CiAgIC8vIEluIGluY3JlbWVudGFsIGJ1aWxkLCBob2xkcyBp bmZvcm1hdGlvbiBjaGVjayB0aGUgaW5wdXRzIGFuZCBidWlsZCB0aGUKICAg Ly8gLmdudV9pbmNyZW1lbnRhbF9pbnB1dHMgc2VjdGlvbi4KICAgSW5jcmVt ZW50YWxfaW5wdXRzKiBpbmNyZW1lbnRhbF9pbnB1dHNfOwpAQCAtMTM1MCw2 ICsxMzkwLDExIEBAIGNsYXNzIExheW91dAogICAvLyBQbHVnaW5zIHNwZWNp Znkgc2VjdGlvbl9vcmRlcmluZyB1c2luZyB0aGlzIG1hcC4gIFRoaXMgaXMg c2V0IGluCiAgIC8vIHVwZGF0ZV9zZWN0aW9uX29yZGVyIGluIHBsdWdpbi5j YwogICBzdGQ6Om1hcDxTZWN0aW9uX2lkLCB1bnNpZ25lZCBpbnQ+IHNlY3Rp b25fb3JkZXJfbWFwXzsKKyAgLy8gVGhpcyBtYXBzIGFuIGlucHV0IHNlY3Rp b24gdG8gYSB1bmlxdWUgc2VnbWVudC4gVGhpcyBpcyBkb25lIGJ5IGZpcnN0 CisgIC8vIHBsYWNpbmcgc3VjaCBpbnB1dCBzZWN0aW9ucyBpbiB1bmlxdWUg b3V0cHV0IHNlY3Rpb25zIGFuZCB0aGVuIG1hcHBpbmcKKyAgLy8gdGhlIG91 dHB1dCBzZWN0aW9uIHRvIGEgdW5pcXVlIHNlZ21lbnQuICBVbmlxdWVfc2Vn bWVudF9pbmZvIHN0b3JlcworICAvLyBhbnkgYWRkaXRpb25hbCBmbGFncyBh bmQgYWxpZ25tZW50IG9mIHRoZSBuZXcgc2VnbWVudC4KKyAgU2VjdGlvbl9z ZWdtZW50X21hcCBzZWN0aW9uX3NlZ21lbnRfbWFwXzsKICAgLy8gSGFzaCBh IHBhdHRlcm4gdG8gaXRzIHBvc2l0aW9uIGluIHRoZSBzZWN0aW9uIG9yZGVy aW5nIGZpbGUuCiAgIFVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVuc2ln bmVkIGludD4gaW5wdXRfc2VjdGlvbl9wb3NpdGlvbl87CiAgIC8vIFZlY3Rv ciBvZiBnbG9iIG9ubHkgcGF0dGVybnMgaW4gdGhlIHNlY3Rpb25fb3JkZXJp bmcgZmlsZS4KSW5kZXg6IGdvbGQvb2JqZWN0LmNjCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL29iamVjdC5j Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTcKZGlmZiAtdSAtdSAtcCAt cjEuMTU3IG9iamVjdC5jYwotLS0gZ29sZC9vYmplY3QuY2MJMTQgQXVnIDIw MTIgMDg6MzE6NTYgLTAwMDAJMS4xNTcKKysrIGdvbGQvb2JqZWN0LmNjCTI0 IEF1ZyAyMDEyIDE4OjE2OjU5IC0wMDAwCkBAIC0xMjIxLDE1ICsxMjIxLDE5 IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+OjpsYXkK IC8vIHdoZXRoZXIgdGhleSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGxp bmsuICBJZiB0aGV5IHNob3VsZCwgd2UKIC8vIHBhc3MgdGhlbSB0byB0aGUg TGF5b3V0IG9iamVjdCwgd2hpY2ggd2lsbCByZXR1cm4gYW4gb3V0cHV0IHNl Y3Rpb24KIC8vIGFuZCBhbiBvZmZzZXQuCi0vLyBEdXJpbmcgZ2FyYmFnZSBj b2xsZWN0aW9uICgtLWdjLXNlY3Rpb25zKSBhbmQgaWRlbnRpY2FsIGNvZGUg Zm9sZGluZwotLy8gKC0taWNmKSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg dHdpY2UuICBXaGVuIGl0IGlzIGNhbGxlZCB0aGUgZmlyc3QKLS8vIHRpbWUs IGl0IGlzIGZvciBzZXR0aW5nIHVwIHNvbWUgc2VjdGlvbnMgYXMgcm9vdHMg dG8gYSB3b3JrLWxpc3QgZm9yCi0vLyAtLWdjLXNlY3Rpb25zIGFuZCB0byBk byBjb21kYXQgcHJvY2Vzc2luZy4gIEFjdHVhbCBsYXlvdXQgaGFwcGVucyB0 aGUKLS8vIHNlY29uZCB0aW1lIGFyb3VuZCBhZnRlciBhbGwgdGhlIHJlbGV2 YW50IHNlY3Rpb25zIGhhdmUgYmVlbiBkZXRlcm1pbmVkLgotLy8gVGhlIGZp cnN0IHRpbWUsIGlzX3dvcmtsaXN0X3JlYWR5IG9yIGlzX2ljZl9yZWFkeSBp cyBmYWxzZS4gSXQgaXMgdGhlbgotLy8gc2V0IHRvIHRydWUgYWZ0ZXIgdGhl IGdhcmJhZ2UgY29sbGVjdGlvbiB3b3JrbGlzdCBvciBpZGVudGljYWwgY29k ZQotLy8gZm9sZGluZyBpcyBwcm9jZXNzZWQgYW5kIHRoZSByZWxldmFudCBz ZWN0aW9ucyB0byBiZSBrZXB0IGFyZQotLy8gZGV0ZXJtaW5lZC4gIFRoZW4s IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluIHRvIGxheW91dCB0aGUg c2VjdGlvbnMuCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0d2ljZSBz b21ldGltZXMsIHR3byBwYXNzZXMsIHdoZW4gbWFwcGluZworLy8gb2YgaW5w dXQgc2VjdGlvbnMgdG8gb3V0cHV0IHNlY3Rpb25zIG11c3QgYmUgZGVsYXll ZC4KKy8vIFRoaXMgaXMgdHJ1ZSBmb3IgdGhlIGZvbGxvd2luZyA6CisvLyAq IEdhcmJhZ2UgY29sbGVjdGlvbiAoLS1nYy1zZWN0aW9ucyk6IFNvbWUgaW5w dXQgc2VjdGlvbnMgd2lsbCBiZQorLy8gZGlzY2FyZGVkIGFuZCBoZW5jZSB0 aGUgYXNzaWdubWVudCBtdXN0IHdhaXQgdW50aWwgdGhlIHNlY29uZCBwYXNz LgorLy8gSW4gdGhlIGZpcnN0IHBhc3MsICBpdCBpcyBmb3Igc2V0dGluZyB1 cCBzb21lIHNlY3Rpb25zIGFzIHJvb3RzIHRvCisvLyBhIHdvcmstbGlzdCBm b3IgLS1nYy1zZWN0aW9ucyBhbmQgdG8gZG8gY29tZGF0IHByb2Nlc3Npbmcu CisvLyAqIElkZW50aWNhbCBDb2RlIEZvbGRpbmcgKC0taWNmPTxzYWZlLGFs bD4pOiBTb21lIGlucHV0IHNlY3Rpb25zCisvLyB3aWxsIGJlIGZvbGRlZCBh bmQgaGVuY2UgdGhlIGFzc2lnbm1lbnQgbXVzdCB3YWl0LgorLy8gKiBVc2lu ZyBwbHVnaW5zIHRvIG1hcCBzb21lIHNlY3Rpb25zIHRvIHVuaXF1ZSBzZWdt ZW50czogTWFwcGluZworLy8gc29tZSBzZWN0aW9ucyB0byB1bmlxdWUgc2Vn bWVudHMgcmVxdWlyZXMgbWFwcGluZyB0aGVtIHRvIHVuaXF1ZQorLy8gb3V0 cHV0IHNlY3Rpb25zIHRvby4gIFRoaXMgY2FuIGJlIGRvbmUgdmlhIHBsdWdp bnMgbm93IGFuZCB0aGlzCisvLyBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxh YmxlIGluIHRoZSBmaXJzdCBwYXNzLgogCiB0ZW1wbGF0ZTxpbnQgc2l6ZSwg Ym9vbCBiaWdfZW5kaWFuPgogdm9pZApAQCAtMTIzOCwyNiArMTI0Miw0NCBA QCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAJ CQkJCSAgICAgICBSZWFkX3N5bWJvbHNfZGF0YSogc2QpCiB7CiAgIGNvbnN0 IHVuc2lnbmVkIGludCBzaG51bSA9IHRoaXMtPnNobnVtKCk7Ci0gIGJvb2wg aXNfZ2NfcGFzc19vbmUgPSAoKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5nY19z ZWN0aW9ucygpCi0JCQkgICYmICFzeW10YWItPmdjKCktPmlzX3dvcmtsaXN0 X3JlYWR5KCkpCi0JCQkgfHwgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5pY2Zf ZW5hYmxlZCgpCi0JCQkgICAgICYmICFzeW10YWItPmljZigpLT5pc19pY2Zf cmVhZHkoKSkpOwotCi0gIGJvb2wgaXNfZ2NfcGFzc190d28gPSAoKHBhcmFt ZXRlcnMtPm9wdGlvbnMoKS5nY19zZWN0aW9ucygpCi0JCQkgICYmIHN5bXRh Yi0+Z2MoKS0+aXNfd29ya2xpc3RfcmVhZHkoKSkKLQkJCSB8fCAocGFyYW1l dGVycy0+b3B0aW9ucygpLmljZl9lbmFibGVkKCkKLQkJCSAgICAgJiYgc3lt dGFiLT5pY2YoKS0+aXNfaWNmX3JlYWR5KCkpKTsKIAotICBib29sIGlzX2dj X29yX2ljZiA9IChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuZ2Nfc2VjdGlvbnMo KQotCQkgICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFi bGVkKCkpOworICAvKiBTaG91bGQgdGhpcyBmdW5jdGlvbiBiZSBjYWxsZWQg dHdpY2U/ICAqLworICBib29sIGlzX3R3b19wYXNzID0gKHBhcmFtZXRlcnMt Pm9wdGlvbnMoKS5nY19zZWN0aW9ucygpCisJCSAgICAgIHx8IHBhcmFtZXRl cnMtPm9wdGlvbnMoKS5pY2ZfZW5hYmxlZCgpCisJCSAgICAgIHx8IGxheW91 dC0+aXNfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZCgp KTsKKworICAvKiBPbmx5IG9uZSBvZiBpc19wYXNzX29uZSBhbmQgaXNfcGFz c190d28gaXMgdHJ1ZS4gIEJvdGggYXJlIGZhbHNlIHdoZW4KKyAgICAgYSB0 d28tcGFzcyBhcHByb2FjaCBpcyBub3QgbmVlZGVkLiAgKi8KKyAgYm9vbCBp c19wYXNzX29uZSA9IGZhbHNlOworICBib29sIGlzX3Bhc3NfdHdvID0gZmFs c2U7CiAKLSAgLy8gQm90aCBpc19nY19wYXNzX29uZSBhbmQgaXNfZ2NfcGFz c190d28gc2hvdWxkIG5vdCBiZSB0cnVlLgotICBnb2xkX2Fzc2VydCghKGlz X2djX3Bhc3Nfb25lICAmJiBpc19nY19wYXNzX3R3bykpOworICBTeW1ib2xz X2RhdGEqIGdjX3NkID0gTlVMTDsKIAorICAvKiBDaGVjayBpZiBkb19sYXlv dXQgbmVlZHMgdG8gYmUgdHdvLXBhc3MuICBJZiBzbywgZmluZCBvdXQgd2hp Y2ggcGFzcworICAgICBzaG91bGQgaGFwcGVuLiAgSW4gdGhlIGZpcnN0IHBh c3MsIHRoZSBkYXRhIGluIHNkIGlzIHNhdmVkIHRvIGJlIHVzZWQKKyAgICAg bGF0ZXIgaW4gdGhlIHNlY29uZCBwYXNzLiAgKi8KKyAgaWYgKGlzX3R3b19w YXNzKQorICAgIHsKKyAgICAgIGdjX3NkID0gdGhpcy0+Z2V0X3N5bWJvbHNf ZGF0YSgpOworICAgICAgaWYgKGdjX3NkID09IE5VTEwpCisJeworCSAgZ29s ZF9hc3NlcnQoc2QgIT0gTlVMTCk7CisJICBpc19wYXNzX29uZSA9IHRydWU7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChwYXJhbWV0ZXJzLT5vcHRp b25zKCkuZ2Nfc2VjdGlvbnMoKSkKKwkgICAgZ29sZF9hc3NlcnQoc3ltdGFi LT5nYygpLT5pc193b3JrbGlzdF9yZWFkeSgpKTsKKwkgIGlmIChwYXJhbWV0 ZXJzLT5vcHRpb25zKCkuaWNmX2VuYWJsZWQoKSkKKwkgICAgZ29sZF9hc3Nl cnQoc3ltdGFiLT5pY2YoKS0+aXNfaWNmX3JlYWR5KCkpOyAKKwkgIGlzX3Bh c3NfdHdvID0gdHJ1ZTsKKwl9CisgICAgfQorICAgIAogICBpZiAoc2hudW0g PT0gMCkKICAgICByZXR1cm47Ci0gIFN5bWJvbHNfZGF0YSogZ2Nfc2QgPSBO VUxMOwotICBpZiAoaXNfZ2NfcGFzc19vbmUpCisKKyAgaWYgKGlzX3Bhc3Nf b25lKQogICAgIHsKICAgICAgIC8vIER1cmluZyBnYXJiYWdlIGNvbGxlY3Rp b24gc2F2ZSB0aGUgc3ltYm9scyBkYXRhIHRvIHVzZSBpdCB3aGVuCiAgICAg ICAvLyByZS1lbnRlcmluZyB0aGlzIGZ1bmN0aW9uLgpAQCAtMTI2NSwxMCAr MTI4Nyw2IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+ Ojpkb18KICAgICAgIHRoaXMtPmNvcHlfc3ltYm9sc19kYXRhKGdjX3NkLCBz ZCwgVGhpczo6c2hkcl9zaXplICogc2hudW0pOwogICAgICAgdGhpcy0+c2V0 X3N5bWJvbHNfZGF0YShnY19zZCk7CiAgICAgfQotICBlbHNlIGlmIChpc19n Y19wYXNzX3R3bykKLSAgICB7Ci0gICAgICBnY19zZCA9IHRoaXMtPmdldF9z eW1ib2xzX2RhdGEoKTsKLSAgICB9CiAKICAgY29uc3QgdW5zaWduZWQgY2hh ciogc2VjdGlvbl9oZWFkZXJzX2RhdGEgPSBOVUxMOwogICBzZWN0aW9uX3Np emVfdHlwZSBzZWN0aW9uX25hbWVzX3NpemU7CkBAIC0xMjc3LDcgKzEyOTUs NyBAQCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9f CiAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN5bWJvbF9uYW1lc19kYXRhID0g TlVMTDsKICAgc2VjdGlvbl9zaXplX3R5cGUgc3ltYm9sX25hbWVzX3NpemU7 CiAKLSAgaWYgKGlzX2djX29yX2ljZikKKyAgaWYgKGlzX3R3b19wYXNzKQog ICAgIHsKICAgICAgIHNlY3Rpb25faGVhZGVyc19kYXRhID0gZ2Nfc2QtPnNl Y3Rpb25faGVhZGVyc19kYXRhOwogICAgICAgc2VjdGlvbl9uYW1lc19zaXpl ID0gZ2Nfc2QtPnNlY3Rpb25fbmFtZXNfc2l6ZTsKQEAgLTEzMDMsOSArMTMy MSw5IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpk b18KICAgY29uc3QgdW5zaWduZWQgY2hhciogcHNoZHJzOwogCiAgIC8vIEdl dCB0aGUgc2VjdGlvbiBuYW1lcy4KLSAgY29uc3QgdW5zaWduZWQgY2hhciog cG5hbWVzdSA9IChpc19nY19vcl9pY2YpCi0JCQkJID8gZ2Nfc2QtPnNlY3Rp b25fbmFtZXNfZGF0YQotCQkJCSA6IHNkLT5zZWN0aW9uX25hbWVzLT5kYXRh KCk7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBuYW1lc3UgPSAoaXNfdHdv X3Bhc3MKKwkJCQkgID8gZ2Nfc2QtPnNlY3Rpb25fbmFtZXNfZGF0YQorCQkJ CSAgOiBzZC0+c2VjdGlvbl9uYW1lcy0+ZGF0YSgpKTsKIAogICBjb25zdCBj aGFyKiBwbmFtZXMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihw bmFtZXN1KTsKIApAQCAtMTM1NSw3ICsxMzczLDcgQEAgU2l6ZWRfcmVsb2Jq X2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogICBPdXRwdXRfc2VjdGlv bnMmIG91dF9zZWN0aW9ucyh0aGlzLT5vdXRwdXRfc2VjdGlvbnMoKSk7CiAg IHN0ZDo6dmVjdG9yPEFkZHJlc3M+JiBvdXRfc2VjdGlvbl9vZmZzZXRzKHRo aXMtPnNlY3Rpb25fb2Zmc2V0cygpKTsKIAotICBpZiAoIWlzX2djX3Bhc3Nf dHdvKQorICBpZiAoIWlzX3Bhc3NfdHdvKQogICAgIHsKICAgICAgIG91dF9z ZWN0aW9ucy5yZXNpemUoc2hudW0pOwogICAgICAgb3V0X3NlY3Rpb25fb2Zm c2V0cy5yZXNpemUoc2hudW0pOwpAQCAtMTM2NSw3ICsxMzgzLDcgQEAgU2l6 ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogICAvLyBk byBoZXJlLgogICBpZiAodGhpcy0+aW5wdXRfZmlsZSgpLT5qdXN0X3N5bWJv bHMoKSkKICAgICB7Ci0gICAgICBpZiAoIWlzX2djX3Bhc3NfdHdvKQorICAg ICAgaWYgKCFpc19wYXNzX3R3bykKIAl7CiAJICBkZWxldGUgc2QtPnNlY3Rp b25faGVhZGVyczsKIAkgIHNkLT5zZWN0aW9uX2hlYWRlcnMgPSBOVUxMOwpA QCAtMTQxNyw3ICsxNDM1LDcgQEAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwg YmlnX2VuZGlhbj46OmRvXwogCiAgICAgICBjb25zdCBjaGFyKiBuYW1lID0g cG5hbWVzICsgc2hkci5nZXRfc2hfbmFtZSgpOwogCi0gICAgICBpZiAoIWlz X2djX3Bhc3NfdHdvKQorICAgICAgaWYgKCFpc19wYXNzX3R3bykKIAl7CiAJ ICBpZiAodGhpcy0+aGFuZGxlX2dudV93YXJuaW5nX3NlY3Rpb24obmFtZSwg aSwgc3ltdGFiKSkKIAkgICAgewpAQCAtMTQ5MSw3ICsxNTA5LDcgQEAgU2l6 ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogCSAgICB9 CiAJfQogCi0gICAgICBpZiAoaXNfZ2NfcGFzc19vbmUgJiYgcGFyYW1ldGVy cy0+b3B0aW9ucygpLmdjX3NlY3Rpb25zKCkpCisgICAgICBpZiAoaXNfcGFz c19vbmUgJiYgcGFyYW1ldGVycy0+b3B0aW9ucygpLmdjX3NlY3Rpb25zKCkp CiAJewogCSAgaWYgKHRoaXMtPmlzX3NlY3Rpb25fbmFtZV9pbmNsdWRlZChu YW1lKQogCSAgICAgIHx8IGxheW91dC0+a2VlcF9pbnB1dF9zZWN0aW9uICh0 aGlzLCBuYW1lKQpAQCAtMTUzNyw3ICsxNTU1LDcgQEAgU2l6ZWRfcmVsb2Jq X2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogCSAgJiYgc3RyY21wKG5h bWUsICIuZWhfZnJhbWUiKSA9PSAwCiAJICAmJiB0aGlzLT5jaGVja19laF9m cmFtZV9mbGFncygmc2hkcikpCiAJewotCSAgaWYgKGlzX2djX3Bhc3Nfb25l KQorCSAgaWYgKGlzX3Bhc3Nfb25lKQogCSAgICB7CiAJICAgICAgb3V0X3Nl Y3Rpb25zW2ldID0gcmVpbnRlcnByZXRfY2FzdDxPdXRwdXRfc2VjdGlvbio+ KDEpOwogCSAgICAgIG91dF9zZWN0aW9uX29mZnNldHNbaV0gPSBpbnZhbGlk X2FkZHJlc3M7CkBAIC0xNTUyLDcgKzE1NzAsNyBAQCBTaXplZF9yZWxvYmpf ZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAJICBjb250aW51ZTsKIAl9 CiAKLSAgICAgIGlmIChpc19nY19wYXNzX3R3byAmJiBwYXJhbWV0ZXJzLT5v cHRpb25zKCkuZ2Nfc2VjdGlvbnMoKSkKKyAgICAgIGlmIChpc19wYXNzX3R3 byAmJiBwYXJhbWV0ZXJzLT5vcHRpb25zKCkuZ2Nfc2VjdGlvbnMoKSkKIAl7 CiAJICAvLyBUaGlzIGlzIGV4ZWN1dGVkIGR1cmluZyB0aGUgc2Vjb25kIHBh c3Mgb2YgZ2FyYmFnZQogCSAgLy8gY29sbGVjdGlvbi4gZG9fbGF5b3V0IGhh cyBiZWVuIGNhbGxlZCBiZWZvcmUgYW5kIHNvbWUKQEAgLTE1NzcsNyArMTU5 NSw3IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpk b18KIAkgICAgICB9CiAJfQogCi0gICAgICBpZiAoaXNfZ2NfcGFzc190d28g JiYgcGFyYW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFibGVkKCkpCisgICAg ICBpZiAoaXNfcGFzc190d28gJiYgcGFyYW1ldGVycy0+b3B0aW9ucygpLmlj Zl9lbmFibGVkKCkpCiAJewogCSAgaWYgKG91dF9zZWN0aW9uc1tpXSA9PSBO VUxMKQogCSAgICB7CkBAIC0xNjExLDcgKzE2MjksNyBAQCBTaXplZF9yZWxv YmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAgICAgICAvLyBzaG91 bGRfZGVmZXJfbGF5b3V0IHNob3VsZCBiZSBmYWxzZS4KICAgICAgIGlmIChz aG91bGRfZGVmZXJfbGF5b3V0ICYmIChzaGRyLmdldF9zaF9mbGFncygpICYg ZWxmY3BwOjpTSEZfQUxMT0MpKQogCXsKLQkgIGdvbGRfYXNzZXJ0KCFpc19n Y19wYXNzX3R3byk7CisJICBnb2xkX2Fzc2VydCghaXNfcGFzc190d28pOwog CSAgdGhpcy0+ZGVmZXJyZWRfbGF5b3V0Xy5wdXNoX2JhY2soRGVmZXJyZWRf bGF5b3V0KGksIG5hbWUsCiAJCQkJCQkJICAgcHNoZHJzLAogCQkJCQkJCSAg IHJlbG9jX3NobmR4W2ldLApAQCAtMTYyNiwxMSArMTY0NCwxMSBAQCBTaXpl ZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAgICAgICAv LyBEdXJpbmcgZ2NfcGFzc190d28gaWYgYSBzZWN0aW9uIHRoYXQgd2FzIHBy ZXZpb3VzbHkgZGVmZXJyZWQgaXMKICAgICAgIC8vIGZvdW5kLCBkbyBub3Qg bGF5b3V0IHRoZSBzZWN0aW9uIGFzIGxheW91dF9kZWZlcnJlZF9zZWN0aW9u cyB3aWxsCiAgICAgICAvLyBkbyBpdCBsYXRlciBmcm9tIGdvbGQuY2MuCi0g ICAgICBpZiAoaXNfZ2NfcGFzc190d28KKyAgICAgIGlmIChpc19wYXNzX3R3 bwogCSAgJiYgKG91dF9zZWN0aW9uc1tpXSA9PSByZWludGVycHJldF9jYXN0 PE91dHB1dF9zZWN0aW9uKj4oMikpKQogCWNvbnRpbnVlOwogCi0gICAgICBp ZiAoaXNfZ2NfcGFzc19vbmUpCisgICAgICBpZiAoaXNfcGFzc19vbmUpCiAJ ewogCSAgLy8gVGhpcyBpcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLiBU aGUgb3V0X3NlY3Rpb25zIGFyZQogCSAgLy8gYXNzaWduZWQgaW4gdGhlIHNl Y29uZCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCkBAIC0xNjYxLDcgKzE2Nzks NyBAQCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9f CiAJfQogICAgIH0KIAotICBpZiAoIWlzX2djX3Bhc3NfdHdvKQorICBpZiAo IWlzX3Bhc3NfdHdvKQogICAgIGxheW91dC0+bGF5b3V0X2dudV9zdGFjayhz ZWVuX2dudV9zdGFjaywgZ251X3N0YWNrX2ZsYWdzLCB0aGlzKTsKIAogICAv LyBXaGVuIGRvaW5nIGEgcmVsb2NhdGFibGUgbGluayBoYW5kbGUgdGhlIHJl bG9jIHNlY3Rpb25zIGF0IHRoZQpAQCAtMTY3MCw3ICsxNjg4LDcgQEAgU2l6 ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogICBpZiAo ZW1pdF9yZWxvY3MpCiAgICAgdGhpcy0+c2l6ZV9yZWxvY2F0YWJsZV9yZWxv Y3MoKTsKIAotICBnb2xkX2Fzc2VydCghKGlzX2djX29yX2ljZikgfHwgcmVs b2Nfc2VjdGlvbnMuZW1wdHkoKSk7CisgIGdvbGRfYXNzZXJ0KCFpc190d29f cGFzcyB8fCByZWxvY19zZWN0aW9ucy5lbXB0eSgpKTsKIAogICBmb3IgKHN0 ZDo6dmVjdG9yPHVuc2lnbmVkIGludD46OmNvbnN0X2l0ZXJhdG9yIHAgPSBy ZWxvY19zZWN0aW9ucy5iZWdpbigpOwogICAgICAgIHAgIT0gcmVsb2Nfc2Vj dGlvbnMuZW5kKCk7CkBAIC0xNzE3LDcgKzE3MzUsNyBAQCBTaXplZF9yZWxv YmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAgICAgfQogCiAgIC8v IEhhbmRsZSB0aGUgLmVoX2ZyYW1lIHNlY3Rpb25zIGF0IHRoZSBlbmQuCi0g IGdvbGRfYXNzZXJ0KCFpc19nY19wYXNzX29uZSB8fCBlaF9mcmFtZV9zZWN0 aW9ucy5lbXB0eSgpKTsKKyAgZ29sZF9hc3NlcnQoIWlzX3Bhc3Nfb25lIHx8 IGVoX2ZyYW1lX3NlY3Rpb25zLmVtcHR5KCkpOwogICBmb3IgKHN0ZDo6dmVj dG9yPHVuc2lnbmVkIGludD46OmNvbnN0X2l0ZXJhdG9yIHAgPSBlaF9mcmFt ZV9zZWN0aW9ucy5iZWdpbigpOwogICAgICAgIHAgIT0gZWhfZnJhbWVfc2Vj dGlvbnMuZW5kKCk7CiAgICAgICAgKytwKQpAQCAtMTc0MCw3ICsxNzU4LDcg QEAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwog CiAgIC8vIFdoZW4gYnVpbGRpbmcgYSAuZ2RiX2luZGV4IHNlY3Rpb24sIHNj YW4gdGhlIC5kZWJ1Z19pbmZvIGFuZAogICAvLyAuZGVidWdfdHlwZXMgc2Vj dGlvbnMuCi0gIGdvbGRfYXNzZXJ0KCFpc19nY19wYXNzX29uZQorICBnb2xk X2Fzc2VydCghaXNfcGFzc19vbmUKIAkgICAgICB8fCAoZGVidWdfaW5mb19z ZWN0aW9ucy5lbXB0eSgpICYmIGRlYnVnX3R5cGVzX3NlY3Rpb25zLmVtcHR5 KCkpKTsKICAgZm9yIChzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+Ojpjb25z dF9pdGVyYXRvciBwCiAJICAgPSBkZWJ1Z19pbmZvX3NlY3Rpb25zLmJlZ2lu KCk7CkBAIC0xNzYxLDcgKzE3NzksNyBAQCBTaXplZF9yZWxvYmpfZmlsZTxz aXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAJCQkgICAgICAgaSwgcmVsb2Nfc2hu ZHhbaV0sIHJlbG9jX3R5cGVbaV0pOwogICAgIH0KIAotICBpZiAoaXNfZ2Nf cGFzc190d28pCisgIGlmIChpc19wYXNzX3R3bykKICAgICB7CiAgICAgICBk ZWxldGVbXSBnY19zZC0+c2VjdGlvbl9oZWFkZXJzX2RhdGE7CiAgICAgICBk ZWxldGVbXSBnY19zZC0+c2VjdGlvbl9uYW1lc19kYXRhOwpJbmRleDogZ29s ZC9vdXRwdXQuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dvbGQvb3V0cHV0LmNjLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjE2OApkaWZmIC11IC11IC1wIC1yMS4xNjggb3V0cHV0LmNjCi0t LSBnb2xkL291dHB1dC5jYwkxMSBBdWcgMjAxMiAwNDo0MToyOCAtMDAwMAkx LjE2OAorKysgZ29sZC9vdXRwdXQuY2MJMjQgQXVnIDIwMTIgMTg6MTY6NTkg LTAwMDAKQEAgLTIyNTcsNyArMjI1NywxMCBAQCBPdXRwdXRfc2VjdGlvbjo6 T3V0cHV0X3NlY3Rpb24oY29uc3QgY2hhCiAgICAgYWx3YXlzX2tlZXBzX2lu cHV0X3NlY3Rpb25zXyhmYWxzZSksCiAgICAgaGFzX2ZpeGVkX2xheW91dF8o ZmFsc2UpLAogICAgIGlzX3BhdGNoX3NwYWNlX2FsbG93ZWRfKGZhbHNlKSwK KyAgICBpc191bmlxdWVfc2VnbWVudF8oZmFsc2UpLAogICAgIHRsc19vZmZz ZXRfKDApLAorICAgIGV4dHJhX3NlZ21lbnRfZmxhZ3NfKDApLAorICAgIHNl Z21lbnRfYWxpZ25tZW50XygwKSwKICAgICBjaGVja3BvaW50XyhOVUxMKSwK ICAgICBsb29rdXBfbWFwc18obmV3IE91dHB1dF9zZWN0aW9uX2xvb2t1cF9t YXBzKSwKICAgICBmcmVlX2xpc3RfKCksCkBAIC0zOTkxLDcgKzM5OTQsOCBA QCBPdXRwdXRfc2VnbWVudDo6T3V0cHV0X3NlZ21lbnQoZWxmY3BwOjpFCiAg ICAgZmxhZ3NfKGZsYWdzKSwKICAgICBpc19tYXhfYWxpZ25fa25vd25fKGZh bHNlKSwKICAgICBhcmVfYWRkcmVzc2VzX3NldF8oZmFsc2UpLAotICAgIGlz X2xhcmdlX2RhdGFfc2VnbWVudF8oZmFsc2UpCisgICAgaXNfbGFyZ2VfZGF0 YV9zZWdtZW50XyhmYWxzZSksCisgICAgaXNfdW5pcXVlX3NlZ21lbnRfKGZh bHNlKQogewogICAvLyBUaGUgRUxGIEFCSSBzcGVjaWZpZXMgdGhhdCBhIFBU X1RMUyBzZWdtZW50IGFsd2F5cyBoYXMgUEZfUiBhcwogICAvLyB0aGUgZmxh Z3MuCkluZGV4OiBnb2xkL291dHB1dC5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL291dHB1dC5oLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjEzNgpkaWZmIC11IC11IC1wIC1yMS4xMzYg b3V0cHV0LmgKLS0tIGdvbGQvb3V0cHV0LmgJMTEgQXVnIDIwMTIgMDQ6NDE6 MjggLTAwMDAJMS4xMzYKKysrIGdvbGQvb3V0cHV0LmgJMjQgQXVnIDIwMTIg MTg6MTY6NTkgLTAwMDAKQEAgLTMyNjUsNiArMzI2NSwyOCBAQCBjbGFzcyBP dXRwdXRfc2VjdGlvbiA6IHB1YmxpYyBPdXRwdXRfZGF0CiAgIHJlcXVpcmVz X3Bvc3Rwcm9jZXNzaW5nKCkgY29uc3QKICAgeyByZXR1cm4gdGhpcy0+cmVx dWlyZXNfcG9zdHByb2Nlc3NpbmdfOyB9CiAKKyAgYm9vbAorICBpc191bmlx dWVfc2VnbWVudCgpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPmlzX3VuaXF1 ZV9zZWdtZW50XzsgfQorCisgIHZvaWQKKyAgc2V0X2lzX3VuaXF1ZV9zZWdt ZW50KCkKKyAgeyB0aGlzLT5pc191bmlxdWVfc2VnbWVudF8gPSB0cnVlOyB9 CisKKyAgdWludDY0X3QgZXh0cmFfc2VnbWVudF9mbGFncygpIGNvbnN0Cisg IHsgcmV0dXJuIHRoaXMtPmV4dHJhX3NlZ21lbnRfZmxhZ3NfOyB9CisKKyAg dm9pZAorICBzZXRfZXh0cmFfc2VnbWVudF9mbGFncyh1aW50NjRfdCBmbGFn cykKKyAgeyB0aGlzLT5leHRyYV9zZWdtZW50X2ZsYWdzXyA9IGZsYWdzOyB9 CisKKyAgdWludDY0X3Qgc2VnbWVudF9hbGlnbm1lbnQoKSBjb25zdAorICB7 IHJldHVybiB0aGlzLT5zZWdtZW50X2FsaWdubWVudF87IH0KKworICB2b2lk CisgIHNldF9zZWdtZW50X2FsaWdubWVudCh1aW50NjRfdCBhbGlnbikKKyAg eyB0aGlzLT5zZWdtZW50X2FsaWdubWVudF8gPSBhbGlnbjsgfQorICAKICAg Ly8gSWYgYSBzZWN0aW9uIHJlcXVpcmVzIHBvc3Rwcm9jZXNzaW5nLCByZXR1 cm4gdGhlIGJ1ZmZlciB0byB1c2UuCiAgIHVuc2lnbmVkIGNoYXIqCiAgIHBv c3Rwcm9jZXNzaW5nX2J1ZmZlcigpIGNvbnN0CkBAIC00MjE2LDkgKzQyMzgs MTcgQEAgY2xhc3MgT3V0cHV0X3NlY3Rpb24gOiBwdWJsaWMgT3V0cHV0X2Rh dAogICBib29sIGhhc19maXhlZF9sYXlvdXRfIDogMTsKICAgLy8gVHJ1ZSBp ZiB3ZSBjYW4gYWRkIHBhdGNoIHNwYWNlIHRvIHRoaXMgc2VjdGlvbi4KICAg Ym9vbCBpc19wYXRjaF9zcGFjZV9hbGxvd2VkXyA6IDE7CisgIC8vIFRydWUg aWYgdGhpcyBvdXRwdXQgc2VjdGlvbiBnb2VzIGludG8gYSB1bmlxdWUgc2Vn bWVudC4KKyAgYm9vbCBpc191bmlxdWVfc2VnbWVudF8gOiAxOwogICAvLyBG b3IgU0hUX1RMUyBzZWN0aW9ucywgdGhlIG9mZnNldCBvZiB0aGlzIHNlY3Rp b24gcmVsYXRpdmUgdG8gdGhlIGJhc2UKICAgLy8gb2YgdGhlIFRMUyBzZWdt ZW50LgogICB1aW50NjRfdCB0bHNfb2Zmc2V0XzsKKyAgLy8gQWRkaXRpb25h bCBzZWdtZW50IGZsYWdzLCBzcGVjaWZpZWQgdmlhIGxpbmtlciBwbHVnaW4s IHdoZW4gbWFwcGluZyBzb21lCisgIC8vIGlucHV0IHNlY3Rpb25zIHRvIHVu aXF1ZSBzZWdtZW50cy4KKyAgdWludDY0X3QgZXh0cmFfc2VnbWVudF9mbGFn c187IAorICAvLyBTZWdtZW50IGFsaWdubWVudCBzcGVjaWZpZWQgdmlhIGxp bmtlciBwbHVnaW4sIHdoZW4gbWFwcGluZyBzb21lCisgIC8vIGlucHV0IHNl Y3Rpb25zIHRvIHVuaXF1ZSBzZWdtZW50cy4KKyAgdWludDY0X3Qgc2VnbWVu dF9hbGlnbm1lbnRfOwogICAvLyBTYXZlZCBjaGVja3BvaW50LgogICBDaGVj a3BvaW50X291dHB1dF9zZWN0aW9uKiBjaGVja3BvaW50XzsKICAgLy8gRmFz dCBsb29rdXAgbWFwcyBmb3IgbWVyZ2VkIGFuZCByZWxheGVkIGlucHV0IHNl Y3Rpb25zLgpAQCAtNDI5NCw2ICs0MzI0LDE2IEBAIGNsYXNzIE91dHB1dF9z ZWdtZW50CiAgIHNldF9pc19sYXJnZV9kYXRhX3NlZ21lbnQoKQogICB7IHRo aXMtPmlzX2xhcmdlX2RhdGFfc2VnbWVudF8gPSB0cnVlOyB9CiAKKyAgYm9v bAorICBpc191bmlxdWVfc2VnbWVudCgpIGNvbnN0CisgIHsgcmV0dXJuIHRo aXMtPmlzX3VuaXF1ZV9zZWdtZW50XzsgfQorCisgIC8vIE1hcmsgc2VnbWVu dCBhcyB1bmlxdWUsIGhhcHBlbnMgd2hlbiBsaW5rZXIgcGx1Z2lucyByZXF1 ZXN0IHRoYXQKKyAgLy8gY2VydGFpbiBpbnB1dCBzZWN0aW9ucyBiZSBtYXBw ZWQgdG8gdW5pcXVlIHNlZ21lbnRzLgorICB2b2lkCisgIHNldF9pc191bmlx dWVfc2VnbWVudCgpCisgIHsgdGhpcy0+aXNfdW5pcXVlX3NlZ21lbnRfID0g dHJ1ZTsgfQorCiAgIC8vIFJldHVybiB0aGUgbWF4aW11bSBhbGlnbm1lbnQg b2YgdGhlIE91dHB1dF9kYXRhLgogICB1aW50NjRfdAogICBtYXhpbXVtX2Fs aWdubWVudCgpOwpAQCAtNDUwNCw2ICs0NTQ0LDggQEAgY2xhc3MgT3V0cHV0 X3NlZ21lbnQKICAgYm9vbCBhcmVfYWRkcmVzc2VzX3NldF8gOiAxOwogICAv LyBXaGV0aGVyIHRoaXMgc2VnbWVudCBob2xkcyBsYXJnZSBkYXRhIHNlY3Rp b25zLgogICBib29sIGlzX2xhcmdlX2RhdGFfc2VnbWVudF8gOiAxOworICAv LyBXaGV0aGVyIHRoaXMgd2FzIG1hcmtlZCBhcyBhIHVuaXF1ZSBzZWdtZW50 IHZpYSBhIGxpbmtlciBwbHVnaW4uCisgIGJvb2wgaXNfdW5pcXVlX3NlZ21l bnRfIDogMTsKIH07CiAKIC8vIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUg b3V0cHV0IGZpbGUuCkluZGV4OiBnb2xkL3BsdWdpbi5jYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ29sZC9wbHVn aW4uY2MsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTQKZGlmZiAtdSAtdSAt cCAtcjEuNTQgcGx1Z2luLmNjCi0tLSBnb2xkL3BsdWdpbi5jYwkxMiBKdW4g MjAxMiAyMjo1Mjo0MSAtMDAwMAkxLjU0CisrKyBnb2xkL3BsdWdpbi5jYwky NCBBdWcgMjAxMiAxODoxNjo1OSAtMDAwMApAQCAtMTE1LDYgKzExNSwxNSBA QCB1cGRhdGVfc2VjdGlvbl9vcmRlcihjb25zdCBzdHJ1Y3QgbGRfcGx1CiBz dGF0aWMgZW51bSBsZF9wbHVnaW5fc3RhdHVzCiBhbGxvd19zZWN0aW9uX29y ZGVyaW5nKCk7CiAKK3N0YXRpYyBlbnVtIGxkX3BsdWdpbl9zdGF0dXMKK2Fs bG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucygpOworCitzdGF0aWMg ZW51bSBsZF9wbHVnaW5fc3RhdHVzCit1bmlxdWVfc2VnbWVudF9mb3Jfc2Vj dGlvbnMoY29uc3QgY2hhciogc2VnbWVudF9uYW1lLAorCQkJICAgIHVpbnQ2 NF90IGZsYWdzLAorCQkJICAgIHVpbnQ2NF90IGFsaWduLAorCQkJICAgIGNv bnN0IHN0cnVjdCBsZF9wbHVnaW5fc2VjdGlvbiAqc2VjdGlvbl9saXN0LAor CQkJICAgIHVuc2lnbmVkIGludCBudW1fc2VjdGlvbnMpOwogfTsKIAogI2Vu ZGlmIC8vIEVOQUJMRV9QTFVHSU5TCkBAIC0xNTksNyArMTY4LDcgQEAgUGx1 Z2luOjpsb2FkKCkKICAgc3NjYW5mKHZlciwgIiVkLiVkIiwgJm1ham9yLCAm bWlub3IpOwogCiAgIC8vIEFsbG9jYXRlIGFuZCBwb3B1bGF0ZSBhIHRyYW5z ZmVyIHZlY3Rvci4KLSAgY29uc3QgaW50IHR2X2ZpeGVkX3NpemUgPSAyNDsK KyAgY29uc3QgaW50IHR2X2ZpeGVkX3NpemUgPSAyNjsKIAogICBpbnQgdHZf c2l6ZSA9IHRoaXMtPmFyZ3NfLnNpemUoKSArIHR2X2ZpeGVkX3NpemU7CiAg IGxkX3BsdWdpbl90diogdHYgPSBuZXcgbGRfcGx1Z2luX3R2W3R2X3NpemVd OwpAQCAtMjczLDYgKzI4MiwxNSBAQCBQbHVnaW46OmxvYWQoKQogICB0dltp XS50dl91LnR2X2FsbG93X3NlY3Rpb25fb3JkZXJpbmcgPSBhbGxvd19zZWN0 aW9uX29yZGVyaW5nOwogCiAgICsraTsKKyAgdHZbaV0udHZfdGFnID0gTERQ VF9BTExPV19VTklRVUVfU0VHTUVOVF9GT1JfU0VDVElPTlM7CisgIHR2W2ld LnR2X3UudHZfYWxsb3dfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zCisg ICAgPSBhbGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnM7CisKKyAg KytpOworICB0dltpXS50dl90YWcgPSBMRFBUX1VOSVFVRV9TRUdNRU5UX0ZP Ul9TRUNUSU9OUzsKKyAgdHZbaV0udHZfdS50dl91bmlxdWVfc2VnbWVudF9m b3Jfc2VjdGlvbnMgPSB1bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnM7CisK KyAgKytpOwogICB0dltpXS50dl90YWcgPSBMRFBUX05VTEw7CiAgIHR2W2ld LnR2X3UudHZfdmFsID0gMDsKIApAQCAtMTY4NSw2ICsxNzAzLDY0IEBAIGFs bG93X3NlY3Rpb25fb3JkZXJpbmcoKQogICByZXR1cm4gTERQU19PSzsKIH0K IAorLy8gTGV0IHRoZSBsaW5rZXIga25vdyB0aGF0IGEgc3Vic2V0IG9mIHNl Y3Rpb25zIGNvdWxkIGJlIG1hcHBlZAorLy8gdG8gYSB1bmlxdWUgc2VnbWVu dC4KKworc3RhdGljIGVudW0gbGRfcGx1Z2luX3N0YXR1cworYWxsb3dfdW5p cXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zKCkKK3sKKyAgZ29sZF9hc3NlcnQo cGFyYW1ldGVycy0+b3B0aW9ucygpLmhhc19wbHVnaW5zKCkpOworICBMYXlv dXQqIGxheW91dCA9IHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5wbHVnaW5zKCkt PmxheW91dCgpOworICBsYXlvdXQtPnNldF91bmlxdWVfc2VnbWVudF9mb3Jf c2VjdGlvbnNfc3BlY2lmaWVkKCk7CisgIHJldHVybiBMRFBTX09LOworfQor CisvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXAgdGhlIGxpc3Qgb2Ygc2Vj dGlvbnMgc3BlY2lmaWVkIGluIHRoZQorLy8gU0VDVElPTl9MSVNUIHRvIGEg dW5pcXVlIHNlZ21lbnQuICBFTEYgc2VnbWVudHMgZG8gbm90IGhhdmUgbmFt ZXMKKy8vIGFuZCB0aGUgTkFNRSBpcyB1c2VkIHRvIGlkZW50aWZ5IE91dHB1 dCBTZWN0aW9uIHdoaWNoIHNob3VsZCBjb250YWluCisvLyB0aGUgbGlzdCBv ZiBzZWN0aW9ucy4gIFRoaXMgT3V0cHV0IFNlY3Rpb24gd2lsbCB0aGVuIGJl IG1hcHBlZCB0bworLy8gYSB1bmlxdWUgc2VnbWVudC4gIEZMQUdTIGlzIHVz ZWQgdG8gc3BlY2lmeSBpZiBhbnkgYWRkaXRpb25hbCBzZWdtZW50CisvLyBm bGFncyBuZWVkIHRvIGJlIHNldC4gIEZvciBpbnN0YW5jZSwgYSBzcGVjaWZp YyBzZWdtZW50IGZsYWcgY2FuIGJlCisvLyBzZXQgdG8gaWRlbnRpZnkgdGhp cyBzZWdtZW50LiAgVW5zZXR0aW5nIHNlZ21lbnQgZmxhZ3MgaXMgbm90IHBv c3NpYmxlLgorLy8gQUxJR04gc3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgb2Yg dGhlIHNlZ21lbnQuCisKK3N0YXRpYyBlbnVtIGxkX3BsdWdpbl9zdGF0dXMK K3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyhjb25zdCBjaGFyKiBzZWdt ZW50X25hbWUsCisJCQkgICAgdWludDY0X3QgZmxhZ3MsCisJCQkgICAgdWlu dDY0X3QgYWxpZ24sCisJCQkgICAgY29uc3Qgc3RydWN0IGxkX3BsdWdpbl9z ZWN0aW9uKiBzZWN0aW9uX2xpc3QsCisJCQkgICAgdW5zaWduZWQgaW50IG51 bV9zZWN0aW9ucykKK3sKKyAgZ29sZF9hc3NlcnQocGFyYW1ldGVycy0+b3B0 aW9ucygpLmhhc19wbHVnaW5zKCkpOworCisgIGlmIChudW1fc2VjdGlvbnMg PT0gMCkKKyAgICByZXR1cm4gTERQU19PSzsKKworICBpZiAoc2VjdGlvbl9s aXN0ID09IE5VTEwpCisgICAgcmV0dXJuIExEUFNfRVJSOworCisgIExheW91 dCogbGF5b3V0ID0gcGFyYW1ldGVycy0+b3B0aW9ucygpLnBsdWdpbnMoKS0+ bGF5b3V0KCk7CisgIGdvbGRfYXNzZXJ0IChsYXlvdXQgIT0gTlVMTCk7CisK KyAgTGF5b3V0OjpVbmlxdWVfc2VnbWVudF9pbmZvKiBzID0gbmV3IExheW91 dDo6VW5pcXVlX3NlZ21lbnRfaW5mbzsKKyAgcy0+bmFtZSA9IHNlZ21lbnRf bmFtZTsKKyAgcy0+ZmxhZ3MgPSBmbGFnczsKKyAgcy0+YWxpZ24gPSBhbGln bjsKKworICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bV9zZWN0 aW9uczsgKytpKQorICAgIHsKKyAgICAgIE9iamVjdCogb2JqID0gcGFyYW1l dGVycy0+b3B0aW9ucygpLnBsdWdpbnMoKS0+Z2V0X2VsZl9vYmplY3QoCisg ICAgICAgICAgc2VjdGlvbl9saXN0W2ldLmhhbmRsZSk7CisgICAgICBpZiAo b2JqID09IE5VTEwpCisJcmV0dXJuIExEUFNfQkFEX0hBTkRMRTsKKyAgICAg IHVuc2lnbmVkIGludCBzaG5keCA9IHNlY3Rpb25fbGlzdFtpXS5zaG5keDsK KyAgICAgIENvbnN0X3NlY3Rpb25faWQgc2Vjbl9pZChvYmosIHNobmR4KTsK KyAgICAgIGxheW91dC0+aW5zZXJ0X3NlY3Rpb25fc2VnbWVudF9tYXAoc2Vj bl9pZCwgcyk7CisgICAgfQorCisgIHJldHVybiBMRFBTX09LOworfQorCiAj ZW5kaWYgLy8gRU5BQkxFX1BMVUdJTlMKIAogLy8gQWxsb2NhdGUgYSBQbHVn aW5vYmogb2JqZWN0IG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplIGFuZCBlbmRp YW5uZXNzLgpJbmRleDogZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dv bGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjE5NQpkaWZmIC11IC11IC1wIC1yMS4xOTUgTWFrZWZpbGUuYW0KLS0t IGdvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCTE0IEF1ZyAyMDEyIDA4OjMx OjU3IC0wMDAwCTEuMTk1CisrKyBnb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5h bQkyNCBBdWcgMjAxMiAxODoxNjo1OSAtMDAwMApAQCAtMTUyOSwxMyArMTUy OSwxNSBAQCB1bnVzZWQuYzoKIAlAY3AgL2Rldi9udWxsICRACiAKIGNoZWNr X1NDUklQVFMgKz0gcGx1Z2luX2ZpbmFsX2xheW91dC5zaAotY2hlY2tfREFU QSArPSBwbHVnaW5fZmluYWxfbGF5b3V0LnN0ZG91dAorY2hlY2tfREFUQSAr PSBwbHVnaW5fZmluYWxfbGF5b3V0LnN0ZG91dCBwbHVnaW5fZmluYWxfbGF5 b3V0X3JlYWRlbGYuc3Rkb3V0CiBwbHVnaW5fZmluYWxfbGF5b3V0Lm86IHBs dWdpbl9maW5hbF9sYXlvdXQuY2MKIAkkKENYWENPTVBJTEUpIC1PMCAtYyAt ZmZ1bmN0aW9uLXNlY3Rpb25zICAtZmRhdGEtc2VjdGlvbnMgLWcgLW8gJEAg JDwKIHBsdWdpbl9maW5hbF9sYXlvdXQ6IHBsdWdpbl9maW5hbF9sYXlvdXQu byBwbHVnaW5fc2VjdGlvbl9vcmRlci5zbyBnY2N0ZXN0ZGlyL2xkCiAJJChD WFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1XbCwtLXBsdWdpbiwiLi9wbHVnaW5f c2VjdGlvbl9vcmRlci5zbyIgcGx1Z2luX2ZpbmFsX2xheW91dC5vCiBwbHVn aW5fZmluYWxfbGF5b3V0LnN0ZG91dDogcGx1Z2luX2ZpbmFsX2xheW91dAog CSQoVEVTVF9OTSkgLW4gcGx1Z2luX2ZpbmFsX2xheW91dCA+IHBsdWdpbl9m aW5hbF9sYXlvdXQuc3Rkb3V0CitwbHVnaW5fZmluYWxfbGF5b3V0X3JlYWRl bGYuc3Rkb3V0OiBwbHVnaW5fZmluYWxfbGF5b3V0CisJJChURVNUX1JFQURF TEYpIC1XbCBwbHVnaW5fZmluYWxfbGF5b3V0ID4gcGx1Z2luX2ZpbmFsX2xh eW91dF9yZWFkZWxmLnN0ZG91dAogCiBwbHVnaW5fc2VjdGlvbl9vcmRlci5z bzogcGx1Z2luX3NlY3Rpb25fb3JkZXIubwogCSQoTElOSykgLUJnY2N0ZXN0 ZGlyLyAtc2hhcmVkIHBsdWdpbl9zZWN0aW9uX29yZGVyLm8KSW5kZXg6IGdv bGQvdGVzdHN1aXRlL01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL3Rlc3RzdWl0ZS9NYWtl ZmlsZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMDUKZGlmZiAtdSAt dSAtcCAtcjEuMjA1IE1ha2VmaWxlLmluCi0tLSBnb2xkL3Rlc3RzdWl0ZS9N YWtlZmlsZS5pbgkxNCBBdWcgMjAxMiAwODozMTo1NyAtMDAwMAkxLjIwNQor KysgZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4JMjQgQXVnIDIwMTIgMTg6 MTY6NTkgLTAwMDAKQEAgLTMyOSw3ICszMjksOCBAQCBjaGVja19QUk9HUkFN UyA9ICQoYW1fX0VYRUVYVF8xKSAkKGFtX19FCiBAR0NDX1RSVUVAQE5BVElW RV9MSU5LRVJfVFJVRUBAUExVR0lOU19UUlVFQAlwbHVnaW5fdGVzdF83LmVy ciBcCiBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBAUExVR0lOU19U UlVFQAlwbHVnaW5fdGVzdF83LnN5bXMgXAogQEdDQ19UUlVFQEBOQVRJVkVf TElOS0VSX1RSVUVAQFBMVUdJTlNfVFJVRUAJcGx1Z2luX3Rlc3RfOS5lcnIg XAotQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAQFBMVUdJTlNfVFJV RUAJcGx1Z2luX2ZpbmFsX2xheW91dC5zdGRvdXQKK0BHQ0NfVFJVRUBATkFU SVZFX0xJTktFUl9UUlVFQEBQTFVHSU5TX1RSVUVACXBsdWdpbl9maW5hbF9s YXlvdXQuc3Rkb3V0IFwKK0BHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVF QEBQTFVHSU5TX1RSVUVACXBsdWdpbl9maW5hbF9sYXlvdXQucmVhZGVsZi5z dGRvdXQKICMgTWFrZSBhIGNvcHkgb2YgdHdvX2ZpbGVfdGVzdF8xLm8sIHdo aWNoIGRvZXMgbm90IGRlZmluZSB0aGUgc3ltYm9sIF9aNHQxNmF2LgogQEdD Q19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAQFBMVUdJTlNfVFJVRUBhbV9f YXBwZW5kXzM2ID0gIFwKIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVF QEBQTFVHSU5TX1RSVUVACXBsdWdpbl90ZXN0XzEuZXJyIFwKQEAgLTQ4NzUs NiArNDg3Niw4IEBAIHVuaW5zdGFsbC1hbToKIEBHQ0NfVFJVRUBATkFUSVZF X0xJTktFUl9UUlVFQEBQTFVHSU5TX1RSVUVACSQoQ1hYTElOSykgLUJnY2N0 ZXN0ZGlyLyAtV2wsLS1wbHVnaW4sIi4vcGx1Z2luX3NlY3Rpb25fb3JkZXIu c28iIHBsdWdpbl9maW5hbF9sYXlvdXQubwogQEdDQ19UUlVFQEBOQVRJVkVf TElOS0VSX1RSVUVAQFBMVUdJTlNfVFJVRUBwbHVnaW5fZmluYWxfbGF5b3V0 LnN0ZG91dDogcGx1Z2luX2ZpbmFsX2xheW91dAogQEdDQ19UUlVFQEBOQVRJ VkVfTElOS0VSX1RSVUVAQFBMVUdJTlNfVFJVRUAJJChURVNUX05NKSAtbiBw bHVnaW5fZmluYWxfbGF5b3V0ID4gcGx1Z2luX2ZpbmFsX2xheW91dC5zdGRv dXQKK0BHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQEBQTFVHSU5TX1RS VUVAcGx1Z2luX2ZpbmFsX2xheW91dC5yZWFkZWxmLnN0ZG91dDogcGx1Z2lu X2ZpbmFsX2xheW91dAorQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVA QFBMVUdJTlNfVFJVRUAJJChURVNUX1JFQURFTEYpIC1XbCBwbHVnaW5fZmlu YWxfbGF5b3V0ID4gcGx1Z2luX2ZpbmFsX2xheW91dF9yZWFkZWxmLnN0ZG91 dAogCiBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBAUExVR0lOU19U UlVFQHBsdWdpbl9zZWN0aW9uX29yZGVyLnNvOiBwbHVnaW5fc2VjdGlvbl9v cmRlci5vCiBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBAUExVR0lO U19UUlVFQAkkKExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCBwbHVnaW5f c2VjdGlvbl9vcmRlci5vCkluZGV4OiBnb2xkL3Rlc3RzdWl0ZS9wbHVnaW5f ZmluYWxfbGF5b3V0LnNoCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9jdnMvc3JjL3NyYy9nb2xkL3Rlc3RzdWl0ZS9wbHVnaW5fZmluYWxf bGF5b3V0LnNoLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAt dSAtcCAtcjEuMSBwbHVnaW5fZmluYWxfbGF5b3V0LnNoCi0tLSBnb2xkL3Rl c3RzdWl0ZS9wbHVnaW5fZmluYWxfbGF5b3V0LnNoCTI5IFNlcCAyMDExIDIz OjQ1OjU3IC0wMDAwCTEuMQorKysgZ29sZC90ZXN0c3VpdGUvcGx1Z2luX2Zp bmFsX2xheW91dC5zaAkyNCBBdWcgMjAxMiAxODoxNjo1OSAtMDAwMApAQCAt NTYsNSArNTYsMzUgQEAgRU5EIHsKICAgICB9IiAkMQogfQogCisjIFdpdGgg cmVhZGVsZiAtbCwgYW4gRUxGIFNlY3Rpb24gdG8gU2VnbWVudCBtYXBwaW5n IGlzIHByaW50ZWQgYXMgOgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIyAgU2VjdGlvbiB0byBTZWdtZW50IG1h cHBpbmc6CisjICBTZWdtZW50IFNlY3Rpb25zLi4uCisjICAuLi4KKyMgICAg IDB4ICAgICAudGV4dC5wbHVnaW5fY3JlYXRlZF91bmlxdWUKKyMgIC4uLgor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyBDaGVjayBvZiAudGV4dC5wbHVnaW5fY3JlYXRlZF91bmlxdWUgaXMg dGhlIG9ubHkgc2VjdGlvbiBpbiB0aGUgc2VnbWVudC4KK2NoZWNrX3VuaXF1 ZV9zZWdtZW50KCkKK3sKKyAgICBhd2sgIgorQkVHSU4geyBzYXdfc2VjdGlv biA9IDA7IHNhd191bmlxdWUgPSAwOyB9CisvJDIvIHsgc2F3X3NlY3Rpb24g PSAxOyB9CisvWyBdKjBbMC05XVsgXSokMlsgXSpcJC8geyBzYXdfdW5pcXVl ID0gMTsgfQorRU5EIHsKKyAgICAgIGlmICghc2F3X3NlY3Rpb24pCisJewor CSAgcHJpbnRmIFwiU2VjdGlvbiAkMiBub3Qgc2VlbiBpbiBvdXRwdXRcXG5c IjsKKwkgIGV4aXQgMTsKKwl9CisgICAgICBlbHNlIGlmICghc2F3X3VuaXF1 ZSkKKwl7CisJICBwcmludGYgXCJVbmlxdWUgc2VnbWVudCBub3Qgc2VlbiBm b3I6ICQyXFxuXCI7CisJICBleGl0IDE7CisJfQorICAgIH0iICQxCit9CisK IGNoZWNrIHBsdWdpbl9maW5hbF9sYXlvdXQuc3Rkb3V0ICJfWjNmb292IiAi X1ozYmFydiIKIGNoZWNrIHBsdWdpbl9maW5hbF9sYXlvdXQuc3Rkb3V0ICJf WjNiYXJ2IiAiX1ozYmF6diIKK2NoZWNrX3VuaXF1ZV9zZWdtZW50IHBsdWdp bl9maW5hbF9sYXlvdXRfcmVhZGVsZi5zdGRvdXQgIi50ZXh0LnBsdWdpbl9j cmVhdGVkX3VuaXF1ZSIKSW5kZXg6IGdvbGQvdGVzdHN1aXRlL3BsdWdpbl9z ZWN0aW9uX29yZGVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dvbGQvdGVzdHN1aXRlL3BsdWdpbl9zZWN0aW9u X29yZGVyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC11 IC1wIC1yMS4xIHBsdWdpbl9zZWN0aW9uX29yZGVyLmMKLS0tIGdvbGQvdGVz dHN1aXRlL3BsdWdpbl9zZWN0aW9uX29yZGVyLmMJMjkgU2VwIDIwMTEgMjM6 NDU6NTcgLTAwMDAJMS4xCisrKyBnb2xkL3Rlc3RzdWl0ZS9wbHVnaW5fc2Vj dGlvbl9vcmRlci5jCTI0IEF1ZyAyMDEyIDE4OjE2OjU5IC0wMDAwCkBAIC0z Niw2ICszNiw5IEBAIHN0YXRpYyBsZF9wbHVnaW5fZ2V0X2lucHV0X3NlY3Rp b25fbmFtZSAKIHN0YXRpYyBsZF9wbHVnaW5fZ2V0X2lucHV0X3NlY3Rpb25f Y29udGVudHMgZ2V0X2lucHV0X3NlY3Rpb25fY29udGVudHMgPSBOVUxMOwog c3RhdGljIGxkX3BsdWdpbl91cGRhdGVfc2VjdGlvbl9vcmRlciB1cGRhdGVf c2VjdGlvbl9vcmRlciA9IE5VTEw7CiBzdGF0aWMgbGRfcGx1Z2luX2FsbG93 X3NlY3Rpb25fb3JkZXJpbmcgYWxsb3dfc2VjdGlvbl9vcmRlcmluZyA9IE5V TEw7CitzdGF0aWMgbGRfcGx1Z2luX2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9ucyAKKyAgICBhbGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2Vj dGlvbnMgPSBOVUxMOworc3RhdGljIGxkX3BsdWdpbl91bmlxdWVfc2VnbWVu dF9mb3Jfc2VjdGlvbnMgdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zID0g TlVMTDsKIAogZW51bSBsZF9wbHVnaW5fc3RhdHVzIG9ubG9hZChzdHJ1Y3Qg bGRfcGx1Z2luX3R2ICp0dik7CiBlbnVtIGxkX3BsdWdpbl9zdGF0dXMgY2xh aW1fZmlsZV9ob29rKGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5faW5wdXRfZmls ZSAqZmlsZSwKQEAgLTUyLDExICs1NSwxMyBAQCBvbmxvYWQoc3RydWN0IGxk X3BsdWdpbl90diAqdHYpCiAgICAgICBzd2l0Y2ggKGVudHJ5LT50dl90YWcp CiAgICAgICAgIHsKICAgICAgICAgY2FzZSBMRFBUX1JFR0lTVEVSX0NMQUlN X0ZJTEVfSE9PSzoKLSAgICAgICAgICBhc3NlcnQoKCplbnRyeS0+dHZfdS50 dl9yZWdpc3Rlcl9jbGFpbV9maWxlKSAoY2xhaW1fZmlsZV9ob29rKSA9PSBM RFBTX09LKTsKKyAgICAgICAgICBhc3NlcnQoKCplbnRyeS0+dHZfdS50dl9y ZWdpc3Rlcl9jbGFpbV9maWxlKSAoY2xhaW1fZmlsZV9ob29rKQorCQkgPT0g TERQU19PSyk7CiAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBMRFBUX1JFR0lT VEVSX0FMTF9TWU1CT0xTX1JFQURfSE9PSzoKLSAgICAgICAgICBhc3NlcnQo KCplbnRyeS0+dHZfdS50dl9yZWdpc3Rlcl9hbGxfc3ltYm9sc19yZWFkKSAo YWxsX3N5bWJvbHNfcmVhZF9ob29rKQotCQkgID09IExEUFNfT0spOworICAg ICAgICAgIGFzc2VydCgoKmVudHJ5LT50dl91LnR2X3JlZ2lzdGVyX2FsbF9z eW1ib2xzX3JlYWQpCisJCSAgICAgKGFsbF9zeW1ib2xzX3JlYWRfaG9vaykK KwkJID09IExEUFNfT0spOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBj YXNlIExEUFRfR0VUX0lOUFVUX1NFQ1RJT05fQ09VTlQ6CiAgICAgICAgICAg Z2V0X2lucHV0X3NlY3Rpb25fY291bnQgPSAqZW50cnktPnR2X3UudHZfZ2V0 X2lucHV0X3NlY3Rpb25fY291bnQ7CkBAIC02OCw3ICs3Myw4IEBAIG9ubG9h ZChzdHJ1Y3QgbGRfcGx1Z2luX3R2ICp0dikKICAgICAgICAgICBnZXRfaW5w dXRfc2VjdGlvbl9uYW1lID0gKmVudHJ5LT50dl91LnR2X2dldF9pbnB1dF9z ZWN0aW9uX25hbWU7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug TERQVF9HRVRfSU5QVVRfU0VDVElPTl9DT05URU5UUzoKLSAgICAgICAgICBn ZXRfaW5wdXRfc2VjdGlvbl9jb250ZW50cyA9ICplbnRyeS0+dHZfdS50dl9n ZXRfaW5wdXRfc2VjdGlvbl9jb250ZW50czsKKyAgICAgICAgICBnZXRfaW5w dXRfc2VjdGlvbl9jb250ZW50cworCSAgICAgID0gKmVudHJ5LT50dl91LnR2 X2dldF9pbnB1dF9zZWN0aW9uX2NvbnRlbnRzOwogICAgICAgICAgIGJyZWFr OwogCWNhc2UgTERQVF9VUERBVEVfU0VDVElPTl9PUkRFUjoKIAkgIHVwZGF0 ZV9zZWN0aW9uX29yZGVyID0gKmVudHJ5LT50dl91LnR2X3VwZGF0ZV9zZWN0 aW9uX29yZGVyOwpAQCAtNzYsNiArODIsMTMgQEAgb25sb2FkKHN0cnVjdCBs ZF9wbHVnaW5fdHYgKnR2KQogCWNhc2UgTERQVF9BTExPV19TRUNUSU9OX09S REVSSU5HOgogCSAgYWxsb3dfc2VjdGlvbl9vcmRlcmluZyA9ICplbnRyeS0+ dHZfdS50dl9hbGxvd19zZWN0aW9uX29yZGVyaW5nOwogCSAgYnJlYWs7CisJ Y2FzZSBMRFBUX0FMTE9XX1VOSVFVRV9TRUdNRU5UX0ZPUl9TRUNUSU9OUzoK KwkgIGFsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucworCSAgICAg ID0gKmVudHJ5LT50dl91LnR2X2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9z ZWN0aW9uczsKKwljYXNlIExEUFRfVU5JUVVFX1NFR01FTlRfRk9SX1NFQ1RJ T05TOgorCSAgdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zCisJICAgICAg PSAqZW50cnktPnR2X3UudHZfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25z OworCSAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgYnJl YWs7CiAgICAgICAgIH0KQEAgLTg2LDcgKzk5LDkgQEAgb25sb2FkKHN0cnVj dCBsZF9wbHVnaW5fdHYgKnR2KQogICAgICAgfHwgZ2V0X2lucHV0X3NlY3Rp b25fbmFtZSA9PSBOVUxMCiAgICAgICB8fCBnZXRfaW5wdXRfc2VjdGlvbl9j b250ZW50cyA9PSBOVUxMCiAgICAgICB8fCB1cGRhdGVfc2VjdGlvbl9vcmRl ciA9PSBOVUxMCi0gICAgICB8fCBhbGxvd19zZWN0aW9uX29yZGVyaW5nID09 IE5VTEwpCisgICAgICB8fCBhbGxvd19zZWN0aW9uX29yZGVyaW5nID09IE5V TEwKKyAgICAgIHx8IGFsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9u cyA9PSBOVUxMCisgICAgICB8fCB1bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlv bnMgPT0gTlVMTCkKICAgICB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNv bWUgaW50ZXJmYWNlcyBhcmUgbWlzc2luZ1xuIik7CiAgICAgICByZXR1cm4g TERQU19FUlI7CkBAIC0xMTcsNiArMTMyLDkgQEAgY2xhaW1fZmlsZV9ob29r KGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5faQogICAgIHsKICAgICAgIC8qIElu Zm9ybSB0aGUgbGlua2VyIHRvIHByZXBhcmUgZm9yIHNlY3Rpb24gcmVvcmRl cmluZy4gICovCiAgICAgICAoKmFsbG93X3NlY3Rpb25fb3JkZXJpbmcpKCk7 CisgICAgICAvKiBJbmZvcm0gdGhlIGxpbmtlciB0byBwcmVwYXJlIHRvIG1h cCBzb21lIHNlY3Rpb25zIHRvIHVuaXF1ZQorCSBzZWdtZW50cy4gICovCisg ICAgICAoKmFsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucykoKTsg CiAgICAgICBpc19vcmRlcmluZ19zcGVjaWZpZWQgPSAxOwogICAgIH0KIApA QCAtMTYwLDggKzE3OCwxMSBAQCBlbnVtIGxkX3BsdWdpbl9zdGF0dXMKIGFs bF9zeW1ib2xzX3JlYWRfaG9vayh2b2lkKQogewogICBpZiAobnVtX2VudHJp ZXMgPT0gMykKLSAgICB1cGRhdGVfc2VjdGlvbl9vcmRlcihzZWN0aW9uX2xp c3QsIG51bV9lbnRyaWVzKTsKKyAgICB7IAorICAgICAgdXBkYXRlX3NlY3Rp b25fb3JkZXIoc2VjdGlvbl9saXN0LCBudW1fZW50cmllcyk7CisgICAgICB1 bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMgKCIudGV4dC5wbHVnaW5fY3Jl YXRlZF91bmlxdWUiLCAwLCAweDEwMDAsCisJCQkJICAgc2VjdGlvbl9saXN0 LCBudW1fZW50cmllcyk7CisgICAgfQogCiAgIHJldHVybiBMRFBTX09LOwog fQotCkluZGV4OiBpbmNsdWRlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvaW5jbHVkZS9DaGFuZ2VM b2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTg3CmRpZmYgLXUgLXUgLXAg LXIxLjU4NyBDaGFuZ2VMb2cKLS0tIGluY2x1ZGUvQ2hhbmdlTG9nCTI0IEF1 ZyAyMDEyIDA3OjUyOjQ5IC0wMDAwCTEuNTg3CisrKyBpbmNsdWRlL0NoYW5n ZUxvZwkyNCBBdWcgMjAxMiAxODoxNjo1OSAtMDAwMApAQCAtMSwzICsxLDEz IEBACisyMDEyLTA4LTI0ICBTcmlyYW1hbiBUYWxsYW0gIDx0bXNyaXJhbUBn b29nbGUuY29tPgorCisJKiBwbHVnaW4tYXBpLmggKGxkX3BsdWdpbl9hbGxv d191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMpOgorCU5ldyBpbnRlcmZh Y2UuCisJKGxkX3BsdWdpbl91bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMp OiBOZXcgaW50ZXJmYWNlLgorCShMRFBUX0FMTE9XX1VOSVFVRV9TRUdNRU5U X0ZPUl9TRUNUSU9OUyk6IE5ldyBlbnVtIHZhbC4KKwkoTERQVF9VTklRVUVf U0VHTUVOVF9GT1JfU0VDVElPTlMpOiBOZXcgZW51bSB2YWwuCisJKHR2X2Fs bG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyk6IE5ldyBtZW1iZXIu CisJKHR2X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyk6IE5ldyBtZW1i ZXIuCisKIDIwMTItMDgtMjQgIE1hdHRoZXcgR3JldHRvbi1EYW5uICA8bWF0 dGhldy5ncmV0dG9uLWRhbm5AYXJtLmNvbT4KIAogCSogb3Bjb2RlL2FybS5o IChBUk1fQ1BVX0lTX0FOWSk6IE5ldyBkZWZpbmUuCkluZGV4OiBpbmNsdWRl L3BsdWdpbi1hcGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvaW5jbHVkZS9wbHVnaW4tYXBpLmgsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtdSAtdSAtcCAtcjEuMTkgcGx1Z2lu LWFwaS5oCi0tLSBpbmNsdWRlL3BsdWdpbi1hcGkuaAkxMiBKdW4gMjAxMiAy Mjo1MDo0NCAtMDAwMAkxLjE5CisrKyBpbmNsdWRlL3BsdWdpbi1hcGkuaAky NCBBdWcgMjAxMiAxODoxNjo1OSAtMDAwMApAQCAtMzE4LDYgKzMxOCwzMyBA QCB0eXBlZGVmCiBlbnVtIGxkX3BsdWdpbl9zdGF0dXMKICgqbGRfcGx1Z2lu X2FsbG93X3NlY3Rpb25fb3JkZXJpbmcpICh2b2lkKTsKIAorLyogVGhlIGxp bmtlcidzIGludGVyZmFjZSBmb3Igc3BlY2lmeWluZyB0aGF0IGEgc3Vic2V0 IG9mIHNlY3Rpb25zIGlzCisgICB0byBiZSBtYXBwZWQgdG8gYSB1bmlxdWUg c2VnbWVudC4gIElmIHRoZSBwbHVnaW4gd2FudHMgdG8gY2FsbAorICAgdW5p cXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zLCBpdCBtdXN0IGNhbGwgdGhpcyBm dW5jdGlvbiBmcm9tIGEKKyAgIGNsYWltX2ZpbGVfaGFuZGxlciBvciB3aGVu IGl0IGlzIGZpcnN0IGxvYWRlZC4gICovCisKK3R5cGVkZWYKK2VudW0gbGRf cGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fYWxsb3dfdW5pcXVlX3NlZ21l bnRfZm9yX3NlY3Rpb25zKSAodm9pZCk7CisKKy8qIFRoZSBsaW5rZXIncyBp bnRlcmZhY2UgZm9yIHNwZWNpZnlpbmcgdGhhdCBhIHNwZWNpZmljIHNldCBv ZiBzZWN0aW9ucworICAgbXVzdCBiZSBtYXBwZWQgdG8gYSB1bmlxdWUgc2Vn bWVudC4gIEVMRiBzZWdtZW50cyBkbyBub3QgaGF2ZSBuYW1lcworICAgYW5k IHRoZSBOQU1FIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIG5ld2x5IGNy ZWF0ZWQgb3V0cHV0IHNlY3Rpb24KKyAgIHRoYXQgaXMgdGhlbiBwbGFjZWQg aW4gdGhlIHVuaXF1ZSBQVF9MT0FEIHNlZ21lbnQuICBGTEFHUyBpcyB1c2Vk IHRvCisgICBzcGVjaWZ5IGlmIGFueSBhZGRpdGlvbmFsIHNlZ21lbnQgZmxh Z3MgbmVlZCB0byBiZSBzZXQuICBGb3IgaW5zdGFuY2UsCisgICBhIHNwZWNp ZmljIHNlZ21lbnQgZmxhZyBjYW4gYmUgc2V0IHRvIGlkZW50aWZ5IHRoaXMg c2VnbWVudC4gIFVuc2V0dGluZworICAgc2VnbWVudCBmbGFncyB0aGF0IHdv dWxkIGJlIHNldCBieSBkZWZhdWx0IGlzIG5vdCBwb3NzaWJsZS4gIFRoZQor ICAgcGFyYW1ldGVyIFNFR01FTlRfQUxJR05NRU5UIHdoZW4gbm9uLXplcm8g d2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdC4gICovCisKK3R5cGVkZWYKK2Vu dW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fdW5pcXVlX3NlZ21l bnRfZm9yX3NlY3Rpb25zKSAoCisgICAgY29uc3QgY2hhciogc2VnbWVudF9u YW1lLAorICAgIHVpbnQ2NF90IHNlZ21lbnRfZmxhZ3MsCisgICAgdWludDY0 X3Qgc2VnbWVudF9hbGlnbm1lbnQsCisgICAgY29uc3Qgc3RydWN0IGxkX3Bs dWdpbl9zZWN0aW9uICogc2VjdGlvbl9saXN0LAorICAgIHVuc2lnbmVkIGlu dCBudW1fc2VjdGlvbnMpOworCiBlbnVtIGxkX3BsdWdpbl9sZXZlbAogewog ICBMRFBMX0lORk8sCkBAIC0zNTUsNyArMzgyLDkgQEAgZW51bSBsZF9wbHVn aW5fdGFnCiAgIExEUFRfR0VUX0lOUFVUX1NFQ1RJT05fQ09OVEVOVFMsCiAg IExEUFRfVVBEQVRFX1NFQ1RJT05fT1JERVIsCiAgIExEUFRfQUxMT1dfU0VD VElPTl9PUkRFUklORywKLSAgTERQVF9HRVRfU1lNQk9MU19WMgorICBMRFBU X0dFVF9TWU1CT0xTX1YyLAorICBMRFBUX0FMTE9XX1VOSVFVRV9TRUdNRU5U X0ZPUl9TRUNUSU9OUywKKyAgTERQVF9VTklRVUVfU0VHTUVOVF9GT1JfU0VD VElPTlMKIH07CiAKIC8qIFRoZSBwbHVnaW4gdHJhbnNmZXIgdmVjdG9yLiAg Ki8KQEAgLTM4NSw2ICs0MTQsOCBAQCBzdHJ1Y3QgbGRfcGx1Z2luX3R2CiAg ICAgbGRfcGx1Z2luX2dldF9pbnB1dF9zZWN0aW9uX2NvbnRlbnRzIHR2X2dl dF9pbnB1dF9zZWN0aW9uX2NvbnRlbnRzOwogICAgIGxkX3BsdWdpbl91cGRh dGVfc2VjdGlvbl9vcmRlciB0dl91cGRhdGVfc2VjdGlvbl9vcmRlcjsKICAg ICBsZF9wbHVnaW5fYWxsb3dfc2VjdGlvbl9vcmRlcmluZyB0dl9hbGxvd19z ZWN0aW9uX29yZGVyaW5nOworICAgIGxkX3BsdWdpbl9hbGxvd191bmlxdWVf c2VnbWVudF9mb3Jfc2VjdGlvbnMgdHZfYWxsb3dfdW5pcXVlX3NlZ21lbnRf Zm9yX3NlY3Rpb25zOyAKKyAgICBsZF9wbHVnaW5fdW5pcXVlX3NlZ21lbnRf Zm9yX3NlY3Rpb25zIHR2X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9uczsK ICAgfSB0dl91OwogfTsKIAo= --14dae93a15cdeeaa9b04c807450a--