From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 25580 invoked from network); 18 Jul 2023 03:14:43 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 18 Jul 2023 03:14:43 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1689650083; b=GwQFHA7qvuNkNFTa7ixJgRGPdF/p63JM8jMrV68vUVoLed5mgTkVtt5uom0sV7nSNEcxZYuSgs KHWIOZcQMcIZcUWjLAtcOaNCJSl9MXW4Wp5F+oLVRrLtp1yRiSbTRc3QpcKeBscKjxKyjZZqGJ X2KpZg206OpN4lOrwmgbpJHhulJ9dX3fjYG2kYsG/rctoivGb+85FX2LEBudHXwtll3Nvw1S6d pEsXwI9/w28bIBgdeVOVg3Fzu3fL3pIXgaSyq5ybn0fQhAWqYXQKLP0Hg1v5Gmhwmy6Kh5gqKH IP0j+bzVPufSpker9xy9G1d89y0yCrmEQc781txAGc2GTA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ed1-f50.google.com) smtp.remote-ip=209.85.208.50; dkim=pass header.d=brasslantern-com.20221208.gappssmtp.com header.s=20221208 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1689650083; bh=JoXWYCXCvdihGXRDBeyaqX/LbtujydAf1FDfuh0+1D0=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=Hl9J3wJEU9bGy1pngGyNcmCEgmL8S9p6zHqT2aUR95+rzjEtQ+OEneQiNeqoB1wSfehhu+pyhS +1MLejXlosyuu5qx7NxxSvBm5I1cSq3ZdLAA4pey3mqjIciMvGYCpmNrsQJHECtaf+Lh8RF7pN bw04PSJAqbDEHTsCIv6n1VK2zWKSZ/TxDMHZ0zGdOmRaRk71pVNJWsDvDaNn1TgTWKQIsLqHGs ScPgh6Rn8/V3+T5htvyrYe3HSKOmwRIuBD/sanFXrNYppwqVYPqgikgv6v1kb8HMFZL075DlVC gzCy1U1dSPSJzw19pA+7ASC5iI8B/QGy///914+cETJl3g==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:In-Reply-To:References:MIME-Version:Reply-To:Cc: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=g0UdSMgoXnjOpofrOL+u3Cp42F0Ut7Lz7rzS6OIqUn8=; b=Gc3PdZHUWoCEwqZW3yTkufLDCy sT6hr5zOqwQk61DcLHKhrzsbI7hojGFPTPfg8RhUDWlIb1E7V/MU/1kiyUG/LIvQz0DrJQDsoWU/J 0IvahEPqzLWndL/Y69pBKRIKGC7g27bWrBnkDz/eRmIv85BriZ667p9vCCvtQCxlPCIIQ1JeTElop nR9dTr3S/CwNzE67DrUrH5xcde5sV5pXw8uuiQyvFUIV29RgpkMnGpIsYbVqL+/x8/FcuwdGY7mK+ UGtXsl0RkksEmuy+HznrIZLFQeQCsfCEmVq1Qww3nYridS/NoydFHO68HS3oGhKcLY9pLuhsUuQqc zY5jXFQA==; Received: by zero.zsh.org with local id 1qLbAg-000BeZ-6f; Tue, 18 Jul 2023 03:14:42 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ed1-f50.google.com) smtp.remote-ip=209.85.208.50; dkim=pass header.d=brasslantern-com.20221208.gappssmtp.com header.s=20221208 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-ed1-f50.google.com ([209.85.208.50]:56522) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1qLbAJ-000BNW-HB; Tue, 18 Jul 2023 03:14:25 +0000 Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-51ff0e3d8c1so6953488a12.0 for ; Mon, 17 Jul 2023 20:14:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20221208.gappssmtp.com; s=20221208; t=1689650059; x=1692242059; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=g0UdSMgoXnjOpofrOL+u3Cp42F0Ut7Lz7rzS6OIqUn8=; b=yxzhNE++tsr8amAjNJ8ipXShPrLBSNOzYW5BE9T5ABk53CkinCi5vcf2pZGi8P2nKS gC7slhkT3br9nyMBEnDiUy2RrRdkSpGtvqxg/fFlH3FCJzKAcFWQN74cY/PUfkQI0OVz wdIARN1CEwWM4tVBQcyljkzgRjk1congxs1H9DsWyFaDS7+bvDJw/IHB5IqmRQO035kD NyjmnFFAPjy594lPdUCYPyhHYvlBDeZufQ7/afE1j4XpJR+Wevyc2rdCH4SfngQ81K/K WA+q5TQghmAHt13oQOyCZfnMNLoSbl8CDV1qQV5J/GbcROSj0ONdTshIhjN2T+xNMRTo 5tyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689650059; x=1692242059; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=g0UdSMgoXnjOpofrOL+u3Cp42F0Ut7Lz7rzS6OIqUn8=; b=CF0bMUUp/BIo8+3FeI1sRD8pme7pjK/Jer+3PsnR/WVnP1mXzPXJgnTvadVZFsUmWz soxzyoLRuha++MKhTLIrIndIUOio5cEI2fWyhpsxXFUUATUE4g2JXcSigxz4JlAlzoRj 3IT+AZg47YciOmXp3XkqCDh+uMTnPhb2Pk0exRJxgSfPYAf39rKi8b93IwNUgqVoydM0 mOUrHAe8whwHCkNjWCnXyTxoUkx39D7LFlL1KEAubba6Y1rTI2Ujxm5rkZ2I5aYOOixc zfKMuTbODXJLZE1hk/d6qzbS63+c6WVZSSgaLh9V7HtelCOMn4pSLUNwRZsc/VCIySNV OH3g== X-Gm-Message-State: ABy/qLboPUL72NpeePBKFK0B+z3/mk9UDwaZhnvZBtzAo3dALkTfzy+K 5Jag8nN5g94+0K559N+BlT0DfIdzIn5CjNgjkAycD/vHcrdt6NoDeW8= X-Google-Smtp-Source: APBJJlG5p6BwGlYDVtLLLmtD7X9Q0HPKYfG4dnmd48ISbc4XZvhWyHdgFyjOT42cyCwHz9V/dacLS7INjLwD2r5Z+GA= X-Received: by 2002:a17:906:5194:b0:993:e9b8:90f5 with SMTP id y20-20020a170906519400b00993e9b890f5mr11741834ejk.8.1689650058191; Mon, 17 Jul 2023 20:14:18 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bart Schaefer Date: Mon, 17 Jul 2023 20:14:07 -0700 Message-ID: Subject: Re: [PATCH] Support the mksh's ${|func;} substitution To: zsh-workers@zsh.org Content-Type: multipart/mixed; boundary="00000000000083f1bc0600ba4fc9" X-Seq: 51957 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: --00000000000083f1bc0600ba4fc9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jul 3, 2023 at 6:55=E2=80=AFPM Bart Schaefer wrote: > > Also in that thread Stephane points out that it would be ideal if > (paraphrasing his example) "${| echo { }" were parsed similarly to "{ > echo { }" and that to do so would require changes to the parser More specifically, it's going to require changes to the tokenizer. There would need to be an analog of skipcomm() that knows how to stop at the appropriately significant Outbrace instead of at Outpar, and similarly a skipparens() analog that does the same for a string. For the nonce it gets most of the way there to require that braces inside ${|...} are either balanced or quoted. One of the harder things to get right is the "%_" prompt replacement for this. I ended up with "braceparam cursh" because that's otherwise impossible, as opposed to "braceparam cmdsubst" or just "cmdsubst" or even "cmdsubst cursh" any of which could result from other valid syntaxes. As an aside ... compatibility-wise we're stuck with using braces for this, but why not parens like $(|...) instead, by analogy with $(<...)? Parsing would be so much ... saner ... and the whole fake-it-with $REPLY bit could be skipped, go straight to capturing stdout. On Tue, Jul 4, 2023 at 10:32=E2=80=AFPM Bart Schaefer wrote: > > -- REPLY is treated as a local, i.e., it's value gets saved and > restored around the substitution I've implemented this, but after experimenting with it both ways, I've done so only for REPLY, that is, other cases of $VAR as in ${|VAR|...} remain non-localized. Again I wonder whether instead of being initialized as unset, REPLY should be initialized to the value from the calling scope, so that ${+REPLY} is usable. The drawback of course is that the called code must then explicitly clobber $REPLY if an empty result is desired. > -- "local" works inside the substitution as it would inside a function > body, but $@ refers to the calling environment. Implemented this. Combined with the foregoing, this means that ${|VAR|local VAR; ...} substitutes the value of $VAR from the caller, not from the command (so, don't do that unless you mean it). > -- "return" also behaves as if in a function body. Also implemented this. Following Chet's lead, though, "exit" does exit the shell. I could instead make "exit" work like ${notset?error} and thus exit only if the shell is not interactive. Thoughts? I have not yet implemented the anonymous tempfile for ${ capture_stdout }. However, this equivalent construction does work (extra newlines for clarity): ${| () { capture_stdout > $1 REPLY=3D$(<$1) } =3D( X-Attachment-Id: f_lk7pyghc0 ZGlmZiAtLWdpdCBhL0RvYy9ac2gvZXhwbi55byBiL0RvYy9ac2gvZXhwbi55bwppbmRleCA3YmM3 MzY0NzAuLjQ0ODY3ZTY1NSAxMDA2NDQKLS0tIGEvRG9jL1pzaC9leHBuLnlvCisrKyBiL0RvYy9a c2gvZXhwbi55bwpAQCAtMTg3NSwyMyArMTg3NSw1MSBAQCBzZWN0KENvbW1hbmQgU3Vic3RpdHV0 aW9uKQogY2luZGV4KGNvbW1hbmQgc3Vic3RpdHV0aW9uKQogY2luZGV4KHN1YnN0aXR1dGlvbiwg Y29tbWFuZCkKIEEgY29tbWFuZCBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyBwcmVjZWRlZCBieSBh IGRvbGxhciBzaWduLCBsaWtlCi1gdHQoJExQQVIoKSkuLi50dChSUEFSKCkpJywgb3IgcXVvdGVk IHdpdGggZ3JhdmUKLWFjY2VudHMsIGxpa2UgYHR0KGApLi4udHQoYCknLCBpcyByZXBsYWNlZCB3 aXRoIGl0cyBzdGFuZGFyZCBvdXRwdXQsIHdpdGgKLWFueSB0cmFpbGluZyBuZXdsaW5lcyBkZWxl dGVkLgotSWYgdGhlIHN1YnN0aXR1dGlvbiBpcyBub3QgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rl cywgdGhlCi1vdXRwdXQgaXMgYnJva2VuIGludG8gd29yZHMgdXNpbmcgdGhlIHR0KElGUykgcGFy YW1ldGVyLgorYHR0KCRMUEFSKCkpLi4udHQoUlBBUigpKScsIG9yIHF1b3RlZCB3aXRoIGdyYXZl IGFjY2VudHMsIGxpa2UKK2B0dChgKS4uLnR0KGApJywgaXMgZXhlY3V0ZWQgaW4gYSBzdWJzaGVs bCBhbmQgcmVwbGFjZWQgYnkgaXRzCitzdGFuZGFyZCBvdXRwdXQsIHdpdGggYW55IHRyYWlsaW5n IG5ld2xpbmVzIGRlbGV0ZWQuICBJZiB0aGUKK3N1YnN0aXR1dGlvbiBpcyBub3QgZW5jbG9zZWQg aW4gZG91YmxlIHF1b3RlcywgdGhlIG91dHB1dCBpcyBicm9rZW4KK2ludG8gd29yZHMgdXNpbmcg dGhlIHR0KElGUykgcGFyYW1ldGVyLgogdmluZGV4KElGUywgdXNlIG9mKQogCiBUaGUgc3Vic3Rp dHV0aW9uIGB0dCgkTFBBUigpY2F0KSB2YXIoZm9vKXR0KFJQQVIoKSknIG1heSBiZSByZXBsYWNl ZAogYnkgdGhlIGZhc3RlciBgdHQoJExQQVIoKTwpdmFyKGZvbyl0dChSUEFSKCkpJy4gIEluIHRo aXMgY2FzZSB2YXIoZm9vKQogdW5kZXJnb2VzIHNpbmdsZSB3b3JkIHNoZWxsIGV4cGFuc2lvbnMg KGVtKHBhcmFtZXRlciBleHBhbnNpb24pLAogZW0oY29tbWFuZCBzdWJzdGl0dXRpb24pIGFuZCBl bShhcml0aG1ldGljIGV4cGFuc2lvbikpLCBidXQgbm90Ci1maWxlbmFtZSBnZW5lcmF0aW9uLgor ZmlsZW5hbWUgZ2VuZXJhdGlvbi4gIE5vIHN1YnNoZWxsIGlzIGNyZWF0ZWQuCiAKIElmIHRoZSBv cHRpb24gdHQoR0xPQl9TVUJTVCkgaXMgc2V0LCB0aGUgcmVzdWx0IG9mIGFueSB1bnF1b3RlZCBj b21tYW5kCiBzdWJzdGl0dXRpb24sIGluY2x1ZGluZyB0aGUgc3BlY2lhbCBmb3JtIGp1c3QgbWVu dGlvbmVkLCBpcyBlbGlnaWJsZSBmb3IKIGZpbGVuYW1lIGdlbmVyYXRpb24uCiAKK0EgY29tbWFu ZCB3aXRoIGEgbGVhZGluZyBwaXBlIGNoYXJhY3RlciwgZW5jbG9zZWQgaW4gYnJhY2VzIHByZWZp eGVkIGJ5CithIGRvbGxhciBzaWduLCBhcyBpbiBgdHQoJHt8KS4uLnR0KH0pJywgaXMgZXhlY3V0 ZWQgaW4gdGhlIGN1cnJlbnQgc2hlbGwKK2NvbnRleHQsIHJhdGhlciB0aGFuIGluIGEgc3Vic2hl bGwsIGFuZCBpcyByZXBsYWNlZCBieSB0aGUgdmFsdWUgb2YgdGhlCitwYXJhbWV0ZXIgdHQoUkVQ TFkpIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQuICBUaGVyZSBlbShtdXN0IG5vdCkgYmUKK2Fu eSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIG9wZW5pbmcgYnJhY2UgYW5kIHRoZSBwaXBlIGNoYXJh Y3Rlci4gIEFueQorcHJpb3IgdmFsdWUgb2YgdHQoJFJFUExZKSBpcyBzYXZlZCBhbmQgcmVzdG9y ZWQgYXJvdW5kIHRoaXMgc3Vic3RpdHV0aW9uLAoraW4gdGhlIG1hbm5lciBvZiBhIGZ1bmN0aW9u IGxvY2FsIHBhcmFtZXRlci4gIE90aGVyIHBhcmFtZXRlcnMgZGVjbGFyZWQKK3dpdGhpbiB0aGUg c3Vic3RpdHV0aW9uIGFsc28gYmVoYXZlIGFzIGxvY2FscywgYXMgaWYgaW4gYSBmdW5jdGlvbiwK K3VubGVzcyBgdHQodHlwZXNldCAtZyknIGlzIHVzZWQuICBUcmFpbGluZyBuZXdsaW5lcyBhcmUg ZW0obm90KSBkZWxldGVkCitmcm9tIHRoZSBmaW5hbCByZXBsYWNlbWVudCBpbiB0aGlzIGNhc2Us IGFuZCBpdCBpcyBzdWJqZWN0IHRvIGZpbGVuYW1lCitnZW5lcmF0aW9uIGluIHRoZSBzYW1lIHdh eSBhcyBgdHQoJExQQVIoKSkuLi50dChSUEFSKCkpJyBidXQgaXMgZW0obm90KQorc3BsaXQgb24g dHQoSUZTKSB1bmxlc3MgdGhlIHR0KFNIX1dPUkRfU1BMSVQpIG9wdGlvbiBpcyBzZXQuCisKK1N1 YnN0aXR1dGlvbnMgb2YgdGhlIGZvcm0gYHR0KCR7fCl2YXIocGFyYW0pdHQofCkuLi50dCh9KScg YXJlIHNpbWlsYXIsCitleGNlcHQgdGhhdCB0aGUgc3Vic3RpdHV0aW9uIGlzIHJlcGxhY2VkIGJ5 IHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyCituYW1lZCBieSB2YXIocGFyYW0pLiAgTm8gaW1w bGljaXQgc2F2ZSBvciByZXN0b3JlIGFwcGxpZXMgdG8gdmFyKHBhcmFtKQorZXhjZXB0IGFzIG5v dGVkIGZvciB0dChSRVBMWSksIGFuZCB2YXIocGFyYW0pIHNob3VsZCBlbShub3QpIGJlIGRlY2xh cmVkCit3aXRoaW4gdGhlIGNvbW1hbmQuICBJZiB2YXIocGFyYW0pIG5hbWVzIGFuIGFycmF5LCBh cnJheSBleHBhbnNpb24gcnVsZXMKK2FwcGx5LgorCitDT01NRU5UKFRvIGJlIGltcGxlbWVudGVk IGxhdGVyOgorQSBjb21tYW5kIGVuY2xvc2VkIGluIGJyYWNlcyBwcmVjZWRlZCBieSBhIGRvbGxh ciBzaWduLCBhbmQgc2V0IG9mZiBmcm9tCit0aGUgYnJhY2VzIGJ5IHdoaXRlc3BhY2UsIGxpa2Ug YHR0KCR7ICkuLi50dCggfSknLCBpcyByZXBsYWNlZCBieSBpdHMKK3N0YW5kYXJkIG91dHB1dC4g IExpa2UgYHR0KCR7fCkuLi50dCh9KScgYW5kIHVubGlrZQorYHR0KCRMUEFSKCkpLi4udHQoUlBB UigpKScsIHRoZSBjb21tYW5kIGV4ZWN1dGVzIGluIHRoZSBjdXJyZW50IHNoZWxsCitjb250ZXh0 IHdpdGggZnVuY3Rpb24gbG9jYWwgYmVoYXZpb3JzIGFuZCBkb2VzIG5vdCBjcmVhdGUgYSBzdWJz aGVsbC4KKykKKwogdGV4aW5vZGUoQXJpdGhtZXRpYyBFeHBhbnNpb24pKEJyYWNlIEV4cGFuc2lv bikoQ29tbWFuZCBTdWJzdGl0dXRpb24pKEV4cGFuc2lvbikKIHNlY3QoQXJpdGhtZXRpYyBFeHBh bnNpb24pCiBjaW5kZXgoYXJpdGhtZXRpYyBleHBhbnNpb24pCmRpZmYgLS1naXQgYS9TcmMvbGV4 LmMgYi9TcmMvbGV4LmMKaW5kZXggMmY3OTM3NDEwLi43M2Q5NDI2NGUgMTAwNjQ0Ci0tLSBhL1Ny Yy9sZXguYworKysgYi9TcmMvbGV4LmMKQEAgLTkzNyw3ICs5MzcsNyBAQCBzdGF0aWMgZW51bSBs ZXh0b2sKIGdldHRva3N0cihpbnQgYywgaW50IHN1YikKIHsKICAgICBpbnQgYmN0ID0gMCwgcGN0 ID0gMCwgYnJjdCA9IDAsIHNlZW5fYnJjdCA9IDAsIGZkcGFyID0gMDsKLSAgICBpbnQgaW50cG9z ID0gMSwgaW5fYnJhY2VfcGFyYW0gPSAwOworICAgIGludCBpbnRwb3MgPSAxLCBpbl9icmFjZV9w YXJhbSA9IDAsIGNtZHN1YnN0ID0gMDsKICAgICBpbnQgaW5xdW90ZSwgdW5tYXRjaGVkID0gMDsK ICAgICBlbnVtIGxleHRvayBwZWVrOwogI2lmZGVmIERFQlVHCkBAIC0xMTU3LDggKzExNTcsMTEg QEAgZ2V0dG9rc3RyKGludCBjLCBpbnQgc3ViKQogCSAgICBpZiAoaW5fYnJhY2VfcGFyYW0pIHsK IAkJY21kcG9wKCk7CiAJICAgIH0KLQkgICAgaWYgKGJjdC0tID09IGluX2JyYWNlX3BhcmFtKQot CQlpbl9icmFjZV9wYXJhbSA9IDA7CisJICAgIGlmIChiY3QtLSA9PSBpbl9icmFjZV9wYXJhbSkg eworCQlpZiAoY21kc3Vic3QpCisJCSAgICBjbWRwb3AoKTsKKwkJaW5fYnJhY2VfcGFyYW0gPSBj bWRzdWJzdCA9IDA7CisJICAgIH0KIAkgICAgYyA9IE91dGJyYWNlOwogCSAgICBicmVhazsKIAlj YXNlIExYMl9DT01NQToKQEAgLTE0MDUsMTAgKzE0MDgsMTUgQEAgZ2V0dG9rc3RyKGludCBjLCBp bnQgc3ViKQogICAgICAgIH0KICAgICAgICBhZGQoYyk7CiAgICAgICAgYyA9IGhnZXRjKCk7Ci0J aWYgKGludHBvcykKKyAgICAgICBpZiAoaW50cG9zKQogCSAgICBpbnRwb3MtLTsKLQlpZiAobGV4 c3RvcCkKKyAgICAgICBpZiAobGV4c3RvcCkKIAkgICAgYnJlYWs7CisgICAgICAgaWYgKCFjbWRz dWJzdCAmJiBpbl9icmFjZV9wYXJhbSAmJiBhY3QgPT0gTFgyX1NUUklORyAmJgorCSAgIChjID09 ICd8JyB8fCBjID09IEJhciB8fCBpbmJsYW5rKGMpKSkgeworCSAgIGNtZHN1YnN0ID0gaW5fYnJh Y2VfcGFyYW07CisJICAgY21kcHVzaChDU19DVVJTSCk7CisgICAgICAgfQogICAgIH0KICAgYnJr OgogICAgIGlmIChlcnJmbGFnKSB7CkBAIC0xNDU5LDcgKzE0NjcsNyBAQCBnZXR0b2tzdHIoaW50 IGMsIGludCBzdWIpCiBzdGF0aWMgaW50CiBkcXVvdGVfcGFyc2UoY2hhciBlbmRjaGFyLCBpbnQg c3ViKQogewotICAgIGludCBwY3QgPSAwLCBicmN0ID0gMCwgYmN0ID0gMCwgaW50aWNrID0gMCwg ZXJyID0gMDsKKyAgICBpbnQgcGN0ID0gMCwgYnJjdCA9IDAsIGJjdCA9IDAsIGludGljayA9IDAs IGVyciA9IDAsIGNtZHN1YnN0ID0gMDsKICAgICBpbnQgYzsKICAgICBpbnQgbWF0aCA9IGVuZGNo YXIgPT0gJyknIHx8IGVuZGNoYXIgPT0gJ10nIHx8IGluZm9yOwogICAgIGludCB6bGVtYXRoID0g bWF0aCAmJiB6bGVtZXRhY3MgPiB6bGVtZXRhbGwgKyBhZGRlZHggLSBpbmJ1ZmN0OwpAQCAtMTUy OSwxMSArMTUzNywyMSBAQCBkcXVvdGVfcGFyc2UoY2hhciBlbmRjaGFyLCBpbnQgc3ViKQogCQlj ID0gUXN0cmluZzsKIAkgICAgfQogCSAgICBicmVhazsKKwljYXNlICd7JzoKKwkgICAgaWYgKGNt ZHN1YnN0ICYmICFpbnRpY2spIHsKKwkJLyogSW4gbm9mb3JrIHN1YnN0aXR1dGlvbiwgdG9rZW5p emUgYXMgaWYgdW5xdW90ZWQgKi8KKwkJYyA9IEluYnJhY2U7CisJCWJjdCsrOworCSAgICB9CisJ ICAgIGJyZWFrOwogCWNhc2UgJ30nOgogCSAgICBpZiAoaW50aWNrIHx8ICFiY3QpCiAJCWJyZWFr OwogCSAgICBjID0gT3V0YnJhY2U7Ci0JICAgIGJjdC0tOworCSAgICBpZiAoYmN0LS0gPT0gY21k c3Vic3QpIHsKKwkJY21kcG9wKCk7CisJCWNtZHN1YnN0ID0gMDsKKwkgICAgfQogCSAgICBjbWRw b3AoKTsKIAkgICAgYnJlYWs7CiAJY2FzZSAnYCc6CkBAIC0xNTg4LDEyICsxNjA2LDI0IEBAIGRx dW90ZV9wYXJzZShjaGFyIGVuZGNoYXIsIGludCBzdWIpCiAJaWYgKGVyciB8fCBsZXhzdG9wKQog CSAgICBicmVhazsKIAlhZGQoYyk7CisJaWYgKCFjbWRzdWJzdCAmJiBjID09IEluYnJhY2UpIHsK KwkgICAgLyogQ2hlY2sgZm9yICR7fC4uLn0gbm9mb3JrIGNvbW1hbmQgc3Vic3RpdHV0aW9uICov CisJICAgIGlmICgoYyA9IGhnZXRjKCkpKSB7CisJCWlmIChjID09ICd8JyB8fCBpbmJsYW5rKGMp KSB7CisJCSAgICBjbWRzdWJzdCA9IGJjdDsKKwkJICAgIGNtZHB1c2goQ1NfQ1VSU0gpOworCQl9 CisJCWh1bmdldGMoYyk7CisJICAgIH0KKwl9CiAgICAgfQogICAgIGlmIChpbnRpY2sgPT0gMikK IAlBTExPV0hJU1QKICAgICBpZiAoaW50aWNrKSB7CiAJY21kcG9wKCk7CiAgICAgfQorICAgIGlm IChiY3QgJiYgYmN0ID09IGNtZHN1YnN0KQorCWNtZHBvcCgpOwogICAgIHdoaWxlIChiY3QtLSkK IAljbWRwb3AoKTsKICAgICBpZiAobGV4c3RvcCkKZGlmZiAtLWdpdCBhL1NyYy9zdWJzdC5jIGIv U3JjL3N1YnN0LmMKaW5kZXggMTQ5NDdhZTM2Li45MmE1M2Q5OWEgMTAwNjQ0Ci0tLSBhL1NyYy9z dWJzdC5jCisrKyBiL1NyYy9zdWJzdC5jCkBAIC0xODYwLDYgKzE4NjAsOCBAQCBwYXJhbXN1YnN0 KExpbmtMaXN0IGwsIExpbmtOb2RlIG4sIGNoYXIgKipzdHIsIGludCBxdCwgaW50IHBmX2ZsYWdz LAogICAgICAqIGpvaW5pbmcgdGhlIGFycmF5IGludG8gYSBzdHJpbmcgKGZvciBjb21wYXRpYmls aXR5IHdpdGgga3NoL2Jhc2gpLgogICAgICAqLwogICAgIGludCBxdW90ZWRfYXJyYXlfd2l0aF9v ZmZzZXQgPSAwOworICAgIC8qIEluZGljYXRlcyAke3wuLi47fSAqLworICAgIGNoYXIgKnJwbHl2 YXIgPSBOVUxMOwogCiAgICAgKnMrKyA9ICdcMCc7CiAgICAgLyoKQEAgLTE4ODcsOCArMTg4OSwx MDQgQEAgcGFyYW1zdWJzdChMaW5rTGlzdCBsLCBMaW5rTm9kZSBuLCBjaGFyICoqc3RyLCBpbnQg cXQsIGludCBwZl9mbGFncywKICAgICAgKiBmbGFncyBpbiBwYXJlbnRoZXNlcywgYnV0IGFsc28g b25lIGtzaCBoYWNrLgogICAgICAqLwogICAgIGlmIChjID09IEluYnJhY2UpIHsKKwkvKiBUaGUg Y29tbWFuZCBzdHJpbmcgdG8gYmUgcnVuIGJ5ICR7fC4uLjt9ICovCisJY2hhciAqY21kYXJnID0g TlVMTDsKKwlzaXplX3Qgc2xlbiA9IDA7CiAJaW5icmFjZSA9IDE7CiAJcysrOworCisgICAgICAg IC8qIFNob3J0LXBhdGggZm9yIHRoZSBub2ZvcmsgY29tbWFuZCBzdWJzdGl0dXRpb24gJHt8Y21k O30KKwkgKiBTZWUgb3RoZXIgY29tbWVudHMgYWJvdXQga2x1ZGdlcyBmb3Igd2h5IHRoaXMgaXMg aGVyZS4KKwkgKgorICAgICAgICAgKiBUaGUgY29tbWFuZCBzdHJpbmcgaXMgZXh0cmFjdGVkIGFu ZCBleGVjdXRlZCwgYW5kIHRoZQorICAgICAgICAgKiBzdWJzdGl0dXRpb24gYXNzaWduZWQuIFRo ZXJlJ3Mgbm8gKC4uLiktZmxhZ3MgcHJvY2Vzc2luZywKKyAgICAgICAgICogaS5lLiBubyAke3wo VSljbWQ7fSwgYmVjYXVzZSBpdCBsb29rcyBxdWl0ZSBhd2Z1bCBhbmQKKyAgICAgICAgICogc2hv dWxkIG5vdCBiZSBwYXJ0IG9mIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGluIGFueSBjYXNlLgorICAg ICAgICAgKiBVc2UgJHsoVSkke3xjbWQ7fX0gYXMgeW91IHdvdWxkIGZvciAkeyhVKSQoY21kOyl9 LgorCSAqLworCWlmICgqcyA9PSAnfCcgfHwgKnMgPT0gQmFyKSB7CisJICAgIGNoYXIgKm91dGJy YWNlcCA9IHM7CisJICAgIGNoYXIgc2F2ID0gKnM7CisJICAgICpzID0gSW5icmFjZTsKKwkgICAg aWYgKHNraXBwYXJlbnMoSW5icmFjZSwgT3V0YnJhY2UsICZvdXRicmFjZXApID09IDApIHsKKwkJ c2xlbiA9IG91dGJyYWNlcCAtIHMgLSAxOworCQlpZiAoKCpzID0gc2F2KSAhPSBCYXIpIHsKKwkJ ICAgIHNhdiA9ICpvdXRicmFjZXA7CisJCSAgICAqb3V0YnJhY2VwID0gJ1wwJzsKKwkJICAgIHRv a2VuaXplKHMpOworCQkgICAgKm91dGJyYWNlcCA9IHNhdjsKKwkJfQorCSAgICB9CisJfQorCWlm IChzbGVuID4gMSkgeworCSAgICBjaGFyICpvdXRicmFjZXAgPSBzICsgc2xlbjsKKwkgICAgaWYg KCpvdXRicmFjZXAgPT0gT3V0YnJhY2UpIHsKKwkJaWYgKChycGx5dmFyID0gaXR5cGVfZW5kKHMr MSwgSU5BTUVTUEMsIDApKSkgeworCQkgICAgaWYgKCpycGx5dmFyID09IEluYnJhY2sgJiYKKwkJ CShycGx5dmFyID0gcGFyc2Vfc3Vic2NyaXB0KCsrcnBseXZhciwgMSwgJ10nKSkpCisJCQkrK3Jw bHl2YXI7CisJCX0KKwkJaWYgKHJwbHl2YXIgPT0gcysxICYmICpycGx5dmFyID09IEJhcikgewor CQkgICAgLyogSXMgJHt8fC4uLn0gYSBzdWJ0aXR1dGlvbiBlcnJvciBvciBhIHN5bnRheCBlcnJv cj8KKwkJICAgIHplcnIoImJhZCBzdWJzdGl0dXRpb24iKTsKKwkJICAgIHJldHVybiBOVUxMOwor CQkgICAgKi8KKwkJICAgIHJwbHl2YXIgPSBOVUxMOworCQl9CisJCWlmIChycGx5dmFyICYmICpy cGx5dmFyID09IEJhcikgeworCQkgICAgY21kYXJnID0gZHVwc3RycGZ4KHJwbHl2YXIrMSwgb3V0 YnJhY2VwLXJwbHl2YXItMSk7CisJCSAgICBycGx5dmFyID0gZHVwc3RycGZ4KHMrMSxycGx5dmFy LXMtMSk7CisJCX0gZWxzZSB7CisJCSAgICBjbWRhcmcgPSBkdXBzdHJwZngocysxLCBvdXRicmFj ZXAtcy0xKTsKKwkJICAgIHJwbHl2YXIgPSAiUkVQTFkiOworCQl9CisJCXMgPSBvdXRicmFjZXA7 CisJICAgIH0KKwl9CisKKwlpZiAocnBseXZhcikgeworCSAgICBQYXJhbSBwbTsKKwkgICAgLyog Y2hhciAqcnBseXZhbCA9IGdldHNwYXJhbSgiUkVQTFkiKTsgKi8KKwkgICAgc3RhcnRwYXJhbXNj b3BlKCk7IC8qICJsb2NhbCIgYmVoYXZlcyBhcyBpZiBpbiBhIGZ1bmN0aW9uICovCisJICAgIHBt ID0gY3JlYXRlcGFyYW0oIlJFUExZIiwgUE1fTE9DQUx8UE1fVU5TRVQpOworCSAgICBpZiAocG0p CS8qIFNob3VsZG4ndCBjcmVhdGVwYXJhbSgpIGRvIHRoaXM/ICovCisJCXBtLT5sZXZlbCA9IGxv Y2FsbGV2ZWw7CisJICAgIC8qIGlmIChycGx5dmFsKSBzZXRzcGFyYW0oIlJFUExZIiwgenRyZHVw KHJwbHl2YWwpKTsgKi8KKwl9CisKKwlpZiAocnBseXZhciAmJiBjbWRhcmcgJiYgKmNtZGFyZykg eworCSAgICAvKiBFeGVjdXRlIHRoZSBzaGVsbCBjb21tYW5kICovCisJICAgIHVudG9rZW5pemUo Y21kYXJnKTsKKwkgICAgZXhlY3N0cmluZyhjbWRhcmcsIDEsIDAsICJjbWRzdWJzdCIpOworCX0K KworCWlmIChycGx5dmFyKSB7CisJICAgIGlmIChzdHJjbXAocnBseXZhciwgIlJFUExZIikgPT0g MCkgeworCQlpZiAoKHZhbCA9IHp0cmR1cChnZXRzcGFyYW0oIlJFUExZIikpKSkKKwkJICAgIHZ1 bnNldCA9IDA7CisJCWVsc2UgeworCQkgICAgdnVuc2V0ID0gMTsKKwkJICAgIHZhbCA9IGR1cHN0 cmluZygiIik7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJcyA9IGR5bmNhdChycGx5dmFyLCBzKTsK KwkJcnBseXZhciA9IE5VTEw7CisJICAgIH0KKwkgICAgZW5kcGFyYW1zY29wZSgpOworCSAgICBp ZiAoZXhpdF9wZW5kaW5nKSB7CisJCWlmIChteXBpZCA9PSBnZXRwaWQoKSkgeworCQkgICAgLyoK KwkJICAgICAqIHBhcmFub2lhOiBkb24ndCBjaGVjayBmb3Igam9icywgYnV0IHRoZXJlCisJCSAg ICAgKiBzaG91bGRuJ3QgYmUgYW55IGlmIG5vdCBpbnRlcmFjdGl2ZS4KKwkJICAgICAqLworCQkg ICAgc3RvcG1zZyA9IDE7CisJCSAgICB6ZXhpdChleGl0X3ZhbCwgWkVYSVRfTk9STUFMKTsKKwkJ fSBlbHNlCisJCSAgICBfZXhpdChleGl0X3ZhbCk7CisJICAgIH0KKwkgICAgcmV0ZmxhZyA9IDA7 IC8qICJyZXR1cm4iIGJlaGF2ZXMgYXMgaWYgaW4gYSBmdW5jdGlvbiAqLworCX0KKwogCS8qCiAJ ICogSW4ga3NoIGVtdWxhdGlvbiBhIGxlYWRpbmcgYCEnIGlzIGEgc3BlY2lhbCBmbGFnIHdvcmtp bmcKIAkgKiBzb3J0IG9mIGxpa2Ugb3VyIChrKS4gIFRoaXMgaXMgdHJ1ZSBvbmx5IGZvciBhcnJh eXMgb3IKQEAgLTI1ODMsMTQgKzI2ODEsMTQgQEAgcGFyYW1zdWJzdChMaW5rTGlzdCBsLCBMaW5r Tm9kZSBuLCBjaGFyICoqc3RyLCBpbnQgcXQsIGludCBwZl9mbGFncywKIAkgKiB3ZSBsZXQgZmV0 Y2h2YWx1ZSBzZXQgdGhlIG1haW4gc3RyaW5nIHBvaW50ZXIgcyB0bwogCSAqIHRoZSBlbmQgb2Yg dGhlIGJpdCBpdCdzIGZldGNoZWQuCiAJICovCi0JaWYgKCEodiA9IGZldGNodmFsdWUoJnZidWYs IChzdWJleHAgPyAmb3YgOiAmcyksCi0JCQkgICAgICh3YW50dCA/IC0xIDoKLQkJCSAgICAgICgo dW5zZXQoS1NIQVJSQVlTKSB8fCBpbmJyYWNlKSA/IDEgOiAtMSkpLAotCQkJICAgICBzY2FuZmxh Z3MpKSB8fAotCSAgICAodi0+cG0gJiYgKHYtPnBtLT5ub2RlLmZsYWdzICYgUE1fVU5TRVQpKSB8 fAotCSAgICAodi0+ZmxhZ3MgJiBWQUxGTEFHX0VNUFRZKSkKKwlpZiAoIXJwbHl2YXIgJiYKKwkg ICAgKCEodiA9IGZldGNodmFsdWUoJnZidWYsIChzdWJleHAgPyAmb3YgOiAmcyksCisJCQkgICAg ICAod2FudHQgPyAtMSA6CisJCQkgICAgICAgKCh1bnNldChLU0hBUlJBWVMpIHx8IGluYnJhY2Up ID8gMSA6IC0xKSksCisJCQkgICAgICBzY2FuZmxhZ3MpKSB8fAorCSAgICAgKHYtPnBtICYmICh2 LT5wbS0+bm9kZS5mbGFncyAmIFBNX1VOU0VUKSkgfHwKKwkgICAgICh2LT5mbGFncyAmIFZBTEZM QUdfRU1QVFkpKSkKIAkgICAgdnVuc2V0ID0gMTsKLQogCWlmICh3YW50dCkgewogCSAgICAvKgog CSAgICAgKiBIYW5kbGUgdGhlICh0KSBmbGFnOiB2YWx1ZSBub3cgYmVjb21lcyB0aGUgdHlwZQo= --00000000000083f1bc0600ba4fc9--