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 autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 18201 invoked from network); 5 Mar 2023 23:28:11 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 5 Mar 2023 23:28:11 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1678058891; b=Vw/5DlxDSExBGzNh4kq3P1UpddK2FK3SvWM+qDsckZg6VTGBjIvIycJ4LXHtDJi8hr9NUwEeBb 0fz9NibhFVwiVfmE6aPGnuWHILem/wtKuLZFRhKyV+vMT2gA1kTOXEkTbReCoe2jDt5Itmx87A VsMcH3Macp0jkUsJj9u6vWoM93zqGpVxjIGHh+YgUVTOydHpGzA70GOVHnABdjNzZCGAxHqCWT Iz1bKpXX+ZCWj3H6uOpwnMGZ+k49E/TQUWLySMT01pq05v6S+Uh5zbOWOuXr8sy997HObgWHGw qIFSgmUjM/1gOjf7nIj5XUL4/dSLJo/133pdV3T0UDTvkA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ed1-f47.google.com) smtp.remote-ip=209.85.208.47; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 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=1678058891; bh=3N3DPaUq/oc2Hd4fG7bmmWXegG80or7Op73wSSA3eSg=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=c9P9BqbISYZEcKqowtBsYKuuANkiay5LJXaeGWS0gtvMiJElCD0ixrMN1GMGRuVNIg5ULYS3ML Kf+EPRE2m+Jcnhm85FmKGxIrv+Zm98u59ZzMPFFuetnK6+5TEWNKqY1NC1U3EQ8LnpEHfekHZW UHGwD9uV+cuaa5EFLnhTw4Fy8RxThThZ+c4L98riOss9itjP1CzvZoQ3RtpXr7a9ssJMs/84/H 0JqLseMYHAyxgzVkvE8yQ0XTDYVdUddJRv+DWNqkzek5pWqlDeJssDaLczl1K/S4HOI1PLYcyi p8/ekQeE3V1hfMxOcdr6Kf6nsgaJfdx+9TFq6w0RxxYTqQ==; 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: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:In-Reply-To:References; bh=3N3DPaUq/oc2Hd4fG7bmmWXegG80or7Op73wSSA3eSg=; b=R5h8qaW5y1uPv4Z0XThR6YHp2M nbmM4jb0L7D8k6CYaiSwXBPPUS8IpDvoMeBLK5mT+hWPbgOnxvZEHDfNCTVHDmgJeLScqvDEe9Waj IbhJ/zchwGDLJ3qEvaVgvHM2n4mxUZ1Obk0Wiuqnoh9n5AdE7FHrJA28I5t3+6tK+C0uHgoXPzvSH ILsVwXiMhcKdggL1dhaVh62NUjShg3wPnvj2mI5+3Dq0bSADIWMPf3dieGs8NC4coSCcedcxx0FJP nqMkrExdtghBGJ/roRj26jOcz1fCIoC48RUL44A68gRNQSQLUPvdLoMeIRzxYZkjIgsJL+gX0+Ro+ 0YqqunKg==; Received: by zero.zsh.org with local id 1pYxly-000BJY-KF; Sun, 05 Mar 2023 23:28:10 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ed1-f47.google.com) smtp.remote-ip=209.85.208.47; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-ed1-f47.google.com ([209.85.208.47]:37445) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1pYxlN-000B0x-9n; Sun, 05 Mar 2023 23:27:34 +0000 Received: by mail-ed1-f47.google.com with SMTP id j11so12117586edq.4 for ; Sun, 05 Mar 2023 15:27:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20210112.gappssmtp.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=3N3DPaUq/oc2Hd4fG7bmmWXegG80or7Op73wSSA3eSg=; b=q3E9xiZasLXaWxGZyon0jY/EBpqN4BoMmG1ojZJRB3xO5tUfFeVIZZFX90FhoZwn0r Iox51+MELm2Rg5X+rxNYvHYZ1XY3l8AVQxCLH77CNkeGmEsq1ONKCaeSkFsqydPiIj1r GQuCr5EgYI8dcg+CVs/EDd24B9n8N/8ikT1UWQq1XS9hslYf/JDmS9EuGNH1JKvL5M8b YGK0hCy8j+O0N9tiPeOTZ2efIWPL21IaaglLzn+FhpDud+p4ajWtt9HlQuL/Znn4CRF0 HetP29y9DHIIBzUu6YnO2Odi0RtMM6YXJsqGaBy/69eFTgikhpRUmy97+j1F9LukFCZm tygA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=3N3DPaUq/oc2Hd4fG7bmmWXegG80or7Op73wSSA3eSg=; b=xSzC4lObn0YAYxmMbFspOa7JMXWl+2fh4tBbloQRhydGYJqqbf7TFtXEclnAx/1qzt Zigi70i+KlCqt3WfwX8GbYMr6OrHykDlegwwkMkh4p45pBj3kt1j9+5oZXAZwSev+Vcm 09ibZOH3P65iHsKf9J3LnNrLd5BJ/whEgMwqZOmxpIBpdt7HGu13yoKZhAZbx5TPC3Lp 9wcfyxRuhNdIkh+bthZabz5xTuI19DW3B6HbknpG6hvSbbX+i1s3AL6XL1tZ+0lurK+1 NIqPhP8vrpffrmfZaTAIH2uamWG4pLC87Z4fndkEI8o1EhxDmerJM48Wop0s/earRy06 3hRQ== X-Gm-Message-State: AO0yUKW60iu03howkQ06I50DsH/A/FNP0WYjH7QCxZhP3vCYNQspL5y3 JQCcN4h1ojQdutehCI3bU2xqzR3ngr5sL/pj3pQRjR8bhD4Ht33BxFU= X-Google-Smtp-Source: AK7set93cWFSkHYH4J1BLADVXCOXrVgra/SCmHUyl9hq1bMirFGHf7Tx/UfgYNtdIknXVdMVGg+VAkgCOlM9Vf9PloE= X-Received: by 2002:a17:906:b48:b0:8b1:3cdf:29cd with SMTP id v8-20020a1709060b4800b008b13cdf29cdmr4165050ejg.6.1678058852353; Sun, 05 Mar 2023 15:27:32 -0800 (PST) MIME-Version: 1.0 From: Bart Schaefer Date: Sun, 5 Mar 2023 15:27:20 -0800 Message-ID: Subject: [PATCH] Add ${!nameref} in ksh emulation and ${(!)nameref} natively To: Zsh hackers list Content-Type: multipart/mixed; boundary="000000000000cec53605f62f85b2" X-Seq: 51509 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: --000000000000cec53605f62f85b2 Content-Type: text/plain; charset="UTF-8" As discussed in workers/51495 and referrers, this implements expanding a named reference to the name of its referent rather than the value. Included are expanded comments documenting other ways that ${!...} is interpreted in bash, for us to potentially follow in the future. No doc yet, as this may still be controversial? --000000000000cec53605f62f85b2 Content-Type: text/plain; charset="US-ASCII"; name="nameref-show.txt" Content-Disposition: attachment; filename="nameref-show.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lew0ibrf0 ZGlmZiAtLWdpdCBhL1NyYy9wYXJhbXMuYyBiL1NyYy9wYXJhbXMuYwppbmRleCBjOWY0YjMwMTcu Ljg1ZWFlZTYwOSAxMDA2NDQKLS0tIGEvU3JjL3BhcmFtcy5jCisrKyBiL1NyYy9wYXJhbXMuYwpA QCAtMjE0NCw3ICsyMTQ0LDEwIEBAIGZldGNodmFsdWUoVmFsdWUgdiwgY2hhciAqKnBwdHIsIGlu dCBicmFja3MsIGludCBmbGFncykKIAlpbnQgaXN2YXJhdDsKIAogICAgICAgICBpc3ZhcmF0ID0g KHRbMF0gPT0gJ0AnICYmICF0WzFdKTsKLQlwbSA9IChQYXJhbSkgcGFyYW10YWItPmdldG5vZGUo cGFyYW10YWIsICp0ID09ICcwJyA/ICIwIiA6IHQpOworCWlmIChmbGFncyAmIFNDQU5QTV9OT05B TUVSRUYpCisJICAgIHBtID0gKFBhcmFtKSBwYXJhbXRhYi0+Z2V0bm9kZTIocGFyYW10YWIsICp0 ID09ICcwJyA/ICIwIiA6IHQpOworCWVsc2UKKwkgICAgcG0gPSAoUGFyYW0pIHBhcmFtdGFiLT5n ZXRub2RlKHBhcmFtdGFiLCAqdCA9PSAnMCcgPyAiMCIgOiB0KTsKIAlpZiAoc2F2KQogCSAgICAq cyA9IHNhdjsKIAkqcHB0ciA9IHM7CkBAIC0yMTU1LDcgKzIxNTgsNyBAQCBmZXRjaHZhbHVlKFZh bHVlIHYsIGNoYXIgKipwcHRyLCBpbnQgYnJhY2tzLCBpbnQgZmxhZ3MpCiAJICAgIG1lbXNldCh2 LCAwLCBzaXplb2YoKnYpKTsKIAllbHNlCiAJICAgIHYgPSAoVmFsdWUpIGhjYWxsb2Moc2l6ZW9m ICp2KTsKLQlpZiAocG0tPm5vZGUuZmxhZ3MgJiBQTV9OQU1FUkVGKSB7CisJaWYgKChwbS0+bm9k ZS5mbGFncyAmIFBNX05BTUVSRUYpICYmICEoZmxhZ3MgJiBTQ0FOUE1fTk9OQU1FUkVGKSkgewog CSAgICBjaGFyICpyZWZuYW1lID0gR0VUUkVGTkFNRShwbSk7CiAJICAgIGlmIChyZWZuYW1lICYm ICpyZWZuYW1lKSB7CiAJCS8qIG9ubHkgaGFwcGVucyBmb3IgbmFtZXJlZnMgcG9pbnRpbmcgdG8g YXJyYXkgZWxlbWVudHMgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdWJzdC5jIGIvU3JjL3N1YnN0LmMK aW5kZXggN2E0YjQzM2JjLi5hODYwMDUzNDAgMTAwNjQ0Ci0tLSBhL1NyYy9zdWJzdC5jCisrKyBi L1NyYy9zdWJzdC5jCkBAIC0xODE4LDE0ICsxODE4LDE0IEBAIHBhcmFtc3Vic3QoTGlua0xpc3Qg bCwgTGlua05vZGUgbiwgY2hhciAqKnN0ciwgaW50IHF0LCBpbnQgcGZfZmxhZ3MsCiAgICAgICog VXNlIGZvciB0aGUgKGspIGZsYWcuICBHb2VzIGRvd24gaW50byB0aGUgcGFyYW1ldGVyIGNvZGUs CiAgICAgICogc29tZXRpbWVzLgogICAgICAqLwotICAgIGNoYXIgaGtleXMgPSAwOworICAgIGlu dCBoa2V5cyA9IDA7CiAgICAgLyoKICAgICAgKiBVc2VkIGZvciB0aGUgKHYpIGZsYWcsIGRpdHRv LiAgTm90IHF1aXRlIHN1cmUgd2h5IHRoZXkncmUKICAgICAgKiBzZXBhcmF0ZSwgYnV0IHRoZSB0 cmFkaXRpb24gc2VlbXMgdG8gYmUgdGhhdCB0aGluZ3Mgb25seQogICAgICAqIGdldCBjb21iaW5l ZCB3aGVuIHRoYXQgbWFrZXMgdGhlIHJlc3VsdCBtb3JlIG9ic2N1cmUgcmF0aGVyCiAgICAgICog dGhhbiBsZXNzLgogICAgICAqLwotICAgIGNoYXIgaHZhbHMgPSAwOworICAgIGludCBodmFscyA9 IDA7CiAgICAgLyoKICAgICAgKiBXaGV0aGVyIHdlIGhhZCB0byBldmFsdWF0ZSBhIHN1YmV4cHJl c3Npb24sIGkuZS4gYW4KICAgICAgKiBpbnRlcm5hbCAkey4uLn0gb3IgJCguLi4pIG9yIHBsYWlu ICRwbS4gIFdlIGFsbW9zdCBkb24ndApAQCAtMTg3MCw4ICsxODcwLDggQEAgcGFyYW1zdWJzdChM aW5rTGlzdCBsLCBMaW5rTm9kZSBuLCBjaGFyICoqc3RyLCBpbnQgcXQsIGludCBwZl9mbGFncywK ICAgICAgKiB0aGVzZSBsYXRlciBvbiwgdG9vLgogICAgICAqLwogICAgIGMgPSAqczsKLSAgICBp ZiAoaXR5cGVfZW5kKHMsIElOQU1FU1BDLCAxKSA9PSBzICYmICpzICE9ICcjJyAmJiBjICE9IFBv dW5kICYmCi0JIUlTX0RBU0goYykgJiYKKyAgICBpZiAoaXR5cGVfZW5kKHMsIChjID09IEluYnJh Y2UgPyBJTkFNRVNQQyA6IElJREVOVCksIDEpID09IHMgJiYKKwkqcyAhPSAnIycgJiYgYyAhPSBQ b3VuZCAmJiAhSVNfREFTSChjKSAmJgogCWMgIT0gJyEnICYmIGMgIT0gJyQnICYmIGMgIT0gU3Ry aW5nICYmIGMgIT0gUXN0cmluZyAmJgogCWMgIT0gJz8nICYmIGMgIT0gUXVlc3QgJiYKIAljICE9 ICcqJyAmJiBjICE9IFN0YXIgJiYgYyAhPSAnQCcgJiYgYyAhPSAneycgJiYKQEAgLTE4OTEsMTUg KzE4OTEsMzAgQEAgcGFyYW1zdWJzdChMaW5rTGlzdCBsLCBMaW5rTm9kZSBuLCBjaGFyICoqc3Ry LCBpbnQgcXQsIGludCBwZl9mbGFncywKIAlzKys7CiAJLyoKIAkgKiBJbiBrc2ggZW11bGF0aW9u IGEgbGVhZGluZyBgIScgaXMgYSBzcGVjaWFsIGZsYWcgd29ya2luZwotCSAqIHNvcnQgb2YgbGlr ZSBvdXIgKGspLgorCSAqIHNvcnQgb2YgbGlrZSBvdXIgKGspLiAgVGhpcyBpcyB0cnVlIG9ubHkg Zm9yIGFycmF5cyBvcgorCSAqIGFzc29jaWF0aXZlIGFycmF5cyBhbmQgb25seSB3aXRoIHN1YnNj cmlwdHMgWypdIG9yIFtAXSwKKwkgKiBzbyB6c2gncyBpbXBsZW1lbnRhdGlvbiBpcyBhcHByb3hp bWF0ZS4gIEZvciBuYW1lcmVmcworCSAqIGluIGtzaCwgJHshcmVmfSBzdWJzdGl0dWVzIHRoZSBw YXJhbWV0ZXIgbmFtZSBhdCB0aGUKKwkgKiBlbmQgb2YgYW55IGNoYWluIG9mIHJlZmVyZW5jZXMs IHJhdGhlciB0aGFuIHRoZSB2YWx1ZS4KKwkgKgogCSAqIFRPRE86IHRoaXMgaXMgb25lIG9mIHZl cnkgZmV3IGNhc2VzIHRpZWQgZGlyZWN0bHkgdG8KIAkgKiB0aGUgZW11bGF0aW9uIG1vZGUgcmF0 aGVyIHRoYW4gYW4gb3B0aW9uLiAgU2luY2Uga3NoCiAJICogZG9lc24ndCBoYXZlIHBhcmFtZXRl ciBmbGFncyBpdCBtaWdodCBiZSBuZWF0ZXIgdG8KIAkgKiBoYW5kbGUgdGhpcyB3aXRoIHRoZSBe LCA9LCB+IHN0dWZmLCBiZWxvdy4KIAkgKi8KIAlpZiAoKGMgPSAqcykgPT0gJyEnICYmIHNbMV0g IT0gT3V0YnJhY2UgJiYgRU1VTEFUSU9OKEVNVUxBVEVfS1NIKSkgewotCSAgICBoa2V5cyA9IFND QU5QTV9XQU5US0VZUzsKKwkgICAgaGtleXMgPSBTQ0FOUE1fV0FOVEtFWVN8U0NBTlBNX05PTkFN RVJFRjsKIAkgICAgcysrOworCSAgICAvKiBUaGVyZSdzIGEgc2xldyBvZiBvdGhlciBzcGVjaWFs IGJhc2ggbWVhbmluZ3Mgb2YgcGFyYW1ldGVyCisJICAgICAqIHJlZmVyZW5jZXMgdGhhdCBzdGFy dCB3aXRoICIhIjoKKwkgICAgICogICR7IW5hbWV9ID09ICR7KFApbmFtZX0gKHdoZW4gbmFtZSBp cyBub3QgYSBuYW1lcmVmKQorCSAgICAgKiAgJHshbmFtZSp9ID09ICR7KGspcGFyYW1ldGVyc1so SSluYW1lKl19CisJICAgICAqICAkeyFuYW1lQH0gPT0gJHsoQGspcGFyYW1ldGVyc1soSSluYW1l Kl19CisJICAgICAqICAkeyFuYW1lWypdfSA9PSAkeyhrKW5hbWV9IChidXQgaW5kZXhlcyBvZiBv cmRpbmFyeSBhcnJheXMsIHRvbykKKwkgICAgICogICR7IW5hbWVbQF19ID09ICR7KEBrKW5hbWV9 IChkaXR0bywgYXMgbm90ZWQgYWJvdmUgZm9yIGtzaCkKKwkgICAgICoKKwkgICAgICogU2VlIGFs c28gd29ya2Vycy8zNDM5MCwgd29ya2Vycy8zNDM5Nywgd29ya2Vycy8zNDQwOC4KKwkgICAgICov CiAJfSBlbHNlIGlmIChjID09ICcoJyB8fCBjID09IElucGFyKSB7CiAJICAgIGNoYXIgKnQsIHNh djsKIAkgICAgaW50IHR0ID0gMDsKQEAgLTIxNTQsMTAgKzIxNjksMTkgQEAgcGFyYW1zdWJzdChM aW5rTGlzdCBsLCBMaW5rTm9kZSBuLCBjaGFyICoqc3RyLCBpbnQgcXQsIGludCBwZl9mbGFncywK IAkJICAgIGVzY2FwZXMgPSAxOwogCQkgICAgYnJlYWs7CiAKKwkJY2FzZSAnISc6CisJCSAgICBp ZiAoKGhrZXlzfGh2YWxzKSAmIH5TQ0FOUE1fTk9OQU1FUkVGKQorCQkJZ290byBmbGFnZXJyOwor CQkgICAgaGtleXMgPSBTQ0FOUE1fTk9OQU1FUkVGOworCQkgICAgYnJlYWs7CiAJCWNhc2UgJ2sn OgorCQkgICAgaWYgKGhrZXlzICYgflNDQU5QTV9XQU5US0VZUykKKwkJCWdvdG8gZmxhZ2VycjsK IAkJICAgIGhrZXlzID0gU0NBTlBNX1dBTlRLRVlTOwogCQkgICAgYnJlYWs7CiAJCWNhc2UgJ3Yn OgorCQkgICAgaWYgKGh2YWxzICYgflNDQU5QTV9XQU5US0VZUykKKwkJCWdvdG8gZmxhZ2VycjsK IAkJICAgIGh2YWxzID0gU0NBTlBNX1dBTlRWQUxTOwogCQkgICAgYnJlYWs7CiAKQEAgLTIzMDgs NyArMjMzMiw3IEBAIHBhcmFtc3Vic3QoTGlua0xpc3QgbCwgTGlua05vZGUgbiwgY2hhciAqKnN0 ciwgaW50IHF0LCBpbnQgcGZfZmxhZ3MsCiAgICAgLyoKICAgICAgKiBMb29rIGZvciBzcGVjaWFs IHVucGFyZW50aGVzaXNlZCBmbGFncy4KICAgICAgKiBUT0RPOiBjb3VsZCBtYWtlIHRoZXNlIGFi bGUgdG8gYXBwZWFyIGluc2lkZSBwYXJlbnRoZXNlcywgdG9vLAotICAgICAqIGkuZS4gJHsoXiku Li59IGV0Yy4KKyAgICAgKiBpLmUuICR7KF4pLi4ufSBldGMuLCBidXQgJHsofikuLi59IGFscmVh ZHkgaGFzIGFub3RoZXIgbWVhbmluZy4KICAgICAgKi8KICAgICBmb3IgKDs7KSB7CiAJaWYgKChj ID0gKnMpID09ICdeJyB8fCBjID09IEhhdCkgewpkaWZmIC0tZ2l0IGEvU3JjL3pzaC5oIGIvU3Jj L3pzaC5oCmluZGV4IDBkZTFmN2FmYi4uZjNhNzc3MDQ1IDEwMDY0NAotLS0gYS9TcmMvenNoLmgK KysrIGIvU3JjL3pzaC5oCkBAIC0xOTY0LDYgKzE5NjQsNyBAQCBzdHJ1Y3QgdGllZGRhdGEgewog I2RlZmluZSBTQ0FOUE1fQ0hFQ0tJTkcgICAoMTw8MTApIC8qIENoZWNrIGlmIHNldCwgbm8gbmVl ZCB0byBjcmVhdGUgKi8KICNkZWZpbmUgU0NBTlBNX05PRVhFQyAgICAgKDE8PDExKSAvKiBObyBj b21tYW5kIHN1YnN0aXR1dGlvbnMsIGV0Yy4gKi8KICNkZWZpbmUgU0NBTlBNX05PTkFNRVNQQyAg KDE8PDEyKSAvKiBuYW1lc3BhY2Ugc3ludGF4IG5vdCBhbGxvd2VkICovCisjZGVmaW5lIFNDQU5Q TV9OT05BTUVSRUYgICgxPDwxMykgLyogbmFtZWQgcmVmZXJlbmNlcyBhcmUgbm90IGZvbGxvd2Vk ICovCiAKIC8qICIkZm9vW0BdIi1zdHlsZSBzdWJzdGl0dXRpb24KICAqIE9ubHkgc2lnbiBiaXQg aXMgc2lnbmlmaWNhbnQK --000000000000cec53605f62f85b2--