From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 11BB83858002; Thu, 19 Jan 2023 14:40:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 11BB83858002 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.97,229,1669104000"; d="diff'?scan'208";a="94068109" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 19 Jan 2023 06:40:30 -0800 IronPort-SDR: jFgsMBstd15/eXJQ6WyE/qPQeb92YtlmmcSuvW/BxvOsI3jPtZgt0GEJV3ThgsggaCeJH6XBIV dXQB9xSbBWqjww0zG2nf8RARVXmeYUd/MZDI38FNK/f2l+QMzj0P5fh7GWQdLu+z2uyHulCl1y juh57IX+XjH3YMHXJZXsJONi1UQGRxy6F5Arr61akUJiJJhkFi3LhU2ejvsDaIJI3YhShzaNOk pVW5AEOunAUxi71tP5qcwgXpI1Swstei/G/eZ5whfsmmyTX7KVbpS+0IerAQLzmJzrmbNz1r6V mKs= Content-Type: multipart/mixed; boundary="------------fEzgH6D0C5Brmq2XuiuYZk8C" Message-ID: <18c3aed8-71dd-9b7f-6c7c-da529876d3f5@codesourcery.com> Date: Thu, 19 Jan 2023 15:40:19 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] OpenMP/Fortran: Partially fix non-rect loop nests [PR107424] X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_ASCII_DIVIDERS,KAM_DMARC_STATUS,KAM_SHORT,SCC_10_SHORT_WORD_LINES,SCC_20_SHORT_WORD_LINES,SCC_35_SHORT_WORD_LINES,SCC_5_SHORT_WORD_LINES,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------fEzgH6D0C5Brmq2XuiuYZk8C Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable This is all about non-rectangular loop nests in OpenMP. The attached patch depends on the obvious fix for https://gcc.gnu.org/PR108= 459, which is together with a nice testcase in Jakub's WIP patch attached to the= PR; without, gfortran.dg/gomp/canonical-loop-1.f90 fails with an ICE (segfault)= . My patch fixes part of the Fortran issues found. Namely, it ensures that a = "regular" non-rectangular loop nest actually works by passing the outer-loop-var, the= multiplier and offset in a TREE_VEC to the middle end. It additionally avoids pointles= sly creating a temporary variable for a VAR_DECL (main advantage: dump looks cl= eaner and avoids some dependency analysis) - and likewise for 'step' given that 'step= ' was evaluated before. There is an additional issue - not quite addressed in this patch: There are= cases when a loop variable is replaced by another variable ('count') and then at = the beginning of the loop body, the original variable gets the value from the count varia= ble. Obviously, this no longer works with non-rectangular loop nests. The 'count' appears in two cases: (a) when the iteration step is not 1 or -= 1 and (b) if the iteration variable is a pointer (scalar with allocatable, pointer, opti= onal argument or just a dummy argument; oddly, even if it has the value attribute). There is pending work to be done in this case, as mentioned in comment 6 an= d 8 of the PR. This patch adds some 'sorry' messages for them. I hope and think that I hav= e not missed a case where 'count' is used which I did not catch, but I should have all o= r at least most. OK for mainline, once the other patch has been committed? Tobias PS: I still need to verify that everything is fine, once the other patch ha= s been committed. A flaky mainboard on the laptop causes multiple random freezes per day, whi= ch makes testing + patch writing a bit harder. (At least the mainboard replacement is schedu= led for tomorrow :-) ) ----------------- 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 --------------fEzgH6D0C5Brmq2XuiuYZk8C Content-Type: text/x-patch; charset="UTF-8"; name="fix-omp-non-rect.diff" Content-Disposition: attachment; filename="fix-omp-non-rect.diff" Content-Transfer-Encoding: base64 T3Blbk1QL0ZvcnRyYW46IFBhcnRpYWxseSBmaXggbm9uLXJlY3QgbG9vcCBuZXN0cyBbUFIx MDc0MjRdCgpUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBsb29wIGJvdW5kcyBkZXBlbmRpbmcg b24gb3V0ZXIgbG9vcCB2YXJzIHVzZSB0aGUKcHJvcGVyIFRSRUVfVkVDIGZvcm1hdC4gSXQg YWRkaXRpb25hbGx5IGdpdmVzIGEgc29ycnkgaWYgc3VjaCBhbiBvdXRlcgp2YXIgaGFzIGEg bm9uLW9uZS9ub24tbWludXMtb25lIGluY3JlbWVudCBhcyBjdXJyZW50bHkgYSBjb3VudCB2 YXJpYWJsZQppcyB1c2VkIGluIHRoaXMgY2FzZSAoc2VlIFBSKS4KCmdjYy9mb3J0cmFuL0No YW5nZUxvZzoKCglQUiBmb3J0cmFuLzEwNzQyNAoJKiB0cmFucy1vcGVubXAuY2MgKGdmY19u b25yZWN0X2xvb3BfZXhwcik6IE5ldy4KCShnZmNfdHJhbnNfb21wX2RvKTogQ2FsbCBpdCBm b3Igc3RhcnQvZW5kIGxvb3AgYm91bmQKCWZvciBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0 cy4KCmdjYy90ZXN0c3VpdGUvCgoJUFIgZm9ydHJhbi8xMDc0MjQKCSogZ2ZvcnRyYW4uZGcv Z29tcC9ub24tcmVjdGFuZ3VsYXItbG9vcC0zLmY5MDogTmV3IHRlc3QuCgpsaWJnb21wL0No YW5nZUxvZzoKCglQUiBmb3J0cmFuLzEwNzQyNAoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTEuZjkwOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRl L2xpYmdvbXAuZm9ydHJhbi9ub24tcmVjdGFuZ3VsYXItbG9vcC0xYS5mOTA6IE5ldyB0ZXN0 LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTIu ZjkwOiBOZXcgdGVzdC4KCiBnY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MgICAgICAgICAg ICAgICAgICAgICAgICB8IDE2NyArKysrKy0KIC4uLi9nZm9ydHJhbi5kZy9nb21wL25vbi1y ZWN0YW5ndWxhci1sb29wLTMuZjkwICAgIHwgIDg1ICsrKwogLi4uL2xpYmdvbXAuZm9ydHJh bi9ub24tcmVjdGFuZ3VsYXItbG9vcC0xLmY5MCAgICAgfCA2MzcgKysrKysrKysrKysrKysr KysrKysrCiAuLi4vbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTFhLmY5 MCAgICB8IDM3NCArKysrKysrKysrKysKIC4uLi9saWJnb21wLmZvcnRyYW4vbm9uLXJlY3Rh bmd1bGFyLWxvb3AtMi5mOTAgICAgIHwgMjQzICsrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQs IDE0OTUgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2Nj L2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNj CmluZGV4IDg3MjEzZGUwOTE4Li43MzM3Njg5NDMxNiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRy YW4vdHJhbnMtb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYwpA QCAtNTEyMCw2ICs1MTIwLDEzNiBAQCB0eXBlZGVmIHN0cnVjdCBkb3Zhcl9pbml0X2Qgewog ICB0cmVlIGluaXQ7CiB9IGRvdmFyX2luaXQ7CiAKK3N0YXRpYyBib29sCitnZmNfbm9ucmVj dF9sb29wX2V4cHIgKHN0bXRibG9ja190ICpwYmxvY2ssIGdmY19zZSAqc2VwLCBpbnQgbG9v cF9uLAorCQkgICAgICAgZ2ZjX2NvZGUgKmNvZGUsIGdmY19leHByICpleHByLCB2ZWM8ZG92 YXJfaW5pdD4gKmluaXRzKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IGxvb3Bf bjsgaSsrKQorICAgIHsKKyAgICAgIGdjY19hc3NlcnQgKGNvZGUtPmV4dC5pdGVyYXRvci0+ dmFyLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRSk7CisgICAgICBpZiAoZ2ZjX2ZpbmRf c3ltX2luX2V4cHIgKGNvZGUtPmV4dC5pdGVyYXRvci0+dmFyLT5zeW10cmVlLT5uLnN5bSwg ZXhwcikpCisJYnJlYWs7CisgICAgICBjb2RlID0gY29kZS0+YmxvY2stPm5leHQ7CisgICAg fQorICBpZiAoaSA+PSBsb29wX24pCisgICAgcmV0dXJuIGZhbHNlOworCisgIC8qIENhbm9u aWMgZm9ybWF0OiBUUkVFX1ZFQyB3aXRoIFt2YXIsIG11bHRpcGxpZXIsIG9mZnNldF0uICAq LworICBnZmNfc3ltYm9sICp2YXIgPSBjb2RlLT5leHQuaXRlcmF0b3ItPnZhci0+c3ltdHJl ZS0+bi5zeW07CisKKyAgZ2ZjX3NlIHNlOworICB0cmVlIHRyZWVfdmFyLCBhMSwgYTI7Cisg IGExID0gaW50ZWdlcl9vbmVfbm9kZTsKKyAgYTIgPSBpbnRlZ2VyX3plcm9fbm9kZTsKKwor ICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKKyAgZ2ZjX2NvbnZfZXhwcl9saHMgKCZzZSwg Y29kZS0+ZXh0Lml0ZXJhdG9yLT52YXIpOworICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChw YmxvY2ssICZzZS5wcmUpOworICB0cmVlX3ZhciA9IHNlLmV4cHI7CisKKyAgeworICAgIC8q IEZJWE1FOiBIYW5kbGUgbm9uLXVuaXR5IGl0ZXJhdGlvbnMsIGNmLiBQUiBmb3J0cmFuLzEw NzQyNC4KKyAgICAgICBUaGUgaXNzdWUgaXMgdGhhdCBmb3IgdGhvc2UgYSAnY291bnQnIHZh cmlhYmxlIGlzIHVzZWQuICAqLworICAgIGRvdmFyX2luaXQgKmRpOworICAgIHVuc2lnbmVk IGl4OworICAgIHRyZWUgdCA9IHRyZWVfdmFyOworICAgIHdoaWxlIChUUkVFX0NPREUgKHQp ID09IElORElSRUNUX1JFRikKKyAgICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOworICAg IEZPUl9FQUNIX1ZFQ19FTFQgKCppbml0cywgaXgsIGRpKQorICAgICAgeworCXRyZWUgdDIg PSBkaS0+dmFyOworCXdoaWxlIChUUkVFX0NPREUgKHQyKSA9PSBJTkRJUkVDVF9SRUYpCisJ ICB0MiA9IFRSRUVfT1BFUkFORCAodDIsIDApOworCWlmICh0ID09IHQyKQorCSAgeworCSAg ICBIT1NUX1dJREVfSU5UIGludHZhbDsKKwkgICAgaWYgKGdmY19leHRyYWN0X2h3aSAoY29k ZS0+ZXh0Lml0ZXJhdG9yLT5zdGVwLCAmaW50dmFsLCAwKSA9PSAwCisJCSYmIGludHZhbCAh PSAxICYmIGludHZhbCAhPSAtMSkKKwkgICAgICBzb3JyeV9hdCAoZ2ZjX2dldF9sb2NhdGlv biAoJmNvZGUtPmxvYyksCisJCQkibm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5v bi11bml0IGxvb3AgaXRlcmF0aW9uIgorCQkJIiBzdGVwIGZvciAlcXMiLCB2YXItPm5hbWUp OworCSAgICBlbHNlCisJICAgICAgc29ycnlfYXQgKGdmY19nZXRfbG9jYXRpb24gKCZjb2Rl LT5sb2MpLAorCQkJIm5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBkdW1teS1hcmd1 bWVudCBvciAiCisJCQkicG9pbnRlciwgb3B0aW9uYWwgb3IgYWxsb2NhdGFibGUgZG8tdmFy aWFibGUgJXFzIiwKKwkJCXZhci0+bmFtZSk7CisKKwkgICAgaW5mb3JtIChnZmNfZ2V0X2xv Y2F0aW9uICgmZXhwci0+d2hlcmUpLCAiVXNlZCBoZXJlIik7CisJICAgIHJldHVybiBmYWxz ZTsKKwkgIH0KKyAgICAgIH0KKyAgfQorCisgIGlmIChleHByLT5leHByX3R5cGUgPT0gRVhQ Ul9WQVJJQUJMRSkKKyAgICBnY2NfYXNzZXJ0IChleHByLT5zeW10cmVlLT5uLnN5bSA9PSB2 YXIpOworICBlbHNlIGlmIChleHByLT5leHByX3R5cGUgIT0gRVhQUl9PUAorCSAgIHx8IChl eHByLT52YWx1ZS5vcC5vcCAhPSBJTlRSSU5TSUNfVElNRVMKKwkgICAgICAgJiYgZXhwci0+ dmFsdWUub3Aub3AgIT0gSU5UUklOU0lDX1BMVVMKKwkgICAgICAgJiYgZXhwci0+dmFsdWUu b3Aub3AgIT0gSU5UUklOU0lDX01JTlVTKSkKKyAgICBnY2NfdW5yZWFjaGFibGUgKCk7Cisg IGVsc2UKKyAgICB7CisgICAgICBnZmNfZXhwciAqZXQgPSBOVUxMLCAqZW8gPSBOVUxMLCAq ZSA9IGV4cHI7CisgICAgICBpZiAoZXhwci0+dmFsdWUub3Aub3AgIT0gSU5UUklOU0lDX1RJ TUVTKQorCXsKKwkgIGlmIChnZmNfZmluZF9zeW1faW5fZXhwciAodmFyLCBleHByLT52YWx1 ZS5vcC5vcDEpKQorCSAgICB7CisJICAgICAgZSA9IGV4cHItPnZhbHVlLm9wLm9wMTsKKwkg ICAgICBlbyA9IGV4cHItPnZhbHVlLm9wLm9wMjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7 CisJICAgICAgZW8gPSBleHByLT52YWx1ZS5vcC5vcDE7CisJICAgICAgZSA9IGV4cHItPnZh bHVlLm9wLm9wMjsKKwkgICAgfQorCX0KKyAgICAgIGlmIChlLT52YWx1ZS5vcC5vcCA9PSBJ TlRSSU5TSUNfVElNRVMpCisJeworCSAgaWYgKGUtPnZhbHVlLm9wLm9wMS0+ZXhwcl90eXBl ID09IEVYUFJfVkFSSUFCTEUKKwkgICAgICAmJiBlLT52YWx1ZS5vcC5vcDEtPnN5bXRyZWUt Pm4uc3ltID09IHZhcikKKwkgICAgZXQgPSBlLT52YWx1ZS5vcC5vcDI7CisJICBlbHNlCisJ ICAgIHsKKwkgICAgICBldCA9IGUtPnZhbHVlLm9wLm9wMTsKKwkgICAgICBnY2NfYXNzZXJ0 IChlLT52YWx1ZS5vcC5vcDItPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCisJCQkgICYm IGUtPnZhbHVlLm9wLm9wMi0+c3ltdHJlZS0+bi5zeW0gPT0gdmFyKTsKKwkgICAgfQorCX0K KyAgICAgIGVsc2UKKwlnY2NfYXNzZXJ0IChlLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJM RSAmJiBlLT5zeW10cmVlLT5uLnN5bSA9PSB2YXIpOworICAgICAgaWYgKGV0ICE9IE5VTEwp CisJeworCSAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7CisJICBnZmNfY29udl9leHByX3Zh bCAoJnNlLCBldCk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChwYmxvY2ssICZzZS5w cmUpOworCSAgYTEgPSBzZS5leHByOworCX0KKyAgICAgIGlmIChlbyAhPSBOVUxMKQorCXsK KwkgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOworCSAgZ2ZjX2NvbnZfZXhwcl92YWwgKCZz ZSwgZW8pOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2NrLCAmc2UucHJlKTsK KwkgIGEyID0gc2UuZXhwcjsKKwkgIGlmIChleHByLT52YWx1ZS5vcC5vcCA9PSBJTlRSSU5T SUNfTUlOVVMgJiYgZXhwci0+dmFsdWUub3Aub3AyID09IGVvKQorCSAgICAvKiBvdXRlci12 YXIgLSBhMi4gICovCisJICAgIGEyID0gZm9sZF9idWlsZDEgKE5FR0FURV9FWFBSLCBUUkVF X1RZUEUgKGEyKSwgYTIpOworCSAgZWxzZSBpZiAoZXhwci0+dmFsdWUub3Aub3AgPT0gSU5U UklOU0lDX01JTlVTKQorCSAgICAvKiBhMiAtIG91dGVyLXZhci4gICovCisJICAgIGExID0g Zm9sZF9idWlsZDEgKE5FR0FURV9FWFBSLCBUUkVFX1RZUEUgKGExKSwgYTEpOworCX0KKyAg ICAgIGExID0gREVDTF9QIChhMSkgPyBhMSA6IGdmY19ldmFsdWF0ZV9ub3cgKGExLCBwYmxv Y2spOworICAgICAgYTIgPSBERUNMX1AgKGEyKSA/IGEyIDogZ2ZjX2V2YWx1YXRlX25vdyAo YTIsIHBibG9jayk7CisgICAgfQorCisgIGdmY19pbml0X3NlIChzZXAsIE5VTEwpOworICBz ZXAtPmV4cHIgPSBtYWtlX3RyZWVfdmVjICgzKTsKKyAgVFJFRV9WRUNfRUxUIChzZXAtPmV4 cHIsIDApID0gdHJlZV92YXI7CisgIFRSRUVfVkVDX0VMVCAoc2VwLT5leHByLCAxKSA9IGZv bGRfY29udmVydCAoVFJFRV9UWVBFICh0cmVlX3ZhciksIGExKTsKKyAgVFJFRV9WRUNfRUxU IChzZXAtPmV4cHIsIDIpID0gZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKHRyZWVfdmFyKSwg YTIpOworCisgIHJldHVybiB0cnVlOworfQogCiBzdGF0aWMgdHJlZQogZ2ZjX3RyYW5zX29t cF9kbyAoZ2ZjX2NvZGUgKmNvZGUsIGdmY19leGVjX29wIG9wLCBzdG10YmxvY2tfdCAqcGJs b2NrLApAQCAtNTIxOSwxOSArNTM0OSwzNSBAQCBnZmNfdHJhbnNfb21wX2RvIChnZmNfY29k ZSAqY29kZSwgZ2ZjX2V4ZWNfb3Agb3AsIHN0bXRibG9ja190ICpwYmxvY2ssCiAgICAgICBn Y2NfYXNzZXJ0IChUUkVFX0NPREUgKHR5cGUpID09IElOVEVHRVJfVFlQRSk7CiAKICAgICAg IGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotICAgICAgZ2ZjX2NvbnZfZXhwcl92YWwgKCZz ZSwgY29kZS0+ZXh0Lml0ZXJhdG9yLT5zdGFydCk7Ci0gICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrIChwYmxvY2ssICZzZS5wcmUpOwotICAgICAgZnJvbSA9IGdmY19ldmFsdWF0ZV9u b3cgKHNlLmV4cHIsIHBibG9jayk7CisgICAgICBpZiAoIWNsYXVzZXMtPm5vbl9yZWN0YW5n dWxhcgorCSAgfHwgIWdmY19ub25yZWN0X2xvb3BfZXhwciAocGJsb2NrLCAmc2UsIGksIG9y aWdfY29kZS0+YmxvY2stPm5leHQsCisJCQkJICAgICBjb2RlLT5leHQuaXRlcmF0b3ItPnN0 YXJ0LCAmaW5pdHMpKQorCXsKKwkgIGdmY19jb252X2V4cHJfdmFsICgmc2UsIGNvZGUtPmV4 dC5pdGVyYXRvci0+c3RhcnQpOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2Nr LCAmc2UucHJlKTsKKwkgIGlmICghREVDTF9QIChzZS5leHByKSkKKwkgICAgc2UuZXhwciA9 IGdmY19ldmFsdWF0ZV9ub3cgKHNlLmV4cHIsIHBibG9jayk7CisJfQorICAgICAgZnJvbSA9 IHNlLmV4cHI7CiAKICAgICAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotICAgICAgZ2Zj X2NvbnZfZXhwcl92YWwgKCZzZSwgY29kZS0+ZXh0Lml0ZXJhdG9yLT5lbmQpOwotICAgICAg Z2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2NrLCAmc2UucHJlKTsKLSAgICAgIHRvID0g Z2ZjX2V2YWx1YXRlX25vdyAoc2UuZXhwciwgcGJsb2NrKTsKKyAgICAgIGlmICghY2xhdXNl cy0+bm9uX3JlY3Rhbmd1bGFyCisJICB8fCAhZ2ZjX25vbnJlY3RfbG9vcF9leHByIChwYmxv Y2ssICZzZSwgaSwgb3JpZ19jb2RlLT5ibG9jay0+bmV4dCwKKwkJCQkgICAgIGNvZGUtPmV4 dC5pdGVyYXRvci0+ZW5kLCAmaW5pdHMpKQorCXsKKwkgIGdmY19jb252X2V4cHJfdmFsICgm c2UsIGNvZGUtPmV4dC5pdGVyYXRvci0+ZW5kKTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKHBibG9jaywgJnNlLnByZSk7CisJICBpZiAoIURFQ0xfUCAoc2UuZXhwcikpCisJICAg IHNlLmV4cHIgPSBnZmNfZXZhbHVhdGVfbm93IChzZS5leHByLCBwYmxvY2spOworCX0KKyAg ICAgIHRvID0gc2UuZXhwcjsKIAogICAgICAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7CiAg ICAgICBnZmNfY29udl9leHByX3ZhbCAoJnNlLCBjb2RlLT5leHQuaXRlcmF0b3ItPnN0ZXAp OwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2NrLCAmc2UucHJlKTsKLSAg ICAgIHN0ZXAgPSBnZmNfZXZhbHVhdGVfbm93IChzZS5leHByLCBwYmxvY2spOworICAgICAg aWYgKCFERUNMX1AgKHNlLmV4cHIpKQorCXNlLmV4cHIgPSBnZmNfZXZhbHVhdGVfbm93IChz ZS5leHByLCBwYmxvY2spOworICAgICAgc3RlcCA9IHNlLmV4cHI7CiAgICAgICBkb3Zhcl9k ZWNsID0gZG92YXI7CiAKICAgICAgIC8qIFNwZWNpYWwgY2FzZSBzaW1wbGUgbG9vcHMuICAq LwpAQCAtNTMzMSw5ICs1NDc3LDkgQEAgZ2ZjX3RyYW5zX29tcF9kbyAoZ2ZjX2NvZGUgKmNv ZGUsIGdmY19leGVjX29wIG9wLCBzdG10YmxvY2tfdCAqcGJsb2NrLAogCSAgICAgIE9NUF9D TEFVU0VfTElORUFSX05PX0NPUFlJTiAodG1wKSA9IDE7CiAJICAgICAgT01QX0NMQVVTRV9E RUNMICh0bXApID0gZG92YXJfZGVjbDsKIAkgICAgICBvbXBfY2xhdXNlcyA9IGdmY190cmFu c19hZGRfY2xhdXNlICh0bXAsIG9tcF9jbGF1c2VzKTsKKwkgICAgICBpZiAoIXNpbXBsZSkK KwkJZG92YXJfZm91bmQgPSAzOwogCSAgICB9Ci0JICBpZiAoIXNpbXBsZSkKLQkgICAgZG92 YXJfZm91bmQgPSAzOwogCX0KICAgICAgIGVsc2UgaWYgKCFkb3Zhcl9mb3VuZCAmJiAhc2lt cGxlKQogCXsKQEAgLTUzNjcsOSArNTUxMyw4IEBAIGdmY190cmFuc19vbXBfZG8gKGdmY19j b2RlICpjb2RlLCBnZmNfZXhlY19vcCBvcCwgc3RtdGJsb2NrX3QgKnBibG9jaywKIAkJfQog CSAgICAgIGVsc2UKIAkJewotCQkgIHRtcCA9IGdmY19ldmFsdWF0ZV9ub3cgKHN0ZXAsIHBi bG9jayk7CiAJCSAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExV U19FWFBSLCB0eXBlLAotCQkJCQkgZG92YXIsIHRtcCk7CisJCQkJCSBkb3Zhciwgc3RlcCk7 CiAJCX0KIAkgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBN T0RJRllfRVhQUiwgdHlwZSwKIAkJCQkgICAgIGRvdmFyLCB0bXApOwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL25vbi1yZWN0YW5ndWxhci1sb29wLTMu ZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL25vbi1yZWN0YW5ndWxhci1s b29wLTMuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41Yzhl OTI1ODlkYwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv Z29tcC9ub24tcmVjdGFuZ3VsYXItbG9vcC0zLmY5MApAQCAtMCwwICsxLDg1IEBACishIFBS IGZvcnRyYW4vMTA3NDI0CisKK3N1YnJvdXRpbmUgZm9vIChhdiwgYXZvLCBhMCwgYTBvLCBh MSwgYTIsIGEzLCBhNCkKK2ltcGxpY2l0IG5vbmUKKworaW50ZWdlciwgdmFsdWUgOjogYXYK K2ludGVnZXIsIHZhbHVlIDo6IGF2bworaW50ZWdlciA6OiBhMAoraW50ZWdlciA6OiBhMG8K K2ludGVnZXIsIHBvaW50ZXIgOjogYTEKK2ludGVnZXIsIHBvaW50ZXIsIG9wdGlvbmFsIDo6 IGEyCitpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBhMworaW50ZWdlciwgYWxsb2NhdGFibGUs IG9wdGlvbmFsIDo6IGE0CitpbnRlZ2VyIDo6IGE1CitpbnRlZ2VyLCBwb2ludGVyIDo6IGE2 CitpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBhNworCitpbnRlZ2VyIDo6IGoKKworISRvbXAg c2ltZCBjb2xsYXBzZSgyKQorZG8gYXYgPSAxLCAxMCAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5 LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggZHVtbXkt YXJndW1lbnQgb3IgcG9pbnRlciwgb3B0aW9uYWwgb3IgYWxsb2NhdGFibGUgZG8tdmFyaWFi bGUgJ2F2JyIgfQorICBkbyBqID0gYXYsIDIwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9 CisgIGVuZCBkbworZW5kIGRvCisKKyEkb21wIHNpbWQgY29sbGFwc2UoMikKK2RvIGF2byA9 IDEsIDEwICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6IG5vbi1yZWN0 YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBkdW1teS1hcmd1bWVudCBvciBwb2ludGVyLCBvcHRp b25hbCBvciBhbGxvY2F0YWJsZSBkby12YXJpYWJsZSAnYXZvJyIgfQorICBkbyBqID0gYXZv LCAyMCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICBlbmQgZG8KK2VuZCBkbworCish JG9tcCBzaW1kIGNvbGxhcHNlKDIpCitkbyBhMCA9IDEsIDEwICAhIHsgZGctbWVzc2FnZSAi c29ycnksIHVuaW1wbGVtZW50ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBk dW1teS1hcmd1bWVudCBvciBwb2ludGVyLCBvcHRpb25hbCBvciBhbGxvY2F0YWJsZSBkby12 YXJpYWJsZSAnYTAnIiB9CisgIGRvIGogPSBhMCwgMjAgICEgeyBkZy1ub3RlICJVc2VkIGhl cmUiIH0KKyAgZW5kIGRvCitlbmQgZG8KKworISRvbXAgc2ltZCBjb2xsYXBzZSgyKQorZG8g YTBvID0gMSwgMTAgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9u LXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIGR1bW15LWFyZ3VtZW50IG9yIHBvaW50ZXIs IG9wdGlvbmFsIG9yIGFsbG9jYXRhYmxlIGRvLXZhcmlhYmxlICdhMG8nIiB9CisgIGRvIGog PSBhMG8sIDIwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgIGVuZCBkbworZW5kIGRv CisKKyEkb21wIHNpbWQgY29sbGFwc2UoMikKK2RvIGExID0gMSwgMTAgICEgeyBkZy1tZXNz YWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3 aXRoIGR1bW15LWFyZ3VtZW50IG9yIHBvaW50ZXIsIG9wdGlvbmFsIG9yIGFsbG9jYXRhYmxl IGRvLXZhcmlhYmxlICdhMSciIH0KKyAgZG8gaiA9IGExLCAyMCAgISB7IGRnLW5vdGUgIlVz ZWQgaGVyZSIgfQorICBlbmQgZG8KK2VuZCBkbworCishJG9tcCBzaW1kIGNvbGxhcHNlKDIp CitkbyBhMiA9IDEsIDEwICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6 IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBkdW1teS1hcmd1bWVudCBvciBwb2lu dGVyLCBvcHRpb25hbCBvciBhbGxvY2F0YWJsZSBkby12YXJpYWJsZSAnYTInIiB9CisgIGRv IGogPSBhMiwgMjAgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUiIH0KKyAgZW5kIGRvCitlbmQg ZG8KKworISRvbXAgc2ltZCBjb2xsYXBzZSgyKQorZG8gYTMgPSAxLCAxMCAgISB7IGRnLW1l c3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0 IHdpdGggZHVtbXktYXJndW1lbnQgb3IgcG9pbnRlciwgb3B0aW9uYWwgb3IgYWxsb2NhdGFi bGUgZG8tdmFyaWFibGUgJ2EzJyIgfQorICBkbyBqID0gYTMsIDIwICAhIHsgZGctbm90ZSAi VXNlZCBoZXJlIiB9CisgIGVuZCBkbworZW5kIGRvCisKKyEkb21wIHNpbWQgY29sbGFwc2Uo MikKK2RvIGE0ID0gMSwgMTAgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRl ZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIGR1bW15LWFyZ3VtZW50IG9yIHBv aW50ZXIsIG9wdGlvbmFsIG9yIGFsbG9jYXRhYmxlIGRvLXZhcmlhYmxlICdhNCciIH0KKyAg ZG8gaiA9IGE0LCAyMCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICBlbmQgZG8KK2Vu ZCBkbworCishJG9tcCBzaW1kIGNvbGxhcHNlKDIpCitkbyBhNSA9IDEsIDEwCisgIGRvIGog PSBhNSwgMjAKKyAgZW5kIGRvCitlbmQgZG8KKworISRvbXAgc2ltZCBjb2xsYXBzZSgyKQor ZG8gYTYgPSAxLCAxMCAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBu b24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggZHVtbXktYXJndW1lbnQgb3IgcG9pbnRl ciwgb3B0aW9uYWwgb3IgYWxsb2NhdGFibGUgZG8tdmFyaWFibGUgJ2E2JyIgfQorICBkbyBq ID0gYTYsIDIwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgIGVuZCBkbworZW5kIGRv CisKKyEkb21wIHNpbWQgY29sbGFwc2UoMikKK2RvIGE3ID0gMSwgMTAgICEgeyBkZy1tZXNz YWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3 aXRoIGR1bW15LWFyZ3VtZW50IG9yIHBvaW50ZXIsIG9wdGlvbmFsIG9yIGFsbG9jYXRhYmxl IGRvLXZhcmlhYmxlICdhNyciIH0KKyAgZG8gaiA9IGE3LCAyMCAgISB7IGRnLW5vdGUgIlVz ZWQgaGVyZSIgfQorICBlbmQgZG8KK2VuZCBkbworZW5kCmRpZmYgLS1naXQgYS9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbm9uLXJlY3Rhbmd1bGFyLWxvb3AtMS5mOTAg Yi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbm9uLXJlY3Rhbmd1bGFyLWxv b3AtMS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk5YmZh MWEwYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5m b3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTEuZjkwCkBAIC0wLDAgKzEsNjM3IEBACish IHsgZGctZG8gcnVuIH0KKyEgeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tc3NlMiIgeyB0 YXJnZXQgc3NlMl9ydW50aW1lIH0gfQorISB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1h dngiIHsgdGFyZ2V0IGF2eF9ydW50aW1lIH0gfQorCishIFBSIGZvcnRyYW4vMTA3NDI0CisK KyEgTm9ucmVjdGFuZ3VsYXIgbG9vcCBuZXN0cyBjaGVja3MKKworISBTZWUgUFIgb3Igbm9u LXJlY3Rhbmd1bGFyLWxvb3AtMWEuZjkwIGZvciB0aGUgY29tbWVudGVkIHRlc3RzCishIEhp bnQ6IFRob3NlIHVzZSBzdHJpZGVzIGZvciBsb29wIHZhcnMgcGFydCBvZiBub25yZWN0YW5n dWxhciBsb29wIG5lc3RzCisKK21vZHVsZSBtCisgIGltcGxpY2l0IG5vbmUgKHR5cGUsIGV4 dGVybmFsKQorY29udGFpbnMKKworISBUaGUgJ2snIGxvb3AgdXNlcyBpIG9yIGogYXMgc3Rh cnQgdmFsdWUKKyEgYnV0IGEgY29uc3RhbnQgZW5kIHZhbHVlIHN1Y2ggdGhhdCAnbGFzdHBy aXZhdGUnCishIHNob3VsZCBiZSB3ZWxsLWRlZmluZWQKK3N1YnJvdXRpbmUgbGFzdHByaXZh dGVfY2hlY2tfc2ltZF8xCisgIGludGVnZXIgOjogbixtLHAsIGksaixrCisKKyAgbiA9IDEx CisgIG0gPSAyMworICBwID0gMjcKKworICAhIFVzZSAnaScgb3IgJ2onLCB1bml0ZSBzdHJp ZGUgb24gJ2knIG9yIG9uICdqJyAtPiA0IGxvb3BzCisgICEgVGhlbiBzYW1lLCBleGVjcHQg dXNlIG5vbnVuaXQgc3RyaWRlIGZvciAnaycKKworISAgISRvbXAgc2ltZCBjb2xsYXBzZSgz KSBsYXN0cHJpdmF0ZShrKQorISAgZG8gaSA9IDEsIG4KKyEgICAgZG8gaiA9IDEsIG0sIDIK KyEgICAgICBkbyBrID0gaiAtIDQxLCBwCishICAgICAgICBpZiAoayA8IDEgLSA0MSAub3Iu IGsgPiBwKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCishICAgIGVuZCBkbworISAgZW5k IGRvCishICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCishICAhJG9tcCBzaW1kIGNv bGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCishICBkbyBpID0gMSwgbiwgMgorISAgICBkbyBq ID0gMSwgbQorISAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyEgICAgICAgIGlmIChrIDwgMSAt IDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyEgICAgICBlbmQgZG8KKyEgICAgZW5kIGRv CishICBlbmQgZG8KKyEgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAg c2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorICBkbyBpID0gMSwgbiwgMgorICAg IGRvIGogPSAxLCBtCisgICAgICBkbyBrID0gaiAtIDQxLCBwCisgICAgICAgIGlmIChrIDwg MSAtIDQxIC5vci4gayA+IHApIHRoZW4KKyAgICAgICAgICBwcmludCAqLCBpLCBqLCBrLHAs ICIgLT4gaSwgaiwgaywgcCAgIChrIDwgMSAtIDQxIC5vci4gayA+IHApIgorICAgICAgICAg IGVycm9yIHN0b3AKKyAgICAgICAgZW5kIGlmCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8K KyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2lt ZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorICBkbyBpID0gMSwgbgorICAgIGRvIGog PSAxLCBtLCAyCisgICAgICBkbyBrID0gaSAtIDQxLCBwCisgICAgICAgIGlmIChrIDwgMSAt IDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbwor ICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhIFNhbWUgYnV0 ICdwcml2YXRlJyBmb3IgYWxsIChpLGopIHZhcnMKKworISAgISRvbXAgc2ltZCBjb2xsYXBz ZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikKKyEgIGRvIGkgPSAxLCBuCishICAg IGRvIGogPSAxLCBtLCAyCishICAgICAgZG8gayA9IGogLSA0MSwgcAorISAgICAgICAgaWYg KGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVuZCBkbworISAg ICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKyEK KyEgICEkb21wIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgcHJpdmF0ZShpLGop CishICBkbyBpID0gMSwgbiwgMgorISAgICBkbyBqID0gMSwgbQorISAgICAgIGRvIGsgPSBp IC0gNDEsIHAKKyEgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0 b3AKKyEgICAgICBlbmQgZG8KKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyEgIGlmIChrIC89 IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJp dmF0ZShrKSBwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4sIDIKKyAgICBkbyBqID0gMSwg bQorICAgICAgZG8gayA9IGogLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3Iu IGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBz ZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbSwgMgorICAgICAgZG8gayA9IGkgLSA0MSwgcAorICAgICAgICBpZiAoayA8 IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQg ZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISBTYW1l IC0gYnV0IHdpdGggbGFzdHByaXZhdGUoaSxqKQorCishICAhJG9tcCBzaW1kIGNvbGxhcHNl KDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikKKyEgIGRvIGkgPSAxLCBuCish ICAgIGRvIGogPSAxLCBtLCAyCishICAgICAgZG8gayA9IGogLSA0MSwgcAorISAgICAgICAg aWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVuZCBkbwor ISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AK KyEgIGlmIChpIC89IG4gKyAxIC5vci4gaiAvPSBtICsgMikgZXJyb3Igc3RvcAorCishICAh JG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikK KyEgIGRvIGkgPSAxLCBuLCAyCishICAgIGRvIGogPSAxLCBtCishICAgICAgZG8gayA9IGkg LSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3Rv cAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0g cCArIDEpIGVycm9yIHN0b3AKKyEgIGlmIChpIC89IG4gKyAyIC5vci4gaiAvPSBtICsgMSkg ZXJyb3Igc3RvcAorCisgICEkb21wIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykg bGFzdHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMgorICAgIGRvIGogPSAxLCBtCisg ICAgICBkbyBrID0gaiAtIDQxLCBwCisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+ IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAg aWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKyAgaWYgKGkgLz0gbiArIDIgLm9yLiBqIC89 IG0gKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJp dmF0ZShrKSBsYXN0cHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEs IG0sIDIKKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyAgICAgICAgaWYgKGsgPCAxIC0gNDEg Lm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVu ZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorICBpZiAoaSAvPSBuICsgMSAu b3IuIGogLz0gbSArIDIpIGVycm9yIHN0b3AKK2VuZCBzdWJyb3V0aW5lIGxhc3Rwcml2YXRl X2NoZWNrX3NpbWRfMQorCisKKyEgU2FtZSBidXQgd2l0aCBkbyBzaW1kCitzdWJyb3V0aW5l IGxhc3Rwcml2YXRlX2NoZWNrX2RvX3NpbWRfMQorICBpbnRlZ2VyIDo6IG4sbSxwLCBpLGos aworCisgIG4gPSAxMQorICBtID0gMjMKKyAgcCA9IDI3CisKKyAgISBVc2UgJ2knIG9yICdq JywgdW5pdGUgc3RyaWRlIG9uICdpJyBvciBvbiAnaicgLT4gNCBsb29wcworICAhIFRoZW4g c2FtZSwgZXhlY3B0IHVzZSBub251bml0IHN0cmlkZSBmb3IgJ2snCisKKyEgICEkb21wIHBh cmFsbGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKKyEgIGRvIGkgPSAx LCBuCishICAgIGRvIGogPSAxLCBtLCAyCishICAgICAgZG8gayA9IGogLSA0MSwgcAorISAg ICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVu ZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEpIGVycm9y IHN0b3AKKworISAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJp dmF0ZShrKQorISAgZG8gaSA9IDEsIG4sIDIKKyEgICAgZG8gaiA9IDEsIG0KKyEgICAgICBk byBrID0gaSAtIDQxLCBwCishICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBl cnJvciBzdG9wCishICAgICAgZW5kIGRvCishICAgIGVuZCBkbworISAgZW5kIGRvCishICBp ZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVsIGRvIHNpbWQg Y29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKKyAgZG8gaSA9IDEsIG4sIDIKKyAgICBkbyBq ID0gMSwgbQorICAgICAgZG8gayA9IGogLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0 MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAg ZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFyYWxs ZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorICBkbyBpID0gMSwgbgor ICAgIGRvIGogPSAxLCBtLCAyCisgICAgICBkbyBrID0gaSAtIDQxLCBwCisgICAgICAgIGlm IChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAg IGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAh IFNhbWUgYnV0ICdwcml2YXRlJyBmb3IgYWxsIChpLGopIHZhcnMKKworISAgISRvbXAgcGFy YWxsZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikK KyEgIGRvIGkgPSAxLCBuCishICAgIGRvIGogPSAxLCBtLCAyCishICAgICAgZG8gayA9IGog LSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3Rv cAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0g cCArIDEpIGVycm9yIHN0b3AKKworISAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBz ZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikKKyEgIGRvIGkgPSAxLCBuLCAyCish ICAgIGRvIGogPSAxLCBtCishICAgICAgZG8gayA9IGkgLSA0MSwgcAorISAgICAgICAgaWYg KGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVuZCBkbworISAg ICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKwor ICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIHBy aXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMgorICAgIGRvIGogPSAxLCBtCisgICAgICBk byBrID0gaiAtIDQxLCBwCisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVy cm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsg Lz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNvbGxh cHNlKDMpIGxhc3Rwcml2YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBtLCAyCisgICAgICBkbyBrID0gaSAtIDQxLCBwCisgICAgICAgIGlmIChr IDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVu ZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhIFNh bWUgLSBidXQgd2l0aCBsYXN0cHJpdmF0ZShpLGopCisKKyEgICEkb21wIHBhcmFsbGVsIGRv IHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQorISAg ZG8gaSA9IDEsIG4KKyEgICAgZG8gaiA9IDEsIG0sIDIKKyEgICAgICBkbyBrID0gaiAtIDQx LCBwCishICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCish ICAgICAgZW5kIGRvCishICAgIGVuZCBkbworISAgZW5kIGRvCishICBpZiAoayAvPSBwICsg MSkgZXJyb3Igc3RvcAorISAgaWYgKGkgLz0gbiArIDEgLm9yLiBqIC89IG0gKyAyKSBlcnJv ciBzdG9wCisKKyEgICEkb21wIHBhcmFsbGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHBy aXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQorISAgZG8gaSA9IDEsIG4sIDIKKyEgICAgZG8g aiA9IDEsIG0KKyEgICAgICBkbyBrID0gaSAtIDQxLCBwCishICAgICAgICBpZiAoayA8IDEg LSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCishICAgIGVuZCBk bworISAgZW5kIGRvCishICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorISAgaWYgKGkg Lz0gbiArIDIgLm9yLiBqIC89IG0gKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFyYWxs ZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLGop CisgIGRvIGkgPSAxLCBuLCAyCisgICAgZG8gaiA9IDEsIG0KKyAgICAgIGRvIGsgPSBqIC0g NDEsIHAKKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAor ICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkg ZXJyb3Igc3RvcAorICBpZiAoaSAvPSBuICsgMiAub3IuIGogLz0gbSArIDEpIGVycm9yIHN0 b3AKKworICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRl KGspIGxhc3Rwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwg MgorICAgICAgZG8gayA9IGkgLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3Iu IGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisgIGlmIChpIC89IG4gKyAxIC5vci4g aiAvPSBtICsgMikgZXJyb3Igc3RvcAorZW5kIHN1YnJvdXRpbmUgbGFzdHByaXZhdGVfY2hl Y2tfZG9fc2ltZF8xCisKKworCishIFNhbWUgYnV0IHdpdGggZG8KK3N1YnJvdXRpbmUgbGFz dHByaXZhdGVfY2hlY2tfZG9fMQorICBpbnRlZ2VyIDo6IG4sbSxwLCBpLGosaworCisgIG4g PSAxMQorICBtID0gMjMKKyAgcCA9IDI3CisKKyAgISBVc2UgJ2knIG9yICdqJywgdW5pdGUg c3RyaWRlIG9uICdpJyBvciBvbiAnaicgLT4gNCBsb29wcworICAhIFRoZW4gc2FtZSwgZXhl Y3B0IHVzZSBub251bml0IHN0cmlkZSBmb3IgJ2snCisKKyEgICEkb21wIHBhcmFsbGVsIGRv IGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCishICBkbyBpID0gMSwgbgorISAgICBkbyBq ID0gMSwgbSwgMgorISAgICAgIGRvIGsgPSBqIC0gNDEsIHAKKyEgICAgICAgIGlmIChrIDwg MSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyEgICAgICBlbmQgZG8KKyEgICAgZW5k IGRvCishICBlbmQgZG8KKyEgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyEgICEk b21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCishICBkbyBpID0g MSwgbiwgMgorISAgICBkbyBqID0gMSwgbQorISAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyEg ICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyEgICAgICBl bmQgZG8KKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyEgIGlmIChrIC89IHAgKyAxKSBlcnJv ciBzdG9wCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUo aykKKyAgZG8gaSA9IDEsIG4sIDIKKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8gayA9IGog LSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9w CisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAx KSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHBy aXZhdGUoaykKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMgorICAgICAgZG8g ayA9IGkgLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJv ciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89 IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISBTYW1lIGJ1dCAncHJpdmF0ZScgZm9yIGFsbCAo aSxqKSB2YXJzCisKKyEgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2 YXRlKGspIHByaXZhdGUoaSxqKQorISAgZG8gaSA9IDEsIG4KKyEgICAgZG8gaiA9IDEsIG0s IDIKKyEgICAgICBkbyBrID0gaiAtIDQxLCBwCishICAgICAgICBpZiAoayA8IDEgLSA0MSAu b3IuIGsgPiBwKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCishICAgIGVuZCBkbworISAg ZW5kIGRvCishICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCishICAhJG9tcCBwYXJh bGxlbCBkbyBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikKKyEgIGRv IGkgPSAxLCBuLCAyCishICAgIGRvIGogPSAxLCBtCishICAgICAgZG8gayA9IGkgLSA0MSwg cAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAg ICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEp IGVycm9yIHN0b3AKKworICAhJG9tcCBwYXJhbGxlbCBkbyBjb2xsYXBzZSgzKSBsYXN0cHJp dmF0ZShrKSBwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4sIDIKKyAgICBkbyBqID0gMSwg bQorICAgICAgZG8gayA9IGogLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3Iu IGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFyYWxsZWwgZG8g Y29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgcHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBu CisgICAgZG8gaiA9IDEsIG0sIDIKKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyAgICAgICAg aWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisg ICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisg ICEgU2FtZSAtIGJ1dCB3aXRoIGxhc3Rwcml2YXRlKGksaikKKworISAgISRvbXAgcGFyYWxs ZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQorISAg ZG8gaSA9IDEsIG4KKyEgICAgZG8gaiA9IDEsIG0sIDIKKyEgICAgICBkbyBrID0gaiAtIDQx LCBwCishICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCish ICAgICAgZW5kIGRvCishICAgIGVuZCBkbworISAgZW5kIGRvCishICBpZiAoayAvPSBwICsg MSkgZXJyb3Igc3RvcAorISAgaWYgKGkgLz0gbiArIDEgLm9yLiBqIC89IG0gKyAyKSBlcnJv ciBzdG9wCisKKyEgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRl KGspIGxhc3Rwcml2YXRlKGksaikKKyEgIGRvIGkgPSAxLCBuLCAyCishICAgIGRvIGogPSAx LCBtCishICAgICAgZG8gayA9IGkgLSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEg Lm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEg IGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKyEgIGlmIChpIC89IG4g KyAyIC5vci4gaiAvPSBtICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVsIGRv IGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikKKyAgZG8gaSA9 IDEsIG4sIDIKKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8gayA9IGogLSA0MSwgcAorICAg ICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQg ZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9w CisgIGlmIChpIC89IG4gKyAyIC5vci4gaiAvPSBtICsgMSkgZXJyb3Igc3RvcAorCisgICEk b21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRl KGksaikKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMgorICAgICAgZG8gayA9 IGkgLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBz dG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAg KyAxKSBlcnJvciBzdG9wCisgIGlmIChpIC89IG4gKyAxIC5vci4gaiAvPSBtICsgMikgZXJy b3Igc3RvcAorZW5kIHN1YnJvdXRpbmUgbGFzdHByaXZhdGVfY2hlY2tfZG9fMQorCisKKwor c3Vicm91dGluZSBsYXN0cHJpdmF0ZV9jaGVja18yCisgIGludGVnZXIgOjogbixtLHAsIGks aixrLGxsCisKKyAgbiA9IDExCisgIG0gPSAyMworICBwID0gMjcKKworISAgISRvbXAgcGFy YWxsZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShwKQorISAgZG8gaSA9IDEs IG4KKyEgICAgZG8gaiA9IDEsIG0sMgorISAgICAgIGRvIGsgPSAxLCBqICsgNDEKKyEgICAg ICAgIGRvIGxsID0gMSwgcCwgMgorISAgICAgICAgICBpZiAoayA+IDIzICsgNDEgLm9yLiBr IDwgMSkgZXJyb3Igc3RvcAorISAgICAgICAgZW5kIGRvCishICAgICAgZW5kIGRvCishICAg IGVuZCBkbworISAgZW5kIGRvCishICBpZiAobGwgLz0gMjkpIGVycm9yIHN0b3AKKworISAg ISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShwKQorISAgZG8gaSA9IDEsIG4K KyEgICAgZG8gaiA9IDEsIG0sMgorISAgICAgIGRvIGsgPSAxLCBqICsgNDEKKyEgICAgICAg IGRvIGxsID0gMSwgcCwgMgorISAgICAgICAgICBpZiAoayA+IDIzICsgNDEgLm9yLiBrIDwg MSkgZXJyb3Igc3RvcAorISAgICAgICAgZW5kIGRvCishICAgICAgZW5kIGRvCishICAgIGVu ZCBkbworISAgZW5kIGRvCishICBpZiAobGwgLz0gMjkpIGVycm9yIHN0b3AKKworISAgISRv bXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorISAgZG8gaSA9IDEsIG4sMgor ISAgICBkbyBqID0gMSwgbQorISAgICAgIGRvIGsgPSAxLCBpICsgNDEKKyEgICAgICAgIGlm IChrID4gMTEgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCish ICAgIGVuZCBkbworISAgZW5kIGRvCishaWYgKGsgLz0gNTMpIHRoZW4KKyEgIHByaW50ICos IGssIDUzCishICBlcnJvciBzdG9wCishZW5kaWYKKworISRvbXAgc2ltZCBjb2xsYXBzZSgz KSBsYXN0cHJpdmF0ZShrKQorZG8gaSA9IDEsIG4sMgorICBkbyBqID0gMSwgbQorICAgIGRv IGsgPSAxLCBqICsgNDEKKyAgICAgIGlmIChrID4gMjMgKyA0MSAub3IuIGsgPCAxKSBlcnJv ciBzdG9wCisgICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGRvCitpZiAoayAvPSA2NSkgdGhl bgorICBwcmludCAqLCBrLCA2NQorICBlcnJvciBzdG9wCitlbmRpZgorCisKKyEkb21wIHNp bWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKK2RvIGkgPSAxLCBuCisgIGRvIGogPSAx LCBtLDIKKyAgICBkbyBrID0gMSwgaSArIDQxCisgICAgICBpZiAoayA+IDExICsgNDEgLm9y LiBrIDwgMSkgZXJyb3Igc3RvcAorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZCBkbworaWYg KGsgLz0gNTMpIHRoZW4KKyAgcHJpbnQgKiwgaywgNTMKKyAgZXJyb3Igc3RvcAorZW5kaWYK KworISAtIFNhbWUgYnV0IHdpdGhvdXQgJ3ByaXZhdGUnOgorISEkb21wIHNpbWQgY29sbGFw c2UoMykgbGFzdHByaXZhdGUoaykKKyFkbyBpID0gMSwgbgorISAgZG8gaiA9IDEsIG0sMgor ISAgICBkbyBrID0gMSwgaiArIDQxCishICAgICAgaWYgKGsgPiAyMyArIDQxIC5vci4gayA8 IDEpIGVycm9yIHN0b3AKKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyFlbmQgZG8KKyFpZiAo ayAvPSA2NSkgdGhlbgorISAgcHJpbnQgKiwgaywgNjUKKyEgIGVycm9yIHN0b3AKKyFlbmRp ZgorCisKKyEhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCishZG8gaSA9 IDEsIG4sMgorISAgZG8gaiA9IDEsIG0KKyEgICAgZG8gayA9IDEsIGkgKyA0MQorISAgICAg IGlmIChrID4gMTEgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCishICAgIGVuZCBkbwor ISAgZW5kIGRvCishZW5kIGRvCishaWYgKGsgLz0gNTMpIHRoZW4KKyEgIHByaW50ICosIGss IDUzCishICBlcnJvciBzdG9wCishZW5kaWYKKworISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBs YXN0cHJpdmF0ZShrKQorZG8gaSA9IDEsIG4sMgorICBkbyBqID0gMSwgbQorICAgIGRvIGsg PSAxLCBqICsgNDEKKyAgICAgIGlmIChrID4gMjMgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBz dG9wCisgICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGRvCitpZiAoayAvPSA2NSkgdGhlbgor ICBwcmludCAqLCBrLCA2NQorICBlcnJvciBzdG9wCitlbmRpZgorCisKKyEkb21wIHNpbWQg Y29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKK2RvIGkgPSAxLCBuCisgIGRvIGogPSAxLCBt LDIKKyAgICBkbyBrID0gMSwgaSArIDQxCisgICAgICBpZiAoayA+IDExICsgNDEgLm9yLiBr IDwgMSkgZXJyb3Igc3RvcAorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZCBkbworaWYgKGsg Lz0gNTMpIHRoZW4KKyAgcHJpbnQgKiwgaywgNTMKKyAgZXJyb3Igc3RvcAorZW5kaWYKKwor ISAtIGFsbCB3aXRoIGxhc3Rwcml2YXRlCishISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0 cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLCBqKQorIWRvIGkgPSAxLCBuCishICBkbyBqID0g MSwgbSwyCishICAgIGRvIGsgPSAxLCBqICsgNDEKKyEgICAgICBpZiAoayA+IDIzICsgNDEg Lm9yLiBrIDwgMSkgZXJyb3Igc3RvcAorISAgICBlbmQgZG8KKyEgIGVuZCBkbworIWVuZCBk bworIWlmIChrIC89IDY1KSB0aGVuCishICBwcmludCAqLCBrLCA2NQorISAgZXJyb3Igc3Rv cAorIWVuZGlmCisKKworISEkb21wIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykg bGFzdHByaXZhdGUoaSwgaikKKyFkbyBpID0gMSwgbiwyCishICBkbyBqID0gMSwgbQorISAg ICBkbyBrID0gMSwgaSArIDQxCishICAgICAgaWYgKGsgPiAxMSArIDQxIC5vci4gayA8IDEp IGVycm9yIHN0b3AKKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyFlbmQgZG8KKyFpZiAoayAv PSA1MykgdGhlbgorISAgcHJpbnQgKiwgaywgNTMKKyEgIGVycm9yIHN0b3AKKyFlbmRpZgor CishJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGks IGopCitkbyBpID0gMSwgbiwyCisgIGRvIGogPSAxLCBtCisgICAgZG8gayA9IDEsIGogKyA0 MQorICAgICAgaWYgKGsgPiAyMyArIDQxIC5vci4gayA8IDEpIGVycm9yIHN0b3AKKyAgICBl bmQgZG8KKyAgZW5kIGRvCitlbmQgZG8KK2lmIChrIC89IDY1KSB0aGVuCisgIHByaW50ICos IGssIDY1CisgIGVycm9yIHN0b3AKK2VuZGlmCisKKworISRvbXAgc2ltZCBjb2xsYXBzZSgz KSBsYXN0cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLCBqKQorZG8gaSA9IDEsIG4KKyAgZG8g aiA9IDEsIG0sMgorICAgIGRvIGsgPSAxLCBpICsgNDEKKyAgICAgIGlmIChrID4gMTEgKyA0 MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCisgICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGRv CitpZiAoayAvPSA1MykgdGhlbgorICBwcmludCAqLCBrLCA1MworICBlcnJvciBzdG9wCitl bmRpZgorCitlbmQKK2VuZCBtb2R1bGUgbQorCitwcm9ncmFtIG1haW4KKyAgdXNlIG0KKyAg aW1wbGljaXQgbm9uZSAodHlwZSwgZXh0ZXJuYWwpCisgIGNhbGwgbGFzdHByaXZhdGVfY2hl Y2tfc2ltZF8xCisgIGNhbGwgbGFzdHByaXZhdGVfY2hlY2tfZG9fc2ltZF8xCisgIGNhbGwg bGFzdHByaXZhdGVfY2hlY2tfZG9fMQorICBjYWxsIGxhc3Rwcml2YXRlX2NoZWNrXzIKK2Vu ZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1y ZWN0YW5ndWxhci1sb29wLTFhLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9y dHJhbi9ub24tcmVjdGFuZ3VsYXItbG9vcC0xYS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjk2MDdmY2MxMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGli Z29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTFh LmY5MApAQCAtMCwwICsxLDM3NCBAQAorISB7IGRnLWRvIGNvbXBpbGUgfQorISB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLW1zc2UyIiB7IHRhcmdldCBzc2UyX3J1bnRpbWUgfSB9Cish IHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUg fSB9CisKKyEgUFIgZm9ydHJhbi8xMDc0MjQKKworISBOb25yZWN0YW5ndWxhciBsb29wIG5l c3RzIGNoZWNrcworCishID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CishIE5PVEU6IFRoZSB0ZXN0Y2FzZXMgYXJlIGZyb20gbm9u LXJlY3Rhbmd1bGFyLWxvb3AtMS5mOTAsCishIGJ1dCBjb21tZW50ZWQgdGhlcmUuIEZlZWwg ZnJlZSB0byByZW1vdmUgdGhpcworISBmaWxlICsgdW5jb21tZW50IHRoZW0gaW4gbm9uLXJl Y3Rhbmd1bGFyLWxvb3AtMS5mOTAKKyEgT3RoZXJ3aXNlLCB5b3UgbmVlZCB0byBjaGFuZ2Ug aXQgdG8gJ2RnLWRvIHJ1bichCishID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisKK21vZHVsZSBtCisgIGltcGxpY2l0IG5vbmUg KHR5cGUsIGV4dGVybmFsKQorY29udGFpbnMKKworISBUaGUgJ2snIGxvb3AgdXNlcyBpIG9y IGogYXMgc3RhcnQgdmFsdWUKKyEgYnV0IGEgY29uc3RhbnQgZW5kIHZhbHVlIHN1Y2ggdGhh dCAnbGFzdHByaXZhdGUnCishIHNob3VsZCBiZSB3ZWxsLWRlZmluZWQKK3N1YnJvdXRpbmUg bGFzdHByaXZhdGVfY2hlY2tfc2ltZF8xCisgIGludGVnZXIgOjogbixtLHAsIGksaixrCisK KyAgbiA9IDExCisgIG0gPSAyMworICBwID0gMjcKKworICAhIFVzZSAnaScgb3IgJ2onLCB1 bml0ZSBzdHJpZGUgb24gJ2knIG9yIG9uICdqJyAtPiA0IGxvb3BzCisgICEgVGhlbiBzYW1l LCBleGVjcHQgdXNlIG5vbnVuaXQgc3RyaWRlIGZvciAnaycKKworICAhJG9tcCBzaW1kIGNv bGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEs IG0sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rh bmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3AgaXRlcmF0aW9uIHN0ZXAgZm9y ICdqJyIgfQorICAgICAgZG8gayA9IGogLSA0MSwgcCAgISB7IGRnLW5vdGUgIlVzZWQgaGVy ZSIgfQorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisg ICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBl cnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQor ICBkbyBpID0gMSwgbiwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVk OiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVyYXRp b24gc3RlcCBmb3IgJ2knIiB9CisgICAgZG8gaiA9IDEsIG0KKyAgICAgIGRvIGsgPSBpIC0g NDEsIHAgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0g NDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisg IGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEgU2FtZSBidXQg J3ByaXZhdGUnIGZvciBhbGwgKGksaikgdmFycworCisgICEkb21wIHNpbWQgY29sbGFwc2Uo MykgbGFzdHByaXZhdGUoaykgcHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuCisgICAgZG8g aiA9IDEsIG0sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9u LXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3AgaXRlcmF0aW9uIHN0 ZXAgZm9yICdqJyIgfQorICAgICAgZG8gayA9IGogLSA0MSwgcCAgISB7IGRnLW5vdGUgIlVz ZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBz dG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAg KyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0 ZShrKSBwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4sIDIgICEgeyBkZy1tZXNzYWdlICJz b3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5v bi11bml0IGxvb3AgaXRlcmF0aW9uIHN0ZXAgZm9yICdpJyIgfQorICAgIGRvIGogPSAxLCBt CisgICAgICBkbyBrID0gaSAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9Cisg ICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVu ZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0 b3AKKworICAhIFNhbWUgLSBidXQgd2l0aCBsYXN0cHJpdmF0ZShpLGopCisKKyAgISRvbXAg c2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLGopCisgIGRv IGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG0sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwg dW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0 IGxvb3AgaXRlcmF0aW9uIHN0ZXAgZm9yICdqJyIgfQorICAgICAgZG8gayA9IGogLSA0MSwg cCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA8IDEgLSA0MSAu b3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5k IGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisgIGlmIChpIC89IG4gKyAxIC5v ci4gaiAvPSBtICsgMikgZXJyb3Igc3RvcAorCisgICEkb21wIHNpbWQgY29sbGFwc2UoMykg bGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMiAgISB7 IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9v cCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVyYXRpb24gc3RlcCBmb3IgJ2knIiB9Cisg ICAgZG8gaiA9IDEsIG0KKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAgICEgeyBkZy1ub3RlICJV c2VkIGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Ig c3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBw ICsgMSkgZXJyb3Igc3RvcAorICBpZiAoaSAvPSBuICsgMiAub3IuIGogLz0gbSArIDEpIGVy cm9yIHN0b3AKKworZW5kIHN1YnJvdXRpbmUgbGFzdHByaXZhdGVfY2hlY2tfc2ltZF8xCisK KworISBTYW1lIGJ1dCB3aXRoIGRvIHNpbWQKK3N1YnJvdXRpbmUgbGFzdHByaXZhdGVfY2hl Y2tfZG9fc2ltZF8xCisgIGludGVnZXIgOjogbixtLHAsIGksaixrCisKKyAgbiA9IDExCisg IG0gPSAyMworICBwID0gMjcKKworICAhIFVzZSAnaScgb3IgJ2onLCB1bml0ZSBzdHJpZGUg b24gJ2knIG9yIG9uICdqJyAtPiA0IGxvb3BzCisgICEgVGhlbiBzYW1lLCBleGVjcHQgdXNl IG5vbnVuaXQgc3RyaWRlIGZvciAnaycKKworICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNv bGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEs IG0sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rh bmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3AgaXRlcmF0aW9uIHN0ZXAgZm9y ICdqJyIgfQorICAgICAgZG8gayA9IGogLSA0MSwgcCAgISB7IGRnLW5vdGUgIlVzZWQgaGVy ZSIgfQorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisg ICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBl cnJvciBzdG9wCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0 cHJpdmF0ZShrKQorICBkbyBpID0gMSwgbiwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1 bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQg bG9vcCBpdGVyYXRpb24gc3RlcCBmb3IgJ2knIiB9CisgICAgZG8gaiA9IDEsIG0KKyAgICAg IGRvIGsgPSBpIC0gNDEsIHAgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUiIH0KKyAgICAgICAg aWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisg ICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisg ICEgU2FtZSBidXQgJ3ByaXZhdGUnIGZvciBhbGwgKGksaikgdmFycworCisgICEkb21wIHBh cmFsbGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgcHJpdmF0ZShpLGop CisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG0sIDIgICEgeyBkZy1tZXNzYWdlICJz b3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5v bi11bml0IGxvb3AgaXRlcmF0aW9uIHN0ZXAgZm9yICdqJyIgfQorICAgICAgZG8gayA9IGog LSA0MSwgcCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA8IDEg LSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8K KyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFy YWxsZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikK KyAgZG8gaSA9IDEsIG4sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRl ZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3AgaXRlcmF0 aW9uIHN0ZXAgZm9yICdpJyIgfQorICAgIGRvIGogPSAxLCBtCisgICAgICBkbyBrID0gaSAt IDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgICAgICAgIGlmIChrIDwgMSAt IDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbwor ICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhIFNhbWUgLSBi dXQgd2l0aCBsYXN0cHJpdmF0ZShpLGopCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBj b2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLGopCisgIGRvIGkgPSAx LCBuCisgICAgZG8gaiA9IDEsIG0sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBs ZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3Ag aXRlcmF0aW9uIHN0ZXAgZm9yICdqJyIgfQorICAgICAgZG8gayA9IGogLSA0MSwgcCAgISB7 IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsg PiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisg IGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisgIGlmIChpIC89IG4gKyAxIC5vci4gaiAv PSBtICsgMikgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVsIGRvIHNpbWQgY29sbGFw c2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwg MiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3Vs YXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVyYXRpb24gc3RlcCBmb3IgJ2kn IiB9CisgICAgZG8gaiA9IDEsIG0KKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAgICEgeyBkZy1u b3RlICJVc2VkIGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkg ZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAo ayAvPSBwICsgMSkgZXJyb3Igc3RvcAorICBpZiAoaSAvPSBuICsgMiAub3IuIGogLz0gbSAr IDEpIGVycm9yIHN0b3AKKworZW5kIHN1YnJvdXRpbmUgbGFzdHByaXZhdGVfY2hlY2tfZG9f c2ltZF8xCisKKworCishIFNhbWUgYnV0IHdpdGggZG8KK3N1YnJvdXRpbmUgbGFzdHByaXZh dGVfY2hlY2tfZG9fMQorICBpbnRlZ2VyIDo6IG4sbSxwLCBpLGosaworCisgIG4gPSAxMQor ICBtID0gMjMKKyAgcCA9IDI3CisKKyAgISBVc2UgJ2knIG9yICdqJywgdW5pdGUgc3RyaWRl IG9uICdpJyBvciBvbiAnaicgLT4gNCBsb29wcworICAhIFRoZW4gc2FtZSwgZXhlY3B0IHVz ZSBub251bml0IHN0cmlkZSBmb3IgJ2snCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFw c2UoMykgbGFzdHByaXZhdGUoaykKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwg MiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3Vs YXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVyYXRpb24gc3RlcCBmb3IgJ2on IiB9CisgICAgICBkbyBrID0gaiAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9 CisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAg IGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9y IHN0b3AKKworICAhJG9tcCBwYXJhbGxlbCBkbyBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShr KQorICBkbyBpID0gMSwgbiwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVu dGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVy YXRpb24gc3RlcCBmb3IgJ2knIiB9CisgICAgZG8gaiA9IDEsIG0KKyAgICAgIGRvIGsgPSBp IC0gNDEsIHAgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAx IC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRv CisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEgU2FtZSBi dXQgJ3ByaXZhdGUnIGZvciBhbGwgKGksaikgdmFycworCisgICEkb21wIHBhcmFsbGVsIGRv IGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwg bgorICAgIGRvIGogPSAxLCBtLCAyICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVt ZW50ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBub24tdW5pdCBsb29wIGl0 ZXJhdGlvbiBzdGVwIGZvciAnaiciIH0KKyAgICAgIGRvIGsgPSBqIC0gNDEsIHAgICEgeyBk Zy1ub3RlICJVc2VkIGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4g cCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBp ZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxh cHNlKDMpIGxhc3Rwcml2YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMiAg ISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIg bG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVyYXRpb24gc3RlcCBmb3IgJ2knIiB9 CisgICAgZG8gaiA9IDEsIG0KKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAgICEgeyBkZy1ub3Rl ICJVc2VkIGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJy b3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAv PSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEgU2FtZSAtIGJ1dCB3aXRoIGxhc3Rwcml2YXRl KGksaikKKworICAhJG9tcCBwYXJhbGxlbCBkbyBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShr KSBsYXN0cHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG0sIDIg ICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFy IGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3AgaXRlcmF0aW9uIHN0ZXAgZm9yICdqJyIg fQorICAgICAgZG8gayA9IGogLSA0MSwgcCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQor ICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBl bmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBz dG9wCisgIGlmIChpIC89IG4gKyAxIC5vci4gaiAvPSBtICsgMikgZXJyb3Igc3RvcAorCisg ICEkb21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2 YXRlKGksaikKKyAgZG8gaSA9IDEsIG4sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5p bXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxv b3AgaXRlcmF0aW9uIHN0ZXAgZm9yICdpJyIgfQorICAgIGRvIGogPSAxLCBtCisgICAgICBk byBrID0gaSAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgICAgICAgIGlm IChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAg IGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKyAgaWYg KGkgLz0gbiArIDIgLm9yLiBqIC89IG0gKyAxKSBlcnJvciBzdG9wCisKK2VuZCBzdWJyb3V0 aW5lIGxhc3Rwcml2YXRlX2NoZWNrX2RvXzEKKworCisKK3N1YnJvdXRpbmUgbGFzdHByaXZh dGVfY2hlY2tfMgorICBpbnRlZ2VyIDo6IG4sbSxwLCBpLGosayxsbAorCisgIG4gPSAxMQor ICBtID0gMjMKKyAgcCA9IDI3CisKKyAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBz ZSgzKSBsYXN0cHJpdmF0ZShwKQorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBtLDIg ICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFy IGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3AgaXRlcmF0aW9uIHN0ZXAgZm9yICdqJyIg fQorICAgICAgZG8gayA9IDEsIGogKyA0MSAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQor ICAgICAgICBkbyBsbCA9IDEsIHAsIDIKKyAgICAgICAgICBpZiAoayA+IDIzICsgNDEgLm9y LiBrIDwgMSkgZXJyb3Igc3RvcAorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworICAg IGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGxsIC89IDI5KSBlcnJvciBzdG9wCisKKyAgISRv bXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShwKQorICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBtLDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDog bm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIG5vbi11bml0IGxvb3AgaXRlcmF0aW9u IHN0ZXAgZm9yICdqJyIgfQorICAgICAgZG8gayA9IDEsIGogKyA0MSAgISB7IGRnLW5vdGUg IlVzZWQgaGVyZSIgfQorICAgICAgICBkbyBsbCA9IDEsIHAsIDIKKyAgICAgICAgICBpZiAo ayA+IDIzICsgNDEgLm9yLiBrIDwgMSkgZXJyb3Igc3RvcAorICAgICAgICBlbmQgZG8KKyAg ICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGxsIC89IDI5KSBlcnJv ciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorICBk byBpID0gMSwgbiwyICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6IG5v bi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBub24tdW5pdCBsb29wIGl0ZXJhdGlvbiBz dGVwIGZvciAnaSciIH0KKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8gayA9IDEsIGkgKyA0 MSAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA+IDExICsgNDEg Lm9yLiBrIDwgMSkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVu ZCBkbworaWYgKGsgLz0gNTMpIHRoZW4KKyAgcHJpbnQgKiwgaywgNTMKKyAgZXJyb3Igc3Rv cAorZW5kaWYKKworISAtIFNhbWUgYnV0IHdpdGhvdXQgJ3ByaXZhdGUnOgorISRvbXAgc2lt ZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorZG8gaSA9IDEsIG4KKyAgZG8gaiA9IDEs IG0sMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFu Z3VsYXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVyYXRpb24gc3RlcCBmb3Ig J2onIiB9CisgICAgZG8gayA9IDEsIGogKyA0MSAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIg fQorICAgICAgaWYgKGsgPiAyMyArIDQxIC5vci4gayA8IDEpIGVycm9yIHN0b3AKKyAgICBl bmQgZG8KKyAgZW5kIGRvCitlbmQgZG8KK2lmIChrIC89IDY1KSB0aGVuCisgIHByaW50ICos IGssIDY1CisgIGVycm9yIHN0b3AKK2VuZGlmCisKKworISRvbXAgc2ltZCBjb2xsYXBzZSgz KSBsYXN0cHJpdmF0ZShrKQorZG8gaSA9IDEsIG4sMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5 LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggbm9uLXVu aXQgbG9vcCBpdGVyYXRpb24gc3RlcCBmb3IgJ2knIiB9CisgIGRvIGogPSAxLCBtCisgICAg ZG8gayA9IDEsIGkgKyA0MSAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgaWYg KGsgPiAxMSArIDQxIC5vci4gayA8IDEpIGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5k IGRvCitlbmQgZG8KK2lmIChrIC89IDUzKSB0aGVuCisgIHByaW50ICosIGssIDUzCisgIGVy cm9yIHN0b3AKK2VuZGlmCisKKyEgLSBhbGwgd2l0aCBsYXN0cHJpdmF0ZQorISRvbXAgc2lt ZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLCBqKQorZG8gaSA9 IDEsIG4KKyAgZG8gaiA9IDEsIG0sMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxl bWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBp dGVyYXRpb24gc3RlcCBmb3IgJ2onIiB9CisgICAgZG8gayA9IDEsIGogKyA0MSAgISB7IGRn LW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgaWYgKGsgPiAyMyArIDQxIC5vci4gayA8IDEp IGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQgZG8KK2lmIChrIC89IDY1 KSB0aGVuCisgIHByaW50ICosIGssIDY1CisgIGVycm9yIHN0b3AKK2VuZGlmCisKKworISRv bXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLCBqKQor ZG8gaSA9IDEsIG4sMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBu b24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggbm9uLXVuaXQgbG9vcCBpdGVyYXRpb24g c3RlcCBmb3IgJ2knIiB9CisgIGRvIGogPSAxLCBtCisgICAgZG8gayA9IDEsIGkgKyA0MSAg ISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgaWYgKGsgPiAxMSArIDQxIC5vci4g ayA8IDEpIGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQgZG8KK2lmIChr IC89IDUzKSB0aGVuCisgIHByaW50ICosIGssIDUzCisgIGVycm9yIHN0b3AKK2VuZGlmCisK K2VuZAorZW5kIG1vZHVsZSBtCisKK3Byb2dyYW0gbWFpbgorICB1c2UgbQorICBpbXBsaWNp dCBub25lICh0eXBlLCBleHRlcm5hbCkKKyAgY2FsbCBsYXN0cHJpdmF0ZV9jaGVja19zaW1k XzEKKyAgY2FsbCBsYXN0cHJpdmF0ZV9jaGVja19kb19zaW1kXzEKKyAgY2FsbCBsYXN0cHJp dmF0ZV9jaGVja19kb18xCisgIGNhbGwgbGFzdHByaXZhdGVfY2hlY2tfMgorZW5kCmRpZmYg LS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbm9uLXJlY3Rhbmd1 bGFyLWxvb3AtMi5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbm9u LXJlY3Rhbmd1bGFyLWxvb3AtMi5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjBjZWE2MWU1ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTIuZjkwCkBAIC0w LDAgKzEsMjQzIEBACishIHsgZGctZG8gcnVuIH0KKyEgeyBkZy1hZGRpdGlvbmFsLW9wdGlv bnMgIi1mZHVtcC10cmVlLW9yaWdpbmFsIC1mY2hlY2s9YWxsIiB9CisKKyEgUFIgZm9ydHJh bi8xMDc0MjQKKworISBOb25yZWN0YW5ndWxhciBsb29wIG5lc3RzIGNoZWNrcworCishIFZh bGlkIHBhdHRlcm5zIGFyZToKKyEgICgxKSAgYTIgLSB2YXItb3V0ZXIKKyEgICgyKSAgYTEg KiB2YXItb3V0ZXIKKyEgICgzKSAgYTEgKiB2YXItb3V0ZXIgKyBhMgorISAgKDQpICBhMiAr IGExICogdmFyLW91dGVyCishICAoNSkgIGExICogdmFyLW91dGVyIC0gYTIKKyEgICg2KSAg YTIgLSBhMSAqIHZhci1vdXRlcgorISAgKDcpICB2YXItb3V0ZXIgKiBhMQorISAgKDgpICB2 YXItb3V0ZXIgKiBhMSArIGEyCishICAoOSkgIGEyICsgdmFyLW91dGVyICogYTEKKyEgKDEw KSAgdmFyLW91dGVyICogYTEgLSBhMgorISAoMTEpICBhMiAtIHZhci1vdXRlciAqIGExCisK K21vZHVsZSBtCitjb250YWlucworCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJmb3IgXFwob25lX3R3b19pbm5lciA9IG9uZV90d29fb3V0ZXIgXFwqIC0xIFxc KyBvbmVfYTI7IG9uZV90d29faW5uZXIgPD0gb25lX3R3b19vdXRlciBcXCogdHdvX2ExIFxc KyAwOyBvbmVfdHdvX2lubmVyID0gb25lX3R3b19pbm5lciBcXCsgMVxcKSIgMSBvcmlnaW5h bCB9IH0KKworISAgKDEpICBhMiAtIHZhci1vdXRlcgorISAgKDIpICBhMSAqIHZhci1vdXRl cgorc3Vicm91dGluZSBvbmVfdHdvKCkKKyAgaW1wbGljaXQgbm9uZQorICBpbnRlZ2VyIDo6 IG9uZV9hMgorICBpbnRlZ2VyIDo6IHR3b19hMQorICBpbnRlZ2VyIDo6IG9uZV90d29fb3V0 ZXIsIG9uZV90d29faW5uZXIKKyAgaW50ZWdlciA6OiBpLCBqCisgIGludGVnZXIsIGFsbG9j YXRhYmxlIDo6IHZhcig6LDopCisKKyAgb25lX2EyID0gMTMKKyAgdHdvX2ExID0gNQorICBh bGxvY2F0ZSh2YXIoMToxMCwgb25lX2EyIC0gMTA6dHdvX2ExICogMTApLCAmCisgICAgICAg ICAgIHNvdXJjZT0wKQorICBpZiAoc2l6ZSh2YXIpIDw9IDQpIGVycm9yIHN0b3AKKworICAh JG9tcCBzaW1kIGNvbGxhcHNlKDIpCisgIGRvIG9uZV90d29fb3V0ZXIgPSAxLCAxMAorICAg IGRvIG9uZV90d29faW5uZXIgPSBvbmVfYTIgLSBvbmVfdHdvX291dGVyLCB0d29fYTEgKiBv bmVfdHdvX291dGVyCisgICAgICAhJG9tcCBhdG9taWMgdXBkYXRlCisgICAgICB2YXIob25l X3R3b19vdXRlcixvbmVfdHdvX2lubmVyKSA9IHZhcihvbmVfdHdvX291dGVyLG9uZV90d29f aW5uZXIpICsgMgorICAgIGVuZCBkbworICBlbmQgZG8KKworICBkbyBpID0gMSwgMTAKKyAg ICBkbyBqID0gb25lX2EyIC0gaSwgdHdvX2ExICogaQorICAgICAgaWYgKHZhcihpLGopIC89 IDIpIGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQKKworCishIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKHRocmVlX2ZvdXJfaW5uZXIg PSB0aHJlZV9mb3VyX291dGVyIFxcKiB0aHJlZV9hMSBcXCsgdGhyZWVfYTI7IHRocmVlX2Zv dXJfaW5uZXIgPD0gdGhyZWVfZm91cl9vdXRlciBcXCogZm91cl9hMSBcXCsgZm91cl9hMjsg dGhyZWVfZm91cl9pbm5lciA9IHRocmVlX2ZvdXJfaW5uZXIgXFwrIDFcXCkiIDEgb3JpZ2lu YWwgfSB9CisKKyEgICgzKSAgYTEgKiB2YXItb3V0ZXIgKyBhMgorISAgKDQpICBhMiArIGEx ICogdmFyLW91dGVyCitzdWJyb3V0aW5lIHRocmVlX2ZvdXIoKQorICBpbXBsaWNpdCBub25l CisgIGludGVnZXIgOjogdGhyZWVfYTEsIHRocmVlX2EyCisgIGludGVnZXIgOjogZm91cl9h MSwgZm91cl9hMgorICBpbnRlZ2VyIDo6IHRocmVlX2ZvdXJfb3V0ZXIsIHRocmVlX2ZvdXJf aW5uZXIKKyAgaW50ZWdlciA6OiBpLCBqCisgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IHZh cig6LDopCisKKyAgdGhyZWVfYTEgPSAyCisgIHRocmVlX2EyID0gMworICBmb3VyX2ExID0g MworICBmb3VyX2EyID0gNQorICBhbGxvY2F0ZSh2YXIoMToxMCwgdGhyZWVfYTEgKiAxICsg dGhyZWVfYTI6Zm91cl9hMiArIGZvdXJfYTEgKiAxMCksICYKKyAgICAgICAgICAgc291cmNl PTApCisgIGlmIChzaXplKHZhcikgPD0gNCkgZXJyb3Igc3RvcAorCisgICEkb21wIHNpbWQg Y29sbGFwc2UoMikKKyAgZG8gdGhyZWVfZm91cl9vdXRlciA9IDEsIDEwCisgICAgZG8gdGhy ZWVfZm91cl9pbm5lciA9IHRocmVlX2ExICogdGhyZWVfZm91cl9vdXRlciArIHRocmVlX2Ey LCBmb3VyX2EyICsgZm91cl9hMSAqIHRocmVlX2ZvdXJfb3V0ZXIKKyAgICAgICEkb21wIGF0 b21pYyB1cGRhdGUKKyAgICAgIHZhcih0aHJlZV9mb3VyX291dGVyLCB0aHJlZV9mb3VyX2lu bmVyKSA9IHZhcih0aHJlZV9mb3VyX291dGVyLCB0aHJlZV9mb3VyX2lubmVyKSArIDIKKyAg ICBlbmQgZG8KKyAgZW5kIGRvCisgIGRvIGkgPSAxLCAxMAorICAgIGRvIGogPSB0aHJlZV9h MSAqIGkgKyB0aHJlZV9hMiwgZm91cl9hMiArIGZvdXJfYTEgKiBpCisgICAgICBpZiAodmFy KGksaikgLz0gMikgZXJyb3Igc3RvcAorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZAorCisK KyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoZml2ZV9zaXhf aW5uZXIgPSBmaXZlX3NpeF9vdXRlciBcXCogZml2ZV9hMSBcXCsgRFxcLlxbMC05XF0rOyBm aXZlX3NpeF9pbm5lciA8PSBmaXZlX3NpeF9vdXRlciBcXCogRFxcLlxbMC05XF0rIFxcKyBz aXhfYTI7IGZpdmVfc2l4X2lubmVyID0gZml2ZV9zaXhfaW5uZXIgXFwrIDFcXCkiIDEgb3Jp Z2luYWwgfSB9CisKKyEgICg1KSAgYTEgKiB2YXItb3V0ZXIgLSBhMgorISAgKDYpICBhMiAt IGExICogdmFyLW91dGVyCitzdWJyb3V0aW5lIGZpdmVfc2l4KCkKKyAgaW1wbGljaXQgbm9u ZQorICBpbnRlZ2VyIDo6IGZpdmVfYTEsIGZpdmVfYTIKKyAgaW50ZWdlciA6OiBzaXhfYTEs IHNpeF9hMgorICBpbnRlZ2VyIDo6IGZpdmVfc2l4X291dGVyLCBmaXZlX3NpeF9pbm5lcgor ICBpbnRlZ2VyIDo6IGksIGoKKyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogdmFyKDosOikK KworICBmaXZlX2ExID0gMgorICBmaXZlX2EyID0gLTMKKyAgc2l4X2ExID0gMworICBzaXhf YTIgPSAyMAorICBhbGxvY2F0ZSh2YXIoMToxMCwgZml2ZV9hMSAqIDEgLSBmaXZlX2EyOnNp eF9hMiAtIHNpeF9hMSAqIDEpLCAmCisgICAgICAgICAgIHNvdXJjZT0wKQorICBpZiAoc2l6 ZSh2YXIpIDw9IDQpIGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDIpCisg IGRvIGZpdmVfc2l4X291dGVyID0gMSwgMTAKKyAgICBkbyBmaXZlX3NpeF9pbm5lciA9IGZp dmVfYTEgKiBmaXZlX3NpeF9vdXRlciAtIGZpdmVfYTIsIHNpeF9hMiAtIHNpeF9hMSAqIGZp dmVfc2l4X291dGVyCisgICAgICAhJG9tcCBhdG9taWMgdXBkYXRlCisgICAgICB2YXIoZml2 ZV9zaXhfb3V0ZXIsIGZpdmVfc2l4X2lubmVyKSA9IHZhcihmaXZlX3NpeF9vdXRlciwgZml2 ZV9zaXhfaW5uZXIpICsgMgorICAgIGVuZCBkbworICBlbmQgZG8KKworICBkbyBpID0gMSwg MTAKKyAgICBkbyBqID0gZml2ZV9hMSAqIGkgLSBmaXZlX2EyLCBzaXhfYTIgLSBzaXhfYTEg KiBpCisgICAgICBpZiAodmFyKGksaikgLz0gMikgZXJyb3Igc3RvcAorICAgIGVuZCBkbwor ICBlbmQgZG8KK2VuZAorCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJmb3IgXFwoc2V2ZW5fZWlnaHRfaW5uZXIgPSBzZXZlbl9laWdodF9vdXRlciBcXCogc2V2 ZW5fYTEgXFwrIDA7IHNldmVuX2VpZ2h0X2lubmVyIDw9IHNldmVuX2VpZ2h0X291dGVyIFxc KiBlaWdodF9hMSBcXCsgZWlnaHRfYTI7IHNldmVuX2VpZ2h0X2lubmVyID0gc2V2ZW5fZWln aHRfaW5uZXIgXFwrIDFcXCkiIDEgb3JpZ2luYWwgfSB9CisKKyEgICg3KSAgdmFyLW91dGVy ICogYTEKKyEgICg4KSAgdmFyLW91dGVyICogYTEgKyBhMgorc3Vicm91dGluZSBzZXZlbl9l aWdodCgpCisgIGltcGxpY2l0IG5vbmUKKyAgaW50ZWdlciA6OiBzZXZlbl9hMQorICBpbnRl Z2VyIDo6IGVpZ2h0X2ExLCBlaWdodF9hMgorICBpbnRlZ2VyIDo6IHNldmVuX2VpZ2h0X291 dGVyLCBzZXZlbl9laWdodF9pbm5lcgorICBpbnRlZ2VyIDo6IGksIGoKKyAgaW50ZWdlciwg YWxsb2NhdGFibGUgOjogdmFyKDosOikKKworICBzZXZlbl9hMSA9IDMKKyAgZWlnaHRfYTEg PSAyCisgIGVpZ2h0X2EyID0gLTQKKyAgYWxsb2NhdGUodmFyKDE6MTAsIDEgKiBzZXZlbl9h MSA6IDEwICogZWlnaHRfYTEgKyBlaWdodF9hMiksICYKKyAgICAgICAgICAgc291cmNlPTAp CisgIGlmIChzaXplKHZhcikgPD0gNCkgZXJyb3Igc3RvcAorCisgICEkb21wIHNpbWQgY29s bGFwc2UoMikKKyAgZG8gc2V2ZW5fZWlnaHRfb3V0ZXIgPSAxLCAxMAorICAgIGRvIHNldmVu X2VpZ2h0X2lubmVyID0gc2V2ZW5fZWlnaHRfb3V0ZXIgKiBzZXZlbl9hMSwgc2V2ZW5fZWln aHRfb3V0ZXIgKiBlaWdodF9hMSArIGVpZ2h0X2EyCisgICAgICAhJG9tcCBhdG9taWMgdXBk YXRlCisgICAgICB2YXIoc2V2ZW5fZWlnaHRfb3V0ZXIsIHNldmVuX2VpZ2h0X2lubmVyKSA9 IHZhcihzZXZlbl9laWdodF9vdXRlciwgc2V2ZW5fZWlnaHRfaW5uZXIpICsgMgorICAgIGVu ZCBkbworICBlbmQgZG8KKworICBkbyBpID0gMSwgMTAKKyAgICBkbyBqID0gaSAqIHNldmVu X2ExLCBpICogZWlnaHRfYTEgKyBlaWdodF9hMgorICAgICAgaWYgKHZhcihpLGopIC89IDIp IGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQKKworCishIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKG5pbmVfdGVuX2lubmVyID0gbmlu ZV90ZW5fb3V0ZXIgXFwqIG5pbmVfYTEgXFwrIG5pbmVfYTI7IG5pbmVfdGVuX2lubmVyIDw9 IG5pbmVfdGVuX291dGVyIFxcKiB0ZW5fYTEgXFwrIERcXC5cWzAtOVxdKzsgbmluZV90ZW5f aW5uZXIgPSBuaW5lX3Rlbl9pbm5lciBcXCsgMVxcKSIgMSBvcmlnaW5hbCB9IH0KKworISAg KDkpICBhMiArIHZhci1vdXRlciAqIGExCishICgxMCkgIHZhci1vdXRlciAqIGExIC0gYTIK K3N1YnJvdXRpbmUgbmluZV90ZW4oKQorICBpbXBsaWNpdCBub25lCisgIGludGVnZXIgOjog bmluZV9hMSwgbmluZV9hMgorICBpbnRlZ2VyIDo6IHRlbl9hMSwgdGVuX2EyCisgIGludGVn ZXIgOjogbmluZV90ZW5fb3V0ZXIsIG5pbmVfdGVuX2lubmVyCisgIGludGVnZXIgOjogaSwg agorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiB2YXIoOiw6KQorCisgIG5pbmVfYTEgPSAz CisgIG5pbmVfYTIgPSA1CisgIHRlbl9hMSA9IDIKKyAgdGVuX2EyID0gMworICBhbGxvY2F0 ZSh2YXIoMToxMCwgbmluZV9hMiArIDEgKiBuaW5lX2ExOjEwICogdGVuX2ExIC0gdGVuX2Ey KSwgJgorICAgICAgICAgICBzb3VyY2U9MCkKKyAgaWYgKHNpemUodmFyKSA8PSA0KSBlcnJv ciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgyKQorICBkbyBuaW5lX3Rlbl9vdXRl ciA9IDEsIDEwCisgICAgZG8gbmluZV90ZW5faW5uZXIgPSBuaW5lX2EyICsgbmluZV90ZW5f b3V0ZXIgKiBuaW5lX2ExLCBuaW5lX3Rlbl9vdXRlciAqIHRlbl9hMSAtIHRlbl9hMgorICAg ICAgISRvbXAgYXRvbWljIHVwZGF0ZQorICAgICAgdmFyKG5pbmVfdGVuX291dGVyLCBuaW5l X3Rlbl9pbm5lcikgPSB2YXIobmluZV90ZW5fb3V0ZXIsIG5pbmVfdGVuX2lubmVyKSArIDIK KyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgZG8gaSA9IDEsIDEwCisgICAgZG8gaiA9IG5p bmVfYTIgKyBpICogbmluZV9hMSwgaSAqIHRlbl9hMSAtIHRlbl9hMgorICAgICAgaWYgKHZh cihpLGopIC89IDIpIGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQKKwor CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGVsZXZlbl9p bm5lciA9IGVsZXZlbl9vdXRlciBcXCogRFxcLlxbMC05XF0rIFxcKyBlbGV2ZW5fYTI7IGVs ZXZlbl9pbm5lciA8PSAxMDsgZWxldmVuX2lubmVyID0gZWxldmVuX2lubmVyIFxcKyAxXFwp IiAxIG9yaWdpbmFsIH0gfQorCishICgxMSkgIGEyIC0gdmFyLW91dGVyICogYTEKKworc3Vi cm91dGluZSBlbGV2ZW4oKQorICBpbXBsaWNpdCBub25lCisgIGludGVnZXIgOjogZWxldmVu X2ExLCBlbGV2ZW5fYTIKKyAgaW50ZWdlciA6OiBlbGV2ZW5fb3V0ZXIsIGVsZXZlbl9pbm5l cgorICBpbnRlZ2VyIDo6IGksIGoKKyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogdmFyKDos OikKKworICBlbGV2ZW5fYTEgPSAyCisgIGVsZXZlbl9hMiA9IDMKKyAgYWxsb2NhdGUodmFy KDE6MTAsIGVsZXZlbl9hMiAtIDEwICogZWxldmVuX2ExIDogMTApLCAmCisgICAgICAgICAg IHNvdXJjZT0wKQorICBpZiAoc2l6ZSh2YXIpIDw9IDQpIGVycm9yIHN0b3AKKworICAhJG9t cCBzaW1kIGNvbGxhcHNlKDIpCisgIGRvIGVsZXZlbl9vdXRlciA9IDEsIDEwCisgICAgZG8g ZWxldmVuX2lubmVyID0gZWxldmVuX2EyIC0gZWxldmVuX291dGVyICogZWxldmVuX2ExLCAx MAorICAgICAgISRvbXAgYXRvbWljIHVwZGF0ZQorICAgICAgdmFyKGVsZXZlbl9vdXRlciwg ZWxldmVuX2lubmVyKSA9IHZhcihlbGV2ZW5fb3V0ZXIsIGVsZXZlbl9pbm5lcikgKyAyCisg ICAgZW5kIGRvCisgIGVuZCBkbworCisgIGRvIGkgPSAxLCAxMAorICAgIGRvIGogPSBlbGV2 ZW5fYTIgLSBpICogZWxldmVuX2ExLCAxMAorICAgICAgaWYgKHZhcihpLGopIC89IDIpIGVy cm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQKK2VuZCBtb2R1bGUgbQorCitw cm9ncmFtIG1haW4KK3VzZSBtCitpbXBsaWNpdCBub25lCitjYWxsIG9uZV90d28oKQorY2Fs bCB0aHJlZV9mb3VyKCkKK2NhbGwgZml2ZV9zaXgoKQorY2FsbCBzZXZlbl9laWdodCgpCitj YWxsIG5pbmVfdGVuKCkKK2NhbGwgZWxldmVuKCkKK2VuZAo= --------------fEzgH6D0C5Brmq2XuiuYZk8C--