From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) by sourceware.org (Postfix) with ESMTPS id E530E3875475 for ; Tue, 7 Nov 2023 10:43:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E530E3875475 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 E530E3875475 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::52b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699353838; cv=none; b=ayQQzauAdToR266LGv+FmFoo8wP8r0Q05ksTyZNUY2S0/fXjcvaZu5wkqkNYNRFN6rJY3fAKPzkbRCWLFv3EZuVosp2kKzdlkLEGQOg/vv/aGaikyi5UVjdHjseC7UNgBj0SLtItQNOPpZkMJSnxO/s22EHPBa+EQXnkFGwBrsA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699353838; c=relaxed/simple; bh=p819OVLS1CU300xvDHa3O5fLWYmhch8WZGwyunl2T8c=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=Ey9sufcxqM7ZRnh+j1JNM57ZUI6z+ho0AagefScEBTA3d+gouLSxi5QPM/FQ6EAhV6D2ZFc6gE2ne8nDQ40jlI0/qUpW800rHTvD71pAA1oHdIJSwkkJaRdoDcG8uNwxiMJLpHnRNyIlTXJ8GWB709X25+PPxG0bqBvacT+KfRo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-5441ba3e53cso6770548a12.1 for ; Tue, 07 Nov 2023 02:43:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699353835; x=1699958635; darn=sourceware.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ZHDby1PuuUHA26voI0icos3e3ZVakrla8KTcoE4Ehjw=; b=Ivy6NK1TDilhnSFZmfmh2yiEr9RViCZCISQFWAONu2el27BXMVrG7KZRnHifyC4ubF NWipmohn2IRfVAEI9P9tDTWW3Jwxsr4SeeASMYLxbOhqAlC5qVUU8HQH9WshI+jyR9zb 7bAZmkEpeab/kkF6Z7W0Ree/Xj/0EL5klpO6TbZH3t9jguqu3swBl/Wifw3tcCwrN3HZ 3Ph+v24WmyWnwPmNicc0opcgYDVow4XJeLp02jlBZUlR0TVAjeb6tex3StvXtyx05l33 VX93rugVFqkyP0Mal8MUeNQdjzHEGiaMAaKqPs55qOc7Jdy4Ug2WJWRsM1YFNDq1RcWi yrjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699353835; x=1699958635; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ZHDby1PuuUHA26voI0icos3e3ZVakrla8KTcoE4Ehjw=; b=FO8uQ9coGesj8cDlLAEJhKWJGh0IcRCA+ow3poshaC+BvmFC3UHFopSsblZsMelXZk UIFFwqst0Nhky7SH2eKzdab/Aw3eiaeVHSy7VE1FqC2KXdqWJjkViHAftPvAoBccJKTX 3ANzSBopRx2xQkpyRqxD/qbuohL4/RhjkN7MK9Cooi2tyflmP4B0f7hDiC6WaSRF97Vq f44Q//iY1p3T67gb+WIiSEKf+aFdUZ2+6P1uCBBidSqCDj8IXmOqYPbywVAUbufuaEHd TGyrdTSE1jEcquck3Y4akKof2EySu2GEgUeCd1XEirgBezhXFWZgp/o10+V7iobC0cqM utuQ== X-Gm-Message-State: AOJu0YwiE0c1iTgu3KkXvYI0jd0twU3Y2I4HtjmbAubIF4MuKju5uc+j MZF0N/ruDAlfzXqe2GsRqbjpkJhQrO/GBFyjshVO372B8mcJpQ== X-Google-Smtp-Source: AGHT+IFahsR6e4y0SAcFA4SwU/oAEKUoqsCNOJcFUTH56zeuk1L87yDGrBDL1DA++Sp45AioOBQh+EiQDV5t25wsTp4= X-Received: by 2002:a17:906:db0d:b0:9d3:ccd1:a905 with SMTP id xj13-20020a170906db0d00b009d3ccd1a905mr16881729ejb.51.1699353835166; Tue, 07 Nov 2023 02:43:55 -0800 (PST) MIME-Version: 1.0 From: Damien Mattei Date: Tue, 7 Nov 2023 11:43:36 +0100 Message-ID: Subject: meaning of | in scheme To: kawa mailing list Content-Type: multipart/mixed; boundary="000000000000b1c83506098da53f" 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,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: --000000000000b1c83506098da53f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable i'm annoying with some | | that appear sometimes in my parser but i do not know where they came from #|kawa:2|# (|=E2=89=A0| 2 2) #f #|kawa:3|# |=E2=89=A0| # #|kawa:4|# |java.lang.Math:random| /dev/tty:4:1: warning - no declaration seen for java.lang.Math:random /dev/tty:4:1: unbound location: java.lang.Math:random at gnu.mapping.DynamicLocation.get(DynamicLocation.java:36) at atInteractiveLevel-35.run(tty:4) at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:290) at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211) at kawa.Shell.run(Shell.java:289) at kawa.Shell.run(Shell.java:196) at kawa.Shell.run(Shell.java:183) at kawa.repl.processArgs(repl.java:724) at kawa.repl.main(repl.java:830) #|kawa:5|# java.lang.Math:random Type double java.lang.Math.random() #|kawa:6|# |sin| # i can not remember exactly why some symbols are sometimes in | | in scheme, this was not a problem with procedures but it behavior bad with java method imported in kawa, see the error. and i can not find where it is generated in the parser (attached) why it does not offend scheme procedure? (and why is it a problem with java imported methods) any idea? --000000000000b1c83506098da53f Content-Type: application/octet-stream; name="curly-infix2prefix4kawa.scm" Content-Disposition: attachment; filename="curly-infix2prefix4kawa.scm" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_loo7c12p0 Cjs7IENvcHlyaWdodCAoQykgMjAxMiBEYXZpZCBBLiBXaGVlbGVyIGFuZCBBbGFuIE1hbnVlbCBL LiBHbG9yaWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgo7OyBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUg U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKCjs7IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKOzsgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgoKOzsgbW9kaWZpY2F0aW9uIGZv ciBLYXdhIGJ5IERhbWllbiBNYXR0ZWkKCjs7IHVzZSB3aXRoOiBrYXdhIGN1cmx5LWluZml4MnBy ZWZpeC5zY20gZmlsZTJwYXJzZS5zY20KCjs7IGV4YW1wbGU6IGthd2EgY3VybHktaW5maXgycHJl Zml4LnNjbSAuLi9BSV9EZWVwX0xlYXJuaW5nL2thd2EvbWF0cml4Ky5zY20gPiAuLi9BSV9EZWVw X0xlYXJuaW5nL2thd2EvbWF0cml4LnNjbQoKKGltcG9ydCAoa2F3YSBwcHJpbnQpKQoKKGRlZmlu ZSAobGl0ZXJhbC1yZWFkLXN5bnRheCBzcmMpCgogIChkZWZpbmUgaW4gKG9wZW4taW5wdXQtZmls ZSBzcmMpKQogIChkZWZpbmUgbHN0LWNvZGUgKHByb2Nlc3MtaW5wdXQtY29kZS10YWlsLXJlYyBp bikpCiAgbHN0LWNvZGUpCiAKCjs7IHJlYWQgYWxsIHRoZSBleHByZXNzaW9uIG9mIHByb2dyYW0K IAooZGVmaW5lIChwcm9jZXNzLWlucHV0LWNvZGUtcmVjIGluKQogIChkZWZpbmUgcmVzdWx0IChj dXJseS1pbmZpeC1yZWFkIGluKSkgIDs7IHJlYWQgYW4gZXhwcmVzc2lvbgogIChpZiAoZW9mLW9i amVjdD8gcmVzdWx0KQogICAgICAnKCkKICAgICAgKGNvbnMgcmVzdWx0IChwcm9jZXNzLWlucHV0 LWNvZGUtcmVjIGluKSkpKQoKCjs7IHJlYWQgYWxsIHRoZSBleHByZXNzaW9uIG9mIHByb2dyYW0K OzsgYSB0YWlsIHJlY3Vyc2l2ZSB2ZXJzaW9uCihkZWZpbmUgKHByb2Nlc3MtaW5wdXQtY29kZS10 YWlsLXJlYyBpbikgOzsgaW46IHBvcnQKICAKICAoZGVmaW5lIChwcm9jZXNzLWlucHV0IGFjYykK ICAgIAogICAgKGRlZmluZSByZXN1bHQgKGN1cmx5LWluZml4LXJlYWQgaW4pKSAgOzsgcmVhZCBh biBleHByZXNzaW9uCiAgICAKICAgIChpZiAoZW9mLW9iamVjdD8gcmVzdWx0KQoJKHJldmVyc2Ug YWNjKQoJKHByb2Nlc3MtaW5wdXQgKGNvbnMgcmVzdWx0IGFjYykpKSkKICAKICAocHJvY2Vzcy1p bnB1dCAnKCkpKQoKCiAgOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICA7IEN1cmx5 LWluZml4IHN1cHBvcnQgcHJvY2VkdXJlcwogIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCgogIDsgUmV0dXJuIHRydWUgaWYgbHlzdCBoYXMgYW4gZXZlbiAjIG9mIHBhcmFtZXRlcnMs IGFuZCB0aGUgKGFsdGVybmF0aW5nKQogIDsgZmlyc3QgcGFyYW1ldGVycyBhcmUgIm9wIi4gIFVz ZWQgdG8gZGV0ZXJtaW5lIGlmIGEgbG9uZ2VyIGx5c3QgaXMgaW5maXguCiAgOyBJZiBwYXNzZWQg ZW1wdHkgbGlzdCwgcmV0dXJucyB0cnVlIChzbyByZWN1cnNpb24gd29ya3MgY29ycmVjdGx5KS4K ICAoZGVmaW5lIChldmVuLWFuZC1vcC1wcmVmaXg/IG9wIGx5c3QpCiAgICAoY29uZAogICAgICAo KG51bGw/IGx5c3QpICN0KQogICAgICAoKG5vdCAocGFpcj8gbHlzdCkpICNmKQogICAgICAoKG5v dCAoZXF1YWw/IG9wIChjYXIgbHlzdCkpKSAjZikgOyBmYWlsIC0gb3BlcmF0b3JzIG5vdCB0aGUg c2FtZQogICAgICAoKG5vdCAocGFpcj8gKGNkciBseXN0KSkpICAjZikgOyBXcm9uZyAjIG9mIHBh cmFtZXRlcnMgb3IgaW1wcm9wZXIKICAgICAgKCN0ICAgKGV2ZW4tYW5kLW9wLXByZWZpeD8gb3Ag KGNkZHIgbHlzdCkpKSkpIDsgcmVjdXJzZS4KCiAgOyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbHlzdCBp cyBpbiBzaW1wbGUgaW5maXggZm9ybWF0CiAgOyAoYW5kIHRodXMgc2hvdWxkIGJlIHJlb3JkZXJl ZCBhdCByZWFkIHRpbWUpLgogIChkZWZpbmUgKHNpbXBsZS1pbmZpeC1saXN0PyBseXN0KQogICAg KGFuZAogICAgICAocGFpcj8gbHlzdCkgICAgICAgICAgIDsgTXVzdCBoYXZlIGxpc3Q7ICAnKCkg ZG9lc24ndCBjb3VudC4KICAgICAgKHBhaXI/IChjZHIgbHlzdCkpICAgICA7IE11c3QgaGF2ZSBh IHNlY29uZCBhcmd1bWVudC4KICAgICAgKHBhaXI/IChjZGRyIGx5c3QpKSAgICA7IE11c3QgaGF2 ZSBhIHRoaXJkIGFyZ3VtZW50ICh3ZSBjaGVjayBpdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgdGhpcyB3YXkgZm9yIHBlcmZvcm1hbmNlKQogICAgICAoZXZlbi1hbmQtb3AtcHJlZml4 PyAoY2FkciBseXN0KSAoY2RyIGx5c3QpKSkpIDsgdHJ1ZSBpZiByZXN0IGlzIHNpbXBsZQoKICA7 IFJldHVybiBhbHRlcm5hdGluZyBwYXJhbWV0ZXJzIGluIGEgbHlzdCAoMXN0LCAzcmQsIDV0aCwg ZXRjLikKICAoZGVmaW5lIChhbHRlcm5hdGluZy1wYXJhbWV0ZXJzIGx5c3QpCiAgICAoaWYgKG9y IChudWxsPyBseXN0KSAobnVsbD8gKGNkciBseXN0KSkpCiAgICAgIGx5c3QKICAgICAgKGNvbnMg KGNhciBseXN0KSAoYWx0ZXJuYXRpbmctcGFyYW1ldGVycyAoY2RkciBseXN0KSkpKSkKCiAgOyBO b3QgYSBzaW1wbGUgaW5maXggbGlzdCAtIHRyYW5zZm9ybSBpdC4gIFdyaXR0ZW4gYXMgYSBzZXBh cmF0ZSBwcm9jZWR1cmUKICA7IHNvIHRoYXQgZnV0dXJlIGV4cGVyaW1lbnRzIG9yIFNSRklzIGNh biBlYXNpbHkgcmVwbGFjZSBqdXN0IHRoaXMgcGllY2UuCiAgKGRlZmluZSAodHJhbnNmb3JtLW1p eGVkLWluZml4IGx5c3QpCiAgICAgKGNvbnMgJyRuZngkIGx5c3QpKQoKICA7IEdpdmVuIGN1cmx5 LWluZml4IGx5c3QsIG1hcCBpdCB0byBpdHMgZmluYWwgaW50ZXJuYWwgZm9ybWF0LgogIChkZWZp bmUgKHByb2Nlc3MtY3VybHkgbHlzdCkKICAgIChjb25kCiAgICAgKChub3QgKHBhaXI/IGx5c3Qp KSBseXN0KSA7IEUuRy4sIG1hcCB7fSB0byAoKS4KICAgICAoKG51bGw/IChjZHIgbHlzdCkpIDsg TWFwIHthfSB0byBhLgogICAgICAgKGNhciBseXN0KSkKICAgICAoKGFuZCAocGFpcj8gKGNkciBs eXN0KSkgKG51bGw/IChjZGRyIGx5c3QpKSkgOyBNYXAge2EgYn0gdG8gKGEgYikuCiAgICAgICBs eXN0KQogICAgICgoc2ltcGxlLWluZml4LWxpc3Q/IGx5c3QpIDsgTWFwIHthIE9QIGIgW09QIGMu Li5dfSB0byAoT1AgYSBiIFtjLi4uXSkKICAgICAgIChjb25zIChjYWRyIGx5c3QpIChhbHRlcm5h dGluZy1wYXJhbWV0ZXJzIGx5c3QpKSkKICAgICAoI3QgICh0cmFuc2Zvcm0tbWl4ZWQtaW5maXgg bHlzdCkpKSkKCgogIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgOyBLZXkgcHJvY2VkdXJlcyB0byBpbXBsZW1lbnQgbmVvdGVyaWMtZXhwcmVzc2lv bnMKICA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK ICA7IFJlYWQgdGhlICJpbnNpZGUiIG9mIGEgbGlzdCB1bnRpbCBpdHMgbWF0Y2hpbmcgc3RvcC1j aGFyLCByZXR1cm5pbmcgbGlzdC4KICA7IHN0b3AtY2hhciBuZWVkcyB0byBiZSBjbG9zaW5nIHBh cmVuLCBjbG9zaW5nIGJyYWNrZXQsIG9yIGNsb3NpbmcgYnJhY2UuCiAgOyBUaGlzIGlzIGxpa2Ug cmVhZC1kZWxpbWl0ZWQtbGlzdCBvZiBDb21tb24gTGlzcC4KICA7IFRoaXMgaW1wbGVtZW50cyBh IHVzZWZ1bCBleHRlbnNpb246ICguIGIpIHJldHVybnMgYi4KICAoZGVmaW5lIChteS1yZWFkLWRl bGltaXRlZC1saXN0IG15LXJlYWQgc3RvcC1jaGFyIHBvcnQpCiAgICAobGV0KgogICAgICAoKGMg ICAocGVlay1jaGFyIHBvcnQpKSkKICAgICAgKGNvbmQKICAgICAgICAoKGVvZi1vYmplY3Q/IGMp IChyZWFkLWVycm9yICJFT0YgaW4gbWlkZGxlIG9mIGxpc3QiKSAnKCkpCiAgICAgICAgKChlcXY/ IGMgI1w7KQogICAgICAgICAgKGNvbnN1bWUtdG8tZW9sIHBvcnQpCiAgICAgICAgICAobXktcmVh ZC1kZWxpbWl0ZWQtbGlzdCBteS1yZWFkIHN0b3AtY2hhciBwb3J0KSkKICAgICAgICAoKG15LWNo YXItd2hpdGVzcGFjZT8gYykKICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgICht eS1yZWFkLWRlbGltaXRlZC1saXN0IG15LXJlYWQgc3RvcC1jaGFyIHBvcnQpKQogICAgICAgICgo Y2hhcj0/IGMgc3RvcC1jaGFyKQogICAgICAgICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAg JygpKQogICAgICAgICgob3IgKGVxPyBjICNcKSkgKGVxPyBjICNcXSkgKGVxPyBjICNcfSkpCiAg ICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAocmVhZC1lcnJvciAiQmFkIGNsb3Np bmcgY2hhcmFjdGVyIikpCiAgICAgICAgKCN0CiAgICAgICAgICAobGV0ICgoZGF0dW0gKG15LXJl YWQgcG9ydCkpKQogICAgICAgICAgICAoY29uZAoJICAgICA7OyBwcm9jZXNzaW5nIHBlcmlvZCAu IGlzIGltcG9ydGFudCBmb3IgZnVuY3Rpb25zIHdpdGggdmFyaWFibGUgbnVtYmVycyBvZiBwYXJh bWV0ZXJzOiAoZmN0IGFyZzEgLiByZXN0YXJncykKCSAgICAgKChlcT8gZGF0dW0gKHN0cmluZy0+ c3ltYm9sIChzdHJpbmcgI1wuKSkpIDs7IG9ubHkgdGhpcyBvbmUgd29ya3Mgd2l0aCBSYWNrZXQg U2NoZW1lCiAgICAgICAgICAgICAgIDs7KChlcT8gZGF0dW0gJy4pIDs7IGRvIG5vdCB3b3JrcyB3 aXRoIFJhY2tldCBTY2hlbWUKICAgICAgICAgICAgICAgOzsoKGVxPyBkYXR1bSAncGVyaW9kKSA7 OyB0aGlzIG9uZSBhbm5paGlsYXRlIHRoZSBwcm9jZXNzaW5nOiBkYXR1bSB3aWxsIG5ldmVyIGJl IGVxdWFsIHRvICdwZXJpb2QgIQogICAgICAgICAgICAgICAgIChsZXQgKChkYXR1bTIgKG15LXJl YWQgcG9ydCkpKQogICAgICAgICAgICAgICAgICAgKGNvbnN1bWUtd2hpdGVzcGFjZSBwb3J0KQog ICAgICAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgKChlb2Ytb2JqZWN0 PyBkYXR1bTIpCiAgICAgICAgICAgICAgICAgICAgICAocmVhZC1lcnJvciAiRWFybHkgZW9mIGlu ICguLi4gLilcbiIpCiAgICAgICAgICAgICAgICAgICAgICAnKCkpCiAgICAgICAgICAgICAgICAg ICAgICgobm90IChlcXY/IChwZWVrLWNoYXIgcG9ydCkgc3RvcC1jaGFyKSkKICAgICAgICAgICAg ICAgICAgICAgIChyZWFkLWVycm9yICJCYWQgY2xvc2luZyBjaGFyYWN0ZXIgYWZ0ZXIgLiBkYXR1 bSIpKQogICAgICAgICAgICAgICAgICAgICAoI3QKICAgICAgICAgICAgICAgICAgICAgICAocmVh ZC1jaGFyIHBvcnQpCiAgICAgICAgICAgICAgICAgICAgICAgZGF0dW0yKSkpKQogICAgICAgICAg ICAgICAoI3QKICAgICAgICAgICAgICAgICAgIChjb25zIGRhdHVtCiAgICAgICAgICAgICAgICAg ICAgIChteS1yZWFkLWRlbGltaXRlZC1saXN0IG15LXJlYWQgc3RvcC1jaGFyIHBvcnQpKSkpKSkp KSkKCgogIDsgSW1wbGVtZW50IG5lb3RlcmljLWV4cHJlc3Npb24ncyBwcmVmaXhlZCAoKSwgW10s IGFuZCB7fS4KICA7IEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUganVzdCBmaW5pc2hlZCByZWFkaW5n IHNvbWUgZXhwcmVzc2lvbiwgd2hpY2gKICA7IE1JR0hUIGJlIGEgcHJlZml4IG9mIHNvbWUgbG9u Z2VyIGV4cHJlc3Npb24uICBFeGFtaW5lIHRoZSBuZXh0CiAgOyBjaGFyYWN0ZXIgdG8gYmUgY29u c3VtZWQ7IGlmIGl0J3MgYW4gb3BlbmluZyBwYXJlbiwgYnJhY2tldCwgb3IgYnJhY2UsCiAgOyB0 aGVuIHRoZSBleHByZXNzaW9uICJwcmVmaXgiIGlzIGFjdHVhbGx5IGEgcHJlZml4LgogIDsgT3Ro ZXJ3aXNlLCBqdXN0IHJldHVybiB0aGUgcHJlZml4IGFuZCBkbyBub3QgY29uc3VtZSB0aGF0IG5l eHQgY2hhci4KICA7IFRoaXMgcmVjdXJzZXMsIHRvIGhhbmRsZSBmb3JtYXRzIGxpa2UgZih4KSh5 KS4KICAoZGVmaW5lIChuZW90ZXJpYy1wcm9jZXNzLXRhaWwgcG9ydCBwcmVmaXgpCiAgICAgIChs ZXQqICgoYyAocGVlay1jaGFyIHBvcnQpKSkKICAgICAgICAoY29uZAogICAgICAgICAgKChlb2Yt b2JqZWN0PyBjKSBwcmVmaXgpCiAgICAgICAgICAoKGNoYXI9PyBjICNcKCApIDsgSW1wbGVtZW50 IGYoeCkKICAgICAgICAgICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgICAobmVvdGVyaWMt cHJvY2Vzcy10YWlsIHBvcnQKICAgICAgICAgICAgICAgIChjb25zIHByZWZpeCAobXktcmVhZC1k ZWxpbWl0ZWQtbGlzdCBuZW90ZXJpYy1yZWFkLXJlYWwgI1wpIHBvcnQpKSkpCiAgICAgICAgICAo KGNoYXI9PyBjICNcWyApICA7IEltcGxlbWVudCBmW3hdCiAgICAgICAgICAgIChyZWFkLWNoYXIg cG9ydCkKICAgICAgICAgICAgKG5lb3RlcmljLXByb2Nlc3MtdGFpbCBwb3J0CiAgICAgICAgICAg ICAgICAgIChjb25zICdicmFja2V0LWFwcGx5CiAgICAgICAgICAgICAgICAgICAgKGNvbnMgcHJl Zml4CiAgICAgICAgICAgICAgICAgICAgICAobXktcmVhZC1kZWxpbWl0ZWQtbGlzdCBuZW90ZXJp Yy1yZWFkLXJlYWwgI1xdIHBvcnQpKSkpKQogICAgICAgICAgKChjaGFyPT8gYyAjXHsgKSAgOyBJ bXBsZW1lbnQgZnt4fQogICAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAgIChu ZW90ZXJpYy1wcm9jZXNzLXRhaWwgcG9ydAogICAgICAgICAgICAgIChsZXQgKCh0YWlsIChwcm9j ZXNzLWN1cmx5CiAgICAgICAgICAgICAgICAgICAgICAobXktcmVhZC1kZWxpbWl0ZWQtbGlzdCBu ZW90ZXJpYy1yZWFkLXJlYWwgI1x9IHBvcnQpKSkpCiAgICAgICAgICAgICAgICAoaWYgKGVxdj8g dGFpbCAnKCkpCiAgICAgICAgICAgICAgICAgIChsaXN0IHByZWZpeCkgOyBNYXAgZnt9IHRvIChm KSwgbm90IChmICgpKS4KICAgICAgICAgICAgICAgICAgKGxpc3QgcHJlZml4IHRhaWwpKSkpKQog ICAgICAgICAgKCN0IHByZWZpeCkpKSkKCgogIDsgVG8gaW1wbGVtZW50IG5lb3RlcmljLWV4cHJl c3Npb25zLCBtb2RpZnkgdGhlIHJlYWRlciBzbwogIDsgdGhhdCBbXSBhbmQge30gYXJlIGFsc28g ZGVsaW1pdGVycywgYW5kIG1ha2UgdGhlIHJlYWRlciBkbyB0aGlzOgogIDsgKGxldCogKChwcmVm aXgKICA7ICAgICAgICAgICByZWFkLWV4cHJlc3Npb24tYXMtdXN1YWwKICA7ICAgICAgICkpCiAg OyAgIChpZiAoZW9mLW9iamVjdD8gcHJlZml4KQogIDsgICAgIHByZWZpeAogIDsgICAgIChuZW90 ZXJpYy1wcm9jZXNzLXRhaWwgcG9ydCBwcmVmaXgpKSkKCiAgOyBNb2RpZnkgdGhlIG1haW4gcmVh ZGVyIHNvIHRoYXQgW10gYW5kIHt9IGFyZSBhbHNvIGRlbGltaXRlcnMsIGFuZCBzbwogIDsgdGhh dCB3aGVuICNceyBpcyBkZXRlY3RlZCwgcmVhZCB1c2luZyBteS1yZWFkLWRlbGltaXRlZC1saXN0 CiAgOyBhbnkgbGlzdCBmcm9tIHRoYXQgcG9ydCB1bnRpbCBpdHMgbWF0Y2hpbmcgI1x9LCB0aGVu IHByb2Nlc3MKICA7IHRoYXQgbGlzdCB3aXRoICJwcm9jZXNzLWN1cmx5IiwgbGlrZSB0aGlzOgog IDsgICAocHJvY2Vzcy1jdXJseSAobXktcmVhZC1kZWxpbWl0ZWQtbGlzdCAjXH0gcG9ydCkpCgoK Cgo7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIDsg RGVtbyBwcm9jZWR1cmVzIHRvIGltcGxlbWVudCBjdXJseS1pbmZpeCBhbmQgbmVvdGVyaWMgcmVh ZGVycwogIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgogIDsgVGhpcyBpbXBsZW1lbnRzIGFuIGVudGlyZSByZWFkZXIsIGFzIGEgZGVtb25zdHJhdGlv biwgYnV0IGlmIHlvdSBjYW4KICA7IHVwZGF0ZSB5b3VyIGV4aXN0aW5nIHJlYWRlciB5b3Ugc2hv dWxkIGp1c3QgdXBkYXRlIHRoYXQgaW5zdGVhZC4KICA7IFRoaXMgaXMgYSBzaW1wbGUgUjVSUyBy ZWFkZXIsIHdpdGggYSBmZXcgbWlub3IgKGNvbW1vbikgZXh0ZW5zaW9ucy4KICA7IFRoZSAibXkt cmVhZCIgaXMgY2FsbGVkIGlmIGl0IGhhcyB0byByZWN1cnNlLgogIChkZWZpbmUgKHVuZGVybHlp bmctcmVhZCBteS1yZWFkIHBvcnQpCiAgICAobGV0KiAoKGMgKHBlZWstY2hhciBwb3J0KSkpCiAg ICAgIChjb25kCiAgICAgICAgKChlb2Ytb2JqZWN0PyBjKSBjKQogICAgICAgICgoY2hhcj0/IGMg I1w7KQogICAgICAgICAgKGNvbnN1bWUtdG8tZW9sIHBvcnQpCiAgICAgICAgICAobXktcmVhZCBw b3J0KSkKICAgICAgICAoKG15LWNoYXItd2hpdGVzcGFjZT8gYykKICAgICAgICAgIChyZWFkLWNo YXIgcG9ydCkKICAgICAgICAgIChteS1yZWFkIHBvcnQpKQogICAgICAgICgoY2hhcj0/IGMgI1wo ICkKICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgIChteS1yZWFkLWRlbGltaXRl ZC1saXN0IG15LXJlYWQgI1wpIHBvcnQpKQogICAgICAgICgoY2hhcj0/IGMgI1xbICkKICAgICAg ICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgIChteS1yZWFkLWRlbGltaXRlZC1saXN0IG15 LXJlYWQgI1xdIHBvcnQpKQogICAgICAgICgoY2hhcj0/IGMgI1x7ICkKICAgICAgICAgIChyZWFk LWNoYXIgcG9ydCkKICAgICAgICAgIChwcm9jZXNzLWN1cmx5CiAgICAgICAgICAgIChteS1yZWFk LWRlbGltaXRlZC1saXN0IG5lb3RlcmljLXJlYWQtcmVhbCAjXH0gcG9ydCkpKQogICAgICAgIDsg SGFuZGxlIG1pc3NpbmcgKCwgWywgeyA6CiAgICAgICAgKChjaGFyPT8gYyAjXCkgKQogICAgICAg ICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgKHJlYWQtZXJyb3IgIkNsb3NpbmcgcGFyZW50 aGVzaXMgd2l0aG91dCBvcGVuaW5nIikKICAgICAgICAgIChteS1yZWFkIHBvcnQpKQogICAgICAg ICgoY2hhcj0/IGMgI1xdICkKICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgIChy ZWFkLWVycm9yICJDbG9zaW5nIGJyYWNrZXQgd2l0aG91dCBvcGVuaW5nIikKICAgICAgICAgICht eS1yZWFkIHBvcnQpKQogICAgICAgICgoY2hhcj0/IGMgI1x9ICkKICAgICAgICAgIChyZWFkLWNo YXIgcG9ydCkKICAgICAgICAgIChyZWFkLWVycm9yICJDbG9zaW5nIGJyYWNlIHdpdGhvdXQgb3Bl bmluZyIpCiAgICAgICAgICAobXktcmVhZCBwb3J0KSkKICAgICAgICAoKGNoYXI9PyBjICNcIikg OyBTdHJpbmdzIGFyZSBkZWxpbWl0ZWQgYnkgIiwgc28gY2FuIGNhbGwgZGlyZWN0bHkKICAgICAg ICAgIChkZWZhdWx0LXNjaGVtZS1yZWFkIHBvcnQpKQogICAgICAgICgoY2hhcj0/IGMgI1wnKQog ICAgICAgICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAgKGxpc3QgJ3F1b3RlIChteS1yZWFk IHBvcnQpKSkKICAgICAgICAoKGNoYXI9PyBjICNcYCkKICAgICAgICAgIChyZWFkLWNoYXIgcG9y dCkKICAgICAgICAgIChsaXN0ICdxdWFzaXF1b3RlIChteS1yZWFkIHBvcnQpKSkKICAgICAgICAo KGNoYXI9PyBjICNcLCkKICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgICAgKGNv bmQKICAgICAgICAgICAgICAoKGNoYXI9PyAjXEAgKHBlZWstY2hhciBwb3J0KSkKICAgICAgICAg ICAgICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgICAgICAgIChsaXN0ICd1bnF1b3RlLXNw bGljaW5nIChteS1yZWFkIHBvcnQpKSkKICAgICAgICAgICAgICAoI3QKICAgICAgICAgICAgICAg IChsaXN0ICd1bnF1b3RlIChteS1yZWFkIHBvcnQpKSkpKQogICAgICAgICgoaXNtZW1iZXI/IGMg ZGlnaXRzKSA7IEluaXRpYWwgZGlnaXQuCiAgICAgICAgICAocmVhZC1udW1iZXIgcG9ydCAnKCkp KQogICAgICAgICgoY2hhcj0/IGMgI1wjKSAocHJvY2Vzcy1zaGFycCBteS1yZWFkIHBvcnQpKQog ICAgICAgICgoY2hhcj0/IGMgI1wuKSAocHJvY2Vzcy1wZXJpb2QgcG9ydCkpCiAgICAgICAgKChv ciAoY2hhcj0/IGMgI1wrKSAoY2hhcj0/IGMgI1wtKSkgIDsgSW5pdGlhbCArIG9yIC0KICAgICAg ICAgIChyZWFkLWNoYXIgcG9ydCkKICAgICAgICAgIChpZiAoaXNtZW1iZXI/IChwZWVrLWNoYXIg cG9ydCkgZGlnaXRzKQogICAgICAgICAgICAocmVhZC1udW1iZXIgcG9ydCAobGlzdCBjKSkKICAg ICAgICAgICAgKHN0cmluZy0+c3ltYm9sIChmb2xkLWNhc2UtbWF5YmUgcG9ydAogICAgICAgICAg ICAgIChsaXN0LT5zdHJpbmcgKGNvbnMgYwogICAgICAgICAgICAgICAgKHJlYWQtdW50aWwtZGVs aW0gcG9ydCBuZW90ZXJpYy1kZWxpbWl0ZXJzKSkpKSkpKQogICAgICAgICgjdCA7IE5vdGhpbmcg ZWxzZS4gIE11c3QgYmUgYSBzeW1ib2wgc3RhcnQuCiAgICAgICAgICAoc3RyaW5nLT5zeW1ib2wg KGZvbGQtY2FzZS1tYXliZSBwb3J0CiAgICAgICAgICAgIChsaXN0LT5zdHJpbmcKICAgICAgICAg ICAgICAocmVhZC11bnRpbC1kZWxpbSBwb3J0IG5lb3RlcmljLWRlbGltaXRlcnMpKSkpKSkpKQoK ICAoZGVmaW5lIChjdXJseS1pbmZpeC1yZWFkLXJlYWwgcG9ydCkKICAgICh1bmRlcmx5aW5nLXJl YWQgY3VybHktaW5maXgtcmVhZC1yZWFsIHBvcnQpKQoKICAoZGVmaW5lIChjdXJseS1pbmZpeC1y ZWFkIC4gcG9ydCkKICAgIChpZiAobnVsbD8gcG9ydCkKICAgICAgKGN1cmx5LWluZml4LXJlYWQt cmVhbCAoY3VycmVudC1pbnB1dC1wb3J0KSkKICAgICAgKGN1cmx5LWluZml4LXJlYWQtcmVhbCAo Y2FyIHBvcnQpKSkpCgogIDsgSGVyZSdzIGEgcmVhbCBuZW90ZXJpYyByZWFkZXIuCiAgOyBUaGUg a2V5IHBhcnQgaXMgdGhhdCBpdCBpbXBsZW1lbnRzIFtdIGFuZCB7fSBhcyBkZWxpbWl0ZXJzLCBh bmQKICA7IGFmdGVyIGl0IHJlYWRzIGluIHNvbWUgZGF0dW0gKHRoZSAicHJlZml4IiksIGl0IGNh bGxzCiAgOyBuZW90ZXJpYy1wcm9jZXNzLXRhaWwgdG8gc2VlIGlmIHRoZXJlJ3MgYSAidGFpbCIu CiAgKGRlZmluZSAobmVvdGVyaWMtcmVhZC1yZWFsIHBvcnQpCiAgICAobGV0KiAoKHByZWZpeCAo dW5kZXJseWluZy1yZWFkIG5lb3RlcmljLXJlYWQtcmVhbCBwb3J0KSkpCiAgICAgIChpZiAoZW9m LW9iamVjdD8gcHJlZml4KQogICAgICAgIHByZWZpeAogICAgICAgIChuZW90ZXJpYy1wcm9jZXNz LXRhaWwgcG9ydCBwcmVmaXgpKSkpCgogIChkZWZpbmUgKG5lb3RlcmljLXJlYWQgLiBwb3J0KQog ICAgKGlmIChudWxsPyBwb3J0KQogICAgICAobmVvdGVyaWMtcmVhZC1yZWFsIChjdXJyZW50LWlu cHV0LXBvcnQpKQogICAgICAobmVvdGVyaWMtcmVhZC1yZWFsIChjYXIgcG9ydCkpKSkKCgogIDsg LS0tLS0tLS0tLS0tLS0tLS0tCiAgOyBTdXBwb3J0IHByb2NlZHVyZXMKICA7IC0tLS0tLS0tLS0t LS0tLS0tLQoKICAoZGVmaW5lIGRpZ2l0cyAnKCNcMCAjXDEgI1wyICNcMyAjXDQgI1w1ICNcNiAj XDcgI1w4ICNcOSkpCiAgKGRlZmluZSBsaW5lZmVlZCAoaW50ZWdlci0+Y2hhciAjeDAwMEEpKSAg ICAgICAgOyAjXG5ld2xpbmUgYWthIFxuLgogIChkZWZpbmUgY2FycmlhZ2UtcmV0dXJuIChpbnRl Z2VyLT5jaGFyICN4MDAwRCkpIDsgXHIuCiAgKGRlZmluZSB0YWIgKGludGVnZXItPmNoYXIgI3gw MDA5KSkKICAoZGVmaW5lIGxpbmUtdGFiIChpbnRlZ2VyLT5jaGFyICN4MDAwYikpCiAgKGRlZmlu ZSBmb3JtLWZlZWQgKGludGVnZXItPmNoYXIgI3gwMDBjKSkKICAoZGVmaW5lIGxpbmUtZW5kaW5n LWNoYXJzIChsaXN0IGxpbmVmZWVkIGNhcnJpYWdlLXJldHVybikpCiAgKGRlZmluZSB3aGl0ZXNw YWNlLWNoYXJzCiAgICAobGlzdCB0YWIgbGluZWZlZWQgbGluZS10YWIgZm9ybS1mZWVkIGNhcnJp YWdlLXJldHVybiAjXHNwYWNlKSkKCiAgOyBTaG91bGQgd2UgZm9sZCBjYXNlIG9mIHN5bWJvbHMg YnkgZGVmYXVsdD8KICA7ICNmIG1lYW5zIGNhc2Utc2Vuc2l0aXZlIChSNlJTKTsgI3QgbWVhbnMg Y2FzZS1pbnNlbnNpdGl2ZSAoUjVSUykuCiAgOyBIZXJlIHdlJ2xsIHNldCBpdCB0byBiZSBjYXNl LXNlbnNpdGl2ZSwgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIFI2UlMKICA7IGFuZCBndWlsZSwg YnV0IE5PVCB3aXRoIFI1UlMuICBNb3N0IHBlb3BsZSB3b24ndCBub3RpY2UsIEkKICA7IF9saWtl XyBjYXNlLXNlbnNpdGl2aXR5LCBhbmQgdGhlIGxhdGVzdCBzcGVjIGlzIGNhc2Utc2Vuc2l0aXZl LAogIDsgc28gbGV0J3Mgc3RhcnQgd2l0aCAjZiAoY2FzZS1zZW5zaXRpdmUpLgogIDsgVGhpcyBk b2Vzbid0IGFmZmVjdCBjaGFyYWN0ZXIgbmFtZXM7IGFzIGFuIGV4dGVuc2lvbiwKICA7IHdlIGFs d2F5cyBhY2NlcHQgYXJiaXRyYXJ5IGNhc2UgZm9yIHRoZW0sIGUuZy4sICNcbmV3bGluZSBvciAj XE5FV0xJTkUuCiAgKGRlZmluZSBmb2xkY2FzZS1kZWZhdWx0ICNmKQoKICA7IFJldHVybnMgYSB0 cnVlIHZhbHVlIChub3QgbmVjZXNzYXJpbHkgI3QpIGlmIGNoYXIgZW5kcyBhIGxpbmUuCiAgKGRl ZmluZSAoY2hhci1saW5lLWVuZGluZz8gY2hhcikgKG1lbXEgY2hhciBsaW5lLWVuZGluZy1jaGFy cykpCgogIDsgUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgbWVtYmVyIG9mIGx5c3QsIGVsc2UgZmFs c2UuCiAgKGRlZmluZSAoaXNtZW1iZXI/IGl0ZW0gbHlzdCkKICAgICAocGFpcj8gKG1lbWJlciBp dGVtIGx5c3QpKSkKCiAgOyBDcmVhdGUgb3duIHZlcnNpb24sIGluIGNhc2UgdW5kZXJseWluZyBp bXBsZW1lbnRhdGlvbiBvbWl0cyBzb21lLgogIChkZWZpbmUgKG15LWNoYXItd2hpdGVzcGFjZT8g YykKICAgIChvciAoY2hhci13aGl0ZXNwYWNlPyBjKSAoaXNtZW1iZXI/IGMgd2hpdGVzcGFjZS1j aGFycykpKQoKICA7IElmIGZvbGQtY2FzZSBpcyBhY3RpdmUgb24gdGhpcyBwb3J0LCByZXR1cm4g c3RyaW5nICJzIiBpbiBmb2xkZWQgY2FzZS4KICA7IE90aGVyd2lzZSwganVzdCByZXR1cm4gInMi LiAgVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBvdXIKICA7IGZvbGRjYXNlLWRlZmF1bHQgY29u ZmlndXJhdGlvbiB2YWx1ZSB3aGVuIHByb2Nlc3Npbmcgc3ltYm9scy4KICA7IFRoZSAic3RyaW5n LWZvbGRjYXNlIiBwcm9jZWR1cmUgaXNuJ3QgZXZlcnl3aGVyZSwKICA7IHNvIHdlIHVzZSAic3Ry aW5nLWRvd25jYXNlIi4KICAoZGVmaW5lIChmb2xkLWNhc2UtbWF5YmUgcG9ydCBzKQogICAgKGlm IGZvbGRjYXNlLWRlZmF1bHQKICAgICAgKHN0cmluZy1kb3duY2FzZSBzKQogICAgICBzKSkKCiAg KGRlZmluZSAoY29uc3VtZS10by1lb2wgcG9ydCkKICAgIDsgQ29uc3VtZSBldmVyeSBub24tZW9s IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBsaW5lLgogICAgOyBFbmQgb24gRU9GIG9yIGVuZC1v Zi1saW5lIGNoYXIuCiAgICA7IERvIE5PVCBjb25zdW1lIHRoZSBlbmQtb2YtbGluZSBjaGFyYWN0 ZXIocykuCiAgICAobGV0ICgoYyAocGVlay1jaGFyIHBvcnQpKSkKICAgICAgKGNvbmQKICAgICAg ICAoKG5vdCAob3IgKGVvZi1vYmplY3Q/IGMpCiAgICAgICAgICAgICAgICAgIChjaGFyLWxpbmUt ZW5kaW5nPyBjKSkpCiAgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgICAgICAoY29uc3Vt ZS10by1lb2wgcG9ydCkpKSkpCgogIChkZWZpbmUgKGNvbnN1bWUtd2hpdGVzcGFjZSBwb3J0KQog ICAgKGxldCAoKGNoYXIgKHBlZWstY2hhciBwb3J0KSkpCiAgICAgIChjb25kCiAgICAgICAgKChl b2Ytb2JqZWN0PyBjaGFyKSBjaGFyKQogICAgICAgICgoZXF2PyBjaGFyICNcOykKICAgICAgICAg IChjb25zdW1lLXRvLWVvbCBwb3J0KQogICAgICAgICAgKGNvbnN1bWUtd2hpdGVzcGFjZSBwb3J0 KSkKICAgICAgICAoKG15LWNoYXItd2hpdGVzcGFjZT8gY2hhcikKICAgICAgICAgIChyZWFkLWNo YXIgcG9ydCkKICAgICAgICAgIChjb25zdW1lLXdoaXRlc3BhY2UgcG9ydCkpKSkpCgogIDsgSWRl bnRpZnlpbmcgdGhlIGxpc3Qgb2YgZGVsaW1pdGVyIGNoYXJhY3RlcnMgaXMgaGFyZGVyIHRoYW4g eW91J2QgdGhpbmsuCiAgOyBUaGlzIGxpc3QgaXMgYmFzZWQgb24gUjZSUyBzZWN0aW9uIDQuMi4x LCB3aGlsZSBhZGRpbmcgW10gYW5kIHt9LAogIDsgYnV0IHJlbW92aW5nICIjIiBmcm9tIHRoZSBk ZWxpbWl0ZXIgc2V0LgogIDsgTk9URTogUjZSUyBoYXMgIiMiIGhhcyBhIGRlbGltaXRlci4gIEhv d2V2ZXIsIFI1UlMgZG9lcyBub3QsIGFuZAogIDsgUjdSUyBwcm9iYWJseSB3aWxsIG5vdCAtIGh0 dHA6Ly90cmFjLnNhY3JpZGVvLnVzL3dnL3dpa2kvV0cxQmFsbG90M1Jlc3VsdHMKICA7IHNob3dz IGEgc3Ryb25nIHZvdGUgQUdBSU5TVCAiIyIgYmVpbmcgYSBkZWxpbWl0ZXIuCiAgOyBIYXZpbmcg dGhlICIjIiBhcyBhIGRlbGltaXRlciBtZWFucyB0aGF0IHlvdSBjYW5ub3QgaGF2ZSAiIyIgZW1i ZWRkZWQKICA7IGluIGEgc3ltYm9sIG5hbWUsIHdoaWNoIGh1cnRzIGJhY2t3YXJkcyBjb21wYXRp YmlsaXR5LCBhbmQgaXQgYWxzbwogIDsgYnJlYWtzIGltcGxlbWVudGF0aW9ucyBsaWtlIENoaWNr ZW4gKGhhcyBtYW55IHN1Y2ggaWRlbnRpZmllcnMpIGFuZAogIDsgR2FtYml0ICh3aGljaCB1c2Vz IHRoaXMgYXMgYSBuYW1lc3BhY2Ugc2VwYXJhdG9yKS4KICA7IFRodXMsIHRoaXMgbGlzdCBkb2Vz IE5PVCBoYXZlICIjIiBhcyBhIGRlbGltaXRlciwgY29udHJhdmVuaW5nIFI2UlMKICA7IChidXQg Y29uc2lzdGVudCB3aXRoIFI1UlMsIHByb2JhYmx5IFI3UlMsIGFuZCBzZXZlcmFsIGltcGxlbWVu dGF0aW9ucykuCiAgOyBBbHNvIC0gUjdSUyBkcmFmdCA2IGhhcyAifCIgYXMgZGVsaW1pdGVyLCBi dXQgd2UgY3VycmVudGx5IGRvbid0LgogIChkZWZpbmUgbmVvdGVyaWMtZGVsaW1pdGVycwogICAg IChhcHBlbmQgKGxpc3QgI1woICNcKSAjXFsgI1xdICNceyAjXH0gIDsgQWRkIFtdIHt9CiAgICAg ICAgICAgICAgICAgICAjXCIgI1w7KSAgICAgICAgICAgICAgICAgOyBDb3VsZCBhZGQgI1wjIG9y ICNcfAogICAgICAgICAgICAgd2hpdGVzcGFjZS1jaGFycykpCgogIChkZWZpbmUgKHJlYWQtdW50 aWwtZGVsaW0gcG9ydCBkZWxpbXMpCiAgICA7IFJlYWQgY2hhcmFjdGVycyB1bnRpbCBlb2Ygb3Ig YSBjaGFyYWN0ZXIgaW4gImRlbGltcyIgaXMgc2Vlbi4KICAgIDsgRG8gbm90IGNvbnN1bWUgdGhl IGVvZiBvciBkZWxpbWl0ZXIuCiAgICA7IFJldHVybnMgdGhlIGxpc3Qgb2YgY2hhcnMgdGhhdCB3 ZXJlIHJlYWQuCiAgICAobGV0ICgoYyAocGVlay1jaGFyIHBvcnQpKSkKICAgICAgKGNvbmQKICAg ICAgICAgKChlb2Ytb2JqZWN0PyBjKSAnKCkpCiAgICAgICAgICgoaXNtZW1iZXI/IGMgZGVsaW1z KSAnKCkpCiAgICAgICAgICgjdCAoY29ucyAocmVhZC1jaGFyIHBvcnQpIChyZWFkLXVudGlsLWRl bGltIHBvcnQgZGVsaW1zKSkpKSkpCgogIChkZWZpbmUgKHJlYWQtZXJyb3IgbWVzc2FnZSkKICAg IChkaXNwbGF5ICJFcnJvcjogIikKICAgIChkaXNwbGF5IG1lc3NhZ2UpCiAgICAoZGlzcGxheSAi XG4iKQogICAgKGVycm9yIG1lc3NhZ2UpCiAgICAnKCkpCgogIChkZWZpbmUgKHJlYWQtbnVtYmVy IHBvcnQgc3RhcnRpbmctbHlzdCkKICAgIChzdHJpbmctPm51bWJlciAobGlzdC0+c3RyaW5nCgkJ ICAgICAoYXBwZW5kIHN0YXJ0aW5nLWx5c3QKCQkJICAgICAocmVhZC11bnRpbC1kZWxpbSBwb3J0 IG5lb3RlcmljLWRlbGltaXRlcnMpKSkpKQoKICA7IGRldGVjdCAjfCBvciB8IwogIChkZWZpbmUg KG5lc3QtY29tbWVudCBwb3J0KQogICAgKGxldCAoKGMgKHJlYWQtY2hhciBwb3J0KSkpCiAgICAg IChjb25kCiAgICAgICAgKChlb2Ytb2JqZWN0PyBjKSkKICAgICAgICAoKGNoYXI9PyBjICNcfCkK ICAgICAgICAgIChsZXQgKChjMiAocGVlay1jaGFyIHBvcnQpKSkKICAgICAgICAgICAgKGlmIChj aGFyPT8gYzIgI1wjKQogICAgICAgICAgICAgICAgKHJlYWQtY2hhciBwb3J0KQogICAgICAgICAg ICAgICAgKG5lc3QtY29tbWVudCBwb3J0KSkpKQogICAgICAgICgoY2hhcj0/IGMgI1wjKQogICAg ICAgICAgKGxldCAoKGMyIChwZWVrLWNoYXIgcG9ydCkpKQogICAgICAgICAgICAod2hlbiAoY2hh cj0/IGMyICNcfCkKICAgICAgICAgICAgICAgIChiZWdpbgogICAgICAgICAgICAgICAgICAocmVh ZC1jaGFyIHBvcnQpCiAgICAgICAgICAgICAgICAgIChuZXN0LWNvbW1lbnQgcG9ydCkpKQogICAg ICAgICAgICAobmVzdC1jb21tZW50IHBvcnQpKSkKICAgICAgICAoI3QKICAgICAgICAgIChuZXN0 LWNvbW1lbnQgcG9ydCkpKSkpCgogIChkZWZpbmUgKHByb2Nlc3Mtc2hhcnAgbXktcmVhZCBwb3J0 KQogICAgOyBXZSd2ZSBwZWVrZWQgYSAjIGNoYXJhY3Rlci4gIFJldHVybnMgd2hhdCBpdCByZXBy ZXNlbnRzLgogICAgKHJlYWQtY2hhciBwb3J0KSA7IFJlbW92ZSAjCiAgICAoY29uZAogICAgICAo KGVvZi1vYmplY3Q/IChwZWVrLWNoYXIgcG9ydCkpIChwZWVrLWNoYXIgcG9ydCkpIDsgSWYgZW9m LCByZXR1cm4gZW9mLgogICAgICAoI3QKICAgICAgICA7IE5vdCBFT0YuIFJlYWQgaW4gdGhlIG5l eHQgY2hhcmFjdGVyLCBhbmQgc3RhcnQgYWN0aW5nIG9uIGl0LgogICAgICAgIChsZXQgKChjIChy ZWFkLWNoYXIgcG9ydCkpKQogICAgICAgICAgKGNvbmQKICAgICAgICAgICAgKChjaGFyLWNpPT8g YyAjXHQpICAjdCkKICAgICAgICAgICAgKChjaGFyLWNpPT8gYyAjXGYpICAjZikKICAgICAgICAg ICAgKChpc21lbWJlcj8gYyAnKCNcaSAjXGUgI1xiICNcbyAjXGQgI1x4CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjXEkgI1xFICNcQiAjXE8gI1xEICNcWCkpCiAgICAgICAgICAgICAgKHJl YWQtbnVtYmVyIHBvcnQgKGxpc3QgI1wjIChjaGFyLWRvd25jYXNlIGMpKSkpCiAgICAgICAgICAg ICgoY2hhcj0/IGMgI1woICkgIDsgVmVjdG9yLgoJICAgICAobGlzdC0+dmVjdG9yIChteS1yZWFk LWRlbGltaXRlZC1saXN0IG15LXJlYWQgI1wpIHBvcnQpKSkKCgkgICAgOzsgaGFzaCB0YWJsZSA6 ICNoYXNoKCgiYSIgLiAxKSAoImIiIC4gMjApKSBzdXBwb3J0IHRvIHdyaXRlLi4uICh0cnkgdG8g cXVvdGUgaXQgCgoJICAgICgoY2hhcj0/IGMgI1xcKSAocHJvY2Vzcy1jaGFyIHBvcnQpKQogICAg ICAgICAgICA7IFRoaXMgc3VwcG9ydHMgU1JGSS0zMCAjfC4uLnwjCiAgICAgICAgICAgICgoY2hh cj0/IGMgI1x8KSAobmVzdC1jb21tZW50IHBvcnQpIChteS1yZWFkIHBvcnQpKQogICAgICAgICAg ICA7IElmICMheHl6LCBjb25zdW1lIHh5eiBhbmQgcmVjdXJzZS4KICAgICAgICAgICAgOyBJbiBh IHJlYWwgcmVhZGVyLCBjb25zaWRlciBoYW5kbGluZyAiIyEgd2hpdGVzcGFjZSIgcGVyIFNSRkkt MjIsCiAgICAgICAgICAgIDsgYW5kIGNvbnNpZGVyICIjISIgZm9sbG93ZWQgYnkgLyBvciAuIGFz IGEgY29tbWVudCB1bnRpbCAiISMiLgogICAgICAgICAgICAoKGNoYXI9PyBjICNcISkgKG15LXJl YWQgcG9ydCkgKG15LXJlYWQgcG9ydCkpCgkgICAgKChjaGFyPT8gYyAjXDspIChyZWFkLWVycm9y ICJTUkZJLTEwNSBSRVBMIDogVW5zdXBwb3J0ZWQgIzsgZXh0ZW5zaW9uIikpCgkgICAgOzsgcmVh ZCAjOmJsYWJsYQoJICAgICgoY2hhcj0/IGMgI1w6KSAobGlzdC0+c3RyaW5nCgkJCSAgICAgKGFw cGVuZCAobGlzdCAjXCMgI1w6KQoJCQkJICAgICAocmVhZC11bnRpbC1kZWxpbSBwb3J0IG5lb3Rl cmljLWRlbGltaXRlcnMpKSkpCgkgICAgOzsgcmVhZCAjJ2JsYWJsYSAsZGVhbCB3aXRoIHN5bnRh eCBvYmplY3RzCgkgICAgOzsoKGNoYXI9PyBjICNcJykgKGxpc3QgJ3N5bnRheCAoY3VybHktaW5m aXgtcmVhZCBwb3J0KSkpCgkgICAgKChjaGFyPT8gYyAjXCcpIChsaXN0ICdzeW50YXggKG15LXJl YWQgcG9ydCkpKQoJICAgIDs7IGRlYWwgc3ludGF4IHdpdGggYmFja3F1b3RlLCBzcGxpY2luZywu Li4KCSAgICAoKGNoYXI9PyBjICNcYCkgKGxpc3QgJ3F1YXNpc3ludGF4IChteS1yZWFkIHBvcnQp KSkKCSAgICAoKGNoYXI9PyBjICNcLCkgKGlmIChjaGFyPT8gKHBlZWstY2hhciBwb3J0KSAjXEAp CgkJCQkoYmVnaW4KCQkJCSAgKHJlYWQtY2hhciBwb3J0KQoJCQkJICAobGlzdCAndW5zeW50YXgt c3BsaWNpbmcgKG15LXJlYWQgcG9ydCkpKQoJCQkJKGxpc3QgJ3F1YXNpc3ludGF4IChteS1yZWFk IHBvcnQpKSkpCgkgICAgKCN0IChyZWFkLWVycm9yIChzdHJpbmctYXBwZW5kICJTUkZJLTEwNSBS RVBMIDoiCgkJCQkJICAgIlVuc3VwcG9ydGVkICMgZXh0ZW5zaW9uIgoJCQkJCSAgICIgdW5zdXBw b3J0ZWQgY2hhcmFjdGVyIGNhdXNpbmcgdGhpcyBtZXNzYWdlIGlzIGNoYXJhY3RlcjoiCgkJCQkJ ICAgKHN0cmluZyBjKSkpKSkpKSkpCgogIChkZWZpbmUgKHByb2Nlc3MtcGVyaW9kIHBvcnQpCiAg ICA7IFdlJ3ZlIHBlZWtlZCBhIHBlcmlvZCBjaGFyYWN0ZXIuICBSZXR1cm5zIHdoYXQgaXQgcmVw cmVzZW50cy4KICAgIChyZWFkLWNoYXIgcG9ydCkgOyBSZW1vdmUgLgogICAgKGxldCAoKGMgKHBl ZWstY2hhciBwb3J0KSkpCiAgICAgIChjb25kIDs7IHByb2Nlc3NpbmcgcGVyaW9kIC4gaXMgaW1w b3J0YW50IGZvciBmdW5jdGlvbnMgd2l0aCB2YXJpYWJsZSBudW1iZXJzIG9mIHBhcmFtZXRlcnM6 IChmY3QgYXJnMSAuIHJlc3RhcmdzKQogICAgICAgKChlb2Ytb2JqZWN0PyBjKSAoc3RyaW5nLT5z eW1ib2wgKHN0cmluZyAjXC4pKSkgIDs7IG9ubHkgdGhpcyBvbmUgd29ya3Mgd2l0aCBSYWNrZXQg U2NoZW1lCiAgICAgICAgOzsoKGVvZi1vYmplY3Q/IGMpICcuKSA7IHBlcmlvZCBlb2Y7IHJldHVy biBwZXJpb2QuIDs7IGRvIG5vdCB3b3JrcyB3aXRoIFJhY2tldCBTY2hlbWUKICAgICAgIDs7KChl b2Ytb2JqZWN0PyBjKSAncGVyaW9kKSA7OyB0aGlzIG9uZSBhbm5paGlsYXRlIHRoZSBwcm9jZXNz aW5nIHVzaW5nIGR1bW15ICdwZXJpb2QgIQogICAgICAgICgoaXNtZW1iZXI/IGMgZGlnaXRzKQog ICAgICAgICAgKHJlYWQtbnVtYmVyIHBvcnQgKGxpc3QgI1wuKSkpICA7IHBlcmlvZCBkaWdpdCAt IGl0J3MgYSBudW1iZXIuCiAgICAgICAgKCN0CiAgICAgICAgICA7IEF0IHRoaXMgcG9pbnQsIFNj aGVtZSBvbmx5IHJlcXVpcmVzIHN1cHBvcnQgZm9yICIuIiBvciAiLi4uIi4KICAgICAgICAgIDsg QXMgYW4gZXh0ZW5zaW9uIHdlIGNhbiBzdXBwb3J0IHRoZW0gYWxsLgogICAgICAgICAgKHN0cmlu Zy0+c3ltYm9sCiAgICAgICAgICAgIChmb2xkLWNhc2UtbWF5YmUgcG9ydAogICAgICAgICAgICAg IChsaXN0LT5zdHJpbmcgKGNvbnMgI1wuCiAgICAgICAgICAgICAgICAocmVhZC11bnRpbC1kZWxp bSBwb3J0IG5lb3RlcmljLWRlbGltaXRlcnMpKSkpKSkpKSkKCiAgKGRlZmluZSAocHJvY2Vzcy1j aGFyIHBvcnQpCiAgICA7IFdlJ3ZlIHJlYWQgI1wgLSByZXR1cm5zIHdoYXQgaXQgcmVwcmVzZW50 cy4KICAgIChjb25kCiAgICAgICgoZW9mLW9iamVjdD8gKHBlZWstY2hhciBwb3J0KSkgKHBlZWst Y2hhciBwb3J0KSkKICAgICAgKCN0CiAgICAgICAgOyBOb3QgRU9GLiBSZWFkIGluIHRoZSBuZXh0 IGNoYXJhY3RlciwgYW5kIHN0YXJ0IGFjdGluZyBvbiBpdC4KICAgICAgICAobGV0ICgoYyAocmVh ZC1jaGFyIHBvcnQpKQogICAgICAgICAgICAgIChyZXN0IChyZWFkLXVudGlsLWRlbGltIHBvcnQg bmVvdGVyaWMtZGVsaW1pdGVycykpKQogICAgICAgICAgKGNvbmQKICAgICAgICAgICAgKChudWxs PyByZXN0KSBjKSA7IG9ubHkgb25lIGNoYXIgYWZ0ZXIgI1wgLSBzbyB0aGF0J3MgaXQhCiAgICAg ICAgICAgICgjdAogICAgICAgICAgICAgIChsZXQgKChyZXN0LXN0cmluZyAobGlzdC0+c3RyaW5n IChjb25zIGMgcmVzdCkpKSkKICAgICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAg IDsgSW1wbGVtZW50IFI2UlMgY2hhcmFjdGVyIG5hbWVzLCBzZWUgUjZSUyBzZWN0aW9uIDQuMi42 LgogICAgICAgICAgICAgICAgICA7IEFzIGFuIGV4dGVuc2lvbiwgd2Ugd2lsbCBBTFdBWVMgYWNj ZXB0IGNoYXJhY3RlciBuYW1lcwogICAgICAgICAgICAgICAgICA7IG9mIGFueSBjYXNlLCBubyBt YXR0ZXIgd2hhdCB0aGUgY2FzZS1mb2xkaW5nIHZhbHVlIGlzLgogICAgICAgICAgICAgICAgICAo KHN0cmluZy1jaT0/IHJlc3Qtc3RyaW5nICJzcGFjZSIpICNcc3BhY2UpCiAgICAgICAgICAgICAg ICAgICgoc3RyaW5nLWNpPT8gcmVzdC1zdHJpbmcgIm5ld2xpbmUiKSAjXG5ld2xpbmUpCiAgICAg ICAgICAgICAgICAgICgoc3RyaW5nLWNpPT8gcmVzdC1zdHJpbmcgInRhYiIpIHRhYikKICAgICAg ICAgICAgICAgICAgKChzdHJpbmctY2k9PyByZXN0LXN0cmluZyAibnVsIikgKGludGVnZXItPmNo YXIgI3gwMDAwKSkKICAgICAgICAgICAgICAgICAgKChzdHJpbmctY2k9PyByZXN0LXN0cmluZyAi YWxhcm0iKSAoaW50ZWdlci0+Y2hhciAjeDAwMDcpKQogICAgICAgICAgICAgICAgICAoKHN0cmlu Zy1jaT0/IHJlc3Qtc3RyaW5nICJiYWNrc3BhY2UiKSAoaW50ZWdlci0+Y2hhciAjeDAwMDgpKQog ICAgICAgICAgICAgICAgICAoKHN0cmluZy1jaT0/IHJlc3Qtc3RyaW5nICJsaW5lZmVlZCIpIChp bnRlZ2VyLT5jaGFyICN4MDAwQSkpCiAgICAgICAgICAgICAgICAgICgoc3RyaW5nLWNpPT8gcmVz dC1zdHJpbmcgInZ0YWIiKSAoaW50ZWdlci0+Y2hhciAjeDAwMEIpKQogICAgICAgICAgICAgICAg ICAoKHN0cmluZy1jaT0/IHJlc3Qtc3RyaW5nICJwYWdlIikgKGludGVnZXItPmNoYXIgI3gwMDBD KSkKICAgICAgICAgICAgICAgICAgKChzdHJpbmctY2k9PyByZXN0LXN0cmluZyAicmV0dXJuIikg KGludGVnZXItPmNoYXIgI3gwMDBEKSkKICAgICAgICAgICAgICAgICAgKChzdHJpbmctY2k9PyBy ZXN0LXN0cmluZyAiZXNjIikgKGludGVnZXItPmNoYXIgI3gwMDFCKSkKICAgICAgICAgICAgICAg ICAgKChzdHJpbmctY2k9PyByZXN0LXN0cmluZyAiZGVsZXRlIikgKGludGVnZXItPmNoYXIgI3gw MDdGKSkKICAgICAgICAgICAgICAgICAgOyBBZGRpdGlvbmFsIGNoYXJhY3RlciBuYW1lcyBhcyBl eHRlbnNpb25zOgogICAgICAgICAgICAgICAgICAoKHN0cmluZy1jaT0/IHJlc3Qtc3RyaW5nICJo dCIpIHRhYikKICAgICAgICAgICAgICAgICAgKChzdHJpbmctY2k9PyByZXN0LXN0cmluZyAiY3Ii KSAoaW50ZWdlci0+Y2hhciAjeDAwMGQpKQogICAgICAgICAgICAgICAgICAoKHN0cmluZy1jaT0/ IHJlc3Qtc3RyaW5nICJicyIpIChpbnRlZ2VyLT5jaGFyICN4MDAwOCkpCiAgICAgICAgICAgICAg ICAgICgjdCAocmVhZC1lcnJvciAiSW52YWxpZCBjaGFyYWN0ZXIgbmFtZSIpKSkpKSkpKSkpCgoK OyBSZWNvcmQgdGhlIG9yaWdpbmFsIHJlYWQgbG9jYXRpb24sIGluIGNhc2UgaXQncyBjaGFuZ2Vk IGxhdGVyOgooZGVmaW5lIGRlZmF1bHQtc2NoZW1lLXJlYWQgcmVhZCkKCjsgcGFyc2UgdGhlIGlu cHV0IGZpbGUgZnJvbSBjb21tYW5kIGxpbmUKKGRlZmluZSBjbWQtbG4gKGNvbW1hbmQtbGluZSkp Cjs7KGZvcm1hdCAjdCAiVGhlIGNvbW1hbmQtbGluZSB3YXM6fnsgfnd+fX4lIiBjbWQtbG4pCihk ZWZpbmUgZmlsZS1uYW1lIChjYXIgKHJldmVyc2UgY21kLWxuKSkpCgooZGVmaW5lIGNvZGUtbHN0 IChsaXRlcmFsLXJlYWQtc3ludGF4IGZpbGUtbmFtZSkpCgooZGVmaW5lIChkc3BwLWV4cHIgZXhw cikKICAocHByaW50ICh3cml0ZSBleHByKSkKICAobmV3bGluZSkpCgooZGVmaW5lIChkc3AtZXhw ciBleHByKQogIChkaXNwbGF5ICh3cml0ZSBleHByKSkKICAobmV3bGluZSkpCgo7KGRlZmluZSBk by1ub3QtZGlzcGxheS1yZXN1bHQgKG1hcCBkc3AtZXhwciBjb2RlLWxzdCkpCgooZm9yLWVhY2gg ZHNwLWV4cHIgY29kZS1sc3QpCgoK --000000000000b1c83506098da53f--