From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by sourceware.org (Postfix) with ESMTPS id 366F83858D32 for ; Sat, 4 Nov 2023 14:56:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 366F83858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 366F83858D32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::52f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699109793; cv=none; b=bBxmId0nogVixdk9HDDhWmGcPTVkSsX8NHtHOa62Xwb6W44w0X8HOflk3ICEyPOZxKD7vYc/BqW/m/iy2uciy2onNTSEyEHAB19j3o0tyooz1RPP1paPa/bnmJNm9E3FHmcdo7kb0dTtCwSIYSW0gbEppLPTclvrsZ/0Uz7L5x0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699109793; c=relaxed/simple; bh=Z15+CmUIShL2ZIdZh+Fiqr6U+tQTHwC0tc/CleEeVpY=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=CNvTO8X2D6ZN5bmNQwf3Moa2nogFlQPdLQ2Lmc6Q9jSz6MVH4pahIdhZOXKUWMOC2I0XwNVJRVvNWZ4A0lzMyiQra4KHjE/BEL1P+0IPx1XzaMgteuP093j9ERKI+wETultCCxagSz/hhLCQK9dvLtsF+SbQH+o+SEPkBiQOvao= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-5406c099cebso4889345a12.2 for ; Sat, 04 Nov 2023 07:56:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699109787; x=1699714587; darn=sourceware.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Z15+CmUIShL2ZIdZh+Fiqr6U+tQTHwC0tc/CleEeVpY=; b=OI/8VvYMdCscfju3BKSqEKzdnchBf8U6G5EKbyLZaDTNI9EQIgmmkyqqK2vL++fnpf ykUlglAcQX9PcQdmU8G4SGblLREasKo9/d1OWVzFWBGdyjeUrvVUCtW2j4wFBmWMq9iN 6QIu5/MYP/NNTtMJT3KBe5DcxeySlgm4uzGH+Ti+2X4xItaNqQ2xXcjg6ldJTRxOpNFs OB4D12PXZU+QAcPnrKM+jM9ZwEOBZCpskuYtW5geseeyLHHJlH/enWzd8PSOtuXUXWEM QKm1DHshrAqI4doKLWd7PWLiSWZxLtCU+WIyKkdpkUqSKt3bTCjlTwIoWQC3Obs7v4iu tWBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699109787; x=1699714587; h=cc: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=Z15+CmUIShL2ZIdZh+Fiqr6U+tQTHwC0tc/CleEeVpY=; b=e05p1cd4EEDG3tL/8nI2HtGnE+4Epq8aTxnqdO1OBcQ4APbi7bxXrAp43E8c60sxu3 UyeDTOqge7PqR/6pZXYGKzu4Uuj+mPdQzZ1F23lj6UKcGTNj6KRta0UvuGlff6t2VMVM 3kpDKmUPlc/82IWmsc/4stBIJ9o8ZcICrX5pJexTLSiAZBALS3fnNUUy0Hm2pBtb+8bG QveO43iWzhr5hZmoXiE2tFl4Am2DgMveuIriflnCGjrm1ycVmQC71zYML3ln/otlf+SG h19ijxCGutAbDdPovDwucjcqYrgZaJsaNApVuemBxpV1yWTl/3rwmFdLSOee+xvDHi4V 6WzA== X-Gm-Message-State: AOJu0YyhTRUlrZHWl0IYnC2UgIO/jgTiNCfjQJQnHXWR3FCgSEe12La+ 46k8vp2nZYZAZ4ePgwRBUnup8yhkr93R3mgA94jRW5oyrBI= X-Google-Smtp-Source: AGHT+IH5UUleFcN+vybOD8s1pvtqYQ1FJnXiV3t52wQkFZ8feLTxY2j4SBb3blpn1ReBvRZirE6r77qXDBNbrVM6QM0= X-Received: by 2002:a17:907:806:b0:9c4:bb5f:970f with SMTP id wv6-20020a170907080600b009c4bb5f970fmr10430682ejb.32.1699109787155; Sat, 04 Nov 2023 07:56:27 -0700 (PDT) MIME-Version: 1.0 References: <65a5c611-8d7a-4066-ad44-5f1a72283fd7@bothner.com> In-Reply-To: From: Damien Mattei Date: Sat, 4 Nov 2023 15:56:14 +0100 Message-ID: Subject: Re: duplicate version reference - was # To: Per Bothner Cc: kawa@sourceware.org Content-Type: multipart/mixed; boundary="0000000000004ce805060954d335" X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: --0000000000004ce805060954d335 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable finally i find a way to make the overload features of Scheme+ working in Ka= wa: -just by putting the necessary import-rename at the toplevel or in the used module as it does not works in macro -and adding the renamed existing operator/procedure as an extra parameter to the overloading definition macro: (require test-define) (import (rename (scheme base) (+ orig+))) (define-overload-existing-operator + orig+) (overload-existing-operator + vector-append (vector? vector?)) (define rv (+ #(1 2) #(3 4 5))) (newline) (display "rv=3D") (display rv) (newline) here is a running example with the updated source files in attachment: kawa -Dkawa.import.path=3D".:/Users/mattei/Library/Mobile Documents/com~apple~CloudDocs/Scheme-PLUS-for-Kawa" #|kawa:1|# (load "main-test-define.scm") proc =3D# orig-proc =3D# rv=3D#(1 2 3 4 5) #|kawa:2|# (+ 2 3) 5 #|kawa:3|# (+ 2 3 4) 9 #|kawa:4|# (+ #(1 2) #(3) #(4 5)) #(1 2 3 4 5) you will notice that it works with + even as an n-arity operator because operator are associative and overloaded procedure take care to apply associativeness. This also could be done with Kawa support for multi-method i suppose by using my code in the defined method, this was my primary idea before finding this little hack to adapt for Kawa my already written Scheme+ algorithm for overloading. Damien On Sat, Nov 4, 2023 at 12:48=E2=80=AFAM Damien Mattei wrote: > > On Fri, Nov 3, 2023 at 7:29=E2=80=AFPM Per Bothner wrot= e: > > > First, I think using + for vector-append is a bad idea. > not part to be always defined like that > > It's questionable for strings, but if + on vectors would be > > better to mean vector addition - i.e. mapping + element-by-element. > just to port from Python a test example as in python + is used to append = vectors > > (Of course my exposure to APL is influencing me here.) > :-) > > > > Second, Kawa has some half-assed support for "multi-methods": > > https://www.gnu.org/software/kawa/Generic-procedures.html > > That could be enhanced. > sounds great, a fast test give good results: > #|kawa:1|# (import (rename (scheme base) (+ orig+))) > #|kawa:4|# (define + (make-procedure method: (lambda (x ::number y > ::number) (orig+ x y)) > #|.....5|# method: (lambda (x ::vector y ::vector) (vector-append x y)))) > #|kawa:6|# (+ 2 3) > 5 > #|kawa:7|# (+ #(1 2) #(3 4 5)) > #(1 2 3 4 5) > could be enhanced for associative n-arity operator of course, the way > i did it in overload procedures > Damien --0000000000004ce805060954d335 Content-Type: application/octet-stream; name="main-test-define.scm" Content-Disposition: attachment; filename="main-test-define.scm" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lok5xqup0 OzsgdXNlOiBrYXdhIC1Ea2F3YS5pbXBvcnQucGF0aD0iLjovVXNlcnMvbWF0dGVpL0xpYnJhcnkv TW9iaWxlIERvY3VtZW50cy9jb21+YXBwbGV+Q2xvdWREb2NzL1NjaGVtZS1QTFVTLWZvci1LYXdh Igo7OyAobG9hZCAibWFpbi10ZXN0LWRlZmluZS5zY20iKQoKCgo7OyhyZXF1aXJlIG92ZXJsb2Fk KQoocmVxdWlyZSB0ZXN0LWRlZmluZSkKCihpbXBvcnQgKHJlbmFtZSAoc2NoZW1lIGJhc2UpICgr IG9yaWcrKSkpCgooZGVmaW5lLW92ZXJsb2FkLWV4aXN0aW5nLW9wZXJhdG9yICsgb3JpZyspCgoo b3ZlcmxvYWQtZXhpc3Rpbmctb3BlcmF0b3IgKyB2ZWN0b3ItYXBwZW5kICh2ZWN0b3I/IHZlY3Rv cj8pKQoKCihkZWZpbmUgcnYgKCsgIygxIDIpICMoMyA0IDUpKSkKKG5ld2xpbmUpIChkaXNwbGF5 ICJydj0iKSAoZGlzcGxheSBydikgKG5ld2xpbmUpCgo= --0000000000004ce805060954d335 Content-Type: application/octet-stream; name="test-define.scm" Content-Disposition: attachment; filename="test-define.scm" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lok5xwhy1 KG1vZHVsZS1uYW1lIHRlc3QtZGVmaW5lKQoKKHJlcXVpcmUgJ3NyZmktMSkKCihyZXF1aXJlICdz cmZpLTY5KQoKOzsocmVxdWlyZSBpbmZpeC1vcGVyYXRvcnMpCgooZXhwb3J0IGRlZmluZS1vdmVy bG9hZC1leGlzdGluZy1vcGVyYXRvcgoJb3ZlcmxvYWQtZXhpc3Rpbmctb3BlcmF0b3IpCgk7Oysp CgooaW5jbHVkZSAiY29uZHguc2NtIikKCgooZGVmaW5lICRvdnJsZC1odCQgKG1ha2UtaGFzaC10 YWJsZSkpIDs7IGZvciBwcm9jZWR1cmUgYW5kIG9wZXJhdG9ycwoKCihkZWZpbmUgKGNoZWNrLWFy Z3VtZW50cyBwcmVkLWxpc3QgYXJncykKICAoaWYgKD0gKGxlbmd0aCBwcmVkLWxpc3QpIChsZW5n dGggYXJncykpCiAgICAgIChsZXQgKChwcmVkLWFyZy1saXN0IChtYXAgY29ucyBwcmVkLWxpc3Qg YXJncykpKQoJOzsoYW5kbWFwIChsYW1iZGEgKHApICgoY2FyIHApIChjZHIgcCkpKQoJOzsgcmVw bGFjZSBhbmRtYXAgd2l0aCBldmVyeSBpbiBHdWlsZQoJKGV2ZXJ5IChsYW1iZGEgKHApICgoY2Fy IHApIChjZHIgcCkpKQoJICAgICAgIHByZWQtYXJnLWxpc3QpKQogICAgICAjZikpCgoKCihkZWZp bmUtc3ludGF4IGRlZmluZS1vdmVybG9hZC1leGlzdGluZy1vcGVyYXRvcgoKICAoc3ludGF4LXJ1 bGVzICgpCgogICAgKChfIHByb2Mgb3JpZy1wcm9jKQoKICAgICAoYmVnaW4KCiAgICAgICA7OyAo aW1wb3J0IChyZW5hbWUgKG9ubHkgKGthd2EpIHByb2MpIChwcm9jIG9yaWctcHJvYykpKQogICAg ICAgOzsoaW1wb3J0IChyZW5hbWUgKG9ubHkgKHNjaGVtZSBiYXNlKSkgKHByb2Mgb3JpZy1wcm9j KSkpCiAgICAgICA7OyhpbXBvcnQgKHJlbmFtZSAodGVzdC1kZWZpbmUpIChwcm9jIG9yaWctcHJv YykpKQogICAgICAgOzsoaW1wb3J0IChyZW5hbWUgKGdudSBrYXdhKSAocHJvYyBvcmlnLXByb2Mp KSkKICAgICAgIDs7KHJlcXVpcmUgKHJlbmFtZS1pbiByYWNrZXQvYmFzZSAocHJvYwogICAgICAg CTs7CQkJICAgICAgICBvcmlnLXByb2MpKSkKCiAgICAgICAoZGlzcGxheSAicHJvYyA9IikgKGRp c3BsYXkgcHJvYykgKG5ld2xpbmUpCiAgICAgICAoZGlzcGxheSAib3JpZy1wcm9jID0iKSAoZGlz cGxheSBvcmlnLXByb2MpIChuZXdsaW5lKQogICAgICAgCiAgICAgICAoZGVmaW5lIHFwcm9jIChx dW90ZSBwcm9jKSkgCiAgICAgICAKICAgICAgIChkZWZpbmUgKHByb2MgLiBhcmdzLWxzdCkKCgkg OzsoZGlzcGxheSAicHJvYz0iKSAoZGlzcGxheSBwcm9jKSAobmV3bGluZSkKCSA7OyhkZWZpbmUg aHQgKGhhc2gtdGFibGUtPmFsaXN0ICRvdnJsZC1odCQpKQoJIDs7KGRpc3BsYXkgaHQpIChuZXds aW5lKQoKCgkgKGRlZmluZSBwcm9jLWxzdCAoaGFzaC10YWJsZS1yZWYgJG92cmxkLWh0JCBxcHJv YykpIDs7ICBleGFtcGxlOiAoKG51bWJlcj8gc3RyaW5nPykgKGxhbWJkYSAobiBzKSAoZGlzcGxh eSBuKSAoZGlzcGxheSBzKSAobmV3bGluZSkpKQoJIDs7KGRpc3BsYXkgInByb2MtbHN0PSIpIChk aXNwbGF5IHByb2MtbHN0KQoJIDs7KG5ld2xpbmUpCgkgCgkgKGRlZmluZSAoY2hlY2stYXJncy1s c3QgcHJlZC1saXN0KSA7IGNoZWNrIGFyZ3VtZW50cyBsaXN0IG1hdGNoIHByZWRpY2F0ZXMKCSAg IDs7KGRpc3BsYXkgInByZWQtbGlzdD0iKSAoZGlzcGxheSBwcmVkLWxpc3QpIChuZXdsaW5lKQoJ ICAgOzsoZGlzcGxheSAiYXJncy1sc3Q9IikgKGRpc3BsYXkgYXJncy1sc3QpIChuZXdsaW5lKQoJ ICAgKGNoZWNrLWFyZ3VtZW50cyBwcmVkLWxpc3QgYXJncy1sc3QpKQoKCgoJIChkZWZpbmUgKHRl c3QtcHJvYyBwcmVkLXByb2MtbGlzdCkgOyB0ZXN0IHRoZSBwcm9jZWR1cmUgaWYgaXQgbWF0Y2hl cyB3aXRoIGFyZ3VtZW50cwoJICAgOzsoZGlzcGxheSAicHJlZC1wcm9jLWxpc3Q9IikgKGRpc3Bs YXkgcHJlZC1wcm9jLWxpc3QpIChuZXdsaW5lKQoJICAgKGlmIChjaGVjay1hcmdzLWxzdCAoY2Fy IHByZWQtcHJvYy1saXN0KSkgOzsgY2hlY2sgYXJncwoJICAgICAgIChjYXIgKGNkciAgcHJlZC1w cm9jLWxpc3QpKSA7OyByZXR1cm4gcHJvY2VkdXJlCgkgICAgICAgI2YpKQoKCSAKCSAoZGVmaW5l IHByb2Mtc2VhcmNoLXJlc3VsdCAoYW55IHRlc3QtcHJvYyBwcm9jLWxzdCkpIDsgc2VhcmNoIGZv ciBhIHByb2NlZHVyZSBtYXRjaGluZyBhcmd1bWVudHMKCgkgCgkgOzsoZGlzcGxheSAicHJvYy1z ZWFyY2gtcmVzdWx0PSIpIChkaXNwbGF5IHByb2Mtc2VhcmNoLXJlc3VsdCkgKG5ld2xpbmUpCgkg CgkgKGNvbmR4IChwcm9jLXNlYXJjaC1yZXN1bHQgKGFwcGx5IHByb2Mtc2VhcmNoLXJlc3VsdCBh cmdzLWxzdCkpCgkJKGV4ZWMKCQkgKGRlZmluZSBuYi1hcmdzIChsZW5ndGggYXJncy1sc3QpKSkK CQkoKD4gbmItYXJncyAyKSAgIDs7KGRpc3BsYXkgIj4yIGFyZ3MiKSAobmV3bGluZSkKCQkgKHBy b2MgKGNhciBhcmdzLWxzdCkgKGFwcGx5IHByb2MgKGNkciBhcmdzLWxzdCkpKSkKCQkoZWxzZQoJ CSA7OyhkaXNwbGF5ICJlbHNlIikgKG5ld2xpbmUpCgkJIChhcHBseSBvcmlnLXByb2MgYXJncy1s c3QpKSkpCiAgICAgICAKICAgICAgIDs7KGhhc2gtdGFibGUtc2V0ISAkb3ZybGQtaHQkIHFwcm9j IChsaXN0IChsaXN0IChsaXN0IG51bWJlcj8gbnVtYmVyPykgb3JpZy1wcm9jKSkpCiAgICAgICAo aGFzaC10YWJsZS1zZXQhICRvdnJsZC1odCQgcXByb2MgJygpKQoKICAgICAgIDs7KHJlcGxhY2Ut b3BlcmF0b3IhIG9yaWctcHJvYyBwcm9jKQogICAgICAgCiAgICAgICApKSkpIAoKCgoKKGRlZmlu ZS1zeW50YXggb3ZlcmxvYWQtZXhpc3Rpbmctb3BlcmF0b3IKICAKICAoc3ludGF4LXJ1bGVzICgp CgogICAgKChfIG9yaWctZnVuY3QgZnVuY3QgKHByZWQtYXJnMSAuLi4pKQoKICAgICAob3Zlcmxv YWQgb3JpZy1mdW5jdCBmdW5jdCAocHJlZC1hcmcxIC4uLikpKSkpCgoKKGRlZmluZS1zeW50YXgg b3ZlcmxvYWQKCiAgKHN5bnRheC1ydWxlcyAoKQoKICAgIDs7IGFyZ3VtZW50cyBhcmUgZnVuY3Rp b24gdG8gYmUgb3ZlcmxvYWRlZCwgcHJvY2VkdXJlIHRoYXQgZG8gdGhlIG92ZXJsb2FkaW5nLCBs aXN0IG9mIHByZWRpY2F0ZSB0byBjaGVjayB0aGUgYXJndW1lbnRzCgogICAgKChfIG9yaWctZnVu Y3QgZnVuY3QgKHByZWQtYXJnMSAuLi4pKQoKICAgICAobGV0KiAoKHFvcmlnLWZ1bmN0IChxdW90 ZSBvcmlnLWZ1bmN0KSkKCSAgICAob3ZybGQtbHN0IChoYXNoLXRhYmxlLXJlZiAkb3ZybGQtaHQk IHFvcmlnLWZ1bmN0KSkpCiAgICAgICA7OyhkaXNwbGF5IHFvcmlnLWZ1bmN0KSAobmV3bGluZSkK ICAgICAgIChoYXNoLXRhYmxlLXNldCEgJG92cmxkLWh0JCBxb3JpZy1mdW5jdAoJCQkoY29ucyAo bGlzdCAobGlzdCBwcmVkLWFyZzEgLi4uKSA7OyBleGFtcGxlOiAoKG51bWJlcj8gc3RyaW5nPykg KGxhbWJkYSAobiBzKSAoZGlzcGxheSBuKSAoZGlzcGxheSBzKSAobmV3bGluZSkpKQoJCQkJICAg IGZ1bmN0KQoJCQkgICAgICBvdnJsZC1sc3QpKSkpKSkKIAkgCgo= --0000000000004ce805060954d335 Content-Type: application/octet-stream; name="condx.scm" Content-Disposition: attachment; filename="condx.scm" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lok5y9782 OzsgY29uZHg6IGNvbmQoaXRpb25hbHMpIHdpdGggb3B0aW9uYWwgZXhlY3V0aW9uIG9mIHN0YXRl bWVudHMgYmVmb3JlCgkJCQkJOwoKOyBUaGlzIGZpbGUgaXMgcGFydCBvZiBTY2hlbWUrCgo7OyBD b3B5cmlnaHQgMjAyMSBEYW1pZW4gTUFUVEVJCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCgo7IGV4YW1wbGU6 CjsoZGVmaW5lIHggMSkKOyhjb25keCAoKD0geCA3KSAnbmV2ZXIpCjsgICAgICAgIChleGVjCjsg ICAgICAgICAgKGRlZmluZSB5IDMpCjsgICAgICAgICAgKHNldCEgeCA3KSkKOyAgICAgICAgKCg9 IHkgMSkgJ2RlZmluaXRlbHlfbm90KQo7ICAgICAgICAoZXhlYwo7ICAgICAgICAgIChzZXQhIHkg MTApCjsgICAgICAgICAgKGRlZmluZSB6IDIpKQo7ICAgICAgICAoKD0geCA3KSAoKyB4IHkgeikp CjsgICAgICAgIChlbHNlICd5b3Vfc2hvdWxkX25vdF9iZV9oZXJlKSkKOwo7IDE5CgooZGVmaW5l LXN5bnRheCBjb25keAogIChzeW50YXgtcnVsZXMgKGV4ZWMgZWxzZSkKICAgICgoXykgJygpKSA7 OyBhbGxvdyBubyBlbHNlIGNsYXVzZQogICAgKChfIChlbHNlIGUgLi4uKSkKICAgICAobGV0ICgp IGUgLi4uKSkKICAgICgoXyAoZXhlYyBzIC4uLikgZDEgLi4uKQogICAgIChsZXQgKCkgcyAuLi4g KGNvbmR4IGQxIC4uLikpKQogICAgKChfICh0IGUgLi4uKSB0YWlsIC4uLikKICAgICAoaWYgdAog ICAgICAgICAobGV0ICgpIGUgLi4uKQogICAgICAgICAoY29uZHggdGFpbCAuLi4pKSkpKQoKOzsg KGRlZmluZS1zeW50YXggY29uZHgKOzsgIChzeW50YXgtcnVsZXMgKGV4ZWMgZWxzZSkKOzsgICAg KChfKQogOzsgICAgIChlcnJvciAnY29uZHggIk5vIGVsc2UgY2xhdXNlIikpCjs7ICAgICgoXyAo ZWxzZSBlIC4uLikpCjs7ICAgICAobGV0ICgpIGUgLi4uKSkKOzsgICAgKChfIChleGVjIHMgLi4u KSBkMSAuLi4pCjs7ICAgICAobGV0ICgpIHMgLi4uIChjb25keCBkMSAuLi4pKSkKOzsgICAgKChf ICh0IGUgLi4uKSB0YWlsIC4uLikKOzsgICAgIChpZiB0Cjs7ICAgICAgICAgKGxldCAoKSBlIC4u LikKOzsgICAgICAgICAoY29uZHggdGFpbCAuLi4pKSkpKQoKOzsgd2FybmluZyB0aGlzIG9uZXMg YmVoYXZlcyBkaWZmZXJlbnRseSAoY2FuIG5vdCByZW1lbWJlciB0aGUgcHJvYmxlbSkKKGRlZmlu ZS1zeW50YXggY29uZHgtYmVnaW4KICAoc3ludGF4LXJ1bGVzIChleGVjIGVsc2UpCiAgICAoKF8p ICcoKSkgOzsgYWxsb3cgbm8gZWxzZSBjbGF1c2UKICAgICgoXyAoZWxzZSBlIC4uLikpCiAgICAg KGJlZ2luIGUgLi4uKSkKICAgICgoXyAoZXhlYyBzIC4uLikgZDEgLi4uKQogICAgIChiZWdpbiBz IC4uLiAoY29uZHgtYmVnaW4gZDEgLi4uKSkpCiAgICAoKF8gKHQgZSAuLi4pIHRhaWwgLi4uKQog ICAgIChpZiB0CiAgICAgICAgIChiZWdpbiBlIC4uLikKICAgICAgICAgKGNvbmR4LWJlZ2luIHRh aWwgLi4uKSkpKSkKCgo7OyAoZGVmaW5lLXN5bnRheCBjb25keC1iZWdpbgo7OyAgIChzeW50YXgt cnVsZXMgKGV4ZWMgZWxzZSkKOzsgICAgICgoXykKOzsgICAgICAoZXJyb3IgJ2NvbmR4LWJlZ2lu ICJObyBlbHNlIGNsYXVzZSIpKQo7OyAgICAgKChfIChlbHNlIGUgLi4uKSkKOzsgICAgICAoYmVn aW4gZSAuLi4pKQo7OyAgICAgKChfIChleGVjIHMgLi4uKSBkMSAuLi4pCjs7ICAgICAgKGJlZ2lu IHMgLi4uIChjb25keC1iZWdpbiBkMSAuLi4pKSkKOzsgICAgICgoXyAodCBlIC4uLikgdGFpbCAu Li4pCjs7ICAgICAgKGlmIHQKOzsgICAgICAgICAgKGJlZ2luIGUgLi4uKQo7OyAgICAgICAgICAo Y29uZHgtYmVnaW4gdGFpbCAuLi4pKSkpKQoKCjs7IChkZWZpbmUgeCAxKQo7OyAoY29uZHggKCg9 IHggNykgJ25ldmVyKQo7OyAgICAgICAgIChleGVjCjs7ICAgICAgICAgICAoZGVmaW5lIHkgMykK OzsgICAgICAgICAgIChzZXQhIHggNykpCjs7ICAgICAgICAgKCg9IHkgMSkgJ2RlZmluaXRlbHlf bm90KQo7OyAgICAgICAgIChleGVjCjs7ICAgICAgICAgICAoc2V0ISB5IDEwKQo7OyAgICAgICAg ICAgKGRlZmluZSB6IDIpKQo7OyAgICAgICAgICgoPSB4IDcpICgrIHggeSB6KSkKOzsgICAgICAg ICAoZWxzZSAneW91X3Nob3VsZF9ub3RfYmVfaGVyZSkpCgo7OyAoZGVmaW5lIHkgMCkKOzsgKGRl ZmluZSB6IDApCjs7IChzZXQhIHggMSkKOzsgKGNvbmR4LWJlZ2luICgoPSB4IDcpICduZXZlcikK OzsgICAgICAgICAoZXhlYwo7OyAgICAgICAgICAgKHNldCEgeSAzKQo7OyAgICAgICAgICAgKHNl dCEgeCA3KSkKOzsgICAgICAgICAoKD0geSAxKSAnZGVmaW5pdGVseV9ub3QpCjs7ICAgICAgICAg KGV4ZWMKOzsgICAgICAgICAgIChzZXQhIHkgMTApCjs7ICAgICAgICAgICAoc2V0ISB6IDIpKQo7 OyAgICAgICAgICgoPSB4IDcpICgrIHggeSB6KSkKOzsgICAgICAgICAoZWxzZSAneW91X3Nob3Vs ZF9ub3RfYmVfaGVyZSkpCgo= --0000000000004ce805060954d335--