From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by sourceware.org (Postfix) with ESMTPS id 867D73858C5F for ; Sat, 30 Sep 2023 20:11:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 867D73858C5F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-99c136ee106so2075432166b.1 for ; Sat, 30 Sep 2023 13:11:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696104718; x=1696709518; 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=KDO4l9Kgs8jxO+H8w/KsT3C2iyCWPdvJETq2zGbHylU=; b=nZWwecyvh/ctm97B5qwXn2YIOcu0OciUqxBbwq2Z57DUAGwtlWa0DPXuil1jisim0H amNoy91pwsisBuOMSfE66Fmnkfu5rFaPNV0i4S4s28YSZpFJtRriLJrG3HT+foqAl24O AWvAc/Tb8cG/sXHkZvz1Rz0KzWSUh4QuSnprUHi+h00gud6AGiMjOKxheEbBZpKNuqck jV1RGJm4WPkeurmGEHz61MeRYRJ6b/T+jL/hEKE0WXvpSMFp5dpvQChxwf1ajTbzzX2G XEJfgHis8S6lT2nZq9EC6bMk71pzV8qHfnEqF8I56mDUqnP3IyRyyKknyggha3uCJvlB h97Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696104718; x=1696709518; 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=KDO4l9Kgs8jxO+H8w/KsT3C2iyCWPdvJETq2zGbHylU=; b=UOqhJ2MZGg6vL/1Vhjph9udQBH/Q4Rq5T6lxCWKbf80Bx79sCtGg2DrMite/lKaw2h +a9Igvj/vbUsFiqCYstKmseb1fGl0rllwSzGKC6HMfnYdltiK8D8x2/Qc3ihl/m6VpDg qk/4SC4CFuSiyxJOhX8bxjuGv6/6mPom/9cElxD40PN5m5eJlnaJuuO29jMAgwbOQTWp kO1EwRX2godHy9HSuE5+4zZxRGMSaqtQRDmLseoU9atJOm4fM+DpRfpBGLnG8gCkNboj /JNth26FUQAJrbTwf+d7isCdKMF7F7a3JfYdlbLLUhJ+ed4Sb/EIERYT3cUR5KuJMyRj Xk/g== X-Gm-Message-State: AOJu0YwdZ1AkggrjDe+9Sap5N4eO0jzP0WpLuKyfjVfXLtnKrFizjsOa dTSBoYNykSEN3OoOkO13NZ9U89zKZ0qAp0bsD6k= X-Google-Smtp-Source: AGHT+IEHAsIUz/tndPZGE+00Rw8x281/tElUTXYGFk4fO9169/0JNH+tFnZGIs3tR8GA583WSzOraIoPc8ovwxR2f7Y= X-Received: by 2002:a17:907:c205:b0:9b2:89ec:7fca with SMTP id ti5-20020a170907c20500b009b289ec7fcamr7599009ejc.34.1696104717982; Sat, 30 Sep 2023 13:11:57 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Damien Mattei Date: Sat, 30 Sep 2023 22:11:45 +0200 Message-ID: Subject: Re: simple main example hello world To: Panicz Maciej Godek , Per Bothner Cc: kawa@sourceware.org Content-Type: multipart/mixed; boundary="00000000000037ed1306069927cd" X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,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: --00000000000037ed1306069927cd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Sep 30, 2023 at 8:36=E2=80=AFPM Panicz Maciej Godek wrote: > > Yes. String[] is parsed as ($bracket-apply$ String) not exactly, {String[]} is parsed this way in SRFI 105 curly-infix: > '{String[]} '($bracket-apply$ String) String[] without being in { } is an error: scheme@(guile-user)> 'String[] $1 =3D String While compiling expression: Syntax error: unknown location: unexpected syntax in form () and in Racket with a srfi-105 reader: > 'String[] 'String #%app: missing procedure expression; probably originally (), which is an illegal empty application in: (#%app) but this works but is useless: scheme@(guile-user)> '(String[]) $2 =3D (String ()) > '(String[]) ;;racket '(String ()) i'm writing a converter from srfi-105 curly infix to scheme prefix , i have a racket version in R5RS that should be portable to any scheme and can convert any curly-infix scheme code to prefix scheme but the scheme should be R5RS compliant and i'm not sure Kawa is ? > > When in doubt, you can always evaluate the expression: > > (call-with-input-string "(String[])" read) this could be a solution, i suppose it evaluate the string as if it was a kawa expression, but it is not very elegant if the [] are used often in kawa code , but it is a solution indeed. it works , the square bracket in a string is not modified by the reader: scheme@(guile-user)> '(call-with-input-string "(String[])" read) $3 =3D (call-with-input-string "(String[])" read) i just adapted the curly-infix2prefix.scm for kawa, it is in attachment. It convert a curly-infix program in prefix scheme allowing to use syntax of SRFI-105 curly infix with Racket.But it is in command line not integrated in REPL. --00000000000037ed1306069927cd Content-Type: application/octet-stream; name="curly-infix2prefix.scm" Content-Disposition: attachment; filename="curly-infix2prefix.scm" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ln6gui4e0 Cjs7IENvcHlyaWdodCAoQykgMjAxMiBEYXZpZCBBLiBXaGVlbGVyIGFuZCBBbGFuIE1hbnVlbCBL LiBHbG9yaWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgo7OyBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUg U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKCjs7IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKOzsgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKOzsgbW9kaWZpY2F0aW9uIGZv ciBLYXdhIGJ5IERhbWllbiBNYXR0ZWkKCjs7IHVzZSB3aXRoOiBrYXdhIGN1cmx5LWluZml4MnBy ZWZpeC5zY20gZmlsZTJwYXJzZS5zY20KCgooZGVmaW5lIChsaXRlcmFsLXJlYWQtc3ludGF4IHNy YykKCiAgKGRlZmluZSBpbiAob3Blbi1pbnB1dC1maWxlIHNyYykpCiAgKGRlZmluZSBsc3QtY29k ZSAocHJvY2Vzcy1pbnB1dC1jb2RlLXRhaWwtcmVjIGluKSkKICBsc3QtY29kZSkKIAoKOzsgcmVh ZCBhbGwgdGhlIGV4cHJlc3Npb24gb2YgcHJvZ3JhbQogCihkZWZpbmUgKHByb2Nlc3MtaW5wdXQt Y29kZS1yZWMgaW4pCiAgKGRlZmluZSByZXN1bHQgKGN1cmx5LWluZml4LXJlYWQgaW4pKSAgOzsg cmVhZCBhbiBleHByZXNzaW9uCiAgKGlmIChlb2Ytb2JqZWN0PyByZXN1bHQpCiAgICAgICcoKQog ICAgICAoY29ucyByZXN1bHQgKHByb2Nlc3MtaW5wdXQtY29kZS1yZWMgaW4pKSkpCgoKOzsgcmVh ZCBhbGwgdGhlIGV4cHJlc3Npb24gb2YgcHJvZ3JhbQo7OyBhIHRhaWwgcmVjdXJzaXZlIHZlcnNp b24KKGRlZmluZSAocHJvY2Vzcy1pbnB1dC1jb2RlLXRhaWwtcmVjIGluKSA7OyBpbjogcG9ydAog IAogIChkZWZpbmUgKHByb2Nlc3MtaW5wdXQgYWNjKQogICAgCiAgICAoZGVmaW5lIHJlc3VsdCAo Y3VybHktaW5maXgtcmVhZCBpbikpICA7OyByZWFkIGFuIGV4cHJlc3Npb24KICAgIAogICAgKGlm IChlb2Ytb2JqZWN0PyByZXN1bHQpCgkocmV2ZXJzZSBhY2MpCgkocHJvY2Vzcy1pbnB1dCAoY29u cyByZXN1bHQgYWNjKSkpKQogIAogIChwcm9jZXNzLWlucHV0ICcoKSkpCgoKICA7IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIDsgQ3VybHktaW5maXggc3VwcG9ydCBwcm9jZWR1cmVz CiAgOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgOyBSZXR1cm4gdHJ1ZSBpZiBs eXN0IGhhcyBhbiBldmVuICMgb2YgcGFyYW1ldGVycywgYW5kIHRoZSAoYWx0ZXJuYXRpbmcpCiAg OyBmaXJzdCBwYXJhbWV0ZXJzIGFyZSAib3AiLiAgVXNlZCB0byBkZXRlcm1pbmUgaWYgYSBsb25n ZXIgbHlzdCBpcyBpbmZpeC4KICA7IElmIHBhc3NlZCBlbXB0eSBsaXN0LCByZXR1cm5zIHRydWUg KHNvIHJlY3Vyc2lvbiB3b3JrcyBjb3JyZWN0bHkpLgogIChkZWZpbmUgKGV2ZW4tYW5kLW9wLXBy ZWZpeD8gb3AgbHlzdCkKICAgIChjb25kCiAgICAgICgobnVsbD8gbHlzdCkgI3QpCiAgICAgICgo bm90IChwYWlyPyBseXN0KSkgI2YpCiAgICAgICgobm90IChlcXVhbD8gb3AgKGNhciBseXN0KSkp ICNmKSA7IGZhaWwgLSBvcGVyYXRvcnMgbm90IHRoZSBzYW1lCiAgICAgICgobm90IChwYWlyPyAo Y2RyIGx5c3QpKSkgICNmKSA7IFdyb25nICMgb2YgcGFyYW1ldGVycyBvciBpbXByb3BlcgogICAg ICAoI3QgICAoZXZlbi1hbmQtb3AtcHJlZml4PyBvcCAoY2RkciBseXN0KSkpKSkgOyByZWN1cnNl LgoKICA7IFJldHVybiB0cnVlIGlmIHRoZSBseXN0IGlzIGluIHNpbXBsZSBpbmZpeCBmb3JtYXQK ICA7IChhbmQgdGh1cyBzaG91bGQgYmUgcmVvcmRlcmVkIGF0IHJlYWQgdGltZSkuCiAgKGRlZmlu ZSAoc2ltcGxlLWluZml4LWxpc3Q/IGx5c3QpCiAgICAoYW5kCiAgICAgIChwYWlyPyBseXN0KSAg ICAgICAgICAgOyBNdXN0IGhhdmUgbGlzdDsgICcoKSBkb2Vzbid0IGNvdW50LgogICAgICAocGFp cj8gKGNkciBseXN0KSkgICAgIDsgTXVzdCBoYXZlIGEgc2Vjb25kIGFyZ3VtZW50LgogICAgICAo cGFpcj8gKGNkZHIgbHlzdCkpICAgIDsgTXVzdCBoYXZlIGEgdGhpcmQgYXJndW1lbnQgKHdlIGNo ZWNrIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB0aGlzIHdheSBmb3IgcGVyZm9y bWFuY2UpCiAgICAgIChldmVuLWFuZC1vcC1wcmVmaXg/IChjYWRyIGx5c3QpIChjZHIgbHlzdCkp KSkgOyB0cnVlIGlmIHJlc3QgaXMgc2ltcGxlCgogIDsgUmV0dXJuIGFsdGVybmF0aW5nIHBhcmFt ZXRlcnMgaW4gYSBseXN0ICgxc3QsIDNyZCwgNXRoLCBldGMuKQogIChkZWZpbmUgKGFsdGVybmF0 aW5nLXBhcmFtZXRlcnMgbHlzdCkKICAgIChpZiAob3IgKG51bGw/IGx5c3QpIChudWxsPyAoY2Ry IGx5c3QpKSkKICAgICAgbHlzdAogICAgICAoY29ucyAoY2FyIGx5c3QpIChhbHRlcm5hdGluZy1w YXJhbWV0ZXJzIChjZGRyIGx5c3QpKSkpKQoKICA7IE5vdCBhIHNpbXBsZSBpbmZpeCBsaXN0IC0g dHJhbnNmb3JtIGl0LiAgV3JpdHRlbiBhcyBhIHNlcGFyYXRlIHByb2NlZHVyZQogIDsgc28gdGhh dCBmdXR1cmUgZXhwZXJpbWVudHMgb3IgU1JGSXMgY2FuIGVhc2lseSByZXBsYWNlIGp1c3QgdGhp cyBwaWVjZS4KICAoZGVmaW5lICh0cmFuc2Zvcm0tbWl4ZWQtaW5maXggbHlzdCkKICAgICAoY29u cyAnJG5meCQgbHlzdCkpCgogIDsgR2l2ZW4gY3VybHktaW5maXggbHlzdCwgbWFwIGl0IHRvIGl0 cyBmaW5hbCBpbnRlcm5hbCBmb3JtYXQuCiAgKGRlZmluZSAocHJvY2Vzcy1jdXJseSBseXN0KQog ICAgKGNvbmQKICAgICAoKG5vdCAocGFpcj8gbHlzdCkpIGx5c3QpIDsgRS5HLiwgbWFwIHt9IHRv ICgpLgogICAgICgobnVsbD8gKGNkciBseXN0KSkgOyBNYXAge2F9IHRvIGEuCiAgICAgICAoY2Fy IGx5c3QpKQogICAgICgoYW5kIChwYWlyPyAoY2RyIGx5c3QpKSAobnVsbD8gKGNkZHIgbHlzdCkp KSA7IE1hcCB7YSBifSB0byAoYSBiKS4KICAgICAgIGx5c3QpCiAgICAgKChzaW1wbGUtaW5maXgt bGlzdD8gbHlzdCkgOyBNYXAge2EgT1AgYiBbT1AgYy4uLl19IHRvIChPUCBhIGIgW2MuLi5dKQog ICAgICAgKGNvbnMgKGNhZHIgbHlzdCkgKGFsdGVybmF0aW5nLXBhcmFtZXRlcnMgbHlzdCkpKQog ICAgICgjdCAgKHRyYW5zZm9ybS1taXhlZC1pbmZpeCBseXN0KSkpKQoKCiAgOyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICA7IEtleSBwcm9jZWR1cmVz IHRvIGltcGxlbWVudCBuZW90ZXJpYy1leHByZXNzaW9ucwogIDsgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogIDsgUmVhZCB0aGUgImluc2lkZSIgb2Yg YSBsaXN0IHVudGlsIGl0cyBtYXRjaGluZyBzdG9wLWNoYXIsIHJldHVybmluZyBsaXN0LgogIDsg c3RvcC1jaGFyIG5lZWRzIHRvIGJlIGNsb3NpbmcgcGFyZW4sIGNsb3NpbmcgYnJhY2tldCwgb3Ig Y2xvc2luZyBicmFjZS4KICA7IFRoaXMgaXMgbGlrZSByZWFkLWRlbGltaXRlZC1saXN0IG9mIENv bW1vbiBMaXNwLgogIDsgVGhpcyBpbXBsZW1lbnRzIGEgdXNlZnVsIGV4dGVuc2lvbjogKC4gYikg cmV0dXJucyBiLgogIChkZWZpbmUgKG15LXJlYWQtZGVsaW1pdGVkLWxpc3QgbXktcmVhZCBzdG9w LWNoYXIgcG9ydCkKICAgIChsZXQqCiAgICAgICgoYyAgIChwZWVrLWNoYXIgcG9ydCkpKQogICAg ICAoY29uZAogICAgICAgICgoZW9mLW9iamVjdD8gYykgKHJlYWQtZXJyb3IgIkVPRiBpbiBtaWRk bGUgb2YgbGlzdCIpICcoKSkKICAgICAgICAoKGVxdj8gYyAjXDspCiAgICAgICAgICAoY29uc3Vt ZS10by1lb2wgcG9ydCkKICAgICAgICAgIChteS1yZWFkLWRlbGltaXRlZC1saXN0IG15LXJlYWQg c3RvcC1jaGFyIHBvcnQpKQogICAgICAgICgobXktY2hhci13aGl0ZXNwYWNlPyBjKQogICAgICAg ICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgKG15LXJlYWQtZGVsaW1pdGVkLWxpc3QgbXkt cmVhZCBzdG9wLWNoYXIgcG9ydCkpCiAgICAgICAgKChjaGFyPT8gYyBzdG9wLWNoYXIpCiAgICAg ICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAnKCkpCiAgICAgICAgKChvciAoZXE/IGMg I1wpKSAoZXE/IGMgI1xdKSAoZXE/IGMgI1x9KSkKICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkK ICAgICAgICAgIChyZWFkLWVycm9yICJCYWQgY2xvc2luZyBjaGFyYWN0ZXIiKSkKICAgICAgICAo I3QKICAgICAgICAgIChsZXQgKChkYXR1bSAobXktcmVhZCBwb3J0KSkpCiAgICAgICAgICAgIChj b25kCgkgICAgIDs7IHByb2Nlc3NpbmcgcGVyaW9kIC4gaXMgaW1wb3J0YW50IGZvciBmdW5jdGlv bnMgd2l0aCB2YXJpYWJsZSBudW1iZXJzIG9mIHBhcmFtZXRlcnM6IChmY3QgYXJnMSAuIHJlc3Rh cmdzKQoJICAgICAoKGVxPyBkYXR1bSAoc3RyaW5nLT5zeW1ib2wgKHN0cmluZyAjXC4pKSkgOzsg b25seSB0aGlzIG9uZSB3b3JrcyB3aXRoIFJhY2tldCBTY2hlbWUKICAgICAgICAgICAgICAgOzso KGVxPyBkYXR1bSAnLikgOzsgZG8gbm90IHdvcmtzIHdpdGggUmFja2V0IFNjaGVtZQogICAgICAg ICAgICAgICA7OygoZXE/IGRhdHVtICdwZXJpb2QpIDs7IHRoaXMgb25lIGFubmloaWxhdGUgdGhl IHByb2Nlc3Npbmc6IGRhdHVtIHdpbGwgbmV2ZXIgYmUgZXF1YWwgdG8gJ3BlcmlvZCAhCiAgICAg ICAgICAgICAgICAgKGxldCAoKGRhdHVtMiAobXktcmVhZCBwb3J0KSkpCiAgICAgICAgICAgICAg ICAgICAoY29uc3VtZS13aGl0ZXNwYWNlIHBvcnQpCiAgICAgICAgICAgICAgICAgICAoY29uZAog ICAgICAgICAgICAgICAgICAgICAoKGVvZi1vYmplY3Q/IGRhdHVtMikKICAgICAgICAgICAgICAg ICAgICAgIChyZWFkLWVycm9yICJFYXJseSBlb2YgaW4gKC4uLiAuKVxuIikKICAgICAgICAgICAg ICAgICAgICAgICcoKSkKICAgICAgICAgICAgICAgICAgICAgKChub3QgKGVxdj8gKHBlZWstY2hh ciBwb3J0KSBzdG9wLWNoYXIpKQogICAgICAgICAgICAgICAgICAgICAgKHJlYWQtZXJyb3IgIkJh ZCBjbG9zaW5nIGNoYXJhY3RlciBhZnRlciAuIGRhdHVtIikpCiAgICAgICAgICAgICAgICAgICAg ICgjdAogICAgICAgICAgICAgICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgICAg ICAgICAgICAgICBkYXR1bTIpKSkpCiAgICAgICAgICAgICAgICgjdAogICAgICAgICAgICAgICAg ICAgKGNvbnMgZGF0dW0KICAgICAgICAgICAgICAgICAgICAgKG15LXJlYWQtZGVsaW1pdGVkLWxp c3QgbXktcmVhZCBzdG9wLWNoYXIgcG9ydCkpKSkpKSkpKQoKCiAgOyBJbXBsZW1lbnQgbmVvdGVy aWMtZXhwcmVzc2lvbidzIHByZWZpeGVkICgpLCBbXSwgYW5kIHt9LgogIDsgQXQgdGhpcyBwb2lu dCwgd2UgaGF2ZSBqdXN0IGZpbmlzaGVkIHJlYWRpbmcgc29tZSBleHByZXNzaW9uLCB3aGljaAog IDsgTUlHSFQgYmUgYSBwcmVmaXggb2Ygc29tZSBsb25nZXIgZXhwcmVzc2lvbi4gIEV4YW1pbmUg dGhlIG5leHQKICA7IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZDsgaWYgaXQncyBhbiBvcGVuaW5n IHBhcmVuLCBicmFja2V0LCBvciBicmFjZSwKICA7IHRoZW4gdGhlIGV4cHJlc3Npb24gInByZWZp eCIgaXMgYWN0dWFsbHkgYSBwcmVmaXguCiAgOyBPdGhlcndpc2UsIGp1c3QgcmV0dXJuIHRoZSBw cmVmaXggYW5kIGRvIG5vdCBjb25zdW1lIHRoYXQgbmV4dCBjaGFyLgogIDsgVGhpcyByZWN1cnNl cywgdG8gaGFuZGxlIGZvcm1hdHMgbGlrZSBmKHgpKHkpLgogIChkZWZpbmUgKG5lb3RlcmljLXBy b2Nlc3MtdGFpbCBwb3J0IHByZWZpeCkKICAgICAgKGxldCogKChjIChwZWVrLWNoYXIgcG9ydCkp KQogICAgICAgIChjb25kCiAgICAgICAgICAoKGVvZi1vYmplY3Q/IGMpIHByZWZpeCkKICAgICAg ICAgICgoY2hhcj0/IGMgI1woICkgOyBJbXBsZW1lbnQgZih4KQogICAgICAgICAgICAocmVhZC1j aGFyIHBvcnQpCiAgICAgICAgICAgIChuZW90ZXJpYy1wcm9jZXNzLXRhaWwgcG9ydAogICAgICAg ICAgICAgICAgKGNvbnMgcHJlZml4IChteS1yZWFkLWRlbGltaXRlZC1saXN0IG5lb3RlcmljLXJl YWQtcmVhbCAjXCkgcG9ydCkpKSkKICAgICAgICAgICgoY2hhcj0/IGMgI1xbICkgIDsgSW1wbGVt ZW50IGZbeF0KICAgICAgICAgICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgICAobmVvdGVy aWMtcHJvY2Vzcy10YWlsIHBvcnQKICAgICAgICAgICAgICAgICAgKGNvbnMgJyRicmFja2V0LWFw cGx5JAogICAgICAgICAgICAgICAgICAgIChjb25zIHByZWZpeAogICAgICAgICAgICAgICAgICAg ICAgKG15LXJlYWQtZGVsaW1pdGVkLWxpc3QgbmVvdGVyaWMtcmVhZC1yZWFsICNcXSBwb3J0KSkp KSkKICAgICAgICAgICgoY2hhcj0/IGMgI1x7ICkgIDsgSW1wbGVtZW50IGZ7eH0KICAgICAgICAg ICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgICAobmVvdGVyaWMtcHJvY2Vzcy10YWlsIHBv cnQKICAgICAgICAgICAgICAobGV0ICgodGFpbCAocHJvY2Vzcy1jdXJseQogICAgICAgICAgICAg ICAgICAgICAgKG15LXJlYWQtZGVsaW1pdGVkLWxpc3QgbmVvdGVyaWMtcmVhZC1yZWFsICNcfSBw b3J0KSkpKQogICAgICAgICAgICAgICAgKGlmIChlcXY/IHRhaWwgJygpKQogICAgICAgICAgICAg ICAgICAobGlzdCBwcmVmaXgpIDsgTWFwIGZ7fSB0byAoZiksIG5vdCAoZiAoKSkuCiAgICAgICAg ICAgICAgICAgIChsaXN0IHByZWZpeCB0YWlsKSkpKSkKICAgICAgICAgICgjdCBwcmVmaXgpKSkp CgoKICA7IFRvIGltcGxlbWVudCBuZW90ZXJpYy1leHByZXNzaW9ucywgbW9kaWZ5IHRoZSByZWFk ZXIgc28KICA7IHRoYXQgW10gYW5kIHt9IGFyZSBhbHNvIGRlbGltaXRlcnMsIGFuZCBtYWtlIHRo ZSByZWFkZXIgZG8gdGhpczoKICA7IChsZXQqICgocHJlZml4CiAgOyAgICAgICAgICAgcmVhZC1l eHByZXNzaW9uLWFzLXVzdWFsCiAgOyAgICAgICApKQogIDsgICAoaWYgKGVvZi1vYmplY3Q/IHBy ZWZpeCkKICA7ICAgICBwcmVmaXgKICA7ICAgICAobmVvdGVyaWMtcHJvY2Vzcy10YWlsIHBvcnQg cHJlZml4KSkpCgogIDsgTW9kaWZ5IHRoZSBtYWluIHJlYWRlciBzbyB0aGF0IFtdIGFuZCB7fSBh cmUgYWxzbyBkZWxpbWl0ZXJzLCBhbmQgc28KICA7IHRoYXQgd2hlbiAjXHsgaXMgZGV0ZWN0ZWQs IHJlYWQgdXNpbmcgbXktcmVhZC1kZWxpbWl0ZWQtbGlzdAogIDsgYW55IGxpc3QgZnJvbSB0aGF0 IHBvcnQgdW50aWwgaXRzIG1hdGNoaW5nICNcfSwgdGhlbiBwcm9jZXNzCiAgOyB0aGF0IGxpc3Qg d2l0aCAicHJvY2Vzcy1jdXJseSIsIGxpa2UgdGhpczoKICA7ICAgKHByb2Nlc3MtY3VybHkgKG15 LXJlYWQtZGVsaW1pdGVkLWxpc3QgI1x9IHBvcnQpKQoKCgoKOyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICA7IERlbW8gcHJvY2VkdXJlcyB0byBpbXBs ZW1lbnQgY3VybHktaW5maXggYW5kIG5lb3RlcmljIHJlYWRlcnMKICA7IC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICA7IFRoaXMgaW1wbGVtZW50cyBh biBlbnRpcmUgcmVhZGVyLCBhcyBhIGRlbW9uc3RyYXRpb24sIGJ1dCBpZiB5b3UgY2FuCiAgOyB1 cGRhdGUgeW91ciBleGlzdGluZyByZWFkZXIgeW91IHNob3VsZCBqdXN0IHVwZGF0ZSB0aGF0IGlu c3RlYWQuCiAgOyBUaGlzIGlzIGEgc2ltcGxlIFI1UlMgcmVhZGVyLCB3aXRoIGEgZmV3IG1pbm9y IChjb21tb24pIGV4dGVuc2lvbnMuCiAgOyBUaGUgIm15LXJlYWQiIGlzIGNhbGxlZCBpZiBpdCBo YXMgdG8gcmVjdXJzZS4KICAoZGVmaW5lICh1bmRlcmx5aW5nLXJlYWQgbXktcmVhZCBwb3J0KQog ICAgKGxldCogKChjIChwZWVrLWNoYXIgcG9ydCkpKQogICAgICAoY29uZAogICAgICAgICgoZW9m LW9iamVjdD8gYykgYykKICAgICAgICAoKGNoYXI9PyBjICNcOykKICAgICAgICAgIChjb25zdW1l LXRvLWVvbCBwb3J0KQogICAgICAgICAgKG15LXJlYWQgcG9ydCkpCiAgICAgICAgKChteS1jaGFy LXdoaXRlc3BhY2U/IGMpCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAobXkt cmVhZCBwb3J0KSkKICAgICAgICAoKGNoYXI9PyBjICNcKCApCiAgICAgICAgICAocmVhZC1jaGFy IHBvcnQpCiAgICAgICAgICAobXktcmVhZC1kZWxpbWl0ZWQtbGlzdCBteS1yZWFkICNcKSBwb3J0 KSkKICAgICAgICAoKGNoYXI9PyBjICNcWyApCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAg ICAgICAgICAobXktcmVhZC1kZWxpbWl0ZWQtbGlzdCBteS1yZWFkICNcXSBwb3J0KSkKICAgICAg ICAoKGNoYXI9PyBjICNceyApCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAo cHJvY2Vzcy1jdXJseQogICAgICAgICAgICAobXktcmVhZC1kZWxpbWl0ZWQtbGlzdCBuZW90ZXJp Yy1yZWFkLXJlYWwgI1x9IHBvcnQpKSkKICAgICAgICA7IEhhbmRsZSBtaXNzaW5nICgsIFssIHsg OgogICAgICAgICgoY2hhcj0/IGMgI1wpICkKICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkKICAg ICAgICAgIChyZWFkLWVycm9yICJDbG9zaW5nIHBhcmVudGhlc2lzIHdpdGhvdXQgb3BlbmluZyIp CiAgICAgICAgICAobXktcmVhZCBwb3J0KSkKICAgICAgICAoKGNoYXI9PyBjICNcXSApCiAgICAg ICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAocmVhZC1lcnJvciAiQ2xvc2luZyBicmFj a2V0IHdpdGhvdXQgb3BlbmluZyIpCiAgICAgICAgICAobXktcmVhZCBwb3J0KSkKICAgICAgICAo KGNoYXI9PyBjICNcfSApCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAocmVh ZC1lcnJvciAiQ2xvc2luZyBicmFjZSB3aXRob3V0IG9wZW5pbmciKQogICAgICAgICAgKG15LXJl YWQgcG9ydCkpCiAgICAgICAgKChjaGFyPT8gYyAjXCIpIDsgU3RyaW5ncyBhcmUgZGVsaW1pdGVk IGJ5ICIsIHNvIGNhbiBjYWxsIGRpcmVjdGx5CiAgICAgICAgICAoZGVmYXVsdC1zY2hlbWUtcmVh ZCBwb3J0KSkKICAgICAgICAoKGNoYXI9PyBjICNcJykKICAgICAgICAgIChyZWFkLWNoYXIgcG9y dCkKICAgICAgICAgIChsaXN0ICdxdW90ZSAobXktcmVhZCBwb3J0KSkpCiAgICAgICAgKChjaGFy PT8gYyAjXGApCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAobGlzdCAncXVh c2lxdW90ZSAobXktcmVhZCBwb3J0KSkpCiAgICAgICAgKChjaGFyPT8gYyAjXCwpCiAgICAgICAg ICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgKChjaGFy PT8gI1xAIChwZWVrLWNoYXIgcG9ydCkpCiAgICAgICAgICAgICAgICAocmVhZC1jaGFyIHBvcnQp CiAgICAgICAgICAgICAgICAobGlzdCAndW5xdW90ZS1zcGxpY2luZyAobXktcmVhZCBwb3J0KSkp CiAgICAgICAgICAgICAgKCN0CiAgICAgICAgICAgICAgICAobGlzdCAndW5xdW90ZSAobXktcmVh ZCBwb3J0KSkpKSkKICAgICAgICAoKGlzbWVtYmVyPyBjIGRpZ2l0cykgOyBJbml0aWFsIGRpZ2l0 LgogICAgICAgICAgKHJlYWQtbnVtYmVyIHBvcnQgJygpKSkKICAgICAgICAoKGNoYXI9PyBjICNc IykgKHByb2Nlc3Mtc2hhcnAgbXktcmVhZCBwb3J0KSkKICAgICAgICAoKGNoYXI9PyBjICNcLikg KHByb2Nlc3MtcGVyaW9kIHBvcnQpKQogICAgICAgICgob3IgKGNoYXI9PyBjICNcKykgKGNoYXI9 PyBjICNcLSkpICA7IEluaXRpYWwgKyBvciAtCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAg ICAgICAgICAoaWYgKGlzbWVtYmVyPyAocGVlay1jaGFyIHBvcnQpIGRpZ2l0cykKICAgICAgICAg ICAgKHJlYWQtbnVtYmVyIHBvcnQgKGxpc3QgYykpCiAgICAgICAgICAgIChzdHJpbmctPnN5bWJv bCAoZm9sZC1jYXNlLW1heWJlIHBvcnQKICAgICAgICAgICAgICAobGlzdC0+c3RyaW5nIChjb25z IGMKICAgICAgICAgICAgICAgIChyZWFkLXVudGlsLWRlbGltIHBvcnQgbmVvdGVyaWMtZGVsaW1p dGVycykpKSkpKSkKICAgICAgICAoI3QgOyBOb3RoaW5nIGVsc2UuICBNdXN0IGJlIGEgc3ltYm9s IHN0YXJ0LgogICAgICAgICAgKHN0cmluZy0+c3ltYm9sIChmb2xkLWNhc2UtbWF5YmUgcG9ydAog ICAgICAgICAgICAobGlzdC0+c3RyaW5nCiAgICAgICAgICAgICAgKHJlYWQtdW50aWwtZGVsaW0g cG9ydCBuZW90ZXJpYy1kZWxpbWl0ZXJzKSkpKSkpKSkKCiAgKGRlZmluZSAoY3VybHktaW5maXgt cmVhZC1yZWFsIHBvcnQpCiAgICAodW5kZXJseWluZy1yZWFkIGN1cmx5LWluZml4LXJlYWQtcmVh bCBwb3J0KSkKCiAgKGRlZmluZSAoY3VybHktaW5maXgtcmVhZCAuIHBvcnQpCiAgICAoaWYgKG51 bGw/IHBvcnQpCiAgICAgIChjdXJseS1pbmZpeC1yZWFkLXJlYWwgKGN1cnJlbnQtaW5wdXQtcG9y dCkpCiAgICAgIChjdXJseS1pbmZpeC1yZWFkLXJlYWwgKGNhciBwb3J0KSkpKQoKICA7IEhlcmUn cyBhIHJlYWwgbmVvdGVyaWMgcmVhZGVyLgogIDsgVGhlIGtleSBwYXJ0IGlzIHRoYXQgaXQgaW1w bGVtZW50cyBbXSBhbmQge30gYXMgZGVsaW1pdGVycywgYW5kCiAgOyBhZnRlciBpdCByZWFkcyBp biBzb21lIGRhdHVtICh0aGUgInByZWZpeCIpLCBpdCBjYWxscwogIDsgbmVvdGVyaWMtcHJvY2Vz cy10YWlsIHRvIHNlZSBpZiB0aGVyZSdzIGEgInRhaWwiLgogIChkZWZpbmUgKG5lb3RlcmljLXJl YWQtcmVhbCBwb3J0KQogICAgKGxldCogKChwcmVmaXggKHVuZGVybHlpbmctcmVhZCBuZW90ZXJp Yy1yZWFkLXJlYWwgcG9ydCkpKQogICAgICAoaWYgKGVvZi1vYmplY3Q/IHByZWZpeCkKICAgICAg ICBwcmVmaXgKICAgICAgICAobmVvdGVyaWMtcHJvY2Vzcy10YWlsIHBvcnQgcHJlZml4KSkpKQoK ICAoZGVmaW5lIChuZW90ZXJpYy1yZWFkIC4gcG9ydCkKICAgIChpZiAobnVsbD8gcG9ydCkKICAg ICAgKG5lb3RlcmljLXJlYWQtcmVhbCAoY3VycmVudC1pbnB1dC1wb3J0KSkKICAgICAgKG5lb3Rl cmljLXJlYWQtcmVhbCAoY2FyIHBvcnQpKSkpCgoKICA7IC0tLS0tLS0tLS0tLS0tLS0tLQogIDsg U3VwcG9ydCBwcm9jZWR1cmVzCiAgOyAtLS0tLS0tLS0tLS0tLS0tLS0KCiAgKGRlZmluZSBkaWdp dHMgJygjXDAgI1wxICNcMiAjXDMgI1w0ICNcNSAjXDYgI1w3ICNcOCAjXDkpKQogIChkZWZpbmUg bGluZWZlZWQgKGludGVnZXItPmNoYXIgI3gwMDBBKSkgICAgICAgIDsgI1xuZXdsaW5lIGFrYSBc bi4KICAoZGVmaW5lIGNhcnJpYWdlLXJldHVybiAoaW50ZWdlci0+Y2hhciAjeDAwMEQpKSA7IFxy LgogIChkZWZpbmUgdGFiIChpbnRlZ2VyLT5jaGFyICN4MDAwOSkpCiAgKGRlZmluZSBsaW5lLXRh YiAoaW50ZWdlci0+Y2hhciAjeDAwMGIpKQogIChkZWZpbmUgZm9ybS1mZWVkIChpbnRlZ2VyLT5j aGFyICN4MDAwYykpCiAgKGRlZmluZSBsaW5lLWVuZGluZy1jaGFycyAobGlzdCBsaW5lZmVlZCBj YXJyaWFnZS1yZXR1cm4pKQogIChkZWZpbmUgd2hpdGVzcGFjZS1jaGFycwogICAgKGxpc3QgdGFi IGxpbmVmZWVkIGxpbmUtdGFiIGZvcm0tZmVlZCBjYXJyaWFnZS1yZXR1cm4gI1xzcGFjZSkpCgog IDsgU2hvdWxkIHdlIGZvbGQgY2FzZSBvZiBzeW1ib2xzIGJ5IGRlZmF1bHQ/CiAgOyAjZiBtZWFu cyBjYXNlLXNlbnNpdGl2ZSAoUjZSUyk7ICN0IG1lYW5zIGNhc2UtaW5zZW5zaXRpdmUgKFI1UlMp LgogIDsgSGVyZSB3ZSdsbCBzZXQgaXQgdG8gYmUgY2FzZS1zZW5zaXRpdmUsIHdoaWNoIGlzIGNv bnNpc3RlbnQgd2l0aCBSNlJTCiAgOyBhbmQgZ3VpbGUsIGJ1dCBOT1Qgd2l0aCBSNVJTLiAgTW9z dCBwZW9wbGUgd29uJ3Qgbm90aWNlLCBJCiAgOyBfbGlrZV8gY2FzZS1zZW5zaXRpdml0eSwgYW5k IHRoZSBsYXRlc3Qgc3BlYyBpcyBjYXNlLXNlbnNpdGl2ZSwKICA7IHNvIGxldCdzIHN0YXJ0IHdp dGggI2YgKGNhc2Utc2Vuc2l0aXZlKS4KICA7IFRoaXMgZG9lc24ndCBhZmZlY3QgY2hhcmFjdGVy IG5hbWVzOyBhcyBhbiBleHRlbnNpb24sCiAgOyB3ZSBhbHdheXMgYWNjZXB0IGFyYml0cmFyeSBj YXNlIGZvciB0aGVtLCBlLmcuLCAjXG5ld2xpbmUgb3IgI1xORVdMSU5FLgogIChkZWZpbmUgZm9s ZGNhc2UtZGVmYXVsdCAjZikKCiAgOyBSZXR1cm5zIGEgdHJ1ZSB2YWx1ZSAobm90IG5lY2Vzc2Fy aWx5ICN0KSBpZiBjaGFyIGVuZHMgYSBsaW5lLgogIChkZWZpbmUgKGNoYXItbGluZS1lbmRpbmc/ IGNoYXIpIChtZW1xIGNoYXIgbGluZS1lbmRpbmctY2hhcnMpKQoKICA7IFJldHVybnMgdHJ1ZSBp ZiBpdGVtIGlzIG1lbWJlciBvZiBseXN0LCBlbHNlIGZhbHNlLgogIChkZWZpbmUgKGlzbWVtYmVy PyBpdGVtIGx5c3QpCiAgICAgKHBhaXI/IChtZW1iZXIgaXRlbSBseXN0KSkpCgogIDsgQ3JlYXRl IG93biB2ZXJzaW9uLCBpbiBjYXNlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb21pdHMgc29t ZS4KICAoZGVmaW5lIChteS1jaGFyLXdoaXRlc3BhY2U/IGMpCiAgICAob3IgKGNoYXItd2hpdGVz cGFjZT8gYykgKGlzbWVtYmVyPyBjIHdoaXRlc3BhY2UtY2hhcnMpKSkKCiAgOyBJZiBmb2xkLWNh c2UgaXMgYWN0aXZlIG9uIHRoaXMgcG9ydCwgcmV0dXJuIHN0cmluZyAicyIgaW4gZm9sZGVkIGNh c2UuCiAgOyBPdGhlcndpc2UsIGp1c3QgcmV0dXJuICJzIi4gIFRoaXMgaXMgbmVlZGVkIHRvIHN1 cHBvcnQgb3VyCiAgOyBmb2xkY2FzZS1kZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWUgd2hlbiBw cm9jZXNzaW5nIHN5bWJvbHMuCiAgOyBUaGUgInN0cmluZy1mb2xkY2FzZSIgcHJvY2VkdXJlIGlz bid0IGV2ZXJ5d2hlcmUsCiAgOyBzbyB3ZSB1c2UgInN0cmluZy1kb3duY2FzZSIuCiAgKGRlZmlu ZSAoZm9sZC1jYXNlLW1heWJlIHBvcnQgcykKICAgIChpZiBmb2xkY2FzZS1kZWZhdWx0CiAgICAg IChzdHJpbmctZG93bmNhc2UgcykKICAgICAgcykpCgogIChkZWZpbmUgKGNvbnN1bWUtdG8tZW9s IHBvcnQpCiAgICA7IENvbnN1bWUgZXZlcnkgbm9uLWVvbCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJl bnQgbGluZS4KICAgIDsgRW5kIG9uIEVPRiBvciBlbmQtb2YtbGluZSBjaGFyLgogICAgOyBEbyBO T1QgY29uc3VtZSB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVyKHMpLgogICAgKGxldCAoKGMgKHBl ZWstY2hhciBwb3J0KSkpCiAgICAgIChjb25kCiAgICAgICAgKChub3QgKG9yIChlb2Ytb2JqZWN0 PyBjKQogICAgICAgICAgICAgICAgICAoY2hhci1saW5lLWVuZGluZz8gYykpKQogICAgICAgICAg KHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgKGNvbnN1bWUtdG8tZW9sIHBvcnQpKSkpKQoKICAo ZGVmaW5lIChjb25zdW1lLXdoaXRlc3BhY2UgcG9ydCkKICAgIChsZXQgKChjaGFyIChwZWVrLWNo YXIgcG9ydCkpKQogICAgICAoY29uZAogICAgICAgICgoZW9mLW9iamVjdD8gY2hhcikgY2hhcikK ICAgICAgICAoKGVxdj8gY2hhciAjXDspCiAgICAgICAgICAoY29uc3VtZS10by1lb2wgcG9ydCkK ICAgICAgICAgIChjb25zdW1lLXdoaXRlc3BhY2UgcG9ydCkpCiAgICAgICAgKChteS1jaGFyLXdo aXRlc3BhY2U/IGNoYXIpCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAoY29u c3VtZS13aGl0ZXNwYWNlIHBvcnQpKSkpKQoKICA7IElkZW50aWZ5aW5nIHRoZSBsaXN0IG9mIGRl bGltaXRlciBjaGFyYWN0ZXJzIGlzIGhhcmRlciB0aGFuIHlvdSdkIHRoaW5rLgogIDsgVGhpcyBs aXN0IGlzIGJhc2VkIG9uIFI2UlMgc2VjdGlvbiA0LjIuMSwgd2hpbGUgYWRkaW5nIFtdIGFuZCB7 fSwKICA7IGJ1dCByZW1vdmluZyAiIyIgZnJvbSB0aGUgZGVsaW1pdGVyIHNldC4KICA7IE5PVEU6 IFI2UlMgaGFzICIjIiBoYXMgYSBkZWxpbWl0ZXIuICBIb3dldmVyLCBSNVJTIGRvZXMgbm90LCBh bmQKICA7IFI3UlMgcHJvYmFibHkgd2lsbCBub3QgLSBodHRwOi8vdHJhYy5zYWNyaWRlby51cy93 Zy93aWtpL1dHMUJhbGxvdDNSZXN1bHRzCiAgOyBzaG93cyBhIHN0cm9uZyB2b3RlIEFHQUlOU1Qg IiMiIGJlaW5nIGEgZGVsaW1pdGVyLgogIDsgSGF2aW5nIHRoZSAiIyIgYXMgYSBkZWxpbWl0ZXIg bWVhbnMgdGhhdCB5b3UgY2Fubm90IGhhdmUgIiMiIGVtYmVkZGVkCiAgOyBpbiBhIHN5bWJvbCBu YW1lLCB3aGljaCBodXJ0cyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYW5kIGl0IGFsc28KICA7 IGJyZWFrcyBpbXBsZW1lbnRhdGlvbnMgbGlrZSBDaGlja2VuIChoYXMgbWFueSBzdWNoIGlkZW50 aWZpZXJzKSBhbmQKICA7IEdhbWJpdCAod2hpY2ggdXNlcyB0aGlzIGFzIGEgbmFtZXNwYWNlIHNl cGFyYXRvcikuCiAgOyBUaHVzLCB0aGlzIGxpc3QgZG9lcyBOT1QgaGF2ZSAiIyIgYXMgYSBkZWxp bWl0ZXIsIGNvbnRyYXZlbmluZyBSNlJTCiAgOyAoYnV0IGNvbnNpc3RlbnQgd2l0aCBSNVJTLCBw cm9iYWJseSBSN1JTLCBhbmQgc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbnMpLgogIDsgQWxzbyAtIFI3 UlMgZHJhZnQgNiBoYXMgInwiIGFzIGRlbGltaXRlciwgYnV0IHdlIGN1cnJlbnRseSBkb24ndC4K ICAoZGVmaW5lIG5lb3RlcmljLWRlbGltaXRlcnMKICAgICAoYXBwZW5kIChsaXN0ICNcKCAjXCkg I1xbICNcXSAjXHsgI1x9ICA7IEFkZCBbXSB7fQogICAgICAgICAgICAgICAgICAgI1wiICNcOykg ICAgICAgICAgICAgICAgIDsgQ291bGQgYWRkICNcIyBvciAjXHwKICAgICAgICAgICAgIHdoaXRl c3BhY2UtY2hhcnMpKQoKICAoZGVmaW5lIChyZWFkLXVudGlsLWRlbGltIHBvcnQgZGVsaW1zKQog ICAgOyBSZWFkIGNoYXJhY3RlcnMgdW50aWwgZW9mIG9yIGEgY2hhcmFjdGVyIGluICJkZWxpbXMi IGlzIHNlZW4uCiAgICA7IERvIG5vdCBjb25zdW1lIHRoZSBlb2Ygb3IgZGVsaW1pdGVyLgogICAg OyBSZXR1cm5zIHRoZSBsaXN0IG9mIGNoYXJzIHRoYXQgd2VyZSByZWFkLgogICAgKGxldCAoKGMg KHBlZWstY2hhciBwb3J0KSkpCiAgICAgIChjb25kCiAgICAgICAgICgoZW9mLW9iamVjdD8gYykg JygpKQogICAgICAgICAoKGlzbWVtYmVyPyBjIGRlbGltcykgJygpKQogICAgICAgICAoI3QgKGNv bnMgKHJlYWQtY2hhciBwb3J0KSAocmVhZC11bnRpbC1kZWxpbSBwb3J0IGRlbGltcykpKSkpKQoK ICAoZGVmaW5lIChyZWFkLWVycm9yIG1lc3NhZ2UpCiAgICAoZGlzcGxheSAiRXJyb3I6ICIpCiAg ICAoZGlzcGxheSBtZXNzYWdlKQogICAgKGRpc3BsYXkgIlxuIikKICAgICcoKSkKCiAgKGRlZmlu ZSAocmVhZC1udW1iZXIgcG9ydCBzdGFydGluZy1seXN0KQogICAgKHN0cmluZy0+bnVtYmVyIChs aXN0LT5zdHJpbmcKICAgICAgKGFwcGVuZCBzdGFydGluZy1seXN0CiAgICAgICAgKHJlYWQtdW50 aWwtZGVsaW0gcG9ydCBuZW90ZXJpYy1kZWxpbWl0ZXJzKSkpKSkKCiAgOyBkZXRlY3QgI3wgb3Ig fCMKICAoZGVmaW5lIChuZXN0LWNvbW1lbnQgcG9ydCkKICAgIChsZXQgKChjIChyZWFkLWNoYXIg cG9ydCkpKQogICAgICAoY29uZAogICAgICAgICgoZW9mLW9iamVjdD8gYykpCiAgICAgICAgKChj aGFyPT8gYyAjXHwpCiAgICAgICAgICAobGV0ICgoYzIgKHBlZWstY2hhciBwb3J0KSkpCiAgICAg ICAgICAgIChpZiAoY2hhcj0/IGMyICNcIykKICAgICAgICAgICAgICAgIChyZWFkLWNoYXIgcG9y dCkKICAgICAgICAgICAgICAgIChuZXN0LWNvbW1lbnQgcG9ydCkpKSkKICAgICAgICAoKGNoYXI9 PyBjICNcIykKICAgICAgICAgIChsZXQgKChjMiAocGVlay1jaGFyIHBvcnQpKSkKICAgICAgICAg ICAgKHdoZW4gKGNoYXI9PyBjMiAjXHwpCiAgICAgICAgICAgICAgICAoYmVnaW4KICAgICAgICAg ICAgICAgICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgICAgICAgICAobmVzdC1jb21tZW50 IHBvcnQpKSkKICAgICAgICAgICAgKG5lc3QtY29tbWVudCBwb3J0KSkpCiAgICAgICAgKCN0CiAg ICAgICAgICAobmVzdC1jb21tZW50IHBvcnQpKSkpKQoKICAoZGVmaW5lIChwcm9jZXNzLXNoYXJw IG15LXJlYWQgcG9ydCkKICAgIDsgV2UndmUgcGVla2VkIGEgIyBjaGFyYWN0ZXIuICBSZXR1cm5z IHdoYXQgaXQgcmVwcmVzZW50cy4KICAgIChyZWFkLWNoYXIgcG9ydCkgOyBSZW1vdmUgIwogICAg KGNvbmQKICAgICAgKChlb2Ytb2JqZWN0PyAocGVlay1jaGFyIHBvcnQpKSAocGVlay1jaGFyIHBv cnQpKSA7IElmIGVvZiwgcmV0dXJuIGVvZi4KICAgICAgKCN0CiAgICAgICAgOyBOb3QgRU9GLiBS ZWFkIGluIHRoZSBuZXh0IGNoYXJhY3RlciwgYW5kIHN0YXJ0IGFjdGluZyBvbiBpdC4KICAgICAg ICAobGV0ICgoYyAocmVhZC1jaGFyIHBvcnQpKSkKICAgICAgICAgIChjb25kCiAgICAgICAgICAg ICgoY2hhci1jaT0/IGMgI1x0KSAgI3QpCiAgICAgICAgICAgICgoY2hhci1jaT0/IGMgI1xmKSAg I2YpCiAgICAgICAgICAgICgoaXNtZW1iZXI/IGMgJygjXGkgI1xlICNcYiAjXG8gI1xkICNceAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgI1xJICNcRSAjXEIgI1xPICNcRCAjXFgpKQogICAg ICAgICAgICAgIChyZWFkLW51bWJlciBwb3J0IChsaXN0ICNcIyAoY2hhci1kb3duY2FzZSBjKSkp KQogICAgICAgICAgICAoKGNoYXI9PyBjICNcKCApICA7IFZlY3Rvci4KCSAgICAgKGxpc3QtPnZl Y3RvciAobXktcmVhZC1kZWxpbWl0ZWQtbGlzdCBteS1yZWFkICNcKSBwb3J0KSkpCgoJICAgIDs7 IGhhc2ggdGFibGUgOiAjaGFzaCgoImEiIC4gMSkgKCJiIiAuIDIwKSkgc3VwcG9ydCB0byB3cml0 ZS4uLgoKCSAgICAoKGNoYXI9PyBjICNcXCkgKHByb2Nlc3MtY2hhciBwb3J0KSkKICAgICAgICAg ICAgOyBUaGlzIHN1cHBvcnRzIFNSRkktMzAgI3wuLi58IwogICAgICAgICAgICAoKGNoYXI9PyBj ICNcfCkgKG5lc3QtY29tbWVudCBwb3J0KSAobXktcmVhZCBwb3J0KSkKICAgICAgICAgICAgOyBJ ZiAjIXh5eiwgY29uc3VtZSB4eXogYW5kIHJlY3Vyc2UuCiAgICAgICAgICAgIDsgSW4gYSByZWFs IHJlYWRlciwgY29uc2lkZXIgaGFuZGxpbmcgIiMhIHdoaXRlc3BhY2UiIHBlciBTUkZJLTIyLAog ICAgICAgICAgICA7IGFuZCBjb25zaWRlciAiIyEiIGZvbGxvd2VkIGJ5IC8gb3IgLiBhcyBhIGNv bW1lbnQgdW50aWwgIiEjIi4KICAgICAgICAgICAgKChjaGFyPT8gYyAjXCEpIChteS1yZWFkIHBv cnQpIChteS1yZWFkIHBvcnQpKQoJICAgICgoY2hhcj0/IGMgI1w7KSAocmVhZC1lcnJvciAiU1JG SS0xMDUgUkVQTCA6IFVuc3VwcG9ydGVkICM7IGV4dGVuc2lvbiIpKQoJICAgICgoY2hhcj0/IGMg I1wnKSAocmVhZC1lcnJvciAiU1JGSS0xMDUgUkVQTCA6IFVuc3VwcG9ydGVkICMnIGV4dGVuc2lv biIpKQoJICAgICgjdCAocmVhZC1lcnJvciAoc3RyaW5nLWFwcGVuZCAiU1JGSS0xMDUgUkVQTCA6 IgoJCQkJCSAgICJVbnN1cHBvcnRlZCAjIGV4dGVuc2lvbiIKCQkJCQkgICAiIHVuc3VwcG9ydGVk IGNoYXJhY3RlciBjYXVzaW5nIHRoaXMgbWVzc2FnZSBpcyBjaGFyYWN0ZXI6IgoJCQkJCSAgIChz dHJpbmcgYykpKSkpKSkpKQoKICAoZGVmaW5lIChwcm9jZXNzLXBlcmlvZCBwb3J0KQogICAgOyBX ZSd2ZSBwZWVrZWQgYSBwZXJpb2QgY2hhcmFjdGVyLiAgUmV0dXJucyB3aGF0IGl0IHJlcHJlc2Vu dHMuCiAgICAocmVhZC1jaGFyIHBvcnQpIDsgUmVtb3ZlIC4KICAgIChsZXQgKChjIChwZWVrLWNo YXIgcG9ydCkpKQogICAgICAoY29uZCA7OyBwcm9jZXNzaW5nIHBlcmlvZCAuIGlzIGltcG9ydGFu dCBmb3IgZnVuY3Rpb25zIHdpdGggdmFyaWFibGUgbnVtYmVycyBvZiBwYXJhbWV0ZXJzOiAoZmN0 IGFyZzEgLiByZXN0YXJncykKICAgICAgICgoZW9mLW9iamVjdD8gYykgKHN0cmluZy0+c3ltYm9s IChzdHJpbmcgI1wuKSkpICA7OyBvbmx5IHRoaXMgb25lIHdvcmtzIHdpdGggUmFja2V0IFNjaGVt ZQogICAgICAgIDs7KChlb2Ytb2JqZWN0PyBjKSAnLikgOyBwZXJpb2QgZW9mOyByZXR1cm4gcGVy aW9kLiA7OyBkbyBub3Qgd29ya3Mgd2l0aCBSYWNrZXQgU2NoZW1lCiAgICAgICA7OygoZW9mLW9i amVjdD8gYykgJ3BlcmlvZCkgOzsgdGhpcyBvbmUgYW5uaWhpbGF0ZSB0aGUgcHJvY2Vzc2luZyB1 c2luZyBkdW1teSAncGVyaW9kICEKICAgICAgICAoKGlzbWVtYmVyPyBjIGRpZ2l0cykKICAgICAg ICAgIChyZWFkLW51bWJlciBwb3J0IChsaXN0ICNcLikpKSAgOyBwZXJpb2QgZGlnaXQgLSBpdCdz IGEgbnVtYmVyLgogICAgICAgICgjdAogICAgICAgICAgOyBBdCB0aGlzIHBvaW50LCBTY2hlbWUg b25seSByZXF1aXJlcyBzdXBwb3J0IGZvciAiLiIgb3IgIi4uLiIuCiAgICAgICAgICA7IEFzIGFu IGV4dGVuc2lvbiB3ZSBjYW4gc3VwcG9ydCB0aGVtIGFsbC4KICAgICAgICAgIChzdHJpbmctPnN5 bWJvbAogICAgICAgICAgICAoZm9sZC1jYXNlLW1heWJlIHBvcnQKICAgICAgICAgICAgICAobGlz dC0+c3RyaW5nIChjb25zICNcLgogICAgICAgICAgICAgICAgKHJlYWQtdW50aWwtZGVsaW0gcG9y dCBuZW90ZXJpYy1kZWxpbWl0ZXJzKSkpKSkpKSkpCgogIChkZWZpbmUgKHByb2Nlc3MtY2hhciBw b3J0KQogICAgOyBXZSd2ZSByZWFkICNcIC0gcmV0dXJucyB3aGF0IGl0IHJlcHJlc2VudHMuCiAg ICAoY29uZAogICAgICAoKGVvZi1vYmplY3Q/IChwZWVrLWNoYXIgcG9ydCkpIChwZWVrLWNoYXIg cG9ydCkpCiAgICAgICgjdAogICAgICAgIDsgTm90IEVPRi4gUmVhZCBpbiB0aGUgbmV4dCBjaGFy YWN0ZXIsIGFuZCBzdGFydCBhY3Rpbmcgb24gaXQuCiAgICAgICAgKGxldCAoKGMgKHJlYWQtY2hh ciBwb3J0KSkKICAgICAgICAgICAgICAocmVzdCAocmVhZC11bnRpbC1kZWxpbSBwb3J0IG5lb3Rl cmljLWRlbGltaXRlcnMpKSkKICAgICAgICAgIChjb25kCiAgICAgICAgICAgICgobnVsbD8gcmVz dCkgYykgOyBvbmx5IG9uZSBjaGFyIGFmdGVyICNcIC0gc28gdGhhdCdzIGl0IQogICAgICAgICAg ICAoI3QKICAgICAgICAgICAgICAobGV0ICgocmVzdC1zdHJpbmcgKGxpc3QtPnN0cmluZyAoY29u cyBjIHJlc3QpKSkpCiAgICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgICA7IElt cGxlbWVudCBSNlJTIGNoYXJhY3RlciBuYW1lcywgc2VlIFI2UlMgc2VjdGlvbiA0LjIuNi4KICAg ICAgICAgICAgICAgICAgOyBBcyBhbiBleHRlbnNpb24sIHdlIHdpbGwgQUxXQVlTIGFjY2VwdCBj aGFyYWN0ZXIgbmFtZXMKICAgICAgICAgICAgICAgICAgOyBvZiBhbnkgY2FzZSwgbm8gbWF0dGVy IHdoYXQgdGhlIGNhc2UtZm9sZGluZyB2YWx1ZSBpcy4KICAgICAgICAgICAgICAgICAgKChzdHJp bmctY2k9PyByZXN0LXN0cmluZyAic3BhY2UiKSAjXHNwYWNlKQogICAgICAgICAgICAgICAgICAo KHN0cmluZy1jaT0/IHJlc3Qtc3RyaW5nICJuZXdsaW5lIikgI1xuZXdsaW5lKQogICAgICAgICAg ICAgICAgICAoKHN0cmluZy1jaT0/IHJlc3Qtc3RyaW5nICJ0YWIiKSB0YWIpCiAgICAgICAgICAg ICAgICAgICgoc3RyaW5nLWNpPT8gcmVzdC1zdHJpbmcgIm51bCIpIChpbnRlZ2VyLT5jaGFyICN4 MDAwMCkpCiAgICAgICAgICAgICAgICAgICgoc3RyaW5nLWNpPT8gcmVzdC1zdHJpbmcgImFsYXJt IikgKGludGVnZXItPmNoYXIgI3gwMDA3KSkKICAgICAgICAgICAgICAgICAgKChzdHJpbmctY2k9 PyByZXN0LXN0cmluZyAiYmFja3NwYWNlIikgKGludGVnZXItPmNoYXIgI3gwMDA4KSkKICAgICAg ICAgICAgICAgICAgKChzdHJpbmctY2k9PyByZXN0LXN0cmluZyAibGluZWZlZWQiKSAoaW50ZWdl ci0+Y2hhciAjeDAwMEEpKQogICAgICAgICAgICAgICAgICAoKHN0cmluZy1jaT0/IHJlc3Qtc3Ry aW5nICJ2dGFiIikgKGludGVnZXItPmNoYXIgI3gwMDBCKSkKICAgICAgICAgICAgICAgICAgKChz dHJpbmctY2k9PyByZXN0LXN0cmluZyAicGFnZSIpIChpbnRlZ2VyLT5jaGFyICN4MDAwQykpCiAg ICAgICAgICAgICAgICAgICgoc3RyaW5nLWNpPT8gcmVzdC1zdHJpbmcgInJldHVybiIpIChpbnRl Z2VyLT5jaGFyICN4MDAwRCkpCiAgICAgICAgICAgICAgICAgICgoc3RyaW5nLWNpPT8gcmVzdC1z dHJpbmcgImVzYyIpIChpbnRlZ2VyLT5jaGFyICN4MDAxQikpCiAgICAgICAgICAgICAgICAgICgo c3RyaW5nLWNpPT8gcmVzdC1zdHJpbmcgImRlbGV0ZSIpIChpbnRlZ2VyLT5jaGFyICN4MDA3Rikp CiAgICAgICAgICAgICAgICAgIDsgQWRkaXRpb25hbCBjaGFyYWN0ZXIgbmFtZXMgYXMgZXh0ZW5z aW9uczoKICAgICAgICAgICAgICAgICAgKChzdHJpbmctY2k9PyByZXN0LXN0cmluZyAiaHQiKSB0 YWIpCiAgICAgICAgICAgICAgICAgICgoc3RyaW5nLWNpPT8gcmVzdC1zdHJpbmcgImNyIikgKGlu dGVnZXItPmNoYXIgI3gwMDBkKSkKICAgICAgICAgICAgICAgICAgKChzdHJpbmctY2k9PyByZXN0 LXN0cmluZyAiYnMiKSAoaW50ZWdlci0+Y2hhciAjeDAwMDgpKQogICAgICAgICAgICAgICAgICAo I3QgKHJlYWQtZXJyb3IgIkludmFsaWQgY2hhcmFjdGVyIG5hbWUiKSkpKSkpKSkpKQoKCjsgUmVj b3JkIHRoZSBvcmlnaW5hbCByZWFkIGxvY2F0aW9uLCBpbiBjYXNlIGl0J3MgY2hhbmdlZCBsYXRl cjoKKGRlZmluZSBkZWZhdWx0LXNjaGVtZS1yZWFkIHJlYWQpCihkZWZpbmUgY21kLWxuIChjb21t YW5kLWxpbmUpKQooZm9ybWF0ICN0ICJUaGUgY29tbWFuZC1saW5lIHdhczp+eyB+d359fiUiIGNt ZC1sbikKKGRlZmluZSBmaWxlLW5hbWUgKGNhciAocmV2ZXJzZSBjbWQtbG4pKSkKCihkZWZpbmUg Y29kZSAobGl0ZXJhbC1yZWFkLXN5bnRheCBmaWxlLW5hbWUpKQoKKGRpc3BsYXkgY29kZSkgKG5l d2xpbmUpCgoKCg== --00000000000037ed1306069927cd--