Received: from mx0.gmx.net (mx0.gmx.net [213.165.64.100]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with SMTP id p2DKH5vP011593 for ; Sun, 13 Mar 2011 21:17:06 +0100 Received: (qmail 4443 invoked by alias); 13 Mar 2011 20:17:00 -0000 Delivered-To: GMX delivery to rainer.schoepf@gmx.net Received: (qmail invoked by alias); 13 Mar 2011 20:16:59 -0000 Received: from relay.uni-heidelberg.de (EHLO relay.uni-heidelberg.de) [129.206.100.212] by mx0.gmx.net (mx006) with SMTP; 13 Mar 2011 21:16:59 +0100 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id p2DKEnfQ002285 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 13 Mar 2011 21:14:49 +0100 Received: from listserv.uni-heidelberg.de (localhost.localdomain [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p2DAHdUU014519; Sun, 13 Mar 2011 21:14:38 +0100 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 1208954 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Sun, 13 Mar 2011 21:14:38 +0100 Received: from relay.uni-heidelberg.de (relay.uni-heidelberg.de [129.206.100.212]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p2DKEc5c016511 for ; Sun, 13 Mar 2011 21:14:38 +0100 Received: from mail-yw0-f49.google.com (mail-yw0-f49.google.com [209.85.213.49]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id p2DKEW9i002171 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=FAIL) for ; Sun, 13 Mar 2011 21:14:37 +0100 Received: by ywa8 with SMTP id 8so3319521ywa.22 for ; Sun, 13 Mar 2011 13:14:31 -0700 (PDT) MIME-Version: 1.0 Received: by 10.236.201.196 with SMTP id b44mr5106042yho.42.1300047271344; Sun, 13 Mar 2011 13:14:31 -0700 (PDT) Received: by 10.147.170.13 with HTTP; Sun, 13 Mar 2011 13:14:31 -0700 (PDT) References: <905C5ED0-6639-4DEB-95AC-A2FCB2C4491D@gmail.com> Content-Type: multipart/mixed; boundary=20cf305e25adccb96b049e62d759 X-Spam-Whitelist: Message-ID: Date: Sun, 13 Mar 2011 16:14:31 -0400 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Bruno Le Floch Subject: Re: expl3's seq_pop_right etc. To: LATEX-L@listserv.uni-heidelberg.de In-Reply-To: Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=5D7Q89H36p4WX0t+AtsdW2ORvUlAfcdSIdQlIL3FTSFQDxQiodii41fjuqHQd8jenp0+N dNY0CcAB8WAv7r3OtvsaDOOiC4T8TWFW3c0h9kbMpE0/ou/MWvK8X//VR9J5RqCotAZER8h4O06e mC19Q==V1; X-Resent-By: Forwarder X-Resent-For: rainer.schoepf@gmx.net X-Resent-To: rainer@rainer-schoepf.de Status: R X-Status: X-Keywords: X-UID: 6669 --20cf305e25adccb96b049e62d759 Content-Type: text/plain; charset=ISO-8859-1 Hello all, > **So my question is: do we want to support braces in seq items or not?** Here is what I could code today. The absence of braces around each element makes most functions rather tricky to implement, although at most a factor of 2 in speed, I'd say. All the functions in the file I'm attaching are linear in the length of the seq (I think), i.e. quicker than storing the elements one by one in a new seq. The only reason to not brace items is to be able to find an item faster using delimited arguments, and that this will only work for "nice" items (i.e., no brace, no `#`). So I have the following more radical proposal: brace the arguments, and propose two searches, - one true search, which goes through each element and compares with `\tl_if_eq:nn`, - a `str`-like one, which detokenizes the seq, and searches for the detokenized version of `\seq_elt:n {}` with a delimited argument (now ok, since everything is detokenized). That proposal would make the code much, much clearer in my opinion. Also slightly faster, but not more than two-fold. -- Regards, Bruno --20cf305e25adccb96b049e62d759 Content-Type: application/x-tex; name="seq-fixed.tex" Content-Disposition: attachment; filename="seq-fixed.tex" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 JSBNYW55IHNlcSBmdW5jdGlvbnMgcHJvaGliaXQgYFxxX3N0b3BgIGZyb20gYXBwZWFyaW5nIGlu IAolIGl0ZW1zLiBBIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJlcGxhY2UgaXQgYnkgYFxzZXFfZWx0 X2VuZDogXHFfYnJlYWtgLAolIHdoaWNoIGNhbm5vdCBhcHBlYXIgaW4gYSBzZXEgc2luY2UgaXRl bXMgY2Fubm90IGNvbnRhaW4gYFxzZXFfZWx0X2VuZDpgLgolClxkb2N1bWVudGNsYXNze2FydGlj bGV9Clx1c2VwYWNrYWdle2V4cGwzfQpcYmVnaW57ZG9jdW1lbnR9ClxFeHBsU3ludGF4T24KClxj c19uZXc6TnBuIFx1c2VfaWlfaTpubiAgIzEgIzIgeyAjMiAgIzEgIH0KXGNzX25ldzpOcG4gXHVz ZV9paV9iaTpubiAjMSAjMiB7ICMyIHsjMX0gfQoKJSA9PT09PT09PT09PT09PT09PT09PT0gQnJl YWtpbmcKJSAiYnJlYWsiOiB0byBtYWtlIGl0IHJvYnVzdCwgd2UgdXNlIHRoZSBkZWxpbWl0ZXIg CiUgYFxzZXFfZWx0X2VuZDogXHFfYnJlYWtgLCB3aGljaCBjYW5ub3QgYXBwZWFyIGluIGEgc2Vx IAolIGV2ZW4gaWYgaXQgY29udGFpbnMgYFxxX2JyZWFrYC4gQWxzbywgd2UgbWFrZSBzdXJlIHRo YXQKJSB0aGUgY2xlYW51cCAoYnJhY2UgZ3JvdXAgZm9sbG93aW5nIGBcc2VxX2VsdF9lbmQ6IFxx X2JyZWFrYCkKJSBpcyBleGVjdXRlZCBfYmVmb3JlXyB0aGUgYXJndW1lbnQgb2YgYFxNc2VxX2Jy ZWFrOm53bmAsCiUgbGVhdmluZyBubyBzcHVyaW91cyB0b2tlbnMgYWZ0ZXIgaXQuCiUgClxjc19u ZXc6TnBuIFxNc2VxX2JyZWFrOm53biAjMSAjMiBcc2VxX2VsdF9lbmQ6IFxxX2JyZWFrICMzIHsg IzMgIzEgfQpcY3NfbmV3Ok5wbiBcTXNlcV9icmVhazp3biAgICAgIzEgXHNlcV9lbHRfZW5kOiBc cV9icmVhayAjMiB7ICMyIH0KCiUgQXR0ZW1wdCB0byBleGl0IGNsZWFubHkgaW4gY2FzZSB0aGUg c2VxIGlzIGVtcHR5LiBNb3N0bHkgdW50ZXN0ZWQuClxjc19uZXc6TnBuIFxNc2VxX2lmX2VtcHR5 X2JyZWFrOk4gIzEgewogIFxpZl9tZWFuaW5nOncgXGNfZW1wdHlfdGwgIzEKICBcZXhwX2FmdGVy OndOIFxNc2VxX2JyZWFrOnduCiAgXGZpOgp9Clxjc19uZXc6TnBuIFxNc2VxX2lmX2VtcHR5X2Jy ZWFrOk5uICMxICMyIHsKICBcaWZfbWVhbmluZzp3IFxjX2VtcHR5X3RsICMxIAogIFxleHBfYWZ0 ZXI6d04gXHVzZV9ub25lOm4KICBcZmk6CiAgXHVzZV9ub25lOm5uIFxNc2VxX2JyZWFrOm53biB7 IzJ9Cn0KCgolID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiUg ImdldCIgd2l0aG91dCByZW1vdmluZyBicmFjZXMuCiUgV2hhdCByZXN1bHQgc2hvdWxkIGJlIGdp dmVuIGlmIHRoZSBzZXEgaXMgZW1wdHk/IChjdXJyZW50bHkgYFxxX25pbGApClxjc19uZXdfcHJv dGVjdGVkX25vcGFyOk5wbiBcTXNlcV9nZXQ6Tk4gIzEgewogIFxzZXFfaWZfZW1wdHlfZXJyOk4g IzEKICBcZXhwX2FmdGVyOndOIFxNc2VxX2dldF9hdXg6dyAjMSAKICBcc2VxX2VsdDp3IFxxX25p bCBcc2VxX2VsdF9lbmQ6IAogIFxzZXFfZWx0X2VuZDogXHFfYnJlYWsKfQpcY3NfbmV3X3Byb3Rl Y3RlZDpOcG4gXE1zZXFfZ2V0X2F1eDp3ICMxIFxzZXFfZWx0X2VuZDogCiAgICAgIzIgXHNlcV9l bHRfZW5kOiBccV9icmVhayAjMwp7CiAgXHRsX3NldDpObyAjMyB7XHVzZV9ub25lOm4gIzF9Cn0K XGNzX2dlbmVyYXRlX3ZhcmlhbnQ6Tm4gXE1zZXFfZ2V0Ok5OIHtjfQoKCiUgInBvcCIgd2l0aG91 dCByZW1vdmluZyBicmFjZXMuCiUgV2hhdCBzaG91bGQgaGFwcGVuIGlmIHRoZSBzZXEgaXMgZW1w dHk/CiUgQ3VycmVudGx5IGdpdmVzICJccV9uaWwiIGFuZCBhbiBlbXB0eSBzZXEuClxjc19uZXdf cHJvdGVjdGVkOk5wbiBcTXNlcV9wb3BfYXV4Om5uTk4gIzEjMiMzIHsKICBcc2VxX2lmX2VtcHR5 X2VycjpOICMzCiAgXE1zZXFfaWZfZW1wdHlfYnJlYWs6Tm4gIzMge1xNc2VxX3BvcF9hdXhfZW1w dHk6bm5OTn0KICBcZXhwX2FmdGVyOndOIFxNc2VxX3BvcF9hdXg6dyAjMyBcc2VxX2VsdF9lbmQ6 IFxxX2JyZWFrIHt9IHsjMX0geyMyfSAjMwp9Clxjc19uZXdfcHJvdGVjdGVkOk5wbiBcTXNlcV9w b3BfYXV4OncgIzEgXHNlcV9lbHRfZW5kOiAKICAgICMyIFxzZXFfZWx0X2VuZDogXHFfYnJlYWsg IzMgIzQjNSM2IzcKewogICM0ICM2IHsjMn0KICBcZXhwX2FmdGVyOndOIFx1c2VfaWlfYmk6bm4g XGV4cF9hZnRlcjp3TiAge1x1c2Vfbm9uZTpuICMxfSB7IzUgIzd9IAp9Clxjc19uZXdfcHJvdGVj dGVkOk5wbiBcTXNlcV9wb3BfYXV4X2VtcHR5Om5uTk4gIzEgIzIgIzMgIzQgewogICMxICMzIHt9 CiAgIzIgIzQge1xxX25pbH0KfQoKCiUgInB1dCI6IEFsbCBvZiB0aGUgcHV0IG9wZXJhdGlvbnMg Zm9yIHNlcSBhcmUgYmFzZWQgb24gYSBzaW5nbGUgCiUgYXV4aWxpYXJ5OiBgXHNlcV9wdXRfYXV4 Ok5ubmAuIFRoZSBjdXJyZW50IHZlcnNpb24gcHJvaGliaXRzIAolIGBccV9zdG9wYC4gVGhlIHZl cnNpb24gYmVsb3cgY2FuIHB1dCBhbnl0aGluZywgc28gSSBwcmVmaXhlZCBpdAolIGBcdGxfYC4g VGhlIGNyYXp5IGBcdXNlX2AgZnVuY3Rpb24gc2ltcGx5IHNodWZmbGVzIGFyZ3VtZW50cyAKJSBh cm91bmQgd2l0aCB0aGUgcmVsZXZhbnQgYnJhY2VzLgolIApcY3NfbmV3X3Byb3RlY3RlZDpOcG4g XE10bF9wdXRfbGVmdF9yaWdodDpObm4gIzEgewogIFxleHBfYWZ0ZXI6d04gXHVzZV9paV9paWlf Qml2X2lfdkU6bm5ubm4gXGV4cF9hZnRlcjp3TiB7IzF9IFx0bF9zZXQ6Tm4gIzEgCn0KXGNzX25l dzpOcG4gXHVzZV9paV9paWlfQml2X2lfdkU6bm5ubm4gIzEjMiMzIzQjNSB7ICMyICMzIHsjNCAj MSAjNX0gfQpcY3NfbmV3X2VxOk5OIFxNc2VxX3B1dF9hdXg6Tm5uIFxNdGxfcHV0X2xlZnRfcmln aHQ6Tm5uCgoKJSA9PT09PT09PT09PT09PT09IE5vbi1leHBhbmRhYmxlIG1hcHBpbmcKJSBFdmVy eXRoaW5nIGlzIGJhc2VkIG9uIGEgZ2VuZXJpYyBmdW5jdGlvbiwgdXNlZCBhcwolCiUgICAgIFxN c2VxX21hcF9pbmxpbmVfbGFzdDpObm5GIDxzZXE+IDxmKCMxKT4gPGcoIzEpPiA8dGw+CiUKJSBU aGUgZnVuY3Rpb24gPGYoIzEpPiBpcyBhcHBsaWVkIHRvIGVhY2ggZWxlbWVudCBpbiB0aGUgc2Vx LAolIGV4Y2VwdCB0aGUgbGFzdCBvbmUuIFRoZSBmdW5jdGlvbiA8ZygjMSk+IGlzIGFwcGxpZWQg dG8gdGhlCiUgbGFzdCBvbmUuIDx0bD4gaXMgcnVuIGlmIHRoZSBtYXBwaW5nIHdhcyBub3QgYnJv a2VuIGVhcmxpZXIuCiUgCiUgSWYgdGhlIHNlcSBpcyBlbXB0eSwgb25seSA8dGw+IGlzIHJ1biwg c2luY2UgaXQgaXMgaW1wb3NzaWJsZQolIGZvciB0aGUgbWFwcGluZyB0byBiZSBicm9rZW4gZWFy bGllci4KJSAKJSBXaGVuIGJyb2tlbiwgdGhlIG1hcHBpbmcgdGFrZXMgY2FyZSBvZiBmaW5pc2hp bmcgY2xlYW5seSBhbmQKJSBsZWF2aW5nIG5vIHRva2VuIGFmdGVyIHRoZSBhcmd1bWVudCBvZiBg XE1zZXFfYnJlYWs6bnduYAolIApcY3NfbmV3X3Byb3RlY3RlZDpOcG4gXE1zZXFfbWFwX2lubGlu ZV9sYXN0Ok5ubkYgIzEgIzIgIzMgIzQgewogIFxjc19zZXQ6TnBuIFxzZXFfZWx0OncgIyMxIHsj Mn0KICBcY3Nfc2V0Ok5wbiBcc2VxX3RtcDp3ICMjMSB7IzMgXHVzZV9ub25lOm5ufQogIFxleHBf YWZ0ZXI6d04gXE1zZXFfbWFwX2xhc3RfYXV4OncgIzEgXHNlcV90bXA6dyAKICBcdXNlX25vbmU6 bm4gXHNlcV9lbHRfZW5kOiBcdXNlX25vbmU6bm5uICUgbmVlZGVkIGZvciBlbXB0eSBzZXEKICBc TXNlcV9icmVhazpud24geyM0fQogIFxzZXFfZWx0X2VuZDogXHFfYnJlYWsgCiAge1xjc19zZXRf ZXE6Tk4gXHNlcV9lbHQ6dyBcRVJST1J9Cn0KXGNzX25ldzpOcG4gXE1zZXFfbWFwX2xhc3RfYXV4 OncgIzEgXHNlcV9lbHRfZW5kOiAjMiB7CiAgXGV4cF9hZnRlcjp3TiAjMiBcZXhwX2FmdGVyOndO IHtcdXNlX25vbmU6biAjMX0KICBcTXNlcV9tYXBfbGFzdF9hdXg6dyAjMgp9CgoKCgolICJtYXBf aW5saW5lIjogbm9uLWV4cGFuZGFibGUsIG5vbi1uZXN0YWJsZS4KJSAgICAgXE1zZXFfbWFwX2lu bGluZTpObiA8c2VxPiA8ZigjMSk+CiUKXGNzX25ld19wcm90ZWN0ZWQ6TnBuIFxNc2VxX21hcF9p bmxpbmU6Tm4gIzEgIzIgewogIFxNc2VxX21hcF9pbmxpbmVfbGFzdDpObm5GICMxIHsjMn0geyMy fSB7fQp9Clxjc19nZW5lcmF0ZV92YXJpYW50Ok5uIFxNc2VxX21hcF9pbmxpbmU6Tm4ge2N9Cgol IEZvbGxvd2luZyBuZWVkZWQgZm9yIGBzZXFfaWZfaW5gCiUgICAgIFxNc2VxX21hcF9pbmxpbmU6 Tm5GIDxzZXE+IDxmKCMxKT4gPHRsPgpcY3NfbmV3X3Byb3RlY3RlZDpOcG4gXE1zZXFfbWFwX2lu bGluZTpObkYgIzEgIzIgIzMgewogIFxNc2VxX21hcF9pbmxpbmVfbGFzdDpObm5GICMxIHsjMn0g eyMyfSB7IzN9Cn0KCgolICJtYXBfdmFyaWFibGUiOiBub24tZXhwYW5kYWJsZSwgbm9uLW5lc3Rh YmxlLgolICAgICBcTXNlcV9tYXBfdmFyaWFibGU6Tk5uIDxzZXE+IDx0bHZhcj4gPGYoPHRsdmFy Pik+CiUKXGNzX25ld19wcm90ZWN0ZWQ6TnBuIFxNc2VxX21hcF92YXJpYWJsZTpOTm4gIzEjMiMz IHsKICBcdGxfc2V0Ok5uIFxsX3NlcV90bXBhX3RsIHsjM30KICBcTXNlcV9tYXBfaW5saW5lOk5u ICMxIHtcdGxfc2V0Ok5uICMyIHsjIzF9IFxsX3NlcV90bXBhX3RsfQp9Clxjc19nZW5lcmF0ZV92 YXJpYW50Ok5uIFxNc2VxX21hcF92YXJpYWJsZTpOTm4ge2N9CgoKJSBJIGhhdmVuJ3QgdGhvdWdo dCBhYm91dCBuZXN0aW5nIHlldCwgYnV0IEkgaGF2ZSB0aGUgdmFndWUgaWRlYQolIHRoYXQgYWxs IG9mIHRoZXNlIGNvdWxkIGJlIG1hZGUgbmVzdGFibGUgYnkgc2F2aW5nIHRoZSBkZWYgb2YKJSBg XHNlcV9lbHQ6d2AgYXMgYFxzZXFfZWx0XzM6d2AgYW5kIHJlc3RvcmluZyBpdCAod2hlcmUgYDNg IGlzCiUgdGhlIGxldmVsIG9mIG5lc3RpbmcgbGV2ZWwpLgoKCiUgPT09PT09PT09PT09PT09PT09 PT09IEV4cGFuZGFibGUgbWFwcGluZwolICJtYXAgZnVuY3Rpb24iOiBleHBhbmRhYmxlLCAobmVz dGFibGU/KS4gTm90ZSB0aGF0IHdlIGNhbiBtYXAKJSBjaHVua3Mgb2YgY29kZSByYXRoZXIgdGhh biBqdXN0IHNpbmdsZSBmdW5jdGlvbnMuIAolIFRoZSBgbWFwX2Z1bmN0aW9uYCBmdW5jdGlvbnMg b2Ygb3RoZXIgbW9kdWxlcyBjb3VsZCBlYXNpbHkgYmUKJSBjaGFuZ2VkIHRvIGFsbG93IHRoZSBz YW1lLiBJJ20ganVzdCBhZnJhaWQgdGhhdCBwZW9wbGUgd2lsbAolIGdldCBjb25mdXNlZCBhcyB0 byB3aGljaCBhcmd1bWVudCBpcyB0aGUgc2VxIGFuZCB3aGljaCBpcyB0aGUKJSBmdW5jdGlvbiB0 byBtYXAuCiUgClxjc19uZXc6TnBuIFxNc2VxX21hcF9mdW5jdGlvbl9hdXg6bndOICMxICMyIFxz ZXFfZWx0X2VuZDogIzMgewogIFxxdWFya19pZl9yZWN1cnNpb25fdGFpbF9zdG9wOk4gIzMKICBc ZXhwX2FmdGVyOndOIFx1c2VfaWlfYmk6bm4gXGV4cF9hZnRlcjp3TiB7XHVzZV9ub25lOm4gIzJ9 IHsjMX0KICBcTXNlcV9tYXBfZnVuY3Rpb25fYXV4Om53TiB7IzF9ICMzCn0KXGNzX25ldzpOcG4g XE1zZXFfbWFwX2Z1bmN0aW9uOk5uICMxICMyIHsKICBcZXhwX2FmdGVyOndOIFx1c2VfaWlfaTpu biBcZXhwX2FmdGVyOndOIHsjMX0gCiAge1xNc2VxX21hcF9mdW5jdGlvbl9hdXg6bndOIHsjMn19 CiAgXHNlcV9lbHRfZW5kOiBccV9yZWN1cnNpb25fdGFpbCBccV9yZWN1cnNpb25fc3RvcAogIFx1 c2Vfbm9uZTpubm4gXHNlcV9lbHRfZW5kOiBccV9icmVhayB7fSAlIHRvIGJyZWFrLgp9Clxjc19n ZW5lcmF0ZV92YXJpYW50Ok5uIFxNc2VxX21hcF9mdW5jdGlvbjpObiB7Y30KCgoKCiUgPT09PT09 PSBpZl9pbgolIFRoZSBjdXJyZW50IHZlcnNpb24gZmFpbHMgaWYgdGhlIGl0ZW0gd2UgbG9vayBm b3IgaGFzIGJyYWNlcyBvciBgI2AuCiUgSSB0aGluayB3ZSBzaG91bGQgc3RpbGwga2VlcCBpdCwg d2l0aCBhIHdhcm5pbmcgaW4gdGhlIGRvYywgYW5kIHRoZQolIGZvbGxvd2luZyBmdW5jdGlvbiwg d2hpY2ggaXMgc2xvd2VyIGJ1dCBhbHdheXMgd29ya3MuIEl0IGlzIGJhc2VkIG9uCiUgYSBnZW5l cmljIG1hcHBpbmcgZnVuY3Rpb24gZGVmaW5lZCBhYm92ZS4KJSAgICAgXE1zZXFfbWFwX2lubGlu ZTpObkYgPHNlcT4gPGYoIzEpPiA8dGw+CiUKXHRsX25ldzpOIFxsX01zZXFfdG1wYV90bApcdGxf bmV3Ok4gXGxfTXNlcV90bXBiX3RsCgoKXHByZ19uZXdfcHJvdGVjdGVkX2NvbmRpdGlvbmFsOk5w bm4gXE1zZXFfaWZfaW46Tm4gIzEgIzIge1RGLFQsRn0gewogIFx0bF9zZXQ6Tm4gXGxfTXNlcV90 bXBhX3RsIHsjMn0KICBcTXNlcV9tYXBfaW5saW5lOk5uRiAjMSB7CiAgICBcdGxfc2V0Ok5uIFxs X01zZXFfdG1wYl90bCB7IyMxfQogICAgXHRsX2lmX2VxOk5OVCBcbF9Nc2VxX3RtcGFfdGwgXGxf TXNlcV90bXBiX3RsIHsKICAgICAgXE1zZXFfYnJlYWs6bnduIHtccHJnX3JldHVybl90cnVlOn0K ICAgIH0KICB9ewogICAgXHByZ19yZXR1cm5fZmFsc2U6CiAgfQp9CgoKCgolID09PT09PT09PT09 PT09PT09PSBSZW1vdmUgZHVwbGljYXRlcwolIGNhbiBzdGlsbCBiZSBvcHRpbWl6ZWQKJSAKJSAo bm90ZSB0byBzZWxmOiBzdG9yaW5nIGFzCiUgICAgIFxzZXFfZWx0OncgYWJjXHNlcV9lbHRfZW5k OiBcc2VxX2VsdDp3IHthYmN9XHNlcV9lbHRfZW5kOgolIGFuZCBkb2luZwolICAgICBcY3Nfc2V0 Ok5wbiBcc2VxX2VsdDp3ICMxIFxzZXFfZWx0X2VuZDogIzIgXHNlcV9lbHRfZW5kOiB7CiUgICAg ICAgXGV4cF9ub3Q6biB7IzIgXHNlcV9lbHRfZW5kOn0KJSAgICAgfQolICAgICBcdGxfc2V0Ok54 IFxsX3Jlc3VsdF9zZXEge1xsX2xvbmdfcmVzdWx0X3NlcX0KJSApCgoKXGNzX25ld19wcm90ZWN0 ZWQ6TnBuIFxNc2VxX3JlbW92ZV9kdXBsaWNhdGVzX2F1eDpOTiAjMSMyIHsKICBcc2VxX2NsZWFy Ok4gXGxfc2VxX3JlbW92ZV9zZXEKICBcTXNlcV9tYXBfZnVuY3Rpb246Tm4gIzIge1xNc2VxX3Jl bW92ZV9kdXBsaWNhdGVzX2F1eDpufQogICMxICMyIFxsX3NlcV9yZW1vdmVfc2VxCn0KXGNzX25l d19wcm90ZWN0ZWQ6TnBuIFxNc2VxX3JlbW92ZV9kdXBsaWNhdGVzX2F1eDpuICMxIHsKICBcTXNl cV9pZl9pbjpObkYgXGxfc2VxX3JlbW92ZV9zZXEgeyMxfSB7CiAgICBcc2VxX3B1dF9yaWdodDpO biBcbF9zZXFfcmVtb3ZlX3NlcSB7IzF9CiAgfQp9Clxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5w biBcTXNlcV9yZW1vdmVfZHVwbGljYXRlczpOIHsKICBcTXNlcV9yZW1vdmVfZHVwbGljYXRlc19h dXg6Tk4gXHNlcV9zZXRfZXE6Tk4KfQpcY3NfbmV3X3Byb3RlY3RlZF9ub3BhcjpOcG4gXE1zZXFf Z3JlbW92ZV9kdXBsaWNhdGVzOk4gewogIFxNc2VxX3JlbW92ZV9kdXBsaWNhdGVzX2F1eDpOTiBc c2VxX2dzZXRfZXE6Tk4KfQoKCgolID09PT09PT09PT09PT0gV2lsbCdzIG5ldyBmdW5jdGlvbnMs IG1vZGlmaWVkCiUgInBvcF9yaWdodCIKJSBubyBhc3NpZ25tZW50Clxjc19uZXdfcHJvdGVjdGVk X25vcGFyOk5wbiBcTXNlcV9wb3BfcmlnaHQ6TiAjMSB7CiAgXE1zZXFfcG9wX3JpZ2h0X2F1eDpO Tk5OICMxIFxwcmdfZG9fbm90aGluZzogXHRsX3NldDpOeCBcdXNlX25vbmU6bm4KfQpcY3NfbmV3 X3Byb3RlY3RlZF9ub3BhcjpOcG4gXE1zZXFfZ3BvcF9yaWdodDpOICMxIHsKICBcTXNlcV9wb3Bf cmlnaHRfYXV4Ok5OTk4gIzEgXHByZ19kb19ub3RoaW5nOiBcdGxfZ3NldDpOeCBcdXNlX25vbmU6 bm4KfQolIGFzc2lnbiB0byBgIzJgIGxvY2FsbHkgKGBcdGxfc2V0Om5uYCkKXGNzX25ld19wcm90 ZWN0ZWRfbm9wYXI6TnBuIFxNc2VxX3BvcF9yaWdodDpOTiAjMSMyIHsKICBcTXNlcV9wb3Bfcmln aHRfYXV4Ok5OTk4gIzEgIzIgXHRsX3NldDpOeCBcdGxfc2V0Ok5uCn0KXGNzX25ld19wcm90ZWN0 ZWRfbm9wYXI6TnBuIFxNc2VxX2dwb3BfcmlnaHQ6Tk4gIzEjMiB7CiAgXE1zZXFfcG9wX3JpZ2h0 X2F1eDpOTk5OICMxICMyIFx0bF9nc2V0Ok54IFx0bF9zZXQ6Tm4KfQoKJSBSZWRlZmluZXMgYCMx YCB0byBpdHMgcG9wcGVkIHZlcnNpb24gdXNpbmcgdGhlIGFzc2lnbm1lbnQgYCMzYCwgdGhlbiAK JSBzZXRzIGAjMmAgdG8gdGhlIHJpZ2h0LW1vc3QgZWxlbWVudCBvZiB0aGUgc2VxIHVzaW5nIHRo ZSBhc3NpZ25tZW50IGAjNGAuCiUgKGAjM2AgbXVzdCBgeGAtZXhwYW5kIHRoZSByZXBsYWNlbWVu dCB0ZXh0ISkKXGNzX25ld19wcm90ZWN0ZWRfbm9wYXI6TnBuIFxNc2VxX3BvcF9yaWdodF9hdXg6 Tk5OTiAjMSMyIzMjNCB7CiAgXGNzX3NldDpOcG4gXHNlcV9lbHQ6dyAjIzEgeyBcZXhwX25vdDpu e1xzZXFfZWx0OncgIyMxXHNlcV9lbHRfZW5kOn0gfQogIFxjc19zZXQ6TnBuIFxzZXFfdG1wOncg IyMxIHsgCiAgICBcaWZfZmFsc2U6IHsgXGZpOiB9ICUgY2xvc2UgdGhlIGFzc2lnbm1lbnQKICAg ICM0ICMyIHsjIzF9ICAgICAgICAgJSBhc3NpZ24gdGhlIHRhaWwKICAgIFxNc2VxX2JyZWFrOndu ICAgICAlIHNraXAgaXJyZWxldmFudCB0b2tlbnMKICB9CiAgIzMgIzEgewogICAgXGV4cF9hZnRl cjp3TiBcTXNlcV9tYXBfbGFzdF9hdXg6dyAjMSBcc2VxX3RtcDp3CiAgICBcc2VxX2VsdF9lbmQ6 IFxzZXFfdG1wOncgJSBlcnJvciByZWNvdmVyeSBpZiBlbXB0eSBzZXEuCiAgICBcdXNlX25vbmU6 bm4gXHNlcV9lbHRfZW5kOiBccV9icmVhayAlIG5lZWRlZCB0byBicmVhayBpbiB0aGUgbWFwCiAg ICBcaWZfZmFsc2U6IH0gXGZpOgogIFxjc19zZXRfZXE6Tk4gXHNlcV9lbHQ6dyBcRVJST1IKfQoK CiUlIEdFVAoKXGNzX25ldzpOcG4gXE1zZXFfZ2V0X3JpZ2h0Ok5OICMxIzIgewogIFxNc2VxX2dl dF9yaWdodF9hdXg6Tk5OICMxICMyIFx0bF9zZXQ6Tm4KfQpcY3NfbmV3Ok5wbiBcTXNlcV9nZ2V0 X3JpZ2h0Ok5OICMxIzIgewogIFxNc2VxX2dldF9yaWdodF9hdXg6Tk5OICMxICMyIFx0bF9nc2V0 Ok5uCn0KClxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5wbiBcTXNlcV9nZXRfcmlnaHRfYXV4Ok5O TiAjMSMyIzMgewogIFxNc2VxX2lmX2VtcHR5X2JyZWFrOk4gIzEKICBcY3Nfc2V0X2VxOk5OIFxz ZXFfZWx0OncgXHVzZV9ub25lOm4KICBcY3Nfc2V0Ok5wbiBcc2VxX3RtcDp3ICMjMSB7IAogICAg IzMgIzIgeyMjMX0gICAgICAgICAlIGFzc2lnbiB0aGUgdGFpbAogICAgXE1zZXFfYnJlYWs6d24g ICAgICUgc2tpcCBpcnJlbGV2YW50IHRva2VucwogIH0KICBcZXhwX2FmdGVyOndOIFxNc2VxX21h cF9sYXN0X2F1eDp3ICMxIFxzZXFfdG1wOncKICBcdXNlX25vbmU6bm4gXHNlcV9lbHRfZW5kOiBc cV9icmVhawogIFxjc19zZXRfZXE6Tk4gXHNlcV9lbHQ6dyBcRVJST1IKfQoKCiUgPT09PT09PT09 PT09PT09PT09PSBPdmVycmlkaW5nIHByZXZpb3VzIGRlZmluaXRpb25zCgpcY3Nfc2V0X2VxOk5O ICBcc2VxX2dldDpOTiAgICAgICAgICAgXE1zZXFfZ2V0Ok5OClxjc19zZXRfZXE6Tk4gIFxzZXFf Z2V0OmNOICAgICAgICAgICBcTXNlcV9nZXQ6Y04KXGNzX3NldF9lcTpOTiAgXHNlcV9wb3BfYXV4 Om5uTk4gICAgIFxNc2VxX3BvcF9hdXg6bm5OTgpcY3Nfc2V0X2VxOk5OICBcc2VxX3B1dF9hdXg6 Tm5uICAgICAgXE1zZXFfcHV0X2F1eDpObm4KJSBcY3Nfc2V0X2VxOk5OICBcc2VxX2JyZWFrOiAg ICAgICAgIFxNc2VxX2JyZWFrOnduCiUgXGNzX3NldF9lcTpOTiAgXHNlcV9icmVhazpuICAgICAg ICBcTXNlcV9icmVhazpud24KXGNzX3NldF9lcTpOTiAgXHNlcV9pZl9pbjpOblRGICAgICAgIFxN c2VxX2lmX2luOk5uVEYKXGNzX3NldF9lcTpOTiAgXHNlcV9pZl9pbjpOblQgICAgICAgIFxNc2Vx X2lmX2luOk5uVApcY3Nfc2V0X2VxOk5OICBcc2VxX2lmX2luOk5uRiAgICAgICAgXE1zZXFfaWZf aW46Tm5GClxjc19zZXRfZXE6Tk4gIFxzZXFfcG9wX3JpZ2h0Ok4gICAgICBcTXNlcV9wb3Bfcmln aHQ6TgpcY3Nfc2V0X2VxOk5OICBcc2VxX2dwb3BfcmlnaHQ6TiAgICAgXE1zZXFfZ3BvcF9yaWdo dDpOClxjc19zZXRfZXE6Tk4gIFxzZXFfcG9wX3JpZ2h0Ok5OICAgICBcTXNlcV9wb3BfcmlnaHQ6 Tk4KXGNzX3NldF9lcTpOTiAgXHNlcV9ncG9wX3JpZ2h0Ok5OICAgIFxNc2VxX2dwb3BfcmlnaHQ6 Tk4KXGNzX3NldF9lcTpOTiAgXHNlcV9nZXRfcmlnaHQ6Tk4gICAgIFxNc2VxX2dldF9yaWdodDpO TgpcY3Nfc2V0X2VxOk5OICBcc2VxX2dnZXRfcmlnaHQ6Tk4gICAgXE1zZXFfZ2dldF9yaWdodDpO TgpcY3Nfc2V0X2VxOk5OICBcc2VxX21hcF92YXJpYWJsZTpOTm4gICAgICBcTXNlcV9tYXBfdmFy aWFibGU6Tk5uClxjc19zZXRfZXE6Tk4gIFxzZXFfbWFwX2Z1bmN0aW9uOk5OICAgICAgIFxNc2Vx X21hcF9mdW5jdGlvbjpObiAlYXJnIHNwZWMhClxjc19zZXRfZXE6Tk4gIFxzZXFfbWFwX2lubGlu ZTpObiAgICAgICAgIFxNc2VxX21hcF9pbmxpbmU6Tm4KXGNzX3NldF9lcTpOTiAgXHNlcV9yZW1v dmVfZHVwbGljYXRlczpOICAgXE1zZXFfcmVtb3ZlX2R1cGxpY2F0ZXM6TgpcY3Nfc2V0X2VxOk5O ICBcc2VxX2dyZW1vdmVfZHVwbGljYXRlczpOICBcTXNlcV9ncmVtb3ZlX2R1cGxpY2F0ZXM6TgoK CgoKCiUgPT09PT09PT09PT09PT09PT09PT09PT0gVGVzdGluZwoKJSAlIGZvciBlbXB0eSBzZXF1 ZW5jZXMgKGBcZm9vYCBpcyBlbXB0eSB1bnRpbCBub3RlZCBvdGhlcndpc2UpClxzZXFfbmV3Ok4g XGZvbwpcc2VxX2dldDpOTiBcZm9vIFxiYXoKXHRsX3Nob3c6TiBcYmF6ClxzZXFfZGlzcGxheTpO IFxmb28KClxzZXFfcG9wX2F1eDpubk5OIFx0bF9zZXQ6Tm4gXHRsX2dzZXQ6Tm4gXGZvbyBcYmF6 Clx0bF9zaG93Ok4gXGJhegpcc2VxX2Rpc3BsYXk6TiBcZm9vCgoKJSBOb3cgZm9yIGBcZm9vYCBu b24tZW1wdHkuClxzZXFfcHVzaDpObiBcZm9vIHthfQpcc2VxX3B1c2g6Tm4gXGZvbyB7fmR+XHVz ZV9ub25lOm4gXHFfc3RvcH0KXHNlcV9wdXNoOk5uIFxmb28ge3thfX0KXHNlcV9wdXNoOk5uIFxm b28ge1xzaW59ClxzZXFfcHVzaDpObiBcZm9vIHthfQpcc2VxX3B1c2g6Tm4gXGZvbyB7XGlmX2Zh bHNlOlxxX3JlY3Vyc2lvbl90YWlsIFxmaTp9ClxzZXFfZGlzcGxheTpOIFxmb28KClxNc2VxX2dl dDpOTiBcZm9vIFxiYXoKXHRsX3Nob3c6TiBcYmF6ClxzZXFfZGlzcGxheTpOIFxmb28KClxncm91 cF9iZWdpbjoKXE1zZXFfcG9wX2F1eDpubk5OIFx0bF9zZXQ6Tm4gXHRsX2dzZXQ6Tm4gXGZvbyBc YmF6Clx0bF9zaG93Ok4gXGJhegpcc2VxX2Rpc3BsYXk6TiBcZm9vClxncm91cF9lbmQ6ClxzZXFf ZGlzcGxheTpOIFxmb28KCgpcTXNlcV9tYXBfaW5saW5lX2xhc3Q6Tm5uRiBcZm9vIAp7XGlvd190 ZXJtOm4geyMxfX0gCntcaW93X3Rlcm06biB7TGFzdDojMX19IAp7XGlvd190ZXJtOm4ge05vIGJy ZWFrIX19Cgpcc2VxX2Rpc3BsYXk6TiBcZm9vCgpcTXNlcV9tYXBfaW5saW5lX2xhc3Q6Tm5uRiBc Zm9vIAp7XGlvd190ZXJtOm4geyMxfX0gCntcTXNlcV9icmVhazpud24ge1xpb3dfdGVybTpuIHtC cmVhayF9fSBcaW93X3Rlcm06biB7TGFzdDojMX19CntcaW93X3Rlcm06biB7Tm8gYnJlYWshfX0K CgpcTXNlcV9tYXBfdmFyaWFibGU6Tk5uIFxmb28gXGJheiB7XHRsX3Nob3c6TiBcYmF6fQoKXHNl cV9kaXNwbGF5Ok4gXGZvbwoKXGlvd190ZXJtOnggeyAKICBcTXNlcV9tYXBfZnVuY3Rpb246Tm4g XGZvbyB7IFxpb3dfbmV3bGluZTogXGV4cF9ub3Q6biBcZXhwX2FmdGVyOndOIH0gCn0KClxNc2Vx X3JlbW92ZV9kdXBsaWNhdGVzOk4gXGZvbwoKXHNlcV9kaXNwbGF5Ok4gXGZvbwoKCgpcc2VxX2dl dF9yaWdodDpOTiBcZm9vIFxiYXoKXHRsX3Nob3c6TiBcYmF6Cgpcc2VxX3BvcF9yaWdodDpOIFxm b28KXHNlcV9kaXNwbGF5Ok4gXGZvbwpcc2VxX3BvcF9yaWdodDpOIFxmb28KXHNlcV9kaXNwbGF5 Ok4gXGZvbwpcc2VxX3BvcF9yaWdodDpOIFxmb28KXHNlcV9kaXNwbGF5Ok4gXGZvbwpcc2VxX3Bv cF9yaWdodDpOIFxmb28KXHNlcV9kaXNwbGF5Ok4gXGZvbwpcc2VxX3BvcF9yaWdodDpOIFxmb28K XHNlcV9kaXNwbGF5Ok4gXGZvbwpcc2VxX3BvcF9yaWdodDpOIFxmb28KXHNlcV9kaXNwbGF5Ok4g XGZvbwoKXHNlcV9wdXNoOk5uIFxmb28ge3thfX0KXHNlcV9wdXNoOk5uIFxmb28ge3tifX0KXHNl cV9wdXNoOk5uIFxmb28ge3tjfX0KXHNlcV9wdXNoOk5uIFxmb28ge3tkfX0KXHNlcV9wdXNoOk5u IFxmb28ge3tlfX0KClxzZXFfcG9wX3JpZ2h0Ok5OIFxmb28gXGJhegpcdGxfc2hvdzpOIFxiYXoK XHNlcV9wb3BfcmlnaHQ6Tk4gXGZvbyBcYmF6Clx0bF9zaG93Ok4gXGJhegpcc2VxX3BvcF9yaWdo dDpOTiBcZm9vIFxiYXoKXHRsX3Nob3c6TiBcYmF6ClxzZXFfcG9wX3JpZ2h0Ok5OIFxmb28gXGJh egpcdGxfc2hvdzpOIFxiYXoKXHNlcV9wb3BfcmlnaHQ6Tk4gXGZvbyBcYmF6Clx0bF9zaG93Ok4g XGJhegpcc2VxX3BvcF9yaWdodDpOTiBcZm9vIFxiYXoKXHRsX3Nob3c6TiBcYmF6CgoKClx0bF9z ZXQ6Tm4gXGxfZm9vX3RsIHthYmN9ClxNdGxfcHV0X2xlZnRfcmlnaHQ6Tm5uIFxsX2Zvb190bCB7 QUJDfSB7ZGVmfQpcdGxfc2hvdzpOIFxsX2Zvb190bAoKJSBhZGFwdGVkIGZyb20gbTNzZXEwMDIu bHZ0Clxjc19uZXc6TnBuIFxUUlVFIHtcaW93X3Rlcm06eCB7VHJ1ZX19Clxjc19uZXc6TnBuIFxG QUxTRSB7XGlvd190ZXJtOngge0ZhbHNlfX0KClxzZXFfY2xlYXI6TiBcbF90bXBhX3NlcQpcc2Vx X3B1c2g6Tm4gXGxfdG1wYV9zZXEge2FccGFyfQpcc2VxX3B1c2g6Tm4gXGxfdG1wYV9zZXEge2Jc cGFyfQpcc2VxX3B1c2g6Tm4gXGxfdG1wYV9zZXEge1paWn0KXHNlcV9wdXNoOk5uIFxsX3RtcGFf c2VxIHt9ClxzZXFfcHVzaDpObiBcbF90bXBhX3NlcSB7fn0KXHNlcV9wdXNoOk5uIFxsX3RtcGFf c2VxIHtccGFyfQpcc2VxX3B1c2g6Tm4gXGxfdG1wYV9zZXEge1xFUlJPUn0KXHNlcV9kaXNwbGF5 Ok4gXGxfdG1wYV9zZXEKCgpcc2VxX2lmX2luOk5uVEYgXGxfdG1wYV9zZXEge2F9ICAgICAge1xF UlJPUn0ge1xGQUxTRX0KXHNlcV9pZl9pbjpOblRGIFxsX3RtcGFfc2VxIHtaWn0gICAgIHtcRVJS T1J9IHtcRkFMU0V9ClxzZXFfaWZfaW46Tm5URiBcbF90bXBhX3NlcSB7YVxwYXJ9ICB7XFRSVUV9 ICB7XEVSUk9SfQpcc2VxX2lmX2luOk5uVEYgXGxfdG1wYV9zZXEge30gICAgICAge1xUUlVFfSAg e1xFUlJPUn0KXHNlcV9pZl9pbjpOblRGIFxsX3RtcGFfc2VxIHt+fSAgICAgIHtcVFJVRX0gIHtc RVJST1J9ClxzZXFfaWZfaW46Tm5URiBcbF90bXBhX3NlcSB7XHBhcn0gICB7XFRSVUV9ICB7XEVS Uk9SfQpcc2VxX2lmX2luOk5uVEYgXGxfdG1wYV9zZXEge1xFUlJPUn0ge1xUUlVFfSAge1xFUlJP Un0KClxzZXFfaWZfaW46Tm5UIFxsX3RtcGFfc2VxIHthXHBhcn0gIHtcVFJVRSBcdXNlX25vbmU6 bn0gXEVSUk9SIApcc2VxX2lmX2luOk5uVCBcbF90bXBhX3NlcSB7fSAgICAgICB7XFRSVUUgXHVz ZV9ub25lOm59IFxFUlJPUiAKXHNlcV9pZl9pbjpOblQgXGxfdG1wYV9zZXEge359ICAgICAge1xU UlVFIFx1c2Vfbm9uZTpufSBcRVJST1IgClxzZXFfaWZfaW46Tm5UIFxsX3RtcGFfc2VxIHtccGFy fSAgIHtcVFJVRSBcdXNlX25vbmU6bn0gXEVSUk9SIApcc2VxX2lmX2luOk5uVCBcbF90bXBhX3Nl cSB7XEVSUk9SfSB7XFRSVUUgXHVzZV9ub25lOm59IFxFUlJPUiAKClxzZXFfaWZfaW46Tm5GIFxs X3RtcGFfc2VxIHthfSAgICAge1xGQUxTRSBcdXNlX25vbmU6bn0gXEVSUk9SClxzZXFfaWZfaW46 Tm5GIFxsX3RtcGFfc2VxIHtaWn0gICAge1xGQUxTRSBcdXNlX25vbmU6bn0gXEVSUk9SCgoKXEV4 cGxTeW50YXhPZmYKXGVuZHtkb2N1bWVudH0KCgolIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQg dGhlcmUKJSBcTXNlcV9icmVhazpud24KJSBcTXNlcV9icmVhazp3bgolIFxNc2VxX2lmX2VtcHR5 X2JyZWFrOk4KJSBcTXNlcV9pZl9lbXB0eV9icmVhazpObgolIFxNc2VxX2dldDpOTgolIFxNc2Vx X2dldF9hdXg6dwolIFxNc2VxX3BvcF9hdXg6bm5OTgolIFxNc2VxX3BvcF9hdXg6dyAKJSBcTXNl cV9wb3BfYXV4X2VtcHR5Om5uTk4KJSBcTXRsX3B1dF9sZWZ0X3JpZ2h0Ok5ubgolIFx1c2VfaWlf aWlpX0Jpdl9pX3ZFOm5ubm5uCiUgXE1zZXFfcHV0X2F1eDpObm4KJSBcTXNlcV9tYXBfaW5saW5l X2xhc3Q6Tm5uRgolIFxNc2VxX21hcF9sYXN0X2F1eDp3CiUgXE1zZXFfbWFwX2lubGluZTpObgol IFxNc2VxX21hcF9pbmxpbmU6Tm5GCiUgXE1zZXFfbWFwX3ZhcmlhYmxlOk5ObgolIFxNc2VxX21h cF9mdW5jdGlvbl9hdXg6bndOCiUgXE1zZXFfbWFwX2Z1bmN0aW9uOk5uCiUgXE1zZXFfcmVtb3Zl X2R1cGxpY2F0ZXNfYXV4Ok5OCiUgXE1zZXFfcmVtb3ZlX2R1cGxpY2F0ZXNfYXV4Om4KJSBcTXNl cV9yZW1vdmVfZHVwbGljYXRlczpOCiUgXE1zZXFfZ3JlbW92ZV9kdXBsaWNhdGVzOk4KJSBcTXNl cV9wb3BfcmlnaHQ6TgolIFxNc2VxX2dwb3BfcmlnaHQ6TgolIFxNc2VxX3BvcF9yaWdodDpOTgol IFxNc2VxX2dwb3BfcmlnaHQ6Tk4KJSBcTXNlcV9wb3BfcmlnaHRfYXV4Ok5OTk4KJSBcTXNlcV9n ZXRfcmlnaHQ6Tk4KJSBcTXNlcV9nZ2V0X3JpZ2h0Ok5OCiUgXE1zZXFfZ2V0X3JpZ2h0X2F1eDpO Tk4KCg== --20cf305e25adccb96b049e62d759--