From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 81727385828B for ; Mon, 17 Oct 2022 13:25:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 81727385828B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1666013146; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=J3aw6tEBT67xZzE6ITrNaWZIxhP60JNHWYs/r4WBgKA=; b=aQUlTFCHvywUkN7JHUHE6lnH9uBAveGuDkEyuyZ/O4VJoCEYdOcAzvk3Cutg0DgbHcy0Kt 8ahxTK4JAHxtoCbc0P+tfQdmZFskKD6XRkHEbOj7UVIHemAvvVwdgk2bHFRemcbycO3epc iv3e5dmqui5z637YqRnjfkfHwIlSSyQ= Received: from mail-io1-f72.google.com (mail-io1-f72.google.com [209.85.166.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-255-EOEFu1CUPLieDimy53wFpA-1; Mon, 17 Oct 2022 09:25:44 -0400 X-MC-Unique: EOEFu1CUPLieDimy53wFpA-1 Received: by mail-io1-f72.google.com with SMTP id w16-20020a6b4a10000000b006a5454c789eso7023304iob.20 for ; Mon, 17 Oct 2022 06:25:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=z8DfyJn8J089leVP591hkff6DvxkB1UyCsaSGCiT6zg=; b=CbECYv68O+PnYNw+jHXWPvq7swnkx8qebIQoBTO+QxOCwOoulfbNgNtQXXodbpTLx+ 93j7046ibCoJE3c68UPjNp26T9yudc3iNoQUlgeDVd6OmKQGbZ/9qV+tryKj/8w2tlBV P2J5QJmwuTeLqfdJd6CqTcjbBfADaqXxzzK6qWSL9doBJ9yWyp1pPzi86Fi1dErJic16 SyYRtEcTVwVDAdvIfNfk2IUNnUkDkvf1hOT3kIl8FamSvu4T+46HGJ3zXq+Nx05OJKSw ZwHYuiysGHDMNUAOsXA60dSq010OICUiXH050f6Ito50siKWukXx1+B+7s8NbV6+s0e8 hWxA== X-Gm-Message-State: ACrzQf0NlvzXLMsbeiJC78QKXXIu48r21z2xhWVYBOwucnN706iLhVBd uyhlCTE4bFYQ1u/N0BROCYLlrQLtMalOeQnoxQq8igsivGSVu8EqM4qYzV1COPnH1cmplxjfLZe Gb18fGcJHOng4Q8Uh2CKvCCqzv5zK4lzOG6clagWeX6qBVwMg++QAiSxMkAn2Z+ZtOFnpNA== X-Received: by 2002:a05:6e02:154a:b0:2fa:99fc:6c7e with SMTP id j10-20020a056e02154a00b002fa99fc6c7emr4592600ilu.285.1666013143328; Mon, 17 Oct 2022 06:25:43 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6sqRg5faE9LvhN4SrihQ/jHeGua9hncYj9TMnOZrMiiJ2TwOS0fDirX98adR0fSeZsrESy4A== X-Received: by 2002:a05:6e02:154a:b0:2fa:99fc:6c7e with SMTP id j10-20020a056e02154a00b002fa99fc6c7emr4592588ilu.285.1666013142968; Mon, 17 Oct 2022 06:25:42 -0700 (PDT) Received: from ?IPV6:2607:fea8:a263:f600::50d4? ([2607:fea8:a263:f600::50d4]) by smtp.gmail.com with ESMTPSA id ce15-20020a0566381a8f00b0035b496b0a7fsm4414745jab.36.2022.10.17.06.25.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Oct 2022 06:25:42 -0700 (PDT) Message-ID: <0f993407-dc43-c120-8bad-4b6c5b7a1aad@redhat.com> Date: Mon, 17 Oct 2022 09:25:40 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 To: gcc-patches Cc: "hernandez, aldy" From: Andrew MacLeod Subject: [COMMITTED] Add relation_trio class for range-ops. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------XU5NVE3XFcRMUHAivdKmZoMP" Content-Language: en-US X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_FILL_THIS_FORM_FRAUD_PHISH,T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------XU5NVE3XFcRMUHAivdKmZoMP Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit When I first added relations to range_ops, I struggled with obfuscating the API too much by adding all of the 3 possible relations.  For simplicity, it seemed like only one was ever relevant, so elected to add one relation, and make it always the relation between the 2 known operands. fold_range()    - relation passed  op1 REL op2 op1_range()    - relation passed  lhs REL op2 op2_range()    - relation passed  lhs REL op1 With some of the floating point enhancements, we've tripped over cases where its useful to know one or more of the relations. This patch provides a new class in value_relation.h called "relation_trio" which packages up 3 relations into a single unsigned value, and allows them to be extracted by request.  I have changed all 3 of the primary range-ops interface routines mentioned above to take a relation_trio object by value rather than a relation kind, and then each range_op routines explicitly asks for the relation it is looking for. I have also audited the range-op and range-op-float routines to make sure that when op2_range invokes op1_range that we do the appropriate relation swapping. There is virtually no performance impact by this, and it is now clear when looking at one of the range-ops routines exactly what relation it is using.   This seems much less confusing. I have also adjusted the compute_operand[12]_range routines in GORI to also provide a second relation when appropriate. Bootstrapped on  x86_64-pc-linux-gnu with no regressions. Pushed. Andrew --------------XU5NVE3XFcRMUHAivdKmZoMP Content-Type: text/x-patch; charset=UTF-8; name="0003-Add-relation_trio-class-for-range-ops.patch" Content-Disposition: attachment; filename="0003-Add-relation_trio-class-for-range-ops.patch" Content-Transfer-Encoding: base64 RnJvbSBiNTY1YWMxOTI2NGE1ODI3MTYyZDI4NTM3YmNjYzg1MzFjMjVlODE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4K RGF0ZTogVGh1LCAxMyBPY3QgMjAyMiAxODowMzo1OCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMy80 XSBBZGQgcmVsYXRpb25fdHJpbyBjbGFzcyBmb3IgcmFuZ2Utb3BzLgoKVGhlcmUgYXJlIDMgcG9z c2libGUgcmVsYXRpb25zIHJhbmdlLW9wcyBtaWdodCBjYXJlIGFib3V0LCBidXQgb25seSB0aGUg b25lCm1vc3QgbGlrZWx5IHRvIGJlIG5lZWRlZCBpcyBzdXBwbGllZC4gICBUaGlzIHBhdGNoIHBy b3ZpZGVzIGEgbmV3IGNsYXNzCnJlbGF0aW9uX3RyaW8gd2hpY2ggYWxsb3dzIDMgcmVsYXRpb25z IHRvIGJlIHBhc3NlZCBpbiBhIHNpbmdsZSB3b3JkLgoKZm9sZF9yYW5nZSAoKSwgb3AxX3Jhbmdl ICgpLCBhbmQgb3AyX3JhbmdlICgpIGFyZSBhZGp1c3RlZCB0byB0YWtlIGEKcmVsYXRpb25fdHJp byBjbGFzcyBpbnN0ZWFkIG9mIGEgcmVsYXRpb25fa2luZCwgdGhlbiB0aGUgcm91dGluZSBjYW4K ZXh0cmFjdCB3aGljaCByZWxhdGlvbiBpdCB3YW50cyB0byB3b3JrIHdpdGguCgoJKiBnaW1wbGUt cmFuZ2UtZm9sZC5jYyAoZm9sZF91c2luZ19yYW5nZTo6cmFuZ2Vfb2ZfcmFuZ2Vfb3ApOgoJUHJv dmlkZSByZWxhdGlvbl90cmlvIGNsYXNzLgoJKiBnaW1wbGUtcmFuZ2UtZ29yaS5jYyAoZ29yaV9j b21wdXRlOjpyZWZpbmVfdXNpbmdfcmVsYXRpb24pOgoJUHJvdmlkZSByZWxhdGlvbl90cmlvIGNs YXNzLgoJKGdvcmlfY29tcHV0ZTo6cmVmaW5lX3VzaW5nX3JlbGF0aW9uKTogRGl0dG8uCgkoZ29y aV9jb21wdXRlOjpjb21wdXRlX29wZXJhbmQxX3JhbmdlKTogUHJvdmlkZSBsaHNfb3AyIGFuZAoJ b3AxX29wMiByZWxhdGlvbnMgdmlhIHJlbGF0aW9uX3RyaW8gY2xhc3MuCgkoZ29yaV9jb21wdXRl Ojpjb21wdXRlX29wZXJhbmQyX3JhbmdlKTogRGl0dG8uCgkqIGdpbXBsZS1yYW5nZS1vcC5jYyAo Z2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6OmNhbGNfb3AxKTogVXNlCglyZWxhdGlvbl90cmlvIGlu c3RlYWQgb2YgcmVsYXRpb25fa2luZC4KCShnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlcjo6Y2FsY19v cDIpOiBEaXR0by4KCSgqOjpmb2xkX3JhbmdlKTogRGl0dG8uCgkqIGdpbXBsZS1yYW5nZS1vcC5o IChnaW1wbGVfcmFuZ2Vfb3A6OmNhbGNfb3AxKTogQWRqdXN0IHByb3RvdHlwZXMuCgkoZ2ltcGxl X3JhbmdlX29wOjpjYWxjX29wMik6IEFkanVzdCBwcm90b3R5cGVzLgoJKiByYW5nZS1vcC1mbG9h dC5jYyAoKjo6Zm9sZF9yYW5nZSk6IFVzZSByZWxhdGlvbl90cmlvIGluc3RlYWQgb2YKCXJlbGF0 aW9uX2tpbmQuCgkoKjo6b3AxX3JhbmdlKTogRGl0dG8uCgkoKjo6b3AyX3JhbmdlKTogRGl0dG8u CgkqIHJhbmdlLW9wLmNjICgqOjpmb2xkX3JhbmdlKTogVXNlIHJlbGF0aW9uX3RyaW8gaW5zdGVh ZCBvZgoJcmVsYXRpb25fa2luZC4KCSgqOjpvcDFfcmFuZ2UpOiBEaXR0by4KCSgqOjpvcDJfcmFu Z2UpOiBEaXR0by4KCSogcmFuZ2Utb3AuaCAoY2xhc3MgcmFuZ2Vfb3BlcmF0b3IpOiBBZGp1c3Qg cHJvdG90eXBlcy4KCShjbGFzcyByYW5nZV9vcGVyYXRvcl9mbG9hdCk6IERpdHRvLgoJKGNsYXNz IHJhbmdlX29wX2hhbmRsZXIpOiBBZGp1c3QgcHJvdG90eXBlcy4KCShyZWxvcF9lYXJseV9yZXNv bHZlKTogUGlja3VwIG9wMV9vcDIgcmVsYXRpb24gZnJvbSByZWxhdGlvbl90cmlvLgoJKiB2YWx1 ZS1yZWxhdGlvbi5jYyAoVlJFTF9MQVNUKTogQWRqdXN0IHVzZSB0byBiZSBvbmUgcGFzdCB0aGUg ZW5kIG9mCgl0aGUgZW51bS4KCShyZWxhdGlvbl9vcmFjbGU6OnZhbGlkYXRlX3JlbGF0aW9uKTog VXNlIHJlbGF0aW9uX3RyaW8gaW4gY2FsbAoJdG8gZm9sZF9yYW5nZS4KCSogdmFsdWUtcmVsYXRp b24uaCAoZW51bSByZWxhdGlvbl9raW5kX3QpOiBBZGQgVlJFTF9MQVNUIGFzCglmaW5hbCBlbGVt ZW50LgoJKGNsYXNzIHJlbGF0aW9uX3RyaW8pOiBOZXcuCgkoVFJJT19WQVJZSU5HLCBUUklPX1NI SUZULCBUUklPX01BU0spOiBOZXcuCi0tLQogZ2NjL2dpbXBsZS1yYW5nZS1mb2xkLmNjIHwgICA1 ICstCiBnY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MgfCAgNDMgKysrKy0tLQogZ2NjL2dpbXBsZS1y YW5nZS1vcC5jYyAgIHwgIDQwICsrKy0tLQogZ2NjL2dpbXBsZS1yYW5nZS1vcC5oICAgIHwgICA0 ICstCiBnY2MvcmFuZ2Utb3AtZmxvYXQuY2MgICAgfCAxNzAgKysrKysrKysrKysrKy0tLS0tLS0t LS0tLQogZ2NjL3JhbmdlLW9wLmNjICAgICAgICAgIHwgMjY3ICsrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLQogZ2NjL3JhbmdlLW9wLmggICAgICAgICAgIHwgIDI5ICsrKy0t CiBnY2MvdmFsdWUtcmVsYXRpb24uY2MgICAgfCAgMTkgKystCiBnY2MvdmFsdWUtcmVsYXRpb24u aCAgICAgfCAxMTkgKysrKysrKysrKysrKysrLS0KIDkgZmlsZXMgY2hhbmdlZCwgNDA1IGluc2Vy dGlvbnMoKyksIDI5MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdl LWZvbGQuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLWZvbGQuY2MKaW5kZXggYzM4MWVmOTQwODcuLmY5 MTkyMzc4MmRjIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWZvbGQuY2MKKysrIGIvZ2Nj L2dpbXBsZS1yYW5nZS1mb2xkLmNjCkBAIC01NzgsNyArNTc4LDggQEAgZm9sZF91c2luZ19yYW5n ZTo6cmFuZ2Vfb2ZfcmFuZ2Vfb3AgKHZyYW5nZSAmciwKIAkgICAgICBmcHV0YyAoJ1xuJywgZHVt cF9maWxlKTsKIAkgICAgfQogCSAgLy8gRm9sZCByYW5nZSwgYW5kIHJlZ2lzdGVyIGFueSBkZXBl bmRlbmN5IGlmIGF2YWlsYWJsZS4KLQkgIGlmICghaGFuZGxlci5mb2xkX3JhbmdlIChyLCB0eXBl LCByYW5nZTEsIHJhbmdlMiwgcmVsKSkKKwkgIGlmICghaGFuZGxlci5mb2xkX3JhbmdlIChyLCB0 eXBlLCByYW5nZTEsIHJhbmdlMiwKKwkJCQkgICByZWxhdGlvbl90cmlvOjpvcDFfb3AyIChyZWwp KSkKIAkgICAgci5zZXRfdmFyeWluZyAodHlwZSk7CiAJICBpZiAoaXJhbmdlOjpzdXBwb3J0c19w ICh0eXBlKSkKIAkgICAgcmVsYXRpb25fZm9sZF9hbmRfb3IgKGFzX2EgPGlyYW5nZT4gKHIpLCBz LCBzcmMpOwpAQCAtNTk3LDcgKzU5OCw3IEBAIGZvbGRfdXNpbmdfcmFuZ2U6OnJhbmdlX29mX3Jh bmdlX29wICh2cmFuZ2UgJnIsCiAJCX0KIAkgICAgICBpZiAoZ2ltcGxlX3JhbmdlX3NzYV9wIChv cDIpKQogCQl7Ci0JCSAgcmVsPSBoYW5kbGVyLmxoc19vcDJfcmVsYXRpb24gKHIsIHJhbmdlMSwg cmFuZ2UyLCByZWwpOworCQkgIHJlbCA9IGhhbmRsZXIubGhzX29wMl9yZWxhdGlvbiAociwgcmFu Z2UxLCByYW5nZTIsIHJlbCk7CiAJCSAgaWYgKHJlbCAhPSBWUkVMX1ZBUllJTkcpCiAJCSAgICBz cmMucmVnaXN0ZXJfcmVsYXRpb24gKHMsIHJlbCwgbGhzLCBvcDIpOwogCQl9CmRpZmYgLS1naXQg YS9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MKaW5k ZXggNWZmMDY3Y2FkYjUuLjYxMGE1Mjk1ZTYyIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdl LWdvcmkuY2MKKysrIGIvZ2NjL2dpbXBsZS1yYW5nZS1nb3JpLmNjCkBAIC05OTEsNyArOTkxLDcg QEAgZ29yaV9jb21wdXRlOjpyZWZpbmVfdXNpbmdfcmVsYXRpb24gKHRyZWUgb3AxLCB2cmFuZ2Ug Jm9wMV9yYW5nZSwKICAgICAgIFZhbHVlX1JhbmdlIG5ld19yZXN1bHQgKHR5cGUpOwogICAgICAg aWYgKCFvcF9oYW5kbGVyLm9wMV9yYW5nZSAobmV3X3Jlc3VsdCwgdHlwZSwKIAkJCQkgb3AxX2Rl Zl9wID8gb3AxX3JhbmdlIDogb3AyX3JhbmdlLAotCQkJCSBvdGhlcl9vcCwgaykpCisJCQkJIG90 aGVyX29wLCByZWxhdGlvbl90cmlvOjpsaHNfb3AyIChrKSkpCiAJcmV0dXJuIGZhbHNlOwogICAg ICAgaWYgKG9wMV9kZWZfcCkKIAl7CkBAIC0xMDIzLDcgKzEwMjMsNyBAQCBnb3JpX2NvbXB1dGU6 OnJlZmluZV91c2luZ19yZWxhdGlvbiAodHJlZSBvcDEsIHZyYW5nZSAmb3AxX3JhbmdlLAogICAg ICAgVmFsdWVfUmFuZ2UgbmV3X3Jlc3VsdCAodHlwZSk7CiAgICAgICBpZiAoIW9wX2hhbmRsZXIu b3AyX3JhbmdlIChuZXdfcmVzdWx0LCB0eXBlLAogCQkJCSBvcDFfZGVmX3AgPyBvcDFfcmFuZ2Ug OiBvcDJfcmFuZ2UsCi0JCQkJIG90aGVyX29wLCBrKSkKKwkJCQkgb3RoZXJfb3AsIHJlbGF0aW9u X3RyaW86Omxoc19vcDEgKGspKSkKIAlyZXR1cm4gZmFsc2U7CiAgICAgICBpZiAob3AxX2RlZl9w KQogCXsKQEAgLTEwNzQsNiArMTA3NCw3IEBAIGdvcmlfY29tcHV0ZTo6Y29tcHV0ZV9vcGVyYW5k MV9yYW5nZSAodnJhbmdlICZyLAogICAgIHsKICAgICAgIHNyYy5nZXRfb3BlcmFuZCAob3AyX3Jh bmdlLCBvcDIpOwogICAgICAgcmVsYXRpb25fa2luZCBrID0gVlJFTF9WQVJZSU5HOworICAgICAg cmVsYXRpb25fa2luZCBvcF9vcCA9IChvcDEgPT0gb3AyKSA/IFZSRUxfRVEgOiBWUkVMX1ZBUllJ Tkc7CiAgICAgICBpZiAocmVsKQogCXsKIAkgaWYgKGxoc19uYW1lID09IHJlbC0+b3AxICgpICYm IG9wMSA9PSByZWwtPm9wMiAoKSkKQEAgLTEwODEsMTMgKzEwODIsMTggQEAgZ29yaV9jb21wdXRl Ojpjb21wdXRlX29wZXJhbmQxX3JhbmdlICh2cmFuZ2UgJnIsCiAJIGVsc2UgaWYgKGxoc19uYW1l ID09IHJlbC0+b3AyICgpICYmIG9wMSA9PSByZWwtPm9wMSAoKSkKIAkgICBrID0gcmVsYXRpb25f c3dhcCAocmVsLT5raW5kICgpKTsKIAkgZWxzZSBpZiAob3AxID09IHJlbC0+b3AxICgpICYmIG9w MiA9PSByZWwtPm9wMiAoKSkKLQkgICByZWZpbmVfdXNpbmdfcmVsYXRpb24gKG9wMSwgb3AxX3Jh bmdlLCBvcDIsIG9wMl9yYW5nZSwgc3JjLAotCQkJCSAgcmVsLT5raW5kICgpKTsKKwkgICB7CisJ ICAgICBvcF9vcCA9IHJlbC0+a2luZCAoKTsKKwkgICAgIHJlZmluZV91c2luZ19yZWxhdGlvbiAo b3AxLCBvcDFfcmFuZ2UsIG9wMiwgb3AyX3JhbmdlLCBzcmMsIG9wX29wKTsKKwkgICB9CiAJIGVs c2UgaWYgKG9wMSA9PSByZWwtPm9wMiAoKSAmJiBvcDIgPT0gcmVsLT5vcDEgKCkpCi0JICAgcmVm aW5lX3VzaW5nX3JlbGF0aW9uIChvcDEsIG9wMV9yYW5nZSwgb3AyLCBvcDJfcmFuZ2UsIHNyYywK LQkJCQkgIHJlbGF0aW9uX3N3YXAgKHJlbC0+a2luZCAoKSkpOworCSAgIHsKKwkgICAgIG9wX29w ID0gcmVsYXRpb25fc3dhcCAocmVsLT5raW5kICgpKTsKKwkgICAgIHJlZmluZV91c2luZ19yZWxh dGlvbiAob3AxLCBvcDFfcmFuZ2UsIG9wMiwgb3AyX3JhbmdlLCBzcmMsIG9wX29wKTsKKwkgICB9 CiAgICAgICAgfQotICAgICAgaWYgKCFoYW5kbGVyLmNhbGNfb3AxICh0bXAsIGxocywgb3AyX3Jh bmdlLCBrKSkKKyAgICAgIGlmICghaGFuZGxlci5jYWxjX29wMSAodG1wLCBsaHMsIG9wMl9yYW5n ZSwgcmVsYXRpb25fdHJpbyAoVlJFTF9WQVJZSU5HLAorCQkJCQkJCQkgaywgb3Bfb3ApKSkKIAly ZXR1cm4gZmFsc2U7CiAgICAgfQogICBlbHNlCkBAIC0xMDk1LDcgKzExMDEsNyBAQCBnb3JpX2Nv bXB1dGU6OmNvbXB1dGVfb3BlcmFuZDFfcmFuZ2UgKHZyYW5nZSAmciwKICAgICAgIC8vIFdlIHBh c3Mgb3AxX3JhbmdlIHRvIHRoZSB1bmFyeSBvcGVyYXRpb24uICBOb21hbGx5IGl0J3MgYQogICAg ICAgLy8gaGlkZGVuIHJhbmdlX2Zvcl90eXBlIHBhcmFtZXRlciwgYnV0IHNvbWV0aW1lcyBoYXZp bmcgdGhlCiAgICAgICAvLyBhY3R1YWwgcmFuZ2UgY2FuIHJlc3VsdCBpbiBiZXR0ZXIgaW5mb3Jt YXRpb24uCi0gICAgICBpZiAoIWhhbmRsZXIuY2FsY19vcDEgKHRtcCwgbGhzLCBvcDFfcmFuZ2Us IFZSRUxfVkFSWUlORykpCisgICAgICBpZiAoIWhhbmRsZXIuY2FsY19vcDEgKHRtcCwgbGhzLCBv cDFfcmFuZ2UsIFRSSU9fVkFSWUlORykpCiAJcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTE2 NywyMyArMTE3MywyOCBAQCBnb3JpX2NvbXB1dGU6OmNvbXB1dGVfb3BlcmFuZDJfcmFuZ2UgKHZy YW5nZSAmciwKICAgc3JjLmdldF9vcGVyYW5kIChvcDFfcmFuZ2UsIG9wMSk7CiAgIHNyYy5nZXRf b3BlcmFuZCAob3AyX3JhbmdlLCBvcDIpOwogICByZWxhdGlvbl9raW5kIGsgPSBWUkVMX1ZBUllJ Tkc7CisgIHJlbGF0aW9uX2tpbmQgb3Bfb3AgPSAob3AxID09IG9wMikgPyBWUkVMX0VRIDogVlJF TF9WQVJZSU5HOwogICBpZiAocmVsKQogICAgIHsKICAgICAgIGlmIChsaHNfbmFtZSA9PSByZWwt Pm9wMSAoKSAmJiBvcDIgPT0gcmVsLT5vcDIgKCkpCi0gICAgICAgayA9IHJlbC0+a2luZCAoKTsK KwlrID0gcmVsLT5raW5kICgpOwogICAgICAgZWxzZSBpZiAobGhzX25hbWUgPT0gcmVsLT5vcDIg KCkgJiYgb3AyID09IHJlbC0+b3AxICgpKQotICAgICAgIGsgPSByZWxhdGlvbl9zd2FwIChyZWwt PmtpbmQgKCkpOworCWsgPSByZWxhdGlvbl9zd2FwIChyZWwtPmtpbmQgKCkpOwogICAgICAgZWxz ZSBpZiAob3AxID09IHJlbC0+b3AxICgpICYmIG9wMiA9PSByZWwtPm9wMiAoKSkKLSAgICAgICBy ZWZpbmVfdXNpbmdfcmVsYXRpb24gKG9wMSwgb3AxX3JhbmdlLCBvcDIsIG9wMl9yYW5nZSwgc3Jj LAotCQkJICAgICAgcmVsLT5raW5kICgpKTsKKwl7CisJICBvcF9vcCA9IHJlbC0+a2luZCAoKTsK KwkgIHJlZmluZV91c2luZ19yZWxhdGlvbiAob3AxLCBvcDFfcmFuZ2UsIG9wMiwgb3AyX3Jhbmdl LCBzcmMsIG9wX29wKTsKKwl9CiAgICAgICBlbHNlIGlmIChvcDEgPT0gcmVsLT5vcDIgKCkgJiYg b3AyID09IHJlbC0+b3AxICgpKQotICAgICAgIHJlZmluZV91c2luZ19yZWxhdGlvbiAob3AxLCBv cDFfcmFuZ2UsIG9wMiwgb3AyX3JhbmdlLCBzcmMsCi0JCQkgICAgICByZWxhdGlvbl9zd2FwIChy ZWwtPmtpbmQgKCkpKTsKKwl7CisJICBvcF9vcCA9IHJlbGF0aW9uX3N3YXAgKHJlbC0+a2luZCAo KSk7CisJICByZWZpbmVfdXNpbmdfcmVsYXRpb24gKG9wMSwgb3AxX3JhbmdlLCBvcDIsIG9wMl9y YW5nZSwgc3JjLCBvcF9vcCk7CisJfQogICAgIH0KIAotCiAgIC8vIEludGVyc2VjdCB3aXRoIHJh bmdlIGZvciBvcDIgYmFzZWQgb24gbGhzIGFuZCBvcDEuCi0gIGlmICghaGFuZGxlci5jYWxjX29w MiAodG1wLCBsaHMsIG9wMV9yYW5nZSwgaykpCisgIGlmICghaGFuZGxlci5jYWxjX29wMiAodG1w LCBsaHMsIG9wMV9yYW5nZSwgcmVsYXRpb25fdHJpbyAoaywgVlJFTF9WQVJZSU5HLAorCQkJCQkJ CSAgICAgb3Bfb3ApKSkKICAgICByZXR1cm4gZmFsc2U7CiAKICAgdW5zaWduZWQgaWR4OwpkaWZm IC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS1vcC5jYyBiL2djYy9naW1wbGUtcmFuZ2Utb3AuY2MK aW5kZXggMjY2MjMxOWFhZGMuLjc3NjQxNjZkNWZiIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJh bmdlLW9wLmNjCisrKyBiL2djYy9naW1wbGUtcmFuZ2Utb3AuY2MKQEAgLTIwMiw3ICsyMDIsNyBA QCBnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlcjo6Y2FsY19vcDEgKHZyYW5nZSAmciwgY29uc3QgdnJh bmdlICZsaHNfcmFuZ2UpCiAKIGJvb2wKIGdpbXBsZV9yYW5nZV9vcF9oYW5kbGVyOjpjYWxjX29w MSAodnJhbmdlICZyLCBjb25zdCB2cmFuZ2UgJmxoc19yYW5nZSwKLQkJCQkgICBjb25zdCB2cmFu Z2UgJm9wMl9yYW5nZSwgcmVsYXRpb25fa2luZCBrKQorCQkJCSAgIGNvbnN0IHZyYW5nZSAmb3Ay X3JhbmdlLCByZWxhdGlvbl90cmlvIGspCiB7CiAgIC8vIEdpdmUgdXAgb24gZW1wdHkgcmFuZ2Vz LgogICBpZiAobGhzX3JhbmdlLnVuZGVmaW5lZF9wICgpKQpAQCAtMjM3LDcgKzIzNyw3IEBAIGdp bXBsZV9yYW5nZV9vcF9oYW5kbGVyOjpjYWxjX29wMSAodnJhbmdlICZyLCBjb25zdCB2cmFuZ2Ug Jmxoc19yYW5nZSwKIAogYm9vbAogZ2ltcGxlX3JhbmdlX29wX2hhbmRsZXI6OmNhbGNfb3AyICh2 cmFuZ2UgJnIsIGNvbnN0IHZyYW5nZSAmbGhzX3JhbmdlLAotCQkJCSAgIGNvbnN0IHZyYW5nZSAm b3AxX3JhbmdlLCByZWxhdGlvbl9raW5kIGspCisJCQkJICAgY29uc3QgdnJhbmdlICZvcDFfcmFu Z2UsIHJlbGF0aW9uX3RyaW8gaykKIHsKICAgLy8gR2l2ZSB1cCBvbiBlbXB0eSByYW5nZXMuCiAg IGlmIChsaHNfcmFuZ2UudW5kZWZpbmVkX3AgKCkpCkBAIC0yNjMsNyArMjYzLDcgQEAgY2xhc3Mg Y2ZuX2NvbnN0YW50X2Zsb2F0X3AgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIHB1Ymxp YzoKICAgdXNpbmcgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQ6OmZvbGRfcmFuZ2U7CiAgIHZpcnR1YWwg Ym9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwgY29uc3QgZnJhbmdlICZsaCwK LQkJCSAgIGNvbnN0IGlyYW5nZSAmLCByZWxhdGlvbl9raW5kKSBjb25zdAorCQkJICAgY29uc3Qg aXJhbmdlICYsIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiAgIHsKICAgICBpZiAobGguc2luZ2xldG9u X3AgKCkpCiAgICAgICB7CkBAIC0yODUsNyArMjg1LDcgQEAgY2xhc3MgY2ZuX2NvbnN0YW50X3Ag OiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIHB1YmxpYzoKICAgdXNpbmcgcmFuZ2Vfb3BlcmF0b3I6 OmZvbGRfcmFuZ2U7CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUg dHlwZSwgY29uc3QgaXJhbmdlICZsaCwKLQkJCSAgIGNvbnN0IGlyYW5nZSAmLCByZWxhdGlvbl9r aW5kKSBjb25zdAorCQkJICAgY29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiAg IHsKICAgICBpZiAobGguc2luZ2xldG9uX3AgKCkpCiAgICAgICB7CkBAIC0zMDgsNyArMzA4LDcg QEAgcHVibGljOgogICB1c2luZyByYW5nZV9vcGVyYXRvcl9mbG9hdDo6Zm9sZF9yYW5nZTsKICAg dXNpbmcgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQ6Om9wMV9yYW5nZTsKICAgdmlydHVhbCBib29sIGZv bGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLCBjb25zdCBmcmFuZ2UgJmxoLAotCQkJICAg Y29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX2tpbmQpIGNvbnN0IG92ZXJyaWRlCisJCQkgICBjb25z dCBpcmFuZ2UgJiwgcmVsYXRpb25fdHJpbykgY29uc3Qgb3ZlcnJpZGUKICAgewogICAgIGJvb2wg c2lnbmJpdDsKICAgICBpZiAobGguc2lnbmJpdF9wIChzaWduYml0KSkKQEAgLTMyMiw3ICszMjIs NyBAQCBwdWJsaWM6CiAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgdmlydHVhbCBib29sIG9wMV9y YW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0IGlyYW5nZSAmbGhzLAotCQkJICBjb25z dCBmcmFuZ2UgJiwgcmVsYXRpb25fa2luZCkgY29uc3Qgb3ZlcnJpZGUKKwkJCSAgY29uc3QgZnJh bmdlICYsIHJlbGF0aW9uX3RyaW8pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBpZiAobGhzLnpl cm9fcCAoKSkKICAgICAgIHsKQEAgLTM0OCw3ICszNDgsNyBAQCBjbGFzcyBjZm5fY29weXNpZ24g OiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIHB1YmxpYzoKICAgdXNpbmcgcmFuZ2Vfb3Bl cmF0b3JfZmxvYXQ6OmZvbGRfcmFuZ2U7CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChmcmFu Z2UgJnIsIHRyZWUgdHlwZSwgY29uc3QgZnJhbmdlICZsaCwKLQkJCSAgIGNvbnN0IGZyYW5nZSAm cmgsIHJlbGF0aW9uX2tpbmQpIGNvbnN0IG92ZXJyaWRlCisJCQkgICBjb25zdCBmcmFuZ2UgJnJo LCByZWxhdGlvbl90cmlvKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgZnJhbmdlIG5lZzsKICAg ICByYW5nZV9vcF9oYW5kbGVyIGFic19vcCAoQUJTX0VYUFIsIHR5cGUpOwpAQCAtMzgxLDcgKzM4 MSw3IEBAIHB1YmxpYzoKICAgdXNpbmcgcmFuZ2Vfb3BlcmF0b3I6OmZvbGRfcmFuZ2U7CiAgIGNm bl90b3VwcGVyX3RvbG93ZXIgKGJvb2wgdG91cHBlcikgIHsgbV90b3VwcGVyID0gdG91cHBlcjsg fQogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0 IGlyYW5nZSAmbGgsCi0JCQkgICBjb25zdCBpcmFuZ2UgJiwgcmVsYXRpb25fa2luZCkgY29uc3Q7 CisJCQkgICBjb25zdCBpcmFuZ2UgJiwgcmVsYXRpb25fdHJpbykgY29uc3Q7CiBwcml2YXRlOgog ICBib29sIGdldF9sZXR0ZXJfcmFuZ2UgKHRyZWUgdHlwZSwgaXJhbmdlICZsb3dlcnMsIGlyYW5n ZSAmdXBwZXJzKSBjb25zdDsKICAgYm9vbCBtX3RvdXBwZXI7CkBAIC00MTIsNyArNDEyLDcgQEAg Y2ZuX3RvdXBwZXJfdG9sb3dlcjo6Z2V0X2xldHRlcl9yYW5nZSAodHJlZSB0eXBlLCBpcmFuZ2Ug Jmxvd2VycywKIAogYm9vbAogY2ZuX3RvdXBwZXJfdG9sb3dlcjo6Zm9sZF9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkJIGNvbnN0IGlyYW5nZSAmLCBy ZWxhdGlvbl9raW5kKSBjb25zdAorCQkJCSBjb25zdCBpcmFuZ2UgJiwgcmVsYXRpb25fdHJpbykg Y29uc3QKIHsKICAgaW50X3JhbmdlPDM+IGxvd2VyczsKICAgaW50X3JhbmdlPDM+IHVwcGVyczsK QEAgLTQ0NSw3ICs0NDUsNyBAQCBjbGFzcyBjZm5fZmZzIDogcHVibGljIHJhbmdlX29wZXJhdG9y CiBwdWJsaWM6CiAgIHVzaW5nIHJhbmdlX29wZXJhdG9yOjpmb2xkX3JhbmdlOwogICB2aXJ0dWFs IGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0IGlyYW5nZSAmbGgs Ci0JCQkgICBjb25zdCBpcmFuZ2UgJiwgcmVsYXRpb25fa2luZCkgY29uc3QKKwkJCSAgIGNvbnN0 IGlyYW5nZSAmLCByZWxhdGlvbl90cmlvKSBjb25zdAogICB7CiAgICAgaWYgKGxoLnVuZGVmaW5l ZF9wICgpKQogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDcyLDcgKzQ3Miw3IEBAIGNsYXNzIGNm bl9wb3Bjb3VudCA6IHB1YmxpYyBjZm5fZmZzCiBwdWJsaWM6CiAgIHVzaW5nIHJhbmdlX29wZXJh dG9yOjpmb2xkX3JhbmdlOwogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0 cmVlIHR5cGUsIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkgICBjb25zdCBpcmFuZ2UgJnJoLCByZWxh dGlvbl9raW5kIHJlbCkgY29uc3QKKwkJCSAgIGNvbnN0IGlyYW5nZSAmcmgsIHJlbGF0aW9uX3Ry aW8gcmVsKSBjb25zdAogICB7CiAgICAgaWYgKGxoLnVuZGVmaW5lZF9wICgpKQogICAgICAgcmV0 dXJuIGZhbHNlOwpAQCAtNTAyLDE0ICs1MDIsMTQgQEAgcHVibGljOgogICBjZm5fY2x6IChib29s IGludGVybmFsKSB7IG1fZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCA9IGludGVybmFsOyB9CiAgIHVz aW5nIHJhbmdlX29wZXJhdG9yOjpmb2xkX3JhbmdlOwogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5n ZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkgICBjb25zdCBp cmFuZ2UgJiwgcmVsYXRpb25fa2luZCkgY29uc3Q7CisJCQkgICBjb25zdCBpcmFuZ2UgJiwgcmVs YXRpb25fdHJpbykgY29uc3Q7CiBwcml2YXRlOgogICBib29sIG1fZ2ltcGxlX2NhbGxfaW50ZXJu YWxfcDsKIH0gb3BfY2ZuX2NseiAoZmFsc2UpLCBvcF9jZm5fY2x6X2ludGVybmFsICh0cnVlKTsK IAogYm9vbAogY2ZuX2Nsejo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0 IGlyYW5nZSAmbGgsCi0JCSAgICAgY29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX2tpbmQpIGNvbnN0 CisJCSAgICAgY29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIC8vIF9f YnVpbHRpbl9jW2x0XXoqIHJldHVybiBbMCwgcHJlYy0xXSwgZXhjZXB0IHdoZW4gdGhlCiAgIC8v IGFyZ3VtZW50IGlzIDAsIGJ1dCB0aGF0IGlzIHVuZGVmaW5lZCBiZWhhdmlvci4KQEAgLTU3Nywx NCArNTc3LDE0IEBAIHB1YmxpYzoKICAgY2ZuX2N0eiAoYm9vbCBpbnRlcm5hbCkgeyBtX2dpbXBs ZV9jYWxsX2ludGVybmFsX3AgPSBpbnRlcm5hbDsgfQogICB1c2luZyByYW5nZV9vcGVyYXRvcjo6 Zm9sZF9yYW5nZTsKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLCBjb25zdCBpcmFuZ2UgJmxoLAotCQkJICAgY29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX2tp bmQpIGNvbnN0OworCQkJICAgY29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX3RyaW8pIGNvbnN0Owog cHJpdmF0ZToKICAgYm9vbCBtX2dpbXBsZV9jYWxsX2ludGVybmFsX3A7CiB9IG9wX2Nmbl9jdHog KGZhbHNlKSwgb3BfY2ZuX2N0el9pbnRlcm5hbCAodHJ1ZSk7CiAKIGJvb2wKIGNmbl9jdHo6OmZv bGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLCBjb25zdCBpcmFuZ2UgJmxoLAotCQkgICAg IGNvbnN0IGlyYW5nZSAmLCByZWxhdGlvbl9raW5kKSBjb25zdAorCQkgICAgIGNvbnN0IGlyYW5n ZSAmLCByZWxhdGlvbl90cmlvKSBjb25zdAogewogICBpZiAobGgudW5kZWZpbmVkX3AgKCkpCiAg ICAgcmV0dXJuIGZhbHNlOwpAQCAtNjQ3LDcgKzY0Nyw3IEBAIGNsYXNzIGNmbl9jbHJzYiA6IHB1 YmxpYyByYW5nZV9vcGVyYXRvcgogcHVibGljOgogICB1c2luZyByYW5nZV9vcGVyYXRvcjo6Zm9s ZF9yYW5nZTsKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBl LCBjb25zdCBpcmFuZ2UgJmxoLAotCQkJICAgY29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX2tpbmQp IGNvbnN0CisJCQkgICBjb25zdCBpcmFuZ2UgJiwgcmVsYXRpb25fdHJpbykgY29uc3QKICAgewog ICAgIGlmIChsaC51bmRlZmluZWRfcCAoKSkKICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY2NSw3 ICs2NjUsNyBAQCBwdWJsaWM6CiAgIGNmbl91YnNhbiAoZW51bSB0cmVlX2NvZGUgY29kZSkgeyBt X2NvZGUgPSBjb2RlOyB9CiAgIHVzaW5nIHJhbmdlX29wZXJhdG9yOjpmb2xkX3JhbmdlOwogICB2 aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0IGlyYW5n ZSAmbGgsCi0JCQkgICBjb25zdCBpcmFuZ2UgJnJoLCByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QK KwkJCSAgIGNvbnN0IGlyYW5nZSAmcmgsIHJlbGF0aW9uX3RyaW8gcmVsKSBjb25zdAogICB7CiAg ICAgcmFuZ2Vfb3BfaGFuZGxlciBoYW5kbGVyIChtX2NvZGUsIHR5cGUpOwogICAgIGdjY19jaGVj a2luZ19hc3NlcnQgKGhhbmRsZXIpOwpAQCAtNjk5LDcgKzY5OSw3IEBAIGNsYXNzIGNmbl9zdHJs ZW4gOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIHB1YmxpYzoKICAgdXNpbmcgcmFuZ2Vfb3BlcmF0 b3I6OmZvbGRfcmFuZ2U7CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwgY29uc3QgaXJhbmdlICYsCi0JCQkgICBjb25zdCBpcmFuZ2UgJiwgcmVsYXRpb25f a2luZCkgY29uc3QKKwkJCSAgIGNvbnN0IGlyYW5nZSAmLCByZWxhdGlvbl90cmlvKSBjb25zdAog ICB7CiAgICAgdHJlZSBtYXggPSB2cnBfdmFsX21heCAocHRyZGlmZl90eXBlX25vZGUpOwogICAg IHdpZGVfaW50IHdtYXgKQEAgLTcyNCw3ICs3MjQsNyBAQCBwdWJsaWM6CiAgIGNmbl9nb2FjY19k aW0gKGJvb2wgaXNfcG9zKSB7IG1faXNfcG9zID0gaXNfcG9zOyB9CiAgIHVzaW5nIHJhbmdlX29w ZXJhdG9yOjpmb2xkX3JhbmdlOwogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZy LCB0cmVlIHR5cGUsIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkgICBjb25zdCBpcmFuZ2UgJiwgcmVs YXRpb25fa2luZCkgY29uc3QKKwkJCSAgIGNvbnN0IGlyYW5nZSAmLCByZWxhdGlvbl90cmlvKSBj b25zdAogICB7CiAgICAgdHJlZSBheGlzX3RyZWU7CiAgICAgaWYgKCFsaC5zaW5nbGV0b25fcCAo JmF4aXNfdHJlZSkpCkBAIC03NTEsNyArNzUxLDcgQEAgY2xhc3MgY2ZuX3Bhcml0eSA6IHB1Ymxp YyByYW5nZV9vcGVyYXRvcgogcHVibGljOgogICB1c2luZyByYW5nZV9vcGVyYXRvcjo6Zm9sZF9y YW5nZTsKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLCBj b25zdCBpcmFuZ2UgJiwKLQkJCSAgIGNvbnN0IGlyYW5nZSAmLCByZWxhdGlvbl9raW5kKSBjb25z dAorCQkJICAgY29uc3QgaXJhbmdlICYsIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiAgIHsKICAgICBy LnNldCAoYnVpbGRfemVyb19jc3QgKHR5cGUpLCBidWlsZF9vbmVfY3N0ICh0eXBlKSk7CiAgICAg cmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLW9wLmggYi9nY2MvZ2lt cGxlLXJhbmdlLW9wLmgKaW5kZXggM2E1NTVmMjlhNjUuLmJlMTMwNWM1OGFhIDEwMDY0NAotLS0g YS9nY2MvZ2ltcGxlLXJhbmdlLW9wLmgKKysrIGIvZ2NjL2dpbXBsZS1yYW5nZS1vcC5oCkBAIC0z Niw5ICszNiw5IEBAIHB1YmxpYzoKICAgdHJlZSBvcGVyYW5kMiAoKSBjb25zdCB7IGdjY19jaGVj a2luZ19hc3NlcnQgKG1fdmFsaWQpOyByZXR1cm4gbV9vcDI7IH0KICAgYm9vbCBjYWxjX29wMSAo dnJhbmdlICZyLCBjb25zdCB2cmFuZ2UgJmxoc19yYW5nZSk7CiAgIGJvb2wgY2FsY19vcDEgKHZy YW5nZSAmciwgY29uc3QgdnJhbmdlICZsaHNfcmFuZ2UsIGNvbnN0IHZyYW5nZSAmb3AyX3Jhbmdl LAotCQkgcmVsYXRpb25fa2luZCBrID0gVlJFTF9WQVJZSU5HKTsKKwkJIHJlbGF0aW9uX3RyaW8g PSBUUklPX1ZBUllJTkcpOwogICBib29sIGNhbGNfb3AyICh2cmFuZ2UgJnIsIGNvbnN0IHZyYW5n ZSAmbGhzX3JhbmdlLCBjb25zdCB2cmFuZ2UgJm9wMV9yYW5nZSwKLQkJIHJlbGF0aW9uX2tpbmQg ayA9IFZSRUxfVkFSWUlORyk7CisJCSByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKTsKIHBy aXZhdGU6CiAgIHZvaWQgbWF5YmVfYnVpbHRpbl9jYWxsICgpOwogICBnaW1wbGUgKm1fc3RtdDsK ZGlmZiAtLWdpdCBhL2djYy9yYW5nZS1vcC1mbG9hdC5jYyBiL2djYy9yYW5nZS1vcC1mbG9hdC5j YwppbmRleCA2Y2YyMTgwY2U1OS4uZTczMzQ3OTRiMGQgMTAwNjQ0Ci0tLSBhL2djYy9yYW5nZS1v cC1mbG9hdC5jYworKysgYi9nY2MvcmFuZ2Utb3AtZmxvYXQuY2MKQEAgLTUzLDcgKzUzLDcgQEAg cmFuZ2Vfb3BlcmF0b3JfZmxvYXQ6OmZvbGRfcmFuZ2UgKGZyYW5nZSAmciBBVFRSSUJVVEVfVU5V U0VELAogCQkJCSAgdHJlZSB0eXBlIEFUVFJJQlVURV9VTlVTRUQsCiAJCQkJICBjb25zdCBmcmFu Z2UgJmxoIEFUVFJJQlVURV9VTlVTRUQsCiAJCQkJICBjb25zdCBmcmFuZ2UgJnJoIEFUVFJJQlVU RV9VTlVTRUQsCi0JCQkJICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25z dAorCQkJCSAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgcmV0dXJuIGZhbHNlOwogfQpAQCAt NjMsNyArNjMsNyBAQCByYW5nZV9vcGVyYXRvcl9mbG9hdDo6Zm9sZF9yYW5nZSAoaXJhbmdlICZy IEFUVFJJQlVURV9VTlVTRUQsCiAJCQkJICB0cmVlIHR5cGUgQVRUUklCVVRFX1VOVVNFRCwKIAkJ CQkgIGNvbnN0IGZyYW5nZSAmbGggQVRUUklCVVRFX1VOVVNFRCwKIAkJCQkgIGNvbnN0IGlyYW5n ZSAmcmggQVRUUklCVVRFX1VOVVNFRCwKLQkJCQkgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVU RV9VTlVTRUQpIGNvbnN0CisJCQkJICByZWxhdGlvbl90cmlvKSBjb25zdAogewogICByZXR1cm4g ZmFsc2U7CiB9CkBAIC03Myw3ICs3Myw3IEBAIHJhbmdlX29wZXJhdG9yX2Zsb2F0Ojpmb2xkX3Jh bmdlIChpcmFuZ2UgJnIgQVRUUklCVVRFX1VOVVNFRCwKIAkJCQkgIHRyZWUgdHlwZSBBVFRSSUJV VEVfVU5VU0VELAogCQkJCSAgY29uc3QgZnJhbmdlICZsaCBBVFRSSUJVVEVfVU5VU0VELAogCQkJ CSAgY29uc3QgZnJhbmdlICZyaCBBVFRSSUJVVEVfVU5VU0VELAotCQkJCSAgcmVsYXRpb25fa2lu ZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0 CiB7CiAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTgzLDcgKzgzLDcgQEAgcmFuZ2Vfb3BlcmF0b3Jf ZmxvYXQ6Om9wMV9yYW5nZSAoZnJhbmdlICZyIEFUVFJJQlVURV9VTlVTRUQsCiAJCQkJIHRyZWUg dHlwZSBBVFRSSUJVVEVfVU5VU0VELAogCQkJCSBjb25zdCBmcmFuZ2UgJmxocyBBVFRSSUJVVEVf VU5VU0VELAogCQkJCSBjb25zdCBmcmFuZ2UgJm9wMiBBVFRSSUJVVEVfVU5VU0VELAotCQkJCSBy ZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJCSByZWxhdGlvbl90 cmlvKSBjb25zdAogewogICByZXR1cm4gZmFsc2U7CiB9CkBAIC05Myw3ICs5Myw3IEBAIHJhbmdl X29wZXJhdG9yX2Zsb2F0OjpvcDFfcmFuZ2UgKGZyYW5nZSAmciBBVFRSSUJVVEVfVU5VU0VELAog CQkJCSB0cmVlIHR5cGUgQVRUUklCVVRFX1VOVVNFRCwKIAkJCQkgY29uc3QgaXJhbmdlICZsaHMg QVRUUklCVVRFX1VOVVNFRCwKIAkJCQkgY29uc3QgZnJhbmdlICZvcDIgQVRUUklCVVRFX1VOVVNF RCwKLQkJCQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQkg cmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTAzLDcgKzEw Myw3IEBAIHJhbmdlX29wZXJhdG9yX2Zsb2F0OjpvcDJfcmFuZ2UgKGZyYW5nZSAmciBBVFRSSUJV VEVfVU5VU0VELAogCQkJCSB0cmVlIHR5cGUgQVRUUklCVVRFX1VOVVNFRCwKIAkJCQkgY29uc3Qg ZnJhbmdlICZsaHMgQVRUUklCVVRFX1VOVVNFRCwKIAkJCQkgY29uc3QgZnJhbmdlICZvcDEgQVRU UklCVVRFX1VOVVNFRCwKLQkJCQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkg Y29uc3QKKwkJCQkgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgcmV0dXJuIGZhbHNlOwogfQpA QCAtMTEzLDcgKzExMyw3IEBAIHJhbmdlX29wZXJhdG9yX2Zsb2F0OjpvcDJfcmFuZ2UgKGZyYW5n ZSAmciBBVFRSSUJVVEVfVU5VU0VELAogCQkJCSB0cmVlIHR5cGUgQVRUUklCVVRFX1VOVVNFRCwK IAkJCQkgY29uc3QgaXJhbmdlICZsaHMgQVRUUklCVVRFX1VOVVNFRCwKIAkJCQkgY29uc3QgZnJh bmdlICZvcDEgQVRUUklCVVRFX1VOVVNFRCwKLQkJCQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklC VVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgcmV0dXJu IGZhbHNlOwogfQpAQCAtMTg4LDcgKzE4OCw3IEBAIGZpbml0ZV9vcGVyYW5kc19wIChjb25zdCBm cmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIpCiBpbmxpbmUgYm9vbAogZnJlbG9wX2Vhcmx5 X3Jlc29sdmUgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICAgICBjb25zdCBmcmFuZ2UgJm9w MSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgICAgIHJlbGF0aW9uX2tpbmQgcmVsLCByZWxhdGlv bl9raW5kIG15X3JlbCkKKwkJICAgICAgcmVsYXRpb25fdHJpbyByZWwsIHJlbGF0aW9uX2tpbmQg bXlfcmVsKQogewogICAvLyBJZiBlaXRoZXIgb3BlcmFuZCBpcyB1bmRlZmluZWQsIHJldHVybiBW QVJZSU5HLgogICBpZiAoZW1wdHlfcmFuZ2VfdmFyeWluZyAociwgdHlwZSwgb3AxLCBvcDIpKQpA QCAtMzI0LDE0ICszMjQsMTQgQEAgY2xhc3MgZm9wZXJhdG9yX2lkZW50aXR5IDogcHVibGljIHJh bmdlX29wZXJhdG9yX2Zsb2F0CiBwdWJsaWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoZnJhbmdlICZy LCB0cmVlIHR5cGUgQVRUUklCVVRFX1VOVVNFRCwKIAkJICAgY29uc3QgZnJhbmdlICZvcDEsIGNv bnN0IGZyYW5nZSAmb3AyIEFUVFJJQlVURV9VTlVTRUQsCi0JCSAgIHJlbGF0aW9uX2tpbmQgPSBW UkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCisJCSAgIHJlbGF0aW9uX3RyaW8gPSBU UklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICByID0gb3AxOwogICAg IHJldHVybiB0cnVlOwogICB9CiAgIGJvb2wgb3AxX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlw ZSBBVFRSSUJVVEVfVU5VU0VELAogCQkgIGNvbnN0IGZyYW5nZSAmbGhzLCBjb25zdCBmcmFuZ2Ug Jm9wMiBBVFRSSUJVVEVfVU5VU0VELAotCQkgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJTkcp IGNvbnN0IGZpbmFsIG92ZXJyaWRlCisJCSAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykg Y29uc3QgZmluYWwgb3ZlcnJpZGUKICAgewogICAgIHIgPSBsaHM7CiAgICAgcmV0dXJuIHRydWU7 CkBAIC0zNDgsMjYgKzM0OCwyNiBAQCBjbGFzcyBmb3BlcmF0b3JfZXF1YWwgOiBwdWJsaWMgcmFu Z2Vfb3BlcmF0b3JfZmxvYXQKIHB1YmxpYzoKICAgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIs IHRyZWUgdHlwZSwKIAkJICAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAot CQkgICByZWxhdGlvbl9raW5kID0gVlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsK KwkJICAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7 CiAgIHJlbGF0aW9uX2tpbmQgb3AxX29wMl9yZWxhdGlvbiAoY29uc3QgaXJhbmdlICZsaHMpIGNv bnN0IGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4gZXF1YWxfb3AxX29wMl9yZWxhdGlv biAobGhzKTsKICAgfQogICBib29sIG9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJ CSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkgIHJlbGF0aW9uX2tp bmQgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgIHJlbGF0aW9uX3Ry aW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICBib29sIG9wMl9yYW5n ZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZy YW5nZSAmb3AxLAotCQkgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdCBm aW5hbCBvdmVycmlkZQorCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25z dCBmaW5hbCBvdmVycmlkZQogICB7Ci0gICAgcmV0dXJuIG9wMV9yYW5nZSAociwgdHlwZSwgbGhz LCBvcDEsIHJlbCk7CisgICAgcmV0dXJuIG9wMV9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDEsIHJl bC5zd2FwX29wMV9vcDIgKCkpOwogICB9CiB9IGZvcF9lcXVhbDsKIAogYm9vbAogZm9wZXJhdG9y X2VxdWFsOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgICAgY29uc3Qg ZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkJICAgICByZWxhdGlvbl9raW5kIHJl bCkgY29uc3QKKwkJCSAgICAgcmVsYXRpb25fdHJpbyByZWwpIGNvbnN0CiB7CiAgIGlmIChmcmVs b3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9FUSkpCiAgICAg cmV0dXJuIHRydWU7CkBAIC00MDMsOCArNDAzLDkgQEAgYm9vbAogZm9wZXJhdG9yX2VxdWFsOjpv cDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgIGNvbnN0IGlyYW5nZSAmbGhz LAogCQkJICAgIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkJICAgIHJlbGF0aW9uX2tpbmQgcmVsKSBj b25zdAorCQkJICAgIHJlbGF0aW9uX3RyaW8gdHJpbykgY29uc3QKIHsKKyAgcmVsYXRpb25fa2lu ZCByZWwgPSB0cmlvLm9wMV9vcDIgKCk7CiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxo cywgdHlwZSkpCiAgICAgewogICAgIGNhc2UgQlJTX1RSVUU6CkBAIC00NTUsMjAgKzQ1NiwyMCBA QCBjbGFzcyBmb3BlcmF0b3Jfbm90X2VxdWFsIDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zsb2F0 CiBwdWJsaWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAg IGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25fa2lu ZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgICByZWxhdGlv bl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiAgIHJlbGF0 aW9uX2tpbmQgb3AxX29wMl9yZWxhdGlvbiAoY29uc3QgaXJhbmdlICZsaHMpIGNvbnN0IGZpbmFs IG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4gbm90X2VxdWFsX29wMV9vcDJfcmVsYXRpb24gKGxo cyk7CiAgIH0KICAgYm9vbCBvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgIGNv bnN0IGlyYW5nZSAmbGhzLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICByZWxhdGlvbl9raW5kID0g VlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKwkJICByZWxhdGlvbl90cmlvID0g VFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKIH0gZm9wX25vdF9lcXVhbDsKIAog Ym9vbAogZm9wZXJhdG9yX25vdF9lcXVhbDo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5 cGUsCiAJCQkJIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJCQkgcmVs YXRpb25fa2luZCByZWwpIGNvbnN0CisJCQkJIHJlbGF0aW9uX3RyaW8gcmVsKSBjb25zdAogewog ICBpZiAoZnJlbG9wX2Vhcmx5X3Jlc29sdmUgKHIsIHR5cGUsIG9wMSwgb3AyLCByZWwsIFZSRUxf TkUpKQogICAgIHJldHVybiB0cnVlOwpAQCAtNTA1LDggKzUwNiw5IEBAIGJvb2wKIGZvcGVyYXRv cl9ub3RfZXF1YWw6Om9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkJY29uc3Qg aXJhbmdlICZsaHMsCiAJCQkJY29uc3QgZnJhbmdlICZvcDIsCi0JCQkJcmVsYXRpb25fa2luZCBy ZWwpIGNvbnN0CisJCQkJcmVsYXRpb25fdHJpbyB0cmlvKSBjb25zdAogeworICByZWxhdGlvbl9r aW5kIHJlbCA9IHRyaW8ub3AxX29wMiAoKTsKICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwg bGhzLCB0eXBlKSkKICAgICB7CiAgICAgY2FzZSBCUlNfVFJVRToKQEAgLTU1NywyMyArNTU5LDIz IEBAIGNsYXNzIGZvcGVyYXRvcl9sdCA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9hdAogcHVi bGljOgogICBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICBjb25z dCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgIHJlbGF0aW9uX2tpbmQgPSBW UkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgICByZWxhdGlvbl90cmlvID0g VFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgcmVsYXRpb25fa2luZCBvcDFf b3AyX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29uc3QgZmluYWwgb3ZlcnJpZGUKICAg ewogICAgIHJldHVybiBsdF9vcDFfb3AyX3JlbGF0aW9uIChsaHMpOwogICB9CiAgIGJvb2wgb3Ax X3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICBjb25zdCBpcmFuZ2UgJmxocywgY29u c3QgZnJhbmdlICZvcDIsCi0JCSAgcmVsYXRpb25fa2luZCA9IFZSRUxfVkFSWUlORykgY29uc3Qg ZmluYWwgb3ZlcnJpZGU7CisJCSAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3Qg ZmluYWwgb3ZlcnJpZGU7CiAgIGJvb2wgb3AyX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwK IAkJICBjb25zdCBpcmFuZ2UgJmxocywgY29uc3QgZnJhbmdlICZvcDEsCi0JCSAgcmVsYXRpb25f a2luZCA9IFZSRUxfVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7CisJCSAgcmVsYXRpb25f dHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiB9IGZvcF9sdDsKIAog Ym9vbAogZm9wZXJhdG9yX2x0Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CSAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9r aW5kIHJlbCkgY29uc3QKKwkJCSAgcmVsYXRpb25fdHJpbyByZWwpIGNvbnN0CiB7CiAgIGlmIChm cmVsb3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9MVCkpCiAg ICAgcmV0dXJuIHRydWU7CkBAIC01OTksNyArNjAxLDcgQEAgZm9wZXJhdG9yX2x0OjpvcDFfcmFu Z2UgKGZyYW5nZSAmciwKIAkJCSB0cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZsaHMsCiAJ CQkgY29uc3QgZnJhbmdlICZvcDIsCi0JCQkgcmVsYXRpb25fa2luZCkgY29uc3QKKwkJCSByZWxh dGlvbl90cmlvKSBjb25zdAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5 cGUpKQogICAgIHsKQEAgLTYzNCw3ICs2MzYsNyBAQCBmb3BlcmF0b3JfbHQ6Om9wMl9yYW5nZSAo ZnJhbmdlICZyLAogCQkJIHRyZWUgdHlwZSwKIAkJCSBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSBj b25zdCBmcmFuZ2UgJm9wMSwKLQkJCSByZWxhdGlvbl9raW5kKSBjb25zdAorCQkJIHJlbGF0aW9u X3RyaW8pIGNvbnN0CiB7CiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkp CiAgICAgewpAQCAtNjczLDIzICs2NzUsMjMgQEAgY2xhc3MgZm9wZXJhdG9yX2xlIDogcHVibGlj IHJhbmdlX29wZXJhdG9yX2Zsb2F0CiBwdWJsaWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9w MiwKLQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92 ZXJyaWRlOworCQkgICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3QgZmlu YWwgb3ZlcnJpZGU7CiAgIHJlbGF0aW9uX2tpbmQgb3AxX29wMl9yZWxhdGlvbiAoY29uc3QgaXJh bmdlICZsaHMpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4gbGVfb3AxX29w Ml9yZWxhdGlvbiAobGhzKTsKICAgfQogICBib29sIG9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVl IHR5cGUsCiAJCSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkgIHJl bGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKwkJ ICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7 CiAgIGJvb2wgb3AyX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICBjb25zdCBpcmFu Z2UgJmxocywgY29uc3QgZnJhbmdlICZvcDEsCi0JCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVM X1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0g VFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKIH0gZm9wX2xlOwogCiBib29sCiBm b3BlcmF0b3JfbGU6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25z dCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVs KSBjb25zdAorCQkJICByZWxhdGlvbl90cmlvIHJlbCkgY29uc3QKIHsKICAgaWYgKGZyZWxvcF9l YXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBWUkVMX0xFKSkKICAgICByZXR1 cm4gdHJ1ZTsKQEAgLTcxNSw3ICs3MTcsNyBAQCBmb3BlcmF0b3JfbGU6Om9wMV9yYW5nZSAoZnJh bmdlICZyLAogCQkJIHRyZWUgdHlwZSwKIAkJCSBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSBjb25z dCBmcmFuZ2UgJm9wMiwKLQkJCSByZWxhdGlvbl9raW5kKSBjb25zdAorCQkJIHJlbGF0aW9uX3Ry aW8pIGNvbnN0CiB7CiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAg ICAgewpAQCAtNzQ2LDcgKzc0OCw3IEBAIGZvcGVyYXRvcl9sZTo6b3AyX3JhbmdlIChmcmFuZ2Ug JnIsCiAJCQkgdHJlZSB0eXBlLAogCQkJIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJIGNvbnN0IGZy YW5nZSAmb3AxLAotCQkJIHJlbGF0aW9uX2tpbmQpIGNvbnN0CisJCQkgcmVsYXRpb25fdHJpbykg Y29uc3QKIHsKICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7 CkBAIC03ODEsMjMgKzc4MywyMyBAQCBjbGFzcyBmb3BlcmF0b3JfZ3QgOiBwdWJsaWMgcmFuZ2Vf b3BlcmF0b3JfZmxvYXQKIHB1YmxpYzoKICAgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJICAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkg ICByZWxhdGlvbl9raW5kID0gVlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKwkJ ICAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiAg IHJlbGF0aW9uX2tpbmQgb3AxX29wMl9yZWxhdGlvbiAoY29uc3QgaXJhbmdlICZsaHMpIGNvbnN0 IGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4gZ3Rfb3AxX29wMl9yZWxhdGlvbiAobGhz KTsKICAgfQogICBib29sIG9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29u c3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkgIHJlbGF0aW9uX2tpbmQgPSBW UkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgIHJlbGF0aW9uX3RyaW8gPSBU UklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICBib29sIG9wMl9yYW5nZSAoZnJh bmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAm b3AxLAotCQkgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJy aWRlOworCQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJy aWRlOwogfSBmb3BfZ3Q7CiAKIGJvb2wKIGZvcGVyYXRvcl9ndDo6Zm9sZF9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9w MiwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVs KSBjb25zdAogewogICBpZiAoZnJlbG9wX2Vhcmx5X3Jlc29sdmUgKHIsIHR5cGUsIG9wMSwgb3Ay LCByZWwsIFZSRUxfR1QpKQogICAgIHJldHVybiB0cnVlOwpAQCAtODIzLDcgKzgyNSw3IEBAIGZv cGVyYXRvcl9ndDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsCiAJCQkgdHJlZSB0eXBlLAogCQkJIGNv bnN0IGlyYW5nZSAmbGhzLAogCQkJIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkJIHJlbGF0aW9uX2tp bmQpIGNvbnN0CisJCQkgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgc3dpdGNoIChnZXRfYm9v bF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBAIC04NTgsNyArODYwLDcgQEAgZm9wZXJh dG9yX2d0OjpvcDJfcmFuZ2UgKGZyYW5nZSAmciwKIAkJCSB0cmVlIHR5cGUsCiAJCQkgY29uc3Qg aXJhbmdlICZsaHMsCiAJCQkgY29uc3QgZnJhbmdlICZvcDEsCi0JCQkgcmVsYXRpb25fa2luZCkg Y29uc3QKKwkJCSByZWxhdGlvbl90cmlvKSBjb25zdAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0 YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKQEAgLTg5NywyMyArODk5LDIzIEBAIGNsYXNzIGZv cGVyYXRvcl9nZSA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9hdAogcHVibGljOgogICBib29s IGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICBjb25zdCBmcmFuZ2UgJm9w MSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJTkcp IGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5H KSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgcmVsYXRpb25fa2luZCBvcDFfb3AyX3JlbGF0aW9u IChjb25zdCBpcmFuZ2UgJmxocykgY29uc3QgZmluYWwgb3ZlcnJpZGUKICAgewogICAgIHJldHVy biBnZV9vcDFfb3AyX3JlbGF0aW9uIChsaHMpOwogICB9CiAgIGJvb2wgb3AxX3JhbmdlIChmcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJICBjb25zdCBpcmFuZ2UgJmxocywgY29uc3QgZnJhbmdlICZv cDIsCi0JCSAgcmVsYXRpb25fa2luZCA9IFZSRUxfVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJp ZGU7CisJCSAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJp ZGU7CiAgIGJvb2wgb3AyX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICBjb25zdCBp cmFuZ2UgJmxocywgY29uc3QgZnJhbmdlICZvcDEsCi0JCSAgcmVsYXRpb25fa2luZCA9IFZSRUxf VkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7CisJCSAgcmVsYXRpb25fdHJpbyA9IFRSSU9f VkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7CiB9IGZvcF9nZTsKIAogYm9vbAogZm9wZXJh dG9yX2dlOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgZnJh bmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCkgY29u c3QKKwkJCSAgcmVsYXRpb25fdHJpbyByZWwpIGNvbnN0CiB7CiAgIGlmIChmcmVsb3BfZWFybHlf cmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJlbCwgVlJFTF9HRSkpCiAgICAgcmV0dXJuIHRy dWU7CkBAIC05MzksNyArOTQxLDcgQEAgZm9wZXJhdG9yX2dlOjpvcDFfcmFuZ2UgKGZyYW5nZSAm ciwKIAkJCSB0cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgY29uc3QgZnJh bmdlICZvcDIsCi0JCQkgcmVsYXRpb25fa2luZCkgY29uc3QKKwkJCSByZWxhdGlvbl90cmlvKSBj b25zdAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsK QEAgLTk2OSw3ICs5NzEsNyBAQCBib29sCiBmb3BlcmF0b3JfZ2U6Om9wMl9yYW5nZSAoZnJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgY29uc3QgZnJhbmdl ICZvcDEsCi0JCQkgcmVsYXRpb25fa2luZCkgY29uc3QKKwkJCSByZWxhdGlvbl90cmlvKSBjb25z dAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKQEAg LTEwMDgsMjIgKzEwMTAsMjIgQEAgY2xhc3MgZm9wZXJhdG9yX3Vub3JkZXJlZCA6IHB1YmxpYyBy YW5nZV9vcGVyYXRvcl9mbG9hdAogcHVibGljOgogICBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAm ciwgdHJlZSB0eXBlLAogCQkgICBjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIs Ci0JCSAgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRl OworCQkgICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlk ZTsKICAgYm9vbCBvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgIGNvbnN0IGly YW5nZSAmbGhzLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICByZWxhdGlvbl9raW5kID0gVlJFTF9W QVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKwkJICByZWxhdGlvbl90cmlvID0gVFJJT19W QVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgYm9vbCBvcDJfcmFuZ2UgKGZyYW5nZSAm ciwgdHJlZSB0eXBlLAogCQkgIGNvbnN0IGlyYW5nZSAmbGhzLCBjb25zdCBmcmFuZ2UgJm9wMSwK LQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJp ZGUKKwkJICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3Zl cnJpZGUKICAgewotICAgIHJldHVybiBvcDFfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxLCByZWwp OworICAgIHJldHVybiBvcDFfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxLCByZWwuc3dhcF9vcDFf b3AyICgpKTsKICAgfQogfSBmb3BfdW5vcmRlcmVkOwogCiBib29sCiBmb3BlcmF0b3JfdW5vcmRl cmVkOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCQkgY29uc3QgZnJhbmdl ICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkJCSByZWxhdGlvbl9raW5kKSBjb25zdAorCQkJ CSByZWxhdGlvbl90cmlvKSBjb25zdAogewogICAvLyBVTk9SREVSRUQgaXMgVFJVRSBpZiBlaXRo ZXIgb3BlcmFuZCBpcyBhIE5BTi4KICAgaWYgKG9wMS5rbm93bl9pc25hbiAoKSB8fCBvcDIua25v d25faXNuYW4gKCkpCkBAIC0xMDQwLDggKzEwNDIsOSBAQCBib29sCiBmb3BlcmF0b3JfdW5vcmRl cmVkOjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJCWNvbnN0IGlyYW5nZSAm bGhzLAogCQkJCWNvbnN0IGZyYW5nZSAmb3AyLAotCQkJCXJlbGF0aW9uX2tpbmQgcmVsKSBjb25z dAorCQkJCXJlbGF0aW9uX3RyaW8gdHJpbykgY29uc3QKIHsKKyAgcmVsYXRpb25fa2luZCByZWwg PSB0cmlvLm9wMV9vcDIgKCk7CiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlw ZSkpCiAgICAgewogICAgIGNhc2UgQlJTX1RSVUU6CkBAIC0xMDgxLDIyICsxMDg0LDIyIEBAIGNs YXNzIGZvcGVyYXRvcl9vcmRlcmVkIDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zsb2F0CiBwdWJs aWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0 IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25fa2luZCA9IFZS RUxfVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7CisJCSAgIHJlbGF0aW9uX3RyaW8gPSBU UklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICBib29sIG9wMV9yYW5nZSAoZnJh bmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAm b3AyLAotCQkgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJy aWRlOworCQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJy aWRlOwogICBib29sIG9wMl9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3Qg aXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AxLAotCQkgIHJlbGF0aW9uX2tpbmQgcmVsID0g VlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZQorCQkgIHJlbGF0aW9uX3RyaW8gcmVs ID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZQogICB7Ci0gICAgcmV0dXJuIG9w MV9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDEsIHJlbCk7CisgICAgcmV0dXJuIG9wMV9yYW5nZSAo ciwgdHlwZSwgbGhzLCBvcDEsIHJlbC5zd2FwX29wMV9vcDIgKCkpOwogICB9CiB9IGZvcF9vcmRl cmVkOwogCiBib29sCiBmb3BlcmF0b3Jfb3JkZXJlZDo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0 cmVlIHR5cGUsCiAJCQkgICAgICAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3Ay LAotCQkJICAgICAgIHJlbGF0aW9uX2tpbmQpIGNvbnN0CisJCQkgICAgICAgcmVsYXRpb25fdHJp bykgY29uc3QKIHsKICAgaWYgKG9wMS5rbm93bl9pc25hbiAoKSB8fCBvcDIua25vd25faXNuYW4g KCkpCiAgICAgciA9IHJhbmdlX2ZhbHNlICh0eXBlKTsKQEAgLTExMTEsOCArMTExNCw5IEBAIGJv b2wKIGZvcGVyYXRvcl9vcmRlcmVkOjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAog CQkJICAgICAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgICAgICBjb25zdCBmcmFuZ2UgJm9wMiwK LQkJCSAgICAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJICAgICAgcmVsYXRpb25fdHJp byB0cmlvKSBjb25zdAogeworICByZWxhdGlvbl9raW5kIHJlbCA9IHRyaW8ub3AxX29wMiAoKTsK ICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CiAgICAgY2Fz ZSBCUlNfVFJVRToKQEAgLTExNDgsNyArMTE1Miw3IEBAIGNsYXNzIGZvcGVyYXRvcl9uZWdhdGUg OiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKIHB1YmxpYzoKICAgYm9vbCBmb2xkX3Jhbmdl IChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICAgY29uc3QgZnJhbmdlICZvcDEsIGNvbnN0IGZy YW5nZSAmb3AyLAotCQkgICByZWxhdGlvbl9raW5kID0gVlJFTF9WQVJZSU5HKSBjb25zdCBmaW5h bCBvdmVycmlkZQorCQkgICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5h bCBvdmVycmlkZQogICB7CiAgICAgaWYgKGVtcHR5X3JhbmdlX3ZhcnlpbmcgKHIsIHR5cGUsIG9w MSwgb3AyKSkKICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE4MSw3ICsxMTg1LDcgQEAgcHVibGlj OgogICB9CiAgIGJvb2wgb3AxX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICBjb25z dCBmcmFuZ2UgJmxocywgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgcmVsYXRpb25fa2luZCByZWwg PSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCisJCSAgcmVsYXRpb25fdHJpbyBy ZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCiAgIHsKICAgICByZXR1cm4g Zm9sZF9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDIsIHJlbCk7CiAgIH0KQEAgLTExOTQsMTYgKzEx OTgsMTYgQEAgY2xhc3MgZm9wZXJhdG9yX2FicyA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9mbG9h dAogcHVibGljOgogICBib29sIGZvbGRfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkg ICBjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICYsCi0JCSAgIHJlbGF0aW9uX2tpbmQg PSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgICByZWxhdGlvbl90cmlv ID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKICAgYm9vbCBvcDFfcmFuZ2Ug KGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgIGNvbnN0IGZyYW5nZSAmbGhzLCBjb25zdCBmcmFu Z2UgJm9wMiwKLQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3QgZmlu YWwgb3ZlcnJpZGU7CisJCSAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0 IGZpbmFsIG92ZXJyaWRlOwogfSBmb3BfYWJzOwogCiBib29sCiBmb3BlcmF0b3JfYWJzOjpmb2xk X3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGZyYW5nZSAmb3AxLCBj b25zdCBmcmFuZ2UgJm9wMiwKLQkJCSAgIHJlbGF0aW9uX2tpbmQpIGNvbnN0CisJCQkgICByZWxh dGlvbl90cmlvKSBjb25zdAogewogICBpZiAoZW1wdHlfcmFuZ2VfdmFyeWluZyAociwgdHlwZSwg b3AxLCBvcDIpKQogICAgIHJldHVybiB0cnVlOwpAQCAtMTI1Myw3ICsxMjU3LDcgQEAgZm9wZXJh dG9yX2Ficzo6Zm9sZF9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiBib29sCiBmb3BlcmF0 b3JfYWJzOjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBmcmFu Z2UgJmxocywgY29uc3QgZnJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQpIGNvbnN0CisJ CQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIGlmIChlbXB0eV9yYW5nZV92YXJ5aW5nIChy LCB0eXBlLCBsaHMsIG9wMikpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjgyLDcgKzEyODYsNyBA QCBjbGFzcyBmb3BlcmF0b3JfdW5vcmRlcmVkX2x0IDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zs b2F0CiBwdWJsaWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJ CSAgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25f a2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCisJCSAgIHJlbGF0 aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZQogICB7CiAg ICAgaWYgKG9wMS5rbm93bl9pc25hbiAoKSB8fCBvcDIua25vd25faXNuYW4gKCkpCiAgICAgICB7 CkBAIC0xMzExLDcgKzEzMTUsNyBAQCBjbGFzcyBmb3BlcmF0b3JfdW5vcmRlcmVkX2xlIDogcHVi bGljIHJhbmdlX29wZXJhdG9yX2Zsb2F0CiBwdWJsaWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJh bmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2Ug Jm9wMiwKLQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFs IG92ZXJyaWRlCisJCSAgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdCBm aW5hbCBvdmVycmlkZQogICB7CiAgICAgaWYgKG9wMS5rbm93bl9pc25hbiAoKSB8fCBvcDIua25v d25faXNuYW4gKCkpCiAgICAgICB7CkBAIC0xMzMyLDE2ICsxMzM2LDE2IEBAIHB1YmxpYzoKICAg fQogICBib29sIG9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJh bmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZB UllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZB UllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICBib29sIG9wMl9yYW5nZSAoZnJhbmdlICZy LCB0cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AxLAot CQkgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwor CQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwog fSBmb3BfdW5vcmRlcmVkX2xlOwogCiBib29sCiBmb3BlcmF0b3JfdW5vcmRlcmVkX2xlOjpvcDFf cmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJCSAgIGNvbnN0IGlyYW5nZSAmbGhzLCBj b25zdCBmcmFuZ2UgJm9wMiwKLQkJCQkgICByZWxhdGlvbl9raW5kKSBjb25zdAorCQkJCSAgIHJl bGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywg dHlwZSkpCiAgICAgewpAQCAtMTM2NSw3ICsxMzY5LDcgQEAgZm9wZXJhdG9yX3Vub3JkZXJlZF9s ZTo6b3AyX3JhbmdlIChmcmFuZ2UgJnIsCiAJCQkJICAgdHJlZSB0eXBlLAogCQkJCSAgIGNvbnN0 IGlyYW5nZSAmbGhzLAogCQkJCSAgIGNvbnN0IGZyYW5nZSAmb3AxLAotCQkJCSAgIHJlbGF0aW9u X2tpbmQpIGNvbnN0CisJCQkJICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgc3dpdGNoIChn ZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBAIC0xMzkyLDcgKzEzOTYsNyBA QCBjbGFzcyBmb3BlcmF0b3JfdW5vcmRlcmVkX2d0IDogcHVibGljIHJhbmdlX29wZXJhdG9yX2Zs b2F0CiBwdWJsaWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJ CSAgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJICAgcmVsYXRpb25f a2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCisJCSAgIHJlbGF0 aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZQogICB7CiAg ICAgaWYgKG9wMS5rbm93bl9pc25hbiAoKSB8fCBvcDIua25vd25faXNuYW4gKCkpCiAgICAgICB7 CkBAIC0xNDEzLDEwICsxNDE3LDEwIEBAIHB1YmxpYzoKICAgfQogICBib29sIG9wMV9yYW5nZSAo ZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5n ZSAmb3AyLAotCQkgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92 ZXJyaWRlOworCQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92 ZXJyaWRlOwogICBib29sIG9wMl9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29u c3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AxLAotCQkgIHJlbGF0aW9uX2tpbmQgPSBW UkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgIHJlbGF0aW9uX3RyaW8gPSBU UklPX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogfSBmb3BfdW5vcmRlcmVkX2d0Owog CiBib29sCkBAIC0xNDI0LDcgKzE0MjgsNyBAQCBmb3BlcmF0b3JfdW5vcmRlcmVkX2d0OjpvcDFf cmFuZ2UgKGZyYW5nZSAmciwKIAkJCSB0cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZsaHMs CiAJCQkgY29uc3QgZnJhbmdlICZvcDIsCi0JCQkgcmVsYXRpb25fa2luZCkgY29uc3QKKwkJCSBy ZWxhdGlvbl90cmlvKSBjb25zdAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMs IHR5cGUpKQogICAgIHsKQEAgLTE0NDgsNyArMTQ1Miw3IEBAIGZvcGVyYXRvcl91bm9yZGVyZWRf Z3Q6Om9wMl9yYW5nZSAoZnJhbmdlICZyLAogCQkJCSAgIHRyZWUgdHlwZSwKIAkJCQkgICBjb25z dCBpcmFuZ2UgJmxocywKIAkJCQkgICBjb25zdCBmcmFuZ2UgJm9wMSwKLQkJCQkgICByZWxhdGlv bl9raW5kKSBjb25zdAorCQkJCSAgIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIHN3aXRjaCAo Z2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewpAQCAtMTQ3NSw3ICsxNDc5LDcg QEAgY2xhc3MgZm9wZXJhdG9yX3Vub3JkZXJlZF9nZSA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcl9m bG9hdAogcHVibGljOgogICBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAog CQkgICBjb25zdCBmcmFuZ2UgJm9wMSwgY29uc3QgZnJhbmdlICZvcDIsCi0JCSAgIHJlbGF0aW9u X2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZQorCQkgICByZWxh dGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGUKICAgewog ICAgIGlmIChvcDEua25vd25faXNuYW4gKCkgfHwgb3AyLmtub3duX2lzbmFuICgpKQogICAgICAg ewpAQCAtMTQ5NiwxMCArMTUwMCwxMCBAQCBwdWJsaWM6CiAgIH0KICAgYm9vbCBvcDFfcmFuZ2Ug KGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgIGNvbnN0IGlyYW5nZSAmbGhzLCBjb25zdCBmcmFu Z2UgJm9wMiwKLQkJICByZWxhdGlvbl9raW5kID0gVlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBv dmVycmlkZTsKKwkJICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBv dmVycmlkZTsKICAgYm9vbCBvcDJfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgIGNv bnN0IGlyYW5nZSAmbGhzLCBjb25zdCBmcmFuZ2UgJm9wMSwKLQkJICByZWxhdGlvbl9raW5kID0g VlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKwkJICByZWxhdGlvbl90cmlvID0g VFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKIH0gZm9wX3Vub3JkZXJlZF9nZTsK IAogYm9vbApAQCAtMTUwNyw3ICsxNTExLDcgQEAgZm9wZXJhdG9yX3Vub3JkZXJlZF9nZTo6b3Ax X3JhbmdlIChmcmFuZ2UgJnIsCiAJCQkJICAgdHJlZSB0eXBlLAogCQkJCSAgIGNvbnN0IGlyYW5n ZSAmbGhzLAogCQkJCSAgIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkJCSAgIHJlbGF0aW9uX2tpbmQp IGNvbnN0CisJCQkJICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgc3dpdGNoIChnZXRfYm9v bF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBAIC0xNTMwLDcgKzE1MzQsNyBAQCBib29s CiBmb3BlcmF0b3JfdW5vcmRlcmVkX2dlOjpvcDJfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBl LAogCQkJCSAgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJCSAgIGNvbnN0IGZyYW5nZSAmb3AxLAot CQkJCSAgIHJlbGF0aW9uX2tpbmQpIGNvbnN0CisJCQkJICAgcmVsYXRpb25fdHJpbykgY29uc3QK IHsKICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBAIC0x NTU3LDcgKzE1NjEsNyBAQCBjbGFzcyBmb3BlcmF0b3JfdW5vcmRlcmVkX2VxdWFsIDogcHVibGlj IHJhbmdlX29wZXJhdG9yX2Zsb2F0CiBwdWJsaWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9w MiwKLQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0IGZpbmFsIG92 ZXJyaWRlCisJCSAgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5h bCBvdmVycmlkZQogICB7CiAgICAgaWYgKG9wMS5rbm93bl9pc25hbiAoKSB8fCBvcDIua25vd25f aXNuYW4gKCkpCiAgICAgICB7CkBAIC0xNTc4LDEyICsxNTgyLDEyIEBAIHB1YmxpYzoKICAgfQog ICBib29sIG9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJhbmdl ICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AyLAotCQkgIHJlbGF0aW9uX2tpbmQgPSBWUkVMX1ZBUllJ TkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOworCQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJ TkcpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICBib29sIG9wMl9yYW5nZSAoZnJhbmdlICZyLCB0 cmVlIHR5cGUsCiAJCSAgY29uc3QgaXJhbmdlICZsaHMsIGNvbnN0IGZyYW5nZSAmb3AxLAotCQkg IHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlkZQor CQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdCBmaW5hbCBvdmVycmlk ZQogICB7Ci0gICAgcmV0dXJuIG9wMV9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDEsIHJlbCk7Cisg ICAgcmV0dXJuIG9wMV9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDEsIHJlbC5zd2FwX29wMV9vcDIg KCkpOwogICB9CiB9IGZvcF91bm9yZGVyZWRfZXF1YWw7CiAKQEAgLTE1OTEsNyArMTU5NSw3IEBA IGJvb2wKIGZvcGVyYXRvcl91bm9yZGVyZWRfZXF1YWw6Om9wMV9yYW5nZSAoZnJhbmdlICZyLCB0 cmVlIHR5cGUsCiAJCQkJICAgICAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkJICAgICAgY29uc3Qg ZnJhbmdlICZvcDIsCi0JCQkJICAgICAgcmVsYXRpb25fa2luZCkgY29uc3QKKwkJCQkgICAgICBy ZWxhdGlvbl90cmlvKSBjb25zdAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMs IHR5cGUpKQogICAgIHsKZGlmZiAtLWdpdCBhL2djYy9yYW5nZS1vcC5jYyBiL2djYy9yYW5nZS1v cC5jYwppbmRleCBjZjdmMGRjZDY3MC4uNDllZTdiZTNkM2IgMTAwNjQ0Ci0tLSBhL2djYy9yYW5n ZS1vcC5jYworKysgYi9nY2MvcmFuZ2Utb3AuY2MKQEAgLTE3OSwxMiArMTc5LDEzIEBAIGJvb2wK IHJhbmdlX29wZXJhdG9yOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAg ICBjb25zdCBpcmFuZ2UgJmxoLAogCQkJICAgIGNvbnN0IGlyYW5nZSAmcmgsCi0JCQkgICAgcmVs YXRpb25fa2luZCByZWwpIGNvbnN0CisJCQkgICAgcmVsYXRpb25fdHJpbyB0cmlvKSBjb25zdAog ewogICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChyLnN1cHBvcnRzX3R5cGVfcCAodHlwZSkpOwogICBp ZiAoZW1wdHlfcmFuZ2VfdmFyeWluZyAociwgdHlwZSwgbGgsIHJoKSkKICAgICByZXR1cm4gdHJ1 ZTsKIAorICByZWxhdGlvbl9raW5kIHJlbCA9IHRyaW8ub3AxX29wMiAoKTsKICAgdW5zaWduZWQg bnVtX2xoID0gbGgubnVtX3BhaXJzICgpOwogICB1bnNpZ25lZCBudW1fcmggPSByaC5udW1fcGFp cnMgKCk7CiAKQEAgLTIyNyw3ICsyMjgsNyBAQCByYW5nZV9vcGVyYXRvcjo6b3AxX3JhbmdlIChp cmFuZ2UgJnIgQVRUUklCVVRFX1VOVVNFRCwKIAkJCSAgIHRyZWUgdHlwZSBBVFRSSUJVVEVfVU5V U0VELAogCQkJICAgY29uc3QgaXJhbmdlICZsaHMgQVRUUklCVVRFX1VOVVNFRCwKIAkJCSAgIGNv bnN0IGlyYW5nZSAmb3AyIEFUVFJJQlVURV9VTlVTRUQsCi0JCQkgICByZWxhdGlvbl9raW5kIHJl bCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsK ICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjM5LDcgKzI0MCw3IEBAIHJhbmdlX29wZXJhdG9yOjpv cDJfcmFuZ2UgKGlyYW5nZSAmciBBVFRSSUJVVEVfVU5VU0VELAogCQkJICAgdHJlZSB0eXBlIEFU VFJJQlVURV9VTlVTRUQsCiAJCQkgICBjb25zdCBpcmFuZ2UgJmxocyBBVFRSSUJVVEVfVU5VU0VE LAogCQkJICAgY29uc3QgaXJhbmdlICZvcDEgQVRUUklCVVRFX1VOVVNFRCwKLQkJCSAgIHJlbGF0 aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkgICByZWxhdGlvbl90cmlv KSBjb25zdAogewogICByZXR1cm4gZmFsc2U7CiB9CkBAIC00NTMsMTUgKzQ1NCwxNSBAQCBwdWJs aWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CSAgIGNvbnN0IGlyYW5nZSAmb3AxLAogCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgICBy ZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgICByZWxhdGlvbl90 cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoaXJh bmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBp cmFuZ2UgJnZhbCwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0 OworCQkJICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBi b29sIG9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAm bGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJnZhbCwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBW UkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBj b25zdDsKICAgdmlydHVhbCByZWxhdGlvbl9raW5kIG9wMV9vcDJfcmVsYXRpb24gKGNvbnN0IGly YW5nZSAmbGhzKSBjb25zdDsKIH0gb3BfZXF1YWw7CiAKQEAgLTQ5NCw3ICs0OTUsNyBAQCBib29s CiBvcGVyYXRvcl9lcXVhbDo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkg ICAgY29uc3QgaXJhbmdlICZvcDEsCiAJCQkgICAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgICAg cmVsYXRpb25fa2luZCByZWwpIGNvbnN0CisJCQkgICAgcmVsYXRpb25fdHJpbyByZWwpIGNvbnN0 CiB7CiAgIGlmIChyZWxvcF9lYXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVsLCBW UkVMX0VRKSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUyNyw3ICs1MjgsNyBAQCBib29sCiBvcGVy YXRvcl9lcXVhbDo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0 IGlyYW5nZSAmbGhzLAogCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgICByZWxhdGlvbl9r aW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJICAgcmVsYXRpb25fdHJpbykgY29u c3QKIHsKICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBA IC01NTgsOSArNTU5LDkgQEAgYm9vbAogb3BlcmF0b3JfZXF1YWw6Om9wMl9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgIGNvbnN0IGly YW5nZSAmb3AxLAotCQkJICAgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0CisJCQkgICByZWxhdGlv bl90cmlvIHJlbCkgY29uc3QKIHsKLSAgcmV0dXJuIG9wZXJhdG9yX2VxdWFsOjpvcDFfcmFuZ2Ug KHIsIHR5cGUsIGxocywgb3AxLCByZWwpOworICByZXR1cm4gb3BlcmF0b3JfZXF1YWw6Om9wMV9y YW5nZSAociwgdHlwZSwgbGhzLCBvcDEsIHJlbC5zd2FwX29wMV9vcDIgKCkpOwogfQogCiBjbGFz cyBvcGVyYXRvcl9ub3RfZXF1YWwgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKQEAgLTU3MiwxNSAr NTczLDE1IEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZvcDEsCiAJCQkgICBjb25zdCBpcmFuZ2Ug Jm9wMiwKLQkJCSAgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJ CSAgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wg b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMs CiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxf VkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0 OwogICB2aXJ0dWFsIGJvb2wgb3AyX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAg Y29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJICByZWxhdGlv bl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gPSBU UklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIHJlbGF0aW9uX2tpbmQgb3AxX29wMl9yZWxh dGlvbiAoY29uc3QgaXJhbmdlICZsaHMpIGNvbnN0OwogfSBvcF9ub3RfZXF1YWw7CiAKQEAgLTYx Miw3ICs2MTMsNyBAQCBib29sCiBvcGVyYXRvcl9ub3RfZXF1YWw6OmZvbGRfcmFuZ2UgKGlyYW5n ZSAmciwgdHJlZSB0eXBlLAogCQkJCWNvbnN0IGlyYW5nZSAmb3AxLAogCQkJCWNvbnN0IGlyYW5n ZSAmb3AyLAotCQkJCXJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJCXJlbGF0aW9uX3RyaW8g cmVsKSBjb25zdAogewogICBpZiAocmVsb3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBv cDIsIHJlbCwgVlJFTF9ORSkpCiAgICAgcmV0dXJuIHRydWU7CkBAIC02NDUsNyArNjQ2LDcgQEAg Ym9vbAogb3BlcmF0b3Jfbm90X2VxdWFsOjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBl LAogCQkJICAgICAgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICAgICAgIGNvbnN0IGlyYW5nZSAm b3AyLAotCQkJICAgICAgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0 CisJCQkgICAgICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgc3dpdGNoIChnZXRfYm9vbF9z dGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBAIC02NzcsOSArNjc4LDkgQEAgYm9vbAogb3Bl cmF0b3Jfbm90X2VxdWFsOjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAg ICAgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICAgICAgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJ ICAgICAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJICAgICAgIHJlbGF0aW9uX3RyaW8g cmVsKSBjb25zdAogewotICByZXR1cm4gb3BlcmF0b3Jfbm90X2VxdWFsOjpvcDFfcmFuZ2UgKHIs IHR5cGUsIGxocywgb3AxLCByZWwpOworICByZXR1cm4gb3BlcmF0b3Jfbm90X2VxdWFsOjpvcDFf cmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxLCByZWwuc3dhcF9vcDFfb3AyICgpKTsKIH0KIAogLy8g KFggPCBWQUwpIHByb2R1Y2VzIHRoZSByYW5nZSBvZiBbTUlOLCBWQUwgLSAxXS4KQEAgLTc1MSwx NSArNzUyLDE1IEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAm ciwgdHJlZSB0eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZvcDEsCiAJCQkgICBjb25zdCBpcmFu Z2UgJm9wMiwKLQkJCSAgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsK KwkJCSAgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIGJv b2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZs aHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZS RUxfVkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gPSBUUklPX1ZBUllJTkcpIGNv bnN0OwogICB2aXJ0dWFsIGJvb2wgb3AyX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJICByZWxh dGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8g PSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIHJlbGF0aW9uX2tpbmQgb3AxX29wMl9y ZWxhdGlvbiAoY29uc3QgaXJhbmdlICZsaHMpIGNvbnN0OwogfSBvcF9sdDsKIApAQCAtNzkxLDcg Kzc5Miw3IEBAIGJvb2wKIG9wZXJhdG9yX2x0Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUg dHlwZSwKIAkJCSBjb25zdCBpcmFuZ2UgJm9wMSwKIAkJCSBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJ CSByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QKKwkJCSByZWxhdGlvbl90cmlvIHJlbCkgY29uc3QK IHsKICAgaWYgKHJlbG9wX2Vhcmx5X3Jlc29sdmUgKHIsIHR5cGUsIG9wMSwgb3AyLCByZWwsIFZS RUxfTFQpKQogICAgIHJldHVybiB0cnVlOwpAQCAtODE1LDcgKzgxNiw3IEBAIGJvb2wKIG9wZXJh dG9yX2x0OjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJY29uc3QgaXJhbmdl ICZsaHMsCiAJCQljb25zdCBpcmFuZ2UgJm9wMiwKLQkJCXJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJ QlVURV9VTlVTRUQpIGNvbnN0CisJCQlyZWxhdGlvbl90cmlvKSBjb25zdAogewogICBzd2l0Y2gg KGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKQEAgLTgzNyw3ICs4MzgsNyBA QCBib29sCiBvcGVyYXRvcl9sdDo6b3AyX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CWNvbnN0IGlyYW5nZSAmbGhzLAogCQkJY29uc3QgaXJhbmdlICZvcDEsCi0JCQlyZWxhdGlvbl9r aW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJcmVsYXRpb25fdHJpbykgY29uc3QK IHsKICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBAIC04 NjUsMTUgKzg2NiwxNSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAogCQkJICAgY29uc3Qg aXJhbmdlICZvcDIsCi0JCQkgICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29u c3Q7CisJCQkgICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVh bCBib29sIG9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5n ZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwg PSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5H KSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUs CiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAg cmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90 cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCByZWxhdGlvbl9raW5kIG9wMV9v cDJfcmVsYXRpb24gKGNvbnN0IGlyYW5nZSAmbGhzKSBjb25zdDsKIH0gb3BfbGU7CiAKQEAgLTkw NSw3ICs5MDYsNyBAQCBib29sCiBvcGVyYXRvcl9sZTo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0 cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZvcDEsCiAJCQkgY29uc3QgaXJhbmdlICZvcDIs Ci0JCQkgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0CisJCQkgcmVsYXRpb25fdHJpbyByZWwpIGNv bnN0CiB7CiAgIGlmIChyZWxvcF9lYXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVs LCBWUkVMX0xFKSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkyNiw3ICs5MjcsNyBAQCBib29sCiBv cGVyYXRvcl9sZTo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCWNvbnN0IGly YW5nZSAmbGhzLAogCQkJY29uc3QgaXJhbmdlICZvcDIsCi0JCQlyZWxhdGlvbl9raW5kIHJlbCBB VFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgc3dp dGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICB7CkBAIC05NDgsNyArOTQ5 LDcgQEAgYm9vbAogb3BlcmF0b3JfbGU6Om9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUs CiAJCQljb25zdCBpcmFuZ2UgJmxocywKIAkJCWNvbnN0IGlyYW5nZSAmb3AxLAotCQkJcmVsYXRp b25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCXJlbGF0aW9uX3RyaW8pIGNv bnN0CiB7CiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewpA QCAtOTc2LDE1ICs5NzcsMTUgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAo aXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKIAkJCSAgIGNv bnN0IGlyYW5nZSAmb3AyLAotCQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcp IGNvbnN0OworCQkJICAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZp cnR1YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBp cmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQg cmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFS WUlORykgY29uc3Q7CiAgIHZpcnR1YWwgYm9vbCBvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDEsCi0J CQkgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRp b25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZpcnR1YWwgcmVsYXRpb25fa2luZCBv cDFfb3AyX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29uc3Q7CiB9IG9wX2d0OwogCkBA IC0xMDE2LDcgKzEwMTcsNyBAQCBvcGVyYXRvcl9ndDo6b3AxX29wMl9yZWxhdGlvbiAoY29uc3Qg aXJhbmdlICZsaHMpIGNvbnN0CiBib29sCiBvcGVyYXRvcl9ndDo6Zm9sZF9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZvcDEsIGNvbnN0IGlyYW5nZSAmb3Ay LAotCQkJIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJIHJlbGF0aW9uX3RyaW8gcmVsKSBj b25zdAogewogICBpZiAocmVsb3BfZWFybHlfcmVzb2x2ZSAociwgdHlwZSwgb3AxLCBvcDIsIHJl bCwgVlJFTF9HVCkpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDM2LDcgKzEwMzcsNyBAQCBvcGVy YXRvcl9ndDo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiBib29sCiBvcGVyYXRv cl9ndDo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCWNvbnN0IGlyYW5nZSAm bGhzLCBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCXJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9V TlVTRUQpIGNvbnN0CisJCQlyZWxhdGlvbl90cmlvKSBjb25zdAogewogICBzd2l0Y2ggKGdldF9i b29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKQEAgLTEwNTgsNyArMTA1OSw3IEBAIGJv b2wKIG9wZXJhdG9yX2d0OjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJY29u c3QgaXJhbmdlICZsaHMsCiAJCQljb25zdCBpcmFuZ2UgJm9wMSwKLQkJCXJlbGF0aW9uX2tpbmQg cmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQlyZWxhdGlvbl90cmlvKSBjb25zdAogewog ICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKQEAgLTEwODYs MTUgKzEwODcsMTUgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKIAkJCSAgIGNvbnN0IGly YW5nZSAmb3AyLAotCQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0 OworCQkJICAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZpcnR1YWwg Ym9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2Ug JmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsID0g VlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykg Y29uc3Q7CiAgIHZpcnR1YWwgYm9vbCBvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAog CQkJICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDEsCi0JCQkgIHJl bGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJp byA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZpcnR1YWwgcmVsYXRpb25fa2luZCBvcDFfb3Ay X3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocykgY29uc3Q7CiB9IG9wX2dlOwogCkBAIC0xMTI2 LDcgKzExMjcsNyBAQCBib29sCiBvcGVyYXRvcl9nZTo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0 cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZvcDEsCiAJCQkgY29uc3QgaXJhbmdlICZvcDIs Ci0JCQkgcmVsYXRpb25fa2luZCByZWwpIGNvbnN0CisJCQkgcmVsYXRpb25fdHJpbyByZWwpIGNv bnN0CiB7CiAgIGlmIChyZWxvcF9lYXJseV9yZXNvbHZlIChyLCB0eXBlLCBvcDEsIG9wMiwgcmVs LCBWUkVMX0dFKSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNDcsNyArMTE0OCw3IEBAIGJvb2wK IG9wZXJhdG9yX2dlOjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJY29uc3Qg aXJhbmdlICZsaHMsCiAJCQljb25zdCBpcmFuZ2UgJm9wMiwKLQkJCXJlbGF0aW9uX2tpbmQgcmVs IEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQlyZWxhdGlvbl90cmlvKSBjb25zdAogewogICBz d2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKQEAgLTExNjksNyAr MTE3MCw3IEBAIGJvb2wKIG9wZXJhdG9yX2dlOjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLAogCQkJY29uc3QgaXJhbmdlICZsaHMsCiAJCQljb25zdCBpcmFuZ2UgJm9wMSwKLQkJCXJl bGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQlyZWxhdGlvbl90cmlv KSBjb25zdAogewogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAg IHsKQEAgLTExOTgsMTEgKzExOTksMTEgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgb3AxX3Jh bmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkg IGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5V U0VEKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbykgY29uc3Q7CiAgIHZpcnR1YWwgYm9vbCBv cDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywK IAkJCSAgY29uc3QgaXJhbmdlICZvcDEsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVU RV9VTlVTRUQpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvKSBjb25zdDsKICAgdmlydHVhbCB2 b2lkIHdpX2ZvbGQgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICAgICAgIGNvbnN0IHdpZGVf aW50ICZsaF9sYiwKIAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfdWIsCkBAIC0xNDAyLDcg KzE0MDMsNyBAQCBib29sCiBvcGVyYXRvcl9wbHVzOjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJl ZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIs Ci0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJICByZWxhdGlvbl90cmlvIHRyaW8p IGNvbnN0CiB7CiAgIGlmIChsaHMudW5kZWZpbmVkX3AgKCkpCiAgICAgcmV0dXJuIGZhbHNlOwpA QCAtMTQxMSw2ICsxNDEyLDcgQEAgb3BlcmF0b3JfcGx1czo6b3AxX3JhbmdlIChpcmFuZ2UgJnIs IHRyZWUgdHlwZSwKICAgaWYgKCFtaW51cykKICAgICByZXR1cm4gZmFsc2U7CiAgIGJvb2wgcmVz ID0gbWludXMuZm9sZF9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDIpOworICByZWxhdGlvbl9raW5k IHJlbCA9IHRyaW8ubGhzX29wMiAoKTsKICAgLy8gQ2hlY2sgZm9yIGEgcmVsYXRpb24gcmVmaW5l bWVudC4KICAgaWYgKHJlcykKICAgICBhZGp1c3Rfb3AxX2Zvcl9vdmVyZmxvdyAociwgb3AyLCBy ZWwsIHRydWUgLyogUExVU19FWFBSICovKTsKQEAgLTE0MjEsOSArMTQyMyw5IEBAIGJvb2wKIG9w ZXJhdG9yX3BsdXM6Om9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0 IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgcmVsYXRpb25fa2lu ZCByZWwpIGNvbnN0CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVsKSBjb25zdAogewotICByZXR1cm4g b3AxX3JhbmdlIChyLCB0eXBlLCBsaHMsIG9wMSwgcmVsKTsKKyAgcmV0dXJuIG9wMV9yYW5nZSAo ciwgdHlwZSwgbGhzLCBvcDEsIHJlbC5zd2FwX29wMV9vcDIgKCkpOwogfQogCiAKQEAgLTE0MzYs MTEgKzE0MzgsMTEgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5n ZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdDsK KwkJCSAgcmVsYXRpb25fdHJpbykgY29uc3Q7CiAgIHZpcnR1YWwgYm9vbCBvcDJfcmFuZ2UgKGly YW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3Qg aXJhbmdlICZvcDEsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNv bnN0OworCQkJICByZWxhdGlvbl90cmlvKSBjb25zdDsKICAgdmlydHVhbCB2b2lkIHdpX2ZvbGQg KGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwK IAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfdWIsCkBAIC0xNTczLDcgKzE1NzUsNyBAQCBi b29sCiBvcGVyYXRvcl9taW51czo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CSAgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgICBy ZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJICAgcmVsYXRpb25f dHJpbyB0cmlvKSBjb25zdAogewogICBpZiAobGhzLnVuZGVmaW5lZF9wICgpKQogICAgIHJldHVy biBmYWxzZTsKQEAgLTE1ODIsNiArMTU4NCw3IEBAIG9wZXJhdG9yX21pbnVzOjpvcDFfcmFuZ2Ug KGlyYW5nZSAmciwgdHJlZSB0eXBlLAogICBpZiAoIW1pbnVzKQogICAgIHJldHVybiBmYWxzZTsK ICAgYm9vbCByZXMgPSBtaW51cy5mb2xkX3JhbmdlIChyLCB0eXBlLCBsaHMsIG9wMik7CisgIHJl bGF0aW9uX2tpbmQgcmVsID0gdHJpby5saHNfb3AyICgpOwogICBpZiAocmVzKQogICAgIGFkanVz dF9vcDFfZm9yX292ZXJmbG93IChyLCBvcDIsIHJlbCwgZmFsc2UgLyogUExVU19FWFBSICovKTsK ICAgcmV0dXJuIHJlczsKQEAgLTE1OTIsNyArMTU5NSw3IEBAIGJvb2wKIG9wZXJhdG9yX21pbnVz OjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZs aHMsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgIHJlbGF0aW9uX2tpbmQgcmVsIEFU VFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkgICByZWxhdGlvbl90cmlvKSBjb25zdAogewogICBp ZiAobGhzLnVuZGVmaW5lZF9wICgpKQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NTIsMTcgKzE3 NTUsMTcgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3Ay LAotCQkJICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdDsKKwkJCSAg cmVsYXRpb25fdHJpbykgY29uc3Q7CiAgIHZpcnR1YWwgYm9vbCBvcDJfcmFuZ2UgKGlyYW5nZSAm ciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdl ICZvcDEsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0Owor CQkJICByZWxhdGlvbl90cmlvKSBjb25zdDsKIH0gb3BfbXVsdDsKIAogYm9vbAogb3BlcmF0b3Jf bXVsdDo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdl ICZsaHMsIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJV VEVfVU5VU0VEKSBjb25zdAorCQkJICByZWxhdGlvbl90cmlvKSBjb25zdAogewogICB0cmVlIG9m ZnNldDsKICAgaWYgKGxocy51bmRlZmluZWRfcCAoKSkKQEAgLTE3ODMsOSArMTc4Niw5IEBAIG9w ZXJhdG9yX211bHQ6Om9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiBib29sCiBvcGVy YXRvcl9tdWx0OjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBp cmFuZ2UgJmxocywgY29uc3QgaXJhbmdlICZvcDEsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsKSBj b25zdAorCQkJICByZWxhdGlvbl90cmlvIHJlbCkgY29uc3QKIHsKLSAgcmV0dXJuIG9wZXJhdG9y X211bHQ6Om9wMV9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDEsIHJlbCk7CisgIHJldHVybiBvcGVy YXRvcl9tdWx0OjpvcDFfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxLCByZWwuc3dhcF9vcDFfb3Ay ICgpKTsKIH0KIAogYm9vbApAQCAtMjAwOSw3ICsyMDEyLDcgQEAgcHVibGljOgogICB2aXJ0dWFs IGJvb2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdl ICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCBB VFRSSUJVVEVfVU5VU0VEKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbykgY29uc3Q7CiAKIH0g b3BfZXhhY3RfZGl2OwogCkBAIC0yMDE3LDcgKzIwMjAsNyBAQCBib29sCiBvcGVyYXRvcl9leGFj dF9kaXZpZGU6Om9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkJICBjb25zdCBp cmFuZ2UgJmxocywKIAkJCQkgIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJCSAgcmVsYXRpb25fa2lu ZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0 CiB7CiAgIGlmIChsaHMudW5kZWZpbmVkX3AgKCkpCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA0 MywxMSArMjA0NiwxMSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5n ZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJh bmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsK KwkJCSAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFs IGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFu Z2UgJm9wMSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICAgcmVsYXRpb25fa2luZCBy ZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklP X1ZBUllJTkcpIGNvbnN0OwogCiAgIHZpcnR1YWwgdm9pZCB3aV9mb2xkIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwgY29uc3Qgd2lkZV9pbnQgJmxoX3Vi LApAQCAtMjA2Nyw3ICsyMDcwLDcgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5n ZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKIAkJCSAg IGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJ TkcpIGNvbnN0OworCQkJICAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0 OwogICB2aXJ0dWFsIHZvaWQgd2lfZm9sZCAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQljb25z dCB3aWRlX2ludCAmbGhfbGIsCiAJCQljb25zdCB3aWRlX2ludCAmbGhfdWIsCkBAIC0yMDgwLDcg KzIwODMsNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmLCB0 cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9w MiwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICBy ZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZpcnR1YWwgcmVsYXRp b25fa2luZCBsaHNfb3AxX3JlbGF0aW9uIChjb25zdCBpcmFuZ2UgJmxocywKIAkJCQkJICAgY29u c3QgaXJhbmdlICZvcDEsCiAJCQkJCSAgIGNvbnN0IGlyYW5nZSAmb3AyLApAQCAtMjEwNiw3ICsy MTA5LDcgQEAgYm9vbAogb3BlcmF0b3JfbHNoaWZ0Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCSAgICAgY29uc3QgaXJhbmdlICZvcDEsCiAJCQkgICAgIGNvbnN0IGlyYW5n ZSAmb3AyLAotCQkJICAgICByZWxhdGlvbl9raW5kIHJlbCkgY29uc3QKKwkJCSAgICAgcmVsYXRp b25fdHJpbyByZWwpIGNvbnN0CiB7CiAgIGludF9yYW5nZV9tYXggc2hpZnRfcmFuZ2U7CiAgIGlm ICghZ2V0X3NoaWZ0X3JhbmdlIChzaGlmdF9yYW5nZSwgdHlwZSwgb3AyKSkKQEAgLTIyMjgsNyAr MjIzMSw3IEBAIG9wZXJhdG9yX2xzaGlmdDo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsCiAJCQkgICAg dHJlZSB0eXBlLAogCQkJICAgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICAgIGNvbnN0IGlyYW5n ZSAmb3AyLAotCQkJICAgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0 CisJCQkgICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgaWYgKGxocy51bmRlZmluZWRfcCAo KSkKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzAxLDcgKzIzMDQsNyBAQCBvcGVyYXRvcl9yc2hp ZnQ6Om9wMV9yYW5nZSAoaXJhbmdlICZyLAogCQkJICAgIHRyZWUgdHlwZSwKIAkJCSAgICBjb25z dCBpcmFuZ2UgJmxocywKIAkJCSAgICBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCSAgICByZWxhdGlv bl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJICAgIHJlbGF0aW9uX3RyaW8p IGNvbnN0CiB7CiAgIHRyZWUgc2hpZnQ7CiAgIGlmIChsaHMudW5kZWZpbmVkX3AgKCkpCkBAIC0y MzgwLDcgKzIzODMsNyBAQCBib29sCiBvcGVyYXRvcl9yc2hpZnQ6OmZvbGRfcmFuZ2UgKGlyYW5n ZSAmciwgdHJlZSB0eXBlLAogCQkJICAgICBjb25zdCBpcmFuZ2UgJm9wMSwKIAkJCSAgICAgY29u c3QgaXJhbmdlICZvcDIsCi0JCQkgICAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJICAg ICByZWxhdGlvbl90cmlvIHJlbCkgY29uc3QKIHsKICAgaW50X3JhbmdlX21heCBzaGlmdDsKICAg aWYgKCFnZXRfc2hpZnRfcmFuZ2UgKHNoaWZ0LCB0eXBlLCBvcDIpKQpAQCAtMjQxMiwxMSArMjQx NSwxMSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAogCQkJICAgY29uc3QgaXJhbmdlICZv cDIsCi0JCQkgICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkg ICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZpcnR1YWwgYm9v bCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxo cywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJF TF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZBUllJTkcp IGNvbnN0OwogICB2aXJ0dWFsIHJlbGF0aW9uX2tpbmQgbGhzX29wMV9yZWxhdGlvbiAoY29uc3Qg aXJhbmdlICZsaHMsCiAJCQkJCSAgY29uc3QgaXJhbmdlICZvcDEsCiAJCQkJCSAgY29uc3QgaXJh bmdlICZvcDIsCkBAIC0yNTI4LDcgKzI1MzEsNyBAQCBib29sCiBvcGVyYXRvcl9jYXN0Ojpmb2xk X3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSBBVFRSSUJVVEVfVU5VU0VELAogCQkJICAgY29u c3QgaXJhbmdlICZpbm5lciwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3V0ZXIsCi0JCQkgICByZWxh dGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJICAgcmVsYXRpb25fdHJp bykgY29uc3QKIHsKICAgaWYgKGVtcHR5X3JhbmdlX3ZhcnlpbmcgKHIsIHR5cGUsIGlubmVyLCBv dXRlcikpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTY3LDcgKzI1NzAsNyBAQCBib29sCiBvcGVy YXRvcl9jYXN0OjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBp cmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQg cmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7 CiAgIGlmIChsaHMudW5kZWZpbmVkX3AgKCkpCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjY4Miwx NSArMjY4NSwxNSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmbGgsCiAJCQkgICBjb25zdCBpcmFu Z2UgJnJoLAotCQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0Owor CQkJICAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFs IGJvb2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdl ICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9 IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZ SU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5 cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJ CSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlv bl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiB9IG9wX2xvZ2ljYWxfYW5kOwogCiAK QEAgLTI2OTgsNyArMjcwMSw3IEBAIGJvb2wKIG9wZXJhdG9yX2xvZ2ljYWxfYW5kOjpmb2xkX3Jh bmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCQkgIGNvbnN0IGlyYW5nZSAmbGgsCiAJCQkJ ICBjb25zdCBpcmFuZ2UgJnJoLAotCQkJCSAgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VO VVNFRCkgY29uc3QKKwkJCQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIGlmIChlbXB0eV9y YW5nZV92YXJ5aW5nIChyLCB0eXBlLCBsaCwgcmgpKQogICAgIHJldHVybiB0cnVlOwpAQCAtMjcy MSw3ICsyNzI0LDcgQEAgYm9vbAogb3BlcmF0b3JfbG9naWNhbF9hbmQ6Om9wMV9yYW5nZSAoaXJh bmdlICZyLCB0cmVlIHR5cGUsCiAJCQkJIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJCSBjb25zdCBp cmFuZ2UgJm9wMiBBVFRSSUJVVEVfVU5VU0VELAotCQkJCSByZWxhdGlvbl9raW5kIHJlbCBBVFRS SUJVVEVfVU5VU0VEKSBjb25zdAorCQkJCSByZWxhdGlvbl90cmlvKSBjb25zdAogewogICAgc3dp dGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0eXBlKSkKICAgICAgewpAQCAtMjc0Myw3ICsy NzQ2LDcgQEAgYm9vbAogb3BlcmF0b3JfbG9naWNhbF9hbmQ6Om9wMl9yYW5nZSAoaXJhbmdlICZy LCB0cmVlIHR5cGUsCiAJCQkJIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJCSBjb25zdCBpcmFuZ2Ug Jm9wMSwKLQkJCQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJ CQkgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgcmV0dXJuIG9wZXJhdG9yX2xvZ2ljYWxfYW5k OjpvcDFfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxKTsKIH0KQEAgLTI3NTgsMTUgKzI3NjEsMTUg QEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5 cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJmxoLAogCQkJICAgY29uc3QgaXJhbmdlICZyaCwKLQkJ CSAgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgIHJlbGF0 aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMV9y YW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJ ICBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJ TkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7 CiAgIHZpcnR1YWwgYm9vbCBvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBj b25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDEsCi0JCQkgIHJlbGF0aW9u X2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyByZWwg PSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIHZvaWQgd2lfZm9sZCAoaXJhbmdlICZy LCB0cmVlIHR5cGUsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLAogCQkgICAgICAg IGNvbnN0IHdpZGVfaW50ICZsaF91YiwKQEAgLTI3ODYsNyArMjc4OSw3IEBAIGJvb2wKIG9wZXJh dG9yX2JpdHdpc2VfYW5kOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCQkg IGNvbnN0IGlyYW5nZSAmbGgsCiAJCQkJICBjb25zdCBpcmFuZ2UgJnJoLAotCQkJCSAgcmVsYXRp b25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgIHJlbGF0aW9uX3RyaW8p IGNvbnN0CiB7CiAgIGlmIChyYW5nZV9vcGVyYXRvcjo6Zm9sZF9yYW5nZSAociwgdHlwZSwgbGgs IHJoKSkKICAgICB7CkBAIC0zMTM2LDcgKzMxMzksNyBAQCBib29sCiBvcGVyYXRvcl9iaXR3aXNl X2FuZDo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCQkgY29uc3QgaXJhbmdl ICZsaHMsCiAJCQkJIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJCSByZWxhdGlvbl9raW5kIHJlbCBB VFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJCSByZWxhdGlvbl90cmlvKSBjb25zdAogewogICBp ZiAobGhzLnVuZGVmaW5lZF9wICgpKQogICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNzEsNyArMzE3 NCw3IEBAIGJvb2wKIG9wZXJhdG9yX2JpdHdpc2VfYW5kOjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkJCSBjb25zdCBpcmFuZ2UgJmxocywKIAkJCQkgY29uc3QgaXJhbmdlICZv cDEsCi0JCQkJIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkJ IHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIHJldHVybiBvcGVyYXRvcl9iaXR3aXNlX2FuZDo6 b3AxX3JhbmdlIChyLCB0eXBlLCBsaHMsIG9wMSk7CiB9CkBAIC0zMTg2LDIyICszMTg5LDIyIEBA IHB1YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBl LAogCQkJICAgY29uc3QgaXJhbmdlICZsaCwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmcmgsCi0JCQkg ICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgICByZWxhdGlv bl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZpcnR1YWwgYm9vbCBvcDFfcmFu Z2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAg Y29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5H KSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0Owog ICB2aXJ0dWFsIGJvb2wgb3AyX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29u c3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJICByZWxhdGlvbl9r aW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0g VFJJT19WQVJZSU5HKSBjb25zdDsKIH0gb3BfbG9naWNhbF9vcjsKIAogYm9vbAogb3BlcmF0b3Jf bG9naWNhbF9vcjo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUgQVRUUklCVVRFX1VO VVNFRCwKIAkJCQkgY29uc3QgaXJhbmdlICZsaCwKIAkJCQkgY29uc3QgaXJhbmdlICZyaCwKLQkJ CQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgcmVsYXRp b25fdHJpbykgY29uc3QKIHsKICAgaWYgKGVtcHR5X3JhbmdlX3ZhcnlpbmcgKHIsIHR5cGUsIGxo LCByaCkpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjE1LDcgKzMyMTgsNyBAQCBib29sCiBvcGVy YXRvcl9sb2dpY2FsX29yOjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJCWNv bnN0IGlyYW5nZSAmbGhzLAogCQkJCWNvbnN0IGlyYW5nZSAmb3AyIEFUVFJJQlVURV9VTlVTRUQs Ci0JCQkJcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQlyZWxh dGlvbl90cmlvKSBjb25zdAogewogICAgc3dpdGNoIChnZXRfYm9vbF9zdGF0ZSAociwgbGhzLCB0 eXBlKSkKICAgICAgewpAQCAtMzIzNyw3ICszMjQwLDcgQEAgYm9vbAogb3BlcmF0b3JfbG9naWNh bF9vcjo6b3AyX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCQljb25zdCBpcmFuZ2Ug JmxocywKIAkJCQljb25zdCBpcmFuZ2UgJm9wMSwKLQkJCQlyZWxhdGlvbl9raW5kIHJlbCBBVFRS SUJVVEVfVU5VU0VEKSBjb25zdAorCQkJCXJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIHJldHVy biBvcGVyYXRvcl9sb2dpY2FsX29yOjpvcDFfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxKTsKIH0K QEAgLTMyNTEsMTEgKzMyNTQsMTEgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgb3AxX3Jhbmdl IChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNv bnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykg Y29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAg dmlydHVhbCBib29sIG9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0 IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgcmVsYXRpb25fa2lu ZCByZWw9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJ T19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCB2b2lkIHdpX2ZvbGQgKGlyYW5nZSAmciwgdHJl ZSB0eXBlLAogCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwKIAkJICAgICAgICBjb25z dCB3aWRlX2ludCAmbGhfdWIsCkBAIC0zMzIzLDcgKzMzMjYsNyBAQCBib29sCiBvcGVyYXRvcl9i aXR3aXNlX29yOjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJCWNvbnN0IGly YW5nZSAmbGhzLAogCQkJCWNvbnN0IGlyYW5nZSAmb3AyLAotCQkJCXJlbGF0aW9uX2tpbmQgcmVs IEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkJcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAg aWYgKGxocy51bmRlZmluZWRfcCAoKSkKICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMzQ1LDcgKzMz NDgsNyBAQCBib29sCiBvcGVyYXRvcl9iaXR3aXNlX29yOjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkJCWNvbnN0IGlyYW5nZSAmbGhzLAogCQkJCWNvbnN0IGlyYW5nZSAmb3Ax LAotCQkJCXJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkJcmVs YXRpb25fdHJpbykgY29uc3QKIHsKICAgcmV0dXJuIG9wZXJhdG9yX2JpdHdpc2Vfb3I6Om9wMV9y YW5nZSAociwgdHlwZSwgbGhzLCBvcDEpOwogfQpAQCAtMzM2NCwxMSArMzM2NywxMSBAQCBwdWJs aWM6CiAgIHZpcnR1YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJ ICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0 aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyBy ZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wgb3AyX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGly YW5nZSAmb3AxLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7 CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVh bCBib29sIG9wMV9vcDJfcmVsYXRpb25fZWZmZWN0IChpcmFuZ2UgJmxoc19yYW5nZSwKIAkJCQkJ dHJlZSB0eXBlLAogCQkJCQljb25zdCBpcmFuZ2UgJm9wMV9yYW5nZSwKQEAgLTM0NTQsNyArMzQ1 Nyw3IEBAIGJvb2wKIG9wZXJhdG9yX2JpdHdpc2VfeG9yOjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkJCSBjb25zdCBpcmFuZ2UgJmxocywKIAkJCQkgY29uc3QgaXJhbmdlICZv cDIsCi0JCQkJIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkJ IHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIGlmIChsaHMudW5kZWZpbmVkX3AgKCkgfHwgbGhz LnZhcnlpbmdfcCAoKSkKICAgICB7CkBAIC0zNDg5LDcgKzM0OTIsNyBAQCBib29sCiBvcGVyYXRv cl9iaXR3aXNlX3hvcjo6b3AyX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCQkgY29u c3QgaXJhbmdlICZsaHMsCiAJCQkJIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJCSByZWxhdGlvbl9r aW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJCSByZWxhdGlvbl90cmlvKSBjb25z dAogewogICByZXR1cm4gb3BlcmF0b3JfYml0d2lzZV94b3I6Om9wMV9yYW5nZSAociwgdHlwZSwg bGhzLCBvcDEpOwogfQpAQCAtMzUwNywxMSArMzUxMCwxMSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwg Ym9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2Ug JmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsIEFU VFJJQlVURV9VTlVTRUQpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvKSBjb25zdDsKICAgdmly dHVhbCBib29sIG9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGly YW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgcmVsYXRpb25fa2luZCBy ZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0Owog fSBvcF90cnVuY19tb2Q7CiAKIHZvaWQKQEAgLTM1NzQsNyArMzU3Nyw3IEBAIGJvb2wKIG9wZXJh dG9yX3RydW5jX21vZDo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgICAg ICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgICAgICBjb25zdCBpcmFuZ2UgJiwKLQkJCSAgICAg ICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJICAgICAgIHJl bGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIGlmIChsaHMudW5kZWZpbmVkX3AgKCkpCiAgICAgcmV0 dXJuIGZhbHNlOwpAQCAtMzYwMCw3ICszNjAzLDcgQEAgYm9vbAogb3BlcmF0b3JfdHJ1bmNfbW9k OjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgICAgIGNvbnN0IGlyYW5n ZSAmbGhzLAogCQkJICAgICAgIGNvbnN0IGlyYW5nZSAmLAotCQkJICAgICAgIHJlbGF0aW9uX2tp bmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkgICAgICAgcmVsYXRpb25fdHJpbykg Y29uc3QKIHsKICAgaWYgKGxocy51bmRlZmluZWRfcCAoKSkKICAgICByZXR1cm4gZmFsc2U7CkBA IC0zNjQ0LDExICszNjQ3LDExIEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2Ug KGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZsaCwKIAkJCSAgIGNv bnN0IGlyYW5nZSAmcmgsCi0JCQkgICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykg Y29uc3Q7CisJCQkgICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAg IHZpcnR1YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25z dCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tp bmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyByZWwgPSBU UklPX1ZBUllJTkcpIGNvbnN0OwogfSBvcF9sb2dpY2FsX25vdDsKIAogLy8gRm9sZGluZyBhIGxv Z2ljYWwgTk9ULCBvZGRseSBlbm91Z2gsIGludm9sdmVzIGRvaW5nIG5vdGhpbmcgb24gdGhlCkBA IC0zNjY5LDcgKzM2NzIsNyBAQCBib29sCiBvcGVyYXRvcl9sb2dpY2FsX25vdDo6Zm9sZF9yYW5n ZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkJICBjb25zdCBpcmFuZ2UgJmxoLAogCQkJCSAg Y29uc3QgaXJhbmdlICZyaCBBVFRSSUJVVEVfVU5VU0VELAotCQkJCSAgcmVsYXRpb25fa2luZCBy ZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7 CiAgIGlmIChlbXB0eV9yYW5nZV92YXJ5aW5nIChyLCB0eXBlLCBsaCwgcmgpKQogICAgIHJldHVy biB0cnVlOwpAQCAtMzY4Niw3ICszNjg5LDcgQEAgb3BlcmF0b3JfbG9naWNhbF9ub3Q6Om9wMV9y YW5nZSAoaXJhbmdlICZyLAogCQkJCSB0cmVlIHR5cGUsCiAJCQkJIGNvbnN0IGlyYW5nZSAmbGhz LAogCQkJCSBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklC VVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgLy8gTG9n aWNhbCBOT1QgaXMgaW52b2x1dGFyeS4uLmRvIGl0IGFnYWluLgogICByZXR1cm4gZm9sZF9yYW5n ZSAociwgdHlwZSwgbGhzLCBvcDIpOwpAQCAtMzcwMSwxOCArMzcwNCwxOCBAQCBwdWJsaWM6CiAg IHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNv bnN0IGlyYW5nZSAmbGgsCiAJCQkgICBjb25zdCBpcmFuZ2UgJnJoLAotCQkJICAgcmVsYXRpb25f a2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICAgcmVsYXRpb25fdHJpbyByZWwg PSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5n ZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJ CQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdDsKIH0gb3BfYml0d2lz ZV9ub3Q7CiAKIGJvb2wKIG9wZXJhdG9yX2JpdHdpc2Vfbm90Ojpmb2xkX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCQkgIGNvbnN0IGlyYW5nZSAmbGgsCiAJCQkJICBjb25zdCBpcmFu Z2UgJnJoLAotCQkJCSAgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QK KwkJCQkgIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIGlmIChlbXB0eV9yYW5nZV92YXJ5aW5n IChyLCB0eXBlLCBsaCwgcmgpKQogICAgIHJldHVybiB0cnVlOwpAQCAtMzczMCw3ICszNzMzLDcg QEAgYm9vbAogb3BlcmF0b3JfYml0d2lzZV9ub3Q6Om9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVl IHR5cGUsCiAJCQkJIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJCSBjb25zdCBpcmFuZ2UgJm9wMiwK LQkJCQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCQkgcmVs YXRpb25fdHJpbykgY29uc3QKIHsKICAgaWYgKGxocy51bmRlZmluZWRfcCAoKSkKICAgICByZXR1 cm4gZmFsc2U7CkBAIC0zNzQ5LDE0ICszNzUyLDE0IEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29s IGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZv cDEsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCSAgIHJlbGF0aW9uX2tpbmQgcmVsID0g VlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZ SU5HKSBjb25zdDsKIH0gb3BfaW50ZWdlcl9jc3Q7CiAKIGJvb2wKIG9wZXJhdG9yX2NzdDo6Zm9s ZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUgQVRUUklCVVRFX1VOVVNFRCwKIAkJCSAgY29u c3QgaXJhbmdlICZsaCwKIAkJCSAgY29uc3QgaXJhbmdlICZyaCBBVFRSSUJVVEVfVU5VU0VELAot CQkJICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkJICByZWxh dGlvbl90cmlvKSBjb25zdAogewogICByID0gbGg7CiAgIHJldHVybiB0cnVlOwpAQCAtMzc3Miwx MSArMzc3NSwxMSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAogCQkJICAgY29uc3QgaXJh bmdlICZvcDIsCi0JCQkgICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7 CisJCQkgICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHZpcnR1 YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFu Z2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVs ID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgcmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZB UllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIHJlbGF0aW9uX2tpbmQgbGhzX29wMV9yZWxhdGlvbiAo Y29uc3QgaXJhbmdlICZsaHMsCiAJCQkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAogCQkJCQkgICBj b25zdCBpcmFuZ2UgJm9wMiwKQEAgLTM4MDEsNyArMzgwNCw3IEBAIGJvb2wKIG9wZXJhdG9yX2lk ZW50aXR5Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSBBVFRSSUJVVEVfVU5VU0VE LAogCQkJICAgICAgIGNvbnN0IGlyYW5nZSAmbGgsCiAJCQkgICAgICAgY29uc3QgaXJhbmdlICZy aCBBVFRSSUJVVEVfVU5VU0VELAotCQkJICAgICAgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVU RV9VTlVTRUQpIGNvbnN0CisJCQkgICAgICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgciA9 IGxoOwogICByZXR1cm4gdHJ1ZTsKQEAgLTM4MTEsNyArMzgxNCw3IEBAIGJvb2wKIG9wZXJhdG9y X2lkZW50aXR5OjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlIEFUVFJJQlVURV9VTlVT RUQsCiAJCQkgICAgICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgICAgIGNvbnN0IGlyYW5nZSAm b3AyIEFUVFJJQlVURV9VTlVTRUQsCi0JCQkgICAgICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJV VEVfVU5VU0VEKSBjb25zdAorCQkJICAgICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgciA9 IGxoczsKICAgcmV0dXJuIHRydWU7CkBAIC0zODI1LDE0ICszODI4LDE0IEBAIHB1YmxpYzoKICAg dmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29u c3QgaXJhbmdlICZvcDEsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCSAgIHJlbGF0aW9u X2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgIHJlbGF0aW9uX3RyaW8gcmVs ID0gVFJJT19WQVJZSU5HKSBjb25zdDsKIH0gb3BfdW5rbm93bjsKIAogYm9vbAogb3BlcmF0b3Jf dW5rbm93bjo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICAgICBjb25z dCBpcmFuZ2UgJmxoIEFUVFJJQlVURV9VTlVTRUQsCiAJCQkgICAgICBjb25zdCBpcmFuZ2UgJnJo IEFUVFJJQlVURV9VTlVTRUQsCi0JCQkgICAgICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVf VU5VU0VEKSBjb25zdAorCQkJICAgICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgci5zZXRf dmFyeWluZyAodHlwZSk7CiAgIHJldHVybiB0cnVlOwpAQCAtMzg1MSw3ICszODU0LDcgQEAgY2xh c3Mgb3BlcmF0b3JfYWJzIDogcHVibGljIHJhbmdlX29wZXJhdG9yCiAgIHZpcnR1YWwgYm9vbCBv cDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywK IAkJCSAgY29uc3QgaXJhbmdlICZvcDIsCi0JCQkgIHJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVU RV9VTlVTRUQpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvKSBjb25zdDsKIH0gb3BfYWJzOwog CiB2b2lkCkBAIC0zOTMyLDcgKzM5MzUsNyBAQCBib29sCiBvcGVyYXRvcl9hYnM6Om9wMV9yYW5n ZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgY29u c3QgaXJhbmdlICZvcDIsCi0JCQkgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkg Y29uc3QKKwkJCSByZWxhdGlvbl90cmlvKSBjb25zdAogewogICBpZiAoZW1wdHlfcmFuZ2VfdmFy eWluZyAociwgdHlwZSwgbGhzLCBvcDIpKQogICAgIHJldHVybiB0cnVlOwpAQCAtNDAxMywxOCAr NDAxNiwxOCBAQCBjbGFzcyBvcGVyYXRvcl9uZWdhdGUgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IK ICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAg Y29uc3QgaXJhbmdlICZvcDEsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCSAgIHJlbGF0 aW9uX2tpbmQgcmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJCSAgIHJlbGF0aW9uX3RyaW8g cmVsID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoaXJh bmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBp cmFuZ2UgJm9wMiwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0 OworCQkJICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiB9IG9wX25l Z2F0ZTsKIAogYm9vbAogb3BlcmF0b3JfbmVnYXRlOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCSAgICAgY29uc3QgaXJhbmdlICZsaCwKIAkJCSAgICAgY29uc3QgaXJhbmdl ICZyaCwKLQkJCSAgICAgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QK KwkJCSAgICAgcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgaWYgKGVtcHR5X3JhbmdlX3Zhcnlp bmcgKHIsIHR5cGUsIGxoLCByaCkpCiAgICAgcmV0dXJuIHRydWU7CkBAIC00MDM3LDcgKzQwNDAs NyBAQCBib29sCiBvcGVyYXRvcl9uZWdhdGU6Om9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5 cGUsCiAJCQkgICAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgICAgY29uc3QgaXJhbmdlICZvcDIs Ci0JCQkgICAgcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCSAg ICByZWxhdGlvbl90cmlvKSBjb25zdAogewogICAvLyBORUdBVEUgaXMgaW52b2x1dG9yeS4KICAg cmV0dXJuIGZvbGRfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AyKTsKQEAgLTQwNTIsMTggKzQwNTUs MTggQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVl IHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3Ay LAotCQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICAg cmVsYXRpb25fdHJpbyByZWwgPSBUUklPX1ZBUllJTkcpIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wg b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMs CiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxf VkFSWUlORykgY29uc3Q7CisJCQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBj b25zdDsKIH0gb3BfYWRkcjsKIAogYm9vbAogb3BlcmF0b3JfYWRkcl9leHByOjpmb2xkX3Jhbmdl IChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCQljb25zdCBpcmFuZ2UgJmxoLAogCQkJCWNvbnN0 IGlyYW5nZSAmcmgsCi0JCQkJcmVsYXRpb25fa2luZCByZWwgQVRUUklCVVRFX1VOVVNFRCkgY29u c3QKKwkJCQlyZWxhdGlvbl90cmlvKSBjb25zdAogewogICBpZiAoZW1wdHlfcmFuZ2VfdmFyeWlu ZyAociwgdHlwZSwgbGgsIHJoKSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwODIsNyArNDA4NSw3 IEBAIGJvb2wKIG9wZXJhdG9yX2FkZHJfZXhwcjo6b3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUg dHlwZSwKIAkJCSAgICAgICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgICAgICBjb25zdCBpcmFu Z2UgJm9wMiwKLQkJCSAgICAgICByZWxhdGlvbl9raW5kIHJlbCBBVFRSSUJVVEVfVU5VU0VEKSBj b25zdAorCQkJICAgICAgIHJlbGF0aW9uX3RyaW8pIGNvbnN0CiB7CiAgIHJldHVybiBvcGVyYXRv cl9hZGRyX2V4cHI6OmZvbGRfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AyKTsKIH0KQEAgLTQyMDQs MTEgKzQyMDcsMTEgQEAgcHVibGljOgogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5n ZSAmb3AyLAotCQkJICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJ CQkgIHJlbGF0aW9uX3RyaW8gcmVsID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBi b29sIG9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAm bGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBW UkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvIHJlbCA9IFRSSU9fVkFSWUlO RykgY29uc3Q7CiAgIHZpcnR1YWwgdm9pZCB3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwK IAkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkJY29u c3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0OwpAQCAtNDIx OCw3ICs0MjIxLDcgQEAgYm9vbAogcG9pbnRlcl9vcl9vcGVyYXRvcjo6b3AxX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCQljb25zdCBpcmFuZ2UgJmxocywKIAkJCQljb25zdCBpcmFu Z2UgJm9wMiBBVFRSSUJVVEVfVU5VU0VELAotCQkJCXJlbGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVU RV9VTlVTRUQpIGNvbnN0CisJCQkJcmVsYXRpb25fdHJpbykgY29uc3QKIHsKICAgaWYgKGxocy51 bmRlZmluZWRfcCAoKSkKICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjM2LDcgKzQyMzksNyBAQCBi b29sCiBwb2ludGVyX29yX29wZXJhdG9yOjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBl LAogCQkJCWNvbnN0IGlyYW5nZSAmbGhzLAogCQkJCWNvbnN0IGlyYW5nZSAmb3AxLAotCQkJCXJl bGF0aW9uX2tpbmQgcmVsIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkJcmVsYXRpb25fdHJp bykgY29uc3QKIHsKICAgcmV0dXJuIHBvaW50ZXJfb3Jfb3BlcmF0b3I6Om9wMV9yYW5nZSAociwg dHlwZSwgbGhzLCBvcDEpOwogfQpAQCAtNDQyMiw3ICs0NDI1LDcgQEAgYm9vbAogcmFuZ2Vfb3Bf aGFuZGxlcjo6Zm9sZF9yYW5nZSAodnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICAgICBjb25z dCB2cmFuZ2UgJmxoLAogCQkJICAgICAgY29uc3QgdnJhbmdlICZyaCwKLQkJCSAgICAgIHJlbGF0 aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJICAgICAgcmVsYXRpb25fdHJpbyByZWwpIGNvbnN0CiB7 CiAgIGdjY19jaGVja2luZ19hc3NlcnQgKG1fdmFsaWQpOwogICBpZiAobV9pbnQpCkBAIC00NDUw LDcgKzQ0NTMsNyBAQCBib29sCiByYW5nZV9vcF9oYW5kbGVyOjpvcDFfcmFuZ2UgKHZyYW5nZSAm ciwgdHJlZSB0eXBlLAogCQkJICAgICBjb25zdCB2cmFuZ2UgJmxocywKIAkJCSAgICAgY29uc3Qg dnJhbmdlICZvcDIsCi0JCQkgICAgIHJlbGF0aW9uX2tpbmQgcmVsKSBjb25zdAorCQkJICAgICBy ZWxhdGlvbl90cmlvIHJlbCkgY29uc3QKIHsKICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAobV92YWxp ZCk7CiAKQEAgLTQ0NzQsNyArNDQ3Nyw3IEBAIGJvb2wKIHJhbmdlX29wX2hhbmRsZXI6Om9wMl9y YW5nZSAodnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICAgIGNvbnN0IHZyYW5nZSAmbGhzLAog CQkJICAgICBjb25zdCB2cmFuZ2UgJm9wMSwKLQkJCSAgICAgcmVsYXRpb25fa2luZCByZWwpIGNv bnN0CisJCQkgICAgIHJlbGF0aW9uX3RyaW8gcmVsKSBjb25zdAogewogICBnY2NfY2hlY2tpbmdf YXNzZXJ0IChtX3ZhbGlkKTsKICAgaWYgKGxocy51bmRlZmluZWRfcCAoKSkKZGlmZiAtLWdpdCBh L2djYy9yYW5nZS1vcC5oIGIvZ2NjL3JhbmdlLW9wLmgKaW5kZXggNDhhZGNlY2M3YzYuLmM3MjQ5 ODkwMTQyIDEwMDY0NAotLS0gYS9nY2MvcmFuZ2Utb3AuaAorKysgYi9nY2MvcmFuZ2Utb3AuaApA QCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmbGgsCiAJCQkgICBjb25zdCBp cmFuZ2UgJnJoLAotCQkJICAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0 OworCQkJICAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAKICAgLy8gUmV0 dXJuIHRoZSByYW5nZSBmb3Igb3BbMTJdIGluIHRoZSBnZW5lcmFsIGNhc2UuICBMSFMgaXMgdGhl IHJhbmdlIGZvcgogICAvLyB0aGUgTEhTIG9mIHRoZSBleHByZXNzaW9uLCBPUFsxMl1pcyB0aGUg cmFuZ2UgZm9yIHRoZSBvdGhlcgpAQCAtNjksMTEgKzY5LDExIEBAIHB1YmxpYzoKICAgdmlydHVh bCBib29sIG9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5n ZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMiwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwg PSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5H KSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMl9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUs CiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAg cmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90 cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKIAogICAvLyBUaGUgZm9sbG93aW5nIHJvdXRpbmVz IGFyZSB1c2VkIHRvIHJlcHJlc2VudCByZWxhdGlvbnMgYmV0d2VlbiB0aGUKICAgLy8gdmFyaW91 cyBvcGVyYXRpb25zLiAgSWYgdGhlIGNhbGxlciBrbm93cyB3aGVyZSB0aGUgc3ltYm9saWNzIGFy ZSwKQEAgLTExNiwzMiArMTE2LDMyIEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRfcmFu Z2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29uc3QgZnJhbmdlICZsaCwKIAkJCSAg IGNvbnN0IGZyYW5nZSAmcmgsCi0JCQkgICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlO RykgY29uc3Q7CisJCQkgICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAg Ly8gVW5hcnkgb3BlcmF0aW9ucyBoYXZlIHRoZSByYW5nZSBvZiB0aGUgTEhTIGFzIG9wMi4KICAg dmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29u c3QgZnJhbmdlICZsaCwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmcmgsCi0JCQkgICByZWxhdGlvbl9r aW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkgICByZWxhdGlvbl90cmlvID0gVFJJ T19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkJICAgY29uc3QgZnJhbmdlICZsaCwKIAkJCSAgIGNvbnN0IGZyYW5nZSAm cmgsCi0JCQkgICByZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCQkg ICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9w MV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGZyYW5nZSAmbGhzLAog CQkJICBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZB UllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsK ICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNv bnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBmcmFuZ2UgJm9wMiwKLQkJCSAgcmVsYXRpb25f a2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvID0gVFJJ T19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMl9yYW5nZSAoZnJhbmdlICZyLCB0 cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGZyYW5nZSAmbGhzLAogCQkJICBjb25zdCBmcmFuZ2UgJm9w MSwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJTkcpIGNvbnN0OworCQkJICBy ZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMl9y YW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJ ICBjb25zdCBmcmFuZ2UgJm9wMSwKLQkJCSAgcmVsYXRpb25fa2luZCByZWwgPSBWUkVMX1ZBUllJ TkcpIGNvbnN0OworCQkJICByZWxhdGlvbl90cmlvID0gVFJJT19WQVJZSU5HKSBjb25zdDsKIAog ICB2aXJ0dWFsIHJlbGF0aW9uX2tpbmQgbGhzX29wMV9yZWxhdGlvbiAoY29uc3QgZnJhbmdlICZs aHMsCiAJCQkJCSAgY29uc3QgZnJhbmdlICZvcDEsCkBAIC0xNzMsMTUgKzE3MywxNSBAQCBwdWJs aWM6CiAgIGJvb2wgZm9sZF9yYW5nZSAodnJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCSAgIGNvbnN0 IHZyYW5nZSAmbGgsCiAJCSAgIGNvbnN0IHZyYW5nZSAmcmgsCi0JCSAgIHJlbGF0aW9uX2tpbmQg cmVsID0gVlJFTF9WQVJZSU5HKSBjb25zdDsKKwkJICAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFS WUlORykgY29uc3Q7CiAgIGJvb2wgb3AxX3JhbmdlICh2cmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ ICBjb25zdCB2cmFuZ2UgJmxocywKIAkJICBjb25zdCB2cmFuZ2UgJm9wMiwKLQkJICByZWxhdGlv bl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCSAgcmVsYXRpb25fdHJpbyA9IFRS SU9fVkFSWUlORykgY29uc3Q7CiAgIGJvb2wgb3AyX3JhbmdlICh2cmFuZ2UgJnIsIHRyZWUgdHlw ZSwKIAkJICBjb25zdCB2cmFuZ2UgJmxocywKIAkJICBjb25zdCB2cmFuZ2UgJm9wMSwKLQkJICBy ZWxhdGlvbl9raW5kIHJlbCA9IFZSRUxfVkFSWUlORykgY29uc3Q7CisJCSAgcmVsYXRpb25fdHJp byA9IFRSSU9fVkFSWUlORykgY29uc3Q7CiAgIHJlbGF0aW9uX2tpbmQgbGhzX29wMV9yZWxhdGlv biAoY29uc3QgdnJhbmdlICZsaHMsCiAJCQkJICBjb25zdCB2cmFuZ2UgJm9wMSwKIAkJCQkgIGNv bnN0IHZyYW5nZSAmb3AyLApAQCAtMjQwLDkgKzI0MCwxMCBAQCBlbXB0eV9yYW5nZV92YXJ5aW5n ICh2cmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAogaW5saW5lIGJvb2wKIHJlbG9wX2Vhcmx5X3Jlc29s dmUgKGlyYW5nZSAmciwgdHJlZSB0eXBlLCBjb25zdCB2cmFuZ2UgJm9wMSwKLQkJICAgICBjb25z dCB2cmFuZ2UgJm9wMiwgcmVsYXRpb25fa2luZCByZWwsCisJCSAgICAgY29uc3QgdnJhbmdlICZv cDIsIHJlbGF0aW9uX3RyaW8gdHJpbywKIAkJICAgICByZWxhdGlvbl9raW5kIG15X3JlbCkKIHsK KyAgcmVsYXRpb25fa2luZCByZWwgPSB0cmlvLm9wMV9vcDIgKCk7CiAgIC8vIElmIGtub3duIHJl bGF0aW9uIGlzIGEgY29tcGxldGUgc3Vic2V0IG9mIHRoaXMgcmVsYXRpb24sIGFsd2F5cyB0cnVl LgogICBpZiAocmVsYXRpb25fdW5pb24gKHJlbCwgbXlfcmVsKSA9PSBteV9yZWwpCiAgICAgewpk aWZmIC0tZ2l0IGEvZ2NjL3ZhbHVlLXJlbGF0aW9uLmNjIGIvZ2NjL3ZhbHVlLXJlbGF0aW9uLmNj CmluZGV4IDNmYjdiOTZjOWUwLi5mZWQ4YTc4NzIzYyAxMDA2NDQKLS0tIGEvZ2NjL3ZhbHVlLXJl bGF0aW9uLmNjCisrKyBiL2djYy92YWx1ZS1yZWxhdGlvbi5jYwpAQCAtMzIsOSArMzIsNyBAQCBh bG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1 ZGUgImFsbG9jLXBvb2wuaCIKICNpbmNsdWRlICJkb21pbmFuY2UuaCIKIAotI2RlZmluZSBWUkVM X0xBU1QgICAgICAgICAgICAgICBWUkVMX1BFNjQKLQotc3RhdGljIGNvbnN0IGNoYXIgKmtpbmRf c3RyaW5nW1ZSRUxfTEFTVCArIDFdID0KK3N0YXRpYyBjb25zdCBjaGFyICpraW5kX3N0cmluZ1tW UkVMX0xBU1RdID0KIHsgInZhcnlpbmciLCAidW5kZWZpbmVkIiwgIjwiLCAiPD0iLCAiPiIsICI+ PSIsICI9PSIsICIhPSIsICJwZTgiLCAicGUxNiIsCiAgICJwZTMyIiwgInBlNjQiIH07CiAKQEAg LTQ3LDcgKzQ1LDcgQEAgcHJpbnRfcmVsYXRpb24gKEZJTEUgKmYsIHJlbGF0aW9uX2tpbmQgcmVs KQogfQogCiAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gbmVnYXRlIHRoZSBvcGVyYW5kcy4gIG9w MSBSRUwgb3AyIC0+ICEob3AxIFJFTCBvcDIpLgotcmVsYXRpb25fa2luZCBycl9uZWdhdGVfdGFi bGVbVlJFTF9MQVNUICsgMV0gPSB7CityZWxhdGlvbl9raW5kIHJyX25lZ2F0ZV90YWJsZVtWUkVM X0xBU1RdID0gewogICBWUkVMX1ZBUllJTkcsIFZSRUxfVU5ERUZJTkVELCBWUkVMX0dFLCBWUkVM X0dULCBWUkVMX0xFLCBWUkVMX0xULCBWUkVMX05FLAogICBWUkVMX0VRIH07CiAKQEAgLTYwLDcg KzU4LDcgQEAgcmVsYXRpb25fbmVnYXRlIChyZWxhdGlvbl9raW5kIHIpCiB9CiAKIC8vIFRoaXMg dGFibGUgaXMgdXNlZCB0byBzd2FwIHRoZSBvcGVyYW5kcy4gIG9wMSBSRUwgb3AyIC0+IG9wMiBS RUwgb3AxLgotcmVsYXRpb25fa2luZCBycl9zd2FwX3RhYmxlW1ZSRUxfTEFTVCArIDFdID0gewor cmVsYXRpb25fa2luZCBycl9zd2FwX3RhYmxlW1ZSRUxfTEFTVF0gPSB7CiAgIFZSRUxfVkFSWUlO RywgVlJFTF9VTkRFRklORUQsIFZSRUxfR1QsIFZSRUxfR0UsIFZSRUxfTFQsIFZSRUxfTEUsIFZS RUxfRVEsCiAgIFZSRUxfTkUgfTsKIApAQCAtNzQsNyArNzIsNyBAQCByZWxhdGlvbl9zd2FwIChy ZWxhdGlvbl9raW5kIHIpCiAKIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBwZXJmb3JtIGFuIGlu dGVyc2VjdGlvbiBiZXR3ZWVuIDIgcmVsYXRpb25zLgogCi1yZWxhdGlvbl9raW5kIHJyX2ludGVy c2VjdF90YWJsZVtWUkVMX0xBU1QgKyAxXVtWUkVMX0xBU1QgKyAxXSA9IHsKK3JlbGF0aW9uX2tp bmQgcnJfaW50ZXJzZWN0X3RhYmxlW1ZSRUxfTEFTVF1bVlJFTF9MQVNUXSA9IHsKIC8vIFZSRUxf VkFSWUlORwogICB7IFZSRUxfVkFSWUlORywgVlJFTF9VTkRFRklORUQsIFZSRUxfTFQsIFZSRUxf TEUsIFZSRUxfR1QsIFZSRUxfR0UsIFZSRUxfRVEsCiAgICAgVlJFTF9ORSB9LApAQCAtMTEyLDcg KzExMCw3IEBAIHJlbGF0aW9uX2ludGVyc2VjdCAocmVsYXRpb25fa2luZCByMSwgcmVsYXRpb25f a2luZCByMikKIAogLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIHBlcmZvcm0gYSB1bmlvbiBiZXR3 ZWVuIDIgcmVsYXRpb25zLgogCi1yZWxhdGlvbl9raW5kIHJyX3VuaW9uX3RhYmxlW1ZSRUxfTEFT VCArIDFdW1ZSRUxfTEFTVCArIDFdID0geworcmVsYXRpb25fa2luZCBycl91bmlvbl90YWJsZVtW UkVMX0xBU1RdW1ZSRUxfTEFTVF0gPSB7CiAvLyBWUkVMX1ZBUllJTkcKICAgeyBWUkVMX1ZBUllJ TkcsIFZSRUxfVkFSWUlORywgVlJFTF9WQVJZSU5HLCBWUkVMX1ZBUllJTkcsIFZSRUxfVkFSWUlO RywKICAgICBWUkVMX1ZBUllJTkcsIFZSRUxfVkFSWUlORywgVlJFTF9WQVJZSU5HIH0sCkBAIC0x NTAsNyArMTQ4LDcgQEAgcmVsYXRpb25fdW5pb24gKHJlbGF0aW9uX2tpbmQgcjEsIHJlbGF0aW9u X2tpbmQgcjIpCiAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRyYW5zaXRpdml0 eSBiZXR3ZWVuIDIgcmVsYXRpb25zLgogLy8gKEEgcmVsYXRpb24wIEIpIGFuZCAoQiByZWxhdGlv bjEgQykgaW1wbGllcyAgKEEgcmVzdWx0IEMpCiAKLXJlbGF0aW9uX2tpbmQgcnJfdHJhbnNpdGl2 ZV90YWJsZVtWUkVMX0xBU1QgKyAxXVtWUkVMX0xBU1QgKyAxXSA9IHsKK3JlbGF0aW9uX2tpbmQg cnJfdHJhbnNpdGl2ZV90YWJsZVtWUkVMX0xBU1RdW1ZSRUxfTEFTVF0gPSB7CiAvLyBWUkVMX1ZB UllJTkcKICAgeyBWUkVMX1ZBUllJTkcsIFZSRUxfVkFSWUlORywgVlJFTF9WQVJZSU5HLCBWUkVM X1ZBUllJTkcsIFZSRUxfVkFSWUlORywKICAgICBWUkVMX1ZBUllJTkcsIFZSRUxfVkFSWUlORywg VlJFTF9WQVJZSU5HIH0sCkBAIC0xODcsNyArMTg1LDcgQEAgcmVsYXRpb25fdHJhbnNpdGl2ZSAo cmVsYXRpb25fa2luZCByMSwgcmVsYXRpb25fa2luZCByMikKIAogLy8gVGhpcyB2ZWN0b3IgbWFw cyBhIHJlbGF0aW9uIHRvIHRoZSBlcXVpdmFsZW50IHRyZWUgY29kZS4KIAotdHJlZV9jb2RlIHJl bGF0aW9uX3RvX2NvZGUgW1ZSRUxfTEFTVCArIDFdID0gewordHJlZV9jb2RlIHJlbGF0aW9uX3Rv X2NvZGUgW1ZSRUxfTEFTVF0gPSB7CiAgIEVSUk9SX01BUkssIEVSUk9SX01BUkssIExUX0VYUFIs IExFX0VYUFIsIEdUX0VYUFIsIEdFX0VYUFIsIEVRX0VYUFIsCiAgIE5FX0VYUFIgfTsKIApAQCAt MjI2LDcgKzIyNCw4IEBAIHJlbGF0aW9uX29yYWNsZTo6dmFsaWRhdGVfcmVsYXRpb24gKHJlbGF0 aW9uX2tpbmQgcmVsLCB2cmFuZ2UgJm9wMSwgdnJhbmdlICZvcDIpCiAKICAgLy8gSWYgdGhlIHJl bGF0aW9uIGNhbm5vdCBiZSBmb2xkZWQgZm9yIGFueSByZWFzb24sIGxlYXZlIGFzIGlzLgogICBW YWx1ZV9SYW5nZSByZXN1bHQgKGJvb2xlYW5fdHlwZV9ub2RlKTsKLSAgaWYgKCFoYW5kbGVyLmZv bGRfcmFuZ2UgKHJlc3VsdCwgYm9vbGVhbl90eXBlX25vZGUsIG9wMSwgb3AyLCByZWwpKQorICBp ZiAoIWhhbmRsZXIuZm9sZF9yYW5nZSAocmVzdWx0LCBib29sZWFuX3R5cGVfbm9kZSwgb3AxLCBv cDIsCisJCQkgICByZWxhdGlvbl90cmlvOjpvcDFfb3AyIChyZWwpKSkKICAgICByZXR1cm4gcmVs OwogCiAgIC8vIFRoZSBleHByZXNzaW9uIG9wMSBSRUwgb3AyIHVzaW5nIFJFTCBzaG91bGQgZm9s ZCB0byBbMSwxXS4KZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yZWxhdGlvbi5oIGIvZ2NjL3ZhbHVl LXJlbGF0aW9uLmgKaW5kZXggZmE5MDk3YTgwNjkuLjAyN2Q3NDE2MTYzIDEwMDY0NAotLS0gYS9n Y2MvdmFsdWUtcmVsYXRpb24uaAorKysgYi9nY2MvdmFsdWUtcmVsYXRpb24uaApAQCAtMzUsMjAg KzM1LDIxIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAvLyB1dGlsaXplcyB0aGUgcmVsYXRpb24gaW5mb3JtYXRpb24gdG8gZW5oYW5jZSBpdCdz IHJhbmdlIGNhbGN1bGF0aW9ucywgdGhpcwogLy8gaXMgdG90YWxseSB0cmFuc3BhcmVudCB0byB0 aGUgY2xpZW50LCBhbmQgdGhleSBhcmUgZnJlZSB0byBtYWtlIHF1ZXJpZXMuCiAvLwotLy8KLS8v IHJlbGF0aW9uX2tpbmQgaXMgYSB0eXBlZGVmIG9mIGVudW0gdHJlZV9jb2RlLCBidXQgaGFzIHJl c3RyaWN0ZWQgcmFuZ2UKLS8vIGFuZCBhIGNvdXBsZSBvZiBleHRyYSB2YWx1ZXMuCisvLyByZWxh dGlvbl9raW5kIGlzIGEgbmV3IGVudW0gd2hpY2ggcmVwcmVzZW50cyB0aGUgZGlmZmVyZW50IHJl bGF0aW9ucywKKy8vIG9mdGVuIHdpdGggYSBkaXJlY3QgbWFwcGluZyB0byB0cmVlZSBjb2Rlcy4g aWUgVlJFTF9FUSBpcyBlcXVpdmFsZW50IHRvCisvLyBFUV9FWFBSLgogLy8KIC8vIEEgcXVlcnkg aXMgbWFkZSByZXF1ZXN0aW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIFNTQTEgYW5kIFNTQUAgaW4g YSBiYXNpYwogLy8gYmxvY2ssIG9yIG9uIGFuIGVkZ2UsIHRoZSBwb3NzaWJsZSByZXR1cm4gdmFs dWVzIGFyZToKIC8vCi0vLyAgRVFfRVhQUiwgTkVfRVhQUiwgTFRfRVhQUiwgTEVfRVhQUiwgR1Rf RVhQUiwgYW5kIEdFX0VYUFIgbWVhbiB0aGUgc2FtZS4KKy8vICBWUkVMX0VRLCBWUkVMX05FLCBW UkVMX0xULCBWUkVMX0xFLCBWUkVMX0dULCBhbmQgVlJFTF9HRSBtZWFuIHRoZSBzYW1lLgogLy8g IFZSRUxfVkFSWUlORyA6IE5vIHJlbGF0aW9uIGJldHdlZW4gdGhlIDIgbmFtZXMuCiAvLyAgVlJF TF9VTkRFRklORUQgOiBJbXBvc3NpYmxlIHJlbGF0aW9uIChpZSwgQSA8IEIgJiYgQSA+IEIpCiAv LwotLy8gVGhlIG9yYWNsZSBtYWludGFpbnMgRVFfRVhQUiByZWxhdGlvbnMgd2l0aCBlcXVpdmFs ZW5jeSBzZXRzLCBzbyBpZiBhCi0vLyByZWxhdGlvbiBjb21lcyBiYWNrIEVRX0VYUFIsIGl0IGlz IGFsc28gcG9zc2libGUgdG8gcXVlcnkgdGhlIHNldCBvZgotLy8gZXF1aXZsYWVuY2llcy4gIFRo ZXNlIGFyZSBiYXNpY2FsbHkgYml0bWFwcyBvdmVyIHNzYV9uYW1lcy4KKy8vIFRoZSBvcmFjbGUg bWFpbnRhaW5zIFZSRUxfRVEgcmVsYXRpb25zIHdpdGggZXF1aXZhbGVuY3kgc2V0cywgc28gaWYg YQorLy8gcmVsYXRpb24gY29tZXMgYmFjayBWUkVMX0VRLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRv IHF1ZXJ5IHRoZSBzZXQgb2YKKy8vIGVxdWl2bGFlbmNpZXMuICBUaGVzZSBhcmUgYmFzaWNhbGx5 IGJpdG1hcHMgb3ZlciBzc2FfbmFtZXMuICBBbiBpdGVyYXRvciBpcworLy8gcHJvdmlkZWQgbGF0 ZXIgZm9yIHRoaXMgYWN0aXZpdHkuCiAvLwogLy8gUmVsYXRpb25zIGFyZSBtYWludGFpbmVkIHZp YSB0aGUgZG9taW5hY2UgdHJlZXMgYW5kIGFyZSBvcHRpbWl6ZWQgYXNzdW1pbmcKIC8vIHRoZXkg YXJlIHJlZ2lzdGVyZWQgaW4gZG9taW5hbmNlIG9yZGVyLiAgIFdoZW4gYSBuZXcgcmVsYXRpb24g aXMgYWRkZWQsIGl0CkBAIC01NiwxMCArNTcsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogLy8gYW5kIHJlZ2lzdGVyZWQgYXQgdGhlIHNwZWNp ZmllZCBibG9jay4KIAogCi0vLyBSYXRoZXIgdGhhbiBpbnRyb2R1Y2UgYSBuZXcgZW51bWVyYXRl ZCB0eXBlIGZvciByZWxhdGlvbnMsIHdlIGNhbiB1c2UgdGhlCi0vLyBleGlzdGluZyB0cmVlX2Nv ZGVzIGZvciByZWxhdGlvbnMsIHBsdXMgYWRkIGEgY291cGxlIG9mICNkZWZpbmVzIGZvcgotLy8g dGhlIG90aGVyIGNhc2VzLiAgVGhlc2UgY29kZXMgYXJlIGFycmFuZ2VkIHN1Y2ggdGhhdCBWUkVM X1ZBUllJTkcgaXMgdGhlCi0vLyBmaXJzdCBjb2RlLCBhbmQgYWxsIHRoZSByZXN0IGFyZSBjb250 aWd1b3VzLgorLy8gVGhlc2UgY29kZXMgYXJlIGFycmFuZ2VkIHN1Y2ggdGhhdCBWUkVMX1ZBUllJ TkcgaXMgdGhlIGZpcnN0IGNvZGUsIGFuZCBhbGwKKy8vIHRoZSByZXN0IGFyZSBjb250aWd1b3Vz LgogCiB0eXBlZGVmIGVudW0gcmVsYXRpb25fa2luZF90CiB7CkBAIC03NCw3ICs3Myw4IEBAIHR5 cGVkZWYgZW51bSByZWxhdGlvbl9raW5kX3QKICAgVlJFTF9QRTgsCQkvLyA4IGJpdCBwYXJ0aWFs IGVxdWl2YWxlbmN5CiAgIFZSRUxfUEUxNiwJCS8vIDE2IGJpdCBwYXJ0aWFsIGVxdWl2YWxlbmN5 CiAgIFZSRUxfUEUzMiwJCS8vIDMyIGJpdCBwYXJ0aWFsIGVxdWl2YWxlbmN5Ci0gIFZSRUxfUEU2 NAkJLy8gNjQgYml0IHBhcnRpYWwgZXF1aXZhbGVuY3kKKyAgVlJFTF9QRTY0LAkJLy8gNjQgYml0 IHBhcnRpYWwgZXF1aXZhbGVuY3kKKyAgVlJFTF9MQVNUCQkvLyB0ZXJtaW5hdGUsIG5vdCBhIHJl YWwgcmVsYXRpb24uCiB9IHJlbGF0aW9uX2tpbmQ7CiAKIC8vIEdlbmVyYWwgcmVsYXRpb24ga2lu ZCB0cmFuc2Zvcm1hdGlvbnMuCkBAIC0zMTUsNiArMzE1LDEwMSBAQCBwcm90ZWN0ZWQ6CiAgICAg ICAgKChlcXVpdl9uYW1lKSA9IGl0ZXIuZ2V0X25hbWUgKCZlcXVpdl9yZWwpKTsJCQlcCiAgICAg ICAgaXRlci5uZXh0ICgpKQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSYW5nZS1vcHMgZGVh bHMgd2l0aCBhIExIUyBhbmQgMiBvcGVyYW5kcy4gQSByZWxhdGlvbiB0cmlvIGlzIGEgc2V0IG9m CisvLyAzIHBvdGVudGlhbCByZWxhdGlvbnMgcGFja2VkIGludG8gYSBzaW5nbGUgdW5zaWduZWQg dmFsdWUuCisvLyAgMSAtIExIUyByZWxhdGlvbiBPUDEKKy8vICAyIC0gTEhTIHJlbGF0aW9uIE9Q MgorLy8gIDMgLSBPUDEgcmVsYXRpb24gT1AyCisvLyAgVlJFTF9WQVJZSU5HIGlzIGEgdmFsdWUg b2YgMCwgYW5kIGlzIHRoZSBkZWZhdWx0IGZvciBlYWNoIHBvc2l0aW9uLgorY2xhc3MgcmVsYXRp b25fdHJpbworeworcHVibGljOgorICByZWxhdGlvbl90cmlvICgpOworICByZWxhdGlvbl90cmlv IChyZWxhdGlvbl9raW5kIGxoc19vcDEsIHJlbGF0aW9uX2tpbmQgbGhzX29wMiwKKwkJIHJlbGF0 aW9uX2tpbmQgb3AxX29wMik7CisgIHJlbGF0aW9uX2tpbmQgbGhzX29wMSAoKTsKKyAgcmVsYXRp b25fa2luZCBsaHNfb3AyICgpOworICByZWxhdGlvbl9raW5kIG9wMV9vcDIgKCk7CisgIHJlbGF0 aW9uX3RyaW8gc3dhcF9vcDFfb3AyICgpOworCisgIHN0YXRpYyByZWxhdGlvbl90cmlvIGxoc19v cDEgKHJlbGF0aW9uX2tpbmQgayk7CisgIHN0YXRpYyByZWxhdGlvbl90cmlvIGxoc19vcDIgKHJl bGF0aW9uX2tpbmQgayk7CisgIHN0YXRpYyByZWxhdGlvbl90cmlvIG9wMV9vcDIgKHJlbGF0aW9u X2tpbmQgayk7CisKK3Byb3RlY3RlZDoKKyAgdW5zaWduZWQgbV92YWw7Cit9OworCisvLyAgRGVm YXVsdCBWUkVMX1ZBUllJTkcgZm9yIGFsbCAzIHJlbGF0aW9ucy4KKyNkZWZpbmUgVFJJT19WQVJZ SU5HCXJlbGF0aW9uX3RyaW8gKCkKKworI2RlZmluZSBUUklPX1NISUZUCTQKKyNkZWZpbmUgVFJJ T19NQVNLCTB4MDAwRgorCisvLyBUaGVzZSAzIGNsYXNzZXMgYXJlIHNob3J0Y3V0cyBmb3Igd2hl biBhIGNhbGxlciBoYXMgYSBzaW5nbGUgcmVsYXRpb24gdG8KKy8vIHBhc3MgYXMgYSB0cmlvLCBp dCBjYW4gc2ltcGx5IGNvbnN0cnVjdCB0aGUgYXBwcm9wcmlhdGUgb25lLiAgVGhlIG90aGVyCisv LyB1bnNwZWNpZmllZCByZWFsdGlvbnMgd2lsbCBiZSBWUkVMX1ZBUllJTkcuCisKK2lubGluZSBy ZWxhdGlvbl90cmlvOjpyZWxhdGlvbl90cmlvICgpCit7CisgIFNUQVRJQ19BU1NFUlQgKFZSRUxf TEFTVCA8PSAoMSA8PCBUUklPX1NISUZUKSk7CisgIG1fdmFsID0gMDsKK30KKworaW5saW5lIHJl bGF0aW9uX3RyaW86OnJlbGF0aW9uX3RyaW8gKHJlbGF0aW9uX2tpbmQgbGhzX29wMSwKKwkJCQkg ICAgIHJlbGF0aW9uX2tpbmQgbGhzX29wMiwKKwkJCQkgICAgIHJlbGF0aW9uX2tpbmQgb3AxX29w MikKK3sKKyAgU1RBVElDX0FTU0VSVCAoVlJFTF9MQVNUIDw9ICgxIDw8IFRSSU9fU0hJRlQpKTsK KyAgdW5zaWduZWQgaTEgPSAodW5zaWduZWQpIGxoc19vcDE7CisgIHVuc2lnbmVkIGkyID0gKCh1 bnNpZ25lZCkgbGhzX29wMikgPDwgVFJJT19TSElGVDsKKyAgdW5zaWduZWQgaTMgPSAoKHVuc2ln bmVkKSBvcDFfb3AyKSA8PCAoVFJJT19TSElGVCAqIDIpOworICBtX3ZhbCA9IGkxIHwgaTIgfCBp MzsKK30KKworaW5saW5lIHJlbGF0aW9uX3RyaW8KK3JlbGF0aW9uX3RyaW86Omxoc19vcDEgKHJl bGF0aW9uX2tpbmQgaykKK3sKKyAgcmV0dXJuIHJlbGF0aW9uX3RyaW8gKGssIFZSRUxfVkFSWUlO RywgVlJFTF9WQVJZSU5HKTsKK30KK2lubGluZSByZWxhdGlvbl90cmlvCityZWxhdGlvbl90cmlv OjpsaHNfb3AyIChyZWxhdGlvbl9raW5kIGspCit7CisgIHJldHVybiByZWxhdGlvbl90cmlvIChW UkVMX1ZBUllJTkcsIGssIFZSRUxfVkFSWUlORyk7Cit9CitpbmxpbmUgcmVsYXRpb25fdHJpbwor cmVsYXRpb25fdHJpbzo6b3AxX29wMiAocmVsYXRpb25fa2luZCBrKQoreworICByZXR1cm4gcmVs YXRpb25fdHJpbyAoVlJFTF9WQVJZSU5HLCBWUkVMX1ZBUllJTkcsIGspOworfQorCitpbmxpbmUg cmVsYXRpb25fa2luZAorcmVsYXRpb25fdHJpbzo6bGhzX29wMSAoKQoreworICByZXR1cm4gKHJl bGF0aW9uX2tpbmQpIChtX3ZhbCAmIFRSSU9fTUFTSyk7Cit9CisKK2lubGluZSByZWxhdGlvbl9r aW5kCityZWxhdGlvbl90cmlvOjpsaHNfb3AyICgpCit7CisgIHJldHVybiAocmVsYXRpb25fa2lu ZCkgKChtX3ZhbCA+PiBUUklPX1NISUZUKSAmIFRSSU9fTUFTSyk7Cit9CisKK2lubGluZSByZWxh dGlvbl9raW5kCityZWxhdGlvbl90cmlvOjpvcDFfb3AyICgpCit7CisgIHJldHVybiAocmVsYXRp b25fa2luZCkgKChtX3ZhbCA+PiAoVFJJT19TSElGVCAqIDIpKSAmIFRSSU9fTUFTSyk7Cit9CisK K2lubGluZSByZWxhdGlvbl90cmlvCityZWxhdGlvbl90cmlvOjpzd2FwX29wMV9vcDIgKCkKK3sK KyAgcmV0dXJuIHJlbGF0aW9uX3RyaW8gKGxoc19vcDIgKCksIGxoc19vcDEgKCksIHJlbGF0aW9u X3N3YXAgKG9wMV9vcDIgKCkpKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gVGhlIHZh bHVlLXJlbGF0aW9uIGNsYXNzIGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIHJlcHJlc2VudGlv biBvZiBhbgogLy8gaW5kaXZpZHVhbCByZWxhdGlvbiBiZXR3ZWVuIDIgc3NhLW5hbWVzLCBhbmQg dG8gZmFjaWxpdGF0ZSBvcGVyYXRpbmcgb24KLS0gCjIuMzcuMwoK --------------XU5NVE3XFcRMUHAivdKmZoMP--