From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id 09BC93858012; Wed, 2 Mar 2022 22:20:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 09BC93858012 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.90,150,1643702400"; d="diff'?scan'208";a="72494837" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa3.mentor.iphmx.com with ESMTP; 02 Mar 2022 14:20:34 -0800 IronPort-SDR: fGKd5AJDF8KhQw+Z0grSdSUFb04ir33dnzahnmteHY6cCBeYOW07bWk7ulTnXfG01VVPpzmKbu to3e2L6fN/3Y8DG5ENS74F4BwklHe2hpaMc4nuS0tM3pJZ0mIc5yRlmDy43HjYc8BNfP/Reg0I Ahhadg94uXjudhQU94e7hMAc9GrMYSnUaNEb3n5sWhp6VBNgr0k2P2229VnGEQqTcz1l0gNYqy s6d/+3VckMKpRyOENq6IQpmFsxI8DAzb0j6y3Q0qZK72w4to4REocuNC44iHVWesSdMzTpZK7W 9z4= Content-Type: multipart/mixed; boundary="------------O6DuTgYtnKZmSI2yNqrz0g7B" Message-ID: Date: Wed, 2 Mar 2022 23:20:24 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [Patch][Stage 1] Fortran/OpenMP: Support mapping of DT with allocatable components Content-Language: en-US From: Tobias Burnus To: gcc-patches , fortran , Jakub Jelinek References: In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-09.mgc.mentorg.com (139.181.222.9) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, KAM_STOCKGEN, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Mar 2022 22:20:43 -0000 --------------O6DuTgYtnKZmSI2yNqrz0g7B Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Some testing found an issue in class.cc (in the new _callback function) =E2=80=93 updated patch attached (long version + interdiff). Tobias (PS: OG11 - original patch was committed as https://gcc.gnu.org/g:98961d3a0ccb02d7d54d2d4dd07cca75473d685a ; follow-up version to be committed in a moment) On 01.03.22 16:34, Tobias Burnus wrote: > Hi all, > > this patch adds support for mapping something like > type t > type(t2), allocatable :: a, b(:) > integer, allocatable :: c, c(:) > end type t > type(t), allocatable :: var, var2(:,:) > > !$omp target enter data map(var, var) > > which does a deep walk of the components at runtime. > > On the ME side, the static addr/size/kinds arrays are > replaced (only if need) by allocatable arrays =E2=80=93 which > are then filled by trans-openmp.c. > > All deep-mapping handling happens via the hooks called > late in omp-low.c such that removing mappings or implicitly > added one are handled. > > In principle, there is also code to handle polymorphic > variables (new callback function in vtable + two on-the-fly > generated functions to be used for walking the vtable). > > Issues: None known, but I am sure with experimenting, > more can be found - especially with arrays/array sections > and polymorphism, I expect issues. I did find some on the > way and fixed them - but (see PR refs in testcase -7.f90), > I also found unrelated bugs, which I did not fix ;-) > > Comments? OK for mainline (GCC 13)? > > Tobias > > PS: I will commit this patch to OG11 for further testing. > PPS: Previously discussed at > https://gcc.gnu.org/pipermail/gcc-patches/2021-December/586237.html ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------O6DuTgYtnKZmSI2yNqrz0g7B Content-Type: text/x-patch; charset="UTF-8"; name="deepmap-map-v18.diff" Content-Disposition: attachment; filename="deepmap-map-v18.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbi9PcGVuTVA6IFN1cHBvcnQgbWFwcGluZyBvZiBEVCB3aXRoIGFsbG9jYXRhYmxl IGNvbXBvbmVudHMKCmdjYy9mb3J0cmFuL0NoYW5nZUxvZzoKCgkqIGNsYXNzLmNjIChmaW5h bGl6YXRpb25fc2NhbGFyaXplcik6IE1hcmsgc3ltcyBhcyBhcnRpZmljaWFsLgoJKGdlbmVy YXRlX2NhbGxiYWNrX3dyYXBwZXIpOiBOZXcuCgkoZ2ZjX2ZpbmRfZGVyaXZlZF92dGFiKTog Q2FsbCBpdCwgYWRkIF9jYWxsYmFjayBjb21wLgoJKiBmOTUtbGFuZy5jYyAoTEFOR19IT09L U19PTVBfREVFUF9NQVBQSU5HLAoJTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HX1AsCglM QU5HX0hPT0tTX09NUF9ERUVQX01BUFBJTkdfQ05UKTogUmVkZWluZmUKCSogZ2ZvcnRyYW4u aCAoZ2ZjX2ltcG9ydF9pc29fY19iaW5kaW5nX21vZHVsZSwKCUdGQ19DTEFTU19DQUxMQkFD S19ERUZBVUxUX0ZMQUcsIEdGQ19DTEFTU19DQUxMQkFDS19WVEFCTEVfRkxBRywKCUdGQ19D TEFTU19DQl9BTExPQ0FUQUJMRSwgR0ZDX0NMQVNTX0NCX1BPSU5URVIsCglHRkNfQ0xBU1Nf Q0JfUFJPQ19QT0lOVEVSLCBHRkNfQ0xBU1NfQ0JfVlRBQkxFLAoJR0ZDX0NMQVNTX0NCX1ZQ VFIpOiBOZXcuCgkqIG1hdGNoLmNjIChzZWxlY3RfdHlwZV9zZXRfdG1wKTogUHJvcGFnYXRl IGFsbG9jYXRhYmxlIHByb3BlcnR5LgoJKiBtb2R1bGUuY2MgKE1PRF9WRVJTSU9OKTogQnVt cCBkdWUgdG8gdnRhYiBjaGFuZ2UuCgkoaW1wb3J0X2lzb19jX2JpbmRpbmdfbW9kdWxlKTog TmV3IGltcG9ydF9hbGwgYXJnLgoJKGdmY19pbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUp OiBOZXcuCgkoZ2ZjX3VzZV9tb2R1bGUpOiBVcGRhdGUgY2FsbC4KCSogb3Blbm1wLmNjIChy ZXNvbHZlX29tcF9jbGF1c2VzKTogQWNjZXB0IERUIHdpdGggYWxsb2MgY29tcHMuCgkqIHJl c29sdmUuY2MgKGdmY19yZXNvbHZlX2Zvcm1hbF9hcmdsaXN0LCBnZmNfcmVzb2x2ZV9pbnRy aW5zaWMsCglyZXNvbHZlX2ZsX3Byb2NlZHVyZSwgcmVzb2x2ZV90eXBlcyk6IFBlcm1pdCBz b21lIHZpb2xhdGlvbnMKCWZvciBpbnRlcm5hbCBjb2RlLgoJKiB0cmFucy1hcnJheS5jYyAo Z2ZjX2NvbnZfZGVzY3JpcHRvcl9zdHJpZGVfZ2V0LAoJZ2ZjX3RyZWVfYXJyYXlfc2l6ZSwg Z2ZjX2Z1bGxfYXJyYXlfc2l6ZSk6IFVwZGF0ZQogCWZvciBHRkNfVFlQRV9BUlJBWV9BS0lO RCBjaGFuZ2UuCgkoZ2ZjX2NvbnZfZXhwcl9kZXNjcmlwdG9yKTogTGlrZXdpc2U7IHBlcm1p dCBjYWxsaW5nIHdpdGggdHJlZSBjb2RlLgoJKiB0cmFucy1leHByLmNjIChWVEFCTEVfQ0FM TEJBQ0tfRklFTEQpOiBBZGQuCgkoVlRBQl9HRVRfRklFTERfR0VOKTogVXNlIGl0LgoJKFZU QUJMRV9ERUFMTE9DQVRFX0ZJRUxEKTogVW5kZWYgYXQgdGhlIGVuZC4KCShnZmNfY29udl9l eHByX3JlZmVyZW5jZSk6IEZpeGVzOyBhdm9pZCB1bm5lY2Nlc3NhcnkgdGVtcCB2YXIuCgkq IHRyYW5zLWludHJpbnNpYy5jYyAoZ2ZjX2NvbnZfaW50cmluc2ljX3NpemVvZiwKCWdmY19j b252X2Fzc29jaWF0ZWQpOiBGaXggY2xhc3MgYW5kIGNvbXAtcmVmIGhhbmRsaW5nLgoJKGNv bnZfaXNvY2JpbmRpbmdfZnVuY3Rpb24pOiBSZW1vdmUgYnVnZ3kgY29kZS4KCSogdHJhbnMt b3Blbm1wLmNjIChnZmNfaGFzX2FsbG9jX2NvbXBzKTogQWRkIHB0cl9vayBhcmcuCgkoZ2Zj X29tcF9wcml2YXRlX291dGVyX3JlZiwgZ2ZjX3dhbGtfYWxsb2NfY29tcHMsCglnZmNfb21w X2NsYXVzZV9kZWZhdWx0X2N0b3IsIGdmY19vbXBfY2xhdXNlX2NvcHlfY3RvciwKCWdmY19v bXBfY2xhdXNlX2Fzc2lnbl9vcCwgZ2ZjX29tcF9jbGF1c2VfZHRvciwKCShnZmNfb21wX2Zp bmlzaF9jbGF1c2UpOiBVcGRhdGUgY2FsbC4KCShHRkNfTUFQX1RPS0VOX0RBVEEsIEdGQ19N QVBfVE9LRU5fU0laRVMsIEdGQ19NQVBfVE9LRU5fS0lORFMsCglHRkNfTUFQX1RPS0VOX0RB VEFfT0ZGU0VULCBHRkNfTUFQX1RPS0VOX09GRlNFVCwKCUdGQ19NQVBfVE9LRU5fRkxBR1Ms IEdGQ19NQVBfVE9LRU5fREVUQUNIKTogRGVmaW5lLgoJKGdmY19vbXBfZ2V0X3Rva2VuX2Rh dGEsIGdmY19vbXBfZ2V0X3Rva2VuX3NpemVzLAoJZ2ZjX29tcF9nZXRfdG9rZW5fa2luZHMs IGdmY19vbXBfZ2V0X3Rva2VuX29mZnNldF9kYXRhLAoJZ2ZjX29tcF9nZXRfdG9rZW5fb2Zm c2V0LCBnZmNfb21wX2dldF90b2tlbl9mbGFncywKCWdmY19vbXBfZ2V0X3Rva2VuX2RldGFj aCwgZ2ZjX29tcF9nZXRfbWFwX3Rva2VuX3R5cGUsCglnZmNfb21wX2dldF9jYl90eXBlLCBn ZmNfb21wX2dlbl9kZWVwX21hcF9mbiwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX21hcCwgZ2Zj X29tcF9kZWVwX21hcHBpbmdfaXRlbSwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX2NvbXBzLCBn ZmNfb21wX2dlbl9zaW1wbGVfbG9vcCwKCWdmY19vbXBfZ2V0X2FycmF5X3NpemUsIGdmY19v bXBfZWxtZW50YWxfbG9vcCwKCWdmY19vbXBfZGVlcF9tYXBfa2luZF9wLCBnZmNfb21wX2Rl ZXBfbWFwcGluZ19pbnRfcCwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX3AsIGdmY19vbXBfZGVl cF9tYXBwaW5nX2RvKSwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX2NudCwgZ2ZjX29tcF9kZWVw X21hcHBpbmcpOiBOZXcuCgkoZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uKTogU2F2ZSBj bGF1c2UgZGVjbCB0byBzdXJ2aXZlIGdpbXBsaWZ5aW5nLiAKCShnZmNfdHJhbnNfb21wX2Ns YXVzZXMpOiBMaWtld2lzZTsgZml4ZXMuCgkqIHRyYW5zLXR5cGVzLmNjIChnZmNfYnVpbGRf YXJyYXlfdHlwZSwgZ2ZjX2dldF9kZXJpdmVkX3R5cGUsCglnZmNfZ2V0X2FycmF5X2Rlc2Ny X2luZm8pOiBVcGRhdGUgYXJyYXkga2luZCB0byBkaXN0aW5ndWlzaAoJZGlmZmVyZW50IGFz c3VtZWQtcmFuayBhcnJheXMuCgkqIHRyYW5zLmggKGdmY19jbGFzc192dGFiX2NhbGxiYWNr X2dldCwgZ2ZjX29tcF9kZWVwX21hcHBpbmdfcCwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX2Nu dCwgZ2ZjX29tcF9kZWVwX21hcHBpbmcpOiBOZXcgcHJvdG90eXBlcy4KCShlbnVtIGdmY19h cnJheV9raW5kKTogQWRkaXRpb25hbCBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LXyogZW50cmll cy4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBsYW5naG9va3MtZGVmLmggKGxoZF9vbXBfZGVlcF9t YXBwaW5nX3AsCglsaGRfb21wX2RlZXBfbWFwcGluZ19jbnQsIGxoZF9vbXBfZGVlcF9tYXBw aW5nKTogTmV3LgoJKExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElOR19QLCBMQU5HX0hPT0tT X09NUF9ERUVQX01BUFBJTkdfQ05ULAoJTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HKTog RGVmaW5lLgoJKExBTkdfSE9PS1NfREVDTFMpOiBVc2UgaXQuCgkqIGxhbmdob29rcy5jYyAo bGhkX29tcF9kZWVwX21hcHBpbmdfcCwgbGhkX29tcF9kZWVwX21hcHBpbmdfY250LAoJbGhk X29tcF9kZWVwX21hcHBpbmcpOiBOZXcgc3R1YnMuCgkqIGxhbmdob29rcy5oIChzdHJ1Y3Qg bGFuZ19ob29rc19mb3JfZGVjbHMpOiBBZGQgbmV3IGhvb2tzCgkqIG9tcC1leHBhbmQuY2Mg KGV4cGFuZF9vbXBfdGFyZ2V0KTogSGFuZGxlIGR5bmFtaWMtc2l6ZQoJYWRkci9zaXplcy9r aW5kcyBhcnJheXMuCgkqIG9tcC1sb3cuY2MgKGJ1aWxkX3NlbmRlcl9yZWYsIGZpeHVwX2No aWxkX3JlY29yZF90eXBlLAoJc2Nhbl9zaGFyaW5nX2NsYXVzZXMsIGxvd2VyX29tcF90YXJn ZXQpOiBVcGRhdGUgdG8gaGFuZGxlCgluZXcgaG9va3MgYW5kIGR5bmFtaWMtc2l6ZSBhZGRy L3NpemVzL2tpbmRzIGFycmF5cy4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogdGVzdHN1aXRl L2xpYmdvbXAub2FjYy1mb3J0cmFuL2hvc3RfZGF0YS01LkY5MDogVXBkYXRlIGRnLW5vdGUu CgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vYWxsb2NhdGFibGUtY29tcC5mOTA6IE5l dyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTMu ZjkwOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2Mt Y29tcC00LmY5MDogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFw LWFsbG9jLWNvbXAtNS5mOTA6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL21hcC1hbGxvYy1jb21wLTYuZjkwOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC03LmY5MDogTmV3IHRlc3QuCgpnY2MvdGVzdHN1 aXRlL0NoYW5nZUxvZzoKCgkqIGdmb3J0cmFuLmRnL2NfbG9jX3Rlc3RfMjIuZjkwOiBVcGRh dGUgc2Nhbi10cmVlLgoJKiBnZm9ydHJhbi5kZy9maW5hbGl6ZV8yMS5mOTA6IExpa2V3aXNl LgoJKiBnZm9ydHJhbi5kZy9nb2FjYy9hcnJheS13aXRoLWR0LTEuZjkwOiBSZW1vdmUgZGct d2FybmluZy4KCSogZ2ZvcnRyYW4uZGcvZ29hY2MvcHI5MzQ2NC5mOTA6IFJlbW92ZSBkZy13 YXJuaW5nLgoJKiBnZm9ydHJhbi5kZy9nb21wL21hcC1hbGxvYy1jb21wLTEuZjkwOiBSZW1v dmUgc29ycnkgZGctZXJyb3IuCgogZ2NjL2ZvcnRyYW4vY2xhc3MuY2MgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgNTcxICsrKysrKystCiBnY2MvZm9ydHJhbi9mOTUtbGFu Zy5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogZ2NjL2ZvcnRyYW4v Z2ZvcnRyYW4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICsKIGdjYy9m b3J0cmFuL21hdGNoLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAr CiBnY2MvZm9ydHJhbi9tb2R1bGUuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMjggKy0KIGdjYy9mb3J0cmFuL29wZW5tcC5jYyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgNyAtCiBnY2MvZm9ydHJhbi9yZXNvbHZlLmNjICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMTEgKy0KIGdjYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA0OCArLQogZ2NjL2ZvcnRyYW4vdHJhbnMtZXhw ci5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCiBnY2MvZm9ydHJhbi90 cmFucy1pbnRyaW5zaWMuY2MgICAgICAgICAgICAgICAgICAgICB8ICAgMzMgKy0KIGdjYy9m b3J0cmFuL3RyYW5zLW9wZW5tcC5jYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUyMSAr KysrKysrKysrKysrKysrKysrLQogZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuY2MgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUwICstCiBnY2MvZm9ydHJhbi90cmFucy5oICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwogZ2NjL2xhbmdob29rcy1kZWYu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIGdjYy9sYW5naG9v a3MuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNCArCiBnY2Mv bGFuZ2hvb2tzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTUg KwogZ2NjL29tcC1leHBhbmQuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDE4ICstCiBnY2Mvb21wLWxvdy5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAyMjQgKystCiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NfbG9jX3Rl c3RfMjIuZjkwICAgICAgICB8ICAgIDIgKy0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv ZmluYWxpemVfMjEuZjkwICAgICAgICAgIHwgICAgMiArLQogLi4uL2dmb3J0cmFuLmRnL2dv YWNjL2FycmF5LXdpdGgtZHQtMS5mOTAgICAgICAgICAgfCAgICAzIC0KIGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcHI5MzQ2NC5mOTAgICAgICAgIHwgICAgMyAtCiAuLi4v Z2ZvcnRyYW4uZGcvZ29tcC9tYXAtYWxsb2MtY29tcC0xLmY5MCAgICAgICAgICB8ICAgIDIg Ky0KIC4uLi90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL2FsbG9jYXRhYmxlLWNvbXAuZjkw IHwgICA1MyArCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2MtY29t cC0zLmY5MCB8ICAxMjEgKysKIC4uLi90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1h bGxvYy1jb21wLTQuZjkwIHwgIDEyNCArKwogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRy YW4vbWFwLWFsbG9jLWNvbXAtNS5mOTAgfCAgIDUzICsKIC4uLi90ZXN0c3VpdGUvbGliZ29t cC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTYuZjkwIHwgIDMwOCArKysrCiAuLi4vdGVzdHN1 aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC03LmY5MCB8ICA2NzIgKysrKysr KysrCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFuL2hvc3RfZGF0YS01LkY5 MCB8ICAgIDQgKwogMzAgZmlsZXMgY2hhbmdlZCwgMzc5MyBpbnNlcnRpb25zKCspLCAxNDkg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vY2xhc3MuY2MgYi9nY2Mv Zm9ydHJhbi9jbGFzcy5jYwppbmRleCA3MzFlOWIwZmU2YS4uYTVmYWIxMGViZjggMTAwNjQ0 Ci0tLSBhL2djYy9mb3J0cmFuL2NsYXNzLmNjCisrKyBiL2djYy9mb3J0cmFuL2NsYXNzLmNj CkBAIC01MSw2ICs1MSw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuICBJZiBub3Qgc2VlCiAJCSBhbGxvY2F0YWJsZSBjb21wb25lbnRzIGFuZCBjYWxscyBG SU5BTCBzdWJyb3V0aW5lcy4KICAgICAqIF9kZWFsbG9jYXRlOiBBIHByb2NlZHVyZSBwb2lu dGVyIHRvIGEgZGVhbGxvY2F0aW9uIHByb2NlZHVyZTsgbm9ubnVsbAogCQkgb25seSBmb3Ig YSByZWN1cnNpdmUgZGVyaXZlZCB0eXBlLgorICAgICogX2NhbGxiYWNrOiBBIHByb2NlZHVy ZSBwb2ludGVyLCB0YWtpbmcgYSBjYWxsYmFjayBwcm9jIHBvaW50ZXIgYW5kCisJCSBjYWxs aW5nIHRoYXQgb25lIGZvciB0aGUgRFQgYW5kIHRoZSBhbGxvY2F0YWJsZSBjb21wb25lbnRz LgogCiAgICBBZnRlciB0aGVzZSBmb2xsb3cgcHJvY2VkdXJlIHBvaW50ZXIgY29tcG9uZW50 cyBmb3IgdGhlIHNwZWNpZmljCiAgICB0eXBlLWJvdW5kIHByb2NlZHVyZXMuICAqLwpAQCAt MTExNSw2ICsxMTE3LDcgQEAgZmluYWxpemF0aW9uX3NjYWxhcml6ZXIgKGdmY19zeW1ib2wg KmFycmF5LCBnZmNfc3ltYm9sICpwdHIsCiAgIC8qIENfRl9QT0lOVEVSKCkuICAqLwogICBi bG9jayA9IGdmY19nZXRfY29kZSAoRVhFQ19DQUxMKTsKICAgZ2ZjX2dldF9zeW1fdHJlZSAo ImNfZl9wb2ludGVyIiwgc3ViX25zLCAmYmxvY2stPnN5bXRyZWUsIHRydWUpOworICBibG9j ay0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuYXJ0aWZpY2lhbCA9IDE7CiAgIGJsb2NrLT5yZXNv bHZlZF9zeW0gPSBibG9jay0+c3ltdHJlZS0+bi5zeW07CiAgIGJsb2NrLT5yZXNvbHZlZF9z eW0tPmF0dHIuZmxhdm9yID0gRkxfUFJPQ0VEVVJFOwogICBibG9jay0+cmVzb2x2ZWRfc3lt LT5hdHRyLmludHJpbnNpYyA9IDE7CkBAIC0xMTM3LDYgKzExNDAsNyBAQCBmaW5hbGl6YXRp b25fc2NhbGFyaXplciAoZ2ZjX3N5bWJvbCAqYXJyYXksIGdmY19zeW1ib2wgKnB0ciwKICAg ZXhwciA9IGdmY19nZXRfZXhwciAoKTsKICAgZXhwci0+ZXhwcl90eXBlID0gRVhQUl9GVU5D VElPTjsKICAgZ2ZjX2dldF9zeW1fdHJlZSAoImNfbG9jIiwgc3ViX25zLCAmZXhwci0+c3lt dHJlZSwgZmFsc2UpOworICBleHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5hcnRpZmljaWFs ID0gMTsKICAgZXhwci0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuZmxhdm9yID0gRkxfUFJPQ0VE VVJFOwogICBleHByLT5zeW10cmVlLT5uLnN5bS0+aW50bW9kX3N5bV9pZCA9IElTT0NCSU5E SU5HX0xPQzsKICAgZXhwci0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuaW50cmluc2ljID0gMTsK QEAgLTIyNDEsNiArMjI0NSw1NTcgQEAgZ2VuZXJhdGVfZmluYWxpemF0aW9uX3dyYXBwZXIg KGdmY19zeW1ib2wgKmRlcml2ZWQsIGdmY19uYW1lc3BhY2UgKm5zLAogICBmcmVlIChuYW1l KTsKIH0KIAorLyogR2VuZXJhdGU6ICBfX2NhbGxiYWNrIChjYiwgdG9rZW4sIHRoaXMpCisg ICB3aXRoICAgc2l6ZV90ICgqY2IpIChjYl90b2tlbiwgY2JfYWRkciwgY2JfbGVuLCBjYl9m bGFnLCBjYl9mbikKKwkgIHZvaWQgKnRva2VuCisJICB2b2lkICp0aGlzX3B0ciAtIGZsYWc9 R0ZDX0NMQVNTX0NBTExCQUNLX1ZUQUJMRV9GTEFHOgorCQkJICAgICBzY2FsYXIgcG9pbnRl ciB0byB0aGlzIERUIC0+ICdzY2FsYXInCisJCQkgICBmbGFnIGZsYWc9R0ZDX0NMQVNTX0NB TExCQUNLX0RFRkFVTFRfRkxBRzoKKwkJCSAgICAgdmFyJ3MgX3Z0YWIgY29tcG9uZW50CisJ CUFzc3VtZWQgdG8gYmUgIT0gTlVMTC4KKwkgIGZsYWcgLSBHRkNfQ0xBU1NfQ0FMTEJBQ0tf REVGQVVMVF9GTEFHOgorCQkgICBtYXAgYWxsb2NhdGFibGUvcG9pbnRlciBjb21wb25lbnRz CisJCSBHRkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUc6CisJCSAgIG1hcCB2dGFibGUg b2YgdGhpcyB0eXBlIGFuZCByZXR1cm4KKwkgIGNiX2ZsYWc6IEdGQ19DTEFTU19DQl9BTExP Q0FUQUJMRSwgR0ZDX0NMQVNTX0NCX1BPSU5URVIsCisJCSAgIEdGQ19DTEFTU19DQl9WVEFC TEUsIEdGQ19DTEFTU19DQl9WUFRSCisgICBDYWxscyAnY2InIHdpdGg6CisgICAgIGNiX3Rv a2VuIDo9IHRva2VuCisgICAgIGlmIGZsYWcgPT0gR0ZDX0NMQVNTX0NBTExCQUNLX1ZUQUJM RV9GTEFHOgorICAgICAgIGNiX3ZhciA6PSB0aGlzX3B0cjsgc2l6ZSA9IGNfc2l6ZW9mICh2 dGFibGUpOyBjYl9mbGFnPUdGQ19DTEFTU19DQl9WVEFCTEUKKyAgICAgZWxzZSAoZmxhZyA9 IEdGQ19DTEFTU19DQUxMQkFDS19ERUZBVUxUX0ZMQUcpCisgICAgICAgY2FsbCBjX2ZfcG9p bnRlciAodGhpc19wdHIsIHNjYWxhcikKKyAgICAgICBmb3IgZWFjaCBjb21wb25lbnQ6CisJ IGlmIHBvaW50ZXIgJiYgYXNzb2NpYXRlZAorCSAgIFtjbGFzcyBvbmx5XSBjYl92YXIgPSBz Y2FsYXIuY29tcC5fdnB0ciwgc2l6ZSA9PSAwLAorCQkJY2JfZmxhZyA9IEdGQ19DTEFTU19D Ql9WUFRSCisJICAgY2JfdmFyID0gc2NhbGFyLmNvbXAuKF9kYXRhKSwgc2l6ZSA9PSAwLCBj Yl9mbGFnPUdGQ19DTEFTU19DQl9QT0lOVEVSCisJICAgaWYgYWxsb2NhdGFibGUgJiYgYWxs b2NhdGF0ZWQKKwkgICAgIFtjbGFzcyBvbmx5XQorCSAgICAgICBzY2FsYXIuY29tcC5fdnB0 ci0+Y2FsbGJhY2soY2IsIHRva2VuLCBzY2FsYXIuY29tcC5fdnB0ciwKKwkJCQkJICAgZmxh Zz1HRkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUcpCisJICAgICBjYl92YXIgPSBzY2Fs YXIuY29tcC5fdnB0ciwgc2l6ZSA9PSBjX3NpemVvZihzY2FsYXIuY29tcC4oX2RhdGEpLAor CQkgICAgY2JfZmxhZyA9IEdGQ19DTEFTU19DQl9BTExPQ0FUQUJMRQorCSAgIGlmIChhbGxv Y2F0YWJsZSBjb21wIHx8IGNsYXNzKQorCSAgICAgW2NsYXNzIG9ubHldCisJICAgICAgIHNj YWxhci5jb21wLl92cHRyLT5jYWxsYmFjayhjYiwgdG9rZW4sIHNjYWxhci5jb21wLl92cHRy LAorCQkJCQkgICBmbGFnPUdGQ19DTEFTU19DQUxMQkFDS19WVEFCTEVfRkxBRykKKwkgICAg IC8vIE5vdGU6IGNhbGxiYWNrIGlzIGVsZW1lbnRhbCwgaS5lLiBvbmUgY2FsbCBwZXIgYXJy YXkgZWxlbQorCSAgICAgc2NhbGFyLmNvbXAuX3ZwdHItPmNhbGxiYWNrKGNiLCB0b2tlbiwg c2NhbGFyLmNvbXAuKF9kYXRhKSwKKwkJCQkJIGZsYWc9R0ZDX0NMQVNTX0NBTExCQUNLX0RF RkFVTFRfRkxBRykKKyovCisKK3N0YXRpYyB2b2lkCitnZW5lcmF0ZV9jYWxsYmFja193cmFw cGVyIChnZmNfc3ltYm9sICp2dGFiLCBnZmNfc3ltYm9sICpkZXJpdmVkLAorCQkJICAgZ2Zj X25hbWVzcGFjZSAqbnMsIGNvbnN0IGNoYXIgKnRuYW1lLAorCQkJICAgZ2ZjX2NvbXBvbmVu dCAqdnRhYl9jYikKK3sKKyAgZ2ZjX25hbWVzcGFjZSAqc3ViX25zOworICBnZmNfY29kZSAq bGFzdF9jb2RlLCAqYmxvY2s7CisgIGdmY19zeW1ib2wgKmNhbGxiYWNrLCAqY2IsICp0b2tl biwgKnRoaXNfcHRyLCAqc2NhbGFyLCAqZmxhZywgKnJlc3VsdDsKKyAgZ2ZjX3N5bWJvbCAq Y19wdHIsICpjX2Z1bnB0ciwgKmNfbnVsbF9mdW5wdHIsICpjX3Nob3J0LCAqY19zaXplX3Q7 CisgIGdmY19leHByICpzaXplOworICBpbnQgY19zaG9ydF9raW5kLCBjX3NpemVfa2luZDsK KyAgY2hhciAqbmFtZTsKKworICAvKiBTZXQgdXAgdGhlIG5hbWVzcGFjZS4gICovCisgIHN1 Yl9ucyA9IGdmY19nZXRfbmFtZXNwYWNlIChucywgMCk7CisgIHN1Yl9ucy0+c2libGluZyA9 IG5zLT5jb250YWluZWQ7CisgIG5zLT5jb250YWluZWQgPSBzdWJfbnM7CisgIHN1Yl9ucy0+ cmVzb2x2ZWQgPSAxOworCisgIGdmY19uYW1lc3BhY2UgKnNhdmVkX25zID0gZ2ZjX2N1cnJl bnRfbnM7CisgIGdmY19jdXJyZW50X25zID0gc3ViX25zOworICBnZmNfaW1wb3J0X2lzb19j X2JpbmRpbmdfbW9kdWxlICgpOworICBnZmNfY3VycmVudF9ucyA9IHNhdmVkX25zOworICBn ZmNfZmluZF9zeW1ib2wgKCJjX3B0ciIsIHN1Yl9ucywgMCwgJmNfcHRyKTsKKyAgZ2ZjX2Zp bmRfc3ltYm9sICgiY19mdW5wdHIiLCBzdWJfbnMsIDAsICZjX2Z1bnB0cik7CisgIGdmY19m aW5kX3N5bWJvbCAoImNfbnVsbF9mdW5wdHIiLCBzdWJfbnMsIDAsICZjX251bGxfZnVucHRy KTsKKyAgZ2ZjX2ZpbmRfc3ltYm9sICgiY19zaG9ydCIsIHN1Yl9ucywgMCwgJmNfc2hvcnQp OworICBjX3Nob3J0X2tpbmQgPSBtcHpfZ2V0X3NpIChjX3Nob3J0LT52YWx1ZS0+dmFsdWUu aW50ZWdlcik7CisgIGdmY19maW5kX3N5bWJvbCAoImNfc2l6ZV90Iiwgc3ViX25zLCAwLCAm Y19zaXplX3QpOworICBjX3NpemVfa2luZCA9IG1wel9nZXRfc2kgKGNfc2l6ZV90LT52YWx1 ZS0+dmFsdWUuaW50ZWdlcik7CisKKyAgLyogU2V0IHVwIHRoZSBwcm9jZWR1cmUgc3ltYm9s LiAgKi8KKyAgbmFtZSA9IHhhc3ByaW50ZiAoIl9fY2FsbGJhY2tfJXMiLCB0bmFtZSk7Cisg IGdmY19nZXRfc3ltYm9sIChuYW1lLCBzdWJfbnMsICZjYWxsYmFjayk7CisgIGZyZWUgKG5h bWUpOworICBzdWJfbnMtPnByb2NfbmFtZSA9IGNhbGxiYWNrOworICBjYWxsYmFjay0+YXR0 ci5mbGF2b3IgPSBGTF9QUk9DRURVUkU7CisgIGNhbGxiYWNrLT5hdHRyLmZ1bmN0aW9uID0g MTsKKyAgY2FsbGJhY2stPmF0dHIucHVyZSA9IDA7CisgIGNhbGxiYWNrLT5hdHRyLnJlY3Vy c2l2ZSA9IDE7CisgIGNhbGxiYWNrLT5hdHRyLmVsZW1lbnRhbCA9IDE7CisgIGNhbGxiYWNr LT5yZXN1bHQgPSBjYWxsYmFjazsKKyAgY2FsbGJhY2stPnRzLnR5cGUgPSBCVF9JTlRFR0VS OworICBjYWxsYmFjay0+dHMua2luZCA9IGdmY19pbmRleF9pbnRlZ2VyX2tpbmQ7CisgIGNh bGxiYWNrLT5hdHRyLmFydGlmaWNpYWwgPSAxOworICBjYWxsYmFjay0+YXR0ci5hbHdheXNf ZXhwbGljaXQgPSAxOworICBjYWxsYmFjay0+YXR0ci5pZl9zb3VyY2UgPSBJRlNSQ19ERUNM OworICBpZiAobnMtPnByb2NfbmFtZSAmJiBucy0+cHJvY19uYW1lLT5hdHRyLmZsYXZvciA9 PSBGTF9NT0RVTEUpCisgICAgY2FsbGJhY2stPm1vZHVsZSA9IG5zLT5wcm9jX25hbWUtPm5h bWU7CisgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKGNhbGxiYWNrKTsKKworICAvKiBTZXQg dXAgZm9ybWFsIGFyZ3VtZW50LiAgKi8KKyAgZ2ZjX2dldF9zeW1ib2wgKCJjYiIsIHN1Yl9u cywgJmNiKTsKKyAgY2ItPmF0dHIuZmxhdm9yID0gRkxfUFJPQ0VEVVJFOworICBjYi0+YXR0 ci5hcnRpZmljaWFsID0gMTsKKyAgY2ItPmF0dHIuZHVtbXkgPSAxOworICBjYi0+YXR0ci5l bGVtZW50YWwgPSAxOyAgLy8gRklYTUUgLSB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LgorICBj Yi0+YXR0ci5mdW5jdGlvbiA9IDE7CisgIGNiLT5hdHRyLmludGVudCA9IElOVEVOVF9JTjsK KyAgY2ItPnJlc3VsdCA9IGNiOworICBjYi0+dHMudHlwZSA9IEJUX0lOVEVHRVI7CisgIGNi LT50cy5raW5kID0gZ2ZjX2luZGV4X2ludGVnZXJfa2luZDsKKyAgY2ItPmF0dHIuaWZfc291 cmNlID0gSUZTUkNfSUZCT0RZOworICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkIChjYik7Cisg IGNhbGxiYWNrLT5mb3JtYWwgPSBnZmNfZ2V0X2Zvcm1hbF9hcmdsaXN0ICgpOworICBjYWxs YmFjay0+Zm9ybWFsLT5zeW0gPSBjYjsKKyAgY2ItPmZvcm1hbF9ucyA9IGdmY19nZXRfbmFt ZXNwYWNlIChzdWJfbnMsIDApOworICBjYi0+Zm9ybWFsX25zLT5wcm9jX25hbWUgPSBjYjsK KyAgLyogY2JfdG9rZW4uICovCisgIGdmY19nZXRfc3ltYm9sICgiY2JfdG9rZW4iLCBjYi0+ Zm9ybWFsX25zLCAmdG9rZW4pOworICB0b2tlbi0+dHMudHlwZSA9IEJUX0RFUklWRUQ7Cisg IHRva2VuLT50cy51LmRlcml2ZWQgPSBjX3B0cjsKKyAgdG9rZW4tPmF0dHIuZmxhdm9yID0g RkxfVkFSSUFCTEU7CisgIHRva2VuLT5hdHRyLmR1bW15ID0gMTsKKyAgdG9rZW4tPmF0dHIu dmFsdWUgPSAxOworICB0b2tlbi0+YXR0ci5hcnRpZmljaWFsID0gMTsKKyAgdG9rZW4tPmF0 dHIuaW50ZW50ID0gSU5URU5UX0lOOworICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkICh0b2tl bik7CisgIGNiLT5mb3JtYWwgPSBnZmNfZ2V0X2Zvcm1hbF9hcmdsaXN0ICgpOworICBjYi0+ Zm9ybWFsLT5zeW0gPSB0b2tlbjsKKyAgLyogY2JfdmFyICovCisgIGdmY19nZXRfc3ltYm9s ICgiY2JfdmFyIiwgY2ItPmZvcm1hbF9ucywgJnRva2VuKTsKKyAgdG9rZW4tPnRzLnR5cGUg PSBCVF9ERVJJVkVEOworICB0b2tlbi0+dHMudS5kZXJpdmVkID0gY19wdHI7CisgIHRva2Vu LT5hdHRyLmZsYXZvciA9IEZMX1ZBUklBQkxFOworICB0b2tlbi0+YXR0ci5kdW1teSA9IDE7 CisgIHRva2VuLT5hdHRyLmFydGlmaWNpYWwgPSAxOworICB0b2tlbi0+YXR0ci5pbnRlbnQg PSBJTlRFTlRfSU47CisgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKHRva2VuKTsKKyAgY2It PmZvcm1hbC0+bmV4dCA9IGdmY19nZXRfZm9ybWFsX2FyZ2xpc3QgKCk7CisgIGNiLT5mb3Jt YWwtPm5leHQtPnN5bSA9IHRva2VuOworICAvKiBjYl9sZW4gKi8KKyAgZ2ZjX2dldF9zeW1i b2wgKCJjYl9sZW4iLCBjYi0+Zm9ybWFsX25zLCAmdG9rZW4pOworICB0b2tlbi0+dHMudHlw ZSA9IEJUX0lOVEVHRVI7CisgIHRva2VuLT50cy5raW5kID0gZ2ZjX2luZGV4X2ludGVnZXJf a2luZDsKKyAgdG9rZW4tPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CisgIHRva2VuLT5h dHRyLmR1bW15ID0gMTsKKyAgdG9rZW4tPmF0dHIudmFsdWUgPSAxOworICB0b2tlbi0+YXR0 ci5hcnRpZmljaWFsID0gMTsKKyAgdG9rZW4tPmF0dHIuaW50ZW50ID0gSU5URU5UX0lOOwor ICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkICh0b2tlbik7CisgIGNiLT5mb3JtYWwtPm5leHQt Pm5leHQgPSBnZmNfZ2V0X2Zvcm1hbF9hcmdsaXN0ICgpOworICBjYi0+Zm9ybWFsLT5uZXh0 LT5uZXh0LT5zeW0gPSB0b2tlbjsKKyAgLyogY2JfZmxhZyAqLworICBnZmNfZ2V0X3N5bWJv bCAoImNiX2ZsYWciLCBjYi0+Zm9ybWFsX25zLCAmdG9rZW4pOworICB0b2tlbi0+dHMudHlw ZSA9IEJUX0lOVEVHRVI7CisgIHRva2VuLT50cy5raW5kID0gY19zaG9ydF9raW5kOworICB0 b2tlbi0+YXR0ci5mbGF2b3IgPSBGTF9WQVJJQUJMRTsKKyAgdG9rZW4tPmF0dHIuZHVtbXkg PSAxOworICB0b2tlbi0+YXR0ci52YWx1ZSA9IDE7CisgIHRva2VuLT5hdHRyLmFydGlmaWNp YWwgPSAxOworICB0b2tlbi0+YXR0ci5pbnRlbnQgPSBJTlRFTlRfSU47CisgIGdmY19zZXRf c3ltX3JlZmVyZW5jZWQgKHRva2VuKTsKKyAgY2ItPmZvcm1hbC0+bmV4dC0+bmV4dCA9IGdm Y19nZXRfZm9ybWFsX2FyZ2xpc3QgKCk7CisgIGNiLT5mb3JtYWwtPm5leHQtPm5leHQtPnN5 bSA9IHRva2VuOworICAvKiBjYl9mbiAqLworICBnZmNfZ2V0X3N5bWJvbCAoImNiX2ZuIiwg Y2ItPmZvcm1hbF9ucywgJnRva2VuKTsKKyAgdG9rZW4tPnRzLnR5cGUgPSBCVF9ERVJJVkVE OworICB0b2tlbi0+dHMudS5kZXJpdmVkID0gY19mdW5wdHI7CisgIHRva2VuLT5hdHRyLmZs YXZvciA9IEZMX1ZBUklBQkxFOworICB0b2tlbi0+YXR0ci5kdW1teSA9IDE7CisgIHRva2Vu LT5hdHRyLmVsZW1lbnRhbCA9IDE7CisgIHRva2VuLT5hdHRyLnZhbHVlID0gMTsKKyAgdG9r ZW4tPmF0dHIuYXJ0aWZpY2lhbCA9IDE7CisgIHRva2VuLT5hdHRyLmludGVudCA9IElOVEVO VF9JTjsKKyAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAodG9rZW4pOworICBjYi0+Zm9ybWFs LT5uZXh0LT5uZXh0LT5uZXh0ID0gZ2ZjX2dldF9mb3JtYWxfYXJnbGlzdCAoKTsKKyAgY2It PmZvcm1hbC0+bmV4dC0+bmV4dC0+bmV4dC0+c3ltID0gdG9rZW47CisKKyAgLyogQ29uJ3Qg X19jYWxsYmFja18lcyAgYXJncy4gICovCisgIGdmY19nZXRfc3ltYm9sICgidG9rZW4iLCBz dWJfbnMsICZ0b2tlbik7CisgIHRva2VuLT50cy50eXBlID0gQlRfREVSSVZFRDsKKyAgdG9r ZW4tPnRzLnUuZGVyaXZlZCA9IGNfcHRyOworICB0b2tlbi0+YXR0ci5mbGF2b3IgPSBGTF9W QVJJQUJMRTsKKyAgdG9rZW4tPmF0dHIuZHVtbXkgPSAxOworICB0b2tlbi0+YXR0ci52YWx1 ZSA9IDE7CisgIHRva2VuLT5hdHRyLmFydGlmaWNpYWwgPSAxOworICB0b2tlbi0+YXR0ci5p bnRlbnQgPSBJTlRFTlRfSU47CisgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKHRva2VuKTsK KyAgY2FsbGJhY2stPmZvcm1hbC0+bmV4dCA9IGdmY19nZXRfZm9ybWFsX2FyZ2xpc3QgKCk7 CisgIGNhbGxiYWNrLT5mb3JtYWwtPm5leHQtPnN5bSA9IHRva2VuOworCisgIGdmY19nZXRf c3ltYm9sICgidGhpc19wdHIiLCBzdWJfbnMsICZ0aGlzX3B0cik7CisgIHRoaXNfcHRyLT50 cy50eXBlID0gQlRfREVSSVZFRDsKKyAgdGhpc19wdHItPnRzLnUuZGVyaXZlZCA9IGNfcHRy OworICB0aGlzX3B0ci0+YXR0ci5mbGF2b3IgPSBGTF9WQVJJQUJMRTsKKyAgdGhpc19wdHIt PmF0dHIuZHVtbXkgPSAxOworICB0aGlzX3B0ci0+YXR0ci52YWx1ZSA9IDE7CisgIHRoaXNf cHRyLT5hdHRyLmFydGlmaWNpYWwgPSAxOworICB0aGlzX3B0ci0+YXR0ci5pbnRlbnQgPSBJ TlRFTlRfSU47CisgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKHRoaXNfcHRyKTsKKyAgY2Fs bGJhY2stPmZvcm1hbC0+bmV4dC0+bmV4dCA9IGdmY19nZXRfZm9ybWFsX2FyZ2xpc3QgKCk7 CisgIGNhbGxiYWNrLT5mb3JtYWwtPm5leHQtPm5leHQtPnN5bSA9IHRoaXNfcHRyOworCisg IGdmY19nZXRfc3ltYm9sICgiZmxhZyIsIHN1Yl9ucywgJmZsYWcpOworICBmbGFnLT50cy50 eXBlID0gQlRfSU5URUdFUjsKKyAgZmxhZy0+dHMua2luZCA9IGNfc2hvcnRfa2luZDsKKyAg ZmxhZy0+YXR0ci5mbGF2b3IgPSBGTF9WQVJJQUJMRTsKKyAgZmxhZy0+YXR0ci5kdW1teSA9 IDE7CisgIGZsYWctPmF0dHIuY29udGlndW91cyA9IDE7CisgIGZsYWctPmF0dHIuYXJ0aWZp Y2lhbCA9IDE7CisgIGZsYWctPmF0dHIudmFsdWUgPSAxOworICBmbGFnLT5hdHRyLmludGVu dCA9IElOVEVOVF9JTjsKKyAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAoZmxhZyk7CisgIGNh bGxiYWNrLT5mb3JtYWwtPm5leHQtPm5leHQtPm5leHQgPSBnZmNfZ2V0X2Zvcm1hbF9hcmds aXN0ICgpOworICBjYWxsYmFjay0+Zm9ybWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5zeW0gPSBm bGFnOworCisgIC8qIExvY2FsIHZhci4gKi8KKyAgZ2ZjX2dldF9zeW1ib2wgKCJyZXN1bHQi LCBzdWJfbnMsICZyZXN1bHQpOworICByZXN1bHQtPnRzID0gY2FsbGJhY2stPnRzOworICBy ZXN1bHQtPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CisgIHJlc3VsdC0+YXR0ci5yZXN1 bHQgPSAxOworICBjYWxsYmFjay0+cmVzdWx0ID0gcmVzdWx0OworICBnZmNfc2V0X3N5bV9y ZWZlcmVuY2VkIChyZXN1bHQpOworCisgIGdmY19nZXRfc3ltYm9sICgic2NhbGFyIiwgc3Vi X25zLCAmc2NhbGFyKTsKKyAgc2NhbGFyLT50cy50eXBlID0gQlRfREVSSVZFRDsKKyAgc2Nh bGFyLT50cy51LmRlcml2ZWQgPSBkZXJpdmVkOworICBzY2FsYXItPmF0dHIuZmxhdm9yID0g RkxfVkFSSUFCTEU7CisgIHNjYWxhci0+YXR0ci5wb2ludGVyID0gMTsKKyAgc2NhbGFyLT5h dHRyLmFydGlmaWNpYWwgPSAxOworICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkIChzY2FsYXIp OworCisgIC8qIFNldCByZXR1cm4gdmFsdWUgdG8gMC4gICovCisgIGxhc3RfY29kZSA9IGdm Y19nZXRfY29kZSAoRVhFQ19BU1NJR04pOworICBsYXN0X2NvZGUtPmV4cHIxID0gZ2ZjX2x2 YWxfZXhwcl9mcm9tX3N5bSAocmVzdWx0KTsKKyAgbGFzdF9jb2RlLT5leHByMiA9IGdmY19n ZXRfaW50X2V4cHIgKGdmY19pbmRleF9pbnRlZ2VyX2tpbmQsIE5VTEwsIDApOworICBzdWJf bnMtPmNvZGUgPSBsYXN0X2NvZGU7CisKKyAgLyogaWYgKGZsYWcgPT0gR0ZDX0NMQVNTX0NB TExCQUNLX1ZUQUJMRV9GTEFHKQorICAgICAgIHJldHVybiBjYiAodG9rZW4sIHNjYWxhci52 dGFiLCBjX3NpemVvZiAodnRhYiksCisJCSAgR0ZDX0NMQVNTX0NCX1ZUQUJMRSwgTlVMTCkg Ki8KKyAgbGFzdF9jb2RlLT5uZXh0ID0gZ2ZjX2dldF9jb2RlIChFWEVDX0lGKTsKKyAgbGFz dF9jb2RlID0gbGFzdF9jb2RlLT5uZXh0OworICBsYXN0X2NvZGUtPmJsb2NrID0gZ2ZjX2dl dF9jb2RlIChFWEVDX0lGKTsKKyAgYmxvY2sgPSBsYXN0X2NvZGUtPmJsb2NrOworICBibG9j ay0+ZXhwcjEgPSBnZmNfZ2V0X2V4cHIgKCk7CisgIGJsb2NrLT5leHByMS0+ZXhwcl90eXBl ID0gRVhQUl9PUDsKKyAgYmxvY2stPmV4cHIxLT53aGVyZSA9IGdmY19jdXJyZW50X2xvY3Vz OworICBibG9jay0+ZXhwcjEtPnRzLnR5cGUgPSBCVF9MT0dJQ0FMOworICBibG9jay0+ZXhw cjEtPnRzLmtpbmQgPSAxOworICBibG9jay0+ZXhwcjEtPnZhbHVlLm9wLm9wID0gSU5UUklO U0lDX0VROworICBibG9jay0+ZXhwcjEtPnZhbHVlLm9wLm9wMSA9IGdmY19sdmFsX2V4cHJf ZnJvbV9zeW0gKGZsYWcpOworICBibG9jay0+ZXhwcjEtPnZhbHVlLm9wLm9wMgorICAgID0g Z2ZjX2dldF9pbnRfZXhwciAoZmxhZy0+dHMua2luZCwgTlVMTCwgR0ZDX0NMQVNTX0NBTExC QUNLX1ZUQUJMRV9GTEFHKTsKKyAgc2l6ZSA9IGdmY19nZXRfZXhwciAoKTsKKyAgc2l6ZS0+ ZXhwcl90eXBlID0gRVhQUl9GVU5DVElPTjsKKyAgc2l6ZS0+dmFsdWUuZnVuY3Rpb24uaXN5 bSA9IGdmY19pbnRyaW5zaWNfZnVuY3Rpb25fYnlfaWQgKEdGQ19JU1lNX1NJWkVPRik7Cisg IHNpemUtPnZhbHVlLmZ1bmN0aW9uLm5hbWUgPSBzaXplLT52YWx1ZS5mdW5jdGlvbi5pc3lt LT5uYW1lOworICBzaXplLT52YWx1ZS5mdW5jdGlvbi5lc3ltID0gTlVMTDsKKyAgc2l6ZS0+ dmFsdWUuZnVuY3Rpb24uYWN0dWFsID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAg c2l6ZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByID0gZ2ZjX2x2YWxfZXhwcl9mcm9t X3N5bSAodnRhYik7CisgIHNpemUtPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgIGJs b2NrLT5uZXh0ID0gZ2ZjX2dldF9jb2RlIChFWEVDX0FTU0lHTik7CisgIGJsb2NrID0gYmxv Y2stPm5leHQ7CisgIGJsb2NrLT5leHByMSA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHJl c3VsdCk7CisgIGJsb2NrLT5leHByMiA9IGdmY19nZXRfZXhwciAoKTsKKyAgYmxvY2stPmV4 cHIyLT5leHByX3R5cGUgPSBFWFBSX0ZVTkNUSU9OOworICBibG9jay0+ZXhwcjItPnRzID0g Y2ItPnRzOworICBibG9jay0+ZXhwcjItPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7Cisg IGJsb2NrLT5leHByMi0+c3ltdHJlZSA9IGdmY19maW5kX3N5bXRyZWUgKHN1Yl9ucy0+c3lt X3Jvb3QsIGNiLT5uYW1lKTsKKyAgYmxvY2stPmV4cHIyLT52YWx1ZS5mdW5jdGlvbi5lc3lt ID0gY2I7CisgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVuY3Rpb24ubmFtZSA9IGNiLT5uYW1l OworICBibG9jay0+ZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9IGdmY19nZXRfYWN0 dWFsX2FyZ2xpc3QgKCk7CisgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFs LT5leHByID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAodG9rZW4pOworICBibG9jay0+ZXhw cjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xp c3QgKCk7CisgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5l eHByCisgICAgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltICh0aGlzX3B0cik7CisgIGJsb2Nr LT5leHByMi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0CisgICAgPSBnZmNf Z2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICBibG9jay0+ZXhwcjItPnZhbHVlLmZ1bmN0aW9u LmFjdHVhbC0+bmV4dC0+bmV4dC0+ZXhwciA9IHNpemU7CisgIGJsb2NrLT5leHByMi0+dmFs dWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0CisgICAgPSBnZmNfZ2V0X2Fj dHVhbF9hcmdsaXN0ICgpOworICBibG9jay0+ZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVh bC0+bmV4dC0+bmV4dC0+bmV4dC0+ZXhwcgorICAgID0gZ2ZjX2dldF9pbnRfZXhwciAoY19z aG9ydF9raW5kLCBOVUxMLCBHRkNfQ0xBU1NfQ0JfVlRBQkxFKTsKKyAgYmxvY2stPmV4cHIy LT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5leHQtPm5leHQtPm5leHQKKyAgICA9 IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVu Y3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0LT5leHByCisgICAgPSBnZmNf bHZhbF9leHByX2Zyb21fc3ltIChjX251bGxfZnVucHRyKTsKKworICBibG9jay0+bmV4dCA9 IGdmY19nZXRfY29kZSAoRVhFQ19SRVRVUk4pOworCisgIC8qIGNhbGwgY19mX3BvaW50ZXIg KHRoaXNfcHRyLCBzY2FsYXIpICovCisgIGxhc3RfY29kZS0+bmV4dCA9IGdmY19nZXRfY29k ZSAoRVhFQ19DQUxMKTsKKyAgbGFzdF9jb2RlID0gbGFzdF9jb2RlLT5uZXh0OworICBnZmNf Z2V0X3N5bV90cmVlICgiY19mX3BvaW50ZXIiLCBzdWJfbnMsICZsYXN0X2NvZGUtPnN5bXRy ZWUsIGZhbHNlKTsKKyAgbGFzdF9jb2RlLT5yZXNvbHZlZF9zeW0gPSBsYXN0X2NvZGUtPnN5 bXRyZWUtPm4uc3ltOworICBsYXN0X2NvZGUtPnJlc29sdmVkX2lzeW0KKyAgICA9IGdmY19p bnRyaW5zaWNfc3Vicm91dGluZV9ieV9pZCAoR0ZDX0lTWU1fQ19GX1BPSU5URVIpOworICBs YXN0X2NvZGUtPmV4dC5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICBs YXN0X2NvZGUtPmV4dC5hY3R1YWwtPmV4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltICh0 aGlzX3B0cik7CisgIGxhc3RfY29kZS0+ZXh0LmFjdHVhbC0+bmV4dCA9IGdmY19nZXRfYWN0 dWFsX2FyZ2xpc3QgKCk7CisgIGxhc3RfY29kZS0+ZXh0LmFjdHVhbC0+bmV4dC0+ZXhwciA9 IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHNjYWxhcik7CisKKyAgLyogQ2FsbCBub3cgZm9y IHBvaW50ZXI6CisgICAgICAgW2NsYXNzIG9ubHk6XSBjYiAodG9rZW4sIGNvbXAtPl92cHRy LCAzLCBOVUxMKTsKKyAgICAgICBjYiAodG9rZW4sIGNvbXAoLT5fZGF0YSksIDAsIE5VTEwp OworICAgICBmb3IgYWxsb2NhdGFibGU6CisgICAgICAgW2NsYXNzIG9ubHk6XSBjb21wLT5f dnB0ci0+Y2FsbGJhY2sgKGNiLCB0b2tlbiwgY29tcC0+dmFyX3ZwdHIsIDEpCisgICAgICAg Y2IgKHRva2VuLCBjb21wLT52YXIoLmRhdGEpLCBzaXplLCAxLCBOVUxMKTsKKyAgICAgYW5k IHRoZW4gZm9yIGFsbG9jYXRhYmxlIG9mIGVpdGhlciBjbGFzcyB0eXBlIG9yIHdpdGggYWxs b2NhdGFibGUgY29tcHMKKyAgICAgICBmb3IgZWFjaCBhcnJheSBlbGVtZW50CisJIGNiICh0 b2tlbiwgY29tcC0+dmFyKC5kYXRhKSwgc2l6ZSwgMCwgdmFyJ3MgY2IgZm4pOyAgKi8KKyAg Zm9yIChnZmNfY29tcG9uZW50ICpjb21wID0gZGVyaXZlZC0+Y29tcG9uZW50czsgY29tcDsg Y29tcCA9IGNvbXAtPm5leHQpCisgICAgeworICAgICAgYm9vbCBwb2ludGVyID0gKGNvbXAt PnRzLnR5cGUgPT0gQlRfQ0xBU1MKKwkJICAgICAgPyBDTEFTU19EQVRBIChjb21wKS0+YXR0 ci5wb2ludGVyIDogY29tcC0+YXR0ci5wb2ludGVyKTsKKyAgICAgIGJvb2wgcHJvY19wdHIg PSBjb21wLT5hdHRyLnByb2NfcG9pbnRlcjsKKyAgICAgIGlmICghcG9pbnRlciAmJiAhcHJv Y19wdHIgJiYgY29tcC0+dHMudHlwZSAhPSBCVF9DTEFTUworCSAgJiYgIWNvbXAtPmF0dHIu YWxsb2NhdGFibGUpCisJY29udGludWU7CisKKyAgICAgIGdmY19leHByICpleHByID0gZ2Zj X2x2YWxfZXhwcl9mcm9tX3N5bSAoc2NhbGFyKTsKKyAgICAgIGV4cHItPnJlZiA9IGdmY19n ZXRfcmVmICgpOworICAgICAgZXhwci0+cmVmLT50eXBlID0gUkVGX0NPTVBPTkVOVDsKKyAg ICAgIGV4cHItPnJlZi0+dS5jLnN5bSA9IGRlcml2ZWQ7CisgICAgICBleHByLT5yZWYtPnUu Yy5jb21wb25lbnQgPSBjb21wOworICAgICAgZXhwci0+dHMgPSBjb21wLT50czsKKworICAg ICAgaWYgKCFwcm9jX3B0ciAmJiBjb21wLT50cy50eXBlICE9IEJUX0NMQVNTICYmIGNvbXAt PmF0dHIuZGltZW5zaW9uKQorCXsKKwkgIGdmY19yZWYgKnJlZiA9IGV4cHItPnJlZjsKKwkg IHJlZi0+bmV4dCA9IGdmY19nZXRfcmVmICgpOworCSAgcmVmID0gcmVmLT5uZXh0OworCSAg cmVmLT50eXBlID0gUkVGX0FSUkFZOworCSAgcmVmLT51LmFyLnR5cGUgPSBBUl9GVUxMOwor CSAgcmVmLT51LmFyLmFzID0gY29tcC0+YXM7CisJICBleHByLT5yYW5rID0gY29tcC0+YXMt PnJhbms7CisJfQorCisgICAgICBpZiAocG9pbnRlciB8fCBwcm9jX3B0cikKKwlzaXplID0g Z2ZjX2dldF9pbnRfZXhwciAoZ2ZjX2luZGV4X2ludGVnZXJfa2luZCwgTlVMTCwgMCk7Cisg ICAgICBlbHNlCisJeworCSAgc2l6ZSA9IGdmY19nZXRfZXhwciAoKTsKKwkgIHNpemUtPmV4 cHJfdHlwZSA9IEVYUFJfRlVOQ1RJT047CisJICBzaXplLT52YWx1ZS5mdW5jdGlvbi5pc3lt CisJICAgID0gZ2ZjX2ludHJpbnNpY19mdW5jdGlvbl9ieV9pZCAoR0ZDX0lTWU1fU0laRU9G KTsKKwkgIHNpemUtPnZhbHVlLmZ1bmN0aW9uLm5hbWUgPSBzaXplLT52YWx1ZS5mdW5jdGlv bi5pc3ltLT5uYW1lOworCSAgc2l6ZS0+dmFsdWUuZnVuY3Rpb24uZXN5bSA9IE5VTEw7CisJ ICBzaXplLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0 ICgpOworCSAgc2l6ZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByID0gZ2ZjX2NvcHlf ZXhwciAoZXhwcik7CisJICBzaXplLT53aGVyZSA9IGdmY19jdXJyZW50X2xvY3VzOworCX0K KworICAgICAgaWYgKCFwcm9jX3B0ciAmJiBjb21wLT50cy50eXBlID09IEJUX0NMQVNTKQor CXsKKwkgIGdmY19hZGRfZGF0YV9jb21wb25lbnQgKGV4cHIpOworCSAgaWYgKGNvbXAtPmF0 dHIuZGltZW5zaW9uKQorCSAgICB7CisJICAgICAgZ2ZjX3JlZiAqcmVmID0gZXhwci0+cmVm LT5uZXh0OworCSAgICAgIHJlZi0+bmV4dCA9IGdmY19nZXRfcmVmICgpOworCSAgICAgIHJl ZiA9IHJlZi0+bmV4dDsKKwkgICAgICByZWYtPnR5cGUgPSBSRUZfQVJSQVk7CisJICAgICAg cmVmLT51LmFyLnR5cGUgPSBBUl9GVUxMOworCSAgICAgIHJlZi0+dS5hci5hcyA9IGNvbXAt PmFzOworCSAgICAgIGV4cHItPnJhbmsgPSBjb21wLT5hcy0+cmFuazsKKwkgICAgfQorCX0K KworICAgICAgLyogaWYgKGFsbG9jYXRlZC9hc3NvY2lhdGVkKGNvbXApICovCisgICAgICBs YXN0X2NvZGUtPm5leHQgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfSUYpOworICAgICAgbGFzdF9j b2RlID0gbGFzdF9jb2RlLT5uZXh0OworICAgICAgbGFzdF9jb2RlLT5ibG9jayA9IGdmY19n ZXRfY29kZSAoRVhFQ19JRik7CisgICAgICBibG9jayA9IGxhc3RfY29kZS0+YmxvY2s7Cisg ICAgICBibG9jay0+ZXhwcjEgPSBnZmNfZ2V0X2V4cHIgKCk7CisgICAgICBibG9jay0+ZXhw cjEtPmV4cHJfdHlwZSA9IEVYUFJfRlVOQ1RJT047CisgICAgICBibG9jay0+ZXhwcjEtPnRz LnR5cGUgPSBCVF9MT0dJQ0FMOworICAgICAgYmxvY2stPmV4cHIxLT50cy5raW5kID0gMTsK KyAgICAgIGJsb2NrLT5leHByMS0+dmFsdWUuZnVuY3Rpb24uaXN5bQorCT0gZ2ZjX2ludHJp bnNpY19mdW5jdGlvbl9ieV9pZCAocG9pbnRlciB8fCBwcm9jX3B0cgorCQkJCQk/IEdGQ19J U1lNX0FTU09DSUFURUQKKwkJCQkJOiBHRkNfSVNZTV9BTExPQ0FURUQpOworICAgICAgYmxv Y2stPmV4cHIxLT52YWx1ZS5mdW5jdGlvbi5uYW1lCisJPSBibG9jay0+ZXhwcjEtPnZhbHVl LmZ1bmN0aW9uLmlzeW0tPm5hbWU7CisgICAgICBibG9jay0+ZXhwcjEtPnZhbHVlLmZ1bmN0 aW9uLmVzeW0gPSBOVUxMOworICAgICAgYmxvY2stPmV4cHIxLT52YWx1ZS5mdW5jdGlvbi5h Y3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgYmxvY2stPmV4cHIx LT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHIgPSBnZmNfY29weV9leHByIChleHByKTsK KyAgICAgIGlmIChwb2ludGVyIHx8IHByb2NfcHRyKQorCWJsb2NrLT5leHByMS0+dmFsdWUu ZnVuY3Rpb24uYWN0dWFsLT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAg ICAgIGJsb2NrLT5leHByMS0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKworICAgICAg LyogbiArPSBjYiAodG9rZW4sICZzY2FsYXItPmNvbXAoLl9kYXRhKSwgc2l6ZSwgcG9pbnRl ciA/IDEgOiAwLCBOVUxMKSAqLworCisgICAgICAvKiBjX2xvYyAoc2NhbGFyJWNvbXApICov CisgICAgICBnZmNfZXhwciAqbG9jX2V4cHIgPSBnZmNfZ2V0X2V4cHIgKCk7CisgICAgICBs b2NfZXhwci0+ZXhwcl90eXBlID0gRVhQUl9GVU5DVElPTjsKKyAgICAgIGdmY19nZXRfc3lt X3RyZWUgKCJjX2xvYyIsIHN1Yl9ucywgJmxvY19leHByLT5zeW10cmVlLCBmYWxzZSk7Cisg ICAgICBsb2NfZXhwci0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuZmxhdm9yID0gRkxfUFJPQ0VE VVJFOworICAgICAgbG9jX2V4cHItPnN5bXRyZWUtPm4uc3ltLT5pbnRtb2Rfc3ltX2lkID0g SVNPQ0JJTkRJTkdfTE9DOworICAgICAgbG9jX2V4cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRy LmludHJpbnNpYyA9IDE7CisgICAgICBsb2NfZXhwci0+c3ltdHJlZS0+bi5zeW0tPmZyb21f aW50bW9kID0gSU5UTU9EX0lTT19DX0JJTkRJTkc7CisgICAgICBsb2NfZXhwci0+dmFsdWUu ZnVuY3Rpb24uaXN5bQorCT0gZ2ZjX2ludHJpbnNpY19mdW5jdGlvbl9ieV9pZCAoR0ZDX0lT WU1fQ19MT0MpOworICAgICAgbG9jX2V4cHItPnZhbHVlLmZ1bmN0aW9uLm5hbWUgPSBsb2Nf ZXhwci0+dmFsdWUuZnVuY3Rpb24uaXN5bS0+bmFtZTsKKyAgICAgIGxvY19leHByLT52YWx1 ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAg bG9jX2V4cHItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ZXhwciA9IGV4cHI7CisgICAgICBs b2NfZXhwci0+c3ltdHJlZS0+bi5zeW0tPnJlc3VsdCA9IGV4cHItPnN5bXRyZWUtPm4uc3lt OworICAgICAgbG9jX2V4cHItPnRzLnR5cGUgPSBCVF9JTlRFR0VSOworICAgICAgbG9jX2V4 cHItPnRzLmtpbmQgPSBnZmNfaW5kZXhfaW50ZWdlcl9raW5kOworICAgICAgbG9jX2V4cHIt PndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisKKyAgICAgIC8qIENhbGwgQ0IgcHJvY2Vk dXJlIGZvciBwdHIgYXNzaWdubWVudCBvciBhbGxvY2F0YWJsZSBjb3B5aW5nLiAgKi8KKyAg ICAgIGJsb2NrLT5uZXh0ID0gZ2ZjX2dldF9jb2RlIChFWEVDX0FTU0lHTik7CisgICAgICBi bG9jayA9IGJsb2NrLT5uZXh0OworICAgICAgYmxvY2stPmV4cHIxID0gZ2ZjX2x2YWxfZXhw cl9mcm9tX3N5bSAocmVzdWx0KTsKKyAgICAgIGJsb2NrLT5leHByMiA9IGdmY19nZXRfZXhw ciAoKTsKKyAgICAgIGJsb2NrLT5leHByMi0+dHMgPSByZXN1bHQtPnRzOworICAgICAgYmxv Y2stPmV4cHIyLT53aGVyZSA9IGdmY19jdXJyZW50X2xvY3VzOworICAgICAgYmxvY2stPmV4 cHIyLT5leHByX3R5cGUgPSBFWFBSX09QOworICAgICAgYmxvY2stPmV4cHIyLT52YWx1ZS5v cC5vcCA9IElOVFJJTlNJQ19QTFVTOworICAgICAgYmxvY2stPmV4cHIyLT52YWx1ZS5vcC5v cDEgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChyZXN1bHQpOworICAgICAgYmxvY2stPmV4 cHIyLT52YWx1ZS5vcC5vcDIgPSBnZmNfZ2V0X2V4cHIgKCk7CisKKyAgICAgIGdmY19leHBy ICplID0gYmxvY2stPmV4cHIyLT52YWx1ZS5vcC5vcDI7CisgICAgICBlLT5leHByX3R5cGUg PSBFWFBSX0ZVTkNUSU9OOworICAgICAgZS0+dHMgPSBjYi0+dHM7CisgICAgICBlLT53aGVy ZSA9IGdmY19jdXJyZW50X2xvY3VzOworICAgICAgZS0+c3ltdHJlZSA9IGdmY19maW5kX3N5 bXRyZWUgKHN1Yl9ucy0+c3ltX3Jvb3QsIGNiLT5uYW1lKTsKKyAgICAgIGUtPnZhbHVlLmZ1 bmN0aW9uLmVzeW0gPSBjYjsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLm5hbWUgPSBjYi0+ bmFtZTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9IGdmY19nZXRfYWN0dWFs X2FyZ2xpc3QgKCk7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHIgPSBn ZmNfbHZhbF9leHByX2Zyb21fc3ltICh0b2tlbik7CisgICAgICBlLT52YWx1ZS5mdW5jdGlv bi5hY3R1YWwtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgZS0+ dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5leHByID0gbG9jX2V4cHI7CisgICAgICBl LT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9h cmdsaXN0ICgpOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0 LT5leHByID0gc2l6ZTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+ bmV4dC0+bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgICAgICBlLT52YWx1 ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5leHQtPm5leHQtPmV4cHIKKwk9IGdmY19nZXRf aW50X2V4cHIgKGNfc2hvcnRfa2luZCwgTlVMTCwKKwkJCSAgICBwcm9jX3B0ciA/IEdGQ19D TEFTU19DQl9QUk9DX1BPSU5URVIKKwkJCQkgICAgIDogKHBvaW50ZXIgPyBHRkNfQ0xBU1Nf Q0JfUE9JTlRFUgorCQkJCQkJOiBHRkNfQ0xBU1NfQ0JfQUxMT0NBVEFCTEUpKTsKKyAgICAg IGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+bmV4dC0+bmV4dC0+bmV4dAorCT0g Z2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFj dHVhbC0+bmV4dC0+bmV4dC0+bmV4dC0+bmV4dC0+ZXhwcgorCT0gZ2ZjX2x2YWxfZXhwcl9m cm9tX3N5bSAoY19udWxsX2Z1bnB0cik7CisKKyAgICAgIC8qIENhbGwgZm9yIGVhY2ggZWxl bWVudCBjYiB3aGVuIGNvbXAgY2FuIGhhdmUgYWxsb2NhdGFibGUgY29tcHMuICovCisgICAg ICBpZiAoKChjb21wLT50cy50eXBlICE9IEJUX0RFUklWRUQgfHwgIWNvbXAtPnRzLnUuZGVy aXZlZC0+YXR0ci5hbGxvY19jb21wKQorCSAgICAmJiBjb21wLT50cy50eXBlICE9IEJUX0NM QVNTKQorCSAgfHwgcG9pbnRlciB8fCBwcm9jX3B0cikKKwljb250aW51ZTsKKworICAgICAg LyogVE9ETzogSGFuZGxlIHVubGltaXRlZCBwb2x5bW9ycGhpYyBjb21wb25lbnRzLiAgKi8K KyAgICAgIGlmIChjb21wLT50cy50eXBlID09IEJUX0NMQVNTCisJICAmJiBDTEFTU19EQVRB IChjb21wKS0+dHMudS5kZXJpdmVkLT5hdHRyLnVubGltaXRlZF9wb2x5bW9ycGhpYykKKwlj b250aW51ZTsKKworICAgICAgLyogVE9ETzogSGFuZGxlIHVubGltaXRlZCBwb2x5bW9ycGhp YyBjb21wb25lbnRzLiAgKi8KKyAgICAgIGlmIChjb21wLT50cy50eXBlID09IEJUX0NMQVNT CisJICAmJiBjb21wLT50cy51LmRlcml2ZWQtPmF0dHIudW5saW1pdGVkX3BvbHltb3JwaGlj KQorCWNvbnRpbnVlOworCisgICAgICBnZmNfZXhwciAqdnRhYl9jYl9leHByOworICAgICAg aWYgKGNvbXAtPnRzLnR5cGUgPT0gQlRfREVSSVZFRCkKKwl2dGFiX2NiX2V4cHIgPSBnZmNf bHZhbF9leHByX2Zyb21fc3ltIChnZmNfZmluZF92dGFiICgmY29tcC0+dHMpKTsKKyAgICAg IGVsc2UKKwl7CisJICB2dGFiX2NiX2V4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChz Y2FsYXIpOworCSAgdnRhYl9jYl9leHByLT5yZWYgPSBnZmNfZ2V0X3JlZiAoKTsKKwkgIHZ0 YWJfY2JfZXhwci0+cmVmLT50eXBlID0gUkVGX0NPTVBPTkVOVDsKKwkgIHZ0YWJfY2JfZXhw ci0+cmVmLT51LmMuc3ltID0gZGVyaXZlZDsKKwkgIHZ0YWJfY2JfZXhwci0+cmVmLT51LmMu Y29tcG9uZW50ID0gY29tcDsKKwkgIGdmY19hZGRfdnB0cl9jb21wb25lbnQgKHZ0YWJfY2Jf ZXhwcik7CisJfQorICAgICAgZ2ZjX2FkZF9jb21wb25lbnRfcmVmICh2dGFiX2NiX2V4cHIs ICJfY2FsbGJhY2siKTsKKworICAgICAgYmxvY2stPm5leHQgPSBnZmNfZ2V0X2NvZGUgKEVY RUNfQVNTSUdOKTsKKyAgICAgIGJsb2NrID0gYmxvY2stPm5leHQ7CisgICAgICBibG9jay0+ ZXhwcjEgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChyZXN1bHQpOworICAgICAgYmxvY2st PmV4cHIyID0gZ2ZjX2dldF9leHByICgpOworICAgICAgYmxvY2stPmV4cHIyLT50cyA9IHJl c3VsdC0+dHM7CisgICAgICBibG9jay0+ZXhwcjItPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9j dXM7CisgICAgICBibG9jay0+ZXhwcjItPmV4cHJfdHlwZSA9IEVYUFJfT1A7CisgICAgICBi bG9jay0+ZXhwcjItPnZhbHVlLm9wLm9wID0gSU5UUklOU0lDX1BMVVM7CisgICAgICBibG9j ay0+ZXhwcjItPnZhbHVlLm9wLm9wMSA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHJlc3Vs dCk7CisgICAgICBibG9jay0+ZXhwcjItPnZhbHVlLm9wLm9wMiA9IGdmY19nZXRfZXhwciAo KTsKKyAgICAgIGUgPSBibG9jay0+ZXhwcjItPnZhbHVlLm9wLm9wMjsKKworICAgICAgLyog c2l6ZTogIHN0b3JhZ2Vfc2l6ZShjb21wX2V4cHIpIC8gc3RvcmFnZV9zaXplKDBfMSksIHdo ZXJlIHRoZQorCSBkZW5vbWluYXRvciBpcyBCSVRTX1BFUl9VTklUIGFzIGJpdF9zaXplID0g a2luZCAqIEJJVFNfUEVSX1VOSVQuICAqLworICAgICAgc2l6ZSA9IGdmY19nZXRfZXhwciAo KTsKKyAgICAgIHNpemUtPmV4cHJfdHlwZSA9IEVYUFJfT1A7CisgICAgICBzaXplLT53aGVy ZSA9IGdmY19jdXJyZW50X2xvY3VzOworICAgICAgc2l6ZS0+dHMudHlwZSA9IEJUX0lOVEVH RVI7CisgICAgICBzaXplLT50cy5raW5kID0gY19zaXplX2tpbmQ7CisgICAgICBzaXplLT52 YWx1ZS5vcC5vcCA9IElOVFJJTlNJQ19ESVZJREU7CisgICAgICBzaXplLT52YWx1ZS5vcC5v cDEgPSBnZmNfZ2V0X2V4cHIgKCk7CisgICAgICBzaXplLT52YWx1ZS5vcC5vcDEtPnRzID0g c2l6ZS0+dHM7CisgICAgICBzaXplLT52YWx1ZS5vcC5vcDEtPmV4cHJfdHlwZSA9IEVYUFJf RlVOQ1RJT047CisgICAgICBzaXplLT52YWx1ZS5vcC5vcDEtPnZhbHVlLmZ1bmN0aW9uLmlz eW0KKwk9IGdmY19pbnRyaW5zaWNfZnVuY3Rpb25fYnlfaWQgKEdGQ19JU1lNX1NUT1JBR0Vf U0laRSk7CisgICAgICBzaXplLT52YWx1ZS5vcC5vcDEtPnZhbHVlLmZ1bmN0aW9uLm5hbWUK Kwk9IHNpemUtPnZhbHVlLm9wLm9wMS0+dmFsdWUuZnVuY3Rpb24uaXN5bS0+bmFtZTsKKyAg ICAgIHNpemUtPnZhbHVlLm9wLm9wMS0+dmFsdWUuZnVuY3Rpb24uZXN5bSA9IE5VTEw7Cisg ICAgICBzaXplLT52YWx1ZS5vcC5vcDEtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9IGdmY19n ZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgICAgICBzaXplLT52YWx1ZS5vcC5vcDEtPnZhbHVl LmZ1bmN0aW9uLmFjdHVhbC0+ZXhwciA9IGdmY19jb3B5X2V4cHIgKGV4cHIpOworICAgICAg c2l6ZS0+dmFsdWUub3Aub3AxLT53aGVyZSA9IGdmY19jdXJyZW50X2xvY3VzOworICAgICAg c2l6ZS0+dmFsdWUub3Aub3AyID0gZ2ZjX2dldF9leHByICgpOworICAgICAgc2l6ZS0+dmFs dWUub3Aub3AyLT50cyA9IHNpemUtPnRzOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AyLT5l eHByX3R5cGUgPSBFWFBSX0ZVTkNUSU9OOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AyLT52 YWx1ZS5mdW5jdGlvbi5pc3ltCisJPSBnZmNfaW50cmluc2ljX2Z1bmN0aW9uX2J5X2lkIChH RkNfSVNZTV9TVE9SQUdFX1NJWkUpOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AyLT52YWx1 ZS5mdW5jdGlvbi5uYW1lCisJPSBzaXplLT52YWx1ZS5vcC5vcDItPnZhbHVlLmZ1bmN0aW9u LmlzeW0tPm5hbWU7CisgICAgICBzaXplLT52YWx1ZS5vcC5vcDItPnZhbHVlLmZ1bmN0aW9u LmVzeW0gPSBOVUxMOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AyLT52YWx1ZS5mdW5jdGlv bi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgc2l6ZS0+dmFs dWUub3Aub3AyLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHIKKwk9IGdmY19nZXRfaW50 X2V4cHIgKC8qIGtpbmQgPSAqLyAxLCBOVUxMLCAwKTsKKyAgICAgIHNpemUtPnZhbHVlLm9w Lm9wMi0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKworICAgICAgaWYgKGNvbXAtPmF0 dHIuZGltZW5zaW9uKQorCXsKKwkgIGUtPmV4cHJfdHlwZSA9IEVYUFJfRlVOQ1RJT047CisJ ICBlLT50cyA9IGNiLT50czsKKwkgIGUtPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisJ ICBlLT52YWx1ZS5mdW5jdGlvbi5pc3ltID0gZ2ZjX2ludHJpbnNpY19mdW5jdGlvbl9ieV9p ZCAoR0ZDX0lTWU1fU1VNKTsKKwkgIGUtPnZhbHVlLmZ1bmN0aW9uLm5hbWUgPSBlLT52YWx1 ZS5mdW5jdGlvbi5pc3ltLT5uYW1lOworCSAgZS0+dmFsdWUuZnVuY3Rpb24uZXN5bSA9IE5V TEw7CisJICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmds aXN0ICgpOworCSAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0ID0gZ2ZjX2dldF9h Y3R1YWxfYXJnbGlzdCAoKTsKKwkgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+ bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisJICBlLT52YWx1ZS5mdW5jdGlv bi5hY3R1YWwtPmV4cHIgPSBnZmNfZ2V0X2V4cHIgKCk7CisJICBlID0gZS0+dmFsdWUuZnVu Y3Rpb24uYWN0dWFsLT5leHByOworCX0KKworICAgICAgZS0+ZXhwcl90eXBlID0gRVhQUl9G VU5DVElPTjsKKyAgICAgIGUtPnRzID0gY2ItPnRzOworICAgICAgZS0+d2hlcmUgPSBnZmNf Y3VycmVudF9sb2N1czsKKyAgICAgIGUtPnN5bXRyZWUgPSBnZmNfZmluZF9zeW10cmVlIChz dWJfbnMtPnN5bV9yb290LCBjYi0+bmFtZSk7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5l c3ltID0gY2I7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5uYW1lID0gY2ItPm5hbWU7Cisg ICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0 ICgpOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByID0gZ2ZjX2x2YWxf ZXhwcl9mcm9tX3N5bSAodG9rZW4pOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFs LT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgICAgIGUtPnZhbHVlLmZ1 bmN0aW9uLmFjdHVhbC0+bmV4dC0+ZXhwciA9IGdmY19jb3B5X2V4cHIgKGV4cHIpOworICAg ICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0ID0gZ2ZjX2dldF9hY3R1 YWxfYXJnbGlzdCAoKTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+ bmV4dC0+ZXhwciA9IHNpemU7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5l eHQtPm5leHQtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgZS0+ dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5leHByCisJPSBnZmNf Z2V0X2ludF9leHByIChnZmNfaW5kZXhfaW50ZWdlcl9raW5kLCBOVUxMLAorCQkJICAgIEdG Q19DTEFTU19DQl9BTExPQ0FUQUJMRSk7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1 YWwtPm5leHQtPm5leHQtPm5leHQtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgp OworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5u ZXh0LT5leHByID0gdnRhYl9jYl9leHByOworICAgIH0KKworICB2dGFiX2NiLT5pbml0aWFs aXplciA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKGNhbGxiYWNrKTsKKyAgdnRhYl9jYi0+ dHMuaW50ZXJmYWNlID0gY2FsbGJhY2s7CisgIGdmY19jb21taXRfc3ltYm9scyAoKTsKK30K IAogLyogQWRkIHByb2NlZHVyZSBwb2ludGVycyBmb3IgYWxsIHR5cGUtYm91bmQgcHJvY2Vk dXJlcyB0byBhIHZ0YWIuICAqLwogCkBAIC0yNDIzLDYgKzI5NzgsOCBAQCBnZmNfZmluZF9k ZXJpdmVkX3Z0YWIgKGdmY19zeW1ib2wgKmRlcml2ZWQpCiAJCSAgYy0+aW5pdGlhbGl6ZXIg PSBnZmNfZ2V0X251bGxfZXhwciAoTlVMTCk7CiAJCX0KIAorCSAgICAgIHZ0YWItPnRzLnUu ZGVyaXZlZCA9IHZ0eXBlOworCiAJICAgICAgaWYgKCFkZXJpdmVkLT5hdHRyLnVubGltaXRl ZF9wb2x5bW9ycGhpYwogCQkgICYmIGRlcml2ZWQtPmNvbXBvbmVudHMgPT0gTlVMTAogCQkg ICYmICFkZXJpdmVkLT5hdHRyLnplcm9fY29tcCkKQEAgLTI1OTgsMTMgKzMxNTUsMjUgQEAg Z2ZjX2ZpbmRfZGVyaXZlZF92dGFiIChnZmNfc3ltYm9sICpkZXJpdmVkKQogCQkgIGMtPnRz LmludGVyZmFjZSA9IGRlYWxsb2M7CiAJCX0KIAorCSAgICAgIC8qIEFkZCBjb21wb25lbnQg X2NhbGxiYWNrLiAgKi8KKwkgICAgICBpZiAoIWdmY19hZGRfY29tcG9uZW50ICh2dHlwZSwg Il9jYWxsYmFjayIsICZjKSkKKwkJZ290byBjbGVhbnVwOworCSAgICAgIGMtPmF0dHIucHJv Y19wb2ludGVyID0gMTsKKwkgICAgICBjLT5hdHRyLmFjY2VzcyA9IEFDQ0VTU19QUklWQVRF OworCSAgICAgIGMtPnRiID0gWENORVcgKGdmY190eXBlYm91bmRfcHJvYyk7CisJICAgICAg Yy0+dGItPnBwYyA9IDE7CisJICAgICAgaWYgKGRlcml2ZWQtPmF0dHIudW5saW1pdGVkX3Bv bHltb3JwaGljCisJCSAgfHwgZGVyaXZlZC0+YXR0ci5hYnN0cmFjdCkKKwkJYy0+aW5pdGlh bGl6ZXIgPSBnZmNfZ2V0X251bGxfZXhwciAoTlVMTCk7CisJICAgICAgZWxzZQorCQlnZW5l cmF0ZV9jYWxsYmFja193cmFwcGVyICh2dGFiLCBkZXJpdmVkLCBucywgdG5hbWUsIGMpOwor CiAJICAgICAgLyogQWRkIHByb2NlZHVyZSBwb2ludGVycyBmb3IgdHlwZS1ib3VuZCBwcm9j ZWR1cmVzLiAgKi8KIAkgICAgICBpZiAoIWRlcml2ZWQtPmF0dHIudW5saW1pdGVkX3BvbHlt b3JwaGljKQogCQlhZGRfcHJvY3NfdG9fZGVjbGFyZWRfdnRhYiAoZGVyaXZlZCwgdnR5cGUp OwogCSAgfQogCiBoYXZlX3Z0eXBlOgotCSAgdnRhYi0+dHMudS5kZXJpdmVkID0gdnR5cGU7 CiAJICB2dGFiLT52YWx1ZSA9IGdmY19kZWZhdWx0X2luaXRpYWxpemVyICgmdnRhYi0+dHMp OwogCX0KICAgICAgIGZyZWUgKG5hbWUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vZjk1 LWxhbmcuY2MgYi9nY2MvZm9ydHJhbi9mOTUtbGFuZy5jYwppbmRleCAxYTg5NWEyNTEzMi4u OWNhZWQwZTE5MmYgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2Y5NS1sYW5nLmNjCisrKyBi L2djYy9mb3J0cmFuL2Y5NS1sYW5nLmNjCkBAIC0xMjYsNiArMTI2LDkgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBnZmNfYXR0cmlidXRlX3RhYmxlW10gPQogI3Vu ZGVmIExBTkdfSE9PS1NfT01QX0NMQVVTRV9MSU5FQVJfQ1RPUgogI3VuZGVmIExBTkdfSE9P S1NfT01QX0NMQVVTRV9EVE9SCiAjdW5kZWYgTEFOR19IT09LU19PTVBfRklOSVNIX0NMQVVT RQorI3VuZGVmIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElORworI3VuZGVmIExBTkdfSE9P S1NfT01QX0RFRVBfTUFQUElOR19QCisjdW5kZWYgTEFOR19IT09LU19PTVBfREVFUF9NQVBQ SU5HX0NOVAogI3VuZGVmIExBTkdfSE9PS1NfT01QX0FMTE9DQVRBQkxFX1AKICN1bmRlZiBM QU5HX0hPT0tTX09NUF9TQ0FMQVJfVEFSR0VUX1AKICN1bmRlZiBMQU5HX0hPT0tTX09NUF9T Q0FMQVJfUApAQCAtMTY0LDYgKzE2Nyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX3NwZWMgZ2ZjX2F0dHJpYnV0ZV90YWJsZVtdID0KICNkZWZpbmUgTEFOR19IT09LU19P TVBfQ0xBVVNFX0xJTkVBUl9DVE9SCWdmY19vbXBfY2xhdXNlX2xpbmVhcl9jdG9yCiAjZGVm aW5lIExBTkdfSE9PS1NfT01QX0NMQVVTRV9EVE9SCQlnZmNfb21wX2NsYXVzZV9kdG9yCiAj ZGVmaW5lIExBTkdfSE9PS1NfT01QX0ZJTklTSF9DTEFVU0UJCWdmY19vbXBfZmluaXNoX2Ns YXVzZQorI2RlZmluZSBMQU5HX0hPT0tTX09NUF9ERUVQX01BUFBJTkcJCWdmY19vbXBfZGVl cF9tYXBwaW5nCisjZGVmaW5lIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElOR19QCQlnZmNf b21wX2RlZXBfbWFwcGluZ19wCisjZGVmaW5lIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElO R19DTlQJCWdmY19vbXBfZGVlcF9tYXBwaW5nX2NudAogI2RlZmluZSBMQU5HX0hPT0tTX09N UF9BTExPQ0FUQUJMRV9QCQlnZmNfb21wX2FsbG9jYXRhYmxlX3AKICNkZWZpbmUgTEFOR19I T09LU19PTVBfU0NBTEFSX1AJCQlnZmNfb21wX3NjYWxhcl9wCiAjZGVmaW5lIExBTkdfSE9P S1NfT01QX1NDQUxBUl9UQVJHRVRfUAkJZ2ZjX29tcF9zY2FsYXJfdGFyZ2V0X3AKZGlmZiAt LWdpdCBhL2djYy9mb3J0cmFuL2dmb3J0cmFuLmggYi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5o CmluZGV4IGY4ZmQxYmE4Yjk1Li41ZjZjOWRjMWNhZSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRy YW4vZ2ZvcnRyYW4uaAorKysgYi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCkBAIC0zNzk1LDYg KzM3OTUsNyBAQCB2b2lkIGdmY19mcmVlX3dhaXQgKGdmY193YWl0ICopOwogYm9vbCBnZmNf cmVzb2x2ZV93YWl0IChnZmNfd2FpdCAqKTsKIAogLyogbW9kdWxlLmNjICovCit2b2lkIGdm Y19pbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUgKHZvaWQpOwogdm9pZCBnZmNfbW9kdWxl X2luaXRfMiAodm9pZCk7CiB2b2lkIGdmY19tb2R1bGVfZG9uZV8yICh2b2lkKTsKIHZvaWQg Z2ZjX2R1bXBfbW9kdWxlIChjb25zdCBjaGFyICosIGludCk7CkBAIC0zODU2LDYgKzM4NTcs MTMgQEAgYm9vbCBnZmNfaW52YWxpZF9udWxsX2FyZyAoZ2ZjX2V4cHIgKik7CiAKIAogLyog Y2xhc3MuY2MgKi8KKyNkZWZpbmUgR0ZDX0NMQVNTX0NBTExCQUNLX0RFRkFVTFRfRkxBRyAw CisjZGVmaW5lIEdGQ19DTEFTU19DQUxMQkFDS19WVEFCTEVfRkxBRyAxCisjZGVmaW5lIEdG Q19DTEFTU19DQl9BTExPQ0FUQUJMRSAwCisjZGVmaW5lIEdGQ19DTEFTU19DQl9QT0lOVEVS IDEKKyNkZWZpbmUgR0ZDX0NMQVNTX0NCX1BST0NfUE9JTlRFUiAyCisjZGVmaW5lIEdGQ19D TEFTU19DQl9WVEFCTEUgMworI2RlZmluZSBHRkNfQ0xBU1NfQ0JfVlBUUiA0CiB2b2lkIGdm Y19maXhfY2xhc3NfcmVmcyAoZ2ZjX2V4cHIgKmUpOwogdm9pZCBnZmNfYWRkX2NvbXBvbmVu dF9yZWYgKGdmY19leHByICosIGNvbnN0IGNoYXIgKik7CiB2b2lkIGdmY19hZGRfY2xhc3Nf YXJyYXlfcmVmIChnZmNfZXhwciAqKTsKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL21hdGNo LmNjIGIvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MKaW5kZXggNzE1YTc0ZWJhNTEuLmVjMjE0ODA3 NGI5IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9tYXRjaC5jYworKysgYi9nY2MvZm9ydHJh bi9tYXRjaC5jYwpAQCAtNjQxMCw2ICs2NDEwLDggQEAgc2VsZWN0X3R5cGVfc2V0X3RtcCAo Z2ZjX3R5cGVzcGVjICp0cykKIAl7CiAJICBzeW0tPmF0dHIucG9pbnRlcgogCQk9IENMQVNT X0RBVEEgKHNlbGVjdG9yKS0+YXR0ci5jbGFzc19wb2ludGVyOworCSAgc3ltLT5hdHRyLmFs bG9jYXRhYmxlCisJCT0gQ0xBU1NfREFUQSAoc2VsZWN0b3IpLT5hdHRyLmFsbG9jYXRhYmxl OwogCiAJICAvKiBDb3B5IGFjcm9zcyB0aGUgYXJyYXkgc3BlYyB0byB0aGUgc2VsZWN0b3Iu ICAqLwogCSAgaWYgKENMQVNTX0RBVEEgKHNlbGVjdG9yKS0+YXR0ci5kaW1lbnNpb24KZGlm ZiAtLWdpdCBhL2djYy9mb3J0cmFuL21vZHVsZS5jYyBiL2djYy9mb3J0cmFuL21vZHVsZS5j YwppbmRleCAyODFiMWIxN2ZiZi4uMWI2MzUzODE2OGMgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0 cmFuL21vZHVsZS5jYworKysgYi9nY2MvZm9ydHJhbi9tb2R1bGUuY2MKQEAgLTg0LDcgKzg0 LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKIAogLyogRG9uJ3QgcHV0IGFueSBzaW5nbGUgcXVvdGUgKCcpIGluIE1PRF9WRVJTSU9O LCBpZiB5b3Ugd2FudCBpdCB0byBiZQogICAgcmVjb2duaXplZC4gICovCi0jZGVmaW5lIE1P RF9WRVJTSU9OICIxNSIKKyNkZWZpbmUgTU9EX1ZFUlNJT04gIjE2IgogCiAKIC8qIFN0cnVj dHVyZSB0aGF0IGRlc2NyaWJlcyBhIHBvc2l0aW9uIHdpdGhpbiBhIG1vZHVsZSBmaWxlLiAg Ki8KQEAgLTY2MzMsNyArNjYzMyw3IEBAIGNyZWF0ZV9pbnRyaW5zaWNfZnVuY3Rpb24gKGNv bnN0IGNoYXIgKm5hbWUsIGludCBpZCwKICAgIGxpc3Qgd2FzIHByb3ZpZGVkLiAgKi8KIAog c3RhdGljIHZvaWQKLWltcG9ydF9pc29fY19iaW5kaW5nX21vZHVsZSAodm9pZCkKK2ltcG9y dF9pc29fY19iaW5kaW5nX21vZHVsZSAoYm9vbCBpbXBvcnRfYWxsKQogewogICBnZmNfc3lt Ym9sICptb2Rfc3ltID0gTlVMTCwgKnJldHVybl90eXBlOwogICBnZmNfc3ltdHJlZSAqbW9k X3N5bXRyZWUgPSBOVUxMLCAqdG1wX3N5bXRyZWU7CkBAIC02NzA0LDE2ICs2NzA0LDE3IEBA IGltcG9ydF9pc29fY19iaW5kaW5nX21vZHVsZSAodm9pZCkKIAl9CiAgICAgfQogCi0gIGlm ICgod2FudF9jX3B0ciB8fCAhb25seV9mbGFnKSAmJiAhY19wdHIpCisgIGlmICgod2FudF9j X3B0ciB8fCAhb25seV9mbGFnIHx8IGltcG9ydF9hbGwpICYmICFjX3B0cikKICAgICBjX3B0 ciA9IGdlbmVyYXRlX2lzb2NiaW5kaW5nX3N5bWJvbCAoaXNvX2NfbW9kdWxlX25hbWUsCiAJ CQkJCSAoaXNvX2NfYmluZGluZ19zeW1ib2wpCiAJCQkJCQkJSVNPQ0JJTkRJTkdfUFRSLAot CQkJCQkgTlVMTCwgTlVMTCwgb25seV9mbGFnKTsKLSAgaWYgKCh3YW50X2NfZnVucHRyIHx8 ICFvbmx5X2ZsYWcpICYmICFjX2Z1bnB0cikKKwkJCQkJIE5VTEwsIE5VTEwsIG9ubHlfZmxh ZyAmJiAhaW1wb3J0X2FsbCk7CisgIGlmICgod2FudF9jX2Z1bnB0ciB8fCAhb25seV9mbGFn IHx8IGltcG9ydF9hbGwpICYmICFjX2Z1bnB0cikKICAgICBjX2Z1bnB0ciA9IGdlbmVyYXRl X2lzb2NiaW5kaW5nX3N5bWJvbCAoaXNvX2NfbW9kdWxlX25hbWUsCiAJCQkJCSAgICAoaXNv X2NfYmluZGluZ19zeW1ib2wpCiAJCQkJCQkJSVNPQ0JJTkRJTkdfRlVOUFRSLAotCQkJCQkg ICAgTlVMTCwgTlVMTCwgb25seV9mbGFnKTsKKwkJCQkJICAgIE5VTEwsIE5VTEwsCisJCQkJ CSAgICBvbmx5X2ZsYWcgJiYgIWltcG9ydF9hbGwpOwogCiAgIC8qIEdlbmVyYXRlIHRoZSBz eW1ib2xzIGZvciB0aGUgbmFtZWQgY29uc3RhbnRzIHJlcHJlc2VudGluZwogICAgICB0aGUg a2luZHMgZm9yIGludHJpbnNpYyBkYXRhIHR5cGVzLiAgKi8KQEAgLTY4MTIsNyArNjgxMyw3 IEBAIGltcG9ydF9pc29fY19iaW5kaW5nX21vZHVsZSAodm9pZCkKIAkgICAgICB9CiAJICB9 CiAKLSAgICAgIGlmICghZm91bmQgJiYgIW9ubHlfZmxhZykKKyAgICAgIGlmICghZm91bmQg JiYgIW9ubHlfZmxhZyAmJiAhaW1wb3J0X2FsbCkKIAl7CiAJICAvKiBTa2lwLCBpZiB0aGUg c3ltYm9sIGlzIG5vdCBpbiB0aGUgZW5hYmxlZCBzdGFuZGFyZC4gICovCiAJICBzd2l0Y2gg KGkpCkBAIC02ODQ2LDcgKzY4NDcsOSBAQCBpbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUg KHZvaWQpCiAJICAgICAgZGVmYXVsdDoKIAkJOyAvKiBOb3QgR0ZDX1NURF8qIHZlcnNpb25l ZC4gICovCiAJICAgIH0KLQorCX0KKyAgICAgIGlmICghZm91bmQgJiYgKCFvbmx5X2ZsYWcg fHwgaW1wb3J0X2FsbCkpCisJewogCSAgc3dpdGNoIChpKQogCSAgICB7CiAjZGVmaW5lIE5B TUVEX0ZVTkNUSU9OKGEsYixjLGQpIFwKQEAgLTY4OTYsNiArNjg5OSwxMyBAQCBpbXBvcnRf aXNvX2NfYmluZGluZ19tb2R1bGUgKHZvaWQpCiAgICAgIH0KIH0KIAordm9pZAorZ2ZjX2lt cG9ydF9pc29fY19iaW5kaW5nX21vZHVsZSAodm9pZCkKK3sKKyAgZ2NjX2Fzc2VydCAoZ2Zj X3JlbmFtZV9saXN0ID09IE5VTEwpOworICBpbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUg KHRydWUpOworfQorCiAKIC8qIEFkZCBhbiBpbnRlZ2VyIG5hbWVkIGNvbnN0YW50IGZyb20g YSBnaXZlbiBtb2R1bGUuICAqLwogCkBAIC03MzA1LDcgKzczMTUsNyBAQCBnZmNfdXNlX21v ZHVsZSAoZ2ZjX3VzZV9saXN0ICptb2R1bGUpCiAgICAgICBpZiAoc3RyY21wIChtb2R1bGVf bmFtZSwgImlzb19jX2JpbmRpbmciKSA9PSAwCiAJICAmJiBnZmNfbm90aWZ5X3N0ZCAoR0ZD X1NURF9GMjAwMywgIklTT19DX0JJTkRJTkcgbW9kdWxlIGF0ICVDIikpCiAJewotCSAgaW1w b3J0X2lzb19jX2JpbmRpbmdfbW9kdWxlKCk7CisJICBpbXBvcnRfaXNvX2NfYmluZGluZ19t b2R1bGUgKGZhbHNlKTsKIAkgIGZyZWVfcmVuYW1lIChtb2R1bGUtPnJlbmFtZSk7CiAJICBt b2R1bGUtPnJlbmFtZSA9IE5VTEw7CiAJICBnZmNfY3VycmVudF9sb2N1cyA9IG9sZF9sb2N1 czsKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL29wZW5tcC5jYyBiL2djYy9mb3J0cmFuL29w ZW5tcC5jYwppbmRleCAxOTE0MmM0ZDhkMC4uNDMzN2JjYmZlMjUgMTAwNjQ0Ci0tLSBhL2dj Yy9mb3J0cmFuL29wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi9vcGVubXAuY2MKQEAgLTcw NDEsMTMgKzcwNDEsNiBAQCByZXNvbHZlX29tcF9jbGF1c2VzIChnZmNfY29kZSAqY29kZSwg Z2ZjX29tcF9jbGF1c2VzICpvbXBfY2xhdXNlcywKIAkJCSAmJiBuLT5zeW0tPmFzLT50eXBl ID09IEFTX0FTU1VNRURfU0laRSkKIAkJICBnZmNfZXJyb3IgKCJBc3N1bWVkIHNpemUgYXJy YXkgJXFzIGluICVzIGNsYXVzZSBhdCAlTCIsCiAJCQkgICAgIG4tPnN5bS0+bmFtZSwgbmFt ZSwgJm4tPndoZXJlKTsKLQkJaWYgKCFvcGVuYWNjCi0JCSAgICAmJiBsaXN0ID09IE9NUF9M SVNUX01BUAotCQkgICAgJiYgbi0+c3ltLT50cy50eXBlID09IEJUX0RFUklWRUQKLQkJICAg ICYmIG4tPnN5bS0+dHMudS5kZXJpdmVkLT5hdHRyLmFsbG9jX2NvbXApCi0JCSAgZ2ZjX2Vy cm9yICgiTGlzdCBpdGVtICVxcyB3aXRoIGFsbG9jYXRhYmxlIGNvbXBvbmVudHMgaXMgbm90 ICIKLQkJCSAgICAgInBlcm1pdHRlZCBpbiBtYXAgY2xhdXNlIGF0ICVMIiwgbi0+c3ltLT5u YW1lLAotCQkJICAgICAmbi0+d2hlcmUpOwogCQlpZiAobGlzdCA9PSBPTVBfTElTVF9NQVAg JiYgIW9wZW5hY2MpCiAJCSAgc3dpdGNoIChjb2RlLT5vcCkKIAkJICAgIHsKZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3Jlc29sdmUuY2MgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjCmlu ZGV4IDc1M2FhMjdlMjNmLi41ZTg5YzUyZWMwNiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4v cmVzb2x2ZS5jYworKysgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjCkBAIC00ODgsNyArNDg4 LDggQEAgZ2ZjX3Jlc29sdmVfZm9ybWFsX2FyZ2xpc3QgKGdmY19zeW1ib2wgKnByb2MpCiAJ ICAgICAgY29udGludWU7CiAJICAgIH0KIAotCSAgaWYgKHN5bS0+YXR0ci5mbGF2b3IgPT0g RkxfUFJPQ0VEVVJFKQorCSAgaWYgKHN5bS0+YXR0ci5mbGF2b3IgPT0gRkxfUFJPQ0VEVVJF CisJICAgICAgJiYgIXByb2MtPmF0dHIuYXJ0aWZpY2lhbCAmJiAhc3ltLT5hdHRyLmFydGlm aWNpYWwpCiAJICAgIHsKIAkgICAgICBnZmNfZXJyb3IgKCJEdW1teSBwcm9jZWR1cmUgJXFz IG5vdCBhbGxvd2VkIGluIGVsZW1lbnRhbCAiCiAJCQkgInByb2NlZHVyZSAlcXMgYXQgJUwi LCBzeW0tPm5hbWUsIHByb2MtPm5hbWUsCkBAIC0xODc1LDcgKzE4NzYsOCBAQCBnZmNfcmVz b2x2ZV9pbnRyaW5zaWMgKGdmY19zeW1ib2wgKnN5bSwgbG9jdXMgKmxvYykKICAgc3ltLT5h dHRyLmVsZW1lbnRhbCA9IGlzeW0tPmVsZW1lbnRhbDsKIAogICAvKiBDaGVjayBpdCBpcyBh Y3R1YWxseSBhdmFpbGFibGUgaW4gdGhlIHN0YW5kYXJkIHNldHRpbmdzLiAgKi8KLSAgaWYg KCFnZmNfY2hlY2tfaW50cmluc2ljX3N0YW5kYXJkIChpc3ltLCAmc3ltc3RkLCBmYWxzZSwg c3ltLT5kZWNsYXJlZF9hdCkpCisgIGlmICgoIXN5bS0+bnMtPnByb2NfbmFtZSB8fCAhc3lt LT5ucy0+cHJvY19uYW1lLT5hdHRyLmFydGlmaWNpYWwpCisgICAgICAmJiAhZ2ZjX2NoZWNr X2ludHJpbnNpY19zdGFuZGFyZCAoaXN5bSwgJnN5bXN0ZCwgZmFsc2UsIHN5bS0+ZGVjbGFy ZWRfYXQpKQogICAgIHsKICAgICAgIGdmY19lcnJvciAoIlRoZSBpbnRyaW5zaWMgJXFzIGRl Y2xhcmVkIElOVFJJTlNJQyBhdCAlTCBpcyBub3QgIgogCQkgImF2YWlsYWJsZSBpbiB0aGUg Y3VycmVudCBzdGFuZGFyZCBzZXR0aW5ncyBidXQgJXMuIFVzZSAiCkBAIC0xMzM4MSw3ICsx MzM4Myw3IEBAIHJlc29sdmVfZmxfcHJvY2VkdXJlIChnZmNfc3ltYm9sICpzeW0sIGludCBt cF9mbGFnKQogCQkgICAgIG5hbWUsICZzeW0tPmRlY2xhcmVkX2F0KTsKIAkgIHJldHVybiBm YWxzZTsKIAl9Ci0gICAgICBpZiAoc3ltLT5hdHRyLmR1bW15KQorICAgICAgaWYgKHN5bS0+ YXR0ci5kdW1teSAmJiAhc3ltLT5hdHRyLmFydGlmaWNpYWwpCiAJewogCSAgZ2ZjX2Vycm9y ICgiRHVtbXkgcHJvY2VkdXJlICVxcyBhdCAlTCBzaGFsbCBub3QgYmUgZWxlbWVudGFsIiwK IAkJICAgICBzeW0tPm5hbWUsICZzeW0tPmRlY2xhcmVkX2F0KTsKQEAgLTE3NDY4LDcgKzE3 NDcwLDggQEAgcmVzb2x2ZV90eXBlcyAoZ2ZjX25hbWVzcGFjZSAqbnMpCiAKICAgZm9yIChu ID0gbnMtPmNvbnRhaW5lZDsgbjsgbiA9IG4tPnNpYmxpbmcpCiAgICAgewotICAgICAgaWYg KGdmY19wdXJlIChucy0+cHJvY19uYW1lKSAmJiAhZ2ZjX3B1cmUgKG4tPnByb2NfbmFtZSkp CisgICAgICBpZiAoZ2ZjX3B1cmUgKG5zLT5wcm9jX25hbWUpICYmICFnZmNfcHVyZSAobi0+ cHJvY19uYW1lKQorCSAgJiYgKCFuLT5wcm9jX25hbWUgfHwgIW4tPnByb2NfbmFtZS0+YXR0 ci5hcnRpZmljaWFsKSkKIAlnZmNfZXJyb3IgKCJDb250YWluZWQgcHJvY2VkdXJlICVxcyBh dCAlTCBvZiBhIFBVUkUgcHJvY2VkdXJlIG11c3QgIgogCQkgICAiYWxzbyBiZSBQVVJFIiwg bi0+cHJvY19uYW1lLT5uYW1lLAogCQkgICAmbi0+cHJvY19uYW1lLT5kZWNsYXJlZF9hdCk7 CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYyBiL2djYy9mb3J0cmFu L3RyYW5zLWFycmF5LmNjCmluZGV4IGNmYjZlYWMxMWM3Li43Y2Q0ZWZkZWU1ZCAxMDA2NDQK LS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJh bnMtYXJyYXkuY2MKQEAgLTQ2NSw5ICs0NjUsMTEgQEAgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9z dHJpZGVfZ2V0ICh0cmVlIGRlc2MsIHRyZWUgZGltKQogICBnY2NfYXNzZXJ0IChHRkNfREVT Q1JJUFRPUl9UWVBFX1AgKHR5cGUpKTsKICAgaWYgKGludGVnZXJfemVyb3AgKGRpbSkKICAg ICAgICYmIChHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FMTE9D QVRBQkxFCi0JICB8fEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlf QVNTVU1FRF9TSEFQRV9DT05UCi0JICB8fEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9 PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX0NPTlQKLQkgIHx8R0ZDX1RZUEVfQVJSQVlfQUtJ TkQgKHR5cGUpID09IEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQpKQorCSAgfHwgR0ZDX1RZUEVf QVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9BU1NVTUVEX1NIQVBFX0NPTlQKKwkg IHx8IEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfQVNTVU1FRF9S QU5LX0NPTlQKKwkgIHx8IEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJS QVlfQVNTVU1FRF9SQU5LX0FMTE9DQVRBQkxFCisJICB8fCBHRkNfVFlQRV9BUlJBWV9BS0lO RCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVSX0NPTlQKKwkgIHx8 IEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfUE9JTlRFUl9DT05U KSkKICAgICByZXR1cm4gZ2ZjX2luZGV4X29uZV9ub2RlOwogCiAgIHJldHVybiBnZmNfY29u dl9kZXNjcmlwdG9yX3N0cmlkZSAoZGVzYywgZGltKTsKQEAgLTgwNTEsNyArODA1Myw4IEBA IGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoZ2ZjX3NlICpzZSwgZ2ZjX2V4cHIgKmV4cHIp CiAKIAogLyogQ2FsY3VsYXRlIHRoZSBhcnJheSBzaXplIChudW1iZXIgb2YgZWxlbWVudHMp OyBpZiBkaW0gIT0gTlVMTF9UUkVFLAotICAgcmV0dXJuIHNpemUgZm9yIHRoYXQgZGltIChk aW09MC4ucmFuay0xOyBvbmx5IGZvciBHRkNfREVTQ1JJUFRPUl9UWVBFX1ApLiAgKi8KKyAg IHJldHVybiBzaXplIGZvciB0aGF0IGRpbSAoZGltPTAuLnJhbmstMTsgb25seSBmb3IgR0ZD X0RFU0NSSVBUT1JfVFlQRV9QKS4KKyAgIElmICFleHByICYmIGRlc2NyaXB0b3IgYXJyYXks IHRoZSByYW5rIGlzIHRha2VuIGZyb20gdGhlIGRlc2NyaXB0b3IuICAqLwogdHJlZQogZ2Zj X3RyZWVfYXJyYXlfc2l6ZSAoc3RtdGJsb2NrX3QgKmJsb2NrLCB0cmVlIGRlc2MsIGdmY19l eHByICpleHByLCB0cmVlIGRpbSkKIHsKQEAgLTgwNjEsMjAgKzgwNjQsMjEgQEAgZ2ZjX3Ry ZWVfYXJyYXlfc2l6ZSAoc3RtdGJsb2NrX3QgKmJsb2NrLCB0cmVlIGRlc2MsIGdmY19leHBy ICpleHByLCB0cmVlIGRpbSkKICAgICAgIHJldHVybiBHRkNfVFlQRV9BUlJBWV9TSVpFIChU UkVFX1RZUEUgKGRlc2MpKTsKICAgICB9CiAgIHRyZWUgc2l6ZSwgdG1wLCByYW5rID0gTlVM TF9UUkVFLCBjb25kID0gTlVMTF9UUkVFOwotICBzeW1ib2xfYXR0cmlidXRlIGF0dHIgPSBn ZmNfZXhwcl9hdHRyIChleHByKTsKLSAgZ2ZjX2FycmF5X3NwZWMgKmFzID0gZ2ZjX2dldF9m dWxsX2FycmF5c3BlY19mcm9tX2V4cHIgKGV4cHIpOwogICBnY2NfYXNzZXJ0IChHRkNfREVT Q1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGVzYykpKTsKLSAgaWYgKCghYXR0ci5wb2lu dGVyICYmICFhdHRyLmFsbG9jYXRhYmxlICYmIGFzICYmIGFzLT50eXBlID09IEFTX0FTU1VN RURfUkFOSykKLSAgICAgICB8fCAhZGltKQotICAgIHsKLSAgICAgIGlmIChleHByLT5yYW5r IDwgMCkKLQlyYW5rID0gZm9sZF9jb252ZXJ0IChzaWduZWRfY2hhcl90eXBlX25vZGUsCi0J CQkgICAgIGdmY19jb252X2Rlc2NyaXB0b3JfcmFuayAoZGVzYykpOwotICAgICAgZWxzZQot CXJhbmsgPSBidWlsZF9pbnRfY3N0IChzaWduZWRfY2hhcl90eXBlX25vZGUsIGV4cHItPnJh bmspOwotICAgIH0KKyAgLyogTm9uYWxsb2NhdGFibGUsIG5vbnBvaW50ZXIgYXNzdW1lZC1y YW5rIGFycmF5LiAgKi8KKyAgZW51bSBnZmNfYXJyYXlfa2luZCBha2luZCA9IEdGQ19UWVBF X0FSUkFZX0FLSU5EIChUUkVFX1RZUEUgKGRlc2MpKTsKKyAgYm9vbCBhc3N1bWVkX3Jhbmsg PSAoYWtpbmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19DT05UCisJCSAgICAgICB8fCBh a2luZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LCisJCSAgICAgICB8fCBha2luZCA9PSBH RkNfQVJSQVlfQVNTVU1FRF9SQU5LX0FMTE9DQVRBQkxFCisJCSAgICAgICB8fCBha2luZCA9 PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX1BPSU5URVIKKwkJICAgICAgIHx8IGFraW5kID09 IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfUE9JTlRFUl9DT05UKTsKKyAgaWYgKGV4cHIgPT0g TlVMTCB8fCBleHByLT5yYW5rIDwgMCkKKyAgICByYW5rID0gZm9sZF9jb252ZXJ0IChzaWdu ZWRfY2hhcl90eXBlX25vZGUsCisJCQkgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9yYW5rIChkZXNj KSk7CisgIGVsc2UKKyAgICByYW5rID0gYnVpbGRfaW50X2NzdCAoc2lnbmVkX2NoYXJfdHlw ZV9ub2RlLCBleHByLT5yYW5rKTsKIAotICBpZiAoZGltIHx8IGV4cHItPnJhbmsgPT0gMSkK KyAgaWYgKGRpbSB8fCAoZXhwciAmJiBleHByLT5yYW5rID09IDEpKQogICAgIHsKICAgICAg IGlmICghZGltKQogCWRpbSA9IGdmY19pbmRleF96ZXJvX25vZGU7CkBAIC04MDkxLDggKzgw OTUsOCBAQCBnZmNfdHJlZV9hcnJheV9zaXplIChzdG10YmxvY2tfdCAqYmxvY2ssIHRyZWUg ZGVzYywgZ2ZjX2V4cHIgKmV4cHIsIHRyZWUgZGltKQogCSAgIHNpemUgPSBtYXggKDAsIHNp emUpOyAgKi8KICAgICAgIHNpemUgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9u LCBNQVhfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCiAJCQkgICAgICBzaXplLCBnZmNf aW5kZXhfemVyb19ub2RlKTsKLSAgICAgIGlmICghYXR0ci5wb2ludGVyICYmICFhdHRyLmFs bG9jYXRhYmxlCi0JICAmJiBhcyAmJiBhcy0+dHlwZSA9PSBBU19BU1NVTUVEX1JBTkspCisg ICAgICBpZiAoYXNzdW1lZF9yYW5rICYmIChha2luZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9S QU5LX0NPTlQKKwkJCSAgIHx8IGFraW5kID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTkspKQog CXsKIAkgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE1JTlVTX0VY UFIsIHNpZ25lZF9jaGFyX3R5cGVfbm9kZSwKIAkJCQkgcmFuaywgYnVpbGRfaW50X2NzdCAo c2lnbmVkX2NoYXJfdHlwZV9ub2RlLCAxKSk7CkBAIC04MTMzLDcgKzgxMzcsOCBAQCBnZmNf dHJlZV9hcnJheV9zaXplIChzdG10YmxvY2tfdCAqYmxvY2ssIHRyZWUgZGVzYywgZ2ZjX2V4 cHIgKmV4cHIsIHRyZWUgZGltKQogCSAgIGV4dGVudCA9IDAKICAgICAgIHNpemUgKj0gZXh0 ZW50LiAgKi8KICAgY29uZCA9IE5VTExfVFJFRTsKLSAgaWYgKCFhdHRyLnBvaW50ZXIgJiYg IWF0dHIuYWxsb2NhdGFibGUgJiYgYXMgJiYgYXMtPnR5cGUgPT0gQVNfQVNTVU1FRF9SQU5L KQorICBpZiAoYXNzdW1lZF9yYW5rICYmIChha2luZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9S QU5LX0NPTlQKKwkJICAgICAgIHx8IGFraW5kID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTksp KQogICAgIHsKICAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24s IE1JTlVTX0VYUFIsIHNpZ25lZF9jaGFyX3R5cGVfbm9kZSwKIAkJCSAgICAgcmFuaywgYnVp bGRfaW50X2NzdCAoc2lnbmVkX2NoYXJfdHlwZV9ub2RlLCAxKSk7CkBAIC04NjI1LDcgKzg2 MzAsMTAgQEAgZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAoc3RtdGJsb2NrX3QgKmJsb2NrLCB0cmVl IGRlY2wsIGludCByYW5rKQogICB0cmVlIGlkeDsKICAgdHJlZSBuZWxlbXM7CiAgIHRyZWUg dG1wOwotICBpZHggPSBnZmNfcmFua19jc3RbcmFuayAtIDFdOworICBpZiAocmFuayA8IDAp CisgICAgaWR4ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9yYW5rIChkZWNsKTsKKyAgZWxzZQor ICAgIGlkeCA9IGdmY19yYW5rX2NzdFtyYW5rIC0gMV07CiAgIG5lbGVtcyA9IGdmY19jb252 X2Rlc2NyaXB0b3JfdWJvdW5kX2dldCAoZGVjbCwgaWR4KTsKICAgdG1wID0gZ2ZjX2NvbnZf ZGVzY3JpcHRvcl9sYm91bmRfZ2V0IChkZWNsLCBpZHgpOwogICB0bXAgPSBmb2xkX2J1aWxk Ml9sb2MgKGlucHV0X2xvY2F0aW9uLCBNSU5VU19FWFBSLCBnZmNfYXJyYXlfaW5kZXhfdHlw ZSwKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MgYi9nY2MvZm9ydHJh bi90cmFucy1leHByLmNjCmluZGV4IGViNmE3OGMzYTYyLi45NmRjNDhjNGUwOCAxMDA2NDQK LS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYworKysgYi9nY2MvZm9ydHJhbi90cmFu cy1leHByLmNjCkBAIC0yMDQsNiArMjA0LDcgQEAgZ2ZjX2dldF91bHRpbWF0ZV9hbGxvY19w dHJfY29tcHNfY2FmX3Rva2VuIChnZmNfc2UgKm91dGVyc2UsIGdmY19leHByICpleHByKQog I2RlZmluZSBWVEFCTEVfQ09QWV9GSUVMRCA0CiAjZGVmaW5lIFZUQUJMRV9GSU5BTF9GSUVM RCA1CiAjZGVmaW5lIFZUQUJMRV9ERUFMTE9DQVRFX0ZJRUxEIDYKKyNkZWZpbmUgVlRBQkxF X0NBTExCQUNLX0ZJRUxEIDcKIAogCiB0cmVlCkBAIC0zODMsNiArMzg0LDcgQEAgVlRBQl9H RVRfRklFTERfR0VOIChkZWZfaW5pdCwgVlRBQkxFX0RFRl9JTklUX0ZJRUxEKQogVlRBQl9H RVRfRklFTERfR0VOIChjb3B5LCBWVEFCTEVfQ09QWV9GSUVMRCkKIFZUQUJfR0VUX0ZJRUxE X0dFTiAoZmluYWwsIFZUQUJMRV9GSU5BTF9GSUVMRCkKIFZUQUJfR0VUX0ZJRUxEX0dFTiAo ZGVhbGxvY2F0ZSwgVlRBQkxFX0RFQUxMT0NBVEVfRklFTEQpCitWVEFCX0dFVF9GSUVMRF9H RU4gKGNhbGxiYWNrLCBWVEFCTEVfQ0FMTEJBQ0tfRklFTEQpCiAjdW5kZWYgVlRBQl9HRVRf RklFTERfR0VOCiAKIC8qIFRoZSBzaXplIGZpZWxkIGlzIHJldHVybmVkIGFzIGFuIGFycmF5 IGluZGV4IHR5cGUuICBUaGVyZWZvcmUgdHJlYXQKQEAgLTQyMCw2ICs0MjIsOSBAQCBnZmNf dnB0cl9zaXplX2dldCAodHJlZSB2cHRyKQogI3VuZGVmIFZUQUJMRV9ERUZfSU5JVF9GSUVM RAogI3VuZGVmIFZUQUJMRV9DT1BZX0ZJRUxECiAjdW5kZWYgVlRBQkxFX0ZJTkFMX0ZJRUxE CisjdW5kZWYgVlRBQkxFX0RFQUxMT0NBVEVfRklFTEQKKyN1bmRlZiBWVEFCTEVfQ0FMTEJB Q0tfRklFTEQKKwogCiAKIC8qIElGIHRzIGlzIG51bGwgKGRlZmF1bHQpLCBzZWFyY2ggZm9y IHRoZSBsYXN0IF9jbGFzcyByZWYgaW4gdGhlIGNoYWluCkBAIC05NDk2LDcgKzk1MDEsOCBA QCBnZmNfY29udl9leHByX3JlZmVyZW5jZSAoZ2ZjX3NlICogc2UsIGdmY19leHByICogZXhw ciwgYm9vbCBhZGRfY2xvYmJlcikKICAgaWYgKGV4cHItPnRzLnR5cGUgPT0gQlRfQ0hBUkFD VEVSKQogICAgIHsKICAgICAgIGdmY19jb252X2V4cHIgKHNlLCBleHByKTsKLSAgICAgIGdm Y19jb252X3N0cmluZ19wYXJhbWV0ZXIgKHNlKTsKKyAgICAgIGlmIChleHByLT5leHByX3R5 cGUgIT0gRVhQUl9WQVJJQUJMRSB8fCAhZ2ZjX2V4cHJfYXR0ciAoZXhwcikucHJvY19wb2lu dGVyKQorCWdmY19jb252X3N0cmluZ19wYXJhbWV0ZXIgKHNlKTsKICAgICAgIHJldHVybjsK ICAgICB9CiAKQEAgLTk1NTQsNiArOTU2MCw5IEBAIGdmY19jb252X2V4cHJfcmVmZXJlbmNl IChnZmNfc2UgKiBzZSwgZ2ZjX2V4cHIgKiBleHByLCBib29sIGFkZF9jbG9iYmVyKQogICAg ICAgVFJFRV9TVEFUSUMgKHZhcikgPSAxOwogICAgICAgcHVzaGRlY2wgKHZhcik7CiAgICAg fQorICBlbHNlIGlmIChleHByLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRQorCSAgICYm IChERUNMX1AgKHNlLT5leHByKSB8fCBUUkVFX0NPREUgKHNlLT5leHByKSA9PSBDT01QT05F TlRfUkVGKSkKKyAgICB2YXIgPSBzZS0+ZXhwcjsKICAgZWxzZQogICAgIHsKICAgICAgIHZh ciA9IGdmY19jcmVhdGVfdmFyIChUUkVFX1RZUEUgKHNlLT5leHByKSwgTlVMTCk7CmRpZmYg LS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuY2MgYi9nY2MvZm9ydHJhbi90 cmFucy1pbnRyaW5zaWMuY2MKaW5kZXggZTY4MGRlMWRiZDEuLjJkNWQwOWU5ZDY5IDEwMDY0 NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuY2MKKysrIGIvZ2NjL2ZvcnRy YW4vdHJhbnMtaW50cmluc2ljLmNjCkBAIC04MDk5LDEyICs4MDk5LDE4IEBAIGdmY19jb252 X2ludHJpbnNpY19zaXplb2YgKGdmY19zZSAqc2UsIGdmY19leHByICpleHByKQogCSBjbGFz cyBvYmplY3QuICBUaGUgY2xhc3Mgb2JqZWN0IG1heSBiZSBhIG5vbi1wb2ludGVyIG9iamVj dCwgZS5nLgogCSBsb2NhdGVkIG9uIHRoZSBzdGFjaywgb3IgYSBtZW1vcnkgbG9jYXRpb24g cG9pbnRlZCB0bywgZS5nLiBhCiAJIHBhcmFtZXRlciwgaS5lLiwgYW4gaW5kaXJlY3RfcmVm LiAgKi8KLSAgICAgIGlmIChhcmctPnJhbmsgPCAwCi0JICB8fCAoYXJnLT5yYW5rID4gMCAm JiAhVkFSX1AgKGFyZ3NlLmV4cHIpCi0JICAgICAgJiYgKChJTkRJUkVDVF9SRUZfUCAoVFJF RV9PUEVSQU5EIChhcmdzZS5leHByLCAwKSkKLQkJICAgJiYgR0ZDX0RFQ0xfQ0xBU1MgKFRS RUVfT1BFUkFORCAoCi0JCQkJCVRSRUVfT1BFUkFORCAoYXJnc2UuZXhwciwgMCksIDApKSkK LQkJICB8fCBHRkNfREVDTF9DTEFTUyAoVFJFRV9PUEVSQU5EIChhcmdzZS5leHByLCAwKSkp KSkKKyAgICAgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChhcmdzZS5leHByKSkK KwkgICYmIEdGQ19DTEFTU19UWVBFX1AgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChhcmdzZS5l eHByKSkpKQorCWJ5dGVfc2l6ZQorCSAgPSBnZmNfY2xhc3NfdnRhYl9zaXplX2dldCAoYnVp bGRfZm9sZF9pbmRpcmVjdF9yZWYgKGFyZ3NlLmV4cHIpKTsKKyAgICAgIGVsc2UgaWYgKEdG Q19DTEFTU19UWVBFX1AgKFRSRUVfVFlQRSAoYXJnc2UuZXhwcikpKQorCWJ5dGVfc2l6ZSA9 IGdmY19jbGFzc192dGFiX3NpemVfZ2V0IChhcmdzZS5leHByKTsKKyAgICAgIGVsc2UgaWYg KGFyZy0+cmFuayA8IDAKKwkgICAgICAgfHwgKGFyZy0+cmFuayA+IDAgJiYgIVZBUl9QIChh cmdzZS5leHByKQorCQkgICAmJiAoKElORElSRUNUX1JFRl9QIChUUkVFX09QRVJBTkQgKGFy Z3NlLmV4cHIsIDApKQorCQkJJiYgR0ZDX0RFQ0xfQ0xBU1MgKFRSRUVfT1BFUkFORCAoCisJ CQkJCSAgICAgVFJFRV9PUEVSQU5EIChhcmdzZS5leHByLCAwKSwgMCkpKQorCQkgICAgICAg fHwgR0ZDX0RFQ0xfQ0xBU1MgKFRSRUVfT1BFUkFORCAoYXJnc2UuZXhwciwgMCkpKSkpCiAJ Ynl0ZV9zaXplID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKFRSRUVfT1BFUkFORCAoYXJn c2UuZXhwciwgMCkpOwogICAgICAgZWxzZSBpZiAoYXJnLT5yYW5rID4gMAogCSAgICAgICB8 fCAoYXJnLT5yYW5rID09IDAKQEAgLTgxMTQsNyArODEyMCw3IEBAIGdmY19jb252X2ludHJp bnNpY19zaXplb2YgKGdmY19zZSAqc2UsIGdmY19leHByICpleHByKQogCWJ5dGVfc2l6ZSA9 IGdmY19jbGFzc192dGFiX3NpemVfZ2V0ICgKIAkgICAgICBHRkNfREVDTF9TQVZFRF9ERVND UklQVE9SIChhcmctPnN5bXRyZWUtPm4uc3ltLT5iYWNrZW5kX2RlY2wpKTsKICAgICAgIGVs c2UKLQlieXRlX3NpemUgPSBnZmNfY2xhc3NfdnRhYl9zaXplX2dldCAoYXJnc2UuZXhwcik7 CisJZ2NjX3VucmVhY2hhYmxlICgpOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAgLTg4OTks MTMgKzg5MDUsMTMgQEAgZ2ZjX2NvbnZfYXNzb2NpYXRlZCAoZ2ZjX3NlICpzZSwgZ2ZjX2V4 cHIgKmV4cHIpCiAgICAgICBpZiAoc2NhbGFyKQogICAgICAgICB7CiAJICAvKiBBIHBvaW50 ZXIgdG8gYSBzY2FsYXIuICAqLworCSAgc3ltYm9sX2F0dHJpYnV0ZSBhdHRyID0gZ2ZjX2V4 cHJfYXR0ciAoYXJnMS0+ZXhwcik7CiAJICBhcmcxc2Uud2FudF9wb2ludGVyID0gMTsKIAkg IGdmY19jb252X2V4cHIgKCZhcmcxc2UsIGFyZzEtPmV4cHIpOwotCSAgaWYgKGFyZzEtPmV4 cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLnByb2NfcG9pbnRlcgotCSAgICAgICYmIGFyZzEt PmV4cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmR1bW15KQorCSAgaWYgKGF0dHIucHJvY19w b2ludGVyICYmIGF0dHIuZHVtbXkpCiAJICAgIGFyZzFzZS5leHByID0gYnVpbGRfZm9sZF9p bmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICAgICBhcmcxc2Uu ZXhwcik7Ci0gIAkgIGlmIChhcmcxLT5leHByLT50cy50eXBlID09IEJUX0NMQVNTKQorCSAg aWYgKCFhdHRyLnByb2NfcG9pbnRlciAmJiBhcmcxLT5leHByLT50cy50eXBlID09IEJUX0NM QVNTKQogCSAgICB7CiAJICAgICAgdG1wMiA9IGdmY19jbGFzc19kYXRhX2dldCAoYXJnMXNl LmV4cHIpOwogCSAgICAgIGlmIChHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAo dG1wMikpKQpAQCAtOTUyNSwxMyArOTUzMSw2IEBAIGNvbnZfaXNvY2JpbmRpbmdfZnVuY3Rp b24gKGdmY19zZSAqc2UsIGdmY19leHByICpleHByKQogCSAgZ2ZjX2NvbnZfZXhwcl9kZXNj cmlwdG9yIChzZSwgYXJnLT5leHByKTsKIAkgIHNlLT5leHByID0gZ2ZjX2NvbnZfZGVzY3Jp cHRvcl9kYXRhX2dldCAoc2UtPmV4cHIpOwogCX0KLQotICAgICAgLyogVE9ETyAtLSB0aGUg Zm9sbG93aW5nIHR3byBsaW5lcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgaWYKLQkg dGhleSdyZSByZW1vdmVkLCBhIGJ1ZyBpcyBleHBvc2VkIGxhdGVyIGluIHRoZSBjb2RlIHBh dGguCi0JIFRoaXMgd29ya2Fyb3VuZCB3YXMgdGh1cyBpbnRyb2R1Y2VkLCBidXQgd2lsbCBo YXZlIHRvIGJlCi0JIHJlbW92ZWQ7IHBsZWFzZSBzZWUgUFIgMzUxNTAgZm9yIGRldGFpbHMg YWJvdXQgdGhlIGlzc3VlLiAgKi8KLSAgICAgIHNlLT5leHByID0gY29udmVydCAocHZvaWRf dHlwZV9ub2RlLCBzZS0+ZXhwcik7Ci0gICAgICBzZS0+ZXhwciA9IGdmY19ldmFsdWF0ZV9u b3cgKHNlLT5leHByLCAmc2UtPnByZSk7CiAgICAgfQogICBlbHNlIGlmIChleHByLT52YWx1 ZS5mdW5jdGlvbi5pc3ltLT5pZCA9PSBHRkNfSVNZTV9DX0ZVTkxPQykKICAgICBnZmNfY29u dl9leHByX3JlZmVyZW5jZSAoc2UsIGFyZy0+ZXhwcik7CmRpZmYgLS1naXQgYS9nY2MvZm9y dHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MKaW5k ZXggNGQ1NmE3NzEzNDkuLjE5YzBlMDM4MGZiIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90 cmFucy1vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCkBAIC0y NSw5ICsyNSwxNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAg SWYgbm90IHNlZQogI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJ0cmVlLmgiCiAj aW5jbHVkZSAiZ2ZvcnRyYW4uaCIKKyNpbmNsdWRlICJiYXNpYy1ibG9jay5oIgorI2luY2x1 ZGUgInRyZWUtc3NhLmgiCisjaW5jbHVkZSAidHJlZS1wYXNzLmgiICAvKiBmb3IgUFJPUF9n aW1wbGVfYW55ICovCisjaW5jbHVkZSAiZnVuY3Rpb24uaCIKKyNpbmNsdWRlICJnaW1wbGUu aCIKICNpbmNsdWRlICJnaW1wbGUtZXhwci5oIgogI2luY2x1ZGUgInRyYW5zLmgiCiAjaW5j bHVkZSAic3RyaW5ncG9vbC5oIgorI2luY2x1ZGUgImNncmFwaC5oIgogI2luY2x1ZGUgImZv bGQtY29uc3QuaCIKICNpbmNsdWRlICJnaW1wbGlmeS5oIgkvKiBGb3IgY3JlYXRlX3RtcF92 YXJfcmF3LiAgKi8KICNpbmNsdWRlICJ0cmFucy1zdG10LmgiCkBAIC00MCw2ICs0Niw5IEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAj aW5jbHVkZSAib21wLWdlbmVyYWwuaCIKICNpbmNsdWRlICJvbXAtbG93LmgiCiAjaW5jbHVk ZSAibWVtbW9kZWwuaCIgIC8qIEZvciBNRU1NT0RFTF8gZW51bXMuICAqLworI2luY2x1ZGUg InN0b3ItbGF5b3V0LmgiCisjaW5jbHVkZSAiZ2ltcGxlLWl0ZXJhdG9yLmgiCisjaW5jbHVk ZSAiZ2ltcGxpZnktbWUuaCIKIAogI3VuZGVmIEdDQ19ESUFHX1NUWUxFCiAjZGVmaW5lIEdD Q19ESUFHX1NUWUxFIF9fZ2NjX3RkaWFnX18KQEAgLTMyMywyMiArMzMyLDI1IEBAIGdmY19v bXBfcmVwb3J0X2RlY2wgKHRyZWUgZGVjbCkKICAgcmV0dXJuIGRlY2w7CiB9CiAKLS8qIFJl dHVybiB0cnVlIGlmIFRZUEUgaGFzIGFueSBhbGxvY2F0YWJsZSBjb21wb25lbnRzLiAgKi8K Ky8qIFJldHVybiB0cnVlIGlmIFRZUEUgaGFzIGFueSBhbGxvY2F0YWJsZSBjb21wb25lbnRz OworICAgaWYgcHRyX29rLCB0aGUgZGVjbCBpdHNlbGYgaXMgcGVybWl0dGVkIHRvIGhhdmUg dGhlIFBPSU5URVIgYXR0cmlidXRlLiAgKi8KIAogc3RhdGljIGJvb2wKLWdmY19oYXNfYWxs b2NfY29tcHMgKHRyZWUgdHlwZSwgdHJlZSBkZWNsKQorZ2ZjX2hhc19hbGxvY19jb21wcyAo dHJlZSB0eXBlLCB0cmVlIGRlY2wsIGJvb2wgcHRyX29rKQogewogICB0cmVlIGZpZWxkLCBm dHlwZTsKIAogICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQogICAgIHsKLSAgICAgIGlm IChHRkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRBQkxFIChkZWNsKSkKKyAgICAgIGlmIChH RkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRBQkxFIChkZWNsKQorCSAgfHwgKHB0cl9vayAm JiBHRkNfREVDTF9HRVRfU0NBTEFSX1BPSU5URVIgKGRlY2wpKSkKIAl0eXBlID0gVFJFRV9U WVBFICh0eXBlKTsKICAgICAgIGVsc2UgaWYgKEdGQ19ERUNMX0dFVF9TQ0FMQVJfUE9JTlRF UiAoZGVjbCkpCiAJcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICBpZiAoR0ZDX0RFU0NSSVBU T1JfVFlQRV9QICh0eXBlKQorICBpZiAoIXB0cl9vaworICAgICAgJiYgR0ZDX0RFU0NSSVBU T1JfVFlQRV9QICh0eXBlKQogICAgICAgJiYgKEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBl KSA9PSBHRkNfQVJSQVlfUE9JTlRFUgogCSAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5 cGUpID09IEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQpKQogICAgIHJldHVybiBmYWxzZTsKQEAg LTM1Nyw3ICszNjksNyBAQCBnZmNfaGFzX2FsbG9jX2NvbXBzICh0cmVlIHR5cGUsIHRyZWUg ZGVjbCkKICAgICAgIGlmIChHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKGZ0eXBlKQogCSAgJiYg R0ZDX1RZUEVfQVJSQVlfQUtJTkQgKGZ0eXBlKSA9PSBHRkNfQVJSQVlfQUxMT0NBVEFCTEUp CiAJcmV0dXJuIHRydWU7Ci0gICAgICBpZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAoZnR5cGUs IGZpZWxkKSkKKyAgICAgIGlmIChnZmNfaGFzX2FsbG9jX2NvbXBzIChmdHlwZSwgZmllbGQs IGZhbHNlKSkKIAlyZXR1cm4gdHJ1ZTsKICAgICB9CiAgIHJldHVybiBmYWxzZTsKQEAgLTQz NSw3ICs0NDcsNyBAQCBnZmNfb21wX3ByaXZhdGVfb3V0ZXJfcmVmICh0cmVlIGRlY2wpCiAg IGlmIChHRkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRBQkxFIChkZWNsKSkKICAgICByZXR1 cm4gdHJ1ZTsKIAotICBpZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgZGVjbCkpCisg IGlmIChnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCBkZWNsLCBmYWxzZSkpCiAgICAgcmV0 dXJuIHRydWU7CiAKICAgcmV0dXJuIGZhbHNlOwpAQCAtNTc1LDcgKzU4Nyw3IEBAIGdmY193 YWxrX2FsbG9jX2NvbXBzICh0cmVlIGRlY2wsIHRyZWUgZGVzdCwgdHJlZSB2YXIsCiAgICAg ewogICAgICAgdHJlZSBmdHlwZSA9IFRSRUVfVFlQRSAoZmllbGQpOwogICAgICAgdHJlZSBk ZWNsZiwgZGVzdGYgPSBOVUxMX1RSRUU7Ci0gICAgICBib29sIGhhc19hbGxvY19jb21wcyA9 IGdmY19oYXNfYWxsb2NfY29tcHMgKGZ0eXBlLCBmaWVsZCk7CisgICAgICBib29sIGhhc19h bGxvY19jb21wcyA9IGdmY19oYXNfYWxsb2NfY29tcHMgKGZ0eXBlLCBmaWVsZCwgZmFsc2Up OwogICAgICAgaWYgKCghR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChmdHlwZSkKIAkgICB8fCBH RkNfVFlQRV9BUlJBWV9BS0lORCAoZnR5cGUpICE9IEdGQ19BUlJBWV9BTExPQ0FUQUJMRSkK IAkgICYmICFHRkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRBQkxFIChmaWVsZCkKQEAgLTY5 OSw3ICs3MTEsNyBAQCBnZmNfb21wX2NsYXVzZV9kZWZhdWx0X2N0b3IgKHRyZWUgY2xhdXNl LCB0cmVlIGRlY2wsIHRyZWUgb3V0ZXIpCiAgICAgICAmJiAoIUdGQ19ERUNMX0dFVF9TQ0FM QVJfQUxMT0NBVEFCTEUgKE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSkKIAkgIHx8ICFQT0lO VEVSX1RZUEVfUCAodHlwZSkpKQogICAgIHsKLSAgICAgIGlmIChnZmNfaGFzX2FsbG9jX2Nv bXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSkpKQorICAgICAgaWYgKGdmY19o YXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSwgZmFsc2Up KQogCXsKIAkgIGdjY19hc3NlcnQgKG91dGVyKTsKIAkgIGdmY19zdGFydF9ibG9jayAoJmJs b2NrKTsKQEAgLTc1Miw3ICs3NjQsNyBAQCBnZmNfb21wX2NsYXVzZV9kZWZhdWx0X2N0b3Ig KHRyZWUgY2xhdXNlLCB0cmVlIGRlY2wsIHRyZWUgb3V0ZXIpCiAgIGVsc2UKICAgICBnZmNf YWRkX21vZGlmeSAoJmNvbmRfYmxvY2ssIHVuc2hhcmVfZXhwciAoZGVjbCksCiAJCSAgICBm b2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZGVjbCksIHB0cikpOwotICBpZiAoZ2ZjX2hhc19h bGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpKSkKKyAgaWYgKGdm Y19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSwgZmFs c2UpKQogICAgIHsKICAgICAgIHRyZWUgdGVtID0gZ2ZjX3dhbGtfYWxsb2NfY29tcHMgKG91 dGVyLCBkZWNsLAogCQkJCSAgICAgICBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSksCkBAIC04 ODgsNyArOTAwLDcgQEAgZ2ZjX29tcF9jbGF1c2VfY29weV9jdG9yICh0cmVlIGNsYXVzZSwg dHJlZSBkZXN0LCB0cmVlIHNyYykKICAgICAgICYmICghR0ZDX0RFQ0xfR0VUX1NDQUxBUl9B TExPQ0FUQUJMRSAoT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpKQogCSAgfHwgIVBPSU5URVJf VFlQRV9QICh0eXBlKSkpCiAgICAgewotICAgICAgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMg KHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSkpCisgICAgICBpZiAoZ2ZjX2hhc19h bGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpLCBmYWxzZSkpCiAJ ewogCSAgZ2ZjX3N0YXJ0X2Jsb2NrICgmYmxvY2spOwogCSAgZ2ZjX2FkZF9tb2RpZnkgKCZi bG9jaywgZGVzdCwgc3JjKTsKQEAgLTk0Nyw3ICs5NTksNyBAQCBnZmNfb21wX2NsYXVzZV9j b3B5X2N0b3IgKHRyZWUgY2xhdXNlLCB0cmVlIGRlc3QsIHRyZWUgc3JjKQogCQkJICAgICAg YnVpbHRpbl9kZWNsX2V4cGxpY2l0IChCVUlMVF9JTl9NRU1DUFkpLCAzLCBwdHIsCiAJCQkg ICAgICBzcmNwdHIsIHNpemUpOwogICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZjb25kX2Js b2NrLCBmb2xkX2NvbnZlcnQgKHZvaWRfdHlwZV9ub2RlLCBjYWxsKSk7Ci0gIGlmIChnZmNf aGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSkpKQorICBp ZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2Up LCBmYWxzZSkpCiAgICAgewogICAgICAgdHJlZSB0ZW0gPSBnZmNfd2Fsa19hbGxvY19jb21w cyAoc3JjLCBkZXN0LAogCQkJCSAgICAgICBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSksCkBA IC05OTIsNyArMTAwNCw3IEBAIGdmY19vbXBfY2xhdXNlX2Fzc2lnbl9vcCAodHJlZSBjbGF1 c2UsIHRyZWUgZGVzdCwgdHJlZSBzcmMpCiAgICAgICAmJiAoIUdGQ19ERUNMX0dFVF9TQ0FM QVJfQUxMT0NBVEFCTEUgKE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSkKIAkgIHx8ICFQT0lO VEVSX1RZUEVfUCAodHlwZSkpKQogICAgIHsKLSAgICAgIGlmIChnZmNfaGFzX2FsbG9jX2Nv bXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSkpKQorICAgICAgaWYgKGdmY19o YXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSwgZmFsc2Up KQogCXsKIAkgIGdmY19zdGFydF9ibG9jayAoJmJsb2NrKTsKIAkgIC8qIEZpcnN0IGRlYWxs b2MgYW55IGFsbG9jYXRhYmxlIGNvbXBvbmVudHMgaW4gREVTVC4gICovCkBAIC0xMDE0LDcg KzEwMjYsNyBAQCBnZmNfb21wX2NsYXVzZV9hc3NpZ25fb3AgKHRyZWUgY2xhdXNlLCB0cmVl IGRlc3QsIHRyZWUgc3JjKQogCiAgIGdmY19zdGFydF9ibG9jayAoJmJsb2NrKTsKIAotICBp ZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2Up KSkKKyAgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAo Y2xhdXNlKSwgZmFsc2UpKQogICAgIHsKICAgICAgIHRoZW5fYiA9IGdmY193YWxrX2FsbG9j X2NvbXBzIChkZXN0LCBOVUxMX1RSRUUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSwKIAkJ CQkgICAgIFdBTEtfQUxMT0NfQ09NUFNfRFRPUik7CkBAIC0xMTI5LDcgKzExNDEsNyBAQCBn ZmNfb21wX2NsYXVzZV9hc3NpZ25fb3AgKHRyZWUgY2xhdXNlLCB0cmVlIGRlc3QsIHRyZWUg c3JjKQogCQkJICAgICAgYnVpbHRpbl9kZWNsX2V4cGxpY2l0IChCVUlMVF9JTl9NRU1DUFkp LCAzLCBwdHIsCiAJCQkgICAgICBzcmNwdHIsIHNpemUpOwogICBnZmNfYWRkX2V4cHJfdG9f YmxvY2sgKCZjb25kX2Jsb2NrLCBmb2xkX2NvbnZlcnQgKHZvaWRfdHlwZV9ub2RlLCBjYWxs KSk7Ci0gIGlmIChnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wg KGNsYXVzZSkpKQorICBpZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVT RV9ERUNMIChjbGF1c2UpLCBmYWxzZSkpCiAgICAgewogICAgICAgdHJlZSB0ZW0gPSBnZmNf d2Fsa19hbGxvY19jb21wcyAoc3JjLCBkZXN0LAogCQkJCSAgICAgICBPTVBfQ0xBVVNFX0RF Q0wgKGNsYXVzZSksCkBAIC0xMzc2LDcgKzEzODgsNyBAQCBnZmNfb21wX2NsYXVzZV9kdG9y ICh0cmVlIGNsYXVzZSwgdHJlZSBkZWNsKQogICAgICAgJiYgKCFHRkNfREVDTF9HRVRfU0NB TEFSX0FMTE9DQVRBQkxFIChPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSkpCiAJICB8fCAhUE9J TlRFUl9UWVBFX1AgKHR5cGUpKSkKICAgICB7Ci0gICAgICBpZiAoZ2ZjX2hhc19hbGxvY19j b21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpKSkKKyAgICAgIGlmIChnZmNf aGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSksIGZhbHNl KSkKIAlyZXR1cm4gZ2ZjX3dhbGtfYWxsb2NfY29tcHMgKGRlY2wsIE5VTExfVFJFRSwKIAkJ CQkgICAgIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSwKIAkJCQkgICAgIFdBTEtfQUxMT0Nf Q09NUFNfRFRPUik7CkBAIC0xMzk2LDcgKzE0MDgsNyBAQCBnZmNfb21wX2NsYXVzZV9kdG9y ICh0cmVlIGNsYXVzZSwgdHJlZSBkZWNsKQogICAgIHRlbSA9IGdmY19jYWxsX2ZyZWUgKGRl Y2wpOwogICB0ZW0gPSBnZmNfb21wX3Vuc2hhcmVfZXhwciAodGVtKTsKIAotICBpZiAoZ2Zj X2hhc19hbGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpKSkKKyAg aWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNl KSwgZmFsc2UpKQogICAgIHsKICAgICAgIHN0bXRibG9ja190IGJsb2NrOwogICAgICAgdHJl ZSB0aGVuX2I7CkBAIC0xNDkzLDYgKzE1MDUsNyBAQCBnZmNfb21wX2ZpbmlzaF9jbGF1c2Ug KHRyZWUgYywgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wgb3BlbmFjYykKIAogICB0cmVlIGMy ID0gTlVMTF9UUkVFLCBjMyA9IE5VTExfVFJFRSwgYzQgPSBOVUxMX1RSRUU7CiAgIHRyZWUg cHJlc2VudCA9IGdmY19vbXBfY2hlY2tfb3B0aW9uYWxfYXJndW1lbnQgKGRlY2wsIHRydWUp OworICB0cmVlIG9yaWdfZGVjbCA9IE5VTExfVFJFRTsKICAgaWYgKFBPSU5URVJfVFlQRV9Q IChUUkVFX1RZUEUgKGRlY2wpKSkKICAgICB7CiAgICAgICBpZiAoIWdmY19vbXBfcHJpdmF0 aXplX2J5X3JlZmVyZW5jZSAoZGVjbCkKQEAgLTE1MDEsNyArMTUxNCw3IEBAIGdmY19vbXBf ZmluaXNoX2NsYXVzZSAodHJlZSBjLCBnaW1wbGVfc2VxICpwcmVfcCwgYm9vbCBvcGVuYWNj KQogCSAgJiYgIUdGQ19ERUNMX0NSQVlfUE9JTlRFRSAoZGVjbCkKIAkgICYmICFHRkNfREVT Q1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChkZWNsKSkpKQogCXJldHVy bjsKLSAgICAgIHRyZWUgb3JpZ19kZWNsID0gZGVjbDsKKyAgICAgIG9yaWdfZGVjbCA9IGRl Y2w7CiAKICAgICAgIGM0ID0gYnVpbGRfb21wX2NsYXVzZSAoT01QX0NMQVVTRV9MT0NBVElP TiAoYyksIE9NUF9DTEFVU0VfTUFQKTsKICAgICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5E IChjNCwgR09NUF9NQVBfUE9JTlRFUik7CkBAIC0xNTE0LDE0ICsxNTI3LDE0IEBAIGdmY19v bXBfZmluaXNoX2NsYXVzZSAodHJlZSBjLCBnaW1wbGVfc2VxICpwcmVfcCwgYm9vbCBvcGVu YWNjKQogCXsKIAkgIGMyID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sIE9N UF9DTEFVU0VfTUFQKTsKIAkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChjMiwgR09NUF9N QVBfUE9JTlRFUik7Ci0JICBPTVBfQ0xBVVNFX0RFQ0wgKGMyKSA9IGRlY2w7CisJICBPTVBf Q0xBVVNFX0RFQ0wgKGMyKSA9IHVuc2hhcmVfZXhwciAoZGVjbCk7CiAJICBPTVBfQ0xBVVNF X1NJWkUgKGMyKSA9IHNpemVfaW50ICgwKTsKIAogCSAgc3RtdGJsb2NrX3QgYmxvY2s7CiAJ ICBnZmNfc3RhcnRfYmxvY2sgKCZibG9jayk7Ci0JICB0cmVlIHB0ciA9IGRlY2w7Ci0JICBw dHIgPSBnZmNfYnVpbGRfY29uZF9hc3NpZ25fZXhwciAoJmJsb2NrLCBwcmVzZW50LCBkZWNs LAotCQkJCQkgICAgbnVsbF9wb2ludGVyX25vZGUpOworCSAgdHJlZSBwdHIgPSBnZmNfYnVp bGRfY29uZF9hc3NpZ25fZXhwciAoJmJsb2NrLCBwcmVzZW50LAorCQkJCQkJIHVuc2hhcmVf ZXhwciAoZGVjbCksCisJCQkJCQkgbnVsbF9wb2ludGVyX25vZGUpOwogCSAgZ2ltcGxpZnlf YW5kX2FkZCAoZ2ZjX2ZpbmlzaF9ibG9jayAoJmJsb2NrKSwgcHJlX3ApOwogCSAgcHRyID0g YnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgKHB0cik7CiAJICBPTVBfQ0xBVVNFX0RFQ0wgKGMp ID0gcHRyOwpAQCAtMTUzOCwxMCArMTU1MSwxMCBAQCBnZmNfb21wX2ZpbmlzaF9jbGF1c2Ug KHRyZWUgYywgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wgb3BlbmFjYykKIAl7CiAJICBjMyA9 IGJ1aWxkX29tcF9jbGF1c2UgKE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLCBPTVBfQ0xBVVNF X01BUCk7CiAJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoYzMsIEdPTVBfTUFQX1BPSU5U RVIpOwotCSAgT01QX0NMQVVTRV9ERUNMIChjMykgPSB1bnNoYXJlX2V4cHIgKGRlY2wpOwor CSAgT01QX0NMQVVTRV9ERUNMIChjMykgPSBkZWNsOwogCSAgT01QX0NMQVVTRV9TSVpFIChj MykgPSBzaXplX2ludCAoMCk7CiAJICBkZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYg KGRlY2wpOwotCSAgT01QX0NMQVVTRV9ERUNMIChjKSA9IGRlY2w7CisJICBPTVBfQ0xBVVNF X0RFQ0wgKGMpID0gdW5zaGFyZV9leHByIChkZWNsKTsKIAl9CiAgICAgfQogICBpZiAoR0ZD X0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGRlY2wpKSkKQEAgLTE1ODQsNyArMTU5 Nyw3IEBAIGdmY19vbXBfZmluaXNoX2NsYXVzZSAodHJlZSBjLCBnaW1wbGVfc2VxICpwcmVf cCwgYm9vbCBvcGVuYWNjKQogCQkJCQkJICAgOiBHT01QX01BUF9QT0lOVEVSKTsKICAgICAg IGlmIChwcmVzZW50KQogCXsKLQkgIHB0ciA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9n ZXQgKGRlY2wpOworCSAgcHRyID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAodW5z aGFyZV9leHByIChkZWNsKSk7CiAJICBwdHIgPSBnZmNfYnVpbGRfYWRkcl9leHByIChOVUxM LCBwdHIpOwogCSAgcHRyID0gZ2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4cHIgKCZibG9jaywg cHJlc2VudCwKIAkJCQkJICAgIHB0ciwgbnVsbF9wb2ludGVyX25vZGUpOwpAQCAtMTU5Nywx NSArMTYxMCwzMyBAQCBnZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3Nl cSAqcHJlX3AsIGJvb2wgb3BlbmFjYykKICAgICAgIHRyZWUgc2l6ZSA9IGNyZWF0ZV90bXBf dmFyIChnZmNfYXJyYXlfaW5kZXhfdHlwZSk7CiAgICAgICB0cmVlIGVsZW1zeiA9IFRZUEVf U0laRV9VTklUIChnZmNfZ2V0X2VsZW1lbnRfdHlwZSAodHlwZSkpOwogICAgICAgZWxlbXN6 ID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgZWxlbXN6KTsKLSAgICAg IGlmIChHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX1BPSU5URVIK LQkgIHx8IEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfUE9JTlRF Ul9DT05UKQorICAgICAgaWYgKG9yaWdfZGVjbCA9PSBOVUxMX1RSRUUpCisJb3JpZ19kZWNs ID0gZGVjbDsKKyAgICAgIGlmICghb3BlbmFjYworCSAgJiYgZ2ZjX2hhc19hbGxvY19jb21w cyAodHlwZSwgb3JpZ19kZWNsLCB0cnVlKSkKKwl7CisJICAvKiBTYXZlIGFycmF5IGRlc2Ny aXB0b3IgZm9yIHVzZSBpbiBnZmNfb21wX2RlZXBfbWFwcGluZ3ssX3AsX2NudH07CisJICAg ICBmb3JjZSBldmFsdWF0ZSB0byBlbnN1cmUgdGhhdCBpdCBpcyBub3QgZ2ltcGxpZmllZCAr IGlzIGEgZGVjbC4gICovCisJICBnZmNfYWxsb2NhdGVfbGFuZ19kZWNsIChzaXplKTsKKwkg IEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKHNpemUpID0gb3JpZ19kZWNsOworCX0KKyAg ICAgIGVudW0gZ2ZjX2FycmF5X2tpbmQgYWtpbmQgPSBHRkNfVFlQRV9BUlJBWV9BS0lORCAo dHlwZSk7CisgICAgICBpZiAoYWtpbmQgPT0gR0ZDX0FSUkFZX0FMTE9DQVRBQkxFCisJICB8 fCBha2luZCA9PSBHRkNfQVJSQVlfUE9JTlRFUgorCSAgfHwgYWtpbmQgPT0gR0ZDX0FSUkFZ X1BPSU5URVJfQ09OVAorCSAgfHwgYWtpbmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19B TExPQ0FUQUJMRQorCSAgfHwgYWtpbmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lO VEVSCisJICB8fCBha2luZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX1BPSU5URVJfQ09O VCkKIAl7CiAJICBzdG10YmxvY2tfdCBjb25kX2Jsb2NrOwogCSAgdHJlZSB0ZW0sIHRoZW5f YiwgZWxzZV9iLCB6ZXJvLCBjb25kOwogCisJICBpbnQgcmFuayA9ICgoYWtpbmQgPT0gR0ZD X0FSUkFZX0FTU1VNRURfUkFOS19BTExPQ0FUQUJMRQorCQkgICAgICAgfHwgYWtpbmQgPT0g R0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVSCisJCSAgICAgICB8fCBha2luZCA9PSBH RkNfQVJSQVlfQVNTVU1FRF9SQU5LX1BPSU5URVJfQ09OVCkKKwkJICAgICAgPyAtMSA6IEdG Q19UWVBFX0FSUkFZX1JBTksgKHR5cGUpKTsKIAkgIGdmY19pbml0X2Jsb2NrICgmY29uZF9i bG9jayk7Ci0JICB0ZW0gPSBnZmNfZnVsbF9hcnJheV9zaXplICgmY29uZF9ibG9jaywgZGVj bCwKLQkJCQkgICAgIEdGQ19UWVBFX0FSUkFZX1JBTksgKHR5cGUpKTsKKwkgIHRlbSA9IGdm Y19mdWxsX2FycmF5X3NpemUgKCZjb25kX2Jsb2NrLCB1bnNoYXJlX2V4cHIgKGRlY2wpLCBy YW5rKTsKIAkgIGdmY19hZGRfbW9kaWZ5ICgmY29uZF9ibG9jaywgc2l6ZSwgdGVtKTsKIAkg IGdmY19hZGRfbW9kaWZ5ICgmY29uZF9ibG9jaywgc2l6ZSwKIAkJCSAgZm9sZF9idWlsZDIg KE1VTFRfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCkBAIC0xNjE1LDcgKzE2NDYsNyBA QCBnZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3NlcSAqcHJlX3AsIGJv b2wgb3BlbmFjYykKIAkgIHplcm8gPSBidWlsZF9pbnRfY3N0IChnZmNfYXJyYXlfaW5kZXhf dHlwZSwgMCk7CiAJICBnZmNfYWRkX21vZGlmeSAoJmNvbmRfYmxvY2ssIHNpemUsIHplcm8p OwogCSAgZWxzZV9iID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJmNvbmRfYmxvY2spOwotCSAgdGVt ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7CisJICB0ZW0gPSBnZmNf Y29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0ICh1bnNoYXJlX2V4cHIgKGRlY2wpKTsKIAkgIHRl bSA9IGZvbGRfY29udmVydCAocHZvaWRfdHlwZV9ub2RlLCB0ZW0pOwogCSAgY29uZCA9IGZv bGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCiAJCQkJICBib29sZWFu X3R5cGVfbm9kZSwgdGVtLCBudWxsX3BvaW50ZXJfbm9kZSk7CkBAIC0xNjMyLDExICsxNjYz LDEzIEBAIGdmY19vbXBfZmluaXNoX2NsYXVzZSAodHJlZSBjLCBnaW1wbGVfc2VxICpwcmVf cCwgYm9vbCBvcGVuYWNjKQogCXsKIAkgIHN0bXRibG9ja190IGNvbmRfYmxvY2s7CiAJICB0 cmVlIHRoZW5fYjsKLQorCSAgaW50IHJhbmsgPSAoKGFraW5kID09IEdGQ19BUlJBWV9BU1NV TUVEX1JBTksKKwkJICAgICAgIHx8IGFraW5kID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktf Q09OVCkKKwkJICAgICAgPyAtMSA6IEdGQ19UWVBFX0FSUkFZX1JBTksgKHR5cGUpKTsKIAkg IGdmY19pbml0X2Jsb2NrICgmY29uZF9ibG9jayk7CiAJICBnZmNfYWRkX21vZGlmeSAoJmNv bmRfYmxvY2ssIHNpemUsCi0JCQkgIGdmY19mdWxsX2FycmF5X3NpemUgKCZjb25kX2Jsb2Nr LCBkZWNsLAotCQkJCQkgICAgICAgR0ZDX1RZUEVfQVJSQVlfUkFOSyAodHlwZSkpKTsKKwkJ CSAgZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAoJmNvbmRfYmxvY2ssIHVuc2hhcmVfZXhwciAoZGVj bCksCisJCQkJCSAgICAgICByYW5rKSk7CiAJICBnZmNfYWRkX21vZGlmeSAoJmNvbmRfYmxv Y2ssIHNpemUsCiAJCQkgIGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIGdmY19hcnJheV9pbmRl eF90eXBlLAogCQkJCSAgICAgICBzaXplLCBlbGVtc3opKTsKQEAgLTE2NDcsOSArMTY4MCwx MiBAQCBnZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3NlcSAqcHJlX3As IGJvb2wgb3BlbmFjYykKIAl9CiAgICAgICBlbHNlCiAJeworCSAgaW50IHJhbmsgPSAoKGFr aW5kID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTksKKwkJICAgICAgIHx8IGFraW5kID09IEdG Q19BUlJBWV9BU1NVTUVEX1JBTktfQ09OVCkKKwkJICAgICAgPyAtMSA6IEdGQ19UWVBFX0FS UkFZX1JBTksgKHR5cGUpKTsKIAkgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIHNpemUsCi0J CQkgIGdmY19mdWxsX2FycmF5X3NpemUgKCZibG9jaywgZGVjbCwKLQkJCQkJICAgICAgIEdG Q19UWVBFX0FSUkFZX1JBTksgKHR5cGUpKSk7CisJCQkgIGdmY19mdWxsX2FycmF5X3NpemUg KCZibG9jaywgdW5zaGFyZV9leHByIChkZWNsKSwKKwkJCQkJICAgICAgIHJhbmspKTsKIAkg IGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIHNpemUsCiAJCQkgIGZvbGRfYnVpbGQyIChNVUxU X0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBlLAogCQkJCSAgICAgICBzaXplLCBlbGVtc3op KTsKQEAgLTE2NTgsMTEgKzE2OTQsMzAgQEAgZ2ZjX29tcF9maW5pc2hfY2xhdXNlICh0cmVl IGMsIGdpbXBsZV9zZXEgKnByZV9wLCBib29sIG9wZW5hY2MpCiAgICAgICB0cmVlIHN0bXQg PSBnZmNfZmluaXNoX2Jsb2NrICgmYmxvY2spOwogICAgICAgZ2ltcGxpZnlfYW5kX2FkZCAo c3RtdCwgcHJlX3ApOwogICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChPTVBfQ0xB VVNFX1NJWkUgKGMpID09IE5VTExfVFJFRSkKKwlPTVBfQ0xBVVNFX1NJWkUgKGMpCisJICA9 IERFQ0xfUCAoZGVjbCkgPyBERUNMX1NJWkVfVU5JVCAoZGVjbCkKKwkJCSAgOiBUWVBFX1NJ WkVfVU5JVCAoVFJFRV9UWVBFIChkZWNsKSk7CisKKyAgICAgIHRyZWUgdHlwZSA9IFRSRUVf VFlQRSAoZGVjbCk7CisgICAgICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpICYmIFBPSU5U RVJfVFlQRV9QIChUUkVFX1RZUEUgKHR5cGUpKSkKKwl0eXBlID0gVFJFRV9UWVBFICh0eXBl KTsKKyAgICAgIGlmICghb3BlbmFjYworCSAgJiYgb3JpZ19kZWNsICE9IE5VTExfVFJFRQor CSAgJiYgZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgb3JpZ19kZWNsLCB0cnVlKSkKKwl7 CisJICAvKiBTYXZlIGFycmF5IGRlc2NyaXB0b3IgZm9yIHVzZSBpbiBnZmNfb21wX2RlZXBf bWFwcGluZ3ssX3AsX2NudH07CisJICAgICBmb3JjZSBldmFsdWF0ZSB0byBlbnN1cmUgdGhh dCBpdCBpcyBub3QgZ2ltcGxpZmllZCArIGlzIGEgZGVjbC4gICovCisJICB0cmVlIHNpemUg PSBjcmVhdGVfdG1wX3ZhciAoVFJFRV9UWVBFIChPTVBfQ0xBVVNFX1NJWkUgKGMpKSk7CisJ ICBnZmNfYWxsb2NhdGVfbGFuZ19kZWNsIChzaXplKTsKKwkgIEdGQ19ERUNMX1NBVkVEX0RF U0NSSVBUT1IgKHNpemUpID0gb3JpZ19kZWNsOworCSAgZ2ltcGxpZnlfYXNzaWduIChzaXpl LCBPTVBfQ0xBVVNFX1NJWkUgKGMpLCBwcmVfcCk7CisJICBPTVBfQ0xBVVNFX1NJWkUgKGMp ID0gc2l6ZTsKKwl9CisgICAgfQogICB0cmVlIGxhc3QgPSBjOwotICBpZiAoT01QX0NMQVVT RV9TSVpFIChjKSA9PSBOVUxMX1RSRUUpCi0gICAgT01QX0NMQVVTRV9TSVpFIChjKQotICAg ICAgPSBERUNMX1AgKGRlY2wpID8gREVDTF9TSVpFX1VOSVQgKGRlY2wpCi0JCSAgICAgIDog VFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoZGVjbCkpOwogICBpZiAoZ2ltcGxpZnlfZXhw ciAoJk9NUF9DTEFVU0VfU0laRSAoYyksIHByZV9wLAogCQkgICAgIE5VTEwsIGlzX2dpbXBs ZV92YWwsIGZiX3J2YWx1ZSkgPT0gR1NfRVJST1IpCiAgICAgT01QX0NMQVVTRV9TSVpFIChj KSA9IHNpemVfaW50ICgwKTsKQEAgLTE2ODUsNiArMTc0MCwxMjg5IEBAIGdmY19vbXBfZmlu aXNoX2NsYXVzZSAodHJlZSBjLCBnaW1wbGVfc2VxICpwcmVfcCwgYm9vbCBvcGVuYWNjKQog ICAgIH0KIH0KIAorI2RlZmluZSBHRkNfTUFQX1RPS0VOX0RBVEEgMAorI2RlZmluZSBHRkNf TUFQX1RPS0VOX1NJWkVTIDEKKyNkZWZpbmUgR0ZDX01BUF9UT0tFTl9LSU5EUyAyCisjZGVm aW5lIEdGQ19NQVBfVE9LRU5fREFUQV9PRkZTRVQgMworI2RlZmluZSBHRkNfTUFQX1RPS0VO X09GRlNFVCA0CisjZGVmaW5lIEdGQ19NQVBfVE9LRU5fRkxBR1MgNQorI2RlZmluZSBHRkNf TUFQX1RPS0VOX0RFVEFDSCA2CisKK3N0YXRpYyB0cmVlCitnZmNfb21wX2dldF90b2tlbl9k YXRhICh0cmVlIHRva2VuKQoreworICB0b2tlbiA9IFRZUEVfRklFTERTIChUUkVFX1RZUEUg KHRva2VuKSk7CisgIHJldHVybiBnZmNfYWR2YW5jZV9jaGFpbiAodG9rZW4sIEdGQ19NQVBf VE9LRU5fREFUQSk7Cit9CisKK3N0YXRpYyB0cmVlCitnZmNfb21wX2dldF90b2tlbl9zaXpl cyAodHJlZSB0b2tlbikKK3sKKyAgdG9rZW4gPSBUWVBFX0ZJRUxEUyAoVFJFRV9UWVBFICh0 b2tlbikpOworICByZXR1cm4gZ2ZjX2FkdmFuY2VfY2hhaW4gKHRva2VuLCBHRkNfTUFQX1RP S0VOX1NJWkVTKTsKK30KKworc3RhdGljIHRyZWUKK2dmY19vbXBfZ2V0X3Rva2VuX2tpbmRz ICh0cmVlIHRva2VuKQoreworICB0b2tlbiA9IFRZUEVfRklFTERTIChUUkVFX1RZUEUgKHRv a2VuKSk7CisgIHJldHVybiBnZmNfYWR2YW5jZV9jaGFpbiAodG9rZW4sIEdGQ19NQVBfVE9L RU5fS0lORFMpOworfQorCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9nZXRfdG9rZW5fb2Zmc2V0 X2RhdGEgKHRyZWUgdG9rZW4pCit7CisgIHRva2VuID0gVFlQRV9GSUVMRFMgKFRSRUVfVFlQ RSAodG9rZW4pKTsKKyAgcmV0dXJuIGdmY19hZHZhbmNlX2NoYWluICh0b2tlbiwgR0ZDX01B UF9UT0tFTl9EQVRBX09GRlNFVCk7Cit9CisKK3N0YXRpYyB0cmVlCitnZmNfb21wX2dldF90 b2tlbl9vZmZzZXQgKHRyZWUgdG9rZW4pCit7CisgIHRva2VuID0gVFlQRV9GSUVMRFMgKFRS RUVfVFlQRSAodG9rZW4pKTsKKyAgcmV0dXJuIGdmY19hZHZhbmNlX2NoYWluICh0b2tlbiwg R0ZDX01BUF9UT0tFTl9PRkZTRVQpOworfQorCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9nZXRf dG9rZW5fZmxhZ3MgKHRyZWUgdG9rZW4pCit7CisgIHRva2VuID0gVFlQRV9GSUVMRFMgKFRS RUVfVFlQRSAodG9rZW4pKTsKKyAgcmV0dXJuIGdmY19hZHZhbmNlX2NoYWluICh0b2tlbiwg R0ZDX01BUF9UT0tFTl9GTEFHUyk7Cit9CisKK3N0YXRpYyB0cmVlCitnZmNfb21wX2dldF90 b2tlbl9kZXRhY2ggKHRyZWUgdG9rZW4pCit7CisgIHRva2VuID0gVFlQRV9GSUVMRFMgKFRS RUVfVFlQRSAodG9rZW4pKTsKKyAgcmV0dXJuIGdmY19hZHZhbmNlX2NoYWluICh0b2tlbiwg R0ZDX01BUF9UT0tFTl9ERVRBQ0gpOworfQorCisjdW5kZWYgR0ZDX01BUF9UT0tFTl9EQVRB CisjdW5kZWYgR0ZDX01BUF9UT0tFTl9TSVpFUworI3VuZGVmIEdGQ19NQVBfVE9LRU5fS0lO RFMKKyN1bmRlZiBHRkNfTUFQX1RPS0VOX09GRlNFVF9EQVRBCisjdW5kZWYgR0ZDX01BUF9U T0tFTl9PRkZTRVQKKyN1bmRlZiBHRkNfTUFQX1RPS0VOX0ZMQUdTCisjdW5kZWYgR0ZDX01B UF9UT0tFTl9ERVRBQ0gKKworLyogUmV0dXJucyBhIHJlY29yZCB0eXBlIHRvIHN0b3JlIHRo ZSBhcnJheXMgdXNlZCBmb3IgbWFwcGluZy4gICovCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9n ZXRfbWFwX3Rva2VuX3R5cGUgKGJvb2wgcG9pbnRlcikKK3sKKyAgc3RhdGljIHRyZWUgZGVj bCA9IE5VTExfVFJFRTsKKyAgaWYgKGRlY2wgIT0gTlVMTF9UUkVFKQorICAgIHJldHVybiBw b2ludGVyID8gYnVpbGRfcG9pbnRlcl90eXBlIChkZWNsKSA6IGRlY2w7CisgIGRlY2wgPSBt YWtlX25vZGUgKFJFQ09SRF9UWVBFKTsKKyAgVFlQRV9OQU1FIChkZWNsKSA9IGdldF9pZGVu dGlmaWVyICgibWFwX3Rva2VuX3QiKTsKKyAgVFlQRV9OQU1FTEVTUyAoZGVjbCkgPSAxOwor CisgIHRyZWUgdHlwZSA9IHB0cl90eXBlX25vZGU7CisgIHR5cGUgPSBidWlsZF9wb2ludGVy X3R5cGUgKHB0cl90eXBlX25vZGUpOworICB0cmVlIGZpZWxkID0gYnVpbGRfZGVjbCAoVU5L Tk9XTl9MT0NBVElPTiwgRklFTERfREVDTCwKKwkJCSAgIGdldF9pZGVudGlmaWVyICgiZGF0 YSIpLCB0eXBlKTsKKyAgVFlQRV9GSUVMRFMgKGRlY2wpID0gZmllbGQ7CisgIERFQ0xfQ09O VEVYVCAoZmllbGQpID0gZGVjbDsKKyAgc3VwcHJlc3Nfd2FybmluZyAoZmllbGQpOworCisg IHR5cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKHNpemVfdHlwZV9ub2RlKTsKKyAgdHJlZSBm aWVsZDIgPSBidWlsZF9kZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBGSUVMRF9ERUNMLAorCQkJ ICAgIGdldF9pZGVudGlmaWVyICgic2l6ZXMiKSwgdHlwZSk7CisgIERFQ0xfQ0hBSU4gKGZp ZWxkKSA9IGZpZWxkMjsKKyAgREVDTF9DT05URVhUIChmaWVsZDIpID0gZGVjbDsKKyAgc3Vw cHJlc3Nfd2FybmluZyAoZmllbGQyKTsKKworICB0eXBlID0gYnVpbGRfcG9pbnRlcl90eXBl IChzaG9ydF91bnNpZ25lZF90eXBlX25vZGUpOworICBmaWVsZCA9IGJ1aWxkX2RlY2wgKFVO S05PV05fTE9DQVRJT04sIEZJRUxEX0RFQ0wsCisJCSAgICAgIGdldF9pZGVudGlmaWVyICgi a2luZHMiKSwgdHlwZSk7CisgIERFQ0xfQ0hBSU4gKGZpZWxkMikgPSBmaWVsZDsKKyAgREVD TF9DT05URVhUIChmaWVsZCkgPSBkZWNsOworICBzdXBwcmVzc193YXJuaW5nIChmaWVsZCk7 CisKKyAgZmllbGQyID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgRklFTERfREVD TCwKKwkJICAgICAgZ2V0X2lkZW50aWZpZXIgKCJvZmZzZXRfZGF0YSIpLCBzaXplX3R5cGVf bm9kZSk7CisgIERFQ0xfQ0hBSU4gKGZpZWxkKSA9IGZpZWxkMjsKKyAgREVDTF9DT05URVhU IChmaWVsZDIpID0gZGVjbDsKKyAgc3VwcHJlc3Nfd2FybmluZyAoZmllbGQyKTsKKworICBm aWVsZCA9IGJ1aWxkX2RlY2wgKFVOS05PV05fTE9DQVRJT04sIEZJRUxEX0RFQ0wsCisJCSAg ICAgIGdldF9pZGVudGlmaWVyICgib2Zmc2V0IiksIHNpemVfdHlwZV9ub2RlKTsKKyAgREVD TF9DSEFJTiAoZmllbGQyKSA9IGZpZWxkOworICBERUNMX0NPTlRFWFQgKGZpZWxkKSA9IGRl Y2w7CisgIHN1cHByZXNzX3dhcm5pbmcgKGZpZWxkKTsKKworICBmaWVsZDIgPSBidWlsZF9k ZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBGSUVMRF9ERUNMLAorCQkgICAgICAgZ2V0X2lkZW50 aWZpZXIgKCJmbGFncyIpLCBzaG9ydF91bnNpZ25lZF90eXBlX25vZGUpOworICBERUNMX0NI QUlOIChmaWVsZCkgPSBmaWVsZDI7CisgIERFQ0xfQ09OVEVYVCAoZmllbGQyKSA9IGRlY2w7 CisgIHN1cHByZXNzX3dhcm5pbmcgKGZpZWxkMik7CisKKyAgZmllbGQgPSBidWlsZF9kZWNs IChVTktOT1dOX0xPQ0FUSU9OLCBGSUVMRF9ERUNMLAorCQkgICAgICAgZ2V0X2lkZW50aWZp ZXIgKCJkZXRhY2giKSwgYm9vbGVhbl90eXBlX25vZGUpOworICBERUNMX0NIQUlOIChmaWVs ZDIpID0gZmllbGQ7CisgIERFQ0xfQ09OVEVYVCAoZmllbGQpID0gZGVjbDsKKyAgc3VwcHJl c3Nfd2FybmluZyAoZmllbGQpOworCisgIGxheW91dF90eXBlIChkZWNsKTsKKworICByZXR1 cm4gcG9pbnRlciA/IGJ1aWxkX3BvaW50ZXJfdHlwZSAoZGVjbCkgOiBkZWNsOworfQorCisK Ky8qIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIEZvcnRyYW4gX19jYWxsYmFja188ZGVyaXZl ZC10eXBlPiBmdW5jdGlvbi4gICovCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9nZXRfY2JfdHlw ZSAoKQoreworICB0cmVlIHR5cGU7CisgIHR5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xp c3QgKHNpemVfdHlwZV9ub2RlLCBwdHJfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOworICB0eXBl ID0gYnVpbGRfcG9pbnRlcl90eXBlICh0eXBlKTsKKyAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9u X3R5cGVfbGlzdCAoc2l6ZV90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsIHB0cl90eXBlX25v ZGUsCisJCQkJICAgc2l6ZV90eXBlX25vZGUsIHR5cGUsIE5VTExfVFJFRSk7CisgIHR5cGUg PSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKHNpemVfdHlwZV9ub2RlLCB0eXBlLCBwdHJf dHlwZV9ub2RlLAorCQkJCSAgIHB0cl90eXBlX25vZGUsIE5VTExfVFJFRSk7CisgIHJldHVy biB0eXBlOworfQorCisvKiBHZW5lcmF0ZSBjYWxsIGJhY2sgZnVuY3Rpb24sIGVpdGhlciBv bmUgd2hpY2ggY291bnRzIGFsbG9jIGNvbXBzCisgICBvciBvbmUgd2hpY2ggbWFwcy4gKi8K Kworc3RhdGljIHRyZWUKK2dmY19vbXBfZ2VuX2RlZXBfbWFwX2ZuIChib29sIGNvdW50X2Zu KQoreworICB0cmVlIG9sZF9jb250ZXh0ID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICB0 cmVlIGRlY2wsIHR5cGUsIHRtcCwgY2JfZm4sIHRva2VuLCBkYXRhLCBzaXplLCBmbGFnOwor ICBsb2NhdGlvbl90IGxvYyA9IFVOS05PV05fTE9DQVRJT047CisKKyAgaWYgKG9sZF9jb250 ZXh0KQorICAgIHsKKyAgICAgIHB1c2hfZnVuY3Rpb25fY29udGV4dCAoKTsKKyAgICAgIGN1 cnJlbnRfZnVuY3Rpb25fZGVjbCA9IE5VTExfVFJFRTsKKyAgICB9CisKKyAgdHlwZSA9IGdm Y19vbXBfZ2V0X2NiX3R5cGUgKCk7CisgIHR5cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKHR5 cGUpOworICB0eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChzaXplX3R5cGVfbm9k ZSwKKwkJCQkgICBjb3VudF9mbiA/IHB0cl90eXBlX25vZGUKKwkJCQkJICAgIDogZ2ZjX29t cF9nZXRfbWFwX3Rva2VuX3R5cGUgKHRydWUpLAorCQkJCSAgIGJ1aWxkX3BvaW50ZXJfdHlw ZSAocHRyX3R5cGVfbm9kZSksCisJCQkJICAgc2l6ZV90eXBlX25vZGUsIHNob3J0X2ludGVn ZXJfdHlwZV9ub2RlLAorCQkJCSAgIHR5cGUsIE5VTExfVFJFRSk7CisgIGRlY2wgPSBidWls ZF9kZWNsIChsb2MsIEZVTkNUSU9OX0RFQ0wsCisJCSAgICAgZ2V0X2lkZW50aWZpZXIgKGNv dW50X2ZuID8gR0ZDX1BSRUZJWCAoIm9tcF9jb3VudCIpCisJCQkJCSAgICAgIDogR0ZDX1BS RUZJWCAoIm9tcF9tYXAiKSksIHR5cGUpOworICBUUkVFX1NUQVRJQyAoZGVjbCkgPSAxOwor ICBUUkVFX1VTRUQgKGRlY2wpID0gMTsKKyAgREVDTF9BUlRJRklDSUFMIChkZWNsKSA9IDE7 CisgIERFQ0xfSUdOT1JFRF9QIChkZWNsKSA9IDA7CisgIERFQ0xfVU5JTkxJTkFCTEUgKGRl Y2wpID0gMTsKKyAgVFJFRV9QVUJMSUMgKGRlY2wpID0gMDsKKyAgREVDTF9FWFRFUk5BTCAo ZGVjbCkgPSAwOworICBERUNMX0lOSVRJQUwgKGRlY2wpID0gbWFrZV9ub2RlIChCTE9DSyk7 CisgIEJMT0NLX1NVUEVSQ09OVEVYVCAoREVDTF9JTklUSUFMIChkZWNsKSkgPSBkZWNsOwor CisgIHRtcCA9IGJ1aWxkX2RlY2wgKGxvYywgUkVTVUxUX0RFQ0wsIE5VTExfVFJFRSwgc2l6 ZV90eXBlX25vZGUpOworICBERUNMX0FSVElGSUNJQUwgKHRtcCkgPSAxOworICBERUNMX0lH Tk9SRURfUCAodG1wKSA9IDE7CisgIERFQ0xfQ09OVEVYVCAodG1wKSA9IGRlY2w7CisgIERF Q0xfUkVTVUxUIChkZWNsKSA9IHRtcDsKKworICAvKiBEZWNsYXJlIGl0cyBhcmdzLiAgKi8K KyAgdHJlZSBhcmdsaXN0ID0gTlVMTF9UUkVFOworICB0cmVlIHR5cGVsaXN0ID0gVFlQRV9B UkdfVFlQRVMgKFRSRUVfVFlQRSAoZGVjbCkpOworICB0bXAgPSBUUkVFX1ZBTFVFICh0eXBl bGlzdCk7CisgIHRva2VuID0gYnVpbGRfZGVjbCAobG9jLCBQQVJNX0RFQ0wsIGdldF9pZGVu dGlmaWVyICgidG9rZW4iKSwgdG1wKTsKKyAgREVDTF9DT05URVhUICh0b2tlbikgPSBkZWNs OworICBERUNMX0FSR19UWVBFICh0b2tlbikgPSBUUkVFX1ZBTFVFICh0eXBlbGlzdCk7Cisg IFRSRUVfUkVBRE9OTFkgKHRva2VuKSA9IDE7CisgIGFyZ2xpc3QgPSBjaGFpbm9uIChhcmds aXN0LCB0b2tlbik7CisKKyAgdHlwZWxpc3QgPSBUUkVFX0NIQUlOICh0eXBlbGlzdCk7Cisg IHRtcCA9IFRSRUVfVkFMVUUgKHR5cGVsaXN0KTsKKyAgZGF0YSA9IGJ1aWxkX2RlY2wgKGxv YywgUEFSTV9ERUNMLCBnZXRfaWRlbnRpZmllciAoImRhdGEiKSwgdG1wKTsKKyAgREVDTF9D T05URVhUIChkYXRhKSA9IGRlY2w7CisgIERFQ0xfQVJHX1RZUEUgKGRhdGEpID0gVFJFRV9W QUxVRSAodHlwZWxpc3QpOworICBUUkVFX1JFQURPTkxZIChkYXRhKSA9IDE7CisgIGFyZ2xp c3QgPSBjaGFpbm9uIChhcmdsaXN0LCBkYXRhKTsKKworICB0eXBlbGlzdCA9IFRSRUVfQ0hB SU4gKHR5cGVsaXN0KTsKKyAgdG1wID0gVFJFRV9WQUxVRSAodHlwZWxpc3QpOworICBzaXpl ID0gYnVpbGRfZGVjbCAobG9jLCBQQVJNX0RFQ0wsIGdldF9pZGVudGlmaWVyICgic2l6ZSIp LCB0bXApOworICBERUNMX0NPTlRFWFQgKHNpemUpID0gZGVjbDsKKyAgREVDTF9BUkdfVFlQ RSAoc2l6ZSkgPSBUUkVFX1ZBTFVFICh0eXBlbGlzdCk7CisgIFRSRUVfUkVBRE9OTFkgKHNp emUpID0gMTsKKyAgYXJnbGlzdCA9IGNoYWlub24gKGFyZ2xpc3QsIHNpemUpOworCisgIHR5 cGVsaXN0ID0gVFJFRV9DSEFJTiAodHlwZWxpc3QpOworICB0bXAgPSBUUkVFX1ZBTFVFICh0 eXBlbGlzdCk7CisgIGZsYWcgPSBidWlsZF9kZWNsIChsb2MsIFBBUk1fREVDTCwgZ2V0X2lk ZW50aWZpZXIgKCJmbGFnIiksIHRtcCk7CisgIERFQ0xfQ09OVEVYVCAoZmxhZykgPSBkZWNs OworICBERUNMX0FSR19UWVBFIChmbGFnKSA9IFRSRUVfVkFMVUUgKHR5cGVsaXN0KTsKKyAg VFJFRV9SRUFET05MWSAoZmxhZykgPSAxOworICBhcmdsaXN0ID0gY2hhaW5vbiAoYXJnbGlz dCwgZmxhZyk7CisKKyAgdHlwZWxpc3QgPSBUUkVFX0NIQUlOICh0eXBlbGlzdCk7CisgIHRt cCA9IFRSRUVfVkFMVUUgKHR5cGVsaXN0KTsKKyAgY2JfZm4gPSBidWlsZF9kZWNsIChsb2Ms IFBBUk1fREVDTCwgZ2V0X2lkZW50aWZpZXIgKCJjYl9mbiIpLCB0bXApOworICBERUNMX0NP TlRFWFQgKGNiX2ZuKSA9IGRlY2w7CisgIERFQ0xfQVJHX1RZUEUgKGNiX2ZuKSA9IFRSRUVf VkFMVUUgKHR5cGVsaXN0KTsKKyAgVFJFRV9SRUFET05MWSAoY2JfZm4pID0gMTsKKyAgYXJn bGlzdCA9IGNoYWlub24gKGFyZ2xpc3QsIGNiX2ZuKTsKKworICBERUNMX0FSR1VNRU5UUyAo ZGVjbCkgPSBhcmdsaXN0OworICBwdXNoX3N0cnVjdF9mdW5jdGlvbiAoZGVjbCk7CisgIHB1 c2hfZ2ltcGxpZnlfY29udGV4dCAodHJ1ZSk7CisgIGluaXRfdHJlZV9zc2EgKGNmdW4pOwor CisgIC8qIEJvZHkuICovCisgIGdpbXBsZV9zZXEgc2VxID0gTlVMTDsKKworICAvKiBuID0g MCAqLworICBpZiAoY291bnRfZm4pCisgICAgeworICAgICAgLyogRm9yIGFsbG9jYXRhYmxl cyArIHZ0YWJsZToKKwkgaWYgKChmbGFnID09IEdGQ19DTEFTU19DQl9BTExPQ0FUQUJMRSB8 fCBmbGFnID09IEdGQ19DTEFTU19DQl9WVEFCTEUpCisJICAgICAmJiBzaXplICE9IDApCisJ ICAgbiA9IDE7CisJIGlmICgoZmxhZyA9PSBHRkNfQ0xBU1NfQ0JfQUxMT0NBVEFCTEUgfHwg ZmxhZyA9PSBHRkNfQ0xBU1NfQ0JfVlRBQkxFKQorCSAgICAgJiYgc2l6ZSAhPSAwICYmIGNi X2ZuKQorCSAgIG4gPSBuICsgY2JfZm4gKC4uLikKKwkgcmV0dXJuIG47ICovCisgICAgICB0 cmVlIG51bSA9IGJ1aWxkX2RlY2wgKGxvYywgVkFSX0RFQ0wsIGNyZWF0ZV90bXBfdmFyX25h bWUgKCJuIiksCisJCQkgICAgIHNpemVfdHlwZV9ub2RlKTsKKyAgICAgIHRtcCA9IGZvbGRf YnVpbGQyX2xvYyAobG9jLCBNT0RJRllfRVhQUiwgc2l6ZV90eXBlX25vZGUsIG51bSwKKwkJ CSAgICAgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsCisJCQkJCSAgICBHRkNfQ0xB U1NfQ0JfQUxMT0NBVEFCTEUpKTsKKyAgICAgIGdpbXBsaWZ5X2FuZF9hZGQgKHRtcCwgJnNl cSk7CisKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBFUV9FWFBSLCBib29s ZWFuX3R5cGVfbm9kZSwgZmxhZywKKwkJCSAgICAgYnVpbGRfemVyb19jc3QgKHNob3J0X2lu dGVnZXJfdHlwZV9ub2RlKSk7CisgICAgICB0cmVlIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2Mg KGxvYywgRVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIGZsYWcsCisJCQkJICAgYnVpbGRf aW50X2NzdCAoc2hvcnRfaW50ZWdlcl90eXBlX25vZGUsCisJCQkJCQkgIEdGQ19DTEFTU19D Ql9WVEFCTEUpKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBUUlVUSF9P Ul9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgdG1wLCBjb25kKTsKKyAgICAgIGNvbmQgPSBm b2xkX2J1aWxkMl9sb2MgKGxvYywgTkVfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIHNpemUs CisJCQkgICAgICBidWlsZF96ZXJvX2NzdCAoc2l6ZV90eXBlX25vZGUpKTsKKyAgICAgIGNv bmQgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgVFJVVEhfQU5EX0VYUFIsIGJvb2xlYW5fdHlw ZV9ub2RlLAorCQkJICAgICAgdG1wLCBjb25kKTsKKyAgICAgIHRtcCA9IGJ1aWxkMyAoQ09O RF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgY29uZCwKKwkJICAgIGZvbGRfYnVpbGQyX2xvYyAo bG9jLCBNT0RJRllfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQkJICAgICBudW0sIGJ1aWxk X2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCAxKSksCisJCSAgICBidWlsZF9lbXB0eV9zdG10 IChsb2MpKTsKKyAgICAgIGdpbXBsaWZ5X2FuZF9hZGQgKHRtcCwgJnNlcSk7CisKKyAgICAg IHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBORV9FWFBSLCBib29sZWFuX3R5cGVfbm9k ZSwKKwkJCSAgICAgY2JfZm4sIG51bGxfcG9pbnRlcl9ub2RlKTsKKyAgICAgIGNvbmQgPSBm b2xkX2J1aWxkMl9sb2MgKGxvYywgVFJVVEhfQU5EX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2Rl LAorCQkJICAgICAgY29uZCwgdG1wKTsKKyAgICAgIHRtcCA9IGJ1aWxkX2NhbGxfZXhwcl9s b2MgKGxvYywgYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIGNiX2ZuKSwKKwkJ CQkgNCwgYnVpbGRfZm9sZF9hZGRyX2V4cHIgKGRlY2wpLCB0b2tlbiwKKwkJCQkgYnVpbGRf Zm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIGRhdGEpLAorCQkJCSBidWlsZF9pbnRfY3N0 IChzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkJCUdGQ19DTEFTU19DQUxMQkFDS19E RUZBVUxUX0ZMQUcpKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBQTFVT X0VYUFIsIHNpemVfdHlwZV9ub2RlLCBudW0sIHRtcCk7CisgICAgICB0bXAgPSBidWlsZDMg KENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUsIGNvbmQsCisJCSAgICBmb2xkX2J1aWxkMl9s b2MgKGxvYywgTU9ESUZZX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJCSAgICAgbnVtLCB0 bXApLCBidWlsZF9lbXB0eV9zdG10IChsb2MpKTsKKyAgICAgIGdpbXBsaWZ5X2FuZF9hZGQg KHRtcCwgJnNlcSk7CisKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBNT0RJ RllfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQkgICAgIERFQ0xfUkVTVUxUIChkZWNsKSwg bnVtKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQxX2xvYyAobG9jLCBSRVRVUk5fRVhQUiwg dm9pZF90eXBlX25vZGUsIHRtcCk7CisgICAgICBnaW1wbGlmeV9hbmRfYWRkICh0bXAsICZz ZXEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE1hcCBhbGxvY2F0YWJsZXMg YW5kIHRoZSB2dGFibGUKKwkgaWYgKGZsYWcgIT0gMCAmJiBmbGFnICE9IDIpIHx8IHNpemUg PT0gMCkKKwkgICBnb3RvIHJldHVybl9sYWJlbAorCSBtYXAoPGZsYWc+OiA8KnRva2VuLmRh dGE+IFtsZW46IDxzaXplPl0pCisJIG1hcCgodG9rZW4uZGV0YWNoID8gZGV0YWNoIDogYXR0 YWNoKToKKwkgICAgIDx0b2tlbi5kYXRhPiBbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBdKQor CSBpZiAoIWNiX2ZuKQorCSAgIGdvdG8gcmV0dXJuX2xhYmVsCisJIGNiX2ZuICguLi4pCisJ IHJldHVybl9sYWJlbDoKKwkgcmV0dXJuIDAgKi8KKworICAgICAgdHJlZSByZXR1cm5fbGFi ZWwgPSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9jKTsKKyAgICAgIHRyZWUgY29udF9s YWJlbCA9IGNyZWF0ZV9hcnRpZmljaWFsX2xhYmVsIChsb2MpOworICAgICAgdG1wID0gZm9s ZF9idWlsZDJfbG9jIChsb2MsIE5FX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBmbGFnLAor CQkJICAgICBidWlsZF9pbnRfY3N0IChzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkJ ICAgIEdGQ19DTEFTU19DQl9BTExPQ0FUQUJMRSkpOworICAgICAgdHJlZSBjb25kID0gZm9s ZF9idWlsZDJfbG9jIChsb2MsIE5FX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBmbGFnLAor CQkJCSAgIGJ1aWxkX2ludF9jc3QgKHNob3J0X2ludGVnZXJfdHlwZV9ub2RlLAorCQkJCQkJ ICBHRkNfQ0xBU1NfQ0JfVlRBQkxFKSk7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2Mg KGxvYywgVFJVVEhfQU5EX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCB0bXAsIGNvbmQpOwor ICAgICAgY29uZCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBFUV9FWFBSLCBib29sZWFuX3R5 cGVfbm9kZSwgc2l6ZSwKKwkJCSAgICAgIGJ1aWxkX3plcm9fY3N0IChzaXplX3R5cGVfbm9k ZSkpOworICAgICAgY29uZCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBUUlVUSF9PUl9FWFBS LCBib29sZWFuX3R5cGVfbm9kZSwKKwkJCSAgICAgIHRtcCwgY29uZCk7CisgICAgICB0bXAg PSBidWlsZDMgKENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUsIGNvbmQsCisJCSAgICBmb2xk X2J1aWxkMV9sb2MgKGxvYywgR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwKKwkJCQkgICAg IHJldHVybl9sYWJlbCksIGJ1aWxkX2VtcHR5X3N0bXQgKGxvYykpOworICAgICAgZ2ltcGxp ZnlfYW5kX2FkZCAodG1wLCAmc2VxKTsKKworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAo JnNlcSwKKwkJCSAgIGdpbXBsZV9idWlsZF9jb25kIChFUV9FWFBSLCBzaXplLCBzaXplX3pl cm9fbm9kZSwKKwkJCQkJICAgICAgcmV0dXJuX2xhYmVsLCBjb250X2xhYmVsKSk7CisgICAg ICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmc2VxLCBnaW1wbGVfYnVpbGRfbGFiZWwgKGNvbnRf bGFiZWwpKTsKKworICAgICAgLyogZGF0YVtvZmZzZXRfZGF0YV0gPSAqdG9rZW4uZGF0YTsg Ki8KKyAgICAgIHRva2VuID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIHRv a2VuKTsKKyAgICAgIHRyZWUgb25lID0gYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUs IDEpOworICAgICAgdHJlZSBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX2RhdGEgKHRva2Vu KTsKKyAgICAgIHRyZWUgb2Zmc2V0X2ZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fb2Zmc2V0 X2RhdGEgKHRva2VuKTsKKyAgICAgIHRyZWUgb2Zmc2V0ID0gZm9sZF9idWlsZDNfbG9jIChs b2MsIENPTVBPTkVOVF9SRUYsCisJCQkJICAgICBUUkVFX1RZUEUgKG9mZnNldF9maWVsZCks IHRva2VuLAorCQkJCSAgICAgb2Zmc2V0X2ZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgdHJl ZSB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBF IChmaWVsZCksCisJCQkJICB0b2tlbiwgZmllbGQsIE5VTExfVFJFRSk7CisgICAgICB0bXAg PSBidWlsZDJfbG9jIChsb2MsIFBPSU5URVJfUExVU19FWFBSLCBUUkVFX1RZUEUgKHRtcCks IHRtcCwKKwkJCWJ1aWxkMl9sb2MgKGxvYywgTVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwK KwkJCVRZUEVfU0laRV9VTklUIChwdHJfdHlwZV9ub2RlKSwgb2Zmc2V0KSk7CisgICAgICBn aW1wbGVfc2VxIHNlcTIgPSBOVUxMOworICAgICAgdG1wID0gZm9yY2VfZ2ltcGxlX29wZXJh bmQgKHRtcCwgJnNlcTIsIHRydWUsIE5VTExfVFJFRSk7CisgICAgICBnaW1wbGVfc2VxX2Fk ZF9zZXEgKCZzZXEsIHNlcTIpOworICAgICAgdG1wID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9y ZWZfbG9jIChsb2MsIHRtcCk7CisgICAgICBnaW1wbGlmeV9hc3NpZ24gKHRtcCwgYnVpbGRf Zm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIGRhdGEpLCAmc2VxKTsKKworICAgICAgLyog dG9rZW4ub2Zmc2V0X2RhdGErKyAqLworICAgICAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQ TFVTX0VYUFIsIHNpemVfdHlwZV9ub2RlLCBvZmZzZXQsCisJCQlvbmUpOworICAgICAgZ2lt cGxpZnlfYXNzaWduIChvZmZzZXQsIHRtcCwgJnNlcSk7CisKKyAgICAgIC8qIGRhdGFbb2Zm c2V0X2RhdGFdID0gZGF0YS4gICovCisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxv YywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksCisJCQkgICAgIHRva2VuLCBm aWVsZCwgTlVMTF9UUkVFKTsKKyAgICAgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUE9JTlRF Ul9QTFVTX0VYUFIsIFRSRUVfVFlQRSAodG1wKSwgdG1wLAorCQkJYnVpbGQyX2xvYyAobG9j LCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJVFlQRV9TSVpFX1VOSVQgKHB0cl90 eXBlX25vZGUpLCBvZmZzZXQpKTsKKyAgICAgIHNlcTIgPSBOVUxMOworICAgICAgdG1wID0g Zm9yY2VfZ2ltcGxlX29wZXJhbmQgKHRtcCwgJnNlcTIsIHRydWUsIE5VTExfVFJFRSk7Cisg ICAgICBnaW1wbGVfc2VxX2FkZF9zZXEgKCZzZXEsIHNlcTIpOworICAgICAgdG1wID0gYnVp bGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIHRtcCk7CisgICAgICBnaW1wbGlmeV9h c3NpZ24gKHRtcCwgZGF0YSwgJnNlcSk7CisKKyAgICAgIC8qIHRva2VuLm9mZnNldF9kYXRh KysgKi8KKyAgICAgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUExVU19FWFBSLCBzaXplX3R5 cGVfbm9kZSwgb2Zmc2V0LAorCQkJb25lKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAodW5z aGFyZV9leHByIChvZmZzZXQpLCB0bXAsICZzZXEpOworCisgICAgICAvKiBzaXplc1tvZmZz ZXRdID0gc2l6ZS4gKi8KKyAgICAgIGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fc2l6ZXMg KHRva2VuKTsKKyAgICAgIG9mZnNldF9maWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX29mZnNl dCAodG9rZW4pOworICAgICAgb2Zmc2V0ID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBP TkVOVF9SRUYsIFRSRUVfVFlQRSAob2Zmc2V0X2ZpZWxkKSwKKwkJCQl0b2tlbiwgb2Zmc2V0 X2ZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgdG1wID0gZm9sZF9idWlsZDNfbG9jIChsb2Ms IENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLAorCQkJICAgICB0b2tlbiwgZmll bGQsIE5VTExfVFJFRSk7CisgICAgICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIFBPSU5URVJf UExVU19FWFBSLCBUUkVFX1RZUEUgKHRtcCksIHRtcCwKKwkJCWJ1aWxkMl9sb2MgKGxvYywg TVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwKKwkJCVRZUEVfU0laRV9VTklUIChwdHJfdHlw ZV9ub2RlKSwgb2Zmc2V0KSk7CisgICAgICBzZXEyID0gTlVMTDsKKyAgICAgIHRtcCA9IGZv cmNlX2dpbXBsZV9vcGVyYW5kICh0bXAsICZzZXEyLCB0cnVlLCBOVUxMX1RSRUUpOworICAg ICAgZ2ltcGxlX3NlcV9hZGRfc2VxICgmc2VxLCBzZXEyKTsKKyAgICAgIHRtcCA9IGJ1aWxk X2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOworICAgICAgZ2ltcGxpZnlfYXNz aWduICh0bXAsIHNpemUsICZzZXEpOworCisgICAgICAvKiBGSVhNRTogdGtpbmQgfD0gdGFs aWduIDw8IHRhbGlnbl9zaGlmdDsgKi8KKyAgICAgIC8qIGtpbmRzW29mZnNldF0gPSAoZmxh ZyA9PSAyKSA/ICd0bycgOiB0a2luZC4gKi8KKyAgICAgIGZpZWxkID0gZ2ZjX29tcF9nZXRf dG9rZW5fa2luZHMgKHRva2VuKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAobG9j LCBDT01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKGZpZWxkKSwKKwkJCSAgICAgdG9rZW4sIGZp ZWxkLCBOVUxMX1RSRUUpOworICAgICAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQT0lOVEVS X1BMVVNfRVhQUiwgVFJFRV9UWVBFICh0bXApLCB0bXAsCisJCQlidWlsZDJfbG9jIChsb2Ms IE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQkJICAgIFRZUEVfU0laRV9VTklUIChz aG9ydF91bnNpZ25lZF90eXBlX25vZGUpLAorCQkJCQkJICAgIG9mZnNldCkpOworICAgICAg c2VxMiA9IE5VTEw7CisgICAgICB0bXAgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAodG1wLCAm c2VxMiwgdHJ1ZSwgTlVMTF9UUkVFKTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3NlcSAoJnNl cSwgc2VxMik7CisgICAgICBjb25kID0gZm9sZF9idWlsZDJfbG9jIChsb2MsIEVRX0VYUFIs IGJvb2xlYW5fdHlwZV9ub2RlLCBmbGFnLAorCQkJCSAgIGJ1aWxkX2ludF9jc3QgKHNob3J0 X2ludGVnZXJfdHlwZV9ub2RlLAorCQkJCQkJICBHRkNfQ0xBU1NfQ0JfVlRBQkxFKSk7Cisg ICAgICB0cmVlIHRtcDIgPSBmb2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5UX1JFRiwK KwkJCQkgICBUUkVFX1RZUEUgKERFQ0xfQ0hBSU4gKG9mZnNldF9maWVsZCkpLCB0b2tlbiwK KwkJCQkgICBERUNMX0NIQUlOIChvZmZzZXRfZmllbGQpLCBOVUxMX1RSRUUpOworICAgICAg dG1wMiA9IGJ1aWxkMyAoQ09ORF9FWFBSLCBzaG9ydF91bnNpZ25lZF90eXBlX25vZGUsIGNv bmQsCisJCSAgICAgYnVpbGRfaW50X2NzdCAoc2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlLCBH T01QX01BUF9UTyksCisJCSAgICAgdG1wMik7CisgICAgICB0bXAgPSBidWlsZF9mb2xkX2lu ZGlyZWN0X3JlZl9sb2MgKGxvYywgdG1wKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAodG1w LCB0bXAyLCAmc2VxKTsKKworICAgICAgLyogdG9rZW4ub2Zmc2V0KysgKi8KKyAgICAgIHRt cCA9IGJ1aWxkMl9sb2MgKGxvYywgUExVU19FWFBSLCBzaXplX3R5cGVfbm9kZSwgb2Zmc2V0 LAorCQkJb25lKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAob2Zmc2V0LCB0bXAsICZzZXEp OworCisgICAgICAvKiBzaXplc1tvZmZzZXRdID0gMCAoPSBiaWFzKS4gICovCisgICAgICBm aWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX3NpemVzICh0b2tlbik7CisgICAgICB0bXAgPSBm b2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCks CisJCQkgICAgIHRva2VuLCBmaWVsZCwgTlVMTF9UUkVFKTsKKyAgICAgIHRtcCA9IGJ1aWxk Ml9sb2MgKGxvYywgUE9JTlRFUl9QTFVTX0VYUFIsIFRSRUVfVFlQRSAodG1wKSwgdG1wLAor CQkJYnVpbGQyX2xvYyAobG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJVFlQ RV9TSVpFX1VOSVQgKHB0cl90eXBlX25vZGUpLAorCQkJZm9sZF9idWlsZDNfbG9jIChsb2Ms IENPTVBPTkVOVF9SRUYsCisJCQkJCSBUUkVFX1RZUEUgKG9mZnNldF9maWVsZCksIHRva2Vu LAorCQkJCQkgb2Zmc2V0X2ZpZWxkLCBOVUxMX1RSRUUpKSk7CisgICAgICBzZXEyID0gTlVM TDsKKyAgICAgIHRtcCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kICh0bXAsICZzZXEyLCB0cnVl LCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc2VxICgmc2VxLCBzZXEyKTsK KyAgICAgIHRtcCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOwor ICAgICAgZ2ltcGxpZnlfYXNzaWduICh0bXAsIGJ1aWxkX3plcm9fY3N0IChzaXplX3R5cGVf bm9kZSksICZzZXEpOworCisgICAgICAvKiBraW5kW29mZnNldF0gPSAodG9rZW4uZGV0YWNo ID8gR09NUF9NQVBfREVUQUNIIDogR09NUF9NQVBfQVRUQUNILiAqLworICAgICAgZmllbGQg PSBnZmNfb21wX2dldF90b2tlbl9kZXRhY2ggKHRva2VuKTsKKyAgICAgIHRtcDIgPSBmb2xk X2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksIHRv a2VuLAorCQkJICAgICAgZmllbGQsIE5VTExfVFJFRSk7CisgICAgICB0bXAyID0gZm9sZF9i dWlsZDJfbG9jIChsb2MsIE5FX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLAorCQkJICAgICAg dG1wMiwgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAodG1wMikpKTsKKyAgICAgIHRtcDIg PSBidWlsZDMgKENPTkRfRVhQUiwgc2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlLCB0bXAyLAor CQkgICAgIGJ1aWxkX2ludF9jc3QgKHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZSwgR09NUF9N QVBfREVUQUNIKSwKKwkJICAgICBidWlsZF9pbnRfY3N0IChzaG9ydF91bnNpZ25lZF90eXBl X25vZGUsIEdPTVBfTUFQX0FUVEFDSCkpOworCisgICAgICBmaWVsZCA9IGdmY19vbXBfZ2V0 X3Rva2VuX2tpbmRzICh0b2tlbik7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxv YywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksCisJCQkgICAgIHRva2VuLCBm aWVsZCwgTlVMTF9UUkVFKTsKKyAgICAgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUE9JTlRF Ul9QTFVTX0VYUFIsIFRSRUVfVFlQRSAodG1wKSwgdG1wLAorCQkJYnVpbGQyX2xvYyAobG9j LCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJVFlQRV9TSVpFX1VOSVQgKHNob3J0 X3Vuc2lnbmVkX3R5cGVfbm9kZSksCisJCQlmb2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9O RU5UX1JFRiwKKwkJCQkJIFRSRUVfVFlQRSAob2Zmc2V0X2ZpZWxkKSwgdG9rZW4sCisJCQkJ CSBvZmZzZXRfZmllbGQsIE5VTExfVFJFRSkpKTsKKyAgICAgIHNlcTIgPSBOVUxMOworICAg ICAgdG1wID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKHRtcCwgJnNlcTIsIHRydWUsIE5VTExf VFJFRSk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zZXEgKCZzZXEsIHNlcTIpOworICAgICAg dG1wID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIHRtcCk7CisgICAgICBn aW1wbGlmeV9hc3NpZ24gKHRtcCwgdG1wMiwgJnNlcSk7CisKKyAgICAgIC8qIHRva2VuLm9m ZnNldCsrICovCisgICAgICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIFBMVVNfRVhQUiwgc2l6 ZV90eXBlX25vZGUsIG9mZnNldCwgb25lKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAodW5z aGFyZV9leHByIChvZmZzZXQpLCB0bXAsICZzZXEpOworCisgICAgICAvKiBpZiAoY2JfZm4p CisJICAgZ290byByZXR1cm5fbGFiZWwKKwkgY2JfZm4gKC4uLikgKi8KKworICAgICAgY29u dF9sYWJlbCA9IGNyZWF0ZV9hcnRpZmljaWFsX2xhYmVsIChsb2MpOworICAgICAgZ2ltcGxl X3NlcV9hZGRfc3RtdCAoJnNlcSwKKwkJCSAgIGdpbXBsZV9idWlsZF9jb25kIChFUV9FWFBS LCBjYl9mbiwgbnVsbF9wb2ludGVyX25vZGUsCisJCQkJCSAgICAgIHJldHVybl9sYWJlbCwg Y29udF9sYWJlbCkpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJnNlcSwgZ2ltcGxl X2J1aWxkX2xhYmVsIChjb250X2xhYmVsKSk7CisgICAgICB0bXAgPSBidWlsZF9jYWxsX2V4 cHJfbG9jIChsb2MsIGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCBjYl9mbiks CisJCQkJIDQsIGJ1aWxkX2ZvbGRfYWRkcl9leHByIChkZWNsKSwKKwkJCQkgVFJFRV9PUEVS QU5EICh0b2tlbiwgMCksCisJCQkJIGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9j LCBkYXRhKSwKKwkJCQkgYnVpbGRfaW50X2NzdCAoc2hvcnRfaW50ZWdlcl90eXBlX25vZGUs CisJCQkJCQlHRkNfQ0xBU1NfQ0FMTEJBQ0tfREVGQVVMVF9GTEFHKSk7CisgICAgICBnaW1w bGlmeV9hbmRfYWRkICh0bXAsICZzZXEpOworCisgICAgICAvKiByZXR1cm5fbGFiZWw6CisJ IHJldHVybiAwICovCisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmc2VxLCBnaW1wbGVf YnVpbGRfbGFiZWwgKHJldHVybl9sYWJlbCkpOworICAgICAgdG1wID0gZm9sZF9idWlsZDJf bG9jIChsb2MsIE1PRElGWV9FWFBSLCBzaXplX3R5cGVfbm9kZSwKKwkJCSAgICAgREVDTF9S RVNVTFQgKGRlY2wpLAorCQkJICAgICBidWlsZF96ZXJvX2NzdCAoc2l6ZV90eXBlX25vZGUp KTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQxX2xvYyAobG9jLCBSRVRVUk5fRVhQUiwgdm9p ZF90eXBlX25vZGUsIHRtcCk7CisgICAgICBnaW1wbGlmeV9hbmRfYWRkICh0bXAsICZzZXEp OworICAgIH0KKworICBwb3BfZ2ltcGxpZnlfY29udGV4dCAoTlVMTCk7CisgIGdpbXBsZV9z ZXRfYm9keSAoZGVjbCwgZ2ltcGxlX2J1aWxkX2JpbmQgKE5VTExfVFJFRSwgc2VxLCBOVUxM KSk7CisgIGNmdW4tPmZ1bmN0aW9uX2VuZF9sb2N1cyA9IGxvYzsKKyAgY2Z1bi0+Y3Vycl9w cm9wZXJ0aWVzIHw9IFBST1BfZ2ltcGxlX2FueTsKKyAgcG9wX2NmdW4gKCk7CisgIGNncmFw aF9ub2RlOjphZGRfbmV3X2Z1bmN0aW9uIChkZWNsLCB0cnVlKTsKKworICBpZiAob2xkX2Nv bnRleHQpCisgICAgcG9wX2Z1bmN0aW9uX2NvbnRleHQgKCk7CisgIGN1cnJlbnRfZnVuY3Rp b25fZGVjbCA9IG9sZF9jb250ZXh0OworICByZXR1cm4gZGVjbDsKK30KKworLyogbWFwKDxm bGFnPjogZGF0YSBbbGVuOiA8c2l6ZT5dKQorICAgbWFwKGF0dGFjaDogJmRhdGEgW2JpYXM6 IDxiaWFzPl0pCisgICBvZmZzZXQgKz0gMjsgb2Zmc2V0X2RhdGEgKz0gMiAqLworc3RhdGlj IHZvaWQKK2dmY19vbXBfZGVlcF9tYXBwaW5nX21hcCAodHJlZSBkYXRhLCB0cmVlIHNpemUs IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdGtpbmQsCisJCQkgIGxvY2F0aW9uX3QgbG9jLCB0 cmVlIGRhdGFfYXJyYXksIHRyZWUgc2l6ZXNfYXJyYXksCisJCQkgIHRyZWUga2luZHNfYXJy YXksIHRyZWUgb2Zmc2V0X2RhdGEsIHRyZWUgb2Zmc2V0LAorCQkJICBnaW1wbGVfc2VxICpz ZXEsIGNvbnN0IGdpbXBsZSAqY3R4KQoreworICB0cmVlIG9uZSA9IGJ1aWxkX2ludF9jc3Qg KHNpemVfdHlwZV9ub2RlLCAxKTsKKworICBTVFJJUF9OT1BTIChkYXRhKTsKKyAgaWYgKCFQ T0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChkYXRhKSkpCisgICAgeworICAgICAgZ2NjX2Fz c2VydCAoVFJFRV9DT0RFIChkYXRhKSA9PSBJTkRJUkVDVF9SRUYpOworICAgICAgZGF0YSA9 IFRSRUVfT1BFUkFORCAoZGF0YSwgMCk7CisgICAgfQorCisgIC8qIGRhdGFfYXJyYXlbb2Zm c2V0X2RhdGFdID0gZGF0YTsgKi8KKyAgdHJlZSB0bXAgPSBidWlsZDQgKEFSUkFZX1JFRiwg VFJFRV9UWVBFIChUUkVFX1RZUEUgKGRhdGFfYXJyYXkpKSwKKwkJICAgICB1bnNoYXJlX2V4 cHIgKGRhdGFfYXJyYXkpLCBvZmZzZXRfZGF0YSwKKwkJICAgICBOVUxMX1RSRUUsIE5VTExf VFJFRSk7CisgIGdpbXBsaWZ5X2Fzc2lnbiAodG1wLCBkYXRhLCBzZXEpOworCisgIC8qIG9m ZnNldF9kYXRhKysgKi8KKyAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQTFVTX0VYUFIsIHNp emVfdHlwZV9ub2RlLCBvZmZzZXRfZGF0YSwgb25lKTsKKyAgZ2ltcGxpZnlfYXNzaWduIChv ZmZzZXRfZGF0YSwgdG1wLCBzZXEpOworCisgIC8qIGRhdGFfYXJyYXlbb2Zmc2V0X2RhdGFd ID0gJmRhdGE7ICovCisgIHRtcCA9IGJ1aWxkNCAoQVJSQVlfUkVGLCBUUkVFX1RZUEUgKFRS RUVfVFlQRSAoZGF0YV9hcnJheSkpLAorCQl1bnNoYXJlX2V4cHIgKGRhdGFfYXJyYXkpLAor CQlvZmZzZXRfZGF0YSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICBnaW1wbGlmeV9hc3Np Z24gKHRtcCwgYnVpbGRfZm9sZF9hZGRyX2V4cHIgKGRhdGEpLCBzZXEpOworCisgIC8qIG9m ZnNldF9kYXRhKysgKi8KKyAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQTFVTX0VYUFIsIHNp emVfdHlwZV9ub2RlLCBvZmZzZXRfZGF0YSwgb25lKTsKKyAgZ2ltcGxpZnlfYXNzaWduIChv ZmZzZXRfZGF0YSwgdG1wLCBzZXEpOworCisgIC8qIHNpemVzX2FycmF5W29mZnNldF0gPSBz aXplICovCisgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgTVVMVF9FWFBSLCBzaXplX3R5cGVf bm9kZSwKKwkJICAgIFRZUEVfU0laRV9VTklUIChzaXplX3R5cGVfbm9kZSksIG9mZnNldCk7 CisgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUE9JTlRFUl9QTFVTX0VYUFIsIFRSRUVfVFlQ RSAoc2l6ZXNfYXJyYXkpLAorCQkgICAgc2l6ZXNfYXJyYXksIHRtcCk7CisgIGdpbXBsZV9z ZXEgc2VxMiA9IE5VTEw7CisgIHRtcCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kICh0bXAsICZz ZXEyLCB0cnVlLCBOVUxMX1RSRUUpOworICBnaW1wbGVfc2VxX2FkZF9zZXEgKHNlcSwgc2Vx Mik7CisgIHRtcCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOwor ICBnaW1wbGlmeV9hc3NpZ24gKHRtcCwgc2l6ZSwgc2VxKTsKKworICAvKiBGSVhNRTogdGtp bmQgfD0gdGFsaWduIDw8IHRhbGlnbl9zaGlmdDsgKi8KKyAgLyoga2luZHNfYXJyYXlbb2Zm c2V0XSA9IHRraW5kLiAqLworICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIE1VTFRfRVhQUiwg c2l6ZV90eXBlX25vZGUsCisJCSAgICBUWVBFX1NJWkVfVU5JVCAoc2hvcnRfdW5zaWduZWRf dHlwZV9ub2RlKSwgb2Zmc2V0KTsKKyAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQT0lOVEVS X1BMVVNfRVhQUiwgVFJFRV9UWVBFIChraW5kc19hcnJheSksCisJCSAgICBraW5kc19hcnJh eSwgdG1wKTsKKyAgc2VxMiA9IE5VTEw7CisgIHRtcCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5k ICh0bXAsICZzZXEyLCB0cnVlLCBOVUxMX1RSRUUpOworICBnaW1wbGVfc2VxX2FkZF9zZXEg KHNlcSwgc2VxMik7CisgIHRtcCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9j LCB0bXApOworICBnaW1wbGlmeV9hc3NpZ24gKHRtcCwgYnVpbGRfaW50X2NzdCAoc2hvcnRf dW5zaWduZWRfdHlwZV9ub2RlLCB0a2luZCksIHNlcSk7CisKKyAgLyogb2Zmc2V0KysgKi8K KyAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQTFVTX0VYUFIsIHNpemVfdHlwZV9ub2RlLCBv ZmZzZXQsIG9uZSk7CisgIGdpbXBsaWZ5X2Fzc2lnbiAob2Zmc2V0LCB0bXAsIHNlcSk7CisK KyAgLyogc2l6ZXNfYXJyYXlbb2Zmc2V0XSA9IGJpYXMgKD0gMCkuICAqLworICB0bXAgPSBi dWlsZDJfbG9jIChsb2MsIE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCSAgICBUWVBF X1NJWkVfVU5JVCAoc2l6ZV90eXBlX25vZGUpLCBvZmZzZXQpOworICB0bXAgPSBidWlsZDJf bG9jIChsb2MsIFBPSU5URVJfUExVU19FWFBSLCBUUkVFX1RZUEUgKHNpemVzX2FycmF5KSwK KwkJICAgIHNpemVzX2FycmF5LCB0bXApOworICBzZXEyID0gTlVMTDsKKyAgdG1wID0gZm9y Y2VfZ2ltcGxlX29wZXJhbmQgKHRtcCwgJnNlcTIsIHRydWUsIE5VTExfVFJFRSk7CisgIGdp bXBsZV9zZXFfYWRkX3NlcSAoc2VxLCBzZXEyKTsKKyAgdG1wID0gYnVpbGRfZm9sZF9pbmRp cmVjdF9yZWZfbG9jIChsb2MsIHRtcCk7CisgIGdpbXBsaWZ5X2Fzc2lnbiAodG1wLCBidWls ZF96ZXJvX2NzdCAoc2l6ZV90eXBlX25vZGUpLCBzZXEpOworCisgIGdjY19hc3NlcnQgKGdp bXBsZV9jb2RlIChjdHgpID09IEdJTVBMRV9PTVBfVEFSR0VUKTsKKyAgdGtpbmQgPSAoZ2lt cGxlX29tcF90YXJnZXRfa2luZCAoY3R4KSA9PSBHRl9PTVBfVEFSR0VUX0tJTkRfRVhJVF9E QVRBCisJICAgPyBHT01QX01BUF9ERVRBQ0ggOiBHT01QX01BUF9BVFRBQ0gpOworCisgIC8q IGtpbmRzX2FycmF5W29mZnNldF0gPSB0a2luZC4gKi8KKyAgdG1wID0gYnVpbGQyX2xvYyAo bG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkgICAgVFlQRV9TSVpFX1VOSVQg KHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZSksIG9mZnNldCk7CisgIHRtcCA9IGJ1aWxkMl9s b2MgKGxvYywgUE9JTlRFUl9QTFVTX0VYUFIsIFRSRUVfVFlQRSAoa2luZHNfYXJyYXkpLAor CQkgICAga2luZHNfYXJyYXksIHRtcCk7CisgIHNlcTIgPSBOVUxMOworICB0bXAgPSBmb3Jj ZV9naW1wbGVfb3BlcmFuZCAodG1wLCAmc2VxMiwgdHJ1ZSwgTlVMTF9UUkVFKTsKKyAgZ2lt cGxlX3NlcV9hZGRfc2VxIChzZXEsIHNlcTIpOworICB0bXAgPSBidWlsZF9mb2xkX2luZGly ZWN0X3JlZl9sb2MgKGxvYywgdG1wKTsKKyAgZ2ltcGxpZnlfYXNzaWduICh0bXAsIGJ1aWxk X2ludF9jc3QgKHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZSwgdGtpbmQpLCBzZXEpOworCisg IC8qIG9mZnNldCsrICovCisgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUExVU19FWFBSLCBz aXplX3R5cGVfbm9kZSwgb2Zmc2V0LCBvbmUpOworICBnaW1wbGlmeV9hc3NpZ24gKG9mZnNl dCwgdG1wLCBzZXEpOworfQorCitzdGF0aWMgdm9pZCBnZmNfb21wX2RlZXBfbWFwcGluZ19p dGVtIChib29sLCBib29sLCBib29sLCBsb2NhdGlvbl90LCB0cmVlLAorCQkJCSAgICAgICB0 cmVlICosIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIHRyZWUsCisJCQkJICAgICAgIHRyZWUs IHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJICAgICAgIGdpbXBsZV9zZXEgKiwgY29u c3QgZ2ltcGxlICopOworCisvKiBNYXAgYWxsb2NhdGFibGUgY29tcG9uZW50cy4gICovCitz dGF0aWMgdm9pZAorZ2ZjX29tcF9kZWVwX21hcHBpbmdfY29tcHMgKGJvb2wgaXNfY250LCBs b2NhdGlvbl90IGxvYywgdHJlZSBkZWNsLAorCQkJICAgIHRyZWUgKnRva2VuLCB1bnNpZ25l ZCBIT1NUX1dJREVfSU5UIHRraW5kLAorCQkJICAgIHRyZWUgZGF0YV9hcnJheSwgdHJlZSBz aXplc19hcnJheSwgdHJlZSBraW5kc19hcnJheSwKKwkJCSAgICB0cmVlIG9mZnNldF9kYXRh LCB0cmVlIG9mZnNldCwgdHJlZSBudW0sCisJCQkgICAgZ2ltcGxlX3NlcSAqc2VxLCBjb25z dCBnaW1wbGUgKmN0eCkKK3sKKyAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChkZWNsKTsKKyAg aWYgKFRSRUVfQ09ERSAodHlwZSkgIT0gUkVDT1JEX1RZUEUpCisgICAgcmV0dXJuOworICBm b3IgKHRyZWUgZmllbGQgPSBUWVBFX0ZJRUxEUyAodHlwZSk7IGZpZWxkOyBmaWVsZCA9IERF Q0xfQ0hBSU4gKGZpZWxkKSkKKyAgICB7CisgICAgICB0eXBlID0gVFJFRV9UWVBFIChmaWVs ZCk7CisgICAgICBpZiAoZ2ZjX2lzX3BvbHltb3JwaGljX25vbnB0ciAodHlwZSkKKwkgIHx8 IEdGQ19ERUNMX0dFVF9TQ0FMQVJfQUxMT0NBVEFCTEUgKGZpZWxkKQorCSAgfHwgKEdGQ19E RVNDUklQVE9SX1RZUEVfUCAodHlwZSkKKwkgICAgICAmJiBHRkNfVFlQRV9BUlJBWV9BS0lO RCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FMTE9DQVRBQkxFKSkKKwl7CisJICB0cmVlIHRtcCA9 IGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKGZpZWxk KSwKKwkJCQkgICAgICBkZWNsLCBmaWVsZCwgTlVMTF9UUkVFKTsKKwkgIGdmY19vbXBfZGVl cF9tYXBwaW5nX2l0ZW0gKGlzX2NudCwgdHJ1ZSwgdHJ1ZSwgbG9jLCB0bXAsIHRva2VuLAor CQkJCSAgICAgdGtpbmQsIGRhdGFfYXJyYXksIHNpemVzX2FycmF5LAorCQkJCSAgICAga2lu ZHNfYXJyYXksIG9mZnNldF9kYXRhLCBvZmZzZXQsIG51bSwKKwkJCQkgICAgIHNlcSwgY3R4 KTsKKwl9CisgICAgICBlbHNlIGlmIChHRkNfREVDTF9HRVRfU0NBTEFSX1BPSU5URVIgKGZp ZWxkKQorCSAgICAgICB8fCBHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKHR5cGUpKQorCWNvbnRp bnVlOworICAgICAgZWxzZSBpZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAoVFJFRV9UWVBFIChm aWVsZCksIGZpZWxkLCBmYWxzZSkpCisJeworCSAgdHJlZSB0bXAgPSBmb2xkX2J1aWxkM19s b2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksCisJCQkJICAgICAg ZGVjbCwgZmllbGQsIE5VTExfVFJFRSk7CisJICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUg KHRtcCkpID09IEFSUkFZX1RZUEUpCisJICAgIGdmY19vbXBfZGVlcF9tYXBwaW5nX2l0ZW0g KGlzX2NudCwgZmFsc2UsIGZhbHNlLCBsb2MsIHRtcCwKKwkJCQkgICAgICAgdG9rZW4sIHRr aW5kLCBkYXRhX2FycmF5LCBzaXplc19hcnJheSwKKwkJCQkgICAgICAga2luZHNfYXJyYXks IG9mZnNldF9kYXRhLCBvZmZzZXQsIG51bSwKKwkJCQkgICAgICAgc2VxLCBjdHgpOworCSAg ZWxzZQorCSAgICBnZmNfb21wX2RlZXBfbWFwcGluZ19jb21wcyAoaXNfY250LCBsb2MsIHRt cCwgdG9rZW4sIHRraW5kLAorCQkJCQlkYXRhX2FycmF5LCBzaXplc19hcnJheSwga2luZHNf YXJyYXksCisJCQkJCW9mZnNldF9kYXRhLCBvZmZzZXQsIG51bSwgc2VxLCBjdHgpOworCX0K KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitnZmNfb21wX2dlbl9zaW1wbGVfbG9vcCAodHJl ZSB2YXIsIHRyZWUgYmVnaW4sIHRyZWUgZW5kLCBlbnVtIHRyZWVfY29kZSBjb25kLAorCQkJ IHRyZWUgc3RlcCwgbG9jYXRpb25fdCBsb2MsIGdpbXBsZV9zZXEgKnNlcTEsCisJCQkgZ2lt cGxlX3NlcSAqc2VxMikKK3sKKyAgdHJlZSB0bXA7CisKKyAgLyogdmFyID0gYmVnaW4uICov CisgIGdpbXBsaWZ5X2Fzc2lnbiAodmFyLCBiZWdpbiwgc2VxMSk7CisKKyAgLyogTG9vcDog Zm9yICh2YXIgPSBiZWdpbjsgdmFyIDxjb25kPiBlbmQ7IHZhciArPSBzdGVwKS4gICovCisg IHRyZWUgbGFiZWxfbG9vcCA9IGNyZWF0ZV9hcnRpZmljaWFsX2xhYmVsIChsb2MpOworICB0 cmVlIGxhYmVsX2NvbmQgPSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9jKTsKKworICBn aW1wbGlmeV9hbmRfYWRkIChmb2xkX2J1aWxkMV9sb2MgKGxvYywgR09UT19FWFBSLCB2b2lk X3R5cGVfbm9kZSwKKwkJCQkgICAgIGxhYmVsX2NvbmQpLCBzZXExKTsKKyAgZ2ltcGxlX3Nl cV9hZGRfc3RtdCAoc2VxMSwgZ2ltcGxlX2J1aWxkX2xhYmVsIChsYWJlbF9sb29wKSk7CisK KyAgLyogRXZlcnl0aGluZyBhYm92ZSBpcyBzZXExOyBwbGFjZSBsb29wIGJvZHkgaGVyZS4g ICovCisKKyAgLyogRW5kIG9mIGxvb3AgYm9keSAtPiBwdXQgaW50byBzZXEyLiAgKi8KKyAg dG1wID0gZm9sZF9idWlsZDJfbG9jIChsb2MsIFBMVVNfRVhQUiwgVFJFRV9UWVBFICh2YXIp LCB2YXIsIHN0ZXApOworICBnaW1wbGlmeV9hc3NpZ24gKHZhciwgdG1wLCBzZXEyKTsKKyAg Z2ltcGxlX3NlcV9hZGRfc3RtdCAoc2VxMiwgZ2ltcGxlX2J1aWxkX2xhYmVsIChsYWJlbF9j b25kKSk7CisgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBjb25kLCBib29sZWFuX3R5 cGVfbm9kZSwgdmFyLCBlbmQpOworICB0bXAgPSBidWlsZDNfdiAoQ09ORF9FWFBSLCB0bXAs IGJ1aWxkMV92IChHT1RPX0VYUFIsIGxhYmVsX2xvb3ApLAorCQkgIGJ1aWxkX2VtcHR5X3N0 bXQgKGxvYykpOworICBnaW1wbGlmeV9hbmRfYWRkICh0bXAsIHNlcTIpOworfQorCisvKiBS ZXR1cm4gc2l6ZSB2YXJpYWJsZSB3aXRoIHRoZSBzaXplIG9mIGFuIGFycmF5LiAgKi8KK3N0 YXRpYyB0cmVlCitnZmNfb21wX2dldF9hcnJheV9zaXplIChsb2NhdGlvbl90IGxvYywgdHJl ZSBkZXNjLCBnaW1wbGVfc2VxICpzZXEpCit7CisgIHRyZWUgdG1wOworICBnaW1wbGVfc2Vx IHNlcTEgPSBOVUxMLCBzZXEyID0gTlVMTDsKKyAgdHJlZSBzaXplID0gYnVpbGRfZGVjbCAo bG9jLCBWQVJfREVDTCwgY3JlYXRlX3RtcF92YXJfbmFtZSAoInNpemUiKSwKKwkJCSAgc2l6 ZV90eXBlX25vZGUpOworICB0cmVlIGV4dGVudCA9IGJ1aWxkX2RlY2wgKGxvYywgVkFSX0RF Q0wsIGNyZWF0ZV90bXBfdmFyX25hbWUgKCJleHRlbnQiKSwKKwkJCSAgICBnZmNfYXJyYXlf aW5kZXhfdHlwZSk7CisgIHRyZWUgaWR4ID0gYnVpbGRfZGVjbCAobG9jLCBWQVJfREVDTCwg Y3JlYXRlX3RtcF92YXJfbmFtZSAoImlkeCIpLAorCQkJIHNpZ25lZF9jaGFyX3R5cGVfbm9k ZSk7CisKKyAgdHJlZSBiZWdpbiA9IGJ1aWxkX3plcm9fY3N0IChzaWduZWRfY2hhcl90eXBl X25vZGUpOworICB0cmVlIGVuZDsKKyAgaWYgKEdGQ19UWVBFX0FSUkFZX0FLSU5EIChUUkVF X1RZUEUgKGRlc2MpKSA9PSBHRkNfQVJSQVlfQVNTVU1FRF9TSEFQRV9DT05UCisgICAgICB8 fCBHRkNfVFlQRV9BUlJBWV9BS0lORCAoVFJFRV9UWVBFIChkZXNjKSkgPT0gR0ZDX0FSUkFZ X0FTU1VNRURfU0hBUEUpCisgICAgZW5kID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9yYW5rIChk ZXNjKTsKKyAgZWxzZQorICAgIGVuZCA9IGJ1aWxkX2ludF9jc3QgKHNpZ25lZF9jaGFyX3R5 cGVfbm9kZSwKKwkJCSBHRkNfVFlQRV9BUlJBWV9SQU5LIChUUkVFX1RZUEUgKGRlc2MpKSk7 CisgIHRyZWUgc3RlcCA9IGJ1aWxkX2ludF9jc3QgKHNpZ25lZF9jaGFyX3R5cGVfbm9kZSwg MSk7CisKKyAgLyogc2l6ZSA9IDAKKyAgICAgZm9yIChpZHggPSAwOyBpZHggPCByYW5rOyBp ZHgrKykKKyAgICAgICBleHRlbnQgPSBnZmMtPmRpbVtpXS51Ym91bmQgLSBnZmMtPmRpbVtp XS5sYm91bmQgKyAxCisgICAgICAgaWYgKGV4dGVudCA8IDApIGV4dGVudCA9IDAKKwkgc2l6 ZSAqPSBleHRlbnQuICAqLworICBnaW1wbGlmeV9hc3NpZ24gKHNpemUsIGJ1aWxkX2ludF9j c3QgKHNpemVfdHlwZV9ub2RlLCAxKSwgc2VxKTsKKworICBnZmNfb21wX2dlbl9zaW1wbGVf bG9vcCAoaWR4LCBiZWdpbiwgZW5kLCBMVF9FWFBSLCBzdGVwLCBsb2MsICZzZXExLCAmc2Vx Mik7CisgIGdpbXBsZV9zZXFfYWRkX3NlcSAoc2VxLCBzZXExKTsKKworICB0bXAgPSBmb2xk X2J1aWxkMl9sb2MgKGxvYywgTUlOVVNfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCisJ CQkgZ2ZjX2NvbnZfZGVzY3JpcHRvcl91Ym91bmRfZ2V0IChkZXNjLCBpZHgpLAorCQkJIGdm Y19jb252X2Rlc2NyaXB0b3JfbGJvdW5kX2dldCAoZGVzYywgaWR4KSk7CisgIHRtcCA9IGZv bGRfYnVpbGQyX2xvYyAobG9jLCBQTFVTX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBlLAor CQkJIHRtcCwgZ2ZjX2luZGV4X29uZV9ub2RlKTsKKyAgZ2ltcGxpZnlfYXNzaWduIChleHRl bnQsIHRtcCwgc2VxKTsKKyAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChsb2MsIExUX0VYUFIs IGJvb2xlYW5fdHlwZV9ub2RlLAorCQkJIGV4dGVudCwgZ2ZjX2luZGV4X3plcm9fbm9kZSk7 CisgIHRtcCA9IGJ1aWxkM192IChDT05EX0VYUFIsIHRtcCwKKwkJICBmb2xkX2J1aWxkMl9s b2MgKGxvYywgTU9ESUZZX0VYUFIsCisJCQkJICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCisJ CQkJICAgZXh0ZW50LCBnZmNfaW5kZXhfemVyb19ub2RlKSwKKwkJICBidWlsZF9lbXB0eV9z dG10IChsb2MpKTsKKyAgZ2ltcGxpZnlfYW5kX2FkZCAodG1wLCBzZXEpOworICAvKiBzaXpl ICo9IGV4dGVudC4gICovCisgIGdpbXBsaWZ5X2Fzc2lnbiAoc2l6ZSwgZm9sZF9idWlsZDJf bG9jIChsb2MsIE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsIHNpemUsCisJCQkJCSAgZm9s ZF9jb252ZXJ0IChzaXplX3R5cGVfbm9kZSwKKwkJCQkJCQlleHRlbnQpKSwgc2VxKTsKKyAg Z2ltcGxlX3NlcV9hZGRfc2VxIChzZXEsIHNlcTIpOworICByZXR1cm4gc2l6ZTsKK30KKwor LyogR2VuZXJhdGUgbG9vcCB0byBhY2Nlc3MgZXZlcnkgYXJyYXkgZWxlbWVudDsgdGFrZXMg YWRkciBvZiBmaXJzdCBlbGVtZW50CisgICAoZGVjbCdzIGRhdGEgY29tcCk7IHJldHVybnMg bG9vcCBjb2RlIGluIHNlcTEgKyBzZXEyCisgICBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIGVs ZW1lbnQgYXMgcmV0dXJuIHZhbHVlLiAgKi8KK3N0YXRpYyB0cmVlCitnZmNfb21wX2VsbWVu dGFsX2xvb3AgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIGRlY2wsIHRyZWUgc2l6ZSwgdHJlZSBl bGVtX2xlbiwKKwkJICAgICAgIGdpbXBsZV9zZXEgKnNlcTEsIGdpbXBsZV9zZXEgKnNlcTIp Cit7CisgIHRyZWUgaWR4ID0gYnVpbGRfZGVjbCAobG9jLCBWQVJfREVDTCwgY3JlYXRlX3Rt cF92YXJfbmFtZSAoImlkeCIpLAorCQkJIHNpemVfdHlwZV9ub2RlKTsKKyAgdHJlZSBiZWdp biA9IGJ1aWxkX3plcm9fY3N0IChzaXplX3R5cGVfbm9kZSk7CisgIHRyZWUgZW5kID0gc2l6 ZTsKKyAgdHJlZSBzdGVwID0gYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsIDEpOwor ICB0cmVlIHB0cjsKKworICBnZmNfb21wX2dlbl9zaW1wbGVfbG9vcCAoaWR4LCBiZWdpbiwg ZW5kLCBMVF9FWFBSLCBzdGVwLCBsb2MsIHNlcTEsIHNlcTIpOworCisgIHRyZWUgdHlwZSA9 IFRSRUVfVFlQRSAoZGVjbCk7CisgIGlmIChQT0lOVEVSX1RZUEVfUCAodHlwZSkpCisgICAg eworICAgICAgdHlwZSA9IFRSRUVfVFlQRSAodHlwZSk7CisgICAgICBnY2NfYXNzZXJ0IChU UkVFX0NPREUgKHR5cGUpID09IEFSUkFZX1RZUEUpOworICAgICAgZGVjbCA9IGZvbGRfY29u dmVydCAoYnVpbGRfcG9pbnRlcl90eXBlIChUUkVFX1RZUEUgKHR5cGUpKSwgZGVjbCk7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFICh0eXBl KSA9PSBBUlJBWV9UWVBFKTsKKyAgICAgIGRlY2wgPSBidWlsZF9mb2xkX2FkZHJfZXhwcl9s b2MgKGxvYywgZGVjbCk7CisgICAgfQorICBkZWNsID0gZm9sZF9jb252ZXJ0IChidWlsZF9w b2ludGVyX3R5cGUgKFRSRUVfVFlQRSAodHlwZSkpLCBkZWNsKTsKKyAgdHJlZSB0bXAgPSBi dWlsZDJfbG9jIChsb2MsIE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsIGlkeCwgZWxlbV9s ZW4pOworICBwdHIgPSBidWlsZDJfbG9jIChsb2MsIFBPSU5URVJfUExVU19FWFBSLCBUUkVF X1RZUEUgKGRlY2wpLCBkZWNsLCB0bXApOworICBnaW1wbGVfc2VxIHNlcTMgPSBOVUxMOwor ICBwdHIgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAocHRyLCAmc2VxMywgdHJ1ZSwgTlVMTF9U UkVFKTsKKyAgZ2ltcGxlX3NlcV9hZGRfc2VxIChzZXExLCBzZXEzKTsKKworICByZXR1cm4g cHRyOworfQorCisKKy8qIElmIGRvX2NvcHksIGNvcHkgZGF0YSBwb2ludGVyIGFuZCB2cHRy IChpZiBhcHBsaWNhYmxlKSBhcyB3ZWxsLgorICAgT3RoZXJ3aXNlLCBvbmx5IGhhbmRsZSBh bGxvY2F0YWJsZSBjb21wb25lbnRzLgorICAgZG9fY29weSA9PSBmYWxzZSBjYW4gaGFwcGVu IG9ubHkgd2l0aCBub25wb2x5bW9ycGhpYyBhcmd1bWVudHMKKyAgIHRvIGEgY29weSBjbGF1 c2UuCisgICBpZiAoaXNfY250KSB0b2tlbiAuLi4gb2Zmc2V0IGlzIGlnbm9yZWQgYW5kIG51 bSBpcyB1c2VkLCBvdGhlcndpc2UKKyAgIG51bSBpcyBOVUxMX1RSRUUgYW5kIHVudXNlZC4g ICovCisKK3N0YXRpYyB2b2lkCitnZmNfb21wX2RlZXBfbWFwcGluZ19pdGVtIChib29sIGlz X2NudCwgYm9vbCBkb19jb3B5LCBib29sIGRvX2FsbG9jX2NoZWNrLAorCQkJICAgbG9jYXRp b25fdCBsb2MsIHRyZWUgZGVjbCwgdHJlZSAqdG9rZW4sCisJCQkgICB1bnNpZ25lZCBIT1NU X1dJREVfSU5UIHRraW5kLCB0cmVlIGRhdGFfYXJyYXksCisJCQkgICB0cmVlIHNpemVzX2Fy cmF5LCB0cmVlIGtpbmRzX2FycmF5LCB0cmVlIG9mZnNldF9kYXRhLAorCQkJICAgdHJlZSBv ZmZzZXQsIHRyZWUgbnVtLCBnaW1wbGVfc2VxICpzZXEsCisJCQkgICBjb25zdCBnaW1wbGUg KmN0eCkKK3sKKyAgc3RhdGljIHRyZWUgbWFwX2ZuID0gTlVMTF9UUkVFOworICBzdGF0aWMg dHJlZSBjbnRfZm4gPSBOVUxMX1RSRUU7CisgIHRyZWUgdG1wOworICB0cmVlIHR5cGUgPSBU UkVFX1RZUEUgKGRlY2wpOworICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQorICAgIHR5 cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworICBib29sIHBvbHkgPSBnZmNfaXNfcG9seW1vcnBo aWNfbm9ucHRyICh0eXBlKTsKKyAgdHJlZSBlbmRfbGFiZWwgPSBOVUxMX1RSRUU7CisgIHRy ZWUgc2l6ZSA9IE5VTExfVFJFRSwgZWxlbV9sZW4gPSBOVUxMX1RSRUU7CisKKyAgaWYgKGRv X2FsbG9jX2NoZWNrKQorICAgIHsKKyAgICAgIHRyZWUgdGhlbl9sYWJlbCA9IGNyZWF0ZV9h cnRpZmljaWFsX2xhYmVsIChsb2MpOworICAgICAgZW5kX2xhYmVsID0gY3JlYXRlX2FydGlm aWNpYWxfbGFiZWwgKGxvYyk7CisgICAgICB0bXAgPSBkZWNsOworICAgICAgaWYgKFRSRUVf Q09ERSAoVFJFRV9UWVBFICh0bXApKSA9PSBSRUZFUkVOQ0VfVFlQRQorCSAgfHwgKFBPSU5U RVJfVFlQRV9QIChUUkVFX1RZUEUgKHRtcCkpCisJICAgICAgJiYgKFBPSU5URVJfVFlQRV9Q IChUUkVFX1RZUEUgKFRSRUVfVFlQRSAodG1wKSkpCisJCSAgfHwgR0ZDX0RFU0NSSVBUT1Jf VFlQRV9QIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAodG1wKSkpKSkpCisJdG1wID0gYnVpbGRf Zm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIHRtcCk7CisgICAgICBpZiAocG9seSkKKwl0 bXAgPSBnZmNfY2xhc3NfZGF0YV9nZXQgKHRtcCk7CisgICAgICBpZiAoR0ZDX0RFU0NSSVBU T1JfVFlQRV9QIChUUkVFX1RZUEUgKHRtcCkpKQorCXRtcCA9IGdmY19jb252X2Rlc2NyaXB0 b3JfZGF0YV9nZXQgKHRtcCk7CisgICAgICBnaW1wbGVfc2VxIHNlcTIgPSBOVUxMOworICAg ICAgdG1wID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKHRtcCwgJnNlcTIsIHRydWUsIE5VTExf VFJFRSk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zZXEgKHNlcSwgc2VxMik7CisKKyAgICAg IGdpbXBsZV9zZXFfYWRkX3N0bXQgKHNlcSwKKwkJCSAgIGdpbXBsZV9idWlsZF9jb25kIChO RV9FWFBSLCB0bXAsIG51bGxfcG9pbnRlcl9ub2RlLAorCQkJCQkgICAgICB0aGVuX2xhYmVs LCBlbmRfbGFiZWwpKTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKHNlcSwgZ2ltcGxl X2J1aWxkX2xhYmVsICh0aGVuX2xhYmVsKSk7CisgICAgfQorICBpZiAoUE9JTlRFUl9UWVBF X1AgKFRSRUVfVFlQRSAoZGVjbCkpKQorICAgIHsKKyAgICAgIGRlY2wgPSBidWlsZF9mb2xk X2luZGlyZWN0X3JlZiAoZGVjbCk7CisgICAgICB0eXBlID0gVFJFRV9UWVBFIChkZWNsKTsK KyAgICB9CisKKyAgaWYgKCFpc19jbnQgJiYgcG9seSAmJiAqdG9rZW4gPT0gTlVMTF9UUkVF KQorICAgIHsKKyAgICAgICp0b2tlbiA9IGJ1aWxkX2RlY2wgKGlucHV0X2xvY2F0aW9uLCBW QVJfREVDTCwKKwkJCSAgIGNyZWF0ZV90bXBfdmFyX25hbWUgKCJtYXBfdG9rZW4iKSwKKwkJ CSAgIGdmY19vbXBfZ2V0X21hcF90b2tlbl90eXBlIChmYWxzZSkpOworICAgICAgZ2ltcGxl X2FkZF90bXBfdmFyICgqdG9rZW4pOworCisgICAgICAvKiB0b2tlbi5kYXRhID0gJmRhdGFf YXJyYXlbMF0gKi8KKyAgICAgIHRyZWUgZmllbGQgPSBnZmNfb21wX2dldF90b2tlbl9kYXRh ICgqdG9rZW4pOworICAgICAgdG1wID0gYnVpbGQ0IChBUlJBWV9SRUYsIFRSRUVfVFlQRSAo ZmllbGQpLCBkYXRhX2FycmF5LAorCQkgICAgYnVpbGRfemVyb19jc3QgKHNpemVfdHlwZV9u b2RlKSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxpZnlfYXNzaWduIChm b2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCks CisJCQkJCSp0b2tlbiwgZmllbGQsIE5VTExfVFJFRSksCisJCSAgICAgICBidWlsZF9mb2xk X2FkZHJfZXhwcl9sb2MgKGxvYywgdG1wKSwgc2VxKTsKKyAgICAgIC8qIHRva2VuLnNpemVz ID0gc2l6ZXMgKi8KKyAgICAgIGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fc2l6ZXMgKCp0 b2tlbik7CisgICAgICBnaW1wbGlmeV9hc3NpZ24gKGZvbGRfYnVpbGQzX2xvYyAobG9jLCBD T01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKGZpZWxkKSwKKwkJCQkJKnRva2VuLCBmaWVsZCwg TlVMTF9UUkVFKSwgc2l6ZXNfYXJyYXksCisJCQkJCXNlcSk7CisgICAgICAvKiB0b2tlbi5r aW5kcyA9IGtpbmRzX2FycmF5ICovCisgICAgICBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2Vu X2tpbmRzICgqdG9rZW4pOworICAgICAgZ2ltcGxpZnlfYXNzaWduIChmb2xkX2J1aWxkM19s b2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksCisJCQkJCSp0b2tl biwgZmllbGQsIE5VTExfVFJFRSksIGtpbmRzX2FycmF5LAorCQkJCQlzZXEpOworICAgICAg LyogdG9rZW4uZmxhZ3MgPSB0a2luZCAqLworICAgICAgZmllbGQgPSBnZmNfb21wX2dldF90 b2tlbl9mbGFncyAoKnRva2VuKTsKKyAgICAgIHRtcCA9IGJ1aWxkX2ludF9jc3R1IChzaG9y dF91bnNpZ25lZF90eXBlX25vZGUsIHRraW5kKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAo Zm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQp LAorCQkJCQkqdG9rZW4sIGZpZWxkLCBOVUxMX1RSRUUpLCB0bXAsIHNlcSk7CisgICAgICAv KiB0b2tlbi5kZXRhY2ggPSAoY3R4ID09IEVYSVRfREFUQSkgICovCisgICAgICBmaWVsZCA9 IGdmY19vbXBfZ2V0X3Rva2VuX2RldGFjaCAoKnRva2VuKTsKKyAgICAgIGdpbXBsaWZ5X2Fz c2lnbiAoZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAo ZmllbGQpLAorCQkJCQkqdG9rZW4sIGZpZWxkLCBOVUxMX1RSRUUpLAorCQkgICAgICAgKGdp bXBsZV9vbXBfdGFyZ2V0X2tpbmQgKGN0eCkKKwkJCT09IEdGX09NUF9UQVJHRVRfS0lORF9F WElUX0RBVEEpID8gYm9vbGVhbl90cnVlX25vZGUKKwkJCQkJCQkgOiBib29sZWFuX2ZhbHNl X25vZGUsCisJCSAgICAgICBzZXEpOworICAgIH0KKworICBpZiAocG9seSAmJiAhbWFwX2Zu KQorICAgIHsKKyAgICAgIGNudF9mbiA9IGJ1aWxkX2ZvbGRfYWRkcl9leHByIChnZmNfb21w X2dlbl9kZWVwX21hcF9mbiAodHJ1ZSkpOworICAgICAgbWFwX2ZuID0gYnVpbGRfZm9sZF9h ZGRyX2V4cHIgKGdmY19vbXBfZ2VuX2RlZXBfbWFwX2ZuIChmYWxzZSkpOworICAgIH0KKwor ICBpZiAoaXNfY250ICYmIGRvX2NvcHkpCisgICAgeworICAgICAgdHJlZSB0bXAgPSBmb2xk X2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBQTFVTX0VYUFIsIHNpemVfdHlwZV9ub2Rl LAorCQkJCSAgbnVtLCBidWlsZF9pbnRfY3N0IChzaXplX3R5cGVfbm9kZSwgMSkpOworICAg ICAgZ2ltcGxpZnlfYXNzaWduIChudW0sIHRtcCwgc2VxKTsKKyAgICB9CisgIGVsc2UgaWYg KHBvbHkgJiYgZG9fY29weSkKKyAgICB7CisgICAgICAvKiB0b2tlbi5vZmZzZXRfZGF0YSA9 IG9mZnNldF9kYXRhICovCisgICAgICB0cmVlIGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5f b2Zmc2V0X2RhdGEgKCp0b2tlbik7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxv YywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksICp0b2tlbiwKKwkJCSAgICAg ZmllbGQsIE5VTExfVFJFRSk7CisgICAgICBnaW1wbGlmeV9hc3NpZ24gKHRtcCwgb2Zmc2V0 X2RhdGEsIHNlcSk7CisgICAgICAvKiB0b2tlbi5vZmZzZXQgPSBvZmZzZXQgKi8KKyAgICAg IGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fb2Zmc2V0ICgqdG9rZW4pOworICAgICAgdG1w ID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmll bGQpLCAqdG9rZW4sCisJCQkgICAgIGZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxp ZnlfYXNzaWduICh0bXAsIG9mZnNldF9kYXRhLCBzZXEpOworCisgICAgICAvKiBjb3B5IHZw dHIgKyBkYXRhIHBvaW50ZXIgICovCisgICAgICAvKiBkZWNsLT52cHRyLT5jYWxsYmFjayAo b21wX21hcCwgdG9rZW4sICZkZWNsLT52cHRyLAorCQkJICAgICAgIEdGQ19DTEFTU19DQUxM QkFDS19WVEFCTEVfRkxBRykgKi8KKyAgICAgIHRyZWUgY2IgPSBidWlsZF9mb2xkX2luZGly ZWN0X3JlZiAoZ2ZjX2NsYXNzX3Z0YWJfY2FsbGJhY2tfZ2V0IChkZWNsKSk7CisgICAgICB0 bXAgPSBidWlsZF9mb2xkX2FkZHJfZXhwciAoZ2ZjX2NsYXNzX3ZwdHJfZ2V0IChkZWNsKSk7 CisgICAgICB0bXAKKwk9IGJ1aWxkX2NhbGxfZXhwcl9sb2MgKGxvYywgY2IsIDQsIG1hcF9m biwKKwkJCSAgICAgICBidWlsZF9mb2xkX2FkZHJfZXhwciAoKnRva2VuKSwgdG1wLAorCQkJ ICAgICAgIGJ1aWxkX2ludF9jc3QgKHNob3J0X2ludGVnZXJfdHlwZV9ub2RlLAorCQkJCQkg ICAgICBHRkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUcpKTsKKyAgICAgIGdpbXBsaWZ5 X2FuZF9hZGQgKHRtcCwgc2VxKTsKKworICAgICAgLyogb2Zmc2V0X2RhdGEgPSB0b2tlbi5v ZmZzZXRfZGF0YSAqLworICAgICAgZmllbGQgPSBnZmNfb21wX2dldF90b2tlbl9vZmZzZXRf ZGF0YSAoKnRva2VuKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01Q T05FTlRfUkVGLCBUUkVFX1RZUEUgKGZpZWxkKSwgKnRva2VuLAorCQkJICAgICBmaWVsZCwg TlVMTF9UUkVFKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAodG1wLCBvZmZzZXRfZGF0YSwg c2VxKTsKKyAgICAgIC8qIG9mZnNldCA9IHRva2VuLm9mZnNldCAqLworICAgICAgZmllbGQg PSBnZmNfb21wX2dldF90b2tlbl9vZmZzZXQgKCp0b2tlbik7CisgICAgICB0bXAgPSBmb2xk X2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksICp0 b2tlbiwKKwkJCSAgICAgZmllbGQsIE5VTExfVFJFRSk7CisgICAgICBnaW1wbGlmeV9hc3Np Z24gKHRtcCwgb2Zmc2V0X2RhdGEsIHNlcSk7CisKKyAgICAgIHRyZWUgYnl0ZXNpemUgPSBm b2xkX2NvbnZlcnQgKHNpemVfdHlwZV9ub2RlLAorCQkJCSAgICBnZmNfY2xhc3NfdnRhYl9z aXplX2dldCAoZGVjbCkpOworICAgICAgdG1wID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChkZWNs KTsKKyAgICAgIGlmIChHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAodG1wKSkp CisJeworCSAgZWxlbV9sZW4gPSBieXRlc2l6ZTsKKwkgIHNpemUgPSBnZmNfb21wX2dldF9h cnJheV9zaXplIChsb2MsIHRtcCwgc2VxKTsKKwkgIGJ5dGVzaXplID0gZm9sZF9idWlsZDJf bG9jIChsb2MsIE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQkJICAgICAgc2l6ZSwg ZWxlbV9sZW4pOworCSAgdG1wID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAodG1w KTsKKwl9CisKKyAgICAgIGdmY19vbXBfZGVlcF9tYXBwaW5nX21hcCAodG1wLCBieXRlc2l6 ZSwgdGtpbmQsIGxvYywgZGF0YV9hcnJheSwKKwkJCQlzaXplc19hcnJheSwga2luZHNfYXJy YXksIG9mZnNldF9kYXRhLAorCQkJCW9mZnNldCwgc2VxLCBjdHgpOworICAgIH0KKyAgZWxz ZSBpZiAoZG9fY29weSkKKyAgICB7CisgICAgICAvKiBjb3B5IGRhdGEgcG9pbnRlciAgKi8K KyAgICAgIHRyZWUgYnl0ZXNpemU7CisgICAgICBpZiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9Q IChUUkVFX1RZUEUgKGRlY2wpKSkKKwl7CisJICAvKiBUT0RPOiBPcHRpbWl6YXRpb246IFNo b3VsZG4ndCB0aGlzIGJlIGFuIGV4cHIuIGNvbnN0LCBleGNlcHQgZm9yCisJICAgICBkZWZl cnJlZC1sZW5ndGggc3RyaW5ncy4gKENmLiBhbHNvIGJlbG93KS4gICovCisJICBlbGVtX2xl biA9IGdmY19jb252X2Rlc2NyaXB0b3JfZWxlbV9sZW4gKGRlY2wpOworCSAgdG1wID0gKFBP SU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGRlY2wpKQorCQkgPyBidWlsZF9mb2xkX2luZGly ZWN0X3JlZiAoZGVjbCkgOiBkZWNsKTsKKwkgIHNpemUgPSBnZmNfb21wX2dldF9hcnJheV9z aXplIChsb2MsIHRtcCwgc2VxKTsKKwkgIGJ5dGVzaXplID0gZm9sZF9idWlsZDJfbG9jIChs b2MsIE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQkJICAgICAgc2l6ZSwgZWxlbV9s ZW4pOworCSAgdG1wID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7CisJ fQorICAgICAgZWxzZQorCXsKKwkgIHRtcCA9IGRlY2w7CisJICBieXRlc2l6ZSA9IFRZUEVf U0laRV9VTklUIChUUkVFX1RZUEUgKGRlY2wpKTsKKwl9CisgICAgICBnZmNfb21wX2RlZXBf bWFwcGluZ19tYXAgKHRtcCwgYnl0ZXNpemUsIHRraW5kLCBsb2MsIGRhdGFfYXJyYXksCisJ CQkJc2l6ZXNfYXJyYXksIGtpbmRzX2FycmF5LCBvZmZzZXRfZGF0YSwKKwkJCQlvZmZzZXQs IHNlcSwgY3R4KTsKKyAgICB9CisKKyAgLyogSGFuZGxlIGFsbG9jYXRhYmxlIGNvbXBvbmVu dHMuICovCisgIGlmICghaXNfY250ICYmIHBvbHkpCisgICAgeworICAgICAgLyogdG9rZW4u b2Zmc2V0X2RhdGEgPSBvZmZzZXRfZGF0YSAqLworICAgICAgdHJlZSBmaWVsZCA9IGdmY19v bXBfZ2V0X3Rva2VuX29mZnNldF9kYXRhICgqdG9rZW4pOworICAgICAgdG1wID0gZm9sZF9i dWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLCAqdG9r ZW4sCisJCQkgICAgIGZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxpZnlfYXNzaWdu ICh0bXAsIG9mZnNldF9kYXRhLCBzZXEpOworICAgICAgLyogdG9rZW4ub2Zmc2V0ID0gb2Zm c2V0ICovCisgICAgICBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX29mZnNldCAoKnRva2Vu KTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01QT05FTlRfUkVGLCBU UkVFX1RZUEUgKGZpZWxkKSwgKnRva2VuLAorCQkJICAgICBmaWVsZCwgTlVMTF9UUkVFKTsK KyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAodW5zaGFyZV9leHByICh0bXApLCBvZmZzZXRfZGF0 YSwgc2VxKTsKKyAgICB9CisgIGlmIChwb2x5KQorICAgIHsKKyAgICAgIHRyZWUgY2IgPSBi dWlsZF9mb2xkX2luZGlyZWN0X3JlZiAoZ2ZjX2NsYXNzX3Z0YWJfY2FsbGJhY2tfZ2V0IChk ZWNsKSk7CisgICAgICB0bXAgPSBnZmNfY2xhc3NfZGF0YV9nZXQgKGRlY2wpOworICAgICAg Z2ltcGxlX3NlcSBzZXEyID0gTlVMTDsKKyAgICAgIGlmIChHRkNfREVTQ1JJUFRPUl9UWVBF X1AgKFRSRUVfVFlQRSAodG1wKSkpCisJeworCSAgaWYgKGVsZW1fbGVuID09IE5VTExfVFJF RSkKKwkgICAgeworCSAgICAgIGVsZW1fbGVuID0gZm9sZF9jb252ZXJ0IChzaXplX3R5cGVf bm9kZSwKKwkJCQkgICAgICAgZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKGRlY2wpKTsKKwkg ICAgICBzaXplID0gZ2ZjX29tcF9nZXRfYXJyYXlfc2l6ZSAobG9jLCB0bXAsIHNlcSk7CisJ ICAgIH0KKwkgIHRtcCA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKHRtcCk7CisJ ICB0bXAgPSBnZmNfb21wX2VsbWVudGFsX2xvb3AgKGxvYywgdG1wLCBzaXplLCBlbGVtX2xl biwgc2VxLCAmc2VxMik7CisJfQorICAgICAgdHJlZSBmbGFnID0gYnVpbGRfaW50X2NzdCAo c2hvcnRfaW50ZWdlcl90eXBlX25vZGUsCisJCQkJIEdGQ19DTEFTU19DQUxMQkFDS19ERUZB VUxUX0ZMQUcpOworICAgICAgdG1wID0gYnVpbGRfY2FsbF9leHByX2xvYyAobG9jLCBjYiwg NCwgaXNfY250ID8gY250X2ZuIDogbWFwX2ZuLAorCQkJCSBpc19jbnQgPyBudWxsX3BvaW50 ZXJfbm9kZQorCQkJCQk6IGJ1aWxkX2ZvbGRfYWRkcl9leHByICgqdG9rZW4pLAorCQkJCSB0 bXAsIGZsYWcpOworICAgICAgZ2ltcGxpZnlfYW5kX2FkZCAodG1wLCBzZXEpOworICAgICAg Z2ltcGxlX3NlcV9hZGRfc2VxIChzZXEsIHNlcTIpOworICAgIH0KKyAgaWYgKCFpc19jbnQg JiYgcG9seSkKKyAgICB7CisgICAgICAvKiBvZmZzZXRfZGF0YSA9IHRva2VuLm9mZnNldF9k YXRhICovCisgICAgICB0cmVlIGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fb2Zmc2V0X2Rh dGEgKCp0b2tlbik7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9O RU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksICp0b2tlbiwKKwkJCSAgICAgZmllbGQsIE5V TExfVFJFRSk7CisgICAgICBnaW1wbGlmeV9hc3NpZ24gKHVuc2hhcmVfZXhwciAob2Zmc2V0 X2RhdGEpLCB0bXAsIHNlcSk7CisgICAgICAvKiBvZmZzZXQgPSB0b2tlbi5vZmZzZXQgKi8K KyAgICAgIGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fb2Zmc2V0ICgqdG9rZW4pOworICAg ICAgdG1wID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQ RSAoZmllbGQpLCAqdG9rZW4sCisJCQkgICAgIGZpZWxkLCBOVUxMX1RSRUUpOworICAgICAg Z2ltcGxpZnlfYXNzaWduICh1bnNoYXJlX2V4cHIgKG9mZnNldF9kYXRhKSwgdG1wLCBzZXEp OworICAgIH0KKworICAvKiBHZXQgZmllbGQgZGVjbC4gICovCisgIGlmICghcG9seSkKKyAg ICB7CisgICAgICB0bXAgPSBkZWNsOworICAgICAgaWYgKFBPSU5URVJfVFlQRV9QIChUUkVF X1RZUEUgKGRlY2wpKSkKKwl3aGlsZSAoVFJFRV9DT0RFICh0bXApID09IENPTVBPTkVOVF9S RUYgfHwgVFJFRV9DT0RFICh0bXApID09IEFSUkFZX1JFRikKKwkgIHRtcCA9IFRSRUVfT1BF UkFORCAodG1wLCBUUkVFX0NPREUgKHRtcCkgPT0gQ09NUE9ORU5UX1JFRiA/IDEgOiAwKTsK KyAgICB9CisgIGlmICghcG9seSAmJiBnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCB0bXAs IHRydWUpKQorICAgIHsKKyAgICAgIGdpbXBsZV9zZXEgc2VxMiA9IE5VTEw7CisgICAgICBp ZiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGRlY2wpKSkKKwl7CisJICBp ZiAoZWxlbV9sZW4gPT0gTlVMTF9UUkVFKQorCSAgICB7CisJICAgICAgZWxlbV9sZW4gPSBn ZmNfY29udl9kZXNjcmlwdG9yX2VsZW1fbGVuIChkZWNsKTsKKwkgICAgICBzaXplID0gZ2Zj X29tcF9nZXRfYXJyYXlfc2l6ZSAobG9jLCBkZWNsLCBzZXEpOworCSAgICB9CisJICBkZWNs ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7CisJICBkZWNsID0gZ2Zj X29tcF9lbG1lbnRhbF9sb29wIChsb2MsIGRlY2wsIHNpemUsIGVsZW1fbGVuLCBzZXEsICZz ZXEyKTsKKwkgIGRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvYywgZGVj bCk7CisJfQorICAgICAgZWxzZSBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHRtcCkpID09 IEFSUkFZX1RZUEUpCisJeworCSAgdHlwZSA9IFRSRUVfVFlQRSAodG1wKTsKKwkgIC8qIEZJ WE1FOiBQUjk1ODY4IC0gZm9yIHZhciVzdHIgb2YgZGVmZXJyZWQgbGVuZ3RoLCBlbGVtX2xl biA9PSAwOworCSAgICAgbGVuIGlzIHN0b3JlZCBhcyB2YXIlX3N0cl9sZW5ndGgsIGJ1dCBu b3QgaW4gR0ZDX0RFQ0xfU1RSSU5HX0xFTgorCSAgICAgbm9yIGluIFRZUEVfU0laRV9VTklU IGFzIGV4cHJlc3Npb24uICovCisJICBlbGVtX2xlbiA9IFRZUEVfU0laRV9VTklUIChUUkVF X1RZUEUgKHR5cGUpKTsKKwkgIHNpemUgPSBmb2xkX2NvbnZlcnQgKHNpemVfdHlwZV9ub2Rl LCBHRkNfVFlQRV9BUlJBWV9TSVpFICh0eXBlKSk7CisJICBkZWNsID0gZ2ZjX29tcF9lbG1l bnRhbF9sb29wIChsb2MsIGRlY2wsIHNpemUsIGVsZW1fbGVuLCBzZXEsICZzZXEyKTsKKwkg IGRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvYywgZGVjbCk7CisJfQor ICAgICAgZWxzZSBpZiAoUE9JTlRFUl9UWVBFX1AgKGRlY2wpKQorCWRlY2wgPSBidWlsZF9m b2xkX2luZGlyZWN0X3JlZiAoZGVjbCk7CisgICAgICBnZmNfb21wX2RlZXBfbWFwcGluZ19j b21wcyAoaXNfY250LCBsb2MsIGRlY2wsIHRva2VuLCB0a2luZCwKKwkJCQkgIGRhdGFfYXJy YXksIHNpemVzX2FycmF5LCBraW5kc19hcnJheSwKKwkJCQkgIG9mZnNldF9kYXRhLCBvZmZz ZXQsIG51bSwgc2VxLCBjdHgpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc2VxIChzZXEsIHNl cTIpOworICAgIH0KKyAgaWYgKGVuZF9sYWJlbCkKKyAgICBnaW1wbGVfc2VxX2FkZF9zdG10 IChzZXEsIGdpbXBsZV9idWlsZF9sYWJlbCAoZW5kX2xhYmVsKSk7Cit9CisKKworLyogV2hp Y2ggbWFwIHR5cGVzIHRvIGNoZWNrL2hhbmRsZSBmb3IgZGVlcCBtYXBwaW5nLiAgKi8KK3N0 YXRpYyBib29sCitnZmNfb21wX2RlZXBfbWFwX2tpbmRfcCAodHJlZSBjbGF1c2UpCit7Cisg IHN3aXRjaCAoT01QX0NMQVVTRV9DT0RFIChjbGF1c2UpKQorICAgIHsKKyAgICBjYXNlIE9N UF9DTEFVU0VfTUFQOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBPTVBfQ0xBVVNFX0ZJUlNU UFJJVkFURToKKyAgICBjYXNlIE9NUF9DTEFVU0VfVE86CisgICAgY2FzZSBPTVBfQ0xBVVNF X0ZST006CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOworICAgIH0KKworICBzd2l0Y2ggKE9NUF9DTEFVU0VfTUFQX0tJTkQg KGNsYXVzZSkpCisgICAgeworICAgIGNhc2UgR09NUF9NQVBfVE86CisgICAgY2FzZSBHT01Q X01BUF9GUk9NOgorICAgIGNhc2UgR09NUF9NQVBfVE9GUk9NOgorICAgIGNhc2UgR09NUF9N QVBfQUxXQVlTX1RPOgorICAgIGNhc2UgR09NUF9NQVBfQUxXQVlTX0ZST006CisgICAgY2Fz ZSBHT01QX01BUF9BTFdBWVNfVE9GUk9NOgorICAgIGNhc2UgR09NUF9NQVBfRklSU1RQUklW QVRFOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBHT01QX01BUF9BTExPQzoKKyAg ICBjYXNlIEdPTVBfTUFQX1BPSU5URVI6CisgICAgY2FzZSBHT01QX01BUF9UT19QU0VUOgor ICAgIGNhc2UgR09NUF9NQVBfRk9SQ0VfUFJFU0VOVDoKKyAgICBjYXNlIEdPTVBfTUFQX0RF TEVURToKKyAgICBjYXNlIEdPTVBfTUFQX0ZPUkNFX0RFVklDRVBUUjoKKyAgICBjYXNlIEdP TVBfTUFQX0RFVklDRV9SRVNJREVOVDoKKyAgICBjYXNlIEdPTVBfTUFQX0xJTks6CisgICAg Y2FzZSBHT01QX01BUF9JRl9QUkVTRU5UOgorICAgIGNhc2UgR09NUF9NQVBfRklSU1RQUklW QVRFX0lOVDoKKyAgICBjYXNlIEdPTVBfTUFQX1VTRV9ERVZJQ0VfUFRSOgorICAgIGNhc2Ug R09NUF9NQVBfWkVST19MRU5fQVJSQVlfU0VDVElPTjoKKyAgICBjYXNlIEdPTVBfTUFQX0ZP UkNFX0FMTE9DOgorICAgIGNhc2UgR09NUF9NQVBfRk9SQ0VfVE86CisgICAgY2FzZSBHT01Q X01BUF9GT1JDRV9GUk9NOgorICAgIGNhc2UgR09NUF9NQVBfRk9SQ0VfVE9GUk9NOgorICAg IGNhc2UgR09NUF9NQVBfVVNFX0RFVklDRV9QVFJfSUZfUFJFU0VOVDoKKyAgICBjYXNlIEdP TVBfTUFQX1NUUlVDVDoKKyAgICBjYXNlIEdPTVBfTUFQX0FMV0FZU19QT0lOVEVSOgorICAg IGNhc2UgR09NUF9NQVBfUE9JTlRFUl9UT19aRVJPX0xFTkdUSF9BUlJBWV9TRUNUSU9OOgor ICAgIGNhc2UgR09NUF9NQVBfREVMRVRFX1pFUk9fTEVOX0FSUkFZX1NFQ1RJT046CisgICAg Y2FzZSBHT01QX01BUF9SRUxFQVNFOgorICAgIGNhc2UgR09NUF9NQVBfQVRUQUNIOgorICAg IGNhc2UgR09NUF9NQVBfREVUQUNIOgorICAgIGNhc2UgR09NUF9NQVBfRk9SQ0VfREVUQUNI OgorICAgIGNhc2UgR09NUF9NQVBfQVRUQUNIX1pFUk9fTEVOR1RIX0FSUkFZX1NFQ1RJT046 CisgICAgY2FzZSBHT01QX01BUF9GSVJTVFBSSVZBVEVfUE9JTlRFUjoKKyAgICBjYXNlIEdP TVBfTUFQX0ZJUlNUUFJJVkFURV9SRUZFUkVOQ0U6CisgICAgY2FzZSBHT01QX01BUF9BVFRB Q0hfREVUQUNIOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJl YWNoYWJsZSAoKTsKKyAgICB9CisgIHJldHVybiBmYWxzZTsKK30KKworLyogVGhyZWUgT3Bl bk1QIGRlZXAtbWFwcGluZyBsYW5nIGhvb2tzOiBnZmNfb21wX2RlZXBfbWFwcGluZ3tfcCxf Y250LH0uICAqLworCisvKiBDb21tb24gY2hlY2sgZm9yIGdmY19vbXBfZGVlcF9tYXBwaW5n X3AgYW5kIGdmY19vbXBfZGVlcF9tYXBwaW5nX2RvLiAqLworCitzdGF0aWMgdHJlZQorZ2Zj X29tcF9kZWVwX21hcHBpbmdfaW50X3AgKGNvbnN0IGdpbXBsZSAqY3R4LCB0cmVlIGNsYXVz ZSkKK3sKKyAgaWYgKGlzX2dpbXBsZV9vbXBfb2FjYyAoY3R4KSB8fCAhZ2ZjX29tcF9kZWVw X21hcF9raW5kX3AgKGNsYXVzZSkpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgdHJlZSBk ZWNsID0gT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpOworICBpZiAoT01QX0NMQVVTRV9TSVpF IChjbGF1c2UpICE9IE5VTExfVFJFRQorICAgICAgJiYgREVDTF9QIChPTVBfQ0xBVVNFX1NJ WkUgKGNsYXVzZSkpCisgICAgICAmJiBERUNMX0xBTkdfU1BFQ0lGSUMgKE9NUF9DTEFVU0Vf U0laRSAoY2xhdXNlKSkKKyAgICAgICYmIEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKE9N UF9DTEFVU0VfU0laRSAoY2xhdXNlKSkpCisgICAgLyogU2F2ZWQgZGVjbC4gKi8KKyAgICBk ZWNsID0gR0ZDX0RFQ0xfU0FWRURfREVTQ1JJUFRPUiAoT01QX0NMQVVTRV9TSVpFIChjbGF1 c2UpKTsKKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBNRU1fUkVGIHx8IFRSRUVf Q09ERSAoZGVjbCkgPT0gSU5ESVJFQ1RfUkVGKQorICAgIC8qIFRoZSBmb2xsb3dpbmcgY2Fu IGhhcHBlbiBmb3IsIGUuZy4sIGNsYXNzKHQpIDo6IHZhciguLikgICovCisgICAgZGVjbCA9 IFRSRUVfT1BFUkFORCAoZGVjbCwgMCk7CisgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IElO RElSRUNUX1JFRikKKyAgICAvKiBUaGUgZm9sbG93aW5nIGNhbiBoYXBwZW4gZm9yLCBlLmcu LCBjbGFzcyh0KSA6OiB2YXIoLi4pICAqLworICAgIGRlY2wgPSBUUkVFX09QRVJBTkQgKGRl Y2wsIDApOworICBpZiAoREVDTF9QIChkZWNsKQorICAgICAgJiYgREVDTF9MQU5HX1NQRUNJ RklDIChkZWNsKQorICAgICAgJiYgR0ZDX0RFQ0xfU0FWRURfREVTQ1JJUFRPUiAoZGVjbCkp CisgICAgZGVjbCA9IEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKGRlY2wpOworICAvKiBI YW5kbGUgbWFwKHRvOiB2YXIuZGVzYykgbWFwKFt0by9mcm9tL3RvZnJvbTpdIHZhci5kZXNj LmRhdGEpCisgICAgIHRvIGdldCBwcm9wZXIgbWFwIGtpbmQgYnkgc2tpcHBpbmcgdG8gdGhl IG5leHQgaXRlbS4gKi8KKyAgdHJlZSB0bXAgPSBPTVBfQ0xBVVNFX0NIQUlOIChjbGF1c2Up OworICBpZiAodG1wICE9IE5VTExfVFJFRQorICAgICAgJiYgT01QX0NMQVVTRV9DT0RFICh0 bXApID09IE9NUF9DTEFVU0VfQ09ERSAoY2xhdXNlKQorICAgICAgJiYgT01QX0NMQVVTRV9T SVpFICh0bXApICE9IE5VTExfVFJFRQorICAgICAgJiYgREVDTF9QIChPTVBfQ0xBVVNFX1NJ WkUgKHRtcCkpCisgICAgICAmJiBERUNMX0xBTkdfU1BFQ0lGSUMgKE9NUF9DTEFVU0VfU0la RSAodG1wKSkKKyAgICAgICYmIEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKE9NUF9DTEFV U0VfU0laRSAodG1wKSkgPT0gZGVjbCkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICBpZiAo REVDTF9QIChkZWNsKQorICAgICAgJiYgREVDTF9MQU5HX1NQRUNJRklDIChkZWNsKQorICAg ICAgJiYgR0ZDX0RFQ0xfU0FWRURfREVTQ1JJUFRPUiAoZGVjbCkpCisgICAgZGVjbCA9IEdG Q19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKGRlY2wpOworICB0cmVlIHR5cGUgPSBUUkVFX1RZ UEUgKGRlY2wpOworICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQorICAgIHR5cGUgPSBU UkVFX1RZUEUgKHR5cGUpOworICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQorICAgIHR5 cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworICB0bXAgPSBkZWNsOworICB3aGlsZSAoVFJFRV9D T0RFICh0bXApID09IENPTVBPTkVOVF9SRUYgfHwgVFJFRV9DT0RFICh0bXApID09IEFSUkFZ X1JFRikKKyAgICB0bXAgPSBUUkVFX09QRVJBTkQgKHRtcCwgVFJFRV9DT0RFICh0bXApID09 IENPTVBPTkVOVF9SRUYgPyAxIDogMCk7CisgIGlmICghZ2ZjX2lzX3BvbHltb3JwaGljX25v bnB0ciAodHlwZSkKKyAgICAgICYmICFnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCB0bXAs IHRydWUpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIHJldHVybiBkZWNsOworfQorCisv KiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBkZWVwIG1hcHBpbmcsIGV2ZW4gaWYgdGhlIG51 bWJlciBvZiBtYXBwaW5nIGlzIGtub3duCisgICBhdCBjb21waWxlIHRpbWUuICovCitib29s CitnZmNfb21wX2RlZXBfbWFwcGluZ19wIChjb25zdCBnaW1wbGUgKmN0eCwgdHJlZSBjbGF1 c2UpCit7CisgIHRyZWUgZGVjbCA9IGdmY19vbXBfZGVlcF9tYXBwaW5nX2ludF9wIChjdHgs IGNsYXVzZSk7CisgIGlmIChkZWNsID09IE5VTExfVFJFRSkKKyAgICByZXR1cm4gZmFsc2U7 CisgIHJldHVybiB0cnVlOworfQorCisvKiBIYW5kbGUgZ2ZjX29tcF9kZWVwX21hcHBpbmd7 LF9jbnR9ICovCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9kZWVwX21hcHBpbmdfZG8gKGJvb2wg aXNfY250LCBjb25zdCBnaW1wbGUgKmN0eCwgdHJlZSBjbGF1c2UsCisJCQkgdW5zaWduZWQg SE9TVF9XSURFX0lOVCB0a2luZCwgdHJlZSBkYXRhLCB0cmVlIHNpemVzLAorCQkJIHRyZWUg a2luZHMsIHRyZWUgb2Zmc2V0X2RhdGEsIHRyZWUgb2Zmc2V0LAorCQkJIGdpbXBsZV9zZXEg KnNlcSkKK3sKKyAgdHJlZSBudW0gPSBOVUxMX1RSRUU7CisgIGxvY2F0aW9uX3QgbG9jID0g T01QX0NMQVVTRV9MT0NBVElPTiAoY2xhdXNlKTsKKyAgdHJlZSBkZWNsID0gZ2ZjX29tcF9k ZWVwX21hcHBpbmdfaW50X3AgKGN0eCwgY2xhdXNlKTsKKyAgaWYgKGRlY2wgPT0gTlVMTF9U UkVFKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAo ZGVjbCk7CisgIGlmIChQT0lOVEVSX1RZUEVfUCAodHlwZSkpCisgICAgdHlwZSA9IFRSRUVf VFlQRSAodHlwZSk7CisgIGlmIChQT0lOVEVSX1RZUEVfUCAodHlwZSkpCisgICAgdHlwZSA9 IFRSRUVfVFlQRSAodHlwZSk7CisgIGJvb2wgcG9seSA9IGdmY19pc19wb2x5bW9ycGhpY19u b25wdHIgKHR5cGUpOworCisgIGlmIChpc19jbnQpCisgICAgeworICAgICAgbnVtID0gYnVp bGRfZGVjbCAoaW5wdXRfbG9jYXRpb24sIFZBUl9ERUNMLAorCQkJY3JlYXRlX3RtcF92YXJf bmFtZSAoIm5fZGVlcG1hcCIpLCBzaXplX3R5cGVfbm9kZSk7CisgICAgICB0cmVlIHRtcCA9 IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBNT0RJRllfRVhQUiwgc2l6ZV90eXBlX25vZGUsIG51 bSwKKwkJCQkgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCAwKSk7CisgICAgICBn aW1wbGVfYWRkX3RtcF92YXIgKG51bSk7CisgICAgICBnaW1wbGlmeV9hbmRfYWRkICh0bXAs IHNlcSk7CisgICAgfQorICBlbHNlCisgICAgZ2NjX2Fzc2VydCAoc2hvcnRfdW5zaWduZWRf dHlwZV9ub2RlID09IFRSRUVfVFlQRSAoVFJFRV9UWVBFIChraW5kcykpKTsKKworICBib29s IGRvX2NvcHkgPSBwb2x5OworICBib29sIGRvX2FsbG9jX2NoZWNrID0gZmFsc2U7CisgIHRy ZWUgdG9rZW4gPSBOVUxMX1RSRUU7CisgIHRyZWUgdG1wID0gZGVjbDsKKyAgaWYgKHBvbHkp CisgICAgeworICAgICAgdG1wID0gVFlQRV9GSUVMRFMgKHR5cGUpOworICAgICAgdHlwZSA9 IFRSRUVfVFlQRSAodG1wKTsKKyAgICB9CisgIGVsc2UKKyAgICB3aGlsZSAoVFJFRV9DT0RF ICh0bXApID09IENPTVBPTkVOVF9SRUYgfHwgVFJFRV9DT0RFICh0bXApID09IEFSUkFZX1JF RikKKyAgICAgIHRtcCA9IFRSRUVfT1BFUkFORCAodG1wLCBUUkVFX0NPREUgKHRtcCkgPT0g Q09NUE9ORU5UX1JFRiA/IDEgOiAwKTsKKyAgLyogSWYgdGhlIGNsYXVzZSBhcmd1bWVudCBp cyBub25hbGxvY2F0YWJsZSwgc2tpcCBpcy1hbGxvY2F0ZSBjaGVjay4gKi8KKyAgaWYgKEdG Q19ERUNMX0dFVF9TQ0FMQVJfQUxMT0NBVEFCTEUgKHRtcCkKKyAgICAgIHx8IEdGQ19ERUNM X0dFVF9TQ0FMQVJfUE9JTlRFUiAodG1wKQorICAgICAgfHwgKEdGQ19ERVNDUklQVE9SX1RZ UEVfUCAodHlwZSkKKwkgICYmIChHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZD X0FSUkFZX0FMTE9DQVRBQkxFCisJICAgICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5 cGUpID09IEdGQ19BUlJBWV9QT0lOVEVSCisJICAgICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJ TkQgKHR5cGUpID09IEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQpKSkKKyAgICBkb19hbGxvY19j aGVjayA9IHRydWU7CisKKyAgLyogVE9ETzogRm9yIG1hcChhKDopKSwgd2Uga25vdyBpdCBp cyBwcmVzZW50ICYgYWxsb2NhdGVkLiAgKi8KKworICB0cmVlIHByZXNlbnQgPSAoREVDTF9Q IChkZWNsKSA/IGdmY19vbXBfY2hlY2tfb3B0aW9uYWxfYXJndW1lbnQgKGRlY2wsIHRydWUp CisJCQkJOiBOVUxMX1RSRUUpOworICBpZiAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAo ZGVjbCkpCisgICAgICAmJiBQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUg KGRlY2wpKSkpCisgICAgZGVjbCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChkZWNsKTsK KyAgaWYgKHByZXNlbnQpCisgICAgeworICAgICAgdHJlZSB0aGVuX2xhYmVsID0gY3JlYXRl X2FydGlmaWNpYWxfbGFiZWwgKGxvYyk7CisgICAgICB0cmVlIGVuZF9sYWJlbCA9IGNyZWF0 ZV9hcnRpZmljaWFsX2xhYmVsIChsb2MpOworICAgICAgZ2ltcGxlX3NlcSBzZXEyID0gTlVM TDsKKyAgICAgIHRtcCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kIChwcmVzZW50LCAmc2VxMiwg dHJ1ZSwgTlVMTF9UUkVFKTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3NlcSAoc2VxLCBzZXEy KTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKHNlcSwKKwkJCSAgIGdpbXBsZV9idWls ZF9jb25kX2Zyb21fdHJlZSAocHJlc2VudCwKKwkJCQkJCQl0aGVuX2xhYmVsLCBlbmRfbGFi ZWwpKTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKHNlcSwgZ2ltcGxlX2J1aWxkX2xh YmVsICh0aGVuX2xhYmVsKSk7CisgICAgICBnZmNfb21wX2RlZXBfbWFwcGluZ19pdGVtIChp c19jbnQsIGRvX2NvcHksIGRvX2FsbG9jX2NoZWNrLCBsb2MsIGRlY2wsCisJCQkJICZ0b2tl biwgdGtpbmQsIGRhdGEsIHNpemVzLCBraW5kcywKKwkJCQkgb2Zmc2V0X2RhdGEsIG9mZnNl dCwgbnVtLCBzZXEsIGN0eCk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10IChzZXEsIGdp bXBsZV9idWlsZF9sYWJlbCAoZW5kX2xhYmVsKSk7CisgICAgfQorICBlbHNlCisgICAgZ2Zj X29tcF9kZWVwX21hcHBpbmdfaXRlbSAoaXNfY250LCBkb19jb3B5LCBkb19hbGxvY19jaGVj aywgbG9jLCBkZWNsLAorCQkJICAgICAgICZ0b2tlbiwgdGtpbmQsIGRhdGEsIHNpemVzLCBr aW5kcywgb2Zmc2V0X2RhdGEsCisJCQkgICAgICAgb2Zmc2V0LCBudW0sIHNlcSwgY3R4KTsK KyAgLyogRG91YmxlOiBNYXAgKyBwb2ludGVyIGFzc2lnbi4gICovCisgIGlmIChpc19jbnQp CisgICAgZ2ltcGxpZnlfYXNzaWduIChudW0sCisJCSAgICAgZm9sZF9idWlsZDJfbG9jIChp bnB1dF9sb2NhdGlvbiwgTVVMVF9FWFBSLAorCQkJCSAgICAgIHNpemVfdHlwZV9ub2RlLCBu dW0sCisJCQkJICAgICAgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsIDIpKSwgc2Vx KTsKKyAgcmV0dXJuIG51bTsKK30KKworLyogUmV0dXJuIHRyZWUgd2l0aCBhIHZhcmlhYmxl IHdoaWNoIGNvbnRhaW5zIHRoZSBjb3VudCBvZiBkZWVwLW1hcHB5aW5ncworICAgKHZhbHVl IGRlcGVuZHMsIGUuZy4sIG9uIGFsbG9jYXRpb24gc3RhdHVzKSAgKi8KK3RyZWUKK2dmY19v bXBfZGVlcF9tYXBwaW5nX2NudCAoY29uc3QgZ2ltcGxlICpjdHgsIHRyZWUgY2xhdXNlLCBn aW1wbGVfc2VxICpzZXEpCit7CisgIHJldHVybiBnZmNfb21wX2RlZXBfbWFwcGluZ19kbyAo dHJ1ZSwgY3R4LCBjbGF1c2UsIDAsIE5VTExfVFJFRSwgTlVMTF9UUkVFLAorCQkJCSAgTlVM TF9UUkVFLCBOVUxMX1RSRUUsIE5VTExfVFJFRSwgc2VxKTsKK30KKworLyogRG9lcyB0aGUg YWN0dWFsIGRlZXAgbWFwcGluZy4gKi8KK3ZvaWQKK2dmY19vbXBfZGVlcF9tYXBwaW5nIChj b25zdCBnaW1wbGUgKmN0eCwgdHJlZSBjbGF1c2UsCisJCSAgICAgIHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQgdGtpbmQsIHRyZWUgZGF0YSwKKwkJICAgICAgdHJlZSBzaXplcywgdHJlZSBr aW5kcywgdHJlZSBvZmZzZXRfZGF0YSwgdHJlZSBvZmZzZXQsCisJCSAgICAgIGdpbXBsZV9z ZXEgKnNlcSkKK3sKKyAgKHZvaWQpIGdmY19vbXBfZGVlcF9tYXBwaW5nX2RvIChmYWxzZSwg Y3R4LCBjbGF1c2UsIHRraW5kLCBkYXRhLCBzaXplcywga2luZHMsCisJCQkJICBvZmZzZXRf ZGF0YSwgb2Zmc2V0LCBzZXEpOworfQogCiAvKiBSZXR1cm4gdHJ1ZSBpZiBERUNMIGlzIGEg c2NhbGFyIHZhcmlhYmxlIChmb3IgdGhlIHB1cnBvc2Ugb2YKICAgIGltcGxpY2l0IGZpcnN0 cHJpdmF0aXphdGlvbi9tYXBwaW5nKS4gT25seSBpZiAncHRyX2FsbG9jX29rLicKQEAgLTIz ODksNiArMzcyNywxOCBAQCBnZmNfdHJhbnNfb21wX2FycmF5X3NlY3Rpb24gKHN0bXRibG9j a190ICpibG9jaywgZ2ZjX29tcF9uYW1lbGlzdCAqbiwKICAgICAgIGVsZW1zeiA9IGZvbGRf Y29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIGVsZW1zeik7CiAgICAgICBPTVBfQ0xB VVNFX1NJWkUgKG5vZGUpID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgZ2ZjX2FycmF5X2lu ZGV4X3R5cGUsCiAJCQkJCSAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpLCBlbGVtc3opOwor ICAgICAgaWYgKG4tPmV4cHItPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCSAgJiYgbi0+ZXhw ci0+dHMudS5kZXJpdmVkLT5hdHRyLmFsbG9jX2NvbXApCisJeworCSAgLyogU2F2ZSBhcnJh eSBkZXNjcmlwdG9yIGZvciB1c2UgaW4gZ2ZjX29tcF9kZWVwX21hcHBpbmd7LF9wLF9jbnR9 OworCSAgICAgZm9yY2UgZXZhbHVhdGUgdG8gZW5zdXJlIHRoYXQgaXQgaXMgbm90IGdpbXBs aWZpZWQgKyBpcyBhIGRlY2wuICAqLworCSAgdHJlZSB0bXAgPSBPTVBfQ0xBVVNFX1NJWkUg KG5vZGUpOworCSAgdHJlZSB2YXIgPSBnZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBFICh0bXAp LCBOVUxMKTsKKwkgIGdmY19hZGRfbW9kaWZ5X2xvYyAoaW5wdXRfbG9jYXRpb24sIGJsb2Nr LCB2YXIsIHRtcCk7CisJICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpID0gdmFyOworCSAgZ2Zj X2FsbG9jYXRlX2xhbmdfZGVjbCAodmFyKTsKKwkgIEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBU T1IgKHZhcikgPSBzZS5leHByOworCX0KICAgICB9CiAgIGdjY19hc3NlcnQgKHNlLnBvc3Qu aGVhZCA9PSBOVUxMX1RSRUUpOwogICBnY2NfYXNzZXJ0IChQT0lOVEVSX1RZUEVfUCAoVFJF RV9UWVBFIChwdHIpKSk7CkBAIC0zMjA4LDcgKzQ1NTgsOCBAQCBnZmNfdHJhbnNfb21wX2Ns YXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAog CiAJCSAgICAgIC8qIFdlIGhhdmUgdG8gY2hlY2sgZm9yIG4tPnN5bS0+YXR0ci5kaW1lbnNp b24gYmVjYXVzZQogCQkJIG9mIHNjYWxhciBjb2FycmF5cy4gICovCi0JCSAgICAgIGlmIChu LT5zeW0tPmF0dHIucG9pbnRlciAmJiBuLT5zeW0tPmF0dHIuZGltZW5zaW9uKQorCQkgICAg ICBpZiAoKG4tPnN5bS0+YXR0ci5wb2ludGVyIHx8IG4tPnN5bS0+YXR0ci5hbGxvY2F0YWJs ZSkKKwkJCSAgJiYgbi0+c3ltLT5hdHRyLmRpbWVuc2lvbikKIAkJCXsKIAkJCSAgc3RtdGJs b2NrX3QgY29uZF9ibG9jazsKIAkJCSAgdHJlZSBzaXplCkBAIC0zMjg0LDEzICs0NjM1LDQw IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21w X2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgICB7CiAJCSAgICAgIC8qIEEgc2luZ2xlIGluZGly ZWN0cmVmIGlzIGhhbmRsZWQgYnkgdGhlIG1pZGRsZSBlbmQuICAqLwogCQkgICAgICBnY2Nf YXNzZXJ0ICghUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGVjbCkpKTsKLQkJICAgICAg ZGVjbCA9IFRSRUVfT1BFUkFORCAoZGVjbCwgMCk7Ci0JCSAgICAgIGRlY2wgPSBnZmNfYnVp bGRfY29uZF9hc3NpZ25fZXhwciAoYmxvY2ssIHByZXNlbnQsIGRlY2wsCisJCSAgICAgIHRy ZWUgdG1wID0gVFJFRV9PUEVSQU5EIChkZWNsLCAwKTsKKwkJICAgICAgdG1wID0gZ2ZjX2J1 aWxkX2NvbmRfYXNzaWduX2V4cHIgKGJsb2NrLCBwcmVzZW50LCB0bXAsCiAJCQkJCQkJIG51 bGxfcG9pbnRlcl9ub2RlKTsKLQkJICAgICAgT01QX0NMQVVTRV9ERUNMIChub2RlKSA9IGJ1 aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChkZWNsKTsKKwkJICAgICAgT01QX0NMQVVTRV9ERUNM IChub2RlKSA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmICh0bXApOwogCQkgICAgfQogCQkg IGVsc2UKIAkJICAgIE9NUF9DTEFVU0VfREVDTCAobm9kZSkgPSBkZWNsOworCQkgIGlmICgo VFJFRV9DT0RFIChkZWNsKSAhPSBQQVJNX0RFQ0wKKwkJICAgICAgIHx8IERFQ0xfQVJUSUZJ Q0lBTCAoT01QX0NMQVVTRV9ERUNMIChub2RlKSkpCisJCSAgICAgICYmIG4tPnN5bS0+dHMu dHlwZSA9PSBCVF9ERVJJVkVECisJCSAgICAgICYmIG4tPnN5bS0+dHMudS5kZXJpdmVkLT5h dHRyLmFsbG9jX2NvbXApCisJCSAgICB7CisJCSAgICAgIC8qIFNhdmUgYXJyYXkgZGVzY3Jp cHRvciBmb3IgdXNlIGluCisJCQkgZ2ZjX29tcF9kZWVwX21hcHBpbmd7LF9wLF9jbnR9OyBm b3JjZSBldmFsdWF0ZQorCQkJIHRvIGVuc3VyZSB0aGF0IGl0IGlzIG5vdCBnaW1wbGlmaWVk ICsgaXMgYSBkZWNsLiAgKi8KKwkJICAgICAgdHJlZSB0bXAgPSBPTVBfQ0xBVVNFX1NJWkUg KG5vZGUpOworCQkgICAgICBpZiAodG1wID09IE5VTExfVFJFRSkKKwkJCXRtcCA9IERFQ0xf UCAoZGVjbCkgPyBERUNMX1NJWkVfVU5JVCAoZGVjbCkKKwkJCQkJICAgIDogVFlQRV9TSVpF X1VOSVQgKFRSRUVfVFlQRSAoZGVjbCkpOworCQkgICAgICB0cmVlIHZhciA9IGdmY19jcmVh dGVfdmFyIChUUkVFX1RZUEUgKHRtcCksIE5VTEwpOworCQkgICAgICBnZmNfYWRkX21vZGlm eV9sb2MgKGlucHV0X2xvY2F0aW9uLCBibG9jaywgdmFyLCB0bXApOworCQkgICAgICBPTVBf Q0xBVVNFX1NJWkUgKG5vZGUpID0gdmFyOworCQkgICAgICBnZmNfYWxsb2NhdGVfbGFuZ19k ZWNsICh2YXIpOworCQkgICAgICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9PSBJTkRJUkVDVF9S RUYpCisJCQlkZWNsID0gVFJFRV9PUEVSQU5EIChkZWNsLCAwKTsKKwkJICAgICAgaWYgKFRS RUVfQ09ERSAoZGVjbCkgPT0gSU5ESVJFQ1RfUkVGKQorCQkJZGVjbCA9IFRSRUVfT1BFUkFO RCAoZGVjbCwgMCk7CisJCSAgICAgIGlmIChERUNMX0xBTkdfU1BFQ0lGSUMgKGRlY2wpCisJ CQkgICYmIEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKGRlY2wpKQorCQkJR0ZDX0RFQ0xf U0FWRURfREVTQ1JJUFRPUiAodmFyKQorCQkJICA9IEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBU T1IgKGRlY2wpOworCQkgICAgICBlbHNlCisJCQlHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9S ICh2YXIpID0gZGVjbDsKKwkJICAgIH0KIAkJfQogCSAgICAgIGVsc2UgaWYgKG4tPmV4cHIK IAkJICAgICAgICYmIG4tPmV4cHItPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCkBAIC0z MzU2LDYgKzQ3MzQsMzEgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAq YmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgT01QX0NMQVVTRV9TSVpF IChub2RlMykKIAkJCSAgICA9IFRZUEVfU0laRV9VTklUIChnZmNfY2hhcmxlbl90eXBlX25v ZGUpOwogCQkJfQorCQkgICAgICBpZiAoIW9wZW5hY2MKKwkJCSAgJiYgbi0+ZXhwci0+dHMu dHlwZSA9PSBCVF9ERVJJVkVECisJCQkgICYmIG4tPmV4cHItPnRzLnUuZGVyaXZlZC0+YXR0 ci5hbGxvY19jb21wKQorCQkJeworCQkJICAvKiBTYXZlIGFycmF5IGRlc2NyaXB0b3IgZm9y IHVzZSBpbgorCQkJICAgICBnZmNfb21wX2RlZXBfbWFwcGluZ3ssX3AsX2NudH07IGZvcmNl IGV2YWx1YXRlCisJCQkgICAgIHRvIGVuc3VyZSB0aGF0IGl0IGlzIG5vdCBnaW1wbGlmaWVk ICsgaXMgYSBkZWNsLiAgKi8KKwkJCSAgdHJlZSB0bXAgPSBPTVBfQ0xBVVNFX1NJWkUgKG5v ZGUpOworCQkJICBpZiAodG1wID09IE5VTExfVFJFRSkKKwkJCSAgICB0bXAgPSAoREVDTF9Q IChzZS5leHByKQorCQkJCSAgID8gREVDTF9TSVpFX1VOSVQgKHNlLmV4cHIpCisJCQkJICAg OiBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChzZS5leHByKSkpOworCQkJICB0cmVlIHZh ciA9IGdmY19jcmVhdGVfdmFyIChUUkVFX1RZUEUgKHRtcCksIE5VTEwpOworCQkJICBnZmNf YWRkX21vZGlmeV9sb2MgKGlucHV0X2xvY2F0aW9uLCBibG9jaywgdmFyLCB0bXApOworCQkJ ICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpID0gdmFyOworCQkJICBnZmNfYWxsb2NhdGVfbGFu Z19kZWNsICh2YXIpOworCQkJICBpZiAoVFJFRV9DT0RFIChzZS5leHByKSA9PSBJTkRJUkVD VF9SRUYpCisJCQkgICAgc2UuZXhwciA9IFRSRUVfT1BFUkFORCAoc2UuZXhwciwgMCk7CisJ CQkgIGlmIChERUNMX0xBTkdfU1BFQ0lGSUMgKHNlLmV4cHIpCisJCQkgICAgICAmJiBHRkNf REVDTF9TQVZFRF9ERVNDUklQVE9SIChzZS5leHByKSkKKwkJCSAgICBHRkNfREVDTF9TQVZF RF9ERVNDUklQVE9SICh2YXIpCisJCQkgICAgICA9IEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBU T1IgKHNlLmV4cHIpOworCQkJICBlbHNlCisJCQkgICAgR0ZDX0RFQ0xfU0FWRURfREVTQ1JJ UFRPUiAodmFyKSA9IHNlLmV4cHI7CisJCQl9CiAJCSAgICB9CiAJCX0KIAkgICAgICBlbHNl IGlmIChuLT5leHByCkBAIC0zMzk0LDcgKzQ3OTcsNyBAQCBnZmNfdHJhbnNfb21wX2NsYXVz ZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkg ICAgICAmJiAobGFzdHJlZi0+dS5jLmNvbXBvbmVudC0+dHMudHlwZSA9PSBCVF9ERVJJVkVE CiAJCQkgIHx8IGxhc3RyZWYtPnUuYy5jb21wb25lbnQtPnRzLnR5cGUgPT0gQlRfQ0xBU1Mp KQogCQkgICAgewotCQkgICAgICBpZiAocG9pbnRlciB8fCAob3BlbmFjYyAmJiBhbGxvY2F0 YWJsZSkpCisJCSAgICAgIGlmIChwb2ludGVyIHx8IGFsbG9jYXRhYmxlKQogCQkJewogCQkJ ICB0cmVlIGRhdGEsIHNpemU7CiAKQEAgLTM0MjgsNiArNDgzMSwyMiBAQCBnZmNfdHJhbnNf b21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1 c2VzLAogCQkJICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpCiAJCQkgICAgPSBUWVBFX1NJWkVf VU5JVCAoVFJFRV9UWVBFIChpbm5lcikpOwogCQkJfQorCQkgICAgICBpZiAoIW9wZW5hY2MK KwkJCSAgJiYgbi0+ZXhwci0+dHMudHlwZSA9PSBCVF9ERVJJVkVECisJCQkgICYmIG4tPmV4 cHItPnRzLnUuZGVyaXZlZC0+YXR0ci5hbGxvY19jb21wKQorCQkJeworCQkJICAvKiBTYXZl IGFycmF5IGRlc2NyaXB0b3IgZm9yIHVzZSBpbgorCQkJICAgICBnZmNfb21wX2RlZXBfbWFw cGluZ3ssX3AsX2NudH07IGZvcmNlIGV2YWx1YXRlCisJCQkgICAgIHRvIGVuc3VyZSB0aGF0 IGl0IGlzIG5vdCBnaW1wbGlmaWVkICsgaXMgYSBkZWNsLiAgKi8KKwkJCSAgdHJlZSB0bXAg PSBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpOworCQkJICB0cmVlIHZhciA9IGdmY19jcmVhdGVf dmFyIChUUkVFX1RZUEUgKHRtcCksIE5VTEwpOworCQkJICBnZmNfYWRkX21vZGlmeV9sb2Mg KGlucHV0X2xvY2F0aW9uLCBibG9jaywgdmFyLCB0bXApOworCQkJICBPTVBfQ0xBVVNFX1NJ WkUgKG5vZGUpID0gdmFyOworCQkJICBnZmNfYWxsb2NhdGVfbGFuZ19kZWNsICh2YXIpOwor CQkJICBpZiAoVFJFRV9DT0RFIChpbm5lcikgPT0gSU5ESVJFQ1RfUkVGKQorCQkJICAgIGlu bmVyID0gVFJFRV9PUEVSQU5EIChpbm5lciwgMCk7CisJCQkgIEdGQ19ERUNMX1NBVkVEX0RF U0NSSVBUT1IgKHZhcikgPSBpbm5lcjsKKwkJCX0KIAkJICAgIH0KIAkJICBlbHNlIGlmIChs YXN0cmVmLT50eXBlID09IFJFRl9BUlJBWQogCQkJICAgJiYgbGFzdHJlZi0+dS5hci50eXBl ID09IEFSX0ZVTEwpCkBAIC0zNDk5LDYgKzQ5MTgsMjIgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1 c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJ CSAgICB7CiAJCQkgICAgICBub2RlMiA9IG5vZGU7CiAJCQkgICAgICBub2RlID0gZGVzY19u b2RlOyAgLyogUHV0IGZpcnN0LiAgKi8KKwkJCSAgICAgIGlmIChuLT5leHByLT50cy50eXBl ID09IEJUX0RFUklWRUQKKwkJCQkgICYmIG4tPmV4cHItPnRzLnUuZGVyaXZlZC0+YXR0ci5h bGxvY19jb21wKQorCQkJCXsKKwkJCQkgIC8qIFNhdmUgYXJyYXkgZGVzY3JpcHRvciBmb3Ig dXNlCisJCQkJICAgICBpbiBnZmNfb21wX2RlZXBfbWFwcGluZ3ssX3AsX2NudH07IGZvcmNl CisJCQkJICAgICBldmFsdWF0ZSB0byBlbnN1cmUgdGhhdCBpdCBpcworCQkJCSAgICAgbm90 IGdpbXBsaWZpZWQgKyBpcyBhIGRlY2wuICAqLworCQkJCSAgdHJlZSB0bXAgPSBPTVBfQ0xB VVNFX1NJWkUgKG5vZGUyKTsKKwkJCQkgIHRyZWUgdmFyID0gZ2ZjX2NyZWF0ZV92YXIgKFRS RUVfVFlQRSAodG1wKSwKKwkJCQkJCQkgICAgIE5VTEwpOworCQkJCSAgZ2ZjX2FkZF9tb2Rp ZnlfbG9jIChpbnB1dF9sb2NhdGlvbiwgYmxvY2ssCisJCQkJCQkgICAgICB2YXIsIHRtcCk7 CisJCQkJICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUyKSA9IHZhcjsKKwkJCQkgIGdmY19hbGxv Y2F0ZV9sYW5nX2RlY2wgKHZhcik7CisJCQkJICBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9S ICh2YXIpID0gaW5uZXI7CisJCQkJfQogCQkJICAgIH0KIAkJCSAgbm9kZTMgPSBidWlsZF9v bXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7 CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy10eXBlcy5jYyBiL2djYy9mb3J0cmFu L3RyYW5zLXR5cGVzLmNjCmluZGV4IDNjZGM1MjllYjI4Li42MjkzNWIxYzkxOCAxMDA2NDQK LS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJh bnMtdHlwZXMuY2MKQEAgLTE0NDksOCArMTQ0OSwxNiBAQCBnZmNfYnVpbGRfYXJyYXlfdHlw ZSAodHJlZSB0eXBlLCBnZmNfYXJyYXlfc3BlYyAqIGFzLAogICAgIGFraW5kID0gY29udGln dW91cyA/IEdGQ19BUlJBWV9BU1NVTUVEX1NIQVBFX0NPTlQKIAkJICAgICAgIDogR0ZDX0FS UkFZX0FTU1VNRURfU0hBUEU7CiAgIGVsc2UgaWYgKGFzLT50eXBlID09IEFTX0FTU1VNRURf UkFOSykKLSAgICBha2luZCA9IGNvbnRpZ3VvdXMgPyBHRkNfQVJSQVlfQVNTVU1FRF9SQU5L X0NPTlQKLQkJICAgICAgIDogR0ZDX0FSUkFZX0FTU1VNRURfUkFOSzsKKyAgICB7CisgICAg ICBpZiAoYWtpbmQgPT0gR0ZDX0FSUkFZX0FMTE9DQVRBQkxFKQorCWFraW5kID0gR0ZDX0FS UkFZX0FTU1VNRURfUkFOS19BTExPQ0FUQUJMRTsKKyAgICAgIGVsc2UgaWYgKGFraW5kID09 IEdGQ19BUlJBWV9QT0lOVEVSIHx8IGFraW5kID09IEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQp CisJYWtpbmQgPSBjb250aWd1b3VzID8gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVS X0NPTlQKKwkJCSAgIDogR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVSOworICAgICAg ZWxzZQorCWFraW5kID0gY29udGlndW91cyA/IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQ09O VAorCQkJICAgOiBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LOworICAgIH0KICAgcmV0dXJuIGdm Y19nZXRfYXJyYXlfdHlwZV9ib3VuZHMgKHR5cGUsIGFzLT5yYW5rID09IC0xCiAJCQkJCSAg PyBHRkNfTUFYX0RJTUVOU0lPTlMgOiBhcy0+cmFuaywKIAkJCQkgICAgY29yYW5rLCBsYm91 bmQsIHVib3VuZCwgMCwgYWtpbmQsCkBAIC0yNzExLDkgKzI3MTksMTAgQEAgZ2ZjX2dldF9k ZXJpdmVkX3R5cGUgKGdmY19zeW1ib2wgKiBkZXJpdmVkLCBpbnQgY29kaW1lbikKICAgICB9 CiAKICAgaWYgKGRlcml2ZWQtPmNvbXBvbmVudHMKLQkmJiBkZXJpdmVkLT5jb21wb25lbnRz LT50cy50eXBlID09IEJUX0RFUklWRUQKLQkmJiBzdHJjbXAgKGRlcml2ZWQtPmNvbXBvbmVu dHMtPm5hbWUsICJfZGF0YSIpID09IDAKLQkmJiBkZXJpdmVkLT5jb21wb25lbnRzLT50cy51 LmRlcml2ZWQtPmF0dHIudW5saW1pdGVkX3BvbHltb3JwaGljKQorICAgICAgJiYgZGVyaXZl ZC0+Y29tcG9uZW50cy0+dHMudHlwZSA9PSBCVF9ERVJJVkVECisgICAgICAmJiBzdGFydHN3 aXRoIChkZXJpdmVkLT5uYW1lLCAiX19jbGFzcyIpCisgICAgICAmJiBzdHJjbXAgKGRlcml2 ZWQtPmNvbXBvbmVudHMtPm5hbWUsICJfZGF0YSIpID09IDAKKyAgICAgICYmIGRlcml2ZWQt PmNvbXBvbmVudHMtPnRzLnUuZGVyaXZlZC0+YXR0ci51bmxpbWl0ZWRfcG9seW1vcnBoaWMp CiAgICAgdW5saW1pdGVkX2VudGl0eSA9IHRydWU7CiAKICAgLyogR28gdGhyb3VnaCB0aGUg ZGVyaXZlZCB0eXBlIGNvbXBvbmVudHMsIGJ1aWxkaW5nIHRoZW0gYXMKQEAgLTI4MTIsMTYg KzI4MjEsMjYgQEAgZ2ZjX2dldF9kZXJpdmVkX3R5cGUgKGdmY19zeW1ib2wgKiBkZXJpdmVk LCBpbnQgY29kaW1lbikKIAkgIGlmIChjLT5hdHRyLnBvaW50ZXIgfHwgYy0+YXR0ci5hbGxv Y2F0YWJsZSB8fCBjLT5hdHRyLnBkdF9hcnJheSkKIAkgICAgewogCSAgICAgIGVudW0gZ2Zj X2FycmF5X2tpbmQgYWtpbmQ7Ci0JICAgICAgaWYgKGMtPmF0dHIucG9pbnRlcikKKwkgICAg ICBib29sIGlzX3B0ciA9ICgoYyA9PSBkZXJpdmVkLT5jb21wb25lbnRzCisJCQkgICAgICAm JiBkZXJpdmVkLT5jb21wb25lbnRzLT50cy50eXBlID09IEJUX0RFUklWRUQKKwkJCSAgICAg ICYmIHN0YXJ0c3dpdGggKGRlcml2ZWQtPm5hbWUsICJfX2NsYXNzIikKKwkJCSAgICAgICYm IChzdHJjbXAgKGRlcml2ZWQtPmNvbXBvbmVudHMtPm5hbWUsICJfZGF0YSIpCisJCQkJICA9 PSAwKSkKKwkJCSAgICAgPyBjLT5hdHRyLmNsYXNzX3BvaW50ZXIgOiBjLT5hdHRyLnBvaW50 ZXIpOworCSAgICAgIGlmIChpc19wdHIpCiAJCWFraW5kID0gYy0+YXR0ci5jb250aWd1b3Vz ID8gR0ZDX0FSUkFZX1BPSU5URVJfQ09OVAogCQkJCQkgICA6IEdGQ19BUlJBWV9QT0lOVEVS OwotCSAgICAgIGVsc2UKKwkgICAgICBlbHNlIGlmIChjLT5hdHRyLmFsbG9jYXRhYmxlKQog CQlha2luZCA9IEdGQ19BUlJBWV9BTExPQ0FUQUJMRTsKKwkgICAgICBlbHNlIGlmIChjLT5h cy0+dHlwZSA9PSBBU19BU1NVTUVEX1JBTkspCisJCWFraW5kID0gR0ZDX0FSUkFZX0FTU1VN RURfUkFOSzsKKwkgICAgICBlbHNlCisJCS8qIEZJWE1FIOKAkyBzZWUgUFIgZm9ydHJhbi8x MDQ2NTEuICAqLworCQlha2luZCA9IEdGQ19BUlJBWV9BU1NVTUVEX1NIQVBFOwogCSAgICAg IC8qIFBvaW50ZXJzIHRvIGFycmF5cyBhcmVuJ3QgYWN0dWFsbHkgcG9pbnRlciB0eXBlcy4g IFRoZQogCSAgICAgICAgIGRlc2NyaXB0b3JzIGFyZSBzZXBhcmF0ZSwgYnV0IHRoZSBkYXRh IGlzIGNvbW1vbi4gICovCiAJICAgICAgZmllbGRfdHlwZSA9IGdmY19idWlsZF9hcnJheV90 eXBlIChmaWVsZF90eXBlLCBjLT5hcywgYWtpbmQsCi0JCQkJCQkgIWMtPmF0dHIudGFyZ2V0 Ci0JCQkJCQkgJiYgIWMtPmF0dHIucG9pbnRlciwKKwkJCQkJCSAhYy0+YXR0ci50YXJnZXQg JiYgIWlzX3B0ciwKIAkJCQkJCSBjLT5hdHRyLmNvbnRpZ3VvdXMsCiAJCQkJCQkgY29kaW1l bik7CiAJICAgIH0KQEAgLTM0NzIsMTUgKzM0OTEsMjIgQEAgZ2ZjX2dldF9hcnJheV9kZXNj cl9pbmZvIChjb25zdF90cmVlIHR5cGUsIHN0cnVjdCBhcnJheV9kZXNjcl9pbmZvICppbmZv KQogICAgIHQgPSBmb2xkX2J1aWxkX3BvaW50ZXJfcGx1cyAodCwgZGF0YV9vZmYpOwogICB0 ID0gYnVpbGQxIChOT1BfRVhQUiwgYnVpbGRfcG9pbnRlcl90eXBlIChwdHJfdHlwZV9ub2Rl KSwgdCk7CiAgIGluZm8tPmRhdGFfbG9jYXRpb24gPSBidWlsZDEgKElORElSRUNUX1JFRiwg cHRyX3R5cGVfbm9kZSwgdCk7Ci0gIGlmIChHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkg PT0gR0ZDX0FSUkFZX0FMTE9DQVRBQkxFKQorICBpZiAoR0ZDX1RZUEVfQVJSQVlfQUtJTkQg KHR5cGUpID09IEdGQ19BUlJBWV9BTExPQ0FUQUJMRQorICAgICAgfHwgR0ZDX1RZUEVfQVJS QVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQUxMT0NBVEFCTEUp CiAgICAgaW5mby0+YWxsb2NhdGVkID0gYnVpbGQyIChORV9FWFBSLCBsb2dpY2FsX3R5cGVf bm9kZSwKIAkJCSAgICAgIGluZm8tPmRhdGFfbG9jYXRpb24sIG51bGxfcG9pbnRlcl9ub2Rl KTsKICAgZWxzZSBpZiAoR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJB WV9QT0lOVEVSCi0JICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19B UlJBWV9QT0lOVEVSX0NPTlQpCisJICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUp ID09IEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQKKwkgICB8fCBHRkNfVFlQRV9BUlJBWV9BS0lO RCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVSCisJICAgfHwgKEdG Q19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKQorCSAgICAgICA9PSBHRkNfQVJSQVlfQVNTVU1F RF9SQU5LX1BPSU5URVJfQ09OVCkpCiAgICAgaW5mby0+YXNzb2NpYXRlZCA9IGJ1aWxkMiAo TkVfRVhQUiwgbG9naWNhbF90eXBlX25vZGUsCiAJCQkgICAgICAgaW5mby0+ZGF0YV9sb2Nh dGlvbiwgbnVsbF9wb2ludGVyX25vZGUpOwogICBpZiAoKEdGQ19UWVBFX0FSUkFZX0FLSU5E ICh0eXBlKSA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LCi0gICAgICAgfHwgR0ZDX1RZUEVf QVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQ09OVCkKKyAg ICAgICB8fCBHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FTU1VN RURfUkFOS19DT05UCisgICAgICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09 IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQUxMT0NBVEFCTEUKKyAgICAgICB8fCBHRkNfVFlQ RV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVS CisgICAgICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9B U1NVTUVEX1JBTktfUE9JTlRFUl9DT05UKQogICAgICAgJiYgZHdhcmZfdmVyc2lvbiA+PSA1 KQogICAgIHsKICAgICAgIHJhbmsgPSAxOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJh bnMuaCBiL2djYy9mb3J0cmFuL3RyYW5zLmgKaW5kZXggNzM4Yzc0ODdhNTYuLjJjYjczN2M5 NTA0IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy5oCisrKyBiL2djYy9mb3J0cmFu L3RyYW5zLmgKQEAgLTQzNSw2ICs0MzUsNyBAQCB0cmVlIGdmY19jbGFzc192dGFiX3NpemVf Z2V0ICh0cmVlKTsKIHRyZWUgZ2ZjX2NsYXNzX3Z0YWJfZGVmX2luaXRfZ2V0ICh0cmVlKTsK IHRyZWUgZ2ZjX2NsYXNzX3Z0YWJfY29weV9nZXQgKHRyZWUpOwogdHJlZSBnZmNfY2xhc3Nf dnRhYl9maW5hbF9nZXQgKHRyZWUpOwordHJlZSBnZmNfY2xhc3NfdnRhYl9jYWxsYmFja19n ZXQgKHRyZWUpOwogLyogR2V0IGFuIGFjY2Vzc29yIHRvIHRoZSB2dGFiJ3MgKiBmaWVsZCwg d2hlbiBhIHZwdHIgaGFuZGxlIGlzIHByZXNlbnQuICAqLwogdHJlZSBnZmNfdnB0cl9oYXNo X2dldCAodHJlZSk7CiB0cmVlIGdmY192cHRyX3NpemVfZ2V0ICh0cmVlKTsKQEAgLTgxNiw2 ICs4MTcsMTAgQEAgdHJlZSBnZmNfb21wX2NsYXVzZV9hc3NpZ25fb3AgKHRyZWUsIHRyZWUs IHRyZWUpOwogdHJlZSBnZmNfb21wX2NsYXVzZV9saW5lYXJfY3RvciAodHJlZSwgdHJlZSwg dHJlZSwgdHJlZSk7CiB0cmVlIGdmY19vbXBfY2xhdXNlX2R0b3IgKHRyZWUsIHRyZWUpOwog dm9pZCBnZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUsIGdpbXBsZV9zZXEgKiwgYm9vbCk7 Citib29sIGdmY19vbXBfZGVlcF9tYXBwaW5nX3AgKGNvbnN0IGdpbXBsZSAqLCB0cmVlKTsK K3RyZWUgZ2ZjX29tcF9kZWVwX21hcHBpbmdfY250IChjb25zdCBnaW1wbGUgKiwgdHJlZSwg Z2ltcGxlX3NlcSAqKTsKK3ZvaWQgZ2ZjX29tcF9kZWVwX21hcHBpbmcgKGNvbnN0IGdpbXBs ZSAqLCB0cmVlLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCB0cmVlLAorCQkJICAgdHJlZSwg dHJlZSwgdHJlZSwgdHJlZSwgZ2ltcGxlX3NlcSAqKTsKIGJvb2wgZ2ZjX29tcF9hbGxvY2F0 YWJsZV9wICh0cmVlKTsKIGJvb2wgZ2ZjX29tcF9zY2FsYXJfcCAodHJlZSwgYm9vbCk7CiBi b29sIGdmY19vbXBfc2NhbGFyX3RhcmdldF9wICh0cmVlKTsKQEAgLTk4Niw2ICs5OTEsOSBA QCBlbnVtIGdmY19hcnJheV9raW5kCiAgIEdGQ19BUlJBWV9BU1NVTUVEX1NIQVBFX0NPTlQs CiAgIEdGQ19BUlJBWV9BU1NVTUVEX1JBTkssCiAgIEdGQ19BUlJBWV9BU1NVTUVEX1JBTktf Q09OVCwKKyAgR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19BTExPQ0FUQUJMRSwKKyAgR0ZDX0FS UkFZX0FTU1VNRURfUkFOS19QT0lOVEVSLAorICBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX1BP SU5URVJfQ09OVCwKICAgR0ZDX0FSUkFZX0FMTE9DQVRBQkxFLAogICBHRkNfQVJSQVlfUE9J TlRFUiwKICAgR0ZDX0FSUkFZX1BPSU5URVJfQ09OVApkaWZmIC0tZ2l0IGEvZ2NjL2xhbmdo b29rcy1kZWYuaCBiL2djYy9sYW5naG9va3MtZGVmLmgKaW5kZXggNDljOGY1ODIwY2YuLmMz NWQzMDFlNDhiIDEwMDY0NAotLS0gYS9nY2MvbGFuZ2hvb2tzLWRlZi5oCisrKyBiL2djYy9s YW5naG9va3MtZGVmLmgKQEAgLTg0LDYgKzg0LDEwIEBAIGV4dGVybiBlbnVtIG9tcF9jbGF1 c2VfZGVmYXVsdF9raW5kIGxoZF9vbXBfcHJlZGV0ZXJtaW5lZF9zaGFyaW5nICh0cmVlKTsK IGV4dGVybiBlbnVtIG9tcF9jbGF1c2VfZGVmYXVsdG1hcF9raW5kIGxoZF9vbXBfcHJlZGV0 ZXJtaW5lZF9tYXBwaW5nICh0cmVlKTsKIGV4dGVybiB0cmVlIGxoZF9vbXBfYXNzaWdubWVu dCAodHJlZSwgdHJlZSwgdHJlZSk7CiBleHRlcm4gdm9pZCBsaGRfb21wX2ZpbmlzaF9jbGF1 c2UgKHRyZWUsIGdpbXBsZV9zZXEgKiwgYm9vbCk7CitleHRlcm4gYm9vbCBsaGRfb21wX2Rl ZXBfbWFwcGluZ19wIChjb25zdCBnaW1wbGUgKiwgdHJlZSk7CitleHRlcm4gdHJlZSBsaGRf b21wX2RlZXBfbWFwcGluZ19jbnQgKGNvbnN0IGdpbXBsZSAqLCB0cmVlLCBnaW1wbGVfc2Vx ICopOworZXh0ZXJuIHZvaWQgbGhkX29tcF9kZWVwX21hcHBpbmcgKGNvbnN0IGdpbXBsZSAq LCB0cmVlLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAorCQkJCSAgdHJlZSwgdHJlZSwgdHJl ZSwgdHJlZSwgdHJlZSwgZ2ltcGxlX3NlcSAqKTsKIHN0cnVjdCBnaW1wbGlmeV9vbXBfY3R4 OwogZXh0ZXJuIHZvaWQgbGhkX29tcF9maXJzdHByaXZhdGl6ZV90eXBlX3NpemVzIChzdHJ1 Y3QgZ2ltcGxpZnlfb21wX2N0eCAqLAogCQkJCQkgICAgICAgdHJlZSk7CkBAIC0yNzAsNiAr Mjc0LDkgQEAgZXh0ZXJuIHRyZWUgbGhkX3VuaXRfc2l6ZV93aXRob3V0X3JldXNhYmxlX3Bh ZGRpbmcgKHRyZWUpOwogI2RlZmluZSBMQU5HX0hPT0tTX09NUF9DTEFVU0VfTElORUFSX0NU T1IgTlVMTAogI2RlZmluZSBMQU5HX0hPT0tTX09NUF9DTEFVU0VfRFRPUiBob29rX3RyZWVf dHJlZV90cmVlX251bGwKICNkZWZpbmUgTEFOR19IT09LU19PTVBfRklOSVNIX0NMQVVTRSBs aGRfb21wX2ZpbmlzaF9jbGF1c2UKKyNkZWZpbmUgTEFOR19IT09LU19PTVBfREVFUF9NQVBQ SU5HX1AgbGhkX29tcF9kZWVwX21hcHBpbmdfcAorI2RlZmluZSBMQU5HX0hPT0tTX09NUF9E RUVQX01BUFBJTkdfQ05UIGxoZF9vbXBfZGVlcF9tYXBwaW5nX2NudAorI2RlZmluZSBMQU5H X0hPT0tTX09NUF9ERUVQX01BUFBJTkcgbGhkX29tcF9kZWVwX21hcHBpbmcKICNkZWZpbmUg TEFOR19IT09LU19PTVBfQUxMT0NBVEFCTEVfUCBob29rX2Jvb2xfdHJlZV9mYWxzZQogI2Rl ZmluZSBMQU5HX0hPT0tTX09NUF9TQ0FMQVJfUCBsaGRfb21wX3NjYWxhcl9wCiAjZGVmaW5l IExBTkdfSE9PS1NfT01QX1NDQUxBUl9UQVJHRVRfUCBob29rX2Jvb2xfdHJlZV9mYWxzZQpA QCAtMzAzLDYgKzMxMCw5IEBAIGV4dGVybiB0cmVlIGxoZF91bml0X3NpemVfd2l0aG91dF9y ZXVzYWJsZV9wYWRkaW5nICh0cmVlKTsKICAgTEFOR19IT09LU19PTVBfQ0xBVVNFX0xJTkVB Ul9DVE9SLCBcCiAgIExBTkdfSE9PS1NfT01QX0NMQVVTRV9EVE9SLCBcCiAgIExBTkdfSE9P S1NfT01QX0ZJTklTSF9DTEFVU0UsIFwKKyAgTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5H X1AsIFwKKyAgTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HX0NOVCwgXAorICBMQU5HX0hP T0tTX09NUF9ERUVQX01BUFBJTkcsIFwKICAgTEFOR19IT09LU19PTVBfQUxMT0NBVEFCTEVf UCwgXAogICBMQU5HX0hPT0tTX09NUF9TQ0FMQVJfUCwgXAogICBMQU5HX0hPT0tTX09NUF9T Q0FMQVJfVEFSR0VUX1AsIFwKZGlmZiAtLWdpdCBhL2djYy9sYW5naG9va3MuY2MgYi9nY2Mv bGFuZ2hvb2tzLmNjCmluZGV4IGRmOTcwNjc4YTA4Li4zOGZjMzJiZmFjYyAxMDA2NDQKLS0t IGEvZ2NjL2xhbmdob29rcy5jYworKysgYi9nY2MvbGFuZ2hvb2tzLmNjCkBAIC02MzQsNiAr NjM0LDMwIEBAIGxoZF9vbXBfZmluaXNoX2NsYXVzZSAodHJlZSwgZ2ltcGxlX3NlcSAqLCBi b29sKQogewogfQogCisvKiBSZXR1cm5zIHRydWUgd2hlbiBhZGRpdGlvbmFsIG1hcHBpbmdz IGZvciBhIGRlY2wgYXJlIG5lZWRlZC4gICovCisKK2Jvb2wKK2xoZF9vbXBfZGVlcF9tYXBw aW5nX3AgKGNvbnN0IGdpbXBsZSAqLCB0cmVlKQoreworICByZXR1cm4gZmFsc2U7Cit9CisK Ky8qIFJldHVybnMgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbWFwcGluZ3MgZm9yIGEgZGVjbC4g ICovCisKK3RyZWUKK2xoZF9vbXBfZGVlcF9tYXBwaW5nX2NudCAoY29uc3QgZ2ltcGxlICos IHRyZWUsIGdpbXBsZV9zZXEgKikKK3sKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyog RG8gdGhlIGFkZGl0aW9uYWwgbWFwcGluZ3MuICAqLworCit2b2lkCitsaGRfb21wX2RlZXBf bWFwcGluZyAoY29uc3QgZ2ltcGxlICosIHRyZWUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQs IHRyZWUsIHRyZWUsCisJCSAgICAgIHRyZWUsIHRyZWUsIHRyZWUsIGdpbXBsZV9zZXEgKikK K3sKK30KKwogLyogUmV0dXJuIHRydWUgaWYgREVDTCBpcyBhIHNjYWxhciB2YXJpYWJsZSAo Zm9yIHRoZSBwdXJwb3NlIG9mCiAgICBpbXBsaWNpdCBmaXJzdHByaXZhdGl6YXRpb24gJiBt YXBwaW5nKS4gT25seSBpZiBhbGxvY19wdHJfb2sKICAgIGFyZSBhbGxvY2F0YWJsZXMgYW5k IHBvaW50ZXJzIGFjY2VwdGVkLiAqLwpkaWZmIC0tZ2l0IGEvZ2NjL2xhbmdob29rcy5oIGIv Z2NjL2xhbmdob29rcy5oCmluZGV4IDBlZWMxYjBmN2FkLi5iZTcwMDhhOGE0OSAxMDA2NDQK LS0tIGEvZ2NjL2xhbmdob29rcy5oCisrKyBiL2djYy9sYW5naG9va3MuaApAQCAtMzA2LDYg KzMwNiwyMSBAQCBzdHJ1Y3QgbGFuZ19ob29rc19mb3JfZGVjbHMKICAgLyogRG8gbGFuZ3Vh Z2Ugc3BlY2lmaWMgY2hlY2tpbmcgb24gYW4gaW1wbGljaXRseSBkZXRlcm1pbmVkIGNsYXVz ZS4gICovCiAgIHZvaWQgKCpvbXBfZmluaXNoX2NsYXVzZSkgKHRyZWUgY2xhdXNlLCBnaW1w bGVfc2VxICpwcmVfcCwgYm9vbCk7CiAKKyAgLyogQWRkaXRpb25hbCBsYW5ndWFnZS1zcGVj aWZpYyBtYXBwaW5ncyBmb3IgYSBkZWNsOyByZXR1cm5zIHRydWUKKyAgICAgaWYgdGhvc2Ug bWF5IG9jY3VyLiAgKi8KKyAgYm9vbCAoKm9tcF9kZWVwX21hcHBpbmdfcCkgKGNvbnN0IGdp bXBsZSAqY3R4X3N0bXQsIHRyZWUgY2xhdXNlKTsKKworICAvKiBBZGRpdGlvbmFsIGxhbmd1 YWdlLXNwZWNpZmljIG1hcHBpbmdzIGZvciBhIGRlY2w7IHJldHVybnMgdGhlCisgICAgIG51 bWJlciBvZiBhZGRpdGlvbmFsIG1hcHBpbmdzIG5lZWRlZC4gICovCisgIHRyZWUgKCpvbXBf ZGVlcF9tYXBwaW5nX2NudCkgKGNvbnN0IGdpbXBsZSAqY3R4X3N0bXQsIHRyZWUgY2xhdXNl LAorCQkJCWdpbXBsZV9zZXEgKnNlcSk7CisKKyAgLyogRG8gdGhlIGFjdHVhbCBhZGRpdGlv bmFsIGxhbmd1YWdlLXNwZWNpZmljIG1hcHBpbmdzIGZvciBhIGRlY2wuICovCisgIHZvaWQg KCpvbXBfZGVlcF9tYXBwaW5nKSAoY29uc3QgZ2ltcGxlICpzdG10LCB0cmVlIGNsYXVzZSwK KwkJCSAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHRraW5kLAorCQkJICAgIHRyZWUgZGF0 YSwgdHJlZSBzaXplcywgdHJlZSBraW5kcywKKwkJCSAgICB0cmVlIG9mZnNldF9kYXRhLCB0 cmVlIG9mZnNldCwgZ2ltcGxlX3NlcSAqc2VxKTsKKwogICAvKiBSZXR1cm4gdHJ1ZSBpZiBE RUNMIGlzIGFuIGFsbG9jYXRhYmxlIHZhcmlhYmxlIChmb3IgdGhlIHB1cnBvc2Ugb2YKICAg ICAgaW1wbGljaXQgbWFwcGluZykuICAqLwogICBib29sICgqb21wX2FsbG9jYXRhYmxlX3Ap ICh0cmVlIGRlY2wpOwpkaWZmIC0tZ2l0IGEvZ2NjL29tcC1leHBhbmQuY2MgYi9nY2Mvb21w LWV4cGFuZC5jYwppbmRleCBlZTcwODMxNDc5My4uMWVmMTlhN2RlODQgMTAwNjQ0Ci0tLSBh L2djYy9vbXAtZXhwYW5kLmNjCisrKyBiL2djYy9vbXAtZXhwYW5kLmNjCkBAIC05Nzg2LDgg Kzk3ODYsOSBAQCBleHBhbmRfb21wX3RhcmdldCAoc3RydWN0IG9tcF9yZWdpb24gKnJlZ2lv bikKIAkJICAvKiBXZSdyZSBpZ25vcmluZyB0aGUgc3ViY29kZSBiZWNhdXNlIHdlJ3JlCiAJ CSAgICAgZWZmZWN0aXZlbHkgZG9pbmcgYSBTVFJJUF9OT1BTLiAgKi8KIAotCQkgIGlmIChU UkVFX0NPREUgKGFyZykgPT0gQUREUl9FWFBSCi0JCSAgICAgICYmIFRSRUVfT1BFUkFORCAo YXJnLCAwKSA9PSBzZW5kZXIpCisJCSAgaWYgKChUUkVFX0NPREUgKGFyZykgPT0gQUREUl9F WFBSCisJCSAgICAgICAmJiBUUkVFX09QRVJBTkQgKGFyZywgMCkgPT0gc2VuZGVyKQorCQkg ICAgICB8fCBhcmcgPT0gc2VuZGVyKQogCQkgICAgewogCQkgICAgICB0Z3Rjb3B5X3N0bXQg PSBzdG10OwogCQkgICAgICBicmVhazsKQEAgLTEwMTA1LDcgKzEwMTA2LDcgQEAgZXhwYW5k X29tcF90YXJnZXQgKHN0cnVjdCBvbXBfcmVnaW9uICpyZWdpb24pCiAgICAgICB0MyA9IHQy OwogICAgICAgdDQgPSB0MjsKICAgICB9Ci0gIGVsc2UKKyAgZWxzZSBpZiAoVFJFRV9WRUNf TEVOR1RIICh0KSA9PSAzKQogICAgIHsKICAgICAgIHQxID0gVFlQRV9NQVhfVkFMVUUgKFRZ UEVfRE9NQUlOIChUUkVFX1RZUEUgKFRSRUVfVkVDX0VMVCAodCwgMSkpKSk7CiAgICAgICB0 MSA9IHNpemVfYmlub3AgKFBMVVNfRVhQUiwgdDEsIHNpemVfaW50ICgxKSk7CkBAIC0xMDEx Myw2ICsxMDExNCwxNyBAQCBleHBhbmRfb21wX3RhcmdldCAoc3RydWN0IG9tcF9yZWdpb24g KnJlZ2lvbikKICAgICAgIHQzID0gYnVpbGRfZm9sZF9hZGRyX2V4cHIgKFRSRUVfVkVDX0VM VCAodCwgMSkpOwogICAgICAgdDQgPSBidWlsZF9mb2xkX2FkZHJfZXhwciAoVFJFRV9WRUNf RUxUICh0LCAyKSk7CiAgICAgfQorICBlbHNlCisgICAgeworICAgICAgdDEgPSBmb3JjZV9n aW1wbGVfb3BlcmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VMVCAodCwgMyksIHRydWUsIE5V TExfVFJFRSwKKwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NUTVQpOworICAgICAgdDIgPSBm b3JjZV9naW1wbGVfb3BlcmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VMVCAodCwgMCksIHRy dWUsIE5VTExfVFJFRSwKKwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NUTVQpOworICAgICAg dDMgPSBmb3JjZV9naW1wbGVfb3BlcmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VMVCAodCwg MSksIHRydWUsIE5VTExfVFJFRSwKKwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NUTVQpOwor ICAgICAgdDQgPSBmb3JjZV9naW1wbGVfb3BlcmFuZF9nc2kgKCZnc2ksIFRSRUVfVkVDX0VM VCAodCwgMiksIHRydWUsIE5VTExfVFJFRSwKKwkJCQkgICAgIHRydWUsIEdTSV9TQU1FX1NU TVQpOworICAgIH0KIAogICBnaW1wbGUgKmc7CiAgIGJvb2wgdGFnZ2luZyA9IGZhbHNlOwpk aWZmIC0tZ2l0IGEvZ2NjL29tcC1sb3cuY2MgYi9nY2Mvb21wLWxvdy5jYwppbmRleCAyMjk0 NDU2YjI3ZC4uN2Y4NmQyYTM3M2UgMTAwNjQ0Ci0tLSBhL2djYy9vbXAtbG93LmNjCisrKyBi L2djYy9vbXAtbG93LmNjCkBAIC03NjQsNyArNzY0LDEwIEBAIHN0YXRpYyB0cmVlCiBidWls ZF9zZW5kZXJfcmVmIChzcGxheV90cmVlX2tleSBrZXksIG9tcF9jb250ZXh0ICpjdHgpCiB7 CiAgIHRyZWUgZmllbGQgPSBsb29rdXBfc2ZpZWxkIChrZXksIGN0eCk7Ci0gIHJldHVybiBv bXBfYnVpbGRfY29tcG9uZW50X3JlZiAoY3R4LT5zZW5kZXJfZGVjbCwgZmllbGQpOworICB0 cmVlIHRtcCA9IGN0eC0+c2VuZGVyX2RlY2w7CisgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJF RV9UWVBFICh0bXApKSkKKyAgICB0bXAgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAodG1w KTsKKyAgcmV0dXJuIG9tcF9idWlsZF9jb21wb25lbnRfcmVmICh0bXAsIGZpZWxkKTsKIH0K IAogc3RhdGljIHRyZWUKQEAgLTExMzUsNyArMTEzOCw5IEBAIGZpeHVwX2NoaWxkX3JlY29y ZF90eXBlIChvbXBfY29udGV4dCAqY3R4KQogICAgIHR5cGUgPSBidWlsZF9xdWFsaWZpZWRf dHlwZSAodHlwZSwgVFlQRV9RVUFMX0NPTlNUKTsKIAogICBUUkVFX1RZUEUgKGN0eC0+cmVj ZWl2ZXJfZGVjbCkKLSAgICA9IGJ1aWxkX3F1YWxpZmllZF90eXBlIChidWlsZF9yZWZlcmVu Y2VfdHlwZSAodHlwZSksIFRZUEVfUVVBTF9SRVNUUklDVCk7CisgICAgPSBidWlsZF9xdWFs aWZpZWRfdHlwZSAoZmxleGlibGVfYXJyYXlfdHlwZV9wICh0eXBlKQorCQkJICAgID8gYnVp bGRfcG9pbnRlcl90eXBlICh0eXBlKQorCQkJICAgIDogYnVpbGRfcmVmZXJlbmNlX3R5cGUg KHR5cGUpLCBUWVBFX1FVQUxfUkVTVFJJQ1QpOwogfQogCiAvKiBJbnN0YW50aWF0ZSBkZWNs cyBhcyBuZWNlc3NhcnkgaW4gQ1RYIHRvIHNhdGlzZnkgdGhlIGRhdGEgc2hhcmluZwpAQCAt MTE0Niw2ICsxMTUxLDcgQEAgc2Nhbl9zaGFyaW5nX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywg b21wX2NvbnRleHQgKmN0eCkKIHsKICAgdHJlZSBjLCBkZWNsOwogICBib29sIHNjYW5fYXJy YXlfcmVkdWN0aW9ucyA9IGZhbHNlOworICBib29sIGZsZXhfYXJyYXlfcHRyID0gZmFsc2U7 CiAKICAgZm9yIChjID0gY2xhdXNlczsgYzsgYyA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQog ICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0VfQUxMT0NBVEUKQEAg LTE1MjYsNiArMTUzMiw4IEBAIHNjYW5fc2hhcmluZ19jbGF1c2VzICh0cmVlIGNsYXVzZXMs IG9tcF9jb250ZXh0ICpjdHgpCiAJCSAgJiYgIU9NUF9DTEFVU0VfTUFQX1pFUk9fQklBU19B UlJBWV9TRUNUSU9OIChjKSkKIAkJYnJlYWs7CiAJICAgIH0KKwkgIGlmICghZmxleF9hcnJh eV9wdHIpCisJICAgIGZsZXhfYXJyYXlfcHRyID0gbGFuZ19ob29rcy5kZWNscy5vbXBfZGVl cF9tYXBwaW5nX3AgKGN0eC0+c3RtdCwgYyk7CiAJICBpZiAoT01QX0NMQVVTRV9DT0RFIChj KSA9PSBPTVBfQ0xBVVNFX01BUAogCSAgICAgICYmIERFQ0xfUCAoZGVjbCkKIAkgICAgICAm JiAoT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfQVRUQUNICkBAIC0xOTMw LDYgKzE5MzgsMTggQEAgc2Nhbl9zaGFyaW5nX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywgb21w X2NvbnRleHQgKmN0eCkKIAkJICYmIE9NUF9DTEFVU0VfTElORUFSX0dJTVBMRV9TRVEgKGMp KQogCSAgc2Nhbl9vbXAgKCZPTVBfQ0xBVVNFX0xJTkVBUl9HSU1QTEVfU0VRIChjKSwgY3R4 KTsKICAgICB9CisgIGlmIChmbGV4X2FycmF5X3B0cikKKyAgICB7CisgICAgICB0cmVlIGZp ZWxkID0gYnVpbGRfcmFuZ2VfdHlwZSAoc2l6ZV90eXBlX25vZGUsCisJCQkJICAgICBidWls ZF9pbnRfY3N0dSAoc2l6ZV90eXBlX25vZGUsIDApLAorCQkJCSAgICAgTlVMTF9UUkVFKTsK KyAgICAgIGZpZWxkID0gYnVpbGRfYXJyYXlfdHlwZSAocHRyX3R5cGVfbm9kZSwgZmllbGQp OworICAgICAgZmllbGQgPSBidWlsZF9kZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBGSUVMRF9E RUNMLCBOVUxMX1RSRUUsIGZpZWxkKTsKKyAgICAgIFNFVF9ERUNMX0FMSUdOIChmaWVsZCwg VFlQRV9BTElHTiAocHRyX3R5cGVfbm9kZSkpOworICAgICAgREVDTF9DT05URVhUIChmaWVs ZCkgPSBjdHgtPnJlY29yZF90eXBlOworICAgICAgREVDTF9DSEFJTiAoZmllbGQpID0gVFlQ RV9GSUVMRFMgKGN0eC0+cmVjb3JkX3R5cGUpOworICAgICAgVFlQRV9GSUVMRFMgKGN0eC0+ cmVjb3JkX3R5cGUpID0gZmllbGQ7CisgICAgfQogfQogCiAvKiBDcmVhdGUgYSBuZXcgbmFt ZSBmb3Igb21wIGNoaWxkIGZ1bmN0aW9uLiAgUmV0dXJucyBhbiBpZGVudGlmaWVyLiAqLwpA QCAtMTI1NDAsNiArMTI1NjAsMTEgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRf aXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogICB1bnNpZ25lZCBpbnQgbWFw X2NudCA9IDA7CiAgIHRyZWUgaW5fcmVkdWN0aW9uX2NsYXVzZXMgPSBOVUxMX1RSRUU7CiAK KyAgdHJlZSBkZWVwX21hcF9jbnQgPSBOVUxMX1RSRUU7CisgIHRyZWUgZGVlcF9tYXBfZGF0 YSA9IE5VTExfVFJFRTsKKyAgdHJlZSBkZWVwX21hcF9vZmZzZXRfZGF0YSA9IE5VTExfVFJF RTsKKyAgdHJlZSBkZWVwX21hcF9vZmZzZXQgPSBOVUxMX1RSRUU7CisKICAgb2ZmbG9hZGVk ID0gaXNfZ2ltcGxlX29tcF9vZmZsb2FkZWQgKHN0bXQpOwogICBzd2l0Y2ggKGdpbXBsZV9v bXBfdGFyZ2V0X2tpbmQgKHN0bXQpKQogICAgIHsKQEAgLTEyNjEzLDYgKzEyNjM4LDggQEAg bG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29u dGV4dCAqY3R4KQogICBwdXNoX2dpbXBsaWZ5X2NvbnRleHQgKCk7CiAgIGZwbGlzdCA9IE5V TEw7CiAKKyAgaWxpc3QgPSBOVUxMOworICBvbGlzdCA9IE5VTEw7CiAgIGZvciAoYyA9IGNs YXVzZXM7IGMgOyBjID0gT01QX0NMQVVTRV9DSEFJTiAoYykpCiAgICAgc3dpdGNoIChPTVBf Q0xBVVNFX0NPREUgKGMpKQogICAgICAgewpAQCAtMTI2NjYsNiArMTI2OTMsMTYgQEAgbG93 ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4 dCAqY3R4KQogICAgICAgY2FzZSBPTVBfQ0xBVVNFX0ZST006CiAgICAgICBvYWNjX2ZpcnN0 cHJpdmF0ZToKIAl2YXIgPSBPTVBfQ0xBVVNFX0RFQ0wgKGMpOworCXsKKwkgIHRyZWUgZXh0 cmEgPSBsYW5nX2hvb2tzLmRlY2xzLm9tcF9kZWVwX21hcHBpbmdfY250IChzdG10LCBjLCAm aWxpc3QpOworCSAgaWYgKGV4dHJhICE9IE5VTExfVFJFRSAmJiBkZWVwX21hcF9jbnQgIT0g TlVMTF9UUkVFKQorCSAgICBkZWVwX21hcF9jbnQgPSBmb2xkX2J1aWxkMl9sb2MgKE9NUF9D TEFVU0VfTE9DQVRJT04gKGMpLCBQTFVTX0VYUFIsCisJCQkJCSAgICBzaXplX3R5cGVfbm9k ZSwgZGVlcF9tYXBfY250LAorCQkJCQkgICAgZXh0cmEpOworCSAgZWxzZSBpZiAoZXh0cmEg IT0gTlVMTF9UUkVFKQorCSAgICBkZWVwX21hcF9jbnQgPSBleHRyYTsKKwl9CisKIAlpZiAo IURFQ0xfUCAodmFyKSkKIAkgIHsKIAkgICAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykgIT0g T01QX0NMQVVTRV9NQVAKQEAgLTEyODkzLDE4ICsxMjkzMCwzMSBAQCBsb3dlcl9vbXBfdGFy Z2V0IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAg ICAgICByZWNvcmRfdmFyc19pbnRvIChnaW1wbGVfYmluZF92YXJzICh0Z3RfYmluZCksIGNo aWxkX2ZuKTsKICAgICB9CiAKLSAgb2xpc3QgPSBOVUxMOwotICBpbGlzdCA9IE5VTEw7CiAg IGlmIChjdHgtPnJlY29yZF90eXBlKQogICAgIHsKKyAgICAgIGlmIChkZWVwX21hcF9jbnQg JiYgVFJFRV9DT0RFIChkZWVwX21hcF9jbnQpID09IElOVEVHRVJfQ1NUKQorCS8qIG1hcF9j bnQgPSBtYXBfY250ICsgdHJlZV90b19od2kgKGRlZXBfbWFwX2NudCk7ICovCisJLyogZGVl cF9tYXBfY250ID0gTlVMTF9UUkVFOyAqLworCWdjY191bnJlYWNoYWJsZSAoKTsKKyAgICAg IGVsc2UgaWYgKGRlZXBfbWFwX2NudCkKKwl7CisJICBnY2NfYXNzZXJ0IChmbGV4aWJsZV9h cnJheV90eXBlX3AgKGN0eC0+cmVjb3JkX3R5cGUpKTsKKwkgIHRyZWUgbiA9IGNyZWF0ZV90 bXBfdmFyX3JhdyAoc2l6ZV90eXBlX25vZGUsICJubl9tYXAiKTsKKwkgIGdpbXBsZV9hZGRf dG1wX3ZhciAobik7CisJICBnaW1wbGlmeV9hc3NpZ24gKG4sIGRlZXBfbWFwX2NudCwgJmls aXN0KTsKKwkgIGRlZXBfbWFwX2NudCA9IG47CisJfQogICAgICAgY3R4LT5zZW5kZXJfZGVj bAotCT0gY3JlYXRlX3RtcF92YXIgKGN0eC0+cmVjb3JkX3R5cGUsICIub21wX2RhdGFfYXJy Iik7CisJPSBjcmVhdGVfdG1wX3ZhciAoZGVlcF9tYXBfY250ID8gYnVpbGRfcG9pbnRlcl90 eXBlIChjdHgtPnJlY29yZF90eXBlKQorCQkJCSAgICAgICA6IGN0eC0+cmVjb3JkX3R5cGUs ICIub21wX2RhdGFfYXJyIik7CiAgICAgICBERUNMX05BTUVMRVNTIChjdHgtPnNlbmRlcl9k ZWNsKSA9IDE7CiAgICAgICBUUkVFX0FERFJFU1NBQkxFIChjdHgtPnNlbmRlcl9kZWNsKSA9 IDE7Ci0gICAgICB0ID0gbWFrZV90cmVlX3ZlYyAoMyk7CisgICAgICB0ID0gbWFrZV90cmVl X3ZlYyAoZGVlcF9tYXBfY250ID8gNCA6IDMpOwogICAgICAgVFJFRV9WRUNfRUxUICh0LCAw KSA9IGN0eC0+c2VuZGVyX2RlY2w7CiAgICAgICBUUkVFX1ZFQ19FTFQgKHQsIDEpCi0JPSBj cmVhdGVfdG1wX3ZhciAoYnVpbGRfYXJyYXlfdHlwZV9uZWx0cyAoc2l6ZV90eXBlX25vZGUs IG1hcF9jbnQpLAorCT0gY3JlYXRlX3RtcF92YXIgKGRlZXBfbWFwX2NudAorCQkJICA/IGJ1 aWxkX3BvaW50ZXJfdHlwZSAoc2l6ZV90eXBlX25vZGUpCisJCQkgIDogYnVpbGRfYXJyYXlf dHlwZV9uZWx0cyAoc2l6ZV90eXBlX25vZGUsIG1hcF9jbnQpLAogCQkJICAiLm9tcF9kYXRh X3NpemVzIik7CiAgICAgICBERUNMX05BTUVMRVNTIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSA9 IDE7CiAgICAgICBUUkVFX0FERFJFU1NBQkxFIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSA9IDE7 CkBAIC0xMjkxMiwxMyArMTI5NjIsNjUgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogICAgICAgdHJlZSB0a2lu ZF90eXBlID0gc2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlOwogICAgICAgaW50IHRhbGlnbl9z aGlmdCA9IDg7CiAgICAgICBUUkVFX1ZFQ19FTFQgKHQsIDIpCi0JPSBjcmVhdGVfdG1wX3Zh ciAoYnVpbGRfYXJyYXlfdHlwZV9uZWx0cyAodGtpbmRfdHlwZSwgbWFwX2NudCksCisJPSBj cmVhdGVfdG1wX3ZhciAoZGVlcF9tYXBfY250CisJCQkgID8gYnVpbGRfcG9pbnRlcl90eXBl ICh0a2luZF90eXBlKQorCQkJICA6IGJ1aWxkX2FycmF5X3R5cGVfbmVsdHMgKHRraW5kX3R5 cGUsIG1hcF9jbnQpLAogCQkJICAiLm9tcF9kYXRhX2tpbmRzIik7CiAgICAgICBERUNMX05B TUVMRVNTIChUUkVFX1ZFQ19FTFQgKHQsIDIpKSA9IDE7CiAgICAgICBUUkVFX0FERFJFU1NB QkxFIChUUkVFX1ZFQ19FTFQgKHQsIDIpKSA9IDE7CiAgICAgICBUUkVFX1NUQVRJQyAoVFJF RV9WRUNfRUxUICh0LCAyKSkgPSAxOwogICAgICAgZ2ltcGxlX29tcF90YXJnZXRfc2V0X2Rh dGFfYXJnIChzdG10LCB0KTsKIAorICAgICAgaWYgKGRlZXBfbWFwX2NudCkKKwl7CisJICB0 cmVlIHRtcCwgc2l6ZTsKKwkgIHNpemUgPSBjcmVhdGVfdG1wX3ZhciAoc2l6ZV90eXBlX25v ZGUsIE5VTEwpOworCSAgREVDTF9OQU1FTEVTUyAoc2l6ZSkgPSAxOworCSAgZ2ltcGxpZnlf YXNzaWduIChzaXplLAorCQkJICAgZm9sZF9idWlsZDJfbG9jIChVTktOT1dOX0xPQ0FUSU9O LCBQTFVTX0VYUFIsCisJCQkJCSAgICBzaXplX3R5cGVfbm9kZSwgZGVlcF9tYXBfY250LAor CQkJCQkgICAgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsCisJCQkJCQkJICAgbWFw X2NudCkpLCAmaWxpc3QpOworCSAgVFJFRV9WRUNfRUxUICh0LCAzKSA9IHNpemU7CisKKwkg IHRyZWUgY2FsbCA9IGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fTUFMTE9DKTsK KwkgIHNpemUgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sIE1VTFRfRVhQ UiwKKwkJCQkgIHNpemVfdHlwZV9ub2RlLCBkZWVwX21hcF9jbnQsCisJCQkJICBUWVBFX1NJ WkVfVU5JVCAocHRyX3R5cGVfbm9kZSkpOworCSAgc2l6ZSA9IGZvbGRfYnVpbGQyX2xvYyAo VU5LTk9XTl9MT0NBVElPTiwgUExVU19FWFBSLAorCQkJCSAgc2l6ZV90eXBlX25vZGUsIHNp emUsCisJCQkJICBUWVBFX1NJWkVfVU5JVCAoY3R4LT5yZWNvcmRfdHlwZSkpOworCSAgdG1w ID0gYnVpbGRfY2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sIGNhbGwsIDEsIHNpemUp OworCSAgZ2ltcGxpZnlfYXNzaWduIChjdHgtPnNlbmRlcl9kZWNsLCB0bXAsICZpbGlzdCk7 CisKKwkgIHNpemUgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sIE1VTFRf RVhQUiwKKwkJCQkgIHNpemVfdHlwZV9ub2RlLCBUUkVFX1ZFQ19FTFQgKHQsIDMpLAorCQkJ CSAgVFlQRV9TSVpFX1VOSVQgKHNpemVfdHlwZV9ub2RlKSk7CisJICB0bXAgPSBidWlsZF9j YWxsX2V4cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwgY2FsbCwgMSwgc2l6ZSk7CisJICBnaW1w bGlmeV9hc3NpZ24gKFRSRUVfVkVDX0VMVCAodCwgMSksIHRtcCwgJmlsaXN0KTsKKworCSAg c2l6ZSA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgTVVMVF9FWFBSLAor CQkJCSAgc2l6ZV90eXBlX25vZGUsIFRSRUVfVkVDX0VMVCAodCwgMyksCisJCQkJICBUWVBF X1NJWkVfVU5JVCAodGtpbmRfdHlwZSkpOworCSAgdG1wID0gYnVpbGRfY2FsbF9leHByX2xv YyAoaW5wdXRfbG9jYXRpb24sIGNhbGwsIDEsIHNpemUpOworCSAgZ2ltcGxpZnlfYXNzaWdu IChUUkVFX1ZFQ19FTFQgKHQsIDIpLCB0bXAsICZpbGlzdCk7CisJICB0cmVlIGZpZWxkID0g VFlQRV9GSUVMRFMgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChjdHgtPnNlbmRlcl9kZWNsKSkp OworCSAgZm9yICggOyBERUNMX0NIQUlOIChmaWVsZCkgIT0gTlVMTF9UUkVFOyBmaWVsZCA9 IERFQ0xfQ0hBSU4gKGZpZWxkKSkKKwkgICAgOworCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RF IChUUkVFX1RZUEUgKGZpZWxkKSkpOworCSAgdG1wID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9y ZWYgKGN0eC0+c2VuZGVyX2RlY2wpOworCSAgZGVlcF9tYXBfZGF0YSA9IG9tcF9idWlsZF9j b21wb25lbnRfcmVmICh0bXAsIGZpZWxkKTsKKwkgIGRlZXBfbWFwX29mZnNldF9kYXRhID0g Y3JlYXRlX3RtcF92YXJfcmF3IChzaXplX3R5cGVfbm9kZSwKKwkJCQkJCSAgICAgIm1hcF9v ZmZzZXRfZGF0YSIpOworCSAgZGVlcF9tYXBfb2Zmc2V0ID0gY3JlYXRlX3RtcF92YXJfcmF3 IChzaXplX3R5cGVfbm9kZSwgIm1hcF9vZmZzZXQiKTsKKwkgIGdpbXBsZV9hZGRfdG1wX3Zh ciAoZGVlcF9tYXBfb2Zmc2V0X2RhdGEpOworCSAgZ2ltcGxlX2FkZF90bXBfdmFyIChkZWVw X21hcF9vZmZzZXQpOworCSAgZ2ltcGxpZnlfYXNzaWduIChkZWVwX21hcF9vZmZzZXRfZGF0 YSwgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsCisJCQkJCQkJCTApLCAmaWxpc3Qp OworCSAgZ2ltcGxpZnlfYXNzaWduIChkZWVwX21hcF9vZmZzZXQsIGJ1aWxkX2ludF9jc3Qg KHNpemVfdHlwZV9ub2RlLAorCQkJCQkJCSAgIG1hcF9jbnQpLCAmaWxpc3QpOworCX0KKwog ICAgICAgdmVjPGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICp2c2l6ZTsKICAgICAgIHZlYzxj b25zdHJ1Y3Rvcl9lbHQsIHZhX2djPiAqdmtpbmQ7CiAgICAgICB2ZWNfYWxsb2MgKHZzaXpl LCBtYXBfY250KTsKQEAgLTEyOTQ1LDYgKzEzMDQ3LDI0IEBAIGxvd2VyX29tcF90YXJnZXQg KGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkJICAg IHx8IChPTVBfQ0xBVVNFX01BUF9LSU5EIChjKQogCQkJPT0gR09NUF9NQVBfRklSU1RQUklW QVRFX1JFRkVSRU5DRSkpKQogCSAgICAgIGJyZWFrOworCSAgICBpZiAoZGVlcF9tYXBfY250 KQorCSAgICAgIHsKKwkJdW5zaWduZWQgSE9TVF9XSURFX0lOVCB0a2luZDI7CisJCXN3aXRj aCAoT01QX0NMQVVTRV9DT0RFIChjKSkKKwkJICB7CisJCSAgY2FzZSBPTVBfQ0xBVVNFX01B UDogdGtpbmQyID0gT01QX0NMQVVTRV9NQVBfS0lORCAoYyk7IGJyZWFrOworCQkgIGNhc2Ug T01QX0NMQVVTRV9GSVJTVFBSSVZBVEU6IHRraW5kMiA9IEdPTVBfTUFQX1RPOyBicmVhazsK KwkJICBjYXNlIE9NUF9DTEFVU0VfVE86IHRraW5kMiA9IEdPTVBfTUFQX1RPOyBicmVhazsK KwkJICBjYXNlIE9NUF9DTEFVU0VfRlJPTTogdGtpbmQyID0gR09NUF9NQVBfRlJPTTsgYnJl YWs7CisJCSAgZGVmYXVsdDogZ2NjX3VucmVhY2hhYmxlICgpOworCQkgIH0KKwkJbGFuZ19o b29rcy5kZWNscy5vbXBfZGVlcF9tYXBwaW5nIChzdG10LCBjLCB0a2luZDIsCisJCQkJCQkg ICBkZWVwX21hcF9kYXRhLAorCQkJCQkJICAgVFJFRV9WRUNfRUxUICh0LCAxKSwKKwkJCQkJ CSAgIFRSRUVfVkVDX0VMVCAodCwgMiksCisJCQkJCQkgICBkZWVwX21hcF9vZmZzZXRfZGF0 YSwKKwkJCQkJCSAgIGRlZXBfbWFwX29mZnNldCwgJmlsaXN0KTsKKwkgICAgICB9CiAJICAg IGlmICghREVDTF9QIChvdmFyKSkKIAkgICAgICB7CiAJCWlmIChPTVBfQ0xBVVNFX0NPREUg KGMpID09IE9NUF9DTEFVU0VfTUFQCkBAIC0xMzQyMCwyMyArMTM1NDAsNjUgQEAgbG93ZXJf b21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAq Y3R4KQogCiAgICAgICBnY2NfYXNzZXJ0IChtYXBfaWR4ID09IG1hcF9jbnQpOwogCi0gICAg ICBERUNMX0lOSVRJQUwgKFRSRUVfVkVDX0VMVCAodCwgMSkpCi0JPSBidWlsZF9jb25zdHJ1 Y3RvciAoVFJFRV9UWVBFIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSwgdnNpemUpOwotICAgICAg REVDTF9JTklUSUFMIChUUkVFX1ZFQ19FTFQgKHQsIDIpKQotCT0gYnVpbGRfY29uc3RydWN0 b3IgKFRSRUVfVFlQRSAoVFJFRV9WRUNfRUxUICh0LCAyKSksIHZraW5kKTsKKyAgICAgIGlm ICghZGVlcF9tYXBfY250KQorCXsKKwkgIERFQ0xfSU5JVElBTCAoVFJFRV9WRUNfRUxUICh0 LCAxKSkKKwkgICAgPSBidWlsZF9jb25zdHJ1Y3RvciAoVFJFRV9UWVBFIChUUkVFX1ZFQ19F TFQgKHQsIDEpKSwgdnNpemUpOworCSAgREVDTF9JTklUSUFMIChUUkVFX1ZFQ19FTFQgKHQs IDIpKQorCSAgICA9IGJ1aWxkX2NvbnN0cnVjdG9yIChUUkVFX1RZUEUgKFRSRUVfVkVDX0VM VCAodCwgMikpLCB2a2luZCk7CisJfQogICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gMjsg aSsrKQotCWlmICghVFJFRV9TVEFUSUMgKFRSRUVfVkVDX0VMVCAodCwgaSkpKQorCWlmIChk ZWVwX21hcF9jbnQgfHwgIVRSRUVfU1RBVElDIChUUkVFX1ZFQ19FTFQgKHQsIGkpKSkKIAkg IHsKKwkgICAgdHJlZSB0bXAgPSBUUkVFX1ZFQ19FTFQgKHQsIGkpOworCSAgICBpZiAoZGVl cF9tYXBfY250KQorCSAgICAgIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gKGkgPT0gMSA/ ICIub21wX2RhdGFfc2l6ZXMwIgorCQkJCQkgICAgIDogIi5vbXBfZGF0YV9raW5kczAiKTsK KwkJdHJlZSB0eXBlID0gKGkgPT0gMSkgPyBzaXplX3R5cGVfbm9kZSA6IHRraW5kX3R5cGU7 CisJCXR5cGUgPSBidWlsZF9hcnJheV90eXBlX25lbHRzICh0eXBlLCBtYXBfY250KTsKKwkJ dHJlZSB2YXIgPSBjcmVhdGVfdG1wX3ZhciAodHlwZSwgcHJlZml4KTsKKwkJREVDTF9OQU1F TEVTUyAodmFyKSA9IDE7CisJCVRSRUVfQUREUkVTU0FCTEUgKHZhcikgPSAxOworCQlUUkVF X1NUQVRJQyAodmFyKSA9IFRSRUVfU1RBVElDICh0bXApOworCQlERUNMX0lOSVRJQUwgKHZh cikgPSBidWlsZF9jb25zdHJ1Y3RvciAodHlwZSwgaSA9PSAxCisJCQkJCQkJICAgICAgPyB2 c2l6ZSA6IHZraW5kKTsKKwkJdG1wID0gdmFyOworCQlUUkVFX1NUQVRJQyAoVFJFRV9WRUNf RUxUICh0LCBpKSkgPSAwOworCSAgICAgIH0KKwogCSAgICBnaW1wbGVfc2VxIGluaXRsaXN0 ID0gTlVMTDsKLQkgICAgZm9yY2VfZ2ltcGxlX29wZXJhbmQgKGJ1aWxkMSAoREVDTF9FWFBS LCB2b2lkX3R5cGVfbm9kZSwKLQkJCQkJICBUUkVFX1ZFQ19FTFQgKHQsIGkpKSwKKwkgICAg Zm9yY2VfZ2ltcGxlX29wZXJhbmQgKGJ1aWxkMSAoREVDTF9FWFBSLCB2b2lkX3R5cGVfbm9k ZSwgdG1wKSwKIAkJCQkgICZpbml0bGlzdCwgdHJ1ZSwgTlVMTF9UUkVFKTsKIAkgICAgZ2lt cGxlX3NlcV9hZGRfc2VxICgmaWxpc3QsIGluaXRsaXN0KTsKIAotCSAgICB0cmVlIGNsb2Ji ZXIgPSBidWlsZF9jbG9iYmVyIChUUkVFX1RZUEUgKFRSRUVfVkVDX0VMVCAodCwgaSkpKTsK LQkgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm9saXN0LAotCQkJCSBnaW1wbGVfYnVpbGRf YXNzaWduIChUUkVFX1ZFQ19FTFQgKHQsIGkpLAotCQkJCQkJICAgICAgY2xvYmJlcikpOwor CSAgICBpZiAoZGVlcF9tYXBfY250KQorCSAgICAgIHsKKwkJdHJlZSB0bXAyOworCQl0cmVl IGNhbGwgPSBidWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX01FTUNQWSk7CisJCXRt cDIgPSBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFICh0bXApKTsKKwkJY2FsbCA9IGJ1aWxk X2NhbGxfZXhwcl9sb2MgKGlucHV0X2xvY2F0aW9uLCBjYWxsLCAzLAorCQkJCQkgICAgVFJF RV9WRUNfRUxUICh0LCBpKSwKKwkJCQkJICAgIGJ1aWxkX2ZvbGRfYWRkcl9leHByICh0bXAp LCB0bXAyKTsKKwkJZ2ltcGxpZnlfYW5kX2FkZCAoY2FsbCwgJmlsaXN0KTsKKwkgICAgICB9 CisKKwkgICAgaWYgKCFUUkVFX1NUQVRJQyAodG1wKSkKKwkgICAgICB7CisJCXRyZWUgY2xv YmJlciA9IGJ1aWxkX2Nsb2JiZXIgKFRSRUVfVFlQRSAodG1wKSk7CisJCWdpbXBsZV9zZXFf YWRkX3N0bXQgKCZvbGlzdCwKKwkJCQkgICAgIGdpbXBsZV9idWlsZF9hc3NpZ24gKHRtcCwg Y2xvYmJlcikpOworCSAgICAgIH0KKwkgICAgaWYgKGRlZXBfbWFwX2NudCkKKwkgICAgICB7 CisJCXRtcCA9IFRSRUVfVkVDX0VMVCAodCwgaSk7CisJCXRyZWUgY2FsbCA9IGJ1aWx0aW5f ZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fRlJFRSk7CisJCWNhbGwgPSBidWlsZF9jYWxsX2V4 cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwgY2FsbCwgMSwgdG1wKTsKKwkJZ2ltcGxpZnlfYW5k X2FkZCAoY2FsbCwgJm9saXN0KTsKKwkJdHJlZSBjbG9iYmVyID0gYnVpbGRfY2xvYmJlciAo VFJFRV9UWVBFICh0bXApKTsKKwkJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm9saXN0LAorCQkJ CSAgICAgZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodG1wLCBjbG9iYmVyKSk7CisJICAgICAgfQog CSAgfQogCWVsc2UgaWYgKG9tcF9tYXliZV9vZmZsb2FkZWRfY3R4IChjdHgtPm91dGVyKSkK IAkgIHsKQEAgLTEzNDU2LDcgKzEzNjE4LDE4IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBs ZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkgICAgICB9CiAJ ICB9CiAKLSAgICAgIHRyZWUgY2xvYmJlciA9IGJ1aWxkX2Nsb2JiZXIgKGN0eC0+cmVjb3Jk X3R5cGUpOworICAgICAgaWYgKGRlZXBfbWFwX2NudCkKKwl7CisJICB0cmVlIGNhbGwgPSBi dWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX0ZSRUUpOworCSAgY2FsbCA9IGJ1aWxk X2NhbGxfZXhwcl9sb2MgKGlucHV0X2xvY2F0aW9uLCBjYWxsLCAxLAorCQkJCSAgICAgIFRS RUVfVkVDX0VMVCAodCwgMCkpOworCSAgZ2ltcGxpZnlfYW5kX2FkZCAoY2FsbCwgJm9saXN0 KTsKKworCSAgZ2ltcGxpZnlfZXhwciAoJlRSRUVfVkVDX0VMVCAodCwgMSksICZpbGlzdCwg TlVMTCwgaXNfZ2ltcGxlX3ZhbCwKKwkJCSBmYl9ydmFsdWUpOworCX0KKworICAgICAgdHJl ZSBjbG9iYmVyID0gYnVpbGRfY2xvYmJlciAoVFJFRV9UWVBFIChjdHgtPnNlbmRlcl9kZWNs KSk7CiAgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmb2xpc3QsIGdpbXBsZV9idWlsZF9h c3NpZ24gKGN0eC0+c2VuZGVyX2RlY2wsCiAJCQkJCQkJY2xvYmJlcikpOwogICAgIH0KQEAg LTEzNDY5LDExICsxMzY0MiwxNiBAQCBsb3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3RtdF9p dGVyYXRvciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAgIGlmIChvZmZsb2FkZWQKICAg ICAgICYmIGN0eC0+cmVjb3JkX3R5cGUpCiAgICAgewotICAgICAgdCA9IGJ1aWxkX2ZvbGRf YWRkcl9leHByX2xvYyAobG9jLCBjdHgtPnNlbmRlcl9kZWNsKTsKKyAgICAgIHQgPSBjdHgt PnNlbmRlcl9kZWNsOworICAgICAgaWYgKCFkZWVwX21hcF9jbnQpCisJdCA9IGJ1aWxkX2Zv bGRfYWRkcl9leHByX2xvYyAobG9jLCB0KTsKICAgICAgIC8qIGZpeHVwX2NoaWxkX3JlY29y ZF90eXBlIG1pZ2h0IGhhdmUgY2hhbmdlZCByZWNlaXZlcl9kZWNsJ3MgdHlwZS4gICovCiAg ICAgICB0ID0gZm9sZF9jb252ZXJ0X2xvYyAobG9jLCBUUkVFX1RZUEUgKGN0eC0+cmVjZWl2 ZXJfZGVjbCksIHQpOwotICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm5ld19ib2R5LAot CSAgCQkgICBnaW1wbGVfYnVpbGRfYXNzaWduIChjdHgtPnJlY2VpdmVyX2RlY2wsIHQpKTsK KyAgICAgIGlmICghQUdHUkVHQVRFX1RZUEVfUCAoVFJFRV9UWVBFIChjdHgtPnNlbmRlcl9k ZWNsKSkpCisJZ2ltcGxpZnlfYXNzaWduIChjdHgtPnJlY2VpdmVyX2RlY2wsIHQsICZuZXdf Ym9keSk7CisgICAgICBlbHNlCisJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm5ld19ib2R5LAor CQkJICAgICBnaW1wbGVfYnVpbGRfYXNzaWduIChjdHgtPnJlY2VpdmVyX2RlY2wsIHQpKTsK ICAgICB9CiAgIGdpbXBsZV9zZXFfYWRkX3NlcSAoJm5ld19ib2R5LCBmcGxpc3QpOwogCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NfbG9jX3Rlc3RfMjIuZjkw IGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jX2xvY190ZXN0XzIyLmY5MAppbmRleCA5 YzQwYjI2ZDgzMC4uYjM1ZWQ3Y2JiMzAgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvY19sb2NfdGVzdF8yMi5mOTAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9jX2xvY190ZXN0XzIyLmY5MApAQCAtMjAsNCArMjAsNCBAQCBlbmQKICEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJwYXJtLlxbMC05XF0rLmRhdGEgPSBcXCh2 b2lkIC5cXCkgJlxcKC55eXkuXFswLTlcXStcXClcXFxbMFxcXF07IiAxICJvcmlnaW5hbCIg fSB9CiAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAicGFybS5cWzAtOVxd Ky5kYXRhID0gXFwodm9pZCAuXFwpICZcXCgueXl5LlxbMC05XF0rXFwpXFxcW0QuXFswLTlc XSsgXFwqIDRcXFxdOyIgMSAib3JpZ2luYWwiIH0gfQogCi0hIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAiRC5cWzAtOVxdKyA9IHBhcm0uXFswLTlcXSsuZGF0YTtcW147 XStwdHJcWzEtNFxdID0gRC5cWzAtOVxdKzsiIDQgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJwdHJcWzEtNFxdID0gcGFybS5cWzAtOVxd Ky5kYXRhOyIgNCAib3JpZ2luYWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9maW5hbGl6ZV8yMS5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRn L2ZpbmFsaXplXzIxLmY5MAppbmRleCA1YThmZWMzZDEzOS4uMWMxYjBkMjgzOWEgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZmluYWxpemVfMjEuZjkwCisrKyBi L2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZmluYWxpemVfMjEuZjkwCkBAIC04LDQgKzgs NCBAQAogY2xhc3MoKiksIGFsbG9jYXRhYmxlIDo6IHZhcgogZW5kCiAKLSEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJzdGF0aWMgc3RydWN0IF9fdnR5cGVfX1NUQVIgX192dGFi X19TVEFSID0gey5faGFzaD0wLCAuX3NpemU9LiwgLl9leHRlbmRzPTBCLCAuX2RlZl9pbml0 PTBCLCAuX2NvcHk9MEIsIC5fZmluYWw9MEIsIC5fZGVhbGxvY2F0ZT0wQn07IiAib3JpZ2lu YWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInN0YXRpYyBzdHJ1Y3Qg X192dHlwZV9fU1RBUiBfX3Z0YWJfX1NUQVIgPSB7Ll9oYXNoPTAsIC5fc2l6ZT04LCAuX2V4 dGVuZHM9MEIsIC5fZGVmX2luaXQ9MEIsIC5fY29weT0wQiwgLl9maW5hbD0wQiwgLl9kZWFs bG9jYXRlPTBCLCAuX2NhbGxiYWNrPTBCfTsiICJvcmlnaW5hbCIgfSB9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2FycmF5LXdpdGgtZHQtMS5mOTAg Yi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2FycmF5LXdpdGgtZHQtMS5mOTAK aW5kZXggMTM2ZTQyYWNkNTkuLjI3OWM2YzdiYmIyIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2FycmF5LXdpdGgtZHQtMS5mOTAKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9hcnJheS13aXRoLWR0LTEuZjkwCkBAIC01LDEx ICs1LDggQEAgdHlwZSB0CiBlbmQgdHlwZSB0CiAKIHR5cGUodCksIGFsbG9jYXRhYmxlIDo6 IGIoOikKLSEgeyBkZy1ub3RlIHsnYicgZGVjbGFyZWQgaGVyZX0ge30geyB0YXJnZXQgKi0q LSogfSAuLTEgfQogCiAhJGFjYyB1cGRhdGUgaG9zdChiKQotISB7IGRnLXdhcm5pbmcgeydi XC5kaW1cWzBcXVwudWJvdW5kJyBpcyB1c2VkIHVuaW5pdGlhbGl6ZWR9IHt9IHsgdGFyZ2V0 ICotKi0qIH0gLi0xIH0KLSEgeyBkZy13YXJuaW5nIHsnYlwuZGltXFswXF1cLmxib3VuZCcg aXMgdXNlZCB1bmluaXRpYWxpemVkfSB7fSB7IHRhcmdldCAqLSotKiB9IC4tMiB9CiAhJGFj YyB1cGRhdGUgaG9zdChiKDopKQogISRhY2MgdXBkYXRlIGhvc3QoYigxKSVBKQogISRhY2Mg dXBkYXRlIGhvc3QoYigxKSVBKDosOikpCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2dvYWNjL3ByOTM0NjQuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9nb2FjYy9wcjkzNDY0LmY5MAppbmRleCBjOTJmMWQzZDhiMi4uMWM4ZjRlM2EwOGMgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcHI5MzQ2NC5mOTAK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9wcjkzNDY0LmY5MApAQCAt NywxMCArNyw3IEBACiBwcm9ncmFtIHAKICAgIGNoYXJhY3RlciA6OiBjKDIpID0gJ2EnCiAg ICBjaGFyYWN0ZXIsIGFsbG9jYXRhYmxlIDo6IHooOikKLSAgICEgeyBkZy1ub3RlIHsneicg ZGVjbGFyZWQgaGVyZX0ge30geyB0YXJnZXQgKi0qLSogfSAuLTEgfQogICAgISRhY2MgcGFy YWxsZWwKLSAgICEgeyBkZy13YXJuaW5nIHsnelwuZGltXFswXF1cLnVib3VuZCcgaXMgdXNl ZCB1bmluaXRpYWxpemVkfSB7fSB7IHRhcmdldCAqLSotKiB9IC4tMSB9Ci0gICAhIHsgZGct d2FybmluZyB7J3pcLmRpbVxbMFxdXC5sYm91bmQnIGlzIHVzZWQgdW5pbml0aWFsaXplZH0g e30geyB0YXJnZXQgKi0qLSogfSAuLTIgfQogICAgISRvbXAgdGFyZ2V0CiAgICB6ID0gYwog ICAgISRhY2MgZW5kIHBhcmFsbGVsCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2dvbXAvbWFwLWFsbG9jLWNvbXAtMS5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2dvbXAvbWFwLWFsbG9jLWNvbXAtMS5mOTAKaW5kZXggMGM0NDI5Njc3YmQuLmY0 OGFkZGNiY2Y1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAv bWFwLWFsbG9jLWNvbXAtMS5mOTAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9n b21wL21hcC1hbGxvYy1jb21wLTEuZjkwCkBAIC0xMCw1ICsxMCw1IEBAIHR5cGUgc2N0CiBl bmQgdHlwZQogdHlwZShzY3QpIHZhcgogCi0hJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo dG86dmFyKSAgISB7IGRnLWVycm9yICJhbGxvY2F0YWJsZSBjb21wb25lbnRzIGlzIG5vdCBw ZXJtaXR0ZWQgaW4gbWFwIGNsYXVzZSIgfQorISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFw KHRvOnZhcikKIGVuZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5m b3J0cmFuL2FsbG9jYXRhYmxlLWNvbXAuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5mb3J0cmFuL2FsbG9jYXRhYmxlLWNvbXAuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4zODNlY2JhOThiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9hbGxvY2F0YWJsZS1jb21wLmY5MApAQCAt MCwwICsxLDUzIEBACitpbXBsaWNpdCBub25lCit0eXBlIHQKKyAgaW50ZWdlciwgYWxsb2Nh dGFibGUgOjogYSwgYig6KQorZW5kIHR5cGUgdAordHlwZSh0KSA6OiB4LCB5LCB6CitpbnRl Z2VyIDo6IGkKKworISRvbXAgdGFyZ2V0IG1hcCh0bzogeCkKKyAgaWYgKGFsbG9jYXRlZCh4 JWEpKSBzdG9wIDEKKyAgaWYgKGFsbG9jYXRlZCh4JWIpKSBzdG9wIDIKKyEkb21wIGVuZCB0 YXJnZXQKKworYWxsb2NhdGUoeCVhLCB4JWIoLTQ6NikpCit4JWIoOikgPSBbKGksIGk9LTQs NildCisKKyEkb21wIHRhcmdldCBtYXAodG86IHgpCisgIGlmICgubm90LiBhbGxvY2F0ZWQo eCVhKSkgc3RvcCAzCisgIGlmICgubm90LiBhbGxvY2F0ZWQoeCViKSkgc3RvcCA0CisgIGlm IChsYm91bmQoeCViLDEpIC89IC00KSBzdG9wIDUKKyAgaWYgKHVib3VuZCh4JWIsMSkgLz0g Nikgc3RvcCA2CisgIGlmIChhbnkgKHglYiAvPSBbKGksIGk9LTQsNildKSkgc3RvcCA3Cish JG9tcCBlbmQgdGFyZ2V0CisKKworISBUaGUgZm9sbG93aW5nIG9ubHkgd29ya3Mgd2l0aCBh cnJheXMgZHVlIHRvCishIFBSIGZvcnRyYW4vOTY2NjgKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKHRvOiB5LCB6KQorCishJG9tcCB0YXJnZXQgbWFwKHRvOiB5LCB6KQorICBp ZiAoYWxsb2NhdGVkKHklYikpIHN0b3AgOAorICBpZiAoYWxsb2NhdGVkKHolYikpIHN0b3Ag OQorISRvbXAgZW5kIHRhcmdldAorCithbGxvY2F0ZSh5JWIoNSksIHolYigzKSkKK3klYiA9 IDQyCit6JWIgPSA5OQorCishIChpbXBsaWNpdGx5KSAndG9mcm9tJyBtYXBwZWQKKyEgUGxh bm5lZCBmb3IgT3Blbk1QIDYuMCAoYnV0IGNvbW1vbiBleHRlbnNpb24pCishIE9wZW5NUCA8 PSA1LjAgdW5jbGVhcgorISRvbXAgdGFyZ2V0IG1hcCh0bzogeSkKKyAgaWYgKC5ub3QuYWxs b2NhdGVkKHklYikpIHN0b3AgMTAKKyAgaWYgKGFueSAoeSViIC89IDQyKSkgc3RvcCAxMQor ISRvbXAgZW5kIHRhcmdldAorCishIGFsd2F5cyBtYXA6IE9wZW5NUCA1LjEgKGNsYXJpZmll ZCkKKyEkb21wIHRhcmdldCBtYXAoYWx3YXlzLCB0b2Zyb206IHopCisgIGlmICgubm90LmFs bG9jYXRlZCh6JWIpKSBzdG9wIDEyCisgIGlmIChhbnkgKHolYiAvPSA5OSkpIHN0b3AgMTMK KyEkb21wIGVuZCB0YXJnZXQKKworZW5kCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0 ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtMy5mOTAgYi9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtMy5mOTAKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkNDhjN2NhNTlkCi0tLSAvZGV2L251bGwK KysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21w LTMuZjkwCkBAIC0wLDAgKzEsMTIxIEBACit0eXBlIHQyCisgIGludGVnZXIgeCwgeSwgegor ZW5kIHR5cGUgdDIKK3R5cGUgdAorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBBCisgIGlu dGVnZXIsIGFsbG9jYXRhYmxlIDo6IEIoOikKKyAgdHlwZSh0MiksIGFsbG9jYXRhYmxlIDo6 IEMKKyAgdHlwZSh0MiksIGFsbG9jYXRhYmxlIDo6IEQoOiw6KQorZW5kIHR5cGUgdAorCit0 eXBlIHQzCisgIHR5cGUodCkgOjogUQorICB0eXBlKHQpIDo6IFIoNSkKK2VuZCB0eXBlCisK K3R5cGUodCkgOjogdmFyLCB2YXIyCit0eXBlKHQzKSA6OiB2YXIzLCB2YXI0CisKKyEgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyEgQXNzaWduICsgYWxsb2Nh dGUKK3ZhciVBID0gNDUKK3ZhciVCID0gWzEsMiwzXQordmFyJUMgPSB0Mig2LDUsNCkKK3Zh ciVEID0gcmVzaGFwZShbdDIoMSwyLDMpLCB0Mig0LDUsNiksIHQyKDExLDEyLDEzKSwgdDIo MTQsMTUsMTYpXSwgWzIsMl0pCisKKyEgQXNzaWduICsgYWxsb2NhdGUKK3ZhcjIlQSA9IDE0 NQordmFyMiVCID0gWzk5MSw5OTIsOTkzXQordmFyMiVDID0gdDIoOTk2LDk5NSw5OTQpCit2 YXIyJUQgPSByZXNoYXBlKFt0MigxOTksMjk5LDM5OSksIHQyKDQ5OSw1OTksNjk5KSwgdDIo MTE5OSwxMjk5LDEzOTkpLCB0MigxNDk5LDE1OTksMTY5OSldLCBbMiwyXSkKKworCishJG9t cCB0YXJnZXQgbWFwKHRvOiB2YXIpIG1hcCh0b2Zyb206IHZhcjIpCisgIGNhbGwgZm9vKHZh ciwgdmFyMikKKyEkb21wIGVuZCB0YXJnZXQKKworaWYgKHZhcjIlQSAvPSA0NSkgc3RvcCA5 CitpZiAoYW55ICh2YXIyJUIgLz0gWzEsMiwzXSkpIHN0b3AgMTAKK2lmICh2YXIyJUMleCAv PSA2KSBzdG9wIDExCitpZiAodmFyMiVDJXkgLz0gNSkgc3RvcCAxMQoraWYgKHZhcjIlQyV6 IC89IDQpIHN0b3AgMTEKK2lmIChhbnkgKHZhcjIlRCg6LDopJXggLz0gcmVzaGFwZShbMSwg NCwgMTEsIDE0XSwgWzIsMl0pKSkgc3RvcCAxMgoraWYgKGFueSAodmFyMiVEKDosOikleSAv PSByZXNoYXBlKFsyLCA1LCAxMiwgMTVdLCBbMiwyXSkpKSBzdG9wIDEyCitpZiAoYW55ICh2 YXIyJUQoOiw6KSV6IC89IHJlc2hhcGUoWzMsIDYsIDEzLCAxNl0sIFsyLDJdKSkpIHN0b3Ag MTIKKworISAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorISBBc3Np Z24gKyBhbGxvY2F0ZQordmFyMyVRJUEgPSA0NQordmFyMyVRJUIgPSBbMSwyLDNdCit2YXIz JVElQyA9IHQyKDYsNSw0KQordmFyMyVRJUQgPSByZXNoYXBlKFt0MigxLDIsMyksIHQyKDQs NSw2KSwgdDIoMTEsMTIsMTMpLCB0MigxNCwxNSwxNildLCBbMiwyXSkKKwordmFyMyVSKDIp JUEgPSA0NQordmFyMyVSKDIpJUIgPSBbMSwyLDNdCit2YXIzJVIoMiklQyA9IHQyKDYsNSw0 KQordmFyMyVSKDIpJUQgPSByZXNoYXBlKFt0MigxLDIsMyksIHQyKDQsNSw2KSwgdDIoMTEs MTIsMTMpLCB0MigxNCwxNSwxNildLCBbMiwyXSkKKworISBBc3NpZ24gKyBhbGxvY2F0ZQor dmFyNCVRJUEgPSAxNDUKK3ZhcjQlUSVCID0gWzk5MSw5OTIsOTkzXQordmFyNCVRJUMgPSB0 Mig5OTYsOTk1LDk5NCkKK3ZhcjQlUSVEID0gcmVzaGFwZShbdDIoMTk5LDI5OSwzOTkpLCB0 Mig0OTksNTk5LDY5OSksIHQyKDExOTksMTI5OSwxMzk5KSwgdDIoMTQ5OSwxNTk5LDE2OTkp XSwgWzIsMl0pCisKK3ZhcjQlUigzKSVBID0gMTQ1Cit2YXI0JVIoMyklQiA9IFs5OTEsOTky LDk5M10KK3ZhcjQlUigzKSVDID0gdDIoOTk2LDk5NSw5OTQpCit2YXI0JVIoMyklRCA9IHJl c2hhcGUoW3QyKDE5OSwyOTksMzk5KSwgdDIoNDk5LDU5OSw2OTkpLCB0MigxMTk5LDEyOTks MTM5OSksIHQyKDE0OTksMTU5OSwxNjk5KV0sIFsyLDJdKQorCishJG9tcCB0YXJnZXQgbWFw KHRvOiB2YXIzJVEpIG1hcCh0b2Zyb206IHZhcjQlUSkKKyAgY2FsbCBmb28odmFyMyVRLCB2 YXI0JVEpCishJG9tcCBlbmQgdGFyZ2V0CisKKyEkb21wIHRhcmdldCBtYXAodG86IHZhcjMl UigyKSkgbWFwKHRvZnJvbTogdmFyNCVSKDMpKQorICBjYWxsIGZvbyh2YXIzJVIoMiksIHZh cjQlUigzKSkKKyEkb21wIGVuZCB0YXJnZXQKKworaWYgKHZhcjQlUSVBIC89IDQ1KSBzdG9w IDEzCitpZiAoYW55ICh2YXI0JVElQiAvPSBbMSwyLDNdKSkgc3RvcCAxNAoraWYgKHZhcjQl USVDJXggLz0gNikgc3RvcCAxNQoraWYgKHZhcjQlUSVDJXkgLz0gNSkgc3RvcCAxNQoraWYg KHZhcjQlUSVDJXogLz0gNCkgc3RvcCAxNQoraWYgKGFueSAodmFyNCVRJUQoOiw6KSV4IC89 IHJlc2hhcGUoWzEsIDQsIDExLCAxNF0sIFsyLDJdKSkpIHN0b3AgMTYKK2lmIChhbnkgKHZh cjQlUSVEKDosOikleSAvPSByZXNoYXBlKFsyLCA1LCAxMiwgMTVdLCBbMiwyXSkpKSBzdG9w IDE2CitpZiAoYW55ICh2YXI0JVElRCg6LDopJXogLz0gcmVzaGFwZShbMywgNiwgMTMsIDE2 XSwgWzIsMl0pKSkgc3RvcCAxNgorCitpZiAodmFyNCVSKDMpJUEgLz0gNDUpIHN0b3AgMTcK K2lmIChhbnkgKHZhcjQlUigzKSVCIC89IFsxLDIsM10pKSBzdG9wIDE4CitpZiAodmFyNCVS KDMpJUMleCAvPSA2KSBzdG9wIDE5CitpZiAodmFyNCVSKDMpJUMleSAvPSA1KSBzdG9wIDE5 CitpZiAodmFyNCVSKDMpJUMleiAvPSA0KSBzdG9wIDE5CitpZiAoYW55ICh2YXI0JVIoMykl RCg6LDopJXggLz0gcmVzaGFwZShbMSwgNCwgMTEsIDE0XSwgWzIsMl0pKSkgc3RvcCAyMAor aWYgKGFueSAodmFyNCVSKDMpJUQoOiw6KSV5IC89IHJlc2hhcGUoWzIsIDUsIDEyLCAxNV0s IFsyLDJdKSkpIHN0b3AgMjAKK2lmIChhbnkgKHZhcjQlUigzKSVEKDosOikleiAvPSByZXNo YXBlKFszLCA2LCAxMywgMTZdLCBbMiwyXSkpKSBzdG9wIDIwCisKK2NvbnRhaW5zCisgIHN1 YnJvdXRpbmUgZm9vKHgsIHkpCisgICAgdHlwZSh0KSA6OiB4LCB5CisgICAgaWYgKHglQSAv PSA0NSkgc3RvcCAxCisgICAgaWYgKGFueSAoeCVCIC89IFsxLDIsM10pKSBzdG9wIDIKKyAg ICBpZiAoeCVDJXggLz0gNikgc3RvcCAzCisgICAgaWYgKHglQyV5IC89IDUpIHN0b3AgMwor ICAgIGlmICh4JUMleiAvPSA0KSBzdG9wIDMKKyAgICBpZiAoYW55ICh4JUQoOiw6KSV4IC89 IHJlc2hhcGUoWzEsIDQsIDExLCAxNF0sIFsyLDJdKSkpIHN0b3AgNAorICAgIGlmIChhbnkg KHglRCg6LDopJXkgLz0gcmVzaGFwZShbMiwgNSwgMTIsIDE1XSwgWzIsMl0pKSkgc3RvcCA0 CisgICAgaWYgKGFueSAoeCVEKDosOikleiAvPSByZXNoYXBlKFszLCA2LCAxMywgMTZdLCBb MiwyXSkpKSBzdG9wIDQKKworICAgIGlmICh5JUEgLz0gMTQ1KSBzdG9wIDUKKyAgICBpZiAo YW55ICh5JUIgLz0gWzk5MSw5OTIsOTkzXSkpIHN0b3AgNgorICAgIGlmICh5JUMleCAvPSA5 OTYpIHN0b3AgNworICAgIGlmICh5JUMleSAvPSA5OTUpIHN0b3AgNworICAgIGlmICh5JUMl eiAvPSA5OTQpIHN0b3AgNworICAgIGlmIChhbnkgKHklRCg6LDopJXggLz0gcmVzaGFwZShb MTk5LCA0OTksIDExOTksIDE0OTldLCBbMiwyXSkpKSBzdG9wIDgKKyAgICBpZiAoYW55ICh5 JUQoOiw6KSV5IC89IHJlc2hhcGUoWzI5OSwgNTk5LCAxMjk5LCAxNTk5XSwgWzIsMl0pKSkg c3RvcCA4CisgICAgaWYgKGFueSAoeSVEKDosOikleiAvPSByZXNoYXBlKFszOTksIDY5OSwg MTM5OSwgMTY5OV0sIFsyLDJdKSkpIHN0b3AgOAorCisgICAgeSVBID0geCVBCisgICAgeSVC KDopID0geCVCCisgICAgeSVDID0geCVDCisgICAgeSVEKDosOikgPSB4JUQoOiw6KQorICBl bmQKK2VuZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFu L21hcC1hbGxvYy1jb21wLTQuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL21hcC1hbGxvYy1jb21wLTQuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5mYjk4NTlkOTlhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC00LmY5MApAQCAtMCwwICsx LDEyNCBAQAordHlwZSB0MgorICBpbnRlZ2VyIHgsIHksIHoKK2VuZCB0eXBlIHQyCit0eXBl IHQKKyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogQQorICBpbnRlZ2VyLCBhbGxvY2F0YWJs ZSA6OiBCKDopCisgIHR5cGUodDIpLCBhbGxvY2F0YWJsZSA6OiBDCisgIHR5cGUodDIpLCBh bGxvY2F0YWJsZSA6OiBEKDosOikKK2VuZCB0eXBlIHQKKwordHlwZSB0MworICB0eXBlKHQp IDo6IFEKKyAgdHlwZSh0KSA6OiBSKDUpCitlbmQgdHlwZQorCit0eXBlKHQpIDo6IHZhciwg dmFyMgordHlwZSh0MykgOjogdmFyMywgdmFyNAorCishIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCishIEFzc2lnbiArIGFsbG9jYXRlCit2YXIlQSA9IDQ1Cit2 YXIlQiA9IFsxLDIsM10KK3ZhciVDID0gdDIoNiw1LDQpCit2YXIlRCA9IHJlc2hhcGUoW3Qy KDEsMiwzKSwgdDIoNCw1LDYpLCB0MigxMSwxMiwxMyksIHQyKDE0LDE1LDE2KV0sIFsyLDJd KQorCishIEFzc2lnbiArIGFsbG9jYXRlCit2YXIyJUEgPSAxNDUKK3ZhcjIlQiA9IFs5OTEs OTkyLDk5M10KK3ZhcjIlQyA9IHQyKDk5Niw5OTUsOTk0KQordmFyMiVEID0gcmVzaGFwZShb dDIoMTk5LDI5OSwzOTkpLCB0Mig0OTksNTk5LDY5OSksIHQyKDExOTksMTI5OSwxMzk5KSwg dDIoMTQ5OSwxNTk5LDE2OTkpXSwgWzIsMl0pCisKKworISRvbXAgdGFyZ2V0IG1hcCh0bzog dmFyJUEsIHZhciVCLCB2YXIlQywgdmFyJUQpICYKKyEkb21wJiAgICAgICBtYXAodG9mcm9t OiB2YXIyJUEsIHZhcjIlQiwgdmFyMiVDLCB2YXIyJUQpCisgIGNhbGwgZm9vKHZhciwgdmFy MikKKyEkb21wIGVuZCB0YXJnZXQKKworaWYgKHZhcjIlQSAvPSA0NSkgc3RvcCA5CitpZiAo YW55ICh2YXIyJUIgLz0gWzEsMiwzXSkpIHN0b3AgMTAKK2lmICh2YXIyJUMleCAvPSA2KSBz dG9wIDExCitpZiAodmFyMiVDJXkgLz0gNSkgc3RvcCAxMQoraWYgKHZhcjIlQyV6IC89IDQp IHN0b3AgMTEKK2lmIChhbnkgKHZhcjIlRCg6LDopJXggLz0gcmVzaGFwZShbMSwgNCwgMTEs IDE0XSwgWzIsMl0pKSkgc3RvcCAxMgoraWYgKGFueSAodmFyMiVEKDosOikleSAvPSByZXNo YXBlKFsyLCA1LCAxMiwgMTVdLCBbMiwyXSkpKSBzdG9wIDEyCitpZiAoYW55ICh2YXIyJUQo Oiw6KSV6IC89IHJlc2hhcGUoWzMsIDYsIDEzLCAxNl0sIFsyLDJdKSkpIHN0b3AgMTIKKwor ISAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorISBBc3NpZ24gKyBh bGxvY2F0ZQordmFyMyVRJUEgPSA0NQordmFyMyVRJUIgPSBbMSwyLDNdCit2YXIzJVElQyA9 IHQyKDYsNSw0KQordmFyMyVRJUQgPSByZXNoYXBlKFt0MigxLDIsMyksIHQyKDQsNSw2KSwg dDIoMTEsMTIsMTMpLCB0MigxNCwxNSwxNildLCBbMiwyXSkKKwordmFyMyVSKDIpJUEgPSA0 NQordmFyMyVSKDIpJUIgPSBbMSwyLDNdCit2YXIzJVIoMiklQyA9IHQyKDYsNSw0KQordmFy MyVSKDIpJUQgPSByZXNoYXBlKFt0MigxLDIsMyksIHQyKDQsNSw2KSwgdDIoMTEsMTIsMTMp LCB0MigxNCwxNSwxNildLCBbMiwyXSkKKworISBBc3NpZ24gKyBhbGxvY2F0ZQordmFyNCVR JUEgPSAxNDUKK3ZhcjQlUSVCID0gWzk5MSw5OTIsOTkzXQordmFyNCVRJUMgPSB0Mig5OTYs OTk1LDk5NCkKK3ZhcjQlUSVEID0gcmVzaGFwZShbdDIoMTk5LDI5OSwzOTkpLCB0Mig0OTks NTk5LDY5OSksIHQyKDExOTksMTI5OSwxMzk5KSwgdDIoMTQ5OSwxNTk5LDE2OTkpXSwgWzIs Ml0pCisKK3ZhcjQlUigzKSVBID0gMTQ1Cit2YXI0JVIoMyklQiA9IFs5OTEsOTkyLDk5M10K K3ZhcjQlUigzKSVDID0gdDIoOTk2LDk5NSw5OTQpCit2YXI0JVIoMyklRCA9IHJlc2hhcGUo W3QyKDE5OSwyOTksMzk5KSwgdDIoNDk5LDU5OSw2OTkpLCB0MigxMTk5LDEyOTksMTM5OSks IHQyKDE0OTksMTU5OSwxNjk5KV0sIFsyLDJdKQorCishJG9tcCB0YXJnZXQgbWFwKHRvOiB2 YXIzJVElQSwgdmFyMyVRJUIsIHZhcjMlUSVDLCB2YXIzJVElRCkgJgorISRvbXAmICAgICAg IG1hcCh0b2Zyb206IHZhcjQlUSVBLCB2YXI0JVElQiwgdmFyNCVRJUMsIHZhcjQlUSVEKQor ICBjYWxsIGZvbyh2YXIzJVEsIHZhcjQlUSkKKyEkb21wIGVuZCB0YXJnZXQKKworaWYgKHZh cjQlUSVBIC89IDQ1KSBzdG9wIDEzCitpZiAoYW55ICh2YXI0JVElQiAvPSBbMSwyLDNdKSkg c3RvcCAxNAoraWYgKHZhcjQlUSVDJXggLz0gNikgc3RvcCAxNQoraWYgKHZhcjQlUSVDJXkg Lz0gNSkgc3RvcCAxNQoraWYgKHZhcjQlUSVDJXogLz0gNCkgc3RvcCAxNQoraWYgKGFueSAo dmFyNCVRJUQoOiw6KSV4IC89IHJlc2hhcGUoWzEsIDQsIDExLCAxNF0sIFsyLDJdKSkpIHN0 b3AgMTYKK2lmIChhbnkgKHZhcjQlUSVEKDosOikleSAvPSByZXNoYXBlKFsyLCA1LCAxMiwg MTVdLCBbMiwyXSkpKSBzdG9wIDE2CitpZiAoYW55ICh2YXI0JVElRCg6LDopJXogLz0gcmVz aGFwZShbMywgNiwgMTMsIDE2XSwgWzIsMl0pKSkgc3RvcCAxNgorCishJG9tcCB0YXJnZXQg bWFwKHRvOiB2YXIzJVIoMiklQSwgdmFyMyVSKDIpJUIsIHZhcjMlUigyKSVDLCB2YXIzJVIo MiklRCkgJgorISRvbXAmICAgICAgIG1hcCh0b2Zyb206IHZhcjQlUigzKSVBLCB2YXI0JVIo MyklQiwgdmFyNCVSKDMpJUMsIHZhcjQlUigzKSVEKQorICBjYWxsIGZvbyh2YXIzJVIoMiks IHZhcjQlUigzKSkKKyEkb21wIGVuZCB0YXJnZXQKKworaWYgKHZhcjQlUigzKSVBIC89IDQ1 KSBzdG9wIDE3CitpZiAoYW55ICh2YXI0JVIoMyklQiAvPSBbMSwyLDNdKSkgc3RvcCAxOAor aWYgKHZhcjQlUigzKSVDJXggLz0gNikgc3RvcCAxOQoraWYgKHZhcjQlUigzKSVDJXkgLz0g NSkgc3RvcCAxOQoraWYgKHZhcjQlUigzKSVDJXogLz0gNCkgc3RvcCAxOQoraWYgKGFueSAo dmFyNCVSKDMpJUQoOiw6KSV4IC89IHJlc2hhcGUoWzEsIDQsIDExLCAxNF0sIFsyLDJdKSkp IHN0b3AgMjAKK2lmIChhbnkgKHZhcjQlUigzKSVEKDosOikleSAvPSByZXNoYXBlKFsyLCA1 LCAxMiwgMTVdLCBbMiwyXSkpKSBzdG9wIDIwCitpZiAoYW55ICh2YXI0JVIoMyklRCg6LDop JXogLz0gcmVzaGFwZShbMywgNiwgMTMsIDE2XSwgWzIsMl0pKSkgc3RvcCAyMAorCitjb250 YWlucworICBzdWJyb3V0aW5lIGZvbyh4LCB5KQorICAgIHR5cGUodCkgOjogeCwgeQorICAg IGlmICh4JUEgLz0gNDUpIHN0b3AgMQorICAgIGlmIChhbnkgKHglQiAvPSBbMSwyLDNdKSkg c3RvcCAyCisgICAgaWYgKHglQyV4IC89IDYpIHN0b3AgMworICAgIGlmICh4JUMleSAvPSA1 KSBzdG9wIDMKKyAgICBpZiAoeCVDJXogLz0gNCkgc3RvcCAzCisgICAgaWYgKGFueSAoeCVE KDosOikleCAvPSByZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBbMiwyXSkpKSBzdG9wIDQKKyAg ICBpZiAoYW55ICh4JUQoOiw6KSV5IC89IHJlc2hhcGUoWzIsIDUsIDEyLCAxNV0sIFsyLDJd KSkpIHN0b3AgNAorICAgIGlmIChhbnkgKHglRCg6LDopJXogLz0gcmVzaGFwZShbMywgNiwg MTMsIDE2XSwgWzIsMl0pKSkgc3RvcCA0CisKKyAgICBpZiAoeSVBIC89IDE0NSkgc3RvcCA1 CisgICAgaWYgKGFueSAoeSVCIC89IFs5OTEsOTkyLDk5M10pKSBzdG9wIDYKKyAgICBpZiAo eSVDJXggLz0gOTk2KSBzdG9wIDcKKyAgICBpZiAoeSVDJXkgLz0gOTk1KSBzdG9wIDcKKyAg ICBpZiAoeSVDJXogLz0gOTk0KSBzdG9wIDcKKyAgICBpZiAoYW55ICh5JUQoOiw6KSV4IC89 IHJlc2hhcGUoWzE5OSwgNDk5LCAxMTk5LCAxNDk5XSwgWzIsMl0pKSkgc3RvcCA4CisgICAg aWYgKGFueSAoeSVEKDosOikleSAvPSByZXNoYXBlKFsyOTksIDU5OSwgMTI5OSwgMTU5OV0s IFsyLDJdKSkpIHN0b3AgOAorICAgIGlmIChhbnkgKHklRCg6LDopJXogLz0gcmVzaGFwZShb Mzk5LCA2OTksIDEzOTksIDE2OTldLCBbMiwyXSkpKSBzdG9wIDgKKworICAgIHklQSA9IHgl QQorICAgIHklQig6KSA9IHglQgorICAgIHklQyA9IHglQworICAgIHklRCg6LDopID0geCVE KDosOikKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC01LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC01LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYjJlMzZiMmE0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtNS5mOTAK QEAgLTAsMCArMSw1MyBAQAoraW1wbGljaXQgbm9uZQordHlwZSB0CisgIGludGVnZXIsIGFs bG9jYXRhYmxlIDo6IGEsIGIoOikKK2VuZCB0eXBlIHQKK3R5cGUodCkgOjogeCwgeSwgegor aW50ZWdlciA6OiBpCisKKyEkb21wIHRhcmdldAorICBpZiAoYWxsb2NhdGVkKHglYSkpIHN0 b3AgMQorICBpZiAoYWxsb2NhdGVkKHglYikpIHN0b3AgMgorISRvbXAgZW5kIHRhcmdldAor CithbGxvY2F0ZSh4JWEsIHglYigtNDo2KSkKK3glYig6KSA9IFsoaSwgaT0tNCw2KV0KKwor ISRvbXAgdGFyZ2V0CisgIGlmICgubm90LiBhbGxvY2F0ZWQoeCVhKSkgc3RvcCAzCisgIGlm ICgubm90LiBhbGxvY2F0ZWQoeCViKSkgc3RvcCA0CisgIGlmIChsYm91bmQoeCViLDEpIC89 IC00KSBzdG9wIDUKKyAgaWYgKHVib3VuZCh4JWIsMSkgLz0gNikgc3RvcCA2CisgIGlmIChh bnkgKHglYiAvPSBbKGksIGk9LTQsNildKSkgc3RvcCA3CishJG9tcCBlbmQgdGFyZ2V0CisK KworISBUaGUgZm9sbG93aW5nIG9ubHkgd29ya3Mgd2l0aCBhcnJheXMgZHVlIHRvCishIFBS IGZvcnRyYW4vOTY2NjgKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvOiB5LCB6 KQorCishJG9tcCB0YXJnZXQKKyAgaWYgKGFsbG9jYXRlZCh5JWIpKSBzdG9wIDgKKyAgaWYg KGFsbG9jYXRlZCh6JWIpKSBzdG9wIDkKKyEkb21wIGVuZCB0YXJnZXQKKworYWxsb2NhdGUo eSViKDUpLCB6JWIoMykpCit5JWIgPSA0MgoreiViID0gOTkKKworISAoaW1wbGljaXRseSkg J3RvZnJvbScgbWFwcGVkCishIFBsYW5uZWQgZm9yIE9wZW5NUCA2LjAgKGJ1dCBjb21tb24g ZXh0ZW5zaW9uKQorISBPcGVuTVAgPD0gNS4wIHVuY2xlYXIKKyEkb21wIHRhcmdldAorICBp ZiAoLm5vdC5hbGxvY2F0ZWQoeSViKSkgc3RvcCAxMAorICBpZiAoYW55ICh5JWIgLz0gNDIp KSBzdG9wIDExCishJG9tcCBlbmQgdGFyZ2V0CisKKyEgYWx3YXlzIG1hcDogT3Blbk1QIDUu MSAoY2xhcmlmaWVkKQorISRvbXAgdGFyZ2V0IG1hcChhbHdheXMsIHRvZnJvbTogeikKKyAg aWYgKC5ub3QuYWxsb2NhdGVkKHolYikpIHN0b3AgMTIKKyAgaWYgKGFueSAoeiViIC89IDk5 KSkgc3RvcCAxMworISRvbXAgZW5kIHRhcmdldAorCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC02LmY5MCBiL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC02LmY5MApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWJjMDAwOGY1NGMKLS0t IC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFw LWFsbG9jLWNvbXAtNi5mOTAKQEAgLTAsMCArMSwzMDggQEAKKyEgTk9URTogVGhpcyBjb2Rl IHVzZXMgUE9JTlRFUi4KKyEgV2hpbGUgbWFwKHAsIHZhciVwKSBldGMuIG1hcHMgdGhlIHB0 ci9wdHIgY29tcCBwIC8gdmFyJXAgKGluY2wuIGFsbG9jYXRhYmxlIGNvbXBzKSwKKyEgbWFw KHZhcikgZG9lcyBub3QgbWFwIHZhciVwLgorCit1c2UgaXNvX2NfYmluZGluZworaW1wbGlj aXQgbm9uZQordHlwZSB0MgorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiB4LCB5LCB6Citl bmQgdHlwZSB0MgordHlwZSB0CisgIGludGVnZXIsIHBvaW50ZXIgOjogQSA9PiBudWxsKCkK KyAgaW50ZWdlciwgcG9pbnRlciA6OiBCKDopID0+IG51bGwoKQorICB0eXBlKHQyKSwgcG9p bnRlciA6OiBDID0+IG51bGwoKQorICB0eXBlKHQyKSwgcG9pbnRlciA6OiBEKDosOikgPT4g bnVsbCgpCitlbmQgdHlwZSB0CisKK3R5cGUgdDMKKyAgdHlwZSh0KSA6OiBRCisgIHR5cGUo dCkgOjogUig1KQorZW5kIHR5cGUKKwordHlwZSh0KSA6OiB2YXIsIHZhcjIKK3R5cGUodDMp IDo6IHZhcjMsIHZhcjQKK2ludGVnZXIoY19pbnRwdHJfdCkgOjogaXB0cgorCishIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCishIEFzc2lnbiArIGFsbG9jYXRl CithbGxvY2F0ZSAodmFyJUEsIHNvdXJjZT00NSkKK2FsbG9jYXRlICh2YXIlQigzKSwgc291 cmNlPVsxLDIsM10pCithbGxvY2F0ZSAodmFyJUMpCit2YXIlQyV4ID0gNjsgdmFyJUMleSA9 IDU7IHZhciVDJXogPSA0IAorYWxsb2NhdGUgKHZhciVEKDIsMikpCit2YXIlRCgxLDEpJXgg PSAxCit2YXIlRCgxLDEpJXkgPSAyCit2YXIlRCgxLDEpJXogPSAzCit2YXIlRCgyLDEpJXgg PSA0Cit2YXIlRCgyLDEpJXkgPSA1Cit2YXIlRCgyLDEpJXogPSA2Cit2YXIlRCgxLDIpJXgg PSAxMQordmFyJUQoMSwyKSV5ID0gMTIKK3ZhciVEKDEsMikleiA9IDEzCit2YXIlRCgyLDIp JXggPSAxNAordmFyJUQoMiwyKSV5ID0gMTUKK3ZhciVEKDIsMikleiA9IDE2CisKKyEgQXNz aWduICsgYWxsb2NhdGUKK2FsbG9jYXRlICh2YXIyJUEsIHNvdXJjZT0xNDUpCithbGxvY2F0 ZSAodmFyMiVCLCBzb3VyY2U9Wzk5MSw5OTIsOTkzXSkKK2FsbG9jYXRlICh2YXIyJUMpCit2 YXIyJUMleCA9IDk5NjsgdmFyMiVDJXkgPSA5OTU7IHZhcjIlQyV6ID0gOTk0IAorYWxsb2Nh dGUgKHZhcjIlRCgyLDIpKQordmFyMiVEKDEsMSkleCA9IDE5OQordmFyMiVEKDEsMSkleSA9 IDI5OQordmFyMiVEKDEsMSkleiA9IDM5OQordmFyMiVEKDIsMSkleCA9IDQ5OQordmFyMiVE KDIsMSkleSA9IDU5OQordmFyMiVEKDIsMSkleiA9IDY5OQordmFyMiVEKDEsMikleCA9IDEx OTkKK3ZhcjIlRCgxLDIpJXkgPSAxMjk5Cit2YXIyJUQoMSwyKSV6ID0gMTM5OQordmFyMiVE KDIsMikleCA9IDE0OTkKK3ZhcjIlRCgyLDIpJXkgPSAxNTk5Cit2YXIyJUQoMiwyKSV6ID0g MTY5OQorCitibG9jaworICBpbnRlZ2VyKGNfaW50cHRyX3QpIDo6IGxvY19hLCBsb2NfYiwg bG9jX2MsIGxvY19kLCBsb2MyX2EsIGxvYzJfYiwgbG9jMl9jLCBsb2MyX2QKKyAgbG9jX2Eg PSBsb2MgKHZhciVhKQorICBsb2NfYiA9IGxvYyAodmFyJWIpCisgIGxvY19jID0gbG9jICh2 YXIlZCkKKyAgbG9jX2QgPSBsb2MgKHZhciVkKQorICBsb2MyX2EgPSBsb2MgKHZhcjIlYSkK KyAgbG9jMl9iID0gbG9jICh2YXIyJWIpCisgIGxvYzJfYyA9IGxvYyAodmFyMiVjKQorICBs b2MyX2QgPSBsb2MgKHZhcjIlZCkKKyAgISB2YXIvdmFyMiBhcmUgbWFwcGVkLCBidXQgdGhl IHBvaW50ZXIgY29tcG9uZW50cyBhcmVuJ3QKKyAgISRvbXAgdGFyZ2V0IG1hcCh0bzogdmFy KSBtYXAodG9mcm9tOiB2YXIyKQorICAgIGlmIChsb2NfYSAvPSBsb2MgKHZhciVhKSkgc3Rv cCAzMQorICAgIGlmIChsb2NfYiAvPSBsb2MgKHZhciViKSkgc3RvcCAzMgorICAgIGlmIChs b2NfYyAvPSBsb2MgKHZhciVkKSkgc3RvcCAzMworICAgIGlmIChsb2NfZCAvPSBsb2MgKHZh ciVkKSkgc3RvcCAzNAorICAgIGlmIChsb2MyX2EgLz0gbG9jICh2YXIyJWEpKSBzdG9wIDM1 CisgICAgaWYgKGxvYzJfYiAvPSBsb2MgKHZhcjIlYikpIHN0b3AgMzYKKyAgICBpZiAobG9j Ml9jIC89IGxvYyAodmFyMiVjKSkgc3RvcCAzNworICAgIGlmIChsb2MyX2QgLz0gbG9jICh2 YXIyJWQpKSBzdG9wIDM4CisgICEkb21wIGVuZCB0YXJnZXQKKyAgaWYgKGxvY19hIC89IGxv YyAodmFyJWEpKSBzdG9wIDQxCisgIGlmIChsb2NfYiAvPSBsb2MgKHZhciViKSkgc3RvcCA0 MgorICBpZiAobG9jX2MgLz0gbG9jICh2YXIlZCkpIHN0b3AgNDMKKyAgaWYgKGxvY19kIC89 IGxvYyAodmFyJWQpKSBzdG9wIDQ0CisgIGlmIChsb2MyX2EgLz0gbG9jICh2YXIyJWEpKSBz dG9wIDQ1CisgIGlmIChsb2MyX2IgLz0gbG9jICh2YXIyJWIpKSBzdG9wIDQ2CisgIGlmIChs b2MyX2MgLz0gbG9jICh2YXIyJWMpKSBzdG9wIDQ3CisgIGlmIChsb2MyX2QgLz0gbG9jICh2 YXIyJWQpKSBzdG9wIDQ4CitlbmQgYmxvY2sKKworYmxvY2sKKyAgISBNYXAgb25seSAoYWxs KSBjb21wb25lbnRzLCBidXQgdGhpcyBtYXBzIGFsc28gdGhlIGFsbG9jIGNvbXBzCisgICEk b21wIHRhcmdldCBtYXAodG86IHZhciVhLCB2YXIlYiwgdmFyJWMsIHZhciVkKSBtYXAodG9m cm9tOiB2YXIyJWEsIHZhcjIlYiwgdmFyMiVjLCB2YXIyJWQpCisgICAgY2FsbCBmb28gKHZh cix2YXIyKQorICAhJG9tcCBlbmQgdGFyZ2V0CitlbmQgYmxvY2sKKworaWYgKHZhcjIlQSAv PSA0NSkgc3RvcCA5CitpZiAoYW55ICh2YXIyJUIgLz0gWzEsMiwzXSkpIHN0b3AgMTAKK2lm ICh2YXIyJUMleCAvPSA2KSBzdG9wIDExCitpZiAodmFyMiVDJXkgLz0gNSkgc3RvcCAxMQor aWYgKHZhcjIlQyV6IC89IDQpIHN0b3AgMTEKK2Jsb2NrCisgIGludGVnZXIgOjogdG1wX3go MiwyKSwgdG1wX3koMiwyKSwgdG1wX3ooMiwyKSwgaSwgagorICB0bXBfeCA9IHJlc2hhcGUo WzEsIDQsIDExLCAxNF0sIFsyLDJdKQorICB0bXBfeSA9IHJlc2hhcGUoWzIsIDUsIDEyLCAx NV0sIFsyLDJdKQorICB0bXBfeiA9IHJlc2hhcGUoWzMsIDYsIDEzLCAxNl0sIFsyLDJdKQor ICBkbyBqID0gMSwgMgorICAgIGRvIGkgPSAxLCAyCisgICAgICBpZiAodmFyMiVEKGksaikl eCAvPSB0bXBfeChpLGopKSBzdG9wIDEyCisgICAgICBpZiAodmFyMiVEKGksaikleSAvPSB0 bXBfeShpLGopKSBzdG9wIDEyCisgICAgICBpZiAodmFyMiVEKGksaikleiAvPSB0bXBfeihp LGopKSBzdG9wIDEyCisgICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGJsb2NrCisKKyEgRXh0 cmEgZGVhbGxvY2F0ZXMgZHVlIHRvIFBSIGZvcnRyYW4vMTA0Njk3CitkZWFsbG9jYXRlKHZh ciVDJXgsIHZhciVDJXksIHZhciVDJXopCitkZWFsbG9jYXRlKHZhciVEKDEsMSkleCwgdmFy JUQoMSwxKSV5LCB2YXIlRCgxLDEpJXopCitkZWFsbG9jYXRlKHZhciVEKDIsMSkleCwgdmFy JUQoMiwxKSV5LCB2YXIlRCgyLDEpJXopCitkZWFsbG9jYXRlKHZhciVEKDEsMikleCwgdmFy JUQoMSwyKSV5LCB2YXIlRCgxLDIpJXopCitkZWFsbG9jYXRlKHZhciVEKDIsMikleCwgdmFy JUQoMiwyKSV5LCB2YXIlRCgyLDIpJXopCitkZWFsbG9jYXRlKHZhciVBLCB2YXIlQiwgdmFy JUMsIHZhciVEKQorCitkZWFsbG9jYXRlKHZhcjIlQyV4LCB2YXIyJUMleSwgdmFyMiVDJXop CitkZWFsbG9jYXRlKHZhcjIlRCgxLDEpJXgsIHZhcjIlRCgxLDEpJXksIHZhcjIlRCgxLDEp JXopCitkZWFsbG9jYXRlKHZhcjIlRCgyLDEpJXgsIHZhcjIlRCgyLDEpJXksIHZhcjIlRCgy LDEpJXopCitkZWFsbG9jYXRlKHZhcjIlRCgxLDIpJXgsIHZhcjIlRCgxLDIpJXksIHZhcjIl RCgxLDIpJXopCitkZWFsbG9jYXRlKHZhcjIlRCgyLDIpJXgsIHZhcjIlRCgyLDIpJXksIHZh cjIlRCgyLDIpJXopCitkZWFsbG9jYXRlKHZhcjIlQSwgdmFyMiVCLCB2YXIyJUMsIHZhcjIl RCkKKworISAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorISBBc3Np Z24gKyBhbGxvY2F0ZQorYWxsb2NhdGUgKHZhcjMlUSVBLCBzb3VyY2U9NDUpCithbGxvY2F0 ZSAodmFyMyVRJUIsIHNvdXJjZT1bMSwyLDNdKQorYWxsb2NhdGUgKHZhcjMlUSVDLCBzb3Vy Y2U9dDIoNiw1LDQpKQorYWxsb2NhdGUgKHZhcjMlUSVEKDIsMikpCit2YXIzJVElRCgxLDEp ID0gdDIoMSwyLDMpCit2YXIzJVElRCgyLDEpID0gdDIoNCw1LDYpCit2YXIzJVElRCgxLDIp ID0gdDIoMTEsMTIsMTMpCit2YXIzJVElRCgyLDIpID0gdDIoMTQsMTUsMTYpCisKK2FsbG9j YXRlICh2YXIzJVIoMiklQSwgc291cmNlPTQ1KQorYWxsb2NhdGUgKHZhcjMlUigyKSVCLCBz b3VyY2U9WzEsMiwzXSkKK2FsbG9jYXRlICh2YXIzJVIoMiklQywgc291cmNlPXQyKDYsNSw0 KSkKK2FsbG9jYXRlICh2YXIzJVIoMiklRCgyLDIpKQordmFyMyVSKDIpJUQoMSwxKSA9IHQy KDEsMiwzKQordmFyMyVSKDIpJUQoMiwxKSA9IHQyKDQsNSw2KQordmFyMyVSKDIpJUQoMSwy KSA9IHQyKDExLDEyLDEzKQordmFyMyVSKDIpJUQoMiwyKSA9IHQyKDE0LDE1LDE2KQorCish IEFzc2lnbiArIGFsbG9jYXRlCithbGxvY2F0ZSAodmFyNCVRJUEsIHNvdXJjZT0xNDUpCith bGxvY2F0ZSAodmFyNCVRJUIsIHNvdXJjZT1bOTkxLDk5Miw5OTNdKQorYWxsb2NhdGUgKHZh cjQlUSVDLCBzb3VyY2U9dDIoOTk2LDk5NSw5OTQpKQorYWxsb2NhdGUgKHZhcjQlUSVEKDIs MikpCit2YXI0JVElRCgxLDEpID0gdDIoMTk5LDI5OSwzOTkpCit2YXI0JVElRCgyLDEpID0g dDIoNDk5LDU5OSw2OTkpCit2YXI0JVElRCgxLDIpID0gdDIoMTE5OSwxMjk5LDEzOTkpCit2 YXI0JVElRCgyLDIpID0gdDIoMTQ5OSwxNTk5LDE2OTkpCisKK2FsbG9jYXRlICh2YXI0JVIo MyklQSwgc291cmNlPTE0NSkKK2FsbG9jYXRlICh2YXI0JVIoMyklQiwgc291cmNlPVs5OTEs OTkyLDk5M10pCithbGxvY2F0ZSAodmFyNCVSKDMpJUMsIHNvdXJjZT10Mig5OTYsOTk1LDk5 NCkpCithbGxvY2F0ZSAodmFyNCVSKDMpJUQoMiwyKSkKK3ZhcjQlUigzKSVEKDEsMSkgPSB0 MigxOTksMjk5LDM5OSkKK3ZhcjQlUigzKSVEKDIsMSkgPSB0Mig0OTksNTk5LDY5OSkKK3Zh cjQlUigzKSVEKDEsMikgPSB0MigxMTk5LDEyOTksMTM5OSkKK3ZhcjQlUigzKSVEKDIsMikg PSB0MigxNDk5LDE1OTksMTY5OSkKKworISRvbXAgdGFyZ2V0IG1hcCh0bzogdmFyMyVRJUEs IHZhcjMlUSVCLCB2YXIzJVElQywgdmFyMyVRJUQpICYKKyEkb21wJiAgICAgICBtYXAodG9m cm9tOiB2YXI0JVElQSwgdmFyNCVRJUIsIHZhcjQlUSVDLCB2YXI0JVElRCkKKyAgY2FsbCBm b28odmFyMyVRLCB2YXI0JVEpCishJG9tcCBlbmQgdGFyZ2V0CisKK2lwdHIgPSBsb2ModmFy MyVSKDIpJUEpCisKKyEkb21wIHRhcmdldCBtYXAodG86IHZhcjMlUigyKSVBLCB2YXIzJVIo MiklQiwgdmFyMyVSKDIpJUMsIHZhcjMlUigyKSVEKSAmCishJG9tcCYgICAgICAgbWFwKHRv ZnJvbTogdmFyNCVSKDMpJUEsIHZhcjQlUigzKSVCLCB2YXI0JVIoMyklQywgdmFyNCVSKDMp JUQpCisgIGNhbGwgZm9vKHZhcjMlUigyKSwgdmFyNCVSKDMpKQorISRvbXAgZW5kIHRhcmdl dAorCitpZiAodmFyNCVRJUEgLz0gNDUpIHN0b3AgMTMKK2lmIChhbnkgKHZhcjQlUSVCIC89 IFsxLDIsM10pKSBzdG9wIDE0CitpZiAodmFyNCVRJUMleCAvPSA2KSBzdG9wIDE1CitpZiAo dmFyNCVRJUMleSAvPSA1KSBzdG9wIDE1CitpZiAodmFyNCVRJUMleiAvPSA0KSBzdG9wIDE1 CitibG9jaworICBpbnRlZ2VyIDo6IHRtcF94KDIsMiksIHRtcF95KDIsMiksIHRtcF96KDIs MiksIGksIGoKKyAgdG1wX3ggPSByZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBbMiwyXSkKKyAg dG1wX3kgPSByZXNoYXBlKFsyLCA1LCAxMiwgMTVdLCBbMiwyXSkKKyAgdG1wX3ogPSByZXNo YXBlKFszLCA2LCAxMywgMTZdLCBbMiwyXSkKKyAgZG8gaiA9IDEsIDIKKyAgICBkbyBpID0g MSwgMgorICAgICAgaWYgKHZhcjQlUSVEKGksaikleCAvPSB0bXBfeChpLGopKSBzdG9wIDE2 CisgICAgICBpZiAodmFyNCVRJUQoaSxqKSV5IC89IHRtcF95KGksaikpIHN0b3AgMTYKKyAg ICAgIGlmICh2YXI0JVElRChpLGopJXogLz0gdG1wX3ooaSxqKSkgc3RvcCAxNgorICAgIGVu ZCBkbworICBlbmQgZG8KK2VuZCBibG9jaworCishIENmLiBQUiBmb3J0cmFuLzEwNDY5Ngor ISB7IGRnLW91dHB1dCAidmFsaWQgbWFwcGluZywgT0siIHsgeGZhaWwgeyBvZmZsb2FkX2Rl dmljZV9ub25zaGFyZWRfYXMgfSB9IH0KK2lmIChpcHRyIC89IGxvYyh2YXIzJVIoMiklQSkp IHRoZW4KKyAgcHJpbnQgKiwgImludmFsaWQgbWFwcGluZywgY2YuIFBSIGZvcnRyYW4vMTA0 Njk2IgorZWxzZQorCitpZiAodmFyNCVSKDMpJUEgLz0gNDUpIHN0b3AgMTcKK2lmIChhbnkg KHZhcjQlUigzKSVCIC89IFsxLDIsM10pKSBzdG9wIDE4CitpZiAodmFyNCVSKDMpJUMleCAv PSA2KSBzdG9wIDE5CitpZiAodmFyNCVSKDMpJUMleSAvPSA1KSBzdG9wIDE5CitpZiAodmFy NCVSKDMpJUMleiAvPSA0KSBzdG9wIDE5CitibG9jaworICBpbnRlZ2VyIDo6IHRtcF94KDIs MiksIHRtcF95KDIsMiksIHRtcF96KDIsMiksIGksIGoKKyAgdG1wX3ggPSByZXNoYXBlKFsx LCA0LCAxMSwgMTRdLCBbMiwyXSkKKyAgdG1wX3kgPSByZXNoYXBlKFsyLCA1LCAxMiwgMTVd LCBbMiwyXSkKKyAgdG1wX3ogPSByZXNoYXBlKFszLCA2LCAxMywgMTZdLCBbMiwyXSkKKyAg ZG8gaiA9IDEsIDIKKyAgICBkbyBpID0gMSwgMgorICAgICAgaWYgKHZhcjQlUigzKSVEKGks aikleCAvPSB0bXBfeChpLGopKSBzdG9wIDIwCisgICAgICBpZiAodmFyNCVSKDMpJUQoaSxq KSV5IC89IHRtcF95KGksaikpIHN0b3AgMjAKKyAgICAgIGlmICh2YXI0JVIoMyklRChpLGop JXogLz0gdG1wX3ooaSxqKSkgc3RvcCAyMAorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZCBi bG9jaworCishIEV4dHJhIGRlYWxsb2NhdGVzIGR1ZSB0byBQUiBmb3J0cmFuLzEwNDY5Nwor ZGVhbGxvY2F0ZSh2YXIzJVElQyV4LCB2YXIzJVElRCgxLDEpJXgsIHZhcjMlUSVEKDIsMSkl eCwgdmFyMyVRJUQoMSwyKSV4LCB2YXIzJVElRCgyLDIpJXgpCitkZWFsbG9jYXRlKHZhcjMl USVDJXksIHZhcjMlUSVEKDEsMSkleSwgdmFyMyVRJUQoMiwxKSV5LCB2YXIzJVElRCgxLDIp JXksIHZhcjMlUSVEKDIsMikleSkKK2RlYWxsb2NhdGUodmFyMyVRJUMleiwgdmFyMyVRJUQo MSwxKSV6LCB2YXIzJVElRCgyLDEpJXosIHZhcjMlUSVEKDEsMikleiwgdmFyMyVRJUQoMiwy KSV6KQorZGVhbGxvY2F0ZSh2YXIzJVElQSwgdmFyMyVRJUIsIHZhcjMlUSVDLCB2YXIzJVEl RCkKKworZGVhbGxvY2F0ZSh2YXI0JVElQyV4LCB2YXI0JVElRCgxLDEpJXgsIHZhcjQlUSVE KDIsMSkleCwgdmFyNCVRJUQoMSwyKSV4LCB2YXI0JVElRCgyLDIpJXgpCitkZWFsbG9jYXRl KHZhcjQlUSVDJXksIHZhcjQlUSVEKDEsMSkleSwgdmFyNCVRJUQoMiwxKSV5LCB2YXI0JVEl RCgxLDIpJXksIHZhcjQlUSVEKDIsMikleSkKK2RlYWxsb2NhdGUodmFyNCVRJUMleiwgdmFy NCVRJUQoMSwxKSV6LCB2YXI0JVElRCgyLDEpJXosIHZhcjQlUSVEKDEsMikleiwgdmFyNCVR JUQoMiwyKSV6KQorZGVhbGxvY2F0ZSh2YXI0JVElQSwgdmFyNCVRJUIsIHZhcjQlUSVDLCB2 YXI0JVElRCkKKworZGVhbGxvY2F0ZSh2YXIzJVIoMiklQyV4LCB2YXIzJVIoMiklRCgxLDEp JXgsIHZhcjMlUigyKSVEKDIsMSkleCwgdmFyMyVSKDIpJUQoMSwyKSV4LCB2YXIzJVIoMikl RCgyLDIpJXgpCitkZWFsbG9jYXRlKHZhcjMlUigyKSVDJXksIHZhcjMlUigyKSVEKDEsMSkl eSwgdmFyMyVSKDIpJUQoMiwxKSV5LCB2YXIzJVIoMiklRCgxLDIpJXksIHZhcjMlUigyKSVE KDIsMikleSkKK2RlYWxsb2NhdGUodmFyMyVSKDIpJUMleiwgdmFyMyVSKDIpJUQoMSwxKSV6 LCB2YXIzJVIoMiklRCgyLDEpJXosIHZhcjMlUigyKSVEKDEsMikleiwgdmFyMyVSKDIpJUQo MiwyKSV6KQorZGVhbGxvY2F0ZSh2YXIzJVIoMiklQSwgdmFyMyVSKDIpJUIsIHZhcjMlUigy KSVDLCB2YXIzJVIoMiklRCkKKworZGVhbGxvY2F0ZSh2YXI0JVIoMyklQyV4LCB2YXI0JVIo MyklRCgxLDEpJXgsIHZhcjQlUigzKSVEKDIsMSkleCwgdmFyNCVSKDMpJUQoMSwyKSV4LCB2 YXI0JVIoMyklRCgyLDIpJXgpCitkZWFsbG9jYXRlKHZhcjQlUigzKSVDJXksIHZhcjQlUigz KSVEKDEsMSkleSwgdmFyNCVSKDMpJUQoMiwxKSV5LCB2YXI0JVIoMyklRCgxLDIpJXksIHZh cjQlUigzKSVEKDIsMikleSkKK2RlYWxsb2NhdGUodmFyNCVSKDMpJUMleiwgdmFyNCVSKDMp JUQoMSwxKSV6LCB2YXI0JVIoMyklRCgyLDEpJXosIHZhcjQlUigzKSVEKDEsMikleiwgdmFy NCVSKDMpJUQoMiwyKSV6KQorZGVhbGxvY2F0ZSh2YXI0JVIoMyklQSwgdmFyNCVSKDMpJUIs IHZhcjQlUigzKSVDLCB2YXI0JVIoMyklRCkKKworICBwcmludCAqLCAidmFsaWQgbWFwcGlu ZywgT0siCitlbmRpZgorCitjb250YWlucworICBzdWJyb3V0aW5lIGZvbyh4LCB5KQorICAg IHR5cGUodCkgOjogeCwgeQorICAgIGludGVudChpbikgOjogeAorICAgIGludGVudChpbm91 dCkgOjogeQorICAgIGludGVnZXIgOjogdG1wX3goMiwyKSwgdG1wX3koMiwyKSwgdG1wX3oo MiwyKSwgaSwgagorICAgIGlmICh4JUEgLz0gNDUpIHN0b3AgMQorICAgIGlmIChhbnkgKHgl QiAvPSBbMSwyLDNdKSkgc3RvcCAyCisgICAgaWYgKHglQyV4IC89IDYpIHN0b3AgMworICAg IGlmICh4JUMleSAvPSA1KSBzdG9wIDMKKyAgICBpZiAoeCVDJXogLz0gNCkgc3RvcCAzCisg ICAgCisgICAgdG1wX3ggPSByZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBbMiwyXSkKKyAgICB0 bXBfeSA9IHJlc2hhcGUoWzIsIDUsIDEyLCAxNV0sIFsyLDJdKQorICAgIHRtcF96ID0gcmVz aGFwZShbMywgNiwgMTMsIDE2XSwgWzIsMl0pCisgICAgZG8gaiA9IDEsIDIKKyAgICAgIGRv IGkgPSAxLCAyCisgICAgICAgIGlmICh4JUQoaSxqKSV4IC89IHRtcF94KGksaikpIHN0b3Ag NAorICAgICAgICBpZiAoeCVEKGksaikleSAvPSB0bXBfeShpLGopKSBzdG9wIDQKKyAgICAg ICAgaWYgKHglRChpLGopJXogLz0gdG1wX3ooaSxqKSkgc3RvcCA0CisgICAgICBlbmQgZG8K KyAgICBlbmQgZG8KKworICAgIGlmICh5JUEgLz0gMTQ1KSBzdG9wIDUKKyAgICBpZiAoYW55 ICh5JUIgLz0gWzk5MSw5OTIsOTkzXSkpIHN0b3AgNgorICAgIGlmICh5JUMleCAvPSA5OTYp IHN0b3AgNworICAgIGlmICh5JUMleSAvPSA5OTUpIHN0b3AgNworICAgIGlmICh5JUMleiAv PSA5OTQpIHN0b3AgNworICAgIHRtcF94ID0gcmVzaGFwZShbMTk5LCA0OTksIDExOTksIDE0 OTldLCBbMiwyXSkKKyAgICB0bXBfeSA9IHJlc2hhcGUoWzI5OSwgNTk5LCAxMjk5LCAxNTk5 XSwgWzIsMl0pCisgICAgdG1wX3ogPSByZXNoYXBlKFszOTksIDY5OSwgMTM5OSwgMTY5OV0s IFsyLDJdKQorICAgIGRvIGogPSAxLCAyCisgICAgICBkbyBpID0gMSwgMgorICAgICAgICBp ZiAoeSVEKGksaikleCAvPSB0bXBfeChpLGopKSBzdG9wIDgKKyAgICAgICAgaWYgKHklRChp LGopJXkgLz0gdG1wX3koaSxqKSkgc3RvcCA4CisgICAgICAgIGlmICh5JUQoaSxqKSV6IC89 IHRtcF96KGksaikpIHN0b3AgOAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisKKyAgICB5 JUEgPSB4JUEKKyAgICB5JUIoOikgPSB4JUIKKyAgICB5JUMleCA9IHglQyV4CisgICAgeSVD JXkgPSB4JUMleQorICAgIHklQyV6ID0geCVDJXoKKyAgICBkbyBqID0gMSwgMgorICAgICAg ZG8gaSA9IDEsIDIKKyAgICAgICAgeSVEKGksaikleCA9IHglRChpLGopJXgKKyAgICAgICAg eSVEKGksaikleSA9IHglRChpLGopJXkKKyAgICAgICAgeSVEKGksaikleiA9IHglRChpLGop JXoKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEv bGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTcuZjkw IGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTcu ZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYzkzMTNlODlj NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJh bi9tYXAtYWxsb2MtY29tcC03LmY5MApAQCAtMCwwICsxLDY3MiBAQAorbW9kdWxlIG0KKyAg aW1wbGljaXQgbm9uZSAodHlwZSwgZXh0ZXJuYWwpCisgIHR5cGUgdAorICAgIGludGVnZXIs IGFsbG9jYXRhYmxlIDo6IGFycig6LDopCisgICAgaW50ZWdlciA6OiB2YXIKKyAgICBpbnRl Z2VyLCBhbGxvY2F0YWJsZSA6OiBzbHIKKyAgZW5kIHR5cGUgdAorCitjb250YWlucworCisg IHN1YnJvdXRpbmUgY2hlY2tfaXQgKGlzX3ByZXNlbnQsIGR1bW15X2FsbG9jZWQsIGlubmVy X2FsbG9jLCAmCisgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhciwgYXJyYXksIGFfc2Nh bGFyLCBhX2FycmF5LCAmCisgICAgICAgICAgICAgICAgICAgICAgIGxfc2NhbGFyLCBsX2Fy cmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5LCAmCisgICAgICAgICAgICAgICAgICAgICAgIG9w dF9zY2FsYXIsIG9wdF9hcnJheSwgYV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheSkKKyAgICB0 eXBlKHQpLCBpbnRlbnQoaW5vdXQpIDo6ICYKKyAgICAgICAgICAgIHNjYWxhciwgYXJyYXko Oiw6KSwgb3B0X3NjYWxhciwgb3B0X2FycmF5KDosOiksIGFfc2NhbGFyLCBhX2FycmF5KDos OiksICYKKyAgICAgICAgICAgIGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXkoOiw6KSwgJgor ICAgICAgICAgICAgbF9zY2FsYXIsIGxfYXJyYXkoOiw6KSwgbGFfc2NhbGFyLCBsYV9hcnJh eSg6LDopCisgICAgb3B0aW9uYWwgOjogb3B0X3NjYWxhciwgb3B0X2FycmF5LCBhX29wdF9z Y2FsYXIsIGFfb3B0X2FycmF5CisgICAgYWxsb2NhdGFibGUgOjogYV9zY2FsYXIsIGFfYXJy YXksIGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXksIGxhX3NjYWxhciwgbGFfYXJyYXkKKyAg ICBsb2dpY2FsLCB2YWx1ZSA6OiBpc19wcmVzZW50LCBkdW1teV9hbGxvY2VkLCBpbm5lcl9h bGxvYworICAgIGludGVnZXIgOjogaSwgaiwgaywgbAorCisgICAgISBDSEVDSyBWQUxVRQor ICAgIGlmIChzY2FsYXIldmFyIC89IDQyKSBzdG9wIDEKKyAgICBpZiAobF9zY2FsYXIldmFy IC89IDQyKSBzdG9wIDEKKyAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgaWYgKG9w dF9zY2FsYXIldmFyIC89IDQyKSBzdG9wIDIKKyAgICBlbmQgaWYKKyAgICBpZiAoYW55IChz aGFwZShhcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAgICBpZiAoYW55IChzaGFwZShsX2Fy cmF5KSAvPSBbMywyXSkpIHN0b3AgMQorICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAg ICBpZiAoYW55IChzaGFwZShvcHRfYXJyYXkpIC89IFszLDJdKSkgc3RvcCAxCisgICAgZW5k IGlmCisgICAgZG8gaiA9IDEsIDIKKyAgICAgIGRvIGkgPSAxLCAzCisgICAgICAgIGlmIChh cnJheShpLGopJXZhciAvPSBpKjk3ICsgMTAwKjQxKmopIHN0b3AgMworICAgICAgICBpZiAo bF9hcnJheShpLGopJXZhciAvPSBpKjk3ICsgMTAwKjQxKmopIHN0b3AgMworICAgICAgICBp ZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgIGlmIChvcHRfYXJyYXkoaSxqKSV2YXIg Lz0gaSo5NyArIDEwMCo0MSpqKSBzdG9wIDQKKyAgICAgICAgZW5kIGlmCisgICAgICBlbmQg ZG8KKyAgICBlbmQgZG8KKworICAgIGlmIChkdW1teV9hbGxvY2VkKSB0aGVuCisgICAgICBp ZiAoYV9zY2FsYXIldmFyIC89IDQyKSBzdG9wIDEKKyAgICAgIGlmIChsYV9zY2FsYXIldmFy IC89IDQyKSBzdG9wIDEKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgIGlm IChhX29wdF9zY2FsYXIldmFyIC89IDQyKSBzdG9wIDEKKyAgICAgIGVuZCBpZgorICAgICAg aWYgKGFueSAoc2hhcGUoYV9hcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAgICAgIGlmIChh bnkgKHNoYXBlKGxhX2FycmF5KSAvPSBbMywyXSkpIHN0b3AgMQorICAgICAgaWYgKGlzX3By ZXNlbnQpIHRoZW4KKyAgICAgICAgaWYgKGFueSAoc2hhcGUoYV9vcHRfYXJyYXkpIC89IFsz LDJdKSkgc3RvcCAxCisgICAgICBlbmQgaWYKKyAgICAgIGRvIGogPSAxLCAyCisgICAgICAg IGRvIGkgPSAxLCAzCisgICAgICAgICAgaWYgKGFfYXJyYXkoaSxqKSV2YXIgLz0gaSo5NyAr IDEwMCo0MSpqKSBzdG9wIDEKKyAgICAgICAgICBpZiAobGFfYXJyYXkoaSxqKSV2YXIgLz0g aSo5NyArIDEwMCo0MSpqKSBzdG9wIDEKKyAgICAgICAgICBpZiAoaXNfcHJlc2VudCkgdGhl bgorICAgICAgICAgICAgaWYgKGFfb3B0X2FycmF5KGksaikldmFyIC89IGkqOTcgKyAxMDAq NDEqaikgc3RvcCAxCisgICAgICAgICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAgICAg ZW5kIGRvCisgICAgZWxzZQorICAgICAgaWYgKGFsbG9jYXRlZCAoYV9zY2FsYXIpKSBzdG9w IDEKKyAgICAgIGlmIChhbGxvY2F0ZWQgKGxhX3NjYWxhcikpIHN0b3AgMQorICAgICAgaWYg KGFsbG9jYXRlZCAoYV9hcnJheSkpIHN0b3AgMQorICAgICAgaWYgKGFsbG9jYXRlZCAobGFf YXJyYXkpKSBzdG9wIDEKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgIGlm IChhbGxvY2F0ZWQgKGFfb3B0X3NjYWxhcikpIHN0b3AgMQorICAgICAgICBpZiAoYWxsb2Nh dGVkIChhX29wdF9hcnJheSkpIHN0b3AgMQorICAgICAgZW5kIGlmCisgICAgZW5kIGlmCisK KyAgICBpZiAoaW5uZXJfYWxsb2MpIHRoZW4KKyAgICAgIGlmIChzY2FsYXIlc2xyIC89IDQ2 Nykgc3RvcCA1CisgICAgICBpZiAobF9zY2FsYXIlc2xyIC89IDQ2Nykgc3RvcCA1CisgICAg ICBpZiAoYV9zY2FsYXIlc2xyIC89IDQ2Nykgc3RvcCA2CisgICAgICBpZiAobGFfc2NhbGFy JXNsciAvPSA0NjcpIHN0b3AgNgorICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAg ICAgaWYgKG9wdF9zY2FsYXIlc2xyIC89IDQ2Nykgc3RvcCA3CisgICAgICAgIGlmIChhX29w dF9zY2FsYXIlc2xyIC89IDQ2Nykgc3RvcCA4CisgICAgICBlbmQgaWYKKyAgICAgIGRvIGog PSAxLCAyCisgICAgICAgIGRvIGkgPSAxLCAzCisgICAgICAgICAgaWYgKGFycmF5KGksaikl c2xyIC89IChpKjk3ICsgMTAwKjQxKmopICArIDQ2Nykgc3RvcCA5CisgICAgICAgICAgaWYg KGxfYXJyYXkoaSxqKSVzbHIgLz0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3KSBzdG9wIDkK KyAgICAgICAgICBpZiAoYV9hcnJheShpLGopJXNsciAvPSAoaSo5NyArIDEwMCo0MSpqKSAg KyA0NjcpIHN0b3AgMTAKKyAgICAgICAgICBpZiAobGFfYXJyYXkoaSxqKSVzbHIgLz0gKGkq OTcgKyAxMDAqNDEqaikgICsgNDY3KSBzdG9wIDEwCisgICAgICAgICAgaWYgKGlzX3ByZXNl bnQpIHRoZW4KKyAgICAgICAgICAgIGlmIChvcHRfYXJyYXkoaSxqKSVzbHIgLz0gKGkqOTcg KyAxMDAqNDEqaikgICsgNDY3KSBzdG9wIDExCisgICAgICAgICAgICBpZiAoYV9vcHRfYXJy YXkoaSxqKSVzbHIgLz0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3KSBzdG9wIDEyCisgICAg ICAgICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisKKyAgICAgIGRv IGwgPSAxLCA1CisgICAgICAgIGRvIGsgPSAxLCA0CisgICAgICAgICAgaWYgKGFueSAoc2hh cGUoc2NhbGFyJWFycikgLz0gWzQsNV0pKSBzdG9wIDEKKyAgICAgICAgICBpZiAoYW55IChz aGFwZShsX3NjYWxhciVhcnIpIC89IFs0LDVdKSkgc3RvcCAxCisgICAgICAgICAgaWYgKGFu eSAoc2hhcGUoYV9zY2FsYXIlYXJyKSAvPSBbNCw1XSkpIHN0b3AgMQorICAgICAgICAgIGlm IChhbnkgKHNoYXBlKGxhX3NjYWxhciVhcnIpIC89IFs0LDVdKSkgc3RvcCAxCisgICAgICAg ICAgaWYgKHNjYWxhciVhcnIoayxsKSAvPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcpIHN0 b3AgMTMKKyAgICAgICAgICBpZiAobF9zY2FsYXIlYXJyKGssbCkgLz0gKGkqMjcgKyAxMDAw KjExKmopICsgNDY3KSBzdG9wIDEzCisgICAgICAgICAgaWYgKGFfc2NhbGFyJWFycihrLGwp IC89IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2Nykgc3RvcCAxNAorICAgICAgICAgIGlmIChs YV9zY2FsYXIlYXJyKGssbCkgLz0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3KSBzdG9wIDE0 CisgICAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICAgIGlmIChhbnkg KHNoYXBlKG9wdF9zY2FsYXIlYXJyKSAvPSBbNCw1XSkpIHN0b3AgMQorICAgICAgICAgICAg aWYgKGFueSAoc2hhcGUoYV9vcHRfc2NhbGFyJWFycikgLz0gWzQsNV0pKSBzdG9wIDEKKyAg ICAgICAgICAgIGlmIChvcHRfc2NhbGFyJWFycihrLGwpIC89IChpKjI3ICsgMTAwMCoxMSpq KSArIDQ2Nykgc3RvcCAxNQorICAgICAgICAgICAgaWYgKGFfb3B0X3NjYWxhciVhcnIoayxs KSAvPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcpIHN0b3AgMTYKKyAgICAgICAgICBlbmQg aWYKKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQgZG8KKyAgICAgIGRvIGogPSAxLCAyCisg ICAgICAgIGRvIGkgPSAxLCAzCisgICAgICAgICAgaWYgKGFueSAoc2hhcGUoYXJyYXkoaSxq KSVhcnIpIC89IFtpLGpdKSkgc3RvcCAxCisgICAgICAgICAgaWYgKGFueSAoc2hhcGUobF9h cnJheShpLGopJWFycikgLz0gW2ksal0pKSBzdG9wIDEKKyAgICAgICAgICBpZiAoYW55IChz aGFwZShhX2FycmF5KGksaiklYXJyKSAvPSBbaSxqXSkpIHN0b3AgMQorICAgICAgICAgIGlm IChhbnkgKHNoYXBlKGxhX2FycmF5KGksaiklYXJyKSAvPSBbaSxqXSkpIHN0b3AgMQorICAg ICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgICAgICBpZiAoYW55IChzaGFw ZShvcHRfYXJyYXkoaSxqKSVhcnIpIC89IFtpLGpdKSkgc3RvcCAxCisgICAgICAgICAgICBp ZiAoYW55IChzaGFwZShhX29wdF9hcnJheShpLGopJWFycikgLz0gW2ksal0pKSBzdG9wIDEK KyAgICAgICAgICBlbmRpZgorICAgICAgICAgIGRvIGwgPSAxLCBqCisgICAgICAgICAgICBk byBrID0gMSwgaQorICAgICAgICAgICAgICBpZiAoYXJyYXkoaSxqKSVhcnIoayxsKSAvPSBp KjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1MypsKSBzdG9wIDE3CisgICAgICAgICAg ICAgIGlmIChsX2FycmF5KGksaiklYXJyKGssbCkgLz0gaSoyNyArIDEwMDAqMTEqaiArIDQ2 NyArIDMqayArNTMqbCkgc3RvcCAxNworICAgICAgICAgICAgICBpZiAoYV9hcnJheShpLGop JWFycihrLGwpIC89IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwpIHN0b3Ag MTgKKyAgICAgICAgICAgICAgaWYgKGxhX2FycmF5KGksaiklYXJyKGssbCkgLz0gaSoyNyAr IDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCkgc3RvcCAxOAorICAgICAgICAgICAgICBp ZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgICAgICAgIGlmIChvcHRfYXJyYXkoaSxq KSVhcnIoayxsKSAvPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1MypsKSBzdG9w IDE5CisgICAgICAgICAgICAgICAgaWYgKGFfb3B0X2FycmF5KGksaiklYXJyKGssbCkgLz0g aSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCkgc3RvcCAyMAorICAgICAgICAg ICAgICBlbmQgaWYKKyAgICAgICAgICAgIGVuZCBkbworICAgICAgICAgIGVuZCBkbworICAg ICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworICAgIGVsc2UgaWYgKGR1bW15X2FsbG9jZWQp IHRoZW4KKyAgICAgIGlmIChhbGxvY2F0ZWQgKHNjYWxhciVzbHIpKSBzdG9wIDEKKyAgICAg IGlmIChhbGxvY2F0ZWQgKGxfc2NhbGFyJXNscikpIHN0b3AgMQorICAgICAgaWYgKGFsbG9j YXRlZCAoYV9zY2FsYXIlc2xyKSkgc3RvcCAxCisgICAgICBpZiAoYWxsb2NhdGVkIChsYV9z Y2FsYXIlc2xyKSkgc3RvcCAxCisgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAg ICBpZiAoYWxsb2NhdGVkIChvcHRfc2NhbGFyJXNscikpIHN0b3AgMQorICAgICAgICBpZiAo YWxsb2NhdGVkIChhX29wdF9zY2FsYXIlc2xyKSkgc3RvcCAxCisgICAgICBlbmRpZgorICAg ICAgaWYgKGFsbG9jYXRlZCAoc2NhbGFyJWFycikpIHN0b3AgMQorICAgICAgaWYgKGFsbG9j YXRlZCAobF9zY2FsYXIlYXJyKSkgc3RvcCAxCisgICAgICBpZiAoYWxsb2NhdGVkIChhX3Nj YWxhciVhcnIpKSBzdG9wIDEKKyAgICAgIGlmIChhbGxvY2F0ZWQgKGxhX3NjYWxhciVhcnIp KSBzdG9wIDEKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgIGlmIChhbGxv Y2F0ZWQgKG9wdF9zY2FsYXIlYXJyKSkgc3RvcCAxCisgICAgICAgIGlmIChhbGxvY2F0ZWQg KGFfb3B0X3NjYWxhciVhcnIpKSBzdG9wIDEKKyAgICAgIGVuZGlmCisgICAgZW5kIGlmCisK KyAgICAhIFNFVCBWQUxVRQorICAgIHNjYWxhciV2YXIgPSA0MiArIDEzCisgICAgbF9zY2Fs YXIldmFyID0gNDIgKyAxMworICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICBvcHRf c2NhbGFyJXZhciA9IDQyICsgMTMKKyAgICBlbmRpZgorICAgIGRvIGogPSAxLCAyCisgICAg ICBkbyBpID0gMSwgMworICAgICAgICBhcnJheShpLGopJXZhciA9IGkqOTcgKyAxMDAqNDEq aiArIDEzCisgICAgICAgIGxfYXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAwKjQxKmogKyAx MworICAgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgIG9wdF9hcnJheShp LGopJXZhciA9IGkqOTcgKyAxMDAqNDEqaiArIDEzCisgICAgICAgIGVuZCBpZgorICAgICAg ZW5kIGRvCisgICAgZW5kIGRvCisKKyAgICBpZiAoZHVtbXlfYWxsb2NlZCkgdGhlbgorICAg ICAgYV9zY2FsYXIldmFyID0gNDIgKyAxMworICAgICAgbGFfc2NhbGFyJXZhciA9IDQyICsg MTMKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgIGFfb3B0X3NjYWxhciV2 YXIgPSA0MiArIDEzCisgICAgICBlbmRpZgorICAgICAgZG8gaiA9IDEsIDIKKyAgICAgICAg ZG8gaSA9IDEsIDMKKyAgICAgICAgICBhX2FycmF5KGksaikldmFyID0gaSo5NyArIDEwMCo0 MSpqICsgMTMKKyAgICAgICAgICBsYV9hcnJheShpLGopJXZhciA9IGkqOTcgKyAxMDAqNDEq aiArIDEzCisgICAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICAgIGFf b3B0X2FycmF5KGksaikldmFyID0gaSo5NyArIDEwMCo0MSpqICsgMTMKKyAgICAgICAgICBl bmRpZgorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworICAgIGVuZCBpZgorCisgICAg aWYgKGlubmVyX2FsbG9jKSB0aGVuCisgICAgICBzY2FsYXIlc2xyID0gNDY3ICsgMTMKKyAg ICAgIGxfc2NhbGFyJXNsciA9IDQ2NyArIDEzCisgICAgICBhX3NjYWxhciVzbHIgPSA0Njcg KyAxMworICAgICAgbGFfc2NhbGFyJXNsciA9IDQ2NyArIDEzCisgICAgICBpZiAoaXNfcHJl c2VudCkgdGhlbgorICAgICAgICBvcHRfc2NhbGFyJXNsciA9IDQ2NyArIDEzCisgICAgICAg IGFfb3B0X3NjYWxhciVzbHIgPSA0NjcgKyAxMworICAgICAgZW5kIGlmCisgICAgICBkbyBq ID0gMSwgMgorICAgICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGFycmF5KGksaiklc2xy ID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3ICsgMTMKKyAgICAgICAgICBsX2FycmF5KGks aiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3ICsgMTMKKyAgICAgICAgICBhX2Fy cmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3ICsgMTMKKyAgICAgICAg ICBsYV9hcnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzCisg ICAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICAgIG9wdF9hcnJheShp LGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzCisgICAgICAgICAgICBh X29wdF9hcnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzCisg ICAgICAgICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisKKyAgICAg IGRvIGwgPSAxLCA1CisgICAgICAgIGRvIGsgPSAxLCA0CisgICAgICAgICAgc2NhbGFyJWFy cihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3ICsgMTMKKyAgICAgICAgICBsX3Nj YWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NyArIDEzCisgICAgICAg ICAgYV9zY2FsYXIlYXJyKGssbCkgPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcgKyAxMwor ICAgICAgICAgIGxhX3NjYWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2 NyArIDEzCisgICAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICAgIG9w dF9zY2FsYXIlYXJyKGssbCkgPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcgKyAxMworICAg ICAgICAgICAgYV9vcHRfc2NhbGFyJWFycihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsg NDY3ICsgMTMKKyAgICAgICAgICBlbmQgaWYKKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQg ZG8KKyAgICAgIGRvIGogPSAxLCAyCisgICAgICAgIGRvIGkgPSAxLCAzCisgICAgICAgICAg ZG8gbCA9IDEsIGoKKyAgICAgICAgICAgIGRvIGsgPSAxLCBpCisgICAgICAgICAgICAgIGFy cmF5KGksaiklYXJyKGssbCkgPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1Myps ICsgMTMKKyAgICAgICAgICAgICAgbF9hcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEw MDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCArIDEzCisgICAgICAgICAgICAgIGFfYXJyYXko aSxqKSVhcnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwgKyAx MworICAgICAgICAgICAgICBsYV9hcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEwMDAq MTEqaiArIDQ2NyArIDMqayArNTMqbCArIDEzCisgICAgICAgICAgICAgIGlmIChpc19wcmVz ZW50KSB0aGVuCisgICAgICAgICAgICAgICAgb3B0X2FycmF5KGksaiklYXJyKGssbCkgPSBp KjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1MypsICsgMTMKKyAgICAgICAgICAgICAg ICBhX29wdF9hcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyAr IDMqayArNTMqbCArIDEzCisgICAgICAgICAgICAgIGVuZCBpZgorICAgICAgICAgICAgZW5k IGRvCisgICAgICAgICAgZW5kIGRvCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisg ICAgZW5kIGlmCisKKyAgZW5kIHN1YnJvdXRpbmUKKyAgc3Vicm91dGluZSBjaGVja19yZXNl dCAoaXNfcHJlc2VudCwgZHVtbXlfYWxsb2NlZCwgaW5uZXJfYWxsb2MsICYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgc2NhbGFyLCBhcnJheSwgYV9zY2FsYXIsIGFfYXJyYXksICYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgbF9zY2FsYXIsIGxfYXJyYXksIGxhX3NjYWxh ciwgbGFfYXJyYXksICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3NjYWxhciwg b3B0X2FycmF5LCBhX29wdF9zY2FsYXIsIGFfb3B0X2FycmF5KQorICAgIHR5cGUodCksIGlu dGVudChpbm91dCkgOjogJgorICAgICAgICAgICAgc2NhbGFyLCBhcnJheSg6LDopLCBvcHRf c2NhbGFyLCBvcHRfYXJyYXkoOiw6KSwgYV9zY2FsYXIsIGFfYXJyYXkoOiw6KSwgJgorICAg ICAgICAgICAgYV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheSg6LDopLCAmCisgICAgICAgICAg ICBsX3NjYWxhciwgbF9hcnJheSg6LDopLCBsYV9zY2FsYXIsIGxhX2FycmF5KDosOikKKyAg ICBvcHRpb25hbCA6OiBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfb3B0X3NjYWxhciwgYV9v cHRfYXJyYXkKKyAgICBhbGxvY2F0YWJsZSA6OiBhX3NjYWxhciwgYV9hcnJheSwgYV9vcHRf c2NhbGFyLCBhX29wdF9hcnJheSwgbGFfc2NhbGFyLCBsYV9hcnJheQorICAgIGxvZ2ljYWws IHZhbHVlIDo6IGlzX3ByZXNlbnQsIGR1bW15X2FsbG9jZWQsIGlubmVyX2FsbG9jCisgICAg aW50ZWdlciA6OiBpLCBqLCBrLCBsCisKKyAgICAhIENIRUNLIFZBTFVFCisgICAgaWYgKHNj YWxhciV2YXIgLz0gNDIgKyAxMykgc3RvcCAxCisgICAgaWYgKGxfc2NhbGFyJXZhciAvPSA0 MiArIDEzKSBzdG9wIDEKKyAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgaWYgKG9w dF9zY2FsYXIldmFyIC89IDQyICsgMTMpIHN0b3AgMgorICAgIGVuZCBpZgorICAgIGlmIChh bnkgKHNoYXBlKGFycmF5KSAvPSBbMywyXSkpIHN0b3AgMQorICAgIGlmIChhbnkgKHNoYXBl KGxfYXJyYXkpIC89IFszLDJdKSkgc3RvcCAxCisgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4K KyAgICAgIGlmIChhbnkgKHNoYXBlKG9wdF9hcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAg ICBlbmQgaWYKKyAgICBkbyBqID0gMSwgMgorICAgICAgZG8gaSA9IDEsIDMKKyAgICAgICAg aWYgKGFycmF5KGksaikldmFyIC89IGkqOTcgKyAxMDAqNDEqaiArIDEzKSBzdG9wIDMKKyAg ICAgICAgaWYgKGxfYXJyYXkoaSxqKSV2YXIgLz0gaSo5NyArIDEwMCo0MSpqICsgMTMpIHN0 b3AgMworICAgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgIGlmIChvcHRf YXJyYXkoaSxqKSV2YXIgLz0gaSo5NyArIDEwMCo0MSpqICsgMTMpIHN0b3AgNAorICAgICAg ICBlbmQgaWYKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworCisgICAgaWYgKGR1bW15X2Fs bG9jZWQpIHRoZW4KKyAgICAgIGlmIChhX3NjYWxhciV2YXIgLz0gNDIgKyAxMykgc3RvcCAx CisgICAgICBpZiAobGFfc2NhbGFyJXZhciAvPSA0MiArIDEzKSBzdG9wIDEKKyAgICAgIGlm IChpc19wcmVzZW50KSB0aGVuCisgICAgICAgIGlmIChhX29wdF9zY2FsYXIldmFyIC89IDQy ICsgMTMpIHN0b3AgMQorICAgICAgZW5kIGlmCisgICAgICBpZiAoYW55IChzaGFwZShhX2Fy cmF5KSAvPSBbMywyXSkpIHN0b3AgMQorICAgICAgaWYgKGFueSAoc2hhcGUobGFfYXJyYXkp IC89IFszLDJdKSkgc3RvcCAxCisgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAg ICBpZiAoYW55IChzaGFwZShhX29wdF9hcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAgICAg IGVuZCBpZgorICAgICAgZG8gaiA9IDEsIDIKKyAgICAgICAgZG8gaSA9IDEsIDMKKyAgICAg ICAgICBpZiAoYV9hcnJheShpLGopJXZhciAvPSBpKjk3ICsgMTAwKjQxKmogKyAxMykgc3Rv cCAxCisgICAgICAgICAgaWYgKGxhX2FycmF5KGksaikldmFyIC89IGkqOTcgKyAxMDAqNDEq aiArIDEzKSBzdG9wIDEKKyAgICAgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAg ICAgICAgaWYgKGFfb3B0X2FycmF5KGksaikldmFyIC89IGkqOTcgKyAxMDAqNDEqaiArIDEz KSBzdG9wIDEKKyAgICAgICAgICBlbmQgaWYKKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQg ZG8KKyAgICBlbHNlCisgICAgICBpZiAoYWxsb2NhdGVkIChhX3NjYWxhcikpIHN0b3AgMQor ICAgICAgaWYgKGFsbG9jYXRlZCAobGFfc2NhbGFyKSkgc3RvcCAxCisgICAgICBpZiAoYWxs b2NhdGVkIChhX2FycmF5KSkgc3RvcCAxCisgICAgICBpZiAoYWxsb2NhdGVkIChsYV9hcnJh eSkpIHN0b3AgMQorICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgaWYgKGFs bG9jYXRlZCAoYV9vcHRfc2NhbGFyKSkgc3RvcCAxCisgICAgICAgIGlmIChhbGxvY2F0ZWQg KGFfb3B0X2FycmF5KSkgc3RvcCAxCisgICAgICBlbmQgaWYKKyAgICBlbmQgaWYKKworICAg IGlmIChpbm5lcl9hbGxvYykgdGhlbgorICAgICAgaWYgKHNjYWxhciVzbHIgLz0gNDY3ICsg MTMpIHN0b3AgNQorICAgICAgaWYgKGxfc2NhbGFyJXNsciAvPSA0NjcgKyAxMykgc3RvcCA1 CisgICAgICBpZiAoYV9zY2FsYXIlc2xyIC89IDQ2NyArIDEzKSBzdG9wIDYKKyAgICAgIGlm IChsYV9zY2FsYXIlc2xyIC89IDQ2NyArIDEzKSBzdG9wIDYKKyAgICAgIGlmIChpc19wcmVz ZW50KSB0aGVuCisgICAgICAgIGlmIChvcHRfc2NhbGFyJXNsciAvPSA0NjcgKyAxMykgc3Rv cCA3CisgICAgICAgIGlmIChhX29wdF9zY2FsYXIlc2xyIC89IDQ2NyArIDEzKSBzdG9wIDgK KyAgICAgIGVuZCBpZgorICAgICAgZG8gaiA9IDEsIDIKKyAgICAgICAgZG8gaSA9IDEsIDMK KyAgICAgICAgICBpZiAoYXJyYXkoaSxqKSVzbHIgLz0gKGkqOTcgKyAxMDAqNDEqaikgICsg NDY3ICsgMTMpIHN0b3AgOQorICAgICAgICAgIGlmIChsX2FycmF5KGksaiklc2xyIC89IChp Kjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzKSBzdG9wIDkKKyAgICAgICAgICBpZiAoYV9h cnJheShpLGopJXNsciAvPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcgKyAxMykgc3RvcCAx MAorICAgICAgICAgIGlmIChsYV9hcnJheShpLGopJXNsciAvPSAoaSo5NyArIDEwMCo0MSpq KSAgKyA0NjcgKyAxMykgc3RvcCAxMAorICAgICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVu CisgICAgICAgICAgICBpZiAob3B0X2FycmF5KGksaiklc2xyIC89IChpKjk3ICsgMTAwKjQx KmopICArIDQ2NyArIDEzKSBzdG9wIDExCisgICAgICAgICAgICBpZiAoYV9vcHRfYXJyYXko aSxqKSVzbHIgLz0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3ICsgMTMpIHN0b3AgMTIKKyAg ICAgICAgICBlbmQgaWYKKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQgZG8KKworICAgICAg ZG8gbCA9IDEsIDUKKyAgICAgICAgZG8gayA9IDEsIDQKKyAgICAgICAgICBpZiAoYW55IChz aGFwZShzY2FsYXIlYXJyKSAvPSBbNCw1XSkpIHN0b3AgMQorICAgICAgICAgIGlmIChhbnkg KHNoYXBlKGxfc2NhbGFyJWFycikgLz0gWzQsNV0pKSBzdG9wIDEKKyAgICAgICAgICBpZiAo YW55IChzaGFwZShhX3NjYWxhciVhcnIpIC89IFs0LDVdKSkgc3RvcCAxCisgICAgICAgICAg aWYgKGFueSAoc2hhcGUobGFfc2NhbGFyJWFycikgLz0gWzQsNV0pKSBzdG9wIDEKKyAgICAg ICAgICBpZiAoc2NhbGFyJWFycihrLGwpIC89IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NyAr IDEzKSBzdG9wIDEzCisgICAgICAgICAgaWYgKGxfc2NhbGFyJWFycihrLGwpIC89IChpKjI3 ICsgMTAwMCoxMSpqKSArIDQ2NyArIDEzKSBzdG9wIDEzCisgICAgICAgICAgaWYgKGFfc2Nh bGFyJWFycihrLGwpIC89IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NyArIDEzKSBzdG9wIDE0 CisgICAgICAgICAgaWYgKGxhX3NjYWxhciVhcnIoayxsKSAvPSAoaSoyNyArIDEwMDAqMTEq aikgKyA0NjcgKyAxMykgc3RvcCAxNAorICAgICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVu CisgICAgICAgICAgICBpZiAoYW55IChzaGFwZShvcHRfc2NhbGFyJWFycikgLz0gWzQsNV0p KSBzdG9wIDEKKyAgICAgICAgICAgIGlmIChhbnkgKHNoYXBlKGFfb3B0X3NjYWxhciVhcnIp IC89IFs0LDVdKSkgc3RvcCAxCisgICAgICAgICAgICBpZiAob3B0X3NjYWxhciVhcnIoayxs KSAvPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcgKyAxMykgc3RvcCAxNQorICAgICAgICAg ICAgaWYgKGFfb3B0X3NjYWxhciVhcnIoayxsKSAvPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0 NjcgKyAxMykgc3RvcCAxNgorICAgICAgICAgIGVuZCBpZgorICAgICAgICBlbmQgZG8KKyAg ICAgIGVuZCBkbworICAgICAgZG8gaiA9IDEsIDIKKyAgICAgICAgZG8gaSA9IDEsIDMKKyAg ICAgICAgICBpZiAoYW55IChzaGFwZShhcnJheShpLGopJWFycikgLz0gW2ksal0pKSBzdG9w IDEKKyAgICAgICAgICBpZiAoYW55IChzaGFwZShsX2FycmF5KGksaiklYXJyKSAvPSBbaSxq XSkpIHN0b3AgMQorICAgICAgICAgIGlmIChhbnkgKHNoYXBlKGFfYXJyYXkoaSxqKSVhcnIp IC89IFtpLGpdKSkgc3RvcCAxCisgICAgICAgICAgaWYgKGFueSAoc2hhcGUobGFfYXJyYXko aSxqKSVhcnIpIC89IFtpLGpdKSkgc3RvcCAxCisgICAgICAgICAgaWYgKGlzX3ByZXNlbnQp IHRoZW4KKyAgICAgICAgICAgIGlmIChhbnkgKHNoYXBlKG9wdF9hcnJheShpLGopJWFycikg Lz0gW2ksal0pKSBzdG9wIDEKKyAgICAgICAgICAgIGlmIChhbnkgKHNoYXBlKGFfb3B0X2Fy cmF5KGksaiklYXJyKSAvPSBbaSxqXSkpIHN0b3AgMQorICAgICAgICAgIGVuZGlmCisgICAg ICAgICAgZG8gbCA9IDEsIGoKKyAgICAgICAgICAgIGRvIGsgPSAxLCBpCisgICAgICAgICAg ICAgIGlmIChhcnJheShpLGopJWFycihrLGwpIC89IGkqMjcgKyAxMDAwKjExKmogKyA0Njcg KyAzKmsgKzUzKmwgKyAxMykgc3RvcCAxNworICAgICAgICAgICAgICBpZiAobF9hcnJheShp LGopJWFycihrLGwpIC89IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwgKyAx Mykgc3RvcCAxNworICAgICAgICAgICAgICBpZiAoYV9hcnJheShpLGopJWFycihrLGwpIC89 IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwgKyAxMykgc3RvcCAxOAorICAg ICAgICAgICAgICBpZiAobGFfYXJyYXkoaSxqKSVhcnIoayxsKSAvPSBpKjI3ICsgMTAwMCox MSpqICsgNDY3ICsgMyprICs1MypsICsgMTMpIHN0b3AgMTgKKyAgICAgICAgICAgICAgaWYg KGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICAgICAgICBpZiAob3B0X2FycmF5KGksaikl YXJyKGssbCkgLz0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCArIDEzKSBz dG9wIDE5CisgICAgICAgICAgICAgICAgaWYgKGFfb3B0X2FycmF5KGksaiklYXJyKGssbCkg Lz0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCArIDEzKSBzdG9wIDIwCisg ICAgICAgICAgICAgIGVuZCBpZgorICAgICAgICAgICAgZW5kIGRvCisgICAgICAgICAgZW5k IGRvCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisgICAgZWxzZSBpZiAoZHVtbXlf YWxsb2NlZCkgdGhlbgorICAgICAgaWYgKGFsbG9jYXRlZCAoc2NhbGFyJXNscikpIHN0b3Ag MQorICAgICAgaWYgKGFsbG9jYXRlZCAobF9zY2FsYXIlc2xyKSkgc3RvcCAxCisgICAgICBp ZiAoYWxsb2NhdGVkIChhX3NjYWxhciVzbHIpKSBzdG9wIDEKKyAgICAgIGlmIChhbGxvY2F0 ZWQgKGxhX3NjYWxhciVzbHIpKSBzdG9wIDEKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVu CisgICAgICAgIGlmIChhbGxvY2F0ZWQgKG9wdF9zY2FsYXIlc2xyKSkgc3RvcCAxCisgICAg ICAgIGlmIChhbGxvY2F0ZWQgKGFfb3B0X3NjYWxhciVzbHIpKSBzdG9wIDEKKyAgICAgIGVu ZGlmCisgICAgICBpZiAoYWxsb2NhdGVkIChzY2FsYXIlYXJyKSkgc3RvcCAxCisgICAgICBp ZiAoYWxsb2NhdGVkIChsX3NjYWxhciVhcnIpKSBzdG9wIDEKKyAgICAgIGlmIChhbGxvY2F0 ZWQgKGFfc2NhbGFyJWFycikpIHN0b3AgMQorICAgICAgaWYgKGFsbG9jYXRlZCAobGFfc2Nh bGFyJWFycikpIHN0b3AgMQorICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAg aWYgKGFsbG9jYXRlZCAob3B0X3NjYWxhciVhcnIpKSBzdG9wIDEKKyAgICAgICAgaWYgKGFs bG9jYXRlZCAoYV9vcHRfc2NhbGFyJWFycikpIHN0b3AgMQorICAgICAgZW5kaWYKKyAgICBl bmQgaWYKKworICAgICEgKFJFKVNFVCBWQUxVRQorICAgIHNjYWxhciV2YXIgPSA0MgorICAg IGxfc2NhbGFyJXZhciA9IDQyCisgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgIG9w dF9zY2FsYXIldmFyID0gNDIKKyAgICBlbmRpZgorICAgIGRvIGogPSAxLCAyCisgICAgICBk byBpID0gMSwgMworICAgICAgICBhcnJheShpLGopJXZhciA9IGkqOTcgKyAxMDAqNDEqagor ICAgICAgICBsX2FycmF5KGksaikldmFyID0gaSo5NyArIDEwMCo0MSpqCisgICAgICAgIGlm IChpc19wcmVzZW50KSB0aGVuCisgICAgICAgICAgb3B0X2FycmF5KGksaikldmFyID0gaSo5 NyArIDEwMCo0MSpqCisgICAgICAgIGVuZCBpZgorICAgICAgZW5kIGRvCisgICAgZW5kIGRv CisKKyAgICBpZiAoZHVtbXlfYWxsb2NlZCkgdGhlbgorICAgICAgYV9zY2FsYXIldmFyID0g NDIKKyAgICAgIGxhX3NjYWxhciV2YXIgPSA0MgorICAgICAgaWYgKGlzX3ByZXNlbnQpIHRo ZW4KKyAgICAgICAgYV9vcHRfc2NhbGFyJXZhciA9IDQyCisgICAgICBlbmRpZgorICAgICAg ZG8gaiA9IDEsIDIKKyAgICAgICAgZG8gaSA9IDEsIDMKKyAgICAgICAgICBhX2FycmF5KGks aikldmFyID0gaSo5NyArIDEwMCo0MSpqCisgICAgICAgICAgbGFfYXJyYXkoaSxqKSV2YXIg PSBpKjk3ICsgMTAwKjQxKmoKKyAgICAgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAg ICAgICAgICAgYV9vcHRfYXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAwKjQxKmoKKyAgICAg ICAgICBlbmRpZgorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworICAgIGVuZCBpZgor CisgICAgaWYgKGlubmVyX2FsbG9jKSB0aGVuCisgICAgICBzY2FsYXIlc2xyID0gNDY3Cisg ICAgICBsX3NjYWxhciVzbHIgPSA0NjcKKyAgICAgIGFfc2NhbGFyJXNsciA9IDQ2NworICAg ICAgbGFfc2NhbGFyJXNsciA9IDQ2NworICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAg ICAgICAgb3B0X3NjYWxhciVzbHIgPSA0NjcKKyAgICAgICAgYV9vcHRfc2NhbGFyJXNsciA9 IDQ2NworICAgICAgZW5kIGlmCisgICAgICBkbyBqID0gMSwgMgorICAgICAgICBkbyBpID0g MSwgMworICAgICAgICAgIGFycmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsg NDY3CisgICAgICAgICAgbF9hcnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICAr IDQ2NworICAgICAgICAgIGFfYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAg KyA0NjcKKyAgICAgICAgICBsYV9hcnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmop ICArIDQ2NworICAgICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgICAgICBv cHRfYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcKKyAgICAgICAg ICAgIGFfb3B0X2FycmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3Cisg ICAgICAgICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisKKyAgICAg IGRvIGwgPSAxLCA1CisgICAgICAgIGRvIGsgPSAxLCA0CisgICAgICAgICAgc2NhbGFyJWFy cihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgICAgICAgbF9zY2FsYXIl YXJyKGssbCkgPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcKKyAgICAgICAgICBhX3NjYWxh ciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NworICAgICAgICAgIGxhX3Nj YWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NworICAgICAgICAgIGlm IChpc19wcmVzZW50KSB0aGVuCisgICAgICAgICAgICBvcHRfc2NhbGFyJWFycihrLGwpID0g KGkqMjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgICAgICAgICBhX29wdF9zY2FsYXIlYXJy KGssbCkgPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcKKyAgICAgICAgICBlbmQgaWYKKyAg ICAgICAgZW5kIGRvCisgICAgICBlbmQgZG8KKyAgICAgIGRvIGogPSAxLCAyCisgICAgICAg IGRvIGkgPSAxLCAzCisgICAgICAgICAgZG8gbCA9IDEsIGoKKyAgICAgICAgICAgIGRvIGsg PSAxLCBpCisgICAgICAgICAgICAgIGFycmF5KGksaiklYXJyKGssbCkgPSBpKjI3ICsgMTAw MCoxMSpqICsgNDY3ICsgMyprICs1MypsCisgICAgICAgICAgICAgIGxfYXJyYXkoaSxqKSVh cnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwKKyAgICAgICAg ICAgICAgYV9hcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyAr IDMqayArNTMqbAorICAgICAgICAgICAgICBsYV9hcnJheShpLGopJWFycihrLGwpID0gaSoy NyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbAorICAgICAgICAgICAgICBpZiAoaXNf cHJlc2VudCkgdGhlbgorICAgICAgICAgICAgICAgIG9wdF9hcnJheShpLGopJWFycihrLGwp ID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbAorICAgICAgICAgICAgICAg IGFfb3B0X2FycmF5KGksaiklYXJyKGssbCkgPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsg MyprICs1MypsCisgICAgICAgICAgICAgIGVuZCBpZgorICAgICAgICAgICAgZW5kIGRvCisg ICAgICAgICAgZW5kIGRvCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisgICAgZW5k IGlmCisgIGVuZCBzdWJyb3V0aW5lCisKKyAgc3Vicm91dGluZSB0ZXN0KHNjYWxhciwgYXJy YXksIGFfc2NhbGFyLCBhX2FycmF5LCBvcHRfc2NhbGFyLCBvcHRfYXJyYXksICYKKyAgICAg ICAgICAgICAgICAgIGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXkpCisgICAgdHlwZSh0KSA6 OiBzY2FsYXIsIGFycmF5KDosOiksIG9wdF9zY2FsYXIsIG9wdF9hcnJheSg6LDopLCBhX3Nj YWxhciwgYV9hcnJheSg6LDopCisgICAgdHlwZSh0KSA6OiBhX29wdF9zY2FsYXIsIGFfb3B0 X2FycmF5KDosOikKKyAgICB0eXBlKHQpIDo6IGxfc2NhbGFyLCBsX2FycmF5KDMsMiksIGxh X3NjYWxhciwgbGFfYXJyYXkoOiw6KQorICAgIGFsbG9jYXRhYmxlIDo6IGFfc2NhbGFyLCBh X2FycmF5LCBhX29wdF9zY2FsYXIsIGFfb3B0X2FycmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5 CisgICAgb3B0aW9uYWwgOjogb3B0X3NjYWxhciwgb3B0X2FycmF5LCBhX29wdF9zY2FsYXIs IGFfb3B0X2FycmF5CisKKyAgICBpbnRlZ2VyIDo6IGksIGosIGssIGwKKyAgICBsb2dpY2Fs IDo6IGlzX3ByZXNlbnQsIGR1bW15X2FsbG9jZWQsIGxvY2FsX2FsbG9jZWQsIGlubmVyX2Fs bG9jCisgICAgaXNfcHJlc2VudCA9IHByZXNlbnQob3B0X3NjYWxhcikKKyAgICBkdW1teV9h bGxvY2VkID0gYWxsb2NhdGVkKGFfc2NhbGFyKQorICAgIGlubmVyX2FsbG9jID0gYWxsb2Nh dGVkKHNjYWxhciVzbHIpCisKKyAgICBsX3NjYWxhciV2YXIgPSA0MgorICAgIGRvIGogPSAx LCAyCisgICAgICBkbyBpID0gMSwgMworICAgICAgICBsX2FycmF5KGksaikldmFyID0gaSo5 NyArIDEwMCo0MSpqCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKworICAgIGlmIChkdW1t eV9hbGxvY2VkKSB0aGVuCisgICAgICBhbGxvY2F0ZShsYV9zY2FsYXIsIGxhX2FycmF5KDMs MikpCisgICAgICBhX3NjYWxhciV2YXIgPSA0MgorICAgICAgbGFfc2NhbGFyJXZhciA9IDQy CisgICAgICBkbyBqID0gMSwgMgorICAgICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGxf YXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAwKjQxKmoKKyAgICAgICAgICBsYV9hcnJheShp LGopJXZhciA9IGkqOTcgKyAxMDAqNDEqagorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBk bworICAgIGVuZCBpZgorCisgICAgaWYgKGlubmVyX2FsbG9jKSB0aGVuCisgICAgICBsX3Nj YWxhciVzbHIgPSA0NjcKKyAgICAgIGxhX3NjYWxhciVzbHIgPSA0NjcKKyAgICAgIGRvIGog PSAxLCAyCisgICAgICAgIGRvIGkgPSAxLCAzCisgICAgICAgICAgbF9hcnJheShpLGopJXNs ciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NworICAgICAgICAgIGxhX2FycmF5KGksaikl c2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3CisgICAgICAgIGVuZCBkbworICAgICAg ZW5kIGRvCisKKyAgICAgIGFsbG9jYXRlKGxfc2NhbGFyJWFycig0LDUpLCBsYV9zY2FsYXIl YXJyKDQsNSkpCisgICAgICBkbyBsID0gMSwgNQorICAgICAgICBkbyBrID0gMSwgNAorICAg ICAgICAgIGxfc2NhbGFyJWFycihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3Cisg ICAgICAgICAgbGFfc2NhbGFyJWFycihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3 CisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisgICAgICBkbyBqID0gMSwgMgorICAg ICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGFsbG9jYXRlKGxfYXJyYXkoaSxqKSVhcnIo aSxqKSwgbGFfYXJyYXkoaSxqKSVhcnIoaSxqKSkKKyAgICAgICAgICBkbyBsID0gMSwgagor ICAgICAgICAgICAgZG8gayA9IDEsIGkKKyAgICAgICAgICAgICAgbF9hcnJheShpLGopJWFy cihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbAorICAgICAgICAg ICAgICBsYV9hcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyAr IDMqayArNTMqbAorICAgICAgICAgICAgZW5kIGRvCisgICAgICAgICAgZW5kIGRvCisgICAg ICAgIGVuZCBkbworICAgICAgZW5kIGRvCisgICAgZW5kIGlmCisgCisgICAgISBpbXBsaWNp dCBtYXBwaW5nCisgICAgISRvbXAgdGFyZ2V0CisgICAgICBpZiAoaXNfcHJlc2VudCkgdGhl bgorICAgICAgICBjYWxsIGNoZWNrX2l0IChpc19wcmVzZW50LCBkdW1teV9hbGxvY2VkLCBp bm5lcl9hbGxvYywgJgorICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXIsIGFycmF5LCBh X3NjYWxhciwgYV9hcnJheSwgJgorICAgICAgICAgICAgICAgICAgICAgICBsX3NjYWxhciwg bF9hcnJheSwgbGFfc2NhbGFyLCBsYV9hcnJheSwgJgorICAgICAgICAgICAgICAgICAgICAg ICBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXkpCisg ICAgICBlbHNlCisgICAgICAgIGNhbGwgY2hlY2tfaXQgKGlzX3ByZXNlbnQsIGR1bW15X2Fs bG9jZWQsIGlubmVyX2FsbG9jLCAmCisgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhciwg YXJyYXksIGFfc2NhbGFyLCBhX2FycmF5LCAmCisgICAgICAgICAgICAgICAgICAgICAgIGxf c2NhbGFyLCBsX2FycmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5KQorICAgICAgZW5kIGlmCisg ICAgISRvbXAgZW5kIHRhcmdldAorCisgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAg IGNhbGwgY2hlY2tfcmVzZXQgKGlzX3ByZXNlbnQsIGR1bW15X2FsbG9jZWQsIGlubmVyX2Fs bG9jLCAmCisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXIsIGFycmF5LCBhX3NjYWxh ciwgYV9hcnJheSwgJgorICAgICAgICAgICAgICAgICAgICAgICAgbF9zY2FsYXIsIGxfYXJy YXksIGxhX3NjYWxhciwgbGFfYXJyYXksICYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9w dF9zY2FsYXIsIG9wdF9hcnJheSwgYV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheSkKKyAgICBl bHNlCisgICAgICBjYWxsIGNoZWNrX3Jlc2V0IChpc19wcmVzZW50LCBkdW1teV9hbGxvY2Vk LCBpbm5lcl9hbGxvYywgJgorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyLCBhcnJh eSwgYV9zY2FsYXIsIGFfYXJyYXksICYKKyAgICAgICAgICAgICAgICAgICAgICAgIGxfc2Nh bGFyLCBsX2FycmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5KQorICAgIGVuZGlmCisKKyAgICAh IGV4cGxpY2l0IG1hcHBpbmcKKyAgICAhJG9tcCB0YXJnZXQgbWFwKHNjYWxhciwgYXJyYXks IG9wdF9zY2FsYXIsIG9wdF9hcnJheSwgYV9zY2FsYXIsIGFfYXJyYXkpICYKKyAgICAhJG9t cCYgICAgICAgbWFwKGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXkpICYKKyAgICAhJG9tcCYg ICAgICAgbWFwKGxfc2NhbGFyLCBsX2FycmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5KQorICAg ICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgY2FsbCBjaGVja19pdCAoaXNfcHJl c2VudCwgZHVtbXlfYWxsb2NlZCwgaW5uZXJfYWxsb2MsICYKKyAgICAgICAgICAgICAgICAg ICAgICAgc2NhbGFyLCBhcnJheSwgYV9zY2FsYXIsIGFfYXJyYXksICYKKyAgICAgICAgICAg ICAgICAgICAgICAgbF9zY2FsYXIsIGxfYXJyYXksIGxhX3NjYWxhciwgbGFfYXJyYXksICYK KyAgICAgICAgICAgICAgICAgICAgICAgb3B0X3NjYWxhciwgb3B0X2FycmF5LCBhX29wdF9z Y2FsYXIsIGFfb3B0X2FycmF5KQorICAgICAgZWxzZQorICAgICAgICBjYWxsIGNoZWNrX2l0 IChpc19wcmVzZW50LCBkdW1teV9hbGxvY2VkLCBpbm5lcl9hbGxvYywgJgorICAgICAgICAg ICAgICAgICAgICAgICBzY2FsYXIsIGFycmF5LCBhX3NjYWxhciwgYV9hcnJheSwgJgorICAg ICAgICAgICAgICAgICAgICAgICBsX3NjYWxhciwgbF9hcnJheSwgbGFfc2NhbGFyLCBsYV9h cnJheSkKKyAgICAgIGVuZGlmCisgICAgISRvbXAgZW5kIHRhcmdldAorCisgICAgaWYgKGlz X3ByZXNlbnQpIHRoZW4KKyAgICAgIGNhbGwgY2hlY2tfcmVzZXQgKGlzX3ByZXNlbnQsIGR1 bW15X2FsbG9jZWQsIGlubmVyX2FsbG9jLCAmCisgICAgICAgICAgICAgICAgICAgICAgICBz Y2FsYXIsIGFycmF5LCBhX3NjYWxhciwgYV9hcnJheSwgJgorICAgICAgICAgICAgICAgICAg ICAgICAgbF9zY2FsYXIsIGxfYXJyYXksIGxhX3NjYWxhciwgbGFfYXJyYXksICYKKyAgICAg ICAgICAgICAgICAgICAgICAgIG9wdF9zY2FsYXIsIG9wdF9hcnJheSwgYV9vcHRfc2NhbGFy LCBhX29wdF9hcnJheSkKKyAgICBlbHNlCisgICAgICBjYWxsIGNoZWNrX3Jlc2V0IChpc19w cmVzZW50LCBkdW1teV9hbGxvY2VkLCBpbm5lcl9hbGxvYywgJgorICAgICAgICAgICAgICAg ICAgICAgICAgc2NhbGFyLCBhcnJheSwgYV9zY2FsYXIsIGFfYXJyYXksICYKKyAgICAgICAg ICAgICAgICAgICAgICAgIGxfc2NhbGFyLCBsX2FycmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5 KQorICAgIGVuZGlmCisgIGVuZCBzdWJyb3V0aW5lCitlbmQgbW9kdWxlCisKK3Byb2dyYW0g bWFpbgorICB1c2UgbQorICBpbXBsaWNpdCBub25lICh0eXBlLCBleHRlcm5hbCkKKyAgdHlw ZSh0KSA6OiBzY2FsYXIsIGFycmF5KDMsMiksIG9wdF9zY2FsYXIsIG9wdF9hcnJheSgzLDIp LCBhX3NjYWxhciwgYV9hcnJheSg6LDopCisgIHR5cGUodCkgOjogYV9vcHRfc2NhbGFyLCBh X29wdF9hcnJheSg6LDopCisgIGFsbG9jYXRhYmxlIDo6IGFfc2NhbGFyLCBhX2FycmF5LCBh X29wdF9zY2FsYXIsIGFfb3B0X2FycmF5CisgIGludGVnZXIgOjogaSwgaiwgaywgbCwgbgor CisgIHNjYWxhciV2YXIgPSA0MgorICBvcHRfc2NhbGFyJXZhciA9IDQyCisgIGRvIGogPSAx LCAyCisgICAgZG8gaSA9IDEsIDMKKyAgICAgIGFycmF5KGksaikldmFyID0gaSo5NyArIDEw MCo0MSpqCisgICAgICBvcHRfYXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAwKjQxKmoKKyAg ICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgISB1bmFsbG9jYXRlZAorICBjYWxsIHRlc3QgKHNj YWxhciwgYXJyYXksIGFfc2NhbGFyLCBhX2FycmF5KQorICBjYWxsIHRlc3QgKHNjYWxhciwg YXJyYXksIGFfc2NhbGFyLCBhX2FycmF5LCBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfb3B0 X3NjYWxhciwgYV9vcHRfYXJyYXkpCisKKyAgISBhbGxvY2F0ZWQKKyAgYWxsb2NhdGUoYV9z Y2FsYXIsIGFfb3B0X3NjYWxhciwgYV9hcnJheSgzLDIpLCBhX29wdF9hcnJheSgzLDIpKQor ICBhX3NjYWxhciV2YXIgPSA0MgorICBhX29wdF9zY2FsYXIldmFyID0gNDIKKyAgZG8gaiA9 IDEsIDIKKyAgICBkbyBpID0gMSwgMworICAgICAgYV9hcnJheShpLGopJXZhciA9IGkqOTcg KyAxMDAqNDEqagorICAgICAgYV9vcHRfYXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAwKjQx KmoKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgY2FsbCB0ZXN0IChzY2FsYXIsIGFycmF5 LCBhX3NjYWxhciwgYV9hcnJheSkKKyAgY2FsbCB0ZXN0IChzY2FsYXIsIGFycmF5LCBhX3Nj YWxhciwgYV9hcnJheSwgb3B0X3NjYWxhciwgb3B0X2FycmF5LCBhX29wdF9zY2FsYXIsIGFf b3B0X2FycmF5KQorCisgICEgY29tcHMgYWxsb2NhdGVkCisgIHNjYWxhciVzbHIgPSA0NjcK KyAgYV9zY2FsYXIlc2xyID0gNDY3CisgIG9wdF9zY2FsYXIlc2xyID0gNDY3CisgIGFfb3B0 X3NjYWxhciVzbHIgPSA0NjcKKyAgZG8gaiA9IDEsIDIKKyAgICBkbyBpID0gMSwgMworICAg ICAgYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcKKyAgICAgIGFf YXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcKKyAgICAgIG9wdF9h cnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NworICAgICAgYV9vcHRf YXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcKKyAgICBlbmQgZG8K KyAgZW5kIGRvCisKKyAgYWxsb2NhdGUoc2NhbGFyJWFycig0LDUpLCBhX3NjYWxhciVhcnIo NCw1KSwgb3B0X3NjYWxhciVhcnIoNCw1KSwgYV9vcHRfc2NhbGFyJWFycig0LDUpKQorICBk byBsID0gMSwgNQorICAgIGRvIGsgPSAxLCA0CisgICAgICBzY2FsYXIlYXJyKGssbCkgPSAo aSoyNyArIDEwMDAqMTEqaikgKyA0NjcKKyAgICAgIGFfc2NhbGFyJWFycihrLGwpID0gKGkq MjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgICBvcHRfc2NhbGFyJWFycihrLGwpID0gKGkq MjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgICBhX29wdF9zY2FsYXIlYXJyKGssbCkgPSAo aSoyNyArIDEwMDAqMTEqaikgKyA0NjcKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGRvIGog PSAxLCAyCisgICAgZG8gaSA9IDEsIDMKKyAgICAgIGFsbG9jYXRlKGFycmF5KGksaiklYXJy KGksaiksIGFfYXJyYXkoaSxqKSVhcnIoaSxqKSwgb3B0X2FycmF5KGksaiklYXJyKGksaiks IGFfb3B0X2FycmF5KGksaiklYXJyKGksaikpCisgICAgICBkbyBsID0gMSwgagorICAgICAg ICBkbyBrID0gMSwgaQorICAgICAgICAgIGFycmF5KGksaiklYXJyKGssbCkgPSBpKjI3ICsg MTAwMCoxMSpqICsgNDY3ICsgMyprICs1MypsCisgICAgICAgICAgYV9hcnJheShpLGopJWFy cihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbAorICAgICAgICAg IG9wdF9hcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMq ayArNTMqbAorICAgICAgICAgIGFfb3B0X2FycmF5KGksaiklYXJyKGssbCkgPSBpKjI3ICsg MTAwMCoxMSpqICsgNDY3ICsgMyprICs1MypsCisgICAgICAgIGVuZCBkbworICAgICAgZW5k IGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworCisgIGNhbGwgdGVzdCAoc2NhbGFyLCBhcnJh eSwgYV9zY2FsYXIsIGFfYXJyYXkpCisgIGNhbGwgdGVzdCAoc2NhbGFyLCBhcnJheSwgYV9z Y2FsYXIsIGFfYXJyYXksIG9wdF9zY2FsYXIsIG9wdF9hcnJheSwgYV9vcHRfc2NhbGFyLCBh X29wdF9hcnJheSkKKworICBkZWFsbG9jYXRlKGFfc2NhbGFyLCBhX29wdF9zY2FsYXIsIGFf YXJyYXksIGFfb3B0X2FycmF5KQorZW5kCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0 ZS9saWJnb21wLm9hY2MtZm9ydHJhbi9ob3N0X2RhdGEtNS5GOTAgYi9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLm9hY2MtZm9ydHJhbi9ob3N0X2RhdGEtNS5GOTAKaW5kZXggOTNlOWVl MDk4MTguLjc2MzQxYzQxOWZjIDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLm9hY2MtZm9ydHJhbi9ob3N0X2RhdGEtNS5GOTAKKysrIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5vYWNjLWZvcnRyYW4vaG9zdF9kYXRhLTUuRjkwCkBAIC01Nyw2ICs1Nyw3 IEBAIHN1YnJvdXRpbmUgZm9vIChwMiwgcGFyciwgaG9zdF9wLCBob3N0X3BhcnIsIGNvbmQp CiAgICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdEXC5bMC05XSsnIGRlY2xhcmVkIGluIGJs b2NrIGlzIGNhbmRpZGF0ZSBmb3IgYWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBs ZXZlbH0gIlRPRE8iIHsgdGFyZ2V0ICotKi0qIH0gLi02IH0KICAgICAhIHsgZGctbm90ZSB7 dmFyaWFibGUgJ3RyYW5zZmVyXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzIGNhbmRp ZGF0ZSBmb3IgYWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbH0gIlRPRE8i IHsgdGFyZ2V0ICotKi0qIH0gLi03IH0KICAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ3Bh cm1cLlswLTldKycgZGVjbGFyZWQgaW4gYmxvY2sgaXNuJ3QgY2FuZGlkYXRlIGZvciBhZGp1 c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsOiBub3QgYWRkcmVzc2FibGV9ICIi IHsgdGFyZ2V0ICotKi0qIH0gLi04IH0KKyAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ3Bc LlswLTldKycgZGVjbGFyZWQgaW4gYmxvY2sgaXNuJ3QgY2FuZGlkYXRlIGZvciBhZGp1c3Rp bmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsOiBub3QgYWRkcmVzc2FibGV9ICIiIHsg dGFyZ2V0ICotKi0qIH0gLi05IH0KICAgICAgICEgbm90IG1hcHBlZCB5ZXQsIHNvIGl0IHdp bGwgYmUgZXF1YWwgdG8gdGhlIGhvc3QgcG9pbnRlci4KICAgICAgIGlmICh0cmFuc2Zlcihj X2xvYyhwKSwgaG9zdF9wKSAvPSBob3N0X3ApIHN0b3AgNwogICAgICAgaWYgKHRyYW5zZmVy KGNfbG9jKHBhcnIpLCBob3N0X3BhcnIpIC89IGhvc3RfcGFycikgc3RvcCA4CkBAIC05Myw2 ICs5NCw3IEBAIHN1YnJvdXRpbmUgZm9vIChwMiwgcGFyciwgaG9zdF9wLCBob3N0X3BhcnIs IGNvbmQpCiAgICAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ0RcLlswLTldKycgZGVjbGFy ZWQgaW4gYmxvY2sgaXMgY2FuZGlkYXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRp emF0aW9uIGxldmVsfSAiVE9ETyIgeyB0YXJnZXQgKi0qLSogfSAuLTYgfQogICAgICAgISB7 IGRnLW5vdGUge3ZhcmlhYmxlICd0cmFuc2ZlclwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9j ayBpcyBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2 ZWx9ICJUT0RPIiB7IHRhcmdldCAqLSotKiB9IC4tNyB9CiAgICAgICAhIHsgZGctbm90ZSB7 dmFyaWFibGUgJ3Bhcm1cLlswLTldKycgZGVjbGFyZWQgaW4gYmxvY2sgaXNuJ3QgY2FuZGlk YXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsOiBub3QgYWRk cmVzc2FibGV9ICIiIHsgdGFyZ2V0ICotKi0qIH0gLi04IH0KKyAgICAgICEgeyBkZy1ub3Rl IHt2YXJpYWJsZSAncFwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBpc24ndCBjYW5kaWRh dGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRy ZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0qLSogfSAuLTkgfQogI2lmIEFDQ19NRU1fU0hBUkVE CiAgICAgICAgIGlmICh0cmFuc2ZlcihjX2xvYyhwKSwgaG9zdF9wKSAvPSBob3N0X3ApIHN0 b3AgMTUKICAgICAgICAgaWYgKHRyYW5zZmVyKGNfbG9jKHBhcnIpLCBob3N0X3BhcnIpIC89 IGhvc3RfcGFycikgc3RvcCAxNgpAQCAtMTEyLDYgKzExNCw3IEBAIHN1YnJvdXRpbmUgZm9v IChwMiwgcGFyciwgaG9zdF9wLCBob3N0X3BhcnIsIGNvbmQpCiAgICAgICAgICEgeyBkZy1u b3RlIHt2YXJpYWJsZSAncGFybVwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBpc24ndCBj YW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5v dCBhZGRyZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0qLSogfSAuLTYgfQogICAgICAgICAhIHsg ZGctbm90ZSB7dmFyaWFibGUgJ0RcLlswLTldKycgZGVjbGFyZWQgaW4gYmxvY2sgaXMgY2Fu ZGlkYXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsfSAiVE9E TyIgeyB0YXJnZXQgKi0qLSogfSAuLTcgfQogICAgICAgICAhIHsgZGctbm90ZSB7dmFyaWFi bGUgJ3RyYW5zZmVyXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzIGNhbmRpZGF0ZSBm b3IgYWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbH0gIlRPRE8iIHsgdGFy Z2V0ICotKi0qIH0gLi04IH0KKyAgICAgICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdwXC5b MC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzbid0IGNhbmRpZGF0ZSBmb3IgYWRqdXN0aW5n IE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3NhYmxlfSAiIiB7IHRh cmdldCAqLSotKiB9IC4tOSB9CiAjaWYgQUNDX01FTV9TSEFSRUQKICAgICAgICAgaWYgKHRy YW5zZmVyKGNfbG9jKHApLCBob3N0X3ApIC89IGhvc3RfcCkgc3RvcCAxOQogICAgICAgICBp ZiAodHJhbnNmZXIoY19sb2MocGFyciksIGhvc3RfcGFycikgLz0gaG9zdF9wYXJyKSBzdG9w IDIwCkBAIC0xMzEsNiArMTM0LDcgQEAgc3Vicm91dGluZSBmb28gKHAyLCBwYXJyLCBob3N0 X3AsIGhvc3RfcGFyciwgY29uZCkKICAgICAgICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdw YXJtXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzbid0IGNhbmRpZGF0ZSBmb3IgYWRq dXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3NhYmxlfSAi IiB7IHRhcmdldCAqLSotKiB9IC4tNiB9CiAgICAgICAgICEgeyBkZy1ub3RlIHt2YXJpYWJs ZSAnRFwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBpcyBjYW5kaWRhdGUgZm9yIGFkanVz dGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWx9ICJUT0RPIiB7IHRhcmdldCAqLSot KiB9IC4tNyB9CiAgICAgICAgICEgeyBkZy1ub3RlIHt2YXJpYWJsZSAndHJhbnNmZXJcLlsw LTldKycgZGVjbGFyZWQgaW4gYmxvY2sgaXMgY2FuZGlkYXRlIGZvciBhZGp1c3RpbmcgT3Bl bkFDQyBwcml2YXRpemF0aW9uIGxldmVsfSAiVE9ETyIgeyB0YXJnZXQgKi0qLSogfSAuLTgg fQorICAgICAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ3BcLlswLTldKycgZGVjbGFyZWQg aW4gYmxvY2sgaXNuJ3QgY2FuZGlkYXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRp emF0aW9uIGxldmVsOiBub3QgYWRkcmVzc2FibGV9ICIiIHsgdGFyZ2V0ICotKi0qIH0gLi05 IH0KICNpZiBBQ0NfTUVNX1NIQVJFRAogICAgICAgICBpZiAodHJhbnNmZXIoY19sb2MocCks IGhvc3RfcCkgLz0gaG9zdF9wKSBzdG9wIDIzCiAgICAgICAgIGlmICh0cmFuc2ZlcihjX2xv YyhwYXJyKSwgaG9zdF9wYXJyKSAvPSBob3N0X3BhcnIpIHN0b3AgMjQK --------------O6DuTgYtnKZmSI2yNqrz0g7B Content-Type: text/x-patch; charset="UTF-8"; name="interdiff.diff" Content-Disposition: attachment; filename="interdiff.diff" Content-Transfer-Encoding: base64 IGdjYy9mb3J0cmFuL2NsYXNzLmNjIHwgNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDU3IGluc2VydGlv bnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vY2xhc3Mu Y2MgYi9nY2MvZm9ydHJhbi9jbGFzcy5jYwppbmRleCAyMDZiYTYzZTc1Ni4uYTVmYWIxMGVi ZjggMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2NsYXNzLmNjCisrKyBiL2djYy9mb3J0cmFu L2NsYXNzLmNjCkBAIC0yMjkzLDkgKzIyOTMsOSBAQCBnZW5lcmF0ZV9jYWxsYmFja193cmFw cGVyIChnZmNfc3ltYm9sICp2dGFiLCBnZmNfc3ltYm9sICpkZXJpdmVkLAogICBnZmNfbmFt ZXNwYWNlICpzdWJfbnM7CiAgIGdmY19jb2RlICpsYXN0X2NvZGUsICpibG9jazsKICAgZ2Zj X3N5bWJvbCAqY2FsbGJhY2ssICpjYiwgKnRva2VuLCAqdGhpc19wdHIsICpzY2FsYXIsICpm bGFnLCAqcmVzdWx0OwotICBnZmNfc3ltYm9sICpjX3B0ciwgKmNfZnVucHRyLCAqY19udWxs X2Z1bnB0ciwgKmNfc2hvcnQ7CisgIGdmY19zeW1ib2wgKmNfcHRyLCAqY19mdW5wdHIsICpj X251bGxfZnVucHRyLCAqY19zaG9ydCwgKmNfc2l6ZV90OwogICBnZmNfZXhwciAqc2l6ZTsK LSAgaW50IGNfc2hvcnRfa2luZDsKKyAgaW50IGNfc2hvcnRfa2luZCwgY19zaXplX2tpbmQ7 CiAgIGNoYXIgKm5hbWU7CiAKICAgLyogU2V0IHVwIHRoZSBuYW1lc3BhY2UuICAqLwpAQCAt MjMxMyw2ICsyMzEzLDggQEAgZ2VuZXJhdGVfY2FsbGJhY2tfd3JhcHBlciAoZ2ZjX3N5bWJv bCAqdnRhYiwgZ2ZjX3N5bWJvbCAqZGVyaXZlZCwKICAgZ2ZjX2ZpbmRfc3ltYm9sICgiY19u dWxsX2Z1bnB0ciIsIHN1Yl9ucywgMCwgJmNfbnVsbF9mdW5wdHIpOwogICBnZmNfZmluZF9z eW1ib2wgKCJjX3Nob3J0Iiwgc3ViX25zLCAwLCAmY19zaG9ydCk7CiAgIGNfc2hvcnRfa2lu ZCA9IG1wel9nZXRfc2kgKGNfc2hvcnQtPnZhbHVlLT52YWx1ZS5pbnRlZ2VyKTsKKyAgZ2Zj X2ZpbmRfc3ltYm9sICgiY19zaXplX3QiLCBzdWJfbnMsIDAsICZjX3NpemVfdCk7CisgIGNf c2l6ZV9raW5kID0gbXB6X2dldF9zaSAoY19zaXplX3QtPnZhbHVlLT52YWx1ZS5pbnRlZ2Vy KTsKIAogICAvKiBTZXQgdXAgdGhlIHByb2NlZHVyZSBzeW1ib2wuICAqLwogICBuYW1lID0g eGFzcHJpbnRmICgiX19jYWxsYmFja18lcyIsIHRuYW1lKTsKQEAgLTI1MDUsNyArMjUwNyw3 IEBAIGdlbmVyYXRlX2NhbGxiYWNrX3dyYXBwZXIgKGdmY19zeW1ib2wgKnZ0YWIsIGdmY19z eW1ib2wgKmRlcml2ZWQsCiAgIGJsb2NrLT5leHByMi0+d2hlcmUgPSBnZmNfY3VycmVudF9s b2N1czsKICAgYmxvY2stPmV4cHIyLT5zeW10cmVlID0gZ2ZjX2ZpbmRfc3ltdHJlZSAoc3Vi X25zLT5zeW1fcm9vdCwgY2ItPm5hbWUpOwogICBibG9jay0+ZXhwcjItPnZhbHVlLmZ1bmN0 aW9uLmVzeW0gPSBjYjsKLSAgYmxvY2stPmV4cHIyLT52YWx1ZS5mdW5jdGlvbi5lc3ltLT5u YW1lID0gY2ItPm5hbWU7CisgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVuY3Rpb24ubmFtZSA9 IGNiLT5uYW1lOwogICBibG9jay0+ZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9IGdm Y19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CiAgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVuY3Rp b24uYWN0dWFsLT5leHByID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAodG9rZW4pOwogICBi bG9jay0+ZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dCA9IGdmY19nZXRfYWN0 dWFsX2FyZ2xpc3QgKCk7CkBAIC0yNjM1LDcgKzI2MzcsOSBAQCBnZW5lcmF0ZV9jYWxsYmFj a193cmFwcGVyIChnZmNfc3ltYm9sICp2dGFiLCBnZmNfc3ltYm9sICpkZXJpdmVkLAogICAg ICAgbG9jX2V4cHItPnN5bXRyZWUtPm4uc3ltLT5pbnRtb2Rfc3ltX2lkID0gSVNPQ0JJTkRJ TkdfTE9DOwogICAgICAgbG9jX2V4cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmludHJpbnNp YyA9IDE7CiAgICAgICBsb2NfZXhwci0+c3ltdHJlZS0+bi5zeW0tPmZyb21faW50bW9kID0g SU5UTU9EX0lTT19DX0JJTkRJTkc7Ci0gICAgICBsb2NfZXhwci0+dmFsdWUuZnVuY3Rpb24u aXN5bSA9IGdmY19pbnRyaW5zaWNfZnVuY3Rpb25fYnlfaWQgKEdGQ19JU1lNX0NfTE9DKTsK KyAgICAgIGxvY19leHByLT52YWx1ZS5mdW5jdGlvbi5pc3ltCisJPSBnZmNfaW50cmluc2lj X2Z1bmN0aW9uX2J5X2lkIChHRkNfSVNZTV9DX0xPQyk7CisgICAgICBsb2NfZXhwci0+dmFs dWUuZnVuY3Rpb24ubmFtZSA9IGxvY19leHByLT52YWx1ZS5mdW5jdGlvbi5pc3ltLT5uYW1l OwogICAgICAgbG9jX2V4cHItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9IGdmY19nZXRfYWN0 dWFsX2FyZ2xpc3QgKCk7CiAgICAgICBsb2NfZXhwci0+dmFsdWUuZnVuY3Rpb24uYWN0dWFs LT5leHByID0gZXhwcjsKICAgICAgIGxvY19leHByLT5zeW10cmVlLT5uLnN5bS0+cmVzdWx0 ID0gZXhwci0+c3ltdHJlZS0+bi5zeW07CkBAIC0yNjYxLDcgKzI2NjUsNyBAQCBnZW5lcmF0 ZV9jYWxsYmFja193cmFwcGVyIChnZmNfc3ltYm9sICp2dGFiLCBnZmNfc3ltYm9sICpkZXJp dmVkLAogICAgICAgZS0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKICAgICAgIGUtPnN5 bXRyZWUgPSBnZmNfZmluZF9zeW10cmVlIChzdWJfbnMtPnN5bV9yb290LCBjYi0+bmFtZSk7 CiAgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5lc3ltID0gY2I7Ci0gICAgICBlLT52YWx1ZS5m dW5jdGlvbi5lc3ltLT5uYW1lID0gY2ItPm5hbWU7CisgICAgICBlLT52YWx1ZS5mdW5jdGlv bi5uYW1lID0gY2ItPm5hbWU7CiAgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBn ZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOwogICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0 dWFsLT5leHByID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAodG9rZW4pOwogICAgICAgZS0+ dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAo KTsKQEAgLTI2ODUsNiArMjY4OSwxNiBAQCBnZW5lcmF0ZV9jYWxsYmFja193cmFwcGVyIChn ZmNfc3ltYm9sICp2dGFiLCBnZmNfc3ltYm9sICpkZXJpdmVkLAogCSAgfHwgcG9pbnRlciB8 fCBwcm9jX3B0cikKIAljb250aW51ZTsKIAorICAgICAgLyogVE9ETzogSGFuZGxlIHVubGlt aXRlZCBwb2x5bW9ycGhpYyBjb21wb25lbnRzLiAgKi8KKyAgICAgIGlmIChjb21wLT50cy50 eXBlID09IEJUX0NMQVNTCisJICAmJiBDTEFTU19EQVRBIChjb21wKS0+dHMudS5kZXJpdmVk LT5hdHRyLnVubGltaXRlZF9wb2x5bW9ycGhpYykKKwljb250aW51ZTsKKworICAgICAgLyog VE9ETzogSGFuZGxlIHVubGltaXRlZCBwb2x5bW9ycGhpYyBjb21wb25lbnRzLiAgKi8KKyAg ICAgIGlmIChjb21wLT50cy50eXBlID09IEJUX0NMQVNTCisJICAmJiBjb21wLT50cy51LmRl cml2ZWQtPmF0dHIudW5saW1pdGVkX3BvbHltb3JwaGljKQorCWNvbnRpbnVlOworCiAgICAg ICBnZmNfZXhwciAqdnRhYl9jYl9leHByOwogICAgICAgaWYgKGNvbXAtPnRzLnR5cGUgPT0g QlRfREVSSVZFRCkKIAl2dGFiX2NiX2V4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChn ZmNfZmluZF92dGFiICgmY29tcC0+dHMpKTsKQEAgLTI3MTEsNiArMjcyNSwzOCBAQCBnZW5l cmF0ZV9jYWxsYmFja193cmFwcGVyIChnZmNfc3ltYm9sICp2dGFiLCBnZmNfc3ltYm9sICpk ZXJpdmVkLAogICAgICAgYmxvY2stPmV4cHIyLT52YWx1ZS5vcC5vcDIgPSBnZmNfZ2V0X2V4 cHIgKCk7CiAgICAgICBlID0gYmxvY2stPmV4cHIyLT52YWx1ZS5vcC5vcDI7CiAKKyAgICAg IC8qIHNpemU6ICBzdG9yYWdlX3NpemUoY29tcF9leHByKSAvIHN0b3JhZ2Vfc2l6ZSgwXzEp LCB3aGVyZSB0aGUKKwkgZGVub21pbmF0b3IgaXMgQklUU19QRVJfVU5JVCBhcyBiaXRfc2l6 ZSA9IGtpbmQgKiBCSVRTX1BFUl9VTklULiAgKi8KKyAgICAgIHNpemUgPSBnZmNfZ2V0X2V4 cHIgKCk7CisgICAgICBzaXplLT5leHByX3R5cGUgPSBFWFBSX09QOworICAgICAgc2l6ZS0+ d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKyAgICAgIHNpemUtPnRzLnR5cGUgPSBCVF9J TlRFR0VSOworICAgICAgc2l6ZS0+dHMua2luZCA9IGNfc2l6ZV9raW5kOworICAgICAgc2l6 ZS0+dmFsdWUub3Aub3AgPSBJTlRSSU5TSUNfRElWSURFOworICAgICAgc2l6ZS0+dmFsdWUu b3Aub3AxID0gZ2ZjX2dldF9leHByICgpOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AxLT50 cyA9IHNpemUtPnRzOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AxLT5leHByX3R5cGUgPSBF WFBSX0ZVTkNUSU9OOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AxLT52YWx1ZS5mdW5jdGlv bi5pc3ltCisJPSBnZmNfaW50cmluc2ljX2Z1bmN0aW9uX2J5X2lkIChHRkNfSVNZTV9TVE9S QUdFX1NJWkUpOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AxLT52YWx1ZS5mdW5jdGlvbi5u YW1lCisJPSBzaXplLT52YWx1ZS5vcC5vcDEtPnZhbHVlLmZ1bmN0aW9uLmlzeW0tPm5hbWU7 CisgICAgICBzaXplLT52YWx1ZS5vcC5vcDEtPnZhbHVlLmZ1bmN0aW9uLmVzeW0gPSBOVUxM OworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AxLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBn ZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AxLT52 YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHIgPSBnZmNfY29weV9leHByIChleHByKTsKKyAg ICAgIHNpemUtPnZhbHVlLm9wLm9wMS0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKyAg ICAgIHNpemUtPnZhbHVlLm9wLm9wMiA9IGdmY19nZXRfZXhwciAoKTsKKyAgICAgIHNpemUt PnZhbHVlLm9wLm9wMi0+dHMgPSBzaXplLT50czsKKyAgICAgIHNpemUtPnZhbHVlLm9wLm9w Mi0+ZXhwcl90eXBlID0gRVhQUl9GVU5DVElPTjsKKyAgICAgIHNpemUtPnZhbHVlLm9wLm9w Mi0+dmFsdWUuZnVuY3Rpb24uaXN5bQorCT0gZ2ZjX2ludHJpbnNpY19mdW5jdGlvbl9ieV9p ZCAoR0ZDX0lTWU1fU1RPUkFHRV9TSVpFKTsKKyAgICAgIHNpemUtPnZhbHVlLm9wLm9wMi0+ dmFsdWUuZnVuY3Rpb24ubmFtZQorCT0gc2l6ZS0+dmFsdWUub3Aub3AyLT52YWx1ZS5mdW5j dGlvbi5pc3ltLT5uYW1lOworICAgICAgc2l6ZS0+dmFsdWUub3Aub3AyLT52YWx1ZS5mdW5j dGlvbi5lc3ltID0gTlVMTDsKKyAgICAgIHNpemUtPnZhbHVlLm9wLm9wMi0+dmFsdWUuZnVu Y3Rpb24uYWN0dWFsID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgICAgIHNpemUt PnZhbHVlLm9wLm9wMi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByCisJPSBnZmNfZ2V0 X2ludF9leHByICgvKiBraW5kID0gKi8gMSwgTlVMTCwgMCk7CisgICAgICBzaXplLT52YWx1 ZS5vcC5vcDItPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisKICAgICAgIGlmIChjb21w LT5hdHRyLmRpbWVuc2lvbikKIAl7CiAJICBlLT5leHByX3R5cGUgPSBFWFBSX0ZVTkNUSU9O OwpAQCAtMjczMSwxNyArMjc3NywxOSBAQCBnZW5lcmF0ZV9jYWxsYmFja193cmFwcGVyIChn ZmNfc3ltYm9sICp2dGFiLCBnZmNfc3ltYm9sICpkZXJpdmVkLAogICAgICAgZS0+d2hlcmUg PSBnZmNfY3VycmVudF9sb2N1czsKICAgICAgIGUtPnN5bXRyZWUgPSBnZmNfZmluZF9zeW10 cmVlIChzdWJfbnMtPnN5bV9yb290LCBjYi0+bmFtZSk7CiAgICAgICBlLT52YWx1ZS5mdW5j dGlvbi5lc3ltID0gY2I7Ci0gICAgICBlLT52YWx1ZS5mdW5jdGlvbi5lc3ltLT5uYW1lID0g Y2ItPm5hbWU7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5uYW1lID0gY2ItPm5hbWU7CiAg ICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0 ICgpOwogICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByID0gZ2ZjX2x2YWxf ZXhwcl9mcm9tX3N5bSAodG9rZW4pOwogICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFs LT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKICAgICAgIGUtPnZhbHVlLmZ1 bmN0aW9uLmFjdHVhbC0+bmV4dC0+ZXhwciA9IGdmY19jb3B5X2V4cHIgKGV4cHIpOwogICAg ICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0ID0gZ2ZjX2dldF9hY3R1 YWxfYXJnbGlzdCAoKTsKLSAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+ bmV4dC0+ZXhwcgorICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0 LT5leHByID0gc2l6ZTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+ bmV4dC0+bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgICAgICBlLT52YWx1 ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5leHQtPm5leHQtPmV4cHIKIAk9IGdmY19nZXRf aW50X2V4cHIgKGdmY19pbmRleF9pbnRlZ2VyX2tpbmQsIE5VTEwsCiAJCQkgICAgR0ZDX0NM QVNTX0NCX0FMTE9DQVRBQkxFKTsKLSAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ bmV4dC0+bmV4dC0+bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7Ci0gICAgICBl LT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5leHQtPm5leHQtPmV4cHIgPSB2dGFi X2NiX2V4cHI7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5leHQt Pm5leHQtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgZS0+dmFs dWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0LT5leHByID0gdnRh Yl9jYl9leHByOwogICAgIH0KIAogICB2dGFiX2NiLT5pbml0aWFsaXplciA9IGdmY19sdmFs X2V4cHJfZnJvbV9zeW0gKGNhbGxiYWNrKTsK --------------O6DuTgYtnKZmSI2yNqrz0g7B--